@envive-ai/react-hooks 0.2.6-alpha → 0.2.6-alpha-3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (410) hide show
  1. package/dist/{AmplitudeOperations-zFjk1Mkm.js → AmplitudeOperations-C3i2q2Bn.js} +2 -2
  2. package/dist/{AmplitudeOperations-CDe6oRn4.cjs → AmplitudeOperations-DcuLn1Zk.cjs} +2 -2
  3. package/dist/{NewOrgConfig-ChNJ3ZtC.js → NewOrgConfig-BtvujFC8.js} +2 -2
  4. package/dist/{NewOrgConfig-KHz61ikr.cjs → NewOrgConfig-CHt7Xg4t.cjs} +2 -2
  5. package/dist/{TrackComponentVisibleEvent-f8ahqV1g.js → TrackComponentVisibleEvent-Be7wfXXY.js} +3 -3
  6. package/dist/{TrackComponentVisibleEvent-uEzgBXb9.cjs → TrackComponentVisibleEvent-KUihr_y4.cjs} +3 -3
  7. package/dist/{api-1-73JxnF.js → api-D4HaU2Gf.js} +3 -3
  8. package/dist/{api-ZNG6wObS.cjs → api-D4Xoibs9.cjs} +3 -3
  9. package/dist/application/models/graphql/index.cjs +1 -1
  10. package/dist/application/models/graphql/index.js +1 -1
  11. package/dist/application/models/guards/api/index.cjs +3 -3
  12. package/dist/application/models/guards/api/index.js +3 -3
  13. package/dist/application/models/guards/utils.cjs +1 -1
  14. package/dist/application/models/guards/utils.js +1 -1
  15. package/dist/application/models/index.cjs +6 -6
  16. package/dist/application/models/index.js +6 -6
  17. package/dist/application/utils/index.cjs +17 -17
  18. package/dist/application/utils/index.d.cts +1 -1
  19. package/dist/application/utils/index.d.ts +2 -2
  20. package/dist/application/utils/index.js +17 -17
  21. package/dist/{atomStore-DAQvNPkh.js → atomStore-BuopbV9k.js} +1 -1
  22. package/dist/{atomStore-DD9g7Zw2.cjs → atomStore-CZKe3itM.cjs} +1 -1
  23. package/dist/atoms/app/index.cjs +17 -17
  24. package/dist/atoms/app/index.d.cts +7 -7
  25. package/dist/atoms/app/index.d.ts +6 -6
  26. package/dist/atoms/app/index.js +17 -17
  27. package/dist/atoms/atomStore/index.cjs +1 -1
  28. package/dist/atoms/atomStore/index.js +1 -1
  29. package/dist/atoms/chat/index.cjs +19 -19
  30. package/dist/atoms/chat/index.d.cts +32 -32
  31. package/dist/atoms/chat/index.d.ts +32 -32
  32. package/dist/atoms/chat/index.js +19 -19
  33. package/dist/atoms/globalSearch/index.cjs +1 -1
  34. package/dist/atoms/globalSearch/index.d.cts +6 -6
  35. package/dist/atoms/globalSearch/index.d.ts +6 -6
  36. package/dist/atoms/globalSearch/index.js +1 -1
  37. package/dist/atoms/org/index.cjs +2 -2
  38. package/dist/atoms/org/index.d.cts +16 -16
  39. package/dist/atoms/org/index.d.ts +16 -16
  40. package/dist/atoms/org/index.js +2 -2
  41. package/dist/atoms/search/index.cjs +6 -6
  42. package/dist/atoms/search/index.d.cts +15 -15
  43. package/dist/atoms/search/index.d.ts +14 -14
  44. package/dist/atoms/search/index.js +6 -6
  45. package/dist/atoms/search/utils.cjs +1 -1
  46. package/dist/atoms/search/utils.js +1 -1
  47. package/dist/{cdnContext-DT6J5nCw.js → cdnContext-B2-NiEiW.js} +2 -2
  48. package/dist/{cdnContext-BLNiW2HT.cjs → cdnContext-CdhppNeT.cjs} +2 -2
  49. package/dist/{chat-C0cgfkL8.js → chat-C9KdnT5V.js} +7 -7
  50. package/dist/{chat-DULmjtx1.cjs → chat-bImNRcnQ.cjs} +7 -7
  51. package/dist/{chatState-BrSfXIV4.cjs → chatState-DqWSgmjC.cjs} +3 -3
  52. package/dist/{chatState-Cn8JGAlH.js → chatState-DxG0t4fK.js} +3 -3
  53. package/dist/contexts/amplitudeContext/index.cjs +17 -17
  54. package/dist/contexts/amplitudeContext/index.js +17 -17
  55. package/dist/contexts/cdnContext/index.cjs +4 -4
  56. package/dist/contexts/cdnContext/index.d.cts +1 -1
  57. package/dist/contexts/cdnContext/index.js +4 -4
  58. package/dist/contexts/enviveConfigContext/index.cjs +4 -4
  59. package/dist/contexts/enviveConfigContext/index.d.cts +1 -1
  60. package/dist/contexts/enviveConfigContext/index.js +4 -4
  61. package/dist/contexts/enviveCssContext/index.cjs +14 -14
  62. package/dist/contexts/enviveCssContext/index.js +14 -14
  63. package/dist/contexts/featureFlagContext/index.cjs +5 -5
  64. package/dist/contexts/featureFlagContext/index.js +5 -5
  65. package/dist/contexts/featureFlagServiceContext/index.cjs +4 -4
  66. package/dist/contexts/featureFlagServiceContext/index.js +4 -4
  67. package/dist/contexts/graphqlContext/index.cjs +8 -8
  68. package/dist/contexts/graphqlContext/index.js +8 -8
  69. package/dist/contexts/localStorageContext/index.cjs +3 -3
  70. package/dist/contexts/localStorageContext/index.js +3 -3
  71. package/dist/contexts/newOrgConfigContext/index.cjs +13 -13
  72. package/dist/contexts/newOrgConfigContext/index.d.cts +1 -1
  73. package/dist/contexts/newOrgConfigContext/index.js +13 -13
  74. package/dist/contexts/searchContext/index.cjs +22 -22
  75. package/dist/contexts/searchContext/index.js +22 -22
  76. package/dist/contexts/sessionStorageContext/index.cjs +2 -2
  77. package/dist/contexts/sessionStorageContext/index.js +2 -2
  78. package/dist/contexts/systemSettingsContext/index.cjs +4 -4
  79. package/dist/contexts/systemSettingsContext/index.js +4 -4
  80. package/dist/contexts/userIdentityContext/index.cjs +17 -17
  81. package/dist/contexts/userIdentityContext/index.js +17 -17
  82. package/dist/{dist-BZX_Mgfn.cjs → dist-B7BErEyV.cjs} +1 -1
  83. package/dist/{dist-CIM4YRqp.js → dist-CtkINi1R.js} +1 -1
  84. package/dist/{domObserver-DKcas6tl.js → domObserver-B19-69gW.js} +1 -1
  85. package/dist/{domObserver-Do6RAJdf.cjs → domObserver-CwieVNgj.cjs} +1 -1
  86. package/dist/{enviveConfig-DrvYlCYG.js → enviveConfig-Be2kZE7j.js} +3 -3
  87. package/dist/{enviveConfig-DaotBKMS.cjs → enviveConfig-u50Rpz-G.cjs} +3 -3
  88. package/dist/{enviveConfigContext-BCnzgk4M.js → enviveConfigContext-1oiQuocd.js} +3 -3
  89. package/dist/{enviveConfigContext--89ejDs5.cjs → enviveConfigContext-kQfHEGdJ.cjs} +3 -3
  90. package/dist/exceptions/index.cjs +1 -1
  91. package/dist/exceptions/index.js +1 -1
  92. package/dist/{exceptions-BiSWJEl2.cjs → exceptions-BjDgLzGi.cjs} +1 -1
  93. package/dist/{exceptions-DSv0ZaH0.js → exceptions-CUGY31Ua.js} +1 -1
  94. package/dist/{featureFlagServiceContext-DpdlcjNb.js → featureFlagServiceContext-CPsygiHO.js} +3 -3
  95. package/dist/{featureFlagServiceContext-BztKnBPk.cjs → featureFlagServiceContext-pPneufeB.cjs} +3 -3
  96. package/dist/{globalSearch-nmrfGLOn.js → globalSearch-B_v9qfCT.js} +1 -1
  97. package/dist/{globalSearch-Cpc8egsM.cjs → globalSearch-OiF96VLG.cjs} +1 -1
  98. package/dist/{graphql-CWNkUHFV.js → graphql-CvAHWmel.js} +1 -1
  99. package/dist/{graphql-DT-H-lta.cjs → graphql-JaGqsToc.cjs} +1 -1
  100. package/dist/{graphqlContext-CWulFxxC.js → graphqlContext-BuXJ5DiW.js} +5 -5
  101. package/dist/{graphqlContext-B181y-sa.cjs → graphqlContext-CU7NIJo7.cjs} +5 -5
  102. package/dist/hooks/AmplitudeOperations/index.cjs +18 -18
  103. package/dist/hooks/AmplitudeOperations/index.d.cts +1 -1
  104. package/dist/hooks/AmplitudeOperations/index.js +18 -18
  105. package/dist/hooks/AppDetails/index.cjs +20 -20
  106. package/dist/hooks/AppDetails/index.d.cts +1 -1
  107. package/dist/hooks/AppDetails/index.js +20 -20
  108. package/dist/hooks/CdnOperations/index.cjs +4 -4
  109. package/dist/hooks/CdnOperations/index.d.cts +1 -1
  110. package/dist/hooks/CdnOperations/index.js +4 -4
  111. package/dist/hooks/ChatToggle/index.cjs +19 -19
  112. package/dist/hooks/ChatToggle/index.js +19 -19
  113. package/dist/hooks/ChatToggleAnalytics/index.cjs +19 -19
  114. package/dist/hooks/ChatToggleAnalytics/index.js +19 -19
  115. package/dist/hooks/CustomerSupportHandoff/index.cjs +1 -1
  116. package/dist/hooks/CustomerSupportHandoff/index.js +1 -1
  117. package/dist/hooks/ElementObserver/index.cjs +1 -1
  118. package/dist/hooks/ElementObserver/index.js +1 -1
  119. package/dist/hooks/GraphQLConfig/index.cjs +9 -9
  120. package/dist/hooks/GraphQLConfig/index.js +9 -9
  121. package/dist/hooks/IdentifyUser/index.cjs +17 -17
  122. package/dist/hooks/IdentifyUser/index.js +17 -17
  123. package/dist/hooks/ImageResolver/index.cjs +3 -3
  124. package/dist/hooks/ImageResolver/index.js +3 -3
  125. package/dist/hooks/LocalStorageOperations/index.cjs +3 -3
  126. package/dist/hooks/LocalStorageOperations/index.js +3 -3
  127. package/dist/hooks/MessageFilter/index.cjs +1 -1
  128. package/dist/hooks/MessageFilter/index.js +1 -1
  129. package/dist/hooks/NewOrgConfig/index.cjs +14 -14
  130. package/dist/hooks/NewOrgConfig/index.d.cts +2 -2
  131. package/dist/hooks/NewOrgConfig/index.d.ts +2 -2
  132. package/dist/hooks/NewOrgConfig/index.js +14 -14
  133. package/dist/hooks/Search/index.cjs +31 -31
  134. package/dist/hooks/Search/index.js +31 -31
  135. package/dist/hooks/SearchOperations/index.cjs +22 -22
  136. package/dist/hooks/SearchOperations/index.js +22 -22
  137. package/dist/hooks/SessionStorageOperations/index.cjs +2 -2
  138. package/dist/hooks/SessionStorageOperations/index.js +2 -2
  139. package/dist/hooks/ShopifyUrlOperations/index.d.cts +2 -2
  140. package/dist/hooks/ShopifyUrlOperations/index.d.ts +2 -2
  141. package/dist/hooks/SystemSettingsContext/index.cjs +4 -4
  142. package/dist/hooks/SystemSettingsContext/index.d.cts +3 -3
  143. package/dist/hooks/SystemSettingsContext/index.d.ts +4 -4
  144. package/dist/hooks/SystemSettingsContext/index.js +4 -4
  145. package/dist/hooks/TrackComponentVisibleEvent/index.cjs +18 -18
  146. package/dist/hooks/TrackComponentVisibleEvent/index.js +18 -18
  147. package/dist/hooks/UpdateAnalyticsProps/index.cjs +17 -17
  148. package/dist/hooks/UpdateAnalyticsProps/index.js +17 -17
  149. package/dist/index-B4cSHxVN.d.ts +1 -1
  150. package/dist/index-Dzv6WwSZ.d.ts +1 -1
  151. package/dist/interceptors/index.cjs +1 -1
  152. package/dist/interceptors/index.js +1 -1
  153. package/dist/{localStorageContext-DbWl7Row.cjs → localStorageContext-Bb2b_3ue.cjs} +3 -3
  154. package/dist/{localStorageContext-DSpmlfyr.js → localStorageContext-D2uXKahw.js} +3 -3
  155. package/dist/{logger-DCs3_11o.js → logger-BMVdhQOV.js} +1 -1
  156. package/dist/{logger-BF6iGSVd.cjs → logger-BqHq67zN.cjs} +1 -1
  157. package/dist/{models-DEJUuKYQ.js → models-DmsMlaHT.js} +5 -5
  158. package/dist/{models-158fyHt9.cjs → models-wh2gh_Qz.cjs} +5 -5
  159. package/dist/{newOrgConfigAtom-BuQE_zPK.js → newOrgConfigAtom-Dsk0fJNR.js} +1 -1
  160. package/dist/{newOrgConfigAtom-rrYHmp1b.cjs → newOrgConfigAtom-hs5A1pbZ.cjs} +1 -1
  161. package/dist/{newOrgConfigContext-C0LzIRJ7.js → newOrgConfigContext-DPUxIF2G.js} +5 -5
  162. package/dist/{newOrgConfigContext-BVrzYatq.cjs → newOrgConfigContext-lw85mMS-.cjs} +5 -5
  163. package/dist/nodeSelector-Cj-Xl1LP.d.cts +1 -1
  164. package/dist/{org-CVjyv-gv.cjs → org-C2kLSSe9.cjs} +1 -1
  165. package/dist/{org-Ct9Vjv1J.js → org-CIczyLRP.js} +1 -1
  166. package/dist/{search-DLHzcbfP.js → search-BzXoTgRx.js} +5 -5
  167. package/dist/{search-C0TAcTeY.cjs → search-D1cU29CV.cjs} +5 -5
  168. package/dist/{searchContext-Dmtue5QO.js → searchContext-C8DpjnqD.js} +7 -7
  169. package/dist/{searchContext-l_23fiuP.cjs → searchContext-R_XuFzYe.cjs} +7 -7
  170. package/dist/{searchServiceAdapter-B0h7psvh.js → searchServiceAdapter-CKc7UXKi.js} +1 -1
  171. package/dist/{searchServiceAdapter-BclWy4fE.cjs → searchServiceAdapter-pROGm3Rf.cjs} +1 -1
  172. package/dist/{sessionStorageContext-BOyr7mIM.cjs → sessionStorageContext-ByaTsDUC.cjs} +2 -2
  173. package/dist/{sessionStorageContext-ClXN9eX4.js → sessionStorageContext-DKE97oMv.js} +2 -2
  174. package/dist/{systemSettingsContext-CksCdpiU.js → systemSettingsContext-B-FZ8UAg.js} +2 -2
  175. package/dist/{systemSettingsContext-Cb5kczBD.cjs → systemSettingsContext-J1sny8W8.cjs} +2 -2
  176. package/dist/types/index.cjs +1 -1
  177. package/dist/types/index.js +1 -1
  178. package/dist/{types-18QXD2rd.cjs → types-1iJ_FnQQ.cjs} +1 -1
  179. package/dist/{types-DQC1pHqD.js → types-D5du68Vp.js} +1 -1
  180. package/dist/{useAppDetails-BJFRSYbI.js → useAppDetails-BtK9ZZJs.js} +4 -4
  181. package/dist/{useAppDetails-Czn-5FzP.cjs → useAppDetails-Bw2jJ39H.cjs} +4 -4
  182. package/dist/{useGraphQLConfig-BEtX5pDM.cjs → useGraphQLConfig-Dc8h2yyN.cjs} +2 -2
  183. package/dist/{useGraphQLConfig-Dkcrz1YL.js → useGraphQLConfig-DuLB3tdv.js} +2 -2
  184. package/dist/{utils-CEKzBcN2.js → utils-B1LVzQYK.js} +1 -1
  185. package/dist/{utils-CqVRbvfN.cjs → utils-BivlGkeU.cjs} +1 -1
  186. package/dist/{utils-DQhbbAnt.js → utils-CExht7Uj.js} +1 -1
  187. package/dist/{utils-CsMbZmRw.cjs → utils-CiJLDPjY.cjs} +1 -1
  188. package/dist/{utils-CPvqOk0g.cjs → utils-DqNhRm2b.cjs} +14 -14
  189. package/dist/{utils-N47VsL9W.js → utils-IogJwDB9.js} +13 -13
  190. package/package.json +1 -1
  191. package/src/hooks/Search/useSearch.tsx +11 -11
  192. package/src/hooks/Search/useSearchInput.ts +19 -9
  193. package/dist/src/application/commerce-api.js +0 -406
  194. package/dist/src/application/logging/logger.js +0 -16
  195. package/dist/src/application/models/graphql/index.js +0 -3
  196. package/dist/src/application/models/graphql/queries/getMerchantColorsQuery.js +0 -13
  197. package/dist/src/application/models/graphql/queries/getMerchantFrontendConfigQuery.js +0 -13
  198. package/dist/src/application/models/graphql/queries/getMerchantOrgIdQuery.js +0 -10
  199. package/dist/src/application/models/guards/api/index.js +0 -12
  200. package/dist/src/application/models/guards/api/isApiFormResponse.js +0 -59
  201. package/dist/src/application/models/guards/api/isApiFormSubmittedResponseAttributes.js +0 -22
  202. package/dist/src/application/models/guards/api/isApiOrderResponseAttributes.js +0 -91
  203. package/dist/src/application/models/guards/api/isApiOrgConfigResults.js +0 -188
  204. package/dist/src/application/models/guards/api/isApiOrganizationConfig.js +0 -115
  205. package/dist/src/application/models/guards/api/isApiPDPEventAttributes.js +0 -16
  206. package/dist/src/application/models/guards/api/isApiPLPEventAttributes.js +0 -26
  207. package/dist/src/application/models/guards/api/isApiPageResponseAttributes.js +0 -15
  208. package/dist/src/application/models/guards/api/isApiProductResponseAttributes.js +0 -65
  209. package/dist/src/application/models/guards/api/isApiProductSearchAttributes.js +0 -15
  210. package/dist/src/application/models/guards/api/isApiProductSearchFilterAttributes.js +0 -10
  211. package/dist/src/application/models/guards/api/isApiQueryTypedEventAttributes.js +0 -4
  212. package/dist/src/application/models/guards/api/isApiResponse.js +0 -33
  213. package/dist/src/application/models/guards/api/isApiReviewResponseAttributes.js +0 -22
  214. package/dist/src/application/models/guards/api/isApiReviewRichInformation.js +0 -23
  215. package/dist/src/application/models/guards/api/isApiSearchEventAttributes.js +0 -20
  216. package/dist/src/application/models/guards/api/isApiSuggestion.js +0 -24
  217. package/dist/src/application/models/guards/api/isApiSuggestionClickedEventAttributes.js +0 -4
  218. package/dist/src/application/models/guards/api/isApiTextResponseAttributes.js +0 -4
  219. package/dist/src/application/models/guards/api/isApiUserEvent.js +0 -18
  220. package/dist/src/application/models/guards/graphQL/isGraphQLColorsConfig.js +0 -41
  221. package/dist/src/application/models/guards/isBaseEcommerceEvent.js +0 -14
  222. package/dist/src/application/models/guards/isGA4EcommerceEvent.js +0 -14
  223. package/dist/src/application/models/guards/isLegacyUAEcommerceEvent.js +0 -14
  224. package/dist/src/application/models/guards/isMobilePLPChatPlacementParameter.js +0 -4
  225. package/dist/src/application/models/guards/isSpanxTakeAQuizCtaParameter.js +0 -1
  226. package/dist/src/application/models/guards/isVariantInfo.js +0 -28
  227. package/dist/src/application/models/guards/utils.js +0 -34
  228. package/dist/src/application/models/index.js +0 -34
  229. package/dist/src/application/models/utils/snakeToCamelTransformer.js +0 -71
  230. package/dist/src/application/models/utils/stringToFulfillmentDisplayStatusEnumValue.js +0 -65
  231. package/dist/src/application/models/validators/validateGraphQLColorsConfig.js +0 -9
  232. package/dist/src/application/models/validators/validateGraphQLFrontendConfig.js +0 -420
  233. package/dist/src/application/models/validators/validateGraphQLOrgId.js +0 -6
  234. package/dist/src/application/models/validators/validateMobilePLPChatPlacementParameter.js +0 -9
  235. package/dist/src/application/models/validators/validateOrgConfigResults.js +0 -44
  236. package/dist/src/application/models/validators/validateOrganizationConfig.js +0 -34
  237. package/dist/src/application/models/validators/validateResponse.js +0 -173
  238. package/dist/src/application/models/validators/validateSuggestion.js +0 -13
  239. package/dist/src/application/models/validators/validateUserEvent.js +0 -91
  240. package/dist/src/application/utils/analyticsUtils.js +0 -94
  241. package/dist/src/application/utils/coreContextToApiContext.js +0 -8
  242. package/dist/src/application/utils/coreUserEventToApiUserEvent.js +0 -90
  243. package/dist/src/application/utils/divideArray.js +0 -7
  244. package/dist/src/application/utils/domObserver.js +0 -85
  245. package/dist/src/application/utils/elementObserver.js +0 -186
  246. package/dist/src/application/utils/imageFilter.js +0 -11
  247. package/dist/src/application/utils/index.js +0 -21
  248. package/dist/src/application/utils/merchantUtils.js +0 -15
  249. package/dist/src/application/utils/messageFromFormSubmittedEvent.js +0 -19
  250. package/dist/src/application/utils/messageFromQueryEvent.js +0 -35
  251. package/dist/src/application/utils/messageFromResponse.js +0 -123
  252. package/dist/src/application/utils/messageFromSuggestionEvent.js +0 -27
  253. package/dist/src/application/utils/mouseEventTypes.js +0 -1
  254. package/dist/src/application/utils/mutationHelper.js +0 -33
  255. package/dist/src/application/utils/nextMessageRequestToApiRequest.js +0 -29
  256. package/dist/src/application/utils/nodeSelector.js +0 -101
  257. package/dist/src/application/utils/overrides.js +0 -144
  258. package/dist/src/application/utils/stringUtils.js +0 -47
  259. package/dist/src/application/utils/supportedEventRequestToApiRequest.js +0 -7
  260. package/dist/src/application/utils/urlsParser.js +0 -33
  261. package/dist/src/application/utils/validation.js +0 -5
  262. package/dist/src/atoms/amplitude/amplitudeTrackEventAtom.js +0 -4
  263. package/dist/src/atoms/app/index.js +0 -23
  264. package/dist/src/atoms/app/variant.js +0 -102
  265. package/dist/src/atoms/atomStore/atomStore.js +0 -28
  266. package/dist/src/atoms/atomStore/index.js +0 -1
  267. package/dist/src/atoms/chat/chatState.js +0 -33
  268. package/dist/src/atoms/chat/form.js +0 -16
  269. package/dist/src/atoms/chat/index.js +0 -23
  270. package/dist/src/atoms/chat/lastMessage.js +0 -10
  271. package/dist/src/atoms/chat/messageQueue.js +0 -68
  272. package/dist/src/atoms/chat/performanceMetrics.js +0 -70
  273. package/dist/src/atoms/chat/renderedWidgetRefs.js +0 -24
  274. package/dist/src/atoms/chat/replies.js +0 -43
  275. package/dist/src/atoms/chat/suggestions.js +0 -29
  276. package/dist/src/atoms/envive/enviveConfig.js +0 -67
  277. package/dist/src/atoms/globalSearch/globalSearch.js +0 -8
  278. package/dist/src/atoms/globalSearch/index.js +0 -1
  279. package/dist/src/atoms/org/customerService.js +0 -6
  280. package/dist/src/atoms/org/graphqlConfig.js +0 -8
  281. package/dist/src/atoms/org/index.js +0 -4
  282. package/dist/src/atoms/org/newOrgConfigAtom.js +0 -2
  283. package/dist/src/atoms/org/orgAnalyticsConfig.js +0 -8
  284. package/dist/src/atoms/search/index.js +0 -1
  285. package/dist/src/atoms/search/productFilters.js +0 -163
  286. package/dist/src/atoms/search/productRetrievalAPI.js +0 -50
  287. package/dist/src/atoms/search/productRetrievalAdapter.js +0 -14
  288. package/dist/src/atoms/search/productSorter.js +0 -13
  289. package/dist/src/atoms/search/searchAPI.js +0 -140
  290. package/dist/src/atoms/search/searchServiceAdapter.js +0 -14
  291. package/dist/src/atoms/search/utils.js +0 -15
  292. package/dist/src/config/index.js +0 -1
  293. package/dist/src/config/locators/components/chat/entrypoints.js +0 -10
  294. package/dist/src/config/locators/components/chat/index.js +0 -21
  295. package/dist/src/config/locators/components/chat/preview.js +0 -11
  296. package/dist/src/config/locators/components/chat/variants/index.js +0 -12
  297. package/dist/src/config/locators/components/common/buttons.js +0 -6
  298. package/dist/src/config/locators/components/common/cards.js +0 -17
  299. package/dist/src/config/locators/components/common/index.js +0 -4
  300. package/dist/src/config/locators/components/common/links.js +0 -1
  301. package/dist/src/config/locators/components/common/tables.js +0 -1
  302. package/dist/src/config/locators/components/floating-button.js +0 -2
  303. package/dist/src/config/locators/components/index.js +0 -3
  304. package/dist/src/config/locators/components/report-issue.js +0 -13
  305. package/dist/src/config/locators/components/search/index.js +0 -5
  306. package/dist/src/config/locators/components/shadow-dom.js +0 -1
  307. package/dist/src/config/locators/embedded.js +0 -20
  308. package/dist/src/config/locators/index.js +0 -4
  309. package/dist/src/contexts/amplitudeContext/amplitudeContext.js +0 -292
  310. package/dist/src/contexts/amplitudeContext/index.js +0 -1
  311. package/dist/src/contexts/cdnContext/cdnContext.js +0 -28
  312. package/dist/src/contexts/cdnContext/index.js +0 -1
  313. package/dist/src/contexts/enviveConfigContext/enviveConfigContext.js +0 -37
  314. package/dist/src/contexts/enviveConfigContext/index.js +0 -1
  315. package/dist/src/contexts/enviveCssContext/enviveCssContext.js +0 -31
  316. package/dist/src/contexts/enviveCssContext/index.js +0 -1
  317. package/dist/src/contexts/featureFlagContext/featureFlagContext.js +0 -109
  318. package/dist/src/contexts/featureFlagContext/index.js +0 -1
  319. package/dist/src/contexts/featureFlagServiceContext/featureFlagServiceContext.js +0 -47
  320. package/dist/src/contexts/featureFlagServiceContext/index.js +0 -1
  321. package/dist/src/contexts/graphqlContext/graphqlContext.js +0 -87
  322. package/dist/src/contexts/graphqlContext/index.js +0 -1
  323. package/dist/src/contexts/localStorageContext/index.js +0 -1
  324. package/dist/src/contexts/localStorageContext/localStorageContext.js +0 -95
  325. package/dist/src/contexts/newOrgConfigContext/index.js +0 -1
  326. package/dist/src/contexts/newOrgConfigContext/newOrgConfigContext.js +0 -33
  327. package/dist/src/contexts/searchContext/index.js +0 -1
  328. package/dist/src/contexts/searchContext/searchContext.js +0 -131
  329. package/dist/src/contexts/sessionStorageContext/index.js +0 -1
  330. package/dist/src/contexts/sessionStorageContext/sessionStorageContext.js +0 -43
  331. package/dist/src/contexts/shopifyUrlContext/index.js +0 -1
  332. package/dist/src/contexts/shopifyUrlContext/shopifyUrlContext.js +0 -62
  333. package/dist/src/contexts/systemSettingsContext/index.js +0 -1
  334. package/dist/src/contexts/systemSettingsContext/systemSettingsContext.js +0 -29
  335. package/dist/src/contexts/userIdentityContext/index.js +0 -1
  336. package/dist/src/contexts/userIdentityContext/userIdentityContext.js +0 -118
  337. package/dist/src/events/index.js +0 -51
  338. package/dist/src/events/registerAnalyticsListeners.js +0 -32
  339. package/dist/src/exceptions/index.js +0 -2
  340. package/dist/src/exceptions/sessionExceptions.js +0 -6
  341. package/dist/src/exceptions/unsupportedProductExceptions.js +0 -6
  342. package/dist/src/hooks/AmplitudeOperations/index.js +0 -1
  343. package/dist/src/hooks/AmplitudeOperations/useAmplitudeOperations.js +0 -24
  344. package/dist/src/hooks/AppDetails/index.js +0 -1
  345. package/dist/src/hooks/AppDetails/useAppDetails.js +0 -26
  346. package/dist/src/hooks/BlockBackButton/index.js +0 -1
  347. package/dist/src/hooks/BlockBackButton/useBlockBackButton.js +0 -23
  348. package/dist/src/hooks/CdnOperations/index.js +0 -1
  349. package/dist/src/hooks/CdnOperations/useCdnOperations.js +0 -13
  350. package/dist/src/hooks/ChatToggle/index.js +0 -1
  351. package/dist/src/hooks/ChatToggle/useChatToggle.js +0 -50
  352. package/dist/src/hooks/ChatToggleAnalytics/index.js +0 -1
  353. package/dist/src/hooks/ChatToggleAnalytics/useChatToggleAnalytics.js +0 -11
  354. package/dist/src/hooks/CustomerSupportHandoff/index.js +0 -1
  355. package/dist/src/hooks/CustomerSupportHandoff/useCustomerSupportHandoff.js +0 -32
  356. package/dist/src/hooks/Debounce/index.js +0 -1
  357. package/dist/src/hooks/Debounce/useDebounce.js +0 -13
  358. package/dist/src/hooks/ElementObserver/index.js +0 -1
  359. package/dist/src/hooks/ElementObserver/useElementObserver.js +0 -208
  360. package/dist/src/hooks/GrabAndScroll/index.js +0 -1
  361. package/dist/src/hooks/GrabAndScroll/useGrabAndScroll.js +0 -105
  362. package/dist/src/hooks/GraphQLConfig/index.js +0 -1
  363. package/dist/src/hooks/GraphQLConfig/useGraphQLConfig.js +0 -54
  364. package/dist/src/hooks/IdentifyUser/index.js +0 -1
  365. package/dist/src/hooks/IdentifyUser/useIdentifyUser.js +0 -28
  366. package/dist/src/hooks/ImageResolver/index.js +0 -1
  367. package/dist/src/hooks/ImageResolver/useImageResolver.js +0 -45
  368. package/dist/src/hooks/Intersection/index.js +0 -1
  369. package/dist/src/hooks/Intersection/useIntersection.js +0 -20
  370. package/dist/src/hooks/IsSmallScreen/index.js +0 -1
  371. package/dist/src/hooks/IsSmallScreen/useIsSmallScreen.js +0 -16
  372. package/dist/src/hooks/LocalStorageOperations/index.js +0 -1
  373. package/dist/src/hooks/LocalStorageOperations/useLocalStorageOperations.js +0 -64
  374. package/dist/src/hooks/MessageFilter/index.js +0 -1
  375. package/dist/src/hooks/MessageFilter/useMessageFilter.js +0 -37
  376. package/dist/src/hooks/MessageScrollObserver/index.js +0 -1
  377. package/dist/src/hooks/MessageScrollObserver/useMessageScrollObserver.js +0 -35
  378. package/dist/src/hooks/NewOrgConfig/index.js +0 -1
  379. package/dist/src/hooks/NewOrgConfig/useNewOrgConfig.js +0 -5
  380. package/dist/src/hooks/Search/index.js +0 -1
  381. package/dist/src/hooks/Search/useRecommendedProducts.js +0 -35
  382. package/dist/src/hooks/Search/useSearch.js +0 -224
  383. package/dist/src/hooks/Search/useSearchInput.js +0 -183
  384. package/dist/src/hooks/SearchOperations/index.js +0 -1
  385. package/dist/src/hooks/SearchOperations/useSearchOperations.js +0 -78
  386. package/dist/src/hooks/SessionStorageOperations/index.js +0 -1
  387. package/dist/src/hooks/SessionStorageOperations/useSessionStorageOperations.js +0 -20
  388. package/dist/src/hooks/ShopifyUrlOperations/index.js +0 -1
  389. package/dist/src/hooks/ShopifyUrlOperations/useShopifyUrlOperations.js +0 -34
  390. package/dist/src/hooks/SnapCalculator/index.js +0 -1
  391. package/dist/src/hooks/SnapCalculator/useSnapCalculator.js +0 -22
  392. package/dist/src/hooks/SystemSettingsContext/index.js +0 -1
  393. package/dist/src/hooks/SystemSettingsContext/useSystemSettingsContext.js +0 -9
  394. package/dist/src/hooks/TrackComponentVisibleEvent/index.js +0 -1
  395. package/dist/src/hooks/TrackComponentVisibleEvent/useTrackComponentVisibleEvent.js +0 -45
  396. package/dist/src/hooks/UpdateAnalyticsProps/index.js +0 -1
  397. package/dist/src/hooks/UpdateAnalyticsProps/useUpdateAnalyticsProps.js +0 -43
  398. package/dist/src/hooks/utils.js +0 -116
  399. package/dist/src/interceptors/index.js +0 -1
  400. package/dist/src/interceptors/useMessageInterceptor.js +0 -24
  401. package/dist/src/types/ApiResponse.js +0 -1
  402. package/dist/src/types/FilterAttribute.js +0 -3
  403. package/dist/src/types/Message.js +0 -24
  404. package/dist/src/types/Suggestion.js +0 -3
  405. package/dist/src/types/index.js +0 -4
  406. package/dist/src/util/colorVar.js +0 -3
  407. package/dist/src/util/configVersion.js +0 -4
  408. package/dist/src/util/domInsertion.js +0 -16
  409. /package/dist/{featureFlagServiceContext-bI7ZLz4r.js → featureFlagServiceContext-CbUOAw5l.js} +0 -0
  410. /package/dist/{featureFlagServiceContext-B4ash4vz.cjs → featureFlagServiceContext-DSo2brno.cjs} +0 -0
@@ -5920,4 +5920,4 @@ var ApiUserEventCategory = import_dist.UserEventCategory;
5920
5920
 
5921
5921
  //#endregion
5922
5922
  export { ApiResponseCategory, DOMInsertionType, FeatureGates, GridInsertionType, LocalStorageKeys, MessageRole, MessageType, OrgShortName, PageVariantTestType, ProductExperiment, ProductSorting, SpiffyEvent, SpiffyEventName, SpiffyMetricsEventName, SpiffyWidgets, VariantTypeEnum };
5923
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlzdC1DSU00WVJxcC5qcyIsIm5hbWVzIjpbIkJhc2VBUEkiXSwic291cmNlcyI6WyIuLi9ub2RlX21vZHVsZXMvQGVudml2ZS1haS90eXBlcy9kaXN0L2luZGV4LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vI3JlZ2lvbiByb2xsZG93bjpydW50aW1lXG52YXIgX19jcmVhdGUgPSBPYmplY3QuY3JlYXRlO1xudmFyIF9fZGVmUHJvcCA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBfX2dldE93blByb3BEZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbnZhciBfX2dldE93blByb3BOYW1lcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzO1xudmFyIF9fZ2V0UHJvdG9PZiA9IE9iamVjdC5nZXRQcm90b3R5cGVPZjtcbnZhciBfX2hhc093blByb3AgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIF9fY29tbW9uSlMgPSAoY2IsIG1vZCkgPT4gZnVuY3Rpb24oKSB7XG5cdHJldHVybiBtb2QgfHwgKDAsIGNiW19fZ2V0T3duUHJvcE5hbWVzKGNiKVswXV0pKChtb2QgPSB7IGV4cG9ydHM6IHt9IH0pLmV4cG9ydHMsIG1vZCksIG1vZC5leHBvcnRzO1xufTtcbnZhciBfX2NvcHlQcm9wcyA9ICh0bywgZnJvbSwgZXhjZXB0LCBkZXNjKSA9PiB7XG5cdGlmIChmcm9tICYmIHR5cGVvZiBmcm9tID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBmcm9tID09PSBcImZ1bmN0aW9uXCIpIGZvciAodmFyIGtleXMgPSBfX2dldE93blByb3BOYW1lcyhmcm9tKSwgaSA9IDAsIG4gPSBrZXlzLmxlbmd0aCwga2V5OyBpIDwgbjsgaSsrKSB7XG5cdFx0a2V5ID0ga2V5c1tpXTtcblx0XHRpZiAoIV9faGFzT3duUHJvcC5jYWxsKHRvLCBrZXkpICYmIGtleSAhPT0gZXhjZXB0KSBfX2RlZlByb3AodG8sIGtleSwge1xuXHRcdFx0Z2V0OiAoKGspID0+IGZyb21ba10pLmJpbmQobnVsbCwga2V5KSxcblx0XHRcdGVudW1lcmFibGU6ICEoZGVzYyA9IF9fZ2V0T3duUHJvcERlc2MoZnJvbSwga2V5KSkgfHwgZGVzYy5lbnVtZXJhYmxlXG5cdFx0fSk7XG5cdH1cblx0cmV0dXJuIHRvO1xufTtcbnZhciBfX3RvRVNNID0gKG1vZCwgaXNOb2RlTW9kZSwgdGFyZ2V0KSA9PiAodGFyZ2V0ID0gbW9kICE9IG51bGwgPyBfX2NyZWF0ZShfX2dldFByb3RvT2YobW9kKSkgOiB7fSwgX19jb3B5UHJvcHMoaXNOb2RlTW9kZSB8fCAhbW9kIHx8ICFtb2QuX19lc01vZHVsZSA/IF9fZGVmUHJvcCh0YXJnZXQsIFwiZGVmYXVsdFwiLCB7XG5cdHZhbHVlOiBtb2QsXG5cdGVudW1lcmFibGU6IHRydWVcbn0pIDogdGFyZ2V0LCBtb2QpKTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gc3JjL2FuYWx5dGljcy9Hb29nbGVBbmFseXRpY3NFdmVudHMudHNcbmxldCBHb29nbGVBbmFseXRpY3NFdmVudHMgPSAvKiBAX19QVVJFX18gKi8gZnVuY3Rpb24oR29vZ2xlQW5hbHl0aWNzRXZlbnRzJDEpIHtcblx0R29vZ2xlQW5hbHl0aWNzRXZlbnRzJDFbXCJBRERfVE9fQ0FSVF92MVwiXSA9IFwiYWRkX3RvX2NhcnRcIjtcblx0R29vZ2xlQW5hbHl0aWNzRXZlbnRzJDFbXCJBRERfVE9fQ0FSVF92MlwiXSA9IFwiYWRkVG9DYXJ0XCI7XG5cdHJldHVybiBHb29nbGVBbmFseXRpY3NFdmVudHMkMTtcbn0oe30pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiBzcmMvYW5hbHl0aWNzL1BlcmZNZXRyaWNzRXZlbnRzLnRzXG5sZXQgUGVyZk1ldHJpY3NFdmVudHMgPSAvKiBAX19QVVJFX18gKi8gZnVuY3Rpb24oUGVyZk1ldHJpY3NFdmVudHMkMSkge1xuXHRQZXJmTWV0cmljc0V2ZW50cyQxW1wiUGFnZUxvYWRPZmZzZXRcIl0gPSBcInBhZ2VfbG9hZF9vZmZzZXRfbXNcIjtcblx0UGVyZk1ldHJpY3NFdmVudHMkMVtcIk1haW5CdW5kbGVMb2FkZWRcIl0gPSBcIm1haW5fYnVuZGxlX2xvYWRlZF9tc1wiO1xuXHRQZXJmTWV0cmljc0V2ZW50cyQxW1wiT3JnQ29uZmlnTG9hZFN0YXJ0ZWRcIl0gPSBcIm9yZ19jb25maWdfbG9hZF9zdGFydGVkX21zXCI7XG5cdFBlcmZNZXRyaWNzRXZlbnRzJDFbXCJPcmdDb25maWdMb2FkRW5kZWRcIl0gPSBcIm9yZ19jb25maWdfbG9hZF9lbmRlZF9tc1wiO1xuXHRQZXJmTWV0cmljc0V2ZW50cyQxW1wiRmlyc3RSZXNwb25zZVN0YXJ0ZWRcIl0gPSBcImZpcnN0X3Jlc3BvbnNlX3N0YXJ0ZWRfbXNcIjtcblx0UGVyZk1ldHJpY3NFdmVudHMkMVtcIkZpcnN0UmVzcG9uc2VDb21wbGV0ZWRcIl0gPSBcImZpcnN0X3Jlc3BvbnNlX2NvbXBsZXRlZF9tc1wiO1xuXHRQZXJmTWV0cmljc0V2ZW50cyQxW1wiRmlyc3RTdWdnZXN0aW9uc1N0YXJ0ZWRcIl0gPSBcImZpcnN0X3N1Z2dlc3Rpb25zX3N0YXJ0ZWRfbXNcIjtcblx0UGVyZk1ldHJpY3NFdmVudHMkMVtcIkZpcnN0U3VnZ2VzdGlvbnNDb21wbGV0ZWRcIl0gPSBcImZpcnN0X3N1Z2dlc3Rpb25zX2NvbXBsZXRlZF9tc1wiO1xuXHRQZXJmTWV0cmljc0V2ZW50cyQxW1wiRW1iZWRkZWRXaWRnZXRSZW5kZXJlZFwiXSA9IFwiZW1iZWRkZWRfd2lkZ2V0X3JlbmRlcmVkX21zXCI7XG5cdFBlcmZNZXRyaWNzRXZlbnRzJDFbXCJGbG9hdGluZ0J1dHRvblJlbmRlcmVkXCJdID0gXCJmbG9hdGluZ19idXR0b25fcmVuZGVyZWRfbXNcIjtcblx0UGVyZk1ldHJpY3NFdmVudHMkMVtcIlRvcFN1Z2dlc3Rpb25zQmFyUmVuZGVyZWRcIl0gPSBcInRvcF9zdWdnZXN0aW9uc19iYXJfcmVuZGVyZWRfbXNcIjtcblx0UGVyZk1ldHJpY3NFdmVudHMkMVtcIkJvdHRvbVN1Z2dlc3Rpb25zQmFyUmVuZGVyZWRcIl0gPSBcImJvdHRvbV9zdWdnZXN0aW9uc19iYXJfcmVuZGVyZWRfbXNcIjtcblx0UGVyZk1ldHJpY3NFdmVudHMkMVtcIlNlYXJjaFByb21wdFJlbmRlcmVkXCJdID0gXCJzZWFyY2hfcHJvbXB0X3JlbmRlcmVkX21zXCI7XG5cdHJldHVybiBQZXJmTWV0cmljc0V2ZW50cyQxO1xufSh7fSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy9hbmFseXRpY3MvU3BpZmZ5RXZlbnQudHNcbmxldCBTcGlmZnlFdmVudCA9IC8qIEBfX1BVUkVfXyAqLyBmdW5jdGlvbihTcGlmZnlFdmVudCQxKSB7XG5cdFNwaWZmeUV2ZW50JDFbXCJBTVBMSVRVREVfRVZFTlRcIl0gPSBcIlNQSUZGWV9BTVBMSVRVREVfRVZFTlRcIjtcblx0U3BpZmZ5RXZlbnQkMVtcIkFQUF9JTklUSUFMSVpFRFwiXSA9IFwiU1BJRkZZX0FQUF9JTklUSUFMSVpFRFwiO1xuXHRTcGlmZnlFdmVudCQxW1wiQ0FMTF9NRVJDSEFOVF9BUFBcIl0gPSBcIlNQSUZGWV9DQUxMX01FUkNIQU5UX0FQUFwiO1xuXHRTcGlmZnlFdmVudCQxW1wiTU9VTlRJTkdfTUVSQ0hBTlRfQVBQXCJdID0gXCJTUElGRllfTU9VTlRJTkdfTUVSQ0hBTlRfQVBQXCI7XG5cdFNwaWZmeUV2ZW50JDFbXCJDSEFUX0ZBQ1RPUllfSU5JVElBTElaRURcIl0gPSBcIlNQSUZGWV9DSEFUX0ZBQ1RPUllfSU5JVElBTElaRURcIjtcblx0U3BpZmZ5RXZlbnQkMVtcIkZMT0FUSU5HX0NIQVRfUkVOREVSSU5HXCJdID0gXCJTUElGRllfRkxPQVRJTkdfQ0hBVF9SRU5ERVJJTkdcIjtcblx0U3BpZmZ5RXZlbnQkMVtcIkZMT0FUSU5HX0NIQVRfTk9UX1JFTkRFUklOR1wiXSA9IFwiU1BJRkZZX0ZMT0FUSU5HX0NIQVRfTk9UX1JFTkRFUklOR1wiO1xuXHRTcGlmZnlFdmVudCQxW1wiRkxPQVRJTkdfQ0hBVF9CVVRUT05fUkVOREVSSU5HXCJdID0gXCJTUElGRllfRkxPQVRJTkdfQ0hBVF9CVVRUT05fUkVOREVSSU5HXCI7XG5cdFNwaWZmeUV2ZW50JDFbXCJTSEFET1dfRE9NX0NPTlRBSU5FUl9SRUFEWVwiXSA9IFwiU1BJRkZZX1NIQURPV19ET01fQ09OVEFJTkVSX1JFQURZXCI7XG5cdHJldHVybiBTcGlmZnlFdmVudCQxO1xufSh7fSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy9hbmFseXRpY3MvU3BpZmZ5RXZlbnROYW1lLnRzXG5sZXQgU3BpZmZ5RXZlbnROYW1lID0gLyogQF9fUFVSRV9fICovIGZ1bmN0aW9uKFNwaWZmeUV2ZW50TmFtZSQxKSB7XG5cdFNwaWZmeUV2ZW50TmFtZSQxW1wiV2lkZ2V0T3BlblwiXSA9IFwic3BpZmZ5OndpZGdldG9wZW5cIjtcblx0U3BpZmZ5RXZlbnROYW1lJDFbXCJXaWRnZXRDbG9zZVwiXSA9IFwic3BpZmZ5OndpZGdldGNsb3NlXCI7XG5cdHJldHVybiBTcGlmZnlFdmVudE5hbWUkMTtcbn0oe30pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiBzcmMvYW5hbHl0aWNzL1NwaWZmeU1ldHJpY3NFdmVudE5hbWUudHNcbmxldCBTcGlmZnlNZXRyaWNzRXZlbnROYW1lID0gLyogQF9fUFVSRV9fICovIGZ1bmN0aW9uKFNwaWZmeU1ldHJpY3NFdmVudE5hbWUkMSkge1xuXHRTcGlmZnlNZXRyaWNzRXZlbnROYW1lJDFbXCJCdW5kbGVMb2FkZWRcIl0gPSBcIkJ1bmRsZSBMb2FkZWRcIjtcblx0U3BpZmZ5TWV0cmljc0V2ZW50TmFtZSQxW1wiQ2hhdExpdmVBZ2VudEJ0bkNsaWNrXCJdID0gXCJDaGF0IExpdmUgQWdlbnQgQnRuIENsaWNrXCI7XG5cdFNwaWZmeU1ldHJpY3NFdmVudE5hbWUkMVtcIkNoYXRGbG9hdGluZ0J1dHRvblZpc2libGVcIl0gPSBcIkNoYXQgRmxvYXRpbmcgQnV0dG9uIFZpc2libGVcIjtcblx0U3BpZmZ5TWV0cmljc0V2ZW50TmFtZSQxW1wiQ2hhdENvbXBvbmVudFZpc2libGVcIl0gPSBcIkNoYXQgQ29tcG9uZW50IFZpc2libGVcIjtcblx0U3BpZmZ5TWV0cmljc0V2ZW50TmFtZSQxW1wiQ2hhdENvbXBvbmVudEV4cGFuZGVkXCJdID0gXCJDaGF0IENvbXBvbmVudCBFeHBhbmRlZFwiO1xuXHRTcGlmZnlNZXRyaWNzRXZlbnROYW1lJDFbXCJDaGF0Q29tcG9uZW50Q29sbGFwc2VkXCJdID0gXCJDaGF0IENvbXBvbmVudCBDb2xsYXBzZWRcIjtcblx0U3BpZmZ5TWV0cmljc0V2ZW50TmFtZSQxW1wiQ2hhdFVzZXJNZXNzYWdlSW5wdXRcIl0gPSBcIkNoYXQgVXNlciBNZXNzYWdlIElucHV0XCI7XG5cdFNwaWZmeU1ldHJpY3NFdmVudE5hbWUkMVtcIkNoYXRTdWdnZXN0aW9uQ2xpY2tlZFwiXSA9IFwiQ2hhdCBTdWdnZXN0aW9uIENsaWNrZWRcIjtcblx0U3BpZmZ5TWV0cmljc0V2ZW50TmFtZSQxW1wiQ2hhdEFzc2lzdGFudFJlc3BvbnNlXCJdID0gXCJDaGF0IEFzc2lzdGFudCBSZXNwb25zZVwiO1xuXHRTcGlmZnlNZXRyaWNzRXZlbnROYW1lJDFbXCJQcm9kdWN0Q2FyZENsaWNrZWRcIl0gPSBcIlByb2R1Y3QgQ2FyZCBDbGlja2VkXCI7XG5cdFNwaWZmeU1ldHJpY3NFdmVudE5hbWUkMVtcIlByb2R1Y3RSZXZpZXdDYXJkQ2xpY2tlZFwiXSA9IFwiUHJvZHVjdCBSZXZpZXcgQ2FyZCBDbGlja2VkXCI7XG5cdFNwaWZmeU1ldHJpY3NFdmVudE5hbWUkMVtcIkFkZFRvQ2FydENsaWNrZWRcIl0gPSBcIkFkZCB0byBDYXJ0IENsaWNrZWRcIjtcblx0U3BpZmZ5TWV0cmljc0V2ZW50TmFtZSQxW1wiUHJvbXB0Q2FyZENsaWNrZWRcIl0gPSBcIlByb21wdCBDYXJkIENsaWNrZWRcIjtcblx0U3BpZmZ5TWV0cmljc0V2ZW50TmFtZSQxW1wiU3VwcG9ydGVkRXZlbnRcIl0gPSBcIlN1cHBvcnRlZCBFdmVudFwiO1xuXHRTcGlmZnlNZXRyaWNzRXZlbnROYW1lJDFbXCJTZWFyY2hCYWNrVG9SZXNwb25zZUNsaWNrZWRcIl0gPSBcIlNlYXJjaCBCYWNrIHRvIFJlc3BvbnNlIENsaWNrZWRcIjtcblx0U3BpZmZ5TWV0cmljc0V2ZW50TmFtZSQxW1wiUGVyZm9ybWFuY2VNZXRyaWNzXCJdID0gXCJQZXJmb3JtYW5jZSBNZXRyaWNzXCI7XG5cdFNwaWZmeU1ldHJpY3NFdmVudE5hbWUkMVtcIlNlYXJjaEJhckNsaWNrZWRcIl0gPSBcIlNlYXJjaCBCYXIgQ2xpY2tlZFwiO1xuXHRTcGlmZnlNZXRyaWNzRXZlbnROYW1lJDFbXCJPcmRlckxvb2t1cFN0YXJ0ZWRcIl0gPSBcIk9yZGVyIExvb2t1cCBTdGFydGVkXCI7XG5cdFNwaWZmeU1ldHJpY3NFdmVudE5hbWUkMVtcIk9yZGVyTG9va3VwRm9ybVN1Ym1pdHRlZFwiXSA9IFwiT3JkZXIgTG9va3VwIEZvcm0gU3VibWl0dGVkXCI7XG5cdFNwaWZmeU1ldHJpY3NFdmVudE5hbWUkMVtcIlNlYXJjaENvbXBvbmVudFZpc2libGVcIl0gPSBcIlNlYXJjaCBDb21wb25lbnQgVmlzaWJsZVwiO1xuXHRTcGlmZnlNZXRyaWNzRXZlbnROYW1lJDFbXCJTZWFyY2haZXJvU3RhdGVTdWdnZXN0aW9uQ2xpY2tlZFwiXSA9IFwiU2VhcmNoIFplcm8gU3RhdGUgU3VnZ2VzdGlvbiBDbGlja2VkXCI7XG5cdFNwaWZmeU1ldHJpY3NFdmVudE5hbWUkMVtcIlNlYXJjaElucHV0U3RhcnRlZFwiXSA9IFwiU2VhcmNoIElucHV0IFN0YXJ0ZWRcIjtcblx0U3BpZmZ5TWV0cmljc0V2ZW50TmFtZSQxW1wiU2VhcmNoUXVlcnlTdWJtaXR0ZWRcIl0gPSBcIlNlYXJjaCBRdWVyeSBTdWJtaXR0ZWRcIjtcblx0U3BpZmZ5TWV0cmljc0V2ZW50TmFtZSQxW1wiU2VhcmNoUmVzdWx0c1ZpZXdlZFwiXSA9IFwiU2VhcmNoIFJlc3VsdHMgVmlld2VkXCI7XG5cdFNwaWZmeU1ldHJpY3NFdmVudE5hbWUkMVtcIlNlYXJjaFRpbWVUb0ZpcnN0Q2xpY2tcIl0gPSBcIlNlYXJjaCBUaW1lIHRvIEZpcnN0IENsaWNrXCI7XG5cdFNwaWZmeU1ldHJpY3NFdmVudE5hbWUkMVtcIlNlYXJjaFplcm9SZXN1bHRzUmF0ZVwiXSA9IFwiU2VhcmNoIFplcm8gUmVzdWx0cyBSYXRlXCI7XG5cdFNwaWZmeU1ldHJpY3NFdmVudE5hbWUkMVtcIlNlYXJjaEZpbHRlckNsaWNrZWRcIl0gPSBcIlNlYXJjaCBGaWx0ZXIgQ2xpY2tlZFwiO1xuXHRTcGlmZnlNZXRyaWNzRXZlbnROYW1lJDFbXCJTZWFyY2hTb3J0Q2xpY2tlZFwiXSA9IFwiU2VhcmNoIFNvcnQgQ2xpY2tlZFwiO1xuXHRyZXR1cm4gU3BpZmZ5TWV0cmljc0V2ZW50TmFtZSQxO1xufSh7fSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy9jaGF0L0NoYXRFbGVtZW50RGlzcGxheUxvY2F0aW9uLnRzXG5sZXQgQ2hhdEVsZW1lbnREaXNwbGF5TG9jYXRpb24gPSAvKiBAX19QVVJFX18gKi8gZnVuY3Rpb24oQ2hhdEVsZW1lbnREaXNwbGF5TG9jYXRpb24kMSkge1xuXHRDaGF0RWxlbWVudERpc3BsYXlMb2NhdGlvbiQxW1wiSU5fQ0hBVFwiXSA9IFwiaW5fY2hhdFwiO1xuXHRDaGF0RWxlbWVudERpc3BsYXlMb2NhdGlvbiQxW1wiQ0hBVF9QUkVWSUVXXCJdID0gXCJjaGF0X3ByZXZpZXdcIjtcblx0Q2hhdEVsZW1lbnREaXNwbGF5TG9jYXRpb24kMVtcIkZMT0FUSU5HX0JVVFRPTlwiXSA9IFwiZmxvYXRpbmdfYnV0dG9uXCI7XG5cdENoYXRFbGVtZW50RGlzcGxheUxvY2F0aW9uJDFbXCJIRUxQX01FX0NIT09TRVwiXSA9IFwiaGVscF9tZV9jaG9vc2VcIjtcblx0Q2hhdEVsZW1lbnREaXNwbGF5TG9jYXRpb24kMVtcIlBMUF9JTUFHRV9CQU5ORVJcIl0gPSBcInBscF9pbWFnZV9iYW5uZXJcIjtcblx0Q2hhdEVsZW1lbnREaXNwbGF5TG9jYXRpb24kMVtcIlRPUF9SRVZJRVdTX1NOSVBQRVRcIl0gPSBcInRvcF9yZXZpZXdzX3NuaXBwZXRcIjtcblx0Q2hhdEVsZW1lbnREaXNwbGF5TG9jYXRpb24kMVtcIkJPVFRPTV9SRVZJRVdTX1NOSVBQRVRcIl0gPSBcImJvdHRvbV9yZXZpZXdzX3NuaXBwZXRcIjtcblx0Q2hhdEVsZW1lbnREaXNwbGF5TG9jYXRpb24kMVtcIkJMT0NLX0JBQ0tfQlVUVE9OXCJdID0gXCJibG9ja19iYWNrX2J1dHRvblwiO1xuXHRDaGF0RWxlbWVudERpc3BsYXlMb2NhdGlvbiQxW1wiU1dJVENIX1RPX0FHRU5UXCJdID0gXCJzd2l0Y2hfdG9fYWdlbnRcIjtcblx0Q2hhdEVsZW1lbnREaXNwbGF5TG9jYXRpb24kMVtcIkNPTlZFUlNBVElPTkFMX1NFQVJDSFwiXSA9IFwiY29udmVyc2F0aW9uYWxfc2VhcmNoXCI7XG5cdENoYXRFbGVtZW50RGlzcGxheUxvY2F0aW9uJDFbXCJHTE9CQUxfU0VBUkNIX0VOVFJZUE9JTlRcIl0gPSBcImdsb2JhbF9zZWFyY2hfZW50cnlwb2ludFwiO1xuXHRDaGF0RWxlbWVudERpc3BsYXlMb2NhdGlvbiQxW1wiU0VBUkNIX05BVl9FTlRSWVBPSU5UXCJdID0gXCJzZWFyY2hfbmF2X2VudHJ5cG9pbnRcIjtcblx0Q2hhdEVsZW1lbnREaXNwbGF5TG9jYXRpb24kMVtcIlNFQVJDSF9QUk9NUFRcIl0gPSBcInNlYXJjaF9wcm9tcHRcIjtcblx0Q2hhdEVsZW1lbnREaXNwbGF5TG9jYXRpb24kMVtcIlNFQVJDSF9QUk9NUFRfQlVUVE9OXCJdID0gXCJzZWFyY2hfcHJvbXB0X2J1dHRvblwiO1xuXHRDaGF0RWxlbWVudERpc3BsYXlMb2NhdGlvbiQxW1wiUFJPRFVDVF9HUklEXCJdID0gXCJwcm9kdWN0X2dyaWRcIjtcblx0Q2hhdEVsZW1lbnREaXNwbGF5TG9jYXRpb24kMVtcIlVOU1BFQ0lGSUVEXCJdID0gXCJ1bnNwZWNpZmllZFwiO1xuXHRDaGF0RWxlbWVudERpc3BsYXlMb2NhdGlvbiQxW1wiRklMVEVSX01PREFMXCJdID0gXCJmaWx0ZXJfbW9kYWxcIjtcblx0Q2hhdEVsZW1lbnREaXNwbGF5TG9jYXRpb24kMVtcIlBST01QVF9DQVJEXCJdID0gXCJwcm9tcHRfY2FyZFwiO1xuXHRDaGF0RWxlbWVudERpc3BsYXlMb2NhdGlvbiQxW1wiV0lORE9XX0FQSV9DQUxMXCJdID0gXCJ3aW5kb3dfYXBpX2NhbGxcIjtcblx0cmV0dXJuIENoYXRFbGVtZW50RGlzcGxheUxvY2F0aW9uJDE7XG59KHt9KTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gc3JjL2NoYXQvQ2hhdFN0YXRlLnRzXG5sZXQgQ2hhdFN0YXRlID0gLyogQF9fUFVSRV9fICovIGZ1bmN0aW9uKENoYXRTdGF0ZSQxKSB7XG5cdENoYXRTdGF0ZSQxW1wiSU5JVElBTFwiXSA9IFwiaW5pdGlhbFwiO1xuXHRDaGF0U3RhdGUkMVtcIkZPUk1cIl0gPSBcImZvcm1cIjtcblx0Q2hhdFN0YXRlJDFbXCJDSEFUXCJdID0gXCJjaGF0XCI7XG5cdHJldHVybiBDaGF0U3RhdGUkMTtcbn0oe30pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiBzcmMvY2hhdC9NZXNzYWdlLnRzXG5sZXQgTWVzc2FnZVJvbGUgPSAvKiBAX19QVVJFX18gKi8gZnVuY3Rpb24oTWVzc2FnZVJvbGUkMSkge1xuXHRNZXNzYWdlUm9sZSQxW1wiVXNlclwiXSA9IFwidXNlclwiO1xuXHRNZXNzYWdlUm9sZSQxW1wiQXNzaXN0YW50XCJdID0gXCJhc3Npc3RhbnRcIjtcblx0cmV0dXJuIE1lc3NhZ2VSb2xlJDE7XG59KHt9KTtcbmxldCBNZXNzYWdlVHlwZSA9IC8qIEBfX1BVUkVfXyAqLyBmdW5jdGlvbihNZXNzYWdlVHlwZSQxKSB7XG5cdE1lc3NhZ2VUeXBlJDFbXCJUZXh0XCJdID0gXCJ0ZXh0XCI7XG5cdE1lc3NhZ2VUeXBlJDFbXCJTdWdnZXN0aW9uQ2xpY2tlZFwiXSA9IFwic3VnZ2VzdGlvbl9jbGlja2VkXCI7XG5cdE1lc3NhZ2VUeXBlJDFbXCJQcm9kdWN0XCJdID0gXCJwcm9kdWN0XCI7XG5cdE1lc3NhZ2VUeXBlJDFbXCJQcm9kdWN0U2VhcmNoXCJdID0gXCJwcm9kdWN0X3NlYXJjaFwiO1xuXHRNZXNzYWdlVHlwZSQxW1wiUmV2aWV3XCJdID0gXCJyZXZpZXdcIjtcblx0TWVzc2FnZVR5cGUkMVtcIlF1ZXJ5VHlwZWRcIl0gPSBcInF1ZXJ5X3R5cGVkXCI7XG5cdE1lc3NhZ2VUeXBlJDFbXCJTZXBhcmF0b3JcIl0gPSBcInNlcGFyYXRvclwiO1xuXHRNZXNzYWdlVHlwZSQxW1wiUGFnZVwiXSA9IFwicGFnZVwiO1xuXHRNZXNzYWdlVHlwZSQxW1wiU2VhcmNoXCJdID0gXCJzZWFyY2hcIjtcblx0TWVzc2FnZVR5cGUkMVtcIkF0dGFjaG1lbnRcIl0gPSBcImF0dGFjaG1lbnRcIjtcblx0TWVzc2FnZVR5cGUkMVtcIkNYQWdlbnRSZXNwb25zZVwiXSA9IFwiY3hfYWdlbnRfcmVzcG9uc2VcIjtcblx0TWVzc2FnZVR5cGUkMVtcIkZvcm1cIl0gPSBcImZvcm1cIjtcblx0TWVzc2FnZVR5cGUkMVtcIk9yZGVyXCJdID0gXCJvcmRlclwiO1xuXHRNZXNzYWdlVHlwZSQxW1wiUHJvZHVjdFNlYXJjaEZpbHRlclwiXSA9IFwicHJvZHVjdF9zZWFyY2hfZmlsdGVyXCI7XG5cdHJldHVybiBNZXNzYWdlVHlwZSQxO1xufSh7fSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy9jaGF0L1N1Z2dlc3Rpb25CYXJMb2NhdGlvbkZvck1ldHJpY3MudHNcbmxldCBTdWdnZXN0aW9uQmFyTG9jYXRpb25Gb3JNZXRyaWNzID0gLyogQF9fUFVSRV9fICovIGZ1bmN0aW9uKFN1Z2dlc3Rpb25CYXJMb2NhdGlvbkZvck1ldHJpY3MkMSkge1xuXHRTdWdnZXN0aW9uQmFyTG9jYXRpb25Gb3JNZXRyaWNzJDFbXCJTVUdHRVNUSU9OX0JBUl9UT1BcIl0gPSBcInRvcFwiO1xuXHRTdWdnZXN0aW9uQmFyTG9jYXRpb25Gb3JNZXRyaWNzJDFbXCJTVUdHRVNUSU9OX0JBUl9CT1RUT01cIl0gPSBcImJvdHRvbVwiO1xuXHRyZXR1cm4gU3VnZ2VzdGlvbkJhckxvY2F0aW9uRm9yTWV0cmljcyQxO1xufSh7fSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy9jb25maWdzL0NvbG9yc0NvbmZpZy50c1xubGV0IENvbG9yTmFtZXMgPSAvKiBAX19QVVJFX18gKi8gZnVuY3Rpb24oQ29sb3JOYW1lcyQxKSB7XG5cdENvbG9yTmFtZXMkMVtcIlRleHRQcmltYXJ5XCJdID0gXCJ0ZXh0LXByaW1hcnlcIjtcblx0Q29sb3JOYW1lcyQxW1wiVGV4dFNlY29uZGFyeVwiXSA9IFwidGV4dC1zZWNvbmRhcnlcIjtcblx0Q29sb3JOYW1lcyQxW1wiVGV4dEFjY2VudFwiXSA9IFwidGV4dC1hY2NlbnRcIjtcblx0Q29sb3JOYW1lcyQxW1wiVGV4dExpbmtcIl0gPSBcInRleHQtbGlua1wiO1xuXHRDb2xvck5hbWVzJDFbXCJUZXh0TGlnaHRcIl0gPSBcInRleHQtbGlnaHRcIjtcblx0Q29sb3JOYW1lcyQxW1wiQmFja2dyb3VuZFByaW1hcnlcIl0gPSBcImJhY2tncm91bmQtcHJpbWFyeVwiO1xuXHRDb2xvck5hbWVzJDFbXCJCYWNrZ3JvdW5kU2Vjb25kYXJ5XCJdID0gXCJiYWNrZ3JvdW5kLXNlY29uZGFyeVwiO1xuXHRDb2xvck5hbWVzJDFbXCJCYWNrZ3JvdW5kU2Vjb25kYXJ5RGFya1wiXSA9IFwiYmFja2dyb3VuZC1zZWNvbmRhcnktZGFya1wiO1xuXHRDb2xvck5hbWVzJDFbXCJCYWNrZ3JvdW5kVGVydGlhcnlcIl0gPSBcImJhY2tncm91bmQtdGVydGlhcnlcIjtcblx0Q29sb3JOYW1lcyQxW1wiQmFja2dyb3VuZERhcmtcIl0gPSBcImJhY2tncm91bmQtZGFya1wiO1xuXHRDb2xvck5hbWVzJDFbXCJCYWNrZ3JvdW5kTGlnaHRcIl0gPSBcImJhY2tncm91bmQtbGlnaHRcIjtcblx0Q29sb3JOYW1lcyQxW1wiQmFja2dyb3VuZFNhdHVyYXRlZFwiXSA9IFwiYmFja2dyb3VuZC1zYXR1cmF0ZWRcIjtcblx0Q29sb3JOYW1lcyQxW1wiQm9yZGVyTGlnaHRcIl0gPSBcImJvcmRlci1saWdodFwiO1xuXHRDb2xvck5hbWVzJDFbXCJCb3JkZXJNZWRpdW1cIl0gPSBcImJvcmRlci1tZWRpdW1cIjtcblx0Q29sb3JOYW1lcyQxW1wiQm9yZGVyRGFya1wiXSA9IFwiYm9yZGVyLWRhcmtcIjtcblx0Q29sb3JOYW1lcyQxW1wiQm9yZGVyT3V0bGluZVwiXSA9IFwiYm9yZGVyLW91dGxpbmVcIjtcblx0Q29sb3JOYW1lcyQxW1wiQWNjZW50UHJpbWFyeVwiXSA9IFwiYWNjZW50LXByaW1hcnlcIjtcblx0Q29sb3JOYW1lcyQxW1wiQWNjZW50U2Vjb25kYXJ5XCJdID0gXCJhY2NlbnQtc2Vjb25kYXJ5XCI7XG5cdHJldHVybiBDb2xvck5hbWVzJDE7XG59KHt9KTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gc3JjL2NvcmUvQ3VzdG9tZXJTZXJ2aWNlLnRzXG5sZXQgQ3VzdG9tZXJTZXJ2aWNlVHlwZSA9IC8qIEBfX1BVUkVfXyAqLyBmdW5jdGlvbihDdXN0b21lclNlcnZpY2VUeXBlJDEpIHtcblx0Q3VzdG9tZXJTZXJ2aWNlVHlwZSQxW1wic2hvcGlmeVwiXSA9IFwic2hvcGlmeVwiO1xuXHRDdXN0b21lclNlcnZpY2VUeXBlJDFbXCJnb3JnaWFzXCJdID0gXCJnb3JnaWFzXCI7XG5cdEN1c3RvbWVyU2VydmljZVR5cGUkMVtcImt1c3RvbWVyXCJdID0gXCJrdXN0b21lclwiO1xuXHRDdXN0b21lclNlcnZpY2VUeXBlJDFbXCJncm9vdmVcIl0gPSBcImdyb292ZVwiO1xuXHRDdXN0b21lclNlcnZpY2VUeXBlJDFbXCJ0aWRpb1wiXSA9IFwidGlkaW9cIjtcblx0Q3VzdG9tZXJTZXJ2aWNlVHlwZSQxW1wiem93aWVcIl0gPSBcInpvd2llXCI7XG5cdEN1c3RvbWVyU2VydmljZVR5cGUkMVtcInJlZG9cIl0gPSBcInJlZG9cIjtcblx0Q3VzdG9tZXJTZXJ2aWNlVHlwZSQxW1wiZ2xhZGx5XCJdID0gXCJnbGFkbHlcIjtcblx0Q3VzdG9tZXJTZXJ2aWNlVHlwZSQxW1wicmljaHBhbmVsXCJdID0gXCJyaWNocGFuZWxcIjtcblx0Q3VzdG9tZXJTZXJ2aWNlVHlwZSQxW1wiemVuZGVza1wiXSA9IFwiemVuZGVza1wiO1xuXHRDdXN0b21lclNlcnZpY2VUeXBlJDFbXCJ1bnN1cHBvcnRlZFwiXSA9IFwidW5zdXBwb3J0ZWRcIjtcblx0cmV0dXJuIEN1c3RvbWVyU2VydmljZVR5cGUkMTtcbn0oe30pO1xubGV0IEN1c3RvbWVyU2VydmljZUludGVncmF0aW9uTW9kZSA9IC8qIEBfX1BVUkVfXyAqLyBmdW5jdGlvbihDdXN0b21lclNlcnZpY2VJbnRlZ3JhdGlvbk1vZGUkMSkge1xuXHRDdXN0b21lclNlcnZpY2VJbnRlZ3JhdGlvbk1vZGUkMVtcIm5vbmVcIl0gPSBcIm5vbmVcIjtcblx0Q3VzdG9tZXJTZXJ2aWNlSW50ZWdyYXRpb25Nb2RlJDFbXCJzaW1wbGVcIl0gPSBcInNpbXBsZVwiO1xuXHRDdXN0b21lclNlcnZpY2VJbnRlZ3JhdGlvbk1vZGUkMVtcImZ1bGxcIl0gPSBcImZ1bGxcIjtcblx0cmV0dXJuIEN1c3RvbWVyU2VydmljZUludGVncmF0aW9uTW9kZSQxO1xufSh7fSk7XG5sZXQgQ3VzdG9tZXJTZXJ2aWNlT3ZlcnJpZGVzID0gLyogQF9fUFVSRV9fICovIGZ1bmN0aW9uKEN1c3RvbWVyU2VydmljZU92ZXJyaWRlcyQxKSB7XG5cdEN1c3RvbWVyU2VydmljZU92ZXJyaWRlcyQxW1wiTEVHQUxfTUVTU0FHRVwiXSA9IFwic3BpZmZ5LWN1c3RvbWVyLXNlcnZpY2UtbGVnYWwtbWVzc2FnZVwiO1xuXHRDdXN0b21lclNlcnZpY2VPdmVycmlkZXMkMVtcIkRBUktfQlVUVE9OX0NPTlRBSU5FUlwiXSA9IFwic3BpZmZ5LWN1c3RvbWVyLXNlcnZpY2UtZGFyay1idXR0b24tY29udGFpbmVyXCI7XG5cdEN1c3RvbWVyU2VydmljZU92ZXJyaWRlcyQxW1wiREFSS19CVVRUT05cIl0gPSBcInNwaWZmeS1jdXN0b21lci1zZXJ2aWNlLWRhcmstYnV0dG9uXCI7XG5cdEN1c3RvbWVyU2VydmljZU92ZXJyaWRlcyQxW1wiREFSS19CVVRUT05fSE9WRVJfVEVYVFwiXSA9IFwic3BpZmZ5LWN1c3RvbWVyLXNlcnZpY2UtZGFyay1idXR0b24taG92ZXItdGV4dFwiO1xuXHRDdXN0b21lclNlcnZpY2VPdmVycmlkZXMkMVtcIkRBUktfQlVUVE9OX1RFWFRcIl0gPSBcInNwaWZmeS1jdXN0b21lci1zZXJ2aWNlLWRhcmstYnV0dG9uLXRleHRcIjtcblx0Q3VzdG9tZXJTZXJ2aWNlT3ZlcnJpZGVzJDFbXCJGT1JNX0ZJRUxEXCJdID0gXCJzcGlmZnktY3VzdG9tZXItc2VydmljZS1mb3JtLWZpZWxkXCI7XG5cdEN1c3RvbWVyU2VydmljZU92ZXJyaWRlcyQxW1wiQUlfTkFNRVwiXSA9IFwic3BpZmZ5LWN1c3RvbWVyLXNlcnZpY2UtYWktbmFtZVwiO1xuXHRDdXN0b21lclNlcnZpY2VPdmVycmlkZXMkMVtcIldBSVRJTkdfTUVTU0FHRVwiXSA9IFwic3BpZmZ5LWN1c3RvbWVyLXNlcnZpY2Utd2FpdGluZy1tZXNzYWdlXCI7XG5cdEN1c3RvbWVyU2VydmljZU92ZXJyaWRlcyQxW1wiV0FJVElOR19NRVNTQUdFX0lDT05cIl0gPSBcInNwaWZmeS1jdXN0b21lci1zZXJ2aWNlLXdhaXRpbmctbWVzc2FnZS1pY29uXCI7XG5cdHJldHVybiBDdXN0b21lclNlcnZpY2VPdmVycmlkZXMkMTtcbn0oe30pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiBzcmMvY29yZS9Eb21JbnNlcnRpb24udHNcbmxldCBET01JbnNlcnRpb25UeXBlID0gLyogQF9fUFVSRV9fICovIGZ1bmN0aW9uKERPTUluc2VydGlvblR5cGUkMSkge1xuXHRET01JbnNlcnRpb25UeXBlJDFbXCJBRlRFUlwiXSA9IFwiYWZ0ZXJcIjtcblx0RE9NSW5zZXJ0aW9uVHlwZSQxW1wiQkVGT1JFXCJdID0gXCJiZWZvcmVcIjtcblx0RE9NSW5zZXJ0aW9uVHlwZSQxW1wiQURKQUNFTlRfQUZURVJfQkVHSU5cIl0gPSBcImFkamFjZW50LWFmdGVyLWJlZ2luXCI7XG5cdERPTUluc2VydGlvblR5cGUkMVtcIkFESkFDRU5UX0JFRk9SRV9CRUdJTlwiXSA9IFwiYWRqYWNlbnQtYmVmb3JlLWJlZ2luXCI7XG5cdERPTUluc2VydGlvblR5cGUkMVtcIkFESkFDRU5UX0FGVEVSX0VORFwiXSA9IFwiYWRqYWNlbnQtYWZ0ZXItZW5kXCI7XG5cdERPTUluc2VydGlvblR5cGUkMVtcIkFESkFDRU5UX0JFRk9SRV9FTkRcIl0gPSBcImFkamFjZW50LWJlZm9yZS1lbmRcIjtcblx0RE9NSW5zZXJ0aW9uVHlwZSQxW1wiQVBQRU5EX0NISUxEXCJdID0gXCJhcHBlbmQtY2hpbGRcIjtcblx0RE9NSW5zZXJ0aW9uVHlwZSQxW1wiTk9ORVwiXSA9IFwibm9uZVwiO1xuXHRyZXR1cm4gRE9NSW5zZXJ0aW9uVHlwZSQxO1xufSh7fSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy9jb3JlL0ZlYXR1cmVHYXRlcy50c1xubGV0IEZlYXR1cmVHYXRlcyA9IC8qIEBfX1BVUkVfXyAqLyBmdW5jdGlvbihGZWF0dXJlR2F0ZXMkMSkge1xuXHRGZWF0dXJlR2F0ZXMkMVtcIklzQ2xpZW50U2Vzc2lvbkVuYWJsZWRcIl0gPSBcImlzX2NsaWVudF9zZXNzaW9uX2VuYWJsZWRcIjtcblx0RmVhdHVyZUdhdGVzJDFbXCJJc05ld0ZlYXR1cmVFbmFibGVkXCJdID0gXCJpc19uZXdfZmVhdHVyZV9lbmFibGVkXCI7XG5cdEZlYXR1cmVHYXRlcyQxW1wiSXNGaW5lVHVuZWRNb2RlbDhiXCJdID0gXCJpc19maW5lX3R1bmVkX21vZGVsXzhiXCI7XG5cdEZlYXR1cmVHYXRlcyQxW1wiSXNJbWFnZUJhbm5lckVuYWJsZWRcIl0gPSBcImlzX2ltYWdlX2Jhbm5lcl9lbmFibGVkXCI7XG5cdEZlYXR1cmVHYXRlcyQxW1wiSXNPcmRlckxvb2t1cEVuYWJsZWRcIl0gPSBcImlzX29yZGVyX2xvb2t1cF9lbmFibGVkXCI7XG5cdEZlYXR1cmVHYXRlcyQxW1wiSXNTdW1tYXJpemVSZXZpZXdzRW5hYmxlZFwiXSA9IFwiaXNfc3VtbWFyaXplX3Jldmlld3NfZW5hYmxlZFwiO1xuXHRGZWF0dXJlR2F0ZXMkMVtcIklzR2xvYmFsU2VhcmNoRW5hYmxlZFwiXSA9IFwiaXNfZ2xvYmFsX3NlYXJjaF9lbmFibGVkXCI7XG5cdEZlYXR1cmVHYXRlcyQxW1wiSXNJbWFnZVByb21wdEVuYWJsZWRcIl0gPSBcImlzX2ltYWdlX3Byb21wdF9lbmFibGVkXCI7XG5cdEZlYXR1cmVHYXRlcyQxW1wiSXNXYXRlcm1hcmtFbmFibGVkXCJdID0gXCJpc193YXRlcm1hcmtfZW5hYmxlZFwiO1xuXHRGZWF0dXJlR2F0ZXMkMVtcIklzSW5mZXJlbmNlUmVnaW9uMFwiXSA9IFwiaXNfaW5mZXJlbmNlX3JlZ2lvbl8wXCI7XG5cdEZlYXR1cmVHYXRlcyQxW1wiSXNDaGF0VmFyaWFudEVuYWJsZWRcIl0gPSBcImlzX2NoYXRfdmFyaWFudF9lbmFibGVkXCI7XG5cdEZlYXR1cmVHYXRlcyQxW1wiSXNDaGF0VmFyaWFudEFFbmFibGVkXCJdID0gXCJpc19jaGF0X3ZhcmlhbnRfYV9lbmFibGVkXCI7XG5cdEZlYXR1cmVHYXRlcyQxW1wiSXNDaGF0VmFyaWFudEJFbmFibGVkXCJdID0gXCJpc19jaGF0X3ZhcmlhbnRfYl9lbmFibGVkXCI7XG5cdEZlYXR1cmVHYXRlcyQxW1wiSXNVc2VyUXVlcnlBbHdheXNFbmFibGVkXCJdID0gXCJpc191c2VyX3F1ZXJ5X2Fsd2F5c19lbmFibGVkXCI7XG5cdEZlYXR1cmVHYXRlcyQxW1wiSXNTZWFyY2hBdXRvY29tcGxldGVFbmFibGVkXCJdID0gXCJpc19zZWFyY2hfYXV0b2NvbXBsZXRlX2VuYWJsZWRcIjtcblx0RmVhdHVyZUdhdGVzJDFbXCJJc0VtcHR5RGl2UExQRW5hYmxlZFwiXSA9IFwiaXNfZW1wdHlfZGl2X3BscF9lbmFibGVkXCI7XG5cdEZlYXR1cmVHYXRlcyQxW1wiSXNSZWNvbW1lbmRlZFByb2R1Y3RzRW5hYmxlZFwiXSA9IFwiaXNfcmVjb21tZW5kZWRfcHJvZHVjdHNfZW5hYmxlZFwiO1xuXHRGZWF0dXJlR2F0ZXMkMVtcIklzQ2hhdFNjcm9sbFBhdXNlZFwiXSA9IFwiaXNfY2hhdF9zY3JvbGxfcGF1c2VkXCI7XG5cdHJldHVybiBGZWF0dXJlR2F0ZXMkMTtcbn0oe30pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiBzcmMvY29yZS9HcmlkSW5zZXJ0aW9uLnRzXG5sZXQgR3JpZEluc2VydGlvblR5cGUgPSAvKiBAX19QVVJFX18gKi8gZnVuY3Rpb24oR3JpZEluc2VydGlvblR5cGUkMSkge1xuXHRHcmlkSW5zZXJ0aW9uVHlwZSQxW1wiRklYRURfMVwiXSA9IFwiZml4ZWQtMVwiO1xuXHRHcmlkSW5zZXJ0aW9uVHlwZSQxW1wiRklYRURfMlwiXSA9IFwiZml4ZWQtMlwiO1xuXHRHcmlkSW5zZXJ0aW9uVHlwZSQxW1wiRklYRURfM1wiXSA9IFwiZml4ZWQtM1wiO1xuXHRHcmlkSW5zZXJ0aW9uVHlwZSQxW1wiRklYRURfNFwiXSA9IFwiZml4ZWQtNFwiO1xuXHRHcmlkSW5zZXJ0aW9uVHlwZSQxW1wiRklYRURfNVwiXSA9IFwiZml4ZWQtNVwiO1xuXHRHcmlkSW5zZXJ0aW9uVHlwZSQxW1wiRklYRURfNlwiXSA9IFwiZml4ZWQtNlwiO1xuXHRHcmlkSW5zZXJ0aW9uVHlwZSQxW1wiRklYRURfN1wiXSA9IFwiZml4ZWQtN1wiO1xuXHRHcmlkSW5zZXJ0aW9uVHlwZSQxW1wiRklYRURfOFwiXSA9IFwiZml4ZWQtOFwiO1xuXHRHcmlkSW5zZXJ0aW9uVHlwZSQxW1wiRklYRURfOVwiXSA9IFwiZml4ZWQtOVwiO1xuXHRHcmlkSW5zZXJ0aW9uVHlwZSQxW1wiRklYRURfMTJcIl0gPSBcImZpeGVkLTEyXCI7XG5cdEdyaWRJbnNlcnRpb25UeXBlJDFbXCJGSVhFRF8xM1wiXSA9IFwiZml4ZWQtMTNcIjtcblx0R3JpZEluc2VydGlvblR5cGUkMVtcIlJPV18xXCJdID0gXCJyb3ctMVwiO1xuXHRHcmlkSW5zZXJ0aW9uVHlwZSQxW1wiUk9XXzJcIl0gPSBcInJvdy0yXCI7XG5cdEdyaWRJbnNlcnRpb25UeXBlJDFbXCJST1dfM1wiXSA9IFwicm93LTNcIjtcblx0R3JpZEluc2VydGlvblR5cGUkMVtcIlJPV180XCJdID0gXCJyb3ctNFwiO1xuXHRyZXR1cm4gR3JpZEluc2VydGlvblR5cGUkMTtcbn0oe30pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiBzcmMvY29yZS9Mb2NhbFN0b3JhZ2VLZXlzLnRzXG5sZXQgTG9jYWxTdG9yYWdlS2V5cyA9IC8qIEBfX1BVUkVfXyAqLyBmdW5jdGlvbihMb2NhbFN0b3JhZ2VLZXlzJDEpIHtcblx0TG9jYWxTdG9yYWdlS2V5cyQxW1wiQ2hhdElkXCJdID0gXCJ2MS1zcGlmZnktY2hhdC1zZXNzaW9uLWlkXCI7XG5cdExvY2FsU3RvcmFnZUtleXMkMVtcIlNwaWZmeU9uT3ZlcnJpZGVcIl0gPSBcInNwaWZmeV9vblwiO1xuXHRMb2NhbFN0b3JhZ2VLZXlzJDFbXCJFbnZpdmVPbk92ZXJyaWRlXCJdID0gXCJlbnZpdmVfb25cIjtcblx0cmV0dXJuIExvY2FsU3RvcmFnZUtleXMkMTtcbn0oe30pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiBzcmMvY29yZS9QYWdlVmFyaWFudFRlc3QudHNcbmxldCBQYWdlVmFyaWFudFRlc3RUeXBlID0gLyogQF9fUFVSRV9fICovIGZ1bmN0aW9uKFBhZ2VWYXJpYW50VGVzdFR5cGUkMSkge1xuXHRQYWdlVmFyaWFudFRlc3RUeXBlJDFbXCJTaG9waWZ5UExQXCJdID0gXCJTaG9waWZ5UExQXCI7XG5cdFBhZ2VWYXJpYW50VGVzdFR5cGUkMVtcIlNob3BpZnlQRFBcIl0gPSBcIlNob3BpZnlQRFBcIjtcblx0UGFnZVZhcmlhbnRUZXN0VHlwZSQxW1wiUGFnZUNhdGVnb3J5XCJdID0gXCJQYWdlQ2F0ZWdvcnlcIjtcblx0UGFnZVZhcmlhbnRUZXN0VHlwZSQxW1wiQ2F0YWxvZ0NhdGVnb3J5XCJdID0gXCJDYXRhbG9nQ2F0ZWdvcnlcIjtcblx0UGFnZVZhcmlhbnRUZXN0VHlwZSQxW1wiVG9wQ2F0YWxvZ0NhdGVnb3J5XCJdID0gXCJUb3BDYXRhbG9nQ2F0ZWdvcnlcIjtcblx0UGFnZVZhcmlhbnRUZXN0VHlwZSQxW1wiSGFzUmV2aWV3c1wiXSA9IFwiSGFzUmV2aWV3c1wiO1xuXHRQYWdlVmFyaWFudFRlc3RUeXBlJDFbXCJJbkNvbGxlY3Rpb25cIl0gPSBcIkluQ29sbGVjdGlvblwiO1xuXHRQYWdlVmFyaWFudFRlc3RUeXBlJDFbXCJIYXNNZXJjaGFudFRhZ1wiXSA9IFwiSGFzTWVyY2hhbnRUYWdcIjtcblx0UGFnZVZhcmlhbnRUZXN0VHlwZSQxW1wiRmVhdHVyZUdhdGVcIl0gPSBcIkZlYXR1cmVHYXRlXCI7XG5cdFBhZ2VWYXJpYW50VGVzdFR5cGUkMVtcIlBscElkXCJdID0gXCJQbHBJZFwiO1xuXHRQYWdlVmFyaWFudFRlc3RUeXBlJDFbXCJRdWVyeVBhcmFtXCJdID0gXCJRdWVyeVBhcmFtXCI7XG5cdFBhZ2VWYXJpYW50VGVzdFR5cGUkMVtcIlByb2R1Y3RJZFwiXSA9IFwiUHJvZHVjdElkXCI7XG5cdFBhZ2VWYXJpYW50VGVzdFR5cGUkMVtcIlVzZXJIYXNJbnRlcmFjdGVkXCJdID0gXCJVc2VySGFzSW50ZXJhY3RlZFwiO1xuXHRQYWdlVmFyaWFudFRlc3RUeXBlJDFbXCJVc2VySGFzTm90SW50ZXJhY3RlZFwiXSA9IFwiVXNlckhhc05vdEludGVyYWN0ZWRcIjtcblx0UGFnZVZhcmlhbnRUZXN0VHlwZSQxW1wiaXNMb2FkaW5nXCJdID0gXCJpc0xvYWRpbmdcIjtcblx0UGFnZVZhcmlhbnRUZXN0VHlwZSQxW1wiaXNQcm9kdWN0Q29tcGFyaXNvblwiXSA9IFwiaXNQcm9kdWN0Q29tcGFyaXNvblwiO1xuXHRQYWdlVmFyaWFudFRlc3RUeXBlJDFbXCJGYWxsYmFja1wiXSA9IFwiRmFsbGJhY2tcIjtcblx0UGFnZVZhcmlhbnRUZXN0VHlwZSQxW1wiVXJsUmVzb2x2ZXJcIl0gPSBcIlVybFJlc29sdmVyXCI7XG5cdFBhZ2VWYXJpYW50VGVzdFR5cGUkMVtcIk51bGxcIl0gPSBcIm51bGxcIjtcblx0cmV0dXJuIFBhZ2VWYXJpYW50VGVzdFR5cGUkMTtcbn0oe30pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiBzcmMvY29yZS9QYWdlVmlzaXRDYXRlZ29yeS50c1xubGV0IFBhZ2VWaXNpdENhdGVnb3J5ID0gLyogQF9fUFVSRV9fICovIGZ1bmN0aW9uKFBhZ2VWaXNpdENhdGVnb3J5JDIpIHtcblx0UGFnZVZpc2l0Q2F0ZWdvcnkkMltcIlByb2R1Y3RcIl0gPSBcInByb2R1Y3RcIjtcblx0UGFnZVZpc2l0Q2F0ZWdvcnkkMltcIlNlYXJjaFwiXSA9IFwic2VhcmNoXCI7XG5cdFBhZ2VWaXNpdENhdGVnb3J5JDJbXCJJbnRlcm5hbFwiXSA9IFwiaW50ZXJuYWxcIjtcblx0UGFnZVZpc2l0Q2F0ZWdvcnkkMltcIkV4dGVybmFsXCJdID0gXCJleHRlcm5hbFwiO1xuXHRyZXR1cm4gUGFnZVZpc2l0Q2F0ZWdvcnkkMjtcbn0oe30pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiBzcmMvb3JnYW5pemF0aW9uL09yZ1Nob3J0TmFtZS50c1xubGV0IE9yZ1Nob3J0TmFtZSA9IC8qIEBfX1BVUkVfXyAqLyBmdW5jdGlvbihPcmdTaG9ydE5hbWUkMSkge1xuXHRPcmdTaG9ydE5hbWUkMVtcIkNvdGVyaWVcIl0gPSBcImNvdGVyaWVcIjtcblx0T3JnU2hvcnROYW1lJDFbXCJGb3JMb3ZlQW5kTGVtb25zXCJdID0gXCJmb3ItbG92ZS1hbmQtbGVtb25zXCI7XG5cdE9yZ1Nob3J0TmFtZSQxW1wiR3JlZW5wYW5cIl0gPSBcImdyZWVucGFuXCI7XG5cdE9yZ1Nob3J0TmFtZSQxW1wiSm9yZGFuQ3JhaWdcIl0gPSBcImpvcmRhbi1jcmFpZ1wiO1xuXHRPcmdTaG9ydE5hbWUkMVtcIkxhcnJ5QW5kU2VyZ2VzXCJdID0gXCJsYXJyeV9hbmRfc2VyZ2VzXCI7XG5cdE9yZ1Nob3J0TmFtZSQxW1wiTGVhcHNBbmRSZWJvdW5kc1wiXSA9IFwibGVhcHMtYW5kLXJlYm91bmRzXCI7XG5cdE9yZ1Nob3J0TmFtZSQxW1wiTWFudHJhQnJhbmRcIl0gPSBcIm1hbnRyYS1icmFuZFwiO1xuXHRPcmdTaG9ydE5hbWUkMVtcIlNwYW54XCJdID0gXCJzcGFueFwiO1xuXHRPcmdTaG9ydE5hbWUkMVtcIlNwYW54U3RhZ2luZ1wiXSA9IFwic3RhZ2luZy1zcGFueFwiO1xuXHRPcmdTaG9ydE5hbWUkMVtcIlN1cGVyZ29vcFwiXSA9IFwic3VwZXJnb29wXCI7XG5cdE9yZ1Nob3J0TmFtZSQxW1wiVW5pcXVlVmludGFnZVwiXSA9IFwidW5pcXVlLXZpbnRhZ2VcIjtcblx0T3JnU2hvcnROYW1lJDFbXCJKYWNrQXJjaGVyXCJdID0gXCJqYWNrLWFyY2hlclwiO1xuXHRPcmdTaG9ydE5hbWUkMVtcIlNraW5QZXJmZWN0aW9uXCJdID0gXCJza2luLXBlcmZlY3Rpb25cIjtcblx0T3JnU2hvcnROYW1lJDFbXCJMb29rT3B0aWNcIl0gPSBcImxvb2stb3B0aWNcIjtcblx0T3JnU2hvcnROYW1lJDFbXCJGaXZlQ2JkXCJdID0gXCJmaXZlLWNiZFwiO1xuXHRPcmdTaG9ydE5hbWUkMVtcIlNuYXBTdXBwbGVtZW50c1wiXSA9IFwic25hcC1zdXBwbGVtZW50c1wiO1xuXHRPcmdTaG9ydE5hbWUkMVtcIkxvbmdldml0eXJ4XCJdID0gXCJsb25nZXZpdHlyeFwiO1xuXHRPcmdTaG9ydE5hbWUkMVtcIlZlbmFDYmRcIl0gPSBcInZlbmEtY2JkXCI7XG5cdE9yZ1Nob3J0TmFtZSQxW1wiTWVkdGVycmFcIl0gPSBcIm1lZHRlcnJhXCI7XG5cdE9yZ1Nob3J0TmFtZSQxW1wiTW9kZWxsc1wiXSA9IFwibW9kZWxsc1wiO1xuXHRPcmdTaG9ydE5hbWUkMVtcIlByZXNzZWRGbG9yYWxcIl0gPSBcInByZXNzZWQtZmxvcmFsXCI7XG5cdE9yZ1Nob3J0TmFtZSQxW1wiS2luZHJlZEJyYXZlbHlcIl0gPSBcImtpbmRyZWQtYnJhdmVseVwiO1xuXHRPcmdTaG9ydE5hbWUkMVtcIldpbmVFbnRodXNpYXN0XCJdID0gXCJ3aW5lLWVudGh1c2lhc3RcIjtcblx0T3JnU2hvcnROYW1lJDFbXCJIb21lZ3Jvd25DYW5uYWJpc1wiXSA9IFwiaG9tZWdyb3duLWNhbm5hYmlzXCI7XG5cdE9yZ1Nob3J0TmFtZSQxW1wiRHJlYW1sYW5kQmFieVwiXSA9IFwiZHJlYW1sYW5kLWJhYnlcIjtcblx0T3JnU2hvcnROYW1lJDFbXCJCYW5kb2xpZXJcIl0gPSBcImJhbmRvbGllclwiO1xuXHRPcmdTaG9ydE5hbWUkMVtcIldlc3RvbkpvbkJvdWNoZXJcIl0gPSBcIndlc3Rvbi1qb24tYm91Y2hlclwiO1xuXHRPcmdTaG9ydE5hbWUkMVtcIkt1dEZyb21UaGVLbG90aFwiXSA9IFwia3V0LWZyb20tdGhlLWtsb3RoXCI7XG5cdE9yZ1Nob3J0TmFtZSQxW1wiR3Jvb3ZlTGlmZVwiXSA9IFwiZ3Jvb3ZlLWxpZmVcIjtcblx0T3JnU2hvcnROYW1lJDFbXCJDYXJwZVwiXSA9IFwiY2FycGVcIjtcblx0T3JnU2hvcnROYW1lJDFbXCJXb2xmVGFjdGljYWxcIl0gPSBcIndvbGYtdGFjdGljYWxcIjtcblx0T3JnU2hvcnROYW1lJDFbXCJXb2xmTWF0dHJlc3NcIl0gPSBcIndvbGZtYXR0cmVzc1wiO1xuXHRPcmdTaG9ydE5hbWUkMVtcIkRlZmF1bHRcIl0gPSBcImRlZmF1bHRcIjtcblx0cmV0dXJuIE9yZ1Nob3J0TmFtZSQxO1xufSh7fSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy9wcm9kdWN0L0NhdGVnb3J5RXh0cmFjdG9yLnRzXG5sZXQgQ2F0ZWdvcnlFeHRyYWN0b3JUeXBlID0gLyogQF9fUFVSRV9fICovIGZ1bmN0aW9uKENhdGVnb3J5RXh0cmFjdG9yVHlwZSQxKSB7XG5cdENhdGVnb3J5RXh0cmFjdG9yVHlwZSQxW1wiVmlzaXRDYXRlZ29yeU1hcFwiXSA9IFwiVmlzaXRDYXRlZ29yeU1hcFwiO1xuXHRDYXRlZ29yeUV4dHJhY3RvclR5cGUkMVtcIlZpc2l0Q2F0ZWdvcnlEZWZhdWx0XCJdID0gXCJWaXNpdENhdGVnb3J5RGVmYXVsdFwiO1xuXHRyZXR1cm4gQ2F0ZWdvcnlFeHRyYWN0b3JUeXBlJDE7XG59KHt9KTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gc3JjL3Byb2R1Y3QvUHJvZHVjdEV4cGVyaW1lbnQudHNcbmxldCBQcm9kdWN0RXhwZXJpbWVudCA9IC8qIEBfX1BVUkVfXyAqLyBmdW5jdGlvbihQcm9kdWN0RXhwZXJpbWVudCQxKSB7XG5cdFByb2R1Y3RFeHBlcmltZW50JDFbXCJERUZBVUxUXCJdID0gXCJkZWZhdWx0XCI7XG5cdHJldHVybiBQcm9kdWN0RXhwZXJpbWVudCQxO1xufSh7fSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy9wcm9kdWN0L1Byb2R1Y3RTb3J0aW5nLnRzXG5sZXQgUHJvZHVjdFNvcnRpbmcgPSAvKiBAX19QVVJFX18gKi8gZnVuY3Rpb24oUHJvZHVjdFNvcnRpbmckMSkge1xuXHRQcm9kdWN0U29ydGluZyQxW1wiRkVBVFVSRURcIl0gPSBcImZlYXR1cmVkXCI7XG5cdFByb2R1Y3RTb3J0aW5nJDFbXCJQUklDRV9BU0NcIl0gPSBcInByaWNlX2FzY1wiO1xuXHRQcm9kdWN0U29ydGluZyQxW1wiUFJJQ0VfREVTQ1wiXSA9IFwicHJpY2VfZGVzY1wiO1xuXHRyZXR1cm4gUHJvZHVjdFNvcnRpbmckMTtcbn0oe30pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiBzcmMvcHJvZHVjdC9WYXJpYW50SW5mby50c1xubGV0IFZhcmlhbnRUeXBlRW51bSA9IC8qIEBfX1BVUkVfXyAqLyBmdW5jdGlvbihWYXJpYW50VHlwZUVudW0kMSkge1xuXHRWYXJpYW50VHlwZUVudW0kMVtcIlBkcFwiXSA9IFwicGRwXCI7XG5cdFZhcmlhbnRUeXBlRW51bSQxW1wiUGxwXCJdID0gXCJwbHBcIjtcblx0VmFyaWFudFR5cGVFbnVtJDFbXCJQYWdlVmlzaXRcIl0gPSBcInBhZ2VfdmlzaXRcIjtcblx0cmV0dXJuIFZhcmlhbnRUeXBlRW51bSQxO1xufSh7fSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy9zZWFyY2gvQ2hhdFNlYXJjaFNvcnRPdmVycmlkZXMudHNcbmxldCBDaGF0U2VhcmNoU29ydE92ZXJyaWRlcyA9IC8qIEBfX1BVUkVfXyAqLyBmdW5jdGlvbihDaGF0U2VhcmNoU29ydE92ZXJyaWRlcyQxKSB7XG5cdENoYXRTZWFyY2hTb3J0T3ZlcnJpZGVzJDFbXCJERVNLVE9QX0ZJTFRFUl9DT05UQUlORVJcIl0gPSBcInNwaWZmeS1jaGF0LXNlYXJjaC1maWx0ZXItY29udGFpbmVyXCI7XG5cdENoYXRTZWFyY2hTb3J0T3ZlcnJpZGVzJDFbXCJERVNLVE9QX0ZJTFRFUl9TRUxFQ1RfQ09NUE9ORU5UXCJdID0gXCJzcGlmZnktY2hhdC1zZWFyY2gtZmlsdGVyLXNlbGVjdC1jb21wb25lbnRcIjtcblx0Q2hhdFNlYXJjaFNvcnRPdmVycmlkZXMkMVtcIkRFU0tUT1BfRklMVEVSX1NFTEVDVF9JQ09OXCJdID0gXCJzcGlmZnktY2hhdC1zZWFyY2gtZmlsdGVyLXNlbGVjdC1pY29uXCI7XG5cdENoYXRTZWFyY2hTb3J0T3ZlcnJpZGVzJDFbXCJNT0JJTEVfRklMVEVSX0JVVFRPTlwiXSA9IFwic3BpZmZ5LWNoYXQtc2VhcmNoLWZpbHRlci1idXR0b25cIjtcblx0Q2hhdFNlYXJjaFNvcnRPdmVycmlkZXMkMVtcIk1PQklMRV9GSUxURVJfTU9EQUxfQ09OVEFJTkVSXCJdID0gXCJzcGlmZnktY2hhdC1zZWFyY2gtZmlsdGVyLW1vZGFsLWNvbnRhaW5lclwiO1xuXHRDaGF0U2VhcmNoU29ydE92ZXJyaWRlcyQxW1wiTU9CSUxFX0ZJTFRFUl9NT0RBTF9IRUFERVJcIl0gPSBcInNwaWZmeS1jaGF0LXNlYXJjaC1maWx0ZXItbW9kYWwtaGVhZGVyXCI7XG5cdENoYXRTZWFyY2hTb3J0T3ZlcnJpZGVzJDFbXCJNT0JJTEVfRklMVEVSX01PREFMX1NFTEVDVElPTlwiXSA9IFwic3BpZmZ5LWNoYXQtc2VhcmNoLWZpbHRlci1tb2RhbC1zZWxlY3Rpb25cIjtcblx0Q2hhdFNlYXJjaFNvcnRPdmVycmlkZXMkMVtcIk1PQklMRV9GSUxURVJfTU9EQUxfT1BUSU9OXCJdID0gXCJzcGlmZnktY2hhdC1zZWFyY2gtZmlsdGVyLW1vZGFsLW9wdGlvblwiO1xuXHRDaGF0U2VhcmNoU29ydE92ZXJyaWRlcyQxW1wiTU9CSUxFX0ZJTFRFUl9NT0RBTF9PUFRJT05fUElMTFwiXSA9IFwic3BpZmZ5LWNoYXQtc2VhcmNoLWZpbHRlci1tb2RhbC1vcHRpb24tcGlsbFwiO1xuXHRDaGF0U2VhcmNoU29ydE92ZXJyaWRlcyQxW1wiTU9CSUxFX0ZJTFRFUl9NT0RBTF9PUFRJT05fREVTQ1JJUFRJT05cIl0gPSBcInNwaWZmeS1jaGF0LXNlYXJjaC1maWx0ZXItbW9kYWwtb3B0aW9uLWRlc2NcIjtcblx0Q2hhdFNlYXJjaFNvcnRPdmVycmlkZXMkMVtcIk1PQklMRV9GSUxURVJfTU9EQUxfQVBQTFlfQlVUVE9OXCJdID0gXCJzcGlmZnktY2hhdC1zZWFyY2gtZmlsdGVyLW1vZGFsLWFwcGx5LWJ1dHRvblwiO1xuXHRyZXR1cm4gQ2hhdFNlYXJjaFNvcnRPdmVycmlkZXMkMTtcbn0oe30pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiBzcmMvc2VhcmNoL1NlYXJjaFJlc3VsdHNTdGF0ZS50c1xubGV0IFNlYXJjaFJlc3VsdHNTdGF0ZSA9IC8qIEBfX1BVUkVfXyAqLyBmdW5jdGlvbihTZWFyY2hSZXN1bHRzU3RhdGUkMSkge1xuXHRTZWFyY2hSZXN1bHRzU3RhdGUkMVtTZWFyY2hSZXN1bHRzU3RhdGUkMVtcIkxvYWRpbmdcIl0gPSAwXSA9IFwiTG9hZGluZ1wiO1xuXHRTZWFyY2hSZXN1bHRzU3RhdGUkMVtTZWFyY2hSZXN1bHRzU3RhdGUkMVtcIlJlc3VsdHNcIl0gPSAxXSA9IFwiUmVzdWx0c1wiO1xuXHRTZWFyY2hSZXN1bHRzU3RhdGUkMVtTZWFyY2hSZXN1bHRzU3RhdGUkMVtcIk5vUmVzdWx0c1wiXSA9IDJdID0gXCJOb1Jlc3VsdHNcIjtcblx0cmV0dXJuIFNlYXJjaFJlc3VsdHNTdGF0ZSQxO1xufSh7fSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy93aWRnZXRzL1NwaWZmeVdpZGdldHMudHNcbi8qKlxuKiBFbnVtIG9mIGFsbCB3aWRnZXQgbmFtZXMuIFRoZXNlIGFyZSB3aWRnZXRzIHRoYXQgYXJlIHJlbmRlcmVkIGFuZCBpbnRlZ3JhdGVkIGludG9cbiogYSBtZXJjaGFudCdzIHdlYnNpdGUuXG4qL1xubGV0IFNwaWZmeVdpZGdldHMgPSAvKiBAX19QVVJFX18gKi8gZnVuY3Rpb24oU3BpZmZ5V2lkZ2V0cyQxKSB7XG5cdFNwaWZmeVdpZGdldHMkMVtcIkltYWdlQmFubmVyXCJdID0gXCJpbWFnZV9iYW5uZXJcIjtcblx0U3BpZmZ5V2lkZ2V0cyQxW1wiSW1hZ2VQcm9tcHRDYXJkXCJdID0gXCJpbWFnZV9wcm9tcHRfY2FyZFwiO1xuXHRTcGlmZnlXaWRnZXRzJDFbXCJTaW5nbGVJbWFnZVByb21wdFwiXSA9IFwic2luZ2xlX2ltYWdlX3Byb21wdFwiO1xuXHRTcGlmZnlXaWRnZXRzJDFbXCJFbWJlZGRlZFdpZGdldFwiXSA9IFwiZW1iZWRkZWRfd2lkZ2V0XCI7XG5cdFNwaWZmeVdpZGdldHMkMVtcIkZsb2F0aW5nQnV0dG9uXCJdID0gXCJmbG9hdGluZ19idXR0b25cIjtcblx0U3BpZmZ5V2lkZ2V0cyQxW1wiU3VnZ2VzdGlvbkJhclwiXSA9IFwic3VnZ2VzdGlvbl9iYXJcIjtcblx0U3BpZmZ5V2lkZ2V0cyQxW1wiU2VhcmNoUHJvbXB0XCJdID0gXCJzZWFyY2hfcHJvbXB0XCI7XG5cdFNwaWZmeVdpZGdldHMkMVtcIkdsb2JhbFNlYXJjaFwiXSA9IFwiZ2xvYmFsX3NlYXJjaFwiO1xuXHRTcGlmZnlXaWRnZXRzJDFbXCJTZWFyY2hSZXN1bHRzXCJdID0gXCJzZWFyY2hfcmVzdWx0c1wiO1xuXHRTcGlmZnlXaWRnZXRzJDFbXCJHbG9iYWxTZWFyY2hFbnRyeVBvaW50XCJdID0gXCJnbG9iYWxfc2VhcmNoX2VudHJ5X3BvaW50XCI7XG5cdHJldHVybiBTcGlmZnlXaWRnZXRzJDE7XG59KHt9KTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gc3JjL3dpZGdldHMvV2lkZ2V0VHlwZS50c1xubGV0IFdpZGdldFR5cGUgPSAvKiBAX19QVVJFX18gKi8gZnVuY3Rpb24oV2lkZ2V0VHlwZSQxKSB7XG5cdFdpZGdldFR5cGUkMVtcIkNoYXRQcmV2aWV3XCJdID0gXCJDaGF0UHJldmlld1wiO1xuXHRXaWRnZXRUeXBlJDFbXCJTb2NpYWxQcm9vZlYyXCJdID0gXCJTb2NpYWxQcm9vZlYyXCI7XG5cdFdpZGdldFR5cGUkMVtcIkNoYXRQcmV2aWV3VjJcIl0gPSBcIkNoYXRQcmV2aWV3VjJcIjtcblx0V2lkZ2V0VHlwZSQxW1wiQ2hhdFByZXZpZXdJc0xvYWRpbmdcIl0gPSBcIkNoYXRQcmV2aWV3SXNMb2FkaW5nXCI7XG5cdFdpZGdldFR5cGUkMVtcIkNoYXRQcmV2aWV3UG9zdEludGVyYWN0aW9uXCJdID0gXCJDaGF0UHJldmlld1Bvc3RJbnRlcmFjdGlvblwiO1xuXHRXaWRnZXRUeXBlJDFbXCJDaGF0UHJldmlld1Byb2R1Y3RDb21wYXJpc29uXCJdID0gXCJDaGF0UHJldmlld1Byb2R1Y3RDb21wYXJpc29uXCI7XG5cdFdpZGdldFR5cGUkMVtcIlN1Z2dlc3Rpb25CYXJcIl0gPSBcIlN1Z2dlc3Rpb25CYXJcIjtcblx0V2lkZ2V0VHlwZSQxW1wiU3VnZ2VzdGlvbkJhclYyXCJdID0gXCJTdWdnZXN0aW9uQmFyVjJcIjtcblx0V2lkZ2V0VHlwZSQxW1wiSW1hZ2VQcm9tcHRDYXJkXCJdID0gXCJJbWFnZVByb21wdENhcmRcIjtcblx0V2lkZ2V0VHlwZSQxW1wiSW1hZ2VCYW5uZXJcIl0gPSBcIkltYWdlQmFubmVyXCI7XG5cdFdpZGdldFR5cGUkMVtcIlNpbmdsZUltYWdlUHJvbXB0XCJdID0gXCJTaW5nbGVJbWFnZVByb21wdFwiO1xuXHRXaWRnZXRUeXBlJDFbXCJTZWFyY2hQcm9tcHRcIl0gPSBcIlNlYXJjaFByb21wdFwiO1xuXHRXaWRnZXRUeXBlJDFbXCJTZWFyY2haZXJvU3RhdGVFbnRyeVBvaW50XCJdID0gXCJTZWFyY2haZXJvU3RhdGVFbnRyeVBvaW50XCI7XG5cdFdpZGdldFR5cGUkMVtcIlNlYXJjaFJlc3VsdHNFbnRyeVBvaW50XCJdID0gXCJTZWFyY2hSZXN1bHRzRW50cnlQb2ludFwiO1xuXHRXaWRnZXRUeXBlJDFbXCJTZWFyY2hPdmVybGF5SG9zdFwiXSA9IFwiU2VhcmNoT3ZlcmxheUhvc3RcIjtcblx0V2lkZ2V0VHlwZSQxW1wiTm9PcFwiXSA9IFwiTm9PcFwiO1xuXHRyZXR1cm4gV2lkZ2V0VHlwZSQxO1xufSh7fSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIC4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9ydW50aW1lLmpzXG52YXIgcmVxdWlyZV9ydW50aW1lID0gLyogQF9fUFVSRV9fICovIF9fY29tbW9uSlMoeyBcIi4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9ydW50aW1lLmpzXCI6ICgoZXhwb3J0cykgPT4ge1xuXHQvKipcblx0KiBDb21tZXJjZVxuXHQqIE5vIGRlc2NyaXB0aW9uIHByb3ZpZGVkIChnZW5lcmF0ZWQgYnkgT3BlbmFwaSBHZW5lcmF0b3IgaHR0cHM6Ly9naXRodWIuY29tL29wZW5hcGl0b29scy9vcGVuYXBpLWdlbmVyYXRvcilcblx0KlxuXHQqIFRoZSB2ZXJzaW9uIG9mIHRoZSBPcGVuQVBJIGRvY3VtZW50OiAxLjEuMFxuXHQqXG5cdCpcblx0KiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IE9wZW5BUEkgR2VuZXJhdG9yIChodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2gpLlxuXHQqIGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaFxuXHQqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cblx0Ki9cblx0dmFyIF9fYXdhaXRlciQ1ID0gZXhwb3J0cyAmJiBleHBvcnRzLl9fYXdhaXRlciB8fCBmdW5jdGlvbih0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcblx0XHRmdW5jdGlvbiBhZG9wdCh2YWx1ZSkge1xuXHRcdFx0cmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24ocmVzb2x2ZSkge1xuXHRcdFx0XHRyZXNvbHZlKHZhbHVlKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHRyZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuXHRcdFx0ZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7XG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0c3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpO1xuXHRcdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdFx0cmVqZWN0KGUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkge1xuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTtcblx0XHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRcdHJlamVjdChlKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0ZnVuY3Rpb24gc3RlcChyZXN1bHQpIHtcblx0XHRcdFx0cmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7XG5cdFx0XHR9XG5cdFx0XHRzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG5cdFx0fSk7XG5cdH07XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcblx0ZXhwb3J0cy5UZXh0QXBpUmVzcG9uc2UgPSBleHBvcnRzLkJsb2JBcGlSZXNwb25zZSA9IGV4cG9ydHMuVm9pZEFwaVJlc3BvbnNlID0gZXhwb3J0cy5KU09OQXBpUmVzcG9uc2UgPSBleHBvcnRzLkNPTExFQ1RJT05fRk9STUFUUyA9IGV4cG9ydHMuUmVxdWlyZWRFcnJvciA9IGV4cG9ydHMuRmV0Y2hFcnJvciA9IGV4cG9ydHMuUmVzcG9uc2VFcnJvciA9IGV4cG9ydHMuQmFzZUFQSSA9IGV4cG9ydHMuRGVmYXVsdENvbmZpZyA9IGV4cG9ydHMuQ29uZmlndXJhdGlvbiA9IGV4cG9ydHMuQkFTRV9QQVRIID0gdm9pZCAwO1xuXHRleHBvcnRzLnF1ZXJ5c3RyaW5nID0gcXVlcnlzdHJpbmc7XG5cdGV4cG9ydHMuZXhpc3RzID0gZXhpc3RzO1xuXHRleHBvcnRzLm1hcFZhbHVlcyA9IG1hcFZhbHVlcztcblx0ZXhwb3J0cy5jYW5Db25zdW1lRm9ybSA9IGNhbkNvbnN1bWVGb3JtO1xuXHRleHBvcnRzLkJBU0VfUEFUSCA9IFwiaHR0cDovL2xvY2FsaG9zdFwiLnJlcGxhY2UoL1xcLyskLywgXCJcIik7XG5cdHZhciBDb25maWd1cmF0aW9uID0gY2xhc3Mge1xuXHRcdGNvbnN0cnVjdG9yKGNvbmZpZ3VyYXRpb24gPSB7fSkge1xuXHRcdFx0dGhpcy5jb25maWd1cmF0aW9uID0gY29uZmlndXJhdGlvbjtcblx0XHR9XG5cdFx0c2V0IGNvbmZpZyhjb25maWd1cmF0aW9uKSB7XG5cdFx0XHR0aGlzLmNvbmZpZ3VyYXRpb24gPSBjb25maWd1cmF0aW9uO1xuXHRcdH1cblx0XHRnZXQgYmFzZVBhdGgoKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5jb25maWd1cmF0aW9uLmJhc2VQYXRoICE9IG51bGwgPyB0aGlzLmNvbmZpZ3VyYXRpb24uYmFzZVBhdGggOiBleHBvcnRzLkJBU0VfUEFUSDtcblx0XHR9XG5cdFx0Z2V0IGZldGNoQXBpKCkge1xuXHRcdFx0cmV0dXJuIHRoaXMuY29uZmlndXJhdGlvbi5mZXRjaEFwaTtcblx0XHR9XG5cdFx0Z2V0IG1pZGRsZXdhcmUoKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5jb25maWd1cmF0aW9uLm1pZGRsZXdhcmUgfHwgW107XG5cdFx0fVxuXHRcdGdldCBxdWVyeVBhcmFtc1N0cmluZ2lmeSgpIHtcblx0XHRcdHJldHVybiB0aGlzLmNvbmZpZ3VyYXRpb24ucXVlcnlQYXJhbXNTdHJpbmdpZnkgfHwgcXVlcnlzdHJpbmc7XG5cdFx0fVxuXHRcdGdldCB1c2VybmFtZSgpIHtcblx0XHRcdHJldHVybiB0aGlzLmNvbmZpZ3VyYXRpb24udXNlcm5hbWU7XG5cdFx0fVxuXHRcdGdldCBwYXNzd29yZCgpIHtcblx0XHRcdHJldHVybiB0aGlzLmNvbmZpZ3VyYXRpb24ucGFzc3dvcmQ7XG5cdFx0fVxuXHRcdGdldCBhcGlLZXkoKSB7XG5cdFx0XHRjb25zdCBhcGlLZXkgPSB0aGlzLmNvbmZpZ3VyYXRpb24uYXBpS2V5O1xuXHRcdFx0aWYgKGFwaUtleSkgcmV0dXJuIHR5cGVvZiBhcGlLZXkgPT09IFwiZnVuY3Rpb25cIiA/IGFwaUtleSA6ICgpID0+IGFwaUtleTtcblx0XHR9XG5cdFx0Z2V0IGFjY2Vzc1Rva2VuKCkge1xuXHRcdFx0Y29uc3QgYWNjZXNzVG9rZW4gPSB0aGlzLmNvbmZpZ3VyYXRpb24uYWNjZXNzVG9rZW47XG5cdFx0XHRpZiAoYWNjZXNzVG9rZW4pIHJldHVybiB0eXBlb2YgYWNjZXNzVG9rZW4gPT09IFwiZnVuY3Rpb25cIiA/IGFjY2Vzc1Rva2VuIDogKCkgPT4gX19hd2FpdGVyJDUodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG5cdFx0XHRcdHJldHVybiBhY2Nlc3NUb2tlbjtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHRnZXQgaGVhZGVycygpIHtcblx0XHRcdHJldHVybiB0aGlzLmNvbmZpZ3VyYXRpb24uaGVhZGVycztcblx0XHR9XG5cdFx0Z2V0IGNyZWRlbnRpYWxzKCkge1xuXHRcdFx0cmV0dXJuIHRoaXMuY29uZmlndXJhdGlvbi5jcmVkZW50aWFscztcblx0XHR9XG5cdH07XG5cdGV4cG9ydHMuQ29uZmlndXJhdGlvbiA9IENvbmZpZ3VyYXRpb247XG5cdGV4cG9ydHMuRGVmYXVsdENvbmZpZyA9IG5ldyBDb25maWd1cmF0aW9uKCk7XG5cdC8qKlxuXHQqIFRoaXMgaXMgdGhlIGJhc2UgY2xhc3MgZm9yIGFsbCBnZW5lcmF0ZWQgQVBJIGNsYXNzZXMuXG5cdCovXG5cdHZhciBCYXNlQVBJID0gY2xhc3MgQmFzZUFQSSB7XG5cdFx0Y29uc3RydWN0b3IoY29uZmlndXJhdGlvbiA9IGV4cG9ydHMuRGVmYXVsdENvbmZpZykge1xuXHRcdFx0dGhpcy5jb25maWd1cmF0aW9uID0gY29uZmlndXJhdGlvbjtcblx0XHRcdHRoaXMuZmV0Y2hBcGkgPSAodXJsLCBpbml0KSA9PiBfX2F3YWl0ZXIkNSh0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcblx0XHRcdFx0bGV0IGZldGNoUGFyYW1zID0ge1xuXHRcdFx0XHRcdHVybCxcblx0XHRcdFx0XHRpbml0XG5cdFx0XHRcdH07XG5cdFx0XHRcdGZvciAoY29uc3QgbWlkZGxld2FyZSBvZiB0aGlzLm1pZGRsZXdhcmUpIGlmIChtaWRkbGV3YXJlLnByZSkgZmV0Y2hQYXJhbXMgPSAoeWllbGQgbWlkZGxld2FyZS5wcmUoT2JqZWN0LmFzc2lnbih7IGZldGNoOiB0aGlzLmZldGNoQXBpIH0sIGZldGNoUGFyYW1zKSkpIHx8IGZldGNoUGFyYW1zO1xuXHRcdFx0XHRsZXQgcmVzcG9uc2UgPSB2b2lkIDA7XG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0cmVzcG9uc2UgPSB5aWVsZCAodGhpcy5jb25maWd1cmF0aW9uLmZldGNoQXBpIHx8IGZldGNoKShmZXRjaFBhcmFtcy51cmwsIGZldGNoUGFyYW1zLmluaXQpO1xuXHRcdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdFx0Zm9yIChjb25zdCBtaWRkbGV3YXJlIG9mIHRoaXMubWlkZGxld2FyZSkgaWYgKG1pZGRsZXdhcmUub25FcnJvcikgcmVzcG9uc2UgPSAoeWllbGQgbWlkZGxld2FyZS5vbkVycm9yKHtcblx0XHRcdFx0XHRcdGZldGNoOiB0aGlzLmZldGNoQXBpLFxuXHRcdFx0XHRcdFx0dXJsOiBmZXRjaFBhcmFtcy51cmwsXG5cdFx0XHRcdFx0XHRpbml0OiBmZXRjaFBhcmFtcy5pbml0LFxuXHRcdFx0XHRcdFx0ZXJyb3I6IGUsXG5cdFx0XHRcdFx0XHRyZXNwb25zZTogcmVzcG9uc2UgPyByZXNwb25zZS5jbG9uZSgpIDogdm9pZCAwXG5cdFx0XHRcdFx0fSkpIHx8IHJlc3BvbnNlO1xuXHRcdFx0XHRcdGlmIChyZXNwb25zZSA9PT0gdm9pZCAwKSBpZiAoZSBpbnN0YW5jZW9mIEVycm9yKSB0aHJvdyBuZXcgRmV0Y2hFcnJvcihlLCBcIlRoZSByZXF1ZXN0IGZhaWxlZCBhbmQgdGhlIGludGVyY2VwdG9ycyBkaWQgbm90IHJldHVybiBhbiBhbHRlcm5hdGl2ZSByZXNwb25zZVwiKTtcblx0XHRcdFx0XHRlbHNlIHRocm93IGU7XG5cdFx0XHRcdH1cblx0XHRcdFx0Zm9yIChjb25zdCBtaWRkbGV3YXJlIG9mIHRoaXMubWlkZGxld2FyZSkgaWYgKG1pZGRsZXdhcmUucG9zdCkgcmVzcG9uc2UgPSAoeWllbGQgbWlkZGxld2FyZS5wb3N0KHtcblx0XHRcdFx0XHRmZXRjaDogdGhpcy5mZXRjaEFwaSxcblx0XHRcdFx0XHR1cmw6IGZldGNoUGFyYW1zLnVybCxcblx0XHRcdFx0XHRpbml0OiBmZXRjaFBhcmFtcy5pbml0LFxuXHRcdFx0XHRcdHJlc3BvbnNlOiByZXNwb25zZS5jbG9uZSgpXG5cdFx0XHRcdH0pKSB8fCByZXNwb25zZTtcblx0XHRcdFx0cmV0dXJuIHJlc3BvbnNlO1xuXHRcdFx0fSk7XG5cdFx0XHR0aGlzLm1pZGRsZXdhcmUgPSBjb25maWd1cmF0aW9uLm1pZGRsZXdhcmU7XG5cdFx0fVxuXHRcdHdpdGhNaWRkbGV3YXJlKC4uLm1pZGRsZXdhcmVzKSB7XG5cdFx0XHRjb25zdCBuZXh0ID0gdGhpcy5jbG9uZSgpO1xuXHRcdFx0bmV4dC5taWRkbGV3YXJlID0gbmV4dC5taWRkbGV3YXJlLmNvbmNhdCguLi5taWRkbGV3YXJlcyk7XG5cdFx0XHRyZXR1cm4gbmV4dDtcblx0XHR9XG5cdFx0d2l0aFByZU1pZGRsZXdhcmUoLi4ucHJlTWlkZGxld2FyZXMpIHtcblx0XHRcdGNvbnN0IG1pZGRsZXdhcmVzID0gcHJlTWlkZGxld2FyZXMubWFwKChwcmUpID0+ICh7IHByZSB9KSk7XG5cdFx0XHRyZXR1cm4gdGhpcy53aXRoTWlkZGxld2FyZSguLi5taWRkbGV3YXJlcyk7XG5cdFx0fVxuXHRcdHdpdGhQb3N0TWlkZGxld2FyZSguLi5wb3N0TWlkZGxld2FyZXMpIHtcblx0XHRcdGNvbnN0IG1pZGRsZXdhcmVzID0gcG9zdE1pZGRsZXdhcmVzLm1hcCgocG9zdCkgPT4gKHsgcG9zdCB9KSk7XG5cdFx0XHRyZXR1cm4gdGhpcy53aXRoTWlkZGxld2FyZSguLi5taWRkbGV3YXJlcyk7XG5cdFx0fVxuXHRcdC8qKlxuXHRcdCogQ2hlY2sgaWYgdGhlIGdpdmVuIE1JTUUgaXMgYSBKU09OIE1JTUUuXG5cdFx0KiBKU09OIE1JTUUgZXhhbXBsZXM6XG5cdFx0KiAgIGFwcGxpY2F0aW9uL2pzb25cblx0XHQqICAgYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD1VVEY4XG5cdFx0KiAgIEFQUExJQ0FUSU9OL0pTT05cblx0XHQqICAgYXBwbGljYXRpb24vdm5kLmNvbXBhbnkranNvblxuXHRcdCogQHBhcmFtIG1pbWUgLSBNSU1FIChNdWx0aXB1cnBvc2UgSW50ZXJuZXQgTWFpbCBFeHRlbnNpb25zKVxuXHRcdCogQHJldHVybiBUcnVlIGlmIHRoZSBnaXZlbiBNSU1FIGlzIEpTT04sIGZhbHNlIG90aGVyd2lzZS5cblx0XHQqL1xuXHRcdGlzSnNvbk1pbWUobWltZSkge1xuXHRcdFx0aWYgKCFtaW1lKSByZXR1cm4gZmFsc2U7XG5cdFx0XHRyZXR1cm4gQmFzZUFQSS5qc29uUmVnZXgudGVzdChtaW1lKTtcblx0XHR9XG5cdFx0cmVxdWVzdChjb250ZXh0LCBpbml0T3ZlcnJpZGVzKSB7XG5cdFx0XHRyZXR1cm4gX19hd2FpdGVyJDUodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG5cdFx0XHRcdGNvbnN0IHsgdXJsLCBpbml0IH0gPSB5aWVsZCB0aGlzLmNyZWF0ZUZldGNoUGFyYW1zKGNvbnRleHQsIGluaXRPdmVycmlkZXMpO1xuXHRcdFx0XHRjb25zdCByZXNwb25zZSA9IHlpZWxkIHRoaXMuZmV0Y2hBcGkodXJsLCBpbml0KTtcblx0XHRcdFx0aWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnN0YXR1cyA+PSAyMDAgJiYgcmVzcG9uc2Uuc3RhdHVzIDwgMzAwKSByZXR1cm4gcmVzcG9uc2U7XG5cdFx0XHRcdHRocm93IG5ldyBSZXNwb25zZUVycm9yKHJlc3BvbnNlLCBcIlJlc3BvbnNlIHJldHVybmVkIGFuIGVycm9yIGNvZGVcIik7XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0Y3JlYXRlRmV0Y2hQYXJhbXMoY29udGV4dCwgaW5pdE92ZXJyaWRlcykge1xuXHRcdFx0cmV0dXJuIF9fYXdhaXRlciQ1KHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuXHRcdFx0XHRsZXQgdXJsID0gdGhpcy5jb25maWd1cmF0aW9uLmJhc2VQYXRoICsgY29udGV4dC5wYXRoO1xuXHRcdFx0XHRpZiAoY29udGV4dC5xdWVyeSAhPT0gdm9pZCAwICYmIE9iamVjdC5rZXlzKGNvbnRleHQucXVlcnkpLmxlbmd0aCAhPT0gMCkgdXJsICs9IFwiP1wiICsgdGhpcy5jb25maWd1cmF0aW9uLnF1ZXJ5UGFyYW1zU3RyaW5naWZ5KGNvbnRleHQucXVlcnkpO1xuXHRcdFx0XHRjb25zdCBoZWFkZXJzID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5jb25maWd1cmF0aW9uLmhlYWRlcnMsIGNvbnRleHQuaGVhZGVycyk7XG5cdFx0XHRcdE9iamVjdC5rZXlzKGhlYWRlcnMpLmZvckVhY2goKGtleSkgPT4gaGVhZGVyc1trZXldID09PSB2b2lkIDAgPyBkZWxldGUgaGVhZGVyc1trZXldIDoge30pO1xuXHRcdFx0XHRjb25zdCBpbml0T3ZlcnJpZGVGbiA9IHR5cGVvZiBpbml0T3ZlcnJpZGVzID09PSBcImZ1bmN0aW9uXCIgPyBpbml0T3ZlcnJpZGVzIDogKCkgPT4gX19hd2FpdGVyJDUodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGluaXRPdmVycmlkZXM7XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRjb25zdCBpbml0UGFyYW1zID0ge1xuXHRcdFx0XHRcdG1ldGhvZDogY29udGV4dC5tZXRob2QsXG5cdFx0XHRcdFx0aGVhZGVycyxcblx0XHRcdFx0XHRib2R5OiBjb250ZXh0LmJvZHksXG5cdFx0XHRcdFx0Y3JlZGVudGlhbHM6IHRoaXMuY29uZmlndXJhdGlvbi5jcmVkZW50aWFsc1xuXHRcdFx0XHR9O1xuXHRcdFx0XHRjb25zdCBvdmVycmlkZGVuSW5pdCA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgaW5pdFBhcmFtcyksIHlpZWxkIGluaXRPdmVycmlkZUZuKHtcblx0XHRcdFx0XHRpbml0OiBpbml0UGFyYW1zLFxuXHRcdFx0XHRcdGNvbnRleHRcblx0XHRcdFx0fSkpO1xuXHRcdFx0XHRsZXQgYm9keTtcblx0XHRcdFx0aWYgKGlzRm9ybURhdGEob3ZlcnJpZGRlbkluaXQuYm9keSkgfHwgb3ZlcnJpZGRlbkluaXQuYm9keSBpbnN0YW5jZW9mIFVSTFNlYXJjaFBhcmFtcyB8fCBpc0Jsb2Iob3ZlcnJpZGRlbkluaXQuYm9keSkpIGJvZHkgPSBvdmVycmlkZGVuSW5pdC5ib2R5O1xuXHRcdFx0XHRlbHNlIGlmICh0aGlzLmlzSnNvbk1pbWUoaGVhZGVyc1tcIkNvbnRlbnQtVHlwZVwiXSkpIGJvZHkgPSBKU09OLnN0cmluZ2lmeShvdmVycmlkZGVuSW5pdC5ib2R5KTtcblx0XHRcdFx0ZWxzZSBib2R5ID0gb3ZlcnJpZGRlbkluaXQuYm9keTtcblx0XHRcdFx0Y29uc3QgaW5pdCA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgb3ZlcnJpZGRlbkluaXQpLCB7IGJvZHkgfSk7XG5cdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0dXJsLFxuXHRcdFx0XHRcdGluaXRcblx0XHRcdFx0fTtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHQvKipcblx0XHQqIENyZWF0ZSBhIHNoYWxsb3cgY2xvbmUgb2YgYHRoaXNgIGJ5IGNvbnN0cnVjdGluZyBhIG5ldyBpbnN0YW5jZVxuXHRcdCogYW5kIHRoZW4gc2hhbGxvdyBjbG9uaW5nIGRhdGEgbWVtYmVycy5cblx0XHQqL1xuXHRcdGNsb25lKCkge1xuXHRcdFx0Y29uc3QgY29uc3RydWN0b3IgPSB0aGlzLmNvbnN0cnVjdG9yO1xuXHRcdFx0Y29uc3QgbmV4dCA9IG5ldyBjb25zdHJ1Y3Rvcih0aGlzLmNvbmZpZ3VyYXRpb24pO1xuXHRcdFx0bmV4dC5taWRkbGV3YXJlID0gdGhpcy5taWRkbGV3YXJlLnNsaWNlKCk7XG5cdFx0XHRyZXR1cm4gbmV4dDtcblx0XHR9XG5cdH07XG5cdGV4cG9ydHMuQmFzZUFQSSA9IEJhc2VBUEk7XG5cdEJhc2VBUEkuanNvblJlZ2V4ID0gbmV3IFJlZ0V4cChcIl4oOj9hcHBsaWNhdGlvbi9qc29ufFteOy8gXHRdKy9bXjsvIFx0XStbK11qc29uKVsgXHRdKig6PzsuKik/JFwiLCBcImlcIik7XG5cdGZ1bmN0aW9uIGlzQmxvYih2YWx1ZSkge1xuXHRcdHJldHVybiB0eXBlb2YgQmxvYiAhPT0gXCJ1bmRlZmluZWRcIiAmJiB2YWx1ZSBpbnN0YW5jZW9mIEJsb2I7XG5cdH1cblx0ZnVuY3Rpb24gaXNGb3JtRGF0YSh2YWx1ZSkge1xuXHRcdHJldHVybiB0eXBlb2YgRm9ybURhdGEgIT09IFwidW5kZWZpbmVkXCIgJiYgdmFsdWUgaW5zdGFuY2VvZiBGb3JtRGF0YTtcblx0fVxuXHR2YXIgUmVzcG9uc2VFcnJvciA9IGNsYXNzIGV4dGVuZHMgRXJyb3Ige1xuXHRcdGNvbnN0cnVjdG9yKHJlc3BvbnNlLCBtc2cpIHtcblx0XHRcdHN1cGVyKG1zZyk7XG5cdFx0XHR0aGlzLnJlc3BvbnNlID0gcmVzcG9uc2U7XG5cdFx0XHR0aGlzLm5hbWUgPSBcIlJlc3BvbnNlRXJyb3JcIjtcblx0XHR9XG5cdH07XG5cdGV4cG9ydHMuUmVzcG9uc2VFcnJvciA9IFJlc3BvbnNlRXJyb3I7XG5cdHZhciBGZXRjaEVycm9yID0gY2xhc3MgZXh0ZW5kcyBFcnJvciB7XG5cdFx0Y29uc3RydWN0b3IoY2F1c2UsIG1zZykge1xuXHRcdFx0c3VwZXIobXNnKTtcblx0XHRcdHRoaXMuY2F1c2UgPSBjYXVzZTtcblx0XHRcdHRoaXMubmFtZSA9IFwiRmV0Y2hFcnJvclwiO1xuXHRcdH1cblx0fTtcblx0ZXhwb3J0cy5GZXRjaEVycm9yID0gRmV0Y2hFcnJvcjtcblx0dmFyIFJlcXVpcmVkRXJyb3IgPSBjbGFzcyBleHRlbmRzIEVycm9yIHtcblx0XHRjb25zdHJ1Y3RvcihmaWVsZCwgbXNnKSB7XG5cdFx0XHRzdXBlcihtc2cpO1xuXHRcdFx0dGhpcy5maWVsZCA9IGZpZWxkO1xuXHRcdFx0dGhpcy5uYW1lID0gXCJSZXF1aXJlZEVycm9yXCI7XG5cdFx0fVxuXHR9O1xuXHRleHBvcnRzLlJlcXVpcmVkRXJyb3IgPSBSZXF1aXJlZEVycm9yO1xuXHRleHBvcnRzLkNPTExFQ1RJT05fRk9STUFUUyA9IHtcblx0XHRjc3Y6IFwiLFwiLFxuXHRcdHNzdjogXCIgXCIsXG5cdFx0dHN2OiBcIlx0XCIsXG5cdFx0cGlwZXM6IFwifFwiXG5cdH07XG5cdGZ1bmN0aW9uIHF1ZXJ5c3RyaW5nKHBhcmFtcywgcHJlZml4ID0gXCJcIikge1xuXHRcdHJldHVybiBPYmplY3Qua2V5cyhwYXJhbXMpLm1hcCgoa2V5KSA9PiBxdWVyeXN0cmluZ1NpbmdsZUtleShrZXksIHBhcmFtc1trZXldLCBwcmVmaXgpKS5maWx0ZXIoKHBhcnQpID0+IHBhcnQubGVuZ3RoID4gMCkuam9pbihcIiZcIik7XG5cdH1cblx0ZnVuY3Rpb24gcXVlcnlzdHJpbmdTaW5nbGVLZXkoa2V5LCB2YWx1ZSwga2V5UHJlZml4ID0gXCJcIikge1xuXHRcdGNvbnN0IGZ1bGxLZXkgPSBrZXlQcmVmaXggKyAoa2V5UHJlZml4Lmxlbmd0aCA/IGBbJHtrZXl9XWAgOiBrZXkpO1xuXHRcdGlmICh2YWx1ZSBpbnN0YW5jZW9mIEFycmF5KSB7XG5cdFx0XHRjb25zdCBtdWx0aVZhbHVlID0gdmFsdWUubWFwKChzaW5nbGVWYWx1ZSkgPT4gZW5jb2RlVVJJQ29tcG9uZW50KFN0cmluZyhzaW5nbGVWYWx1ZSkpKS5qb2luKGAmJHtlbmNvZGVVUklDb21wb25lbnQoZnVsbEtleSl9PWApO1xuXHRcdFx0cmV0dXJuIGAke2VuY29kZVVSSUNvbXBvbmVudChmdWxsS2V5KX09JHttdWx0aVZhbHVlfWA7XG5cdFx0fVxuXHRcdGlmICh2YWx1ZSBpbnN0YW5jZW9mIFNldCkgcmV0dXJuIHF1ZXJ5c3RyaW5nU2luZ2xlS2V5KGtleSwgQXJyYXkuZnJvbSh2YWx1ZSksIGtleVByZWZpeCk7XG5cdFx0aWYgKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSkgcmV0dXJuIGAke2VuY29kZVVSSUNvbXBvbmVudChmdWxsS2V5KX09JHtlbmNvZGVVUklDb21wb25lbnQodmFsdWUudG9JU09TdHJpbmcoKSl9YDtcblx0XHRpZiAodmFsdWUgaW5zdGFuY2VvZiBPYmplY3QpIHJldHVybiBxdWVyeXN0cmluZyh2YWx1ZSwgZnVsbEtleSk7XG5cdFx0cmV0dXJuIGAke2VuY29kZVVSSUNvbXBvbmVudChmdWxsS2V5KX09JHtlbmNvZGVVUklDb21wb25lbnQoU3RyaW5nKHZhbHVlKSl9YDtcblx0fVxuXHRmdW5jdGlvbiBleGlzdHMoanNvbiwga2V5KSB7XG5cdFx0Y29uc3QgdmFsdWUgPSBqc29uW2tleV07XG5cdFx0cmV0dXJuIHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB2b2lkIDA7XG5cdH1cblx0ZnVuY3Rpb24gbWFwVmFsdWVzKGRhdGEsIGZuKSB7XG5cdFx0cmV0dXJuIE9iamVjdC5rZXlzKGRhdGEpLnJlZHVjZSgoYWNjLCBrZXkpID0+IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgYWNjKSwgeyBba2V5XTogZm4oZGF0YVtrZXldKSB9KSwge30pO1xuXHR9XG5cdGZ1bmN0aW9uIGNhbkNvbnN1bWVGb3JtKGNvbnN1bWVzKSB7XG5cdFx0Zm9yIChjb25zdCBjb25zdW1lIG9mIGNvbnN1bWVzKSBpZiAoXCJtdWx0aXBhcnQvZm9ybS1kYXRhXCIgPT09IGNvbnN1bWUuY29udGVudFR5cGUpIHJldHVybiB0cnVlO1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHR2YXIgSlNPTkFwaVJlc3BvbnNlID0gY2xhc3Mge1xuXHRcdGNvbnN0cnVjdG9yKHJhdywgdHJhbnNmb3JtZXIgPSAoanNvblZhbHVlKSA9PiBqc29uVmFsdWUpIHtcblx0XHRcdHRoaXMucmF3ID0gcmF3O1xuXHRcdFx0dGhpcy50cmFuc2Zvcm1lciA9IHRyYW5zZm9ybWVyO1xuXHRcdH1cblx0XHR2YWx1ZSgpIHtcblx0XHRcdHJldHVybiBfX2F3YWl0ZXIkNSh0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcblx0XHRcdFx0cmV0dXJuIHRoaXMudHJhbnNmb3JtZXIoeWllbGQgdGhpcy5yYXcuanNvbigpKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0fTtcblx0ZXhwb3J0cy5KU09OQXBpUmVzcG9uc2UgPSBKU09OQXBpUmVzcG9uc2U7XG5cdHZhciBWb2lkQXBpUmVzcG9uc2UgPSBjbGFzcyB7XG5cdFx0Y29uc3RydWN0b3IocmF3KSB7XG5cdFx0XHR0aGlzLnJhdyA9IHJhdztcblx0XHR9XG5cdFx0dmFsdWUoKSB7XG5cdFx0XHRyZXR1cm4gX19hd2FpdGVyJDUodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7fSk7XG5cdFx0fVxuXHR9O1xuXHRleHBvcnRzLlZvaWRBcGlSZXNwb25zZSA9IFZvaWRBcGlSZXNwb25zZTtcblx0dmFyIEJsb2JBcGlSZXNwb25zZSA9IGNsYXNzIHtcblx0XHRjb25zdHJ1Y3RvcihyYXcpIHtcblx0XHRcdHRoaXMucmF3ID0gcmF3O1xuXHRcdH1cblx0XHR2YWx1ZSgpIHtcblx0XHRcdHJldHVybiBfX2F3YWl0ZXIkNSh0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcblx0XHRcdFx0cmV0dXJuIHlpZWxkIHRoaXMucmF3LmJsb2IoKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0fTtcblx0ZXhwb3J0cy5CbG9iQXBpUmVzcG9uc2UgPSBCbG9iQXBpUmVzcG9uc2U7XG5cdHZhciBUZXh0QXBpUmVzcG9uc2UgPSBjbGFzcyB7XG5cdFx0Y29uc3RydWN0b3IocmF3KSB7XG5cdFx0XHR0aGlzLnJhdyA9IHJhdztcblx0XHR9XG5cdFx0dmFsdWUoKSB7XG5cdFx0XHRyZXR1cm4gX19hd2FpdGVyJDUodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG5cdFx0XHRcdHJldHVybiB5aWVsZCB0aGlzLnJhdy50ZXh0KCk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdH07XG5cdGV4cG9ydHMuVGV4dEFwaVJlc3BvbnNlID0gVGV4dEFwaVJlc3BvbnNlO1xufSkgfSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIC4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvQ3VzdG9tZXJTZXJ2aWNlUHJvdmlkZXIuanNcbnZhciByZXF1aXJlX0N1c3RvbWVyU2VydmljZVByb3ZpZGVyID0gLyogQF9fUFVSRV9fICovIF9fY29tbW9uSlMoeyBcIi4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvQ3VzdG9tZXJTZXJ2aWNlUHJvdmlkZXIuanNcIjogKChleHBvcnRzKSA9PiB7XG5cdC8qKlxuXHQqIENvbW1lcmNlXG5cdCogTm8gZGVzY3JpcHRpb24gcHJvdmlkZWQgKGdlbmVyYXRlZCBieSBPcGVuYXBpIEdlbmVyYXRvciBodHRwczovL2dpdGh1Yi5jb20vb3BlbmFwaXRvb2xzL29wZW5hcGktZ2VuZXJhdG9yKVxuXHQqXG5cdCogVGhlIHZlcnNpb24gb2YgdGhlIE9wZW5BUEkgZG9jdW1lbnQ6IDEuMS4wXG5cdCpcblx0KlxuXHQqIE5PVEU6IFRoaXMgY2xhc3MgaXMgYXV0byBnZW5lcmF0ZWQgYnkgT3BlbkFQSSBHZW5lcmF0b3IgKGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaCkuXG5cdCogaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoXG5cdCogRG8gbm90IGVkaXQgdGhlIGNsYXNzIG1hbnVhbGx5LlxuXHQqL1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5cdGV4cG9ydHMuQ3VzdG9tZXJTZXJ2aWNlUHJvdmlkZXIgPSB2b2lkIDA7XG5cdGV4cG9ydHMuaW5zdGFuY2VPZkN1c3RvbWVyU2VydmljZVByb3ZpZGVyID0gaW5zdGFuY2VPZkN1c3RvbWVyU2VydmljZVByb3ZpZGVyO1xuXHRleHBvcnRzLkN1c3RvbWVyU2VydmljZVByb3ZpZGVyRnJvbUpTT04gPSBDdXN0b21lclNlcnZpY2VQcm92aWRlckZyb21KU09OO1xuXHRleHBvcnRzLkN1c3RvbWVyU2VydmljZVByb3ZpZGVyRnJvbUpTT05UeXBlZCA9IEN1c3RvbWVyU2VydmljZVByb3ZpZGVyRnJvbUpTT05UeXBlZDtcblx0ZXhwb3J0cy5DdXN0b21lclNlcnZpY2VQcm92aWRlclRvSlNPTiA9IEN1c3RvbWVyU2VydmljZVByb3ZpZGVyVG9KU09OO1xuXHRleHBvcnRzLkN1c3RvbWVyU2VydmljZVByb3ZpZGVyVG9KU09OVHlwZWQgPSBDdXN0b21lclNlcnZpY2VQcm92aWRlclRvSlNPTlR5cGVkO1xuXHQvKipcblx0KlxuXHQqIEBleHBvcnRcblx0KiBAZW51bSB7c3RyaW5nfVxuXHQqL1xuXHR2YXIgQ3VzdG9tZXJTZXJ2aWNlUHJvdmlkZXI7XG5cdChmdW5jdGlvbihDdXN0b21lclNlcnZpY2VQcm92aWRlciQxKSB7XG5cdFx0Q3VzdG9tZXJTZXJ2aWNlUHJvdmlkZXIkMVtcIkdsYWRseVwiXSA9IFwiR0xBRExZXCI7XG5cdFx0Q3VzdG9tZXJTZXJ2aWNlUHJvdmlkZXIkMVtcIkt1c3RvbWVyXCJdID0gXCJLVVNUT01FUlwiO1xuXHRcdEN1c3RvbWVyU2VydmljZVByb3ZpZGVyJDFbXCJHb3JnaWFzXCJdID0gXCJHT1JHSUFTXCI7XG5cdFx0Q3VzdG9tZXJTZXJ2aWNlUHJvdmlkZXIkMVtcIlVuc3VwcG9ydGVkXCJdID0gXCJVTlNVUFBPUlRFRFwiO1xuXHR9KShDdXN0b21lclNlcnZpY2VQcm92aWRlciB8fCAoZXhwb3J0cy5DdXN0b21lclNlcnZpY2VQcm92aWRlciA9IEN1c3RvbWVyU2VydmljZVByb3ZpZGVyID0ge30pKTtcblx0ZnVuY3Rpb24gaW5zdGFuY2VPZkN1c3RvbWVyU2VydmljZVByb3ZpZGVyKHZhbHVlKSB7XG5cdFx0Zm9yIChjb25zdCBrZXkgaW4gQ3VzdG9tZXJTZXJ2aWNlUHJvdmlkZXIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoQ3VzdG9tZXJTZXJ2aWNlUHJvdmlkZXIsIGtleSkpIHtcblx0XHRcdGlmIChDdXN0b21lclNlcnZpY2VQcm92aWRlcltrZXldID09PSB2YWx1ZSkgcmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHRmdW5jdGlvbiBDdXN0b21lclNlcnZpY2VQcm92aWRlckZyb21KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gQ3VzdG9tZXJTZXJ2aWNlUHJvdmlkZXJGcm9tSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBDdXN0b21lclNlcnZpY2VQcm92aWRlckZyb21KU09OVHlwZWQoanNvbiwgaWdub3JlRGlzY3JpbWluYXRvcikge1xuXHRcdHJldHVybiBqc29uO1xuXHR9XG5cdGZ1bmN0aW9uIEN1c3RvbWVyU2VydmljZVByb3ZpZGVyVG9KU09OKHZhbHVlKSB7XG5cdFx0cmV0dXJuIHZhbHVlO1xuXHR9XG5cdGZ1bmN0aW9uIEN1c3RvbWVyU2VydmljZVByb3ZpZGVyVG9KU09OVHlwZWQodmFsdWUsIGlnbm9yZURpc2NyaW1pbmF0b3IpIHtcblx0XHRyZXR1cm4gdmFsdWU7XG5cdH1cbn0pIH0pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiAuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL0FkZE5vdGVUb0xhdGVzdENvbnZlcnNhdGlvblJlcXVlc3QuanNcbnZhciByZXF1aXJlX0FkZE5vdGVUb0xhdGVzdENvbnZlcnNhdGlvblJlcXVlc3QgPSAvKiBAX19QVVJFX18gKi8gX19jb21tb25KUyh7IFwiLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9BZGROb3RlVG9MYXRlc3RDb252ZXJzYXRpb25SZXF1ZXN0LmpzXCI6ICgoZXhwb3J0cykgPT4ge1xuXHQvKipcblx0KiBDb21tZXJjZVxuXHQqIE5vIGRlc2NyaXB0aW9uIHByb3ZpZGVkIChnZW5lcmF0ZWQgYnkgT3BlbmFwaSBHZW5lcmF0b3IgaHR0cHM6Ly9naXRodWIuY29tL29wZW5hcGl0b29scy9vcGVuYXBpLWdlbmVyYXRvcilcblx0KlxuXHQqIFRoZSB2ZXJzaW9uIG9mIHRoZSBPcGVuQVBJIGRvY3VtZW50OiAxLjEuMFxuXHQqXG5cdCpcblx0KiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IE9wZW5BUEkgR2VuZXJhdG9yIChodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2gpLlxuXHQqIGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaFxuXHQqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cblx0Ki9cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuXHRleHBvcnRzLmluc3RhbmNlT2ZBZGROb3RlVG9MYXRlc3RDb252ZXJzYXRpb25SZXF1ZXN0ID0gaW5zdGFuY2VPZkFkZE5vdGVUb0xhdGVzdENvbnZlcnNhdGlvblJlcXVlc3Q7XG5cdGV4cG9ydHMuQWRkTm90ZVRvTGF0ZXN0Q29udmVyc2F0aW9uUmVxdWVzdEZyb21KU09OID0gQWRkTm90ZVRvTGF0ZXN0Q29udmVyc2F0aW9uUmVxdWVzdEZyb21KU09OO1xuXHRleHBvcnRzLkFkZE5vdGVUb0xhdGVzdENvbnZlcnNhdGlvblJlcXVlc3RGcm9tSlNPTlR5cGVkID0gQWRkTm90ZVRvTGF0ZXN0Q29udmVyc2F0aW9uUmVxdWVzdEZyb21KU09OVHlwZWQ7XG5cdGV4cG9ydHMuQWRkTm90ZVRvTGF0ZXN0Q29udmVyc2F0aW9uUmVxdWVzdFRvSlNPTiA9IEFkZE5vdGVUb0xhdGVzdENvbnZlcnNhdGlvblJlcXVlc3RUb0pTT047XG5cdGV4cG9ydHMuQWRkTm90ZVRvTGF0ZXN0Q29udmVyc2F0aW9uUmVxdWVzdFRvSlNPTlR5cGVkID0gQWRkTm90ZVRvTGF0ZXN0Q29udmVyc2F0aW9uUmVxdWVzdFRvSlNPTlR5cGVkO1xuXHRjb25zdCBDdXN0b21lclNlcnZpY2VQcm92aWRlcl8xJDQgPSByZXF1aXJlX0N1c3RvbWVyU2VydmljZVByb3ZpZGVyKCk7XG5cdC8qKlxuXHQqIENoZWNrIGlmIGEgZ2l2ZW4gb2JqZWN0IGltcGxlbWVudHMgdGhlIEFkZE5vdGVUb0xhdGVzdENvbnZlcnNhdGlvblJlcXVlc3QgaW50ZXJmYWNlLlxuXHQqL1xuXHRmdW5jdGlvbiBpbnN0YW5jZU9mQWRkTm90ZVRvTGF0ZXN0Q29udmVyc2F0aW9uUmVxdWVzdCh2YWx1ZSkge1xuXHRcdGlmICghKFwiZW1haWxcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJlbWFpbFwiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0aWYgKCEoXCJzcGlmZnlfdXNlcl9pZFwiIGluIHZhbHVlKSB8fCB2YWx1ZVtcInNwaWZmeV91c2VyX2lkXCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHRmdW5jdGlvbiBBZGROb3RlVG9MYXRlc3RDb252ZXJzYXRpb25SZXF1ZXN0RnJvbUpTT04oanNvbikge1xuXHRcdHJldHVybiBBZGROb3RlVG9MYXRlc3RDb252ZXJzYXRpb25SZXF1ZXN0RnJvbUpTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gQWRkTm90ZVRvTGF0ZXN0Q29udmVyc2F0aW9uUmVxdWVzdEZyb21KU09OVHlwZWQoanNvbiwgaWdub3JlRGlzY3JpbWluYXRvcikge1xuXHRcdGlmIChqc29uID09IG51bGwpIHJldHVybiBqc29uO1xuXHRcdHJldHVybiB7XG5cdFx0XHRcImN1c3RvbWVyX3NlcnZpY2VfcHJvdmlkZXJcIjoganNvbltcImN1c3RvbWVyX3NlcnZpY2VfcHJvdmlkZXJcIl0gPT0gbnVsbCA/IHZvaWQgMCA6ICgwLCBDdXN0b21lclNlcnZpY2VQcm92aWRlcl8xJDQuQ3VzdG9tZXJTZXJ2aWNlUHJvdmlkZXJGcm9tSlNPTikoanNvbltcImN1c3RvbWVyX3NlcnZpY2VfcHJvdmlkZXJcIl0pLFxuXHRcdFx0XCJlbWFpbFwiOiBqc29uW1wiZW1haWxcIl0sXG5cdFx0XHRcIm5hbWVcIjoganNvbltcIm5hbWVcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IGpzb25bXCJuYW1lXCJdLFxuXHRcdFx0XCJzcGlmZnlfdXNlcl9pZFwiOiBqc29uW1wic3BpZmZ5X3VzZXJfaWRcIl0sXG5cdFx0XHRcInN1YmplY3RcIjoganNvbltcInN1YmplY3RcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IGpzb25bXCJzdWJqZWN0XCJdXG5cdFx0fTtcblx0fVxuXHRmdW5jdGlvbiBBZGROb3RlVG9MYXRlc3RDb252ZXJzYXRpb25SZXF1ZXN0VG9KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gQWRkTm90ZVRvTGF0ZXN0Q29udmVyc2F0aW9uUmVxdWVzdFRvSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBBZGROb3RlVG9MYXRlc3RDb252ZXJzYXRpb25SZXF1ZXN0VG9KU09OVHlwZWQodmFsdWUsIGlnbm9yZURpc2NyaW1pbmF0b3IgPSBmYWxzZSkge1xuXHRcdGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gdmFsdWU7XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwiY3VzdG9tZXJfc2VydmljZV9wcm92aWRlclwiOiAoMCwgQ3VzdG9tZXJTZXJ2aWNlUHJvdmlkZXJfMSQ0LkN1c3RvbWVyU2VydmljZVByb3ZpZGVyVG9KU09OKSh2YWx1ZVtcImN1c3RvbWVyX3NlcnZpY2VfcHJvdmlkZXJcIl0pLFxuXHRcdFx0XCJlbWFpbFwiOiB2YWx1ZVtcImVtYWlsXCJdLFxuXHRcdFx0XCJuYW1lXCI6IHZhbHVlW1wibmFtZVwiXSxcblx0XHRcdFwic3BpZmZ5X3VzZXJfaWRcIjogdmFsdWVbXCJzcGlmZnlfdXNlcl9pZFwiXSxcblx0XHRcdFwic3ViamVjdFwiOiB2YWx1ZVtcInN1YmplY3RcIl1cblx0XHR9O1xuXHR9XG59KSB9KTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9BZGROb3RlVG9MYXRlc3RDb252ZXJzYXRpb25SZXNwb25zZS5qc1xudmFyIHJlcXVpcmVfQWRkTm90ZVRvTGF0ZXN0Q29udmVyc2F0aW9uUmVzcG9uc2UgPSAvKiBAX19QVVJFX18gKi8gX19jb21tb25KUyh7IFwiLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9BZGROb3RlVG9MYXRlc3RDb252ZXJzYXRpb25SZXNwb25zZS5qc1wiOiAoKGV4cG9ydHMpID0+IHtcblx0LyoqXG5cdCogQ29tbWVyY2Vcblx0KiBObyBkZXNjcmlwdGlvbiBwcm92aWRlZCAoZ2VuZXJhdGVkIGJ5IE9wZW5hcGkgR2VuZXJhdG9yIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuYXBpdG9vbHMvb3BlbmFwaS1nZW5lcmF0b3IpXG5cdCpcblx0KiBUaGUgdmVyc2lvbiBvZiB0aGUgT3BlbkFQSSBkb2N1bWVudDogMS4xLjBcblx0KlxuXHQqXG5cdCogTk9URTogVGhpcyBjbGFzcyBpcyBhdXRvIGdlbmVyYXRlZCBieSBPcGVuQVBJIEdlbmVyYXRvciAoaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoKS5cblx0KiBodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2hcblx0KiBEbyBub3QgZWRpdCB0aGUgY2xhc3MgbWFudWFsbHkuXG5cdCovXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcblx0ZXhwb3J0cy5pbnN0YW5jZU9mQWRkTm90ZVRvTGF0ZXN0Q29udmVyc2F0aW9uUmVzcG9uc2UgPSBpbnN0YW5jZU9mQWRkTm90ZVRvTGF0ZXN0Q29udmVyc2F0aW9uUmVzcG9uc2U7XG5cdGV4cG9ydHMuQWRkTm90ZVRvTGF0ZXN0Q29udmVyc2F0aW9uUmVzcG9uc2VGcm9tSlNPTiA9IEFkZE5vdGVUb0xhdGVzdENvbnZlcnNhdGlvblJlc3BvbnNlRnJvbUpTT047XG5cdGV4cG9ydHMuQWRkTm90ZVRvTGF0ZXN0Q29udmVyc2F0aW9uUmVzcG9uc2VGcm9tSlNPTlR5cGVkID0gQWRkTm90ZVRvTGF0ZXN0Q29udmVyc2F0aW9uUmVzcG9uc2VGcm9tSlNPTlR5cGVkO1xuXHRleHBvcnRzLkFkZE5vdGVUb0xhdGVzdENvbnZlcnNhdGlvblJlc3BvbnNlVG9KU09OID0gQWRkTm90ZVRvTGF0ZXN0Q29udmVyc2F0aW9uUmVzcG9uc2VUb0pTT047XG5cdGV4cG9ydHMuQWRkTm90ZVRvTGF0ZXN0Q29udmVyc2F0aW9uUmVzcG9uc2VUb0pTT05UeXBlZCA9IEFkZE5vdGVUb0xhdGVzdENvbnZlcnNhdGlvblJlc3BvbnNlVG9KU09OVHlwZWQ7XG5cdC8qKlxuXHQqIENoZWNrIGlmIGEgZ2l2ZW4gb2JqZWN0IGltcGxlbWVudHMgdGhlIEFkZE5vdGVUb0xhdGVzdENvbnZlcnNhdGlvblJlc3BvbnNlIGludGVyZmFjZS5cblx0Ki9cblx0ZnVuY3Rpb24gaW5zdGFuY2VPZkFkZE5vdGVUb0xhdGVzdENvbnZlcnNhdGlvblJlc3BvbnNlKHZhbHVlKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0ZnVuY3Rpb24gQWRkTm90ZVRvTGF0ZXN0Q29udmVyc2F0aW9uUmVzcG9uc2VGcm9tSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIEFkZE5vdGVUb0xhdGVzdENvbnZlcnNhdGlvblJlc3BvbnNlRnJvbUpTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gQWRkTm90ZVRvTGF0ZXN0Q29udmVyc2F0aW9uUmVzcG9uc2VGcm9tSlNPTlR5cGVkKGpzb24sIGlnbm9yZURpc2NyaW1pbmF0b3IpIHtcblx0XHRpZiAoanNvbiA9PSBudWxsKSByZXR1cm4ganNvbjtcblx0XHRyZXR1cm4ge1xuXHRcdFx0XCJjb252ZXJzYXRpb25faWRcIjoganNvbltcImNvbnZlcnNhdGlvbl9pZFwiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcImNvbnZlcnNhdGlvbl9pZFwiXSxcblx0XHRcdFwiY3VzdG9tZXJfaWRcIjoganNvbltcImN1c3RvbWVyX2lkXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wiY3VzdG9tZXJfaWRcIl0sXG5cdFx0XHRcIm1lc3NhZ2VcIjoganNvbltcIm1lc3NhZ2VcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IGpzb25bXCJtZXNzYWdlXCJdXG5cdFx0fTtcblx0fVxuXHRmdW5jdGlvbiBBZGROb3RlVG9MYXRlc3RDb252ZXJzYXRpb25SZXNwb25zZVRvSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIEFkZE5vdGVUb0xhdGVzdENvbnZlcnNhdGlvblJlc3BvbnNlVG9KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIEFkZE5vdGVUb0xhdGVzdENvbnZlcnNhdGlvblJlc3BvbnNlVG9KU09OVHlwZWQodmFsdWUsIGlnbm9yZURpc2NyaW1pbmF0b3IgPSBmYWxzZSkge1xuXHRcdGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gdmFsdWU7XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwiY29udmVyc2F0aW9uX2lkXCI6IHZhbHVlW1wiY29udmVyc2F0aW9uX2lkXCJdLFxuXHRcdFx0XCJjdXN0b21lcl9pZFwiOiB2YWx1ZVtcImN1c3RvbWVyX2lkXCJdLFxuXHRcdFx0XCJtZXNzYWdlXCI6IHZhbHVlW1wibWVzc2FnZVwiXVxuXHRcdH07XG5cdH1cbn0pIH0pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiAuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL0FkZFRvQ2FydEF0dHJpYnV0ZXMuanNcbnZhciByZXF1aXJlX0FkZFRvQ2FydEF0dHJpYnV0ZXMgPSAvKiBAX19QVVJFX18gKi8gX19jb21tb25KUyh7IFwiLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9BZGRUb0NhcnRBdHRyaWJ1dGVzLmpzXCI6ICgoZXhwb3J0cykgPT4ge1xuXHQvKipcblx0KiBDb21tZXJjZVxuXHQqIE5vIGRlc2NyaXB0aW9uIHByb3ZpZGVkIChnZW5lcmF0ZWQgYnkgT3BlbmFwaSBHZW5lcmF0b3IgaHR0cHM6Ly9naXRodWIuY29tL29wZW5hcGl0b29scy9vcGVuYXBpLWdlbmVyYXRvcilcblx0KlxuXHQqIFRoZSB2ZXJzaW9uIG9mIHRoZSBPcGVuQVBJIGRvY3VtZW50OiAxLjEuMFxuXHQqXG5cdCpcblx0KiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IE9wZW5BUEkgR2VuZXJhdG9yIChodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2gpLlxuXHQqIGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaFxuXHQqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cblx0Ki9cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuXHRleHBvcnRzLmluc3RhbmNlT2ZBZGRUb0NhcnRBdHRyaWJ1dGVzID0gaW5zdGFuY2VPZkFkZFRvQ2FydEF0dHJpYnV0ZXM7XG5cdGV4cG9ydHMuQWRkVG9DYXJ0QXR0cmlidXRlc0Zyb21KU09OID0gQWRkVG9DYXJ0QXR0cmlidXRlc0Zyb21KU09OO1xuXHRleHBvcnRzLkFkZFRvQ2FydEF0dHJpYnV0ZXNGcm9tSlNPTlR5cGVkID0gQWRkVG9DYXJ0QXR0cmlidXRlc0Zyb21KU09OVHlwZWQ7XG5cdGV4cG9ydHMuQWRkVG9DYXJ0QXR0cmlidXRlc1RvSlNPTiA9IEFkZFRvQ2FydEF0dHJpYnV0ZXNUb0pTT047XG5cdGV4cG9ydHMuQWRkVG9DYXJ0QXR0cmlidXRlc1RvSlNPTlR5cGVkID0gQWRkVG9DYXJ0QXR0cmlidXRlc1RvSlNPTlR5cGVkO1xuXHQvKipcblx0KiBDaGVjayBpZiBhIGdpdmVuIG9iamVjdCBpbXBsZW1lbnRzIHRoZSBBZGRUb0NhcnRBdHRyaWJ1dGVzIGludGVyZmFjZS5cblx0Ki9cblx0ZnVuY3Rpb24gaW5zdGFuY2VPZkFkZFRvQ2FydEF0dHJpYnV0ZXModmFsdWUpIHtcblx0XHRpZiAoIShcInByb2R1Y3RfaWRcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJwcm9kdWN0X2lkXCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHRmdW5jdGlvbiBBZGRUb0NhcnRBdHRyaWJ1dGVzRnJvbUpTT04oanNvbikge1xuXHRcdHJldHVybiBBZGRUb0NhcnRBdHRyaWJ1dGVzRnJvbUpTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gQWRkVG9DYXJ0QXR0cmlidXRlc0Zyb21KU09OVHlwZWQoanNvbiwgaWdub3JlRGlzY3JpbWluYXRvcikge1xuXHRcdGlmIChqc29uID09IG51bGwpIHJldHVybiBqc29uO1xuXHRcdHJldHVybiB7IFwicHJvZHVjdF9pZFwiOiBqc29uW1wicHJvZHVjdF9pZFwiXSB9O1xuXHR9XG5cdGZ1bmN0aW9uIEFkZFRvQ2FydEF0dHJpYnV0ZXNUb0pTT04oanNvbikge1xuXHRcdHJldHVybiBBZGRUb0NhcnRBdHRyaWJ1dGVzVG9KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIEFkZFRvQ2FydEF0dHJpYnV0ZXNUb0pTT05UeXBlZCh2YWx1ZSwgaWdub3JlRGlzY3JpbWluYXRvciA9IGZhbHNlKSB7XG5cdFx0aWYgKHZhbHVlID09IG51bGwpIHJldHVybiB2YWx1ZTtcblx0XHRyZXR1cm4geyBcInByb2R1Y3RfaWRcIjogdmFsdWVbXCJwcm9kdWN0X2lkXCJdIH07XG5cdH1cbn0pIH0pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiAuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL0FuYWx5dGljc0lkZW50aWZ5UmVxdWVzdC5qc1xudmFyIHJlcXVpcmVfQW5hbHl0aWNzSWRlbnRpZnlSZXF1ZXN0ID0gLyogQF9fUFVSRV9fICovIF9fY29tbW9uSlMoeyBcIi4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvQW5hbHl0aWNzSWRlbnRpZnlSZXF1ZXN0LmpzXCI6ICgoZXhwb3J0cykgPT4ge1xuXHQvKipcblx0KiBDb21tZXJjZVxuXHQqIE5vIGRlc2NyaXB0aW9uIHByb3ZpZGVkIChnZW5lcmF0ZWQgYnkgT3BlbmFwaSBHZW5lcmF0b3IgaHR0cHM6Ly9naXRodWIuY29tL29wZW5hcGl0b29scy9vcGVuYXBpLWdlbmVyYXRvcilcblx0KlxuXHQqIFRoZSB2ZXJzaW9uIG9mIHRoZSBPcGVuQVBJIGRvY3VtZW50OiAxLjEuMFxuXHQqXG5cdCpcblx0KiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IE9wZW5BUEkgR2VuZXJhdG9yIChodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2gpLlxuXHQqIGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaFxuXHQqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cblx0Ki9cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuXHRleHBvcnRzLmluc3RhbmNlT2ZBbmFseXRpY3NJZGVudGlmeVJlcXVlc3QgPSBpbnN0YW5jZU9mQW5hbHl0aWNzSWRlbnRpZnlSZXF1ZXN0O1xuXHRleHBvcnRzLkFuYWx5dGljc0lkZW50aWZ5UmVxdWVzdEZyb21KU09OID0gQW5hbHl0aWNzSWRlbnRpZnlSZXF1ZXN0RnJvbUpTT047XG5cdGV4cG9ydHMuQW5hbHl0aWNzSWRlbnRpZnlSZXF1ZXN0RnJvbUpTT05UeXBlZCA9IEFuYWx5dGljc0lkZW50aWZ5UmVxdWVzdEZyb21KU09OVHlwZWQ7XG5cdGV4cG9ydHMuQW5hbHl0aWNzSWRlbnRpZnlSZXF1ZXN0VG9KU09OID0gQW5hbHl0aWNzSWRlbnRpZnlSZXF1ZXN0VG9KU09OO1xuXHRleHBvcnRzLkFuYWx5dGljc0lkZW50aWZ5UmVxdWVzdFRvSlNPTlR5cGVkID0gQW5hbHl0aWNzSWRlbnRpZnlSZXF1ZXN0VG9KU09OVHlwZWQ7XG5cdC8qKlxuXHQqIENoZWNrIGlmIGEgZ2l2ZW4gb2JqZWN0IGltcGxlbWVudHMgdGhlIEFuYWx5dGljc0lkZW50aWZ5UmVxdWVzdCBpbnRlcmZhY2UuXG5cdCovXG5cdGZ1bmN0aW9uIGluc3RhbmNlT2ZBbmFseXRpY3NJZGVudGlmeVJlcXVlc3QodmFsdWUpIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHRmdW5jdGlvbiBBbmFseXRpY3NJZGVudGlmeVJlcXVlc3RGcm9tSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIEFuYWx5dGljc0lkZW50aWZ5UmVxdWVzdEZyb21KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIEFuYWx5dGljc0lkZW50aWZ5UmVxdWVzdEZyb21KU09OVHlwZWQoanNvbiwgaWdub3JlRGlzY3JpbWluYXRvcikge1xuXHRcdGlmIChqc29uID09IG51bGwpIHJldHVybiBqc29uO1xuXHRcdHJldHVybiB7XG5cdFx0XHRcImFwcF92ZXJzaW9uXCI6IGpzb25bXCJhcHBfdmVyc2lvblwiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcImFwcF92ZXJzaW9uXCJdLFxuXHRcdFx0XCJjYXJyaWVyXCI6IGpzb25bXCJjYXJyaWVyXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wiY2FycmllclwiXSxcblx0XHRcdFwiY2l0eVwiOiBqc29uW1wiY2l0eVwiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcImNpdHlcIl0sXG5cdFx0XHRcImNvdW50cnlcIjoganNvbltcImNvdW50cnlcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IGpzb25bXCJjb3VudHJ5XCJdLFxuXHRcdFx0XCJkZXZpY2VfYnJhbmRcIjoganNvbltcImRldmljZV9icmFuZFwiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcImRldmljZV9icmFuZFwiXSxcblx0XHRcdFwiZGV2aWNlX2lkXCI6IGpzb25bXCJkZXZpY2VfaWRcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IGpzb25bXCJkZXZpY2VfaWRcIl0sXG5cdFx0XHRcImRldmljZV9tYW51ZmFjdHVyZXJcIjoganNvbltcImRldmljZV9tYW51ZmFjdHVyZXJcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IGpzb25bXCJkZXZpY2VfbWFudWZhY3R1cmVyXCJdLFxuXHRcdFx0XCJkZXZpY2VfbW9kZWxcIjoganNvbltcImRldmljZV9tb2RlbFwiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcImRldmljZV9tb2RlbFwiXSxcblx0XHRcdFwiZG1hXCI6IGpzb25bXCJkbWFcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IGpzb25bXCJkbWFcIl0sXG5cdFx0XHRcImdyb3Vwc1wiOiBqc29uW1wiZ3JvdXBzXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wiZ3JvdXBzXCJdLFxuXHRcdFx0XCJvc19uYW1lXCI6IGpzb25bXCJvc19uYW1lXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wib3NfbmFtZVwiXSxcblx0XHRcdFwib3NfdmVyc2lvblwiOiBqc29uW1wib3NfdmVyc2lvblwiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcIm9zX3ZlcnNpb25cIl0sXG5cdFx0XHRcInBsYXRmb3JtXCI6IGpzb25bXCJwbGF0Zm9ybVwiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcInBsYXRmb3JtXCJdLFxuXHRcdFx0XCJyZWdpb25cIjoganNvbltcInJlZ2lvblwiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcInJlZ2lvblwiXSxcblx0XHRcdFwidXNlcl9pZFwiOiBqc29uW1widXNlcl9pZFwiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcInVzZXJfaWRcIl0sXG5cdFx0XHRcInVzZXJfcHJvcGVydGllc1wiOiBqc29uW1widXNlcl9wcm9wZXJ0aWVzXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1widXNlcl9wcm9wZXJ0aWVzXCJdXG5cdFx0fTtcblx0fVxuXHRmdW5jdGlvbiBBbmFseXRpY3NJZGVudGlmeVJlcXVlc3RUb0pTT04oanNvbikge1xuXHRcdHJldHVybiBBbmFseXRpY3NJZGVudGlmeVJlcXVlc3RUb0pTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gQW5hbHl0aWNzSWRlbnRpZnlSZXF1ZXN0VG9KU09OVHlwZWQodmFsdWUsIGlnbm9yZURpc2NyaW1pbmF0b3IgPSBmYWxzZSkge1xuXHRcdGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gdmFsdWU7XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwiYXBwX3ZlcnNpb25cIjogdmFsdWVbXCJhcHBfdmVyc2lvblwiXSxcblx0XHRcdFwiY2FycmllclwiOiB2YWx1ZVtcImNhcnJpZXJcIl0sXG5cdFx0XHRcImNpdHlcIjogdmFsdWVbXCJjaXR5XCJdLFxuXHRcdFx0XCJjb3VudHJ5XCI6IHZhbHVlW1wiY291bnRyeVwiXSxcblx0XHRcdFwiZGV2aWNlX2JyYW5kXCI6IHZhbHVlW1wiZGV2aWNlX2JyYW5kXCJdLFxuXHRcdFx0XCJkZXZpY2VfaWRcIjogdmFsdWVbXCJkZXZpY2VfaWRcIl0sXG5cdFx0XHRcImRldmljZV9tYW51ZmFjdHVyZXJcIjogdmFsdWVbXCJkZXZpY2VfbWFudWZhY3R1cmVyXCJdLFxuXHRcdFx0XCJkZXZpY2VfbW9kZWxcIjogdmFsdWVbXCJkZXZpY2VfbW9kZWxcIl0sXG5cdFx0XHRcImRtYVwiOiB2YWx1ZVtcImRtYVwiXSxcblx0XHRcdFwiZ3JvdXBzXCI6IHZhbHVlW1wiZ3JvdXBzXCJdLFxuXHRcdFx0XCJvc19uYW1lXCI6IHZhbHVlW1wib3NfbmFtZVwiXSxcblx0XHRcdFwib3NfdmVyc2lvblwiOiB2YWx1ZVtcIm9zX3ZlcnNpb25cIl0sXG5cdFx0XHRcInBsYXRmb3JtXCI6IHZhbHVlW1wicGxhdGZvcm1cIl0sXG5cdFx0XHRcInJlZ2lvblwiOiB2YWx1ZVtcInJlZ2lvblwiXSxcblx0XHRcdFwidXNlcl9pZFwiOiB2YWx1ZVtcInVzZXJfaWRcIl0sXG5cdFx0XHRcInVzZXJfcHJvcGVydGllc1wiOiB2YWx1ZVtcInVzZXJfcHJvcGVydGllc1wiXVxuXHRcdH07XG5cdH1cbn0pIH0pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiAuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL0FuYWx5dGljc1RyYWNrRXZlbnRSZXF1ZXN0LmpzXG52YXIgcmVxdWlyZV9BbmFseXRpY3NUcmFja0V2ZW50UmVxdWVzdCA9IC8qIEBfX1BVUkVfXyAqLyBfX2NvbW1vbkpTKHsgXCIuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL0FuYWx5dGljc1RyYWNrRXZlbnRSZXF1ZXN0LmpzXCI6ICgoZXhwb3J0cykgPT4ge1xuXHQvKipcblx0KiBDb21tZXJjZVxuXHQqIE5vIGRlc2NyaXB0aW9uIHByb3ZpZGVkIChnZW5lcmF0ZWQgYnkgT3BlbmFwaSBHZW5lcmF0b3IgaHR0cHM6Ly9naXRodWIuY29tL29wZW5hcGl0b29scy9vcGVuYXBpLWdlbmVyYXRvcilcblx0KlxuXHQqIFRoZSB2ZXJzaW9uIG9mIHRoZSBPcGVuQVBJIGRvY3VtZW50OiAxLjEuMFxuXHQqXG5cdCpcblx0KiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IE9wZW5BUEkgR2VuZXJhdG9yIChodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2gpLlxuXHQqIGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaFxuXHQqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cblx0Ki9cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuXHRleHBvcnRzLmluc3RhbmNlT2ZBbmFseXRpY3NUcmFja0V2ZW50UmVxdWVzdCA9IGluc3RhbmNlT2ZBbmFseXRpY3NUcmFja0V2ZW50UmVxdWVzdDtcblx0ZXhwb3J0cy5BbmFseXRpY3NUcmFja0V2ZW50UmVxdWVzdEZyb21KU09OID0gQW5hbHl0aWNzVHJhY2tFdmVudFJlcXVlc3RGcm9tSlNPTjtcblx0ZXhwb3J0cy5BbmFseXRpY3NUcmFja0V2ZW50UmVxdWVzdEZyb21KU09OVHlwZWQgPSBBbmFseXRpY3NUcmFja0V2ZW50UmVxdWVzdEZyb21KU09OVHlwZWQ7XG5cdGV4cG9ydHMuQW5hbHl0aWNzVHJhY2tFdmVudFJlcXVlc3RUb0pTT04gPSBBbmFseXRpY3NUcmFja0V2ZW50UmVxdWVzdFRvSlNPTjtcblx0ZXhwb3J0cy5BbmFseXRpY3NUcmFja0V2ZW50UmVxdWVzdFRvSlNPTlR5cGVkID0gQW5hbHl0aWNzVHJhY2tFdmVudFJlcXVlc3RUb0pTT05UeXBlZDtcblx0LyoqXG5cdCogQ2hlY2sgaWYgYSBnaXZlbiBvYmplY3QgaW1wbGVtZW50cyB0aGUgQW5hbHl0aWNzVHJhY2tFdmVudFJlcXVlc3QgaW50ZXJmYWNlLlxuXHQqL1xuXHRmdW5jdGlvbiBpbnN0YW5jZU9mQW5hbHl0aWNzVHJhY2tFdmVudFJlcXVlc3QodmFsdWUpIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHRmdW5jdGlvbiBBbmFseXRpY3NUcmFja0V2ZW50UmVxdWVzdEZyb21KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gQW5hbHl0aWNzVHJhY2tFdmVudFJlcXVlc3RGcm9tSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBBbmFseXRpY3NUcmFja0V2ZW50UmVxdWVzdEZyb21KU09OVHlwZWQoanNvbiwgaWdub3JlRGlzY3JpbWluYXRvcikge1xuXHRcdGlmIChqc29uID09IG51bGwpIHJldHVybiBqc29uO1xuXHRcdHJldHVybiB7XG5cdFx0XHRcImV2ZW50XCI6IGpzb25bXCJldmVudFwiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcImV2ZW50XCJdLFxuXHRcdFx0XCJldmVudF9wcm9wZXJ0aWVzXCI6IGpzb25bXCJldmVudF9wcm9wZXJ0aWVzXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wiZXZlbnRfcHJvcGVydGllc1wiXSxcblx0XHRcdFwidXNlcl9pZFwiOiBqc29uW1widXNlcl9pZFwiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcInVzZXJfaWRcIl0sXG5cdFx0XHRcInVzZXJfcHJvcGVydGllc1wiOiBqc29uW1widXNlcl9wcm9wZXJ0aWVzXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1widXNlcl9wcm9wZXJ0aWVzXCJdXG5cdFx0fTtcblx0fVxuXHRmdW5jdGlvbiBBbmFseXRpY3NUcmFja0V2ZW50UmVxdWVzdFRvSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIEFuYWx5dGljc1RyYWNrRXZlbnRSZXF1ZXN0VG9KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIEFuYWx5dGljc1RyYWNrRXZlbnRSZXF1ZXN0VG9KU09OVHlwZWQodmFsdWUsIGlnbm9yZURpc2NyaW1pbmF0b3IgPSBmYWxzZSkge1xuXHRcdGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gdmFsdWU7XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwiZXZlbnRcIjogdmFsdWVbXCJldmVudFwiXSxcblx0XHRcdFwiZXZlbnRfcHJvcGVydGllc1wiOiB2YWx1ZVtcImV2ZW50X3Byb3BlcnRpZXNcIl0sXG5cdFx0XHRcInVzZXJfaWRcIjogdmFsdWVbXCJ1c2VyX2lkXCJdLFxuXHRcdFx0XCJ1c2VyX3Byb3BlcnRpZXNcIjogdmFsdWVbXCJ1c2VyX3Byb3BlcnRpZXNcIl1cblx0XHR9O1xuXHR9XG59KSB9KTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9BdHRhY2htZW50UmVxdWVzdC5qc1xudmFyIHJlcXVpcmVfQXR0YWNobWVudFJlcXVlc3QgPSAvKiBAX19QVVJFX18gKi8gX19jb21tb25KUyh7IFwiLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9BdHRhY2htZW50UmVxdWVzdC5qc1wiOiAoKGV4cG9ydHMpID0+IHtcblx0LyoqXG5cdCogQ29tbWVyY2Vcblx0KiBObyBkZXNjcmlwdGlvbiBwcm92aWRlZCAoZ2VuZXJhdGVkIGJ5IE9wZW5hcGkgR2VuZXJhdG9yIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuYXBpdG9vbHMvb3BlbmFwaS1nZW5lcmF0b3IpXG5cdCpcblx0KiBUaGUgdmVyc2lvbiBvZiB0aGUgT3BlbkFQSSBkb2N1bWVudDogMS4xLjBcblx0KlxuXHQqXG5cdCogTk9URTogVGhpcyBjbGFzcyBpcyBhdXRvIGdlbmVyYXRlZCBieSBPcGVuQVBJIEdlbmVyYXRvciAoaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoKS5cblx0KiBodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2hcblx0KiBEbyBub3QgZWRpdCB0aGUgY2xhc3MgbWFudWFsbHkuXG5cdCovXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcblx0ZXhwb3J0cy5pbnN0YW5jZU9mQXR0YWNobWVudFJlcXVlc3QgPSBpbnN0YW5jZU9mQXR0YWNobWVudFJlcXVlc3Q7XG5cdGV4cG9ydHMuQXR0YWNobWVudFJlcXVlc3RGcm9tSlNPTiA9IEF0dGFjaG1lbnRSZXF1ZXN0RnJvbUpTT047XG5cdGV4cG9ydHMuQXR0YWNobWVudFJlcXVlc3RGcm9tSlNPTlR5cGVkID0gQXR0YWNobWVudFJlcXVlc3RGcm9tSlNPTlR5cGVkO1xuXHRleHBvcnRzLkF0dGFjaG1lbnRSZXF1ZXN0VG9KU09OID0gQXR0YWNobWVudFJlcXVlc3RUb0pTT047XG5cdGV4cG9ydHMuQXR0YWNobWVudFJlcXVlc3RUb0pTT05UeXBlZCA9IEF0dGFjaG1lbnRSZXF1ZXN0VG9KU09OVHlwZWQ7XG5cdC8qKlxuXHQqIENoZWNrIGlmIGEgZ2l2ZW4gb2JqZWN0IGltcGxlbWVudHMgdGhlIEF0dGFjaG1lbnRSZXF1ZXN0IGludGVyZmFjZS5cblx0Ki9cblx0ZnVuY3Rpb24gaW5zdGFuY2VPZkF0dGFjaG1lbnRSZXF1ZXN0KHZhbHVlKSB7XG5cdFx0aWYgKCEoXCJiYXNlNjRfY29udGVudFwiIGluIHZhbHVlKSB8fCB2YWx1ZVtcImJhc2U2NF9jb250ZW50XCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRpZiAoIShcImNvbnRlbnRfdHlwZVwiIGluIHZhbHVlKSB8fCB2YWx1ZVtcImNvbnRlbnRfdHlwZVwiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0aWYgKCEoXCJmaWxlX25hbWVcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJmaWxlX25hbWVcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdGZ1bmN0aW9uIEF0dGFjaG1lbnRSZXF1ZXN0RnJvbUpTT04oanNvbikge1xuXHRcdHJldHVybiBBdHRhY2htZW50UmVxdWVzdEZyb21KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIEF0dGFjaG1lbnRSZXF1ZXN0RnJvbUpTT05UeXBlZChqc29uLCBpZ25vcmVEaXNjcmltaW5hdG9yKSB7XG5cdFx0aWYgKGpzb24gPT0gbnVsbCkgcmV0dXJuIGpzb247XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwiYmFzZTY0X2NvbnRlbnRcIjoganNvbltcImJhc2U2NF9jb250ZW50XCJdLFxuXHRcdFx0XCJjb250ZW50X3R5cGVcIjoganNvbltcImNvbnRlbnRfdHlwZVwiXSxcblx0XHRcdFwiZmlsZV9uYW1lXCI6IGpzb25bXCJmaWxlX25hbWVcIl1cblx0XHR9O1xuXHR9XG5cdGZ1bmN0aW9uIEF0dGFjaG1lbnRSZXF1ZXN0VG9KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gQXR0YWNobWVudFJlcXVlc3RUb0pTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gQXR0YWNobWVudFJlcXVlc3RUb0pTT05UeXBlZCh2YWx1ZSwgaWdub3JlRGlzY3JpbWluYXRvciA9IGZhbHNlKSB7XG5cdFx0aWYgKHZhbHVlID09IG51bGwpIHJldHVybiB2YWx1ZTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0XCJiYXNlNjRfY29udGVudFwiOiB2YWx1ZVtcImJhc2U2NF9jb250ZW50XCJdLFxuXHRcdFx0XCJjb250ZW50X3R5cGVcIjogdmFsdWVbXCJjb250ZW50X3R5cGVcIl0sXG5cdFx0XHRcImZpbGVfbmFtZVwiOiB2YWx1ZVtcImZpbGVfbmFtZVwiXVxuXHRcdH07XG5cdH1cbn0pIH0pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiAuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL0Zvcm1UeXBlLmpzXG52YXIgcmVxdWlyZV9Gb3JtVHlwZSA9IC8qIEBfX1BVUkVfXyAqLyBfX2NvbW1vbkpTKHsgXCIuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL0Zvcm1UeXBlLmpzXCI6ICgoZXhwb3J0cykgPT4ge1xuXHQvKipcblx0KiBDb21tZXJjZVxuXHQqIE5vIGRlc2NyaXB0aW9uIHByb3ZpZGVkIChnZW5lcmF0ZWQgYnkgT3BlbmFwaSBHZW5lcmF0b3IgaHR0cHM6Ly9naXRodWIuY29tL29wZW5hcGl0b29scy9vcGVuYXBpLWdlbmVyYXRvcilcblx0KlxuXHQqIFRoZSB2ZXJzaW9uIG9mIHRoZSBPcGVuQVBJIGRvY3VtZW50OiAxLjEuMFxuXHQqXG5cdCpcblx0KiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IE9wZW5BUEkgR2VuZXJhdG9yIChodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2gpLlxuXHQqIGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaFxuXHQqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cblx0Ki9cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuXHRleHBvcnRzLkZvcm1UeXBlID0gdm9pZCAwO1xuXHRleHBvcnRzLmluc3RhbmNlT2ZGb3JtVHlwZSA9IGluc3RhbmNlT2ZGb3JtVHlwZTtcblx0ZXhwb3J0cy5Gb3JtVHlwZUZyb21KU09OID0gRm9ybVR5cGVGcm9tSlNPTjtcblx0ZXhwb3J0cy5Gb3JtVHlwZUZyb21KU09OVHlwZWQgPSBGb3JtVHlwZUZyb21KU09OVHlwZWQ7XG5cdGV4cG9ydHMuRm9ybVR5cGVUb0pTT04gPSBGb3JtVHlwZVRvSlNPTjtcblx0ZXhwb3J0cy5Gb3JtVHlwZVRvSlNPTlR5cGVkID0gRm9ybVR5cGVUb0pTT05UeXBlZDtcblx0LyoqXG5cdCpcblx0KiBAZXhwb3J0XG5cdCogQGVudW0ge3N0cmluZ31cblx0Ki9cblx0dmFyIEZvcm1UeXBlO1xuXHQoZnVuY3Rpb24oRm9ybVR5cGUkMSkge1xuXHRcdEZvcm1UeXBlJDFbXCJFc2NhbGF0aW9uXCJdID0gXCJlc2NhbGF0aW9uXCI7XG5cdFx0Rm9ybVR5cGUkMVtcIk9yZGVyTG9va3VwXCJdID0gXCJvcmRlcl9sb29rdXBcIjtcblx0fSkoRm9ybVR5cGUgfHwgKGV4cG9ydHMuRm9ybVR5cGUgPSBGb3JtVHlwZSA9IHt9KSk7XG5cdGZ1bmN0aW9uIGluc3RhbmNlT2ZGb3JtVHlwZSh2YWx1ZSkge1xuXHRcdGZvciAoY29uc3Qga2V5IGluIEZvcm1UeXBlKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKEZvcm1UeXBlLCBrZXkpKSB7XG5cdFx0XHRpZiAoRm9ybVR5cGVba2V5XSA9PT0gdmFsdWUpIHJldHVybiB0cnVlO1xuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblx0ZnVuY3Rpb24gRm9ybVR5cGVGcm9tSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIEZvcm1UeXBlRnJvbUpTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gRm9ybVR5cGVGcm9tSlNPTlR5cGVkKGpzb24sIGlnbm9yZURpc2NyaW1pbmF0b3IpIHtcblx0XHRyZXR1cm4ganNvbjtcblx0fVxuXHRmdW5jdGlvbiBGb3JtVHlwZVRvSlNPTih2YWx1ZSkge1xuXHRcdHJldHVybiB2YWx1ZTtcblx0fVxuXHRmdW5jdGlvbiBGb3JtVHlwZVRvSlNPTlR5cGVkKHZhbHVlLCBpZ25vcmVEaXNjcmltaW5hdG9yKSB7XG5cdFx0cmV0dXJuIHZhbHVlO1xuXHR9XG59KSB9KTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9BdXRvRm9ybS5qc1xudmFyIHJlcXVpcmVfQXV0b0Zvcm0gPSAvKiBAX19QVVJFX18gKi8gX19jb21tb25KUyh7IFwiLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9BdXRvRm9ybS5qc1wiOiAoKGV4cG9ydHMpID0+IHtcblx0LyoqXG5cdCogQ29tbWVyY2Vcblx0KiBObyBkZXNjcmlwdGlvbiBwcm92aWRlZCAoZ2VuZXJhdGVkIGJ5IE9wZW5hcGkgR2VuZXJhdG9yIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuYXBpdG9vbHMvb3BlbmFwaS1nZW5lcmF0b3IpXG5cdCpcblx0KiBUaGUgdmVyc2lvbiBvZiB0aGUgT3BlbkFQSSBkb2N1bWVudDogMS4xLjBcblx0KlxuXHQqXG5cdCogTk9URTogVGhpcyBjbGFzcyBpcyBhdXRvIGdlbmVyYXRlZCBieSBPcGVuQVBJIEdlbmVyYXRvciAoaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoKS5cblx0KiBodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2hcblx0KiBEbyBub3QgZWRpdCB0aGUgY2xhc3MgbWFudWFsbHkuXG5cdCovXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcblx0ZXhwb3J0cy5pbnN0YW5jZU9mQXV0b0Zvcm0gPSBpbnN0YW5jZU9mQXV0b0Zvcm07XG5cdGV4cG9ydHMuQXV0b0Zvcm1Gcm9tSlNPTiA9IEF1dG9Gb3JtRnJvbUpTT047XG5cdGV4cG9ydHMuQXV0b0Zvcm1Gcm9tSlNPTlR5cGVkID0gQXV0b0Zvcm1Gcm9tSlNPTlR5cGVkO1xuXHRleHBvcnRzLkF1dG9Gb3JtVG9KU09OID0gQXV0b0Zvcm1Ub0pTT047XG5cdGV4cG9ydHMuQXV0b0Zvcm1Ub0pTT05UeXBlZCA9IEF1dG9Gb3JtVG9KU09OVHlwZWQ7XG5cdGNvbnN0IEZvcm1UeXBlXzEkMiA9IHJlcXVpcmVfRm9ybVR5cGUoKTtcblx0LyoqXG5cdCogQ2hlY2sgaWYgYSBnaXZlbiBvYmplY3QgaW1wbGVtZW50cyB0aGUgQXV0b0Zvcm0gaW50ZXJmYWNlLlxuXHQqL1xuXHRmdW5jdGlvbiBpbnN0YW5jZU9mQXV0b0Zvcm0odmFsdWUpIHtcblx0XHRpZiAoIShcImZvcm1fdHlwZVwiIGluIHZhbHVlKSB8fCB2YWx1ZVtcImZvcm1fdHlwZVwiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0ZnVuY3Rpb24gQXV0b0Zvcm1Gcm9tSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIEF1dG9Gb3JtRnJvbUpTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gQXV0b0Zvcm1Gcm9tSlNPTlR5cGVkKGpzb24sIGlnbm9yZURpc2NyaW1pbmF0b3IpIHtcblx0XHRpZiAoanNvbiA9PSBudWxsKSByZXR1cm4ganNvbjtcblx0XHRyZXR1cm4geyBcImZvcm1fdHlwZVwiOiAoMCwgRm9ybVR5cGVfMSQyLkZvcm1UeXBlRnJvbUpTT04pKGpzb25bXCJmb3JtX3R5cGVcIl0pIH07XG5cdH1cblx0ZnVuY3Rpb24gQXV0b0Zvcm1Ub0pTT04oanNvbikge1xuXHRcdHJldHVybiBBdXRvRm9ybVRvSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBBdXRvRm9ybVRvSlNPTlR5cGVkKHZhbHVlLCBpZ25vcmVEaXNjcmltaW5hdG9yID0gZmFsc2UpIHtcblx0XHRpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIHZhbHVlO1xuXHRcdHJldHVybiB7IFwiZm9ybV90eXBlXCI6ICgwLCBGb3JtVHlwZV8xJDIuRm9ybVR5cGVUb0pTT04pKHZhbHVlW1wiZm9ybV90eXBlXCJdKSB9O1xuXHR9XG59KSB9KTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9Db250ZXh0LmpzXG52YXIgcmVxdWlyZV9Db250ZXh0ID0gLyogQF9fUFVSRV9fICovIF9fY29tbW9uSlMoeyBcIi4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvQ29udGV4dC5qc1wiOiAoKGV4cG9ydHMpID0+IHtcblx0LyoqXG5cdCogQ29tbWVyY2Vcblx0KiBObyBkZXNjcmlwdGlvbiBwcm92aWRlZCAoZ2VuZXJhdGVkIGJ5IE9wZW5hcGkgR2VuZXJhdG9yIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuYXBpdG9vbHMvb3BlbmFwaS1nZW5lcmF0b3IpXG5cdCpcblx0KiBUaGUgdmVyc2lvbiBvZiB0aGUgT3BlbkFQSSBkb2N1bWVudDogMS4xLjBcblx0KlxuXHQqXG5cdCogTk9URTogVGhpcyBjbGFzcyBpcyBhdXRvIGdlbmVyYXRlZCBieSBPcGVuQVBJIEdlbmVyYXRvciAoaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoKS5cblx0KiBodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2hcblx0KiBEbyBub3QgZWRpdCB0aGUgY2xhc3MgbWFudWFsbHkuXG5cdCovXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcblx0ZXhwb3J0cy5Db250ZXh0U291cmNlRW51bSA9IGV4cG9ydHMuQ29udGV4dEVudkVudW0gPSB2b2lkIDA7XG5cdGV4cG9ydHMuaW5zdGFuY2VPZkNvbnRleHQgPSBpbnN0YW5jZU9mQ29udGV4dDtcblx0ZXhwb3J0cy5Db250ZXh0RnJvbUpTT04gPSBDb250ZXh0RnJvbUpTT047XG5cdGV4cG9ydHMuQ29udGV4dEZyb21KU09OVHlwZWQgPSBDb250ZXh0RnJvbUpTT05UeXBlZDtcblx0ZXhwb3J0cy5Db250ZXh0VG9KU09OID0gQ29udGV4dFRvSlNPTjtcblx0ZXhwb3J0cy5Db250ZXh0VG9KU09OVHlwZWQgPSBDb250ZXh0VG9KU09OVHlwZWQ7XG5cdC8qKlxuXHQqIEBleHBvcnRcblx0KiBAZW51bSB7c3RyaW5nfVxuXHQqL1xuXHR2YXIgQ29udGV4dEVudkVudW07XG5cdChmdW5jdGlvbihDb250ZXh0RW52RW51bSQxKSB7XG5cdFx0Q29udGV4dEVudkVudW0kMVtcIlByb2RcIl0gPSBcInByb2RcIjtcblx0XHRDb250ZXh0RW52RW51bSQxW1wiRGV2XCJdID0gXCJkZXZcIjtcblx0fSkoQ29udGV4dEVudkVudW0gfHwgKGV4cG9ydHMuQ29udGV4dEVudkVudW0gPSBDb250ZXh0RW52RW51bSA9IHt9KSk7XG5cdC8qKlxuXHQqIEBleHBvcnRcblx0KiBAZW51bSB7c3RyaW5nfVxuXHQqL1xuXHR2YXIgQ29udGV4dFNvdXJjZUVudW07XG5cdChmdW5jdGlvbihDb250ZXh0U291cmNlRW51bSQxKSB7XG5cdFx0Q29udGV4dFNvdXJjZUVudW0kMVtcIkZvcmtcIl0gPSBcImZvcmtcIjtcblx0XHRDb250ZXh0U291cmNlRW51bSQxW1wiUGxheWdyb3VuZFwiXSA9IFwicGxheWdyb3VuZFwiO1xuXHRcdENvbnRleHRTb3VyY2VFbnVtJDFbXCJBcHBcIl0gPSBcImFwcFwiO1xuXHRcdENvbnRleHRTb3VyY2VFbnVtJDFbXCJUZXN0XCJdID0gXCJ0ZXN0XCI7XG5cdH0pKENvbnRleHRTb3VyY2VFbnVtIHx8IChleHBvcnRzLkNvbnRleHRTb3VyY2VFbnVtID0gQ29udGV4dFNvdXJjZUVudW0gPSB7fSkpO1xuXHQvKipcblx0KiBDaGVjayBpZiBhIGdpdmVuIG9iamVjdCBpbXBsZW1lbnRzIHRoZSBDb250ZXh0IGludGVyZmFjZS5cblx0Ki9cblx0ZnVuY3Rpb24gaW5zdGFuY2VPZkNvbnRleHQodmFsdWUpIHtcblx0XHRpZiAoIShcInVzZXJfaWRcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJ1c2VyX2lkXCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHRmdW5jdGlvbiBDb250ZXh0RnJvbUpTT04oanNvbikge1xuXHRcdHJldHVybiBDb250ZXh0RnJvbUpTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gQ29udGV4dEZyb21KU09OVHlwZWQoanNvbiwgaWdub3JlRGlzY3JpbWluYXRvcikge1xuXHRcdGlmIChqc29uID09IG51bGwpIHJldHVybiBqc29uO1xuXHRcdHJldHVybiB7XG5cdFx0XHRcImNoYXRfaWRcIjoganNvbltcImNoYXRfaWRcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IGpzb25bXCJjaGF0X2lkXCJdLFxuXHRcdFx0XCJlbnZcIjoganNvbltcImVudlwiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcImVudlwiXSxcblx0XHRcdFwib3JnX2lkXCI6IGpzb25bXCJvcmdfaWRcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IGpzb25bXCJvcmdfaWRcIl0sXG5cdFx0XHRcIm9yZ19zaG9ydF9uYW1lXCI6IGpzb25bXCJvcmdfc2hvcnRfbmFtZVwiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcIm9yZ19zaG9ydF9uYW1lXCJdLFxuXHRcdFx0XCJzb3VyY2VcIjoganNvbltcInNvdXJjZVwiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcInNvdXJjZVwiXSxcblx0XHRcdFwidXNlcl9pZFwiOiBqc29uW1widXNlcl9pZFwiXVxuXHRcdH07XG5cdH1cblx0ZnVuY3Rpb24gQ29udGV4dFRvSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIENvbnRleHRUb0pTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gQ29udGV4dFRvSlNPTlR5cGVkKHZhbHVlLCBpZ25vcmVEaXNjcmltaW5hdG9yID0gZmFsc2UpIHtcblx0XHRpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIHZhbHVlO1xuXHRcdHJldHVybiB7XG5cdFx0XHRcImNoYXRfaWRcIjogdmFsdWVbXCJjaGF0X2lkXCJdLFxuXHRcdFx0XCJlbnZcIjogdmFsdWVbXCJlbnZcIl0sXG5cdFx0XHRcIm9yZ19pZFwiOiB2YWx1ZVtcIm9yZ19pZFwiXSxcblx0XHRcdFwib3JnX3Nob3J0X25hbWVcIjogdmFsdWVbXCJvcmdfc2hvcnRfbmFtZVwiXSxcblx0XHRcdFwic291cmNlXCI6IHZhbHVlW1wic291cmNlXCJdLFxuXHRcdFx0XCJ1c2VyX2lkXCI6IHZhbHVlW1widXNlcl9pZFwiXVxuXHRcdH07XG5cdH1cbn0pIH0pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiAuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL0NvbnZlcnNhdGlvblN0YXR1cy5qc1xudmFyIHJlcXVpcmVfQ29udmVyc2F0aW9uU3RhdHVzID0gLyogQF9fUFVSRV9fICovIF9fY29tbW9uSlMoeyBcIi4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvQ29udmVyc2F0aW9uU3RhdHVzLmpzXCI6ICgoZXhwb3J0cykgPT4ge1xuXHQvKipcblx0KiBDb21tZXJjZVxuXHQqIE5vIGRlc2NyaXB0aW9uIHByb3ZpZGVkIChnZW5lcmF0ZWQgYnkgT3BlbmFwaSBHZW5lcmF0b3IgaHR0cHM6Ly9naXRodWIuY29tL29wZW5hcGl0b29scy9vcGVuYXBpLWdlbmVyYXRvcilcblx0KlxuXHQqIFRoZSB2ZXJzaW9uIG9mIHRoZSBPcGVuQVBJIGRvY3VtZW50OiAxLjEuMFxuXHQqXG5cdCpcblx0KiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IE9wZW5BUEkgR2VuZXJhdG9yIChodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2gpLlxuXHQqIGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaFxuXHQqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cblx0Ki9cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuXHRleHBvcnRzLkNvbnZlcnNhdGlvblN0YXR1cyA9IHZvaWQgMDtcblx0ZXhwb3J0cy5pbnN0YW5jZU9mQ29udmVyc2F0aW9uU3RhdHVzID0gaW5zdGFuY2VPZkNvbnZlcnNhdGlvblN0YXR1cztcblx0ZXhwb3J0cy5Db252ZXJzYXRpb25TdGF0dXNGcm9tSlNPTiA9IENvbnZlcnNhdGlvblN0YXR1c0Zyb21KU09OO1xuXHRleHBvcnRzLkNvbnZlcnNhdGlvblN0YXR1c0Zyb21KU09OVHlwZWQgPSBDb252ZXJzYXRpb25TdGF0dXNGcm9tSlNPTlR5cGVkO1xuXHRleHBvcnRzLkNvbnZlcnNhdGlvblN0YXR1c1RvSlNPTiA9IENvbnZlcnNhdGlvblN0YXR1c1RvSlNPTjtcblx0ZXhwb3J0cy5Db252ZXJzYXRpb25TdGF0dXNUb0pTT05UeXBlZCA9IENvbnZlcnNhdGlvblN0YXR1c1RvSlNPTlR5cGVkO1xuXHQvKipcblx0KiBTdGFuZGFyZGl6ZWQgc3RhdHVzIHZhbHVlcyBmb3IgY3VzdG9tZXIgc2VydmljZSBjb252ZXJzYXRpb25zIGFjcm9zcyBwbGF0Zm9ybXNcblx0KiBAZXhwb3J0XG5cdCogQGVudW0ge3N0cmluZ31cblx0Ki9cblx0dmFyIENvbnZlcnNhdGlvblN0YXR1cztcblx0KGZ1bmN0aW9uKENvbnZlcnNhdGlvblN0YXR1cyQxKSB7XG5cdFx0Q29udmVyc2F0aW9uU3RhdHVzJDFbXCJPcGVuXCJdID0gXCJPUEVOXCI7XG5cdFx0Q29udmVyc2F0aW9uU3RhdHVzJDFbXCJDbG9zZWRcIl0gPSBcIkNMT1NFRFwiO1xuXHRcdENvbnZlcnNhdGlvblN0YXR1cyQxW1wiUGVuZGluZ1wiXSA9IFwiUEVORElOR1wiO1xuXHRcdENvbnZlcnNhdGlvblN0YXR1cyQxW1wiT3RoZXJcIl0gPSBcIk9USEVSXCI7XG5cdH0pKENvbnZlcnNhdGlvblN0YXR1cyB8fCAoZXhwb3J0cy5Db252ZXJzYXRpb25TdGF0dXMgPSBDb252ZXJzYXRpb25TdGF0dXMgPSB7fSkpO1xuXHRmdW5jdGlvbiBpbnN0YW5jZU9mQ29udmVyc2F0aW9uU3RhdHVzKHZhbHVlKSB7XG5cdFx0Zm9yIChjb25zdCBrZXkgaW4gQ29udmVyc2F0aW9uU3RhdHVzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKENvbnZlcnNhdGlvblN0YXR1cywga2V5KSkge1xuXHRcdFx0aWYgKENvbnZlcnNhdGlvblN0YXR1c1trZXldID09PSB2YWx1ZSkgcmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHRmdW5jdGlvbiBDb252ZXJzYXRpb25TdGF0dXNGcm9tSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIENvbnZlcnNhdGlvblN0YXR1c0Zyb21KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIENvbnZlcnNhdGlvblN0YXR1c0Zyb21KU09OVHlwZWQoanNvbiwgaWdub3JlRGlzY3JpbWluYXRvcikge1xuXHRcdHJldHVybiBqc29uO1xuXHR9XG5cdGZ1bmN0aW9uIENvbnZlcnNhdGlvblN0YXR1c1RvSlNPTih2YWx1ZSkge1xuXHRcdHJldHVybiB2YWx1ZTtcblx0fVxuXHRmdW5jdGlvbiBDb252ZXJzYXRpb25TdGF0dXNUb0pTT05UeXBlZCh2YWx1ZSwgaWdub3JlRGlzY3JpbWluYXRvcikge1xuXHRcdHJldHVybiB2YWx1ZTtcblx0fVxufSkgfSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIC4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvQ3JlYXRlQ29udmVyc2F0aW9uUmVxdWVzdC5qc1xudmFyIHJlcXVpcmVfQ3JlYXRlQ29udmVyc2F0aW9uUmVxdWVzdCA9IC8qIEBfX1BVUkVfXyAqLyBfX2NvbW1vbkpTKHsgXCIuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL0NyZWF0ZUNvbnZlcnNhdGlvblJlcXVlc3QuanNcIjogKChleHBvcnRzKSA9PiB7XG5cdC8qKlxuXHQqIENvbW1lcmNlXG5cdCogTm8gZGVzY3JpcHRpb24gcHJvdmlkZWQgKGdlbmVyYXRlZCBieSBPcGVuYXBpIEdlbmVyYXRvciBodHRwczovL2dpdGh1Yi5jb20vb3BlbmFwaXRvb2xzL29wZW5hcGktZ2VuZXJhdG9yKVxuXHQqXG5cdCogVGhlIHZlcnNpb24gb2YgdGhlIE9wZW5BUEkgZG9jdW1lbnQ6IDEuMS4wXG5cdCpcblx0KlxuXHQqIE5PVEU6IFRoaXMgY2xhc3MgaXMgYXV0byBnZW5lcmF0ZWQgYnkgT3BlbkFQSSBHZW5lcmF0b3IgKGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaCkuXG5cdCogaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoXG5cdCogRG8gbm90IGVkaXQgdGhlIGNsYXNzIG1hbnVhbGx5LlxuXHQqL1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5cdGV4cG9ydHMuaW5zdGFuY2VPZkNyZWF0ZUNvbnZlcnNhdGlvblJlcXVlc3QgPSBpbnN0YW5jZU9mQ3JlYXRlQ29udmVyc2F0aW9uUmVxdWVzdDtcblx0ZXhwb3J0cy5DcmVhdGVDb252ZXJzYXRpb25SZXF1ZXN0RnJvbUpTT04gPSBDcmVhdGVDb252ZXJzYXRpb25SZXF1ZXN0RnJvbUpTT047XG5cdGV4cG9ydHMuQ3JlYXRlQ29udmVyc2F0aW9uUmVxdWVzdEZyb21KU09OVHlwZWQgPSBDcmVhdGVDb252ZXJzYXRpb25SZXF1ZXN0RnJvbUpTT05UeXBlZDtcblx0ZXhwb3J0cy5DcmVhdGVDb252ZXJzYXRpb25SZXF1ZXN0VG9KU09OID0gQ3JlYXRlQ29udmVyc2F0aW9uUmVxdWVzdFRvSlNPTjtcblx0ZXhwb3J0cy5DcmVhdGVDb252ZXJzYXRpb25SZXF1ZXN0VG9KU09OVHlwZWQgPSBDcmVhdGVDb252ZXJzYXRpb25SZXF1ZXN0VG9KU09OVHlwZWQ7XG5cdGNvbnN0IEN1c3RvbWVyU2VydmljZVByb3ZpZGVyXzEkMyA9IHJlcXVpcmVfQ3VzdG9tZXJTZXJ2aWNlUHJvdmlkZXIoKTtcblx0LyoqXG5cdCogQ2hlY2sgaWYgYSBnaXZlbiBvYmplY3QgaW1wbGVtZW50cyB0aGUgQ3JlYXRlQ29udmVyc2F0aW9uUmVxdWVzdCBpbnRlcmZhY2UuXG5cdCovXG5cdGZ1bmN0aW9uIGluc3RhbmNlT2ZDcmVhdGVDb252ZXJzYXRpb25SZXF1ZXN0KHZhbHVlKSB7XG5cdFx0aWYgKCEoXCJlbWFpbFwiIGluIHZhbHVlKSB8fCB2YWx1ZVtcImVtYWlsXCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRpZiAoIShcInNwaWZmeV91c2VyX2lkXCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wic3BpZmZ5X3VzZXJfaWRcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdGZ1bmN0aW9uIENyZWF0ZUNvbnZlcnNhdGlvblJlcXVlc3RGcm9tSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIENyZWF0ZUNvbnZlcnNhdGlvblJlcXVlc3RGcm9tSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBDcmVhdGVDb252ZXJzYXRpb25SZXF1ZXN0RnJvbUpTT05UeXBlZChqc29uLCBpZ25vcmVEaXNjcmltaW5hdG9yKSB7XG5cdFx0aWYgKGpzb24gPT0gbnVsbCkgcmV0dXJuIGpzb247XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwiY3VzdG9tZXJfc2VydmljZV9wcm92aWRlclwiOiBqc29uW1wiY3VzdG9tZXJfc2VydmljZV9wcm92aWRlclwiXSA9PSBudWxsID8gdm9pZCAwIDogKDAsIEN1c3RvbWVyU2VydmljZVByb3ZpZGVyXzEkMy5DdXN0b21lclNlcnZpY2VQcm92aWRlckZyb21KU09OKShqc29uW1wiY3VzdG9tZXJfc2VydmljZV9wcm92aWRlclwiXSksXG5cdFx0XHRcImVtYWlsXCI6IGpzb25bXCJlbWFpbFwiXSxcblx0XHRcdFwibmFtZVwiOiBqc29uW1wibmFtZVwiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcIm5hbWVcIl0sXG5cdFx0XHRcInNwaWZmeV91c2VyX2lkXCI6IGpzb25bXCJzcGlmZnlfdXNlcl9pZFwiXSxcblx0XHRcdFwic3ViamVjdFwiOiBqc29uW1wic3ViamVjdFwiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcInN1YmplY3RcIl1cblx0XHR9O1xuXHR9XG5cdGZ1bmN0aW9uIENyZWF0ZUNvbnZlcnNhdGlvblJlcXVlc3RUb0pTT04oanNvbikge1xuXHRcdHJldHVybiBDcmVhdGVDb252ZXJzYXRpb25SZXF1ZXN0VG9KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIENyZWF0ZUNvbnZlcnNhdGlvblJlcXVlc3RUb0pTT05UeXBlZCh2YWx1ZSwgaWdub3JlRGlzY3JpbWluYXRvciA9IGZhbHNlKSB7XG5cdFx0aWYgKHZhbHVlID09IG51bGwpIHJldHVybiB2YWx1ZTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0XCJjdXN0b21lcl9zZXJ2aWNlX3Byb3ZpZGVyXCI6ICgwLCBDdXN0b21lclNlcnZpY2VQcm92aWRlcl8xJDMuQ3VzdG9tZXJTZXJ2aWNlUHJvdmlkZXJUb0pTT04pKHZhbHVlW1wiY3VzdG9tZXJfc2VydmljZV9wcm92aWRlclwiXSksXG5cdFx0XHRcImVtYWlsXCI6IHZhbHVlW1wiZW1haWxcIl0sXG5cdFx0XHRcIm5hbWVcIjogdmFsdWVbXCJuYW1lXCJdLFxuXHRcdFx0XCJzcGlmZnlfdXNlcl9pZFwiOiB2YWx1ZVtcInNwaWZmeV91c2VyX2lkXCJdLFxuXHRcdFx0XCJzdWJqZWN0XCI6IHZhbHVlW1wic3ViamVjdFwiXVxuXHRcdH07XG5cdH1cbn0pIH0pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiAuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL0N1c3RTZXJ2aWNlQ29udmVyc2F0aW9uLmpzXG52YXIgcmVxdWlyZV9DdXN0U2VydmljZUNvbnZlcnNhdGlvbiA9IC8qIEBfX1BVUkVfXyAqLyBfX2NvbW1vbkpTKHsgXCIuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL0N1c3RTZXJ2aWNlQ29udmVyc2F0aW9uLmpzXCI6ICgoZXhwb3J0cykgPT4ge1xuXHQvKipcblx0KiBDb21tZXJjZVxuXHQqIE5vIGRlc2NyaXB0aW9uIHByb3ZpZGVkIChnZW5lcmF0ZWQgYnkgT3BlbmFwaSBHZW5lcmF0b3IgaHR0cHM6Ly9naXRodWIuY29tL29wZW5hcGl0b29scy9vcGVuYXBpLWdlbmVyYXRvcilcblx0KlxuXHQqIFRoZSB2ZXJzaW9uIG9mIHRoZSBPcGVuQVBJIGRvY3VtZW50OiAxLjEuMFxuXHQqXG5cdCpcblx0KiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IE9wZW5BUEkgR2VuZXJhdG9yIChodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2gpLlxuXHQqIGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaFxuXHQqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cblx0Ki9cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuXHRleHBvcnRzLmluc3RhbmNlT2ZDdXN0U2VydmljZUNvbnZlcnNhdGlvbiA9IGluc3RhbmNlT2ZDdXN0U2VydmljZUNvbnZlcnNhdGlvbjtcblx0ZXhwb3J0cy5DdXN0U2VydmljZUNvbnZlcnNhdGlvbkZyb21KU09OID0gQ3VzdFNlcnZpY2VDb252ZXJzYXRpb25Gcm9tSlNPTjtcblx0ZXhwb3J0cy5DdXN0U2VydmljZUNvbnZlcnNhdGlvbkZyb21KU09OVHlwZWQgPSBDdXN0U2VydmljZUNvbnZlcnNhdGlvbkZyb21KU09OVHlwZWQ7XG5cdGV4cG9ydHMuQ3VzdFNlcnZpY2VDb252ZXJzYXRpb25Ub0pTT04gPSBDdXN0U2VydmljZUNvbnZlcnNhdGlvblRvSlNPTjtcblx0ZXhwb3J0cy5DdXN0U2VydmljZUNvbnZlcnNhdGlvblRvSlNPTlR5cGVkID0gQ3VzdFNlcnZpY2VDb252ZXJzYXRpb25Ub0pTT05UeXBlZDtcblx0LyoqXG5cdCogQ2hlY2sgaWYgYSBnaXZlbiBvYmplY3QgaW1wbGVtZW50cyB0aGUgQ3VzdFNlcnZpY2VDb252ZXJzYXRpb24gaW50ZXJmYWNlLlxuXHQqL1xuXHRmdW5jdGlvbiBpbnN0YW5jZU9mQ3VzdFNlcnZpY2VDb252ZXJzYXRpb24odmFsdWUpIHtcblx0XHRpZiAoIShcImNyZWF0ZWRfYXRcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJjcmVhdGVkX2F0XCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRpZiAoIShcImN1c3RvbWVyX2lkXCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wiY3VzdG9tZXJfaWRcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdGlmICghKFwiaWRcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJpZFwiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0aWYgKCEoXCJuYW1lXCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wibmFtZVwiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0aWYgKCEoXCJzdGF0dXNcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJzdGF0dXNcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdGZ1bmN0aW9uIEN1c3RTZXJ2aWNlQ29udmVyc2F0aW9uRnJvbUpTT04oanNvbikge1xuXHRcdHJldHVybiBDdXN0U2VydmljZUNvbnZlcnNhdGlvbkZyb21KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIEN1c3RTZXJ2aWNlQ29udmVyc2F0aW9uRnJvbUpTT05UeXBlZChqc29uLCBpZ25vcmVEaXNjcmltaW5hdG9yKSB7XG5cdFx0aWYgKGpzb24gPT0gbnVsbCkgcmV0dXJuIGpzb247XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwiY3JlYXRlZF9hdFwiOiBuZXcgRGF0ZShqc29uW1wiY3JlYXRlZF9hdFwiXSksXG5cdFx0XHRcImN1c3RvbWVyX2lkXCI6IGpzb25bXCJjdXN0b21lcl9pZFwiXSxcblx0XHRcdFwiaWRcIjoganNvbltcImlkXCJdLFxuXHRcdFx0XCJuYW1lXCI6IGpzb25bXCJuYW1lXCJdLFxuXHRcdFx0XCJzdGF0dXNcIjoganNvbltcInN0YXR1c1wiXVxuXHRcdH07XG5cdH1cblx0ZnVuY3Rpb24gQ3VzdFNlcnZpY2VDb252ZXJzYXRpb25Ub0pTT04oanNvbikge1xuXHRcdHJldHVybiBDdXN0U2VydmljZUNvbnZlcnNhdGlvblRvSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBDdXN0U2VydmljZUNvbnZlcnNhdGlvblRvSlNPTlR5cGVkKHZhbHVlLCBpZ25vcmVEaXNjcmltaW5hdG9yID0gZmFsc2UpIHtcblx0XHRpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIHZhbHVlO1xuXHRcdHJldHVybiB7XG5cdFx0XHRcImNyZWF0ZWRfYXRcIjogdmFsdWVbXCJjcmVhdGVkX2F0XCJdLnRvSVNPU3RyaW5nKCksXG5cdFx0XHRcImN1c3RvbWVyX2lkXCI6IHZhbHVlW1wiY3VzdG9tZXJfaWRcIl0sXG5cdFx0XHRcImlkXCI6IHZhbHVlW1wiaWRcIl0sXG5cdFx0XHRcIm5hbWVcIjogdmFsdWVbXCJuYW1lXCJdLFxuXHRcdFx0XCJzdGF0dXNcIjogdmFsdWVbXCJzdGF0dXNcIl1cblx0XHR9O1xuXHR9XG59KSB9KTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9DdXN0U2VydmljZUN1c3RvbWVyLmpzXG52YXIgcmVxdWlyZV9DdXN0U2VydmljZUN1c3RvbWVyID0gLyogQF9fUFVSRV9fICovIF9fY29tbW9uSlMoeyBcIi4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvQ3VzdFNlcnZpY2VDdXN0b21lci5qc1wiOiAoKGV4cG9ydHMpID0+IHtcblx0LyoqXG5cdCogQ29tbWVyY2Vcblx0KiBObyBkZXNjcmlwdGlvbiBwcm92aWRlZCAoZ2VuZXJhdGVkIGJ5IE9wZW5hcGkgR2VuZXJhdG9yIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuYXBpdG9vbHMvb3BlbmFwaS1nZW5lcmF0b3IpXG5cdCpcblx0KiBUaGUgdmVyc2lvbiBvZiB0aGUgT3BlbkFQSSBkb2N1bWVudDogMS4xLjBcblx0KlxuXHQqXG5cdCogTk9URTogVGhpcyBjbGFzcyBpcyBhdXRvIGdlbmVyYXRlZCBieSBPcGVuQVBJIEdlbmVyYXRvciAoaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoKS5cblx0KiBodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2hcblx0KiBEbyBub3QgZWRpdCB0aGUgY2xhc3MgbWFudWFsbHkuXG5cdCovXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcblx0ZXhwb3J0cy5pbnN0YW5jZU9mQ3VzdFNlcnZpY2VDdXN0b21lciA9IGluc3RhbmNlT2ZDdXN0U2VydmljZUN1c3RvbWVyO1xuXHRleHBvcnRzLkN1c3RTZXJ2aWNlQ3VzdG9tZXJGcm9tSlNPTiA9IEN1c3RTZXJ2aWNlQ3VzdG9tZXJGcm9tSlNPTjtcblx0ZXhwb3J0cy5DdXN0U2VydmljZUN1c3RvbWVyRnJvbUpTT05UeXBlZCA9IEN1c3RTZXJ2aWNlQ3VzdG9tZXJGcm9tSlNPTlR5cGVkO1xuXHRleHBvcnRzLkN1c3RTZXJ2aWNlQ3VzdG9tZXJUb0pTT04gPSBDdXN0U2VydmljZUN1c3RvbWVyVG9KU09OO1xuXHRleHBvcnRzLkN1c3RTZXJ2aWNlQ3VzdG9tZXJUb0pTT05UeXBlZCA9IEN1c3RTZXJ2aWNlQ3VzdG9tZXJUb0pTT05UeXBlZDtcblx0LyoqXG5cdCogQ2hlY2sgaWYgYSBnaXZlbiBvYmplY3QgaW1wbGVtZW50cyB0aGUgQ3VzdFNlcnZpY2VDdXN0b21lciBpbnRlcmZhY2UuXG5cdCovXG5cdGZ1bmN0aW9uIGluc3RhbmNlT2ZDdXN0U2VydmljZUN1c3RvbWVyKHZhbHVlKSB7XG5cdFx0aWYgKCEoXCJlbWFpbFwiIGluIHZhbHVlKSB8fCB2YWx1ZVtcImVtYWlsXCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRpZiAoIShcImlkXCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wiaWRcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdGZ1bmN0aW9uIEN1c3RTZXJ2aWNlQ3VzdG9tZXJGcm9tSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIEN1c3RTZXJ2aWNlQ3VzdG9tZXJGcm9tSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBDdXN0U2VydmljZUN1c3RvbWVyRnJvbUpTT05UeXBlZChqc29uLCBpZ25vcmVEaXNjcmltaW5hdG9yKSB7XG5cdFx0aWYgKGpzb24gPT0gbnVsbCkgcmV0dXJuIGpzb247XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwiZW1haWxcIjoganNvbltcImVtYWlsXCJdLFxuXHRcdFx0XCJpZFwiOiBqc29uW1wiaWRcIl1cblx0XHR9O1xuXHR9XG5cdGZ1bmN0aW9uIEN1c3RTZXJ2aWNlQ3VzdG9tZXJUb0pTT04oanNvbikge1xuXHRcdHJldHVybiBDdXN0U2VydmljZUN1c3RvbWVyVG9KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIEN1c3RTZXJ2aWNlQ3VzdG9tZXJUb0pTT05UeXBlZCh2YWx1ZSwgaWdub3JlRGlzY3JpbWluYXRvciA9IGZhbHNlKSB7XG5cdFx0aWYgKHZhbHVlID09IG51bGwpIHJldHVybiB2YWx1ZTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0XCJlbWFpbFwiOiB2YWx1ZVtcImVtYWlsXCJdLFxuXHRcdFx0XCJpZFwiOiB2YWx1ZVtcImlkXCJdXG5cdFx0fTtcblx0fVxufSkgfSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIC4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvQ3JlYXRlQ29udmVyc2F0aW9uUmVzcG9uc2UuanNcbnZhciByZXF1aXJlX0NyZWF0ZUNvbnZlcnNhdGlvblJlc3BvbnNlID0gLyogQF9fUFVSRV9fICovIF9fY29tbW9uSlMoeyBcIi4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvQ3JlYXRlQ29udmVyc2F0aW9uUmVzcG9uc2UuanNcIjogKChleHBvcnRzKSA9PiB7XG5cdC8qKlxuXHQqIENvbW1lcmNlXG5cdCogTm8gZGVzY3JpcHRpb24gcHJvdmlkZWQgKGdlbmVyYXRlZCBieSBPcGVuYXBpIEdlbmVyYXRvciBodHRwczovL2dpdGh1Yi5jb20vb3BlbmFwaXRvb2xzL29wZW5hcGktZ2VuZXJhdG9yKVxuXHQqXG5cdCogVGhlIHZlcnNpb24gb2YgdGhlIE9wZW5BUEkgZG9jdW1lbnQ6IDEuMS4wXG5cdCpcblx0KlxuXHQqIE5PVEU6IFRoaXMgY2xhc3MgaXMgYXV0byBnZW5lcmF0ZWQgYnkgT3BlbkFQSSBHZW5lcmF0b3IgKGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaCkuXG5cdCogaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoXG5cdCogRG8gbm90IGVkaXQgdGhlIGNsYXNzIG1hbnVhbGx5LlxuXHQqL1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5cdGV4cG9ydHMuaW5zdGFuY2VPZkNyZWF0ZUNvbnZlcnNhdGlvblJlc3BvbnNlID0gaW5zdGFuY2VPZkNyZWF0ZUNvbnZlcnNhdGlvblJlc3BvbnNlO1xuXHRleHBvcnRzLkNyZWF0ZUNvbnZlcnNhdGlvblJlc3BvbnNlRnJvbUpTT04gPSBDcmVhdGVDb252ZXJzYXRpb25SZXNwb25zZUZyb21KU09OO1xuXHRleHBvcnRzLkNyZWF0ZUNvbnZlcnNhdGlvblJlc3BvbnNlRnJvbUpTT05UeXBlZCA9IENyZWF0ZUNvbnZlcnNhdGlvblJlc3BvbnNlRnJvbUpTT05UeXBlZDtcblx0ZXhwb3J0cy5DcmVhdGVDb252ZXJzYXRpb25SZXNwb25zZVRvSlNPTiA9IENyZWF0ZUNvbnZlcnNhdGlvblJlc3BvbnNlVG9KU09OO1xuXHRleHBvcnRzLkNyZWF0ZUNvbnZlcnNhdGlvblJlc3BvbnNlVG9KU09OVHlwZWQgPSBDcmVhdGVDb252ZXJzYXRpb25SZXNwb25zZVRvSlNPTlR5cGVkO1xuXHRjb25zdCBDdXN0U2VydmljZUNvbnZlcnNhdGlvbl8xID0gcmVxdWlyZV9DdXN0U2VydmljZUNvbnZlcnNhdGlvbigpO1xuXHRjb25zdCBDdXN0U2VydmljZUN1c3RvbWVyXzEgPSByZXF1aXJlX0N1c3RTZXJ2aWNlQ3VzdG9tZXIoKTtcblx0LyoqXG5cdCogQ2hlY2sgaWYgYSBnaXZlbiBvYmplY3QgaW1wbGVtZW50cyB0aGUgQ3JlYXRlQ29udmVyc2F0aW9uUmVzcG9uc2UgaW50ZXJmYWNlLlxuXHQqL1xuXHRmdW5jdGlvbiBpbnN0YW5jZU9mQ3JlYXRlQ29udmVyc2F0aW9uUmVzcG9uc2UodmFsdWUpIHtcblx0XHRpZiAoIShcImNvbnZlcnNhdGlvblwiIGluIHZhbHVlKSB8fCB2YWx1ZVtcImNvbnZlcnNhdGlvblwiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0aWYgKCEoXCJjdXN0b21lclwiIGluIHZhbHVlKSB8fCB2YWx1ZVtcImN1c3RvbWVyXCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHRmdW5jdGlvbiBDcmVhdGVDb252ZXJzYXRpb25SZXNwb25zZUZyb21KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gQ3JlYXRlQ29udmVyc2F0aW9uUmVzcG9uc2VGcm9tSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBDcmVhdGVDb252ZXJzYXRpb25SZXNwb25zZUZyb21KU09OVHlwZWQoanNvbiwgaWdub3JlRGlzY3JpbWluYXRvcikge1xuXHRcdGlmIChqc29uID09IG51bGwpIHJldHVybiBqc29uO1xuXHRcdHJldHVybiB7XG5cdFx0XHRcImNvbnZlcnNhdGlvblwiOiAoMCwgQ3VzdFNlcnZpY2VDb252ZXJzYXRpb25fMS5DdXN0U2VydmljZUNvbnZlcnNhdGlvbkZyb21KU09OKShqc29uW1wiY29udmVyc2F0aW9uXCJdKSxcblx0XHRcdFwiY3VzdG9tZXJcIjogKDAsIEN1c3RTZXJ2aWNlQ3VzdG9tZXJfMS5DdXN0U2VydmljZUN1c3RvbWVyRnJvbUpTT04pKGpzb25bXCJjdXN0b21lclwiXSlcblx0XHR9O1xuXHR9XG5cdGZ1bmN0aW9uIENyZWF0ZUNvbnZlcnNhdGlvblJlc3BvbnNlVG9KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gQ3JlYXRlQ29udmVyc2F0aW9uUmVzcG9uc2VUb0pTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gQ3JlYXRlQ29udmVyc2F0aW9uUmVzcG9uc2VUb0pTT05UeXBlZCh2YWx1ZSwgaWdub3JlRGlzY3JpbWluYXRvciA9IGZhbHNlKSB7XG5cdFx0aWYgKHZhbHVlID09IG51bGwpIHJldHVybiB2YWx1ZTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0XCJjb252ZXJzYXRpb25cIjogKDAsIEN1c3RTZXJ2aWNlQ29udmVyc2F0aW9uXzEuQ3VzdFNlcnZpY2VDb252ZXJzYXRpb25Ub0pTT04pKHZhbHVlW1wiY29udmVyc2F0aW9uXCJdKSxcblx0XHRcdFwiY3VzdG9tZXJcIjogKDAsIEN1c3RTZXJ2aWNlQ3VzdG9tZXJfMS5DdXN0U2VydmljZUN1c3RvbWVyVG9KU09OKSh2YWx1ZVtcImN1c3RvbWVyXCJdKVxuXHRcdH07XG5cdH1cbn0pIH0pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiAuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL0N1c3RTZXJ2aWNlQXR0YWNobWVudC5qc1xudmFyIHJlcXVpcmVfQ3VzdFNlcnZpY2VBdHRhY2htZW50ID0gLyogQF9fUFVSRV9fICovIF9fY29tbW9uSlMoeyBcIi4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvQ3VzdFNlcnZpY2VBdHRhY2htZW50LmpzXCI6ICgoZXhwb3J0cykgPT4ge1xuXHQvKipcblx0KiBDb21tZXJjZVxuXHQqIE5vIGRlc2NyaXB0aW9uIHByb3ZpZGVkIChnZW5lcmF0ZWQgYnkgT3BlbmFwaSBHZW5lcmF0b3IgaHR0cHM6Ly9naXRodWIuY29tL29wZW5hcGl0b29scy9vcGVuYXBpLWdlbmVyYXRvcilcblx0KlxuXHQqIFRoZSB2ZXJzaW9uIG9mIHRoZSBPcGVuQVBJIGRvY3VtZW50OiAxLjEuMFxuXHQqXG5cdCpcblx0KiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IE9wZW5BUEkgR2VuZXJhdG9yIChodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2gpLlxuXHQqIGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaFxuXHQqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cblx0Ki9cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuXHRleHBvcnRzLmluc3RhbmNlT2ZDdXN0U2VydmljZUF0dGFjaG1lbnQgPSBpbnN0YW5jZU9mQ3VzdFNlcnZpY2VBdHRhY2htZW50O1xuXHRleHBvcnRzLkN1c3RTZXJ2aWNlQXR0YWNobWVudEZyb21KU09OID0gQ3VzdFNlcnZpY2VBdHRhY2htZW50RnJvbUpTT047XG5cdGV4cG9ydHMuQ3VzdFNlcnZpY2VBdHRhY2htZW50RnJvbUpTT05UeXBlZCA9IEN1c3RTZXJ2aWNlQXR0YWNobWVudEZyb21KU09OVHlwZWQ7XG5cdGV4cG9ydHMuQ3VzdFNlcnZpY2VBdHRhY2htZW50VG9KU09OID0gQ3VzdFNlcnZpY2VBdHRhY2htZW50VG9KU09OO1xuXHRleHBvcnRzLkN1c3RTZXJ2aWNlQXR0YWNobWVudFRvSlNPTlR5cGVkID0gQ3VzdFNlcnZpY2VBdHRhY2htZW50VG9KU09OVHlwZWQ7XG5cdC8qKlxuXHQqIENoZWNrIGlmIGEgZ2l2ZW4gb2JqZWN0IGltcGxlbWVudHMgdGhlIEN1c3RTZXJ2aWNlQXR0YWNobWVudCBpbnRlcmZhY2UuXG5cdCovXG5cdGZ1bmN0aW9uIGluc3RhbmNlT2ZDdXN0U2VydmljZUF0dGFjaG1lbnQodmFsdWUpIHtcblx0XHRpZiAoIShcImNvbnRlbnRfbGVuZ3RoXCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wiY29udGVudF9sZW5ndGhcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdGlmICghKFwiY29udGVudF90eXBlXCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wiY29udGVudF90eXBlXCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRpZiAoIShcImlkXCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wiaWRcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdGlmICghKFwibmFtZVwiIGluIHZhbHVlKSB8fCB2YWx1ZVtcIm5hbWVcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdGZ1bmN0aW9uIEN1c3RTZXJ2aWNlQXR0YWNobWVudEZyb21KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gQ3VzdFNlcnZpY2VBdHRhY2htZW50RnJvbUpTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gQ3VzdFNlcnZpY2VBdHRhY2htZW50RnJvbUpTT05UeXBlZChqc29uLCBpZ25vcmVEaXNjcmltaW5hdG9yKSB7XG5cdFx0aWYgKGpzb24gPT0gbnVsbCkgcmV0dXJuIGpzb247XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwiY29udGVudF9sZW5ndGhcIjoganNvbltcImNvbnRlbnRfbGVuZ3RoXCJdLFxuXHRcdFx0XCJjb250ZW50X3R5cGVcIjoganNvbltcImNvbnRlbnRfdHlwZVwiXSxcblx0XHRcdFwiaWRcIjoganNvbltcImlkXCJdLFxuXHRcdFx0XCJuYW1lXCI6IGpzb25bXCJuYW1lXCJdLFxuXHRcdFx0XCJ1cmxcIjoganNvbltcInVybFwiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcInVybFwiXVxuXHRcdH07XG5cdH1cblx0ZnVuY3Rpb24gQ3VzdFNlcnZpY2VBdHRhY2htZW50VG9KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gQ3VzdFNlcnZpY2VBdHRhY2htZW50VG9KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIEN1c3RTZXJ2aWNlQXR0YWNobWVudFRvSlNPTlR5cGVkKHZhbHVlLCBpZ25vcmVEaXNjcmltaW5hdG9yID0gZmFsc2UpIHtcblx0XHRpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIHZhbHVlO1xuXHRcdHJldHVybiB7XG5cdFx0XHRcImNvbnRlbnRfbGVuZ3RoXCI6IHZhbHVlW1wiY29udGVudF9sZW5ndGhcIl0sXG5cdFx0XHRcImNvbnRlbnRfdHlwZVwiOiB2YWx1ZVtcImNvbnRlbnRfdHlwZVwiXSxcblx0XHRcdFwiaWRcIjogdmFsdWVbXCJpZFwiXSxcblx0XHRcdFwibmFtZVwiOiB2YWx1ZVtcIm5hbWVcIl0sXG5cdFx0XHRcInVybFwiOiB2YWx1ZVtcInVybFwiXVxuXHRcdH07XG5cdH1cbn0pIH0pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiAuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL0N1c3RTZXJ2aWNlTWVzc2FnZS5qc1xudmFyIHJlcXVpcmVfQ3VzdFNlcnZpY2VNZXNzYWdlID0gLyogQF9fUFVSRV9fICovIF9fY29tbW9uSlMoeyBcIi4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvQ3VzdFNlcnZpY2VNZXNzYWdlLmpzXCI6ICgoZXhwb3J0cykgPT4ge1xuXHQvKipcblx0KiBDb21tZXJjZVxuXHQqIE5vIGRlc2NyaXB0aW9uIHByb3ZpZGVkIChnZW5lcmF0ZWQgYnkgT3BlbmFwaSBHZW5lcmF0b3IgaHR0cHM6Ly9naXRodWIuY29tL29wZW5hcGl0b29scy9vcGVuYXBpLWdlbmVyYXRvcilcblx0KlxuXHQqIFRoZSB2ZXJzaW9uIG9mIHRoZSBPcGVuQVBJIGRvY3VtZW50OiAxLjEuMFxuXHQqXG5cdCpcblx0KiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IE9wZW5BUEkgR2VuZXJhdG9yIChodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2gpLlxuXHQqIGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaFxuXHQqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cblx0Ki9cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuXHRleHBvcnRzLmluc3RhbmNlT2ZDdXN0U2VydmljZU1lc3NhZ2UgPSBpbnN0YW5jZU9mQ3VzdFNlcnZpY2VNZXNzYWdlO1xuXHRleHBvcnRzLkN1c3RTZXJ2aWNlTWVzc2FnZUZyb21KU09OID0gQ3VzdFNlcnZpY2VNZXNzYWdlRnJvbUpTT047XG5cdGV4cG9ydHMuQ3VzdFNlcnZpY2VNZXNzYWdlRnJvbUpTT05UeXBlZCA9IEN1c3RTZXJ2aWNlTWVzc2FnZUZyb21KU09OVHlwZWQ7XG5cdGV4cG9ydHMuQ3VzdFNlcnZpY2VNZXNzYWdlVG9KU09OID0gQ3VzdFNlcnZpY2VNZXNzYWdlVG9KU09OO1xuXHRleHBvcnRzLkN1c3RTZXJ2aWNlTWVzc2FnZVRvSlNPTlR5cGVkID0gQ3VzdFNlcnZpY2VNZXNzYWdlVG9KU09OVHlwZWQ7XG5cdGNvbnN0IEN1c3RTZXJ2aWNlQXR0YWNobWVudF8xID0gcmVxdWlyZV9DdXN0U2VydmljZUF0dGFjaG1lbnQoKTtcblx0LyoqXG5cdCogQ2hlY2sgaWYgYSBnaXZlbiBvYmplY3QgaW1wbGVtZW50cyB0aGUgQ3VzdFNlcnZpY2VNZXNzYWdlIGludGVyZmFjZS5cblx0Ki9cblx0ZnVuY3Rpb24gaW5zdGFuY2VPZkN1c3RTZXJ2aWNlTWVzc2FnZSh2YWx1ZSkge1xuXHRcdGlmICghKFwiYm9keVwiIGluIHZhbHVlKSB8fCB2YWx1ZVtcImJvZHlcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdGlmICghKFwiY3JlYXRlZF9hdFwiIGluIHZhbHVlKSB8fCB2YWx1ZVtcImNyZWF0ZWRfYXRcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdGlmICghKFwiY3VzdG9tZXJfaWRcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJjdXN0b21lcl9pZFwiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0aWYgKCEoXCJkaXJlY3Rpb25cIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJkaXJlY3Rpb25cIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdGlmICghKFwiaWRcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJpZFwiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0aWYgKCEoXCJpc19hZ2VudFwiIGluIHZhbHVlKSB8fCB2YWx1ZVtcImlzX2FnZW50XCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRpZiAoIShcImlzX2F1dG9tYXRpY19tZXNzYWdlXCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wiaXNfYXV0b21hdGljX21lc3NhZ2VcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdGZ1bmN0aW9uIEN1c3RTZXJ2aWNlTWVzc2FnZUZyb21KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gQ3VzdFNlcnZpY2VNZXNzYWdlRnJvbUpTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gQ3VzdFNlcnZpY2VNZXNzYWdlRnJvbUpTT05UeXBlZChqc29uLCBpZ25vcmVEaXNjcmltaW5hdG9yKSB7XG5cdFx0aWYgKGpzb24gPT0gbnVsbCkgcmV0dXJuIGpzb247XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwiYWdlbnRfaWRcIjoganNvbltcImFnZW50X2lkXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wiYWdlbnRfaWRcIl0sXG5cdFx0XHRcImFnZW50X25hbWVcIjoganNvbltcImFnZW50X25hbWVcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IGpzb25bXCJhZ2VudF9uYW1lXCJdLFxuXHRcdFx0XCJhdHRhY2htZW50c1wiOiBqc29uW1wiYXR0YWNobWVudHNcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IGpzb25bXCJhdHRhY2htZW50c1wiXS5tYXAoQ3VzdFNlcnZpY2VBdHRhY2htZW50XzEuQ3VzdFNlcnZpY2VBdHRhY2htZW50RnJvbUpTT04pLFxuXHRcdFx0XCJib2R5XCI6IGpzb25bXCJib2R5XCJdLFxuXHRcdFx0XCJjcmVhdGVkX2F0XCI6IG5ldyBEYXRlKGpzb25bXCJjcmVhdGVkX2F0XCJdKSxcblx0XHRcdFwiY3VzdG9tZXJfaWRcIjoganNvbltcImN1c3RvbWVyX2lkXCJdLFxuXHRcdFx0XCJkaXJlY3Rpb25cIjoganNvbltcImRpcmVjdGlvblwiXSxcblx0XHRcdFwiaWRcIjoganNvbltcImlkXCJdLFxuXHRcdFx0XCJpc19hZ2VudFwiOiBqc29uW1wiaXNfYWdlbnRcIl0sXG5cdFx0XHRcImlzX2F1dG9tYXRpY19tZXNzYWdlXCI6IGpzb25bXCJpc19hdXRvbWF0aWNfbWVzc2FnZVwiXSxcblx0XHRcdFwiaXNfZW1haWxcIjoganNvbltcImlzX2VtYWlsXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wiaXNfZW1haWxcIl1cblx0XHR9O1xuXHR9XG5cdGZ1bmN0aW9uIEN1c3RTZXJ2aWNlTWVzc2FnZVRvSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIEN1c3RTZXJ2aWNlTWVzc2FnZVRvSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBDdXN0U2VydmljZU1lc3NhZ2VUb0pTT05UeXBlZCh2YWx1ZSwgaWdub3JlRGlzY3JpbWluYXRvciA9IGZhbHNlKSB7XG5cdFx0aWYgKHZhbHVlID09IG51bGwpIHJldHVybiB2YWx1ZTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0XCJhZ2VudF9pZFwiOiB2YWx1ZVtcImFnZW50X2lkXCJdLFxuXHRcdFx0XCJhZ2VudF9uYW1lXCI6IHZhbHVlW1wiYWdlbnRfbmFtZVwiXSxcblx0XHRcdFwiYXR0YWNobWVudHNcIjogdmFsdWVbXCJhdHRhY2htZW50c1wiXSA9PSBudWxsID8gdm9pZCAwIDogdmFsdWVbXCJhdHRhY2htZW50c1wiXS5tYXAoQ3VzdFNlcnZpY2VBdHRhY2htZW50XzEuQ3VzdFNlcnZpY2VBdHRhY2htZW50VG9KU09OKSxcblx0XHRcdFwiYm9keVwiOiB2YWx1ZVtcImJvZHlcIl0sXG5cdFx0XHRcImNyZWF0ZWRfYXRcIjogdmFsdWVbXCJjcmVhdGVkX2F0XCJdLnRvSVNPU3RyaW5nKCksXG5cdFx0XHRcImN1c3RvbWVyX2lkXCI6IHZhbHVlW1wiY3VzdG9tZXJfaWRcIl0sXG5cdFx0XHRcImRpcmVjdGlvblwiOiB2YWx1ZVtcImRpcmVjdGlvblwiXSxcblx0XHRcdFwiaWRcIjogdmFsdWVbXCJpZFwiXSxcblx0XHRcdFwiaXNfYWdlbnRcIjogdmFsdWVbXCJpc19hZ2VudFwiXSxcblx0XHRcdFwiaXNfYXV0b21hdGljX21lc3NhZ2VcIjogdmFsdWVbXCJpc19hdXRvbWF0aWNfbWVzc2FnZVwiXSxcblx0XHRcdFwiaXNfZW1haWxcIjogdmFsdWVbXCJpc19lbWFpbFwiXVxuXHRcdH07XG5cdH1cbn0pIH0pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiAuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL0N1c3RTZXJ2aWNlQ29udmVyc2F0aW9uTWVzc2FnZXMuanNcbnZhciByZXF1aXJlX0N1c3RTZXJ2aWNlQ29udmVyc2F0aW9uTWVzc2FnZXMgPSAvKiBAX19QVVJFX18gKi8gX19jb21tb25KUyh7IFwiLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9DdXN0U2VydmljZUNvbnZlcnNhdGlvbk1lc3NhZ2VzLmpzXCI6ICgoZXhwb3J0cykgPT4ge1xuXHQvKipcblx0KiBDb21tZXJjZVxuXHQqIE5vIGRlc2NyaXB0aW9uIHByb3ZpZGVkIChnZW5lcmF0ZWQgYnkgT3BlbmFwaSBHZW5lcmF0b3IgaHR0cHM6Ly9naXRodWIuY29tL29wZW5hcGl0b29scy9vcGVuYXBpLWdlbmVyYXRvcilcblx0KlxuXHQqIFRoZSB2ZXJzaW9uIG9mIHRoZSBPcGVuQVBJIGRvY3VtZW50OiAxLjEuMFxuXHQqXG5cdCpcblx0KiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IE9wZW5BUEkgR2VuZXJhdG9yIChodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2gpLlxuXHQqIGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaFxuXHQqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cblx0Ki9cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuXHRleHBvcnRzLmluc3RhbmNlT2ZDdXN0U2VydmljZUNvbnZlcnNhdGlvbk1lc3NhZ2VzID0gaW5zdGFuY2VPZkN1c3RTZXJ2aWNlQ29udmVyc2F0aW9uTWVzc2FnZXM7XG5cdGV4cG9ydHMuQ3VzdFNlcnZpY2VDb252ZXJzYXRpb25NZXNzYWdlc0Zyb21KU09OID0gQ3VzdFNlcnZpY2VDb252ZXJzYXRpb25NZXNzYWdlc0Zyb21KU09OO1xuXHRleHBvcnRzLkN1c3RTZXJ2aWNlQ29udmVyc2F0aW9uTWVzc2FnZXNGcm9tSlNPTlR5cGVkID0gQ3VzdFNlcnZpY2VDb252ZXJzYXRpb25NZXNzYWdlc0Zyb21KU09OVHlwZWQ7XG5cdGV4cG9ydHMuQ3VzdFNlcnZpY2VDb252ZXJzYXRpb25NZXNzYWdlc1RvSlNPTiA9IEN1c3RTZXJ2aWNlQ29udmVyc2F0aW9uTWVzc2FnZXNUb0pTT047XG5cdGV4cG9ydHMuQ3VzdFNlcnZpY2VDb252ZXJzYXRpb25NZXNzYWdlc1RvSlNPTlR5cGVkID0gQ3VzdFNlcnZpY2VDb252ZXJzYXRpb25NZXNzYWdlc1RvSlNPTlR5cGVkO1xuXHRjb25zdCBDdXN0U2VydmljZU1lc3NhZ2VfMSQxID0gcmVxdWlyZV9DdXN0U2VydmljZU1lc3NhZ2UoKTtcblx0Y29uc3QgQ29udmVyc2F0aW9uU3RhdHVzXzEgPSByZXF1aXJlX0NvbnZlcnNhdGlvblN0YXR1cygpO1xuXHQvKipcblx0KiBDaGVjayBpZiBhIGdpdmVuIG9iamVjdCBpbXBsZW1lbnRzIHRoZSBDdXN0U2VydmljZUNvbnZlcnNhdGlvbk1lc3NhZ2VzIGludGVyZmFjZS5cblx0Ki9cblx0ZnVuY3Rpb24gaW5zdGFuY2VPZkN1c3RTZXJ2aWNlQ29udmVyc2F0aW9uTWVzc2FnZXModmFsdWUpIHtcblx0XHRpZiAoIShcImRhdGFcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJkYXRhXCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHRmdW5jdGlvbiBDdXN0U2VydmljZUNvbnZlcnNhdGlvbk1lc3NhZ2VzRnJvbUpTT04oanNvbikge1xuXHRcdHJldHVybiBDdXN0U2VydmljZUNvbnZlcnNhdGlvbk1lc3NhZ2VzRnJvbUpTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gQ3VzdFNlcnZpY2VDb252ZXJzYXRpb25NZXNzYWdlc0Zyb21KU09OVHlwZWQoanNvbiwgaWdub3JlRGlzY3JpbWluYXRvcikge1xuXHRcdGlmIChqc29uID09IG51bGwpIHJldHVybiBqc29uO1xuXHRcdHJldHVybiB7XG5cdFx0XHRcImNvbnZlcnNhdGlvbl9zdGF0dXNcIjoganNvbltcImNvbnZlcnNhdGlvbl9zdGF0dXNcIl0gPT0gbnVsbCA/IHZvaWQgMCA6ICgwLCBDb252ZXJzYXRpb25TdGF0dXNfMS5Db252ZXJzYXRpb25TdGF0dXNGcm9tSlNPTikoanNvbltcImNvbnZlcnNhdGlvbl9zdGF0dXNcIl0pLFxuXHRcdFx0XCJkYXRhXCI6IGpzb25bXCJkYXRhXCJdLm1hcChDdXN0U2VydmljZU1lc3NhZ2VfMSQxLkN1c3RTZXJ2aWNlTWVzc2FnZUZyb21KU09OKSxcblx0XHRcdFwibmV4dF9wYWdlXCI6IGpzb25bXCJuZXh0X3BhZ2VcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IGpzb25bXCJuZXh0X3BhZ2VcIl0sXG5cdFx0XHRcInByZXZpb3VzX3BhZ2VcIjoganNvbltcInByZXZpb3VzX3BhZ2VcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IGpzb25bXCJwcmV2aW91c19wYWdlXCJdXG5cdFx0fTtcblx0fVxuXHRmdW5jdGlvbiBDdXN0U2VydmljZUNvbnZlcnNhdGlvbk1lc3NhZ2VzVG9KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gQ3VzdFNlcnZpY2VDb252ZXJzYXRpb25NZXNzYWdlc1RvSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBDdXN0U2VydmljZUNvbnZlcnNhdGlvbk1lc3NhZ2VzVG9KU09OVHlwZWQodmFsdWUsIGlnbm9yZURpc2NyaW1pbmF0b3IgPSBmYWxzZSkge1xuXHRcdGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gdmFsdWU7XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwiY29udmVyc2F0aW9uX3N0YXR1c1wiOiAoMCwgQ29udmVyc2F0aW9uU3RhdHVzXzEuQ29udmVyc2F0aW9uU3RhdHVzVG9KU09OKSh2YWx1ZVtcImNvbnZlcnNhdGlvbl9zdGF0dXNcIl0pLFxuXHRcdFx0XCJkYXRhXCI6IHZhbHVlW1wiZGF0YVwiXS5tYXAoQ3VzdFNlcnZpY2VNZXNzYWdlXzEkMS5DdXN0U2VydmljZU1lc3NhZ2VUb0pTT04pLFxuXHRcdFx0XCJuZXh0X3BhZ2VcIjogdmFsdWVbXCJuZXh0X3BhZ2VcIl0sXG5cdFx0XHRcInByZXZpb3VzX3BhZ2VcIjogdmFsdWVbXCJwcmV2aW91c19wYWdlXCJdXG5cdFx0fTtcblx0fVxufSkgfSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIC4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvTWFudWFsRm9ybS5qc1xudmFyIHJlcXVpcmVfTWFudWFsRm9ybSA9IC8qIEBfX1BVUkVfXyAqLyBfX2NvbW1vbkpTKHsgXCIuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL01hbnVhbEZvcm0uanNcIjogKChleHBvcnRzKSA9PiB7XG5cdC8qKlxuXHQqIENvbW1lcmNlXG5cdCogTm8gZGVzY3JpcHRpb24gcHJvdmlkZWQgKGdlbmVyYXRlZCBieSBPcGVuYXBpIEdlbmVyYXRvciBodHRwczovL2dpdGh1Yi5jb20vb3BlbmFwaXRvb2xzL29wZW5hcGktZ2VuZXJhdG9yKVxuXHQqXG5cdCogVGhlIHZlcnNpb24gb2YgdGhlIE9wZW5BUEkgZG9jdW1lbnQ6IDEuMS4wXG5cdCpcblx0KlxuXHQqIE5PVEU6IFRoaXMgY2xhc3MgaXMgYXV0byBnZW5lcmF0ZWQgYnkgT3BlbkFQSSBHZW5lcmF0b3IgKGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaCkuXG5cdCogaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoXG5cdCogRG8gbm90IGVkaXQgdGhlIGNsYXNzIG1hbnVhbGx5LlxuXHQqL1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5cdGV4cG9ydHMuaW5zdGFuY2VPZk1hbnVhbEZvcm0gPSBpbnN0YW5jZU9mTWFudWFsRm9ybTtcblx0ZXhwb3J0cy5NYW51YWxGb3JtRnJvbUpTT04gPSBNYW51YWxGb3JtRnJvbUpTT047XG5cdGV4cG9ydHMuTWFudWFsRm9ybUZyb21KU09OVHlwZWQgPSBNYW51YWxGb3JtRnJvbUpTT05UeXBlZDtcblx0ZXhwb3J0cy5NYW51YWxGb3JtVG9KU09OID0gTWFudWFsRm9ybVRvSlNPTjtcblx0ZXhwb3J0cy5NYW51YWxGb3JtVG9KU09OVHlwZWQgPSBNYW51YWxGb3JtVG9KU09OVHlwZWQ7XG5cdGNvbnN0IEZvcm1UeXBlXzEkMSA9IHJlcXVpcmVfRm9ybVR5cGUoKTtcblx0LyoqXG5cdCogQ2hlY2sgaWYgYSBnaXZlbiBvYmplY3QgaW1wbGVtZW50cyB0aGUgTWFudWFsRm9ybSBpbnRlcmZhY2UuXG5cdCovXG5cdGZ1bmN0aW9uIGluc3RhbmNlT2ZNYW51YWxGb3JtKHZhbHVlKSB7XG5cdFx0aWYgKCEoXCJmb3JtX3R5cGVcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJmb3JtX3R5cGVcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdGZ1bmN0aW9uIE1hbnVhbEZvcm1Gcm9tSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIE1hbnVhbEZvcm1Gcm9tSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBNYW51YWxGb3JtRnJvbUpTT05UeXBlZChqc29uLCBpZ25vcmVEaXNjcmltaW5hdG9yKSB7XG5cdFx0aWYgKGpzb24gPT0gbnVsbCkgcmV0dXJuIGpzb247XG5cdFx0cmV0dXJuIHsgXCJmb3JtX3R5cGVcIjogKDAsIEZvcm1UeXBlXzEkMS5Gb3JtVHlwZUZyb21KU09OKShqc29uW1wiZm9ybV90eXBlXCJdKSB9O1xuXHR9XG5cdGZ1bmN0aW9uIE1hbnVhbEZvcm1Ub0pTT04oanNvbikge1xuXHRcdHJldHVybiBNYW51YWxGb3JtVG9KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIE1hbnVhbEZvcm1Ub0pTT05UeXBlZCh2YWx1ZSwgaWdub3JlRGlzY3JpbWluYXRvciA9IGZhbHNlKSB7XG5cdFx0aWYgKHZhbHVlID09IG51bGwpIHJldHVybiB2YWx1ZTtcblx0XHRyZXR1cm4geyBcImZvcm1fdHlwZVwiOiAoMCwgRm9ybVR5cGVfMSQxLkZvcm1UeXBlVG9KU09OKSh2YWx1ZVtcImZvcm1fdHlwZVwiXSkgfTtcblx0fVxufSkgfSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIC4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvRm9ybVJlc3BvbnNlQXR0cmlidXRlc0Zvcm1DYXRlZ29yeS5qc1xudmFyIHJlcXVpcmVfRm9ybVJlc3BvbnNlQXR0cmlidXRlc0Zvcm1DYXRlZ29yeSA9IC8qIEBfX1BVUkVfXyAqLyBfX2NvbW1vbkpTKHsgXCIuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL0Zvcm1SZXNwb25zZUF0dHJpYnV0ZXNGb3JtQ2F0ZWdvcnkuanNcIjogKChleHBvcnRzKSA9PiB7XG5cdC8qKlxuXHQqIENvbW1lcmNlXG5cdCogTm8gZGVzY3JpcHRpb24gcHJvdmlkZWQgKGdlbmVyYXRlZCBieSBPcGVuYXBpIEdlbmVyYXRvciBodHRwczovL2dpdGh1Yi5jb20vb3BlbmFwaXRvb2xzL29wZW5hcGktZ2VuZXJhdG9yKVxuXHQqXG5cdCogVGhlIHZlcnNpb24gb2YgdGhlIE9wZW5BUEkgZG9jdW1lbnQ6IDEuMS4wXG5cdCpcblx0KlxuXHQqIE5PVEU6IFRoaXMgY2xhc3MgaXMgYXV0byBnZW5lcmF0ZWQgYnkgT3BlbkFQSSBHZW5lcmF0b3IgKGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaCkuXG5cdCogaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoXG5cdCogRG8gbm90IGVkaXQgdGhlIGNsYXNzIG1hbnVhbGx5LlxuXHQqL1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5cdGV4cG9ydHMuRm9ybVJlc3BvbnNlQXR0cmlidXRlc0Zvcm1DYXRlZ29yeUZyb21KU09OID0gRm9ybVJlc3BvbnNlQXR0cmlidXRlc0Zvcm1DYXRlZ29yeUZyb21KU09OO1xuXHRleHBvcnRzLkZvcm1SZXNwb25zZUF0dHJpYnV0ZXNGb3JtQ2F0ZWdvcnlGcm9tSlNPTlR5cGVkID0gRm9ybVJlc3BvbnNlQXR0cmlidXRlc0Zvcm1DYXRlZ29yeUZyb21KU09OVHlwZWQ7XG5cdGV4cG9ydHMuRm9ybVJlc3BvbnNlQXR0cmlidXRlc0Zvcm1DYXRlZ29yeVRvSlNPTiA9IEZvcm1SZXNwb25zZUF0dHJpYnV0ZXNGb3JtQ2F0ZWdvcnlUb0pTT047XG5cdGV4cG9ydHMuRm9ybVJlc3BvbnNlQXR0cmlidXRlc0Zvcm1DYXRlZ29yeVRvSlNPTlR5cGVkID0gRm9ybVJlc3BvbnNlQXR0cmlidXRlc0Zvcm1DYXRlZ29yeVRvSlNPTlR5cGVkO1xuXHRjb25zdCBBdXRvRm9ybV8xID0gcmVxdWlyZV9BdXRvRm9ybSgpO1xuXHRjb25zdCBNYW51YWxGb3JtXzEgPSByZXF1aXJlX01hbnVhbEZvcm0oKTtcblx0ZnVuY3Rpb24gRm9ybVJlc3BvbnNlQXR0cmlidXRlc0Zvcm1DYXRlZ29yeUZyb21KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gRm9ybVJlc3BvbnNlQXR0cmlidXRlc0Zvcm1DYXRlZ29yeUZyb21KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIEZvcm1SZXNwb25zZUF0dHJpYnV0ZXNGb3JtQ2F0ZWdvcnlGcm9tSlNPTlR5cGVkKGpzb24sIGlnbm9yZURpc2NyaW1pbmF0b3IpIHtcblx0XHRpZiAoanNvbiA9PSBudWxsKSByZXR1cm4ganNvbjtcblx0XHRpZiAoKDAsIEF1dG9Gb3JtXzEuaW5zdGFuY2VPZkF1dG9Gb3JtKShqc29uKSkgcmV0dXJuICgwLCBBdXRvRm9ybV8xLkF1dG9Gb3JtRnJvbUpTT05UeXBlZCkoanNvbiwgdHJ1ZSk7XG5cdFx0aWYgKCgwLCBNYW51YWxGb3JtXzEuaW5zdGFuY2VPZk1hbnVhbEZvcm0pKGpzb24pKSByZXR1cm4gKDAsIE1hbnVhbEZvcm1fMS5NYW51YWxGb3JtRnJvbUpTT05UeXBlZCkoanNvbiwgdHJ1ZSk7XG5cdFx0cmV0dXJuIHt9O1xuXHR9XG5cdGZ1bmN0aW9uIEZvcm1SZXNwb25zZUF0dHJpYnV0ZXNGb3JtQ2F0ZWdvcnlUb0pTT04oanNvbikge1xuXHRcdHJldHVybiBGb3JtUmVzcG9uc2VBdHRyaWJ1dGVzRm9ybUNhdGVnb3J5VG9KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIEZvcm1SZXNwb25zZUF0dHJpYnV0ZXNGb3JtQ2F0ZWdvcnlUb0pTT05UeXBlZCh2YWx1ZSwgaWdub3JlRGlzY3JpbWluYXRvciA9IGZhbHNlKSB7XG5cdFx0aWYgKHZhbHVlID09IG51bGwpIHJldHVybiB2YWx1ZTtcblx0XHRpZiAoKDAsIEF1dG9Gb3JtXzEuaW5zdGFuY2VPZkF1dG9Gb3JtKSh2YWx1ZSkpIHJldHVybiAoMCwgQXV0b0Zvcm1fMS5BdXRvRm9ybVRvSlNPTikodmFsdWUpO1xuXHRcdGlmICgoMCwgTWFudWFsRm9ybV8xLmluc3RhbmNlT2ZNYW51YWxGb3JtKSh2YWx1ZSkpIHJldHVybiAoMCwgTWFudWFsRm9ybV8xLk1hbnVhbEZvcm1Ub0pTT04pKHZhbHVlKTtcblx0XHRyZXR1cm4ge307XG5cdH1cbn0pIH0pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiAuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL0Zvcm1SZXNwb25zZUF0dHJpYnV0ZXMuanNcbnZhciByZXF1aXJlX0Zvcm1SZXNwb25zZUF0dHJpYnV0ZXMgPSAvKiBAX19QVVJFX18gKi8gX19jb21tb25KUyh7IFwiLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9Gb3JtUmVzcG9uc2VBdHRyaWJ1dGVzLmpzXCI6ICgoZXhwb3J0cykgPT4ge1xuXHQvKipcblx0KiBDb21tZXJjZVxuXHQqIE5vIGRlc2NyaXB0aW9uIHByb3ZpZGVkIChnZW5lcmF0ZWQgYnkgT3BlbmFwaSBHZW5lcmF0b3IgaHR0cHM6Ly9naXRodWIuY29tL29wZW5hcGl0b29scy9vcGVuYXBpLWdlbmVyYXRvcilcblx0KlxuXHQqIFRoZSB2ZXJzaW9uIG9mIHRoZSBPcGVuQVBJIGRvY3VtZW50OiAxLjEuMFxuXHQqXG5cdCpcblx0KiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IE9wZW5BUEkgR2VuZXJhdG9yIChodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2gpLlxuXHQqIGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaFxuXHQqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cblx0Ki9cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuXHRleHBvcnRzLmluc3RhbmNlT2ZGb3JtUmVzcG9uc2VBdHRyaWJ1dGVzID0gaW5zdGFuY2VPZkZvcm1SZXNwb25zZUF0dHJpYnV0ZXM7XG5cdGV4cG9ydHMuRm9ybVJlc3BvbnNlQXR0cmlidXRlc0Zyb21KU09OID0gRm9ybVJlc3BvbnNlQXR0cmlidXRlc0Zyb21KU09OO1xuXHRleHBvcnRzLkZvcm1SZXNwb25zZUF0dHJpYnV0ZXNGcm9tSlNPTlR5cGVkID0gRm9ybVJlc3BvbnNlQXR0cmlidXRlc0Zyb21KU09OVHlwZWQ7XG5cdGV4cG9ydHMuRm9ybVJlc3BvbnNlQXR0cmlidXRlc1RvSlNPTiA9IEZvcm1SZXNwb25zZUF0dHJpYnV0ZXNUb0pTT047XG5cdGV4cG9ydHMuRm9ybVJlc3BvbnNlQXR0cmlidXRlc1RvSlNPTlR5cGVkID0gRm9ybVJlc3BvbnNlQXR0cmlidXRlc1RvSlNPTlR5cGVkO1xuXHRjb25zdCBGb3JtUmVzcG9uc2VBdHRyaWJ1dGVzRm9ybUNhdGVnb3J5XzEgPSByZXF1aXJlX0Zvcm1SZXNwb25zZUF0dHJpYnV0ZXNGb3JtQ2F0ZWdvcnkoKTtcblx0LyoqXG5cdCogQ2hlY2sgaWYgYSBnaXZlbiBvYmplY3QgaW1wbGVtZW50cyB0aGUgRm9ybVJlc3BvbnNlQXR0cmlidXRlcyBpbnRlcmZhY2UuXG5cdCovXG5cdGZ1bmN0aW9uIGluc3RhbmNlT2ZGb3JtUmVzcG9uc2VBdHRyaWJ1dGVzKHZhbHVlKSB7XG5cdFx0aWYgKCEoXCJzY2hlbWFcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJzY2hlbWFcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdGZ1bmN0aW9uIEZvcm1SZXNwb25zZUF0dHJpYnV0ZXNGcm9tSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIEZvcm1SZXNwb25zZUF0dHJpYnV0ZXNGcm9tSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBGb3JtUmVzcG9uc2VBdHRyaWJ1dGVzRnJvbUpTT05UeXBlZChqc29uLCBpZ25vcmVEaXNjcmltaW5hdG9yKSB7XG5cdFx0aWYgKGpzb24gPT0gbnVsbCkgcmV0dXJuIGpzb247XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwiZm9ybV9jYXRlZ29yeVwiOiBqc29uW1wiZm9ybV9jYXRlZ29yeVwiXSA9PSBudWxsID8gdm9pZCAwIDogKDAsIEZvcm1SZXNwb25zZUF0dHJpYnV0ZXNGb3JtQ2F0ZWdvcnlfMS5Gb3JtUmVzcG9uc2VBdHRyaWJ1dGVzRm9ybUNhdGVnb3J5RnJvbUpTT04pKGpzb25bXCJmb3JtX2NhdGVnb3J5XCJdKSxcblx0XHRcdFwic2NoZW1hXCI6IGpzb25bXCJzY2hlbWFcIl1cblx0XHR9O1xuXHR9XG5cdGZ1bmN0aW9uIEZvcm1SZXNwb25zZUF0dHJpYnV0ZXNUb0pTT04oanNvbikge1xuXHRcdHJldHVybiBGb3JtUmVzcG9uc2VBdHRyaWJ1dGVzVG9KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIEZvcm1SZXNwb25zZUF0dHJpYnV0ZXNUb0pTT05UeXBlZCh2YWx1ZSwgaWdub3JlRGlzY3JpbWluYXRvciA9IGZhbHNlKSB7XG5cdFx0aWYgKHZhbHVlID09IG51bGwpIHJldHVybiB2YWx1ZTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0XCJmb3JtX2NhdGVnb3J5XCI6ICgwLCBGb3JtUmVzcG9uc2VBdHRyaWJ1dGVzRm9ybUNhdGVnb3J5XzEuRm9ybVJlc3BvbnNlQXR0cmlidXRlc0Zvcm1DYXRlZ29yeVRvSlNPTikodmFsdWVbXCJmb3JtX2NhdGVnb3J5XCJdKSxcblx0XHRcdFwic2NoZW1hXCI6IHZhbHVlW1wic2NoZW1hXCJdXG5cdFx0fTtcblx0fVxufSkgfSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIC4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvRm9ybVN1Ym1pdHRlZEF0dHJpYnV0ZXMuanNcbnZhciByZXF1aXJlX0Zvcm1TdWJtaXR0ZWRBdHRyaWJ1dGVzID0gLyogQF9fUFVSRV9fICovIF9fY29tbW9uSlMoeyBcIi4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvRm9ybVN1Ym1pdHRlZEF0dHJpYnV0ZXMuanNcIjogKChleHBvcnRzKSA9PiB7XG5cdC8qKlxuXHQqIENvbW1lcmNlXG5cdCogTm8gZGVzY3JpcHRpb24gcHJvdmlkZWQgKGdlbmVyYXRlZCBieSBPcGVuYXBpIEdlbmVyYXRvciBodHRwczovL2dpdGh1Yi5jb20vb3BlbmFwaXRvb2xzL29wZW5hcGktZ2VuZXJhdG9yKVxuXHQqXG5cdCogVGhlIHZlcnNpb24gb2YgdGhlIE9wZW5BUEkgZG9jdW1lbnQ6IDEuMS4wXG5cdCpcblx0KlxuXHQqIE5PVEU6IFRoaXMgY2xhc3MgaXMgYXV0byBnZW5lcmF0ZWQgYnkgT3BlbkFQSSBHZW5lcmF0b3IgKGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaCkuXG5cdCogaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoXG5cdCogRG8gbm90IGVkaXQgdGhlIGNsYXNzIG1hbnVhbGx5LlxuXHQqL1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5cdGV4cG9ydHMuaW5zdGFuY2VPZkZvcm1TdWJtaXR0ZWRBdHRyaWJ1dGVzID0gaW5zdGFuY2VPZkZvcm1TdWJtaXR0ZWRBdHRyaWJ1dGVzO1xuXHRleHBvcnRzLkZvcm1TdWJtaXR0ZWRBdHRyaWJ1dGVzRnJvbUpTT04gPSBGb3JtU3VibWl0dGVkQXR0cmlidXRlc0Zyb21KU09OO1xuXHRleHBvcnRzLkZvcm1TdWJtaXR0ZWRBdHRyaWJ1dGVzRnJvbUpTT05UeXBlZCA9IEZvcm1TdWJtaXR0ZWRBdHRyaWJ1dGVzRnJvbUpTT05UeXBlZDtcblx0ZXhwb3J0cy5Gb3JtU3VibWl0dGVkQXR0cmlidXRlc1RvSlNPTiA9IEZvcm1TdWJtaXR0ZWRBdHRyaWJ1dGVzVG9KU09OO1xuXHRleHBvcnRzLkZvcm1TdWJtaXR0ZWRBdHRyaWJ1dGVzVG9KU09OVHlwZWQgPSBGb3JtU3VibWl0dGVkQXR0cmlidXRlc1RvSlNPTlR5cGVkO1xuXHRjb25zdCBGb3JtVHlwZV8xID0gcmVxdWlyZV9Gb3JtVHlwZSgpO1xuXHQvKipcblx0KiBDaGVjayBpZiBhIGdpdmVuIG9iamVjdCBpbXBsZW1lbnRzIHRoZSBGb3JtU3VibWl0dGVkQXR0cmlidXRlcyBpbnRlcmZhY2UuXG5cdCovXG5cdGZ1bmN0aW9uIGluc3RhbmNlT2ZGb3JtU3VibWl0dGVkQXR0cmlidXRlcyh2YWx1ZSkge1xuXHRcdGlmICghKFwiZmlsbGVkX3NjaGVtYVwiIGluIHZhbHVlKSB8fCB2YWx1ZVtcImZpbGxlZF9zY2hlbWFcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdGlmICghKFwiZm9ybV9yZXNwb25zZV9pZFwiIGluIHZhbHVlKSB8fCB2YWx1ZVtcImZvcm1fcmVzcG9uc2VfaWRcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdGlmICghKFwiZm9ybV90eXBlXCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wiZm9ybV90eXBlXCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHRmdW5jdGlvbiBGb3JtU3VibWl0dGVkQXR0cmlidXRlc0Zyb21KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gRm9ybVN1Ym1pdHRlZEF0dHJpYnV0ZXNGcm9tSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBGb3JtU3VibWl0dGVkQXR0cmlidXRlc0Zyb21KU09OVHlwZWQoanNvbiwgaWdub3JlRGlzY3JpbWluYXRvcikge1xuXHRcdGlmIChqc29uID09IG51bGwpIHJldHVybiBqc29uO1xuXHRcdHJldHVybiB7XG5cdFx0XHRcImZpbGxlZF9zY2hlbWFcIjoganNvbltcImZpbGxlZF9zY2hlbWFcIl0sXG5cdFx0XHRcImZvcm1fcmVzcG9uc2VfaWRcIjoganNvbltcImZvcm1fcmVzcG9uc2VfaWRcIl0sXG5cdFx0XHRcImZvcm1fdHlwZVwiOiAoMCwgRm9ybVR5cGVfMS5Gb3JtVHlwZUZyb21KU09OKShqc29uW1wiZm9ybV90eXBlXCJdKVxuXHRcdH07XG5cdH1cblx0ZnVuY3Rpb24gRm9ybVN1Ym1pdHRlZEF0dHJpYnV0ZXNUb0pTT04oanNvbikge1xuXHRcdHJldHVybiBGb3JtU3VibWl0dGVkQXR0cmlidXRlc1RvSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBGb3JtU3VibWl0dGVkQXR0cmlidXRlc1RvSlNPTlR5cGVkKHZhbHVlLCBpZ25vcmVEaXNjcmltaW5hdG9yID0gZmFsc2UpIHtcblx0XHRpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIHZhbHVlO1xuXHRcdHJldHVybiB7XG5cdFx0XHRcImZpbGxlZF9zY2hlbWFcIjogdmFsdWVbXCJmaWxsZWRfc2NoZW1hXCJdLFxuXHRcdFx0XCJmb3JtX3Jlc3BvbnNlX2lkXCI6IHZhbHVlW1wiZm9ybV9yZXNwb25zZV9pZFwiXSxcblx0XHRcdFwiZm9ybV90eXBlXCI6ICgwLCBGb3JtVHlwZV8xLkZvcm1UeXBlVG9KU09OKSh2YWx1ZVtcImZvcm1fdHlwZVwiXSlcblx0XHR9O1xuXHR9XG59KSB9KTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9GdWxmaWxsbWVudERpc3BsYXlTdGF0dXMuanNcbnZhciByZXF1aXJlX0Z1bGZpbGxtZW50RGlzcGxheVN0YXR1cyA9IC8qIEBfX1BVUkVfXyAqLyBfX2NvbW1vbkpTKHsgXCIuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL0Z1bGZpbGxtZW50RGlzcGxheVN0YXR1cy5qc1wiOiAoKGV4cG9ydHMpID0+IHtcblx0LyoqXG5cdCogQ29tbWVyY2Vcblx0KiBObyBkZXNjcmlwdGlvbiBwcm92aWRlZCAoZ2VuZXJhdGVkIGJ5IE9wZW5hcGkgR2VuZXJhdG9yIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuYXBpdG9vbHMvb3BlbmFwaS1nZW5lcmF0b3IpXG5cdCpcblx0KiBUaGUgdmVyc2lvbiBvZiB0aGUgT3BlbkFQSSBkb2N1bWVudDogMS4xLjBcblx0KlxuXHQqXG5cdCogTk9URTogVGhpcyBjbGFzcyBpcyBhdXRvIGdlbmVyYXRlZCBieSBPcGVuQVBJIEdlbmVyYXRvciAoaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoKS5cblx0KiBodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2hcblx0KiBEbyBub3QgZWRpdCB0aGUgY2xhc3MgbWFudWFsbHkuXG5cdCovXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcblx0ZXhwb3J0cy5GdWxmaWxsbWVudERpc3BsYXlTdGF0dXMgPSB2b2lkIDA7XG5cdGV4cG9ydHMuaW5zdGFuY2VPZkZ1bGZpbGxtZW50RGlzcGxheVN0YXR1cyA9IGluc3RhbmNlT2ZGdWxmaWxsbWVudERpc3BsYXlTdGF0dXM7XG5cdGV4cG9ydHMuRnVsZmlsbG1lbnREaXNwbGF5U3RhdHVzRnJvbUpTT04gPSBGdWxmaWxsbWVudERpc3BsYXlTdGF0dXNGcm9tSlNPTjtcblx0ZXhwb3J0cy5GdWxmaWxsbWVudERpc3BsYXlTdGF0dXNGcm9tSlNPTlR5cGVkID0gRnVsZmlsbG1lbnREaXNwbGF5U3RhdHVzRnJvbUpTT05UeXBlZDtcblx0ZXhwb3J0cy5GdWxmaWxsbWVudERpc3BsYXlTdGF0dXNUb0pTT04gPSBGdWxmaWxsbWVudERpc3BsYXlTdGF0dXNUb0pTT047XG5cdGV4cG9ydHMuRnVsZmlsbG1lbnREaXNwbGF5U3RhdHVzVG9KU09OVHlwZWQgPSBGdWxmaWxsbWVudERpc3BsYXlTdGF0dXNUb0pTT05UeXBlZDtcblx0LyoqXG5cdCpcblx0KiBAZXhwb3J0XG5cdCogQGVudW0ge3N0cmluZ31cblx0Ki9cblx0dmFyIEZ1bGZpbGxtZW50RGlzcGxheVN0YXR1cztcblx0KGZ1bmN0aW9uKEZ1bGZpbGxtZW50RGlzcGxheVN0YXR1cyQxKSB7XG5cdFx0RnVsZmlsbG1lbnREaXNwbGF5U3RhdHVzJDFbXCJBVFRFTVBURURfREVMSVZFUllcIl0gPSBcIkF0dGVtcHRlZCBkZWxpdmVyeVwiO1xuXHRcdEZ1bGZpbGxtZW50RGlzcGxheVN0YXR1cyQxW1wiQ0FOQ0VMRURcIl0gPSBcIkNhbmNlbGVkXCI7XG5cdFx0RnVsZmlsbG1lbnREaXNwbGF5U3RhdHVzJDFbXCJDT05GSVJNRURcIl0gPSBcIkNvbmZpcm1lZFwiO1xuXHRcdEZ1bGZpbGxtZW50RGlzcGxheVN0YXR1cyQxW1wiREVMSVZFUkVEXCJdID0gXCJEZWxpdmVyZWRcIjtcblx0XHRGdWxmaWxsbWVudERpc3BsYXlTdGF0dXMkMVtcIkZBSUxVUkVcIl0gPSBcIkZhaWx1cmVcIjtcblx0XHRGdWxmaWxsbWVudERpc3BsYXlTdGF0dXMkMVtcIkZVTEZJTExFRFwiXSA9IFwiRnVsZmlsbGVkXCI7XG5cdFx0RnVsZmlsbG1lbnREaXNwbGF5U3RhdHVzJDFbXCJJTl9UUkFOU0lUXCJdID0gXCJJbiB0cmFuc2l0XCI7XG5cdFx0RnVsZmlsbG1lbnREaXNwbGF5U3RhdHVzJDFbXCJMQUJFTF9QUklOVEVEXCJdID0gXCJMYWJlbCBwcmludGVkXCI7XG5cdFx0RnVsZmlsbG1lbnREaXNwbGF5U3RhdHVzJDFbXCJMQUJFTF9QVVJDSEFTRURcIl0gPSBcIkxhYmVsIHB1cmNoYXNlZFwiO1xuXHRcdEZ1bGZpbGxtZW50RGlzcGxheVN0YXR1cyQxW1wiTEFCRUxfVk9JREVEXCJdID0gXCJMYWJlbCB2b2lkZWRcIjtcblx0XHRGdWxmaWxsbWVudERpc3BsYXlTdGF0dXMkMVtcIk1BUktFRF9BU19GVUxGSUxMRURcIl0gPSBcIk1hcmtlZCBhcyBmdWxmaWxsZWRcIjtcblx0XHRGdWxmaWxsbWVudERpc3BsYXlTdGF0dXMkMVtcIk5PVF9ERUxJVkVSRURcIl0gPSBcIk5vdCBkZWxpdmVyZWRcIjtcblx0XHRGdWxmaWxsbWVudERpc3BsYXlTdGF0dXMkMVtcIk9VVF9GT1JfREVMSVZFUllcIl0gPSBcIk91dCBmb3IgZGVsaXZlcnlcIjtcblx0XHRGdWxmaWxsbWVudERpc3BsYXlTdGF0dXMkMVtcIlBJQ0tFRF9VUFwiXSA9IFwiUGlja2VkIHVwXCI7XG5cdFx0RnVsZmlsbG1lbnREaXNwbGF5U3RhdHVzJDFbXCJSRUFEWV9GT1JfUElDS1VQXCJdID0gXCJSZWFkeSBmb3IgcGlja3VwXCI7XG5cdFx0RnVsZmlsbG1lbnREaXNwbGF5U3RhdHVzJDFbXCJTVUJNSVRURURcIl0gPSBcIlN1Ym1pdHRlZFwiO1xuXHRcdEZ1bGZpbGxtZW50RGlzcGxheVN0YXR1cyQxW1wiSU5fUFJPR1JFU1NcIl0gPSBcIkluIHByb2dyZXNzXCI7XG5cdFx0RnVsZmlsbG1lbnREaXNwbGF5U3RhdHVzJDFbXCJPTl9IT0xEXCJdID0gXCJPbiBob2xkXCI7XG5cdFx0RnVsZmlsbG1lbnREaXNwbGF5U3RhdHVzJDFbXCJPUEVOXCJdID0gXCJPcGVuXCI7XG5cdFx0RnVsZmlsbG1lbnREaXNwbGF5U3RhdHVzJDFbXCJQQVJUSUFMTFlfRlVMRklMTEVEXCJdID0gXCJQYXJ0aWFsbHkgZnVsZmlsbGVkXCI7XG5cdFx0RnVsZmlsbG1lbnREaXNwbGF5U3RhdHVzJDFbXCJQRU5ESU5HX0ZVTEZJTExNRU5UXCJdID0gXCJQZW5kaW5nIGZ1bGZpbGxtZW50XCI7XG5cdFx0RnVsZmlsbG1lbnREaXNwbGF5U3RhdHVzJDFbXCJSRVFVRVNUX0RFQ0xJTkVEXCJdID0gXCJSZXF1ZXN0IGRlY2xpbmVkXCI7XG5cdFx0RnVsZmlsbG1lbnREaXNwbGF5U3RhdHVzJDFbXCJSRVNUT0NLRURcIl0gPSBcIlJlc3RvY2tlZFwiO1xuXHRcdEZ1bGZpbGxtZW50RGlzcGxheVN0YXR1cyQxW1wiU0NIRURVTEVEXCJdID0gXCJTY2hlZHVsZWRcIjtcblx0XHRGdWxmaWxsbWVudERpc3BsYXlTdGF0dXMkMVtcIlVORlVMRklMTEVEXCJdID0gXCJVbmZ1bGZpbGxlZFwiO1xuXHR9KShGdWxmaWxsbWVudERpc3BsYXlTdGF0dXMgfHwgKGV4cG9ydHMuRnVsZmlsbG1lbnREaXNwbGF5U3RhdHVzID0gRnVsZmlsbG1lbnREaXNwbGF5U3RhdHVzID0ge30pKTtcblx0ZnVuY3Rpb24gaW5zdGFuY2VPZkZ1bGZpbGxtZW50RGlzcGxheVN0YXR1cyh2YWx1ZSkge1xuXHRcdGZvciAoY29uc3Qga2V5IGluIEZ1bGZpbGxtZW50RGlzcGxheVN0YXR1cykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChGdWxmaWxsbWVudERpc3BsYXlTdGF0dXMsIGtleSkpIHtcblx0XHRcdGlmIChGdWxmaWxsbWVudERpc3BsYXlTdGF0dXNba2V5XSA9PT0gdmFsdWUpIHJldHVybiB0cnVlO1xuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblx0ZnVuY3Rpb24gRnVsZmlsbG1lbnREaXNwbGF5U3RhdHVzRnJvbUpTT04oanNvbikge1xuXHRcdHJldHVybiBGdWxmaWxsbWVudERpc3BsYXlTdGF0dXNGcm9tSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBGdWxmaWxsbWVudERpc3BsYXlTdGF0dXNGcm9tSlNPTlR5cGVkKGpzb24sIGlnbm9yZURpc2NyaW1pbmF0b3IpIHtcblx0XHRyZXR1cm4ganNvbjtcblx0fVxuXHRmdW5jdGlvbiBGdWxmaWxsbWVudERpc3BsYXlTdGF0dXNUb0pTT04odmFsdWUpIHtcblx0XHRyZXR1cm4gdmFsdWU7XG5cdH1cblx0ZnVuY3Rpb24gRnVsZmlsbG1lbnREaXNwbGF5U3RhdHVzVG9KU09OVHlwZWQodmFsdWUsIGlnbm9yZURpc2NyaW1pbmF0b3IpIHtcblx0XHRyZXR1cm4gdmFsdWU7XG5cdH1cbn0pIH0pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiAuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL0dlbmVyYXRpb25QYXJhbXMuanNcbnZhciByZXF1aXJlX0dlbmVyYXRpb25QYXJhbXMgPSAvKiBAX19QVVJFX18gKi8gX19jb21tb25KUyh7IFwiLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9HZW5lcmF0aW9uUGFyYW1zLmpzXCI6ICgoZXhwb3J0cykgPT4ge1xuXHQvKipcblx0KiBDb21tZXJjZVxuXHQqIE5vIGRlc2NyaXB0aW9uIHByb3ZpZGVkIChnZW5lcmF0ZWQgYnkgT3BlbmFwaSBHZW5lcmF0b3IgaHR0cHM6Ly9naXRodWIuY29tL29wZW5hcGl0b29scy9vcGVuYXBpLWdlbmVyYXRvcilcblx0KlxuXHQqIFRoZSB2ZXJzaW9uIG9mIHRoZSBPcGVuQVBJIGRvY3VtZW50OiAxLjEuMFxuXHQqXG5cdCpcblx0KiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IE9wZW5BUEkgR2VuZXJhdG9yIChodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2gpLlxuXHQqIGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaFxuXHQqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cblx0Ki9cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuXHRleHBvcnRzLmluc3RhbmNlT2ZHZW5lcmF0aW9uUGFyYW1zID0gaW5zdGFuY2VPZkdlbmVyYXRpb25QYXJhbXM7XG5cdGV4cG9ydHMuR2VuZXJhdGlvblBhcmFtc0Zyb21KU09OID0gR2VuZXJhdGlvblBhcmFtc0Zyb21KU09OO1xuXHRleHBvcnRzLkdlbmVyYXRpb25QYXJhbXNGcm9tSlNPTlR5cGVkID0gR2VuZXJhdGlvblBhcmFtc0Zyb21KU09OVHlwZWQ7XG5cdGV4cG9ydHMuR2VuZXJhdGlvblBhcmFtc1RvSlNPTiA9IEdlbmVyYXRpb25QYXJhbXNUb0pTT047XG5cdGV4cG9ydHMuR2VuZXJhdGlvblBhcmFtc1RvSlNPTlR5cGVkID0gR2VuZXJhdGlvblBhcmFtc1RvSlNPTlR5cGVkO1xuXHQvKipcblx0KiBDaGVjayBpZiBhIGdpdmVuIG9iamVjdCBpbXBsZW1lbnRzIHRoZSBHZW5lcmF0aW9uUGFyYW1zIGludGVyZmFjZS5cblx0Ki9cblx0ZnVuY3Rpb24gaW5zdGFuY2VPZkdlbmVyYXRpb25QYXJhbXModmFsdWUpIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHRmdW5jdGlvbiBHZW5lcmF0aW9uUGFyYW1zRnJvbUpTT04oanNvbikge1xuXHRcdHJldHVybiBHZW5lcmF0aW9uUGFyYW1zRnJvbUpTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gR2VuZXJhdGlvblBhcmFtc0Zyb21KU09OVHlwZWQoanNvbiwgaWdub3JlRGlzY3JpbWluYXRvcikge1xuXHRcdGlmIChqc29uID09IG51bGwpIHJldHVybiBqc29uO1xuXHRcdHJldHVybiB7XG5cdFx0XHRcIm1heF90b2tlbnNcIjoganNvbltcIm1heF90b2tlbnNcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IGpzb25bXCJtYXhfdG9rZW5zXCJdLFxuXHRcdFx0XCJtb2RlbFwiOiBqc29uW1wibW9kZWxcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IGpzb25bXCJtb2RlbFwiXSxcblx0XHRcdFwibnVtX3N1Z2dlc3Rpb25zXCI6IGpzb25bXCJudW1fc3VnZ2VzdGlvbnNcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IGpzb25bXCJudW1fc3VnZ2VzdGlvbnNcIl0sXG5cdFx0XHRcInJlc3BvbnNlX2NhY2hpbmdcIjoganNvbltcInJlc3BvbnNlX2NhY2hpbmdcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IGpzb25bXCJyZXNwb25zZV9jYWNoaW5nXCJdLFxuXHRcdFx0XCJyZXNwb25zZV9zeXN0ZW1fcHJvbXB0XCI6IGpzb25bXCJyZXNwb25zZV9zeXN0ZW1fcHJvbXB0XCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wicmVzcG9uc2Vfc3lzdGVtX3Byb21wdFwiXSxcblx0XHRcdFwic3RvcFwiOiBqc29uW1wic3RvcFwiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcInN0b3BcIl0sXG5cdFx0XHRcInN0cmVhbVwiOiBqc29uW1wic3RyZWFtXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wic3RyZWFtXCJdLFxuXHRcdFx0XCJzdWdnZXN0aW9uX3N5c3RlbV9wcm9tcHRcIjoganNvbltcInN1Z2dlc3Rpb25fc3lzdGVtX3Byb21wdFwiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcInN1Z2dlc3Rpb25fc3lzdGVtX3Byb21wdFwiXSxcblx0XHRcdFwidGVtcGVyYXR1cmVcIjoganNvbltcInRlbXBlcmF0dXJlXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1widGVtcGVyYXR1cmVcIl0sXG5cdFx0XHRcInRvcF9wXCI6IGpzb25bXCJ0b3BfcFwiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcInRvcF9wXCJdXG5cdFx0fTtcblx0fVxuXHRmdW5jdGlvbiBHZW5lcmF0aW9uUGFyYW1zVG9KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gR2VuZXJhdGlvblBhcmFtc1RvSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBHZW5lcmF0aW9uUGFyYW1zVG9KU09OVHlwZWQodmFsdWUsIGlnbm9yZURpc2NyaW1pbmF0b3IgPSBmYWxzZSkge1xuXHRcdGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gdmFsdWU7XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwibWF4X3Rva2Vuc1wiOiB2YWx1ZVtcIm1heF90b2tlbnNcIl0sXG5cdFx0XHRcIm1vZGVsXCI6IHZhbHVlW1wibW9kZWxcIl0sXG5cdFx0XHRcIm51bV9zdWdnZXN0aW9uc1wiOiB2YWx1ZVtcIm51bV9zdWdnZXN0aW9uc1wiXSxcblx0XHRcdFwicmVzcG9uc2VfY2FjaGluZ1wiOiB2YWx1ZVtcInJlc3BvbnNlX2NhY2hpbmdcIl0sXG5cdFx0XHRcInJlc3BvbnNlX3N5c3RlbV9wcm9tcHRcIjogdmFsdWVbXCJyZXNwb25zZV9zeXN0ZW1fcHJvbXB0XCJdLFxuXHRcdFx0XCJzdG9wXCI6IHZhbHVlW1wic3RvcFwiXSxcblx0XHRcdFwic3RyZWFtXCI6IHZhbHVlW1wic3RyZWFtXCJdLFxuXHRcdFx0XCJzdWdnZXN0aW9uX3N5c3RlbV9wcm9tcHRcIjogdmFsdWVbXCJzdWdnZXN0aW9uX3N5c3RlbV9wcm9tcHRcIl0sXG5cdFx0XHRcInRlbXBlcmF0dXJlXCI6IHZhbHVlW1widGVtcGVyYXR1cmVcIl0sXG5cdFx0XHRcInRvcF9wXCI6IHZhbHVlW1widG9wX3BcIl1cblx0XHR9O1xuXHR9XG59KSB9KTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9HZXRDb252ZXJzYXRpb25NZXNzYWdlc1JlcXVlc3QuanNcbnZhciByZXF1aXJlX0dldENvbnZlcnNhdGlvbk1lc3NhZ2VzUmVxdWVzdCA9IC8qIEBfX1BVUkVfXyAqLyBfX2NvbW1vbkpTKHsgXCIuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL0dldENvbnZlcnNhdGlvbk1lc3NhZ2VzUmVxdWVzdC5qc1wiOiAoKGV4cG9ydHMpID0+IHtcblx0LyoqXG5cdCogQ29tbWVyY2Vcblx0KiBObyBkZXNjcmlwdGlvbiBwcm92aWRlZCAoZ2VuZXJhdGVkIGJ5IE9wZW5hcGkgR2VuZXJhdG9yIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuYXBpdG9vbHMvb3BlbmFwaS1nZW5lcmF0b3IpXG5cdCpcblx0KiBUaGUgdmVyc2lvbiBvZiB0aGUgT3BlbkFQSSBkb2N1bWVudDogMS4xLjBcblx0KlxuXHQqXG5cdCogTk9URTogVGhpcyBjbGFzcyBpcyBhdXRvIGdlbmVyYXRlZCBieSBPcGVuQVBJIEdlbmVyYXRvciAoaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoKS5cblx0KiBodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2hcblx0KiBEbyBub3QgZWRpdCB0aGUgY2xhc3MgbWFudWFsbHkuXG5cdCovXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcblx0ZXhwb3J0cy5pbnN0YW5jZU9mR2V0Q29udmVyc2F0aW9uTWVzc2FnZXNSZXF1ZXN0ID0gaW5zdGFuY2VPZkdldENvbnZlcnNhdGlvbk1lc3NhZ2VzUmVxdWVzdDtcblx0ZXhwb3J0cy5HZXRDb252ZXJzYXRpb25NZXNzYWdlc1JlcXVlc3RGcm9tSlNPTiA9IEdldENvbnZlcnNhdGlvbk1lc3NhZ2VzUmVxdWVzdEZyb21KU09OO1xuXHRleHBvcnRzLkdldENvbnZlcnNhdGlvbk1lc3NhZ2VzUmVxdWVzdEZyb21KU09OVHlwZWQgPSBHZXRDb252ZXJzYXRpb25NZXNzYWdlc1JlcXVlc3RGcm9tSlNPTlR5cGVkO1xuXHRleHBvcnRzLkdldENvbnZlcnNhdGlvbk1lc3NhZ2VzUmVxdWVzdFRvSlNPTiA9IEdldENvbnZlcnNhdGlvbk1lc3NhZ2VzUmVxdWVzdFRvSlNPTjtcblx0ZXhwb3J0cy5HZXRDb252ZXJzYXRpb25NZXNzYWdlc1JlcXVlc3RUb0pTT05UeXBlZCA9IEdldENvbnZlcnNhdGlvbk1lc3NhZ2VzUmVxdWVzdFRvSlNPTlR5cGVkO1xuXHRjb25zdCBDdXN0b21lclNlcnZpY2VQcm92aWRlcl8xJDIgPSByZXF1aXJlX0N1c3RvbWVyU2VydmljZVByb3ZpZGVyKCk7XG5cdC8qKlxuXHQqIENoZWNrIGlmIGEgZ2l2ZW4gb2JqZWN0IGltcGxlbWVudHMgdGhlIEdldENvbnZlcnNhdGlvbk1lc3NhZ2VzUmVxdWVzdCBpbnRlcmZhY2UuXG5cdCovXG5cdGZ1bmN0aW9uIGluc3RhbmNlT2ZHZXRDb252ZXJzYXRpb25NZXNzYWdlc1JlcXVlc3QodmFsdWUpIHtcblx0XHRpZiAoIShcImNvbnZlcnNhdGlvbl9pZFwiIGluIHZhbHVlKSB8fCB2YWx1ZVtcImNvbnZlcnNhdGlvbl9pZFwiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0ZnVuY3Rpb24gR2V0Q29udmVyc2F0aW9uTWVzc2FnZXNSZXF1ZXN0RnJvbUpTT04oanNvbikge1xuXHRcdHJldHVybiBHZXRDb252ZXJzYXRpb25NZXNzYWdlc1JlcXVlc3RGcm9tSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBHZXRDb252ZXJzYXRpb25NZXNzYWdlc1JlcXVlc3RGcm9tSlNPTlR5cGVkKGpzb24sIGlnbm9yZURpc2NyaW1pbmF0b3IpIHtcblx0XHRpZiAoanNvbiA9PSBudWxsKSByZXR1cm4ganNvbjtcblx0XHRyZXR1cm4ge1xuXHRcdFx0XCJjb252ZXJzYXRpb25faWRcIjoganNvbltcImNvbnZlcnNhdGlvbl9pZFwiXSxcblx0XHRcdFwiY3VzdG9tZXJfc2VydmljZV9wcm92aWRlclwiOiBqc29uW1wiY3VzdG9tZXJfc2VydmljZV9wcm92aWRlclwiXSA9PSBudWxsID8gdm9pZCAwIDogKDAsIEN1c3RvbWVyU2VydmljZVByb3ZpZGVyXzEkMi5DdXN0b21lclNlcnZpY2VQcm92aWRlckZyb21KU09OKShqc29uW1wiY3VzdG9tZXJfc2VydmljZV9wcm92aWRlclwiXSlcblx0XHR9O1xuXHR9XG5cdGZ1bmN0aW9uIEdldENvbnZlcnNhdGlvbk1lc3NhZ2VzUmVxdWVzdFRvSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIEdldENvbnZlcnNhdGlvbk1lc3NhZ2VzUmVxdWVzdFRvSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBHZXRDb252ZXJzYXRpb25NZXNzYWdlc1JlcXVlc3RUb0pTT05UeXBlZCh2YWx1ZSwgaWdub3JlRGlzY3JpbWluYXRvciA9IGZhbHNlKSB7XG5cdFx0aWYgKHZhbHVlID09IG51bGwpIHJldHVybiB2YWx1ZTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0XCJjb252ZXJzYXRpb25faWRcIjogdmFsdWVbXCJjb252ZXJzYXRpb25faWRcIl0sXG5cdFx0XHRcImN1c3RvbWVyX3NlcnZpY2VfcHJvdmlkZXJcIjogKDAsIEN1c3RvbWVyU2VydmljZVByb3ZpZGVyXzEkMi5DdXN0b21lclNlcnZpY2VQcm92aWRlclRvSlNPTikodmFsdWVbXCJjdXN0b21lcl9zZXJ2aWNlX3Byb3ZpZGVyXCJdKVxuXHRcdH07XG5cdH1cbn0pIH0pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiAuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL0lzQnVzaW5lc3NIb3Vyc1JlcXVlc3QuanNcbnZhciByZXF1aXJlX0lzQnVzaW5lc3NIb3Vyc1JlcXVlc3QgPSAvKiBAX19QVVJFX18gKi8gX19jb21tb25KUyh7IFwiLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9Jc0J1c2luZXNzSG91cnNSZXF1ZXN0LmpzXCI6ICgoZXhwb3J0cykgPT4ge1xuXHQvKipcblx0KiBDb21tZXJjZVxuXHQqIE5vIGRlc2NyaXB0aW9uIHByb3ZpZGVkIChnZW5lcmF0ZWQgYnkgT3BlbmFwaSBHZW5lcmF0b3IgaHR0cHM6Ly9naXRodWIuY29tL29wZW5hcGl0b29scy9vcGVuYXBpLWdlbmVyYXRvcilcblx0KlxuXHQqIFRoZSB2ZXJzaW9uIG9mIHRoZSBPcGVuQVBJIGRvY3VtZW50OiAxLjEuMFxuXHQqXG5cdCpcblx0KiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IE9wZW5BUEkgR2VuZXJhdG9yIChodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2gpLlxuXHQqIGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaFxuXHQqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cblx0Ki9cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuXHRleHBvcnRzLmluc3RhbmNlT2ZJc0J1c2luZXNzSG91cnNSZXF1ZXN0ID0gaW5zdGFuY2VPZklzQnVzaW5lc3NIb3Vyc1JlcXVlc3Q7XG5cdGV4cG9ydHMuSXNCdXNpbmVzc0hvdXJzUmVxdWVzdEZyb21KU09OID0gSXNCdXNpbmVzc0hvdXJzUmVxdWVzdEZyb21KU09OO1xuXHRleHBvcnRzLklzQnVzaW5lc3NIb3Vyc1JlcXVlc3RGcm9tSlNPTlR5cGVkID0gSXNCdXNpbmVzc0hvdXJzUmVxdWVzdEZyb21KU09OVHlwZWQ7XG5cdGV4cG9ydHMuSXNCdXNpbmVzc0hvdXJzUmVxdWVzdFRvSlNPTiA9IElzQnVzaW5lc3NIb3Vyc1JlcXVlc3RUb0pTT047XG5cdGV4cG9ydHMuSXNCdXNpbmVzc0hvdXJzUmVxdWVzdFRvSlNPTlR5cGVkID0gSXNCdXNpbmVzc0hvdXJzUmVxdWVzdFRvSlNPTlR5cGVkO1xuXHRjb25zdCBDdXN0b21lclNlcnZpY2VQcm92aWRlcl8xJDEgPSByZXF1aXJlX0N1c3RvbWVyU2VydmljZVByb3ZpZGVyKCk7XG5cdC8qKlxuXHQqIENoZWNrIGlmIGEgZ2l2ZW4gb2JqZWN0IGltcGxlbWVudHMgdGhlIElzQnVzaW5lc3NIb3Vyc1JlcXVlc3QgaW50ZXJmYWNlLlxuXHQqL1xuXHRmdW5jdGlvbiBpbnN0YW5jZU9mSXNCdXNpbmVzc0hvdXJzUmVxdWVzdCh2YWx1ZSkge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdGZ1bmN0aW9uIElzQnVzaW5lc3NIb3Vyc1JlcXVlc3RGcm9tSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIElzQnVzaW5lc3NIb3Vyc1JlcXVlc3RGcm9tSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBJc0J1c2luZXNzSG91cnNSZXF1ZXN0RnJvbUpTT05UeXBlZChqc29uLCBpZ25vcmVEaXNjcmltaW5hdG9yKSB7XG5cdFx0aWYgKGpzb24gPT0gbnVsbCkgcmV0dXJuIGpzb247XG5cdFx0cmV0dXJuIHsgXCJjdXN0b21lcl9zZXJ2aWNlX3Byb3ZpZGVyXCI6IGpzb25bXCJjdXN0b21lcl9zZXJ2aWNlX3Byb3ZpZGVyXCJdID09IG51bGwgPyB2b2lkIDAgOiAoMCwgQ3VzdG9tZXJTZXJ2aWNlUHJvdmlkZXJfMSQxLkN1c3RvbWVyU2VydmljZVByb3ZpZGVyRnJvbUpTT04pKGpzb25bXCJjdXN0b21lcl9zZXJ2aWNlX3Byb3ZpZGVyXCJdKSB9O1xuXHR9XG5cdGZ1bmN0aW9uIElzQnVzaW5lc3NIb3Vyc1JlcXVlc3RUb0pTT04oanNvbikge1xuXHRcdHJldHVybiBJc0J1c2luZXNzSG91cnNSZXF1ZXN0VG9KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIElzQnVzaW5lc3NIb3Vyc1JlcXVlc3RUb0pTT05UeXBlZCh2YWx1ZSwgaWdub3JlRGlzY3JpbWluYXRvciA9IGZhbHNlKSB7XG5cdFx0aWYgKHZhbHVlID09IG51bGwpIHJldHVybiB2YWx1ZTtcblx0XHRyZXR1cm4geyBcImN1c3RvbWVyX3NlcnZpY2VfcHJvdmlkZXJcIjogKDAsIEN1c3RvbWVyU2VydmljZVByb3ZpZGVyXzEkMS5DdXN0b21lclNlcnZpY2VQcm92aWRlclRvSlNPTikodmFsdWVbXCJjdXN0b21lcl9zZXJ2aWNlX3Byb3ZpZGVyXCJdKSB9O1xuXHR9XG59KSB9KTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9Jc0J1c2luZXNzSG91cnNSZXNwb25zZS5qc1xudmFyIHJlcXVpcmVfSXNCdXNpbmVzc0hvdXJzUmVzcG9uc2UgPSAvKiBAX19QVVJFX18gKi8gX19jb21tb25KUyh7IFwiLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9Jc0J1c2luZXNzSG91cnNSZXNwb25zZS5qc1wiOiAoKGV4cG9ydHMpID0+IHtcblx0LyoqXG5cdCogQ29tbWVyY2Vcblx0KiBObyBkZXNjcmlwdGlvbiBwcm92aWRlZCAoZ2VuZXJhdGVkIGJ5IE9wZW5hcGkgR2VuZXJhdG9yIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuYXBpdG9vbHMvb3BlbmFwaS1nZW5lcmF0b3IpXG5cdCpcblx0KiBUaGUgdmVyc2lvbiBvZiB0aGUgT3BlbkFQSSBkb2N1bWVudDogMS4xLjBcblx0KlxuXHQqXG5cdCogTk9URTogVGhpcyBjbGFzcyBpcyBhdXRvIGdlbmVyYXRlZCBieSBPcGVuQVBJIEdlbmVyYXRvciAoaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoKS5cblx0KiBodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2hcblx0KiBEbyBub3QgZWRpdCB0aGUgY2xhc3MgbWFudWFsbHkuXG5cdCovXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcblx0ZXhwb3J0cy5pbnN0YW5jZU9mSXNCdXNpbmVzc0hvdXJzUmVzcG9uc2UgPSBpbnN0YW5jZU9mSXNCdXNpbmVzc0hvdXJzUmVzcG9uc2U7XG5cdGV4cG9ydHMuSXNCdXNpbmVzc0hvdXJzUmVzcG9uc2VGcm9tSlNPTiA9IElzQnVzaW5lc3NIb3Vyc1Jlc3BvbnNlRnJvbUpTT047XG5cdGV4cG9ydHMuSXNCdXNpbmVzc0hvdXJzUmVzcG9uc2VGcm9tSlNPTlR5cGVkID0gSXNCdXNpbmVzc0hvdXJzUmVzcG9uc2VGcm9tSlNPTlR5cGVkO1xuXHRleHBvcnRzLklzQnVzaW5lc3NIb3Vyc1Jlc3BvbnNlVG9KU09OID0gSXNCdXNpbmVzc0hvdXJzUmVzcG9uc2VUb0pTT047XG5cdGV4cG9ydHMuSXNCdXNpbmVzc0hvdXJzUmVzcG9uc2VUb0pTT05UeXBlZCA9IElzQnVzaW5lc3NIb3Vyc1Jlc3BvbnNlVG9KU09OVHlwZWQ7XG5cdC8qKlxuXHQqIENoZWNrIGlmIGEgZ2l2ZW4gb2JqZWN0IGltcGxlbWVudHMgdGhlIElzQnVzaW5lc3NIb3Vyc1Jlc3BvbnNlIGludGVyZmFjZS5cblx0Ki9cblx0ZnVuY3Rpb24gaW5zdGFuY2VPZklzQnVzaW5lc3NIb3Vyc1Jlc3BvbnNlKHZhbHVlKSB7XG5cdFx0aWYgKCEoXCJpc19idXNpbmVzc19ob3Vyc1wiIGluIHZhbHVlKSB8fCB2YWx1ZVtcImlzX2J1c2luZXNzX2hvdXJzXCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHRmdW5jdGlvbiBJc0J1c2luZXNzSG91cnNSZXNwb25zZUZyb21KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gSXNCdXNpbmVzc0hvdXJzUmVzcG9uc2VGcm9tSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBJc0J1c2luZXNzSG91cnNSZXNwb25zZUZyb21KU09OVHlwZWQoanNvbiwgaWdub3JlRGlzY3JpbWluYXRvcikge1xuXHRcdGlmIChqc29uID09IG51bGwpIHJldHVybiBqc29uO1xuXHRcdHJldHVybiB7XG5cdFx0XHRcImRldGFpbHNcIjoganNvbltcImRldGFpbHNcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IGpzb25bXCJkZXRhaWxzXCJdLFxuXHRcdFx0XCJpc19idXNpbmVzc19ob3Vyc1wiOiBqc29uW1wiaXNfYnVzaW5lc3NfaG91cnNcIl1cblx0XHR9O1xuXHR9XG5cdGZ1bmN0aW9uIElzQnVzaW5lc3NIb3Vyc1Jlc3BvbnNlVG9KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gSXNCdXNpbmVzc0hvdXJzUmVzcG9uc2VUb0pTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gSXNCdXNpbmVzc0hvdXJzUmVzcG9uc2VUb0pTT05UeXBlZCh2YWx1ZSwgaWdub3JlRGlzY3JpbWluYXRvciA9IGZhbHNlKSB7XG5cdFx0aWYgKHZhbHVlID09IG51bGwpIHJldHVybiB2YWx1ZTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0XCJkZXRhaWxzXCI6IHZhbHVlW1wiZGV0YWlsc1wiXSxcblx0XHRcdFwiaXNfYnVzaW5lc3NfaG91cnNcIjogdmFsdWVbXCJpc19idXNpbmVzc19ob3Vyc1wiXVxuXHRcdH07XG5cdH1cbn0pIH0pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiAuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL0xhYmVsVmFsdWUuanNcbnZhciByZXF1aXJlX0xhYmVsVmFsdWUgPSAvKiBAX19QVVJFX18gKi8gX19jb21tb25KUyh7IFwiLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9MYWJlbFZhbHVlLmpzXCI6ICgoZXhwb3J0cykgPT4ge1xuXHQvKipcblx0KiBDb21tZXJjZVxuXHQqIE5vIGRlc2NyaXB0aW9uIHByb3ZpZGVkIChnZW5lcmF0ZWQgYnkgT3BlbmFwaSBHZW5lcmF0b3IgaHR0cHM6Ly9naXRodWIuY29tL29wZW5hcGl0b29scy9vcGVuYXBpLWdlbmVyYXRvcilcblx0KlxuXHQqIFRoZSB2ZXJzaW9uIG9mIHRoZSBPcGVuQVBJIGRvY3VtZW50OiAxLjEuMFxuXHQqXG5cdCpcblx0KiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IE9wZW5BUEkgR2VuZXJhdG9yIChodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2gpLlxuXHQqIGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaFxuXHQqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cblx0Ki9cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuXHRleHBvcnRzLmluc3RhbmNlT2ZMYWJlbFZhbHVlID0gaW5zdGFuY2VPZkxhYmVsVmFsdWU7XG5cdGV4cG9ydHMuTGFiZWxWYWx1ZUZyb21KU09OID0gTGFiZWxWYWx1ZUZyb21KU09OO1xuXHRleHBvcnRzLkxhYmVsVmFsdWVGcm9tSlNPTlR5cGVkID0gTGFiZWxWYWx1ZUZyb21KU09OVHlwZWQ7XG5cdGV4cG9ydHMuTGFiZWxWYWx1ZVRvSlNPTiA9IExhYmVsVmFsdWVUb0pTT047XG5cdGV4cG9ydHMuTGFiZWxWYWx1ZVRvSlNPTlR5cGVkID0gTGFiZWxWYWx1ZVRvSlNPTlR5cGVkO1xuXHQvKipcblx0KiBDaGVjayBpZiBhIGdpdmVuIG9iamVjdCBpbXBsZW1lbnRzIHRoZSBMYWJlbFZhbHVlIGludGVyZmFjZS5cblx0Ki9cblx0ZnVuY3Rpb24gaW5zdGFuY2VPZkxhYmVsVmFsdWUodmFsdWUpIHtcblx0XHRpZiAoIShcImxhYmVsXCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wibGFiZWxcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdGlmICghKFwidmFsdWVcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJ2YWx1ZVwiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0ZnVuY3Rpb24gTGFiZWxWYWx1ZUZyb21KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gTGFiZWxWYWx1ZUZyb21KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIExhYmVsVmFsdWVGcm9tSlNPTlR5cGVkKGpzb24sIGlnbm9yZURpc2NyaW1pbmF0b3IpIHtcblx0XHRpZiAoanNvbiA9PSBudWxsKSByZXR1cm4ganNvbjtcblx0XHRyZXR1cm4ge1xuXHRcdFx0XCJsYWJlbFwiOiBqc29uW1wibGFiZWxcIl0sXG5cdFx0XHRcInZhbHVlXCI6IGpzb25bXCJ2YWx1ZVwiXVxuXHRcdH07XG5cdH1cblx0ZnVuY3Rpb24gTGFiZWxWYWx1ZVRvSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIExhYmVsVmFsdWVUb0pTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gTGFiZWxWYWx1ZVRvSlNPTlR5cGVkKHZhbHVlLCBpZ25vcmVEaXNjcmltaW5hdG9yID0gZmFsc2UpIHtcblx0XHRpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIHZhbHVlO1xuXHRcdHJldHVybiB7XG5cdFx0XHRcImxhYmVsXCI6IHZhbHVlW1wibGFiZWxcIl0sXG5cdFx0XHRcInZhbHVlXCI6IHZhbHVlW1widmFsdWVcIl1cblx0XHR9O1xuXHR9XG59KSB9KTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9Vc2VyRXZlbnRDYXRlZ29yeS5qc1xudmFyIHJlcXVpcmVfVXNlckV2ZW50Q2F0ZWdvcnkgPSAvKiBAX19QVVJFX18gKi8gX19jb21tb25KUyh7IFwiLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9Vc2VyRXZlbnRDYXRlZ29yeS5qc1wiOiAoKGV4cG9ydHMpID0+IHtcblx0LyoqXG5cdCogQ29tbWVyY2Vcblx0KiBObyBkZXNjcmlwdGlvbiBwcm92aWRlZCAoZ2VuZXJhdGVkIGJ5IE9wZW5hcGkgR2VuZXJhdG9yIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuYXBpdG9vbHMvb3BlbmFwaS1nZW5lcmF0b3IpXG5cdCpcblx0KiBUaGUgdmVyc2lvbiBvZiB0aGUgT3BlbkFQSSBkb2N1bWVudDogMS4xLjBcblx0KlxuXHQqXG5cdCogTk9URTogVGhpcyBjbGFzcyBpcyBhdXRvIGdlbmVyYXRlZCBieSBPcGVuQVBJIEdlbmVyYXRvciAoaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoKS5cblx0KiBodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2hcblx0KiBEbyBub3QgZWRpdCB0aGUgY2xhc3MgbWFudWFsbHkuXG5cdCovXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcblx0ZXhwb3J0cy5Vc2VyRXZlbnRDYXRlZ29yeSA9IHZvaWQgMDtcblx0ZXhwb3J0cy5pbnN0YW5jZU9mVXNlckV2ZW50Q2F0ZWdvcnkgPSBpbnN0YW5jZU9mVXNlckV2ZW50Q2F0ZWdvcnk7XG5cdGV4cG9ydHMuVXNlckV2ZW50Q2F0ZWdvcnlGcm9tSlNPTiA9IFVzZXJFdmVudENhdGVnb3J5RnJvbUpTT047XG5cdGV4cG9ydHMuVXNlckV2ZW50Q2F0ZWdvcnlGcm9tSlNPTlR5cGVkID0gVXNlckV2ZW50Q2F0ZWdvcnlGcm9tSlNPTlR5cGVkO1xuXHRleHBvcnRzLlVzZXJFdmVudENhdGVnb3J5VG9KU09OID0gVXNlckV2ZW50Q2F0ZWdvcnlUb0pTT047XG5cdGV4cG9ydHMuVXNlckV2ZW50Q2F0ZWdvcnlUb0pTT05UeXBlZCA9IFVzZXJFdmVudENhdGVnb3J5VG9KU09OVHlwZWQ7XG5cdC8qKlxuXHQqXG5cdCogQGV4cG9ydFxuXHQqIEBlbnVtIHtzdHJpbmd9XG5cdCovXG5cdHZhciBVc2VyRXZlbnRDYXRlZ29yeTtcblx0KGZ1bmN0aW9uKFVzZXJFdmVudENhdGVnb3J5JDEpIHtcblx0XHRVc2VyRXZlbnRDYXRlZ29yeSQxW1wiQXBwTG9hZGVkXCJdID0gXCJhcHBfbG9hZGVkXCI7XG5cdFx0VXNlckV2ZW50Q2F0ZWdvcnkkMVtcIlNlYXJjaFwiXSA9IFwic2VhcmNoXCI7XG5cdFx0VXNlckV2ZW50Q2F0ZWdvcnkkMVtcIlN1Z2dlc3Rpb25DbGlja2VkXCJdID0gXCJzdWdnZXN0aW9uX2NsaWNrZWRcIjtcblx0XHRVc2VyRXZlbnRDYXRlZ29yeSQxW1wiUXVlcnlUeXBlZFwiXSA9IFwicXVlcnlfdHlwZWRcIjtcblx0XHRVc2VyRXZlbnRDYXRlZ29yeSQxW1wiQXBwVW5sb2FkZWRcIl0gPSBcImFwcF91bmxvYWRlZFwiO1xuXHRcdFVzZXJFdmVudENhdGVnb3J5JDFbXCJQZHBWaXNpdFwiXSA9IFwicGRwX3Zpc2l0XCI7XG5cdFx0VXNlckV2ZW50Q2F0ZWdvcnkkMVtcIlBscFZpc2l0XCJdID0gXCJwbHBfdmlzaXRcIjtcblx0XHRVc2VyRXZlbnRDYXRlZ29yeSQxW1wiQWRkVG9DYXJ0XCJdID0gXCJhZGRfdG9fY2FydFwiO1xuXHRcdFVzZXJFdmVudENhdGVnb3J5JDFbXCJFeGl0U2VhcmNoXCJdID0gXCJleGl0X3NlYXJjaFwiO1xuXHRcdFVzZXJFdmVudENhdGVnb3J5JDFbXCJQYWdlVmlzaXRcIl0gPSBcInBhZ2VfdmlzaXRcIjtcblx0XHRVc2VyRXZlbnRDYXRlZ29yeSQxW1wiRm9ybVN1Ym1pdHRlZFwiXSA9IFwiZm9ybV9zdWJtaXR0ZWRcIjtcblx0fSkoVXNlckV2ZW50Q2F0ZWdvcnkgfHwgKGV4cG9ydHMuVXNlckV2ZW50Q2F0ZWdvcnkgPSBVc2VyRXZlbnRDYXRlZ29yeSA9IHt9KSk7XG5cdGZ1bmN0aW9uIGluc3RhbmNlT2ZVc2VyRXZlbnRDYXRlZ29yeSh2YWx1ZSkge1xuXHRcdGZvciAoY29uc3Qga2V5IGluIFVzZXJFdmVudENhdGVnb3J5KSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFVzZXJFdmVudENhdGVnb3J5LCBrZXkpKSB7XG5cdFx0XHRpZiAoVXNlckV2ZW50Q2F0ZWdvcnlba2V5XSA9PT0gdmFsdWUpIHJldHVybiB0cnVlO1xuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblx0ZnVuY3Rpb24gVXNlckV2ZW50Q2F0ZWdvcnlGcm9tSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIFVzZXJFdmVudENhdGVnb3J5RnJvbUpTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gVXNlckV2ZW50Q2F0ZWdvcnlGcm9tSlNPTlR5cGVkKGpzb24sIGlnbm9yZURpc2NyaW1pbmF0b3IpIHtcblx0XHRyZXR1cm4ganNvbjtcblx0fVxuXHRmdW5jdGlvbiBVc2VyRXZlbnRDYXRlZ29yeVRvSlNPTih2YWx1ZSkge1xuXHRcdHJldHVybiB2YWx1ZTtcblx0fVxuXHRmdW5jdGlvbiBVc2VyRXZlbnRDYXRlZ29yeVRvSlNPTlR5cGVkKHZhbHVlLCBpZ25vcmVEaXNjcmltaW5hdG9yKSB7XG5cdFx0cmV0dXJuIHZhbHVlO1xuXHR9XG59KSB9KTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9QRFBBdHRyaWJ1dGVzLmpzXG52YXIgcmVxdWlyZV9QRFBBdHRyaWJ1dGVzID0gLyogQF9fUFVSRV9fICovIF9fY29tbW9uSlMoeyBcIi4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvUERQQXR0cmlidXRlcy5qc1wiOiAoKGV4cG9ydHMpID0+IHtcblx0LyoqXG5cdCogQ29tbWVyY2Vcblx0KiBObyBkZXNjcmlwdGlvbiBwcm92aWRlZCAoZ2VuZXJhdGVkIGJ5IE9wZW5hcGkgR2VuZXJhdG9yIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuYXBpdG9vbHMvb3BlbmFwaS1nZW5lcmF0b3IpXG5cdCpcblx0KiBUaGUgdmVyc2lvbiBvZiB0aGUgT3BlbkFQSSBkb2N1bWVudDogMS4xLjBcblx0KlxuXHQqXG5cdCogTk9URTogVGhpcyBjbGFzcyBpcyBhdXRvIGdlbmVyYXRlZCBieSBPcGVuQVBJIEdlbmVyYXRvciAoaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoKS5cblx0KiBodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2hcblx0KiBEbyBub3QgZWRpdCB0aGUgY2xhc3MgbWFudWFsbHkuXG5cdCovXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcblx0ZXhwb3J0cy5pbnN0YW5jZU9mUERQQXR0cmlidXRlcyA9IGluc3RhbmNlT2ZQRFBBdHRyaWJ1dGVzO1xuXHRleHBvcnRzLlBEUEF0dHJpYnV0ZXNGcm9tSlNPTiA9IFBEUEF0dHJpYnV0ZXNGcm9tSlNPTjtcblx0ZXhwb3J0cy5QRFBBdHRyaWJ1dGVzRnJvbUpTT05UeXBlZCA9IFBEUEF0dHJpYnV0ZXNGcm9tSlNPTlR5cGVkO1xuXHRleHBvcnRzLlBEUEF0dHJpYnV0ZXNUb0pTT04gPSBQRFBBdHRyaWJ1dGVzVG9KU09OO1xuXHRleHBvcnRzLlBEUEF0dHJpYnV0ZXNUb0pTT05UeXBlZCA9IFBEUEF0dHJpYnV0ZXNUb0pTT05UeXBlZDtcblx0LyoqXG5cdCogQ2hlY2sgaWYgYSBnaXZlbiBvYmplY3QgaW1wbGVtZW50cyB0aGUgUERQQXR0cmlidXRlcyBpbnRlcmZhY2UuXG5cdCovXG5cdGZ1bmN0aW9uIGluc3RhbmNlT2ZQRFBBdHRyaWJ1dGVzKHZhbHVlKSB7XG5cdFx0aWYgKCEoXCJwcm9kdWN0X2lkXCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wicHJvZHVjdF9pZFwiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0ZnVuY3Rpb24gUERQQXR0cmlidXRlc0Zyb21KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gUERQQXR0cmlidXRlc0Zyb21KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIFBEUEF0dHJpYnV0ZXNGcm9tSlNPTlR5cGVkKGpzb24sIGlnbm9yZURpc2NyaW1pbmF0b3IpIHtcblx0XHRpZiAoanNvbiA9PSBudWxsKSByZXR1cm4ganNvbjtcblx0XHRyZXR1cm4ge1xuXHRcdFx0XCJwYXJlbnRfcHJvZHVjdF9pZFwiOiBqc29uW1wicGFyZW50X3Byb2R1Y3RfaWRcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IGpzb25bXCJwYXJlbnRfcHJvZHVjdF9pZFwiXSxcblx0XHRcdFwicHJvZHVjdF9pZFwiOiBqc29uW1wicHJvZHVjdF9pZFwiXSxcblx0XHRcdFwidXJsXCI6IGpzb25bXCJ1cmxcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IGpzb25bXCJ1cmxcIl1cblx0XHR9O1xuXHR9XG5cdGZ1bmN0aW9uIFBEUEF0dHJpYnV0ZXNUb0pTT04oanNvbikge1xuXHRcdHJldHVybiBQRFBBdHRyaWJ1dGVzVG9KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIFBEUEF0dHJpYnV0ZXNUb0pTT05UeXBlZCh2YWx1ZSwgaWdub3JlRGlzY3JpbWluYXRvciA9IGZhbHNlKSB7XG5cdFx0aWYgKHZhbHVlID09IG51bGwpIHJldHVybiB2YWx1ZTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0XCJwYXJlbnRfcHJvZHVjdF9pZFwiOiB2YWx1ZVtcInBhcmVudF9wcm9kdWN0X2lkXCJdLFxuXHRcdFx0XCJwcm9kdWN0X2lkXCI6IHZhbHVlW1wicHJvZHVjdF9pZFwiXSxcblx0XHRcdFwidXJsXCI6IHZhbHVlW1widXJsXCJdXG5cdFx0fTtcblx0fVxufSkgfSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIC4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvUExQQXR0cmlidXRlQ2F0ZWdvcnkuanNcbnZhciByZXF1aXJlX1BMUEF0dHJpYnV0ZUNhdGVnb3J5ID0gLyogQF9fUFVSRV9fICovIF9fY29tbW9uSlMoeyBcIi4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvUExQQXR0cmlidXRlQ2F0ZWdvcnkuanNcIjogKChleHBvcnRzKSA9PiB7XG5cdC8qKlxuXHQqIENvbW1lcmNlXG5cdCogTm8gZGVzY3JpcHRpb24gcHJvdmlkZWQgKGdlbmVyYXRlZCBieSBPcGVuYXBpIEdlbmVyYXRvciBodHRwczovL2dpdGh1Yi5jb20vb3BlbmFwaXRvb2xzL29wZW5hcGktZ2VuZXJhdG9yKVxuXHQqXG5cdCogVGhlIHZlcnNpb24gb2YgdGhlIE9wZW5BUEkgZG9jdW1lbnQ6IDEuMS4wXG5cdCpcblx0KlxuXHQqIE5PVEU6IFRoaXMgY2xhc3MgaXMgYXV0byBnZW5lcmF0ZWQgYnkgT3BlbkFQSSBHZW5lcmF0b3IgKGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaCkuXG5cdCogaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoXG5cdCogRG8gbm90IGVkaXQgdGhlIGNsYXNzIG1hbnVhbGx5LlxuXHQqL1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5cdGV4cG9ydHMuUExQQXR0cmlidXRlQ2F0ZWdvcnkgPSB2b2lkIDA7XG5cdGV4cG9ydHMuaW5zdGFuY2VPZlBMUEF0dHJpYnV0ZUNhdGVnb3J5ID0gaW5zdGFuY2VPZlBMUEF0dHJpYnV0ZUNhdGVnb3J5O1xuXHRleHBvcnRzLlBMUEF0dHJpYnV0ZUNhdGVnb3J5RnJvbUpTT04gPSBQTFBBdHRyaWJ1dGVDYXRlZ29yeUZyb21KU09OO1xuXHRleHBvcnRzLlBMUEF0dHJpYnV0ZUNhdGVnb3J5RnJvbUpTT05UeXBlZCA9IFBMUEF0dHJpYnV0ZUNhdGVnb3J5RnJvbUpTT05UeXBlZDtcblx0ZXhwb3J0cy5QTFBBdHRyaWJ1dGVDYXRlZ29yeVRvSlNPTiA9IFBMUEF0dHJpYnV0ZUNhdGVnb3J5VG9KU09OO1xuXHRleHBvcnRzLlBMUEF0dHJpYnV0ZUNhdGVnb3J5VG9KU09OVHlwZWQgPSBQTFBBdHRyaWJ1dGVDYXRlZ29yeVRvSlNPTlR5cGVkO1xuXHQvKipcblx0KlxuXHQqIEBleHBvcnRcblx0KiBAZW51bSB7c3RyaW5nfVxuXHQqL1xuXHR2YXIgUExQQXR0cmlidXRlQ2F0ZWdvcnk7XG5cdChmdW5jdGlvbihQTFBBdHRyaWJ1dGVDYXRlZ29yeSQxKSB7XG5cdFx0UExQQXR0cmlidXRlQ2F0ZWdvcnkkMVtcIlVybFwiXSA9IFwidXJsXCI7XG5cdFx0UExQQXR0cmlidXRlQ2F0ZWdvcnkkMVtcIklkXCJdID0gXCJpZFwiO1xuXHR9KShQTFBBdHRyaWJ1dGVDYXRlZ29yeSB8fCAoZXhwb3J0cy5QTFBBdHRyaWJ1dGVDYXRlZ29yeSA9IFBMUEF0dHJpYnV0ZUNhdGVnb3J5ID0ge30pKTtcblx0ZnVuY3Rpb24gaW5zdGFuY2VPZlBMUEF0dHJpYnV0ZUNhdGVnb3J5KHZhbHVlKSB7XG5cdFx0Zm9yIChjb25zdCBrZXkgaW4gUExQQXR0cmlidXRlQ2F0ZWdvcnkpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoUExQQXR0cmlidXRlQ2F0ZWdvcnksIGtleSkpIHtcblx0XHRcdGlmIChQTFBBdHRyaWJ1dGVDYXRlZ29yeVtrZXldID09PSB2YWx1ZSkgcmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHRmdW5jdGlvbiBQTFBBdHRyaWJ1dGVDYXRlZ29yeUZyb21KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gUExQQXR0cmlidXRlQ2F0ZWdvcnlGcm9tSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBQTFBBdHRyaWJ1dGVDYXRlZ29yeUZyb21KU09OVHlwZWQoanNvbiwgaWdub3JlRGlzY3JpbWluYXRvcikge1xuXHRcdHJldHVybiBqc29uO1xuXHR9XG5cdGZ1bmN0aW9uIFBMUEF0dHJpYnV0ZUNhdGVnb3J5VG9KU09OKHZhbHVlKSB7XG5cdFx0cmV0dXJuIHZhbHVlO1xuXHR9XG5cdGZ1bmN0aW9uIFBMUEF0dHJpYnV0ZUNhdGVnb3J5VG9KU09OVHlwZWQodmFsdWUsIGlnbm9yZURpc2NyaW1pbmF0b3IpIHtcblx0XHRyZXR1cm4gdmFsdWU7XG5cdH1cbn0pIH0pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiAuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL1BMUElkQXR0cmlidXRlcy5qc1xudmFyIHJlcXVpcmVfUExQSWRBdHRyaWJ1dGVzID0gLyogQF9fUFVSRV9fICovIF9fY29tbW9uSlMoeyBcIi4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvUExQSWRBdHRyaWJ1dGVzLmpzXCI6ICgoZXhwb3J0cykgPT4ge1xuXHQvKipcblx0KiBDb21tZXJjZVxuXHQqIE5vIGRlc2NyaXB0aW9uIHByb3ZpZGVkIChnZW5lcmF0ZWQgYnkgT3BlbmFwaSBHZW5lcmF0b3IgaHR0cHM6Ly9naXRodWIuY29tL29wZW5hcGl0b29scy9vcGVuYXBpLWdlbmVyYXRvcilcblx0KlxuXHQqIFRoZSB2ZXJzaW9uIG9mIHRoZSBPcGVuQVBJIGRvY3VtZW50OiAxLjEuMFxuXHQqXG5cdCpcblx0KiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IE9wZW5BUEkgR2VuZXJhdG9yIChodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2gpLlxuXHQqIGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaFxuXHQqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cblx0Ki9cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuXHRleHBvcnRzLmluc3RhbmNlT2ZQTFBJZEF0dHJpYnV0ZXMgPSBpbnN0YW5jZU9mUExQSWRBdHRyaWJ1dGVzO1xuXHRleHBvcnRzLlBMUElkQXR0cmlidXRlc0Zyb21KU09OID0gUExQSWRBdHRyaWJ1dGVzRnJvbUpTT047XG5cdGV4cG9ydHMuUExQSWRBdHRyaWJ1dGVzRnJvbUpTT05UeXBlZCA9IFBMUElkQXR0cmlidXRlc0Zyb21KU09OVHlwZWQ7XG5cdGV4cG9ydHMuUExQSWRBdHRyaWJ1dGVzVG9KU09OID0gUExQSWRBdHRyaWJ1dGVzVG9KU09OO1xuXHRleHBvcnRzLlBMUElkQXR0cmlidXRlc1RvSlNPTlR5cGVkID0gUExQSWRBdHRyaWJ1dGVzVG9KU09OVHlwZWQ7XG5cdC8qKlxuXHQqIENoZWNrIGlmIGEgZ2l2ZW4gb2JqZWN0IGltcGxlbWVudHMgdGhlIFBMUElkQXR0cmlidXRlcyBpbnRlcmZhY2UuXG5cdCovXG5cdGZ1bmN0aW9uIGluc3RhbmNlT2ZQTFBJZEF0dHJpYnV0ZXModmFsdWUpIHtcblx0XHRpZiAoIShcImlkXCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wiaWRcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdGZ1bmN0aW9uIFBMUElkQXR0cmlidXRlc0Zyb21KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gUExQSWRBdHRyaWJ1dGVzRnJvbUpTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gUExQSWRBdHRyaWJ1dGVzRnJvbUpTT05UeXBlZChqc29uLCBpZ25vcmVEaXNjcmltaW5hdG9yKSB7XG5cdFx0aWYgKGpzb24gPT0gbnVsbCkgcmV0dXJuIGpzb247XG5cdFx0cmV0dXJuIHsgXCJpZFwiOiBqc29uW1wiaWRcIl0gfTtcblx0fVxuXHRmdW5jdGlvbiBQTFBJZEF0dHJpYnV0ZXNUb0pTT04oanNvbikge1xuXHRcdHJldHVybiBQTFBJZEF0dHJpYnV0ZXNUb0pTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gUExQSWRBdHRyaWJ1dGVzVG9KU09OVHlwZWQodmFsdWUsIGlnbm9yZURpc2NyaW1pbmF0b3IgPSBmYWxzZSkge1xuXHRcdGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gdmFsdWU7XG5cdFx0cmV0dXJuIHsgXCJpZFwiOiB2YWx1ZVtcImlkXCJdIH07XG5cdH1cbn0pIH0pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiAuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL1BMUFVybEF0dHJpYnV0ZXMuanNcbnZhciByZXF1aXJlX1BMUFVybEF0dHJpYnV0ZXMgPSAvKiBAX19QVVJFX18gKi8gX19jb21tb25KUyh7IFwiLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9QTFBVcmxBdHRyaWJ1dGVzLmpzXCI6ICgoZXhwb3J0cykgPT4ge1xuXHQvKipcblx0KiBDb21tZXJjZVxuXHQqIE5vIGRlc2NyaXB0aW9uIHByb3ZpZGVkIChnZW5lcmF0ZWQgYnkgT3BlbmFwaSBHZW5lcmF0b3IgaHR0cHM6Ly9naXRodWIuY29tL29wZW5hcGl0b29scy9vcGVuYXBpLWdlbmVyYXRvcilcblx0KlxuXHQqIFRoZSB2ZXJzaW9uIG9mIHRoZSBPcGVuQVBJIGRvY3VtZW50OiAxLjEuMFxuXHQqXG5cdCpcblx0KiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IE9wZW5BUEkgR2VuZXJhdG9yIChodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2gpLlxuXHQqIGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaFxuXHQqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cblx0Ki9cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuXHRleHBvcnRzLmluc3RhbmNlT2ZQTFBVcmxBdHRyaWJ1dGVzID0gaW5zdGFuY2VPZlBMUFVybEF0dHJpYnV0ZXM7XG5cdGV4cG9ydHMuUExQVXJsQXR0cmlidXRlc0Zyb21KU09OID0gUExQVXJsQXR0cmlidXRlc0Zyb21KU09OO1xuXHRleHBvcnRzLlBMUFVybEF0dHJpYnV0ZXNGcm9tSlNPTlR5cGVkID0gUExQVXJsQXR0cmlidXRlc0Zyb21KU09OVHlwZWQ7XG5cdGV4cG9ydHMuUExQVXJsQXR0cmlidXRlc1RvSlNPTiA9IFBMUFVybEF0dHJpYnV0ZXNUb0pTT047XG5cdGV4cG9ydHMuUExQVXJsQXR0cmlidXRlc1RvSlNPTlR5cGVkID0gUExQVXJsQXR0cmlidXRlc1RvSlNPTlR5cGVkO1xuXHQvKipcblx0KiBDaGVjayBpZiBhIGdpdmVuIG9iamVjdCBpbXBsZW1lbnRzIHRoZSBQTFBVcmxBdHRyaWJ1dGVzIGludGVyZmFjZS5cblx0Ki9cblx0ZnVuY3Rpb24gaW5zdGFuY2VPZlBMUFVybEF0dHJpYnV0ZXModmFsdWUpIHtcblx0XHRpZiAoIShcInVybFwiIGluIHZhbHVlKSB8fCB2YWx1ZVtcInVybFwiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0ZnVuY3Rpb24gUExQVXJsQXR0cmlidXRlc0Zyb21KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gUExQVXJsQXR0cmlidXRlc0Zyb21KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIFBMUFVybEF0dHJpYnV0ZXNGcm9tSlNPTlR5cGVkKGpzb24sIGlnbm9yZURpc2NyaW1pbmF0b3IpIHtcblx0XHRpZiAoanNvbiA9PSBudWxsKSByZXR1cm4ganNvbjtcblx0XHRyZXR1cm4geyBcInVybFwiOiBqc29uW1widXJsXCJdIH07XG5cdH1cblx0ZnVuY3Rpb24gUExQVXJsQXR0cmlidXRlc1RvSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIFBMUFVybEF0dHJpYnV0ZXNUb0pTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gUExQVXJsQXR0cmlidXRlc1RvSlNPTlR5cGVkKHZhbHVlLCBpZ25vcmVEaXNjcmltaW5hdG9yID0gZmFsc2UpIHtcblx0XHRpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIHZhbHVlO1xuXHRcdHJldHVybiB7IFwidXJsXCI6IHZhbHVlW1widXJsXCJdIH07XG5cdH1cbn0pIH0pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiAuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL1BMUEF0dHJpYnV0ZXNBdHRyaWJ1dGVzLmpzXG52YXIgcmVxdWlyZV9QTFBBdHRyaWJ1dGVzQXR0cmlidXRlcyA9IC8qIEBfX1BVUkVfXyAqLyBfX2NvbW1vbkpTKHsgXCIuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL1BMUEF0dHJpYnV0ZXNBdHRyaWJ1dGVzLmpzXCI6ICgoZXhwb3J0cykgPT4ge1xuXHQvKipcblx0KiBDb21tZXJjZVxuXHQqIE5vIGRlc2NyaXB0aW9uIHByb3ZpZGVkIChnZW5lcmF0ZWQgYnkgT3BlbmFwaSBHZW5lcmF0b3IgaHR0cHM6Ly9naXRodWIuY29tL29wZW5hcGl0b29scy9vcGVuYXBpLWdlbmVyYXRvcilcblx0KlxuXHQqIFRoZSB2ZXJzaW9uIG9mIHRoZSBPcGVuQVBJIGRvY3VtZW50OiAxLjEuMFxuXHQqXG5cdCpcblx0KiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IE9wZW5BUEkgR2VuZXJhdG9yIChodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2gpLlxuXHQqIGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaFxuXHQqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cblx0Ki9cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuXHRleHBvcnRzLlBMUEF0dHJpYnV0ZXNBdHRyaWJ1dGVzRnJvbUpTT04gPSBQTFBBdHRyaWJ1dGVzQXR0cmlidXRlc0Zyb21KU09OO1xuXHRleHBvcnRzLlBMUEF0dHJpYnV0ZXNBdHRyaWJ1dGVzRnJvbUpTT05UeXBlZCA9IFBMUEF0dHJpYnV0ZXNBdHRyaWJ1dGVzRnJvbUpTT05UeXBlZDtcblx0ZXhwb3J0cy5QTFBBdHRyaWJ1dGVzQXR0cmlidXRlc1RvSlNPTiA9IFBMUEF0dHJpYnV0ZXNBdHRyaWJ1dGVzVG9KU09OO1xuXHRleHBvcnRzLlBMUEF0dHJpYnV0ZXNBdHRyaWJ1dGVzVG9KU09OVHlwZWQgPSBQTFBBdHRyaWJ1dGVzQXR0cmlidXRlc1RvSlNPTlR5cGVkO1xuXHRjb25zdCBQTFBJZEF0dHJpYnV0ZXNfMSA9IHJlcXVpcmVfUExQSWRBdHRyaWJ1dGVzKCk7XG5cdGNvbnN0IFBMUFVybEF0dHJpYnV0ZXNfMSA9IHJlcXVpcmVfUExQVXJsQXR0cmlidXRlcygpO1xuXHRmdW5jdGlvbiBQTFBBdHRyaWJ1dGVzQXR0cmlidXRlc0Zyb21KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gUExQQXR0cmlidXRlc0F0dHJpYnV0ZXNGcm9tSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBQTFBBdHRyaWJ1dGVzQXR0cmlidXRlc0Zyb21KU09OVHlwZWQoanNvbiwgaWdub3JlRGlzY3JpbWluYXRvcikge1xuXHRcdGlmIChqc29uID09IG51bGwpIHJldHVybiBqc29uO1xuXHRcdGlmICgoMCwgUExQSWRBdHRyaWJ1dGVzXzEuaW5zdGFuY2VPZlBMUElkQXR0cmlidXRlcykoanNvbikpIHJldHVybiAoMCwgUExQSWRBdHRyaWJ1dGVzXzEuUExQSWRBdHRyaWJ1dGVzRnJvbUpTT05UeXBlZCkoanNvbiwgdHJ1ZSk7XG5cdFx0aWYgKCgwLCBQTFBVcmxBdHRyaWJ1dGVzXzEuaW5zdGFuY2VPZlBMUFVybEF0dHJpYnV0ZXMpKGpzb24pKSByZXR1cm4gKDAsIFBMUFVybEF0dHJpYnV0ZXNfMS5QTFBVcmxBdHRyaWJ1dGVzRnJvbUpTT05UeXBlZCkoanNvbiwgdHJ1ZSk7XG5cdFx0cmV0dXJuIHt9O1xuXHR9XG5cdGZ1bmN0aW9uIFBMUEF0dHJpYnV0ZXNBdHRyaWJ1dGVzVG9KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gUExQQXR0cmlidXRlc0F0dHJpYnV0ZXNUb0pTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gUExQQXR0cmlidXRlc0F0dHJpYnV0ZXNUb0pTT05UeXBlZCh2YWx1ZSwgaWdub3JlRGlzY3JpbWluYXRvciA9IGZhbHNlKSB7XG5cdFx0aWYgKHZhbHVlID09IG51bGwpIHJldHVybiB2YWx1ZTtcblx0XHRpZiAoKDAsIFBMUElkQXR0cmlidXRlc18xLmluc3RhbmNlT2ZQTFBJZEF0dHJpYnV0ZXMpKHZhbHVlKSkgcmV0dXJuICgwLCBQTFBJZEF0dHJpYnV0ZXNfMS5QTFBJZEF0dHJpYnV0ZXNUb0pTT04pKHZhbHVlKTtcblx0XHRpZiAoKDAsIFBMUFVybEF0dHJpYnV0ZXNfMS5pbnN0YW5jZU9mUExQVXJsQXR0cmlidXRlcykodmFsdWUpKSByZXR1cm4gKDAsIFBMUFVybEF0dHJpYnV0ZXNfMS5QTFBVcmxBdHRyaWJ1dGVzVG9KU09OKSh2YWx1ZSk7XG5cdFx0cmV0dXJuIHt9O1xuXHR9XG59KSB9KTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9QTFBBdHRyaWJ1dGVzLmpzXG52YXIgcmVxdWlyZV9QTFBBdHRyaWJ1dGVzID0gLyogQF9fUFVSRV9fICovIF9fY29tbW9uSlMoeyBcIi4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvUExQQXR0cmlidXRlcy5qc1wiOiAoKGV4cG9ydHMpID0+IHtcblx0LyoqXG5cdCogQ29tbWVyY2Vcblx0KiBObyBkZXNjcmlwdGlvbiBwcm92aWRlZCAoZ2VuZXJhdGVkIGJ5IE9wZW5hcGkgR2VuZXJhdG9yIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuYXBpdG9vbHMvb3BlbmFwaS1nZW5lcmF0b3IpXG5cdCpcblx0KiBUaGUgdmVyc2lvbiBvZiB0aGUgT3BlbkFQSSBkb2N1bWVudDogMS4xLjBcblx0KlxuXHQqXG5cdCogTk9URTogVGhpcyBjbGFzcyBpcyBhdXRvIGdlbmVyYXRlZCBieSBPcGVuQVBJIEdlbmVyYXRvciAoaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoKS5cblx0KiBodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2hcblx0KiBEbyBub3QgZWRpdCB0aGUgY2xhc3MgbWFudWFsbHkuXG5cdCovXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcblx0ZXhwb3J0cy5pbnN0YW5jZU9mUExQQXR0cmlidXRlcyA9IGluc3RhbmNlT2ZQTFBBdHRyaWJ1dGVzO1xuXHRleHBvcnRzLlBMUEF0dHJpYnV0ZXNGcm9tSlNPTiA9IFBMUEF0dHJpYnV0ZXNGcm9tSlNPTjtcblx0ZXhwb3J0cy5QTFBBdHRyaWJ1dGVzRnJvbUpTT05UeXBlZCA9IFBMUEF0dHJpYnV0ZXNGcm9tSlNPTlR5cGVkO1xuXHRleHBvcnRzLlBMUEF0dHJpYnV0ZXNUb0pTT04gPSBQTFBBdHRyaWJ1dGVzVG9KU09OO1xuXHRleHBvcnRzLlBMUEF0dHJpYnV0ZXNUb0pTT05UeXBlZCA9IFBMUEF0dHJpYnV0ZXNUb0pTT05UeXBlZDtcblx0Y29uc3QgUExQQXR0cmlidXRlQ2F0ZWdvcnlfMSA9IHJlcXVpcmVfUExQQXR0cmlidXRlQ2F0ZWdvcnkoKTtcblx0Y29uc3QgUExQQXR0cmlidXRlc0F0dHJpYnV0ZXNfMSA9IHJlcXVpcmVfUExQQXR0cmlidXRlc0F0dHJpYnV0ZXMoKTtcblx0LyoqXG5cdCogQ2hlY2sgaWYgYSBnaXZlbiBvYmplY3QgaW1wbGVtZW50cyB0aGUgUExQQXR0cmlidXRlcyBpbnRlcmZhY2UuXG5cdCovXG5cdGZ1bmN0aW9uIGluc3RhbmNlT2ZQTFBBdHRyaWJ1dGVzKHZhbHVlKSB7XG5cdFx0aWYgKCEoXCJhdHRyaWJ1dGVzXCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wiYXR0cmlidXRlc1wiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0aWYgKCEoXCJjYXRlZ29yeVwiIGluIHZhbHVlKSB8fCB2YWx1ZVtcImNhdGVnb3J5XCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHRmdW5jdGlvbiBQTFBBdHRyaWJ1dGVzRnJvbUpTT04oanNvbikge1xuXHRcdHJldHVybiBQTFBBdHRyaWJ1dGVzRnJvbUpTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gUExQQXR0cmlidXRlc0Zyb21KU09OVHlwZWQoanNvbiwgaWdub3JlRGlzY3JpbWluYXRvcikge1xuXHRcdGlmIChqc29uID09IG51bGwpIHJldHVybiBqc29uO1xuXHRcdHJldHVybiB7XG5cdFx0XHRcImF0dHJpYnV0ZXNcIjogKDAsIFBMUEF0dHJpYnV0ZXNBdHRyaWJ1dGVzXzEuUExQQXR0cmlidXRlc0F0dHJpYnV0ZXNGcm9tSlNPTikoanNvbltcImF0dHJpYnV0ZXNcIl0pLFxuXHRcdFx0XCJjYXRlZ29yeVwiOiAoMCwgUExQQXR0cmlidXRlQ2F0ZWdvcnlfMS5QTFBBdHRyaWJ1dGVDYXRlZ29yeUZyb21KU09OKShqc29uW1wiY2F0ZWdvcnlcIl0pXG5cdFx0fTtcblx0fVxuXHRmdW5jdGlvbiBQTFBBdHRyaWJ1dGVzVG9KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gUExQQXR0cmlidXRlc1RvSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBQTFBBdHRyaWJ1dGVzVG9KU09OVHlwZWQodmFsdWUsIGlnbm9yZURpc2NyaW1pbmF0b3IgPSBmYWxzZSkge1xuXHRcdGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gdmFsdWU7XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwiYXR0cmlidXRlc1wiOiAoMCwgUExQQXR0cmlidXRlc0F0dHJpYnV0ZXNfMS5QTFBBdHRyaWJ1dGVzQXR0cmlidXRlc1RvSlNPTikodmFsdWVbXCJhdHRyaWJ1dGVzXCJdKSxcblx0XHRcdFwiY2F0ZWdvcnlcIjogKDAsIFBMUEF0dHJpYnV0ZUNhdGVnb3J5XzEuUExQQXR0cmlidXRlQ2F0ZWdvcnlUb0pTT04pKHZhbHVlW1wiY2F0ZWdvcnlcIl0pXG5cdFx0fTtcblx0fVxufSkgfSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIC4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvUGFnZVZpc2l0Q2F0ZWdvcnkuanNcbnZhciByZXF1aXJlX1BhZ2VWaXNpdENhdGVnb3J5ID0gLyogQF9fUFVSRV9fICovIF9fY29tbW9uSlMoeyBcIi4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvUGFnZVZpc2l0Q2F0ZWdvcnkuanNcIjogKChleHBvcnRzKSA9PiB7XG5cdC8qKlxuXHQqIENvbW1lcmNlXG5cdCogTm8gZGVzY3JpcHRpb24gcHJvdmlkZWQgKGdlbmVyYXRlZCBieSBPcGVuYXBpIEdlbmVyYXRvciBodHRwczovL2dpdGh1Yi5jb20vb3BlbmFwaXRvb2xzL29wZW5hcGktZ2VuZXJhdG9yKVxuXHQqXG5cdCogVGhlIHZlcnNpb24gb2YgdGhlIE9wZW5BUEkgZG9jdW1lbnQ6IDEuMS4wXG5cdCpcblx0KlxuXHQqIE5PVEU6IFRoaXMgY2xhc3MgaXMgYXV0byBnZW5lcmF0ZWQgYnkgT3BlbkFQSSBHZW5lcmF0b3IgKGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaCkuXG5cdCogaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoXG5cdCogRG8gbm90IGVkaXQgdGhlIGNsYXNzIG1hbnVhbGx5LlxuXHQqL1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5cdGV4cG9ydHMuUGFnZVZpc2l0Q2F0ZWdvcnkgPSB2b2lkIDA7XG5cdGV4cG9ydHMuaW5zdGFuY2VPZlBhZ2VWaXNpdENhdGVnb3J5ID0gaW5zdGFuY2VPZlBhZ2VWaXNpdENhdGVnb3J5O1xuXHRleHBvcnRzLlBhZ2VWaXNpdENhdGVnb3J5RnJvbUpTT04gPSBQYWdlVmlzaXRDYXRlZ29yeUZyb21KU09OO1xuXHRleHBvcnRzLlBhZ2VWaXNpdENhdGVnb3J5RnJvbUpTT05UeXBlZCA9IFBhZ2VWaXNpdENhdGVnb3J5RnJvbUpTT05UeXBlZDtcblx0ZXhwb3J0cy5QYWdlVmlzaXRDYXRlZ29yeVRvSlNPTiA9IFBhZ2VWaXNpdENhdGVnb3J5VG9KU09OO1xuXHRleHBvcnRzLlBhZ2VWaXNpdENhdGVnb3J5VG9KU09OVHlwZWQgPSBQYWdlVmlzaXRDYXRlZ29yeVRvSlNPTlR5cGVkO1xuXHQvKipcblx0KlxuXHQqIEBleHBvcnRcblx0KiBAZW51bSB7c3RyaW5nfVxuXHQqL1xuXHR2YXIgUGFnZVZpc2l0Q2F0ZWdvcnkkMTtcblx0KGZ1bmN0aW9uKFBhZ2VWaXNpdENhdGVnb3J5JDIpIHtcblx0XHRQYWdlVmlzaXRDYXRlZ29yeSQyW1wiSGVscFwiXSA9IFwiaGVscFwiO1xuXHRcdFBhZ2VWaXNpdENhdGVnb3J5JDJbXCJIb21lcGFnZVwiXSA9IFwiaG9tZXBhZ2VcIjtcblx0XHRQYWdlVmlzaXRDYXRlZ29yeSQyW1wiT3RoZXJcIl0gPSBcIm90aGVyXCI7XG5cdFx0UGFnZVZpc2l0Q2F0ZWdvcnkkMltcIlByb2R1Y3RMaWtlXCJdID0gXCJwcm9kdWN0X2xpa2VcIjtcblx0XHRQYWdlVmlzaXRDYXRlZ29yeSQyW1wiU2VhcmNoXCJdID0gXCJzZWFyY2hcIjtcblx0fSkoUGFnZVZpc2l0Q2F0ZWdvcnkkMSB8fCAoZXhwb3J0cy5QYWdlVmlzaXRDYXRlZ29yeSA9IFBhZ2VWaXNpdENhdGVnb3J5JDEgPSB7fSkpO1xuXHRmdW5jdGlvbiBpbnN0YW5jZU9mUGFnZVZpc2l0Q2F0ZWdvcnkodmFsdWUpIHtcblx0XHRmb3IgKGNvbnN0IGtleSBpbiBQYWdlVmlzaXRDYXRlZ29yeSQxKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFBhZ2VWaXNpdENhdGVnb3J5JDEsIGtleSkpIHtcblx0XHRcdGlmIChQYWdlVmlzaXRDYXRlZ29yeSQxW2tleV0gPT09IHZhbHVlKSByZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGZ1bmN0aW9uIFBhZ2VWaXNpdENhdGVnb3J5RnJvbUpTT04oanNvbikge1xuXHRcdHJldHVybiBQYWdlVmlzaXRDYXRlZ29yeUZyb21KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIFBhZ2VWaXNpdENhdGVnb3J5RnJvbUpTT05UeXBlZChqc29uLCBpZ25vcmVEaXNjcmltaW5hdG9yKSB7XG5cdFx0cmV0dXJuIGpzb247XG5cdH1cblx0ZnVuY3Rpb24gUGFnZVZpc2l0Q2F0ZWdvcnlUb0pTT04odmFsdWUpIHtcblx0XHRyZXR1cm4gdmFsdWU7XG5cdH1cblx0ZnVuY3Rpb24gUGFnZVZpc2l0Q2F0ZWdvcnlUb0pTT05UeXBlZCh2YWx1ZSwgaWdub3JlRGlzY3JpbWluYXRvcikge1xuXHRcdHJldHVybiB2YWx1ZTtcblx0fVxufSkgfSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIC4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvUGFnZVZpc2l0QXR0cmlidXRlcy5qc1xudmFyIHJlcXVpcmVfUGFnZVZpc2l0QXR0cmlidXRlcyA9IC8qIEBfX1BVUkVfXyAqLyBfX2NvbW1vbkpTKHsgXCIuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL1BhZ2VWaXNpdEF0dHJpYnV0ZXMuanNcIjogKChleHBvcnRzKSA9PiB7XG5cdC8qKlxuXHQqIENvbW1lcmNlXG5cdCogTm8gZGVzY3JpcHRpb24gcHJvdmlkZWQgKGdlbmVyYXRlZCBieSBPcGVuYXBpIEdlbmVyYXRvciBodHRwczovL2dpdGh1Yi5jb20vb3BlbmFwaXRvb2xzL29wZW5hcGktZ2VuZXJhdG9yKVxuXHQqXG5cdCogVGhlIHZlcnNpb24gb2YgdGhlIE9wZW5BUEkgZG9jdW1lbnQ6IDEuMS4wXG5cdCpcblx0KlxuXHQqIE5PVEU6IFRoaXMgY2xhc3MgaXMgYXV0byBnZW5lcmF0ZWQgYnkgT3BlbkFQSSBHZW5lcmF0b3IgKGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaCkuXG5cdCogaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoXG5cdCogRG8gbm90IGVkaXQgdGhlIGNsYXNzIG1hbnVhbGx5LlxuXHQqL1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5cdGV4cG9ydHMuaW5zdGFuY2VPZlBhZ2VWaXNpdEF0dHJpYnV0ZXMgPSBpbnN0YW5jZU9mUGFnZVZpc2l0QXR0cmlidXRlcztcblx0ZXhwb3J0cy5QYWdlVmlzaXRBdHRyaWJ1dGVzRnJvbUpTT04gPSBQYWdlVmlzaXRBdHRyaWJ1dGVzRnJvbUpTT047XG5cdGV4cG9ydHMuUGFnZVZpc2l0QXR0cmlidXRlc0Zyb21KU09OVHlwZWQgPSBQYWdlVmlzaXRBdHRyaWJ1dGVzRnJvbUpTT05UeXBlZDtcblx0ZXhwb3J0cy5QYWdlVmlzaXRBdHRyaWJ1dGVzVG9KU09OID0gUGFnZVZpc2l0QXR0cmlidXRlc1RvSlNPTjtcblx0ZXhwb3J0cy5QYWdlVmlzaXRBdHRyaWJ1dGVzVG9KU09OVHlwZWQgPSBQYWdlVmlzaXRBdHRyaWJ1dGVzVG9KU09OVHlwZWQ7XG5cdGNvbnN0IFBhZ2VWaXNpdENhdGVnb3J5XzEgPSByZXF1aXJlX1BhZ2VWaXNpdENhdGVnb3J5KCk7XG5cdC8qKlxuXHQqIENoZWNrIGlmIGEgZ2l2ZW4gb2JqZWN0IGltcGxlbWVudHMgdGhlIFBhZ2VWaXNpdEF0dHJpYnV0ZXMgaW50ZXJmYWNlLlxuXHQqL1xuXHRmdW5jdGlvbiBpbnN0YW5jZU9mUGFnZVZpc2l0QXR0cmlidXRlcyh2YWx1ZSkge1xuXHRcdGlmICghKFwicGFnZV92aXNpdF9jYXRlZ29yeVwiIGluIHZhbHVlKSB8fCB2YWx1ZVtcInBhZ2VfdmlzaXRfY2F0ZWdvcnlcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdGlmICghKFwidXJsXCIgaW4gdmFsdWUpIHx8IHZhbHVlW1widXJsXCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHRmdW5jdGlvbiBQYWdlVmlzaXRBdHRyaWJ1dGVzRnJvbUpTT04oanNvbikge1xuXHRcdHJldHVybiBQYWdlVmlzaXRBdHRyaWJ1dGVzRnJvbUpTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gUGFnZVZpc2l0QXR0cmlidXRlc0Zyb21KU09OVHlwZWQoanNvbiwgaWdub3JlRGlzY3JpbWluYXRvcikge1xuXHRcdGlmIChqc29uID09IG51bGwpIHJldHVybiBqc29uO1xuXHRcdHJldHVybiB7XG5cdFx0XHRcInBhZ2VfdmlzaXRfY2F0ZWdvcnlcIjogKDAsIFBhZ2VWaXNpdENhdGVnb3J5XzEuUGFnZVZpc2l0Q2F0ZWdvcnlGcm9tSlNPTikoanNvbltcInBhZ2VfdmlzaXRfY2F0ZWdvcnlcIl0pLFxuXHRcdFx0XCJ1cmxcIjoganNvbltcInVybFwiXVxuXHRcdH07XG5cdH1cblx0ZnVuY3Rpb24gUGFnZVZpc2l0QXR0cmlidXRlc1RvSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIFBhZ2VWaXNpdEF0dHJpYnV0ZXNUb0pTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gUGFnZVZpc2l0QXR0cmlidXRlc1RvSlNPTlR5cGVkKHZhbHVlLCBpZ25vcmVEaXNjcmltaW5hdG9yID0gZmFsc2UpIHtcblx0XHRpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIHZhbHVlO1xuXHRcdHJldHVybiB7XG5cdFx0XHRcInBhZ2VfdmlzaXRfY2F0ZWdvcnlcIjogKDAsIFBhZ2VWaXNpdENhdGVnb3J5XzEuUGFnZVZpc2l0Q2F0ZWdvcnlUb0pTT04pKHZhbHVlW1wicGFnZV92aXNpdF9jYXRlZ29yeVwiXSksXG5cdFx0XHRcInVybFwiOiB2YWx1ZVtcInVybFwiXVxuXHRcdH07XG5cdH1cbn0pIH0pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiAuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL1F1ZXJ5VHlwZWRBdHRyaWJ1dGVzLmpzXG52YXIgcmVxdWlyZV9RdWVyeVR5cGVkQXR0cmlidXRlcyA9IC8qIEBfX1BVUkVfXyAqLyBfX2NvbW1vbkpTKHsgXCIuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL1F1ZXJ5VHlwZWRBdHRyaWJ1dGVzLmpzXCI6ICgoZXhwb3J0cykgPT4ge1xuXHQvKipcblx0KiBDb21tZXJjZVxuXHQqIE5vIGRlc2NyaXB0aW9uIHByb3ZpZGVkIChnZW5lcmF0ZWQgYnkgT3BlbmFwaSBHZW5lcmF0b3IgaHR0cHM6Ly9naXRodWIuY29tL29wZW5hcGl0b29scy9vcGVuYXBpLWdlbmVyYXRvcilcblx0KlxuXHQqIFRoZSB2ZXJzaW9uIG9mIHRoZSBPcGVuQVBJIGRvY3VtZW50OiAxLjEuMFxuXHQqXG5cdCpcblx0KiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IE9wZW5BUEkgR2VuZXJhdG9yIChodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2gpLlxuXHQqIGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaFxuXHQqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cblx0Ki9cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuXHRleHBvcnRzLmluc3RhbmNlT2ZRdWVyeVR5cGVkQXR0cmlidXRlcyA9IGluc3RhbmNlT2ZRdWVyeVR5cGVkQXR0cmlidXRlcztcblx0ZXhwb3J0cy5RdWVyeVR5cGVkQXR0cmlidXRlc0Zyb21KU09OID0gUXVlcnlUeXBlZEF0dHJpYnV0ZXNGcm9tSlNPTjtcblx0ZXhwb3J0cy5RdWVyeVR5cGVkQXR0cmlidXRlc0Zyb21KU09OVHlwZWQgPSBRdWVyeVR5cGVkQXR0cmlidXRlc0Zyb21KU09OVHlwZWQ7XG5cdGV4cG9ydHMuUXVlcnlUeXBlZEF0dHJpYnV0ZXNUb0pTT04gPSBRdWVyeVR5cGVkQXR0cmlidXRlc1RvSlNPTjtcblx0ZXhwb3J0cy5RdWVyeVR5cGVkQXR0cmlidXRlc1RvSlNPTlR5cGVkID0gUXVlcnlUeXBlZEF0dHJpYnV0ZXNUb0pTT05UeXBlZDtcblx0LyoqXG5cdCogQ2hlY2sgaWYgYSBnaXZlbiBvYmplY3QgaW1wbGVtZW50cyB0aGUgUXVlcnlUeXBlZEF0dHJpYnV0ZXMgaW50ZXJmYWNlLlxuXHQqL1xuXHRmdW5jdGlvbiBpbnN0YW5jZU9mUXVlcnlUeXBlZEF0dHJpYnV0ZXModmFsdWUpIHtcblx0XHRpZiAoIShcInF1ZXJ5XCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wicXVlcnlcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdGZ1bmN0aW9uIFF1ZXJ5VHlwZWRBdHRyaWJ1dGVzRnJvbUpTT04oanNvbikge1xuXHRcdHJldHVybiBRdWVyeVR5cGVkQXR0cmlidXRlc0Zyb21KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIFF1ZXJ5VHlwZWRBdHRyaWJ1dGVzRnJvbUpTT05UeXBlZChqc29uLCBpZ25vcmVEaXNjcmltaW5hdG9yKSB7XG5cdFx0aWYgKGpzb24gPT0gbnVsbCkgcmV0dXJuIGpzb247XG5cdFx0cmV0dXJuIHsgXCJxdWVyeVwiOiBqc29uW1wicXVlcnlcIl0gfTtcblx0fVxuXHRmdW5jdGlvbiBRdWVyeVR5cGVkQXR0cmlidXRlc1RvSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIFF1ZXJ5VHlwZWRBdHRyaWJ1dGVzVG9KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIFF1ZXJ5VHlwZWRBdHRyaWJ1dGVzVG9KU09OVHlwZWQodmFsdWUsIGlnbm9yZURpc2NyaW1pbmF0b3IgPSBmYWxzZSkge1xuXHRcdGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gdmFsdWU7XG5cdFx0cmV0dXJuIHsgXCJxdWVyeVwiOiB2YWx1ZVtcInF1ZXJ5XCJdIH07XG5cdH1cbn0pIH0pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiAuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL1NlYXJjaEF0dHJpYnV0ZXMuanNcbnZhciByZXF1aXJlX1NlYXJjaEF0dHJpYnV0ZXMgPSAvKiBAX19QVVJFX18gKi8gX19jb21tb25KUyh7IFwiLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9TZWFyY2hBdHRyaWJ1dGVzLmpzXCI6ICgoZXhwb3J0cykgPT4ge1xuXHQvKipcblx0KiBDb21tZXJjZVxuXHQqIE5vIGRlc2NyaXB0aW9uIHByb3ZpZGVkIChnZW5lcmF0ZWQgYnkgT3BlbmFwaSBHZW5lcmF0b3IgaHR0cHM6Ly9naXRodWIuY29tL29wZW5hcGl0b29scy9vcGVuYXBpLWdlbmVyYXRvcilcblx0KlxuXHQqIFRoZSB2ZXJzaW9uIG9mIHRoZSBPcGVuQVBJIGRvY3VtZW50OiAxLjEuMFxuXHQqXG5cdCpcblx0KiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IE9wZW5BUEkgR2VuZXJhdG9yIChodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2gpLlxuXHQqIGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaFxuXHQqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cblx0Ki9cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuXHRleHBvcnRzLmluc3RhbmNlT2ZTZWFyY2hBdHRyaWJ1dGVzID0gaW5zdGFuY2VPZlNlYXJjaEF0dHJpYnV0ZXM7XG5cdGV4cG9ydHMuU2VhcmNoQXR0cmlidXRlc0Zyb21KU09OID0gU2VhcmNoQXR0cmlidXRlc0Zyb21KU09OO1xuXHRleHBvcnRzLlNlYXJjaEF0dHJpYnV0ZXNGcm9tSlNPTlR5cGVkID0gU2VhcmNoQXR0cmlidXRlc0Zyb21KU09OVHlwZWQ7XG5cdGV4cG9ydHMuU2VhcmNoQXR0cmlidXRlc1RvSlNPTiA9IFNlYXJjaEF0dHJpYnV0ZXNUb0pTT047XG5cdGV4cG9ydHMuU2VhcmNoQXR0cmlidXRlc1RvSlNPTlR5cGVkID0gU2VhcmNoQXR0cmlidXRlc1RvSlNPTlR5cGVkO1xuXHQvKipcblx0KiBDaGVjayBpZiBhIGdpdmVuIG9iamVjdCBpbXBsZW1lbnRzIHRoZSBTZWFyY2hBdHRyaWJ1dGVzIGludGVyZmFjZS5cblx0Ki9cblx0ZnVuY3Rpb24gaW5zdGFuY2VPZlNlYXJjaEF0dHJpYnV0ZXModmFsdWUpIHtcblx0XHRpZiAoIShcInNlYXJjaF90ZXJtXCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wic2VhcmNoX3Rlcm1cIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdGZ1bmN0aW9uIFNlYXJjaEF0dHJpYnV0ZXNGcm9tSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIFNlYXJjaEF0dHJpYnV0ZXNGcm9tSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBTZWFyY2hBdHRyaWJ1dGVzRnJvbUpTT05UeXBlZChqc29uLCBpZ25vcmVEaXNjcmltaW5hdG9yKSB7XG5cdFx0aWYgKGpzb24gPT0gbnVsbCkgcmV0dXJuIGpzb247XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwic2VhcmNoX3Rlcm1cIjoganNvbltcInNlYXJjaF90ZXJtXCJdLFxuXHRcdFx0XCJzZWxlY3RlZF9maWx0ZXJzXCI6IGpzb25bXCJzZWxlY3RlZF9maWx0ZXJzXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wic2VsZWN0ZWRfZmlsdGVyc1wiXVxuXHRcdH07XG5cdH1cblx0ZnVuY3Rpb24gU2VhcmNoQXR0cmlidXRlc1RvSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIFNlYXJjaEF0dHJpYnV0ZXNUb0pTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gU2VhcmNoQXR0cmlidXRlc1RvSlNPTlR5cGVkKHZhbHVlLCBpZ25vcmVEaXNjcmltaW5hdG9yID0gZmFsc2UpIHtcblx0XHRpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIHZhbHVlO1xuXHRcdHJldHVybiB7XG5cdFx0XHRcInNlYXJjaF90ZXJtXCI6IHZhbHVlW1wic2VhcmNoX3Rlcm1cIl0sXG5cdFx0XHRcInNlbGVjdGVkX2ZpbHRlcnNcIjogdmFsdWVbXCJzZWxlY3RlZF9maWx0ZXJzXCJdXG5cdFx0fTtcblx0fVxufSkgfSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIC4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvU3VnZ2VzdGlvbkNsaWNrZWRBdHRyaWJ1dGVzLmpzXG52YXIgcmVxdWlyZV9TdWdnZXN0aW9uQ2xpY2tlZEF0dHJpYnV0ZXMgPSAvKiBAX19QVVJFX18gKi8gX19jb21tb25KUyh7IFwiLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9TdWdnZXN0aW9uQ2xpY2tlZEF0dHJpYnV0ZXMuanNcIjogKChleHBvcnRzKSA9PiB7XG5cdC8qKlxuXHQqIENvbW1lcmNlXG5cdCogTm8gZGVzY3JpcHRpb24gcHJvdmlkZWQgKGdlbmVyYXRlZCBieSBPcGVuYXBpIEdlbmVyYXRvciBodHRwczovL2dpdGh1Yi5jb20vb3BlbmFwaXRvb2xzL29wZW5hcGktZ2VuZXJhdG9yKVxuXHQqXG5cdCogVGhlIHZlcnNpb24gb2YgdGhlIE9wZW5BUEkgZG9jdW1lbnQ6IDEuMS4wXG5cdCpcblx0KlxuXHQqIE5PVEU6IFRoaXMgY2xhc3MgaXMgYXV0byBnZW5lcmF0ZWQgYnkgT3BlbkFQSSBHZW5lcmF0b3IgKGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaCkuXG5cdCogaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoXG5cdCogRG8gbm90IGVkaXQgdGhlIGNsYXNzIG1hbnVhbGx5LlxuXHQqL1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5cdGV4cG9ydHMuaW5zdGFuY2VPZlN1Z2dlc3Rpb25DbGlja2VkQXR0cmlidXRlcyA9IGluc3RhbmNlT2ZTdWdnZXN0aW9uQ2xpY2tlZEF0dHJpYnV0ZXM7XG5cdGV4cG9ydHMuU3VnZ2VzdGlvbkNsaWNrZWRBdHRyaWJ1dGVzRnJvbUpTT04gPSBTdWdnZXN0aW9uQ2xpY2tlZEF0dHJpYnV0ZXNGcm9tSlNPTjtcblx0ZXhwb3J0cy5TdWdnZXN0aW9uQ2xpY2tlZEF0dHJpYnV0ZXNGcm9tSlNPTlR5cGVkID0gU3VnZ2VzdGlvbkNsaWNrZWRBdHRyaWJ1dGVzRnJvbUpTT05UeXBlZDtcblx0ZXhwb3J0cy5TdWdnZXN0aW9uQ2xpY2tlZEF0dHJpYnV0ZXNUb0pTT04gPSBTdWdnZXN0aW9uQ2xpY2tlZEF0dHJpYnV0ZXNUb0pTT047XG5cdGV4cG9ydHMuU3VnZ2VzdGlvbkNsaWNrZWRBdHRyaWJ1dGVzVG9KU09OVHlwZWQgPSBTdWdnZXN0aW9uQ2xpY2tlZEF0dHJpYnV0ZXNUb0pTT05UeXBlZDtcblx0LyoqXG5cdCogQ2hlY2sgaWYgYSBnaXZlbiBvYmplY3QgaW1wbGVtZW50cyB0aGUgU3VnZ2VzdGlvbkNsaWNrZWRBdHRyaWJ1dGVzIGludGVyZmFjZS5cblx0Ki9cblx0ZnVuY3Rpb24gaW5zdGFuY2VPZlN1Z2dlc3Rpb25DbGlja2VkQXR0cmlidXRlcyh2YWx1ZSkge1xuXHRcdGlmICghKFwic3VnZ2VzdGlvbl9pZFwiIGluIHZhbHVlKSB8fCB2YWx1ZVtcInN1Z2dlc3Rpb25faWRcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdGZ1bmN0aW9uIFN1Z2dlc3Rpb25DbGlja2VkQXR0cmlidXRlc0Zyb21KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gU3VnZ2VzdGlvbkNsaWNrZWRBdHRyaWJ1dGVzRnJvbUpTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gU3VnZ2VzdGlvbkNsaWNrZWRBdHRyaWJ1dGVzRnJvbUpTT05UeXBlZChqc29uLCBpZ25vcmVEaXNjcmltaW5hdG9yKSB7XG5cdFx0aWYgKGpzb24gPT0gbnVsbCkgcmV0dXJuIGpzb247XG5cdFx0cmV0dXJuIHsgXCJzdWdnZXN0aW9uX2lkXCI6IGpzb25bXCJzdWdnZXN0aW9uX2lkXCJdIH07XG5cdH1cblx0ZnVuY3Rpb24gU3VnZ2VzdGlvbkNsaWNrZWRBdHRyaWJ1dGVzVG9KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gU3VnZ2VzdGlvbkNsaWNrZWRBdHRyaWJ1dGVzVG9KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIFN1Z2dlc3Rpb25DbGlja2VkQXR0cmlidXRlc1RvSlNPTlR5cGVkKHZhbHVlLCBpZ25vcmVEaXNjcmltaW5hdG9yID0gZmFsc2UpIHtcblx0XHRpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIHZhbHVlO1xuXHRcdHJldHVybiB7IFwic3VnZ2VzdGlvbl9pZFwiOiB2YWx1ZVtcInN1Z2dlc3Rpb25faWRcIl0gfTtcblx0fVxufSkgfSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIC4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvVXNlckV2ZW50QXR0cmlidXRlcy5qc1xudmFyIHJlcXVpcmVfVXNlckV2ZW50QXR0cmlidXRlcyA9IC8qIEBfX1BVUkVfXyAqLyBfX2NvbW1vbkpTKHsgXCIuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL1VzZXJFdmVudEF0dHJpYnV0ZXMuanNcIjogKChleHBvcnRzKSA9PiB7XG5cdC8qKlxuXHQqIENvbW1lcmNlXG5cdCogTm8gZGVzY3JpcHRpb24gcHJvdmlkZWQgKGdlbmVyYXRlZCBieSBPcGVuYXBpIEdlbmVyYXRvciBodHRwczovL2dpdGh1Yi5jb20vb3BlbmFwaXRvb2xzL29wZW5hcGktZ2VuZXJhdG9yKVxuXHQqXG5cdCogVGhlIHZlcnNpb24gb2YgdGhlIE9wZW5BUEkgZG9jdW1lbnQ6IDEuMS4wXG5cdCpcblx0KlxuXHQqIE5PVEU6IFRoaXMgY2xhc3MgaXMgYXV0byBnZW5lcmF0ZWQgYnkgT3BlbkFQSSBHZW5lcmF0b3IgKGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaCkuXG5cdCogaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoXG5cdCogRG8gbm90IGVkaXQgdGhlIGNsYXNzIG1hbnVhbGx5LlxuXHQqL1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5cdGV4cG9ydHMuVXNlckV2ZW50QXR0cmlidXRlc0Zyb21KU09OID0gVXNlckV2ZW50QXR0cmlidXRlc0Zyb21KU09OO1xuXHRleHBvcnRzLlVzZXJFdmVudEF0dHJpYnV0ZXNGcm9tSlNPTlR5cGVkID0gVXNlckV2ZW50QXR0cmlidXRlc0Zyb21KU09OVHlwZWQ7XG5cdGV4cG9ydHMuVXNlckV2ZW50QXR0cmlidXRlc1RvSlNPTiA9IFVzZXJFdmVudEF0dHJpYnV0ZXNUb0pTT047XG5cdGV4cG9ydHMuVXNlckV2ZW50QXR0cmlidXRlc1RvSlNPTlR5cGVkID0gVXNlckV2ZW50QXR0cmlidXRlc1RvSlNPTlR5cGVkO1xuXHRjb25zdCBGb3JtU3VibWl0dGVkQXR0cmlidXRlc18xID0gcmVxdWlyZV9Gb3JtU3VibWl0dGVkQXR0cmlidXRlcygpO1xuXHRjb25zdCBQRFBBdHRyaWJ1dGVzXzEkMSA9IHJlcXVpcmVfUERQQXR0cmlidXRlcygpO1xuXHRjb25zdCBQTFBBdHRyaWJ1dGVzXzEkMSA9IHJlcXVpcmVfUExQQXR0cmlidXRlcygpO1xuXHRjb25zdCBQYWdlVmlzaXRBdHRyaWJ1dGVzXzEgPSByZXF1aXJlX1BhZ2VWaXNpdEF0dHJpYnV0ZXMoKTtcblx0Y29uc3QgUXVlcnlUeXBlZEF0dHJpYnV0ZXNfMSA9IHJlcXVpcmVfUXVlcnlUeXBlZEF0dHJpYnV0ZXMoKTtcblx0Y29uc3QgU2VhcmNoQXR0cmlidXRlc18xID0gcmVxdWlyZV9TZWFyY2hBdHRyaWJ1dGVzKCk7XG5cdGNvbnN0IFN1Z2dlc3Rpb25DbGlja2VkQXR0cmlidXRlc18xID0gcmVxdWlyZV9TdWdnZXN0aW9uQ2xpY2tlZEF0dHJpYnV0ZXMoKTtcblx0ZnVuY3Rpb24gVXNlckV2ZW50QXR0cmlidXRlc0Zyb21KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gVXNlckV2ZW50QXR0cmlidXRlc0Zyb21KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIFVzZXJFdmVudEF0dHJpYnV0ZXNGcm9tSlNPTlR5cGVkKGpzb24sIGlnbm9yZURpc2NyaW1pbmF0b3IpIHtcblx0XHRpZiAoanNvbiA9PSBudWxsKSByZXR1cm4ganNvbjtcblx0XHRpZiAoKDAsIEZvcm1TdWJtaXR0ZWRBdHRyaWJ1dGVzXzEuaW5zdGFuY2VPZkZvcm1TdWJtaXR0ZWRBdHRyaWJ1dGVzKShqc29uKSkgcmV0dXJuICgwLCBGb3JtU3VibWl0dGVkQXR0cmlidXRlc18xLkZvcm1TdWJtaXR0ZWRBdHRyaWJ1dGVzRnJvbUpTT05UeXBlZCkoanNvbiwgdHJ1ZSk7XG5cdFx0aWYgKCgwLCBQRFBBdHRyaWJ1dGVzXzEkMS5pbnN0YW5jZU9mUERQQXR0cmlidXRlcykoanNvbikpIHJldHVybiAoMCwgUERQQXR0cmlidXRlc18xJDEuUERQQXR0cmlidXRlc0Zyb21KU09OVHlwZWQpKGpzb24sIHRydWUpO1xuXHRcdGlmICgoMCwgUExQQXR0cmlidXRlc18xJDEuaW5zdGFuY2VPZlBMUEF0dHJpYnV0ZXMpKGpzb24pKSByZXR1cm4gKDAsIFBMUEF0dHJpYnV0ZXNfMSQxLlBMUEF0dHJpYnV0ZXNGcm9tSlNPTlR5cGVkKShqc29uLCB0cnVlKTtcblx0XHRpZiAoKDAsIFBhZ2VWaXNpdEF0dHJpYnV0ZXNfMS5pbnN0YW5jZU9mUGFnZVZpc2l0QXR0cmlidXRlcykoanNvbikpIHJldHVybiAoMCwgUGFnZVZpc2l0QXR0cmlidXRlc18xLlBhZ2VWaXNpdEF0dHJpYnV0ZXNGcm9tSlNPTlR5cGVkKShqc29uLCB0cnVlKTtcblx0XHRpZiAoKDAsIFF1ZXJ5VHlwZWRBdHRyaWJ1dGVzXzEuaW5zdGFuY2VPZlF1ZXJ5VHlwZWRBdHRyaWJ1dGVzKShqc29uKSkgcmV0dXJuICgwLCBRdWVyeVR5cGVkQXR0cmlidXRlc18xLlF1ZXJ5VHlwZWRBdHRyaWJ1dGVzRnJvbUpTT05UeXBlZCkoanNvbiwgdHJ1ZSk7XG5cdFx0aWYgKCgwLCBTZWFyY2hBdHRyaWJ1dGVzXzEuaW5zdGFuY2VPZlNlYXJjaEF0dHJpYnV0ZXMpKGpzb24pKSByZXR1cm4gKDAsIFNlYXJjaEF0dHJpYnV0ZXNfMS5TZWFyY2hBdHRyaWJ1dGVzRnJvbUpTT05UeXBlZCkoanNvbiwgdHJ1ZSk7XG5cdFx0aWYgKCgwLCBTdWdnZXN0aW9uQ2xpY2tlZEF0dHJpYnV0ZXNfMS5pbnN0YW5jZU9mU3VnZ2VzdGlvbkNsaWNrZWRBdHRyaWJ1dGVzKShqc29uKSkgcmV0dXJuICgwLCBTdWdnZXN0aW9uQ2xpY2tlZEF0dHJpYnV0ZXNfMS5TdWdnZXN0aW9uQ2xpY2tlZEF0dHJpYnV0ZXNGcm9tSlNPTlR5cGVkKShqc29uLCB0cnVlKTtcblx0XHRyZXR1cm4ge307XG5cdH1cblx0ZnVuY3Rpb24gVXNlckV2ZW50QXR0cmlidXRlc1RvSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIFVzZXJFdmVudEF0dHJpYnV0ZXNUb0pTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gVXNlckV2ZW50QXR0cmlidXRlc1RvSlNPTlR5cGVkKHZhbHVlLCBpZ25vcmVEaXNjcmltaW5hdG9yID0gZmFsc2UpIHtcblx0XHRpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIHZhbHVlO1xuXHRcdGlmICgoMCwgRm9ybVN1Ym1pdHRlZEF0dHJpYnV0ZXNfMS5pbnN0YW5jZU9mRm9ybVN1Ym1pdHRlZEF0dHJpYnV0ZXMpKHZhbHVlKSkgcmV0dXJuICgwLCBGb3JtU3VibWl0dGVkQXR0cmlidXRlc18xLkZvcm1TdWJtaXR0ZWRBdHRyaWJ1dGVzVG9KU09OKSh2YWx1ZSk7XG5cdFx0aWYgKCgwLCBQRFBBdHRyaWJ1dGVzXzEkMS5pbnN0YW5jZU9mUERQQXR0cmlidXRlcykodmFsdWUpKSByZXR1cm4gKDAsIFBEUEF0dHJpYnV0ZXNfMSQxLlBEUEF0dHJpYnV0ZXNUb0pTT04pKHZhbHVlKTtcblx0XHRpZiAoKDAsIFBMUEF0dHJpYnV0ZXNfMSQxLmluc3RhbmNlT2ZQTFBBdHRyaWJ1dGVzKSh2YWx1ZSkpIHJldHVybiAoMCwgUExQQXR0cmlidXRlc18xJDEuUExQQXR0cmlidXRlc1RvSlNPTikodmFsdWUpO1xuXHRcdGlmICgoMCwgUGFnZVZpc2l0QXR0cmlidXRlc18xLmluc3RhbmNlT2ZQYWdlVmlzaXRBdHRyaWJ1dGVzKSh2YWx1ZSkpIHJldHVybiAoMCwgUGFnZVZpc2l0QXR0cmlidXRlc18xLlBhZ2VWaXNpdEF0dHJpYnV0ZXNUb0pTT04pKHZhbHVlKTtcblx0XHRpZiAoKDAsIFF1ZXJ5VHlwZWRBdHRyaWJ1dGVzXzEuaW5zdGFuY2VPZlF1ZXJ5VHlwZWRBdHRyaWJ1dGVzKSh2YWx1ZSkpIHJldHVybiAoMCwgUXVlcnlUeXBlZEF0dHJpYnV0ZXNfMS5RdWVyeVR5cGVkQXR0cmlidXRlc1RvSlNPTikodmFsdWUpO1xuXHRcdGlmICgoMCwgU2VhcmNoQXR0cmlidXRlc18xLmluc3RhbmNlT2ZTZWFyY2hBdHRyaWJ1dGVzKSh2YWx1ZSkpIHJldHVybiAoMCwgU2VhcmNoQXR0cmlidXRlc18xLlNlYXJjaEF0dHJpYnV0ZXNUb0pTT04pKHZhbHVlKTtcblx0XHRpZiAoKDAsIFN1Z2dlc3Rpb25DbGlja2VkQXR0cmlidXRlc18xLmluc3RhbmNlT2ZTdWdnZXN0aW9uQ2xpY2tlZEF0dHJpYnV0ZXMpKHZhbHVlKSkgcmV0dXJuICgwLCBTdWdnZXN0aW9uQ2xpY2tlZEF0dHJpYnV0ZXNfMS5TdWdnZXN0aW9uQ2xpY2tlZEF0dHJpYnV0ZXNUb0pTT04pKHZhbHVlKTtcblx0XHRyZXR1cm4ge307XG5cdH1cbn0pIH0pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiAuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL1VzZXJFdmVudC5qc1xudmFyIHJlcXVpcmVfVXNlckV2ZW50ID0gLyogQF9fUFVSRV9fICovIF9fY29tbW9uSlMoeyBcIi4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvVXNlckV2ZW50LmpzXCI6ICgoZXhwb3J0cykgPT4ge1xuXHQvKipcblx0KiBDb21tZXJjZVxuXHQqIE5vIGRlc2NyaXB0aW9uIHByb3ZpZGVkIChnZW5lcmF0ZWQgYnkgT3BlbmFwaSBHZW5lcmF0b3IgaHR0cHM6Ly9naXRodWIuY29tL29wZW5hcGl0b29scy9vcGVuYXBpLWdlbmVyYXRvcilcblx0KlxuXHQqIFRoZSB2ZXJzaW9uIG9mIHRoZSBPcGVuQVBJIGRvY3VtZW50OiAxLjEuMFxuXHQqXG5cdCpcblx0KiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IE9wZW5BUEkgR2VuZXJhdG9yIChodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2gpLlxuXHQqIGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaFxuXHQqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cblx0Ki9cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuXHRleHBvcnRzLmluc3RhbmNlT2ZVc2VyRXZlbnQgPSBpbnN0YW5jZU9mVXNlckV2ZW50O1xuXHRleHBvcnRzLlVzZXJFdmVudEZyb21KU09OID0gVXNlckV2ZW50RnJvbUpTT047XG5cdGV4cG9ydHMuVXNlckV2ZW50RnJvbUpTT05UeXBlZCA9IFVzZXJFdmVudEZyb21KU09OVHlwZWQ7XG5cdGV4cG9ydHMuVXNlckV2ZW50VG9KU09OID0gVXNlckV2ZW50VG9KU09OO1xuXHRleHBvcnRzLlVzZXJFdmVudFRvSlNPTlR5cGVkID0gVXNlckV2ZW50VG9KU09OVHlwZWQ7XG5cdGNvbnN0IFVzZXJFdmVudENhdGVnb3J5XzEgPSByZXF1aXJlX1VzZXJFdmVudENhdGVnb3J5KCk7XG5cdGNvbnN0IFVzZXJFdmVudEF0dHJpYnV0ZXNfMSA9IHJlcXVpcmVfVXNlckV2ZW50QXR0cmlidXRlcygpO1xuXHQvKipcblx0KiBDaGVjayBpZiBhIGdpdmVuIG9iamVjdCBpbXBsZW1lbnRzIHRoZSBVc2VyRXZlbnQgaW50ZXJmYWNlLlxuXHQqL1xuXHRmdW5jdGlvbiBpbnN0YW5jZU9mVXNlckV2ZW50KHZhbHVlKSB7XG5cdFx0aWYgKCEoXCJjYXRlZ29yeVwiIGluIHZhbHVlKSB8fCB2YWx1ZVtcImNhdGVnb3J5XCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRpZiAoIShcImNyZWF0ZWRfYXRcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJjcmVhdGVkX2F0XCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRpZiAoIShcImV2ZW50X2lkXCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wiZXZlbnRfaWRcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdGZ1bmN0aW9uIFVzZXJFdmVudEZyb21KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gVXNlckV2ZW50RnJvbUpTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gVXNlckV2ZW50RnJvbUpTT05UeXBlZChqc29uLCBpZ25vcmVEaXNjcmltaW5hdG9yKSB7XG5cdFx0aWYgKGpzb24gPT0gbnVsbCkgcmV0dXJuIGpzb247XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwiYXR0cmlidXRlc1wiOiBqc29uW1wiYXR0cmlidXRlc1wiXSA9PSBudWxsID8gdm9pZCAwIDogKDAsIFVzZXJFdmVudEF0dHJpYnV0ZXNfMS5Vc2VyRXZlbnRBdHRyaWJ1dGVzRnJvbUpTT04pKGpzb25bXCJhdHRyaWJ1dGVzXCJdKSxcblx0XHRcdFwiY2F0ZWdvcnlcIjogKDAsIFVzZXJFdmVudENhdGVnb3J5XzEuVXNlckV2ZW50Q2F0ZWdvcnlGcm9tSlNPTikoanNvbltcImNhdGVnb3J5XCJdKSxcblx0XHRcdFwiY3JlYXRlZF9hdFwiOiBqc29uW1wiY3JlYXRlZF9hdFwiXSxcblx0XHRcdFwiZXZlbnRfaWRcIjoganNvbltcImV2ZW50X2lkXCJdXG5cdFx0fTtcblx0fVxuXHRmdW5jdGlvbiBVc2VyRXZlbnRUb0pTT04oanNvbikge1xuXHRcdHJldHVybiBVc2VyRXZlbnRUb0pTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gVXNlckV2ZW50VG9KU09OVHlwZWQodmFsdWUsIGlnbm9yZURpc2NyaW1pbmF0b3IgPSBmYWxzZSkge1xuXHRcdGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gdmFsdWU7XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwiYXR0cmlidXRlc1wiOiAoMCwgVXNlckV2ZW50QXR0cmlidXRlc18xLlVzZXJFdmVudEF0dHJpYnV0ZXNUb0pTT04pKHZhbHVlW1wiYXR0cmlidXRlc1wiXSksXG5cdFx0XHRcImNhdGVnb3J5XCI6ICgwLCBVc2VyRXZlbnRDYXRlZ29yeV8xLlVzZXJFdmVudENhdGVnb3J5VG9KU09OKSh2YWx1ZVtcImNhdGVnb3J5XCJdKSxcblx0XHRcdFwiY3JlYXRlZF9hdFwiOiB2YWx1ZVtcImNyZWF0ZWRfYXRcIl0sXG5cdFx0XHRcImV2ZW50X2lkXCI6IHZhbHVlW1wiZXZlbnRfaWRcIl1cblx0XHR9O1xuXHR9XG59KSB9KTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9OZXh0TWVzc2FnZVJlcXVlc3QuanNcbnZhciByZXF1aXJlX05leHRNZXNzYWdlUmVxdWVzdCA9IC8qIEBfX1BVUkVfXyAqLyBfX2NvbW1vbkpTKHsgXCIuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL05leHRNZXNzYWdlUmVxdWVzdC5qc1wiOiAoKGV4cG9ydHMpID0+IHtcblx0LyoqXG5cdCogQ29tbWVyY2Vcblx0KiBObyBkZXNjcmlwdGlvbiBwcm92aWRlZCAoZ2VuZXJhdGVkIGJ5IE9wZW5hcGkgR2VuZXJhdG9yIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuYXBpdG9vbHMvb3BlbmFwaS1nZW5lcmF0b3IpXG5cdCpcblx0KiBUaGUgdmVyc2lvbiBvZiB0aGUgT3BlbkFQSSBkb2N1bWVudDogMS4xLjBcblx0KlxuXHQqXG5cdCogTk9URTogVGhpcyBjbGFzcyBpcyBhdXRvIGdlbmVyYXRlZCBieSBPcGVuQVBJIEdlbmVyYXRvciAoaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoKS5cblx0KiBodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2hcblx0KiBEbyBub3QgZWRpdCB0aGUgY2xhc3MgbWFudWFsbHkuXG5cdCovXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcblx0ZXhwb3J0cy5pbnN0YW5jZU9mTmV4dE1lc3NhZ2VSZXF1ZXN0ID0gaW5zdGFuY2VPZk5leHRNZXNzYWdlUmVxdWVzdDtcblx0ZXhwb3J0cy5OZXh0TWVzc2FnZVJlcXVlc3RGcm9tSlNPTiA9IE5leHRNZXNzYWdlUmVxdWVzdEZyb21KU09OO1xuXHRleHBvcnRzLk5leHRNZXNzYWdlUmVxdWVzdEZyb21KU09OVHlwZWQgPSBOZXh0TWVzc2FnZVJlcXVlc3RGcm9tSlNPTlR5cGVkO1xuXHRleHBvcnRzLk5leHRNZXNzYWdlUmVxdWVzdFRvSlNPTiA9IE5leHRNZXNzYWdlUmVxdWVzdFRvSlNPTjtcblx0ZXhwb3J0cy5OZXh0TWVzc2FnZVJlcXVlc3RUb0pTT05UeXBlZCA9IE5leHRNZXNzYWdlUmVxdWVzdFRvSlNPTlR5cGVkO1xuXHRjb25zdCBDb250ZXh0XzEkMyA9IHJlcXVpcmVfQ29udGV4dCgpO1xuXHRjb25zdCBHZW5lcmF0aW9uUGFyYW1zXzEgPSByZXF1aXJlX0dlbmVyYXRpb25QYXJhbXMoKTtcblx0Y29uc3QgVXNlckV2ZW50XzEkMyA9IHJlcXVpcmVfVXNlckV2ZW50KCk7XG5cdC8qKlxuXHQqIENoZWNrIGlmIGEgZ2l2ZW4gb2JqZWN0IGltcGxlbWVudHMgdGhlIE5leHRNZXNzYWdlUmVxdWVzdCBpbnRlcmZhY2UuXG5cdCovXG5cdGZ1bmN0aW9uIGluc3RhbmNlT2ZOZXh0TWVzc2FnZVJlcXVlc3QodmFsdWUpIHtcblx0XHRpZiAoIShcImNvbnRleHRcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJjb250ZXh0XCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRpZiAoIShcImlkXCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wiaWRcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdGZ1bmN0aW9uIE5leHRNZXNzYWdlUmVxdWVzdEZyb21KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gTmV4dE1lc3NhZ2VSZXF1ZXN0RnJvbUpTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gTmV4dE1lc3NhZ2VSZXF1ZXN0RnJvbUpTT05UeXBlZChqc29uLCBpZ25vcmVEaXNjcmltaW5hdG9yKSB7XG5cdFx0aWYgKGpzb24gPT0gbnVsbCkgcmV0dXJuIGpzb247XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwiY29udGV4dFwiOiAoMCwgQ29udGV4dF8xJDMuQ29udGV4dEZyb21KU09OKShqc29uW1wiY29udGV4dFwiXSksXG5cdFx0XHRcImZlYXR1cmVfZmxhZ3NcIjoganNvbltcImZlYXR1cmVfZmxhZ3NcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IGpzb25bXCJmZWF0dXJlX2ZsYWdzXCJdLFxuXHRcdFx0XCJnZW5lcmF0aW9uX3BhcmFtc1wiOiBqc29uW1wiZ2VuZXJhdGlvbl9wYXJhbXNcIl0gPT0gbnVsbCA/IHZvaWQgMCA6ICgwLCBHZW5lcmF0aW9uUGFyYW1zXzEuR2VuZXJhdGlvblBhcmFtc0Zyb21KU09OKShqc29uW1wiZ2VuZXJhdGlvbl9wYXJhbXNcIl0pLFxuXHRcdFx0XCJpZFwiOiBqc29uW1wiaWRcIl0sXG5cdFx0XHRcIm9yZ19iYXNlX2NvbmZpZ192ZXJzaW9uXCI6IGpzb25bXCJvcmdfYmFzZV9jb25maWdfdmVyc2lvblwiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcIm9yZ19iYXNlX2NvbmZpZ192ZXJzaW9uXCJdLFxuXHRcdFx0XCJ1c2VyX2V2ZW50c1wiOiBqc29uW1widXNlcl9ldmVudHNcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IGpzb25bXCJ1c2VyX2V2ZW50c1wiXS5tYXAoVXNlckV2ZW50XzEkMy5Vc2VyRXZlbnRGcm9tSlNPTilcblx0XHR9O1xuXHR9XG5cdGZ1bmN0aW9uIE5leHRNZXNzYWdlUmVxdWVzdFRvSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIE5leHRNZXNzYWdlUmVxdWVzdFRvSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBOZXh0TWVzc2FnZVJlcXVlc3RUb0pTT05UeXBlZCh2YWx1ZSwgaWdub3JlRGlzY3JpbWluYXRvciA9IGZhbHNlKSB7XG5cdFx0aWYgKHZhbHVlID09IG51bGwpIHJldHVybiB2YWx1ZTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0XCJjb250ZXh0XCI6ICgwLCBDb250ZXh0XzEkMy5Db250ZXh0VG9KU09OKSh2YWx1ZVtcImNvbnRleHRcIl0pLFxuXHRcdFx0XCJmZWF0dXJlX2ZsYWdzXCI6IHZhbHVlW1wiZmVhdHVyZV9mbGFnc1wiXSxcblx0XHRcdFwiZ2VuZXJhdGlvbl9wYXJhbXNcIjogKDAsIEdlbmVyYXRpb25QYXJhbXNfMS5HZW5lcmF0aW9uUGFyYW1zVG9KU09OKSh2YWx1ZVtcImdlbmVyYXRpb25fcGFyYW1zXCJdKSxcblx0XHRcdFwiaWRcIjogdmFsdWVbXCJpZFwiXSxcblx0XHRcdFwib3JnX2Jhc2VfY29uZmlnX3ZlcnNpb25cIjogdmFsdWVbXCJvcmdfYmFzZV9jb25maWdfdmVyc2lvblwiXSxcblx0XHRcdFwidXNlcl9ldmVudHNcIjogdmFsdWVbXCJ1c2VyX2V2ZW50c1wiXSA9PSBudWxsID8gdm9pZCAwIDogdmFsdWVbXCJ1c2VyX2V2ZW50c1wiXS5tYXAoVXNlckV2ZW50XzEkMy5Vc2VyRXZlbnRUb0pTT04pXG5cdFx0fTtcblx0fVxufSkgfSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIC4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvT3JkZXJJdGVtSW5mby5qc1xudmFyIHJlcXVpcmVfT3JkZXJJdGVtSW5mbyA9IC8qIEBfX1BVUkVfXyAqLyBfX2NvbW1vbkpTKHsgXCIuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL09yZGVySXRlbUluZm8uanNcIjogKChleHBvcnRzKSA9PiB7XG5cdC8qKlxuXHQqIENvbW1lcmNlXG5cdCogTm8gZGVzY3JpcHRpb24gcHJvdmlkZWQgKGdlbmVyYXRlZCBieSBPcGVuYXBpIEdlbmVyYXRvciBodHRwczovL2dpdGh1Yi5jb20vb3BlbmFwaXRvb2xzL29wZW5hcGktZ2VuZXJhdG9yKVxuXHQqXG5cdCogVGhlIHZlcnNpb24gb2YgdGhlIE9wZW5BUEkgZG9jdW1lbnQ6IDEuMS4wXG5cdCpcblx0KlxuXHQqIE5PVEU6IFRoaXMgY2xhc3MgaXMgYXV0byBnZW5lcmF0ZWQgYnkgT3BlbkFQSSBHZW5lcmF0b3IgKGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaCkuXG5cdCogaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoXG5cdCogRG8gbm90IGVkaXQgdGhlIGNsYXNzIG1hbnVhbGx5LlxuXHQqL1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5cdGV4cG9ydHMuaW5zdGFuY2VPZk9yZGVySXRlbUluZm8gPSBpbnN0YW5jZU9mT3JkZXJJdGVtSW5mbztcblx0ZXhwb3J0cy5PcmRlckl0ZW1JbmZvRnJvbUpTT04gPSBPcmRlckl0ZW1JbmZvRnJvbUpTT047XG5cdGV4cG9ydHMuT3JkZXJJdGVtSW5mb0Zyb21KU09OVHlwZWQgPSBPcmRlckl0ZW1JbmZvRnJvbUpTT05UeXBlZDtcblx0ZXhwb3J0cy5PcmRlckl0ZW1JbmZvVG9KU09OID0gT3JkZXJJdGVtSW5mb1RvSlNPTjtcblx0ZXhwb3J0cy5PcmRlckl0ZW1JbmZvVG9KU09OVHlwZWQgPSBPcmRlckl0ZW1JbmZvVG9KU09OVHlwZWQ7XG5cdC8qKlxuXHQqIENoZWNrIGlmIGEgZ2l2ZW4gb2JqZWN0IGltcGxlbWVudHMgdGhlIE9yZGVySXRlbUluZm8gaW50ZXJmYWNlLlxuXHQqL1xuXHRmdW5jdGlvbiBpbnN0YW5jZU9mT3JkZXJJdGVtSW5mbyh2YWx1ZSkge1xuXHRcdGlmICghKFwiaXRlbV9wcmljZVwiIGluIHZhbHVlKSB8fCB2YWx1ZVtcIml0ZW1fcHJpY2VcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdGlmICghKFwiaXRlbV9xdWFudGl0eVwiIGluIHZhbHVlKSB8fCB2YWx1ZVtcIml0ZW1fcXVhbnRpdHlcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdGlmICghKFwiaXRlbV90aXRsZVwiIGluIHZhbHVlKSB8fCB2YWx1ZVtcIml0ZW1fdGl0bGVcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdGlmICghKFwib3JkZXJfaXRlbV9pZFwiIGluIHZhbHVlKSB8fCB2YWx1ZVtcIm9yZGVyX2l0ZW1faWRcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdGZ1bmN0aW9uIE9yZGVySXRlbUluZm9Gcm9tSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIE9yZGVySXRlbUluZm9Gcm9tSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBPcmRlckl0ZW1JbmZvRnJvbUpTT05UeXBlZChqc29uLCBpZ25vcmVEaXNjcmltaW5hdG9yKSB7XG5cdFx0aWYgKGpzb24gPT0gbnVsbCkgcmV0dXJuIGpzb247XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwiZGVsaXZlcmVkX2F0XCI6IGpzb25bXCJkZWxpdmVyZWRfYXRcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IG5ldyBEYXRlKGpzb25bXCJkZWxpdmVyZWRfYXRcIl0pLFxuXHRcdFx0XCJlc3RpbWF0ZWRfZGVsaXZlcnlfYXRcIjoganNvbltcImVzdGltYXRlZF9kZWxpdmVyeV9hdFwiXSA9PSBudWxsID8gdm9pZCAwIDogbmV3IERhdGUoanNvbltcImVzdGltYXRlZF9kZWxpdmVyeV9hdFwiXSksXG5cdFx0XHRcImZ1bGZpbGxtZW50X2Rpc3BsYXlfc3RhdHVzXCI6IGpzb25bXCJmdWxmaWxsbWVudF9kaXNwbGF5X3N0YXR1c1wiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcImZ1bGZpbGxtZW50X2Rpc3BsYXlfc3RhdHVzXCJdLFxuXHRcdFx0XCJpbWFnZVwiOiBqc29uW1wiaW1hZ2VcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IGpzb25bXCJpbWFnZVwiXSxcblx0XHRcdFwiaW5fdHJhbnNpdF9hdFwiOiBqc29uW1wiaW5fdHJhbnNpdF9hdFwiXSA9PSBudWxsID8gdm9pZCAwIDogbmV3IERhdGUoanNvbltcImluX3RyYW5zaXRfYXRcIl0pLFxuXHRcdFx0XCJpdGVtX3ByaWNlXCI6IGpzb25bXCJpdGVtX3ByaWNlXCJdLFxuXHRcdFx0XCJpdGVtX3F1YW50aXR5XCI6IGpzb25bXCJpdGVtX3F1YW50aXR5XCJdLFxuXHRcdFx0XCJpdGVtX3RpdGxlXCI6IGpzb25bXCJpdGVtX3RpdGxlXCJdLFxuXHRcdFx0XCJvcmRlcl9pdGVtX2lkXCI6IGpzb25bXCJvcmRlcl9pdGVtX2lkXCJdLFxuXHRcdFx0XCJ0cmFja2luZ191cmxcIjoganNvbltcInRyYWNraW5nX3VybFwiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcInRyYWNraW5nX3VybFwiXVxuXHRcdH07XG5cdH1cblx0ZnVuY3Rpb24gT3JkZXJJdGVtSW5mb1RvSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIE9yZGVySXRlbUluZm9Ub0pTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gT3JkZXJJdGVtSW5mb1RvSlNPTlR5cGVkKHZhbHVlLCBpZ25vcmVEaXNjcmltaW5hdG9yID0gZmFsc2UpIHtcblx0XHRpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIHZhbHVlO1xuXHRcdHJldHVybiB7XG5cdFx0XHRcImRlbGl2ZXJlZF9hdFwiOiB2YWx1ZVtcImRlbGl2ZXJlZF9hdFwiXSA9PSBudWxsID8gdm9pZCAwIDogdmFsdWVbXCJkZWxpdmVyZWRfYXRcIl0udG9JU09TdHJpbmcoKSxcblx0XHRcdFwiZXN0aW1hdGVkX2RlbGl2ZXJ5X2F0XCI6IHZhbHVlW1wiZXN0aW1hdGVkX2RlbGl2ZXJ5X2F0XCJdID09IG51bGwgPyB2b2lkIDAgOiB2YWx1ZVtcImVzdGltYXRlZF9kZWxpdmVyeV9hdFwiXS50b0lTT1N0cmluZygpLFxuXHRcdFx0XCJmdWxmaWxsbWVudF9kaXNwbGF5X3N0YXR1c1wiOiB2YWx1ZVtcImZ1bGZpbGxtZW50X2Rpc3BsYXlfc3RhdHVzXCJdLFxuXHRcdFx0XCJpbWFnZVwiOiB2YWx1ZVtcImltYWdlXCJdLFxuXHRcdFx0XCJpbl90cmFuc2l0X2F0XCI6IHZhbHVlW1wiaW5fdHJhbnNpdF9hdFwiXSA9PSBudWxsID8gdm9pZCAwIDogdmFsdWVbXCJpbl90cmFuc2l0X2F0XCJdLnRvSVNPU3RyaW5nKCksXG5cdFx0XHRcIml0ZW1fcHJpY2VcIjogdmFsdWVbXCJpdGVtX3ByaWNlXCJdLFxuXHRcdFx0XCJpdGVtX3F1YW50aXR5XCI6IHZhbHVlW1wiaXRlbV9xdWFudGl0eVwiXSxcblx0XHRcdFwiaXRlbV90aXRsZVwiOiB2YWx1ZVtcIml0ZW1fdGl0bGVcIl0sXG5cdFx0XHRcIm9yZGVyX2l0ZW1faWRcIjogdmFsdWVbXCJvcmRlcl9pdGVtX2lkXCJdLFxuXHRcdFx0XCJ0cmFja2luZ191cmxcIjogdmFsdWVbXCJ0cmFja2luZ191cmxcIl1cblx0XHR9O1xuXHR9XG59KSB9KTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9PcmRlclJlc3BvbnNlQXR0cmlidXRlcy5qc1xudmFyIHJlcXVpcmVfT3JkZXJSZXNwb25zZUF0dHJpYnV0ZXMgPSAvKiBAX19QVVJFX18gKi8gX19jb21tb25KUyh7IFwiLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9PcmRlclJlc3BvbnNlQXR0cmlidXRlcy5qc1wiOiAoKGV4cG9ydHMpID0+IHtcblx0LyoqXG5cdCogQ29tbWVyY2Vcblx0KiBObyBkZXNjcmlwdGlvbiBwcm92aWRlZCAoZ2VuZXJhdGVkIGJ5IE9wZW5hcGkgR2VuZXJhdG9yIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuYXBpdG9vbHMvb3BlbmFwaS1nZW5lcmF0b3IpXG5cdCpcblx0KiBUaGUgdmVyc2lvbiBvZiB0aGUgT3BlbkFQSSBkb2N1bWVudDogMS4xLjBcblx0KlxuXHQqXG5cdCogTk9URTogVGhpcyBjbGFzcyBpcyBhdXRvIGdlbmVyYXRlZCBieSBPcGVuQVBJIEdlbmVyYXRvciAoaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoKS5cblx0KiBodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2hcblx0KiBEbyBub3QgZWRpdCB0aGUgY2xhc3MgbWFudWFsbHkuXG5cdCovXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcblx0ZXhwb3J0cy5pbnN0YW5jZU9mT3JkZXJSZXNwb25zZUF0dHJpYnV0ZXMgPSBpbnN0YW5jZU9mT3JkZXJSZXNwb25zZUF0dHJpYnV0ZXM7XG5cdGV4cG9ydHMuT3JkZXJSZXNwb25zZUF0dHJpYnV0ZXNGcm9tSlNPTiA9IE9yZGVyUmVzcG9uc2VBdHRyaWJ1dGVzRnJvbUpTT047XG5cdGV4cG9ydHMuT3JkZXJSZXNwb25zZUF0dHJpYnV0ZXNGcm9tSlNPTlR5cGVkID0gT3JkZXJSZXNwb25zZUF0dHJpYnV0ZXNGcm9tSlNPTlR5cGVkO1xuXHRleHBvcnRzLk9yZGVyUmVzcG9uc2VBdHRyaWJ1dGVzVG9KU09OID0gT3JkZXJSZXNwb25zZUF0dHJpYnV0ZXNUb0pTT047XG5cdGV4cG9ydHMuT3JkZXJSZXNwb25zZUF0dHJpYnV0ZXNUb0pTT05UeXBlZCA9IE9yZGVyUmVzcG9uc2VBdHRyaWJ1dGVzVG9KU09OVHlwZWQ7XG5cdGNvbnN0IE9yZGVySXRlbUluZm9fMSA9IHJlcXVpcmVfT3JkZXJJdGVtSW5mbygpO1xuXHQvKipcblx0KiBDaGVjayBpZiBhIGdpdmVuIG9iamVjdCBpbXBsZW1lbnRzIHRoZSBPcmRlclJlc3BvbnNlQXR0cmlidXRlcyBpbnRlcmZhY2UuXG5cdCovXG5cdGZ1bmN0aW9uIGluc3RhbmNlT2ZPcmRlclJlc3BvbnNlQXR0cmlidXRlcyh2YWx1ZSkge1xuXHRcdGlmICghKFwiY3JlYXRlZF9hdFwiIGluIHZhbHVlKSB8fCB2YWx1ZVtcImNyZWF0ZWRfYXRcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdGlmICghKFwibGF0ZXN0X2V2ZW50X2RhdGVcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJsYXRlc3RfZXZlbnRfZGF0ZVwiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0aWYgKCEoXCJsaW5lX2l0ZW1zXCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wibGluZV9pdGVtc1wiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0aWYgKCEoXCJvcmRlcl9pZFwiIGluIHZhbHVlKSB8fCB2YWx1ZVtcIm9yZGVyX2lkXCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRpZiAoIShcIm9yZGVyX251bWJlclwiIGluIHZhbHVlKSB8fCB2YWx1ZVtcIm9yZGVyX251bWJlclwiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0ZnVuY3Rpb24gT3JkZXJSZXNwb25zZUF0dHJpYnV0ZXNGcm9tSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIE9yZGVyUmVzcG9uc2VBdHRyaWJ1dGVzRnJvbUpTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gT3JkZXJSZXNwb25zZUF0dHJpYnV0ZXNGcm9tSlNPTlR5cGVkKGpzb24sIGlnbm9yZURpc2NyaW1pbmF0b3IpIHtcblx0XHRpZiAoanNvbiA9PSBudWxsKSByZXR1cm4ganNvbjtcblx0XHRyZXR1cm4ge1xuXHRcdFx0XCJjcmVhdGVkX2F0XCI6IG5ldyBEYXRlKGpzb25bXCJjcmVhdGVkX2F0XCJdKSxcblx0XHRcdFwibGF0ZXN0X2V2ZW50X2RhdGVcIjogbmV3IERhdGUoanNvbltcImxhdGVzdF9ldmVudF9kYXRlXCJdKSxcblx0XHRcdFwibGluZV9pdGVtc1wiOiBqc29uW1wibGluZV9pdGVtc1wiXS5tYXAoT3JkZXJJdGVtSW5mb18xLk9yZGVySXRlbUluZm9Gcm9tSlNPTiksXG5cdFx0XHRcIm9yZGVyX2lkXCI6IGpzb25bXCJvcmRlcl9pZFwiXSxcblx0XHRcdFwib3JkZXJfbnVtYmVyXCI6IGpzb25bXCJvcmRlcl9udW1iZXJcIl1cblx0XHR9O1xuXHR9XG5cdGZ1bmN0aW9uIE9yZGVyUmVzcG9uc2VBdHRyaWJ1dGVzVG9KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gT3JkZXJSZXNwb25zZUF0dHJpYnV0ZXNUb0pTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gT3JkZXJSZXNwb25zZUF0dHJpYnV0ZXNUb0pTT05UeXBlZCh2YWx1ZSwgaWdub3JlRGlzY3JpbWluYXRvciA9IGZhbHNlKSB7XG5cdFx0aWYgKHZhbHVlID09IG51bGwpIHJldHVybiB2YWx1ZTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0XCJjcmVhdGVkX2F0XCI6IHZhbHVlW1wiY3JlYXRlZF9hdFwiXS50b0lTT1N0cmluZygpLFxuXHRcdFx0XCJsYXRlc3RfZXZlbnRfZGF0ZVwiOiB2YWx1ZVtcImxhdGVzdF9ldmVudF9kYXRlXCJdLnRvSVNPU3RyaW5nKCksXG5cdFx0XHRcImxpbmVfaXRlbXNcIjogdmFsdWVbXCJsaW5lX2l0ZW1zXCJdLm1hcChPcmRlckl0ZW1JbmZvXzEuT3JkZXJJdGVtSW5mb1RvSlNPTiksXG5cdFx0XHRcIm9yZGVyX2lkXCI6IHZhbHVlW1wib3JkZXJfaWRcIl0sXG5cdFx0XHRcIm9yZGVyX251bWJlclwiOiB2YWx1ZVtcIm9yZGVyX251bWJlclwiXVxuXHRcdH07XG5cdH1cbn0pIH0pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiAuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL09yZ2FuaXphdGlvbi5qc1xudmFyIHJlcXVpcmVfT3JnYW5pemF0aW9uID0gLyogQF9fUFVSRV9fICovIF9fY29tbW9uSlMoeyBcIi4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvT3JnYW5pemF0aW9uLmpzXCI6ICgoZXhwb3J0cykgPT4ge1xuXHQvKipcblx0KiBDb21tZXJjZVxuXHQqIE5vIGRlc2NyaXB0aW9uIHByb3ZpZGVkIChnZW5lcmF0ZWQgYnkgT3BlbmFwaSBHZW5lcmF0b3IgaHR0cHM6Ly9naXRodWIuY29tL29wZW5hcGl0b29scy9vcGVuYXBpLWdlbmVyYXRvcilcblx0KlxuXHQqIFRoZSB2ZXJzaW9uIG9mIHRoZSBPcGVuQVBJIGRvY3VtZW50OiAxLjEuMFxuXHQqXG5cdCpcblx0KiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IE9wZW5BUEkgR2VuZXJhdG9yIChodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2gpLlxuXHQqIGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaFxuXHQqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cblx0Ki9cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuXHRleHBvcnRzLk9yZ2FuaXphdGlvblN0YXR1c0VudW0gPSB2b2lkIDA7XG5cdGV4cG9ydHMuaW5zdGFuY2VPZk9yZ2FuaXphdGlvbiA9IGluc3RhbmNlT2ZPcmdhbml6YXRpb247XG5cdGV4cG9ydHMuT3JnYW5pemF0aW9uRnJvbUpTT04gPSBPcmdhbml6YXRpb25Gcm9tSlNPTjtcblx0ZXhwb3J0cy5Pcmdhbml6YXRpb25Gcm9tSlNPTlR5cGVkID0gT3JnYW5pemF0aW9uRnJvbUpTT05UeXBlZDtcblx0ZXhwb3J0cy5Pcmdhbml6YXRpb25Ub0pTT04gPSBPcmdhbml6YXRpb25Ub0pTT047XG5cdGV4cG9ydHMuT3JnYW5pemF0aW9uVG9KU09OVHlwZWQgPSBPcmdhbml6YXRpb25Ub0pTT05UeXBlZDtcblx0LyoqXG5cdCogQGV4cG9ydFxuXHQqIEBlbnVtIHtzdHJpbmd9XG5cdCovXG5cdHZhciBPcmdhbml6YXRpb25TdGF0dXNFbnVtO1xuXHQoZnVuY3Rpb24oT3JnYW5pemF0aW9uU3RhdHVzRW51bSQxKSB7XG5cdFx0T3JnYW5pemF0aW9uU3RhdHVzRW51bSQxW1wiQWN0aXZlXCJdID0gXCJhY3RpdmVcIjtcblx0XHRPcmdhbml6YXRpb25TdGF0dXNFbnVtJDFbXCJJbmFjdGl2ZVwiXSA9IFwiaW5hY3RpdmVcIjtcblx0fSkoT3JnYW5pemF0aW9uU3RhdHVzRW51bSB8fCAoZXhwb3J0cy5Pcmdhbml6YXRpb25TdGF0dXNFbnVtID0gT3JnYW5pemF0aW9uU3RhdHVzRW51bSA9IHt9KSk7XG5cdC8qKlxuXHQqIENoZWNrIGlmIGEgZ2l2ZW4gb2JqZWN0IGltcGxlbWVudHMgdGhlIE9yZ2FuaXphdGlvbiBpbnRlcmZhY2UuXG5cdCovXG5cdGZ1bmN0aW9uIGluc3RhbmNlT2ZPcmdhbml6YXRpb24odmFsdWUpIHtcblx0XHRpZiAoIShcImRpc3BsYXlfbmFtZVwiIGluIHZhbHVlKSB8fCB2YWx1ZVtcImRpc3BsYXlfbmFtZVwiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0aWYgKCEoXCJkb21haW5cIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJkb21haW5cIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdGlmICghKFwiaWRcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJpZFwiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0aWYgKCEoXCJzaG9ydF9uYW1lXCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wic2hvcnRfbmFtZVwiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0aWYgKCEoXCJzdGF0dXNcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJzdGF0dXNcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdGZ1bmN0aW9uIE9yZ2FuaXphdGlvbkZyb21KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gT3JnYW5pemF0aW9uRnJvbUpTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gT3JnYW5pemF0aW9uRnJvbUpTT05UeXBlZChqc29uLCBpZ25vcmVEaXNjcmltaW5hdG9yKSB7XG5cdFx0aWYgKGpzb24gPT0gbnVsbCkgcmV0dXJuIGpzb247XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwiY3JlYXRlZF9hdFwiOiBqc29uW1wiY3JlYXRlZF9hdFwiXSA9PSBudWxsID8gdm9pZCAwIDogbmV3IERhdGUoanNvbltcImNyZWF0ZWRfYXRcIl0pLFxuXHRcdFx0XCJkaXNwbGF5X25hbWVcIjoganNvbltcImRpc3BsYXlfbmFtZVwiXSxcblx0XHRcdFwiZG9tYWluXCI6IGpzb25bXCJkb21haW5cIl0sXG5cdFx0XHRcImlkXCI6IGpzb25bXCJpZFwiXSxcblx0XHRcdFwic2hvcnRfbmFtZVwiOiBqc29uW1wic2hvcnRfbmFtZVwiXSxcblx0XHRcdFwic3RhdHVzXCI6IGpzb25bXCJzdGF0dXNcIl0sXG5cdFx0XHRcInVwZGF0ZWRfYXRcIjoganNvbltcInVwZGF0ZWRfYXRcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IG5ldyBEYXRlKGpzb25bXCJ1cGRhdGVkX2F0XCJdKVxuXHRcdH07XG5cdH1cblx0ZnVuY3Rpb24gT3JnYW5pemF0aW9uVG9KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gT3JnYW5pemF0aW9uVG9KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIE9yZ2FuaXphdGlvblRvSlNPTlR5cGVkKHZhbHVlLCBpZ25vcmVEaXNjcmltaW5hdG9yID0gZmFsc2UpIHtcblx0XHRpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIHZhbHVlO1xuXHRcdHJldHVybiB7XG5cdFx0XHRcImNyZWF0ZWRfYXRcIjogdmFsdWVbXCJjcmVhdGVkX2F0XCJdID09IG51bGwgPyB2b2lkIDAgOiB2YWx1ZVtcImNyZWF0ZWRfYXRcIl0udG9JU09TdHJpbmcoKSxcblx0XHRcdFwiZGlzcGxheV9uYW1lXCI6IHZhbHVlW1wiZGlzcGxheV9uYW1lXCJdLFxuXHRcdFx0XCJkb21haW5cIjogdmFsdWVbXCJkb21haW5cIl0sXG5cdFx0XHRcImlkXCI6IHZhbHVlW1wiaWRcIl0sXG5cdFx0XHRcInNob3J0X25hbWVcIjogdmFsdWVbXCJzaG9ydF9uYW1lXCJdLFxuXHRcdFx0XCJzdGF0dXNcIjogdmFsdWVbXCJzdGF0dXNcIl0sXG5cdFx0XHRcInVwZGF0ZWRfYXRcIjogdmFsdWVbXCJ1cGRhdGVkX2F0XCJdID09IG51bGwgPyB2b2lkIDAgOiB2YWx1ZVtcInVwZGF0ZWRfYXRcIl0udG9JU09TdHJpbmcoKVxuXHRcdH07XG5cdH1cbn0pIH0pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiAuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL09yZ2FuaXphdGlvbkNvbmZpZy5qc1xudmFyIHJlcXVpcmVfT3JnYW5pemF0aW9uQ29uZmlnID0gLyogQF9fUFVSRV9fICovIF9fY29tbW9uSlMoeyBcIi4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvT3JnYW5pemF0aW9uQ29uZmlnLmpzXCI6ICgoZXhwb3J0cykgPT4ge1xuXHQvKipcblx0KiBDb21tZXJjZVxuXHQqIE5vIGRlc2NyaXB0aW9uIHByb3ZpZGVkIChnZW5lcmF0ZWQgYnkgT3BlbmFwaSBHZW5lcmF0b3IgaHR0cHM6Ly9naXRodWIuY29tL29wZW5hcGl0b29scy9vcGVuYXBpLWdlbmVyYXRvcilcblx0KlxuXHQqIFRoZSB2ZXJzaW9uIG9mIHRoZSBPcGVuQVBJIGRvY3VtZW50OiAxLjEuMFxuXHQqXG5cdCpcblx0KiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IE9wZW5BUEkgR2VuZXJhdG9yIChodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2gpLlxuXHQqIGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaFxuXHQqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cblx0Ki9cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuXHRleHBvcnRzLmluc3RhbmNlT2ZPcmdhbml6YXRpb25Db25maWcgPSBpbnN0YW5jZU9mT3JnYW5pemF0aW9uQ29uZmlnO1xuXHRleHBvcnRzLk9yZ2FuaXphdGlvbkNvbmZpZ0Zyb21KU09OID0gT3JnYW5pemF0aW9uQ29uZmlnRnJvbUpTT047XG5cdGV4cG9ydHMuT3JnYW5pemF0aW9uQ29uZmlnRnJvbUpTT05UeXBlZCA9IE9yZ2FuaXphdGlvbkNvbmZpZ0Zyb21KU09OVHlwZWQ7XG5cdGV4cG9ydHMuT3JnYW5pemF0aW9uQ29uZmlnVG9KU09OID0gT3JnYW5pemF0aW9uQ29uZmlnVG9KU09OO1xuXHRleHBvcnRzLk9yZ2FuaXphdGlvbkNvbmZpZ1RvSlNPTlR5cGVkID0gT3JnYW5pemF0aW9uQ29uZmlnVG9KU09OVHlwZWQ7XG5cdC8qKlxuXHQqIENoZWNrIGlmIGEgZ2l2ZW4gb2JqZWN0IGltcGxlbWVudHMgdGhlIE9yZ2FuaXphdGlvbkNvbmZpZyBpbnRlcmZhY2UuXG5cdCovXG5cdGZ1bmN0aW9uIGluc3RhbmNlT2ZPcmdhbml6YXRpb25Db25maWcodmFsdWUpIHtcblx0XHRpZiAoIShcImNvbmZpZ1wiIGluIHZhbHVlKSB8fCB2YWx1ZVtcImNvbmZpZ1wiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0aWYgKCEoXCJjcmVhdGVkX2F0XCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wiY3JlYXRlZF9hdFwiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0aWYgKCEoXCJpc19sYXRlc3RcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJpc19sYXRlc3RcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdGlmICghKFwibmFtZXNwYWNlXCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wibmFtZXNwYWNlXCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRpZiAoIShcInVwZGF0ZWRfYXRcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJ1cGRhdGVkX2F0XCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRpZiAoIShcInVwZGF0ZWRfYnlfZW50aXR5XCIgaW4gdmFsdWUpIHx8IHZhbHVlW1widXBkYXRlZF9ieV9lbnRpdHlcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdGlmICghKFwidXBkYXRlZF9ieV9lbnRpdHlfaWRcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJ1cGRhdGVkX2J5X2VudGl0eV9pZFwiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0aWYgKCEoXCJ2ZXJzaW9uXCIgaW4gdmFsdWUpIHx8IHZhbHVlW1widmVyc2lvblwiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0ZnVuY3Rpb24gT3JnYW5pemF0aW9uQ29uZmlnRnJvbUpTT04oanNvbikge1xuXHRcdHJldHVybiBPcmdhbml6YXRpb25Db25maWdGcm9tSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBPcmdhbml6YXRpb25Db25maWdGcm9tSlNPTlR5cGVkKGpzb24sIGlnbm9yZURpc2NyaW1pbmF0b3IpIHtcblx0XHRpZiAoanNvbiA9PSBudWxsKSByZXR1cm4ganNvbjtcblx0XHRyZXR1cm4ge1xuXHRcdFx0XCJjb25maWdcIjoganNvbltcImNvbmZpZ1wiXSxcblx0XHRcdFwiY3JlYXRlZF9hdFwiOiBuZXcgRGF0ZShqc29uW1wiY3JlYXRlZF9hdFwiXSksXG5cdFx0XHRcImlkXCI6IGpzb25bXCJpZFwiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcImlkXCJdLFxuXHRcdFx0XCJpc19sYXRlc3RcIjoganNvbltcImlzX2xhdGVzdFwiXSxcblx0XHRcdFwibmFtZXNwYWNlXCI6IGpzb25bXCJuYW1lc3BhY2VcIl0sXG5cdFx0XHRcIm9yZ2FuaXphdGlvbl9pZFwiOiBqc29uW1wib3JnYW5pemF0aW9uX2lkXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wib3JnYW5pemF0aW9uX2lkXCJdLFxuXHRcdFx0XCJ1cGRhdGVkX2F0XCI6IG5ldyBEYXRlKGpzb25bXCJ1cGRhdGVkX2F0XCJdKSxcblx0XHRcdFwidXBkYXRlZF9ieV9lbnRpdHlcIjoganNvbltcInVwZGF0ZWRfYnlfZW50aXR5XCJdLFxuXHRcdFx0XCJ1cGRhdGVkX2J5X2VudGl0eV9pZFwiOiBqc29uW1widXBkYXRlZF9ieV9lbnRpdHlfaWRcIl0sXG5cdFx0XHRcInZlcnNpb25cIjoganNvbltcInZlcnNpb25cIl1cblx0XHR9O1xuXHR9XG5cdGZ1bmN0aW9uIE9yZ2FuaXphdGlvbkNvbmZpZ1RvSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIE9yZ2FuaXphdGlvbkNvbmZpZ1RvSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBPcmdhbml6YXRpb25Db25maWdUb0pTT05UeXBlZCh2YWx1ZSwgaWdub3JlRGlzY3JpbWluYXRvciA9IGZhbHNlKSB7XG5cdFx0aWYgKHZhbHVlID09IG51bGwpIHJldHVybiB2YWx1ZTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0XCJjb25maWdcIjogdmFsdWVbXCJjb25maWdcIl0sXG5cdFx0XHRcImNyZWF0ZWRfYXRcIjogdmFsdWVbXCJjcmVhdGVkX2F0XCJdLnRvSVNPU3RyaW5nKCksXG5cdFx0XHRcImlkXCI6IHZhbHVlW1wiaWRcIl0sXG5cdFx0XHRcImlzX2xhdGVzdFwiOiB2YWx1ZVtcImlzX2xhdGVzdFwiXSxcblx0XHRcdFwibmFtZXNwYWNlXCI6IHZhbHVlW1wibmFtZXNwYWNlXCJdLFxuXHRcdFx0XCJvcmdhbml6YXRpb25faWRcIjogdmFsdWVbXCJvcmdhbml6YXRpb25faWRcIl0sXG5cdFx0XHRcInVwZGF0ZWRfYXRcIjogdmFsdWVbXCJ1cGRhdGVkX2F0XCJdLnRvSVNPU3RyaW5nKCksXG5cdFx0XHRcInVwZGF0ZWRfYnlfZW50aXR5XCI6IHZhbHVlW1widXBkYXRlZF9ieV9lbnRpdHlcIl0sXG5cdFx0XHRcInVwZGF0ZWRfYnlfZW50aXR5X2lkXCI6IHZhbHVlW1widXBkYXRlZF9ieV9lbnRpdHlfaWRcIl0sXG5cdFx0XHRcInZlcnNpb25cIjogdmFsdWVbXCJ2ZXJzaW9uXCJdXG5cdFx0fTtcblx0fVxufSkgfSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIC4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvT3JnYW5pemF0aW9uU2V0dGluZ3MuanNcbnZhciByZXF1aXJlX09yZ2FuaXphdGlvblNldHRpbmdzID0gLyogQF9fUFVSRV9fICovIF9fY29tbW9uSlMoeyBcIi4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvT3JnYW5pemF0aW9uU2V0dGluZ3MuanNcIjogKChleHBvcnRzKSA9PiB7XG5cdC8qKlxuXHQqIENvbW1lcmNlXG5cdCogTm8gZGVzY3JpcHRpb24gcHJvdmlkZWQgKGdlbmVyYXRlZCBieSBPcGVuYXBpIEdlbmVyYXRvciBodHRwczovL2dpdGh1Yi5jb20vb3BlbmFwaXRvb2xzL29wZW5hcGktZ2VuZXJhdG9yKVxuXHQqXG5cdCogVGhlIHZlcnNpb24gb2YgdGhlIE9wZW5BUEkgZG9jdW1lbnQ6IDEuMS4wXG5cdCpcblx0KlxuXHQqIE5PVEU6IFRoaXMgY2xhc3MgaXMgYXV0byBnZW5lcmF0ZWQgYnkgT3BlbkFQSSBHZW5lcmF0b3IgKGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaCkuXG5cdCogaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoXG5cdCogRG8gbm90IGVkaXQgdGhlIGNsYXNzIG1hbnVhbGx5LlxuXHQqL1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5cdGV4cG9ydHMuaW5zdGFuY2VPZk9yZ2FuaXphdGlvblNldHRpbmdzID0gaW5zdGFuY2VPZk9yZ2FuaXphdGlvblNldHRpbmdzO1xuXHRleHBvcnRzLk9yZ2FuaXphdGlvblNldHRpbmdzRnJvbUpTT04gPSBPcmdhbml6YXRpb25TZXR0aW5nc0Zyb21KU09OO1xuXHRleHBvcnRzLk9yZ2FuaXphdGlvblNldHRpbmdzRnJvbUpTT05UeXBlZCA9IE9yZ2FuaXphdGlvblNldHRpbmdzRnJvbUpTT05UeXBlZDtcblx0ZXhwb3J0cy5Pcmdhbml6YXRpb25TZXR0aW5nc1RvSlNPTiA9IE9yZ2FuaXphdGlvblNldHRpbmdzVG9KU09OO1xuXHRleHBvcnRzLk9yZ2FuaXphdGlvblNldHRpbmdzVG9KU09OVHlwZWQgPSBPcmdhbml6YXRpb25TZXR0aW5nc1RvSlNPTlR5cGVkO1xuXHRjb25zdCBPcmdhbml6YXRpb25fMSA9IHJlcXVpcmVfT3JnYW5pemF0aW9uKCk7XG5cdC8qKlxuXHQqIENoZWNrIGlmIGEgZ2l2ZW4gb2JqZWN0IGltcGxlbWVudHMgdGhlIE9yZ2FuaXphdGlvblNldHRpbmdzIGludGVyZmFjZS5cblx0Ki9cblx0ZnVuY3Rpb24gaW5zdGFuY2VPZk9yZ2FuaXphdGlvblNldHRpbmdzKHZhbHVlKSB7XG5cdFx0aWYgKCEoXCJvcmdcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJvcmdcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdGlmICghKFwic2V0dGluZ3NcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJzZXR0aW5nc1wiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0ZnVuY3Rpb24gT3JnYW5pemF0aW9uU2V0dGluZ3NGcm9tSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIE9yZ2FuaXphdGlvblNldHRpbmdzRnJvbUpTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gT3JnYW5pemF0aW9uU2V0dGluZ3NGcm9tSlNPTlR5cGVkKGpzb24sIGlnbm9yZURpc2NyaW1pbmF0b3IpIHtcblx0XHRpZiAoanNvbiA9PSBudWxsKSByZXR1cm4ganNvbjtcblx0XHRyZXR1cm4ge1xuXHRcdFx0XCJvcmdcIjogKDAsIE9yZ2FuaXphdGlvbl8xLk9yZ2FuaXphdGlvbkZyb21KU09OKShqc29uW1wib3JnXCJdKSxcblx0XHRcdFwic2V0dGluZ3NcIjoganNvbltcInNldHRpbmdzXCJdXG5cdFx0fTtcblx0fVxuXHRmdW5jdGlvbiBPcmdhbml6YXRpb25TZXR0aW5nc1RvSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIE9yZ2FuaXphdGlvblNldHRpbmdzVG9KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIE9yZ2FuaXphdGlvblNldHRpbmdzVG9KU09OVHlwZWQodmFsdWUsIGlnbm9yZURpc2NyaW1pbmF0b3IgPSBmYWxzZSkge1xuXHRcdGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gdmFsdWU7XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwib3JnXCI6ICgwLCBPcmdhbml6YXRpb25fMS5Pcmdhbml6YXRpb25Ub0pTT04pKHZhbHVlW1wib3JnXCJdKSxcblx0XHRcdFwic2V0dGluZ3NcIjogdmFsdWVbXCJzZXR0aW5nc1wiXVxuXHRcdH07XG5cdH1cbn0pIH0pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiAuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL1N0YXRzaWdFeHBlcmltZW50LmpzXG52YXIgcmVxdWlyZV9TdGF0c2lnRXhwZXJpbWVudCA9IC8qIEBfX1BVUkVfXyAqLyBfX2NvbW1vbkpTKHsgXCIuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL1N0YXRzaWdFeHBlcmltZW50LmpzXCI6ICgoZXhwb3J0cykgPT4ge1xuXHQvKipcblx0KiBDb21tZXJjZVxuXHQqIE5vIGRlc2NyaXB0aW9uIHByb3ZpZGVkIChnZW5lcmF0ZWQgYnkgT3BlbmFwaSBHZW5lcmF0b3IgaHR0cHM6Ly9naXRodWIuY29tL29wZW5hcGl0b29scy9vcGVuYXBpLWdlbmVyYXRvcilcblx0KlxuXHQqIFRoZSB2ZXJzaW9uIG9mIHRoZSBPcGVuQVBJIGRvY3VtZW50OiAxLjEuMFxuXHQqXG5cdCpcblx0KiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IE9wZW5BUEkgR2VuZXJhdG9yIChodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2gpLlxuXHQqIGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaFxuXHQqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cblx0Ki9cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuXHRleHBvcnRzLmluc3RhbmNlT2ZTdGF0c2lnRXhwZXJpbWVudCA9IGluc3RhbmNlT2ZTdGF0c2lnRXhwZXJpbWVudDtcblx0ZXhwb3J0cy5TdGF0c2lnRXhwZXJpbWVudEZyb21KU09OID0gU3RhdHNpZ0V4cGVyaW1lbnRGcm9tSlNPTjtcblx0ZXhwb3J0cy5TdGF0c2lnRXhwZXJpbWVudEZyb21KU09OVHlwZWQgPSBTdGF0c2lnRXhwZXJpbWVudEZyb21KU09OVHlwZWQ7XG5cdGV4cG9ydHMuU3RhdHNpZ0V4cGVyaW1lbnRUb0pTT04gPSBTdGF0c2lnRXhwZXJpbWVudFRvSlNPTjtcblx0ZXhwb3J0cy5TdGF0c2lnRXhwZXJpbWVudFRvSlNPTlR5cGVkID0gU3RhdHNpZ0V4cGVyaW1lbnRUb0pTT05UeXBlZDtcblx0LyoqXG5cdCogQ2hlY2sgaWYgYSBnaXZlbiBvYmplY3QgaW1wbGVtZW50cyB0aGUgU3RhdHNpZ0V4cGVyaW1lbnQgaW50ZXJmYWNlLlxuXHQqL1xuXHRmdW5jdGlvbiBpbnN0YW5jZU9mU3RhdHNpZ0V4cGVyaW1lbnQodmFsdWUpIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHRmdW5jdGlvbiBTdGF0c2lnRXhwZXJpbWVudEZyb21KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gU3RhdHNpZ0V4cGVyaW1lbnRGcm9tSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBTdGF0c2lnRXhwZXJpbWVudEZyb21KU09OVHlwZWQoanNvbiwgaWdub3JlRGlzY3JpbWluYXRvcikge1xuXHRcdGlmIChqc29uID09IG51bGwpIHJldHVybiBqc29uO1xuXHRcdHJldHVybiB7XG5cdFx0XHRcImdyb3VwXCI6IGpzb25bXCJncm91cFwiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcImdyb3VwXCJdLFxuXHRcdFx0XCJncm91cF9uYW1lXCI6IGpzb25bXCJncm91cF9uYW1lXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wiZ3JvdXBfbmFtZVwiXSxcblx0XHRcdFwibmFtZVwiOiBqc29uW1wibmFtZVwiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcIm5hbWVcIl0sXG5cdFx0XHRcInJ1bGVfaWRcIjoganNvbltcInJ1bGVfaWRcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IGpzb25bXCJydWxlX2lkXCJdLFxuXHRcdFx0XCJ2YWx1ZVwiOiBqc29uW1widmFsdWVcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IGpzb25bXCJ2YWx1ZVwiXVxuXHRcdH07XG5cdH1cblx0ZnVuY3Rpb24gU3RhdHNpZ0V4cGVyaW1lbnRUb0pTT04oanNvbikge1xuXHRcdHJldHVybiBTdGF0c2lnRXhwZXJpbWVudFRvSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBTdGF0c2lnRXhwZXJpbWVudFRvSlNPTlR5cGVkKHZhbHVlLCBpZ25vcmVEaXNjcmltaW5hdG9yID0gZmFsc2UpIHtcblx0XHRpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIHZhbHVlO1xuXHRcdHJldHVybiB7XG5cdFx0XHRcImdyb3VwXCI6IHZhbHVlW1wiZ3JvdXBcIl0sXG5cdFx0XHRcImdyb3VwX25hbWVcIjogdmFsdWVbXCJncm91cF9uYW1lXCJdLFxuXHRcdFx0XCJuYW1lXCI6IHZhbHVlW1wibmFtZVwiXSxcblx0XHRcdFwicnVsZV9pZFwiOiB2YWx1ZVtcInJ1bGVfaWRcIl0sXG5cdFx0XHRcInZhbHVlXCI6IHZhbHVlW1widmFsdWVcIl1cblx0XHR9O1xuXHR9XG59KSB9KTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9TdGF0c2lnRmVhdHVyZUdhdGUuanNcbnZhciByZXF1aXJlX1N0YXRzaWdGZWF0dXJlR2F0ZSA9IC8qIEBfX1BVUkVfXyAqLyBfX2NvbW1vbkpTKHsgXCIuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL1N0YXRzaWdGZWF0dXJlR2F0ZS5qc1wiOiAoKGV4cG9ydHMpID0+IHtcblx0LyoqXG5cdCogQ29tbWVyY2Vcblx0KiBObyBkZXNjcmlwdGlvbiBwcm92aWRlZCAoZ2VuZXJhdGVkIGJ5IE9wZW5hcGkgR2VuZXJhdG9yIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuYXBpdG9vbHMvb3BlbmFwaS1nZW5lcmF0b3IpXG5cdCpcblx0KiBUaGUgdmVyc2lvbiBvZiB0aGUgT3BlbkFQSSBkb2N1bWVudDogMS4xLjBcblx0KlxuXHQqXG5cdCogTk9URTogVGhpcyBjbGFzcyBpcyBhdXRvIGdlbmVyYXRlZCBieSBPcGVuQVBJIEdlbmVyYXRvciAoaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoKS5cblx0KiBodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2hcblx0KiBEbyBub3QgZWRpdCB0aGUgY2xhc3MgbWFudWFsbHkuXG5cdCovXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcblx0ZXhwb3J0cy5pbnN0YW5jZU9mU3RhdHNpZ0ZlYXR1cmVHYXRlID0gaW5zdGFuY2VPZlN0YXRzaWdGZWF0dXJlR2F0ZTtcblx0ZXhwb3J0cy5TdGF0c2lnRmVhdHVyZUdhdGVGcm9tSlNPTiA9IFN0YXRzaWdGZWF0dXJlR2F0ZUZyb21KU09OO1xuXHRleHBvcnRzLlN0YXRzaWdGZWF0dXJlR2F0ZUZyb21KU09OVHlwZWQgPSBTdGF0c2lnRmVhdHVyZUdhdGVGcm9tSlNPTlR5cGVkO1xuXHRleHBvcnRzLlN0YXRzaWdGZWF0dXJlR2F0ZVRvSlNPTiA9IFN0YXRzaWdGZWF0dXJlR2F0ZVRvSlNPTjtcblx0ZXhwb3J0cy5TdGF0c2lnRmVhdHVyZUdhdGVUb0pTT05UeXBlZCA9IFN0YXRzaWdGZWF0dXJlR2F0ZVRvSlNPTlR5cGVkO1xuXHQvKipcblx0KiBDaGVjayBpZiBhIGdpdmVuIG9iamVjdCBpbXBsZW1lbnRzIHRoZSBTdGF0c2lnRmVhdHVyZUdhdGUgaW50ZXJmYWNlLlxuXHQqL1xuXHRmdW5jdGlvbiBpbnN0YW5jZU9mU3RhdHNpZ0ZlYXR1cmVHYXRlKHZhbHVlKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0ZnVuY3Rpb24gU3RhdHNpZ0ZlYXR1cmVHYXRlRnJvbUpTT04oanNvbikge1xuXHRcdHJldHVybiBTdGF0c2lnRmVhdHVyZUdhdGVGcm9tSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBTdGF0c2lnRmVhdHVyZUdhdGVGcm9tSlNPTlR5cGVkKGpzb24sIGlnbm9yZURpc2NyaW1pbmF0b3IpIHtcblx0XHRpZiAoanNvbiA9PSBudWxsKSByZXR1cm4ganNvbjtcblx0XHRyZXR1cm4ge1xuXHRcdFx0XCJncm91cF9uYW1lXCI6IGpzb25bXCJncm91cF9uYW1lXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wiZ3JvdXBfbmFtZVwiXSxcblx0XHRcdFwibmFtZVwiOiBqc29uW1wibmFtZVwiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcIm5hbWVcIl0sXG5cdFx0XHRcInJ1bGVfaWRcIjoganNvbltcInJ1bGVfaWRcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IGpzb25bXCJydWxlX2lkXCJdLFxuXHRcdFx0XCJ2YWx1ZVwiOiBqc29uW1widmFsdWVcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IGpzb25bXCJ2YWx1ZVwiXVxuXHRcdH07XG5cdH1cblx0ZnVuY3Rpb24gU3RhdHNpZ0ZlYXR1cmVHYXRlVG9KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gU3RhdHNpZ0ZlYXR1cmVHYXRlVG9KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIFN0YXRzaWdGZWF0dXJlR2F0ZVRvSlNPTlR5cGVkKHZhbHVlLCBpZ25vcmVEaXNjcmltaW5hdG9yID0gZmFsc2UpIHtcblx0XHRpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIHZhbHVlO1xuXHRcdHJldHVybiB7XG5cdFx0XHRcImdyb3VwX25hbWVcIjogdmFsdWVbXCJncm91cF9uYW1lXCJdLFxuXHRcdFx0XCJuYW1lXCI6IHZhbHVlW1wibmFtZVwiXSxcblx0XHRcdFwicnVsZV9pZFwiOiB2YWx1ZVtcInJ1bGVfaWRcIl0sXG5cdFx0XHRcInZhbHVlXCI6IHZhbHVlW1widmFsdWVcIl1cblx0XHR9O1xuXHR9XG59KSB9KTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9Pcmdhbml6YXRpb25Db25maWdSZXN1bHRzLmpzXG52YXIgcmVxdWlyZV9Pcmdhbml6YXRpb25Db25maWdSZXN1bHRzID0gLyogQF9fUFVSRV9fICovIF9fY29tbW9uSlMoeyBcIi4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvT3JnYW5pemF0aW9uQ29uZmlnUmVzdWx0cy5qc1wiOiAoKGV4cG9ydHMpID0+IHtcblx0LyoqXG5cdCogQ29tbWVyY2Vcblx0KiBObyBkZXNjcmlwdGlvbiBwcm92aWRlZCAoZ2VuZXJhdGVkIGJ5IE9wZW5hcGkgR2VuZXJhdG9yIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuYXBpdG9vbHMvb3BlbmFwaS1nZW5lcmF0b3IpXG5cdCpcblx0KiBUaGUgdmVyc2lvbiBvZiB0aGUgT3BlbkFQSSBkb2N1bWVudDogMS4xLjBcblx0KlxuXHQqXG5cdCogTk9URTogVGhpcyBjbGFzcyBpcyBhdXRvIGdlbmVyYXRlZCBieSBPcGVuQVBJIEdlbmVyYXRvciAoaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoKS5cblx0KiBodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2hcblx0KiBEbyBub3QgZWRpdCB0aGUgY2xhc3MgbWFudWFsbHkuXG5cdCovXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcblx0ZXhwb3J0cy5pbnN0YW5jZU9mT3JnYW5pemF0aW9uQ29uZmlnUmVzdWx0cyA9IGluc3RhbmNlT2ZPcmdhbml6YXRpb25Db25maWdSZXN1bHRzO1xuXHRleHBvcnRzLk9yZ2FuaXphdGlvbkNvbmZpZ1Jlc3VsdHNGcm9tSlNPTiA9IE9yZ2FuaXphdGlvbkNvbmZpZ1Jlc3VsdHNGcm9tSlNPTjtcblx0ZXhwb3J0cy5Pcmdhbml6YXRpb25Db25maWdSZXN1bHRzRnJvbUpTT05UeXBlZCA9IE9yZ2FuaXphdGlvbkNvbmZpZ1Jlc3VsdHNGcm9tSlNPTlR5cGVkO1xuXHRleHBvcnRzLk9yZ2FuaXphdGlvbkNvbmZpZ1Jlc3VsdHNUb0pTT04gPSBPcmdhbml6YXRpb25Db25maWdSZXN1bHRzVG9KU09OO1xuXHRleHBvcnRzLk9yZ2FuaXphdGlvbkNvbmZpZ1Jlc3VsdHNUb0pTT05UeXBlZCA9IE9yZ2FuaXphdGlvbkNvbmZpZ1Jlc3VsdHNUb0pTT05UeXBlZDtcblx0Y29uc3QgT3JnYW5pemF0aW9uQ29uZmlnXzEgPSByZXF1aXJlX09yZ2FuaXphdGlvbkNvbmZpZygpO1xuXHRjb25zdCBPcmdhbml6YXRpb25TZXR0aW5nc18xID0gcmVxdWlyZV9Pcmdhbml6YXRpb25TZXR0aW5ncygpO1xuXHRjb25zdCBTdGF0c2lnRXhwZXJpbWVudF8xID0gcmVxdWlyZV9TdGF0c2lnRXhwZXJpbWVudCgpO1xuXHRjb25zdCBTdGF0c2lnRmVhdHVyZUdhdGVfMSA9IHJlcXVpcmVfU3RhdHNpZ0ZlYXR1cmVHYXRlKCk7XG5cdC8qKlxuXHQqIENoZWNrIGlmIGEgZ2l2ZW4gb2JqZWN0IGltcGxlbWVudHMgdGhlIE9yZ2FuaXphdGlvbkNvbmZpZ1Jlc3VsdHMgaW50ZXJmYWNlLlxuXHQqL1xuXHRmdW5jdGlvbiBpbnN0YW5jZU9mT3JnYW5pemF0aW9uQ29uZmlnUmVzdWx0cyh2YWx1ZSkge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdGZ1bmN0aW9uIE9yZ2FuaXphdGlvbkNvbmZpZ1Jlc3VsdHNGcm9tSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIE9yZ2FuaXphdGlvbkNvbmZpZ1Jlc3VsdHNGcm9tSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBPcmdhbml6YXRpb25Db25maWdSZXN1bHRzRnJvbUpTT05UeXBlZChqc29uLCBpZ25vcmVEaXNjcmltaW5hdG9yKSB7XG5cdFx0aWYgKGpzb24gPT0gbnVsbCkgcmV0dXJuIGpzb247XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwiY29uZmlnc1wiOiBqc29uW1wiY29uZmlnc1wiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcImNvbmZpZ3NcIl0ubWFwKE9yZ2FuaXphdGlvbkNvbmZpZ18xLk9yZ2FuaXphdGlvbkNvbmZpZ0Zyb21KU09OKSxcblx0XHRcdFwiZXhwZXJpbWVudHNcIjoganNvbltcImV4cGVyaW1lbnRzXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wiZXhwZXJpbWVudHNcIl0ubWFwKFN0YXRzaWdFeHBlcmltZW50XzEuU3RhdHNpZ0V4cGVyaW1lbnRGcm9tSlNPTiksXG5cdFx0XHRcImdhdGVzXCI6IGpzb25bXCJnYXRlc1wiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcImdhdGVzXCJdLm1hcChTdGF0c2lnRmVhdHVyZUdhdGVfMS5TdGF0c2lnRmVhdHVyZUdhdGVGcm9tSlNPTiksXG5cdFx0XHRcIm9yZ1wiOiBqc29uW1wib3JnXCJdID09IG51bGwgPyB2b2lkIDAgOiAoMCwgT3JnYW5pemF0aW9uU2V0dGluZ3NfMS5Pcmdhbml6YXRpb25TZXR0aW5nc0Zyb21KU09OKShqc29uW1wib3JnXCJdKVxuXHRcdH07XG5cdH1cblx0ZnVuY3Rpb24gT3JnYW5pemF0aW9uQ29uZmlnUmVzdWx0c1RvSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIE9yZ2FuaXphdGlvbkNvbmZpZ1Jlc3VsdHNUb0pTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gT3JnYW5pemF0aW9uQ29uZmlnUmVzdWx0c1RvSlNPTlR5cGVkKHZhbHVlLCBpZ25vcmVEaXNjcmltaW5hdG9yID0gZmFsc2UpIHtcblx0XHRpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIHZhbHVlO1xuXHRcdHJldHVybiB7XG5cdFx0XHRcImNvbmZpZ3NcIjogdmFsdWVbXCJjb25maWdzXCJdID09IG51bGwgPyB2b2lkIDAgOiB2YWx1ZVtcImNvbmZpZ3NcIl0ubWFwKE9yZ2FuaXphdGlvbkNvbmZpZ18xLk9yZ2FuaXphdGlvbkNvbmZpZ1RvSlNPTiksXG5cdFx0XHRcImV4cGVyaW1lbnRzXCI6IHZhbHVlW1wiZXhwZXJpbWVudHNcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IHZhbHVlW1wiZXhwZXJpbWVudHNcIl0ubWFwKFN0YXRzaWdFeHBlcmltZW50XzEuU3RhdHNpZ0V4cGVyaW1lbnRUb0pTT04pLFxuXHRcdFx0XCJnYXRlc1wiOiB2YWx1ZVtcImdhdGVzXCJdID09IG51bGwgPyB2b2lkIDAgOiB2YWx1ZVtcImdhdGVzXCJdLm1hcChTdGF0c2lnRmVhdHVyZUdhdGVfMS5TdGF0c2lnRmVhdHVyZUdhdGVUb0pTT04pLFxuXHRcdFx0XCJvcmdcIjogKDAsIE9yZ2FuaXphdGlvblNldHRpbmdzXzEuT3JnYW5pemF0aW9uU2V0dGluZ3NUb0pTT04pKHZhbHVlW1wib3JnXCJdKVxuXHRcdH07XG5cdH1cbn0pIH0pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiAuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL1Byb2R1Y3RSZXRyaWV2YWxSZXF1ZXN0LmpzXG52YXIgcmVxdWlyZV9Qcm9kdWN0UmV0cmlldmFsUmVxdWVzdCA9IC8qIEBfX1BVUkVfXyAqLyBfX2NvbW1vbkpTKHsgXCIuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL1Byb2R1Y3RSZXRyaWV2YWxSZXF1ZXN0LmpzXCI6ICgoZXhwb3J0cykgPT4ge1xuXHQvKipcblx0KiBDb21tZXJjZVxuXHQqIE5vIGRlc2NyaXB0aW9uIHByb3ZpZGVkIChnZW5lcmF0ZWQgYnkgT3BlbmFwaSBHZW5lcmF0b3IgaHR0cHM6Ly9naXRodWIuY29tL29wZW5hcGl0b29scy9vcGVuYXBpLWdlbmVyYXRvcilcblx0KlxuXHQqIFRoZSB2ZXJzaW9uIG9mIHRoZSBPcGVuQVBJIGRvY3VtZW50OiAxLjEuMFxuXHQqXG5cdCpcblx0KiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IE9wZW5BUEkgR2VuZXJhdG9yIChodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2gpLlxuXHQqIGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaFxuXHQqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cblx0Ki9cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuXHRleHBvcnRzLmluc3RhbmNlT2ZQcm9kdWN0UmV0cmlldmFsUmVxdWVzdCA9IGluc3RhbmNlT2ZQcm9kdWN0UmV0cmlldmFsUmVxdWVzdDtcblx0ZXhwb3J0cy5Qcm9kdWN0UmV0cmlldmFsUmVxdWVzdEZyb21KU09OID0gUHJvZHVjdFJldHJpZXZhbFJlcXVlc3RGcm9tSlNPTjtcblx0ZXhwb3J0cy5Qcm9kdWN0UmV0cmlldmFsUmVxdWVzdEZyb21KU09OVHlwZWQgPSBQcm9kdWN0UmV0cmlldmFsUmVxdWVzdEZyb21KU09OVHlwZWQ7XG5cdGV4cG9ydHMuUHJvZHVjdFJldHJpZXZhbFJlcXVlc3RUb0pTT04gPSBQcm9kdWN0UmV0cmlldmFsUmVxdWVzdFRvSlNPTjtcblx0ZXhwb3J0cy5Qcm9kdWN0UmV0cmlldmFsUmVxdWVzdFRvSlNPTlR5cGVkID0gUHJvZHVjdFJldHJpZXZhbFJlcXVlc3RUb0pTT05UeXBlZDtcblx0Y29uc3QgQ29udGV4dF8xJDIgPSByZXF1aXJlX0NvbnRleHQoKTtcblx0LyoqXG5cdCogQ2hlY2sgaWYgYSBnaXZlbiBvYmplY3QgaW1wbGVtZW50cyB0aGUgUHJvZHVjdFJldHJpZXZhbFJlcXVlc3QgaW50ZXJmYWNlLlxuXHQqL1xuXHRmdW5jdGlvbiBpbnN0YW5jZU9mUHJvZHVjdFJldHJpZXZhbFJlcXVlc3QodmFsdWUpIHtcblx0XHRpZiAoIShcImNvbnRleHRcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJjb250ZXh0XCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRpZiAoIShcInByb2R1Y3RfaWRzXCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wicHJvZHVjdF9pZHNcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdGZ1bmN0aW9uIFByb2R1Y3RSZXRyaWV2YWxSZXF1ZXN0RnJvbUpTT04oanNvbikge1xuXHRcdHJldHVybiBQcm9kdWN0UmV0cmlldmFsUmVxdWVzdEZyb21KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIFByb2R1Y3RSZXRyaWV2YWxSZXF1ZXN0RnJvbUpTT05UeXBlZChqc29uLCBpZ25vcmVEaXNjcmltaW5hdG9yKSB7XG5cdFx0aWYgKGpzb24gPT0gbnVsbCkgcmV0dXJuIGpzb247XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwiY29udGV4dFwiOiAoMCwgQ29udGV4dF8xJDIuQ29udGV4dEZyb21KU09OKShqc29uW1wiY29udGV4dFwiXSksXG5cdFx0XHRcInByb2R1Y3RfaWRzXCI6IGpzb25bXCJwcm9kdWN0X2lkc1wiXVxuXHRcdH07XG5cdH1cblx0ZnVuY3Rpb24gUHJvZHVjdFJldHJpZXZhbFJlcXVlc3RUb0pTT04oanNvbikge1xuXHRcdHJldHVybiBQcm9kdWN0UmV0cmlldmFsUmVxdWVzdFRvSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBQcm9kdWN0UmV0cmlldmFsUmVxdWVzdFRvSlNPTlR5cGVkKHZhbHVlLCBpZ25vcmVEaXNjcmltaW5hdG9yID0gZmFsc2UpIHtcblx0XHRpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIHZhbHVlO1xuXHRcdHJldHVybiB7XG5cdFx0XHRcImNvbnRleHRcIjogKDAsIENvbnRleHRfMSQyLkNvbnRleHRUb0pTT04pKHZhbHVlW1wiY29udGV4dFwiXSksXG5cdFx0XHRcInByb2R1Y3RfaWRzXCI6IHZhbHVlW1wicHJvZHVjdF9pZHNcIl1cblx0XHR9O1xuXHR9XG59KSB9KTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9SZXNwb25zZVByb2R1Y3RBdHRyaWJ1dGVzLmpzXG52YXIgcmVxdWlyZV9SZXNwb25zZVByb2R1Y3RBdHRyaWJ1dGVzID0gLyogQF9fUFVSRV9fICovIF9fY29tbW9uSlMoeyBcIi4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvUmVzcG9uc2VQcm9kdWN0QXR0cmlidXRlcy5qc1wiOiAoKGV4cG9ydHMpID0+IHtcblx0LyoqXG5cdCogQ29tbWVyY2Vcblx0KiBObyBkZXNjcmlwdGlvbiBwcm92aWRlZCAoZ2VuZXJhdGVkIGJ5IE9wZW5hcGkgR2VuZXJhdG9yIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuYXBpdG9vbHMvb3BlbmFwaS1nZW5lcmF0b3IpXG5cdCpcblx0KiBUaGUgdmVyc2lvbiBvZiB0aGUgT3BlbkFQSSBkb2N1bWVudDogMS4xLjBcblx0KlxuXHQqXG5cdCogTk9URTogVGhpcyBjbGFzcyBpcyBhdXRvIGdlbmVyYXRlZCBieSBPcGVuQVBJIEdlbmVyYXRvciAoaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoKS5cblx0KiBodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2hcblx0KiBEbyBub3QgZWRpdCB0aGUgY2xhc3MgbWFudWFsbHkuXG5cdCovXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcblx0ZXhwb3J0cy5pbnN0YW5jZU9mUmVzcG9uc2VQcm9kdWN0QXR0cmlidXRlcyA9IGluc3RhbmNlT2ZSZXNwb25zZVByb2R1Y3RBdHRyaWJ1dGVzO1xuXHRleHBvcnRzLlJlc3BvbnNlUHJvZHVjdEF0dHJpYnV0ZXNGcm9tSlNPTiA9IFJlc3BvbnNlUHJvZHVjdEF0dHJpYnV0ZXNGcm9tSlNPTjtcblx0ZXhwb3J0cy5SZXNwb25zZVByb2R1Y3RBdHRyaWJ1dGVzRnJvbUpTT05UeXBlZCA9IFJlc3BvbnNlUHJvZHVjdEF0dHJpYnV0ZXNGcm9tSlNPTlR5cGVkO1xuXHRleHBvcnRzLlJlc3BvbnNlUHJvZHVjdEF0dHJpYnV0ZXNUb0pTT04gPSBSZXNwb25zZVByb2R1Y3RBdHRyaWJ1dGVzVG9KU09OO1xuXHRleHBvcnRzLlJlc3BvbnNlUHJvZHVjdEF0dHJpYnV0ZXNUb0pTT05UeXBlZCA9IFJlc3BvbnNlUHJvZHVjdEF0dHJpYnV0ZXNUb0pTT05UeXBlZDtcblx0Y29uc3QgTGFiZWxWYWx1ZV8xJDEgPSByZXF1aXJlX0xhYmVsVmFsdWUoKTtcblx0LyoqXG5cdCogQ2hlY2sgaWYgYSBnaXZlbiBvYmplY3QgaW1wbGVtZW50cyB0aGUgUmVzcG9uc2VQcm9kdWN0QXR0cmlidXRlcyBpbnRlcmZhY2UuXG5cdCovXG5cdGZ1bmN0aW9uIGluc3RhbmNlT2ZSZXNwb25zZVByb2R1Y3RBdHRyaWJ1dGVzKHZhbHVlKSB7XG5cdFx0aWYgKCEoXCJpZFwiIGluIHZhbHVlKSB8fCB2YWx1ZVtcImlkXCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRpZiAoIShcInRpdGxlXCIgaW4gdmFsdWUpIHx8IHZhbHVlW1widGl0bGVcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdGlmICghKFwidXJsXCIgaW4gdmFsdWUpIHx8IHZhbHVlW1widXJsXCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHRmdW5jdGlvbiBSZXNwb25zZVByb2R1Y3RBdHRyaWJ1dGVzRnJvbUpTT04oanNvbikge1xuXHRcdHJldHVybiBSZXNwb25zZVByb2R1Y3RBdHRyaWJ1dGVzRnJvbUpTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gUmVzcG9uc2VQcm9kdWN0QXR0cmlidXRlc0Zyb21KU09OVHlwZWQoanNvbiwgaWdub3JlRGlzY3JpbWluYXRvcikge1xuXHRcdGlmIChqc29uID09IG51bGwpIHJldHVybiBqc29uO1xuXHRcdHJldHVybiB7XG5cdFx0XHRcImF2ZXJhZ2VfcmF0aW5nXCI6IGpzb25bXCJhdmVyYWdlX3JhdGluZ1wiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcImF2ZXJhZ2VfcmF0aW5nXCJdLFxuXHRcdFx0XCJjb2xvcnNcIjoganNvbltcImNvbG9yc1wiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcImNvbG9yc1wiXSxcblx0XHRcdFwiZGVzY3JpcHRpb25cIjoganNvbltcImRlc2NyaXB0aW9uXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wiZGVzY3JpcHRpb25cIl0sXG5cdFx0XHRcImZpbHRlcnNcIjoganNvbltcImZpbHRlcnNcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IGpzb25bXCJmaWx0ZXJzXCJdLFxuXHRcdFx0XCJpZFwiOiBqc29uW1wiaWRcIl0sXG5cdFx0XHRcImltYWdlX3VybFwiOiBqc29uW1wiaW1hZ2VfdXJsXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wiaW1hZ2VfdXJsXCJdLFxuXHRcdFx0XCJpbWFnZV91cmxzXCI6IGpzb25bXCJpbWFnZV91cmxzXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wiaW1hZ2VfdXJsc1wiXSxcblx0XHRcdFwiaXNfZm9yX2dyaWRcIjoganNvbltcImlzX2Zvcl9ncmlkXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wiaXNfZm9yX2dyaWRcIl0sXG5cdFx0XHRcIm1ldGFkYXRhXCI6IGpzb25bXCJtZXRhZGF0YVwiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcIm1ldGFkYXRhXCJdLm1hcChMYWJlbFZhbHVlXzEkMS5MYWJlbFZhbHVlRnJvbUpTT04pLFxuXHRcdFx0XCJudW1iZXJfcmV2aWV3c1wiOiBqc29uW1wibnVtYmVyX3Jldmlld3NcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IGpzb25bXCJudW1iZXJfcmV2aWV3c1wiXSxcblx0XHRcdFwib3JpZ2luYWxfcHJpY2VcIjoganNvbltcIm9yaWdpbmFsX3ByaWNlXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wib3JpZ2luYWxfcHJpY2VcIl0sXG5cdFx0XHRcInNhbGVfcHJpY2VcIjoganNvbltcInNhbGVfcHJpY2VcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IGpzb25bXCJzYWxlX3ByaWNlXCJdLFxuXHRcdFx0XCJzaXplc1wiOiBqc29uW1wic2l6ZXNcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IGpzb25bXCJzaXplc1wiXSxcblx0XHRcdFwidGl0bGVcIjoganNvbltcInRpdGxlXCJdLFxuXHRcdFx0XCJ1cmxcIjoganNvbltcInVybFwiXVxuXHRcdH07XG5cdH1cblx0ZnVuY3Rpb24gUmVzcG9uc2VQcm9kdWN0QXR0cmlidXRlc1RvSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIFJlc3BvbnNlUHJvZHVjdEF0dHJpYnV0ZXNUb0pTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gUmVzcG9uc2VQcm9kdWN0QXR0cmlidXRlc1RvSlNPTlR5cGVkKHZhbHVlLCBpZ25vcmVEaXNjcmltaW5hdG9yID0gZmFsc2UpIHtcblx0XHRpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIHZhbHVlO1xuXHRcdHJldHVybiB7XG5cdFx0XHRcImF2ZXJhZ2VfcmF0aW5nXCI6IHZhbHVlW1wiYXZlcmFnZV9yYXRpbmdcIl0sXG5cdFx0XHRcImNvbG9yc1wiOiB2YWx1ZVtcImNvbG9yc1wiXSxcblx0XHRcdFwiZGVzY3JpcHRpb25cIjogdmFsdWVbXCJkZXNjcmlwdGlvblwiXSxcblx0XHRcdFwiZmlsdGVyc1wiOiB2YWx1ZVtcImZpbHRlcnNcIl0sXG5cdFx0XHRcImlkXCI6IHZhbHVlW1wiaWRcIl0sXG5cdFx0XHRcImltYWdlX3VybFwiOiB2YWx1ZVtcImltYWdlX3VybFwiXSxcblx0XHRcdFwiaW1hZ2VfdXJsc1wiOiB2YWx1ZVtcImltYWdlX3VybHNcIl0sXG5cdFx0XHRcImlzX2Zvcl9ncmlkXCI6IHZhbHVlW1wiaXNfZm9yX2dyaWRcIl0sXG5cdFx0XHRcIm1ldGFkYXRhXCI6IHZhbHVlW1wibWV0YWRhdGFcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IHZhbHVlW1wibWV0YWRhdGFcIl0ubWFwKExhYmVsVmFsdWVfMSQxLkxhYmVsVmFsdWVUb0pTT04pLFxuXHRcdFx0XCJudW1iZXJfcmV2aWV3c1wiOiB2YWx1ZVtcIm51bWJlcl9yZXZpZXdzXCJdLFxuXHRcdFx0XCJvcmlnaW5hbF9wcmljZVwiOiB2YWx1ZVtcIm9yaWdpbmFsX3ByaWNlXCJdLFxuXHRcdFx0XCJzYWxlX3ByaWNlXCI6IHZhbHVlW1wic2FsZV9wcmljZVwiXSxcblx0XHRcdFwic2l6ZXNcIjogdmFsdWVbXCJzaXplc1wiXSxcblx0XHRcdFwidGl0bGVcIjogdmFsdWVbXCJ0aXRsZVwiXSxcblx0XHRcdFwidXJsXCI6IHZhbHVlW1widXJsXCJdXG5cdFx0fTtcblx0fVxufSkgfSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIC4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvUHJvZHVjdFJldHJpZXZhbFJlc3BvbnNlLmpzXG52YXIgcmVxdWlyZV9Qcm9kdWN0UmV0cmlldmFsUmVzcG9uc2UgPSAvKiBAX19QVVJFX18gKi8gX19jb21tb25KUyh7IFwiLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9Qcm9kdWN0UmV0cmlldmFsUmVzcG9uc2UuanNcIjogKChleHBvcnRzKSA9PiB7XG5cdC8qKlxuXHQqIENvbW1lcmNlXG5cdCogTm8gZGVzY3JpcHRpb24gcHJvdmlkZWQgKGdlbmVyYXRlZCBieSBPcGVuYXBpIEdlbmVyYXRvciBodHRwczovL2dpdGh1Yi5jb20vb3BlbmFwaXRvb2xzL29wZW5hcGktZ2VuZXJhdG9yKVxuXHQqXG5cdCogVGhlIHZlcnNpb24gb2YgdGhlIE9wZW5BUEkgZG9jdW1lbnQ6IDEuMS4wXG5cdCpcblx0KlxuXHQqIE5PVEU6IFRoaXMgY2xhc3MgaXMgYXV0byBnZW5lcmF0ZWQgYnkgT3BlbkFQSSBHZW5lcmF0b3IgKGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaCkuXG5cdCogaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoXG5cdCogRG8gbm90IGVkaXQgdGhlIGNsYXNzIG1hbnVhbGx5LlxuXHQqL1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5cdGV4cG9ydHMuaW5zdGFuY2VPZlByb2R1Y3RSZXRyaWV2YWxSZXNwb25zZSA9IGluc3RhbmNlT2ZQcm9kdWN0UmV0cmlldmFsUmVzcG9uc2U7XG5cdGV4cG9ydHMuUHJvZHVjdFJldHJpZXZhbFJlc3BvbnNlRnJvbUpTT04gPSBQcm9kdWN0UmV0cmlldmFsUmVzcG9uc2VGcm9tSlNPTjtcblx0ZXhwb3J0cy5Qcm9kdWN0UmV0cmlldmFsUmVzcG9uc2VGcm9tSlNPTlR5cGVkID0gUHJvZHVjdFJldHJpZXZhbFJlc3BvbnNlRnJvbUpTT05UeXBlZDtcblx0ZXhwb3J0cy5Qcm9kdWN0UmV0cmlldmFsUmVzcG9uc2VUb0pTT04gPSBQcm9kdWN0UmV0cmlldmFsUmVzcG9uc2VUb0pTT047XG5cdGV4cG9ydHMuUHJvZHVjdFJldHJpZXZhbFJlc3BvbnNlVG9KU09OVHlwZWQgPSBQcm9kdWN0UmV0cmlldmFsUmVzcG9uc2VUb0pTT05UeXBlZDtcblx0Y29uc3QgUmVzcG9uc2VQcm9kdWN0QXR0cmlidXRlc18xID0gcmVxdWlyZV9SZXNwb25zZVByb2R1Y3RBdHRyaWJ1dGVzKCk7XG5cdC8qKlxuXHQqIENoZWNrIGlmIGEgZ2l2ZW4gb2JqZWN0IGltcGxlbWVudHMgdGhlIFByb2R1Y3RSZXRyaWV2YWxSZXNwb25zZSBpbnRlcmZhY2UuXG5cdCovXG5cdGZ1bmN0aW9uIGluc3RhbmNlT2ZQcm9kdWN0UmV0cmlldmFsUmVzcG9uc2UodmFsdWUpIHtcblx0XHRpZiAoIShcInByb2R1Y3RzXCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wicHJvZHVjdHNcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdGZ1bmN0aW9uIFByb2R1Y3RSZXRyaWV2YWxSZXNwb25zZUZyb21KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gUHJvZHVjdFJldHJpZXZhbFJlc3BvbnNlRnJvbUpTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gUHJvZHVjdFJldHJpZXZhbFJlc3BvbnNlRnJvbUpTT05UeXBlZChqc29uLCBpZ25vcmVEaXNjcmltaW5hdG9yKSB7XG5cdFx0aWYgKGpzb24gPT0gbnVsbCkgcmV0dXJuIGpzb247XG5cdFx0cmV0dXJuIHsgXCJwcm9kdWN0c1wiOiBqc29uW1wicHJvZHVjdHNcIl0ubWFwKFJlc3BvbnNlUHJvZHVjdEF0dHJpYnV0ZXNfMS5SZXNwb25zZVByb2R1Y3RBdHRyaWJ1dGVzRnJvbUpTT04pIH07XG5cdH1cblx0ZnVuY3Rpb24gUHJvZHVjdFJldHJpZXZhbFJlc3BvbnNlVG9KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gUHJvZHVjdFJldHJpZXZhbFJlc3BvbnNlVG9KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIFByb2R1Y3RSZXRyaWV2YWxSZXNwb25zZVRvSlNPTlR5cGVkKHZhbHVlLCBpZ25vcmVEaXNjcmltaW5hdG9yID0gZmFsc2UpIHtcblx0XHRpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIHZhbHVlO1xuXHRcdHJldHVybiB7IFwicHJvZHVjdHNcIjogdmFsdWVbXCJwcm9kdWN0c1wiXS5tYXAoUmVzcG9uc2VQcm9kdWN0QXR0cmlidXRlc18xLlJlc3BvbnNlUHJvZHVjdEF0dHJpYnV0ZXNUb0pTT04pIH07XG5cdH1cbn0pIH0pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiAuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL1Byb2R1Y3RTZWFyY2hGaWx0ZXJSZXNwb25zZUF0dHJpYnV0ZXMuanNcbnZhciByZXF1aXJlX1Byb2R1Y3RTZWFyY2hGaWx0ZXJSZXNwb25zZUF0dHJpYnV0ZXMgPSAvKiBAX19QVVJFX18gKi8gX19jb21tb25KUyh7IFwiLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9Qcm9kdWN0U2VhcmNoRmlsdGVyUmVzcG9uc2VBdHRyaWJ1dGVzLmpzXCI6ICgoZXhwb3J0cykgPT4ge1xuXHQvKipcblx0KiBDb21tZXJjZVxuXHQqIE5vIGRlc2NyaXB0aW9uIHByb3ZpZGVkIChnZW5lcmF0ZWQgYnkgT3BlbmFwaSBHZW5lcmF0b3IgaHR0cHM6Ly9naXRodWIuY29tL29wZW5hcGl0b29scy9vcGVuYXBpLWdlbmVyYXRvcilcblx0KlxuXHQqIFRoZSB2ZXJzaW9uIG9mIHRoZSBPcGVuQVBJIGRvY3VtZW50OiAxLjEuMFxuXHQqXG5cdCpcblx0KiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IE9wZW5BUEkgR2VuZXJhdG9yIChodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2gpLlxuXHQqIGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaFxuXHQqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cblx0Ki9cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuXHRleHBvcnRzLmluc3RhbmNlT2ZQcm9kdWN0U2VhcmNoRmlsdGVyUmVzcG9uc2VBdHRyaWJ1dGVzID0gaW5zdGFuY2VPZlByb2R1Y3RTZWFyY2hGaWx0ZXJSZXNwb25zZUF0dHJpYnV0ZXM7XG5cdGV4cG9ydHMuUHJvZHVjdFNlYXJjaEZpbHRlclJlc3BvbnNlQXR0cmlidXRlc0Zyb21KU09OID0gUHJvZHVjdFNlYXJjaEZpbHRlclJlc3BvbnNlQXR0cmlidXRlc0Zyb21KU09OO1xuXHRleHBvcnRzLlByb2R1Y3RTZWFyY2hGaWx0ZXJSZXNwb25zZUF0dHJpYnV0ZXNGcm9tSlNPTlR5cGVkID0gUHJvZHVjdFNlYXJjaEZpbHRlclJlc3BvbnNlQXR0cmlidXRlc0Zyb21KU09OVHlwZWQ7XG5cdGV4cG9ydHMuUHJvZHVjdFNlYXJjaEZpbHRlclJlc3BvbnNlQXR0cmlidXRlc1RvSlNPTiA9IFByb2R1Y3RTZWFyY2hGaWx0ZXJSZXNwb25zZUF0dHJpYnV0ZXNUb0pTT047XG5cdGV4cG9ydHMuUHJvZHVjdFNlYXJjaEZpbHRlclJlc3BvbnNlQXR0cmlidXRlc1RvSlNPTlR5cGVkID0gUHJvZHVjdFNlYXJjaEZpbHRlclJlc3BvbnNlQXR0cmlidXRlc1RvSlNPTlR5cGVkO1xuXHQvKipcblx0KiBDaGVjayBpZiBhIGdpdmVuIG9iamVjdCBpbXBsZW1lbnRzIHRoZSBQcm9kdWN0U2VhcmNoRmlsdGVyUmVzcG9uc2VBdHRyaWJ1dGVzIGludGVyZmFjZS5cblx0Ki9cblx0ZnVuY3Rpb24gaW5zdGFuY2VPZlByb2R1Y3RTZWFyY2hGaWx0ZXJSZXNwb25zZUF0dHJpYnV0ZXModmFsdWUpIHtcblx0XHRpZiAoIShcImZpbHRlcl9uYW1lXCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wiZmlsdGVyX25hbWVcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdGZ1bmN0aW9uIFByb2R1Y3RTZWFyY2hGaWx0ZXJSZXNwb25zZUF0dHJpYnV0ZXNGcm9tSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIFByb2R1Y3RTZWFyY2hGaWx0ZXJSZXNwb25zZUF0dHJpYnV0ZXNGcm9tSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBQcm9kdWN0U2VhcmNoRmlsdGVyUmVzcG9uc2VBdHRyaWJ1dGVzRnJvbUpTT05UeXBlZChqc29uLCBpZ25vcmVEaXNjcmltaW5hdG9yKSB7XG5cdFx0aWYgKGpzb24gPT0gbnVsbCkgcmV0dXJuIGpzb247XG5cdFx0cmV0dXJuIHsgXCJmaWx0ZXJfbmFtZVwiOiBqc29uW1wiZmlsdGVyX25hbWVcIl0gfTtcblx0fVxuXHRmdW5jdGlvbiBQcm9kdWN0U2VhcmNoRmlsdGVyUmVzcG9uc2VBdHRyaWJ1dGVzVG9KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gUHJvZHVjdFNlYXJjaEZpbHRlclJlc3BvbnNlQXR0cmlidXRlc1RvSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBQcm9kdWN0U2VhcmNoRmlsdGVyUmVzcG9uc2VBdHRyaWJ1dGVzVG9KU09OVHlwZWQodmFsdWUsIGlnbm9yZURpc2NyaW1pbmF0b3IgPSBmYWxzZSkge1xuXHRcdGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gdmFsdWU7XG5cdFx0cmV0dXJuIHsgXCJmaWx0ZXJfbmFtZVwiOiB2YWx1ZVtcImZpbHRlcl9uYW1lXCJdIH07XG5cdH1cbn0pIH0pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiAuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL1NlYXJjaFJlc3BvbnNlUHJvZHVjdC5qc1xudmFyIHJlcXVpcmVfU2VhcmNoUmVzcG9uc2VQcm9kdWN0ID0gLyogQF9fUFVSRV9fICovIF9fY29tbW9uSlMoeyBcIi4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvU2VhcmNoUmVzcG9uc2VQcm9kdWN0LmpzXCI6ICgoZXhwb3J0cykgPT4ge1xuXHQvKipcblx0KiBDb21tZXJjZVxuXHQqIE5vIGRlc2NyaXB0aW9uIHByb3ZpZGVkIChnZW5lcmF0ZWQgYnkgT3BlbmFwaSBHZW5lcmF0b3IgaHR0cHM6Ly9naXRodWIuY29tL29wZW5hcGl0b29scy9vcGVuYXBpLWdlbmVyYXRvcilcblx0KlxuXHQqIFRoZSB2ZXJzaW9uIG9mIHRoZSBPcGVuQVBJIGRvY3VtZW50OiAxLjEuMFxuXHQqXG5cdCpcblx0KiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IE9wZW5BUEkgR2VuZXJhdG9yIChodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2gpLlxuXHQqIGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaFxuXHQqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cblx0Ki9cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuXHRleHBvcnRzLmluc3RhbmNlT2ZTZWFyY2hSZXNwb25zZVByb2R1Y3QgPSBpbnN0YW5jZU9mU2VhcmNoUmVzcG9uc2VQcm9kdWN0O1xuXHRleHBvcnRzLlNlYXJjaFJlc3BvbnNlUHJvZHVjdEZyb21KU09OID0gU2VhcmNoUmVzcG9uc2VQcm9kdWN0RnJvbUpTT047XG5cdGV4cG9ydHMuU2VhcmNoUmVzcG9uc2VQcm9kdWN0RnJvbUpTT05UeXBlZCA9IFNlYXJjaFJlc3BvbnNlUHJvZHVjdEZyb21KU09OVHlwZWQ7XG5cdGV4cG9ydHMuU2VhcmNoUmVzcG9uc2VQcm9kdWN0VG9KU09OID0gU2VhcmNoUmVzcG9uc2VQcm9kdWN0VG9KU09OO1xuXHRleHBvcnRzLlNlYXJjaFJlc3BvbnNlUHJvZHVjdFRvSlNPTlR5cGVkID0gU2VhcmNoUmVzcG9uc2VQcm9kdWN0VG9KU09OVHlwZWQ7XG5cdGNvbnN0IExhYmVsVmFsdWVfMSA9IHJlcXVpcmVfTGFiZWxWYWx1ZSgpO1xuXHQvKipcblx0KiBDaGVjayBpZiBhIGdpdmVuIG9iamVjdCBpbXBsZW1lbnRzIHRoZSBTZWFyY2hSZXNwb25zZVByb2R1Y3QgaW50ZXJmYWNlLlxuXHQqL1xuXHRmdW5jdGlvbiBpbnN0YW5jZU9mU2VhcmNoUmVzcG9uc2VQcm9kdWN0KHZhbHVlKSB7XG5cdFx0aWYgKCEoXCJpZFwiIGluIHZhbHVlKSB8fCB2YWx1ZVtcImlkXCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRpZiAoIShcInRpdGxlXCIgaW4gdmFsdWUpIHx8IHZhbHVlW1widGl0bGVcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdGlmICghKFwidXJsXCIgaW4gdmFsdWUpIHx8IHZhbHVlW1widXJsXCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHRmdW5jdGlvbiBTZWFyY2hSZXNwb25zZVByb2R1Y3RGcm9tSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIFNlYXJjaFJlc3BvbnNlUHJvZHVjdEZyb21KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIFNlYXJjaFJlc3BvbnNlUHJvZHVjdEZyb21KU09OVHlwZWQoanNvbiwgaWdub3JlRGlzY3JpbWluYXRvcikge1xuXHRcdGlmIChqc29uID09IG51bGwpIHJldHVybiBqc29uO1xuXHRcdHJldHVybiB7XG5cdFx0XHRcImF2ZXJhZ2VfcmF0aW5nXCI6IGpzb25bXCJhdmVyYWdlX3JhdGluZ1wiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcImF2ZXJhZ2VfcmF0aW5nXCJdLFxuXHRcdFx0XCJjb2xvcnNcIjoganNvbltcImNvbG9yc1wiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcImNvbG9yc1wiXSxcblx0XHRcdFwiZGVzY3JpcHRpb25cIjoganNvbltcImRlc2NyaXB0aW9uXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wiZGVzY3JpcHRpb25cIl0sXG5cdFx0XHRcImZpbHRlcnNcIjoganNvbltcImZpbHRlcnNcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IGpzb25bXCJmaWx0ZXJzXCJdLFxuXHRcdFx0XCJpZFwiOiBqc29uW1wiaWRcIl0sXG5cdFx0XHRcImltYWdlX3VybFwiOiBqc29uW1wiaW1hZ2VfdXJsXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wiaW1hZ2VfdXJsXCJdLFxuXHRcdFx0XCJpbWFnZV91cmxzXCI6IGpzb25bXCJpbWFnZV91cmxzXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wiaW1hZ2VfdXJsc1wiXSxcblx0XHRcdFwiaXNfZm9yX2dyaWRcIjoganNvbltcImlzX2Zvcl9ncmlkXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wiaXNfZm9yX2dyaWRcIl0sXG5cdFx0XHRcIm1ldGFkYXRhXCI6IGpzb25bXCJtZXRhZGF0YVwiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcIm1ldGFkYXRhXCJdLm1hcChMYWJlbFZhbHVlXzEuTGFiZWxWYWx1ZUZyb21KU09OKSxcblx0XHRcdFwibnVtYmVyX3Jldmlld3NcIjoganNvbltcIm51bWJlcl9yZXZpZXdzXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wibnVtYmVyX3Jldmlld3NcIl0sXG5cdFx0XHRcIm9yaWdpbmFsX3ByaWNlXCI6IGpzb25bXCJvcmlnaW5hbF9wcmljZVwiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcIm9yaWdpbmFsX3ByaWNlXCJdLFxuXHRcdFx0XCJzYWxlX3ByaWNlXCI6IGpzb25bXCJzYWxlX3ByaWNlXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wic2FsZV9wcmljZVwiXSxcblx0XHRcdFwic2l6ZXNcIjoganNvbltcInNpemVzXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wic2l6ZXNcIl0sXG5cdFx0XHRcInRpdGxlXCI6IGpzb25bXCJ0aXRsZVwiXSxcblx0XHRcdFwidXJsXCI6IGpzb25bXCJ1cmxcIl0sXG5cdFx0XHRcInJlc3BvbnNlX2lkXCI6IGpzb25bXCJyZXNwb25zZV9pZFwiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcInJlc3BvbnNlX2lkXCJdXG5cdFx0fTtcblx0fVxuXHRmdW5jdGlvbiBTZWFyY2hSZXNwb25zZVByb2R1Y3RUb0pTT04oanNvbikge1xuXHRcdHJldHVybiBTZWFyY2hSZXNwb25zZVByb2R1Y3RUb0pTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gU2VhcmNoUmVzcG9uc2VQcm9kdWN0VG9KU09OVHlwZWQodmFsdWUsIGlnbm9yZURpc2NyaW1pbmF0b3IgPSBmYWxzZSkge1xuXHRcdGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gdmFsdWU7XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwiYXZlcmFnZV9yYXRpbmdcIjogdmFsdWVbXCJhdmVyYWdlX3JhdGluZ1wiXSxcblx0XHRcdFwiY29sb3JzXCI6IHZhbHVlW1wiY29sb3JzXCJdLFxuXHRcdFx0XCJkZXNjcmlwdGlvblwiOiB2YWx1ZVtcImRlc2NyaXB0aW9uXCJdLFxuXHRcdFx0XCJmaWx0ZXJzXCI6IHZhbHVlW1wiZmlsdGVyc1wiXSxcblx0XHRcdFwiaWRcIjogdmFsdWVbXCJpZFwiXSxcblx0XHRcdFwiaW1hZ2VfdXJsXCI6IHZhbHVlW1wiaW1hZ2VfdXJsXCJdLFxuXHRcdFx0XCJpbWFnZV91cmxzXCI6IHZhbHVlW1wiaW1hZ2VfdXJsc1wiXSxcblx0XHRcdFwiaXNfZm9yX2dyaWRcIjogdmFsdWVbXCJpc19mb3JfZ3JpZFwiXSxcblx0XHRcdFwibWV0YWRhdGFcIjogdmFsdWVbXCJtZXRhZGF0YVwiXSA9PSBudWxsID8gdm9pZCAwIDogdmFsdWVbXCJtZXRhZGF0YVwiXS5tYXAoTGFiZWxWYWx1ZV8xLkxhYmVsVmFsdWVUb0pTT04pLFxuXHRcdFx0XCJudW1iZXJfcmV2aWV3c1wiOiB2YWx1ZVtcIm51bWJlcl9yZXZpZXdzXCJdLFxuXHRcdFx0XCJvcmlnaW5hbF9wcmljZVwiOiB2YWx1ZVtcIm9yaWdpbmFsX3ByaWNlXCJdLFxuXHRcdFx0XCJzYWxlX3ByaWNlXCI6IHZhbHVlW1wic2FsZV9wcmljZVwiXSxcblx0XHRcdFwic2l6ZXNcIjogdmFsdWVbXCJzaXplc1wiXSxcblx0XHRcdFwidGl0bGVcIjogdmFsdWVbXCJ0aXRsZVwiXSxcblx0XHRcdFwidXJsXCI6IHZhbHVlW1widXJsXCJdLFxuXHRcdFx0XCJyZXNwb25zZV9pZFwiOiB2YWx1ZVtcInJlc3BvbnNlX2lkXCJdXG5cdFx0fTtcblx0fVxufSkgfSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIC4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvUHJvZHVjdFNlYXJjaFJlc3BvbnNlLmpzXG52YXIgcmVxdWlyZV9Qcm9kdWN0U2VhcmNoUmVzcG9uc2UgPSAvKiBAX19QVVJFX18gKi8gX19jb21tb25KUyh7IFwiLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9Qcm9kdWN0U2VhcmNoUmVzcG9uc2UuanNcIjogKChleHBvcnRzKSA9PiB7XG5cdC8qKlxuXHQqIENvbW1lcmNlXG5cdCogTm8gZGVzY3JpcHRpb24gcHJvdmlkZWQgKGdlbmVyYXRlZCBieSBPcGVuYXBpIEdlbmVyYXRvciBodHRwczovL2dpdGh1Yi5jb20vb3BlbmFwaXRvb2xzL29wZW5hcGktZ2VuZXJhdG9yKVxuXHQqXG5cdCogVGhlIHZlcnNpb24gb2YgdGhlIE9wZW5BUEkgZG9jdW1lbnQ6IDEuMS4wXG5cdCpcblx0KlxuXHQqIE5PVEU6IFRoaXMgY2xhc3MgaXMgYXV0byBnZW5lcmF0ZWQgYnkgT3BlbkFQSSBHZW5lcmF0b3IgKGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaCkuXG5cdCogaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoXG5cdCogRG8gbm90IGVkaXQgdGhlIGNsYXNzIG1hbnVhbGx5LlxuXHQqL1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5cdGV4cG9ydHMuaW5zdGFuY2VPZlByb2R1Y3RTZWFyY2hSZXNwb25zZSA9IGluc3RhbmNlT2ZQcm9kdWN0U2VhcmNoUmVzcG9uc2U7XG5cdGV4cG9ydHMuUHJvZHVjdFNlYXJjaFJlc3BvbnNlRnJvbUpTT04gPSBQcm9kdWN0U2VhcmNoUmVzcG9uc2VGcm9tSlNPTjtcblx0ZXhwb3J0cy5Qcm9kdWN0U2VhcmNoUmVzcG9uc2VGcm9tSlNPTlR5cGVkID0gUHJvZHVjdFNlYXJjaFJlc3BvbnNlRnJvbUpTT05UeXBlZDtcblx0ZXhwb3J0cy5Qcm9kdWN0U2VhcmNoUmVzcG9uc2VUb0pTT04gPSBQcm9kdWN0U2VhcmNoUmVzcG9uc2VUb0pTT047XG5cdGV4cG9ydHMuUHJvZHVjdFNlYXJjaFJlc3BvbnNlVG9KU09OVHlwZWQgPSBQcm9kdWN0U2VhcmNoUmVzcG9uc2VUb0pTT05UeXBlZDtcblx0Y29uc3QgU2VhcmNoUmVzcG9uc2VQcm9kdWN0XzEgPSByZXF1aXJlX1NlYXJjaFJlc3BvbnNlUHJvZHVjdCgpO1xuXHQvKipcblx0KiBDaGVjayBpZiBhIGdpdmVuIG9iamVjdCBpbXBsZW1lbnRzIHRoZSBQcm9kdWN0U2VhcmNoUmVzcG9uc2UgaW50ZXJmYWNlLlxuXHQqL1xuXHRmdW5jdGlvbiBpbnN0YW5jZU9mUHJvZHVjdFNlYXJjaFJlc3BvbnNlKHZhbHVlKSB7XG5cdFx0aWYgKCEoXCJmaWx0ZXJzXCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wiZmlsdGVyc1wiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0aWYgKCEoXCJwcm9kdWN0c1wiIGluIHZhbHVlKSB8fCB2YWx1ZVtcInByb2R1Y3RzXCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHRmdW5jdGlvbiBQcm9kdWN0U2VhcmNoUmVzcG9uc2VGcm9tSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIFByb2R1Y3RTZWFyY2hSZXNwb25zZUZyb21KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIFByb2R1Y3RTZWFyY2hSZXNwb25zZUZyb21KU09OVHlwZWQoanNvbiwgaWdub3JlRGlzY3JpbWluYXRvcikge1xuXHRcdGlmIChqc29uID09IG51bGwpIHJldHVybiBqc29uO1xuXHRcdHJldHVybiB7XG5cdFx0XHRcImZpbHRlcnNcIjoganNvbltcImZpbHRlcnNcIl0sXG5cdFx0XHRcInByb2R1Y3RzXCI6IGpzb25bXCJwcm9kdWN0c1wiXS5tYXAoU2VhcmNoUmVzcG9uc2VQcm9kdWN0XzEuU2VhcmNoUmVzcG9uc2VQcm9kdWN0RnJvbUpTT04pLFxuXHRcdFx0XCJzZWFyY2hfcmVzcG9uc2VfaWRcIjoganNvbltcInNlYXJjaF9yZXNwb25zZV9pZFwiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcInNlYXJjaF9yZXNwb25zZV9pZFwiXVxuXHRcdH07XG5cdH1cblx0ZnVuY3Rpb24gUHJvZHVjdFNlYXJjaFJlc3BvbnNlVG9KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gUHJvZHVjdFNlYXJjaFJlc3BvbnNlVG9KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIFByb2R1Y3RTZWFyY2hSZXNwb25zZVRvSlNPTlR5cGVkKHZhbHVlLCBpZ25vcmVEaXNjcmltaW5hdG9yID0gZmFsc2UpIHtcblx0XHRpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIHZhbHVlO1xuXHRcdHJldHVybiB7XG5cdFx0XHRcImZpbHRlcnNcIjogdmFsdWVbXCJmaWx0ZXJzXCJdLFxuXHRcdFx0XCJwcm9kdWN0c1wiOiB2YWx1ZVtcInByb2R1Y3RzXCJdLm1hcChTZWFyY2hSZXNwb25zZVByb2R1Y3RfMS5TZWFyY2hSZXNwb25zZVByb2R1Y3RUb0pTT04pLFxuXHRcdFx0XCJzZWFyY2hfcmVzcG9uc2VfaWRcIjogdmFsdWVbXCJzZWFyY2hfcmVzcG9uc2VfaWRcIl1cblx0XHR9O1xuXHR9XG59KSB9KTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9Qcm9kdWN0U2VhcmNoUmVzcG9uc2VBdHRyaWJ1dGVzLmpzXG52YXIgcmVxdWlyZV9Qcm9kdWN0U2VhcmNoUmVzcG9uc2VBdHRyaWJ1dGVzID0gLyogQF9fUFVSRV9fICovIF9fY29tbW9uSlMoeyBcIi4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvUHJvZHVjdFNlYXJjaFJlc3BvbnNlQXR0cmlidXRlcy5qc1wiOiAoKGV4cG9ydHMpID0+IHtcblx0LyoqXG5cdCogQ29tbWVyY2Vcblx0KiBObyBkZXNjcmlwdGlvbiBwcm92aWRlZCAoZ2VuZXJhdGVkIGJ5IE9wZW5hcGkgR2VuZXJhdG9yIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuYXBpdG9vbHMvb3BlbmFwaS1nZW5lcmF0b3IpXG5cdCpcblx0KiBUaGUgdmVyc2lvbiBvZiB0aGUgT3BlbkFQSSBkb2N1bWVudDogMS4xLjBcblx0KlxuXHQqXG5cdCogTk9URTogVGhpcyBjbGFzcyBpcyBhdXRvIGdlbmVyYXRlZCBieSBPcGVuQVBJIEdlbmVyYXRvciAoaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoKS5cblx0KiBodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2hcblx0KiBEbyBub3QgZWRpdCB0aGUgY2xhc3MgbWFudWFsbHkuXG5cdCovXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcblx0ZXhwb3J0cy5pbnN0YW5jZU9mUHJvZHVjdFNlYXJjaFJlc3BvbnNlQXR0cmlidXRlcyA9IGluc3RhbmNlT2ZQcm9kdWN0U2VhcmNoUmVzcG9uc2VBdHRyaWJ1dGVzO1xuXHRleHBvcnRzLlByb2R1Y3RTZWFyY2hSZXNwb25zZUF0dHJpYnV0ZXNGcm9tSlNPTiA9IFByb2R1Y3RTZWFyY2hSZXNwb25zZUF0dHJpYnV0ZXNGcm9tSlNPTjtcblx0ZXhwb3J0cy5Qcm9kdWN0U2VhcmNoUmVzcG9uc2VBdHRyaWJ1dGVzRnJvbUpTT05UeXBlZCA9IFByb2R1Y3RTZWFyY2hSZXNwb25zZUF0dHJpYnV0ZXNGcm9tSlNPTlR5cGVkO1xuXHRleHBvcnRzLlByb2R1Y3RTZWFyY2hSZXNwb25zZUF0dHJpYnV0ZXNUb0pTT04gPSBQcm9kdWN0U2VhcmNoUmVzcG9uc2VBdHRyaWJ1dGVzVG9KU09OO1xuXHRleHBvcnRzLlByb2R1Y3RTZWFyY2hSZXNwb25zZUF0dHJpYnV0ZXNUb0pTT05UeXBlZCA9IFByb2R1Y3RTZWFyY2hSZXNwb25zZUF0dHJpYnV0ZXNUb0pTT05UeXBlZDtcblx0LyoqXG5cdCogQ2hlY2sgaWYgYSBnaXZlbiBvYmplY3QgaW1wbGVtZW50cyB0aGUgUHJvZHVjdFNlYXJjaFJlc3BvbnNlQXR0cmlidXRlcyBpbnRlcmZhY2UuXG5cdCovXG5cdGZ1bmN0aW9uIGluc3RhbmNlT2ZQcm9kdWN0U2VhcmNoUmVzcG9uc2VBdHRyaWJ1dGVzKHZhbHVlKSB7XG5cdFx0aWYgKCEoXCJnZW5lcmF0ZWRfcXVlcnlcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJnZW5lcmF0ZWRfcXVlcnlcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdGlmICghKFwicHJvZHVjdF9jb3VudFwiIGluIHZhbHVlKSB8fCB2YWx1ZVtcInByb2R1Y3RfY291bnRcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdGZ1bmN0aW9uIFByb2R1Y3RTZWFyY2hSZXNwb25zZUF0dHJpYnV0ZXNGcm9tSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIFByb2R1Y3RTZWFyY2hSZXNwb25zZUF0dHJpYnV0ZXNGcm9tSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBQcm9kdWN0U2VhcmNoUmVzcG9uc2VBdHRyaWJ1dGVzRnJvbUpTT05UeXBlZChqc29uLCBpZ25vcmVEaXNjcmltaW5hdG9yKSB7XG5cdFx0aWYgKGpzb24gPT0gbnVsbCkgcmV0dXJuIGpzb247XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwiZ2VuZXJhdGVkX3F1ZXJ5XCI6IGpzb25bXCJnZW5lcmF0ZWRfcXVlcnlcIl0sXG5cdFx0XHRcInByb2R1Y3RfY291bnRcIjoganNvbltcInByb2R1Y3RfY291bnRcIl1cblx0XHR9O1xuXHR9XG5cdGZ1bmN0aW9uIFByb2R1Y3RTZWFyY2hSZXNwb25zZUF0dHJpYnV0ZXNUb0pTT04oanNvbikge1xuXHRcdHJldHVybiBQcm9kdWN0U2VhcmNoUmVzcG9uc2VBdHRyaWJ1dGVzVG9KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIFByb2R1Y3RTZWFyY2hSZXNwb25zZUF0dHJpYnV0ZXNUb0pTT05UeXBlZCh2YWx1ZSwgaWdub3JlRGlzY3JpbWluYXRvciA9IGZhbHNlKSB7XG5cdFx0aWYgKHZhbHVlID09IG51bGwpIHJldHVybiB2YWx1ZTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0XCJnZW5lcmF0ZWRfcXVlcnlcIjogdmFsdWVbXCJnZW5lcmF0ZWRfcXVlcnlcIl0sXG5cdFx0XHRcInByb2R1Y3RfY291bnRcIjogdmFsdWVbXCJwcm9kdWN0X2NvdW50XCJdXG5cdFx0fTtcblx0fVxufSkgfSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIC4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvUmVwb3J0Q29udGVudC5qc1xudmFyIHJlcXVpcmVfUmVwb3J0Q29udGVudCA9IC8qIEBfX1BVUkVfXyAqLyBfX2NvbW1vbkpTKHsgXCIuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL1JlcG9ydENvbnRlbnQuanNcIjogKChleHBvcnRzKSA9PiB7XG5cdC8qKlxuXHQqIENvbW1lcmNlXG5cdCogTm8gZGVzY3JpcHRpb24gcHJvdmlkZWQgKGdlbmVyYXRlZCBieSBPcGVuYXBpIEdlbmVyYXRvciBodHRwczovL2dpdGh1Yi5jb20vb3BlbmFwaXRvb2xzL29wZW5hcGktZ2VuZXJhdG9yKVxuXHQqXG5cdCogVGhlIHZlcnNpb24gb2YgdGhlIE9wZW5BUEkgZG9jdW1lbnQ6IDEuMS4wXG5cdCpcblx0KlxuXHQqIE5PVEU6IFRoaXMgY2xhc3MgaXMgYXV0byBnZW5lcmF0ZWQgYnkgT3BlbkFQSSBHZW5lcmF0b3IgKGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaCkuXG5cdCogaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoXG5cdCogRG8gbm90IGVkaXQgdGhlIGNsYXNzIG1hbnVhbGx5LlxuXHQqL1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5cdGV4cG9ydHMuaW5zdGFuY2VPZlJlcG9ydENvbnRlbnQgPSBpbnN0YW5jZU9mUmVwb3J0Q29udGVudDtcblx0ZXhwb3J0cy5SZXBvcnRDb250ZW50RnJvbUpTT04gPSBSZXBvcnRDb250ZW50RnJvbUpTT047XG5cdGV4cG9ydHMuUmVwb3J0Q29udGVudEZyb21KU09OVHlwZWQgPSBSZXBvcnRDb250ZW50RnJvbUpTT05UeXBlZDtcblx0ZXhwb3J0cy5SZXBvcnRDb250ZW50VG9KU09OID0gUmVwb3J0Q29udGVudFRvSlNPTjtcblx0ZXhwb3J0cy5SZXBvcnRDb250ZW50VG9KU09OVHlwZWQgPSBSZXBvcnRDb250ZW50VG9KU09OVHlwZWQ7XG5cdC8qKlxuXHQqIENoZWNrIGlmIGEgZ2l2ZW4gb2JqZWN0IGltcGxlbWVudHMgdGhlIFJlcG9ydENvbnRlbnQgaW50ZXJmYWNlLlxuXHQqL1xuXHRmdW5jdGlvbiBpbnN0YW5jZU9mUmVwb3J0Q29udGVudCh2YWx1ZSkge1xuXHRcdGlmICghKFwiaWRcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJpZFwiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0ZnVuY3Rpb24gUmVwb3J0Q29udGVudEZyb21KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gUmVwb3J0Q29udGVudEZyb21KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIFJlcG9ydENvbnRlbnRGcm9tSlNPTlR5cGVkKGpzb24sIGlnbm9yZURpc2NyaW1pbmF0b3IpIHtcblx0XHRpZiAoanNvbiA9PSBudWxsKSByZXR1cm4ganNvbjtcblx0XHRyZXR1cm4ge1xuXHRcdFx0XCJjb250ZW50XCI6IGpzb25bXCJjb250ZW50XCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wiY29udGVudFwiXSxcblx0XHRcdFwiaWRcIjoganNvbltcImlkXCJdXG5cdFx0fTtcblx0fVxuXHRmdW5jdGlvbiBSZXBvcnRDb250ZW50VG9KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gUmVwb3J0Q29udGVudFRvSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBSZXBvcnRDb250ZW50VG9KU09OVHlwZWQodmFsdWUsIGlnbm9yZURpc2NyaW1pbmF0b3IgPSBmYWxzZSkge1xuXHRcdGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gdmFsdWU7XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwiY29udGVudFwiOiB2YWx1ZVtcImNvbnRlbnRcIl0sXG5cdFx0XHRcImlkXCI6IHZhbHVlW1wiaWRcIl1cblx0XHR9O1xuXHR9XG59KSB9KTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9UdXJuSW5mb1ByZXZVc2VyRXZlbnQuanNcbnZhciByZXF1aXJlX1R1cm5JbmZvUHJldlVzZXJFdmVudCA9IC8qIEBfX1BVUkVfXyAqLyBfX2NvbW1vbkpTKHsgXCIuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL1R1cm5JbmZvUHJldlVzZXJFdmVudC5qc1wiOiAoKGV4cG9ydHMpID0+IHtcblx0LyoqXG5cdCogQ29tbWVyY2Vcblx0KiBObyBkZXNjcmlwdGlvbiBwcm92aWRlZCAoZ2VuZXJhdGVkIGJ5IE9wZW5hcGkgR2VuZXJhdG9yIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuYXBpdG9vbHMvb3BlbmFwaS1nZW5lcmF0b3IpXG5cdCpcblx0KiBUaGUgdmVyc2lvbiBvZiB0aGUgT3BlbkFQSSBkb2N1bWVudDogMS4xLjBcblx0KlxuXHQqXG5cdCogTk9URTogVGhpcyBjbGFzcyBpcyBhdXRvIGdlbmVyYXRlZCBieSBPcGVuQVBJIEdlbmVyYXRvciAoaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoKS5cblx0KiBodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2hcblx0KiBEbyBub3QgZWRpdCB0aGUgY2xhc3MgbWFudWFsbHkuXG5cdCovXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcblx0ZXhwb3J0cy5pbnN0YW5jZU9mVHVybkluZm9QcmV2VXNlckV2ZW50ID0gaW5zdGFuY2VPZlR1cm5JbmZvUHJldlVzZXJFdmVudDtcblx0ZXhwb3J0cy5UdXJuSW5mb1ByZXZVc2VyRXZlbnRGcm9tSlNPTiA9IFR1cm5JbmZvUHJldlVzZXJFdmVudEZyb21KU09OO1xuXHRleHBvcnRzLlR1cm5JbmZvUHJldlVzZXJFdmVudEZyb21KU09OVHlwZWQgPSBUdXJuSW5mb1ByZXZVc2VyRXZlbnRGcm9tSlNPTlR5cGVkO1xuXHRleHBvcnRzLlR1cm5JbmZvUHJldlVzZXJFdmVudFRvSlNPTiA9IFR1cm5JbmZvUHJldlVzZXJFdmVudFRvSlNPTjtcblx0ZXhwb3J0cy5UdXJuSW5mb1ByZXZVc2VyRXZlbnRUb0pTT05UeXBlZCA9IFR1cm5JbmZvUHJldlVzZXJFdmVudFRvSlNPTlR5cGVkO1xuXHQvKipcblx0KiBDaGVjayBpZiBhIGdpdmVuIG9iamVjdCBpbXBsZW1lbnRzIHRoZSBUdXJuSW5mb1ByZXZVc2VyRXZlbnQgaW50ZXJmYWNlLlxuXHQqL1xuXHRmdW5jdGlvbiBpbnN0YW5jZU9mVHVybkluZm9QcmV2VXNlckV2ZW50KHZhbHVlKSB7XG5cdFx0aWYgKCEoXCJjYXRlZ29yeVwiIGluIHZhbHVlKSB8fCB2YWx1ZVtcImNhdGVnb3J5XCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRpZiAoIShcImlkXCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wiaWRcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdGZ1bmN0aW9uIFR1cm5JbmZvUHJldlVzZXJFdmVudEZyb21KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gVHVybkluZm9QcmV2VXNlckV2ZW50RnJvbUpTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gVHVybkluZm9QcmV2VXNlckV2ZW50RnJvbUpTT05UeXBlZChqc29uLCBpZ25vcmVEaXNjcmltaW5hdG9yKSB7XG5cdFx0aWYgKGpzb24gPT0gbnVsbCkgcmV0dXJuIGpzb247XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwiY2F0ZWdvcnlcIjoganNvbltcImNhdGVnb3J5XCJdLFxuXHRcdFx0XCJpZFwiOiBqc29uW1wiaWRcIl1cblx0XHR9O1xuXHR9XG5cdGZ1bmN0aW9uIFR1cm5JbmZvUHJldlVzZXJFdmVudFRvSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIFR1cm5JbmZvUHJldlVzZXJFdmVudFRvSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBUdXJuSW5mb1ByZXZVc2VyRXZlbnRUb0pTT05UeXBlZCh2YWx1ZSwgaWdub3JlRGlzY3JpbWluYXRvciA9IGZhbHNlKSB7XG5cdFx0aWYgKHZhbHVlID09IG51bGwpIHJldHVybiB2YWx1ZTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0XCJjYXRlZ29yeVwiOiB2YWx1ZVtcImNhdGVnb3J5XCJdLFxuXHRcdFx0XCJpZFwiOiB2YWx1ZVtcImlkXCJdXG5cdFx0fTtcblx0fVxufSkgfSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIC4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvVHVybkluZm8uanNcbnZhciByZXF1aXJlX1R1cm5JbmZvID0gLyogQF9fUFVSRV9fICovIF9fY29tbW9uSlMoeyBcIi4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvVHVybkluZm8uanNcIjogKChleHBvcnRzKSA9PiB7XG5cdC8qKlxuXHQqIENvbW1lcmNlXG5cdCogTm8gZGVzY3JpcHRpb24gcHJvdmlkZWQgKGdlbmVyYXRlZCBieSBPcGVuYXBpIEdlbmVyYXRvciBodHRwczovL2dpdGh1Yi5jb20vb3BlbmFwaXRvb2xzL29wZW5hcGktZ2VuZXJhdG9yKVxuXHQqXG5cdCogVGhlIHZlcnNpb24gb2YgdGhlIE9wZW5BUEkgZG9jdW1lbnQ6IDEuMS4wXG5cdCpcblx0KlxuXHQqIE5PVEU6IFRoaXMgY2xhc3MgaXMgYXV0byBnZW5lcmF0ZWQgYnkgT3BlbkFQSSBHZW5lcmF0b3IgKGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaCkuXG5cdCogaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoXG5cdCogRG8gbm90IGVkaXQgdGhlIGNsYXNzIG1hbnVhbGx5LlxuXHQqL1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5cdGV4cG9ydHMuaW5zdGFuY2VPZlR1cm5JbmZvID0gaW5zdGFuY2VPZlR1cm5JbmZvO1xuXHRleHBvcnRzLlR1cm5JbmZvRnJvbUpTT04gPSBUdXJuSW5mb0Zyb21KU09OO1xuXHRleHBvcnRzLlR1cm5JbmZvRnJvbUpTT05UeXBlZCA9IFR1cm5JbmZvRnJvbUpTT05UeXBlZDtcblx0ZXhwb3J0cy5UdXJuSW5mb1RvSlNPTiA9IFR1cm5JbmZvVG9KU09OO1xuXHRleHBvcnRzLlR1cm5JbmZvVG9KU09OVHlwZWQgPSBUdXJuSW5mb1RvSlNPTlR5cGVkO1xuXHRjb25zdCBSZXBvcnRDb250ZW50XzEgPSByZXF1aXJlX1JlcG9ydENvbnRlbnQoKTtcblx0Y29uc3QgVHVybkluZm9QcmV2VXNlckV2ZW50XzEgPSByZXF1aXJlX1R1cm5JbmZvUHJldlVzZXJFdmVudCgpO1xuXHQvKipcblx0KiBDaGVjayBpZiBhIGdpdmVuIG9iamVjdCBpbXBsZW1lbnRzIHRoZSBUdXJuSW5mbyBpbnRlcmZhY2UuXG5cdCovXG5cdGZ1bmN0aW9uIGluc3RhbmNlT2ZUdXJuSW5mbyh2YWx1ZSkge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdGZ1bmN0aW9uIFR1cm5JbmZvRnJvbUpTT04oanNvbikge1xuXHRcdHJldHVybiBUdXJuSW5mb0Zyb21KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIFR1cm5JbmZvRnJvbUpTT05UeXBlZChqc29uLCBpZ25vcmVEaXNjcmltaW5hdG9yKSB7XG5cdFx0aWYgKGpzb24gPT0gbnVsbCkgcmV0dXJuIGpzb247XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwibWVzc2FnZV9jb3JyZWN0aW9uXCI6IGpzb25bXCJtZXNzYWdlX2NvcnJlY3Rpb25cIl0gPT0gbnVsbCA/IHZvaWQgMCA6IGpzb25bXCJtZXNzYWdlX2NvcnJlY3Rpb25cIl0sXG5cdFx0XHRcIm1lc3NhZ2VzXCI6IGpzb25bXCJtZXNzYWdlc1wiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcIm1lc3NhZ2VzXCJdLm1hcChSZXBvcnRDb250ZW50XzEuUmVwb3J0Q29udGVudEZyb21KU09OKSxcblx0XHRcdFwicHJldl91c2VyX2V2ZW50XCI6IGpzb25bXCJwcmV2X3VzZXJfZXZlbnRcIl0gPT0gbnVsbCA/IHZvaWQgMCA6ICgwLCBUdXJuSW5mb1ByZXZVc2VyRXZlbnRfMS5UdXJuSW5mb1ByZXZVc2VyRXZlbnRGcm9tSlNPTikoanNvbltcInByZXZfdXNlcl9ldmVudFwiXSksXG5cdFx0XHRcInN1Z2dlc3Rpb25zXCI6IGpzb25bXCJzdWdnZXN0aW9uc1wiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcInN1Z2dlc3Rpb25zXCJdLm1hcChSZXBvcnRDb250ZW50XzEuUmVwb3J0Q29udGVudEZyb21KU09OKSxcblx0XHRcdFwic3VnZ2VzdGlvbnNfY29ycmVjdGlvblwiOiBqc29uW1wic3VnZ2VzdGlvbnNfY29ycmVjdGlvblwiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcInN1Z2dlc3Rpb25zX2NvcnJlY3Rpb25cIl0sXG5cdFx0XHRcInR1cm5faWR4XCI6IGpzb25bXCJ0dXJuX2lkeFwiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcInR1cm5faWR4XCJdXG5cdFx0fTtcblx0fVxuXHRmdW5jdGlvbiBUdXJuSW5mb1RvSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIFR1cm5JbmZvVG9KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIFR1cm5JbmZvVG9KU09OVHlwZWQodmFsdWUsIGlnbm9yZURpc2NyaW1pbmF0b3IgPSBmYWxzZSkge1xuXHRcdGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gdmFsdWU7XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwibWVzc2FnZV9jb3JyZWN0aW9uXCI6IHZhbHVlW1wibWVzc2FnZV9jb3JyZWN0aW9uXCJdLFxuXHRcdFx0XCJtZXNzYWdlc1wiOiB2YWx1ZVtcIm1lc3NhZ2VzXCJdID09IG51bGwgPyB2b2lkIDAgOiB2YWx1ZVtcIm1lc3NhZ2VzXCJdLm1hcChSZXBvcnRDb250ZW50XzEuUmVwb3J0Q29udGVudFRvSlNPTiksXG5cdFx0XHRcInByZXZfdXNlcl9ldmVudFwiOiAoMCwgVHVybkluZm9QcmV2VXNlckV2ZW50XzEuVHVybkluZm9QcmV2VXNlckV2ZW50VG9KU09OKSh2YWx1ZVtcInByZXZfdXNlcl9ldmVudFwiXSksXG5cdFx0XHRcInN1Z2dlc3Rpb25zXCI6IHZhbHVlW1wic3VnZ2VzdGlvbnNcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IHZhbHVlW1wic3VnZ2VzdGlvbnNcIl0ubWFwKFJlcG9ydENvbnRlbnRfMS5SZXBvcnRDb250ZW50VG9KU09OKSxcblx0XHRcdFwic3VnZ2VzdGlvbnNfY29ycmVjdGlvblwiOiB2YWx1ZVtcInN1Z2dlc3Rpb25zX2NvcnJlY3Rpb25cIl0sXG5cdFx0XHRcInR1cm5faWR4XCI6IHZhbHVlW1widHVybl9pZHhcIl1cblx0XHR9O1xuXHR9XG59KSB9KTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9SZXBvcnRTZXNzaW9uUmVxdWVzdC5qc1xudmFyIHJlcXVpcmVfUmVwb3J0U2Vzc2lvblJlcXVlc3QgPSAvKiBAX19QVVJFX18gKi8gX19jb21tb25KUyh7IFwiLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9SZXBvcnRTZXNzaW9uUmVxdWVzdC5qc1wiOiAoKGV4cG9ydHMpID0+IHtcblx0LyoqXG5cdCogQ29tbWVyY2Vcblx0KiBObyBkZXNjcmlwdGlvbiBwcm92aWRlZCAoZ2VuZXJhdGVkIGJ5IE9wZW5hcGkgR2VuZXJhdG9yIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuYXBpdG9vbHMvb3BlbmFwaS1nZW5lcmF0b3IpXG5cdCpcblx0KiBUaGUgdmVyc2lvbiBvZiB0aGUgT3BlbkFQSSBkb2N1bWVudDogMS4xLjBcblx0KlxuXHQqXG5cdCogTk9URTogVGhpcyBjbGFzcyBpcyBhdXRvIGdlbmVyYXRlZCBieSBPcGVuQVBJIEdlbmVyYXRvciAoaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoKS5cblx0KiBodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2hcblx0KiBEbyBub3QgZWRpdCB0aGUgY2xhc3MgbWFudWFsbHkuXG5cdCovXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcblx0ZXhwb3J0cy5SZXBvcnRTZXNzaW9uUmVxdWVzdFJlcG9ydFR5cGVFbnVtID0gZXhwb3J0cy5SZXBvcnRTZXNzaW9uUmVxdWVzdFJlcG9ydFByaW9yaXR5RW51bSA9IHZvaWQgMDtcblx0ZXhwb3J0cy5pbnN0YW5jZU9mUmVwb3J0U2Vzc2lvblJlcXVlc3QgPSBpbnN0YW5jZU9mUmVwb3J0U2Vzc2lvblJlcXVlc3Q7XG5cdGV4cG9ydHMuUmVwb3J0U2Vzc2lvblJlcXVlc3RGcm9tSlNPTiA9IFJlcG9ydFNlc3Npb25SZXF1ZXN0RnJvbUpTT047XG5cdGV4cG9ydHMuUmVwb3J0U2Vzc2lvblJlcXVlc3RGcm9tSlNPTlR5cGVkID0gUmVwb3J0U2Vzc2lvblJlcXVlc3RGcm9tSlNPTlR5cGVkO1xuXHRleHBvcnRzLlJlcG9ydFNlc3Npb25SZXF1ZXN0VG9KU09OID0gUmVwb3J0U2Vzc2lvblJlcXVlc3RUb0pTT047XG5cdGV4cG9ydHMuUmVwb3J0U2Vzc2lvblJlcXVlc3RUb0pTT05UeXBlZCA9IFJlcG9ydFNlc3Npb25SZXF1ZXN0VG9KU09OVHlwZWQ7XG5cdGNvbnN0IFR1cm5JbmZvXzEgPSByZXF1aXJlX1R1cm5JbmZvKCk7XG5cdC8qKlxuXHQqIEBleHBvcnRcblx0KiBAZW51bSB7c3RyaW5nfVxuXHQqL1xuXHR2YXIgUmVwb3J0U2Vzc2lvblJlcXVlc3RSZXBvcnRQcmlvcml0eUVudW07XG5cdChmdW5jdGlvbihSZXBvcnRTZXNzaW9uUmVxdWVzdFJlcG9ydFByaW9yaXR5RW51bSQxKSB7XG5cdFx0UmVwb3J0U2Vzc2lvblJlcXVlc3RSZXBvcnRQcmlvcml0eUVudW0kMVtcIlAwXCJdID0gXCJwMFwiO1xuXHRcdFJlcG9ydFNlc3Npb25SZXF1ZXN0UmVwb3J0UHJpb3JpdHlFbnVtJDFbXCJQMVwiXSA9IFwicDFcIjtcblx0XHRSZXBvcnRTZXNzaW9uUmVxdWVzdFJlcG9ydFByaW9yaXR5RW51bSQxW1wiUDJcIl0gPSBcInAyXCI7XG5cdFx0UmVwb3J0U2Vzc2lvblJlcXVlc3RSZXBvcnRQcmlvcml0eUVudW0kMVtcIlAzXCJdID0gXCJwM1wiO1xuXHRcdFJlcG9ydFNlc3Npb25SZXF1ZXN0UmVwb3J0UHJpb3JpdHlFbnVtJDFbXCJOb1ByaW9yaXR5XCJdID0gXCJubyBwcmlvcml0eVwiO1xuXHR9KShSZXBvcnRTZXNzaW9uUmVxdWVzdFJlcG9ydFByaW9yaXR5RW51bSB8fCAoZXhwb3J0cy5SZXBvcnRTZXNzaW9uUmVxdWVzdFJlcG9ydFByaW9yaXR5RW51bSA9IFJlcG9ydFNlc3Npb25SZXF1ZXN0UmVwb3J0UHJpb3JpdHlFbnVtID0ge30pKTtcblx0LyoqXG5cdCogQGV4cG9ydFxuXHQqIEBlbnVtIHtzdHJpbmd9XG5cdCovXG5cdHZhciBSZXBvcnRTZXNzaW9uUmVxdWVzdFJlcG9ydFR5cGVFbnVtO1xuXHQoZnVuY3Rpb24oUmVwb3J0U2Vzc2lvblJlcXVlc3RSZXBvcnRUeXBlRW51bSQxKSB7XG5cdFx0UmVwb3J0U2Vzc2lvblJlcXVlc3RSZXBvcnRUeXBlRW51bSQxW1wiTWVzc2FnZVwiXSA9IFwibWVzc2FnZVwiO1xuXHRcdFJlcG9ydFNlc3Npb25SZXF1ZXN0UmVwb3J0VHlwZUVudW0kMVtcIlN1Z2dlc3Rpb25cIl0gPSBcInN1Z2dlc3Rpb25cIjtcblx0XHRSZXBvcnRTZXNzaW9uUmVxdWVzdFJlcG9ydFR5cGVFbnVtJDFbXCJTZXNzaW9uXCJdID0gXCJzZXNzaW9uXCI7XG5cdFx0UmVwb3J0U2Vzc2lvblJlcXVlc3RSZXBvcnRUeXBlRW51bSQxW1wiVHVyblwiXSA9IFwidHVyblwiO1xuXHR9KShSZXBvcnRTZXNzaW9uUmVxdWVzdFJlcG9ydFR5cGVFbnVtIHx8IChleHBvcnRzLlJlcG9ydFNlc3Npb25SZXF1ZXN0UmVwb3J0VHlwZUVudW0gPSBSZXBvcnRTZXNzaW9uUmVxdWVzdFJlcG9ydFR5cGVFbnVtID0ge30pKTtcblx0LyoqXG5cdCogQ2hlY2sgaWYgYSBnaXZlbiBvYmplY3QgaW1wbGVtZW50cyB0aGUgUmVwb3J0U2Vzc2lvblJlcXVlc3QgaW50ZXJmYWNlLlxuXHQqL1xuXHRmdW5jdGlvbiBpbnN0YW5jZU9mUmVwb3J0U2Vzc2lvblJlcXVlc3QodmFsdWUpIHtcblx0XHRpZiAoIShcInVzZXJfaWRcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJ1c2VyX2lkXCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHRmdW5jdGlvbiBSZXBvcnRTZXNzaW9uUmVxdWVzdEZyb21KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gUmVwb3J0U2Vzc2lvblJlcXVlc3RGcm9tSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBSZXBvcnRTZXNzaW9uUmVxdWVzdEZyb21KU09OVHlwZWQoanNvbiwgaWdub3JlRGlzY3JpbWluYXRvcikge1xuXHRcdGlmIChqc29uID09IG51bGwpIHJldHVybiBqc29uO1xuXHRcdHJldHVybiB7XG5cdFx0XHRcImNvcnJlY3Rfc2Vzc2lvblwiOiBqc29uW1wiY29ycmVjdF9zZXNzaW9uXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wiY29ycmVjdF9zZXNzaW9uXCJdLFxuXHRcdFx0XCJjb3JyZWN0ZWRcIjoganNvbltcImNvcnJlY3RlZFwiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcImNvcnJlY3RlZFwiXSxcblx0XHRcdFwib3JnX3Nob3J0X25hbWVcIjoganNvbltcIm9yZ19zaG9ydF9uYW1lXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wib3JnX3Nob3J0X25hbWVcIl0sXG5cdFx0XHRcInJlYXNvblwiOiBqc29uW1wicmVhc29uXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wicmVhc29uXCJdLFxuXHRcdFx0XCJyZXBvcnRfcHJpb3JpdHlcIjoganNvbltcInJlcG9ydF9wcmlvcml0eVwiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcInJlcG9ydF9wcmlvcml0eVwiXSxcblx0XHRcdFwicmVwb3J0X3R5cGVcIjoganNvbltcInJlcG9ydF90eXBlXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wicmVwb3J0X3R5cGVcIl0sXG5cdFx0XHRcInJlcG9ydGVkX2J5XCI6IGpzb25bXCJyZXBvcnRlZF9ieVwiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcInJlcG9ydGVkX2J5XCJdLFxuXHRcdFx0XCJ0dXJuX2luZm9cIjoganNvbltcInR1cm5faW5mb1wiXSA9PSBudWxsID8gdm9pZCAwIDogKDAsIFR1cm5JbmZvXzEuVHVybkluZm9Gcm9tSlNPTikoanNvbltcInR1cm5faW5mb1wiXSksXG5cdFx0XHRcInVzZXJfaWRcIjoganNvbltcInVzZXJfaWRcIl1cblx0XHR9O1xuXHR9XG5cdGZ1bmN0aW9uIFJlcG9ydFNlc3Npb25SZXF1ZXN0VG9KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gUmVwb3J0U2Vzc2lvblJlcXVlc3RUb0pTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gUmVwb3J0U2Vzc2lvblJlcXVlc3RUb0pTT05UeXBlZCh2YWx1ZSwgaWdub3JlRGlzY3JpbWluYXRvciA9IGZhbHNlKSB7XG5cdFx0aWYgKHZhbHVlID09IG51bGwpIHJldHVybiB2YWx1ZTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0XCJjb3JyZWN0X3Nlc3Npb25cIjogdmFsdWVbXCJjb3JyZWN0X3Nlc3Npb25cIl0sXG5cdFx0XHRcImNvcnJlY3RlZFwiOiB2YWx1ZVtcImNvcnJlY3RlZFwiXSxcblx0XHRcdFwib3JnX3Nob3J0X25hbWVcIjogdmFsdWVbXCJvcmdfc2hvcnRfbmFtZVwiXSxcblx0XHRcdFwicmVhc29uXCI6IHZhbHVlW1wicmVhc29uXCJdLFxuXHRcdFx0XCJyZXBvcnRfcHJpb3JpdHlcIjogdmFsdWVbXCJyZXBvcnRfcHJpb3JpdHlcIl0sXG5cdFx0XHRcInJlcG9ydF90eXBlXCI6IHZhbHVlW1wicmVwb3J0X3R5cGVcIl0sXG5cdFx0XHRcInJlcG9ydGVkX2J5XCI6IHZhbHVlW1wicmVwb3J0ZWRfYnlcIl0sXG5cdFx0XHRcInR1cm5faW5mb1wiOiAoMCwgVHVybkluZm9fMS5UdXJuSW5mb1RvSlNPTikodmFsdWVbXCJ0dXJuX2luZm9cIl0pLFxuXHRcdFx0XCJ1c2VyX2lkXCI6IHZhbHVlW1widXNlcl9pZFwiXVxuXHRcdH07XG5cdH1cbn0pIH0pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiAuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL1Jlc3BvbnNlQ2F0ZWdvcnkuanNcbnZhciByZXF1aXJlX1Jlc3BvbnNlQ2F0ZWdvcnkgPSAvKiBAX19QVVJFX18gKi8gX19jb21tb25KUyh7IFwiLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9SZXNwb25zZUNhdGVnb3J5LmpzXCI6ICgoZXhwb3J0cykgPT4ge1xuXHQvKipcblx0KiBDb21tZXJjZVxuXHQqIE5vIGRlc2NyaXB0aW9uIHByb3ZpZGVkIChnZW5lcmF0ZWQgYnkgT3BlbmFwaSBHZW5lcmF0b3IgaHR0cHM6Ly9naXRodWIuY29tL29wZW5hcGl0b29scy9vcGVuYXBpLWdlbmVyYXRvcilcblx0KlxuXHQqIFRoZSB2ZXJzaW9uIG9mIHRoZSBPcGVuQVBJIGRvY3VtZW50OiAxLjEuMFxuXHQqXG5cdCpcblx0KiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IE9wZW5BUEkgR2VuZXJhdG9yIChodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2gpLlxuXHQqIGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaFxuXHQqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cblx0Ki9cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuXHRleHBvcnRzLlJlc3BvbnNlQ2F0ZWdvcnkgPSB2b2lkIDA7XG5cdGV4cG9ydHMuaW5zdGFuY2VPZlJlc3BvbnNlQ2F0ZWdvcnkgPSBpbnN0YW5jZU9mUmVzcG9uc2VDYXRlZ29yeTtcblx0ZXhwb3J0cy5SZXNwb25zZUNhdGVnb3J5RnJvbUpTT04gPSBSZXNwb25zZUNhdGVnb3J5RnJvbUpTT047XG5cdGV4cG9ydHMuUmVzcG9uc2VDYXRlZ29yeUZyb21KU09OVHlwZWQgPSBSZXNwb25zZUNhdGVnb3J5RnJvbUpTT05UeXBlZDtcblx0ZXhwb3J0cy5SZXNwb25zZUNhdGVnb3J5VG9KU09OID0gUmVzcG9uc2VDYXRlZ29yeVRvSlNPTjtcblx0ZXhwb3J0cy5SZXNwb25zZUNhdGVnb3J5VG9KU09OVHlwZWQgPSBSZXNwb25zZUNhdGVnb3J5VG9KU09OVHlwZWQ7XG5cdC8qKlxuXHQqXG5cdCogQGV4cG9ydFxuXHQqIEBlbnVtIHtzdHJpbmd9XG5cdCovXG5cdHZhciBSZXNwb25zZUNhdGVnb3J5O1xuXHQoZnVuY3Rpb24oUmVzcG9uc2VDYXRlZ29yeSQxKSB7XG5cdFx0UmVzcG9uc2VDYXRlZ29yeSQxW1wiVGV4dFwiXSA9IFwidGV4dFwiO1xuXHRcdFJlc3BvbnNlQ2F0ZWdvcnkkMVtcIlByb2R1Y3RcIl0gPSBcInByb2R1Y3RcIjtcblx0XHRSZXNwb25zZUNhdGVnb3J5JDFbXCJSZXZpZXdcIl0gPSBcInJldmlld1wiO1xuXHRcdFJlc3BvbnNlQ2F0ZWdvcnkkMVtcIk5vbmVcIl0gPSBcIm5vbmVcIjtcblx0XHRSZXNwb25zZUNhdGVnb3J5JDFbXCJTZXBhcmF0b3JcIl0gPSBcInNlcGFyYXRvclwiO1xuXHRcdFJlc3BvbnNlQ2F0ZWdvcnkkMVtcIlBhZ2VcIl0gPSBcInBhZ2VcIjtcblx0XHRSZXNwb25zZUNhdGVnb3J5JDFbXCJGb3JtXCJdID0gXCJmb3JtXCI7XG5cdFx0UmVzcG9uc2VDYXRlZ29yeSQxW1wiUHJvZHVjdFNlYXJjaFwiXSA9IFwicHJvZHVjdF9zZWFyY2hcIjtcblx0XHRSZXNwb25zZUNhdGVnb3J5JDFbXCJPcmRlclwiXSA9IFwib3JkZXJcIjtcblx0XHRSZXNwb25zZUNhdGVnb3J5JDFbXCJQcm9kdWN0U2VhcmNoRmlsdGVyXCJdID0gXCJwcm9kdWN0X3NlYXJjaF9maWx0ZXJcIjtcblx0fSkoUmVzcG9uc2VDYXRlZ29yeSB8fCAoZXhwb3J0cy5SZXNwb25zZUNhdGVnb3J5ID0gUmVzcG9uc2VDYXRlZ29yeSA9IHt9KSk7XG5cdGZ1bmN0aW9uIGluc3RhbmNlT2ZSZXNwb25zZUNhdGVnb3J5KHZhbHVlKSB7XG5cdFx0Zm9yIChjb25zdCBrZXkgaW4gUmVzcG9uc2VDYXRlZ29yeSkgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChSZXNwb25zZUNhdGVnb3J5LCBrZXkpKSB7XG5cdFx0XHRpZiAoUmVzcG9uc2VDYXRlZ29yeVtrZXldID09PSB2YWx1ZSkgcmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHRmdW5jdGlvbiBSZXNwb25zZUNhdGVnb3J5RnJvbUpTT04oanNvbikge1xuXHRcdHJldHVybiBSZXNwb25zZUNhdGVnb3J5RnJvbUpTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gUmVzcG9uc2VDYXRlZ29yeUZyb21KU09OVHlwZWQoanNvbiwgaWdub3JlRGlzY3JpbWluYXRvcikge1xuXHRcdHJldHVybiBqc29uO1xuXHR9XG5cdGZ1bmN0aW9uIFJlc3BvbnNlQ2F0ZWdvcnlUb0pTT04odmFsdWUpIHtcblx0XHRyZXR1cm4gdmFsdWU7XG5cdH1cblx0ZnVuY3Rpb24gUmVzcG9uc2VDYXRlZ29yeVRvSlNPTlR5cGVkKHZhbHVlLCBpZ25vcmVEaXNjcmltaW5hdG9yKSB7XG5cdFx0cmV0dXJuIHZhbHVlO1xuXHR9XG59KSB9KTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9SZXNwb25zZS5qc1xudmFyIHJlcXVpcmVfUmVzcG9uc2UgPSAvKiBAX19QVVJFX18gKi8gX19jb21tb25KUyh7IFwiLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9SZXNwb25zZS5qc1wiOiAoKGV4cG9ydHMpID0+IHtcblx0LyoqXG5cdCogQ29tbWVyY2Vcblx0KiBObyBkZXNjcmlwdGlvbiBwcm92aWRlZCAoZ2VuZXJhdGVkIGJ5IE9wZW5hcGkgR2VuZXJhdG9yIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuYXBpdG9vbHMvb3BlbmFwaS1nZW5lcmF0b3IpXG5cdCpcblx0KiBUaGUgdmVyc2lvbiBvZiB0aGUgT3BlbkFQSSBkb2N1bWVudDogMS4xLjBcblx0KlxuXHQqXG5cdCogTk9URTogVGhpcyBjbGFzcyBpcyBhdXRvIGdlbmVyYXRlZCBieSBPcGVuQVBJIEdlbmVyYXRvciAoaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoKS5cblx0KiBodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2hcblx0KiBEbyBub3QgZWRpdCB0aGUgY2xhc3MgbWFudWFsbHkuXG5cdCovXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcblx0ZXhwb3J0cy5pbnN0YW5jZU9mUmVzcG9uc2UgPSBpbnN0YW5jZU9mUmVzcG9uc2U7XG5cdGV4cG9ydHMuUmVzcG9uc2VGcm9tSlNPTiA9IFJlc3BvbnNlRnJvbUpTT047XG5cdGV4cG9ydHMuUmVzcG9uc2VGcm9tSlNPTlR5cGVkID0gUmVzcG9uc2VGcm9tSlNPTlR5cGVkO1xuXHRleHBvcnRzLlJlc3BvbnNlVG9KU09OID0gUmVzcG9uc2VUb0pTT047XG5cdGV4cG9ydHMuUmVzcG9uc2VUb0pTT05UeXBlZCA9IFJlc3BvbnNlVG9KU09OVHlwZWQ7XG5cdGNvbnN0IFJlc3BvbnNlQ2F0ZWdvcnlfMSA9IHJlcXVpcmVfUmVzcG9uc2VDYXRlZ29yeSgpO1xuXHQvKipcblx0KiBDaGVjayBpZiBhIGdpdmVuIG9iamVjdCBpbXBsZW1lbnRzIHRoZSBSZXNwb25zZSBpbnRlcmZhY2UuXG5cdCovXG5cdGZ1bmN0aW9uIGluc3RhbmNlT2ZSZXNwb25zZSh2YWx1ZSkge1xuXHRcdGlmICghKFwiYXR0cmlidXRlc1wiIGluIHZhbHVlKSB8fCB2YWx1ZVtcImF0dHJpYnV0ZXNcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdGlmICghKFwiY2F0ZWdvcnlcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJjYXRlZ29yeVwiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0aWYgKCEoXCJjcmVhdGVkX2F0XCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wiY3JlYXRlZF9hdFwiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0aWYgKCEoXCJpZFwiIGluIHZhbHVlKSB8fCB2YWx1ZVtcImlkXCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHRmdW5jdGlvbiBSZXNwb25zZUZyb21KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gUmVzcG9uc2VGcm9tSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBSZXNwb25zZUZyb21KU09OVHlwZWQoanNvbiwgaWdub3JlRGlzY3JpbWluYXRvcikge1xuXHRcdGlmIChqc29uID09IG51bGwpIHJldHVybiBqc29uO1xuXHRcdHJldHVybiB7XG5cdFx0XHRcImF0dHJpYnV0ZXNcIjoganNvbltcImF0dHJpYnV0ZXNcIl0sXG5cdFx0XHRcImNhdGVnb3J5XCI6ICgwLCBSZXNwb25zZUNhdGVnb3J5XzEuUmVzcG9uc2VDYXRlZ29yeUZyb21KU09OKShqc29uW1wiY2F0ZWdvcnlcIl0pLFxuXHRcdFx0XCJjcmVhdGVkX2F0XCI6IGpzb25bXCJjcmVhdGVkX2F0XCJdLFxuXHRcdFx0XCJpZFwiOiBqc29uW1wiaWRcIl1cblx0XHR9O1xuXHR9XG5cdGZ1bmN0aW9uIFJlc3BvbnNlVG9KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gUmVzcG9uc2VUb0pTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gUmVzcG9uc2VUb0pTT05UeXBlZCh2YWx1ZSwgaWdub3JlRGlzY3JpbWluYXRvciA9IGZhbHNlKSB7XG5cdFx0aWYgKHZhbHVlID09IG51bGwpIHJldHVybiB2YWx1ZTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0XCJhdHRyaWJ1dGVzXCI6IHZhbHVlW1wiYXR0cmlidXRlc1wiXSxcblx0XHRcdFwiY2F0ZWdvcnlcIjogKDAsIFJlc3BvbnNlQ2F0ZWdvcnlfMS5SZXNwb25zZUNhdGVnb3J5VG9KU09OKSh2YWx1ZVtcImNhdGVnb3J5XCJdKSxcblx0XHRcdFwiY3JlYXRlZF9hdFwiOiB2YWx1ZVtcImNyZWF0ZWRfYXRcIl0sXG5cdFx0XHRcImlkXCI6IHZhbHVlW1wiaWRcIl1cblx0XHR9O1xuXHR9XG59KSB9KTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9TZWFyY2hTdWdnZXN0aW9uc1Jlc3BvbnNlLmpzXG52YXIgcmVxdWlyZV9TZWFyY2hTdWdnZXN0aW9uc1Jlc3BvbnNlID0gLyogQF9fUFVSRV9fICovIF9fY29tbW9uSlMoeyBcIi4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvU2VhcmNoU3VnZ2VzdGlvbnNSZXNwb25zZS5qc1wiOiAoKGV4cG9ydHMpID0+IHtcblx0LyoqXG5cdCogQ29tbWVyY2Vcblx0KiBObyBkZXNjcmlwdGlvbiBwcm92aWRlZCAoZ2VuZXJhdGVkIGJ5IE9wZW5hcGkgR2VuZXJhdG9yIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuYXBpdG9vbHMvb3BlbmFwaS1nZW5lcmF0b3IpXG5cdCpcblx0KiBUaGUgdmVyc2lvbiBvZiB0aGUgT3BlbkFQSSBkb2N1bWVudDogMS4xLjBcblx0KlxuXHQqXG5cdCogTk9URTogVGhpcyBjbGFzcyBpcyBhdXRvIGdlbmVyYXRlZCBieSBPcGVuQVBJIEdlbmVyYXRvciAoaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoKS5cblx0KiBodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2hcblx0KiBEbyBub3QgZWRpdCB0aGUgY2xhc3MgbWFudWFsbHkuXG5cdCovXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcblx0ZXhwb3J0cy5pbnN0YW5jZU9mU2VhcmNoU3VnZ2VzdGlvbnNSZXNwb25zZSA9IGluc3RhbmNlT2ZTZWFyY2hTdWdnZXN0aW9uc1Jlc3BvbnNlO1xuXHRleHBvcnRzLlNlYXJjaFN1Z2dlc3Rpb25zUmVzcG9uc2VGcm9tSlNPTiA9IFNlYXJjaFN1Z2dlc3Rpb25zUmVzcG9uc2VGcm9tSlNPTjtcblx0ZXhwb3J0cy5TZWFyY2hTdWdnZXN0aW9uc1Jlc3BvbnNlRnJvbUpTT05UeXBlZCA9IFNlYXJjaFN1Z2dlc3Rpb25zUmVzcG9uc2VGcm9tSlNPTlR5cGVkO1xuXHRleHBvcnRzLlNlYXJjaFN1Z2dlc3Rpb25zUmVzcG9uc2VUb0pTT04gPSBTZWFyY2hTdWdnZXN0aW9uc1Jlc3BvbnNlVG9KU09OO1xuXHRleHBvcnRzLlNlYXJjaFN1Z2dlc3Rpb25zUmVzcG9uc2VUb0pTT05UeXBlZCA9IFNlYXJjaFN1Z2dlc3Rpb25zUmVzcG9uc2VUb0pTT05UeXBlZDtcblx0LyoqXG5cdCogQ2hlY2sgaWYgYSBnaXZlbiBvYmplY3QgaW1wbGVtZW50cyB0aGUgU2VhcmNoU3VnZ2VzdGlvbnNSZXNwb25zZSBpbnRlcmZhY2UuXG5cdCovXG5cdGZ1bmN0aW9uIGluc3RhbmNlT2ZTZWFyY2hTdWdnZXN0aW9uc1Jlc3BvbnNlKHZhbHVlKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0ZnVuY3Rpb24gU2VhcmNoU3VnZ2VzdGlvbnNSZXNwb25zZUZyb21KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gU2VhcmNoU3VnZ2VzdGlvbnNSZXNwb25zZUZyb21KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIFNlYXJjaFN1Z2dlc3Rpb25zUmVzcG9uc2VGcm9tSlNPTlR5cGVkKGpzb24sIGlnbm9yZURpc2NyaW1pbmF0b3IpIHtcblx0XHRpZiAoanNvbiA9PSBudWxsKSByZXR1cm4ganNvbjtcblx0XHRyZXR1cm4ge1xuXHRcdFx0XCJzZWFyY2hfdGVybXNcIjoganNvbltcInNlYXJjaF90ZXJtc1wiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcInNlYXJjaF90ZXJtc1wiXSxcblx0XHRcdFwic3VnZ2VzdGVkX3NlYXJjaGVzXCI6IGpzb25bXCJzdWdnZXN0ZWRfc2VhcmNoZXNcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IGpzb25bXCJzdWdnZXN0ZWRfc2VhcmNoZXNcIl1cblx0XHR9O1xuXHR9XG5cdGZ1bmN0aW9uIFNlYXJjaFN1Z2dlc3Rpb25zUmVzcG9uc2VUb0pTT04oanNvbikge1xuXHRcdHJldHVybiBTZWFyY2hTdWdnZXN0aW9uc1Jlc3BvbnNlVG9KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIFNlYXJjaFN1Z2dlc3Rpb25zUmVzcG9uc2VUb0pTT05UeXBlZCh2YWx1ZSwgaWdub3JlRGlzY3JpbWluYXRvciA9IGZhbHNlKSB7XG5cdFx0aWYgKHZhbHVlID09IG51bGwpIHJldHVybiB2YWx1ZTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0XCJzZWFyY2hfdGVybXNcIjogdmFsdWVbXCJzZWFyY2hfdGVybXNcIl0sXG5cdFx0XHRcInN1Z2dlc3RlZF9zZWFyY2hlc1wiOiB2YWx1ZVtcInN1Z2dlc3RlZF9zZWFyY2hlc1wiXVxuXHRcdH07XG5cdH1cbn0pIH0pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiAuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL1NlbmRNZXNzYWdlUmVxdWVzdC5qc1xudmFyIHJlcXVpcmVfU2VuZE1lc3NhZ2VSZXF1ZXN0ID0gLyogQF9fUFVSRV9fICovIF9fY29tbW9uSlMoeyBcIi4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvU2VuZE1lc3NhZ2VSZXF1ZXN0LmpzXCI6ICgoZXhwb3J0cykgPT4ge1xuXHQvKipcblx0KiBDb21tZXJjZVxuXHQqIE5vIGRlc2NyaXB0aW9uIHByb3ZpZGVkIChnZW5lcmF0ZWQgYnkgT3BlbmFwaSBHZW5lcmF0b3IgaHR0cHM6Ly9naXRodWIuY29tL29wZW5hcGl0b29scy9vcGVuYXBpLWdlbmVyYXRvcilcblx0KlxuXHQqIFRoZSB2ZXJzaW9uIG9mIHRoZSBPcGVuQVBJIGRvY3VtZW50OiAxLjEuMFxuXHQqXG5cdCpcblx0KiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IE9wZW5BUEkgR2VuZXJhdG9yIChodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2gpLlxuXHQqIGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaFxuXHQqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cblx0Ki9cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuXHRleHBvcnRzLmluc3RhbmNlT2ZTZW5kTWVzc2FnZVJlcXVlc3QgPSBpbnN0YW5jZU9mU2VuZE1lc3NhZ2VSZXF1ZXN0O1xuXHRleHBvcnRzLlNlbmRNZXNzYWdlUmVxdWVzdEZyb21KU09OID0gU2VuZE1lc3NhZ2VSZXF1ZXN0RnJvbUpTT047XG5cdGV4cG9ydHMuU2VuZE1lc3NhZ2VSZXF1ZXN0RnJvbUpTT05UeXBlZCA9IFNlbmRNZXNzYWdlUmVxdWVzdEZyb21KU09OVHlwZWQ7XG5cdGV4cG9ydHMuU2VuZE1lc3NhZ2VSZXF1ZXN0VG9KU09OID0gU2VuZE1lc3NhZ2VSZXF1ZXN0VG9KU09OO1xuXHRleHBvcnRzLlNlbmRNZXNzYWdlUmVxdWVzdFRvSlNPTlR5cGVkID0gU2VuZE1lc3NhZ2VSZXF1ZXN0VG9KU09OVHlwZWQ7XG5cdGNvbnN0IEN1c3RvbWVyU2VydmljZVByb3ZpZGVyXzEgPSByZXF1aXJlX0N1c3RvbWVyU2VydmljZVByb3ZpZGVyKCk7XG5cdGNvbnN0IEF0dGFjaG1lbnRSZXF1ZXN0XzEgPSByZXF1aXJlX0F0dGFjaG1lbnRSZXF1ZXN0KCk7XG5cdC8qKlxuXHQqIENoZWNrIGlmIGEgZ2l2ZW4gb2JqZWN0IGltcGxlbWVudHMgdGhlIFNlbmRNZXNzYWdlUmVxdWVzdCBpbnRlcmZhY2UuXG5cdCovXG5cdGZ1bmN0aW9uIGluc3RhbmNlT2ZTZW5kTWVzc2FnZVJlcXVlc3QodmFsdWUpIHtcblx0XHRpZiAoIShcImNvbnZlcnNhdGlvbl9pZFwiIGluIHZhbHVlKSB8fCB2YWx1ZVtcImNvbnZlcnNhdGlvbl9pZFwiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0aWYgKCEoXCJjdXN0b21lcl9pZFwiIGluIHZhbHVlKSB8fCB2YWx1ZVtcImN1c3RvbWVyX2lkXCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRpZiAoIShcIm1lc3NhZ2VcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJtZXNzYWdlXCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHRmdW5jdGlvbiBTZW5kTWVzc2FnZVJlcXVlc3RGcm9tSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIFNlbmRNZXNzYWdlUmVxdWVzdEZyb21KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIFNlbmRNZXNzYWdlUmVxdWVzdEZyb21KU09OVHlwZWQoanNvbiwgaWdub3JlRGlzY3JpbWluYXRvcikge1xuXHRcdGlmIChqc29uID09IG51bGwpIHJldHVybiBqc29uO1xuXHRcdHJldHVybiB7XG5cdFx0XHRcImF0dGFjaG1lbnRzXCI6IGpzb25bXCJhdHRhY2htZW50c1wiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcImF0dGFjaG1lbnRzXCJdLm1hcChBdHRhY2htZW50UmVxdWVzdF8xLkF0dGFjaG1lbnRSZXF1ZXN0RnJvbUpTT04pLFxuXHRcdFx0XCJjb252ZXJzYXRpb25faWRcIjoganNvbltcImNvbnZlcnNhdGlvbl9pZFwiXSxcblx0XHRcdFwiY3VzdG9tZXJfaWRcIjoganNvbltcImN1c3RvbWVyX2lkXCJdLFxuXHRcdFx0XCJjdXN0b21lcl9zZXJ2aWNlX3Byb3ZpZGVyXCI6IGpzb25bXCJjdXN0b21lcl9zZXJ2aWNlX3Byb3ZpZGVyXCJdID09IG51bGwgPyB2b2lkIDAgOiAoMCwgQ3VzdG9tZXJTZXJ2aWNlUHJvdmlkZXJfMS5DdXN0b21lclNlcnZpY2VQcm92aWRlckZyb21KU09OKShqc29uW1wiY3VzdG9tZXJfc2VydmljZV9wcm92aWRlclwiXSksXG5cdFx0XHRcIm1lc3NhZ2VcIjoganNvbltcIm1lc3NhZ2VcIl1cblx0XHR9O1xuXHR9XG5cdGZ1bmN0aW9uIFNlbmRNZXNzYWdlUmVxdWVzdFRvSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIFNlbmRNZXNzYWdlUmVxdWVzdFRvSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBTZW5kTWVzc2FnZVJlcXVlc3RUb0pTT05UeXBlZCh2YWx1ZSwgaWdub3JlRGlzY3JpbWluYXRvciA9IGZhbHNlKSB7XG5cdFx0aWYgKHZhbHVlID09IG51bGwpIHJldHVybiB2YWx1ZTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0XCJhdHRhY2htZW50c1wiOiB2YWx1ZVtcImF0dGFjaG1lbnRzXCJdID09IG51bGwgPyB2b2lkIDAgOiB2YWx1ZVtcImF0dGFjaG1lbnRzXCJdLm1hcChBdHRhY2htZW50UmVxdWVzdF8xLkF0dGFjaG1lbnRSZXF1ZXN0VG9KU09OKSxcblx0XHRcdFwiY29udmVyc2F0aW9uX2lkXCI6IHZhbHVlW1wiY29udmVyc2F0aW9uX2lkXCJdLFxuXHRcdFx0XCJjdXN0b21lcl9pZFwiOiB2YWx1ZVtcImN1c3RvbWVyX2lkXCJdLFxuXHRcdFx0XCJjdXN0b21lcl9zZXJ2aWNlX3Byb3ZpZGVyXCI6ICgwLCBDdXN0b21lclNlcnZpY2VQcm92aWRlcl8xLkN1c3RvbWVyU2VydmljZVByb3ZpZGVyVG9KU09OKSh2YWx1ZVtcImN1c3RvbWVyX3NlcnZpY2VfcHJvdmlkZXJcIl0pLFxuXHRcdFx0XCJtZXNzYWdlXCI6IHZhbHVlW1wibWVzc2FnZVwiXVxuXHRcdH07XG5cdH1cbn0pIH0pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiAuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL1NlbmRNZXNzYWdlUmVzcG9uc2UuanNcbnZhciByZXF1aXJlX1NlbmRNZXNzYWdlUmVzcG9uc2UgPSAvKiBAX19QVVJFX18gKi8gX19jb21tb25KUyh7IFwiLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9TZW5kTWVzc2FnZVJlc3BvbnNlLmpzXCI6ICgoZXhwb3J0cykgPT4ge1xuXHQvKipcblx0KiBDb21tZXJjZVxuXHQqIE5vIGRlc2NyaXB0aW9uIHByb3ZpZGVkIChnZW5lcmF0ZWQgYnkgT3BlbmFwaSBHZW5lcmF0b3IgaHR0cHM6Ly9naXRodWIuY29tL29wZW5hcGl0b29scy9vcGVuYXBpLWdlbmVyYXRvcilcblx0KlxuXHQqIFRoZSB2ZXJzaW9uIG9mIHRoZSBPcGVuQVBJIGRvY3VtZW50OiAxLjEuMFxuXHQqXG5cdCpcblx0KiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IE9wZW5BUEkgR2VuZXJhdG9yIChodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2gpLlxuXHQqIGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaFxuXHQqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cblx0Ki9cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuXHRleHBvcnRzLmluc3RhbmNlT2ZTZW5kTWVzc2FnZVJlc3BvbnNlID0gaW5zdGFuY2VPZlNlbmRNZXNzYWdlUmVzcG9uc2U7XG5cdGV4cG9ydHMuU2VuZE1lc3NhZ2VSZXNwb25zZUZyb21KU09OID0gU2VuZE1lc3NhZ2VSZXNwb25zZUZyb21KU09OO1xuXHRleHBvcnRzLlNlbmRNZXNzYWdlUmVzcG9uc2VGcm9tSlNPTlR5cGVkID0gU2VuZE1lc3NhZ2VSZXNwb25zZUZyb21KU09OVHlwZWQ7XG5cdGV4cG9ydHMuU2VuZE1lc3NhZ2VSZXNwb25zZVRvSlNPTiA9IFNlbmRNZXNzYWdlUmVzcG9uc2VUb0pTT047XG5cdGV4cG9ydHMuU2VuZE1lc3NhZ2VSZXNwb25zZVRvSlNPTlR5cGVkID0gU2VuZE1lc3NhZ2VSZXNwb25zZVRvSlNPTlR5cGVkO1xuXHRjb25zdCBDdXN0U2VydmljZU1lc3NhZ2VfMSA9IHJlcXVpcmVfQ3VzdFNlcnZpY2VNZXNzYWdlKCk7XG5cdC8qKlxuXHQqIENoZWNrIGlmIGEgZ2l2ZW4gb2JqZWN0IGltcGxlbWVudHMgdGhlIFNlbmRNZXNzYWdlUmVzcG9uc2UgaW50ZXJmYWNlLlxuXHQqL1xuXHRmdW5jdGlvbiBpbnN0YW5jZU9mU2VuZE1lc3NhZ2VSZXNwb25zZSh2YWx1ZSkge1xuXHRcdGlmICghKFwibWVzc2FnZVwiIGluIHZhbHVlKSB8fCB2YWx1ZVtcIm1lc3NhZ2VcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdGZ1bmN0aW9uIFNlbmRNZXNzYWdlUmVzcG9uc2VGcm9tSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIFNlbmRNZXNzYWdlUmVzcG9uc2VGcm9tSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBTZW5kTWVzc2FnZVJlc3BvbnNlRnJvbUpTT05UeXBlZChqc29uLCBpZ25vcmVEaXNjcmltaW5hdG9yKSB7XG5cdFx0aWYgKGpzb24gPT0gbnVsbCkgcmV0dXJuIGpzb247XG5cdFx0cmV0dXJuIHsgXCJtZXNzYWdlXCI6ICgwLCBDdXN0U2VydmljZU1lc3NhZ2VfMS5DdXN0U2VydmljZU1lc3NhZ2VGcm9tSlNPTikoanNvbltcIm1lc3NhZ2VcIl0pIH07XG5cdH1cblx0ZnVuY3Rpb24gU2VuZE1lc3NhZ2VSZXNwb25zZVRvSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIFNlbmRNZXNzYWdlUmVzcG9uc2VUb0pTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gU2VuZE1lc3NhZ2VSZXNwb25zZVRvSlNPTlR5cGVkKHZhbHVlLCBpZ25vcmVEaXNjcmltaW5hdG9yID0gZmFsc2UpIHtcblx0XHRpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIHZhbHVlO1xuXHRcdHJldHVybiB7IFwibWVzc2FnZVwiOiAoMCwgQ3VzdFNlcnZpY2VNZXNzYWdlXzEuQ3VzdFNlcnZpY2VNZXNzYWdlVG9KU09OKSh2YWx1ZVtcIm1lc3NhZ2VcIl0pIH07XG5cdH1cbn0pIH0pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiAuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL1N1Z2dlc3Rpb25DYXRlZ29yeS5qc1xudmFyIHJlcXVpcmVfU3VnZ2VzdGlvbkNhdGVnb3J5ID0gLyogQF9fUFVSRV9fICovIF9fY29tbW9uSlMoeyBcIi4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvU3VnZ2VzdGlvbkNhdGVnb3J5LmpzXCI6ICgoZXhwb3J0cykgPT4ge1xuXHQvKipcblx0KiBDb21tZXJjZVxuXHQqIE5vIGRlc2NyaXB0aW9uIHByb3ZpZGVkIChnZW5lcmF0ZWQgYnkgT3BlbmFwaSBHZW5lcmF0b3IgaHR0cHM6Ly9naXRodWIuY29tL29wZW5hcGl0b29scy9vcGVuYXBpLWdlbmVyYXRvcilcblx0KlxuXHQqIFRoZSB2ZXJzaW9uIG9mIHRoZSBPcGVuQVBJIGRvY3VtZW50OiAxLjEuMFxuXHQqXG5cdCpcblx0KiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IE9wZW5BUEkgR2VuZXJhdG9yIChodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2gpLlxuXHQqIGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaFxuXHQqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cblx0Ki9cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuXHRleHBvcnRzLlN1Z2dlc3Rpb25DYXRlZ29yeSA9IHZvaWQgMDtcblx0ZXhwb3J0cy5pbnN0YW5jZU9mU3VnZ2VzdGlvbkNhdGVnb3J5ID0gaW5zdGFuY2VPZlN1Z2dlc3Rpb25DYXRlZ29yeTtcblx0ZXhwb3J0cy5TdWdnZXN0aW9uQ2F0ZWdvcnlGcm9tSlNPTiA9IFN1Z2dlc3Rpb25DYXRlZ29yeUZyb21KU09OO1xuXHRleHBvcnRzLlN1Z2dlc3Rpb25DYXRlZ29yeUZyb21KU09OVHlwZWQgPSBTdWdnZXN0aW9uQ2F0ZWdvcnlGcm9tSlNPTlR5cGVkO1xuXHRleHBvcnRzLlN1Z2dlc3Rpb25DYXRlZ29yeVRvSlNPTiA9IFN1Z2dlc3Rpb25DYXRlZ29yeVRvSlNPTjtcblx0ZXhwb3J0cy5TdWdnZXN0aW9uQ2F0ZWdvcnlUb0pTT05UeXBlZCA9IFN1Z2dlc3Rpb25DYXRlZ29yeVRvSlNPTlR5cGVkO1xuXHQvKipcblx0KlxuXHQqIEBleHBvcnRcblx0KiBAZW51bSB7c3RyaW5nfVxuXHQqL1xuXHR2YXIgU3VnZ2VzdGlvbkNhdGVnb3J5O1xuXHQoZnVuY3Rpb24oU3VnZ2VzdGlvbkNhdGVnb3J5JDEpIHtcblx0XHRTdWdnZXN0aW9uQ2F0ZWdvcnkkMVtcIk5vQ29udGV4dFwiXSA9IFwibm9fY29udGV4dFwiO1xuXHRcdFN1Z2dlc3Rpb25DYXRlZ29yeSQxW1wiUHJvZHVjdEJhc2VkXCJdID0gXCJwcm9kdWN0X2Jhc2VkXCI7XG5cdFx0U3VnZ2VzdGlvbkNhdGVnb3J5JDFbXCJSZXZpZXdCYXNlZFwiXSA9IFwicmV2aWV3X2Jhc2VkXCI7XG5cdH0pKFN1Z2dlc3Rpb25DYXRlZ29yeSB8fCAoZXhwb3J0cy5TdWdnZXN0aW9uQ2F0ZWdvcnkgPSBTdWdnZXN0aW9uQ2F0ZWdvcnkgPSB7fSkpO1xuXHRmdW5jdGlvbiBpbnN0YW5jZU9mU3VnZ2VzdGlvbkNhdGVnb3J5KHZhbHVlKSB7XG5cdFx0Zm9yIChjb25zdCBrZXkgaW4gU3VnZ2VzdGlvbkNhdGVnb3J5KSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFN1Z2dlc3Rpb25DYXRlZ29yeSwga2V5KSkge1xuXHRcdFx0aWYgKFN1Z2dlc3Rpb25DYXRlZ29yeVtrZXldID09PSB2YWx1ZSkgcmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHRmdW5jdGlvbiBTdWdnZXN0aW9uQ2F0ZWdvcnlGcm9tSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIFN1Z2dlc3Rpb25DYXRlZ29yeUZyb21KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIFN1Z2dlc3Rpb25DYXRlZ29yeUZyb21KU09OVHlwZWQoanNvbiwgaWdub3JlRGlzY3JpbWluYXRvcikge1xuXHRcdHJldHVybiBqc29uO1xuXHR9XG5cdGZ1bmN0aW9uIFN1Z2dlc3Rpb25DYXRlZ29yeVRvSlNPTih2YWx1ZSkge1xuXHRcdHJldHVybiB2YWx1ZTtcblx0fVxuXHRmdW5jdGlvbiBTdWdnZXN0aW9uQ2F0ZWdvcnlUb0pTT05UeXBlZCh2YWx1ZSwgaWdub3JlRGlzY3JpbWluYXRvcikge1xuXHRcdHJldHVybiB2YWx1ZTtcblx0fVxufSkgfSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIC4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvU3VnZ2VzdGlvbi5qc1xudmFyIHJlcXVpcmVfU3VnZ2VzdGlvbiA9IC8qIEBfX1BVUkVfXyAqLyBfX2NvbW1vbkpTKHsgXCIuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL1N1Z2dlc3Rpb24uanNcIjogKChleHBvcnRzKSA9PiB7XG5cdC8qKlxuXHQqIENvbW1lcmNlXG5cdCogTm8gZGVzY3JpcHRpb24gcHJvdmlkZWQgKGdlbmVyYXRlZCBieSBPcGVuYXBpIEdlbmVyYXRvciBodHRwczovL2dpdGh1Yi5jb20vb3BlbmFwaXRvb2xzL29wZW5hcGktZ2VuZXJhdG9yKVxuXHQqXG5cdCogVGhlIHZlcnNpb24gb2YgdGhlIE9wZW5BUEkgZG9jdW1lbnQ6IDEuMS4wXG5cdCpcblx0KlxuXHQqIE5PVEU6IFRoaXMgY2xhc3MgaXMgYXV0byBnZW5lcmF0ZWQgYnkgT3BlbkFQSSBHZW5lcmF0b3IgKGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaCkuXG5cdCogaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoXG5cdCogRG8gbm90IGVkaXQgdGhlIGNsYXNzIG1hbnVhbGx5LlxuXHQqL1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5cdGV4cG9ydHMuaW5zdGFuY2VPZlN1Z2dlc3Rpb24gPSBpbnN0YW5jZU9mU3VnZ2VzdGlvbjtcblx0ZXhwb3J0cy5TdWdnZXN0aW9uRnJvbUpTT04gPSBTdWdnZXN0aW9uRnJvbUpTT047XG5cdGV4cG9ydHMuU3VnZ2VzdGlvbkZyb21KU09OVHlwZWQgPSBTdWdnZXN0aW9uRnJvbUpTT05UeXBlZDtcblx0ZXhwb3J0cy5TdWdnZXN0aW9uVG9KU09OID0gU3VnZ2VzdGlvblRvSlNPTjtcblx0ZXhwb3J0cy5TdWdnZXN0aW9uVG9KU09OVHlwZWQgPSBTdWdnZXN0aW9uVG9KU09OVHlwZWQ7XG5cdGNvbnN0IFN1Z2dlc3Rpb25DYXRlZ29yeV8xID0gcmVxdWlyZV9TdWdnZXN0aW9uQ2F0ZWdvcnkoKTtcblx0LyoqXG5cdCogQ2hlY2sgaWYgYSBnaXZlbiBvYmplY3QgaW1wbGVtZW50cyB0aGUgU3VnZ2VzdGlvbiBpbnRlcmZhY2UuXG5cdCovXG5cdGZ1bmN0aW9uIGluc3RhbmNlT2ZTdWdnZXN0aW9uKHZhbHVlKSB7XG5cdFx0aWYgKCEoXCJjYXRlZ29yeVwiIGluIHZhbHVlKSB8fCB2YWx1ZVtcImNhdGVnb3J5XCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRpZiAoIShcImNvbnRlbnRcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJjb250ZW50XCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRpZiAoIShcImNyZWF0ZWRfYXRcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJjcmVhdGVkX2F0XCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRpZiAoIShcImlkXCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wiaWRcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdGZ1bmN0aW9uIFN1Z2dlc3Rpb25Gcm9tSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIFN1Z2dlc3Rpb25Gcm9tSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBTdWdnZXN0aW9uRnJvbUpTT05UeXBlZChqc29uLCBpZ25vcmVEaXNjcmltaW5hdG9yKSB7XG5cdFx0aWYgKGpzb24gPT0gbnVsbCkgcmV0dXJuIGpzb247XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwiY2F0ZWdvcnlcIjogKDAsIFN1Z2dlc3Rpb25DYXRlZ29yeV8xLlN1Z2dlc3Rpb25DYXRlZ29yeUZyb21KU09OKShqc29uW1wiY2F0ZWdvcnlcIl0pLFxuXHRcdFx0XCJjb250ZW50XCI6IGpzb25bXCJjb250ZW50XCJdLFxuXHRcdFx0XCJjcmVhdGVkX2F0XCI6IGpzb25bXCJjcmVhdGVkX2F0XCJdLFxuXHRcdFx0XCJpZFwiOiBqc29uW1wiaWRcIl0sXG5cdFx0XHRcImlzX2Fuc3dlclwiOiBqc29uW1wiaXNfYW5zd2VyXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wiaXNfYW5zd2VyXCJdXG5cdFx0fTtcblx0fVxuXHRmdW5jdGlvbiBTdWdnZXN0aW9uVG9KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gU3VnZ2VzdGlvblRvSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBTdWdnZXN0aW9uVG9KU09OVHlwZWQodmFsdWUsIGlnbm9yZURpc2NyaW1pbmF0b3IgPSBmYWxzZSkge1xuXHRcdGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gdmFsdWU7XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwiY2F0ZWdvcnlcIjogKDAsIFN1Z2dlc3Rpb25DYXRlZ29yeV8xLlN1Z2dlc3Rpb25DYXRlZ29yeVRvSlNPTikodmFsdWVbXCJjYXRlZ29yeVwiXSksXG5cdFx0XHRcImNvbnRlbnRcIjogdmFsdWVbXCJjb250ZW50XCJdLFxuXHRcdFx0XCJjcmVhdGVkX2F0XCI6IHZhbHVlW1wiY3JlYXRlZF9hdFwiXSxcblx0XHRcdFwiaWRcIjogdmFsdWVbXCJpZFwiXSxcblx0XHRcdFwiaXNfYW5zd2VyXCI6IHZhbHVlW1wiaXNfYW5zd2VyXCJdXG5cdFx0fTtcblx0fVxufSkgfSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIC4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvU3VwcG9ydGVkRXZlbnRQcm9kdWN0Q2F0ZWdvcnkuanNcbnZhciByZXF1aXJlX1N1cHBvcnRlZEV2ZW50UHJvZHVjdENhdGVnb3J5ID0gLyogQF9fUFVSRV9fICovIF9fY29tbW9uSlMoeyBcIi4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvU3VwcG9ydGVkRXZlbnRQcm9kdWN0Q2F0ZWdvcnkuanNcIjogKChleHBvcnRzKSA9PiB7XG5cdC8qKlxuXHQqIENvbW1lcmNlXG5cdCogTm8gZGVzY3JpcHRpb24gcHJvdmlkZWQgKGdlbmVyYXRlZCBieSBPcGVuYXBpIEdlbmVyYXRvciBodHRwczovL2dpdGh1Yi5jb20vb3BlbmFwaXRvb2xzL29wZW5hcGktZ2VuZXJhdG9yKVxuXHQqXG5cdCogVGhlIHZlcnNpb24gb2YgdGhlIE9wZW5BUEkgZG9jdW1lbnQ6IDEuMS4wXG5cdCpcblx0KlxuXHQqIE5PVEU6IFRoaXMgY2xhc3MgaXMgYXV0byBnZW5lcmF0ZWQgYnkgT3BlbkFQSSBHZW5lcmF0b3IgKGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaCkuXG5cdCogaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoXG5cdCogRG8gbm90IGVkaXQgdGhlIGNsYXNzIG1hbnVhbGx5LlxuXHQqL1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5cdGV4cG9ydHMuU3VwcG9ydGVkRXZlbnRQcm9kdWN0Q2F0ZWdvcnkgPSB2b2lkIDA7XG5cdGV4cG9ydHMuaW5zdGFuY2VPZlN1cHBvcnRlZEV2ZW50UHJvZHVjdENhdGVnb3J5ID0gaW5zdGFuY2VPZlN1cHBvcnRlZEV2ZW50UHJvZHVjdENhdGVnb3J5O1xuXHRleHBvcnRzLlN1cHBvcnRlZEV2ZW50UHJvZHVjdENhdGVnb3J5RnJvbUpTT04gPSBTdXBwb3J0ZWRFdmVudFByb2R1Y3RDYXRlZ29yeUZyb21KU09OO1xuXHRleHBvcnRzLlN1cHBvcnRlZEV2ZW50UHJvZHVjdENhdGVnb3J5RnJvbUpTT05UeXBlZCA9IFN1cHBvcnRlZEV2ZW50UHJvZHVjdENhdGVnb3J5RnJvbUpTT05UeXBlZDtcblx0ZXhwb3J0cy5TdXBwb3J0ZWRFdmVudFByb2R1Y3RDYXRlZ29yeVRvSlNPTiA9IFN1cHBvcnRlZEV2ZW50UHJvZHVjdENhdGVnb3J5VG9KU09OO1xuXHRleHBvcnRzLlN1cHBvcnRlZEV2ZW50UHJvZHVjdENhdGVnb3J5VG9KU09OVHlwZWQgPSBTdXBwb3J0ZWRFdmVudFByb2R1Y3RDYXRlZ29yeVRvSlNPTlR5cGVkO1xuXHQvKipcblx0KlxuXHQqIEBleHBvcnRcblx0KiBAZW51bSB7c3RyaW5nfVxuXHQqL1xuXHR2YXIgU3VwcG9ydGVkRXZlbnRQcm9kdWN0Q2F0ZWdvcnk7XG5cdChmdW5jdGlvbihTdXBwb3J0ZWRFdmVudFByb2R1Y3RDYXRlZ29yeSQxKSB7XG5cdFx0U3VwcG9ydGVkRXZlbnRQcm9kdWN0Q2F0ZWdvcnkkMVtcIlByb2R1Y3RcIl0gPSBcInByb2R1Y3RcIjtcblx0XHRTdXBwb3J0ZWRFdmVudFByb2R1Y3RDYXRlZ29yeSQxW1wiU2hhcGV3ZWFyXCJdID0gXCJzaGFwZXdlYXJcIjtcblx0XHRTdXBwb3J0ZWRFdmVudFByb2R1Y3RDYXRlZ29yeSQxW1wiTm9uU2hhcGV3ZWFyXCJdID0gXCJub24tc2hhcGV3ZWFyXCI7XG5cdH0pKFN1cHBvcnRlZEV2ZW50UHJvZHVjdENhdGVnb3J5IHx8IChleHBvcnRzLlN1cHBvcnRlZEV2ZW50UHJvZHVjdENhdGVnb3J5ID0gU3VwcG9ydGVkRXZlbnRQcm9kdWN0Q2F0ZWdvcnkgPSB7fSkpO1xuXHRmdW5jdGlvbiBpbnN0YW5jZU9mU3VwcG9ydGVkRXZlbnRQcm9kdWN0Q2F0ZWdvcnkodmFsdWUpIHtcblx0XHRmb3IgKGNvbnN0IGtleSBpbiBTdXBwb3J0ZWRFdmVudFByb2R1Y3RDYXRlZ29yeSkgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChTdXBwb3J0ZWRFdmVudFByb2R1Y3RDYXRlZ29yeSwga2V5KSkge1xuXHRcdFx0aWYgKFN1cHBvcnRlZEV2ZW50UHJvZHVjdENhdGVnb3J5W2tleV0gPT09IHZhbHVlKSByZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGZ1bmN0aW9uIFN1cHBvcnRlZEV2ZW50UHJvZHVjdENhdGVnb3J5RnJvbUpTT04oanNvbikge1xuXHRcdHJldHVybiBTdXBwb3J0ZWRFdmVudFByb2R1Y3RDYXRlZ29yeUZyb21KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIFN1cHBvcnRlZEV2ZW50UHJvZHVjdENhdGVnb3J5RnJvbUpTT05UeXBlZChqc29uLCBpZ25vcmVEaXNjcmltaW5hdG9yKSB7XG5cdFx0cmV0dXJuIGpzb247XG5cdH1cblx0ZnVuY3Rpb24gU3VwcG9ydGVkRXZlbnRQcm9kdWN0Q2F0ZWdvcnlUb0pTT04odmFsdWUpIHtcblx0XHRyZXR1cm4gdmFsdWU7XG5cdH1cblx0ZnVuY3Rpb24gU3VwcG9ydGVkRXZlbnRQcm9kdWN0Q2F0ZWdvcnlUb0pTT05UeXBlZCh2YWx1ZSwgaWdub3JlRGlzY3JpbWluYXRvcikge1xuXHRcdHJldHVybiB2YWx1ZTtcblx0fVxufSkgfSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIC4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvU3VwcG9ydGVkRXZlbnRSZXF1ZXN0LmpzXG52YXIgcmVxdWlyZV9TdXBwb3J0ZWRFdmVudFJlcXVlc3QgPSAvKiBAX19QVVJFX18gKi8gX19jb21tb25KUyh7IFwiLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9TdXBwb3J0ZWRFdmVudFJlcXVlc3QuanNcIjogKChleHBvcnRzKSA9PiB7XG5cdC8qKlxuXHQqIENvbW1lcmNlXG5cdCogTm8gZGVzY3JpcHRpb24gcHJvdmlkZWQgKGdlbmVyYXRlZCBieSBPcGVuYXBpIEdlbmVyYXRvciBodHRwczovL2dpdGh1Yi5jb20vb3BlbmFwaXRvb2xzL29wZW5hcGktZ2VuZXJhdG9yKVxuXHQqXG5cdCogVGhlIHZlcnNpb24gb2YgdGhlIE9wZW5BUEkgZG9jdW1lbnQ6IDEuMS4wXG5cdCpcblx0KlxuXHQqIE5PVEU6IFRoaXMgY2xhc3MgaXMgYXV0byBnZW5lcmF0ZWQgYnkgT3BlbkFQSSBHZW5lcmF0b3IgKGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaCkuXG5cdCogaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoXG5cdCogRG8gbm90IGVkaXQgdGhlIGNsYXNzIG1hbnVhbGx5LlxuXHQqL1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5cdGV4cG9ydHMuaW5zdGFuY2VPZlN1cHBvcnRlZEV2ZW50UmVxdWVzdCA9IGluc3RhbmNlT2ZTdXBwb3J0ZWRFdmVudFJlcXVlc3Q7XG5cdGV4cG9ydHMuU3VwcG9ydGVkRXZlbnRSZXF1ZXN0RnJvbUpTT04gPSBTdXBwb3J0ZWRFdmVudFJlcXVlc3RGcm9tSlNPTjtcblx0ZXhwb3J0cy5TdXBwb3J0ZWRFdmVudFJlcXVlc3RGcm9tSlNPTlR5cGVkID0gU3VwcG9ydGVkRXZlbnRSZXF1ZXN0RnJvbUpTT05UeXBlZDtcblx0ZXhwb3J0cy5TdXBwb3J0ZWRFdmVudFJlcXVlc3RUb0pTT04gPSBTdXBwb3J0ZWRFdmVudFJlcXVlc3RUb0pTT047XG5cdGV4cG9ydHMuU3VwcG9ydGVkRXZlbnRSZXF1ZXN0VG9KU09OVHlwZWQgPSBTdXBwb3J0ZWRFdmVudFJlcXVlc3RUb0pTT05UeXBlZDtcblx0Y29uc3QgQ29udGV4dF8xJDEgPSByZXF1aXJlX0NvbnRleHQoKTtcblx0Y29uc3QgVXNlckV2ZW50XzEkMiA9IHJlcXVpcmVfVXNlckV2ZW50KCk7XG5cdC8qKlxuXHQqIENoZWNrIGlmIGEgZ2l2ZW4gb2JqZWN0IGltcGxlbWVudHMgdGhlIFN1cHBvcnRlZEV2ZW50UmVxdWVzdCBpbnRlcmZhY2UuXG5cdCovXG5cdGZ1bmN0aW9uIGluc3RhbmNlT2ZTdXBwb3J0ZWRFdmVudFJlcXVlc3QodmFsdWUpIHtcblx0XHRpZiAoIShcImNvbnRleHRcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJjb250ZXh0XCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRpZiAoIShcImlkXCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wiaWRcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdGlmICghKFwidXNlcl9ldmVudFwiIGluIHZhbHVlKSB8fCB2YWx1ZVtcInVzZXJfZXZlbnRcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdGZ1bmN0aW9uIFN1cHBvcnRlZEV2ZW50UmVxdWVzdEZyb21KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gU3VwcG9ydGVkRXZlbnRSZXF1ZXN0RnJvbUpTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gU3VwcG9ydGVkRXZlbnRSZXF1ZXN0RnJvbUpTT05UeXBlZChqc29uLCBpZ25vcmVEaXNjcmltaW5hdG9yKSB7XG5cdFx0aWYgKGpzb24gPT0gbnVsbCkgcmV0dXJuIGpzb247XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwiY29udGV4dFwiOiAoMCwgQ29udGV4dF8xJDEuQ29udGV4dEZyb21KU09OKShqc29uW1wiY29udGV4dFwiXSksXG5cdFx0XHRcImlkXCI6IGpzb25bXCJpZFwiXSxcblx0XHRcdFwidXNlcl9ldmVudFwiOiAoMCwgVXNlckV2ZW50XzEkMi5Vc2VyRXZlbnRGcm9tSlNPTikoanNvbltcInVzZXJfZXZlbnRcIl0pXG5cdFx0fTtcblx0fVxuXHRmdW5jdGlvbiBTdXBwb3J0ZWRFdmVudFJlcXVlc3RUb0pTT04oanNvbikge1xuXHRcdHJldHVybiBTdXBwb3J0ZWRFdmVudFJlcXVlc3RUb0pTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gU3VwcG9ydGVkRXZlbnRSZXF1ZXN0VG9KU09OVHlwZWQodmFsdWUsIGlnbm9yZURpc2NyaW1pbmF0b3IgPSBmYWxzZSkge1xuXHRcdGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gdmFsdWU7XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwiY29udGV4dFwiOiAoMCwgQ29udGV4dF8xJDEuQ29udGV4dFRvSlNPTikodmFsdWVbXCJjb250ZXh0XCJdKSxcblx0XHRcdFwiaWRcIjogdmFsdWVbXCJpZFwiXSxcblx0XHRcdFwidXNlcl9ldmVudFwiOiAoMCwgVXNlckV2ZW50XzEkMi5Vc2VyRXZlbnRUb0pTT04pKHZhbHVlW1widXNlcl9ldmVudFwiXSlcblx0XHR9O1xuXHR9XG59KSB9KTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9TdXBwb3J0ZWRFdmVudFJlc3BvbnNlLmpzXG52YXIgcmVxdWlyZV9TdXBwb3J0ZWRFdmVudFJlc3BvbnNlID0gLyogQF9fUFVSRV9fICovIF9fY29tbW9uSlMoeyBcIi4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvU3VwcG9ydGVkRXZlbnRSZXNwb25zZS5qc1wiOiAoKGV4cG9ydHMpID0+IHtcblx0LyoqXG5cdCogQ29tbWVyY2Vcblx0KiBObyBkZXNjcmlwdGlvbiBwcm92aWRlZCAoZ2VuZXJhdGVkIGJ5IE9wZW5hcGkgR2VuZXJhdG9yIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuYXBpdG9vbHMvb3BlbmFwaS1nZW5lcmF0b3IpXG5cdCpcblx0KiBUaGUgdmVyc2lvbiBvZiB0aGUgT3BlbkFQSSBkb2N1bWVudDogMS4xLjBcblx0KlxuXHQqXG5cdCogTk9URTogVGhpcyBjbGFzcyBpcyBhdXRvIGdlbmVyYXRlZCBieSBPcGVuQVBJIEdlbmVyYXRvciAoaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoKS5cblx0KiBodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2hcblx0KiBEbyBub3QgZWRpdCB0aGUgY2xhc3MgbWFudWFsbHkuXG5cdCovXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcblx0ZXhwb3J0cy5pbnN0YW5jZU9mU3VwcG9ydGVkRXZlbnRSZXNwb25zZSA9IGluc3RhbmNlT2ZTdXBwb3J0ZWRFdmVudFJlc3BvbnNlO1xuXHRleHBvcnRzLlN1cHBvcnRlZEV2ZW50UmVzcG9uc2VGcm9tSlNPTiA9IFN1cHBvcnRlZEV2ZW50UmVzcG9uc2VGcm9tSlNPTjtcblx0ZXhwb3J0cy5TdXBwb3J0ZWRFdmVudFJlc3BvbnNlRnJvbUpTT05UeXBlZCA9IFN1cHBvcnRlZEV2ZW50UmVzcG9uc2VGcm9tSlNPTlR5cGVkO1xuXHRleHBvcnRzLlN1cHBvcnRlZEV2ZW50UmVzcG9uc2VUb0pTT04gPSBTdXBwb3J0ZWRFdmVudFJlc3BvbnNlVG9KU09OO1xuXHRleHBvcnRzLlN1cHBvcnRlZEV2ZW50UmVzcG9uc2VUb0pTT05UeXBlZCA9IFN1cHBvcnRlZEV2ZW50UmVzcG9uc2VUb0pTT05UeXBlZDtcblx0Y29uc3QgU3VwcG9ydGVkRXZlbnRQcm9kdWN0Q2F0ZWdvcnlfMSA9IHJlcXVpcmVfU3VwcG9ydGVkRXZlbnRQcm9kdWN0Q2F0ZWdvcnkoKTtcblx0LyoqXG5cdCogQ2hlY2sgaWYgYSBnaXZlbiBvYmplY3QgaW1wbGVtZW50cyB0aGUgU3VwcG9ydGVkRXZlbnRSZXNwb25zZSBpbnRlcmZhY2UuXG5cdCovXG5cdGZ1bmN0aW9uIGluc3RhbmNlT2ZTdXBwb3J0ZWRFdmVudFJlc3BvbnNlKHZhbHVlKSB7XG5cdFx0aWYgKCEoXCJjcmVhdGVkX2F0XCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wiY3JlYXRlZF9hdFwiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0aWYgKCEoXCJpZFwiIGluIHZhbHVlKSB8fCB2YWx1ZVtcImlkXCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRpZiAoIShcInJlYWR5XCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wicmVhZHlcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdGlmICghKFwic3VwcG9ydGVkXCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wic3VwcG9ydGVkXCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHRmdW5jdGlvbiBTdXBwb3J0ZWRFdmVudFJlc3BvbnNlRnJvbUpTT04oanNvbikge1xuXHRcdHJldHVybiBTdXBwb3J0ZWRFdmVudFJlc3BvbnNlRnJvbUpTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gU3VwcG9ydGVkRXZlbnRSZXNwb25zZUZyb21KU09OVHlwZWQoanNvbiwgaWdub3JlRGlzY3JpbWluYXRvcikge1xuXHRcdGlmIChqc29uID09IG51bGwpIHJldHVybiBqc29uO1xuXHRcdHJldHVybiB7XG5cdFx0XHRcImNhdGVnb3J5XCI6IGpzb25bXCJjYXRlZ29yeVwiXSA9PSBudWxsID8gdm9pZCAwIDogKDAsIFN1cHBvcnRlZEV2ZW50UHJvZHVjdENhdGVnb3J5XzEuU3VwcG9ydGVkRXZlbnRQcm9kdWN0Q2F0ZWdvcnlGcm9tSlNPTikoanNvbltcImNhdGVnb3J5XCJdKSxcblx0XHRcdFwiY29sbGVjdGlvbnNcIjoganNvbltcImNvbGxlY3Rpb25zXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wiY29sbGVjdGlvbnNcIl0sXG5cdFx0XHRcImNyZWF0ZWRfYXRcIjoganNvbltcImNyZWF0ZWRfYXRcIl0sXG5cdFx0XHRcImlkXCI6IGpzb25bXCJpZFwiXSxcblx0XHRcdFwibWVyY2hhbnRfdGFnc1wiOiBqc29uW1wibWVyY2hhbnRfdGFnc1wiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcIm1lcmNoYW50X3RhZ3NcIl0sXG5cdFx0XHRcIm51bV9vZl9yZXZpZXdzXCI6IGpzb25bXCJudW1fb2ZfcmV2aWV3c1wiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcIm51bV9vZl9yZXZpZXdzXCJdLFxuXHRcdFx0XCJyZWFkeVwiOiBqc29uW1wicmVhZHlcIl0sXG5cdFx0XHRcInN1cHBvcnRlZFwiOiBqc29uW1wic3VwcG9ydGVkXCJdLFxuXHRcdFx0XCJ0b3BfY2F0ZWdvcnlcIjoganNvbltcInRvcF9jYXRlZ29yeVwiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcInRvcF9jYXRlZ29yeVwiXVxuXHRcdH07XG5cdH1cblx0ZnVuY3Rpb24gU3VwcG9ydGVkRXZlbnRSZXNwb25zZVRvSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIFN1cHBvcnRlZEV2ZW50UmVzcG9uc2VUb0pTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gU3VwcG9ydGVkRXZlbnRSZXNwb25zZVRvSlNPTlR5cGVkKHZhbHVlLCBpZ25vcmVEaXNjcmltaW5hdG9yID0gZmFsc2UpIHtcblx0XHRpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIHZhbHVlO1xuXHRcdHJldHVybiB7XG5cdFx0XHRcImNhdGVnb3J5XCI6ICgwLCBTdXBwb3J0ZWRFdmVudFByb2R1Y3RDYXRlZ29yeV8xLlN1cHBvcnRlZEV2ZW50UHJvZHVjdENhdGVnb3J5VG9KU09OKSh2YWx1ZVtcImNhdGVnb3J5XCJdKSxcblx0XHRcdFwiY29sbGVjdGlvbnNcIjogdmFsdWVbXCJjb2xsZWN0aW9uc1wiXSxcblx0XHRcdFwiY3JlYXRlZF9hdFwiOiB2YWx1ZVtcImNyZWF0ZWRfYXRcIl0sXG5cdFx0XHRcImlkXCI6IHZhbHVlW1wiaWRcIl0sXG5cdFx0XHRcIm1lcmNoYW50X3RhZ3NcIjogdmFsdWVbXCJtZXJjaGFudF90YWdzXCJdLFxuXHRcdFx0XCJudW1fb2ZfcmV2aWV3c1wiOiB2YWx1ZVtcIm51bV9vZl9yZXZpZXdzXCJdLFxuXHRcdFx0XCJyZWFkeVwiOiB2YWx1ZVtcInJlYWR5XCJdLFxuXHRcdFx0XCJzdXBwb3J0ZWRcIjogdmFsdWVbXCJzdXBwb3J0ZWRcIl0sXG5cdFx0XHRcInRvcF9jYXRlZ29yeVwiOiB2YWx1ZVtcInRvcF9jYXRlZ29yeVwiXVxuXHRcdH07XG5cdH1cbn0pIH0pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiAuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL1VybFJlc29sdmluZ0dlbmVyaWNDb25maWcuanNcbnZhciByZXF1aXJlX1VybFJlc29sdmluZ0dlbmVyaWNDb25maWcgPSAvKiBAX19QVVJFX18gKi8gX19jb21tb25KUyh7IFwiLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9VcmxSZXNvbHZpbmdHZW5lcmljQ29uZmlnLmpzXCI6ICgoZXhwb3J0cykgPT4ge1xuXHQvKipcblx0KiBDb21tZXJjZVxuXHQqIE5vIGRlc2NyaXB0aW9uIHByb3ZpZGVkIChnZW5lcmF0ZWQgYnkgT3BlbmFwaSBHZW5lcmF0b3IgaHR0cHM6Ly9naXRodWIuY29tL29wZW5hcGl0b29scy9vcGVuYXBpLWdlbmVyYXRvcilcblx0KlxuXHQqIFRoZSB2ZXJzaW9uIG9mIHRoZSBPcGVuQVBJIGRvY3VtZW50OiAxLjEuMFxuXHQqXG5cdCpcblx0KiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IE9wZW5BUEkgR2VuZXJhdG9yIChodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2gpLlxuXHQqIGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaFxuXHQqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cblx0Ki9cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuXHRleHBvcnRzLmluc3RhbmNlT2ZVcmxSZXNvbHZpbmdHZW5lcmljQ29uZmlnID0gaW5zdGFuY2VPZlVybFJlc29sdmluZ0dlbmVyaWNDb25maWc7XG5cdGV4cG9ydHMuVXJsUmVzb2x2aW5nR2VuZXJpY0NvbmZpZ0Zyb21KU09OID0gVXJsUmVzb2x2aW5nR2VuZXJpY0NvbmZpZ0Zyb21KU09OO1xuXHRleHBvcnRzLlVybFJlc29sdmluZ0dlbmVyaWNDb25maWdGcm9tSlNPTlR5cGVkID0gVXJsUmVzb2x2aW5nR2VuZXJpY0NvbmZpZ0Zyb21KU09OVHlwZWQ7XG5cdGV4cG9ydHMuVXJsUmVzb2x2aW5nR2VuZXJpY0NvbmZpZ1RvSlNPTiA9IFVybFJlc29sdmluZ0dlbmVyaWNDb25maWdUb0pTT047XG5cdGV4cG9ydHMuVXJsUmVzb2x2aW5nR2VuZXJpY0NvbmZpZ1RvSlNPTlR5cGVkID0gVXJsUmVzb2x2aW5nR2VuZXJpY0NvbmZpZ1RvSlNPTlR5cGVkO1xuXHQvKipcblx0KiBDaGVjayBpZiBhIGdpdmVuIG9iamVjdCBpbXBsZW1lbnRzIHRoZSBVcmxSZXNvbHZpbmdHZW5lcmljQ29uZmlnIGludGVyZmFjZS5cblx0Ki9cblx0ZnVuY3Rpb24gaW5zdGFuY2VPZlVybFJlc29sdmluZ0dlbmVyaWNDb25maWcodmFsdWUpIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHRmdW5jdGlvbiBVcmxSZXNvbHZpbmdHZW5lcmljQ29uZmlnRnJvbUpTT04oanNvbikge1xuXHRcdHJldHVybiBVcmxSZXNvbHZpbmdHZW5lcmljQ29uZmlnRnJvbUpTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gVXJsUmVzb2x2aW5nR2VuZXJpY0NvbmZpZ0Zyb21KU09OVHlwZWQoanNvbiwgaWdub3JlRGlzY3JpbWluYXRvcikge1xuXHRcdGlmIChqc29uID09IG51bGwpIHJldHVybiBqc29uO1xuXHRcdHJldHVybiB7IFwiZGV0YWlsc1wiOiBqc29uW1wiZGV0YWlsc1wiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcImRldGFpbHNcIl0gfTtcblx0fVxuXHRmdW5jdGlvbiBVcmxSZXNvbHZpbmdHZW5lcmljQ29uZmlnVG9KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gVXJsUmVzb2x2aW5nR2VuZXJpY0NvbmZpZ1RvSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBVcmxSZXNvbHZpbmdHZW5lcmljQ29uZmlnVG9KU09OVHlwZWQodmFsdWUsIGlnbm9yZURpc2NyaW1pbmF0b3IgPSBmYWxzZSkge1xuXHRcdGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gdmFsdWU7XG5cdFx0cmV0dXJuIHsgXCJkZXRhaWxzXCI6IHZhbHVlW1wiZGV0YWlsc1wiXSB9O1xuXHR9XG59KSB9KTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9VcmxSZXNvbHZpbmdQRFBDb25maWcuanNcbnZhciByZXF1aXJlX1VybFJlc29sdmluZ1BEUENvbmZpZyA9IC8qIEBfX1BVUkVfXyAqLyBfX2NvbW1vbkpTKHsgXCIuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL1VybFJlc29sdmluZ1BEUENvbmZpZy5qc1wiOiAoKGV4cG9ydHMpID0+IHtcblx0LyoqXG5cdCogQ29tbWVyY2Vcblx0KiBObyBkZXNjcmlwdGlvbiBwcm92aWRlZCAoZ2VuZXJhdGVkIGJ5IE9wZW5hcGkgR2VuZXJhdG9yIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuYXBpdG9vbHMvb3BlbmFwaS1nZW5lcmF0b3IpXG5cdCpcblx0KiBUaGUgdmVyc2lvbiBvZiB0aGUgT3BlbkFQSSBkb2N1bWVudDogMS4xLjBcblx0KlxuXHQqXG5cdCogTk9URTogVGhpcyBjbGFzcyBpcyBhdXRvIGdlbmVyYXRlZCBieSBPcGVuQVBJIEdlbmVyYXRvciAoaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoKS5cblx0KiBodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2hcblx0KiBEbyBub3QgZWRpdCB0aGUgY2xhc3MgbWFudWFsbHkuXG5cdCovXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcblx0ZXhwb3J0cy5pbnN0YW5jZU9mVXJsUmVzb2x2aW5nUERQQ29uZmlnID0gaW5zdGFuY2VPZlVybFJlc29sdmluZ1BEUENvbmZpZztcblx0ZXhwb3J0cy5VcmxSZXNvbHZpbmdQRFBDb25maWdGcm9tSlNPTiA9IFVybFJlc29sdmluZ1BEUENvbmZpZ0Zyb21KU09OO1xuXHRleHBvcnRzLlVybFJlc29sdmluZ1BEUENvbmZpZ0Zyb21KU09OVHlwZWQgPSBVcmxSZXNvbHZpbmdQRFBDb25maWdGcm9tSlNPTlR5cGVkO1xuXHRleHBvcnRzLlVybFJlc29sdmluZ1BEUENvbmZpZ1RvSlNPTiA9IFVybFJlc29sdmluZ1BEUENvbmZpZ1RvSlNPTjtcblx0ZXhwb3J0cy5VcmxSZXNvbHZpbmdQRFBDb25maWdUb0pTT05UeXBlZCA9IFVybFJlc29sdmluZ1BEUENvbmZpZ1RvSlNPTlR5cGVkO1xuXHRjb25zdCBQRFBBdHRyaWJ1dGVzXzEgPSByZXF1aXJlX1BEUEF0dHJpYnV0ZXMoKTtcblx0LyoqXG5cdCogQ2hlY2sgaWYgYSBnaXZlbiBvYmplY3QgaW1wbGVtZW50cyB0aGUgVXJsUmVzb2x2aW5nUERQQ29uZmlnIGludGVyZmFjZS5cblx0Ki9cblx0ZnVuY3Rpb24gaW5zdGFuY2VPZlVybFJlc29sdmluZ1BEUENvbmZpZyh2YWx1ZSkge1xuXHRcdGlmICghKFwicGRwX2F0dHJpYnV0ZXNcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJwZHBfYXR0cmlidXRlc1wiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0ZnVuY3Rpb24gVXJsUmVzb2x2aW5nUERQQ29uZmlnRnJvbUpTT04oanNvbikge1xuXHRcdHJldHVybiBVcmxSZXNvbHZpbmdQRFBDb25maWdGcm9tSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBVcmxSZXNvbHZpbmdQRFBDb25maWdGcm9tSlNPTlR5cGVkKGpzb24sIGlnbm9yZURpc2NyaW1pbmF0b3IpIHtcblx0XHRpZiAoanNvbiA9PSBudWxsKSByZXR1cm4ganNvbjtcblx0XHRyZXR1cm4ge1xuXHRcdFx0XCJjb2xsZWN0aW9uc1wiOiBqc29uW1wiY29sbGVjdGlvbnNcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IGpzb25bXCJjb2xsZWN0aW9uc1wiXSxcblx0XHRcdFwibWVyY2hhbnRfdGFnc1wiOiBqc29uW1wibWVyY2hhbnRfdGFnc1wiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcIm1lcmNoYW50X3RhZ3NcIl0sXG5cdFx0XHRcIm51bWJlcl9vZl9yZXZpZXdzXCI6IGpzb25bXCJudW1iZXJfb2ZfcmV2aWV3c1wiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcIm51bWJlcl9vZl9yZXZpZXdzXCJdLFxuXHRcdFx0XCJwZHBfYXR0cmlidXRlc1wiOiAoMCwgUERQQXR0cmlidXRlc18xLlBEUEF0dHJpYnV0ZXNGcm9tSlNPTikoanNvbltcInBkcF9hdHRyaWJ1dGVzXCJdKVxuXHRcdH07XG5cdH1cblx0ZnVuY3Rpb24gVXJsUmVzb2x2aW5nUERQQ29uZmlnVG9KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gVXJsUmVzb2x2aW5nUERQQ29uZmlnVG9KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIFVybFJlc29sdmluZ1BEUENvbmZpZ1RvSlNPTlR5cGVkKHZhbHVlLCBpZ25vcmVEaXNjcmltaW5hdG9yID0gZmFsc2UpIHtcblx0XHRpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIHZhbHVlO1xuXHRcdHJldHVybiB7XG5cdFx0XHRcImNvbGxlY3Rpb25zXCI6IHZhbHVlW1wiY29sbGVjdGlvbnNcIl0sXG5cdFx0XHRcIm1lcmNoYW50X3RhZ3NcIjogdmFsdWVbXCJtZXJjaGFudF90YWdzXCJdLFxuXHRcdFx0XCJudW1iZXJfb2ZfcmV2aWV3c1wiOiB2YWx1ZVtcIm51bWJlcl9vZl9yZXZpZXdzXCJdLFxuXHRcdFx0XCJwZHBfYXR0cmlidXRlc1wiOiAoMCwgUERQQXR0cmlidXRlc18xLlBEUEF0dHJpYnV0ZXNUb0pTT04pKHZhbHVlW1wicGRwX2F0dHJpYnV0ZXNcIl0pXG5cdFx0fTtcblx0fVxufSkgfSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIC4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvVXJsUmVzb2x2aW5nUExQQ29uZmlnLmpzXG52YXIgcmVxdWlyZV9VcmxSZXNvbHZpbmdQTFBDb25maWcgPSAvKiBAX19QVVJFX18gKi8gX19jb21tb25KUyh7IFwiLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9VcmxSZXNvbHZpbmdQTFBDb25maWcuanNcIjogKChleHBvcnRzKSA9PiB7XG5cdC8qKlxuXHQqIENvbW1lcmNlXG5cdCogTm8gZGVzY3JpcHRpb24gcHJvdmlkZWQgKGdlbmVyYXRlZCBieSBPcGVuYXBpIEdlbmVyYXRvciBodHRwczovL2dpdGh1Yi5jb20vb3BlbmFwaXRvb2xzL29wZW5hcGktZ2VuZXJhdG9yKVxuXHQqXG5cdCogVGhlIHZlcnNpb24gb2YgdGhlIE9wZW5BUEkgZG9jdW1lbnQ6IDEuMS4wXG5cdCpcblx0KlxuXHQqIE5PVEU6IFRoaXMgY2xhc3MgaXMgYXV0byBnZW5lcmF0ZWQgYnkgT3BlbkFQSSBHZW5lcmF0b3IgKGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaCkuXG5cdCogaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoXG5cdCogRG8gbm90IGVkaXQgdGhlIGNsYXNzIG1hbnVhbGx5LlxuXHQqL1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5cdGV4cG9ydHMuaW5zdGFuY2VPZlVybFJlc29sdmluZ1BMUENvbmZpZyA9IGluc3RhbmNlT2ZVcmxSZXNvbHZpbmdQTFBDb25maWc7XG5cdGV4cG9ydHMuVXJsUmVzb2x2aW5nUExQQ29uZmlnRnJvbUpTT04gPSBVcmxSZXNvbHZpbmdQTFBDb25maWdGcm9tSlNPTjtcblx0ZXhwb3J0cy5VcmxSZXNvbHZpbmdQTFBDb25maWdGcm9tSlNPTlR5cGVkID0gVXJsUmVzb2x2aW5nUExQQ29uZmlnRnJvbUpTT05UeXBlZDtcblx0ZXhwb3J0cy5VcmxSZXNvbHZpbmdQTFBDb25maWdUb0pTT04gPSBVcmxSZXNvbHZpbmdQTFBDb25maWdUb0pTT047XG5cdGV4cG9ydHMuVXJsUmVzb2x2aW5nUExQQ29uZmlnVG9KU09OVHlwZWQgPSBVcmxSZXNvbHZpbmdQTFBDb25maWdUb0pTT05UeXBlZDtcblx0Y29uc3QgUExQQXR0cmlidXRlc18xID0gcmVxdWlyZV9QTFBBdHRyaWJ1dGVzKCk7XG5cdC8qKlxuXHQqIENoZWNrIGlmIGEgZ2l2ZW4gb2JqZWN0IGltcGxlbWVudHMgdGhlIFVybFJlc29sdmluZ1BMUENvbmZpZyBpbnRlcmZhY2UuXG5cdCovXG5cdGZ1bmN0aW9uIGluc3RhbmNlT2ZVcmxSZXNvbHZpbmdQTFBDb25maWcodmFsdWUpIHtcblx0XHRpZiAoIShcInBscF9hdHRyaWJ1dGVzXCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wicGxwX2F0dHJpYnV0ZXNcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdGZ1bmN0aW9uIFVybFJlc29sdmluZ1BMUENvbmZpZ0Zyb21KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gVXJsUmVzb2x2aW5nUExQQ29uZmlnRnJvbUpTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gVXJsUmVzb2x2aW5nUExQQ29uZmlnRnJvbUpTT05UeXBlZChqc29uLCBpZ25vcmVEaXNjcmltaW5hdG9yKSB7XG5cdFx0aWYgKGpzb24gPT0gbnVsbCkgcmV0dXJuIGpzb247XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwicGxwX2F0dHJpYnV0ZXNcIjogKDAsIFBMUEF0dHJpYnV0ZXNfMS5QTFBBdHRyaWJ1dGVzRnJvbUpTT04pKGpzb25bXCJwbHBfYXR0cmlidXRlc1wiXSksXG5cdFx0XHRcInRvcF9jYXRlZ29yeVwiOiBqc29uW1widG9wX2NhdGVnb3J5XCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1widG9wX2NhdGVnb3J5XCJdXG5cdFx0fTtcblx0fVxuXHRmdW5jdGlvbiBVcmxSZXNvbHZpbmdQTFBDb25maWdUb0pTT04oanNvbikge1xuXHRcdHJldHVybiBVcmxSZXNvbHZpbmdQTFBDb25maWdUb0pTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gVXJsUmVzb2x2aW5nUExQQ29uZmlnVG9KU09OVHlwZWQodmFsdWUsIGlnbm9yZURpc2NyaW1pbmF0b3IgPSBmYWxzZSkge1xuXHRcdGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gdmFsdWU7XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwicGxwX2F0dHJpYnV0ZXNcIjogKDAsIFBMUEF0dHJpYnV0ZXNfMS5QTFBBdHRyaWJ1dGVzVG9KU09OKSh2YWx1ZVtcInBscF9hdHRyaWJ1dGVzXCJdKSxcblx0XHRcdFwidG9wX2NhdGVnb3J5XCI6IHZhbHVlW1widG9wX2NhdGVnb3J5XCJdXG5cdFx0fTtcblx0fVxufSkgfSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIC4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvVXJsUmVzb2x2aW5nUmVxdWVzdC5qc1xudmFyIHJlcXVpcmVfVXJsUmVzb2x2aW5nUmVxdWVzdCA9IC8qIEBfX1BVUkVfXyAqLyBfX2NvbW1vbkpTKHsgXCIuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL1VybFJlc29sdmluZ1JlcXVlc3QuanNcIjogKChleHBvcnRzKSA9PiB7XG5cdC8qKlxuXHQqIENvbW1lcmNlXG5cdCogTm8gZGVzY3JpcHRpb24gcHJvdmlkZWQgKGdlbmVyYXRlZCBieSBPcGVuYXBpIEdlbmVyYXRvciBodHRwczovL2dpdGh1Yi5jb20vb3BlbmFwaXRvb2xzL29wZW5hcGktZ2VuZXJhdG9yKVxuXHQqXG5cdCogVGhlIHZlcnNpb24gb2YgdGhlIE9wZW5BUEkgZG9jdW1lbnQ6IDEuMS4wXG5cdCpcblx0KlxuXHQqIE5PVEU6IFRoaXMgY2xhc3MgaXMgYXV0byBnZW5lcmF0ZWQgYnkgT3BlbkFQSSBHZW5lcmF0b3IgKGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaCkuXG5cdCogaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoXG5cdCogRG8gbm90IGVkaXQgdGhlIGNsYXNzIG1hbnVhbGx5LlxuXHQqL1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5cdGV4cG9ydHMuaW5zdGFuY2VPZlVybFJlc29sdmluZ1JlcXVlc3QgPSBpbnN0YW5jZU9mVXJsUmVzb2x2aW5nUmVxdWVzdDtcblx0ZXhwb3J0cy5VcmxSZXNvbHZpbmdSZXF1ZXN0RnJvbUpTT04gPSBVcmxSZXNvbHZpbmdSZXF1ZXN0RnJvbUpTT047XG5cdGV4cG9ydHMuVXJsUmVzb2x2aW5nUmVxdWVzdEZyb21KU09OVHlwZWQgPSBVcmxSZXNvbHZpbmdSZXF1ZXN0RnJvbUpTT05UeXBlZDtcblx0ZXhwb3J0cy5VcmxSZXNvbHZpbmdSZXF1ZXN0VG9KU09OID0gVXJsUmVzb2x2aW5nUmVxdWVzdFRvSlNPTjtcblx0ZXhwb3J0cy5VcmxSZXNvbHZpbmdSZXF1ZXN0VG9KU09OVHlwZWQgPSBVcmxSZXNvbHZpbmdSZXF1ZXN0VG9KU09OVHlwZWQ7XG5cdGNvbnN0IENvbnRleHRfMSA9IHJlcXVpcmVfQ29udGV4dCgpO1xuXHQvKipcblx0KiBDaGVjayBpZiBhIGdpdmVuIG9iamVjdCBpbXBsZW1lbnRzIHRoZSBVcmxSZXNvbHZpbmdSZXF1ZXN0IGludGVyZmFjZS5cblx0Ki9cblx0ZnVuY3Rpb24gaW5zdGFuY2VPZlVybFJlc29sdmluZ1JlcXVlc3QodmFsdWUpIHtcblx0XHRpZiAoIShcImNvbnRleHRcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJjb250ZXh0XCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRpZiAoIShcImZlYXR1cmVfZ2F0ZXNcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJmZWF0dXJlX2dhdGVzXCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRpZiAoIShcInVybFwiIGluIHZhbHVlKSB8fCB2YWx1ZVtcInVybFwiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0ZnVuY3Rpb24gVXJsUmVzb2x2aW5nUmVxdWVzdEZyb21KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gVXJsUmVzb2x2aW5nUmVxdWVzdEZyb21KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIFVybFJlc29sdmluZ1JlcXVlc3RGcm9tSlNPTlR5cGVkKGpzb24sIGlnbm9yZURpc2NyaW1pbmF0b3IpIHtcblx0XHRpZiAoanNvbiA9PSBudWxsKSByZXR1cm4ganNvbjtcblx0XHRyZXR1cm4ge1xuXHRcdFx0XCJjb250ZXh0XCI6ICgwLCBDb250ZXh0XzEuQ29udGV4dEZyb21KU09OKShqc29uW1wiY29udGV4dFwiXSksXG5cdFx0XHRcImZlYXR1cmVfZ2F0ZXNcIjoganNvbltcImZlYXR1cmVfZ2F0ZXNcIl0sXG5cdFx0XHRcInVybFwiOiBqc29uW1widXJsXCJdXG5cdFx0fTtcblx0fVxuXHRmdW5jdGlvbiBVcmxSZXNvbHZpbmdSZXF1ZXN0VG9KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gVXJsUmVzb2x2aW5nUmVxdWVzdFRvSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBVcmxSZXNvbHZpbmdSZXF1ZXN0VG9KU09OVHlwZWQodmFsdWUsIGlnbm9yZURpc2NyaW1pbmF0b3IgPSBmYWxzZSkge1xuXHRcdGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gdmFsdWU7XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwiY29udGV4dFwiOiAoMCwgQ29udGV4dF8xLkNvbnRleHRUb0pTT04pKHZhbHVlW1wiY29udGV4dFwiXSksXG5cdFx0XHRcImZlYXR1cmVfZ2F0ZXNcIjogdmFsdWVbXCJmZWF0dXJlX2dhdGVzXCJdLFxuXHRcdFx0XCJ1cmxcIjogdmFsdWVbXCJ1cmxcIl1cblx0XHR9O1xuXHR9XG59KSB9KTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9VcmxSZXNvbHZpbmdSZXNwb25zZVNwZWNpZmljRGV0YWlscy5qc1xudmFyIHJlcXVpcmVfVXJsUmVzb2x2aW5nUmVzcG9uc2VTcGVjaWZpY0RldGFpbHMgPSAvKiBAX19QVVJFX18gKi8gX19jb21tb25KUyh7IFwiLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9VcmxSZXNvbHZpbmdSZXNwb25zZVNwZWNpZmljRGV0YWlscy5qc1wiOiAoKGV4cG9ydHMpID0+IHtcblx0LyoqXG5cdCogQ29tbWVyY2Vcblx0KiBObyBkZXNjcmlwdGlvbiBwcm92aWRlZCAoZ2VuZXJhdGVkIGJ5IE9wZW5hcGkgR2VuZXJhdG9yIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuYXBpdG9vbHMvb3BlbmFwaS1nZW5lcmF0b3IpXG5cdCpcblx0KiBUaGUgdmVyc2lvbiBvZiB0aGUgT3BlbkFQSSBkb2N1bWVudDogMS4xLjBcblx0KlxuXHQqXG5cdCogTk9URTogVGhpcyBjbGFzcyBpcyBhdXRvIGdlbmVyYXRlZCBieSBPcGVuQVBJIEdlbmVyYXRvciAoaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoKS5cblx0KiBodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2hcblx0KiBEbyBub3QgZWRpdCB0aGUgY2xhc3MgbWFudWFsbHkuXG5cdCovXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcblx0ZXhwb3J0cy5VcmxSZXNvbHZpbmdSZXNwb25zZVNwZWNpZmljRGV0YWlsc0Zyb21KU09OID0gVXJsUmVzb2x2aW5nUmVzcG9uc2VTcGVjaWZpY0RldGFpbHNGcm9tSlNPTjtcblx0ZXhwb3J0cy5VcmxSZXNvbHZpbmdSZXNwb25zZVNwZWNpZmljRGV0YWlsc0Zyb21KU09OVHlwZWQgPSBVcmxSZXNvbHZpbmdSZXNwb25zZVNwZWNpZmljRGV0YWlsc0Zyb21KU09OVHlwZWQ7XG5cdGV4cG9ydHMuVXJsUmVzb2x2aW5nUmVzcG9uc2VTcGVjaWZpY0RldGFpbHNUb0pTT04gPSBVcmxSZXNvbHZpbmdSZXNwb25zZVNwZWNpZmljRGV0YWlsc1RvSlNPTjtcblx0ZXhwb3J0cy5VcmxSZXNvbHZpbmdSZXNwb25zZVNwZWNpZmljRGV0YWlsc1RvSlNPTlR5cGVkID0gVXJsUmVzb2x2aW5nUmVzcG9uc2VTcGVjaWZpY0RldGFpbHNUb0pTT05UeXBlZDtcblx0Y29uc3QgVXJsUmVzb2x2aW5nR2VuZXJpY0NvbmZpZ18xID0gcmVxdWlyZV9VcmxSZXNvbHZpbmdHZW5lcmljQ29uZmlnKCk7XG5cdGNvbnN0IFVybFJlc29sdmluZ1BEUENvbmZpZ18xID0gcmVxdWlyZV9VcmxSZXNvbHZpbmdQRFBDb25maWcoKTtcblx0Y29uc3QgVXJsUmVzb2x2aW5nUExQQ29uZmlnXzEgPSByZXF1aXJlX1VybFJlc29sdmluZ1BMUENvbmZpZygpO1xuXHRmdW5jdGlvbiBVcmxSZXNvbHZpbmdSZXNwb25zZVNwZWNpZmljRGV0YWlsc0Zyb21KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gVXJsUmVzb2x2aW5nUmVzcG9uc2VTcGVjaWZpY0RldGFpbHNGcm9tSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBVcmxSZXNvbHZpbmdSZXNwb25zZVNwZWNpZmljRGV0YWlsc0Zyb21KU09OVHlwZWQoanNvbiwgaWdub3JlRGlzY3JpbWluYXRvcikge1xuXHRcdGlmIChqc29uID09IG51bGwpIHJldHVybiBqc29uO1xuXHRcdGlmICgoMCwgVXJsUmVzb2x2aW5nR2VuZXJpY0NvbmZpZ18xLmluc3RhbmNlT2ZVcmxSZXNvbHZpbmdHZW5lcmljQ29uZmlnKShqc29uKSkgcmV0dXJuICgwLCBVcmxSZXNvbHZpbmdHZW5lcmljQ29uZmlnXzEuVXJsUmVzb2x2aW5nR2VuZXJpY0NvbmZpZ0Zyb21KU09OVHlwZWQpKGpzb24sIHRydWUpO1xuXHRcdGlmICgoMCwgVXJsUmVzb2x2aW5nUERQQ29uZmlnXzEuaW5zdGFuY2VPZlVybFJlc29sdmluZ1BEUENvbmZpZykoanNvbikpIHJldHVybiAoMCwgVXJsUmVzb2x2aW5nUERQQ29uZmlnXzEuVXJsUmVzb2x2aW5nUERQQ29uZmlnRnJvbUpTT05UeXBlZCkoanNvbiwgdHJ1ZSk7XG5cdFx0aWYgKCgwLCBVcmxSZXNvbHZpbmdQTFBDb25maWdfMS5pbnN0YW5jZU9mVXJsUmVzb2x2aW5nUExQQ29uZmlnKShqc29uKSkgcmV0dXJuICgwLCBVcmxSZXNvbHZpbmdQTFBDb25maWdfMS5VcmxSZXNvbHZpbmdQTFBDb25maWdGcm9tSlNPTlR5cGVkKShqc29uLCB0cnVlKTtcblx0XHRyZXR1cm4ge307XG5cdH1cblx0ZnVuY3Rpb24gVXJsUmVzb2x2aW5nUmVzcG9uc2VTcGVjaWZpY0RldGFpbHNUb0pTT04oanNvbikge1xuXHRcdHJldHVybiBVcmxSZXNvbHZpbmdSZXNwb25zZVNwZWNpZmljRGV0YWlsc1RvSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBVcmxSZXNvbHZpbmdSZXNwb25zZVNwZWNpZmljRGV0YWlsc1RvSlNPTlR5cGVkKHZhbHVlLCBpZ25vcmVEaXNjcmltaW5hdG9yID0gZmFsc2UpIHtcblx0XHRpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIHZhbHVlO1xuXHRcdGlmICgoMCwgVXJsUmVzb2x2aW5nR2VuZXJpY0NvbmZpZ18xLmluc3RhbmNlT2ZVcmxSZXNvbHZpbmdHZW5lcmljQ29uZmlnKSh2YWx1ZSkpIHJldHVybiAoMCwgVXJsUmVzb2x2aW5nR2VuZXJpY0NvbmZpZ18xLlVybFJlc29sdmluZ0dlbmVyaWNDb25maWdUb0pTT04pKHZhbHVlKTtcblx0XHRpZiAoKDAsIFVybFJlc29sdmluZ1BEUENvbmZpZ18xLmluc3RhbmNlT2ZVcmxSZXNvbHZpbmdQRFBDb25maWcpKHZhbHVlKSkgcmV0dXJuICgwLCBVcmxSZXNvbHZpbmdQRFBDb25maWdfMS5VcmxSZXNvbHZpbmdQRFBDb25maWdUb0pTT04pKHZhbHVlKTtcblx0XHRpZiAoKDAsIFVybFJlc29sdmluZ1BMUENvbmZpZ18xLmluc3RhbmNlT2ZVcmxSZXNvbHZpbmdQTFBDb25maWcpKHZhbHVlKSkgcmV0dXJuICgwLCBVcmxSZXNvbHZpbmdQTFBDb25maWdfMS5VcmxSZXNvbHZpbmdQTFBDb25maWdUb0pTT04pKHZhbHVlKTtcblx0XHRyZXR1cm4ge307XG5cdH1cbn0pIH0pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiAuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL1VybFJlc29sdmluZ1R5cGUuanNcbnZhciByZXF1aXJlX1VybFJlc29sdmluZ1R5cGUgPSAvKiBAX19QVVJFX18gKi8gX19jb21tb25KUyh7IFwiLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9VcmxSZXNvbHZpbmdUeXBlLmpzXCI6ICgoZXhwb3J0cykgPT4ge1xuXHQvKipcblx0KiBDb21tZXJjZVxuXHQqIE5vIGRlc2NyaXB0aW9uIHByb3ZpZGVkIChnZW5lcmF0ZWQgYnkgT3BlbmFwaSBHZW5lcmF0b3IgaHR0cHM6Ly9naXRodWIuY29tL29wZW5hcGl0b29scy9vcGVuYXBpLWdlbmVyYXRvcilcblx0KlxuXHQqIFRoZSB2ZXJzaW9uIG9mIHRoZSBPcGVuQVBJIGRvY3VtZW50OiAxLjEuMFxuXHQqXG5cdCpcblx0KiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IE9wZW5BUEkgR2VuZXJhdG9yIChodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2gpLlxuXHQqIGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaFxuXHQqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cblx0Ki9cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuXHRleHBvcnRzLlVybFJlc29sdmluZ1R5cGUgPSB2b2lkIDA7XG5cdGV4cG9ydHMuaW5zdGFuY2VPZlVybFJlc29sdmluZ1R5cGUgPSBpbnN0YW5jZU9mVXJsUmVzb2x2aW5nVHlwZTtcblx0ZXhwb3J0cy5VcmxSZXNvbHZpbmdUeXBlRnJvbUpTT04gPSBVcmxSZXNvbHZpbmdUeXBlRnJvbUpTT047XG5cdGV4cG9ydHMuVXJsUmVzb2x2aW5nVHlwZUZyb21KU09OVHlwZWQgPSBVcmxSZXNvbHZpbmdUeXBlRnJvbUpTT05UeXBlZDtcblx0ZXhwb3J0cy5VcmxSZXNvbHZpbmdUeXBlVG9KU09OID0gVXJsUmVzb2x2aW5nVHlwZVRvSlNPTjtcblx0ZXhwb3J0cy5VcmxSZXNvbHZpbmdUeXBlVG9KU09OVHlwZWQgPSBVcmxSZXNvbHZpbmdUeXBlVG9KU09OVHlwZWQ7XG5cdC8qKlxuXHQqIFR5cGUgb2YgcGFnZSB2YXJpYW50XG5cdCogQGV4cG9ydFxuXHQqIEBlbnVtIHtzdHJpbmd9XG5cdCovXG5cdHZhciBVcmxSZXNvbHZpbmdUeXBlO1xuXHQoZnVuY3Rpb24oVXJsUmVzb2x2aW5nVHlwZSQxKSB7XG5cdFx0VXJsUmVzb2x2aW5nVHlwZSQxW1wiUGRwXCJdID0gXCJwZHBcIjtcblx0XHRVcmxSZXNvbHZpbmdUeXBlJDFbXCJQbHBcIl0gPSBcInBscFwiO1xuXHRcdFVybFJlc29sdmluZ1R5cGUkMVtcIlNlYXJjaFwiXSA9IFwic2VhcmNoXCI7XG5cdFx0VXJsUmVzb2x2aW5nVHlwZSQxW1wiT3RoZXJcIl0gPSBcIm90aGVyXCI7XG5cdFx0VXJsUmVzb2x2aW5nVHlwZSQxW1wiSG9tZXBhZ2VcIl0gPSBcImhvbWVwYWdlXCI7XG5cdFx0VXJsUmVzb2x2aW5nVHlwZSQxW1wiUGFnZVwiXSA9IFwicGFnZVwiO1xuXHRcdFVybFJlc29sdmluZ1R5cGUkMVtcIlVuc3VwcG9ydGVkXCJdID0gXCJ1bnN1cHBvcnRlZFwiO1xuXHR9KShVcmxSZXNvbHZpbmdUeXBlIHx8IChleHBvcnRzLlVybFJlc29sdmluZ1R5cGUgPSBVcmxSZXNvbHZpbmdUeXBlID0ge30pKTtcblx0ZnVuY3Rpb24gaW5zdGFuY2VPZlVybFJlc29sdmluZ1R5cGUodmFsdWUpIHtcblx0XHRmb3IgKGNvbnN0IGtleSBpbiBVcmxSZXNvbHZpbmdUeXBlKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFVybFJlc29sdmluZ1R5cGUsIGtleSkpIHtcblx0XHRcdGlmIChVcmxSZXNvbHZpbmdUeXBlW2tleV0gPT09IHZhbHVlKSByZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGZ1bmN0aW9uIFVybFJlc29sdmluZ1R5cGVGcm9tSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIFVybFJlc29sdmluZ1R5cGVGcm9tSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBVcmxSZXNvbHZpbmdUeXBlRnJvbUpTT05UeXBlZChqc29uLCBpZ25vcmVEaXNjcmltaW5hdG9yKSB7XG5cdFx0cmV0dXJuIGpzb247XG5cdH1cblx0ZnVuY3Rpb24gVXJsUmVzb2x2aW5nVHlwZVRvSlNPTih2YWx1ZSkge1xuXHRcdHJldHVybiB2YWx1ZTtcblx0fVxuXHRmdW5jdGlvbiBVcmxSZXNvbHZpbmdUeXBlVG9KU09OVHlwZWQodmFsdWUsIGlnbm9yZURpc2NyaW1pbmF0b3IpIHtcblx0XHRyZXR1cm4gdmFsdWU7XG5cdH1cbn0pIH0pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiAuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL1VybFJlc29sdmluZ1Jlc3BvbnNlLmpzXG52YXIgcmVxdWlyZV9VcmxSZXNvbHZpbmdSZXNwb25zZSA9IC8qIEBfX1BVUkVfXyAqLyBfX2NvbW1vbkpTKHsgXCIuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL1VybFJlc29sdmluZ1Jlc3BvbnNlLmpzXCI6ICgoZXhwb3J0cykgPT4ge1xuXHQvKipcblx0KiBDb21tZXJjZVxuXHQqIE5vIGRlc2NyaXB0aW9uIHByb3ZpZGVkIChnZW5lcmF0ZWQgYnkgT3BlbmFwaSBHZW5lcmF0b3IgaHR0cHM6Ly9naXRodWIuY29tL29wZW5hcGl0b29scy9vcGVuYXBpLWdlbmVyYXRvcilcblx0KlxuXHQqIFRoZSB2ZXJzaW9uIG9mIHRoZSBPcGVuQVBJIGRvY3VtZW50OiAxLjEuMFxuXHQqXG5cdCpcblx0KiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IE9wZW5BUEkgR2VuZXJhdG9yIChodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2gpLlxuXHQqIGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaFxuXHQqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cblx0Ki9cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuXHRleHBvcnRzLmluc3RhbmNlT2ZVcmxSZXNvbHZpbmdSZXNwb25zZSA9IGluc3RhbmNlT2ZVcmxSZXNvbHZpbmdSZXNwb25zZTtcblx0ZXhwb3J0cy5VcmxSZXNvbHZpbmdSZXNwb25zZUZyb21KU09OID0gVXJsUmVzb2x2aW5nUmVzcG9uc2VGcm9tSlNPTjtcblx0ZXhwb3J0cy5VcmxSZXNvbHZpbmdSZXNwb25zZUZyb21KU09OVHlwZWQgPSBVcmxSZXNvbHZpbmdSZXNwb25zZUZyb21KU09OVHlwZWQ7XG5cdGV4cG9ydHMuVXJsUmVzb2x2aW5nUmVzcG9uc2VUb0pTT04gPSBVcmxSZXNvbHZpbmdSZXNwb25zZVRvSlNPTjtcblx0ZXhwb3J0cy5VcmxSZXNvbHZpbmdSZXNwb25zZVRvSlNPTlR5cGVkID0gVXJsUmVzb2x2aW5nUmVzcG9uc2VUb0pTT05UeXBlZDtcblx0Y29uc3QgVXJsUmVzb2x2aW5nUmVzcG9uc2VTcGVjaWZpY0RldGFpbHNfMSA9IHJlcXVpcmVfVXJsUmVzb2x2aW5nUmVzcG9uc2VTcGVjaWZpY0RldGFpbHMoKTtcblx0Y29uc3QgVXJsUmVzb2x2aW5nVHlwZV8xID0gcmVxdWlyZV9VcmxSZXNvbHZpbmdUeXBlKCk7XG5cdGNvbnN0IFVzZXJFdmVudF8xJDEgPSByZXF1aXJlX1VzZXJFdmVudCgpO1xuXHQvKipcblx0KiBDaGVjayBpZiBhIGdpdmVuIG9iamVjdCBpbXBsZW1lbnRzIHRoZSBVcmxSZXNvbHZpbmdSZXNwb25zZSBpbnRlcmZhY2UuXG5cdCovXG5cdGZ1bmN0aW9uIGluc3RhbmNlT2ZVcmxSZXNvbHZpbmdSZXNwb25zZSh2YWx1ZSkge1xuXHRcdGlmICghKFwicmVhZHlcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJyZWFkeVwiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0aWYgKCEoXCJzcGVjaWZpY19kZXRhaWxzXCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wic3BlY2lmaWNfZGV0YWlsc1wiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0aWYgKCEoXCJ2YXJpYW50X3R5cGVcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJ2YXJpYW50X3R5cGVcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdGZ1bmN0aW9uIFVybFJlc29sdmluZ1Jlc3BvbnNlRnJvbUpTT04oanNvbikge1xuXHRcdHJldHVybiBVcmxSZXNvbHZpbmdSZXNwb25zZUZyb21KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIFVybFJlc29sdmluZ1Jlc3BvbnNlRnJvbUpTT05UeXBlZChqc29uLCBpZ25vcmVEaXNjcmltaW5hdG9yKSB7XG5cdFx0aWYgKGpzb24gPT0gbnVsbCkgcmV0dXJuIGpzb247XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwicGFnZV92YXJpYW50XCI6IGpzb25bXCJwYWdlX3ZhcmlhbnRcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IGpzb25bXCJwYWdlX3ZhcmlhbnRcIl0sXG5cdFx0XHRcInJlYWR5XCI6IGpzb25bXCJyZWFkeVwiXSxcblx0XHRcdFwic3BlY2lmaWNfZGV0YWlsc1wiOiAoMCwgVXJsUmVzb2x2aW5nUmVzcG9uc2VTcGVjaWZpY0RldGFpbHNfMS5VcmxSZXNvbHZpbmdSZXNwb25zZVNwZWNpZmljRGV0YWlsc0Zyb21KU09OKShqc29uW1wic3BlY2lmaWNfZGV0YWlsc1wiXSksXG5cdFx0XHRcInVzZXJfZXZlbnRcIjoganNvbltcInVzZXJfZXZlbnRcIl0gPT0gbnVsbCA/IHZvaWQgMCA6ICgwLCBVc2VyRXZlbnRfMSQxLlVzZXJFdmVudEZyb21KU09OKShqc29uW1widXNlcl9ldmVudFwiXSksXG5cdFx0XHRcInZhcmlhbnRfdHlwZVwiOiAoMCwgVXJsUmVzb2x2aW5nVHlwZV8xLlVybFJlc29sdmluZ1R5cGVGcm9tSlNPTikoanNvbltcInZhcmlhbnRfdHlwZVwiXSlcblx0XHR9O1xuXHR9XG5cdGZ1bmN0aW9uIFVybFJlc29sdmluZ1Jlc3BvbnNlVG9KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gVXJsUmVzb2x2aW5nUmVzcG9uc2VUb0pTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gVXJsUmVzb2x2aW5nUmVzcG9uc2VUb0pTT05UeXBlZCh2YWx1ZSwgaWdub3JlRGlzY3JpbWluYXRvciA9IGZhbHNlKSB7XG5cdFx0aWYgKHZhbHVlID09IG51bGwpIHJldHVybiB2YWx1ZTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0XCJwYWdlX3ZhcmlhbnRcIjogdmFsdWVbXCJwYWdlX3ZhcmlhbnRcIl0sXG5cdFx0XHRcInJlYWR5XCI6IHZhbHVlW1wicmVhZHlcIl0sXG5cdFx0XHRcInNwZWNpZmljX2RldGFpbHNcIjogKDAsIFVybFJlc29sdmluZ1Jlc3BvbnNlU3BlY2lmaWNEZXRhaWxzXzEuVXJsUmVzb2x2aW5nUmVzcG9uc2VTcGVjaWZpY0RldGFpbHNUb0pTT04pKHZhbHVlW1wic3BlY2lmaWNfZGV0YWlsc1wiXSksXG5cdFx0XHRcInVzZXJfZXZlbnRcIjogKDAsIFVzZXJFdmVudF8xJDEuVXNlckV2ZW50VG9KU09OKSh2YWx1ZVtcInVzZXJfZXZlbnRcIl0pLFxuXHRcdFx0XCJ2YXJpYW50X3R5cGVcIjogKDAsIFVybFJlc29sdmluZ1R5cGVfMS5VcmxSZXNvbHZpbmdUeXBlVG9KU09OKSh2YWx1ZVtcInZhcmlhbnRfdHlwZVwiXSlcblx0XHR9O1xuXHR9XG59KSB9KTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9WMUdldFNlc3Npb25NZXNzYWdlczIwMFJlc3BvbnNlLmpzXG52YXIgcmVxdWlyZV9WMUdldFNlc3Npb25NZXNzYWdlczIwMFJlc3BvbnNlID0gLyogQF9fUFVSRV9fICovIF9fY29tbW9uSlMoeyBcIi4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvVjFHZXRTZXNzaW9uTWVzc2FnZXMyMDBSZXNwb25zZS5qc1wiOiAoKGV4cG9ydHMpID0+IHtcblx0LyoqXG5cdCogQ29tbWVyY2Vcblx0KiBObyBkZXNjcmlwdGlvbiBwcm92aWRlZCAoZ2VuZXJhdGVkIGJ5IE9wZW5hcGkgR2VuZXJhdG9yIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuYXBpdG9vbHMvb3BlbmFwaS1nZW5lcmF0b3IpXG5cdCpcblx0KiBUaGUgdmVyc2lvbiBvZiB0aGUgT3BlbkFQSSBkb2N1bWVudDogMS4xLjBcblx0KlxuXHQqXG5cdCogTk9URTogVGhpcyBjbGFzcyBpcyBhdXRvIGdlbmVyYXRlZCBieSBPcGVuQVBJIEdlbmVyYXRvciAoaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoKS5cblx0KiBodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2hcblx0KiBEbyBub3QgZWRpdCB0aGUgY2xhc3MgbWFudWFsbHkuXG5cdCovXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcblx0ZXhwb3J0cy5pbnN0YW5jZU9mVjFHZXRTZXNzaW9uTWVzc2FnZXMyMDBSZXNwb25zZSA9IGluc3RhbmNlT2ZWMUdldFNlc3Npb25NZXNzYWdlczIwMFJlc3BvbnNlO1xuXHRleHBvcnRzLlYxR2V0U2Vzc2lvbk1lc3NhZ2VzMjAwUmVzcG9uc2VGcm9tSlNPTiA9IFYxR2V0U2Vzc2lvbk1lc3NhZ2VzMjAwUmVzcG9uc2VGcm9tSlNPTjtcblx0ZXhwb3J0cy5WMUdldFNlc3Npb25NZXNzYWdlczIwMFJlc3BvbnNlRnJvbUpTT05UeXBlZCA9IFYxR2V0U2Vzc2lvbk1lc3NhZ2VzMjAwUmVzcG9uc2VGcm9tSlNPTlR5cGVkO1xuXHRleHBvcnRzLlYxR2V0U2Vzc2lvbk1lc3NhZ2VzMjAwUmVzcG9uc2VUb0pTT04gPSBWMUdldFNlc3Npb25NZXNzYWdlczIwMFJlc3BvbnNlVG9KU09OO1xuXHRleHBvcnRzLlYxR2V0U2Vzc2lvbk1lc3NhZ2VzMjAwUmVzcG9uc2VUb0pTT05UeXBlZCA9IFYxR2V0U2Vzc2lvbk1lc3NhZ2VzMjAwUmVzcG9uc2VUb0pTT05UeXBlZDtcblx0Y29uc3QgU3VnZ2VzdGlvbl8xID0gcmVxdWlyZV9TdWdnZXN0aW9uKCk7XG5cdGNvbnN0IFVzZXJFdmVudF8xID0gcmVxdWlyZV9Vc2VyRXZlbnQoKTtcblx0LyoqXG5cdCogQ2hlY2sgaWYgYSBnaXZlbiBvYmplY3QgaW1wbGVtZW50cyB0aGUgVjFHZXRTZXNzaW9uTWVzc2FnZXMyMDBSZXNwb25zZSBpbnRlcmZhY2UuXG5cdCovXG5cdGZ1bmN0aW9uIGluc3RhbmNlT2ZWMUdldFNlc3Npb25NZXNzYWdlczIwMFJlc3BvbnNlKHZhbHVlKSB7XG5cdFx0aWYgKCEoXCJyZXNwb25zZXNcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJyZXNwb25zZXNcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdGlmICghKFwic3VnZ2VzdGlvbnNcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJzdWdnZXN0aW9uc1wiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0aWYgKCEoXCJ1c2VyX2V2ZW50c1wiIGluIHZhbHVlKSB8fCB2YWx1ZVtcInVzZXJfZXZlbnRzXCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHRmdW5jdGlvbiBWMUdldFNlc3Npb25NZXNzYWdlczIwMFJlc3BvbnNlRnJvbUpTT04oanNvbikge1xuXHRcdHJldHVybiBWMUdldFNlc3Npb25NZXNzYWdlczIwMFJlc3BvbnNlRnJvbUpTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gVjFHZXRTZXNzaW9uTWVzc2FnZXMyMDBSZXNwb25zZUZyb21KU09OVHlwZWQoanNvbiwgaWdub3JlRGlzY3JpbWluYXRvcikge1xuXHRcdGlmIChqc29uID09IG51bGwpIHJldHVybiBqc29uO1xuXHRcdHJldHVybiB7XG5cdFx0XHRcInJlc3BvbnNlc1wiOiBqc29uW1wicmVzcG9uc2VzXCJdLFxuXHRcdFx0XCJzdWdnZXN0aW9uc1wiOiBqc29uW1wic3VnZ2VzdGlvbnNcIl0ubWFwKFN1Z2dlc3Rpb25fMS5TdWdnZXN0aW9uRnJvbUpTT04pLFxuXHRcdFx0XCJ1c2VyX2V2ZW50c1wiOiBqc29uW1widXNlcl9ldmVudHNcIl0ubWFwKFVzZXJFdmVudF8xLlVzZXJFdmVudEZyb21KU09OKVxuXHRcdH07XG5cdH1cblx0ZnVuY3Rpb24gVjFHZXRTZXNzaW9uTWVzc2FnZXMyMDBSZXNwb25zZVRvSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIFYxR2V0U2Vzc2lvbk1lc3NhZ2VzMjAwUmVzcG9uc2VUb0pTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gVjFHZXRTZXNzaW9uTWVzc2FnZXMyMDBSZXNwb25zZVRvSlNPTlR5cGVkKHZhbHVlLCBpZ25vcmVEaXNjcmltaW5hdG9yID0gZmFsc2UpIHtcblx0XHRpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIHZhbHVlO1xuXHRcdHJldHVybiB7XG5cdFx0XHRcInJlc3BvbnNlc1wiOiB2YWx1ZVtcInJlc3BvbnNlc1wiXSxcblx0XHRcdFwic3VnZ2VzdGlvbnNcIjogdmFsdWVbXCJzdWdnZXN0aW9uc1wiXS5tYXAoU3VnZ2VzdGlvbl8xLlN1Z2dlc3Rpb25Ub0pTT04pLFxuXHRcdFx0XCJ1c2VyX2V2ZW50c1wiOiB2YWx1ZVtcInVzZXJfZXZlbnRzXCJdLm1hcChVc2VyRXZlbnRfMS5Vc2VyRXZlbnRUb0pTT04pXG5cdFx0fTtcblx0fVxufSkgfSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIC4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvVjFTZWFyY2hFeHBsYWluR2V0MjAwUmVzcG9uc2UuanNcbnZhciByZXF1aXJlX1YxU2VhcmNoRXhwbGFpbkdldDIwMFJlc3BvbnNlID0gLyogQF9fUFVSRV9fICovIF9fY29tbW9uSlMoeyBcIi4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvVjFTZWFyY2hFeHBsYWluR2V0MjAwUmVzcG9uc2UuanNcIjogKChleHBvcnRzKSA9PiB7XG5cdC8qKlxuXHQqIENvbW1lcmNlXG5cdCogTm8gZGVzY3JpcHRpb24gcHJvdmlkZWQgKGdlbmVyYXRlZCBieSBPcGVuYXBpIEdlbmVyYXRvciBodHRwczovL2dpdGh1Yi5jb20vb3BlbmFwaXRvb2xzL29wZW5hcGktZ2VuZXJhdG9yKVxuXHQqXG5cdCogVGhlIHZlcnNpb24gb2YgdGhlIE9wZW5BUEkgZG9jdW1lbnQ6IDEuMS4wXG5cdCpcblx0KlxuXHQqIE5PVEU6IFRoaXMgY2xhc3MgaXMgYXV0byBnZW5lcmF0ZWQgYnkgT3BlbkFQSSBHZW5lcmF0b3IgKGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaCkuXG5cdCogaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoXG5cdCogRG8gbm90IGVkaXQgdGhlIGNsYXNzIG1hbnVhbGx5LlxuXHQqL1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5cdGV4cG9ydHMuaW5zdGFuY2VPZlYxU2VhcmNoRXhwbGFpbkdldDIwMFJlc3BvbnNlID0gaW5zdGFuY2VPZlYxU2VhcmNoRXhwbGFpbkdldDIwMFJlc3BvbnNlO1xuXHRleHBvcnRzLlYxU2VhcmNoRXhwbGFpbkdldDIwMFJlc3BvbnNlRnJvbUpTT04gPSBWMVNlYXJjaEV4cGxhaW5HZXQyMDBSZXNwb25zZUZyb21KU09OO1xuXHRleHBvcnRzLlYxU2VhcmNoRXhwbGFpbkdldDIwMFJlc3BvbnNlRnJvbUpTT05UeXBlZCA9IFYxU2VhcmNoRXhwbGFpbkdldDIwMFJlc3BvbnNlRnJvbUpTT05UeXBlZDtcblx0ZXhwb3J0cy5WMVNlYXJjaEV4cGxhaW5HZXQyMDBSZXNwb25zZVRvSlNPTiA9IFYxU2VhcmNoRXhwbGFpbkdldDIwMFJlc3BvbnNlVG9KU09OO1xuXHRleHBvcnRzLlYxU2VhcmNoRXhwbGFpbkdldDIwMFJlc3BvbnNlVG9KU09OVHlwZWQgPSBWMVNlYXJjaEV4cGxhaW5HZXQyMDBSZXNwb25zZVRvSlNPTlR5cGVkO1xuXHQvKipcblx0KiBDaGVjayBpZiBhIGdpdmVuIG9iamVjdCBpbXBsZW1lbnRzIHRoZSBWMVNlYXJjaEV4cGxhaW5HZXQyMDBSZXNwb25zZSBpbnRlcmZhY2UuXG5cdCovXG5cdGZ1bmN0aW9uIGluc3RhbmNlT2ZWMVNlYXJjaEV4cGxhaW5HZXQyMDBSZXNwb25zZSh2YWx1ZSkge1xuXHRcdGlmICghKFwiY2hhdF9pZFwiIGluIHZhbHVlKSB8fCB2YWx1ZVtcImNoYXRfaWRcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdGlmICghKFwiZXhwbGFuYXRpb25cIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJleHBsYW5hdGlvblwiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0aWYgKCEoXCJwcm9kdWN0X2lkXCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wicHJvZHVjdF9pZFwiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0ZnVuY3Rpb24gVjFTZWFyY2hFeHBsYWluR2V0MjAwUmVzcG9uc2VGcm9tSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIFYxU2VhcmNoRXhwbGFpbkdldDIwMFJlc3BvbnNlRnJvbUpTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gVjFTZWFyY2hFeHBsYWluR2V0MjAwUmVzcG9uc2VGcm9tSlNPTlR5cGVkKGpzb24sIGlnbm9yZURpc2NyaW1pbmF0b3IpIHtcblx0XHRpZiAoanNvbiA9PSBudWxsKSByZXR1cm4ganNvbjtcblx0XHRyZXR1cm4ge1xuXHRcdFx0XCJjaGF0X2lkXCI6IGpzb25bXCJjaGF0X2lkXCJdLFxuXHRcdFx0XCJleHBsYW5hdGlvblwiOiBqc29uW1wiZXhwbGFuYXRpb25cIl0sXG5cdFx0XHRcInByb2R1Y3RfaWRcIjoganNvbltcInByb2R1Y3RfaWRcIl1cblx0XHR9O1xuXHR9XG5cdGZ1bmN0aW9uIFYxU2VhcmNoRXhwbGFpbkdldDIwMFJlc3BvbnNlVG9KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gVjFTZWFyY2hFeHBsYWluR2V0MjAwUmVzcG9uc2VUb0pTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gVjFTZWFyY2hFeHBsYWluR2V0MjAwUmVzcG9uc2VUb0pTT05UeXBlZCh2YWx1ZSwgaWdub3JlRGlzY3JpbWluYXRvciA9IGZhbHNlKSB7XG5cdFx0aWYgKHZhbHVlID09IG51bGwpIHJldHVybiB2YWx1ZTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0XCJjaGF0X2lkXCI6IHZhbHVlW1wiY2hhdF9pZFwiXSxcblx0XHRcdFwiZXhwbGFuYXRpb25cIjogdmFsdWVbXCJleHBsYW5hdGlvblwiXSxcblx0XHRcdFwicHJvZHVjdF9pZFwiOiB2YWx1ZVtcInByb2R1Y3RfaWRcIl1cblx0XHR9O1xuXHR9XG59KSB9KTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9pbmRleC5qc1xudmFyIHJlcXVpcmVfbW9kZWxzID0gLyogQF9fUFVSRV9fICovIF9fY29tbW9uSlMoeyBcIi4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvaW5kZXguanNcIjogKChleHBvcnRzKSA9PiB7XG5cdHZhciBfX2NyZWF0ZUJpbmRpbmckMiA9IGV4cG9ydHMgJiYgZXhwb3J0cy5fX2NyZWF0ZUJpbmRpbmcgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcblx0XHRpZiAoazIgPT09IHZvaWQgMCkgazIgPSBrO1xuXHRcdHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcblx0XHRpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkgZGVzYyA9IHtcblx0XHRcdGVudW1lcmFibGU6IHRydWUsXG5cdFx0XHRnZXQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRyZXR1cm4gbVtrXTtcblx0XHRcdH1cblx0XHR9O1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgZGVzYyk7XG5cdH0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG5cdFx0aWYgKGsyID09PSB2b2lkIDApIGsyID0gaztcblx0XHRvW2syXSA9IG1ba107XG5cdH0pKTtcblx0dmFyIF9fZXhwb3J0U3RhciQyID0gZXhwb3J0cyAmJiBleHBvcnRzLl9fZXhwb3J0U3RhciB8fCBmdW5jdGlvbihtLCBleHBvcnRzJDEpIHtcblx0XHRmb3IgKHZhciBwIGluIG0pIGlmIChwICE9PSBcImRlZmF1bHRcIiAmJiAhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGV4cG9ydHMkMSwgcCkpIF9fY3JlYXRlQmluZGluZyQyKGV4cG9ydHMkMSwgbSwgcCk7XG5cdH07XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcblx0X19leHBvcnRTdGFyJDIocmVxdWlyZV9BZGROb3RlVG9MYXRlc3RDb252ZXJzYXRpb25SZXF1ZXN0KCksIGV4cG9ydHMpO1xuXHRfX2V4cG9ydFN0YXIkMihyZXF1aXJlX0FkZE5vdGVUb0xhdGVzdENvbnZlcnNhdGlvblJlc3BvbnNlKCksIGV4cG9ydHMpO1xuXHRfX2V4cG9ydFN0YXIkMihyZXF1aXJlX0FkZFRvQ2FydEF0dHJpYnV0ZXMoKSwgZXhwb3J0cyk7XG5cdF9fZXhwb3J0U3RhciQyKHJlcXVpcmVfQW5hbHl0aWNzSWRlbnRpZnlSZXF1ZXN0KCksIGV4cG9ydHMpO1xuXHRfX2V4cG9ydFN0YXIkMihyZXF1aXJlX0FuYWx5dGljc1RyYWNrRXZlbnRSZXF1ZXN0KCksIGV4cG9ydHMpO1xuXHRfX2V4cG9ydFN0YXIkMihyZXF1aXJlX0F0dGFjaG1lbnRSZXF1ZXN0KCksIGV4cG9ydHMpO1xuXHRfX2V4cG9ydFN0YXIkMihyZXF1aXJlX0F1dG9Gb3JtKCksIGV4cG9ydHMpO1xuXHRfX2V4cG9ydFN0YXIkMihyZXF1aXJlX0NvbnRleHQoKSwgZXhwb3J0cyk7XG5cdF9fZXhwb3J0U3RhciQyKHJlcXVpcmVfQ29udmVyc2F0aW9uU3RhdHVzKCksIGV4cG9ydHMpO1xuXHRfX2V4cG9ydFN0YXIkMihyZXF1aXJlX0NyZWF0ZUNvbnZlcnNhdGlvblJlcXVlc3QoKSwgZXhwb3J0cyk7XG5cdF9fZXhwb3J0U3RhciQyKHJlcXVpcmVfQ3JlYXRlQ29udmVyc2F0aW9uUmVzcG9uc2UoKSwgZXhwb3J0cyk7XG5cdF9fZXhwb3J0U3RhciQyKHJlcXVpcmVfQ3VzdFNlcnZpY2VBdHRhY2htZW50KCksIGV4cG9ydHMpO1xuXHRfX2V4cG9ydFN0YXIkMihyZXF1aXJlX0N1c3RTZXJ2aWNlQ29udmVyc2F0aW9uKCksIGV4cG9ydHMpO1xuXHRfX2V4cG9ydFN0YXIkMihyZXF1aXJlX0N1c3RTZXJ2aWNlQ29udmVyc2F0aW9uTWVzc2FnZXMoKSwgZXhwb3J0cyk7XG5cdF9fZXhwb3J0U3RhciQyKHJlcXVpcmVfQ3VzdFNlcnZpY2VDdXN0b21lcigpLCBleHBvcnRzKTtcblx0X19leHBvcnRTdGFyJDIocmVxdWlyZV9DdXN0U2VydmljZU1lc3NhZ2UoKSwgZXhwb3J0cyk7XG5cdF9fZXhwb3J0U3RhciQyKHJlcXVpcmVfQ3VzdG9tZXJTZXJ2aWNlUHJvdmlkZXIoKSwgZXhwb3J0cyk7XG5cdF9fZXhwb3J0U3RhciQyKHJlcXVpcmVfRm9ybVJlc3BvbnNlQXR0cmlidXRlcygpLCBleHBvcnRzKTtcblx0X19leHBvcnRTdGFyJDIocmVxdWlyZV9Gb3JtUmVzcG9uc2VBdHRyaWJ1dGVzRm9ybUNhdGVnb3J5KCksIGV4cG9ydHMpO1xuXHRfX2V4cG9ydFN0YXIkMihyZXF1aXJlX0Zvcm1TdWJtaXR0ZWRBdHRyaWJ1dGVzKCksIGV4cG9ydHMpO1xuXHRfX2V4cG9ydFN0YXIkMihyZXF1aXJlX0Zvcm1UeXBlKCksIGV4cG9ydHMpO1xuXHRfX2V4cG9ydFN0YXIkMihyZXF1aXJlX0Z1bGZpbGxtZW50RGlzcGxheVN0YXR1cygpLCBleHBvcnRzKTtcblx0X19leHBvcnRTdGFyJDIocmVxdWlyZV9HZW5lcmF0aW9uUGFyYW1zKCksIGV4cG9ydHMpO1xuXHRfX2V4cG9ydFN0YXIkMihyZXF1aXJlX0dldENvbnZlcnNhdGlvbk1lc3NhZ2VzUmVxdWVzdCgpLCBleHBvcnRzKTtcblx0X19leHBvcnRTdGFyJDIocmVxdWlyZV9Jc0J1c2luZXNzSG91cnNSZXF1ZXN0KCksIGV4cG9ydHMpO1xuXHRfX2V4cG9ydFN0YXIkMihyZXF1aXJlX0lzQnVzaW5lc3NIb3Vyc1Jlc3BvbnNlKCksIGV4cG9ydHMpO1xuXHRfX2V4cG9ydFN0YXIkMihyZXF1aXJlX0xhYmVsVmFsdWUoKSwgZXhwb3J0cyk7XG5cdF9fZXhwb3J0U3RhciQyKHJlcXVpcmVfTWFudWFsRm9ybSgpLCBleHBvcnRzKTtcblx0X19leHBvcnRTdGFyJDIocmVxdWlyZV9OZXh0TWVzc2FnZVJlcXVlc3QoKSwgZXhwb3J0cyk7XG5cdF9fZXhwb3J0U3RhciQyKHJlcXVpcmVfT3JkZXJJdGVtSW5mbygpLCBleHBvcnRzKTtcblx0X19leHBvcnRTdGFyJDIocmVxdWlyZV9PcmRlclJlc3BvbnNlQXR0cmlidXRlcygpLCBleHBvcnRzKTtcblx0X19leHBvcnRTdGFyJDIocmVxdWlyZV9Pcmdhbml6YXRpb24oKSwgZXhwb3J0cyk7XG5cdF9fZXhwb3J0U3RhciQyKHJlcXVpcmVfT3JnYW5pemF0aW9uQ29uZmlnKCksIGV4cG9ydHMpO1xuXHRfX2V4cG9ydFN0YXIkMihyZXF1aXJlX09yZ2FuaXphdGlvbkNvbmZpZ1Jlc3VsdHMoKSwgZXhwb3J0cyk7XG5cdF9fZXhwb3J0U3RhciQyKHJlcXVpcmVfT3JnYW5pemF0aW9uU2V0dGluZ3MoKSwgZXhwb3J0cyk7XG5cdF9fZXhwb3J0U3RhciQyKHJlcXVpcmVfUERQQXR0cmlidXRlcygpLCBleHBvcnRzKTtcblx0X19leHBvcnRTdGFyJDIocmVxdWlyZV9QTFBBdHRyaWJ1dGVDYXRlZ29yeSgpLCBleHBvcnRzKTtcblx0X19leHBvcnRTdGFyJDIocmVxdWlyZV9QTFBBdHRyaWJ1dGVzKCksIGV4cG9ydHMpO1xuXHRfX2V4cG9ydFN0YXIkMihyZXF1aXJlX1BMUEF0dHJpYnV0ZXNBdHRyaWJ1dGVzKCksIGV4cG9ydHMpO1xuXHRfX2V4cG9ydFN0YXIkMihyZXF1aXJlX1BMUElkQXR0cmlidXRlcygpLCBleHBvcnRzKTtcblx0X19leHBvcnRTdGFyJDIocmVxdWlyZV9QTFBVcmxBdHRyaWJ1dGVzKCksIGV4cG9ydHMpO1xuXHRfX2V4cG9ydFN0YXIkMihyZXF1aXJlX1BhZ2VWaXNpdEF0dHJpYnV0ZXMoKSwgZXhwb3J0cyk7XG5cdF9fZXhwb3J0U3RhciQyKHJlcXVpcmVfUGFnZVZpc2l0Q2F0ZWdvcnkoKSwgZXhwb3J0cyk7XG5cdF9fZXhwb3J0U3RhciQyKHJlcXVpcmVfUHJvZHVjdFJldHJpZXZhbFJlcXVlc3QoKSwgZXhwb3J0cyk7XG5cdF9fZXhwb3J0U3RhciQyKHJlcXVpcmVfUHJvZHVjdFJldHJpZXZhbFJlc3BvbnNlKCksIGV4cG9ydHMpO1xuXHRfX2V4cG9ydFN0YXIkMihyZXF1aXJlX1Byb2R1Y3RTZWFyY2hGaWx0ZXJSZXNwb25zZUF0dHJpYnV0ZXMoKSwgZXhwb3J0cyk7XG5cdF9fZXhwb3J0U3RhciQyKHJlcXVpcmVfUHJvZHVjdFNlYXJjaFJlc3BvbnNlKCksIGV4cG9ydHMpO1xuXHRfX2V4cG9ydFN0YXIkMihyZXF1aXJlX1Byb2R1Y3RTZWFyY2hSZXNwb25zZUF0dHJpYnV0ZXMoKSwgZXhwb3J0cyk7XG5cdF9fZXhwb3J0U3RhciQyKHJlcXVpcmVfUXVlcnlUeXBlZEF0dHJpYnV0ZXMoKSwgZXhwb3J0cyk7XG5cdF9fZXhwb3J0U3RhciQyKHJlcXVpcmVfUmVwb3J0Q29udGVudCgpLCBleHBvcnRzKTtcblx0X19leHBvcnRTdGFyJDIocmVxdWlyZV9SZXBvcnRTZXNzaW9uUmVxdWVzdCgpLCBleHBvcnRzKTtcblx0X19leHBvcnRTdGFyJDIocmVxdWlyZV9SZXNwb25zZSgpLCBleHBvcnRzKTtcblx0X19leHBvcnRTdGFyJDIocmVxdWlyZV9SZXNwb25zZUNhdGVnb3J5KCksIGV4cG9ydHMpO1xuXHRfX2V4cG9ydFN0YXIkMihyZXF1aXJlX1Jlc3BvbnNlUHJvZHVjdEF0dHJpYnV0ZXMoKSwgZXhwb3J0cyk7XG5cdF9fZXhwb3J0U3RhciQyKHJlcXVpcmVfU2VhcmNoQXR0cmlidXRlcygpLCBleHBvcnRzKTtcblx0X19leHBvcnRTdGFyJDIocmVxdWlyZV9TZWFyY2hSZXNwb25zZVByb2R1Y3QoKSwgZXhwb3J0cyk7XG5cdF9fZXhwb3J0U3RhciQyKHJlcXVpcmVfU2VhcmNoU3VnZ2VzdGlvbnNSZXNwb25zZSgpLCBleHBvcnRzKTtcblx0X19leHBvcnRTdGFyJDIocmVxdWlyZV9TZW5kTWVzc2FnZVJlcXVlc3QoKSwgZXhwb3J0cyk7XG5cdF9fZXhwb3J0U3RhciQyKHJlcXVpcmVfU2VuZE1lc3NhZ2VSZXNwb25zZSgpLCBleHBvcnRzKTtcblx0X19leHBvcnRTdGFyJDIocmVxdWlyZV9TdGF0c2lnRXhwZXJpbWVudCgpLCBleHBvcnRzKTtcblx0X19leHBvcnRTdGFyJDIocmVxdWlyZV9TdGF0c2lnRmVhdHVyZUdhdGUoKSwgZXhwb3J0cyk7XG5cdF9fZXhwb3J0U3RhciQyKHJlcXVpcmVfU3VnZ2VzdGlvbigpLCBleHBvcnRzKTtcblx0X19leHBvcnRTdGFyJDIocmVxdWlyZV9TdWdnZXN0aW9uQ2F0ZWdvcnkoKSwgZXhwb3J0cyk7XG5cdF9fZXhwb3J0U3RhciQyKHJlcXVpcmVfU3VnZ2VzdGlvbkNsaWNrZWRBdHRyaWJ1dGVzKCksIGV4cG9ydHMpO1xuXHRfX2V4cG9ydFN0YXIkMihyZXF1aXJlX1N1cHBvcnRlZEV2ZW50UHJvZHVjdENhdGVnb3J5KCksIGV4cG9ydHMpO1xuXHRfX2V4cG9ydFN0YXIkMihyZXF1aXJlX1N1cHBvcnRlZEV2ZW50UmVxdWVzdCgpLCBleHBvcnRzKTtcblx0X19leHBvcnRTdGFyJDIocmVxdWlyZV9TdXBwb3J0ZWRFdmVudFJlc3BvbnNlKCksIGV4cG9ydHMpO1xuXHRfX2V4cG9ydFN0YXIkMihyZXF1aXJlX1R1cm5JbmZvKCksIGV4cG9ydHMpO1xuXHRfX2V4cG9ydFN0YXIkMihyZXF1aXJlX1R1cm5JbmZvUHJldlVzZXJFdmVudCgpLCBleHBvcnRzKTtcblx0X19leHBvcnRTdGFyJDIocmVxdWlyZV9VcmxSZXNvbHZpbmdHZW5lcmljQ29uZmlnKCksIGV4cG9ydHMpO1xuXHRfX2V4cG9ydFN0YXIkMihyZXF1aXJlX1VybFJlc29sdmluZ1BEUENvbmZpZygpLCBleHBvcnRzKTtcblx0X19leHBvcnRTdGFyJDIocmVxdWlyZV9VcmxSZXNvbHZpbmdQTFBDb25maWcoKSwgZXhwb3J0cyk7XG5cdF9fZXhwb3J0U3RhciQyKHJlcXVpcmVfVXJsUmVzb2x2aW5nUmVxdWVzdCgpLCBleHBvcnRzKTtcblx0X19leHBvcnRTdGFyJDIocmVxdWlyZV9VcmxSZXNvbHZpbmdSZXNwb25zZSgpLCBleHBvcnRzKTtcblx0X19leHBvcnRTdGFyJDIocmVxdWlyZV9VcmxSZXNvbHZpbmdSZXNwb25zZVNwZWNpZmljRGV0YWlscygpLCBleHBvcnRzKTtcblx0X19leHBvcnRTdGFyJDIocmVxdWlyZV9VcmxSZXNvbHZpbmdUeXBlKCksIGV4cG9ydHMpO1xuXHRfX2V4cG9ydFN0YXIkMihyZXF1aXJlX1VzZXJFdmVudCgpLCBleHBvcnRzKTtcblx0X19leHBvcnRTdGFyJDIocmVxdWlyZV9Vc2VyRXZlbnRBdHRyaWJ1dGVzKCksIGV4cG9ydHMpO1xuXHRfX2V4cG9ydFN0YXIkMihyZXF1aXJlX1VzZXJFdmVudENhdGVnb3J5KCksIGV4cG9ydHMpO1xuXHRfX2V4cG9ydFN0YXIkMihyZXF1aXJlX1YxR2V0U2Vzc2lvbk1lc3NhZ2VzMjAwUmVzcG9uc2UoKSwgZXhwb3J0cyk7XG5cdF9fZXhwb3J0U3RhciQyKHJlcXVpcmVfVjFTZWFyY2hFeHBsYWluR2V0MjAwUmVzcG9uc2UoKSwgZXhwb3J0cyk7XG59KSB9KTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L2FwaXMvQ3VzdG9tZXJTZXJ2aWNlQXBpLmpzXG52YXIgcmVxdWlyZV9DdXN0b21lclNlcnZpY2VBcGkgPSAvKiBAX19QVVJFX18gKi8gX19jb21tb25KUyh7IFwiLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L2FwaXMvQ3VzdG9tZXJTZXJ2aWNlQXBpLmpzXCI6ICgoZXhwb3J0cykgPT4ge1xuXHQvKipcblx0KiBDb21tZXJjZVxuXHQqIE5vIGRlc2NyaXB0aW9uIHByb3ZpZGVkIChnZW5lcmF0ZWQgYnkgT3BlbmFwaSBHZW5lcmF0b3IgaHR0cHM6Ly9naXRodWIuY29tL29wZW5hcGl0b29scy9vcGVuYXBpLWdlbmVyYXRvcilcblx0KlxuXHQqIFRoZSB2ZXJzaW9uIG9mIHRoZSBPcGVuQVBJIGRvY3VtZW50OiAxLjEuMFxuXHQqXG5cdCpcblx0KiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IE9wZW5BUEkgR2VuZXJhdG9yIChodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2gpLlxuXHQqIGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaFxuXHQqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cblx0Ki9cblx0dmFyIF9fYXdhaXRlciQ0ID0gZXhwb3J0cyAmJiBleHBvcnRzLl9fYXdhaXRlciB8fCBmdW5jdGlvbih0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcblx0XHRmdW5jdGlvbiBhZG9wdCh2YWx1ZSkge1xuXHRcdFx0cmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24ocmVzb2x2ZSkge1xuXHRcdFx0XHRyZXNvbHZlKHZhbHVlKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHRyZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuXHRcdFx0ZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7XG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0c3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpO1xuXHRcdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdFx0cmVqZWN0KGUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkge1xuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTtcblx0XHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRcdHJlamVjdChlKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0ZnVuY3Rpb24gc3RlcChyZXN1bHQpIHtcblx0XHRcdFx0cmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7XG5cdFx0XHR9XG5cdFx0XHRzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG5cdFx0fSk7XG5cdH07XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcblx0ZXhwb3J0cy5DdXN0b21lclNlcnZpY2VBcGkgPSB2b2lkIDA7XG5cdGNvbnN0IHJ1bnRpbWUkNCA9IHJlcXVpcmVfcnVudGltZSgpO1xuXHRjb25zdCBpbmRleF8xJDQgPSByZXF1aXJlX21vZGVscygpO1xuXHQvKipcblx0KlxuXHQqL1xuXHR2YXIgQ3VzdG9tZXJTZXJ2aWNlQXBpID0gY2xhc3MgZXh0ZW5kcyBydW50aW1lJDQuQmFzZUFQSSB7XG5cdFx0LyoqXG5cdFx0KiBBZGQgYSBub3RlIHRvIHRoZSBsYXRlc3QgY29udmVyc2F0aW9uIGZvciBhIGN1c3RvbWVyXG5cdFx0Ki9cblx0XHR2MUN1c3RzZXJ2aWNlQWRkTm90ZVRvTGF0ZXN0Q29udmVyc2F0aW9uUG9zdFJhdyhyZXF1ZXN0UGFyYW1ldGVycywgaW5pdE92ZXJyaWRlcykge1xuXHRcdFx0cmV0dXJuIF9fYXdhaXRlciQ0KHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuXHRcdFx0XHRjb25zdCBxdWVyeVBhcmFtZXRlcnMgPSB7fTtcblx0XHRcdFx0Y29uc3QgaGVhZGVyUGFyYW1ldGVycyA9IHt9O1xuXHRcdFx0XHRoZWFkZXJQYXJhbWV0ZXJzW1wiQ29udGVudC1UeXBlXCJdID0gXCJhcHBsaWNhdGlvbi9qc29uXCI7XG5cdFx0XHRcdGlmICh0aGlzLmNvbmZpZ3VyYXRpb24gJiYgdGhpcy5jb25maWd1cmF0aW9uLmFjY2Vzc1Rva2VuKSB7XG5cdFx0XHRcdFx0Y29uc3QgdG9rZW4gPSB0aGlzLmNvbmZpZ3VyYXRpb24uYWNjZXNzVG9rZW47XG5cdFx0XHRcdFx0Y29uc3QgdG9rZW5TdHJpbmcgPSB5aWVsZCB0b2tlbihcImJlYXJlclwiLCBbXSk7XG5cdFx0XHRcdFx0aWYgKHRva2VuU3RyaW5nKSBoZWFkZXJQYXJhbWV0ZXJzW1wiQXV0aG9yaXphdGlvblwiXSA9IGBCZWFyZXIgJHt0b2tlblN0cmluZ31gO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IHJlc3BvbnNlID0geWllbGQgdGhpcy5yZXF1ZXN0KHtcblx0XHRcdFx0XHRwYXRoOiBgL3YxL2N1c3RzZXJ2aWNlL2FkZF9ub3RlX3RvX2xhdGVzdF9jb252ZXJzYXRpb25gLFxuXHRcdFx0XHRcdG1ldGhvZDogXCJQT1NUXCIsXG5cdFx0XHRcdFx0aGVhZGVyczogaGVhZGVyUGFyYW1ldGVycyxcblx0XHRcdFx0XHRxdWVyeTogcXVlcnlQYXJhbWV0ZXJzLFxuXHRcdFx0XHRcdGJvZHk6ICgwLCBpbmRleF8xJDQuQWRkTm90ZVRvTGF0ZXN0Q29udmVyc2F0aW9uUmVxdWVzdFRvSlNPTikocmVxdWVzdFBhcmFtZXRlcnNbXCJBZGROb3RlVG9MYXRlc3RDb252ZXJzYXRpb25SZXF1ZXN0XCJdKVxuXHRcdFx0XHR9LCBpbml0T3ZlcnJpZGVzKTtcblx0XHRcdFx0cmV0dXJuIG5ldyBydW50aW1lJDQuSlNPTkFwaVJlc3BvbnNlKHJlc3BvbnNlLCAoanNvblZhbHVlKSA9PiAoMCwgaW5kZXhfMSQ0LkFkZE5vdGVUb0xhdGVzdENvbnZlcnNhdGlvblJlc3BvbnNlRnJvbUpTT04pKGpzb25WYWx1ZSkpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdC8qKlxuXHRcdCogQWRkIGEgbm90ZSB0byB0aGUgbGF0ZXN0IGNvbnZlcnNhdGlvbiBmb3IgYSBjdXN0b21lclxuXHRcdCovXG5cdFx0djFDdXN0c2VydmljZUFkZE5vdGVUb0xhdGVzdENvbnZlcnNhdGlvblBvc3QoKSB7XG5cdFx0XHRyZXR1cm4gX19hd2FpdGVyJDQodGhpcywgYXJndW1lbnRzLCB2b2lkIDAsIGZ1bmN0aW9uKiAocmVxdWVzdFBhcmFtZXRlcnMgPSB7fSwgaW5pdE92ZXJyaWRlcykge1xuXHRcdFx0XHRyZXR1cm4geWllbGQgKHlpZWxkIHRoaXMudjFDdXN0c2VydmljZUFkZE5vdGVUb0xhdGVzdENvbnZlcnNhdGlvblBvc3RSYXcocmVxdWVzdFBhcmFtZXRlcnMsIGluaXRPdmVycmlkZXMpKS52YWx1ZSgpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdC8qKlxuXHRcdCogQ3JlYXRlIGEgbmV3IGNvbnZlcnNhdGlvbiBmb3IgYSBjdXN0b21lclxuXHRcdCovXG5cdFx0djFDdXN0c2VydmljZUNyZWF0ZUNvbnZlcnNhdGlvblBvc3RSYXcocmVxdWVzdFBhcmFtZXRlcnMsIGluaXRPdmVycmlkZXMpIHtcblx0XHRcdHJldHVybiBfX2F3YWl0ZXIkNCh0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcblx0XHRcdFx0Y29uc3QgcXVlcnlQYXJhbWV0ZXJzID0ge307XG5cdFx0XHRcdGNvbnN0IGhlYWRlclBhcmFtZXRlcnMgPSB7fTtcblx0XHRcdFx0aGVhZGVyUGFyYW1ldGVyc1tcIkNvbnRlbnQtVHlwZVwiXSA9IFwiYXBwbGljYXRpb24vanNvblwiO1xuXHRcdFx0XHRpZiAodGhpcy5jb25maWd1cmF0aW9uICYmIHRoaXMuY29uZmlndXJhdGlvbi5hY2Nlc3NUb2tlbikge1xuXHRcdFx0XHRcdGNvbnN0IHRva2VuID0gdGhpcy5jb25maWd1cmF0aW9uLmFjY2Vzc1Rva2VuO1xuXHRcdFx0XHRcdGNvbnN0IHRva2VuU3RyaW5nID0geWllbGQgdG9rZW4oXCJiZWFyZXJcIiwgW10pO1xuXHRcdFx0XHRcdGlmICh0b2tlblN0cmluZykgaGVhZGVyUGFyYW1ldGVyc1tcIkF1dGhvcml6YXRpb25cIl0gPSBgQmVhcmVyICR7dG9rZW5TdHJpbmd9YDtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCByZXNwb25zZSA9IHlpZWxkIHRoaXMucmVxdWVzdCh7XG5cdFx0XHRcdFx0cGF0aDogYC92MS9jdXN0c2VydmljZS9jcmVhdGVfY29udmVyc2F0aW9uYCxcblx0XHRcdFx0XHRtZXRob2Q6IFwiUE9TVFwiLFxuXHRcdFx0XHRcdGhlYWRlcnM6IGhlYWRlclBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0cXVlcnk6IHF1ZXJ5UGFyYW1ldGVycyxcblx0XHRcdFx0XHRib2R5OiAoMCwgaW5kZXhfMSQ0LkNyZWF0ZUNvbnZlcnNhdGlvblJlcXVlc3RUb0pTT04pKHJlcXVlc3RQYXJhbWV0ZXJzW1wiQ3JlYXRlQ29udmVyc2F0aW9uUmVxdWVzdFwiXSlcblx0XHRcdFx0fSwgaW5pdE92ZXJyaWRlcyk7XG5cdFx0XHRcdHJldHVybiBuZXcgcnVudGltZSQ0LkpTT05BcGlSZXNwb25zZShyZXNwb25zZSwgKGpzb25WYWx1ZSkgPT4gKDAsIGluZGV4XzEkNC5DcmVhdGVDb252ZXJzYXRpb25SZXNwb25zZUZyb21KU09OKShqc29uVmFsdWUpKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHQvKipcblx0XHQqIENyZWF0ZSBhIG5ldyBjb252ZXJzYXRpb24gZm9yIGEgY3VzdG9tZXJcblx0XHQqL1xuXHRcdHYxQ3VzdHNlcnZpY2VDcmVhdGVDb252ZXJzYXRpb25Qb3N0KCkge1xuXHRcdFx0cmV0dXJuIF9fYXdhaXRlciQ0KHRoaXMsIGFyZ3VtZW50cywgdm9pZCAwLCBmdW5jdGlvbiogKHJlcXVlc3RQYXJhbWV0ZXJzID0ge30sIGluaXRPdmVycmlkZXMpIHtcblx0XHRcdFx0cmV0dXJuIHlpZWxkICh5aWVsZCB0aGlzLnYxQ3VzdHNlcnZpY2VDcmVhdGVDb252ZXJzYXRpb25Qb3N0UmF3KHJlcXVlc3RQYXJhbWV0ZXJzLCBpbml0T3ZlcnJpZGVzKSkudmFsdWUoKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHQvKipcblx0XHQqIEdldCBtZXNzYWdlcyBmcm9tIGEgY29udmVyc2F0aW9uXG5cdFx0Ki9cblx0XHR2MUN1c3RzZXJ2aWNlR2V0Q29udmVyc2F0aW9uTWVzc2FnZXNQb3N0UmF3KHJlcXVlc3RQYXJhbWV0ZXJzLCBpbml0T3ZlcnJpZGVzKSB7XG5cdFx0XHRyZXR1cm4gX19hd2FpdGVyJDQodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG5cdFx0XHRcdGNvbnN0IHF1ZXJ5UGFyYW1ldGVycyA9IHt9O1xuXHRcdFx0XHRjb25zdCBoZWFkZXJQYXJhbWV0ZXJzID0ge307XG5cdFx0XHRcdGhlYWRlclBhcmFtZXRlcnNbXCJDb250ZW50LVR5cGVcIl0gPSBcImFwcGxpY2F0aW9uL2pzb25cIjtcblx0XHRcdFx0aWYgKHRoaXMuY29uZmlndXJhdGlvbiAmJiB0aGlzLmNvbmZpZ3VyYXRpb24uYWNjZXNzVG9rZW4pIHtcblx0XHRcdFx0XHRjb25zdCB0b2tlbiA9IHRoaXMuY29uZmlndXJhdGlvbi5hY2Nlc3NUb2tlbjtcblx0XHRcdFx0XHRjb25zdCB0b2tlblN0cmluZyA9IHlpZWxkIHRva2VuKFwiYmVhcmVyXCIsIFtdKTtcblx0XHRcdFx0XHRpZiAodG9rZW5TdHJpbmcpIGhlYWRlclBhcmFtZXRlcnNbXCJBdXRob3JpemF0aW9uXCJdID0gYEJlYXJlciAke3Rva2VuU3RyaW5nfWA7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3QgcmVzcG9uc2UgPSB5aWVsZCB0aGlzLnJlcXVlc3Qoe1xuXHRcdFx0XHRcdHBhdGg6IGAvdjEvY3VzdHNlcnZpY2UvZ2V0X2NvbnZlcnNhdGlvbl9tZXNzYWdlc2AsXG5cdFx0XHRcdFx0bWV0aG9kOiBcIlBPU1RcIixcblx0XHRcdFx0XHRoZWFkZXJzOiBoZWFkZXJQYXJhbWV0ZXJzLFxuXHRcdFx0XHRcdHF1ZXJ5OiBxdWVyeVBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0Ym9keTogKDAsIGluZGV4XzEkNC5HZXRDb252ZXJzYXRpb25NZXNzYWdlc1JlcXVlc3RUb0pTT04pKHJlcXVlc3RQYXJhbWV0ZXJzW1wiR2V0Q29udmVyc2F0aW9uTWVzc2FnZXNSZXF1ZXN0XCJdKVxuXHRcdFx0XHR9LCBpbml0T3ZlcnJpZGVzKTtcblx0XHRcdFx0cmV0dXJuIG5ldyBydW50aW1lJDQuSlNPTkFwaVJlc3BvbnNlKHJlc3BvbnNlLCAoanNvblZhbHVlKSA9PiAoMCwgaW5kZXhfMSQ0LkN1c3RTZXJ2aWNlQ29udmVyc2F0aW9uTWVzc2FnZXNGcm9tSlNPTikoanNvblZhbHVlKSk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0LyoqXG5cdFx0KiBHZXQgbWVzc2FnZXMgZnJvbSBhIGNvbnZlcnNhdGlvblxuXHRcdCovXG5cdFx0djFDdXN0c2VydmljZUdldENvbnZlcnNhdGlvbk1lc3NhZ2VzUG9zdCgpIHtcblx0XHRcdHJldHVybiBfX2F3YWl0ZXIkNCh0aGlzLCBhcmd1bWVudHMsIHZvaWQgMCwgZnVuY3Rpb24qIChyZXF1ZXN0UGFyYW1ldGVycyA9IHt9LCBpbml0T3ZlcnJpZGVzKSB7XG5cdFx0XHRcdHJldHVybiB5aWVsZCAoeWllbGQgdGhpcy52MUN1c3RzZXJ2aWNlR2V0Q29udmVyc2F0aW9uTWVzc2FnZXNQb3N0UmF3KHJlcXVlc3RQYXJhbWV0ZXJzLCBpbml0T3ZlcnJpZGVzKSkudmFsdWUoKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHQvKipcblx0XHQqIENoZWNrIGlmIGl0IGlzIGN1cnJlbnRseSBidXNpbmVzcyBob3Vyc1xuXHRcdCovXG5cdFx0djFDdXN0c2VydmljZUlzQnVzaW5lc3NIb3Vyc1Bvc3RSYXcocmVxdWVzdFBhcmFtZXRlcnMsIGluaXRPdmVycmlkZXMpIHtcblx0XHRcdHJldHVybiBfX2F3YWl0ZXIkNCh0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcblx0XHRcdFx0Y29uc3QgcXVlcnlQYXJhbWV0ZXJzID0ge307XG5cdFx0XHRcdGNvbnN0IGhlYWRlclBhcmFtZXRlcnMgPSB7fTtcblx0XHRcdFx0aGVhZGVyUGFyYW1ldGVyc1tcIkNvbnRlbnQtVHlwZVwiXSA9IFwiYXBwbGljYXRpb24vanNvblwiO1xuXHRcdFx0XHRpZiAodGhpcy5jb25maWd1cmF0aW9uICYmIHRoaXMuY29uZmlndXJhdGlvbi5hY2Nlc3NUb2tlbikge1xuXHRcdFx0XHRcdGNvbnN0IHRva2VuID0gdGhpcy5jb25maWd1cmF0aW9uLmFjY2Vzc1Rva2VuO1xuXHRcdFx0XHRcdGNvbnN0IHRva2VuU3RyaW5nID0geWllbGQgdG9rZW4oXCJiZWFyZXJcIiwgW10pO1xuXHRcdFx0XHRcdGlmICh0b2tlblN0cmluZykgaGVhZGVyUGFyYW1ldGVyc1tcIkF1dGhvcml6YXRpb25cIl0gPSBgQmVhcmVyICR7dG9rZW5TdHJpbmd9YDtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCByZXNwb25zZSA9IHlpZWxkIHRoaXMucmVxdWVzdCh7XG5cdFx0XHRcdFx0cGF0aDogYC92MS9jdXN0c2VydmljZS9pc19idXNpbmVzc19ob3Vyc2AsXG5cdFx0XHRcdFx0bWV0aG9kOiBcIlBPU1RcIixcblx0XHRcdFx0XHRoZWFkZXJzOiBoZWFkZXJQYXJhbWV0ZXJzLFxuXHRcdFx0XHRcdHF1ZXJ5OiBxdWVyeVBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0Ym9keTogKDAsIGluZGV4XzEkNC5Jc0J1c2luZXNzSG91cnNSZXF1ZXN0VG9KU09OKShyZXF1ZXN0UGFyYW1ldGVyc1tcIklzQnVzaW5lc3NIb3Vyc1JlcXVlc3RcIl0pXG5cdFx0XHRcdH0sIGluaXRPdmVycmlkZXMpO1xuXHRcdFx0XHRyZXR1cm4gbmV3IHJ1bnRpbWUkNC5KU09OQXBpUmVzcG9uc2UocmVzcG9uc2UsIChqc29uVmFsdWUpID0+ICgwLCBpbmRleF8xJDQuSXNCdXNpbmVzc0hvdXJzUmVzcG9uc2VGcm9tSlNPTikoanNvblZhbHVlKSk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0LyoqXG5cdFx0KiBDaGVjayBpZiBpdCBpcyBjdXJyZW50bHkgYnVzaW5lc3MgaG91cnNcblx0XHQqL1xuXHRcdHYxQ3VzdHNlcnZpY2VJc0J1c2luZXNzSG91cnNQb3N0KCkge1xuXHRcdFx0cmV0dXJuIF9fYXdhaXRlciQ0KHRoaXMsIGFyZ3VtZW50cywgdm9pZCAwLCBmdW5jdGlvbiogKHJlcXVlc3RQYXJhbWV0ZXJzID0ge30sIGluaXRPdmVycmlkZXMpIHtcblx0XHRcdFx0cmV0dXJuIHlpZWxkICh5aWVsZCB0aGlzLnYxQ3VzdHNlcnZpY2VJc0J1c2luZXNzSG91cnNQb3N0UmF3KHJlcXVlc3RQYXJhbWV0ZXJzLCBpbml0T3ZlcnJpZGVzKSkudmFsdWUoKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHQvKipcblx0XHQqIFNlbmQgYSBtZXNzYWdlIGluIGFuIGV4aXN0aW5nIGNvbnZlcnNhdGlvblxuXHRcdCovXG5cdFx0djFDdXN0c2VydmljZVNlbmRNZXNzYWdlUG9zdFJhdyhyZXF1ZXN0UGFyYW1ldGVycywgaW5pdE92ZXJyaWRlcykge1xuXHRcdFx0cmV0dXJuIF9fYXdhaXRlciQ0KHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuXHRcdFx0XHRjb25zdCBxdWVyeVBhcmFtZXRlcnMgPSB7fTtcblx0XHRcdFx0Y29uc3QgaGVhZGVyUGFyYW1ldGVycyA9IHt9O1xuXHRcdFx0XHRoZWFkZXJQYXJhbWV0ZXJzW1wiQ29udGVudC1UeXBlXCJdID0gXCJhcHBsaWNhdGlvbi9qc29uXCI7XG5cdFx0XHRcdGlmICh0aGlzLmNvbmZpZ3VyYXRpb24gJiYgdGhpcy5jb25maWd1cmF0aW9uLmFjY2Vzc1Rva2VuKSB7XG5cdFx0XHRcdFx0Y29uc3QgdG9rZW4gPSB0aGlzLmNvbmZpZ3VyYXRpb24uYWNjZXNzVG9rZW47XG5cdFx0XHRcdFx0Y29uc3QgdG9rZW5TdHJpbmcgPSB5aWVsZCB0b2tlbihcImJlYXJlclwiLCBbXSk7XG5cdFx0XHRcdFx0aWYgKHRva2VuU3RyaW5nKSBoZWFkZXJQYXJhbWV0ZXJzW1wiQXV0aG9yaXphdGlvblwiXSA9IGBCZWFyZXIgJHt0b2tlblN0cmluZ31gO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IHJlc3BvbnNlID0geWllbGQgdGhpcy5yZXF1ZXN0KHtcblx0XHRcdFx0XHRwYXRoOiBgL3YxL2N1c3RzZXJ2aWNlL3NlbmRfbWVzc2FnZWAsXG5cdFx0XHRcdFx0bWV0aG9kOiBcIlBPU1RcIixcblx0XHRcdFx0XHRoZWFkZXJzOiBoZWFkZXJQYXJhbWV0ZXJzLFxuXHRcdFx0XHRcdHF1ZXJ5OiBxdWVyeVBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0Ym9keTogKDAsIGluZGV4XzEkNC5TZW5kTWVzc2FnZVJlcXVlc3RUb0pTT04pKHJlcXVlc3RQYXJhbWV0ZXJzW1wiU2VuZE1lc3NhZ2VSZXF1ZXN0XCJdKVxuXHRcdFx0XHR9LCBpbml0T3ZlcnJpZGVzKTtcblx0XHRcdFx0cmV0dXJuIG5ldyBydW50aW1lJDQuSlNPTkFwaVJlc3BvbnNlKHJlc3BvbnNlLCAoanNvblZhbHVlKSA9PiAoMCwgaW5kZXhfMSQ0LlNlbmRNZXNzYWdlUmVzcG9uc2VGcm9tSlNPTikoanNvblZhbHVlKSk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0LyoqXG5cdFx0KiBTZW5kIGEgbWVzc2FnZSBpbiBhbiBleGlzdGluZyBjb252ZXJzYXRpb25cblx0XHQqL1xuXHRcdHYxQ3VzdHNlcnZpY2VTZW5kTWVzc2FnZVBvc3QoKSB7XG5cdFx0XHRyZXR1cm4gX19hd2FpdGVyJDQodGhpcywgYXJndW1lbnRzLCB2b2lkIDAsIGZ1bmN0aW9uKiAocmVxdWVzdFBhcmFtZXRlcnMgPSB7fSwgaW5pdE92ZXJyaWRlcykge1xuXHRcdFx0XHRyZXR1cm4geWllbGQgKHlpZWxkIHRoaXMudjFDdXN0c2VydmljZVNlbmRNZXNzYWdlUG9zdFJhdyhyZXF1ZXN0UGFyYW1ldGVycywgaW5pdE92ZXJyaWRlcykpLnZhbHVlKCk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdH07XG5cdGV4cG9ydHMuQ3VzdG9tZXJTZXJ2aWNlQXBpID0gQ3VzdG9tZXJTZXJ2aWNlQXBpO1xufSkgfSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIC4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9hcGlzL0RlZmF1bHRBcGkuanNcbnZhciByZXF1aXJlX0RlZmF1bHRBcGkgPSAvKiBAX19QVVJFX18gKi8gX19jb21tb25KUyh7IFwiLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L2FwaXMvRGVmYXVsdEFwaS5qc1wiOiAoKGV4cG9ydHMpID0+IHtcblx0LyoqXG5cdCogQ29tbWVyY2Vcblx0KiBObyBkZXNjcmlwdGlvbiBwcm92aWRlZCAoZ2VuZXJhdGVkIGJ5IE9wZW5hcGkgR2VuZXJhdG9yIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuYXBpdG9vbHMvb3BlbmFwaS1nZW5lcmF0b3IpXG5cdCpcblx0KiBUaGUgdmVyc2lvbiBvZiB0aGUgT3BlbkFQSSBkb2N1bWVudDogMS4xLjBcblx0KlxuXHQqXG5cdCogTk9URTogVGhpcyBjbGFzcyBpcyBhdXRvIGdlbmVyYXRlZCBieSBPcGVuQVBJIEdlbmVyYXRvciAoaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoKS5cblx0KiBodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2hcblx0KiBEbyBub3QgZWRpdCB0aGUgY2xhc3MgbWFudWFsbHkuXG5cdCovXG5cdHZhciBfX2F3YWl0ZXIkMyA9IGV4cG9ydHMgJiYgZXhwb3J0cy5fX2F3YWl0ZXIgfHwgZnVuY3Rpb24odGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG5cdFx0ZnVuY3Rpb24gYWRvcHQodmFsdWUpIHtcblx0XHRcdHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uKHJlc29sdmUpIHtcblx0XHRcdFx0cmVzb2x2ZSh2YWx1ZSk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0cmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcblx0XHRcdGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkge1xuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTtcblx0XHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRcdHJlamVjdChlKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0ZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHtcblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7XG5cdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0XHRyZWplY3QoZSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7XG5cdFx0XHRcdHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpO1xuXHRcdFx0fVxuXHRcdFx0c3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuXHRcdH0pO1xuXHR9O1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5cdGV4cG9ydHMuVjFPcmdDb25maWdHZXRTb3VyY2VFbnVtID0gZXhwb3J0cy5EZWZhdWx0QXBpID0gdm9pZCAwO1xuXHRjb25zdCBydW50aW1lJDMgPSByZXF1aXJlX3J1bnRpbWUoKTtcblx0Y29uc3QgaW5kZXhfMSQzID0gcmVxdWlyZV9tb2RlbHMoKTtcblx0LyoqXG5cdCpcblx0Ki9cblx0dmFyIERlZmF1bHRBcGkgPSBjbGFzcyBleHRlbmRzIHJ1bnRpbWUkMy5CYXNlQVBJIHtcblx0XHQvKipcblx0XHQqIEV4ZWN1dGUgYSBHcmFwaFFMIHF1ZXJ5XG5cdFx0Ki9cblx0XHRncmFwaHFsUGxheWdyb3VuZFJhdyhpbml0T3ZlcnJpZGVzKSB7XG5cdFx0XHRyZXR1cm4gX19hd2FpdGVyJDModGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG5cdFx0XHRcdGNvbnN0IHJlc3BvbnNlID0geWllbGQgdGhpcy5yZXF1ZXN0KHtcblx0XHRcdFx0XHRwYXRoOiBgL3YxL2dyYXBocWxgLFxuXHRcdFx0XHRcdG1ldGhvZDogXCJHRVRcIixcblx0XHRcdFx0XHRoZWFkZXJzOiB7fSxcblx0XHRcdFx0XHRxdWVyeToge31cblx0XHRcdFx0fSwgaW5pdE92ZXJyaWRlcyk7XG5cdFx0XHRcdHJldHVybiBuZXcgcnVudGltZSQzLkpTT05BcGlSZXNwb25zZShyZXNwb25zZSk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0LyoqXG5cdFx0KiBFeGVjdXRlIGEgR3JhcGhRTCBxdWVyeVxuXHRcdCovXG5cdFx0Z3JhcGhxbFBsYXlncm91bmQoaW5pdE92ZXJyaWRlcykge1xuXHRcdFx0cmV0dXJuIF9fYXdhaXRlciQzKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuXHRcdFx0XHRyZXR1cm4geWllbGQgKHlpZWxkIHRoaXMuZ3JhcGhxbFBsYXlncm91bmRSYXcoaW5pdE92ZXJyaWRlcykpLnZhbHVlKCk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0LyoqXG5cdFx0KiBFeGVjdXRlIGEgR3JhcGhRTCBxdWVyeVxuXHRcdCovXG5cdFx0Z3JhcGhxbFNlcnZlclJhdyhyZXF1ZXN0UGFyYW1ldGVycywgaW5pdE92ZXJyaWRlcykge1xuXHRcdFx0cmV0dXJuIF9fYXdhaXRlciQzKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuXHRcdFx0XHRjb25zdCBxdWVyeVBhcmFtZXRlcnMgPSB7fTtcblx0XHRcdFx0Y29uc3QgaGVhZGVyUGFyYW1ldGVycyA9IHt9O1xuXHRcdFx0XHRoZWFkZXJQYXJhbWV0ZXJzW1wiQ29udGVudC1UeXBlXCJdID0gXCJhcHBsaWNhdGlvbi9qc29uXCI7XG5cdFx0XHRcdGlmICh0aGlzLmNvbmZpZ3VyYXRpb24gJiYgdGhpcy5jb25maWd1cmF0aW9uLmFjY2Vzc1Rva2VuKSB7XG5cdFx0XHRcdFx0Y29uc3QgdG9rZW4gPSB0aGlzLmNvbmZpZ3VyYXRpb24uYWNjZXNzVG9rZW47XG5cdFx0XHRcdFx0Y29uc3QgdG9rZW5TdHJpbmcgPSB5aWVsZCB0b2tlbihcImJlYXJlclwiLCBbXSk7XG5cdFx0XHRcdFx0aWYgKHRva2VuU3RyaW5nKSBoZWFkZXJQYXJhbWV0ZXJzW1wiQXV0aG9yaXphdGlvblwiXSA9IGBCZWFyZXIgJHt0b2tlblN0cmluZ31gO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IHJlc3BvbnNlID0geWllbGQgdGhpcy5yZXF1ZXN0KHtcblx0XHRcdFx0XHRwYXRoOiBgL3YxL2dyYXBocWxgLFxuXHRcdFx0XHRcdG1ldGhvZDogXCJQT1NUXCIsXG5cdFx0XHRcdFx0aGVhZGVyczogaGVhZGVyUGFyYW1ldGVycyxcblx0XHRcdFx0XHRxdWVyeTogcXVlcnlQYXJhbWV0ZXJzLFxuXHRcdFx0XHRcdGJvZHk6IHJlcXVlc3RQYXJhbWV0ZXJzW1wiYm9keVwiXVxuXHRcdFx0XHR9LCBpbml0T3ZlcnJpZGVzKTtcblx0XHRcdFx0cmV0dXJuIG5ldyBydW50aW1lJDMuSlNPTkFwaVJlc3BvbnNlKHJlc3BvbnNlKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHQvKipcblx0XHQqIEV4ZWN1dGUgYSBHcmFwaFFMIHF1ZXJ5XG5cdFx0Ki9cblx0XHRncmFwaHFsU2VydmVyKCkge1xuXHRcdFx0cmV0dXJuIF9fYXdhaXRlciQzKHRoaXMsIGFyZ3VtZW50cywgdm9pZCAwLCBmdW5jdGlvbiogKHJlcXVlc3RQYXJhbWV0ZXJzID0ge30sIGluaXRPdmVycmlkZXMpIHtcblx0XHRcdFx0cmV0dXJuIHlpZWxkICh5aWVsZCB0aGlzLmdyYXBocWxTZXJ2ZXJSYXcocmVxdWVzdFBhcmFtZXRlcnMsIGluaXRPdmVycmlkZXMpKS52YWx1ZSgpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdC8qKlxuXHRcdCogSGVhbHRoIGNoZWNrXG5cdFx0Ki9cblx0XHRoZWFsdGhFeEdldFJhdyhyZXF1ZXN0UGFyYW1ldGVycywgaW5pdE92ZXJyaWRlcykge1xuXHRcdFx0cmV0dXJuIF9fYXdhaXRlciQzKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuXHRcdFx0XHRjb25zdCBxdWVyeVBhcmFtZXRlcnMgPSB7fTtcblx0XHRcdFx0aWYgKHJlcXVlc3RQYXJhbWV0ZXJzW1wiZGVlcFwiXSAhPSBudWxsKSBxdWVyeVBhcmFtZXRlcnNbXCJkZWVwXCJdID0gcmVxdWVzdFBhcmFtZXRlcnNbXCJkZWVwXCJdO1xuXHRcdFx0XHRpZiAocmVxdWVzdFBhcmFtZXRlcnNbXCJsaW1pdF9vcmdfc2hvcnRfbmFtZXNcIl0gIT0gbnVsbCkgcXVlcnlQYXJhbWV0ZXJzW1wibGltaXRfb3JnX3Nob3J0X25hbWVzXCJdID0gcmVxdWVzdFBhcmFtZXRlcnNbXCJsaW1pdF9vcmdfc2hvcnRfbmFtZXNcIl07XG5cdFx0XHRcdGlmIChyZXF1ZXN0UGFyYW1ldGVyc1tcImxpbWl0X3Byb2R1Y3RzXCJdICE9IG51bGwpIHF1ZXJ5UGFyYW1ldGVyc1tcImxpbWl0X3Byb2R1Y3RzXCJdID0gcmVxdWVzdFBhcmFtZXRlcnNbXCJsaW1pdF9wcm9kdWN0c1wiXTtcblx0XHRcdFx0Y29uc3QgaGVhZGVyUGFyYW1ldGVycyA9IHt9O1xuXHRcdFx0XHRpZiAodGhpcy5jb25maWd1cmF0aW9uICYmIHRoaXMuY29uZmlndXJhdGlvbi5hY2Nlc3NUb2tlbikge1xuXHRcdFx0XHRcdGNvbnN0IHRva2VuID0gdGhpcy5jb25maWd1cmF0aW9uLmFjY2Vzc1Rva2VuO1xuXHRcdFx0XHRcdGNvbnN0IHRva2VuU3RyaW5nID0geWllbGQgdG9rZW4oXCJiZWFyZXJcIiwgW10pO1xuXHRcdFx0XHRcdGlmICh0b2tlblN0cmluZykgaGVhZGVyUGFyYW1ldGVyc1tcIkF1dGhvcml6YXRpb25cIl0gPSBgQmVhcmVyICR7dG9rZW5TdHJpbmd9YDtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCByZXNwb25zZSA9IHlpZWxkIHRoaXMucmVxdWVzdCh7XG5cdFx0XHRcdFx0cGF0aDogYC9oZWFsdGhleGAsXG5cdFx0XHRcdFx0bWV0aG9kOiBcIkdFVFwiLFxuXHRcdFx0XHRcdGhlYWRlcnM6IGhlYWRlclBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0cXVlcnk6IHF1ZXJ5UGFyYW1ldGVyc1xuXHRcdFx0XHR9LCBpbml0T3ZlcnJpZGVzKTtcblx0XHRcdFx0cmV0dXJuIG5ldyBydW50aW1lJDMuSlNPTkFwaVJlc3BvbnNlKHJlc3BvbnNlKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHQvKipcblx0XHQqIEhlYWx0aCBjaGVja1xuXHRcdCovXG5cdFx0aGVhbHRoRXhHZXQoKSB7XG5cdFx0XHRyZXR1cm4gX19hd2FpdGVyJDModGhpcywgYXJndW1lbnRzLCB2b2lkIDAsIGZ1bmN0aW9uKiAocmVxdWVzdFBhcmFtZXRlcnMgPSB7fSwgaW5pdE92ZXJyaWRlcykge1xuXHRcdFx0XHRyZXR1cm4geWllbGQgKHlpZWxkIHRoaXMuaGVhbHRoRXhHZXRSYXcocmVxdWVzdFBhcmFtZXRlcnMsIGluaXRPdmVycmlkZXMpKS52YWx1ZSgpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdC8qKlxuXHRcdCogSGVhbHRoIGNoZWNrXG5cdFx0Ki9cblx0XHRoZWFsdGhHZXRSYXcoaW5pdE92ZXJyaWRlcykge1xuXHRcdFx0cmV0dXJuIF9fYXdhaXRlciQzKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuXHRcdFx0XHRjb25zdCByZXNwb25zZSA9IHlpZWxkIHRoaXMucmVxdWVzdCh7XG5cdFx0XHRcdFx0cGF0aDogYC9oZWFsdGhgLFxuXHRcdFx0XHRcdG1ldGhvZDogXCJHRVRcIixcblx0XHRcdFx0XHRoZWFkZXJzOiB7fSxcblx0XHRcdFx0XHRxdWVyeToge31cblx0XHRcdFx0fSwgaW5pdE92ZXJyaWRlcyk7XG5cdFx0XHRcdHJldHVybiBuZXcgcnVudGltZSQzLkpTT05BcGlSZXNwb25zZShyZXNwb25zZSk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0LyoqXG5cdFx0KiBIZWFsdGggY2hlY2tcblx0XHQqL1xuXHRcdGhlYWx0aEdldChpbml0T3ZlcnJpZGVzKSB7XG5cdFx0XHRyZXR1cm4gX19hd2FpdGVyJDModGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG5cdFx0XHRcdHJldHVybiB5aWVsZCAoeWllbGQgdGhpcy5oZWFsdGhHZXRSYXcoaW5pdE92ZXJyaWRlcykpLnZhbHVlKCk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0LyoqXG5cdFx0KiBHZXQgdGhlIG9yZ2FuaXphdGlvbnMgY29uZmlnXG5cdFx0Ki9cblx0XHR2MUFuYWx5dGljc0lkZW50aWZ5UG9zdFJhdyhyZXF1ZXN0UGFyYW1ldGVycywgaW5pdE92ZXJyaWRlcykge1xuXHRcdFx0cmV0dXJuIF9fYXdhaXRlciQzKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuXHRcdFx0XHRjb25zdCBxdWVyeVBhcmFtZXRlcnMgPSB7fTtcblx0XHRcdFx0Y29uc3QgaGVhZGVyUGFyYW1ldGVycyA9IHt9O1xuXHRcdFx0XHRoZWFkZXJQYXJhbWV0ZXJzW1wiQ29udGVudC1UeXBlXCJdID0gXCJhcHBsaWNhdGlvbi9qc29uXCI7XG5cdFx0XHRcdGlmICh0aGlzLmNvbmZpZ3VyYXRpb24gJiYgdGhpcy5jb25maWd1cmF0aW9uLmFjY2Vzc1Rva2VuKSB7XG5cdFx0XHRcdFx0Y29uc3QgdG9rZW4gPSB0aGlzLmNvbmZpZ3VyYXRpb24uYWNjZXNzVG9rZW47XG5cdFx0XHRcdFx0Y29uc3QgdG9rZW5TdHJpbmcgPSB5aWVsZCB0b2tlbihcImJlYXJlclwiLCBbXSk7XG5cdFx0XHRcdFx0aWYgKHRva2VuU3RyaW5nKSBoZWFkZXJQYXJhbWV0ZXJzW1wiQXV0aG9yaXphdGlvblwiXSA9IGBCZWFyZXIgJHt0b2tlblN0cmluZ31gO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IHJlc3BvbnNlID0geWllbGQgdGhpcy5yZXF1ZXN0KHtcblx0XHRcdFx0XHRwYXRoOiBgL3YxL2FuYWx5dGljcy9pZGVudGlmeWAsXG5cdFx0XHRcdFx0bWV0aG9kOiBcIlBPU1RcIixcblx0XHRcdFx0XHRoZWFkZXJzOiBoZWFkZXJQYXJhbWV0ZXJzLFxuXHRcdFx0XHRcdHF1ZXJ5OiBxdWVyeVBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0Ym9keTogKDAsIGluZGV4XzEkMy5BbmFseXRpY3NJZGVudGlmeVJlcXVlc3RUb0pTT04pKHJlcXVlc3RQYXJhbWV0ZXJzW1wiQW5hbHl0aWNzSWRlbnRpZnlSZXF1ZXN0XCJdKVxuXHRcdFx0XHR9LCBpbml0T3ZlcnJpZGVzKTtcblx0XHRcdFx0cmV0dXJuIG5ldyBydW50aW1lJDMuSlNPTkFwaVJlc3BvbnNlKHJlc3BvbnNlKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHQvKipcblx0XHQqIEdldCB0aGUgb3JnYW5pemF0aW9ucyBjb25maWdcblx0XHQqL1xuXHRcdHYxQW5hbHl0aWNzSWRlbnRpZnlQb3N0KCkge1xuXHRcdFx0cmV0dXJuIF9fYXdhaXRlciQzKHRoaXMsIGFyZ3VtZW50cywgdm9pZCAwLCBmdW5jdGlvbiogKHJlcXVlc3RQYXJhbWV0ZXJzID0ge30sIGluaXRPdmVycmlkZXMpIHtcblx0XHRcdFx0cmV0dXJuIHlpZWxkICh5aWVsZCB0aGlzLnYxQW5hbHl0aWNzSWRlbnRpZnlQb3N0UmF3KHJlcXVlc3RQYXJhbWV0ZXJzLCBpbml0T3ZlcnJpZGVzKSkudmFsdWUoKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHQvKipcblx0XHQqIEdldCB0aGUgb3JnYW5pemF0aW9ucyBjb25maWdcblx0XHQqL1xuXHRcdHYxQW5hbHl0aWNzVHJhY2tFdmVudFBvc3RSYXcocmVxdWVzdFBhcmFtZXRlcnMsIGluaXRPdmVycmlkZXMpIHtcblx0XHRcdHJldHVybiBfX2F3YWl0ZXIkMyh0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcblx0XHRcdFx0Y29uc3QgcXVlcnlQYXJhbWV0ZXJzID0ge307XG5cdFx0XHRcdGNvbnN0IGhlYWRlclBhcmFtZXRlcnMgPSB7fTtcblx0XHRcdFx0aGVhZGVyUGFyYW1ldGVyc1tcIkNvbnRlbnQtVHlwZVwiXSA9IFwiYXBwbGljYXRpb24vanNvblwiO1xuXHRcdFx0XHRpZiAodGhpcy5jb25maWd1cmF0aW9uICYmIHRoaXMuY29uZmlndXJhdGlvbi5hY2Nlc3NUb2tlbikge1xuXHRcdFx0XHRcdGNvbnN0IHRva2VuID0gdGhpcy5jb25maWd1cmF0aW9uLmFjY2Vzc1Rva2VuO1xuXHRcdFx0XHRcdGNvbnN0IHRva2VuU3RyaW5nID0geWllbGQgdG9rZW4oXCJiZWFyZXJcIiwgW10pO1xuXHRcdFx0XHRcdGlmICh0b2tlblN0cmluZykgaGVhZGVyUGFyYW1ldGVyc1tcIkF1dGhvcml6YXRpb25cIl0gPSBgQmVhcmVyICR7dG9rZW5TdHJpbmd9YDtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCByZXNwb25zZSA9IHlpZWxkIHRoaXMucmVxdWVzdCh7XG5cdFx0XHRcdFx0cGF0aDogYC92MS9hbmFseXRpY3MvdHJhY2tfZXZlbnRgLFxuXHRcdFx0XHRcdG1ldGhvZDogXCJQT1NUXCIsXG5cdFx0XHRcdFx0aGVhZGVyczogaGVhZGVyUGFyYW1ldGVycyxcblx0XHRcdFx0XHRxdWVyeTogcXVlcnlQYXJhbWV0ZXJzLFxuXHRcdFx0XHRcdGJvZHk6ICgwLCBpbmRleF8xJDMuQW5hbHl0aWNzVHJhY2tFdmVudFJlcXVlc3RUb0pTT04pKHJlcXVlc3RQYXJhbWV0ZXJzW1wiQW5hbHl0aWNzVHJhY2tFdmVudFJlcXVlc3RcIl0pXG5cdFx0XHRcdH0sIGluaXRPdmVycmlkZXMpO1xuXHRcdFx0XHRyZXR1cm4gbmV3IHJ1bnRpbWUkMy5KU09OQXBpUmVzcG9uc2UocmVzcG9uc2UpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdC8qKlxuXHRcdCogR2V0IHRoZSBvcmdhbml6YXRpb25zIGNvbmZpZ1xuXHRcdCovXG5cdFx0djFBbmFseXRpY3NUcmFja0V2ZW50UG9zdCgpIHtcblx0XHRcdHJldHVybiBfX2F3YWl0ZXIkMyh0aGlzLCBhcmd1bWVudHMsIHZvaWQgMCwgZnVuY3Rpb24qIChyZXF1ZXN0UGFyYW1ldGVycyA9IHt9LCBpbml0T3ZlcnJpZGVzKSB7XG5cdFx0XHRcdHJldHVybiB5aWVsZCAoeWllbGQgdGhpcy52MUFuYWx5dGljc1RyYWNrRXZlbnRQb3N0UmF3KHJlcXVlc3RQYXJhbWV0ZXJzLCBpbml0T3ZlcnJpZGVzKSkudmFsdWUoKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHQvKipcblx0XHQqIFJlcG9ydCB0aGUgc2Vzc2lvbiBhcyBiZWluZyBhIHByb2JsZW1cblx0XHQqIFJlcG9ydCBTZXNzaW9uXG5cdFx0Ki9cblx0XHR2MUNoYXRzUmVwb3J0U2Vzc2lvbklkUG9zdFJhdyhyZXF1ZXN0UGFyYW1ldGVycywgaW5pdE92ZXJyaWRlcykge1xuXHRcdFx0cmV0dXJuIF9fYXdhaXRlciQzKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuXHRcdFx0XHRjb25zdCBxdWVyeVBhcmFtZXRlcnMgPSB7fTtcblx0XHRcdFx0Y29uc3QgaGVhZGVyUGFyYW1ldGVycyA9IHt9O1xuXHRcdFx0XHRoZWFkZXJQYXJhbWV0ZXJzW1wiQ29udGVudC1UeXBlXCJdID0gXCJhcHBsaWNhdGlvbi9qc29uXCI7XG5cdFx0XHRcdGlmICh0aGlzLmNvbmZpZ3VyYXRpb24gJiYgdGhpcy5jb25maWd1cmF0aW9uLmFjY2Vzc1Rva2VuKSB7XG5cdFx0XHRcdFx0Y29uc3QgdG9rZW4gPSB0aGlzLmNvbmZpZ3VyYXRpb24uYWNjZXNzVG9rZW47XG5cdFx0XHRcdFx0Y29uc3QgdG9rZW5TdHJpbmcgPSB5aWVsZCB0b2tlbihcImJlYXJlclwiLCBbXSk7XG5cdFx0XHRcdFx0aWYgKHRva2VuU3RyaW5nKSBoZWFkZXJQYXJhbWV0ZXJzW1wiQXV0aG9yaXphdGlvblwiXSA9IGBCZWFyZXIgJHt0b2tlblN0cmluZ31gO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IHJlc3BvbnNlID0geWllbGQgdGhpcy5yZXF1ZXN0KHtcblx0XHRcdFx0XHRwYXRoOiBgL3YxL2NoYXRzL3JlcG9ydGAsXG5cdFx0XHRcdFx0bWV0aG9kOiBcIlBPU1RcIixcblx0XHRcdFx0XHRoZWFkZXJzOiBoZWFkZXJQYXJhbWV0ZXJzLFxuXHRcdFx0XHRcdHF1ZXJ5OiBxdWVyeVBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0Ym9keTogKDAsIGluZGV4XzEkMy5SZXBvcnRTZXNzaW9uUmVxdWVzdFRvSlNPTikocmVxdWVzdFBhcmFtZXRlcnNbXCJSZXBvcnRTZXNzaW9uUmVxdWVzdFwiXSlcblx0XHRcdFx0fSwgaW5pdE92ZXJyaWRlcyk7XG5cdFx0XHRcdHJldHVybiBuZXcgcnVudGltZSQzLkpTT05BcGlSZXNwb25zZShyZXNwb25zZSk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0LyoqXG5cdFx0KiBSZXBvcnQgdGhlIHNlc3Npb24gYXMgYmVpbmcgYSBwcm9ibGVtXG5cdFx0KiBSZXBvcnQgU2Vzc2lvblxuXHRcdCovXG5cdFx0djFDaGF0c1JlcG9ydFNlc3Npb25JZFBvc3QoKSB7XG5cdFx0XHRyZXR1cm4gX19hd2FpdGVyJDModGhpcywgYXJndW1lbnRzLCB2b2lkIDAsIGZ1bmN0aW9uKiAocmVxdWVzdFBhcmFtZXRlcnMgPSB7fSwgaW5pdE92ZXJyaWRlcykge1xuXHRcdFx0XHRyZXR1cm4geWllbGQgKHlpZWxkIHRoaXMudjFDaGF0c1JlcG9ydFNlc3Npb25JZFBvc3RSYXcocmVxdWVzdFBhcmFtZXRlcnMsIGluaXRPdmVycmlkZXMpKS52YWx1ZSgpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdC8qKlxuXHRcdCogUG9zdCBhIHVzZXIgZXZlbnRcblx0XHQqL1xuXHRcdHYxRXZlbnRQb3N0UmF3KHJlcXVlc3RQYXJhbWV0ZXJzLCBpbml0T3ZlcnJpZGVzKSB7XG5cdFx0XHRyZXR1cm4gX19hd2FpdGVyJDModGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG5cdFx0XHRcdGNvbnN0IHF1ZXJ5UGFyYW1ldGVycyA9IHt9O1xuXHRcdFx0XHRjb25zdCBoZWFkZXJQYXJhbWV0ZXJzID0ge307XG5cdFx0XHRcdGhlYWRlclBhcmFtZXRlcnNbXCJDb250ZW50LVR5cGVcIl0gPSBcImFwcGxpY2F0aW9uL2pzb25cIjtcblx0XHRcdFx0aWYgKHRoaXMuY29uZmlndXJhdGlvbiAmJiB0aGlzLmNvbmZpZ3VyYXRpb24uYWNjZXNzVG9rZW4pIHtcblx0XHRcdFx0XHRjb25zdCB0b2tlbiA9IHRoaXMuY29uZmlndXJhdGlvbi5hY2Nlc3NUb2tlbjtcblx0XHRcdFx0XHRjb25zdCB0b2tlblN0cmluZyA9IHlpZWxkIHRva2VuKFwiYmVhcmVyXCIsIFtdKTtcblx0XHRcdFx0XHRpZiAodG9rZW5TdHJpbmcpIGhlYWRlclBhcmFtZXRlcnNbXCJBdXRob3JpemF0aW9uXCJdID0gYEJlYXJlciAke3Rva2VuU3RyaW5nfWA7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3QgcmVzcG9uc2UgPSB5aWVsZCB0aGlzLnJlcXVlc3Qoe1xuXHRcdFx0XHRcdHBhdGg6IGAvdjEvZXZlbnRgLFxuXHRcdFx0XHRcdG1ldGhvZDogXCJQT1NUXCIsXG5cdFx0XHRcdFx0aGVhZGVyczogaGVhZGVyUGFyYW1ldGVycyxcblx0XHRcdFx0XHRxdWVyeTogcXVlcnlQYXJhbWV0ZXJzLFxuXHRcdFx0XHRcdGJvZHk6ICgwLCBpbmRleF8xJDMuVXNlckV2ZW50VG9KU09OKShyZXF1ZXN0UGFyYW1ldGVyc1tcIlVzZXJFdmVudFwiXSlcblx0XHRcdFx0fSwgaW5pdE92ZXJyaWRlcyk7XG5cdFx0XHRcdHJldHVybiBuZXcgcnVudGltZSQzLkpTT05BcGlSZXNwb25zZShyZXNwb25zZSk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0LyoqXG5cdFx0KiBQb3N0IGEgdXNlciBldmVudFxuXHRcdCovXG5cdFx0djFFdmVudFBvc3QoKSB7XG5cdFx0XHRyZXR1cm4gX19hd2FpdGVyJDModGhpcywgYXJndW1lbnRzLCB2b2lkIDAsIGZ1bmN0aW9uKiAocmVxdWVzdFBhcmFtZXRlcnMgPSB7fSwgaW5pdE92ZXJyaWRlcykge1xuXHRcdFx0XHRyZXR1cm4geWllbGQgKHlpZWxkIHRoaXMudjFFdmVudFBvc3RSYXcocmVxdWVzdFBhcmFtZXRlcnMsIGluaXRPdmVycmlkZXMpKS52YWx1ZSgpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdC8qKlxuXHRcdCogR2V0IG1lc3NhZ2VzIGZvciBhbiBhY3RpdmUgY2hhdCBzZXNzaW9uLlxuXHRcdCovXG5cdFx0djFHZXRTZXNzaW9uTWVzc2FnZXNSYXcocmVxdWVzdFBhcmFtZXRlcnMsIGluaXRPdmVycmlkZXMpIHtcblx0XHRcdHJldHVybiBfX2F3YWl0ZXIkMyh0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcblx0XHRcdFx0aWYgKHJlcXVlc3RQYXJhbWV0ZXJzW1wib3JnX2lkXCJdID09IG51bGwpIHRocm93IG5ldyBydW50aW1lJDMuUmVxdWlyZWRFcnJvcihcIm9yZ19pZFwiLCBcIlJlcXVpcmVkIHBhcmFtZXRlciBcXFwib3JnX2lkXFxcIiB3YXMgbnVsbCBvciB1bmRlZmluZWQgd2hlbiBjYWxsaW5nIHYxR2V0U2Vzc2lvbk1lc3NhZ2VzKCkuXCIpO1xuXHRcdFx0XHRpZiAocmVxdWVzdFBhcmFtZXRlcnNbXCJ1c2VyX2lkXCJdID09IG51bGwpIHRocm93IG5ldyBydW50aW1lJDMuUmVxdWlyZWRFcnJvcihcInVzZXJfaWRcIiwgXCJSZXF1aXJlZCBwYXJhbWV0ZXIgXFxcInVzZXJfaWRcXFwiIHdhcyBudWxsIG9yIHVuZGVmaW5lZCB3aGVuIGNhbGxpbmcgdjFHZXRTZXNzaW9uTWVzc2FnZXMoKS5cIik7XG5cdFx0XHRcdGNvbnN0IHF1ZXJ5UGFyYW1ldGVycyA9IHt9O1xuXHRcdFx0XHRpZiAocmVxdWVzdFBhcmFtZXRlcnNbXCJvcmdfaWRcIl0gIT0gbnVsbCkgcXVlcnlQYXJhbWV0ZXJzW1wib3JnX2lkXCJdID0gcmVxdWVzdFBhcmFtZXRlcnNbXCJvcmdfaWRcIl07XG5cdFx0XHRcdGlmIChyZXF1ZXN0UGFyYW1ldGVyc1tcImNoYXRfaWRcIl0gIT0gbnVsbCkgcXVlcnlQYXJhbWV0ZXJzW1wiY2hhdF9pZFwiXSA9IHJlcXVlc3RQYXJhbWV0ZXJzW1wiY2hhdF9pZFwiXTtcblx0XHRcdFx0aWYgKHJlcXVlc3RQYXJhbWV0ZXJzW1widXNlcl9pZFwiXSAhPSBudWxsKSBxdWVyeVBhcmFtZXRlcnNbXCJ1c2VyX2lkXCJdID0gcmVxdWVzdFBhcmFtZXRlcnNbXCJ1c2VyX2lkXCJdO1xuXHRcdFx0XHRjb25zdCBoZWFkZXJQYXJhbWV0ZXJzID0ge307XG5cdFx0XHRcdGlmICh0aGlzLmNvbmZpZ3VyYXRpb24gJiYgdGhpcy5jb25maWd1cmF0aW9uLmFjY2Vzc1Rva2VuKSB7XG5cdFx0XHRcdFx0Y29uc3QgdG9rZW4gPSB0aGlzLmNvbmZpZ3VyYXRpb24uYWNjZXNzVG9rZW47XG5cdFx0XHRcdFx0Y29uc3QgdG9rZW5TdHJpbmcgPSB5aWVsZCB0b2tlbihcImJlYXJlclwiLCBbXSk7XG5cdFx0XHRcdFx0aWYgKHRva2VuU3RyaW5nKSBoZWFkZXJQYXJhbWV0ZXJzW1wiQXV0aG9yaXphdGlvblwiXSA9IGBCZWFyZXIgJHt0b2tlblN0cmluZ31gO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IHJlc3BvbnNlID0geWllbGQgdGhpcy5yZXF1ZXN0KHtcblx0XHRcdFx0XHRwYXRoOiBgL3YxL3Nlc3Npb24vbWVzc2FnZXNgLFxuXHRcdFx0XHRcdG1ldGhvZDogXCJHRVRcIixcblx0XHRcdFx0XHRoZWFkZXJzOiBoZWFkZXJQYXJhbWV0ZXJzLFxuXHRcdFx0XHRcdHF1ZXJ5OiBxdWVyeVBhcmFtZXRlcnNcblx0XHRcdFx0fSwgaW5pdE92ZXJyaWRlcyk7XG5cdFx0XHRcdHJldHVybiBuZXcgcnVudGltZSQzLkpTT05BcGlSZXNwb25zZShyZXNwb25zZSwgKGpzb25WYWx1ZSkgPT4gKDAsIGluZGV4XzEkMy5WMUdldFNlc3Npb25NZXNzYWdlczIwMFJlc3BvbnNlRnJvbUpTT04pKGpzb25WYWx1ZSkpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdC8qKlxuXHRcdCogR2V0IG1lc3NhZ2VzIGZvciBhbiBhY3RpdmUgY2hhdCBzZXNzaW9uLlxuXHRcdCovXG5cdFx0djFHZXRTZXNzaW9uTWVzc2FnZXMocmVxdWVzdFBhcmFtZXRlcnMsIGluaXRPdmVycmlkZXMpIHtcblx0XHRcdHJldHVybiBfX2F3YWl0ZXIkMyh0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcblx0XHRcdFx0cmV0dXJuIHlpZWxkICh5aWVsZCB0aGlzLnYxR2V0U2Vzc2lvbk1lc3NhZ2VzUmF3KHJlcXVlc3RQYXJhbWV0ZXJzLCBpbml0T3ZlcnJpZGVzKSkudmFsdWUoKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHQvKipcblx0XHQqIEdldCB0aGUgb3JnYW5pemF0aW9ucyBjb25maWdcblx0XHQqL1xuXHRcdHYxT3JnQ29uZmlnR2V0UmF3KHJlcXVlc3RQYXJhbWV0ZXJzLCBpbml0T3ZlcnJpZGVzKSB7XG5cdFx0XHRyZXR1cm4gX19hd2FpdGVyJDModGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG5cdFx0XHRcdGNvbnN0IHF1ZXJ5UGFyYW1ldGVycyA9IHt9O1xuXHRcdFx0XHRpZiAocmVxdWVzdFBhcmFtZXRlcnNbXCJuYW1lc3BhY2VcIl0gIT0gbnVsbCkgcXVlcnlQYXJhbWV0ZXJzW1wibmFtZXNwYWNlXCJdID0gcmVxdWVzdFBhcmFtZXRlcnNbXCJuYW1lc3BhY2VcIl07XG5cdFx0XHRcdGlmIChyZXF1ZXN0UGFyYW1ldGVyc1tcInNvdXJjZVwiXSAhPSBudWxsKSBxdWVyeVBhcmFtZXRlcnNbXCJzb3VyY2VcIl0gPSByZXF1ZXN0UGFyYW1ldGVyc1tcInNvdXJjZVwiXTtcblx0XHRcdFx0aWYgKHJlcXVlc3RQYXJhbWV0ZXJzW1widXNlcl9pZFwiXSAhPSBudWxsKSBxdWVyeVBhcmFtZXRlcnNbXCJ1c2VyX2lkXCJdID0gcmVxdWVzdFBhcmFtZXRlcnNbXCJ1c2VyX2lkXCJdO1xuXHRcdFx0XHRpZiAocmVxdWVzdFBhcmFtZXRlcnNbXCJpbmNsdWRlX2V4cGVyaW1lbnRzXCJdICE9IG51bGwpIHF1ZXJ5UGFyYW1ldGVyc1tcImluY2x1ZGVfZXhwZXJpbWVudHNcIl0gPSByZXF1ZXN0UGFyYW1ldGVyc1tcImluY2x1ZGVfZXhwZXJpbWVudHNcIl07XG5cdFx0XHRcdGlmIChyZXF1ZXN0UGFyYW1ldGVyc1tcImluY2x1ZGVfZmVhdHVyZV9nYXRlc1wiXSAhPSBudWxsKSBxdWVyeVBhcmFtZXRlcnNbXCJpbmNsdWRlX2ZlYXR1cmVfZ2F0ZXNcIl0gPSByZXF1ZXN0UGFyYW1ldGVyc1tcImluY2x1ZGVfZmVhdHVyZV9nYXRlc1wiXTtcblx0XHRcdFx0Y29uc3QgaGVhZGVyUGFyYW1ldGVycyA9IHt9O1xuXHRcdFx0XHRpZiAodGhpcy5jb25maWd1cmF0aW9uICYmIHRoaXMuY29uZmlndXJhdGlvbi5hY2Nlc3NUb2tlbikge1xuXHRcdFx0XHRcdGNvbnN0IHRva2VuID0gdGhpcy5jb25maWd1cmF0aW9uLmFjY2Vzc1Rva2VuO1xuXHRcdFx0XHRcdGNvbnN0IHRva2VuU3RyaW5nID0geWllbGQgdG9rZW4oXCJiZWFyZXJcIiwgW10pO1xuXHRcdFx0XHRcdGlmICh0b2tlblN0cmluZykgaGVhZGVyUGFyYW1ldGVyc1tcIkF1dGhvcml6YXRpb25cIl0gPSBgQmVhcmVyICR7dG9rZW5TdHJpbmd9YDtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCByZXNwb25zZSA9IHlpZWxkIHRoaXMucmVxdWVzdCh7XG5cdFx0XHRcdFx0cGF0aDogYC92MS9vcmcvY29uZmlnYCxcblx0XHRcdFx0XHRtZXRob2Q6IFwiR0VUXCIsXG5cdFx0XHRcdFx0aGVhZGVyczogaGVhZGVyUGFyYW1ldGVycyxcblx0XHRcdFx0XHRxdWVyeTogcXVlcnlQYXJhbWV0ZXJzXG5cdFx0XHRcdH0sIGluaXRPdmVycmlkZXMpO1xuXHRcdFx0XHRyZXR1cm4gbmV3IHJ1bnRpbWUkMy5KU09OQXBpUmVzcG9uc2UocmVzcG9uc2UsIChqc29uVmFsdWUpID0+ICgwLCBpbmRleF8xJDMuT3JnYW5pemF0aW9uQ29uZmlnUmVzdWx0c0Zyb21KU09OKShqc29uVmFsdWUpKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHQvKipcblx0XHQqIEdldCB0aGUgb3JnYW5pemF0aW9ucyBjb25maWdcblx0XHQqL1xuXHRcdHYxT3JnQ29uZmlnR2V0KCkge1xuXHRcdFx0cmV0dXJuIF9fYXdhaXRlciQzKHRoaXMsIGFyZ3VtZW50cywgdm9pZCAwLCBmdW5jdGlvbiogKHJlcXVlc3RQYXJhbWV0ZXJzID0ge30sIGluaXRPdmVycmlkZXMpIHtcblx0XHRcdFx0cmV0dXJuIHlpZWxkICh5aWVsZCB0aGlzLnYxT3JnQ29uZmlnR2V0UmF3KHJlcXVlc3RQYXJhbWV0ZXJzLCBpbml0T3ZlcnJpZGVzKSkudmFsdWUoKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHQvKipcblx0XHQqIEdldCB0aGUgb3JnYW5pemF0aW9uIGFuZCBpdHMgc2V0dGluZ3MgZ2l2ZW4gYW4gQVBJIGtleVxuXHRcdCovXG5cdFx0djFPcmdHZXRSYXcocmVxdWVzdFBhcmFtZXRlcnMsIGluaXRPdmVycmlkZXMpIHtcblx0XHRcdHJldHVybiBfX2F3YWl0ZXIkMyh0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcblx0XHRcdFx0aWYgKHJlcXVlc3RQYXJhbWV0ZXJzW1wia2V5XCJdID09IG51bGwpIHRocm93IG5ldyBydW50aW1lJDMuUmVxdWlyZWRFcnJvcihcImtleVwiLCBcIlJlcXVpcmVkIHBhcmFtZXRlciBcXFwia2V5XFxcIiB3YXMgbnVsbCBvciB1bmRlZmluZWQgd2hlbiBjYWxsaW5nIHYxT3JnR2V0KCkuXCIpO1xuXHRcdFx0XHRjb25zdCBxdWVyeVBhcmFtZXRlcnMgPSB7fTtcblx0XHRcdFx0aWYgKHJlcXVlc3RQYXJhbWV0ZXJzW1wia2V5XCJdICE9IG51bGwpIHF1ZXJ5UGFyYW1ldGVyc1tcImtleVwiXSA9IHJlcXVlc3RQYXJhbWV0ZXJzW1wia2V5XCJdO1xuXHRcdFx0XHRjb25zdCBoZWFkZXJQYXJhbWV0ZXJzID0ge307XG5cdFx0XHRcdGlmICh0aGlzLmNvbmZpZ3VyYXRpb24gJiYgdGhpcy5jb25maWd1cmF0aW9uLmFjY2Vzc1Rva2VuKSB7XG5cdFx0XHRcdFx0Y29uc3QgdG9rZW4gPSB0aGlzLmNvbmZpZ3VyYXRpb24uYWNjZXNzVG9rZW47XG5cdFx0XHRcdFx0Y29uc3QgdG9rZW5TdHJpbmcgPSB5aWVsZCB0b2tlbihcImJlYXJlclwiLCBbXSk7XG5cdFx0XHRcdFx0aWYgKHRva2VuU3RyaW5nKSBoZWFkZXJQYXJhbWV0ZXJzW1wiQXV0aG9yaXphdGlvblwiXSA9IGBCZWFyZXIgJHt0b2tlblN0cmluZ31gO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IHJlc3BvbnNlID0geWllbGQgdGhpcy5yZXF1ZXN0KHtcblx0XHRcdFx0XHRwYXRoOiBgL3YxL29yZ2AsXG5cdFx0XHRcdFx0bWV0aG9kOiBcIkdFVFwiLFxuXHRcdFx0XHRcdGhlYWRlcnM6IGhlYWRlclBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0cXVlcnk6IHF1ZXJ5UGFyYW1ldGVyc1xuXHRcdFx0XHR9LCBpbml0T3ZlcnJpZGVzKTtcblx0XHRcdFx0cmV0dXJuIG5ldyBydW50aW1lJDMuSlNPTkFwaVJlc3BvbnNlKHJlc3BvbnNlLCAoanNvblZhbHVlKSA9PiAoMCwgaW5kZXhfMSQzLk9yZ2FuaXphdGlvblNldHRpbmdzRnJvbUpTT04pKGpzb25WYWx1ZSkpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdC8qKlxuXHRcdCogR2V0IHRoZSBvcmdhbml6YXRpb24gYW5kIGl0cyBzZXR0aW5ncyBnaXZlbiBhbiBBUEkga2V5XG5cdFx0Ki9cblx0XHR2MU9yZ0dldChyZXF1ZXN0UGFyYW1ldGVycywgaW5pdE92ZXJyaWRlcykge1xuXHRcdFx0cmV0dXJuIF9fYXdhaXRlciQzKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuXHRcdFx0XHRyZXR1cm4geWllbGQgKHlpZWxkIHRoaXMudjFPcmdHZXRSYXcocmVxdWVzdFBhcmFtZXRlcnMsIGluaXRPdmVycmlkZXMpKS52YWx1ZSgpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdC8qKlxuXHRcdCogRXhwbGFpbiB3aHkgYSBwcm9kdWN0IHdhcyByZWNvbW1lbmRlZC5cblx0XHQqL1xuXHRcdHYxU2VhcmNoRXhwbGFpbkdldFJhdyhyZXF1ZXN0UGFyYW1ldGVycywgaW5pdE92ZXJyaWRlcykge1xuXHRcdFx0cmV0dXJuIF9fYXdhaXRlciQzKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuXHRcdFx0XHRpZiAocmVxdWVzdFBhcmFtZXRlcnNbXCJvcmdfaWRcIl0gPT0gbnVsbCkgdGhyb3cgbmV3IHJ1bnRpbWUkMy5SZXF1aXJlZEVycm9yKFwib3JnX2lkXCIsIFwiUmVxdWlyZWQgcGFyYW1ldGVyIFxcXCJvcmdfaWRcXFwiIHdhcyBudWxsIG9yIHVuZGVmaW5lZCB3aGVuIGNhbGxpbmcgdjFTZWFyY2hFeHBsYWluR2V0KCkuXCIpO1xuXHRcdFx0XHRpZiAocmVxdWVzdFBhcmFtZXRlcnNbXCJjaGF0X2lkXCJdID09IG51bGwpIHRocm93IG5ldyBydW50aW1lJDMuUmVxdWlyZWRFcnJvcihcImNoYXRfaWRcIiwgXCJSZXF1aXJlZCBwYXJhbWV0ZXIgXFxcImNoYXRfaWRcXFwiIHdhcyBudWxsIG9yIHVuZGVmaW5lZCB3aGVuIGNhbGxpbmcgdjFTZWFyY2hFeHBsYWluR2V0KCkuXCIpO1xuXHRcdFx0XHRpZiAocmVxdWVzdFBhcmFtZXRlcnNbXCJwcm9kdWN0X2lkXCJdID09IG51bGwpIHRocm93IG5ldyBydW50aW1lJDMuUmVxdWlyZWRFcnJvcihcInByb2R1Y3RfaWRcIiwgXCJSZXF1aXJlZCBwYXJhbWV0ZXIgXFxcInByb2R1Y3RfaWRcXFwiIHdhcyBudWxsIG9yIHVuZGVmaW5lZCB3aGVuIGNhbGxpbmcgdjFTZWFyY2hFeHBsYWluR2V0KCkuXCIpO1xuXHRcdFx0XHRjb25zdCBxdWVyeVBhcmFtZXRlcnMgPSB7fTtcblx0XHRcdFx0aWYgKHJlcXVlc3RQYXJhbWV0ZXJzW1wib3JnX2lkXCJdICE9IG51bGwpIHF1ZXJ5UGFyYW1ldGVyc1tcIm9yZ19pZFwiXSA9IHJlcXVlc3RQYXJhbWV0ZXJzW1wib3JnX2lkXCJdO1xuXHRcdFx0XHRpZiAocmVxdWVzdFBhcmFtZXRlcnNbXCJjaGF0X2lkXCJdICE9IG51bGwpIHF1ZXJ5UGFyYW1ldGVyc1tcImNoYXRfaWRcIl0gPSByZXF1ZXN0UGFyYW1ldGVyc1tcImNoYXRfaWRcIl07XG5cdFx0XHRcdGlmIChyZXF1ZXN0UGFyYW1ldGVyc1tcInByb2R1Y3RfaWRcIl0gIT0gbnVsbCkgcXVlcnlQYXJhbWV0ZXJzW1wicHJvZHVjdF9pZFwiXSA9IHJlcXVlc3RQYXJhbWV0ZXJzW1wicHJvZHVjdF9pZFwiXTtcblx0XHRcdFx0Y29uc3QgaGVhZGVyUGFyYW1ldGVycyA9IHt9O1xuXHRcdFx0XHRpZiAodGhpcy5jb25maWd1cmF0aW9uICYmIHRoaXMuY29uZmlndXJhdGlvbi5hY2Nlc3NUb2tlbikge1xuXHRcdFx0XHRcdGNvbnN0IHRva2VuID0gdGhpcy5jb25maWd1cmF0aW9uLmFjY2Vzc1Rva2VuO1xuXHRcdFx0XHRcdGNvbnN0IHRva2VuU3RyaW5nID0geWllbGQgdG9rZW4oXCJiZWFyZXJcIiwgW10pO1xuXHRcdFx0XHRcdGlmICh0b2tlblN0cmluZykgaGVhZGVyUGFyYW1ldGVyc1tcIkF1dGhvcml6YXRpb25cIl0gPSBgQmVhcmVyICR7dG9rZW5TdHJpbmd9YDtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCByZXNwb25zZSA9IHlpZWxkIHRoaXMucmVxdWVzdCh7XG5cdFx0XHRcdFx0cGF0aDogYC92MS9zZWFyY2gvZXhwbGFpbmAsXG5cdFx0XHRcdFx0bWV0aG9kOiBcIkdFVFwiLFxuXHRcdFx0XHRcdGhlYWRlcnM6IGhlYWRlclBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0cXVlcnk6IHF1ZXJ5UGFyYW1ldGVyc1xuXHRcdFx0XHR9LCBpbml0T3ZlcnJpZGVzKTtcblx0XHRcdFx0cmV0dXJuIG5ldyBydW50aW1lJDMuSlNPTkFwaVJlc3BvbnNlKHJlc3BvbnNlLCAoanNvblZhbHVlKSA9PiAoMCwgaW5kZXhfMSQzLlYxU2VhcmNoRXhwbGFpbkdldDIwMFJlc3BvbnNlRnJvbUpTT04pKGpzb25WYWx1ZSkpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdC8qKlxuXHRcdCogRXhwbGFpbiB3aHkgYSBwcm9kdWN0IHdhcyByZWNvbW1lbmRlZC5cblx0XHQqL1xuXHRcdHYxU2VhcmNoRXhwbGFpbkdldChyZXF1ZXN0UGFyYW1ldGVycywgaW5pdE92ZXJyaWRlcykge1xuXHRcdFx0cmV0dXJuIF9fYXdhaXRlciQzKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuXHRcdFx0XHRyZXR1cm4geWllbGQgKHlpZWxkIHRoaXMudjFTZWFyY2hFeHBsYWluR2V0UmF3KHJlcXVlc3RQYXJhbWV0ZXJzLCBpbml0T3ZlcnJpZGVzKSkudmFsdWUoKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0fTtcblx0ZXhwb3J0cy5EZWZhdWx0QXBpID0gRGVmYXVsdEFwaTtcblx0LyoqXG5cdCogQGV4cG9ydFxuXHQqIEBlbnVtIHtzdHJpbmd9XG5cdCovXG5cdHZhciBWMU9yZ0NvbmZpZ0dldFNvdXJjZUVudW07XG5cdChmdW5jdGlvbihWMU9yZ0NvbmZpZ0dldFNvdXJjZUVudW0kMSkge1xuXHRcdFYxT3JnQ29uZmlnR2V0U291cmNlRW51bSQxW1wiRm9ya1wiXSA9IFwiZm9ya1wiO1xuXHRcdFYxT3JnQ29uZmlnR2V0U291cmNlRW51bSQxW1wiUGxheWdyb3VuZFwiXSA9IFwicGxheWdyb3VuZFwiO1xuXHRcdFYxT3JnQ29uZmlnR2V0U291cmNlRW51bSQxW1wiQXBwXCJdID0gXCJhcHBcIjtcblx0XHRWMU9yZ0NvbmZpZ0dldFNvdXJjZUVudW0kMVtcIlRlc3RcIl0gPSBcInRlc3RcIjtcblx0fSkoVjFPcmdDb25maWdHZXRTb3VyY2VFbnVtIHx8IChleHBvcnRzLlYxT3JnQ29uZmlnR2V0U291cmNlRW51bSA9IFYxT3JnQ29uZmlnR2V0U291cmNlRW51bSA9IHt9KSk7XG59KSB9KTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L2FwaXMvSW5mZXJlbmNlQXBpLmpzXG52YXIgcmVxdWlyZV9JbmZlcmVuY2VBcGkgPSAvKiBAX19QVVJFX18gKi8gX19jb21tb25KUyh7IFwiLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L2FwaXMvSW5mZXJlbmNlQXBpLmpzXCI6ICgoZXhwb3J0cykgPT4ge1xuXHQvKipcblx0KiBDb21tZXJjZVxuXHQqIE5vIGRlc2NyaXB0aW9uIHByb3ZpZGVkIChnZW5lcmF0ZWQgYnkgT3BlbmFwaSBHZW5lcmF0b3IgaHR0cHM6Ly9naXRodWIuY29tL29wZW5hcGl0b29scy9vcGVuYXBpLWdlbmVyYXRvcilcblx0KlxuXHQqIFRoZSB2ZXJzaW9uIG9mIHRoZSBPcGVuQVBJIGRvY3VtZW50OiAxLjEuMFxuXHQqXG5cdCpcblx0KiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IE9wZW5BUEkgR2VuZXJhdG9yIChodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2gpLlxuXHQqIGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaFxuXHQqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cblx0Ki9cblx0dmFyIF9fYXdhaXRlciQyID0gZXhwb3J0cyAmJiBleHBvcnRzLl9fYXdhaXRlciB8fCBmdW5jdGlvbih0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcblx0XHRmdW5jdGlvbiBhZG9wdCh2YWx1ZSkge1xuXHRcdFx0cmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24ocmVzb2x2ZSkge1xuXHRcdFx0XHRyZXNvbHZlKHZhbHVlKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHRyZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuXHRcdFx0ZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7XG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0c3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpO1xuXHRcdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdFx0cmVqZWN0KGUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkge1xuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTtcblx0XHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRcdHJlamVjdChlKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0ZnVuY3Rpb24gc3RlcChyZXN1bHQpIHtcblx0XHRcdFx0cmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7XG5cdFx0XHR9XG5cdFx0XHRzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG5cdFx0fSk7XG5cdH07XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcblx0ZXhwb3J0cy5JbmZlcmVuY2VBcGkgPSB2b2lkIDA7XG5cdGNvbnN0IHJ1bnRpbWUkMiA9IHJlcXVpcmVfcnVudGltZSgpO1xuXHRjb25zdCBpbmRleF8xJDIgPSByZXF1aXJlX21vZGVscygpO1xuXHQvKipcblx0KlxuXHQqL1xuXHR2YXIgSW5mZXJlbmNlQXBpID0gY2xhc3MgZXh0ZW5kcyBydW50aW1lJDIuQmFzZUFQSSB7XG5cdFx0LyoqXG5cdFx0KiBSZXNwb25zZSBmb3IgYSB1c2VyIGludGVyYWN0aW9uXG5cdFx0Ki9cblx0XHR2MU5leHRSZXNwb25zZXNQb3N0UmF3KHJlcXVlc3RQYXJhbWV0ZXJzLCBpbml0T3ZlcnJpZGVzKSB7XG5cdFx0XHRyZXR1cm4gX19hd2FpdGVyJDIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG5cdFx0XHRcdGNvbnN0IHF1ZXJ5UGFyYW1ldGVycyA9IHt9O1xuXHRcdFx0XHRjb25zdCBoZWFkZXJQYXJhbWV0ZXJzID0ge307XG5cdFx0XHRcdGhlYWRlclBhcmFtZXRlcnNbXCJDb250ZW50LVR5cGVcIl0gPSBcImFwcGxpY2F0aW9uL2pzb25cIjtcblx0XHRcdFx0aWYgKHRoaXMuY29uZmlndXJhdGlvbiAmJiB0aGlzLmNvbmZpZ3VyYXRpb24uYWNjZXNzVG9rZW4pIHtcblx0XHRcdFx0XHRjb25zdCB0b2tlbiA9IHRoaXMuY29uZmlndXJhdGlvbi5hY2Nlc3NUb2tlbjtcblx0XHRcdFx0XHRjb25zdCB0b2tlblN0cmluZyA9IHlpZWxkIHRva2VuKFwiYmVhcmVyXCIsIFtdKTtcblx0XHRcdFx0XHRpZiAodG9rZW5TdHJpbmcpIGhlYWRlclBhcmFtZXRlcnNbXCJBdXRob3JpemF0aW9uXCJdID0gYEJlYXJlciAke3Rva2VuU3RyaW5nfWA7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3QgcmVzcG9uc2UgPSB5aWVsZCB0aGlzLnJlcXVlc3Qoe1xuXHRcdFx0XHRcdHBhdGg6IGAvdjEvbmV4dF9yZXNwb25zZXNgLFxuXHRcdFx0XHRcdG1ldGhvZDogXCJQT1NUXCIsXG5cdFx0XHRcdFx0aGVhZGVyczogaGVhZGVyUGFyYW1ldGVycyxcblx0XHRcdFx0XHRxdWVyeTogcXVlcnlQYXJhbWV0ZXJzLFxuXHRcdFx0XHRcdGJvZHk6ICgwLCBpbmRleF8xJDIuTmV4dE1lc3NhZ2VSZXF1ZXN0VG9KU09OKShyZXF1ZXN0UGFyYW1ldGVyc1tcIk5leHRNZXNzYWdlUmVxdWVzdFwiXSlcblx0XHRcdFx0fSwgaW5pdE92ZXJyaWRlcyk7XG5cdFx0XHRcdHJldHVybiBuZXcgcnVudGltZSQyLkpTT05BcGlSZXNwb25zZShyZXNwb25zZSwgKGpzb25WYWx1ZSkgPT4ganNvblZhbHVlLm1hcChpbmRleF8xJDIuUmVzcG9uc2VGcm9tSlNPTikpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdC8qKlxuXHRcdCogUmVzcG9uc2UgZm9yIGEgdXNlciBpbnRlcmFjdGlvblxuXHRcdCovXG5cdFx0djFOZXh0UmVzcG9uc2VzUG9zdCgpIHtcblx0XHRcdHJldHVybiBfX2F3YWl0ZXIkMih0aGlzLCBhcmd1bWVudHMsIHZvaWQgMCwgZnVuY3Rpb24qIChyZXF1ZXN0UGFyYW1ldGVycyA9IHt9LCBpbml0T3ZlcnJpZGVzKSB7XG5cdFx0XHRcdHJldHVybiB5aWVsZCAoeWllbGQgdGhpcy52MU5leHRSZXNwb25zZXNQb3N0UmF3KHJlcXVlc3RQYXJhbWV0ZXJzLCBpbml0T3ZlcnJpZGVzKSkudmFsdWUoKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHQvKipcblx0XHQqIFN1Z2dlc3Rpb25zXG5cdFx0Ki9cblx0XHR2MU5leHRTdWdnZXN0aW9uc1Bvc3RSYXcocmVxdWVzdFBhcmFtZXRlcnMsIGluaXRPdmVycmlkZXMpIHtcblx0XHRcdHJldHVybiBfX2F3YWl0ZXIkMih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcblx0XHRcdFx0Y29uc3QgcXVlcnlQYXJhbWV0ZXJzID0ge307XG5cdFx0XHRcdGNvbnN0IGhlYWRlclBhcmFtZXRlcnMgPSB7fTtcblx0XHRcdFx0aGVhZGVyUGFyYW1ldGVyc1tcIkNvbnRlbnQtVHlwZVwiXSA9IFwiYXBwbGljYXRpb24vanNvblwiO1xuXHRcdFx0XHRpZiAodGhpcy5jb25maWd1cmF0aW9uICYmIHRoaXMuY29uZmlndXJhdGlvbi5hY2Nlc3NUb2tlbikge1xuXHRcdFx0XHRcdGNvbnN0IHRva2VuID0gdGhpcy5jb25maWd1cmF0aW9uLmFjY2Vzc1Rva2VuO1xuXHRcdFx0XHRcdGNvbnN0IHRva2VuU3RyaW5nID0geWllbGQgdG9rZW4oXCJiZWFyZXJcIiwgW10pO1xuXHRcdFx0XHRcdGlmICh0b2tlblN0cmluZykgaGVhZGVyUGFyYW1ldGVyc1tcIkF1dGhvcml6YXRpb25cIl0gPSBgQmVhcmVyICR7dG9rZW5TdHJpbmd9YDtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCByZXNwb25zZSA9IHlpZWxkIHRoaXMucmVxdWVzdCh7XG5cdFx0XHRcdFx0cGF0aDogYC92MS9uZXh0X3N1Z2dlc3Rpb25zYCxcblx0XHRcdFx0XHRtZXRob2Q6IFwiUE9TVFwiLFxuXHRcdFx0XHRcdGhlYWRlcnM6IGhlYWRlclBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0cXVlcnk6IHF1ZXJ5UGFyYW1ldGVycyxcblx0XHRcdFx0XHRib2R5OiAoMCwgaW5kZXhfMSQyLk5leHRNZXNzYWdlUmVxdWVzdFRvSlNPTikocmVxdWVzdFBhcmFtZXRlcnNbXCJOZXh0TWVzc2FnZVJlcXVlc3RcIl0pXG5cdFx0XHRcdH0sIGluaXRPdmVycmlkZXMpO1xuXHRcdFx0XHRyZXR1cm4gbmV3IHJ1bnRpbWUkMi5KU09OQXBpUmVzcG9uc2UocmVzcG9uc2UsIChqc29uVmFsdWUpID0+IGpzb25WYWx1ZS5tYXAoaW5kZXhfMSQyLlN1Z2dlc3Rpb25Gcm9tSlNPTikpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdC8qKlxuXHRcdCogU3VnZ2VzdGlvbnNcblx0XHQqL1xuXHRcdHYxTmV4dFN1Z2dlc3Rpb25zUG9zdCgpIHtcblx0XHRcdHJldHVybiBfX2F3YWl0ZXIkMih0aGlzLCBhcmd1bWVudHMsIHZvaWQgMCwgZnVuY3Rpb24qIChyZXF1ZXN0UGFyYW1ldGVycyA9IHt9LCBpbml0T3ZlcnJpZGVzKSB7XG5cdFx0XHRcdHJldHVybiB5aWVsZCAoeWllbGQgdGhpcy52MU5leHRTdWdnZXN0aW9uc1Bvc3RSYXcocmVxdWVzdFBhcmFtZXRlcnMsIGluaXRPdmVycmlkZXMpKS52YWx1ZSgpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdC8qKlxuXHRcdCogQ2hlY2sgd2hldGhlciB0aGUgZXZlbnQgaXMgc3VwcG9ydGVkXG5cdFx0Ki9cblx0XHR2MVN1cHBvcnRlZEV2ZW50UG9zdFJhdyhyZXF1ZXN0UGFyYW1ldGVycywgaW5pdE92ZXJyaWRlcykge1xuXHRcdFx0cmV0dXJuIF9fYXdhaXRlciQyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuXHRcdFx0XHRjb25zdCBxdWVyeVBhcmFtZXRlcnMgPSB7fTtcblx0XHRcdFx0Y29uc3QgaGVhZGVyUGFyYW1ldGVycyA9IHt9O1xuXHRcdFx0XHRoZWFkZXJQYXJhbWV0ZXJzW1wiQ29udGVudC1UeXBlXCJdID0gXCJhcHBsaWNhdGlvbi9qc29uXCI7XG5cdFx0XHRcdGlmICh0aGlzLmNvbmZpZ3VyYXRpb24gJiYgdGhpcy5jb25maWd1cmF0aW9uLmFjY2Vzc1Rva2VuKSB7XG5cdFx0XHRcdFx0Y29uc3QgdG9rZW4gPSB0aGlzLmNvbmZpZ3VyYXRpb24uYWNjZXNzVG9rZW47XG5cdFx0XHRcdFx0Y29uc3QgdG9rZW5TdHJpbmcgPSB5aWVsZCB0b2tlbihcImJlYXJlclwiLCBbXSk7XG5cdFx0XHRcdFx0aWYgKHRva2VuU3RyaW5nKSBoZWFkZXJQYXJhbWV0ZXJzW1wiQXV0aG9yaXphdGlvblwiXSA9IGBCZWFyZXIgJHt0b2tlblN0cmluZ31gO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IHJlc3BvbnNlID0geWllbGQgdGhpcy5yZXF1ZXN0KHtcblx0XHRcdFx0XHRwYXRoOiBgL3YxL3N1cHBvcnRlZF9ldmVudGAsXG5cdFx0XHRcdFx0bWV0aG9kOiBcIlBPU1RcIixcblx0XHRcdFx0XHRoZWFkZXJzOiBoZWFkZXJQYXJhbWV0ZXJzLFxuXHRcdFx0XHRcdHF1ZXJ5OiBxdWVyeVBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0Ym9keTogKDAsIGluZGV4XzEkMi5TdXBwb3J0ZWRFdmVudFJlcXVlc3RUb0pTT04pKHJlcXVlc3RQYXJhbWV0ZXJzW1wiU3VwcG9ydGVkRXZlbnRSZXF1ZXN0XCJdKVxuXHRcdFx0XHR9LCBpbml0T3ZlcnJpZGVzKTtcblx0XHRcdFx0cmV0dXJuIG5ldyBydW50aW1lJDIuSlNPTkFwaVJlc3BvbnNlKHJlc3BvbnNlLCAoanNvblZhbHVlKSA9PiAoMCwgaW5kZXhfMSQyLlN1cHBvcnRlZEV2ZW50UmVzcG9uc2VGcm9tSlNPTikoanNvblZhbHVlKSk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0LyoqXG5cdFx0KiBDaGVjayB3aGV0aGVyIHRoZSBldmVudCBpcyBzdXBwb3J0ZWRcblx0XHQqL1xuXHRcdHYxU3VwcG9ydGVkRXZlbnRQb3N0KCkge1xuXHRcdFx0cmV0dXJuIF9fYXdhaXRlciQyKHRoaXMsIGFyZ3VtZW50cywgdm9pZCAwLCBmdW5jdGlvbiogKHJlcXVlc3RQYXJhbWV0ZXJzID0ge30sIGluaXRPdmVycmlkZXMpIHtcblx0XHRcdFx0cmV0dXJuIHlpZWxkICh5aWVsZCB0aGlzLnYxU3VwcG9ydGVkRXZlbnRQb3N0UmF3KHJlcXVlc3RQYXJhbWV0ZXJzLCBpbml0T3ZlcnJpZGVzKSkudmFsdWUoKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHQvKipcblx0XHQqIFJlc29sdmUgYSBVUkwgdG8gYSBwYWdlIHR5cGUgYW5kIGdldCBjb25maWd1cmF0aW9uXG5cdFx0Ki9cblx0XHR2MVVybFJlc29sdmluZ1Bvc3RSYXcocmVxdWVzdFBhcmFtZXRlcnMsIGluaXRPdmVycmlkZXMpIHtcblx0XHRcdHJldHVybiBfX2F3YWl0ZXIkMih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcblx0XHRcdFx0Y29uc3QgcXVlcnlQYXJhbWV0ZXJzID0ge307XG5cdFx0XHRcdGNvbnN0IGhlYWRlclBhcmFtZXRlcnMgPSB7fTtcblx0XHRcdFx0aGVhZGVyUGFyYW1ldGVyc1tcIkNvbnRlbnQtVHlwZVwiXSA9IFwiYXBwbGljYXRpb24vanNvblwiO1xuXHRcdFx0XHRpZiAodGhpcy5jb25maWd1cmF0aW9uICYmIHRoaXMuY29uZmlndXJhdGlvbi5hY2Nlc3NUb2tlbikge1xuXHRcdFx0XHRcdGNvbnN0IHRva2VuID0gdGhpcy5jb25maWd1cmF0aW9uLmFjY2Vzc1Rva2VuO1xuXHRcdFx0XHRcdGNvbnN0IHRva2VuU3RyaW5nID0geWllbGQgdG9rZW4oXCJiZWFyZXJcIiwgW10pO1xuXHRcdFx0XHRcdGlmICh0b2tlblN0cmluZykgaGVhZGVyUGFyYW1ldGVyc1tcIkF1dGhvcml6YXRpb25cIl0gPSBgQmVhcmVyICR7dG9rZW5TdHJpbmd9YDtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCByZXNwb25zZSA9IHlpZWxkIHRoaXMucmVxdWVzdCh7XG5cdFx0XHRcdFx0cGF0aDogYC92MS91cmxfcmVzb2x2aW5nYCxcblx0XHRcdFx0XHRtZXRob2Q6IFwiUE9TVFwiLFxuXHRcdFx0XHRcdGhlYWRlcnM6IGhlYWRlclBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0cXVlcnk6IHF1ZXJ5UGFyYW1ldGVycyxcblx0XHRcdFx0XHRib2R5OiAoMCwgaW5kZXhfMSQyLlVybFJlc29sdmluZ1JlcXVlc3RUb0pTT04pKHJlcXVlc3RQYXJhbWV0ZXJzW1wiVXJsUmVzb2x2aW5nUmVxdWVzdFwiXSlcblx0XHRcdFx0fSwgaW5pdE92ZXJyaWRlcyk7XG5cdFx0XHRcdHJldHVybiBuZXcgcnVudGltZSQyLkpTT05BcGlSZXNwb25zZShyZXNwb25zZSwgKGpzb25WYWx1ZSkgPT4gKDAsIGluZGV4XzEkMi5VcmxSZXNvbHZpbmdSZXNwb25zZUZyb21KU09OKShqc29uVmFsdWUpKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHQvKipcblx0XHQqIFJlc29sdmUgYSBVUkwgdG8gYSBwYWdlIHR5cGUgYW5kIGdldCBjb25maWd1cmF0aW9uXG5cdFx0Ki9cblx0XHR2MVVybFJlc29sdmluZ1Bvc3QoKSB7XG5cdFx0XHRyZXR1cm4gX19hd2FpdGVyJDIodGhpcywgYXJndW1lbnRzLCB2b2lkIDAsIGZ1bmN0aW9uKiAocmVxdWVzdFBhcmFtZXRlcnMgPSB7fSwgaW5pdE92ZXJyaWRlcykge1xuXHRcdFx0XHRyZXR1cm4geWllbGQgKHlpZWxkIHRoaXMudjFVcmxSZXNvbHZpbmdQb3N0UmF3KHJlcXVlc3RQYXJhbWV0ZXJzLCBpbml0T3ZlcnJpZGVzKSkudmFsdWUoKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0fTtcblx0ZXhwb3J0cy5JbmZlcmVuY2VBcGkgPSBJbmZlcmVuY2VBcGk7XG59KSB9KTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L2FwaXMvUHJvZHVjdHNBcGkuanNcbnZhciByZXF1aXJlX1Byb2R1Y3RzQXBpID0gLyogQF9fUFVSRV9fICovIF9fY29tbW9uSlMoeyBcIi4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9hcGlzL1Byb2R1Y3RzQXBpLmpzXCI6ICgoZXhwb3J0cykgPT4ge1xuXHQvKipcblx0KiBDb21tZXJjZVxuXHQqIE5vIGRlc2NyaXB0aW9uIHByb3ZpZGVkIChnZW5lcmF0ZWQgYnkgT3BlbmFwaSBHZW5lcmF0b3IgaHR0cHM6Ly9naXRodWIuY29tL29wZW5hcGl0b29scy9vcGVuYXBpLWdlbmVyYXRvcilcblx0KlxuXHQqIFRoZSB2ZXJzaW9uIG9mIHRoZSBPcGVuQVBJIGRvY3VtZW50OiAxLjEuMFxuXHQqXG5cdCpcblx0KiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IE9wZW5BUEkgR2VuZXJhdG9yIChodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2gpLlxuXHQqIGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaFxuXHQqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cblx0Ki9cblx0dmFyIF9fYXdhaXRlciQxID0gZXhwb3J0cyAmJiBleHBvcnRzLl9fYXdhaXRlciB8fCBmdW5jdGlvbih0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcblx0XHRmdW5jdGlvbiBhZG9wdCh2YWx1ZSkge1xuXHRcdFx0cmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24ocmVzb2x2ZSkge1xuXHRcdFx0XHRyZXNvbHZlKHZhbHVlKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHRyZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuXHRcdFx0ZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7XG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0c3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpO1xuXHRcdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdFx0cmVqZWN0KGUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkge1xuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTtcblx0XHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRcdHJlamVjdChlKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0ZnVuY3Rpb24gc3RlcChyZXN1bHQpIHtcblx0XHRcdFx0cmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7XG5cdFx0XHR9XG5cdFx0XHRzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG5cdFx0fSk7XG5cdH07XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcblx0ZXhwb3J0cy5Qcm9kdWN0c0FwaSA9IHZvaWQgMDtcblx0Y29uc3QgcnVudGltZSQxID0gcmVxdWlyZV9ydW50aW1lKCk7XG5cdGNvbnN0IGluZGV4XzEkMSA9IHJlcXVpcmVfbW9kZWxzKCk7XG5cdC8qKlxuXHQqXG5cdCovXG5cdHZhciBQcm9kdWN0c0FwaSA9IGNsYXNzIGV4dGVuZHMgcnVudGltZSQxLkJhc2VBUEkge1xuXHRcdC8qKlxuXHRcdCogUmV0cmlldmUgcHJvZHVjdHNcblx0XHQqL1xuXHRcdHYxUHJvZHVjdHNSZXRyaWV2ZVBvc3RSYXcocmVxdWVzdFBhcmFtZXRlcnMsIGluaXRPdmVycmlkZXMpIHtcblx0XHRcdHJldHVybiBfX2F3YWl0ZXIkMSh0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcblx0XHRcdFx0Y29uc3QgcXVlcnlQYXJhbWV0ZXJzID0ge307XG5cdFx0XHRcdGNvbnN0IGhlYWRlclBhcmFtZXRlcnMgPSB7fTtcblx0XHRcdFx0aGVhZGVyUGFyYW1ldGVyc1tcIkNvbnRlbnQtVHlwZVwiXSA9IFwiYXBwbGljYXRpb24vanNvblwiO1xuXHRcdFx0XHRpZiAodGhpcy5jb25maWd1cmF0aW9uICYmIHRoaXMuY29uZmlndXJhdGlvbi5hY2Nlc3NUb2tlbikge1xuXHRcdFx0XHRcdGNvbnN0IHRva2VuID0gdGhpcy5jb25maWd1cmF0aW9uLmFjY2Vzc1Rva2VuO1xuXHRcdFx0XHRcdGNvbnN0IHRva2VuU3RyaW5nID0geWllbGQgdG9rZW4oXCJiZWFyZXJcIiwgW10pO1xuXHRcdFx0XHRcdGlmICh0b2tlblN0cmluZykgaGVhZGVyUGFyYW1ldGVyc1tcIkF1dGhvcml6YXRpb25cIl0gPSBgQmVhcmVyICR7dG9rZW5TdHJpbmd9YDtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCByZXNwb25zZSA9IHlpZWxkIHRoaXMucmVxdWVzdCh7XG5cdFx0XHRcdFx0cGF0aDogYC92MS9wcm9kdWN0cy9yZXRyaWV2ZWAsXG5cdFx0XHRcdFx0bWV0aG9kOiBcIlBPU1RcIixcblx0XHRcdFx0XHRoZWFkZXJzOiBoZWFkZXJQYXJhbWV0ZXJzLFxuXHRcdFx0XHRcdHF1ZXJ5OiBxdWVyeVBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0Ym9keTogKDAsIGluZGV4XzEkMS5Qcm9kdWN0UmV0cmlldmFsUmVxdWVzdFRvSlNPTikocmVxdWVzdFBhcmFtZXRlcnNbXCJQcm9kdWN0UmV0cmlldmFsUmVxdWVzdFwiXSlcblx0XHRcdFx0fSwgaW5pdE92ZXJyaWRlcyk7XG5cdFx0XHRcdHJldHVybiBuZXcgcnVudGltZSQxLkpTT05BcGlSZXNwb25zZShyZXNwb25zZSwgKGpzb25WYWx1ZSkgPT4gKDAsIGluZGV4XzEkMS5Qcm9kdWN0UmV0cmlldmFsUmVzcG9uc2VGcm9tSlNPTikoanNvblZhbHVlKSk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0LyoqXG5cdFx0KiBSZXRyaWV2ZSBwcm9kdWN0c1xuXHRcdCovXG5cdFx0djFQcm9kdWN0c1JldHJpZXZlUG9zdCgpIHtcblx0XHRcdHJldHVybiBfX2F3YWl0ZXIkMSh0aGlzLCBhcmd1bWVudHMsIHZvaWQgMCwgZnVuY3Rpb24qIChyZXF1ZXN0UGFyYW1ldGVycyA9IHt9LCBpbml0T3ZlcnJpZGVzKSB7XG5cdFx0XHRcdHJldHVybiB5aWVsZCAoeWllbGQgdGhpcy52MVByb2R1Y3RzUmV0cmlldmVQb3N0UmF3KHJlcXVlc3RQYXJhbWV0ZXJzLCBpbml0T3ZlcnJpZGVzKSkudmFsdWUoKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0fTtcblx0ZXhwb3J0cy5Qcm9kdWN0c0FwaSA9IFByb2R1Y3RzQXBpO1xufSkgfSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIC4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9hcGlzL1NlYXJjaEFwaS5qc1xudmFyIHJlcXVpcmVfU2VhcmNoQXBpID0gLyogQF9fUFVSRV9fICovIF9fY29tbW9uSlMoeyBcIi4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9hcGlzL1NlYXJjaEFwaS5qc1wiOiAoKGV4cG9ydHMpID0+IHtcblx0LyoqXG5cdCogQ29tbWVyY2Vcblx0KiBObyBkZXNjcmlwdGlvbiBwcm92aWRlZCAoZ2VuZXJhdGVkIGJ5IE9wZW5hcGkgR2VuZXJhdG9yIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuYXBpdG9vbHMvb3BlbmFwaS1nZW5lcmF0b3IpXG5cdCpcblx0KiBUaGUgdmVyc2lvbiBvZiB0aGUgT3BlbkFQSSBkb2N1bWVudDogMS4xLjBcblx0KlxuXHQqXG5cdCogTk9URTogVGhpcyBjbGFzcyBpcyBhdXRvIGdlbmVyYXRlZCBieSBPcGVuQVBJIEdlbmVyYXRvciAoaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoKS5cblx0KiBodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2hcblx0KiBEbyBub3QgZWRpdCB0aGUgY2xhc3MgbWFudWFsbHkuXG5cdCovXG5cdHZhciBfX2F3YWl0ZXIgPSBleHBvcnRzICYmIGV4cG9ydHMuX19hd2FpdGVyIHx8IGZ1bmN0aW9uKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuXHRcdGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7XG5cdFx0XHRyZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbihyZXNvbHZlKSB7XG5cdFx0XHRcdHJlc29sdmUodmFsdWUpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG5cdFx0XHRmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHtcblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7XG5cdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0XHRyZWplY3QoZSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7XG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0c3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpO1xuXHRcdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdFx0cmVqZWN0KGUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRmdW5jdGlvbiBzdGVwKHJlc3VsdCkge1xuXHRcdFx0XHRyZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTtcblx0XHRcdH1cblx0XHRcdHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcblx0XHR9KTtcblx0fTtcblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuXHRleHBvcnRzLlNlYXJjaEFwaSA9IHZvaWQgMDtcblx0Y29uc3QgcnVudGltZSA9IHJlcXVpcmVfcnVudGltZSgpO1xuXHRjb25zdCBpbmRleF8xID0gcmVxdWlyZV9tb2RlbHMoKTtcblx0LyoqXG5cdCpcblx0Ki9cblx0dmFyIFNlYXJjaEFwaSA9IGNsYXNzIGV4dGVuZHMgcnVudGltZS5CYXNlQVBJIHtcblx0XHQvKipcblx0XHQqL1xuXHRcdHYxU2VhcmNoUXVlcnlHZXRSYXcocmVxdWVzdFBhcmFtZXRlcnMsIGluaXRPdmVycmlkZXMpIHtcblx0XHRcdHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG5cdFx0XHRcdGlmIChyZXF1ZXN0UGFyYW1ldGVyc1tcInF1ZXJ5XCJdID09IG51bGwpIHRocm93IG5ldyBydW50aW1lLlJlcXVpcmVkRXJyb3IoXCJxdWVyeVwiLCBcIlJlcXVpcmVkIHBhcmFtZXRlciBcXFwicXVlcnlcXFwiIHdhcyBudWxsIG9yIHVuZGVmaW5lZCB3aGVuIGNhbGxpbmcgdjFTZWFyY2hRdWVyeUdldCgpLlwiKTtcblx0XHRcdFx0Y29uc3QgcXVlcnlQYXJhbWV0ZXJzID0ge307XG5cdFx0XHRcdGlmIChyZXF1ZXN0UGFyYW1ldGVyc1tcInF1ZXJ5XCJdICE9IG51bGwpIHF1ZXJ5UGFyYW1ldGVyc1tcInF1ZXJ5XCJdID0gcmVxdWVzdFBhcmFtZXRlcnNbXCJxdWVyeVwiXTtcblx0XHRcdFx0aWYgKHJlcXVlc3RQYXJhbWV0ZXJzW1wibGltaXRcIl0gIT0gbnVsbCkgcXVlcnlQYXJhbWV0ZXJzW1wibGltaXRcIl0gPSByZXF1ZXN0UGFyYW1ldGVyc1tcImxpbWl0XCJdO1xuXHRcdFx0XHRpZiAocmVxdWVzdFBhcmFtZXRlcnNbXCJ1c2VyX2lkXCJdICE9IG51bGwpIHF1ZXJ5UGFyYW1ldGVyc1tcInVzZXJfaWRcIl0gPSByZXF1ZXN0UGFyYW1ldGVyc1tcInVzZXJfaWRcIl07XG5cdFx0XHRcdGlmIChyZXF1ZXN0UGFyYW1ldGVyc1tcIm9yZ19pZFwiXSAhPSBudWxsKSBxdWVyeVBhcmFtZXRlcnNbXCJvcmdfaWRcIl0gPSByZXF1ZXN0UGFyYW1ldGVyc1tcIm9yZ19pZFwiXTtcblx0XHRcdFx0Y29uc3QgaGVhZGVyUGFyYW1ldGVycyA9IHt9O1xuXHRcdFx0XHRpZiAodGhpcy5jb25maWd1cmF0aW9uICYmIHRoaXMuY29uZmlndXJhdGlvbi5hY2Nlc3NUb2tlbikge1xuXHRcdFx0XHRcdGNvbnN0IHRva2VuID0gdGhpcy5jb25maWd1cmF0aW9uLmFjY2Vzc1Rva2VuO1xuXHRcdFx0XHRcdGNvbnN0IHRva2VuU3RyaW5nID0geWllbGQgdG9rZW4oXCJiZWFyZXJcIiwgW10pO1xuXHRcdFx0XHRcdGlmICh0b2tlblN0cmluZykgaGVhZGVyUGFyYW1ldGVyc1tcIkF1dGhvcml6YXRpb25cIl0gPSBgQmVhcmVyICR7dG9rZW5TdHJpbmd9YDtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCByZXNwb25zZSA9IHlpZWxkIHRoaXMucmVxdWVzdCh7XG5cdFx0XHRcdFx0cGF0aDogYC92MS9zZWFyY2gvcXVlcnlgLFxuXHRcdFx0XHRcdG1ldGhvZDogXCJHRVRcIixcblx0XHRcdFx0XHRoZWFkZXJzOiBoZWFkZXJQYXJhbWV0ZXJzLFxuXHRcdFx0XHRcdHF1ZXJ5OiBxdWVyeVBhcmFtZXRlcnNcblx0XHRcdFx0fSwgaW5pdE92ZXJyaWRlcyk7XG5cdFx0XHRcdHJldHVybiBuZXcgcnVudGltZS5KU09OQXBpUmVzcG9uc2UocmVzcG9uc2UsIChqc29uVmFsdWUpID0+ICgwLCBpbmRleF8xLlByb2R1Y3RTZWFyY2hSZXNwb25zZUZyb21KU09OKShqc29uVmFsdWUpKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHQvKipcblx0XHQqL1xuXHRcdHYxU2VhcmNoUXVlcnlHZXQocmVxdWVzdFBhcmFtZXRlcnMsIGluaXRPdmVycmlkZXMpIHtcblx0XHRcdHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG5cdFx0XHRcdHJldHVybiB5aWVsZCAoeWllbGQgdGhpcy52MVNlYXJjaFF1ZXJ5R2V0UmF3KHJlcXVlc3RQYXJhbWV0ZXJzLCBpbml0T3ZlcnJpZGVzKSkudmFsdWUoKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHQvKipcblx0XHQqL1xuXHRcdHYxU2VhcmNoU3VnZ2VzdGlvbnNHZXRSYXcocmVxdWVzdFBhcmFtZXRlcnMsIGluaXRPdmVycmlkZXMpIHtcblx0XHRcdHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG5cdFx0XHRcdGNvbnN0IHF1ZXJ5UGFyYW1ldGVycyA9IHt9O1xuXHRcdFx0XHRpZiAocmVxdWVzdFBhcmFtZXRlcnNbXCJvcmdfaWRcIl0gIT0gbnVsbCkgcXVlcnlQYXJhbWV0ZXJzW1wib3JnX2lkXCJdID0gcmVxdWVzdFBhcmFtZXRlcnNbXCJvcmdfaWRcIl07XG5cdFx0XHRcdGNvbnN0IGhlYWRlclBhcmFtZXRlcnMgPSB7fTtcblx0XHRcdFx0aWYgKHRoaXMuY29uZmlndXJhdGlvbiAmJiB0aGlzLmNvbmZpZ3VyYXRpb24uYWNjZXNzVG9rZW4pIHtcblx0XHRcdFx0XHRjb25zdCB0b2tlbiA9IHRoaXMuY29uZmlndXJhdGlvbi5hY2Nlc3NUb2tlbjtcblx0XHRcdFx0XHRjb25zdCB0b2tlblN0cmluZyA9IHlpZWxkIHRva2VuKFwiYmVhcmVyXCIsIFtdKTtcblx0XHRcdFx0XHRpZiAodG9rZW5TdHJpbmcpIGhlYWRlclBhcmFtZXRlcnNbXCJBdXRob3JpemF0aW9uXCJdID0gYEJlYXJlciAke3Rva2VuU3RyaW5nfWA7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3QgcmVzcG9uc2UgPSB5aWVsZCB0aGlzLnJlcXVlc3Qoe1xuXHRcdFx0XHRcdHBhdGg6IGAvdjEvc2VhcmNoL3N1Z2dlc3Rpb25zYCxcblx0XHRcdFx0XHRtZXRob2Q6IFwiR0VUXCIsXG5cdFx0XHRcdFx0aGVhZGVyczogaGVhZGVyUGFyYW1ldGVycyxcblx0XHRcdFx0XHRxdWVyeTogcXVlcnlQYXJhbWV0ZXJzXG5cdFx0XHRcdH0sIGluaXRPdmVycmlkZXMpO1xuXHRcdFx0XHRyZXR1cm4gbmV3IHJ1bnRpbWUuSlNPTkFwaVJlc3BvbnNlKHJlc3BvbnNlLCAoanNvblZhbHVlKSA9PiAoMCwgaW5kZXhfMS5TZWFyY2hTdWdnZXN0aW9uc1Jlc3BvbnNlRnJvbUpTT04pKGpzb25WYWx1ZSkpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdC8qKlxuXHRcdCovXG5cdFx0djFTZWFyY2hTdWdnZXN0aW9uc0dldCgpIHtcblx0XHRcdHJldHVybiBfX2F3YWl0ZXIodGhpcywgYXJndW1lbnRzLCB2b2lkIDAsIGZ1bmN0aW9uKiAocmVxdWVzdFBhcmFtZXRlcnMgPSB7fSwgaW5pdE92ZXJyaWRlcykge1xuXHRcdFx0XHRyZXR1cm4geWllbGQgKHlpZWxkIHRoaXMudjFTZWFyY2hTdWdnZXN0aW9uc0dldFJhdyhyZXF1ZXN0UGFyYW1ldGVycywgaW5pdE92ZXJyaWRlcykpLnZhbHVlKCk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdH07XG5cdGV4cG9ydHMuU2VhcmNoQXBpID0gU2VhcmNoQXBpO1xufSkgfSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIC4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9hcGlzL2luZGV4LmpzXG52YXIgcmVxdWlyZV9hcGlzID0gLyogQF9fUFVSRV9fICovIF9fY29tbW9uSlMoeyBcIi4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9hcGlzL2luZGV4LmpzXCI6ICgoZXhwb3J0cykgPT4ge1xuXHR2YXIgX19jcmVhdGVCaW5kaW5nJDEgPSBleHBvcnRzICYmIGV4cG9ydHMuX19jcmVhdGVCaW5kaW5nIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG5cdFx0aWYgKGsyID09PSB2b2lkIDApIGsyID0gaztcblx0XHR2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobSwgayk7XG5cdFx0aWYgKCFkZXNjIHx8IChcImdldFwiIGluIGRlc2MgPyAhbS5fX2VzTW9kdWxlIDogZGVzYy53cml0YWJsZSB8fCBkZXNjLmNvbmZpZ3VyYWJsZSkpIGRlc2MgPSB7XG5cdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuXHRcdFx0Z2V0OiBmdW5jdGlvbigpIHtcblx0XHRcdFx0cmV0dXJuIG1ba107XG5cdFx0XHR9XG5cdFx0fTtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIGRlc2MpO1xuXHR9KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuXHRcdGlmIChrMiA9PT0gdm9pZCAwKSBrMiA9IGs7XG5cdFx0b1trMl0gPSBtW2tdO1xuXHR9KSk7XG5cdHZhciBfX2V4cG9ydFN0YXIkMSA9IGV4cG9ydHMgJiYgZXhwb3J0cy5fX2V4cG9ydFN0YXIgfHwgZnVuY3Rpb24obSwgZXhwb3J0cyQxKSB7XG5cdFx0Zm9yICh2YXIgcCBpbiBtKSBpZiAocCAhPT0gXCJkZWZhdWx0XCIgJiYgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChleHBvcnRzJDEsIHApKSBfX2NyZWF0ZUJpbmRpbmckMShleHBvcnRzJDEsIG0sIHApO1xuXHR9O1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5cdF9fZXhwb3J0U3RhciQxKHJlcXVpcmVfQ3VzdG9tZXJTZXJ2aWNlQXBpKCksIGV4cG9ydHMpO1xuXHRfX2V4cG9ydFN0YXIkMShyZXF1aXJlX0RlZmF1bHRBcGkoKSwgZXhwb3J0cyk7XG5cdF9fZXhwb3J0U3RhciQxKHJlcXVpcmVfSW5mZXJlbmNlQXBpKCksIGV4cG9ydHMpO1xuXHRfX2V4cG9ydFN0YXIkMShyZXF1aXJlX1Byb2R1Y3RzQXBpKCksIGV4cG9ydHMpO1xuXHRfX2V4cG9ydFN0YXIkMShyZXF1aXJlX1NlYXJjaEFwaSgpLCBleHBvcnRzKTtcbn0pIH0pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiAuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvaW5kZXguanNcbnZhciByZXF1aXJlX2Rpc3QgPSAvKiBAX19QVVJFX18gKi8gX19jb21tb25KUyh7IFwiLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L2luZGV4LmpzXCI6ICgoZXhwb3J0cykgPT4ge1xuXHR2YXIgX19jcmVhdGVCaW5kaW5nID0gZXhwb3J0cyAmJiBleHBvcnRzLl9fY3JlYXRlQmluZGluZyB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuXHRcdGlmIChrMiA9PT0gdm9pZCAwKSBrMiA9IGs7XG5cdFx0dmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG0sIGspO1xuXHRcdGlmICghZGVzYyB8fCAoXCJnZXRcIiBpbiBkZXNjID8gIW0uX19lc01vZHVsZSA6IGRlc2Mud3JpdGFibGUgfHwgZGVzYy5jb25maWd1cmFibGUpKSBkZXNjID0ge1xuXHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcblx0XHRcdGdldDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHJldHVybiBtW2tdO1xuXHRcdFx0fVxuXHRcdH07XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcblx0fSkgOiAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcblx0XHRpZiAoazIgPT09IHZvaWQgMCkgazIgPSBrO1xuXHRcdG9bazJdID0gbVtrXTtcblx0fSkpO1xuXHR2YXIgX19leHBvcnRTdGFyID0gZXhwb3J0cyAmJiBleHBvcnRzLl9fZXhwb3J0U3RhciB8fCBmdW5jdGlvbihtLCBleHBvcnRzJDEpIHtcblx0XHRmb3IgKHZhciBwIGluIG0pIGlmIChwICE9PSBcImRlZmF1bHRcIiAmJiAhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGV4cG9ydHMkMSwgcCkpIF9fY3JlYXRlQmluZGluZyhleHBvcnRzJDEsIG0sIHApO1xuXHR9O1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5cdF9fZXhwb3J0U3RhcihyZXF1aXJlX3J1bnRpbWUoKSwgZXhwb3J0cyk7XG5cdF9fZXhwb3J0U3RhcihyZXF1aXJlX2FwaXMoKSwgZXhwb3J0cyk7XG5cdF9fZXhwb3J0U3RhcihyZXF1aXJlX21vZGVscygpLCBleHBvcnRzKTtcbn0pIH0pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiBzcmMvY29tbWVyY2UtYXBpL2luZGV4LnRzXG52YXIgaW1wb3J0X2Rpc3QgPSAvKiBAX19QVVJFX18gKi8gX190b0VTTShyZXF1aXJlX2Rpc3QoKSwgMSk7XG5cbi8vI2VuZHJlZ2lvblxudmFyIEFwaUNvbnRleHRFbnZFbnVtID0gaW1wb3J0X2Rpc3QuQ29udGV4dEVudkVudW07XG52YXIgQXBpQ29udGV4dFNvdXJjZUVudW0gPSBpbXBvcnRfZGlzdC5Db250ZXh0U291cmNlRW51bTtcbnZhciBBcGlDdXN0U2VydmljZUF0dGFjaG1lbnQgPSBpbXBvcnRfZGlzdC5DdXN0U2VydmljZUF0dGFjaG1lbnQ7XG52YXIgQXBpRm9ybVJlc3BvbnNlQXR0cmlidXRlc0Zvcm1DYXRlZ29yeSA9IGltcG9ydF9kaXN0LkZvcm1SZXNwb25zZUF0dHJpYnV0ZXNGb3JtQ2F0ZWdvcnk7XG52YXIgQXBpRm9ybVR5cGUgPSBpbXBvcnRfZGlzdC5Gb3JtVHlwZTtcbnZhciBBcGlGdWxmaWxsbWVudERpc3BsYXlTdGF0dXMgPSBpbXBvcnRfZGlzdC5GdWxmaWxsbWVudERpc3BsYXlTdGF0dXM7XG52YXIgQXBpR2VuZXJhdGlvblBhcmFtcyA9IGltcG9ydF9kaXN0LkdlbmVyYXRpb25QYXJhbXM7XG52YXIgQXBpT3JnQ29uZmlnRXhwZXJpbWVudCA9IGltcG9ydF9kaXN0LlN0YXRzaWdFeHBlcmltZW50O1xudmFyIEFwaU9yZ0NvbmZpZ0ZlYXR1cmVHYXRlID0gaW1wb3J0X2Rpc3QuU3RhdHNpZ0ZlYXR1cmVHYXRlO1xudmFyIEFwaU9yZ0NvbmZpZ09yZ2FuaXphdGlvblNldHRpbmdzID0gaW1wb3J0X2Rpc3QuT3JnYW5pemF0aW9uU2V0dGluZ3M7XG52YXIgQXBpUERQQXR0cmlidXRlcyA9IGltcG9ydF9kaXN0LlBEUEF0dHJpYnV0ZXM7XG52YXIgQXBpUExQQXR0cmlidXRlcyA9IGltcG9ydF9kaXN0LlBMUEF0dHJpYnV0ZXM7XG52YXIgQXBpUGFnZVZpc2l0Q2F0ZWdvcnkgPSBpbXBvcnRfZGlzdC5QYWdlVmlzaXRDYXRlZ29yeTtcbnZhciBBcGlQcm9kdWN0UmVzcG9uc2VBdHRyaWJ1dGVzID0gaW1wb3J0X2Rpc3QuUmVzcG9uc2VQcm9kdWN0QXR0cmlidXRlcztcbnZhciBBcGlQcm9kdWN0U2VhcmNoUmVzcG9uc2UgPSBpbXBvcnRfZGlzdC5Qcm9kdWN0U2VhcmNoUmVzcG9uc2U7XG52YXIgQXBpUHJvZHVjdFNlYXJjaFJlc3BvbnNlQXR0cmlidXRlcyA9IGltcG9ydF9kaXN0LlByb2R1Y3RTZWFyY2hSZXNwb25zZUF0dHJpYnV0ZXM7XG52YXIgQXBpUXVlcnlUeXBlZEF0dHJpYnV0ZXMgPSBpbXBvcnRfZGlzdC5RdWVyeVR5cGVkQXR0cmlidXRlcztcbnZhciBBcGlSZXNwb25zZUNhdGVnb3J5ID0gaW1wb3J0X2Rpc3QuUmVzcG9uc2VDYXRlZ29yeTtcbnZhciBBcGlTZWFyY2hBdHRyaWJ1dGVzID0gaW1wb3J0X2Rpc3QuU2VhcmNoQXR0cmlidXRlcztcbnZhciBBcGlTZWFyY2hSZXNwb25zZVByb2R1Y3QgPSBpbXBvcnRfZGlzdC5TZWFyY2hSZXNwb25zZVByb2R1Y3Q7XG52YXIgQXBpU3VnZ2VzdGlvbiA9IGltcG9ydF9kaXN0LlN1Z2dlc3Rpb247XG52YXIgQXBpU3VnZ2VzdGlvbkNsaWNrZWRBdHRyaWJ1dGVzID0gaW1wb3J0X2Rpc3QuU3VnZ2VzdGlvbkNsaWNrZWRBdHRyaWJ1dGVzO1xudmFyIEFwaVN1cHBvcnRlZEV2ZW50UHJvZHVjdENhdGVnb3J5ID0gaW1wb3J0X2Rpc3QuU3VwcG9ydGVkRXZlbnRQcm9kdWN0Q2F0ZWdvcnk7XG52YXIgQXBpU3VwcG9ydGVkRXZlbnRSZXNwb25zZSA9IGltcG9ydF9kaXN0LlN1cHBvcnRlZEV2ZW50UmVzcG9uc2U7XG52YXIgQXBpVXNlckV2ZW50ID0gaW1wb3J0X2Rpc3QuVXNlckV2ZW50O1xudmFyIEFwaVVzZXJFdmVudENhdGVnb3J5ID0gaW1wb3J0X2Rpc3QuVXNlckV2ZW50Q2F0ZWdvcnk7XG5leHBvcnQgeyBBcGlDb250ZXh0RW52RW51bSwgQXBpQ29udGV4dFNvdXJjZUVudW0sIEFwaUN1c3RTZXJ2aWNlQXR0YWNobWVudCwgQXBpRm9ybVJlc3BvbnNlQXR0cmlidXRlc0Zvcm1DYXRlZ29yeSwgQXBpRm9ybVR5cGUsIEFwaUZ1bGZpbGxtZW50RGlzcGxheVN0YXR1cywgQXBpR2VuZXJhdGlvblBhcmFtcywgQXBpT3JnQ29uZmlnRXhwZXJpbWVudCwgQXBpT3JnQ29uZmlnRmVhdHVyZUdhdGUsIEFwaU9yZ0NvbmZpZ09yZ2FuaXphdGlvblNldHRpbmdzLCBBcGlQRFBBdHRyaWJ1dGVzLCBBcGlQTFBBdHRyaWJ1dGVzLCBBcGlQYWdlVmlzaXRDYXRlZ29yeSwgQXBpUHJvZHVjdFJlc3BvbnNlQXR0cmlidXRlcywgQXBpUHJvZHVjdFNlYXJjaFJlc3BvbnNlLCBBcGlQcm9kdWN0U2VhcmNoUmVzcG9uc2VBdHRyaWJ1dGVzLCBBcGlRdWVyeVR5cGVkQXR0cmlidXRlcywgQXBpUmVzcG9uc2VDYXRlZ29yeSwgQXBpU2VhcmNoQXR0cmlidXRlcywgQXBpU2VhcmNoUmVzcG9uc2VQcm9kdWN0LCBBcGlTdWdnZXN0aW9uLCBBcGlTdWdnZXN0aW9uQ2xpY2tlZEF0dHJpYnV0ZXMsIEFwaVN1cHBvcnRlZEV2ZW50UHJvZHVjdENhdGVnb3J5LCBBcGlTdXBwb3J0ZWRFdmVudFJlc3BvbnNlLCBBcGlVc2VyRXZlbnQsIEFwaVVzZXJFdmVudENhdGVnb3J5LCBDYXRlZ29yeUV4dHJhY3RvclR5cGUsIENoYXRFbGVtZW50RGlzcGxheUxvY2F0aW9uLCBDaGF0U2VhcmNoU29ydE92ZXJyaWRlcywgQ2hhdFN0YXRlLCBDb2xvck5hbWVzLCBDdXN0b21lclNlcnZpY2VJbnRlZ3JhdGlvbk1vZGUsIEN1c3RvbWVyU2VydmljZU92ZXJyaWRlcywgQ3VzdG9tZXJTZXJ2aWNlVHlwZSwgRE9NSW5zZXJ0aW9uVHlwZSwgRmVhdHVyZUdhdGVzLCBHb29nbGVBbmFseXRpY3NFdmVudHMsIEdyaWRJbnNlcnRpb25UeXBlLCBMb2NhbFN0b3JhZ2VLZXlzLCBNZXNzYWdlUm9sZSwgTWVzc2FnZVR5cGUsIE9yZ1Nob3J0TmFtZSwgUGFnZVZhcmlhbnRUZXN0VHlwZSwgUGFnZVZpc2l0Q2F0ZWdvcnksIFBlcmZNZXRyaWNzRXZlbnRzLCBQcm9kdWN0RXhwZXJpbWVudCwgUHJvZHVjdFNvcnRpbmcsIFNlYXJjaFJlc3VsdHNTdGF0ZSwgU3BpZmZ5RXZlbnQsIFNwaWZmeUV2ZW50TmFtZSwgU3BpZmZ5TWV0cmljc0V2ZW50TmFtZSwgU3BpZmZ5V2lkZ2V0cywgU3VnZ2VzdGlvbkJhckxvY2F0aW9uRm9yTWV0cmljcywgVmFyaWFudFR5cGVFbnVtLCBXaWRnZXRUeXBlIH07Il0sInhfZ29vZ2xlX2lnbm9yZUxpc3QiOlswXSwibWFwcGluZ3MiOiI7QUFDQSxJQUFJLFdBQVcsT0FBTztBQUN0QixJQUFJLFlBQVksT0FBTztBQUN2QixJQUFJLG1CQUFtQixPQUFPO0FBQzlCLElBQUksb0JBQW9CLE9BQU87QUFDL0IsSUFBSSxlQUFlLE9BQU87QUFDMUIsSUFBSSxlQUFlLE9BQU8sVUFBVTtBQUNwQyxJQUFJLGNBQWMsSUFBSSxRQUFRLFdBQVc7QUFDeEMsUUFBTyxRQUFRLEdBQUcsR0FBRyxrQkFBa0IsR0FBRyxDQUFDLE1BQU0sTUFBTSxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUUsU0FBUyxJQUFJLEVBQUUsSUFBSTs7QUFFNUYsSUFBSSxlQUFlLElBQUksTUFBTSxRQUFRLFNBQVM7QUFDN0MsS0FBSSxRQUFRLE9BQU8sU0FBUyxZQUFZLE9BQU8sU0FBUyxXQUFZLE1BQUssSUFBSSxPQUFPLGtCQUFrQixLQUFLLEVBQUUsSUFBSSxHQUFHLElBQUksS0FBSyxRQUFRLEtBQUssSUFBSSxHQUFHLEtBQUs7QUFDckosUUFBTSxLQUFLO0FBQ1gsTUFBSSxDQUFDLGFBQWEsS0FBSyxJQUFJLElBQUksSUFBSSxRQUFRLE9BQVEsV0FBVSxJQUFJLEtBQUs7R0FDckUsT0FBTyxNQUFNLEtBQUssSUFBSSxLQUFLLE1BQU0sSUFBSTtHQUNyQyxZQUFZLEVBQUUsT0FBTyxpQkFBaUIsTUFBTSxJQUFJLEtBQUssS0FBSztHQUMxRCxDQUFDOztBQUVILFFBQU87O0FBRVIsSUFBSSxXQUFXLEtBQUssWUFBWSxZQUFZLFNBQVMsT0FBTyxPQUFPLFNBQVMsYUFBYSxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsWUFBWSxjQUFjLENBQUMsT0FBTyxDQUFDLElBQUksYUFBYSxVQUFVLFFBQVEsV0FBVztDQUNyTCxPQUFPO0NBQ1AsWUFBWTtDQUNaLENBQUMsR0FBRyxRQUFRLElBQUk7QUErQmpCLElBQUksY0FBOEIseUJBQVMsZUFBZTtBQUN6RCxlQUFjLHFCQUFxQjtBQUNuQyxlQUFjLHFCQUFxQjtBQUNuQyxlQUFjLHVCQUF1QjtBQUNyQyxlQUFjLDJCQUEyQjtBQUN6QyxlQUFjLDhCQUE4QjtBQUM1QyxlQUFjLDZCQUE2QjtBQUMzQyxlQUFjLGlDQUFpQztBQUMvQyxlQUFjLG9DQUFvQztBQUNsRCxlQUFjLGdDQUFnQztBQUM5QyxRQUFPO0VBQ04sRUFBRSxDQUFDO0FBSUwsSUFBSSxrQkFBa0MseUJBQVMsbUJBQW1CO0FBQ2pFLG1CQUFrQixnQkFBZ0I7QUFDbEMsbUJBQWtCLGlCQUFpQjtBQUNuQyxRQUFPO0VBQ04sRUFBRSxDQUFDO0FBSUwsSUFBSSx5QkFBeUMseUJBQVMsMEJBQTBCO0FBQy9FLDBCQUF5QixrQkFBa0I7QUFDM0MsMEJBQXlCLDJCQUEyQjtBQUNwRCwwQkFBeUIsK0JBQStCO0FBQ3hELDBCQUF5QiwwQkFBMEI7QUFDbkQsMEJBQXlCLDJCQUEyQjtBQUNwRCwwQkFBeUIsNEJBQTRCO0FBQ3JELDBCQUF5QiwwQkFBMEI7QUFDbkQsMEJBQXlCLDJCQUEyQjtBQUNwRCwwQkFBeUIsMkJBQTJCO0FBQ3BELDBCQUF5Qix3QkFBd0I7QUFDakQsMEJBQXlCLDhCQUE4QjtBQUN2RCwwQkFBeUIsc0JBQXNCO0FBQy9DLDBCQUF5Qix1QkFBdUI7QUFDaEQsMEJBQXlCLG9CQUFvQjtBQUM3QywwQkFBeUIsaUNBQWlDO0FBQzFELDBCQUF5Qix3QkFBd0I7QUFDakQsMEJBQXlCLHNCQUFzQjtBQUMvQywwQkFBeUIsd0JBQXdCO0FBQ2pELDBCQUF5Qiw4QkFBOEI7QUFDdkQsMEJBQXlCLDRCQUE0QjtBQUNyRCwwQkFBeUIsc0NBQXNDO0FBQy9ELDBCQUF5Qix3QkFBd0I7QUFDakQsMEJBQXlCLDBCQUEwQjtBQUNuRCwwQkFBeUIseUJBQXlCO0FBQ2xELDBCQUF5Qiw0QkFBNEI7QUFDckQsMEJBQXlCLDJCQUEyQjtBQUNwRCwwQkFBeUIseUJBQXlCO0FBQ2xELDBCQUF5Qix1QkFBdUI7QUFDaEQsUUFBTztFQUNOLEVBQUUsQ0FBQztBQXNDTCxJQUFJLGNBQThCLHlCQUFTLGVBQWU7QUFDekQsZUFBYyxVQUFVO0FBQ3hCLGVBQWMsZUFBZTtBQUM3QixRQUFPO0VBQ04sRUFBRSxDQUFDO0FBQ0wsSUFBSSxjQUE4Qix5QkFBUyxlQUFlO0FBQ3pELGVBQWMsVUFBVTtBQUN4QixlQUFjLHVCQUF1QjtBQUNyQyxlQUFjLGFBQWE7QUFDM0IsZUFBYyxtQkFBbUI7QUFDakMsZUFBYyxZQUFZO0FBQzFCLGVBQWMsZ0JBQWdCO0FBQzlCLGVBQWMsZUFBZTtBQUM3QixlQUFjLFVBQVU7QUFDeEIsZUFBYyxZQUFZO0FBQzFCLGVBQWMsZ0JBQWdCO0FBQzlCLGVBQWMscUJBQXFCO0FBQ25DLGVBQWMsVUFBVTtBQUN4QixlQUFjLFdBQVc7QUFDekIsZUFBYyx5QkFBeUI7QUFDdkMsUUFBTztFQUNOLEVBQUUsQ0FBQztBQXVFTCxJQUFJLG1CQUFtQyx5QkFBUyxvQkFBb0I7QUFDbkUsb0JBQW1CLFdBQVc7QUFDOUIsb0JBQW1CLFlBQVk7QUFDL0Isb0JBQW1CLDBCQUEwQjtBQUM3QyxvQkFBbUIsMkJBQTJCO0FBQzlDLG9CQUFtQix3QkFBd0I7QUFDM0Msb0JBQW1CLHlCQUF5QjtBQUM1QyxvQkFBbUIsa0JBQWtCO0FBQ3JDLG9CQUFtQixVQUFVO0FBQzdCLFFBQU87RUFDTixFQUFFLENBQUM7QUFJTCxJQUFJLGVBQStCLHlCQUFTLGdCQUFnQjtBQUMzRCxnQkFBZSw0QkFBNEI7QUFDM0MsZ0JBQWUseUJBQXlCO0FBQ3hDLGdCQUFlLHdCQUF3QjtBQUN2QyxnQkFBZSwwQkFBMEI7QUFDekMsZ0JBQWUsMEJBQTBCO0FBQ3pDLGdCQUFlLCtCQUErQjtBQUM5QyxnQkFBZSwyQkFBMkI7QUFDMUMsZ0JBQWUsMEJBQTBCO0FBQ3pDLGdCQUFlLHdCQUF3QjtBQUN2QyxnQkFBZSx3QkFBd0I7QUFDdkMsZ0JBQWUsMEJBQTBCO0FBQ3pDLGdCQUFlLDJCQUEyQjtBQUMxQyxnQkFBZSwyQkFBMkI7QUFDMUMsZ0JBQWUsOEJBQThCO0FBQzdDLGdCQUFlLGlDQUFpQztBQUNoRCxnQkFBZSwwQkFBMEI7QUFDekMsZ0JBQWUsa0NBQWtDO0FBQ2pELGdCQUFlLHdCQUF3QjtBQUN2QyxRQUFPO0VBQ04sRUFBRSxDQUFDO0FBSUwsSUFBSSxvQkFBb0MseUJBQVMscUJBQXFCO0FBQ3JFLHFCQUFvQixhQUFhO0FBQ2pDLHFCQUFvQixhQUFhO0FBQ2pDLHFCQUFvQixhQUFhO0FBQ2pDLHFCQUFvQixhQUFhO0FBQ2pDLHFCQUFvQixhQUFhO0FBQ2pDLHFCQUFvQixhQUFhO0FBQ2pDLHFCQUFvQixhQUFhO0FBQ2pDLHFCQUFvQixhQUFhO0FBQ2pDLHFCQUFvQixhQUFhO0FBQ2pDLHFCQUFvQixjQUFjO0FBQ2xDLHFCQUFvQixjQUFjO0FBQ2xDLHFCQUFvQixXQUFXO0FBQy9CLHFCQUFvQixXQUFXO0FBQy9CLHFCQUFvQixXQUFXO0FBQy9CLHFCQUFvQixXQUFXO0FBQy9CLFFBQU87RUFDTixFQUFFLENBQUM7QUFJTCxJQUFJLG1CQUFtQyx5QkFBUyxvQkFBb0I7QUFDbkUsb0JBQW1CLFlBQVk7QUFDL0Isb0JBQW1CLHNCQUFzQjtBQUN6QyxvQkFBbUIsc0JBQXNCO0FBQ3pDLFFBQU87RUFDTixFQUFFLENBQUM7QUFJTCxJQUFJLHNCQUFzQyx5QkFBUyx1QkFBdUI7QUFDekUsdUJBQXNCLGdCQUFnQjtBQUN0Qyx1QkFBc0IsZ0JBQWdCO0FBQ3RDLHVCQUFzQixrQkFBa0I7QUFDeEMsdUJBQXNCLHFCQUFxQjtBQUMzQyx1QkFBc0Isd0JBQXdCO0FBQzlDLHVCQUFzQixnQkFBZ0I7QUFDdEMsdUJBQXNCLGtCQUFrQjtBQUN4Qyx1QkFBc0Isb0JBQW9CO0FBQzFDLHVCQUFzQixpQkFBaUI7QUFDdkMsdUJBQXNCLFdBQVc7QUFDakMsdUJBQXNCLGdCQUFnQjtBQUN0Qyx1QkFBc0IsZUFBZTtBQUNyQyx1QkFBc0IsdUJBQXVCO0FBQzdDLHVCQUFzQiwwQkFBMEI7QUFDaEQsdUJBQXNCLGVBQWU7QUFDckMsdUJBQXNCLHlCQUF5QjtBQUMvQyx1QkFBc0IsY0FBYztBQUNwQyx1QkFBc0IsaUJBQWlCO0FBQ3ZDLHVCQUFzQixVQUFVO0FBQ2hDLFFBQU87RUFDTixFQUFFLENBQUM7QUFjTCxJQUFJLGVBQStCLHlCQUFTLGdCQUFnQjtBQUMzRCxnQkFBZSxhQUFhO0FBQzVCLGdCQUFlLHNCQUFzQjtBQUNyQyxnQkFBZSxjQUFjO0FBQzdCLGdCQUFlLGlCQUFpQjtBQUNoQyxnQkFBZSxvQkFBb0I7QUFDbkMsZ0JBQWUsc0JBQXNCO0FBQ3JDLGdCQUFlLGlCQUFpQjtBQUNoQyxnQkFBZSxXQUFXO0FBQzFCLGdCQUFlLGtCQUFrQjtBQUNqQyxnQkFBZSxlQUFlO0FBQzlCLGdCQUFlLG1CQUFtQjtBQUNsQyxnQkFBZSxnQkFBZ0I7QUFDL0IsZ0JBQWUsb0JBQW9CO0FBQ25DLGdCQUFlLGVBQWU7QUFDOUIsZ0JBQWUsYUFBYTtBQUM1QixnQkFBZSxxQkFBcUI7QUFDcEMsZ0JBQWUsaUJBQWlCO0FBQ2hDLGdCQUFlLGFBQWE7QUFDNUIsZ0JBQWUsY0FBYztBQUM3QixnQkFBZSxhQUFhO0FBQzVCLGdCQUFlLG1CQUFtQjtBQUNsQyxnQkFBZSxvQkFBb0I7QUFDbkMsZ0JBQWUsb0JBQW9CO0FBQ25DLGdCQUFlLHVCQUF1QjtBQUN0QyxnQkFBZSxtQkFBbUI7QUFDbEMsZ0JBQWUsZUFBZTtBQUM5QixnQkFBZSxzQkFBc0I7QUFDckMsZ0JBQWUscUJBQXFCO0FBQ3BDLGdCQUFlLGdCQUFnQjtBQUMvQixnQkFBZSxXQUFXO0FBQzFCLGdCQUFlLGtCQUFrQjtBQUNqQyxnQkFBZSxrQkFBa0I7QUFDakMsZ0JBQWUsYUFBYTtBQUM1QixRQUFPO0VBQ04sRUFBRSxDQUFDO0FBWUwsSUFBSSxvQkFBb0MseUJBQVMscUJBQXFCO0FBQ3JFLHFCQUFvQixhQUFhO0FBQ2pDLFFBQU87RUFDTixFQUFFLENBQUM7QUFJTCxJQUFJLGlCQUFpQyx5QkFBUyxrQkFBa0I7QUFDL0Qsa0JBQWlCLGNBQWM7QUFDL0Isa0JBQWlCLGVBQWU7QUFDaEMsa0JBQWlCLGdCQUFnQjtBQUNqQyxRQUFPO0VBQ04sRUFBRSxDQUFDO0FBSUwsSUFBSSxrQkFBa0MseUJBQVMsbUJBQW1CO0FBQ2pFLG1CQUFrQixTQUFTO0FBQzNCLG1CQUFrQixTQUFTO0FBQzNCLG1CQUFrQixlQUFlO0FBQ2pDLFFBQU87RUFDTixFQUFFLENBQUM7Ozs7O0FBa0NMLElBQUksZ0JBQWdDLHlCQUFTLGlCQUFpQjtBQUM3RCxpQkFBZ0IsaUJBQWlCO0FBQ2pDLGlCQUFnQixxQkFBcUI7QUFDckMsaUJBQWdCLHVCQUF1QjtBQUN2QyxpQkFBZ0Isb0JBQW9CO0FBQ3BDLGlCQUFnQixvQkFBb0I7QUFDcEMsaUJBQWdCLG1CQUFtQjtBQUNuQyxpQkFBZ0Isa0JBQWtCO0FBQ2xDLGlCQUFnQixrQkFBa0I7QUFDbEMsaUJBQWdCLG1CQUFtQjtBQUNuQyxpQkFBZ0IsNEJBQTRCO0FBQzVDLFFBQU87RUFDTixFQUFFLENBQUM7QUEwQkwsSUFBSSxrQkFBa0MsMkJBQVcsRUFBRSx1RUFBdUUsWUFBWTs7Ozs7Ozs7Ozs7O0NBWXJJLElBQUksY0FBYyxXQUFXLFFBQVEsYUFBYSxTQUFTLFNBQVMsWUFBWSxHQUFHLFdBQVc7RUFDN0YsU0FBUyxNQUFNLE9BQU87QUFDckIsVUFBTyxpQkFBaUIsSUFBSSxRQUFRLElBQUksRUFBRSxTQUFTLFNBQVM7QUFDM0QsWUFBUSxNQUFNO0tBQ2I7O0FBRUgsU0FBTyxLQUFLLE1BQU0sSUFBSSxVQUFVLFNBQVMsU0FBUyxRQUFRO0dBQ3pELFNBQVMsVUFBVSxPQUFPO0FBQ3pCLFFBQUk7QUFDSCxVQUFLLFVBQVUsS0FBSyxNQUFNLENBQUM7YUFDbkIsR0FBRztBQUNYLFlBQU8sRUFBRTs7O0dBR1gsU0FBUyxTQUFTLE9BQU87QUFDeEIsUUFBSTtBQUNILFVBQUssVUFBVSxTQUFTLE1BQU0sQ0FBQzthQUN2QixHQUFHO0FBQ1gsWUFBTyxFQUFFOzs7R0FHWCxTQUFTLEtBQUssUUFBUTtBQUNyQixXQUFPLE9BQU8sUUFBUSxPQUFPLE1BQU0sR0FBRyxNQUFNLE9BQU8sTUFBTSxDQUFDLEtBQUssV0FBVyxTQUFTOztBQUVwRixTQUFNLFlBQVksVUFBVSxNQUFNLFNBQVMsY0FBYyxFQUFFLENBQUMsRUFBRSxNQUFNLENBQUM7SUFDcEU7O0FBRUgsUUFBTyxlQUFlLFNBQVMsY0FBYyxFQUFFLE9BQU8sTUFBTSxDQUFDO0FBQzdELFNBQVEsa0JBQWtCLFFBQVEsa0JBQWtCLFFBQVEsa0JBQWtCLFFBQVEsa0JBQWtCLFFBQVEscUJBQXFCLFFBQVEsZ0JBQWdCLFFBQVEsYUFBYSxRQUFRLGdCQUFnQixRQUFRLFVBQVUsUUFBUSxnQkFBZ0IsUUFBUSxnQkFBZ0IsUUFBUSxZQUFZLEtBQUs7QUFDclMsU0FBUSxjQUFjO0FBQ3RCLFNBQVEsU0FBUztBQUNqQixTQUFRLFlBQVk7QUFDcEIsU0FBUSxpQkFBaUI7QUFDekIsU0FBUSxZQUFZLG1CQUFtQixRQUFRLFFBQVEsR0FBRztDQUMxRCxJQUFJLGdCQUFnQixNQUFNO0VBQ3pCLFlBQVksZ0JBQWdCLEVBQUUsRUFBRTtBQUMvQixRQUFLLGdCQUFnQjs7RUFFdEIsSUFBSSxPQUFPLGVBQWU7QUFDekIsUUFBSyxnQkFBZ0I7O0VBRXRCLElBQUksV0FBVztBQUNkLFVBQU8sS0FBSyxjQUFjLFlBQVksT0FBTyxLQUFLLGNBQWMsV0FBVyxRQUFROztFQUVwRixJQUFJLFdBQVc7QUFDZCxVQUFPLEtBQUssY0FBYzs7RUFFM0IsSUFBSSxhQUFhO0FBQ2hCLFVBQU8sS0FBSyxjQUFjLGNBQWMsRUFBRTs7RUFFM0MsSUFBSSx1QkFBdUI7QUFDMUIsVUFBTyxLQUFLLGNBQWMsd0JBQXdCOztFQUVuRCxJQUFJLFdBQVc7QUFDZCxVQUFPLEtBQUssY0FBYzs7RUFFM0IsSUFBSSxXQUFXO0FBQ2QsVUFBTyxLQUFLLGNBQWM7O0VBRTNCLElBQUksU0FBUztHQUNaLE1BQU0sU0FBUyxLQUFLLGNBQWM7QUFDbEMsT0FBSSxPQUFRLFFBQU8sT0FBTyxXQUFXLGFBQWEsZUFBZTs7RUFFbEUsSUFBSSxjQUFjO0dBQ2pCLE1BQU0sY0FBYyxLQUFLLGNBQWM7QUFDdkMsT0FBSSxZQUFhLFFBQU8sT0FBTyxnQkFBZ0IsYUFBYSxvQkFBb0IsWUFBWSxNQUFNLEtBQUssR0FBRyxLQUFLLEdBQUcsYUFBYTtBQUM5SCxXQUFPO0tBQ047O0VBRUgsSUFBSSxVQUFVO0FBQ2IsVUFBTyxLQUFLLGNBQWM7O0VBRTNCLElBQUksY0FBYztBQUNqQixVQUFPLEtBQUssY0FBYzs7O0FBRzVCLFNBQVEsZ0JBQWdCO0FBQ3hCLFNBQVEsZ0JBQWdCLElBQUksZUFBZTs7OztDQUkzQyxJQUFJLFVBQVUsTUFBTUEsVUFBUTtFQUMzQixZQUFZLGdCQUFnQixRQUFRLGVBQWU7QUFDbEQsUUFBSyxnQkFBZ0I7QUFDckIsUUFBSyxZQUFZLEtBQUssU0FBUyxZQUFZLE1BQU0sS0FBSyxHQUFHLEtBQUssR0FBRyxhQUFhO0lBQzdFLElBQUksY0FBYztLQUNqQjtLQUNBO0tBQ0E7QUFDRCxTQUFLLE1BQU0sY0FBYyxLQUFLLFdBQVksS0FBSSxXQUFXLElBQUssZ0JBQWUsTUFBTSxXQUFXLElBQUksT0FBTyxPQUFPLEVBQUUsT0FBTyxLQUFLLFVBQVUsRUFBRSxZQUFZLENBQUMsS0FBSztJQUM1SixJQUFJLFdBQVcsS0FBSztBQUNwQixRQUFJO0FBQ0gsZ0JBQVcsT0FBTyxLQUFLLGNBQWMsWUFBWSxPQUFPLFlBQVksS0FBSyxZQUFZLEtBQUs7YUFDbEYsR0FBRztBQUNYLFVBQUssTUFBTSxjQUFjLEtBQUssV0FBWSxLQUFJLFdBQVcsUUFBUyxhQUFZLE1BQU0sV0FBVyxRQUFRO01BQ3RHLE9BQU8sS0FBSztNQUNaLEtBQUssWUFBWTtNQUNqQixNQUFNLFlBQVk7TUFDbEIsT0FBTztNQUNQLFVBQVUsV0FBVyxTQUFTLE9BQU8sR0FBRyxLQUFLO01BQzdDLENBQUMsS0FBSztBQUNQLFNBQUksYUFBYSxLQUFLLEVBQUcsS0FBSSxhQUFhLE1BQU8sT0FBTSxJQUFJLFdBQVcsR0FBRyxpRkFBaUY7U0FDckosT0FBTTs7QUFFWixTQUFLLE1BQU0sY0FBYyxLQUFLLFdBQVksS0FBSSxXQUFXLEtBQU0sYUFBWSxNQUFNLFdBQVcsS0FBSztLQUNoRyxPQUFPLEtBQUs7S0FDWixLQUFLLFlBQVk7S0FDakIsTUFBTSxZQUFZO0tBQ2xCLFVBQVUsU0FBUyxPQUFPO0tBQzFCLENBQUMsS0FBSztBQUNQLFdBQU87S0FDTjtBQUNGLFFBQUssYUFBYSxjQUFjOztFQUVqQyxlQUFlLEdBQUcsYUFBYTtHQUM5QixNQUFNLE9BQU8sS0FBSyxPQUFPO0FBQ3pCLFFBQUssYUFBYSxLQUFLLFdBQVcsT0FBTyxHQUFHLFlBQVk7QUFDeEQsVUFBTzs7RUFFUixrQkFBa0IsR0FBRyxnQkFBZ0I7R0FDcEMsTUFBTSxjQUFjLGVBQWUsS0FBSyxTQUFTLEVBQUUsS0FBSyxFQUFFO0FBQzFELFVBQU8sS0FBSyxlQUFlLEdBQUcsWUFBWTs7RUFFM0MsbUJBQW1CLEdBQUcsaUJBQWlCO0dBQ3RDLE1BQU0sY0FBYyxnQkFBZ0IsS0FBSyxVQUFVLEVBQUUsTUFBTSxFQUFFO0FBQzdELFVBQU8sS0FBSyxlQUFlLEdBQUcsWUFBWTs7Ozs7Ozs7Ozs7O0VBWTNDLFdBQVcsTUFBTTtBQUNoQixPQUFJLENBQUMsS0FBTSxRQUFPO0FBQ2xCLFVBQU9BLFVBQVEsVUFBVSxLQUFLLEtBQUs7O0VBRXBDLFFBQVEsU0FBUyxlQUFlO0FBQy9CLFVBQU8sWUFBWSxNQUFNLEtBQUssR0FBRyxLQUFLLEdBQUcsYUFBYTtJQUNyRCxNQUFNLEVBQUUsS0FBSyxTQUFTLE1BQU0sS0FBSyxrQkFBa0IsU0FBUyxjQUFjO0lBQzFFLE1BQU0sV0FBVyxNQUFNLEtBQUssU0FBUyxLQUFLLEtBQUs7QUFDL0MsUUFBSSxZQUFZLFNBQVMsVUFBVSxPQUFPLFNBQVMsU0FBUyxJQUFLLFFBQU87QUFDeEUsVUFBTSxJQUFJLGNBQWMsVUFBVSxrQ0FBa0M7S0FDbkU7O0VBRUgsa0JBQWtCLFNBQVMsZUFBZTtBQUN6QyxVQUFPLFlBQVksTUFBTSxLQUFLLEdBQUcsS0FBSyxHQUFHLGFBQWE7SUFDckQsSUFBSSxNQUFNLEtBQUssY0FBYyxXQUFXLFFBQVE7QUFDaEQsUUFBSSxRQUFRLFVBQVUsS0FBSyxLQUFLLE9BQU8sS0FBSyxRQUFRLE1BQU0sQ0FBQyxXQUFXLEVBQUcsUUFBTyxNQUFNLEtBQUssY0FBYyxxQkFBcUIsUUFBUSxNQUFNO0lBQzVJLE1BQU0sVUFBVSxPQUFPLE9BQU8sRUFBRSxFQUFFLEtBQUssY0FBYyxTQUFTLFFBQVEsUUFBUTtBQUM5RSxXQUFPLEtBQUssUUFBUSxDQUFDLFNBQVMsUUFBUSxRQUFRLFNBQVMsS0FBSyxJQUFJLE9BQU8sUUFBUSxPQUFPLEVBQUUsQ0FBQztJQUN6RixNQUFNLGlCQUFpQixPQUFPLGtCQUFrQixhQUFhLHNCQUFzQixZQUFZLE1BQU0sS0FBSyxHQUFHLEtBQUssR0FBRyxhQUFhO0FBQ2pJLFlBQU87TUFDTjtJQUNGLE1BQU0sYUFBYTtLQUNsQixRQUFRLFFBQVE7S0FDaEI7S0FDQSxNQUFNLFFBQVE7S0FDZCxhQUFhLEtBQUssY0FBYztLQUNoQztJQUNELE1BQU0saUJBQWlCLE9BQU8sT0FBTyxPQUFPLE9BQU8sRUFBRSxFQUFFLFdBQVcsRUFBRSxNQUFNLGVBQWU7S0FDeEYsTUFBTTtLQUNOO0tBQ0EsQ0FBQyxDQUFDO0lBQ0gsSUFBSTtBQUNKLFFBQUksV0FBVyxlQUFlLEtBQUssSUFBSSxlQUFlLGdCQUFnQixtQkFBbUIsT0FBTyxlQUFlLEtBQUssQ0FBRSxRQUFPLGVBQWU7YUFDbkksS0FBSyxXQUFXLFFBQVEsZ0JBQWdCLENBQUUsUUFBTyxLQUFLLFVBQVUsZUFBZSxLQUFLO1FBQ3hGLFFBQU8sZUFBZTtJQUMzQixNQUFNLE9BQU8sT0FBTyxPQUFPLE9BQU8sT0FBTyxFQUFFLEVBQUUsZUFBZSxFQUFFLEVBQUUsTUFBTSxDQUFDO0FBQ3ZFLFdBQU87S0FDTjtLQUNBO0tBQ0E7S0FDQTs7Ozs7O0VBTUgsUUFBUTtHQUNQLE1BQU0sY0FBYyxLQUFLO0dBQ3pCLE1BQU0sT0FBTyxJQUFJLFlBQVksS0FBSyxjQUFjO0FBQ2hELFFBQUssYUFBYSxLQUFLLFdBQVcsT0FBTztBQUN6QyxVQUFPOzs7QUFHVCxTQUFRLFVBQVU7QUFDbEIsU0FBUSxZQUFZLElBQUksT0FBTyxnRUFBZ0UsSUFBSTtDQUNuRyxTQUFTLE9BQU8sT0FBTztBQUN0QixTQUFPLE9BQU8sU0FBUyxlQUFlLGlCQUFpQjs7Q0FFeEQsU0FBUyxXQUFXLE9BQU87QUFDMUIsU0FBTyxPQUFPLGFBQWEsZUFBZSxpQkFBaUI7O0NBRTVELElBQUksZ0JBQWdCLGNBQWMsTUFBTTtFQUN2QyxZQUFZLFVBQVUsS0FBSztBQUMxQixTQUFNLElBQUk7QUFDVixRQUFLLFdBQVc7QUFDaEIsUUFBSyxPQUFPOzs7QUFHZCxTQUFRLGdCQUFnQjtDQUN4QixJQUFJLGFBQWEsY0FBYyxNQUFNO0VBQ3BDLFlBQVksT0FBTyxLQUFLO0FBQ3ZCLFNBQU0sSUFBSTtBQUNWLFFBQUssUUFBUTtBQUNiLFFBQUssT0FBTzs7O0FBR2QsU0FBUSxhQUFhO0NBQ3JCLElBQUksZ0JBQWdCLGNBQWMsTUFBTTtFQUN2QyxZQUFZLE9BQU8sS0FBSztBQUN2QixTQUFNLElBQUk7QUFDVixRQUFLLFFBQVE7QUFDYixRQUFLLE9BQU87OztBQUdkLFNBQVEsZ0JBQWdCO0FBQ3hCLFNBQVEscUJBQXFCO0VBQzVCLEtBQUs7RUFDTCxLQUFLO0VBQ0wsS0FBSztFQUNMLE9BQU87RUFDUDtDQUNELFNBQVMsWUFBWSxRQUFRLFNBQVMsSUFBSTtBQUN6QyxTQUFPLE9BQU8sS0FBSyxPQUFPLENBQUMsS0FBSyxRQUFRLHFCQUFxQixLQUFLLE9BQU8sTUFBTSxPQUFPLENBQUMsQ0FBQyxRQUFRLFNBQVMsS0FBSyxTQUFTLEVBQUUsQ0FBQyxLQUFLLElBQUk7O0NBRXBJLFNBQVMscUJBQXFCLEtBQUssT0FBTyxZQUFZLElBQUk7RUFDekQsTUFBTSxVQUFVLGFBQWEsVUFBVSxTQUFTLElBQUksSUFBSSxLQUFLO0FBQzdELE1BQUksaUJBQWlCLE9BQU87R0FDM0IsTUFBTSxhQUFhLE1BQU0sS0FBSyxnQkFBZ0IsbUJBQW1CLE9BQU8sWUFBWSxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksbUJBQW1CLFFBQVEsQ0FBQyxHQUFHO0FBQy9ILFVBQU8sR0FBRyxtQkFBbUIsUUFBUSxDQUFDLEdBQUc7O0FBRTFDLE1BQUksaUJBQWlCLElBQUssUUFBTyxxQkFBcUIsS0FBSyxNQUFNLEtBQUssTUFBTSxFQUFFLFVBQVU7QUFDeEYsTUFBSSxpQkFBaUIsS0FBTSxRQUFPLEdBQUcsbUJBQW1CLFFBQVEsQ0FBQyxHQUFHLG1CQUFtQixNQUFNLGFBQWEsQ0FBQztBQUMzRyxNQUFJLGlCQUFpQixPQUFRLFFBQU8sWUFBWSxPQUFPLFFBQVE7QUFDL0QsU0FBTyxHQUFHLG1CQUFtQixRQUFRLENBQUMsR0FBRyxtQkFBbUIsT0FBTyxNQUFNLENBQUM7O0NBRTNFLFNBQVMsT0FBTyxNQUFNLEtBQUs7RUFDMUIsTUFBTSxRQUFRLEtBQUs7QUFDbkIsU0FBTyxVQUFVLFFBQVEsVUFBVSxLQUFLOztDQUV6QyxTQUFTLFVBQVUsTUFBTSxJQUFJO0FBQzVCLFNBQU8sT0FBTyxLQUFLLEtBQUssQ0FBQyxRQUFRLEtBQUssUUFBUSxPQUFPLE9BQU8sT0FBTyxPQUFPLEVBQUUsRUFBRSxJQUFJLEVBQUUsR0FBRyxNQUFNLEdBQUcsS0FBSyxLQUFLLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQzs7Q0FFbkgsU0FBUyxlQUFlLFVBQVU7QUFDakMsT0FBSyxNQUFNLFdBQVcsU0FBVSxLQUFJLDBCQUEwQixRQUFRLFlBQWEsUUFBTztBQUMxRixTQUFPOztDQUVSLElBQUksa0JBQWtCLE1BQU07RUFDM0IsWUFBWSxLQUFLLGVBQWUsY0FBYyxXQUFXO0FBQ3hELFFBQUssTUFBTTtBQUNYLFFBQUssY0FBYzs7RUFFcEIsUUFBUTtBQUNQLFVBQU8sWUFBWSxNQUFNLEtBQUssR0FBRyxLQUFLLEdBQUcsYUFBYTtBQUNyRCxXQUFPLEtBQUssWUFBWSxNQUFNLEtBQUssSUFBSSxNQUFNLENBQUM7S0FDN0M7OztBQUdKLFNBQVEsa0JBQWtCO0NBQzFCLElBQUksa0JBQWtCLE1BQU07RUFDM0IsWUFBWSxLQUFLO0FBQ2hCLFFBQUssTUFBTTs7RUFFWixRQUFRO0FBQ1AsVUFBTyxZQUFZLE1BQU0sS0FBSyxHQUFHLEtBQUssR0FBRyxhQUFhLEdBQUc7OztBQUczRCxTQUFRLGtCQUFrQjtDQUMxQixJQUFJLGtCQUFrQixNQUFNO0VBQzNCLFlBQVksS0FBSztBQUNoQixRQUFLLE1BQU07O0VBRVosUUFBUTtBQUNQLFVBQU8sWUFBWSxNQUFNLEtBQUssR0FBRyxLQUFLLEdBQUcsYUFBYTtBQUNyRCxXQUFPLE1BQU0sS0FBSyxJQUFJLE1BQU07S0FDM0I7OztBQUdKLFNBQVEsa0JBQWtCO0NBQzFCLElBQUksa0JBQWtCLE1BQU07RUFDM0IsWUFBWSxLQUFLO0FBQ2hCLFFBQUssTUFBTTs7RUFFWixRQUFRO0FBQ1AsVUFBTyxZQUFZLE1BQU0sS0FBSyxHQUFHLEtBQUssR0FBRyxhQUFhO0FBQ3JELFdBQU8sTUFBTSxLQUFLLElBQUksTUFBTTtLQUMzQjs7O0FBR0osU0FBUSxrQkFBa0I7SUFDdkIsQ0FBQztBQUlMLElBQUksa0NBQWtELDJCQUFXLEVBQUUsOEZBQThGLFlBQVk7Ozs7Ozs7Ozs7OztBQVk1SyxRQUFPLGVBQWUsU0FBUyxjQUFjLEVBQUUsT0FBTyxNQUFNLENBQUM7QUFDN0QsU0FBUSwwQkFBMEIsS0FBSztBQUN2QyxTQUFRLG9DQUFvQztBQUM1QyxTQUFRLGtDQUFrQztBQUMxQyxTQUFRLHVDQUF1QztBQUMvQyxTQUFRLGdDQUFnQztBQUN4QyxTQUFRLHFDQUFxQzs7Ozs7O0NBTTdDLElBQUk7QUFDSixFQUFDLFNBQVMsMkJBQTJCO0FBQ3BDLDRCQUEwQixZQUFZO0FBQ3RDLDRCQUEwQixjQUFjO0FBQ3hDLDRCQUEwQixhQUFhO0FBQ3ZDLDRCQUEwQixpQkFBaUI7SUFDekMsNEJBQTRCLFFBQVEsMEJBQTBCLDBCQUEwQixFQUFFLEVBQUU7Q0FDL0YsU0FBUyxrQ0FBa0MsT0FBTztBQUNqRCxPQUFLLE1BQU0sT0FBTyx3QkFBeUIsS0FBSSxPQUFPLFVBQVUsZUFBZSxLQUFLLHlCQUF5QixJQUFJLEVBQ2hIO09BQUksd0JBQXdCLFNBQVMsTUFBTyxRQUFPOztBQUVwRCxTQUFPOztDQUVSLFNBQVMsZ0NBQWdDLE1BQU07QUFDOUMsU0FBTyxxQ0FBcUMsTUFBTSxNQUFNOztDQUV6RCxTQUFTLHFDQUFxQyxNQUFNLHFCQUFxQjtBQUN4RSxTQUFPOztDQUVSLFNBQVMsOEJBQThCLE9BQU87QUFDN0MsU0FBTzs7Q0FFUixTQUFTLG1DQUFtQyxPQUFPLHFCQUFxQjtBQUN2RSxTQUFPOztJQUVMLENBQUM7QUFJTCxJQUFJLDZDQUE2RCwyQkFBVyxFQUFFLHlHQUF5RyxZQUFZOzs7Ozs7Ozs7Ozs7QUFZbE0sUUFBTyxlQUFlLFNBQVMsY0FBYyxFQUFFLE9BQU8sTUFBTSxDQUFDO0FBQzdELFNBQVEsK0NBQStDO0FBQ3ZELFNBQVEsNkNBQTZDO0FBQ3JELFNBQVEsa0RBQWtEO0FBQzFELFNBQVEsMkNBQTJDO0FBQ25ELFNBQVEsZ0RBQWdEO0NBQ3hELE1BQU0sOEJBQThCLGlDQUFpQzs7OztDQUlyRSxTQUFTLDZDQUE2QyxPQUFPO0FBQzVELE1BQUksRUFBRSxXQUFXLFVBQVUsTUFBTSxhQUFhLEtBQUssRUFBRyxRQUFPO0FBQzdELE1BQUksRUFBRSxvQkFBb0IsVUFBVSxNQUFNLHNCQUFzQixLQUFLLEVBQUcsUUFBTztBQUMvRSxTQUFPOztDQUVSLFNBQVMsMkNBQTJDLE1BQU07QUFDekQsU0FBTyxnREFBZ0QsTUFBTSxNQUFNOztDQUVwRSxTQUFTLGdEQUFnRCxNQUFNLHFCQUFxQjtBQUNuRixNQUFJLFFBQVEsS0FBTSxRQUFPO0FBQ3pCLFNBQU87R0FDTiw2QkFBNkIsS0FBSyxnQ0FBZ0MsT0FBTyxLQUFLLEtBQUssR0FBRyw0QkFBNEIsaUNBQWlDLEtBQUssNkJBQTZCO0dBQ3JMLFNBQVMsS0FBSztHQUNkLFFBQVEsS0FBSyxXQUFXLE9BQU8sS0FBSyxJQUFJLEtBQUs7R0FDN0Msa0JBQWtCLEtBQUs7R0FDdkIsV0FBVyxLQUFLLGNBQWMsT0FBTyxLQUFLLElBQUksS0FBSztHQUNuRDs7Q0FFRixTQUFTLHlDQUF5QyxNQUFNO0FBQ3ZELFNBQU8sOENBQThDLE1BQU0sTUFBTTs7Q0FFbEUsU0FBUyw4Q0FBOEMsT0FBTyxzQkFBc0IsT0FBTztBQUMxRixNQUFJLFNBQVMsS0FBTSxRQUFPO0FBQzFCLFNBQU87R0FDTiw4QkFBOEIsR0FBRyw0QkFBNEIsK0JBQStCLE1BQU0sNkJBQTZCO0dBQy9ILFNBQVMsTUFBTTtHQUNmLFFBQVEsTUFBTTtHQUNkLGtCQUFrQixNQUFNO0dBQ3hCLFdBQVcsTUFBTTtHQUNqQjs7SUFFQyxDQUFDO0FBSUwsSUFBSSw4Q0FBOEQsMkJBQVcsRUFBRSwwR0FBMEcsWUFBWTs7Ozs7Ozs7Ozs7O0FBWXBNLFFBQU8sZUFBZSxTQUFTLGNBQWMsRUFBRSxPQUFPLE1BQU0sQ0FBQztBQUM3RCxTQUFRLGdEQUFnRDtBQUN4RCxTQUFRLDhDQUE4QztBQUN0RCxTQUFRLG1EQUFtRDtBQUMzRCxTQUFRLDRDQUE0QztBQUNwRCxTQUFRLGlEQUFpRDs7OztDQUl6RCxTQUFTLDhDQUE4QyxPQUFPO0FBQzdELFNBQU87O0NBRVIsU0FBUyw0Q0FBNEMsTUFBTTtBQUMxRCxTQUFPLGlEQUFpRCxNQUFNLE1BQU07O0NBRXJFLFNBQVMsaURBQWlELE1BQU0scUJBQXFCO0FBQ3BGLE1BQUksUUFBUSxLQUFNLFFBQU87QUFDekIsU0FBTztHQUNOLG1CQUFtQixLQUFLLHNCQUFzQixPQUFPLEtBQUssSUFBSSxLQUFLO0dBQ25FLGVBQWUsS0FBSyxrQkFBa0IsT0FBTyxLQUFLLElBQUksS0FBSztHQUMzRCxXQUFXLEtBQUssY0FBYyxPQUFPLEtBQUssSUFBSSxLQUFLO0dBQ25EOztDQUVGLFNBQVMsMENBQTBDLE1BQU07QUFDeEQsU0FBTywrQ0FBK0MsTUFBTSxNQUFNOztDQUVuRSxTQUFTLCtDQUErQyxPQUFPLHNCQUFzQixPQUFPO0FBQzNGLE1BQUksU0FBUyxLQUFNLFFBQU87QUFDMUIsU0FBTztHQUNOLG1CQUFtQixNQUFNO0dBQ3pCLGVBQWUsTUFBTTtHQUNyQixXQUFXLE1BQU07R0FDakI7O0lBRUMsQ0FBQztBQUlMLElBQUksOEJBQThDLDJCQUFXLEVBQUUsMEZBQTBGLFlBQVk7Ozs7Ozs7Ozs7OztBQVlwSyxRQUFPLGVBQWUsU0FBUyxjQUFjLEVBQUUsT0FBTyxNQUFNLENBQUM7QUFDN0QsU0FBUSxnQ0FBZ0M7QUFDeEMsU0FBUSw4QkFBOEI7QUFDdEMsU0FBUSxtQ0FBbUM7QUFDM0MsU0FBUSw0QkFBNEI7QUFDcEMsU0FBUSxpQ0FBaUM7Ozs7Q0FJekMsU0FBUyw4QkFBOEIsT0FBTztBQUM3QyxNQUFJLEVBQUUsZ0JBQWdCLFVBQVUsTUFBTSxrQkFBa0IsS0FBSyxFQUFHLFFBQU87QUFDdkUsU0FBTzs7Q0FFUixTQUFTLDRCQUE0QixNQUFNO0FBQzFDLFNBQU8saUNBQWlDLE1BQU0sTUFBTTs7Q0FFckQsU0FBUyxpQ0FBaUMsTUFBTSxxQkFBcUI7QUFDcEUsTUFBSSxRQUFRLEtBQU0sUUFBTztBQUN6QixTQUFPLEVBQUUsY0FBYyxLQUFLLGVBQWU7O0NBRTVDLFNBQVMsMEJBQTBCLE1BQU07QUFDeEMsU0FBTywrQkFBK0IsTUFBTSxNQUFNOztDQUVuRCxTQUFTLCtCQUErQixPQUFPLHNCQUFzQixPQUFPO0FBQzNFLE1BQUksU0FBUyxLQUFNLFFBQU87QUFDMUIsU0FBTyxFQUFFLGNBQWMsTUFBTSxlQUFlOztJQUUxQyxDQUFDO0FBSUwsSUFBSSxtQ0FBbUQsMkJBQVcsRUFBRSwrRkFBK0YsWUFBWTs7Ozs7Ozs7Ozs7O0FBWTlLLFFBQU8sZUFBZSxTQUFTLGNBQWMsRUFBRSxPQUFPLE1BQU0sQ0FBQztBQUM3RCxTQUFRLHFDQUFxQztBQUM3QyxTQUFRLG1DQUFtQztBQUMzQyxTQUFRLHdDQUF3QztBQUNoRCxTQUFRLGlDQUFpQztBQUN6QyxTQUFRLHNDQUFzQzs7OztDQUk5QyxTQUFTLG1DQUFtQyxPQUFPO0FBQ2xELFNBQU87O0NBRVIsU0FBUyxpQ0FBaUMsTUFBTTtBQUMvQyxTQUFPLHNDQUFzQyxNQUFNLE1BQU07O0NBRTFELFNBQVMsc0NBQXNDLE1BQU0scUJBQXFCO0FBQ3pFLE1BQUksUUFBUSxLQUFNLFFBQU87QUFDekIsU0FBTztHQUNOLGVBQWUsS0FBSyxrQkFBa0IsT0FBTyxLQUFLLElBQUksS0FBSztHQUMzRCxXQUFXLEtBQUssY0FBYyxPQUFPLEtBQUssSUFBSSxLQUFLO0dBQ25ELFFBQVEsS0FBSyxXQUFXLE9BQU8sS0FBSyxJQUFJLEtBQUs7R0FDN0MsV0FBVyxLQUFLLGNBQWMsT0FBTyxLQUFLLElBQUksS0FBSztHQUNuRCxnQkFBZ0IsS0FBSyxtQkFBbUIsT0FBTyxLQUFLLElBQUksS0FBSztHQUM3RCxhQUFhLEtBQUssZ0JBQWdCLE9BQU8sS0FBSyxJQUFJLEtBQUs7R0FDdkQsdUJBQXVCLEtBQUssMEJBQTBCLE9BQU8sS0FBSyxJQUFJLEtBQUs7R0FDM0UsZ0JBQWdCLEtBQUssbUJBQW1CLE9BQU8sS0FBSyxJQUFJLEtBQUs7R0FDN0QsT0FBTyxLQUFLLFVBQVUsT0FBTyxLQUFLLElBQUksS0FBSztHQUMzQyxVQUFVLEtBQUssYUFBYSxPQUFPLEtBQUssSUFBSSxLQUFLO0dBQ2pELFdBQVcsS0FBSyxjQUFjLE9BQU8sS0FBSyxJQUFJLEtBQUs7R0FDbkQsY0FBYyxLQUFLLGlCQUFpQixPQUFPLEtBQUssSUFBSSxLQUFLO0dBQ3pELFlBQVksS0FBSyxlQUFlLE9BQU8sS0FBSyxJQUFJLEtBQUs7R0FDckQsVUFBVSxLQUFLLGFBQWEsT0FBTyxLQUFLLElBQUksS0FBSztHQUNqRCxXQUFXLEtBQUssY0FBYyxPQUFPLEtBQUssSUFBSSxLQUFLO0dBQ25ELG1CQUFtQixLQUFLLHNCQUFzQixPQUFPLEtBQUssSUFBSSxLQUFLO0dBQ25FOztDQUVGLFNBQVMsK0JBQStCLE1BQU07QUFDN0MsU0FBTyxvQ0FBb0MsTUFBTSxNQUFNOztDQUV4RCxTQUFTLG9DQUFvQyxPQUFPLHNCQUFzQixPQUFPO0FBQ2hGLE1BQUksU0FBUyxLQUFNLFFBQU87QUFDMUIsU0FBTztHQUNOLGVBQWUsTUFBTTtHQUNyQixXQUFXLE1BQU07R0FDakIsUUFBUSxNQUFNO0dBQ2QsV0FBVyxNQUFNO0dBQ2pCLGdCQUFnQixNQUFNO0dBQ3RCLGFBQWEsTUFBTTtHQUNuQix1QkFBdUIsTUFBTTtHQUM3QixnQkFBZ0IsTUFBTTtHQUN0QixPQUFPLE1BQU07R0FDYixVQUFVLE1BQU07R0FDaEIsV0FBVyxNQUFNO0dBQ2pCLGNBQWMsTUFBTTtHQUNwQixZQUFZLE1BQU07R0FDbEIsVUFBVSxNQUFNO0dBQ2hCLFdBQVcsTUFBTTtHQUNqQixtQkFBbUIsTUFBTTtHQUN6Qjs7SUFFQyxDQUFDO0FBSUwsSUFBSSxxQ0FBcUQsMkJBQVcsRUFBRSxpR0FBaUcsWUFBWTs7Ozs7Ozs7Ozs7O0FBWWxMLFFBQU8sZUFBZSxTQUFTLGNBQWMsRUFBRSxPQUFPLE1BQU0sQ0FBQztBQUM3RCxTQUFRLHVDQUF1QztBQUMvQyxTQUFRLHFDQUFxQztBQUM3QyxTQUFRLDBDQUEwQztBQUNsRCxTQUFRLG1DQUFtQztBQUMzQyxTQUFRLHdDQUF3Qzs7OztDQUloRCxTQUFTLHFDQUFxQyxPQUFPO0FBQ3BELFNBQU87O0NBRVIsU0FBUyxtQ0FBbUMsTUFBTTtBQUNqRCxTQUFPLHdDQUF3QyxNQUFNLE1BQU07O0NBRTVELFNBQVMsd0NBQXdDLE1BQU0scUJBQXFCO0FBQzNFLE1BQUksUUFBUSxLQUFNLFFBQU87QUFDekIsU0FBTztHQUNOLFNBQVMsS0FBSyxZQUFZLE9BQU8sS0FBSyxJQUFJLEtBQUs7R0FDL0Msb0JBQW9CLEtBQUssdUJBQXVCLE9BQU8sS0FBSyxJQUFJLEtBQUs7R0FDckUsV0FBVyxLQUFLLGNBQWMsT0FBTyxLQUFLLElBQUksS0FBSztHQUNuRCxtQkFBbUIsS0FBSyxzQkFBc0IsT0FBTyxLQUFLLElBQUksS0FBSztHQUNuRTs7Q0FFRixTQUFTLGlDQUFpQyxNQUFNO0FBQy9DLFNBQU8sc0NBQXNDLE1BQU0sTUFBTTs7Q0FFMUQsU0FBUyxzQ0FBc0MsT0FBTyxzQkFBc0IsT0FBTztBQUNsRixNQUFJLFNBQVMsS0FBTSxRQUFPO0FBQzFCLFNBQU87R0FDTixTQUFTLE1BQU07R0FDZixvQkFBb0IsTUFBTTtHQUMxQixXQUFXLE1BQU07R0FDakIsbUJBQW1CLE1BQU07R0FDekI7O0lBRUMsQ0FBQztBQUlMLElBQUksNEJBQTRDLDJCQUFXLEVBQUUsd0ZBQXdGLFlBQVk7Ozs7Ozs7Ozs7OztBQVloSyxRQUFPLGVBQWUsU0FBUyxjQUFjLEVBQUUsT0FBTyxNQUFNLENBQUM7QUFDN0QsU0FBUSw4QkFBOEI7QUFDdEMsU0FBUSw0QkFBNEI7QUFDcEMsU0FBUSxpQ0FBaUM7QUFDekMsU0FBUSwwQkFBMEI7QUFDbEMsU0FBUSwrQkFBK0I7Ozs7Q0FJdkMsU0FBUyw0QkFBNEIsT0FBTztBQUMzQyxNQUFJLEVBQUUsb0JBQW9CLFVBQVUsTUFBTSxzQkFBc0IsS0FBSyxFQUFHLFFBQU87QUFDL0UsTUFBSSxFQUFFLGtCQUFrQixVQUFVLE1BQU0sb0JBQW9CLEtBQUssRUFBRyxRQUFPO0FBQzNFLE1BQUksRUFBRSxlQUFlLFVBQVUsTUFBTSxpQkFBaUIsS0FBSyxFQUFHLFFBQU87QUFDckUsU0FBTzs7Q0FFUixTQUFTLDBCQUEwQixNQUFNO0FBQ3hDLFNBQU8sK0JBQStCLE1BQU0sTUFBTTs7Q0FFbkQsU0FBUywrQkFBK0IsTUFBTSxxQkFBcUI7QUFDbEUsTUFBSSxRQUFRLEtBQU0sUUFBTztBQUN6QixTQUFPO0dBQ04sa0JBQWtCLEtBQUs7R0FDdkIsZ0JBQWdCLEtBQUs7R0FDckIsYUFBYSxLQUFLO0dBQ2xCOztDQUVGLFNBQVMsd0JBQXdCLE1BQU07QUFDdEMsU0FBTyw2QkFBNkIsTUFBTSxNQUFNOztDQUVqRCxTQUFTLDZCQUE2QixPQUFPLHNCQUFzQixPQUFPO0FBQ3pFLE1BQUksU0FBUyxLQUFNLFFBQU87QUFDMUIsU0FBTztHQUNOLGtCQUFrQixNQUFNO0dBQ3hCLGdCQUFnQixNQUFNO0dBQ3RCLGFBQWEsTUFBTTtHQUNuQjs7SUFFQyxDQUFDO0FBSUwsSUFBSSxtQkFBbUMsMkJBQVcsRUFBRSwrRUFBK0UsWUFBWTs7Ozs7Ozs7Ozs7O0FBWTlJLFFBQU8sZUFBZSxTQUFTLGNBQWMsRUFBRSxPQUFPLE1BQU0sQ0FBQztBQUM3RCxTQUFRLFdBQVcsS0FBSztBQUN4QixTQUFRLHFCQUFxQjtBQUM3QixTQUFRLG1CQUFtQjtBQUMzQixTQUFRLHdCQUF3QjtBQUNoQyxTQUFRLGlCQUFpQjtBQUN6QixTQUFRLHNCQUFzQjs7Ozs7O0NBTTlCLElBQUk7QUFDSixFQUFDLFNBQVMsWUFBWTtBQUNyQixhQUFXLGdCQUFnQjtBQUMzQixhQUFXLGlCQUFpQjtJQUMxQixhQUFhLFFBQVEsV0FBVyxXQUFXLEVBQUUsRUFBRTtDQUNsRCxTQUFTLG1CQUFtQixPQUFPO0FBQ2xDLE9BQUssTUFBTSxPQUFPLFNBQVUsS0FBSSxPQUFPLFVBQVUsZUFBZSxLQUFLLFVBQVUsSUFBSSxFQUNsRjtPQUFJLFNBQVMsU0FBUyxNQUFPLFFBQU87O0FBRXJDLFNBQU87O0NBRVIsU0FBUyxpQkFBaUIsTUFBTTtBQUMvQixTQUFPLHNCQUFzQixNQUFNLE1BQU07O0NBRTFDLFNBQVMsc0JBQXNCLE1BQU0scUJBQXFCO0FBQ3pELFNBQU87O0NBRVIsU0FBUyxlQUFlLE9BQU87QUFDOUIsU0FBTzs7Q0FFUixTQUFTLG9CQUFvQixPQUFPLHFCQUFxQjtBQUN4RCxTQUFPOztJQUVMLENBQUM7QUFJTCxJQUFJLG1CQUFtQywyQkFBVyxFQUFFLCtFQUErRSxZQUFZOzs7Ozs7Ozs7Ozs7QUFZOUksUUFBTyxlQUFlLFNBQVMsY0FBYyxFQUFFLE9BQU8sTUFBTSxDQUFDO0FBQzdELFNBQVEscUJBQXFCO0FBQzdCLFNBQVEsbUJBQW1CO0FBQzNCLFNBQVEsd0JBQXdCO0FBQ2hDLFNBQVEsaUJBQWlCO0FBQ3pCLFNBQVEsc0JBQXNCO0NBQzlCLE1BQU0sZUFBZSxrQkFBa0I7Ozs7Q0FJdkMsU0FBUyxtQkFBbUIsT0FBTztBQUNsQyxNQUFJLEVBQUUsZUFBZSxVQUFVLE1BQU0saUJBQWlCLEtBQUssRUFBRyxRQUFPO0FBQ3JFLFNBQU87O0NBRVIsU0FBUyxpQkFBaUIsTUFBTTtBQUMvQixTQUFPLHNCQUFzQixNQUFNLE1BQU07O0NBRTFDLFNBQVMsc0JBQXNCLE1BQU0scUJBQXFCO0FBQ3pELE1BQUksUUFBUSxLQUFNLFFBQU87QUFDekIsU0FBTyxFQUFFLGNBQWMsR0FBRyxhQUFhLGtCQUFrQixLQUFLLGFBQWEsRUFBRTs7Q0FFOUUsU0FBUyxlQUFlLE1BQU07QUFDN0IsU0FBTyxvQkFBb0IsTUFBTSxNQUFNOztDQUV4QyxTQUFTLG9CQUFvQixPQUFPLHNCQUFzQixPQUFPO0FBQ2hFLE1BQUksU0FBUyxLQUFNLFFBQU87QUFDMUIsU0FBTyxFQUFFLGNBQWMsR0FBRyxhQUFhLGdCQUFnQixNQUFNLGFBQWEsRUFBRTs7SUFFMUUsQ0FBQztBQUlMLElBQUksa0JBQWtDLDJCQUFXLEVBQUUsOEVBQThFLFlBQVk7Ozs7Ozs7Ozs7OztBQVk1SSxRQUFPLGVBQWUsU0FBUyxjQUFjLEVBQUUsT0FBTyxNQUFNLENBQUM7QUFDN0QsU0FBUSxvQkFBb0IsUUFBUSxpQkFBaUIsS0FBSztBQUMxRCxTQUFRLG9CQUFvQjtBQUM1QixTQUFRLGtCQUFrQjtBQUMxQixTQUFRLHVCQUF1QjtBQUMvQixTQUFRLGdCQUFnQjtBQUN4QixTQUFRLHFCQUFxQjs7Ozs7Q0FLN0IsSUFBSTtBQUNKLEVBQUMsU0FBUyxrQkFBa0I7QUFDM0IsbUJBQWlCLFVBQVU7QUFDM0IsbUJBQWlCLFNBQVM7SUFDeEIsbUJBQW1CLFFBQVEsaUJBQWlCLGlCQUFpQixFQUFFLEVBQUU7Ozs7O0NBS3BFLElBQUk7QUFDSixFQUFDLFNBQVMscUJBQXFCO0FBQzlCLHNCQUFvQixVQUFVO0FBQzlCLHNCQUFvQixnQkFBZ0I7QUFDcEMsc0JBQW9CLFNBQVM7QUFDN0Isc0JBQW9CLFVBQVU7SUFDNUIsc0JBQXNCLFFBQVEsb0JBQW9CLG9CQUFvQixFQUFFLEVBQUU7Ozs7Q0FJN0UsU0FBUyxrQkFBa0IsT0FBTztBQUNqQyxNQUFJLEVBQUUsYUFBYSxVQUFVLE1BQU0sZUFBZSxLQUFLLEVBQUcsUUFBTztBQUNqRSxTQUFPOztDQUVSLFNBQVMsZ0JBQWdCLE1BQU07QUFDOUIsU0FBTyxxQkFBcUIsTUFBTSxNQUFNOztDQUV6QyxTQUFTLHFCQUFxQixNQUFNLHFCQUFxQjtBQUN4RCxNQUFJLFFBQVEsS0FBTSxRQUFPO0FBQ3pCLFNBQU87R0FDTixXQUFXLEtBQUssY0FBYyxPQUFPLEtBQUssSUFBSSxLQUFLO0dBQ25ELE9BQU8sS0FBSyxVQUFVLE9BQU8sS0FBSyxJQUFJLEtBQUs7R0FDM0MsVUFBVSxLQUFLLGFBQWEsT0FBTyxLQUFLLElBQUksS0FBSztHQUNqRCxrQkFBa0IsS0FBSyxxQkFBcUIsT0FBTyxLQUFLLElBQUksS0FBSztHQUNqRSxVQUFVLEtBQUssYUFBYSxPQUFPLEtBQUssSUFBSSxLQUFLO0dBQ2pELFdBQVcsS0FBSztHQUNoQjs7Q0FFRixTQUFTLGNBQWMsTUFBTTtBQUM1QixTQUFPLG1CQUFtQixNQUFNLE1BQU07O0NBRXZDLFNBQVMsbUJBQW1CLE9BQU8sc0JBQXNCLE9BQU87QUFDL0QsTUFBSSxTQUFTLEtBQU0sUUFBTztBQUMxQixTQUFPO0dBQ04sV0FBVyxNQUFNO0dBQ2pCLE9BQU8sTUFBTTtHQUNiLFVBQVUsTUFBTTtHQUNoQixrQkFBa0IsTUFBTTtHQUN4QixVQUFVLE1BQU07R0FDaEIsV0FBVyxNQUFNO0dBQ2pCOztJQUVDLENBQUM7QUFJTCxJQUFJLDZCQUE2QywyQkFBVyxFQUFFLHlGQUF5RixZQUFZOzs7Ozs7Ozs7Ozs7QUFZbEssUUFBTyxlQUFlLFNBQVMsY0FBYyxFQUFFLE9BQU8sTUFBTSxDQUFDO0FBQzdELFNBQVEscUJBQXFCLEtBQUs7QUFDbEMsU0FBUSwrQkFBK0I7QUFDdkMsU0FBUSw2QkFBNkI7QUFDckMsU0FBUSxrQ0FBa0M7QUFDMUMsU0FBUSwyQkFBMkI7QUFDbkMsU0FBUSxnQ0FBZ0M7Ozs7OztDQU14QyxJQUFJO0FBQ0osRUFBQyxTQUFTLHNCQUFzQjtBQUMvQix1QkFBcUIsVUFBVTtBQUMvQix1QkFBcUIsWUFBWTtBQUNqQyx1QkFBcUIsYUFBYTtBQUNsQyx1QkFBcUIsV0FBVztJQUM5Qix1QkFBdUIsUUFBUSxxQkFBcUIscUJBQXFCLEVBQUUsRUFBRTtDQUNoRixTQUFTLDZCQUE2QixPQUFPO0FBQzVDLE9BQUssTUFBTSxPQUFPLG1CQUFvQixLQUFJLE9BQU8sVUFBVSxlQUFlLEtBQUssb0JBQW9CLElBQUksRUFDdEc7T0FBSSxtQkFBbUIsU0FBUyxNQUFPLFFBQU87O0FBRS9DLFNBQU87O0NBRVIsU0FBUywyQkFBMkIsTUFBTTtBQUN6QyxTQUFPLGdDQUFnQyxNQUFNLE1BQU07O0NBRXBELFNBQVMsZ0NBQWdDLE1BQU0scUJBQXFCO0FBQ25FLFNBQU87O0NBRVIsU0FBUyx5QkFBeUIsT0FBTztBQUN4QyxTQUFPOztDQUVSLFNBQVMsOEJBQThCLE9BQU8scUJBQXFCO0FBQ2xFLFNBQU87O0lBRUwsQ0FBQztBQUlMLElBQUksb0NBQW9ELDJCQUFXLEVBQUUsZ0dBQWdHLFlBQVk7Ozs7Ozs7Ozs7OztBQVloTCxRQUFPLGVBQWUsU0FBUyxjQUFjLEVBQUUsT0FBTyxNQUFNLENBQUM7QUFDN0QsU0FBUSxzQ0FBc0M7QUFDOUMsU0FBUSxvQ0FBb0M7QUFDNUMsU0FBUSx5Q0FBeUM7QUFDakQsU0FBUSxrQ0FBa0M7QUFDMUMsU0FBUSx1Q0FBdUM7Q0FDL0MsTUFBTSw4QkFBOEIsaUNBQWlDOzs7O0NBSXJFLFNBQVMsb0NBQW9DLE9BQU87QUFDbkQsTUFBSSxFQUFFLFdBQVcsVUFBVSxNQUFNLGFBQWEsS0FBSyxFQUFHLFFBQU87QUFDN0QsTUFBSSxFQUFFLG9CQUFvQixVQUFVLE1BQU0sc0JBQXNCLEtBQUssRUFBRyxRQUFPO0FBQy9FLFNBQU87O0NBRVIsU0FBUyxrQ0FBa0MsTUFBTTtBQUNoRCxTQUFPLHVDQUF1QyxNQUFNLE1BQU07O0NBRTNELFNBQVMsdUNBQXVDLE1BQU0scUJBQXFCO0FBQzFFLE1BQUksUUFBUSxLQUFNLFFBQU87QUFDekIsU0FBTztHQUNOLDZCQUE2QixLQUFLLGdDQUFnQyxPQUFPLEtBQUssS0FBSyxHQUFHLDRCQUE0QixpQ0FBaUMsS0FBSyw2QkFBNkI7R0FDckwsU0FBUyxLQUFLO0dBQ2QsUUFBUSxLQUFLLFdBQVcsT0FBTyxLQUFLLElBQUksS0FBSztHQUM3QyxrQkFBa0IsS0FBSztHQUN2QixXQUFXLEtBQUssY0FBYyxPQUFPLEtBQUssSUFBSSxLQUFLO0dBQ25EOztDQUVGLFNBQVMsZ0NBQWdDLE1BQU07QUFDOUMsU0FBTyxxQ0FBcUMsTUFBTSxNQUFNOztDQUV6RCxTQUFTLHFDQUFxQyxPQUFPLHNCQUFzQixPQUFPO0FBQ2pGLE1BQUksU0FBUyxLQUFNLFFBQU87QUFDMUIsU0FBTztHQUNOLDhCQUE4QixHQUFHLDRCQUE0QiwrQkFBK0IsTUFBTSw2QkFBNkI7R0FDL0gsU0FBUyxNQUFNO0dBQ2YsUUFBUSxNQUFNO0dBQ2Qsa0JBQWtCLE1BQU07R0FDeEIsV0FBVyxNQUFNO0dBQ2pCOztJQUVDLENBQUM7QUFJTCxJQUFJLGtDQUFrRCwyQkFBVyxFQUFFLDhGQUE4RixZQUFZOzs7Ozs7Ozs7Ozs7QUFZNUssUUFBTyxlQUFlLFNBQVMsY0FBYyxFQUFFLE9BQU8sTUFBTSxDQUFDO0FBQzdELFNBQVEsb0NBQW9DO0FBQzVDLFNBQVEsa0NBQWtDO0FBQzFDLFNBQVEsdUNBQXVDO0FBQy9DLFNBQVEsZ0NBQWdDO0FBQ3hDLFNBQVEscUNBQXFDOzs7O0NBSTdDLFNBQVMsa0NBQWtDLE9BQU87QUFDakQsTUFBSSxFQUFFLGdCQUFnQixVQUFVLE1BQU0sa0JBQWtCLEtBQUssRUFBRyxRQUFPO0FBQ3ZFLE1BQUksRUFBRSxpQkFBaUIsVUFBVSxNQUFNLG1CQUFtQixLQUFLLEVBQUcsUUFBTztBQUN6RSxNQUFJLEVBQUUsUUFBUSxVQUFVLE1BQU0sVUFBVSxLQUFLLEVBQUcsUUFBTztBQUN2RCxNQUFJLEVBQUUsVUFBVSxVQUFVLE1BQU0sWUFBWSxLQUFLLEVBQUcsUUFBTztBQUMzRCxNQUFJLEVBQUUsWUFBWSxVQUFVLE1BQU0sY0FBYyxLQUFLLEVBQUcsUUFBTztBQUMvRCxTQUFPOztDQUVSLFNBQVMsZ0NBQWdDLE1BQU07QUFDOUMsU0FBTyxxQ0FBcUMsTUFBTSxNQUFNOztDQUV6RCxTQUFTLHFDQUFxQyxNQUFNLHFCQUFxQjtBQUN4RSxNQUFJLFFBQVEsS0FBTSxRQUFPO0FBQ3pCLFNBQU87R0FDTixjQUFjLElBQUksS0FBSyxLQUFLLGNBQWM7R0FDMUMsZUFBZSxLQUFLO0dBQ3BCLE1BQU0sS0FBSztHQUNYLFFBQVEsS0FBSztHQUNiLFVBQVUsS0FBSztHQUNmOztDQUVGLFNBQVMsOEJBQThCLE1BQU07QUFDNUMsU0FBTyxtQ0FBbUMsTUFBTSxNQUFNOztDQUV2RCxTQUFTLG1DQUFtQyxPQUFPLHNCQUFzQixPQUFPO0FBQy9FLE1BQUksU0FBUyxLQUFNLFFBQU87QUFDMUIsU0FBTztHQUNOLGNBQWMsTUFBTSxjQUFjLGFBQWE7R0FDL0MsZUFBZSxNQUFNO0dBQ3JCLE1BQU0sTUFBTTtHQUNaLFFBQVEsTUFBTTtHQUNkLFVBQVUsTUFBTTtHQUNoQjs7SUFFQyxDQUFDO0FBSUwsSUFBSSw4QkFBOEMsMkJBQVcsRUFBRSwwRkFBMEYsWUFBWTs7Ozs7Ozs7Ozs7O0FBWXBLLFFBQU8sZUFBZSxTQUFTLGNBQWMsRUFBRSxPQUFPLE1BQU0sQ0FBQztBQUM3RCxTQUFRLGdDQUFnQztBQUN4QyxTQUFRLDhCQUE4QjtBQUN0QyxTQUFRLG1DQUFtQztBQUMzQyxTQUFRLDRCQUE0QjtBQUNwQyxTQUFRLGlDQUFpQzs7OztDQUl6QyxTQUFTLDhCQUE4QixPQUFPO0FBQzdDLE1BQUksRUFBRSxXQUFXLFVBQVUsTUFBTSxhQUFhLEtBQUssRUFBRyxRQUFPO0FBQzdELE1BQUksRUFBRSxRQUFRLFVBQVUsTUFBTSxVQUFVLEtBQUssRUFBRyxRQUFPO0FBQ3ZELFNBQU87O0NBRVIsU0FBUyw0QkFBNEIsTUFBTTtBQUMxQyxTQUFPLGlDQUFpQyxNQUFNLE1BQU07O0NBRXJELFNBQVMsaUNBQWlDLE1BQU0scUJBQXFCO0FBQ3BFLE1BQUksUUFBUSxLQUFNLFFBQU87QUFDekIsU0FBTztHQUNOLFNBQVMsS0FBSztHQUNkLE1BQU0sS0FBSztHQUNYOztDQUVGLFNBQVMsMEJBQTBCLE1BQU07QUFDeEMsU0FBTywrQkFBK0IsTUFBTSxNQUFNOztDQUVuRCxTQUFTLCtCQUErQixPQUFPLHNCQUFzQixPQUFPO0FBQzNFLE1BQUksU0FBUyxLQUFNLFFBQU87QUFDMUIsU0FBTztHQUNOLFNBQVMsTUFBTTtHQUNmLE1BQU0sTUFBTTtHQUNaOztJQUVDLENBQUM7QUFJTCxJQUFJLHFDQUFxRCwyQkFBVyxFQUFFLGlHQUFpRyxZQUFZOzs7Ozs7Ozs7Ozs7QUFZbEwsUUFBTyxlQUFlLFNBQVMsY0FBYyxFQUFFLE9BQU8sTUFBTSxDQUFDO0FBQzdELFNBQVEsdUNBQXVDO0FBQy9DLFNBQVEscUNBQXFDO0FBQzdDLFNBQVEsMENBQTBDO0FBQ2xELFNBQVEsbUNBQW1DO0FBQzNDLFNBQVEsd0NBQXdDO0NBQ2hELE1BQU0sNEJBQTRCLGlDQUFpQztDQUNuRSxNQUFNLHdCQUF3Qiw2QkFBNkI7Ozs7Q0FJM0QsU0FBUyxxQ0FBcUMsT0FBTztBQUNwRCxNQUFJLEVBQUUsa0JBQWtCLFVBQVUsTUFBTSxvQkFBb0IsS0FBSyxFQUFHLFFBQU87QUFDM0UsTUFBSSxFQUFFLGNBQWMsVUFBVSxNQUFNLGdCQUFnQixLQUFLLEVBQUcsUUFBTztBQUNuRSxTQUFPOztDQUVSLFNBQVMsbUNBQW1DLE1BQU07QUFDakQsU0FBTyx3Q0FBd0MsTUFBTSxNQUFNOztDQUU1RCxTQUFTLHdDQUF3QyxNQUFNLHFCQUFxQjtBQUMzRSxNQUFJLFFBQVEsS0FBTSxRQUFPO0FBQ3pCLFNBQU87R0FDTixpQkFBaUIsR0FBRywwQkFBMEIsaUNBQWlDLEtBQUssZ0JBQWdCO0dBQ3BHLGFBQWEsR0FBRyxzQkFBc0IsNkJBQTZCLEtBQUssWUFBWTtHQUNwRjs7Q0FFRixTQUFTLGlDQUFpQyxNQUFNO0FBQy9DLFNBQU8sc0NBQXNDLE1BQU0sTUFBTTs7Q0FFMUQsU0FBUyxzQ0FBc0MsT0FBTyxzQkFBc0IsT0FBTztBQUNsRixNQUFJLFNBQVMsS0FBTSxRQUFPO0FBQzFCLFNBQU87R0FDTixpQkFBaUIsR0FBRywwQkFBMEIsK0JBQStCLE1BQU0sZ0JBQWdCO0dBQ25HLGFBQWEsR0FBRyxzQkFBc0IsMkJBQTJCLE1BQU0sWUFBWTtHQUNuRjs7SUFFQyxDQUFDO0FBSUwsSUFBSSxnQ0FBZ0QsMkJBQVcsRUFBRSw0RkFBNEYsWUFBWTs7Ozs7Ozs7Ozs7O0FBWXhLLFFBQU8sZUFBZSxTQUFTLGNBQWMsRUFBRSxPQUFPLE1BQU0sQ0FBQztBQUM3RCxTQUFRLGtDQUFrQztBQUMxQyxTQUFRLGdDQUFnQztBQUN4QyxTQUFRLHFDQUFxQztBQUM3QyxTQUFRLDhCQUE4QjtBQUN0QyxTQUFRLG1DQUFtQzs7OztDQUkzQyxTQUFTLGdDQUFnQyxPQUFPO0FBQy9DLE1BQUksRUFBRSxvQkFBb0IsVUFBVSxNQUFNLHNCQUFzQixLQUFLLEVBQUcsUUFBTztBQUMvRSxNQUFJLEVBQUUsa0JBQWtCLFVBQVUsTUFBTSxvQkFBb0IsS0FBSyxFQUFHLFFBQU87QUFDM0UsTUFBSSxFQUFFLFFBQVEsVUFBVSxNQUFNLFVBQVUsS0FBSyxFQUFHLFFBQU87QUFDdkQsTUFBSSxFQUFFLFVBQVUsVUFBVSxNQUFNLFlBQVksS0FBSyxFQUFHLFFBQU87QUFDM0QsU0FBTzs7Q0FFUixTQUFTLDhCQUE4QixNQUFNO0FBQzVDLFNBQU8sbUNBQW1DLE1BQU0sTUFBTTs7Q0FFdkQsU0FBUyxtQ0FBbUMsTUFBTSxxQkFBcUI7QUFDdEUsTUFBSSxRQUFRLEtBQU0sUUFBTztBQUN6QixTQUFPO0dBQ04sa0JBQWtCLEtBQUs7R0FDdkIsZ0JBQWdCLEtBQUs7R0FDckIsTUFBTSxLQUFLO0dBQ1gsUUFBUSxLQUFLO0dBQ2IsT0FBTyxLQUFLLFVBQVUsT0FBTyxLQUFLLElBQUksS0FBSztHQUMzQzs7Q0FFRixTQUFTLDRCQUE0QixNQUFNO0FBQzFDLFNBQU8saUNBQWlDLE1BQU0sTUFBTTs7Q0FFckQsU0FBUyxpQ0FBaUMsT0FBTyxzQkFBc0IsT0FBTztBQUM3RSxNQUFJLFNBQVMsS0FBTSxRQUFPO0FBQzFCLFNBQU87R0FDTixrQkFBa0IsTUFBTTtHQUN4QixnQkFBZ0IsTUFBTTtHQUN0QixNQUFNLE1BQU07R0FDWixRQUFRLE1BQU07R0FDZCxPQUFPLE1BQU07R0FDYjs7SUFFQyxDQUFDO0FBSUwsSUFBSSw2QkFBNkMsMkJBQVcsRUFBRSx5RkFBeUYsWUFBWTs7Ozs7Ozs7Ozs7O0FBWWxLLFFBQU8sZUFBZSxTQUFTLGNBQWMsRUFBRSxPQUFPLE1BQU0sQ0FBQztBQUM3RCxTQUFRLCtCQUErQjtBQUN2QyxTQUFRLDZCQUE2QjtBQUNyQyxTQUFRLGtDQUFrQztBQUMxQyxTQUFRLDJCQUEyQjtBQUNuQyxTQUFRLGdDQUFnQztDQUN4QyxNQUFNLDBCQUEwQiwrQkFBK0I7Ozs7Q0FJL0QsU0FBUyw2QkFBNkIsT0FBTztBQUM1QyxNQUFJLEVBQUUsVUFBVSxVQUFVLE1BQU0sWUFBWSxLQUFLLEVBQUcsUUFBTztBQUMzRCxNQUFJLEVBQUUsZ0JBQWdCLFVBQVUsTUFBTSxrQkFBa0IsS0FBSyxFQUFHLFFBQU87QUFDdkUsTUFBSSxFQUFFLGlCQUFpQixVQUFVLE1BQU0sbUJBQW1CLEtBQUssRUFBRyxRQUFPO0FBQ3pFLE1BQUksRUFBRSxlQUFlLFVBQVUsTUFBTSxpQkFBaUIsS0FBSyxFQUFHLFFBQU87QUFDckUsTUFBSSxFQUFFLFFBQVEsVUFBVSxNQUFNLFVBQVUsS0FBSyxFQUFHLFFBQU87QUFDdkQsTUFBSSxFQUFFLGNBQWMsVUFBVSxNQUFNLGdCQUFnQixLQUFLLEVBQUcsUUFBTztBQUNuRSxNQUFJLEVBQUUsMEJBQTBCLFVBQVUsTUFBTSw0QkFBNEIsS0FBSyxFQUFHLFFBQU87QUFDM0YsU0FBTzs7Q0FFUixTQUFTLDJCQUEyQixNQUFNO0FBQ3pDLFNBQU8sZ0NBQWdDLE1BQU0sTUFBTTs7Q0FFcEQsU0FBUyxnQ0FBZ0MsTUFBTSxxQkFBcUI7QUFDbkUsTUFBSSxRQUFRLEtBQU0sUUFBTztBQUN6QixTQUFPO0dBQ04sWUFBWSxLQUFLLGVBQWUsT0FBTyxLQUFLLElBQUksS0FBSztHQUNyRCxjQUFjLEtBQUssaUJBQWlCLE9BQU8sS0FBSyxJQUFJLEtBQUs7R0FDekQsZUFBZSxLQUFLLGtCQUFrQixPQUFPLEtBQUssSUFBSSxLQUFLLGVBQWUsSUFBSSx3QkFBd0IsOEJBQThCO0dBQ3BJLFFBQVEsS0FBSztHQUNiLGNBQWMsSUFBSSxLQUFLLEtBQUssY0FBYztHQUMxQyxlQUFlLEtBQUs7R0FDcEIsYUFBYSxLQUFLO0dBQ2xCLE1BQU0sS0FBSztHQUNYLFlBQVksS0FBSztHQUNqQix3QkFBd0IsS0FBSztHQUM3QixZQUFZLEtBQUssZUFBZSxPQUFPLEtBQUssSUFBSSxLQUFLO0dBQ3JEOztDQUVGLFNBQVMseUJBQXlCLE1BQU07QUFDdkMsU0FBTyw4QkFBOEIsTUFBTSxNQUFNOztDQUVsRCxTQUFTLDhCQUE4QixPQUFPLHNCQUFzQixPQUFPO0FBQzFFLE1BQUksU0FBUyxLQUFNLFFBQU87QUFDMUIsU0FBTztHQUNOLFlBQVksTUFBTTtHQUNsQixjQUFjLE1BQU07R0FDcEIsZUFBZSxNQUFNLGtCQUFrQixPQUFPLEtBQUssSUFBSSxNQUFNLGVBQWUsSUFBSSx3QkFBd0IsNEJBQTRCO0dBQ3BJLFFBQVEsTUFBTTtHQUNkLGNBQWMsTUFBTSxjQUFjLGFBQWE7R0FDL0MsZUFBZSxNQUFNO0dBQ3JCLGFBQWEsTUFBTTtHQUNuQixNQUFNLE1BQU07R0FDWixZQUFZLE1BQU07R0FDbEIsd0JBQXdCLE1BQU07R0FDOUIsWUFBWSxNQUFNO0dBQ2xCOztJQUVDLENBQUM7QUFJTCxJQUFJLDBDQUEwRCwyQkFBVyxFQUFFLHNHQUFzRyxZQUFZOzs7Ozs7Ozs7Ozs7QUFZNUwsUUFBTyxlQUFlLFNBQVMsY0FBYyxFQUFFLE9BQU8sTUFBTSxDQUFDO0FBQzdELFNBQVEsNENBQTRDO0FBQ3BELFNBQVEsMENBQTBDO0FBQ2xELFNBQVEsK0NBQStDO0FBQ3ZELFNBQVEsd0NBQXdDO0FBQ2hELFNBQVEsNkNBQTZDO0NBQ3JELE1BQU0seUJBQXlCLDRCQUE0QjtDQUMzRCxNQUFNLHVCQUF1Qiw0QkFBNEI7Ozs7Q0FJekQsU0FBUywwQ0FBMEMsT0FBTztBQUN6RCxNQUFJLEVBQUUsVUFBVSxVQUFVLE1BQU0sWUFBWSxLQUFLLEVBQUcsUUFBTztBQUMzRCxTQUFPOztDQUVSLFNBQVMsd0NBQXdDLE1BQU07QUFDdEQsU0FBTyw2Q0FBNkMsTUFBTSxNQUFNOztDQUVqRSxTQUFTLDZDQUE2QyxNQUFNLHFCQUFxQjtBQUNoRixNQUFJLFFBQVEsS0FBTSxRQUFPO0FBQ3pCLFNBQU87R0FDTix1QkFBdUIsS0FBSywwQkFBMEIsT0FBTyxLQUFLLEtBQUssR0FBRyxxQkFBcUIsNEJBQTRCLEtBQUssdUJBQXVCO0dBQ3ZKLFFBQVEsS0FBSyxRQUFRLElBQUksdUJBQXVCLDJCQUEyQjtHQUMzRSxhQUFhLEtBQUssZ0JBQWdCLE9BQU8sS0FBSyxJQUFJLEtBQUs7R0FDdkQsaUJBQWlCLEtBQUssb0JBQW9CLE9BQU8sS0FBSyxJQUFJLEtBQUs7R0FDL0Q7O0NBRUYsU0FBUyxzQ0FBc0MsTUFBTTtBQUNwRCxTQUFPLDJDQUEyQyxNQUFNLE1BQU07O0NBRS9ELFNBQVMsMkNBQTJDLE9BQU8sc0JBQXNCLE9BQU87QUFDdkYsTUFBSSxTQUFTLEtBQU0sUUFBTztBQUMxQixTQUFPO0dBQ04sd0JBQXdCLEdBQUcscUJBQXFCLDBCQUEwQixNQUFNLHVCQUF1QjtHQUN2RyxRQUFRLE1BQU0sUUFBUSxJQUFJLHVCQUF1Qix5QkFBeUI7R0FDMUUsYUFBYSxNQUFNO0dBQ25CLGlCQUFpQixNQUFNO0dBQ3ZCOztJQUVDLENBQUM7QUFJTCxJQUFJLHFCQUFxQywyQkFBVyxFQUFFLGlGQUFpRixZQUFZOzs7Ozs7Ozs7Ozs7QUFZbEosUUFBTyxlQUFlLFNBQVMsY0FBYyxFQUFFLE9BQU8sTUFBTSxDQUFDO0FBQzdELFNBQVEsdUJBQXVCO0FBQy9CLFNBQVEscUJBQXFCO0FBQzdCLFNBQVEsMEJBQTBCO0FBQ2xDLFNBQVEsbUJBQW1CO0FBQzNCLFNBQVEsd0JBQXdCO0NBQ2hDLE1BQU0sZUFBZSxrQkFBa0I7Ozs7Q0FJdkMsU0FBUyxxQkFBcUIsT0FBTztBQUNwQyxNQUFJLEVBQUUsZUFBZSxVQUFVLE1BQU0saUJBQWlCLEtBQUssRUFBRyxRQUFPO0FBQ3JFLFNBQU87O0NBRVIsU0FBUyxtQkFBbUIsTUFBTTtBQUNqQyxTQUFPLHdCQUF3QixNQUFNLE1BQU07O0NBRTVDLFNBQVMsd0JBQXdCLE1BQU0scUJBQXFCO0FBQzNELE1BQUksUUFBUSxLQUFNLFFBQU87QUFDekIsU0FBTyxFQUFFLGNBQWMsR0FBRyxhQUFhLGtCQUFrQixLQUFLLGFBQWEsRUFBRTs7Q0FFOUUsU0FBUyxpQkFBaUIsTUFBTTtBQUMvQixTQUFPLHNCQUFzQixNQUFNLE1BQU07O0NBRTFDLFNBQVMsc0JBQXNCLE9BQU8sc0JBQXNCLE9BQU87QUFDbEUsTUFBSSxTQUFTLEtBQU0sUUFBTztBQUMxQixTQUFPLEVBQUUsY0FBYyxHQUFHLGFBQWEsZ0JBQWdCLE1BQU0sYUFBYSxFQUFFOztJQUUxRSxDQUFDO0FBSUwsSUFBSSw2Q0FBNkQsMkJBQVcsRUFBRSx5R0FBeUcsWUFBWTs7Ozs7Ozs7Ozs7O0FBWWxNLFFBQU8sZUFBZSxTQUFTLGNBQWMsRUFBRSxPQUFPLE1BQU0sQ0FBQztBQUM3RCxTQUFRLDZDQUE2QztBQUNyRCxTQUFRLGtEQUFrRDtBQUMxRCxTQUFRLDJDQUEyQztBQUNuRCxTQUFRLGdEQUFnRDtDQUN4RCxNQUFNLGFBQWEsa0JBQWtCO0NBQ3JDLE1BQU0sZUFBZSxvQkFBb0I7Q0FDekMsU0FBUywyQ0FBMkMsTUFBTTtBQUN6RCxTQUFPLGdEQUFnRCxNQUFNLE1BQU07O0NBRXBFLFNBQVMsZ0RBQWdELE1BQU0scUJBQXFCO0FBQ25GLE1BQUksUUFBUSxLQUFNLFFBQU87QUFDekIsT0FBSyxHQUFHLFdBQVcsb0JBQW9CLEtBQUssQ0FBRSxTQUFRLEdBQUcsV0FBVyx1QkFBdUIsTUFBTSxLQUFLO0FBQ3RHLE9BQUssR0FBRyxhQUFhLHNCQUFzQixLQUFLLENBQUUsU0FBUSxHQUFHLGFBQWEseUJBQXlCLE1BQU0sS0FBSztBQUM5RyxTQUFPLEVBQUU7O0NBRVYsU0FBUyx5Q0FBeUMsTUFBTTtBQUN2RCxTQUFPLDhDQUE4QyxNQUFNLE1BQU07O0NBRWxFLFNBQVMsOENBQThDLE9BQU8sc0JBQXNCLE9BQU87QUFDMUYsTUFBSSxTQUFTLEtBQU0sUUFBTztBQUMxQixPQUFLLEdBQUcsV0FBVyxvQkFBb0IsTUFBTSxDQUFFLFNBQVEsR0FBRyxXQUFXLGdCQUFnQixNQUFNO0FBQzNGLE9BQUssR0FBRyxhQUFhLHNCQUFzQixNQUFNLENBQUUsU0FBUSxHQUFHLGFBQWEsa0JBQWtCLE1BQU07QUFDbkcsU0FBTyxFQUFFOztJQUVQLENBQUM7QUFJTCxJQUFJLGlDQUFpRCwyQkFBVyxFQUFFLDZGQUE2RixZQUFZOzs7Ozs7Ozs7Ozs7QUFZMUssUUFBTyxlQUFlLFNBQVMsY0FBYyxFQUFFLE9BQU8sTUFBTSxDQUFDO0FBQzdELFNBQVEsbUNBQW1DO0FBQzNDLFNBQVEsaUNBQWlDO0FBQ3pDLFNBQVEsc0NBQXNDO0FBQzlDLFNBQVEsK0JBQStCO0FBQ3ZDLFNBQVEsb0NBQW9DO0NBQzVDLE1BQU0sdUNBQXVDLDRDQUE0Qzs7OztDQUl6RixTQUFTLGlDQUFpQyxPQUFPO0FBQ2hELE1BQUksRUFBRSxZQUFZLFVBQVUsTUFBTSxjQUFjLEtBQUssRUFBRyxRQUFPO0FBQy9ELFNBQU87O0NBRVIsU0FBUywrQkFBK0IsTUFBTTtBQUM3QyxTQUFPLG9DQUFvQyxNQUFNLE1BQU07O0NBRXhELFNBQVMsb0NBQW9DLE1BQU0scUJBQXFCO0FBQ3ZFLE1BQUksUUFBUSxLQUFNLFFBQU87QUFDekIsU0FBTztHQUNOLGlCQUFpQixLQUFLLG9CQUFvQixPQUFPLEtBQUssS0FBSyxHQUFHLHFDQUFxQyw0Q0FBNEMsS0FBSyxpQkFBaUI7R0FDckssVUFBVSxLQUFLO0dBQ2Y7O0NBRUYsU0FBUyw2QkFBNkIsTUFBTTtBQUMzQyxTQUFPLGtDQUFrQyxNQUFNLE1BQU07O0NBRXRELFNBQVMsa0NBQWtDLE9BQU8sc0JBQXNCLE9BQU87QUFDOUUsTUFBSSxTQUFTLEtBQU0sUUFBTztBQUMxQixTQUFPO0dBQ04sa0JBQWtCLEdBQUcscUNBQXFDLDBDQUEwQyxNQUFNLGlCQUFpQjtHQUMzSCxVQUFVLE1BQU07R0FDaEI7O0lBRUMsQ0FBQztBQUlMLElBQUksa0NBQWtELDJCQUFXLEVBQUUsOEZBQThGLFlBQVk7Ozs7Ozs7Ozs7OztBQVk1SyxRQUFPLGVBQWUsU0FBUyxjQUFjLEVBQUUsT0FBTyxNQUFNLENBQUM7QUFDN0QsU0FBUSxvQ0FBb0M7QUFDNUMsU0FBUSxrQ0FBa0M7QUFDMUMsU0FBUSx1Q0FBdUM7QUFDL0MsU0FBUSxnQ0FBZ0M7QUFDeEMsU0FBUSxxQ0FBcUM7Q0FDN0MsTUFBTSxhQUFhLGtCQUFrQjs7OztDQUlyQyxTQUFTLGtDQUFrQyxPQUFPO0FBQ2pELE1BQUksRUFBRSxtQkFBbUIsVUFBVSxNQUFNLHFCQUFxQixLQUFLLEVBQUcsUUFBTztBQUM3RSxNQUFJLEVBQUUsc0JBQXNCLFVBQVUsTUFBTSx3QkFBd0IsS0FBSyxFQUFHLFFBQU87QUFDbkYsTUFBSSxFQUFFLGVBQWUsVUFBVSxNQUFNLGlCQUFpQixLQUFLLEVBQUcsUUFBTztBQUNyRSxTQUFPOztDQUVSLFNBQVMsZ0NBQWdDLE1BQU07QUFDOUMsU0FBTyxxQ0FBcUMsTUFBTSxNQUFNOztDQUV6RCxTQUFTLHFDQUFxQyxNQUFNLHFCQUFxQjtBQUN4RSxNQUFJLFFBQVEsS0FBTSxRQUFPO0FBQ3pCLFNBQU87R0FDTixpQkFBaUIsS0FBSztHQUN0QixvQkFBb0IsS0FBSztHQUN6QixjQUFjLEdBQUcsV0FBVyxrQkFBa0IsS0FBSyxhQUFhO0dBQ2hFOztDQUVGLFNBQVMsOEJBQThCLE1BQU07QUFDNUMsU0FBTyxtQ0FBbUMsTUFBTSxNQUFNOztDQUV2RCxTQUFTLG1DQUFtQyxPQUFPLHNCQUFzQixPQUFPO0FBQy9FLE1BQUksU0FBUyxLQUFNLFFBQU87QUFDMUIsU0FBTztHQUNOLGlCQUFpQixNQUFNO0dBQ3ZCLG9CQUFvQixNQUFNO0dBQzFCLGNBQWMsR0FBRyxXQUFXLGdCQUFnQixNQUFNLGFBQWE7R0FDL0Q7O0lBRUMsQ0FBQztBQUlMLElBQUksbUNBQW1ELDJCQUFXLEVBQUUsK0ZBQStGLFlBQVk7Ozs7Ozs7Ozs7OztBQVk5SyxRQUFPLGVBQWUsU0FBUyxjQUFjLEVBQUUsT0FBTyxNQUFNLENBQUM7QUFDN0QsU0FBUSwyQkFBMkIsS0FBSztBQUN4QyxTQUFRLHFDQUFxQztBQUM3QyxTQUFRLG1DQUFtQztBQUMzQyxTQUFRLHdDQUF3QztBQUNoRCxTQUFRLGlDQUFpQztBQUN6QyxTQUFRLHNDQUFzQzs7Ozs7O0NBTTlDLElBQUk7QUFDSixFQUFDLFNBQVMsNEJBQTRCO0FBQ3JDLDZCQUEyQix3QkFBd0I7QUFDbkQsNkJBQTJCLGNBQWM7QUFDekMsNkJBQTJCLGVBQWU7QUFDMUMsNkJBQTJCLGVBQWU7QUFDMUMsNkJBQTJCLGFBQWE7QUFDeEMsNkJBQTJCLGVBQWU7QUFDMUMsNkJBQTJCLGdCQUFnQjtBQUMzQyw2QkFBMkIsbUJBQW1CO0FBQzlDLDZCQUEyQixxQkFBcUI7QUFDaEQsNkJBQTJCLGtCQUFrQjtBQUM3Qyw2QkFBMkIseUJBQXlCO0FBQ3BELDZCQUEyQixtQkFBbUI7QUFDOUMsNkJBQTJCLHNCQUFzQjtBQUNqRCw2QkFBMkIsZUFBZTtBQUMxQyw2QkFBMkIsc0JBQXNCO0FBQ2pELDZCQUEyQixlQUFlO0FBQzFDLDZCQUEyQixpQkFBaUI7QUFDNUMsNkJBQTJCLGFBQWE7QUFDeEMsNkJBQTJCLFVBQVU7QUFDckMsNkJBQTJCLHlCQUF5QjtBQUNwRCw2QkFBMkIseUJBQXlCO0FBQ3BELDZCQUEyQixzQkFBc0I7QUFDakQsNkJBQTJCLGVBQWU7QUFDMUMsNkJBQTJCLGVBQWU7QUFDMUMsNkJBQTJCLGlCQUFpQjtJQUMxQyw2QkFBNkIsUUFBUSwyQkFBMkIsMkJBQTJCLEVBQUUsRUFBRTtDQUNsRyxTQUFTLG1DQUFtQyxPQUFPO0FBQ2xELE9BQUssTUFBTSxPQUFPLHlCQUEwQixLQUFJLE9BQU8sVUFBVSxlQUFlLEtBQUssMEJBQTBCLElBQUksRUFDbEg7T0FBSSx5QkFBeUIsU0FBUyxNQUFPLFFBQU87O0FBRXJELFNBQU87O0NBRVIsU0FBUyxpQ0FBaUMsTUFBTTtBQUMvQyxTQUFPLHNDQUFzQyxNQUFNLE1BQU07O0NBRTFELFNBQVMsc0NBQXNDLE1BQU0scUJBQXFCO0FBQ3pFLFNBQU87O0NBRVIsU0FBUywrQkFBK0IsT0FBTztBQUM5QyxTQUFPOztDQUVSLFNBQVMsb0NBQW9DLE9BQU8scUJBQXFCO0FBQ3hFLFNBQU87O0lBRUwsQ0FBQztBQUlMLElBQUksMkJBQTJDLDJCQUFXLEVBQUUsdUZBQXVGLFlBQVk7Ozs7Ozs7Ozs7OztBQVk5SixRQUFPLGVBQWUsU0FBUyxjQUFjLEVBQUUsT0FBTyxNQUFNLENBQUM7QUFDN0QsU0FBUSw2QkFBNkI7QUFDckMsU0FBUSwyQkFBMkI7QUFDbkMsU0FBUSxnQ0FBZ0M7QUFDeEMsU0FBUSx5QkFBeUI7QUFDakMsU0FBUSw4QkFBOEI7Ozs7Q0FJdEMsU0FBUywyQkFBMkIsT0FBTztBQUMxQyxTQUFPOztDQUVSLFNBQVMseUJBQXlCLE1BQU07QUFDdkMsU0FBTyw4QkFBOEIsTUFBTSxNQUFNOztDQUVsRCxTQUFTLDhCQUE4QixNQUFNLHFCQUFxQjtBQUNqRSxNQUFJLFFBQVEsS0FBTSxRQUFPO0FBQ3pCLFNBQU87R0FDTixjQUFjLEtBQUssaUJBQWlCLE9BQU8sS0FBSyxJQUFJLEtBQUs7R0FDekQsU0FBUyxLQUFLLFlBQVksT0FBTyxLQUFLLElBQUksS0FBSztHQUMvQyxtQkFBbUIsS0FBSyxzQkFBc0IsT0FBTyxLQUFLLElBQUksS0FBSztHQUNuRSxvQkFBb0IsS0FBSyx1QkFBdUIsT0FBTyxLQUFLLElBQUksS0FBSztHQUNyRSwwQkFBMEIsS0FBSyw2QkFBNkIsT0FBTyxLQUFLLElBQUksS0FBSztHQUNqRixRQUFRLEtBQUssV0FBVyxPQUFPLEtBQUssSUFBSSxLQUFLO0dBQzdDLFVBQVUsS0FBSyxhQUFhLE9BQU8sS0FBSyxJQUFJLEtBQUs7R0FDakQsNEJBQTRCLEtBQUssK0JBQStCLE9BQU8sS0FBSyxJQUFJLEtBQUs7R0FDckYsZUFBZSxLQUFLLGtCQUFrQixPQUFPLEtBQUssSUFBSSxLQUFLO0dBQzNELFNBQVMsS0FBSyxZQUFZLE9BQU8sS0FBSyxJQUFJLEtBQUs7R0FDL0M7O0NBRUYsU0FBUyx1QkFBdUIsTUFBTTtBQUNyQyxTQUFPLDRCQUE0QixNQUFNLE1BQU07O0NBRWhELFNBQVMsNEJBQTRCLE9BQU8sc0JBQXNCLE9BQU87QUFDeEUsTUFBSSxTQUFTLEtBQU0sUUFBTztBQUMxQixTQUFPO0dBQ04sY0FBYyxNQUFNO0dBQ3BCLFNBQVMsTUFBTTtHQUNmLG1CQUFtQixNQUFNO0dBQ3pCLG9CQUFvQixNQUFNO0dBQzFCLDBCQUEwQixNQUFNO0dBQ2hDLFFBQVEsTUFBTTtHQUNkLFVBQVUsTUFBTTtHQUNoQiw0QkFBNEIsTUFBTTtHQUNsQyxlQUFlLE1BQU07R0FDckIsU0FBUyxNQUFNO0dBQ2Y7O0lBRUMsQ0FBQztBQUlMLElBQUkseUNBQXlELDJCQUFXLEVBQUUscUdBQXFHLFlBQVk7Ozs7Ozs7Ozs7OztBQVkxTCxRQUFPLGVBQWUsU0FBUyxjQUFjLEVBQUUsT0FBTyxNQUFNLENBQUM7QUFDN0QsU0FBUSwyQ0FBMkM7QUFDbkQsU0FBUSx5Q0FBeUM7QUFDakQsU0FBUSw4Q0FBOEM7QUFDdEQsU0FBUSx1Q0FBdUM7QUFDL0MsU0FBUSw0Q0FBNEM7Q0FDcEQsTUFBTSw4QkFBOEIsaUNBQWlDOzs7O0NBSXJFLFNBQVMseUNBQXlDLE9BQU87QUFDeEQsTUFBSSxFQUFFLHFCQUFxQixVQUFVLE1BQU0sdUJBQXVCLEtBQUssRUFBRyxRQUFPO0FBQ2pGLFNBQU87O0NBRVIsU0FBUyx1Q0FBdUMsTUFBTTtBQUNyRCxTQUFPLDRDQUE0QyxNQUFNLE1BQU07O0NBRWhFLFNBQVMsNENBQTRDLE1BQU0scUJBQXFCO0FBQy9FLE1BQUksUUFBUSxLQUFNLFFBQU87QUFDekIsU0FBTztHQUNOLG1CQUFtQixLQUFLO0dBQ3hCLDZCQUE2QixLQUFLLGdDQUFnQyxPQUFPLEtBQUssS0FBSyxHQUFHLDRCQUE0QixpQ0FBaUMsS0FBSyw2QkFBNkI7R0FDckw7O0NBRUYsU0FBUyxxQ0FBcUMsTUFBTTtBQUNuRCxTQUFPLDBDQUEwQyxNQUFNLE1BQU07O0NBRTlELFNBQVMsMENBQTBDLE9BQU8sc0JBQXNCLE9BQU87QUFDdEYsTUFBSSxTQUFTLEtBQU0sUUFBTztBQUMxQixTQUFPO0dBQ04sbUJBQW1CLE1BQU07R0FDekIsOEJBQThCLEdBQUcsNEJBQTRCLCtCQUErQixNQUFNLDZCQUE2QjtHQUMvSDs7SUFFQyxDQUFDO0FBSUwsSUFBSSxpQ0FBaUQsMkJBQVcsRUFBRSw2RkFBNkYsWUFBWTs7Ozs7Ozs7Ozs7O0FBWTFLLFFBQU8sZUFBZSxTQUFTLGNBQWMsRUFBRSxPQUFPLE1BQU0sQ0FBQztBQUM3RCxTQUFRLG1DQUFtQztBQUMzQyxTQUFRLGlDQUFpQztBQUN6QyxTQUFRLHNDQUFzQztBQUM5QyxTQUFRLCtCQUErQjtBQUN2QyxTQUFRLG9DQUFvQztDQUM1QyxNQUFNLDhCQUE4QixpQ0FBaUM7Ozs7Q0FJckUsU0FBUyxpQ0FBaUMsT0FBTztBQUNoRCxTQUFPOztDQUVSLFNBQVMsK0JBQStCLE1BQU07QUFDN0MsU0FBTyxvQ0FBb0MsTUFBTSxNQUFNOztDQUV4RCxTQUFTLG9DQUFvQyxNQUFNLHFCQUFxQjtBQUN2RSxNQUFJLFFBQVEsS0FBTSxRQUFPO0FBQ3pCLFNBQU8sRUFBRSw2QkFBNkIsS0FBSyxnQ0FBZ0MsT0FBTyxLQUFLLEtBQUssR0FBRyw0QkFBNEIsaUNBQWlDLEtBQUssNkJBQTZCLEVBQUU7O0NBRWpNLFNBQVMsNkJBQTZCLE1BQU07QUFDM0MsU0FBTyxrQ0FBa0MsTUFBTSxNQUFNOztDQUV0RCxTQUFTLGtDQUFrQyxPQUFPLHNCQUFzQixPQUFPO0FBQzlFLE1BQUksU0FBUyxLQUFNLFFBQU87QUFDMUIsU0FBTyxFQUFFLDhCQUE4QixHQUFHLDRCQUE0QiwrQkFBK0IsTUFBTSw2QkFBNkIsRUFBRTs7SUFFeEksQ0FBQztBQUlMLElBQUksa0NBQWtELDJCQUFXLEVBQUUsOEZBQThGLFlBQVk7Ozs7Ozs7Ozs7OztBQVk1SyxRQUFPLGVBQWUsU0FBUyxjQUFjLEVBQUUsT0FBTyxNQUFNLENBQUM7QUFDN0QsU0FBUSxvQ0FBb0M7QUFDNUMsU0FBUSxrQ0FBa0M7QUFDMUMsU0FBUSx1Q0FBdUM7QUFDL0MsU0FBUSxnQ0FBZ0M7QUFDeEMsU0FBUSxxQ0FBcUM7Ozs7Q0FJN0MsU0FBUyxrQ0FBa0MsT0FBTztBQUNqRCxNQUFJLEVBQUUsdUJBQXVCLFVBQVUsTUFBTSx5QkFBeUIsS0FBSyxFQUFHLFFBQU87QUFDckYsU0FBTzs7Q0FFUixTQUFTLGdDQUFnQyxNQUFNO0FBQzlDLFNBQU8scUNBQXFDLE1BQU0sTUFBTTs7Q0FFekQsU0FBUyxxQ0FBcUMsTUFBTSxxQkFBcUI7QUFDeEUsTUFBSSxRQUFRLEtBQU0sUUFBTztBQUN6QixTQUFPO0dBQ04sV0FBVyxLQUFLLGNBQWMsT0FBTyxLQUFLLElBQUksS0FBSztHQUNuRCxxQkFBcUIsS0FBSztHQUMxQjs7Q0FFRixTQUFTLDhCQUE4QixNQUFNO0FBQzVDLFNBQU8sbUNBQW1DLE1BQU0sTUFBTTs7Q0FFdkQsU0FBUyxtQ0FBbUMsT0FBTyxzQkFBc0IsT0FBTztBQUMvRSxNQUFJLFNBQVMsS0FBTSxRQUFPO0FBQzFCLFNBQU87R0FDTixXQUFXLE1BQU07R0FDakIscUJBQXFCLE1BQU07R0FDM0I7O0lBRUMsQ0FBQztBQUlMLElBQUkscUJBQXFDLDJCQUFXLEVBQUUsaUZBQWlGLFlBQVk7Ozs7Ozs7Ozs7OztBQVlsSixRQUFPLGVBQWUsU0FBUyxjQUFjLEVBQUUsT0FBTyxNQUFNLENBQUM7QUFDN0QsU0FBUSx1QkFBdUI7QUFDL0IsU0FBUSxxQkFBcUI7QUFDN0IsU0FBUSwwQkFBMEI7QUFDbEMsU0FBUSxtQkFBbUI7QUFDM0IsU0FBUSx3QkFBd0I7Ozs7Q0FJaEMsU0FBUyxxQkFBcUIsT0FBTztBQUNwQyxNQUFJLEVBQUUsV0FBVyxVQUFVLE1BQU0sYUFBYSxLQUFLLEVBQUcsUUFBTztBQUM3RCxNQUFJLEVBQUUsV0FBVyxVQUFVLE1BQU0sYUFBYSxLQUFLLEVBQUcsUUFBTztBQUM3RCxTQUFPOztDQUVSLFNBQVMsbUJBQW1CLE1BQU07QUFDakMsU0FBTyx3QkFBd0IsTUFBTSxNQUFNOztDQUU1QyxTQUFTLHdCQUF3QixNQUFNLHFCQUFxQjtBQUMzRCxNQUFJLFFBQVEsS0FBTSxRQUFPO0FBQ3pCLFNBQU87R0FDTixTQUFTLEtBQUs7R0FDZCxTQUFTLEtBQUs7R0FDZDs7Q0FFRixTQUFTLGlCQUFpQixNQUFNO0FBQy9CLFNBQU8sc0JBQXNCLE1BQU0sTUFBTTs7Q0FFMUMsU0FBUyxzQkFBc0IsT0FBTyxzQkFBc0IsT0FBTztBQUNsRSxNQUFJLFNBQVMsS0FBTSxRQUFPO0FBQzFCLFNBQU87R0FDTixTQUFTLE1BQU07R0FDZixTQUFTLE1BQU07R0FDZjs7SUFFQyxDQUFDO0FBSUwsSUFBSSw0QkFBNEMsMkJBQVcsRUFBRSx3RkFBd0YsWUFBWTs7Ozs7Ozs7Ozs7O0FBWWhLLFFBQU8sZUFBZSxTQUFTLGNBQWMsRUFBRSxPQUFPLE1BQU0sQ0FBQztBQUM3RCxTQUFRLG9CQUFvQixLQUFLO0FBQ2pDLFNBQVEsOEJBQThCO0FBQ3RDLFNBQVEsNEJBQTRCO0FBQ3BDLFNBQVEsaUNBQWlDO0FBQ3pDLFNBQVEsMEJBQTBCO0FBQ2xDLFNBQVEsK0JBQStCOzs7Ozs7Q0FNdkMsSUFBSTtBQUNKLEVBQUMsU0FBUyxxQkFBcUI7QUFDOUIsc0JBQW9CLGVBQWU7QUFDbkMsc0JBQW9CLFlBQVk7QUFDaEMsc0JBQW9CLHVCQUF1QjtBQUMzQyxzQkFBb0IsZ0JBQWdCO0FBQ3BDLHNCQUFvQixpQkFBaUI7QUFDckMsc0JBQW9CLGNBQWM7QUFDbEMsc0JBQW9CLGNBQWM7QUFDbEMsc0JBQW9CLGVBQWU7QUFDbkMsc0JBQW9CLGdCQUFnQjtBQUNwQyxzQkFBb0IsZUFBZTtBQUNuQyxzQkFBb0IsbUJBQW1CO0lBQ3JDLHNCQUFzQixRQUFRLG9CQUFvQixvQkFBb0IsRUFBRSxFQUFFO0NBQzdFLFNBQVMsNEJBQTRCLE9BQU87QUFDM0MsT0FBSyxNQUFNLE9BQU8sa0JBQW1CLEtBQUksT0FBTyxVQUFVLGVBQWUsS0FBSyxtQkFBbUIsSUFBSSxFQUNwRztPQUFJLGtCQUFrQixTQUFTLE1BQU8sUUFBTzs7QUFFOUMsU0FBTzs7Q0FFUixTQUFTLDBCQUEwQixNQUFNO0FBQ3hDLFNBQU8sK0JBQStCLE1BQU0sTUFBTTs7Q0FFbkQsU0FBUywrQkFBK0IsTUFBTSxxQkFBcUI7QUFDbEUsU0FBTzs7Q0FFUixTQUFTLHdCQUF3QixPQUFPO0FBQ3ZDLFNBQU87O0NBRVIsU0FBUyw2QkFBNkIsT0FBTyxxQkFBcUI7QUFDakUsU0FBTzs7SUFFTCxDQUFDO0FBSUwsSUFBSSx3QkFBd0MsMkJBQVcsRUFBRSxvRkFBb0YsWUFBWTs7Ozs7Ozs7Ozs7O0FBWXhKLFFBQU8sZUFBZSxTQUFTLGNBQWMsRUFBRSxPQUFPLE1BQU0sQ0FBQztBQUM3RCxTQUFRLDBCQUEwQjtBQUNsQyxTQUFRLHdCQUF3QjtBQUNoQyxTQUFRLDZCQUE2QjtBQUNyQyxTQUFRLHNCQUFzQjtBQUM5QixTQUFRLDJCQUEyQjs7OztDQUluQyxTQUFTLHdCQUF3QixPQUFPO0FBQ3ZDLE1BQUksRUFBRSxnQkFBZ0IsVUFBVSxNQUFNLGtCQUFrQixLQUFLLEVBQUcsUUFBTztBQUN2RSxTQUFPOztDQUVSLFNBQVMsc0JBQXNCLE1BQU07QUFDcEMsU0FBTywyQkFBMkIsTUFBTSxNQUFNOztDQUUvQyxTQUFTLDJCQUEyQixNQUFNLHFCQUFxQjtBQUM5RCxNQUFJLFFBQVEsS0FBTSxRQUFPO0FBQ3pCLFNBQU87R0FDTixxQkFBcUIsS0FBSyx3QkFBd0IsT0FBTyxLQUFLLElBQUksS0FBSztHQUN2RSxjQUFjLEtBQUs7R0FDbkIsT0FBTyxLQUFLLFVBQVUsT0FBTyxLQUFLLElBQUksS0FBSztHQUMzQzs7Q0FFRixTQUFTLG9CQUFvQixNQUFNO0FBQ2xDLFNBQU8seUJBQXlCLE1BQU0sTUFBTTs7Q0FFN0MsU0FBUyx5QkFBeUIsT0FBTyxzQkFBc0IsT0FBTztBQUNyRSxNQUFJLFNBQVMsS0FBTSxRQUFPO0FBQzFCLFNBQU87R0FDTixxQkFBcUIsTUFBTTtHQUMzQixjQUFjLE1BQU07R0FDcEIsT0FBTyxNQUFNO0dBQ2I7O0lBRUMsQ0FBQztBQUlMLElBQUksK0JBQStDLDJCQUFXLEVBQUUsMkZBQTJGLFlBQVk7Ozs7Ozs7Ozs7OztBQVl0SyxRQUFPLGVBQWUsU0FBUyxjQUFjLEVBQUUsT0FBTyxNQUFNLENBQUM7QUFDN0QsU0FBUSx1QkFBdUIsS0FBSztBQUNwQyxTQUFRLGlDQUFpQztBQUN6QyxTQUFRLCtCQUErQjtBQUN2QyxTQUFRLG9DQUFvQztBQUM1QyxTQUFRLDZCQUE2QjtBQUNyQyxTQUFRLGtDQUFrQzs7Ozs7O0NBTTFDLElBQUk7QUFDSixFQUFDLFNBQVMsd0JBQXdCO0FBQ2pDLHlCQUF1QixTQUFTO0FBQ2hDLHlCQUF1QixRQUFRO0lBQzdCLHlCQUF5QixRQUFRLHVCQUF1Qix1QkFBdUIsRUFBRSxFQUFFO0NBQ3RGLFNBQVMsK0JBQStCLE9BQU87QUFDOUMsT0FBSyxNQUFNLE9BQU8scUJBQXNCLEtBQUksT0FBTyxVQUFVLGVBQWUsS0FBSyxzQkFBc0IsSUFBSSxFQUMxRztPQUFJLHFCQUFxQixTQUFTLE1BQU8sUUFBTzs7QUFFakQsU0FBTzs7Q0FFUixTQUFTLDZCQUE2QixNQUFNO0FBQzNDLFNBQU8sa0NBQWtDLE1BQU0sTUFBTTs7Q0FFdEQsU0FBUyxrQ0FBa0MsTUFBTSxxQkFBcUI7QUFDckUsU0FBTzs7Q0FFUixTQUFTLDJCQUEyQixPQUFPO0FBQzFDLFNBQU87O0NBRVIsU0FBUyxnQ0FBZ0MsT0FBTyxxQkFBcUI7QUFDcEUsU0FBTzs7SUFFTCxDQUFDO0FBSUwsSUFBSSwwQkFBMEMsMkJBQVcsRUFBRSxzRkFBc0YsWUFBWTs7Ozs7Ozs7Ozs7O0FBWTVKLFFBQU8sZUFBZSxTQUFTLGNBQWMsRUFBRSxPQUFPLE1BQU0sQ0FBQztBQUM3RCxTQUFRLDRCQUE0QjtBQUNwQyxTQUFRLDBCQUEwQjtBQUNsQyxTQUFRLCtCQUErQjtBQUN2QyxTQUFRLHdCQUF3QjtBQUNoQyxTQUFRLDZCQUE2Qjs7OztDQUlyQyxTQUFTLDBCQUEwQixPQUFPO0FBQ3pDLE1BQUksRUFBRSxRQUFRLFVBQVUsTUFBTSxVQUFVLEtBQUssRUFBRyxRQUFPO0FBQ3ZELFNBQU87O0NBRVIsU0FBUyx3QkFBd0IsTUFBTTtBQUN0QyxTQUFPLDZCQUE2QixNQUFNLE1BQU07O0NBRWpELFNBQVMsNkJBQTZCLE1BQU0scUJBQXFCO0FBQ2hFLE1BQUksUUFBUSxLQUFNLFFBQU87QUFDekIsU0FBTyxFQUFFLE1BQU0sS0FBSyxPQUFPOztDQUU1QixTQUFTLHNCQUFzQixNQUFNO0FBQ3BDLFNBQU8sMkJBQTJCLE1BQU0sTUFBTTs7Q0FFL0MsU0FBUywyQkFBMkIsT0FBTyxzQkFBc0IsT0FBTztBQUN2RSxNQUFJLFNBQVMsS0FBTSxRQUFPO0FBQzFCLFNBQU8sRUFBRSxNQUFNLE1BQU0sT0FBTzs7SUFFMUIsQ0FBQztBQUlMLElBQUksMkJBQTJDLDJCQUFXLEVBQUUsdUZBQXVGLFlBQVk7Ozs7Ozs7Ozs7OztBQVk5SixRQUFPLGVBQWUsU0FBUyxjQUFjLEVBQUUsT0FBTyxNQUFNLENBQUM7QUFDN0QsU0FBUSw2QkFBNkI7QUFDckMsU0FBUSwyQkFBMkI7QUFDbkMsU0FBUSxnQ0FBZ0M7QUFDeEMsU0FBUSx5QkFBeUI7QUFDakMsU0FBUSw4QkFBOEI7Ozs7Q0FJdEMsU0FBUywyQkFBMkIsT0FBTztBQUMxQyxNQUFJLEVBQUUsU0FBUyxVQUFVLE1BQU0sV0FBVyxLQUFLLEVBQUcsUUFBTztBQUN6RCxTQUFPOztDQUVSLFNBQVMseUJBQXlCLE1BQU07QUFDdkMsU0FBTyw4QkFBOEIsTUFBTSxNQUFNOztDQUVsRCxTQUFTLDhCQUE4QixNQUFNLHFCQUFxQjtBQUNqRSxNQUFJLFFBQVEsS0FBTSxRQUFPO0FBQ3pCLFNBQU8sRUFBRSxPQUFPLEtBQUssUUFBUTs7Q0FFOUIsU0FBUyx1QkFBdUIsTUFBTTtBQUNyQyxTQUFPLDRCQUE0QixNQUFNLE1BQU07O0NBRWhELFNBQVMsNEJBQTRCLE9BQU8sc0JBQXNCLE9BQU87QUFDeEUsTUFBSSxTQUFTLEtBQU0sUUFBTztBQUMxQixTQUFPLEVBQUUsT0FBTyxNQUFNLFFBQVE7O0lBRTVCLENBQUM7QUFJTCxJQUFJLGtDQUFrRCwyQkFBVyxFQUFFLDhGQUE4RixZQUFZOzs7Ozs7Ozs7Ozs7QUFZNUssUUFBTyxlQUFlLFNBQVMsY0FBYyxFQUFFLE9BQU8sTUFBTSxDQUFDO0FBQzdELFNBQVEsa0NBQWtDO0FBQzFDLFNBQVEsdUNBQXVDO0FBQy9DLFNBQVEsZ0NBQWdDO0FBQ3hDLFNBQVEscUNBQXFDO0NBQzdDLE1BQU0sb0JBQW9CLHlCQUF5QjtDQUNuRCxNQUFNLHFCQUFxQiwwQkFBMEI7Q0FDckQsU0FBUyxnQ0FBZ0MsTUFBTTtBQUM5QyxTQUFPLHFDQUFxQyxNQUFNLE1BQU07O0NBRXpELFNBQVMscUNBQXFDLE1BQU0scUJBQXFCO0FBQ3hFLE1BQUksUUFBUSxLQUFNLFFBQU87QUFDekIsT0FBSyxHQUFHLGtCQUFrQiwyQkFBMkIsS0FBSyxDQUFFLFNBQVEsR0FBRyxrQkFBa0IsOEJBQThCLE1BQU0sS0FBSztBQUNsSSxPQUFLLEdBQUcsbUJBQW1CLDRCQUE0QixLQUFLLENBQUUsU0FBUSxHQUFHLG1CQUFtQiwrQkFBK0IsTUFBTSxLQUFLO0FBQ3RJLFNBQU8sRUFBRTs7Q0FFVixTQUFTLDhCQUE4QixNQUFNO0FBQzVDLFNBQU8sbUNBQW1DLE1BQU0sTUFBTTs7Q0FFdkQsU0FBUyxtQ0FBbUMsT0FBTyxzQkFBc0IsT0FBTztBQUMvRSxNQUFJLFNBQVMsS0FBTSxRQUFPO0FBQzFCLE9BQUssR0FBRyxrQkFBa0IsMkJBQTJCLE1BQU0sQ0FBRSxTQUFRLEdBQUcsa0JBQWtCLHVCQUF1QixNQUFNO0FBQ3ZILE9BQUssR0FBRyxtQkFBbUIsNEJBQTRCLE1BQU0sQ0FBRSxTQUFRLEdBQUcsbUJBQW1CLHdCQUF3QixNQUFNO0FBQzNILFNBQU8sRUFBRTs7SUFFUCxDQUFDO0FBSUwsSUFBSSx3QkFBd0MsMkJBQVcsRUFBRSxvRkFBb0YsWUFBWTs7Ozs7Ozs7Ozs7O0FBWXhKLFFBQU8sZUFBZSxTQUFTLGNBQWMsRUFBRSxPQUFPLE1BQU0sQ0FBQztBQUM3RCxTQUFRLDBCQUEwQjtBQUNsQyxTQUFRLHdCQUF3QjtBQUNoQyxTQUFRLDZCQUE2QjtBQUNyQyxTQUFRLHNCQUFzQjtBQUM5QixTQUFRLDJCQUEyQjtDQUNuQyxNQUFNLHlCQUF5Qiw4QkFBOEI7Q0FDN0QsTUFBTSw0QkFBNEIsaUNBQWlDOzs7O0NBSW5FLFNBQVMsd0JBQXdCLE9BQU87QUFDdkMsTUFBSSxFQUFFLGdCQUFnQixVQUFVLE1BQU0sa0JBQWtCLEtBQUssRUFBRyxRQUFPO0FBQ3ZFLE1BQUksRUFBRSxjQUFjLFVBQVUsTUFBTSxnQkFBZ0IsS0FBSyxFQUFHLFFBQU87QUFDbkUsU0FBTzs7Q0FFUixTQUFTLHNCQUFzQixNQUFNO0FBQ3BDLFNBQU8sMkJBQTJCLE1BQU0sTUFBTTs7Q0FFL0MsU0FBUywyQkFBMkIsTUFBTSxxQkFBcUI7QUFDOUQsTUFBSSxRQUFRLEtBQU0sUUFBTztBQUN6QixTQUFPO0dBQ04sZUFBZSxHQUFHLDBCQUEwQixpQ0FBaUMsS0FBSyxjQUFjO0dBQ2hHLGFBQWEsR0FBRyx1QkFBdUIsOEJBQThCLEtBQUssWUFBWTtHQUN0Rjs7Q0FFRixTQUFTLG9CQUFvQixNQUFNO0FBQ2xDLFNBQU8seUJBQXlCLE1BQU0sTUFBTTs7Q0FFN0MsU0FBUyx5QkFBeUIsT0FBTyxzQkFBc0IsT0FBTztBQUNyRSxNQUFJLFNBQVMsS0FBTSxRQUFPO0FBQzFCLFNBQU87R0FDTixlQUFlLEdBQUcsMEJBQTBCLCtCQUErQixNQUFNLGNBQWM7R0FDL0YsYUFBYSxHQUFHLHVCQUF1Qiw0QkFBNEIsTUFBTSxZQUFZO0dBQ3JGOztJQUVDLENBQUM7QUFJTCxJQUFJLDRCQUE0QywyQkFBVyxFQUFFLHdGQUF3RixZQUFZOzs7Ozs7Ozs7Ozs7QUFZaEssUUFBTyxlQUFlLFNBQVMsY0FBYyxFQUFFLE9BQU8sTUFBTSxDQUFDO0FBQzdELFNBQVEsb0JBQW9CLEtBQUs7QUFDakMsU0FBUSw4QkFBOEI7QUFDdEMsU0FBUSw0QkFBNEI7QUFDcEMsU0FBUSxpQ0FBaUM7QUFDekMsU0FBUSwwQkFBMEI7QUFDbEMsU0FBUSwrQkFBK0I7Ozs7OztDQU12QyxJQUFJO0FBQ0osRUFBQyxTQUFTLHFCQUFxQjtBQUM5QixzQkFBb0IsVUFBVTtBQUM5QixzQkFBb0IsY0FBYztBQUNsQyxzQkFBb0IsV0FBVztBQUMvQixzQkFBb0IsaUJBQWlCO0FBQ3JDLHNCQUFvQixZQUFZO0lBQzlCLHdCQUF3QixRQUFRLG9CQUFvQixzQkFBc0IsRUFBRSxFQUFFO0NBQ2pGLFNBQVMsNEJBQTRCLE9BQU87QUFDM0MsT0FBSyxNQUFNLE9BQU8sb0JBQXFCLEtBQUksT0FBTyxVQUFVLGVBQWUsS0FBSyxxQkFBcUIsSUFBSSxFQUN4RztPQUFJLG9CQUFvQixTQUFTLE1BQU8sUUFBTzs7QUFFaEQsU0FBTzs7Q0FFUixTQUFTLDBCQUEwQixNQUFNO0FBQ3hDLFNBQU8sK0JBQStCLE1BQU0sTUFBTTs7Q0FFbkQsU0FBUywrQkFBK0IsTUFBTSxxQkFBcUI7QUFDbEUsU0FBTzs7Q0FFUixTQUFTLHdCQUF3QixPQUFPO0FBQ3ZDLFNBQU87O0NBRVIsU0FBUyw2QkFBNkIsT0FBTyxxQkFBcUI7QUFDakUsU0FBTzs7SUFFTCxDQUFDO0FBSUwsSUFBSSw4QkFBOEMsMkJBQVcsRUFBRSwwRkFBMEYsWUFBWTs7Ozs7Ozs7Ozs7O0FBWXBLLFFBQU8sZUFBZSxTQUFTLGNBQWMsRUFBRSxPQUFPLE1BQU0sQ0FBQztBQUM3RCxTQUFRLGdDQUFnQztBQUN4QyxTQUFRLDhCQUE4QjtBQUN0QyxTQUFRLG1DQUFtQztBQUMzQyxTQUFRLDRCQUE0QjtBQUNwQyxTQUFRLGlDQUFpQztDQUN6QyxNQUFNLHNCQUFzQiwyQkFBMkI7Ozs7Q0FJdkQsU0FBUyw4QkFBOEIsT0FBTztBQUM3QyxNQUFJLEVBQUUseUJBQXlCLFVBQVUsTUFBTSwyQkFBMkIsS0FBSyxFQUFHLFFBQU87QUFDekYsTUFBSSxFQUFFLFNBQVMsVUFBVSxNQUFNLFdBQVcsS0FBSyxFQUFHLFFBQU87QUFDekQsU0FBTzs7Q0FFUixTQUFTLDRCQUE0QixNQUFNO0FBQzFDLFNBQU8saUNBQWlDLE1BQU0sTUFBTTs7Q0FFckQsU0FBUyxpQ0FBaUMsTUFBTSxxQkFBcUI7QUFDcEUsTUFBSSxRQUFRLEtBQU0sUUFBTztBQUN6QixTQUFPO0dBQ04sd0JBQXdCLEdBQUcsb0JBQW9CLDJCQUEyQixLQUFLLHVCQUF1QjtHQUN0RyxPQUFPLEtBQUs7R0FDWjs7Q0FFRixTQUFTLDBCQUEwQixNQUFNO0FBQ3hDLFNBQU8sK0JBQStCLE1BQU0sTUFBTTs7Q0FFbkQsU0FBUywrQkFBK0IsT0FBTyxzQkFBc0IsT0FBTztBQUMzRSxNQUFJLFNBQVMsS0FBTSxRQUFPO0FBQzFCLFNBQU87R0FDTix3QkFBd0IsR0FBRyxvQkFBb0IseUJBQXlCLE1BQU0sdUJBQXVCO0dBQ3JHLE9BQU8sTUFBTTtHQUNiOztJQUVDLENBQUM7QUFJTCxJQUFJLCtCQUErQywyQkFBVyxFQUFFLDJGQUEyRixZQUFZOzs7Ozs7Ozs7Ozs7QUFZdEssUUFBTyxlQUFlLFNBQVMsY0FBYyxFQUFFLE9BQU8sTUFBTSxDQUFDO0FBQzdELFNBQVEsaUNBQWlDO0FBQ3pDLFNBQVEsK0JBQStCO0FBQ3ZDLFNBQVEsb0NBQW9DO0FBQzVDLFNBQVEsNkJBQTZCO0FBQ3JDLFNBQVEsa0NBQWtDOzs7O0NBSTFDLFNBQVMsK0JBQStCLE9BQU87QUFDOUMsTUFBSSxFQUFFLFdBQVcsVUFBVSxNQUFNLGFBQWEsS0FBSyxFQUFHLFFBQU87QUFDN0QsU0FBTzs7Q0FFUixTQUFTLDZCQUE2QixNQUFNO0FBQzNDLFNBQU8sa0NBQWtDLE1BQU0sTUFBTTs7Q0FFdEQsU0FBUyxrQ0FBa0MsTUFBTSxxQkFBcUI7QUFDckUsTUFBSSxRQUFRLEtBQU0sUUFBTztBQUN6QixTQUFPLEVBQUUsU0FBUyxLQUFLLFVBQVU7O0NBRWxDLFNBQVMsMkJBQTJCLE1BQU07QUFDekMsU0FBTyxnQ0FBZ0MsTUFBTSxNQUFNOztDQUVwRCxTQUFTLGdDQUFnQyxPQUFPLHNCQUFzQixPQUFPO0FBQzVFLE1BQUksU0FBUyxLQUFNLFFBQU87QUFDMUIsU0FBTyxFQUFFLFNBQVMsTUFBTSxVQUFVOztJQUVoQyxDQUFDO0FBSUwsSUFBSSwyQkFBMkMsMkJBQVcsRUFBRSx1RkFBdUYsWUFBWTs7Ozs7Ozs7Ozs7O0FBWTlKLFFBQU8sZUFBZSxTQUFTLGNBQWMsRUFBRSxPQUFPLE1BQU0sQ0FBQztBQUM3RCxTQUFRLDZCQUE2QjtBQUNyQyxTQUFRLDJCQUEyQjtBQUNuQyxTQUFRLGdDQUFnQztBQUN4QyxTQUFRLHlCQUF5QjtBQUNqQyxTQUFRLDhCQUE4Qjs7OztDQUl0QyxTQUFTLDJCQUEyQixPQUFPO0FBQzFDLE1BQUksRUFBRSxpQkFBaUIsVUFBVSxNQUFNLG1CQUFtQixLQUFLLEVBQUcsUUFBTztBQUN6RSxTQUFPOztDQUVSLFNBQVMseUJBQXlCLE1BQU07QUFDdkMsU0FBTyw4QkFBOEIsTUFBTSxNQUFNOztDQUVsRCxTQUFTLDhCQUE4QixNQUFNLHFCQUFxQjtBQUNqRSxNQUFJLFFBQVEsS0FBTSxRQUFPO0FBQ3pCLFNBQU87R0FDTixlQUFlLEtBQUs7R0FDcEIsb0JBQW9CLEtBQUssdUJBQXVCLE9BQU8sS0FBSyxJQUFJLEtBQUs7R0FDckU7O0NBRUYsU0FBUyx1QkFBdUIsTUFBTTtBQUNyQyxTQUFPLDRCQUE0QixNQUFNLE1BQU07O0NBRWhELFNBQVMsNEJBQTRCLE9BQU8sc0JBQXNCLE9BQU87QUFDeEUsTUFBSSxTQUFTLEtBQU0sUUFBTztBQUMxQixTQUFPO0dBQ04sZUFBZSxNQUFNO0dBQ3JCLG9CQUFvQixNQUFNO0dBQzFCOztJQUVDLENBQUM7QUFJTCxJQUFJLHNDQUFzRCwyQkFBVyxFQUFFLGtHQUFrRyxZQUFZOzs7Ozs7Ozs7Ozs7QUFZcEwsUUFBTyxlQUFlLFNBQVMsY0FBYyxFQUFFLE9BQU8sTUFBTSxDQUFDO0FBQzdELFNBQVEsd0NBQXdDO0FBQ2hELFNBQVEsc0NBQXNDO0FBQzlDLFNBQVEsMkNBQTJDO0FBQ25ELFNBQVEsb0NBQW9DO0FBQzVDLFNBQVEseUNBQXlDOzs7O0NBSWpELFNBQVMsc0NBQXNDLE9BQU87QUFDckQsTUFBSSxFQUFFLG1CQUFtQixVQUFVLE1BQU0scUJBQXFCLEtBQUssRUFBRyxRQUFPO0FBQzdFLFNBQU87O0NBRVIsU0FBUyxvQ0FBb0MsTUFBTTtBQUNsRCxTQUFPLHlDQUF5QyxNQUFNLE1BQU07O0NBRTdELFNBQVMseUNBQXlDLE1BQU0scUJBQXFCO0FBQzVFLE1BQUksUUFBUSxLQUFNLFFBQU87QUFDekIsU0FBTyxFQUFFLGlCQUFpQixLQUFLLGtCQUFrQjs7Q0FFbEQsU0FBUyxrQ0FBa0MsTUFBTTtBQUNoRCxTQUFPLHVDQUF1QyxNQUFNLE1BQU07O0NBRTNELFNBQVMsdUNBQXVDLE9BQU8sc0JBQXNCLE9BQU87QUFDbkYsTUFBSSxTQUFTLEtBQU0sUUFBTztBQUMxQixTQUFPLEVBQUUsaUJBQWlCLE1BQU0sa0JBQWtCOztJQUVoRCxDQUFDO0FBSUwsSUFBSSw4QkFBOEMsMkJBQVcsRUFBRSwwRkFBMEYsWUFBWTs7Ozs7Ozs7Ozs7O0FBWXBLLFFBQU8sZUFBZSxTQUFTLGNBQWMsRUFBRSxPQUFPLE1BQU0sQ0FBQztBQUM3RCxTQUFRLDhCQUE4QjtBQUN0QyxTQUFRLG1DQUFtQztBQUMzQyxTQUFRLDRCQUE0QjtBQUNwQyxTQUFRLGlDQUFpQztDQUN6QyxNQUFNLDRCQUE0QixpQ0FBaUM7Q0FDbkUsTUFBTSxvQkFBb0IsdUJBQXVCO0NBQ2pELE1BQU0sb0JBQW9CLHVCQUF1QjtDQUNqRCxNQUFNLHdCQUF3Qiw2QkFBNkI7Q0FDM0QsTUFBTSx5QkFBeUIsOEJBQThCO0NBQzdELE1BQU0scUJBQXFCLDBCQUEwQjtDQUNyRCxNQUFNLGdDQUFnQyxxQ0FBcUM7Q0FDM0UsU0FBUyw0QkFBNEIsTUFBTTtBQUMxQyxTQUFPLGlDQUFpQyxNQUFNLE1BQU07O0NBRXJELFNBQVMsaUNBQWlDLE1BQU0scUJBQXFCO0FBQ3BFLE1BQUksUUFBUSxLQUFNLFFBQU87QUFDekIsT0FBSyxHQUFHLDBCQUEwQixtQ0FBbUMsS0FBSyxDQUFFLFNBQVEsR0FBRywwQkFBMEIsc0NBQXNDLE1BQU0sS0FBSztBQUNsSyxPQUFLLEdBQUcsa0JBQWtCLHlCQUF5QixLQUFLLENBQUUsU0FBUSxHQUFHLGtCQUFrQiw0QkFBNEIsTUFBTSxLQUFLO0FBQzlILE9BQUssR0FBRyxrQkFBa0IseUJBQXlCLEtBQUssQ0FBRSxTQUFRLEdBQUcsa0JBQWtCLDRCQUE0QixNQUFNLEtBQUs7QUFDOUgsT0FBSyxHQUFHLHNCQUFzQiwrQkFBK0IsS0FBSyxDQUFFLFNBQVEsR0FBRyxzQkFBc0Isa0NBQWtDLE1BQU0sS0FBSztBQUNsSixPQUFLLEdBQUcsdUJBQXVCLGdDQUFnQyxLQUFLLENBQUUsU0FBUSxHQUFHLHVCQUF1QixtQ0FBbUMsTUFBTSxLQUFLO0FBQ3RKLE9BQUssR0FBRyxtQkFBbUIsNEJBQTRCLEtBQUssQ0FBRSxTQUFRLEdBQUcsbUJBQW1CLCtCQUErQixNQUFNLEtBQUs7QUFDdEksT0FBSyxHQUFHLDhCQUE4Qix1Q0FBdUMsS0FBSyxDQUFFLFNBQVEsR0FBRyw4QkFBOEIsMENBQTBDLE1BQU0sS0FBSztBQUNsTCxTQUFPLEVBQUU7O0NBRVYsU0FBUywwQkFBMEIsTUFBTTtBQUN4QyxTQUFPLCtCQUErQixNQUFNLE1BQU07O0NBRW5ELFNBQVMsK0JBQStCLE9BQU8sc0JBQXNCLE9BQU87QUFDM0UsTUFBSSxTQUFTLEtBQU0sUUFBTztBQUMxQixPQUFLLEdBQUcsMEJBQTBCLG1DQUFtQyxNQUFNLENBQUUsU0FBUSxHQUFHLDBCQUEwQiwrQkFBK0IsTUFBTTtBQUN2SixPQUFLLEdBQUcsa0JBQWtCLHlCQUF5QixNQUFNLENBQUUsU0FBUSxHQUFHLGtCQUFrQixxQkFBcUIsTUFBTTtBQUNuSCxPQUFLLEdBQUcsa0JBQWtCLHlCQUF5QixNQUFNLENBQUUsU0FBUSxHQUFHLGtCQUFrQixxQkFBcUIsTUFBTTtBQUNuSCxPQUFLLEdBQUcsc0JBQXNCLCtCQUErQixNQUFNLENBQUUsU0FBUSxHQUFHLHNCQUFzQiwyQkFBMkIsTUFBTTtBQUN2SSxPQUFLLEdBQUcsdUJBQXVCLGdDQUFnQyxNQUFNLENBQUUsU0FBUSxHQUFHLHVCQUF1Qiw0QkFBNEIsTUFBTTtBQUMzSSxPQUFLLEdBQUcsbUJBQW1CLDRCQUE0QixNQUFNLENBQUUsU0FBUSxHQUFHLG1CQUFtQix3QkFBd0IsTUFBTTtBQUMzSCxPQUFLLEdBQUcsOEJBQThCLHVDQUF1QyxNQUFNLENBQUUsU0FBUSxHQUFHLDhCQUE4QixtQ0FBbUMsTUFBTTtBQUN2SyxTQUFPLEVBQUU7O0lBRVAsQ0FBQztBQUlMLElBQUksb0JBQW9DLDJCQUFXLEVBQUUsZ0ZBQWdGLFlBQVk7Ozs7Ozs7Ozs7OztBQVloSixRQUFPLGVBQWUsU0FBUyxjQUFjLEVBQUUsT0FBTyxNQUFNLENBQUM7QUFDN0QsU0FBUSxzQkFBc0I7QUFDOUIsU0FBUSxvQkFBb0I7QUFDNUIsU0FBUSx5QkFBeUI7QUFDakMsU0FBUSxrQkFBa0I7QUFDMUIsU0FBUSx1QkFBdUI7Q0FDL0IsTUFBTSxzQkFBc0IsMkJBQTJCO0NBQ3ZELE1BQU0sd0JBQXdCLDZCQUE2Qjs7OztDQUkzRCxTQUFTLG9CQUFvQixPQUFPO0FBQ25DLE1BQUksRUFBRSxjQUFjLFVBQVUsTUFBTSxnQkFBZ0IsS0FBSyxFQUFHLFFBQU87QUFDbkUsTUFBSSxFQUFFLGdCQUFnQixVQUFVLE1BQU0sa0JBQWtCLEtBQUssRUFBRyxRQUFPO0FBQ3ZFLE1BQUksRUFBRSxjQUFjLFVBQVUsTUFBTSxnQkFBZ0IsS0FBSyxFQUFHLFFBQU87QUFDbkUsU0FBTzs7Q0FFUixTQUFTLGtCQUFrQixNQUFNO0FBQ2hDLFNBQU8sdUJBQXVCLE1BQU0sTUFBTTs7Q0FFM0MsU0FBUyx1QkFBdUIsTUFBTSxxQkFBcUI7QUFDMUQsTUFBSSxRQUFRLEtBQU0sUUFBTztBQUN6QixTQUFPO0dBQ04sY0FBYyxLQUFLLGlCQUFpQixPQUFPLEtBQUssS0FBSyxHQUFHLHNCQUFzQiw2QkFBNkIsS0FBSyxjQUFjO0dBQzlILGFBQWEsR0FBRyxvQkFBb0IsMkJBQTJCLEtBQUssWUFBWTtHQUNoRixjQUFjLEtBQUs7R0FDbkIsWUFBWSxLQUFLO0dBQ2pCOztDQUVGLFNBQVMsZ0JBQWdCLE1BQU07QUFDOUIsU0FBTyxxQkFBcUIsTUFBTSxNQUFNOztDQUV6QyxTQUFTLHFCQUFxQixPQUFPLHNCQUFzQixPQUFPO0FBQ2pFLE1BQUksU0FBUyxLQUFNLFFBQU87QUFDMUIsU0FBTztHQUNOLGVBQWUsR0FBRyxzQkFBc0IsMkJBQTJCLE1BQU0sY0FBYztHQUN2RixhQUFhLEdBQUcsb0JBQW9CLHlCQUF5QixNQUFNLFlBQVk7R0FDL0UsY0FBYyxNQUFNO0dBQ3BCLFlBQVksTUFBTTtHQUNsQjs7SUFFQyxDQUFDO0FBSUwsSUFBSSw2QkFBNkMsMkJBQVcsRUFBRSx5RkFBeUYsWUFBWTs7Ozs7Ozs7Ozs7O0FBWWxLLFFBQU8sZUFBZSxTQUFTLGNBQWMsRUFBRSxPQUFPLE1BQU0sQ0FBQztBQUM3RCxTQUFRLCtCQUErQjtBQUN2QyxTQUFRLDZCQUE2QjtBQUNyQyxTQUFRLGtDQUFrQztBQUMxQyxTQUFRLDJCQUEyQjtBQUNuQyxTQUFRLGdDQUFnQztDQUN4QyxNQUFNLGNBQWMsaUJBQWlCO0NBQ3JDLE1BQU0scUJBQXFCLDBCQUEwQjtDQUNyRCxNQUFNLGdCQUFnQixtQkFBbUI7Ozs7Q0FJekMsU0FBUyw2QkFBNkIsT0FBTztBQUM1QyxNQUFJLEVBQUUsYUFBYSxVQUFVLE1BQU0sZUFBZSxLQUFLLEVBQUcsUUFBTztBQUNqRSxNQUFJLEVBQUUsUUFBUSxVQUFVLE1BQU0sVUFBVSxLQUFLLEVBQUcsUUFBTztBQUN2RCxTQUFPOztDQUVSLFNBQVMsMkJBQTJCLE1BQU07QUFDekMsU0FBTyxnQ0FBZ0MsTUFBTSxNQUFNOztDQUVwRCxTQUFTLGdDQUFnQyxNQUFNLHFCQUFxQjtBQUNuRSxNQUFJLFFBQVEsS0FBTSxRQUFPO0FBQ3pCLFNBQU87R0FDTixZQUFZLEdBQUcsWUFBWSxpQkFBaUIsS0FBSyxXQUFXO0dBQzVELGlCQUFpQixLQUFLLG9CQUFvQixPQUFPLEtBQUssSUFBSSxLQUFLO0dBQy9ELHFCQUFxQixLQUFLLHdCQUF3QixPQUFPLEtBQUssS0FBSyxHQUFHLG1CQUFtQiwwQkFBMEIsS0FBSyxxQkFBcUI7R0FDN0ksTUFBTSxLQUFLO0dBQ1gsMkJBQTJCLEtBQUssOEJBQThCLE9BQU8sS0FBSyxJQUFJLEtBQUs7R0FDbkYsZUFBZSxLQUFLLGtCQUFrQixPQUFPLEtBQUssSUFBSSxLQUFLLGVBQWUsSUFBSSxjQUFjLGtCQUFrQjtHQUM5Rzs7Q0FFRixTQUFTLHlCQUF5QixNQUFNO0FBQ3ZDLFNBQU8sOEJBQThCLE1BQU0sTUFBTTs7Q0FFbEQsU0FBUyw4QkFBOEIsT0FBTyxzQkFBc0IsT0FBTztBQUMxRSxNQUFJLFNBQVMsS0FBTSxRQUFPO0FBQzFCLFNBQU87R0FDTixZQUFZLEdBQUcsWUFBWSxlQUFlLE1BQU0sV0FBVztHQUMzRCxpQkFBaUIsTUFBTTtHQUN2QixzQkFBc0IsR0FBRyxtQkFBbUIsd0JBQXdCLE1BQU0scUJBQXFCO0dBQy9GLE1BQU0sTUFBTTtHQUNaLDJCQUEyQixNQUFNO0dBQ2pDLGVBQWUsTUFBTSxrQkFBa0IsT0FBTyxLQUFLLElBQUksTUFBTSxlQUFlLElBQUksY0FBYyxnQkFBZ0I7R0FDOUc7O0lBRUMsQ0FBQztBQUlMLElBQUksd0JBQXdDLDJCQUFXLEVBQUUsb0ZBQW9GLFlBQVk7Ozs7Ozs7Ozs7OztBQVl4SixRQUFPLGVBQWUsU0FBUyxjQUFjLEVBQUUsT0FBTyxNQUFNLENBQUM7QUFDN0QsU0FBUSwwQkFBMEI7QUFDbEMsU0FBUSx3QkFBd0I7QUFDaEMsU0FBUSw2QkFBNkI7QUFDckMsU0FBUSxzQkFBc0I7QUFDOUIsU0FBUSwyQkFBMkI7Ozs7Q0FJbkMsU0FBUyx3QkFBd0IsT0FBTztBQUN2QyxNQUFJLEVBQUUsZ0JBQWdCLFVBQVUsTUFBTSxrQkFBa0IsS0FBSyxFQUFHLFFBQU87QUFDdkUsTUFBSSxFQUFFLG1CQUFtQixVQUFVLE1BQU0scUJBQXFCLEtBQUssRUFBRyxRQUFPO0FBQzdFLE1BQUksRUFBRSxnQkFBZ0IsVUFBVSxNQUFNLGtCQUFrQixLQUFLLEVBQUcsUUFBTztBQUN2RSxNQUFJLEVBQUUsbUJBQW1CLFVBQVUsTUFBTSxxQkFBcUIsS0FBSyxFQUFHLFFBQU87QUFDN0UsU0FBTzs7Q0FFUixTQUFTLHNCQUFzQixNQUFNO0FBQ3BDLFNBQU8sMkJBQTJCLE1BQU0sTUFBTTs7Q0FFL0MsU0FBUywyQkFBMkIsTUFBTSxxQkFBcUI7QUFDOUQsTUFBSSxRQUFRLEtBQU0sUUFBTztBQUN6QixTQUFPO0dBQ04sZ0JBQWdCLEtBQUssbUJBQW1CLE9BQU8sS0FBSyxJQUFJLElBQUksS0FBSyxLQUFLLGdCQUFnQjtHQUN0Rix5QkFBeUIsS0FBSyw0QkFBNEIsT0FBTyxLQUFLLElBQUksSUFBSSxLQUFLLEtBQUsseUJBQXlCO0dBQ2pILDhCQUE4QixLQUFLLGlDQUFpQyxPQUFPLEtBQUssSUFBSSxLQUFLO0dBQ3pGLFNBQVMsS0FBSyxZQUFZLE9BQU8sS0FBSyxJQUFJLEtBQUs7R0FDL0MsaUJBQWlCLEtBQUssb0JBQW9CLE9BQU8sS0FBSyxJQUFJLElBQUksS0FBSyxLQUFLLGlCQUFpQjtHQUN6RixjQUFjLEtBQUs7R0FDbkIsaUJBQWlCLEtBQUs7R0FDdEIsY0FBYyxLQUFLO0dBQ25CLGlCQUFpQixLQUFLO0dBQ3RCLGdCQUFnQixLQUFLLG1CQUFtQixPQUFPLEtBQUssSUFBSSxLQUFLO0dBQzdEOztDQUVGLFNBQVMsb0JBQW9CLE1BQU07QUFDbEMsU0FBTyx5QkFBeUIsTUFBTSxNQUFNOztDQUU3QyxTQUFTLHlCQUF5QixPQUFPLHNCQUFzQixPQUFPO0FBQ3JFLE1BQUksU0FBUyxLQUFNLFFBQU87QUFDMUIsU0FBTztHQUNOLGdCQUFnQixNQUFNLG1CQUFtQixPQUFPLEtBQUssSUFBSSxNQUFNLGdCQUFnQixhQUFhO0dBQzVGLHlCQUF5QixNQUFNLDRCQUE0QixPQUFPLEtBQUssSUFBSSxNQUFNLHlCQUF5QixhQUFhO0dBQ3ZILDhCQUE4QixNQUFNO0dBQ3BDLFNBQVMsTUFBTTtHQUNmLGlCQUFpQixNQUFNLG9CQUFvQixPQUFPLEtBQUssSUFBSSxNQUFNLGlCQUFpQixhQUFhO0dBQy9GLGNBQWMsTUFBTTtHQUNwQixpQkFBaUIsTUFBTTtHQUN2QixjQUFjLE1BQU07R0FDcEIsaUJBQWlCLE1BQU07R0FDdkIsZ0JBQWdCLE1BQU07R0FDdEI7O0lBRUMsQ0FBQztBQUlMLElBQUksa0NBQWtELDJCQUFXLEVBQUUsOEZBQThGLFlBQVk7Ozs7Ozs7Ozs7OztBQVk1SyxRQUFPLGVBQWUsU0FBUyxjQUFjLEVBQUUsT0FBTyxNQUFNLENBQUM7QUFDN0QsU0FBUSxvQ0FBb0M7QUFDNUMsU0FBUSxrQ0FBa0M7QUFDMUMsU0FBUSx1Q0FBdUM7QUFDL0MsU0FBUSxnQ0FBZ0M7QUFDeEMsU0FBUSxxQ0FBcUM7Q0FDN0MsTUFBTSxrQkFBa0IsdUJBQXVCOzs7O0NBSS9DLFNBQVMsa0NBQWtDLE9BQU87QUFDakQsTUFBSSxFQUFFLGdCQUFnQixVQUFVLE1BQU0sa0JBQWtCLEtBQUssRUFBRyxRQUFPO0FBQ3ZFLE1BQUksRUFBRSx1QkFBdUIsVUFBVSxNQUFNLHlCQUF5QixLQUFLLEVBQUcsUUFBTztBQUNyRixNQUFJLEVBQUUsZ0JBQWdCLFVBQVUsTUFBTSxrQkFBa0IsS0FBSyxFQUFHLFFBQU87QUFDdkUsTUFBSSxFQUFFLGNBQWMsVUFBVSxNQUFNLGdCQUFnQixLQUFLLEVBQUcsUUFBTztBQUNuRSxNQUFJLEVBQUUsa0JBQWtCLFVBQVUsTUFBTSxvQkFBb0IsS0FBSyxFQUFHLFFBQU87QUFDM0UsU0FBTzs7Q0FFUixTQUFTLGdDQUFnQyxNQUFNO0FBQzlDLFNBQU8scUNBQXFDLE1BQU0sTUFBTTs7Q0FFekQsU0FBUyxxQ0FBcUMsTUFBTSxxQkFBcUI7QUFDeEUsTUFBSSxRQUFRLEtBQU0sUUFBTztBQUN6QixTQUFPO0dBQ04sY0FBYyxJQUFJLEtBQUssS0FBSyxjQUFjO0dBQzFDLHFCQUFxQixJQUFJLEtBQUssS0FBSyxxQkFBcUI7R0FDeEQsY0FBYyxLQUFLLGNBQWMsSUFBSSxnQkFBZ0Isc0JBQXNCO0dBQzNFLFlBQVksS0FBSztHQUNqQixnQkFBZ0IsS0FBSztHQUNyQjs7Q0FFRixTQUFTLDhCQUE4QixNQUFNO0FBQzVDLFNBQU8sbUNBQW1DLE1BQU0sTUFBTTs7Q0FFdkQsU0FBUyxtQ0FBbUMsT0FBTyxzQkFBc0IsT0FBTztBQUMvRSxNQUFJLFNBQVMsS0FBTSxRQUFPO0FBQzFCLFNBQU87R0FDTixjQUFjLE1BQU0sY0FBYyxhQUFhO0dBQy9DLHFCQUFxQixNQUFNLHFCQUFxQixhQUFhO0dBQzdELGNBQWMsTUFBTSxjQUFjLElBQUksZ0JBQWdCLG9CQUFvQjtHQUMxRSxZQUFZLE1BQU07R0FDbEIsZ0JBQWdCLE1BQU07R0FDdEI7O0lBRUMsQ0FBQztBQUlMLElBQUksdUJBQXVDLDJCQUFXLEVBQUUsbUZBQW1GLFlBQVk7Ozs7Ozs7Ozs7OztBQVl0SixRQUFPLGVBQWUsU0FBUyxjQUFjLEVBQUUsT0FBTyxNQUFNLENBQUM7QUFDN0QsU0FBUSx5QkFBeUIsS0FBSztBQUN0QyxTQUFRLHlCQUF5QjtBQUNqQyxTQUFRLHVCQUF1QjtBQUMvQixTQUFRLDRCQUE0QjtBQUNwQyxTQUFRLHFCQUFxQjtBQUM3QixTQUFRLDBCQUEwQjs7Ozs7Q0FLbEMsSUFBSTtBQUNKLEVBQUMsU0FBUywwQkFBMEI7QUFDbkMsMkJBQXlCLFlBQVk7QUFDckMsMkJBQXlCLGNBQWM7SUFDckMsMkJBQTJCLFFBQVEseUJBQXlCLHlCQUF5QixFQUFFLEVBQUU7Ozs7Q0FJNUYsU0FBUyx1QkFBdUIsT0FBTztBQUN0QyxNQUFJLEVBQUUsa0JBQWtCLFVBQVUsTUFBTSxvQkFBb0IsS0FBSyxFQUFHLFFBQU87QUFDM0UsTUFBSSxFQUFFLFlBQVksVUFBVSxNQUFNLGNBQWMsS0FBSyxFQUFHLFFBQU87QUFDL0QsTUFBSSxFQUFFLFFBQVEsVUFBVSxNQUFNLFVBQVUsS0FBSyxFQUFHLFFBQU87QUFDdkQsTUFBSSxFQUFFLGdCQUFnQixVQUFVLE1BQU0sa0JBQWtCLEtBQUssRUFBRyxRQUFPO0FBQ3ZFLE1BQUksRUFBRSxZQUFZLFVBQVUsTUFBTSxjQUFjLEtBQUssRUFBRyxRQUFPO0FBQy9ELFNBQU87O0NBRVIsU0FBUyxxQkFBcUIsTUFBTTtBQUNuQyxTQUFPLDBCQUEwQixNQUFNLE1BQU07O0NBRTlDLFNBQVMsMEJBQTBCLE1BQU0scUJBQXFCO0FBQzdELE1BQUksUUFBUSxLQUFNLFFBQU87QUFDekIsU0FBTztHQUNOLGNBQWMsS0FBSyxpQkFBaUIsT0FBTyxLQUFLLElBQUksSUFBSSxLQUFLLEtBQUssY0FBYztHQUNoRixnQkFBZ0IsS0FBSztHQUNyQixVQUFVLEtBQUs7R0FDZixNQUFNLEtBQUs7R0FDWCxjQUFjLEtBQUs7R0FDbkIsVUFBVSxLQUFLO0dBQ2YsY0FBYyxLQUFLLGlCQUFpQixPQUFPLEtBQUssSUFBSSxJQUFJLEtBQUssS0FBSyxjQUFjO0dBQ2hGOztDQUVGLFNBQVMsbUJBQW1CLE1BQU07QUFDakMsU0FBTyx3QkFBd0IsTUFBTSxNQUFNOztDQUU1QyxTQUFTLHdCQUF3QixPQUFPLHNCQUFzQixPQUFPO0FBQ3BFLE1BQUksU0FBUyxLQUFNLFFBQU87QUFDMUIsU0FBTztHQUNOLGNBQWMsTUFBTSxpQkFBaUIsT0FBTyxLQUFLLElBQUksTUFBTSxjQUFjLGFBQWE7R0FDdEYsZ0JBQWdCLE1BQU07R0FDdEIsVUFBVSxNQUFNO0dBQ2hCLE1BQU0sTUFBTTtHQUNaLGNBQWMsTUFBTTtHQUNwQixVQUFVLE1BQU07R0FDaEIsY0FBYyxNQUFNLGlCQUFpQixPQUFPLEtBQUssSUFBSSxNQUFNLGNBQWMsYUFBYTtHQUN0Rjs7SUFFQyxDQUFDO0FBSUwsSUFBSSw2QkFBNkMsMkJBQVcsRUFBRSx5RkFBeUYsWUFBWTs7Ozs7Ozs7Ozs7O0FBWWxLLFFBQU8sZUFBZSxTQUFTLGNBQWMsRUFBRSxPQUFPLE1BQU0sQ0FBQztBQUM3RCxTQUFRLCtCQUErQjtBQUN2QyxTQUFRLDZCQUE2QjtBQUNyQyxTQUFRLGtDQUFrQztBQUMxQyxTQUFRLDJCQUEyQjtBQUNuQyxTQUFRLGdDQUFnQzs7OztDQUl4QyxTQUFTLDZCQUE2QixPQUFPO0FBQzVDLE1BQUksRUFBRSxZQUFZLFVBQVUsTUFBTSxjQUFjLEtBQUssRUFBRyxRQUFPO0FBQy9ELE1BQUksRUFBRSxnQkFBZ0IsVUFBVSxNQUFNLGtCQUFrQixLQUFLLEVBQUcsUUFBTztBQUN2RSxNQUFJLEVBQUUsZUFBZSxVQUFVLE1BQU0saUJBQWlCLEtBQUssRUFBRyxRQUFPO0FBQ3JFLE1BQUksRUFBRSxlQUFlLFVBQVUsTUFBTSxpQkFBaUIsS0FBSyxFQUFHLFFBQU87QUFDckUsTUFBSSxFQUFFLGdCQUFnQixVQUFVLE1BQU0sa0JBQWtCLEtBQUssRUFBRyxRQUFPO0FBQ3ZFLE1BQUksRUFBRSx1QkFBdUIsVUFBVSxNQUFNLHlCQUF5QixLQUFLLEVBQUcsUUFBTztBQUNyRixNQUFJLEVBQUUsMEJBQTBCLFVBQVUsTUFBTSw0QkFBNEIsS0FBSyxFQUFHLFFBQU87QUFDM0YsTUFBSSxFQUFFLGFBQWEsVUFBVSxNQUFNLGVBQWUsS0FBSyxFQUFHLFFBQU87QUFDakUsU0FBTzs7Q0FFUixTQUFTLDJCQUEyQixNQUFNO0FBQ3pDLFNBQU8sZ0NBQWdDLE1BQU0sTUFBTTs7Q0FFcEQsU0FBUyxnQ0FBZ0MsTUFBTSxxQkFBcUI7QUFDbkUsTUFBSSxRQUFRLEtBQU0sUUFBTztBQUN6QixTQUFPO0dBQ04sVUFBVSxLQUFLO0dBQ2YsY0FBYyxJQUFJLEtBQUssS0FBSyxjQUFjO0dBQzFDLE1BQU0sS0FBSyxTQUFTLE9BQU8sS0FBSyxJQUFJLEtBQUs7R0FDekMsYUFBYSxLQUFLO0dBQ2xCLGFBQWEsS0FBSztHQUNsQixtQkFBbUIsS0FBSyxzQkFBc0IsT0FBTyxLQUFLLElBQUksS0FBSztHQUNuRSxjQUFjLElBQUksS0FBSyxLQUFLLGNBQWM7R0FDMUMscUJBQXFCLEtBQUs7R0FDMUIsd0JBQXdCLEtBQUs7R0FDN0IsV0FBVyxLQUFLO0dBQ2hCOztDQUVGLFNBQVMseUJBQXlCLE1BQU07QUFDdkMsU0FBTyw4QkFBOEIsTUFBTSxNQUFNOztDQUVsRCxTQUFTLDhCQUE4QixPQUFPLHNCQUFzQixPQUFPO0FBQzFFLE1BQUksU0FBUyxLQUFNLFFBQU87QUFDMUIsU0FBTztHQUNOLFVBQVUsTUFBTTtHQUNoQixjQUFjLE1BQU0sY0FBYyxhQUFhO0dBQy9DLE1BQU0sTUFBTTtHQUNaLGFBQWEsTUFBTTtHQUNuQixhQUFhLE1BQU07R0FDbkIsbUJBQW1CLE1BQU07R0FDekIsY0FBYyxNQUFNLGNBQWMsYUFBYTtHQUMvQyxxQkFBcUIsTUFBTTtHQUMzQix3QkFBd0IsTUFBTTtHQUM5QixXQUFXLE1BQU07R0FDakI7O0lBRUMsQ0FBQztBQUlMLElBQUksK0JBQStDLDJCQUFXLEVBQUUsMkZBQTJGLFlBQVk7Ozs7Ozs7Ozs7OztBQVl0SyxRQUFPLGVBQWUsU0FBUyxjQUFjLEVBQUUsT0FBTyxNQUFNLENBQUM7QUFDN0QsU0FBUSxpQ0FBaUM7QUFDekMsU0FBUSwrQkFBK0I7QUFDdkMsU0FBUSxvQ0FBb0M7QUFDNUMsU0FBUSw2QkFBNkI7QUFDckMsU0FBUSxrQ0FBa0M7Q0FDMUMsTUFBTSxpQkFBaUIsc0JBQXNCOzs7O0NBSTdDLFNBQVMsK0JBQStCLE9BQU87QUFDOUMsTUFBSSxFQUFFLFNBQVMsVUFBVSxNQUFNLFdBQVcsS0FBSyxFQUFHLFFBQU87QUFDekQsTUFBSSxFQUFFLGNBQWMsVUFBVSxNQUFNLGdCQUFnQixLQUFLLEVBQUcsUUFBTztBQUNuRSxTQUFPOztDQUVSLFNBQVMsNkJBQTZCLE1BQU07QUFDM0MsU0FBTyxrQ0FBa0MsTUFBTSxNQUFNOztDQUV0RCxTQUFTLGtDQUFrQyxNQUFNLHFCQUFxQjtBQUNyRSxNQUFJLFFBQVEsS0FBTSxRQUFPO0FBQ3pCLFNBQU87R0FDTixRQUFRLEdBQUcsZUFBZSxzQkFBc0IsS0FBSyxPQUFPO0dBQzVELFlBQVksS0FBSztHQUNqQjs7Q0FFRixTQUFTLDJCQUEyQixNQUFNO0FBQ3pDLFNBQU8sZ0NBQWdDLE1BQU0sTUFBTTs7Q0FFcEQsU0FBUyxnQ0FBZ0MsT0FBTyxzQkFBc0IsT0FBTztBQUM1RSxNQUFJLFNBQVMsS0FBTSxRQUFPO0FBQzFCLFNBQU87R0FDTixRQUFRLEdBQUcsZUFBZSxvQkFBb0IsTUFBTSxPQUFPO0dBQzNELFlBQVksTUFBTTtHQUNsQjs7SUFFQyxDQUFDO0FBSUwsSUFBSSw0QkFBNEMsMkJBQVcsRUFBRSx3RkFBd0YsWUFBWTs7Ozs7Ozs7Ozs7O0FBWWhLLFFBQU8sZUFBZSxTQUFTLGNBQWMsRUFBRSxPQUFPLE1BQU0sQ0FBQztBQUM3RCxTQUFRLDhCQUE4QjtBQUN0QyxTQUFRLDRCQUE0QjtBQUNwQyxTQUFRLGlDQUFpQztBQUN6QyxTQUFRLDBCQUEwQjtBQUNsQyxTQUFRLCtCQUErQjs7OztDQUl2QyxTQUFTLDRCQUE0QixPQUFPO0FBQzNDLFNBQU87O0NBRVIsU0FBUywwQkFBMEIsTUFBTTtBQUN4QyxTQUFPLCtCQUErQixNQUFNLE1BQU07O0NBRW5ELFNBQVMsK0JBQStCLE1BQU0scUJBQXFCO0FBQ2xFLE1BQUksUUFBUSxLQUFNLFFBQU87QUFDekIsU0FBTztHQUNOLFNBQVMsS0FBSyxZQUFZLE9BQU8sS0FBSyxJQUFJLEtBQUs7R0FDL0MsY0FBYyxLQUFLLGlCQUFpQixPQUFPLEtBQUssSUFBSSxLQUFLO0dBQ3pELFFBQVEsS0FBSyxXQUFXLE9BQU8sS0FBSyxJQUFJLEtBQUs7R0FDN0MsV0FBVyxLQUFLLGNBQWMsT0FBTyxLQUFLLElBQUksS0FBSztHQUNuRCxTQUFTLEtBQUssWUFBWSxPQUFPLEtBQUssSUFBSSxLQUFLO0dBQy9DOztDQUVGLFNBQVMsd0JBQXdCLE1BQU07QUFDdEMsU0FBTyw2QkFBNkIsTUFBTSxNQUFNOztDQUVqRCxTQUFTLDZCQUE2QixPQUFPLHNCQUFzQixPQUFPO0FBQ3pFLE1BQUksU0FBUyxLQUFNLFFBQU87QUFDMUIsU0FBTztHQUNOLFNBQVMsTUFBTTtHQUNmLGNBQWMsTUFBTTtHQUNwQixRQUFRLE1BQU07R0FDZCxXQUFXLE1BQU07R0FDakIsU0FBUyxNQUFNO0dBQ2Y7O0lBRUMsQ0FBQztBQUlMLElBQUksNkJBQTZDLDJCQUFXLEVBQUUseUZBQXlGLFlBQVk7Ozs7Ozs7Ozs7OztBQVlsSyxRQUFPLGVBQWUsU0FBUyxjQUFjLEVBQUUsT0FBTyxNQUFNLENBQUM7QUFDN0QsU0FBUSwrQkFBK0I7QUFDdkMsU0FBUSw2QkFBNkI7QUFDckMsU0FBUSxrQ0FBa0M7QUFDMUMsU0FBUSwyQkFBMkI7QUFDbkMsU0FBUSxnQ0FBZ0M7Ozs7Q0FJeEMsU0FBUyw2QkFBNkIsT0FBTztBQUM1QyxTQUFPOztDQUVSLFNBQVMsMkJBQTJCLE1BQU07QUFDekMsU0FBTyxnQ0FBZ0MsTUFBTSxNQUFNOztDQUVwRCxTQUFTLGdDQUFnQyxNQUFNLHFCQUFxQjtBQUNuRSxNQUFJLFFBQVEsS0FBTSxRQUFPO0FBQ3pCLFNBQU87R0FDTixjQUFjLEtBQUssaUJBQWlCLE9BQU8sS0FBSyxJQUFJLEtBQUs7R0FDekQsUUFBUSxLQUFLLFdBQVcsT0FBTyxLQUFLLElBQUksS0FBSztHQUM3QyxXQUFXLEtBQUssY0FBYyxPQUFPLEtBQUssSUFBSSxLQUFLO0dBQ25ELFNBQVMsS0FBSyxZQUFZLE9BQU8sS0FBSyxJQUFJLEtBQUs7R0FDL0M7O0NBRUYsU0FBUyx5QkFBeUIsTUFBTTtBQUN2QyxTQUFPLDhCQUE4QixNQUFNLE1BQU07O0NBRWxELFNBQVMsOEJBQThCLE9BQU8sc0JBQXNCLE9BQU87QUFDMUUsTUFBSSxTQUFTLEtBQU0sUUFBTztBQUMxQixTQUFPO0dBQ04sY0FBYyxNQUFNO0dBQ3BCLFFBQVEsTUFBTTtHQUNkLFdBQVcsTUFBTTtHQUNqQixTQUFTLE1BQU07R0FDZjs7SUFFQyxDQUFDO0FBSUwsSUFBSSxvQ0FBb0QsMkJBQVcsRUFBRSxnR0FBZ0csWUFBWTs7Ozs7Ozs7Ozs7O0FBWWhMLFFBQU8sZUFBZSxTQUFTLGNBQWMsRUFBRSxPQUFPLE1BQU0sQ0FBQztBQUM3RCxTQUFRLHNDQUFzQztBQUM5QyxTQUFRLG9DQUFvQztBQUM1QyxTQUFRLHlDQUF5QztBQUNqRCxTQUFRLGtDQUFrQztBQUMxQyxTQUFRLHVDQUF1QztDQUMvQyxNQUFNLHVCQUF1Qiw0QkFBNEI7Q0FDekQsTUFBTSx5QkFBeUIsOEJBQThCO0NBQzdELE1BQU0sc0JBQXNCLDJCQUEyQjtDQUN2RCxNQUFNLHVCQUF1Qiw0QkFBNEI7Ozs7Q0FJekQsU0FBUyxvQ0FBb0MsT0FBTztBQUNuRCxTQUFPOztDQUVSLFNBQVMsa0NBQWtDLE1BQU07QUFDaEQsU0FBTyx1Q0FBdUMsTUFBTSxNQUFNOztDQUUzRCxTQUFTLHVDQUF1QyxNQUFNLHFCQUFxQjtBQUMxRSxNQUFJLFFBQVEsS0FBTSxRQUFPO0FBQ3pCLFNBQU87R0FDTixXQUFXLEtBQUssY0FBYyxPQUFPLEtBQUssSUFBSSxLQUFLLFdBQVcsSUFBSSxxQkFBcUIsMkJBQTJCO0dBQ2xILGVBQWUsS0FBSyxrQkFBa0IsT0FBTyxLQUFLLElBQUksS0FBSyxlQUFlLElBQUksb0JBQW9CLDBCQUEwQjtHQUM1SCxTQUFTLEtBQUssWUFBWSxPQUFPLEtBQUssSUFBSSxLQUFLLFNBQVMsSUFBSSxxQkFBcUIsMkJBQTJCO0dBQzVHLE9BQU8sS0FBSyxVQUFVLE9BQU8sS0FBSyxLQUFLLEdBQUcsdUJBQXVCLDhCQUE4QixLQUFLLE9BQU87R0FDM0c7O0NBRUYsU0FBUyxnQ0FBZ0MsTUFBTTtBQUM5QyxTQUFPLHFDQUFxQyxNQUFNLE1BQU07O0NBRXpELFNBQVMscUNBQXFDLE9BQU8sc0JBQXNCLE9BQU87QUFDakYsTUFBSSxTQUFTLEtBQU0sUUFBTztBQUMxQixTQUFPO0dBQ04sV0FBVyxNQUFNLGNBQWMsT0FBTyxLQUFLLElBQUksTUFBTSxXQUFXLElBQUkscUJBQXFCLHlCQUF5QjtHQUNsSCxlQUFlLE1BQU0sa0JBQWtCLE9BQU8sS0FBSyxJQUFJLE1BQU0sZUFBZSxJQUFJLG9CQUFvQix3QkFBd0I7R0FDNUgsU0FBUyxNQUFNLFlBQVksT0FBTyxLQUFLLElBQUksTUFBTSxTQUFTLElBQUkscUJBQXFCLHlCQUF5QjtHQUM1RyxRQUFRLEdBQUcsdUJBQXVCLDRCQUE0QixNQUFNLE9BQU87R0FDM0U7O0lBRUMsQ0FBQztBQUlMLElBQUksa0NBQWtELDJCQUFXLEVBQUUsOEZBQThGLFlBQVk7Ozs7Ozs7Ozs7OztBQVk1SyxRQUFPLGVBQWUsU0FBUyxjQUFjLEVBQUUsT0FBTyxNQUFNLENBQUM7QUFDN0QsU0FBUSxvQ0FBb0M7QUFDNUMsU0FBUSxrQ0FBa0M7QUFDMUMsU0FBUSx1Q0FBdUM7QUFDL0MsU0FBUSxnQ0FBZ0M7QUFDeEMsU0FBUSxxQ0FBcUM7Q0FDN0MsTUFBTSxjQUFjLGlCQUFpQjs7OztDQUlyQyxTQUFTLGtDQUFrQyxPQUFPO0FBQ2pELE1BQUksRUFBRSxhQUFhLFVBQVUsTUFBTSxlQUFlLEtBQUssRUFBRyxRQUFPO0FBQ2pFLE1BQUksRUFBRSxpQkFBaUIsVUFBVSxNQUFNLG1CQUFtQixLQUFLLEVBQUcsUUFBTztBQUN6RSxTQUFPOztDQUVSLFNBQVMsZ0NBQWdDLE1BQU07QUFDOUMsU0FBTyxxQ0FBcUMsTUFBTSxNQUFNOztDQUV6RCxTQUFTLHFDQUFxQyxNQUFNLHFCQUFxQjtBQUN4RSxNQUFJLFFBQVEsS0FBTSxRQUFPO0FBQ3pCLFNBQU87R0FDTixZQUFZLEdBQUcsWUFBWSxpQkFBaUIsS0FBSyxXQUFXO0dBQzVELGVBQWUsS0FBSztHQUNwQjs7Q0FFRixTQUFTLDhCQUE4QixNQUFNO0FBQzVDLFNBQU8sbUNBQW1DLE1BQU0sTUFBTTs7Q0FFdkQsU0FBUyxtQ0FBbUMsT0FBTyxzQkFBc0IsT0FBTztBQUMvRSxNQUFJLFNBQVMsS0FBTSxRQUFPO0FBQzFCLFNBQU87R0FDTixZQUFZLEdBQUcsWUFBWSxlQUFlLE1BQU0sV0FBVztHQUMzRCxlQUFlLE1BQU07R0FDckI7O0lBRUMsQ0FBQztBQUlMLElBQUksb0NBQW9ELDJCQUFXLEVBQUUsZ0dBQWdHLFlBQVk7Ozs7Ozs7Ozs7OztBQVloTCxRQUFPLGVBQWUsU0FBUyxjQUFjLEVBQUUsT0FBTyxNQUFNLENBQUM7QUFDN0QsU0FBUSxzQ0FBc0M7QUFDOUMsU0FBUSxvQ0FBb0M7QUFDNUMsU0FBUSx5Q0FBeUM7QUFDakQsU0FBUSxrQ0FBa0M7QUFDMUMsU0FBUSx1Q0FBdUM7Q0FDL0MsTUFBTSxpQkFBaUIsb0JBQW9COzs7O0NBSTNDLFNBQVMsb0NBQW9DLE9BQU87QUFDbkQsTUFBSSxFQUFFLFFBQVEsVUFBVSxNQUFNLFVBQVUsS0FBSyxFQUFHLFFBQU87QUFDdkQsTUFBSSxFQUFFLFdBQVcsVUFBVSxNQUFNLGFBQWEsS0FBSyxFQUFHLFFBQU87QUFDN0QsTUFBSSxFQUFFLFNBQVMsVUFBVSxNQUFNLFdBQVcsS0FBSyxFQUFHLFFBQU87QUFDekQsU0FBTzs7Q0FFUixTQUFTLGtDQUFrQyxNQUFNO0FBQ2hELFNBQU8sdUNBQXVDLE1BQU0sTUFBTTs7Q0FFM0QsU0FBUyx1Q0FBdUMsTUFBTSxxQkFBcUI7QUFDMUUsTUFBSSxRQUFRLEtBQU0sUUFBTztBQUN6QixTQUFPO0dBQ04sa0JBQWtCLEtBQUsscUJBQXFCLE9BQU8sS0FBSyxJQUFJLEtBQUs7R0FDakUsVUFBVSxLQUFLLGFBQWEsT0FBTyxLQUFLLElBQUksS0FBSztHQUNqRCxlQUFlLEtBQUssa0JBQWtCLE9BQU8sS0FBSyxJQUFJLEtBQUs7R0FDM0QsV0FBVyxLQUFLLGNBQWMsT0FBTyxLQUFLLElBQUksS0FBSztHQUNuRCxNQUFNLEtBQUs7R0FDWCxhQUFhLEtBQUssZ0JBQWdCLE9BQU8sS0FBSyxJQUFJLEtBQUs7R0FDdkQsY0FBYyxLQUFLLGlCQUFpQixPQUFPLEtBQUssSUFBSSxLQUFLO0dBQ3pELGVBQWUsS0FBSyxrQkFBa0IsT0FBTyxLQUFLLElBQUksS0FBSztHQUMzRCxZQUFZLEtBQUssZUFBZSxPQUFPLEtBQUssSUFBSSxLQUFLLFlBQVksSUFBSSxlQUFlLG1CQUFtQjtHQUN2RyxrQkFBa0IsS0FBSyxxQkFBcUIsT0FBTyxLQUFLLElBQUksS0FBSztHQUNqRSxrQkFBa0IsS0FBSyxxQkFBcUIsT0FBTyxLQUFLLElBQUksS0FBSztHQUNqRSxjQUFjLEtBQUssaUJBQWlCLE9BQU8sS0FBSyxJQUFJLEtBQUs7R0FDekQsU0FBUyxLQUFLLFlBQVksT0FBTyxLQUFLLElBQUksS0FBSztHQUMvQyxTQUFTLEtBQUs7R0FDZCxPQUFPLEtBQUs7R0FDWjs7Q0FFRixTQUFTLGdDQUFnQyxNQUFNO0FBQzlDLFNBQU8scUNBQXFDLE1BQU0sTUFBTTs7Q0FFekQsU0FBUyxxQ0FBcUMsT0FBTyxzQkFBc0IsT0FBTztBQUNqRixNQUFJLFNBQVMsS0FBTSxRQUFPO0FBQzFCLFNBQU87R0FDTixrQkFBa0IsTUFBTTtHQUN4QixVQUFVLE1BQU07R0FDaEIsZUFBZSxNQUFNO0dBQ3JCLFdBQVcsTUFBTTtHQUNqQixNQUFNLE1BQU07R0FDWixhQUFhLE1BQU07R0FDbkIsY0FBYyxNQUFNO0dBQ3BCLGVBQWUsTUFBTTtHQUNyQixZQUFZLE1BQU0sZUFBZSxPQUFPLEtBQUssSUFBSSxNQUFNLFlBQVksSUFBSSxlQUFlLGlCQUFpQjtHQUN2RyxrQkFBa0IsTUFBTTtHQUN4QixrQkFBa0IsTUFBTTtHQUN4QixjQUFjLE1BQU07R0FDcEIsU0FBUyxNQUFNO0dBQ2YsU0FBUyxNQUFNO0dBQ2YsT0FBTyxNQUFNO0dBQ2I7O0lBRUMsQ0FBQztBQUlMLElBQUksbUNBQW1ELDJCQUFXLEVBQUUsK0ZBQStGLFlBQVk7Ozs7Ozs7Ozs7OztBQVk5SyxRQUFPLGVBQWUsU0FBUyxjQUFjLEVBQUUsT0FBTyxNQUFNLENBQUM7QUFDN0QsU0FBUSxxQ0FBcUM7QUFDN0MsU0FBUSxtQ0FBbUM7QUFDM0MsU0FBUSx3Q0FBd0M7QUFDaEQsU0FBUSxpQ0FBaUM7QUFDekMsU0FBUSxzQ0FBc0M7Q0FDOUMsTUFBTSw4QkFBOEIsbUNBQW1DOzs7O0NBSXZFLFNBQVMsbUNBQW1DLE9BQU87QUFDbEQsTUFBSSxFQUFFLGNBQWMsVUFBVSxNQUFNLGdCQUFnQixLQUFLLEVBQUcsUUFBTztBQUNuRSxTQUFPOztDQUVSLFNBQVMsaUNBQWlDLE1BQU07QUFDL0MsU0FBTyxzQ0FBc0MsTUFBTSxNQUFNOztDQUUxRCxTQUFTLHNDQUFzQyxNQUFNLHFCQUFxQjtBQUN6RSxNQUFJLFFBQVEsS0FBTSxRQUFPO0FBQ3pCLFNBQU8sRUFBRSxZQUFZLEtBQUssWUFBWSxJQUFJLDRCQUE0QixrQ0FBa0MsRUFBRTs7Q0FFM0csU0FBUywrQkFBK0IsTUFBTTtBQUM3QyxTQUFPLG9DQUFvQyxNQUFNLE1BQU07O0NBRXhELFNBQVMsb0NBQW9DLE9BQU8sc0JBQXNCLE9BQU87QUFDaEYsTUFBSSxTQUFTLEtBQU0sUUFBTztBQUMxQixTQUFPLEVBQUUsWUFBWSxNQUFNLFlBQVksSUFBSSw0QkFBNEIsZ0NBQWdDLEVBQUU7O0lBRXZHLENBQUM7QUFJTCxJQUFJLGdEQUFnRSwyQkFBVyxFQUFFLDRHQUE0RyxZQUFZOzs7Ozs7Ozs7Ozs7QUFZeE0sUUFBTyxlQUFlLFNBQVMsY0FBYyxFQUFFLE9BQU8sTUFBTSxDQUFDO0FBQzdELFNBQVEsa0RBQWtEO0FBQzFELFNBQVEsZ0RBQWdEO0FBQ3hELFNBQVEscURBQXFEO0FBQzdELFNBQVEsOENBQThDO0FBQ3RELFNBQVEsbURBQW1EOzs7O0NBSTNELFNBQVMsZ0RBQWdELE9BQU87QUFDL0QsTUFBSSxFQUFFLGlCQUFpQixVQUFVLE1BQU0sbUJBQW1CLEtBQUssRUFBRyxRQUFPO0FBQ3pFLFNBQU87O0NBRVIsU0FBUyw4Q0FBOEMsTUFBTTtBQUM1RCxTQUFPLG1EQUFtRCxNQUFNLE1BQU07O0NBRXZFLFNBQVMsbURBQW1ELE1BQU0scUJBQXFCO0FBQ3RGLE1BQUksUUFBUSxLQUFNLFFBQU87QUFDekIsU0FBTyxFQUFFLGVBQWUsS0FBSyxnQkFBZ0I7O0NBRTlDLFNBQVMsNENBQTRDLE1BQU07QUFDMUQsU0FBTyxpREFBaUQsTUFBTSxNQUFNOztDQUVyRSxTQUFTLGlEQUFpRCxPQUFPLHNCQUFzQixPQUFPO0FBQzdGLE1BQUksU0FBUyxLQUFNLFFBQU87QUFDMUIsU0FBTyxFQUFFLGVBQWUsTUFBTSxnQkFBZ0I7O0lBRTVDLENBQUM7QUFJTCxJQUFJLGdDQUFnRCwyQkFBVyxFQUFFLDRGQUE0RixZQUFZOzs7Ozs7Ozs7Ozs7QUFZeEssUUFBTyxlQUFlLFNBQVMsY0FBYyxFQUFFLE9BQU8sTUFBTSxDQUFDO0FBQzdELFNBQVEsa0NBQWtDO0FBQzFDLFNBQVEsZ0NBQWdDO0FBQ3hDLFNBQVEscUNBQXFDO0FBQzdDLFNBQVEsOEJBQThCO0FBQ3RDLFNBQVEsbUNBQW1DO0NBQzNDLE1BQU0sZUFBZSxvQkFBb0I7Ozs7Q0FJekMsU0FBUyxnQ0FBZ0MsT0FBTztBQUMvQyxNQUFJLEVBQUUsUUFBUSxVQUFVLE1BQU0sVUFBVSxLQUFLLEVBQUcsUUFBTztBQUN2RCxNQUFJLEVBQUUsV0FBVyxVQUFVLE1BQU0sYUFBYSxLQUFLLEVBQUcsUUFBTztBQUM3RCxNQUFJLEVBQUUsU0FBUyxVQUFVLE1BQU0sV0FBVyxLQUFLLEVBQUcsUUFBTztBQUN6RCxTQUFPOztDQUVSLFNBQVMsOEJBQThCLE1BQU07QUFDNUMsU0FBTyxtQ0FBbUMsTUFBTSxNQUFNOztDQUV2RCxTQUFTLG1DQUFtQyxNQUFNLHFCQUFxQjtBQUN0RSxNQUFJLFFBQVEsS0FBTSxRQUFPO0FBQ3pCLFNBQU87R0FDTixrQkFBa0IsS0FBSyxxQkFBcUIsT0FBTyxLQUFLLElBQUksS0FBSztHQUNqRSxVQUFVLEtBQUssYUFBYSxPQUFPLEtBQUssSUFBSSxLQUFLO0dBQ2pELGVBQWUsS0FBSyxrQkFBa0IsT0FBTyxLQUFLLElBQUksS0FBSztHQUMzRCxXQUFXLEtBQUssY0FBYyxPQUFPLEtBQUssSUFBSSxLQUFLO0dBQ25ELE1BQU0sS0FBSztHQUNYLGFBQWEsS0FBSyxnQkFBZ0IsT0FBTyxLQUFLLElBQUksS0FBSztHQUN2RCxjQUFjLEtBQUssaUJBQWlCLE9BQU8sS0FBSyxJQUFJLEtBQUs7R0FDekQsZUFBZSxLQUFLLGtCQUFrQixPQUFPLEtBQUssSUFBSSxLQUFLO0dBQzNELFlBQVksS0FBSyxlQUFlLE9BQU8sS0FBSyxJQUFJLEtBQUssWUFBWSxJQUFJLGFBQWEsbUJBQW1CO0dBQ3JHLGtCQUFrQixLQUFLLHFCQUFxQixPQUFPLEtBQUssSUFBSSxLQUFLO0dBQ2pFLGtCQUFrQixLQUFLLHFCQUFxQixPQUFPLEtBQUssSUFBSSxLQUFLO0dBQ2pFLGNBQWMsS0FBSyxpQkFBaUIsT0FBTyxLQUFLLElBQUksS0FBSztHQUN6RCxTQUFTLEtBQUssWUFBWSxPQUFPLEtBQUssSUFBSSxLQUFLO0dBQy9DLFNBQVMsS0FBSztHQUNkLE9BQU8sS0FBSztHQUNaLGVBQWUsS0FBSyxrQkFBa0IsT0FBTyxLQUFLLElBQUksS0FBSztHQUMzRDs7Q0FFRixTQUFTLDRCQUE0QixNQUFNO0FBQzFDLFNBQU8saUNBQWlDLE1BQU0sTUFBTTs7Q0FFckQsU0FBUyxpQ0FBaUMsT0FBTyxzQkFBc0IsT0FBTztBQUM3RSxNQUFJLFNBQVMsS0FBTSxRQUFPO0FBQzFCLFNBQU87R0FDTixrQkFBa0IsTUFBTTtHQUN4QixVQUFVLE1BQU07R0FDaEIsZUFBZSxNQUFNO0dBQ3JCLFdBQVcsTUFBTTtHQUNqQixNQUFNLE1BQU07R0FDWixhQUFhLE1BQU07R0FDbkIsY0FBYyxNQUFNO0dBQ3BCLGVBQWUsTUFBTTtHQUNyQixZQUFZLE1BQU0sZUFBZSxPQUFPLEtBQUssSUFBSSxNQUFNLFlBQVksSUFBSSxhQUFhLGlCQUFpQjtHQUNyRyxrQkFBa0IsTUFBTTtHQUN4QixrQkFBa0IsTUFBTTtHQUN4QixjQUFjLE1BQU07R0FDcEIsU0FBUyxNQUFNO0dBQ2YsU0FBUyxNQUFNO0dBQ2YsT0FBTyxNQUFNO0dBQ2IsZUFBZSxNQUFNO0dBQ3JCOztJQUVDLENBQUM7QUFJTCxJQUFJLGdDQUFnRCwyQkFBVyxFQUFFLDRGQUE0RixZQUFZOzs7Ozs7Ozs7Ozs7QUFZeEssUUFBTyxlQUFlLFNBQVMsY0FBYyxFQUFFLE9BQU8sTUFBTSxDQUFDO0FBQzdELFNBQVEsa0NBQWtDO0FBQzFDLFNBQVEsZ0NBQWdDO0FBQ3hDLFNBQVEscUNBQXFDO0FBQzdDLFNBQVEsOEJBQThCO0FBQ3RDLFNBQVEsbUNBQW1DO0NBQzNDLE1BQU0sMEJBQTBCLCtCQUErQjs7OztDQUkvRCxTQUFTLGdDQUFnQyxPQUFPO0FBQy9DLE1BQUksRUFBRSxhQUFhLFVBQVUsTUFBTSxlQUFlLEtBQUssRUFBRyxRQUFPO0FBQ2pFLE1BQUksRUFBRSxjQUFjLFVBQVUsTUFBTSxnQkFBZ0IsS0FBSyxFQUFHLFFBQU87QUFDbkUsU0FBTzs7Q0FFUixTQUFTLDhCQUE4QixNQUFNO0FBQzVDLFNBQU8sbUNBQW1DLE1BQU0sTUFBTTs7Q0FFdkQsU0FBUyxtQ0FBbUMsTUFBTSxxQkFBcUI7QUFDdEUsTUFBSSxRQUFRLEtBQU0sUUFBTztBQUN6QixTQUFPO0dBQ04sV0FBVyxLQUFLO0dBQ2hCLFlBQVksS0FBSyxZQUFZLElBQUksd0JBQXdCLDhCQUE4QjtHQUN2RixzQkFBc0IsS0FBSyx5QkFBeUIsT0FBTyxLQUFLLElBQUksS0FBSztHQUN6RTs7Q0FFRixTQUFTLDRCQUE0QixNQUFNO0FBQzFDLFNBQU8saUNBQWlDLE1BQU0sTUFBTTs7Q0FFckQsU0FBUyxpQ0FBaUMsT0FBTyxzQkFBc0IsT0FBTztBQUM3RSxNQUFJLFNBQVMsS0FBTSxRQUFPO0FBQzFCLFNBQU87R0FDTixXQUFXLE1BQU07R0FDakIsWUFBWSxNQUFNLFlBQVksSUFBSSx3QkFBd0IsNEJBQTRCO0dBQ3RGLHNCQUFzQixNQUFNO0dBQzVCOztJQUVDLENBQUM7QUFJTCxJQUFJLDBDQUEwRCwyQkFBVyxFQUFFLHNHQUFzRyxZQUFZOzs7Ozs7Ozs7Ozs7QUFZNUwsUUFBTyxlQUFlLFNBQVMsY0FBYyxFQUFFLE9BQU8sTUFBTSxDQUFDO0FBQzdELFNBQVEsNENBQTRDO0FBQ3BELFNBQVEsMENBQTBDO0FBQ2xELFNBQVEsK0NBQStDO0FBQ3ZELFNBQVEsd0NBQXdDO0FBQ2hELFNBQVEsNkNBQTZDOzs7O0NBSXJELFNBQVMsMENBQTBDLE9BQU87QUFDekQsTUFBSSxFQUFFLHFCQUFxQixVQUFVLE1BQU0sdUJBQXVCLEtBQUssRUFBRyxRQUFPO0FBQ2pGLE1BQUksRUFBRSxtQkFBbUIsVUFBVSxNQUFNLHFCQUFxQixLQUFLLEVBQUcsUUFBTztBQUM3RSxTQUFPOztDQUVSLFNBQVMsd0NBQXdDLE1BQU07QUFDdEQsU0FBTyw2Q0FBNkMsTUFBTSxNQUFNOztDQUVqRSxTQUFTLDZDQUE2QyxNQUFNLHFCQUFxQjtBQUNoRixNQUFJLFFBQVEsS0FBTSxRQUFPO0FBQ3pCLFNBQU87R0FDTixtQkFBbUIsS0FBSztHQUN4QixpQkFBaUIsS0FBSztHQUN0Qjs7Q0FFRixTQUFTLHNDQUFzQyxNQUFNO0FBQ3BELFNBQU8sMkNBQTJDLE1BQU0sTUFBTTs7Q0FFL0QsU0FBUywyQ0FBMkMsT0FBTyxzQkFBc0IsT0FBTztBQUN2RixNQUFJLFNBQVMsS0FBTSxRQUFPO0FBQzFCLFNBQU87R0FDTixtQkFBbUIsTUFBTTtHQUN6QixpQkFBaUIsTUFBTTtHQUN2Qjs7SUFFQyxDQUFDO0FBSUwsSUFBSSx3QkFBd0MsMkJBQVcsRUFBRSxvRkFBb0YsWUFBWTs7Ozs7Ozs7Ozs7O0FBWXhKLFFBQU8sZUFBZSxTQUFTLGNBQWMsRUFBRSxPQUFPLE1BQU0sQ0FBQztBQUM3RCxTQUFRLDBCQUEwQjtBQUNsQyxTQUFRLHdCQUF3QjtBQUNoQyxTQUFRLDZCQUE2QjtBQUNyQyxTQUFRLHNCQUFzQjtBQUM5QixTQUFRLDJCQUEyQjs7OztDQUluQyxTQUFTLHdCQUF3QixPQUFPO0FBQ3ZDLE1BQUksRUFBRSxRQUFRLFVBQVUsTUFBTSxVQUFVLEtBQUssRUFBRyxRQUFPO0FBQ3ZELFNBQU87O0NBRVIsU0FBUyxzQkFBc0IsTUFBTTtBQUNwQyxTQUFPLDJCQUEyQixNQUFNLE1BQU07O0NBRS9DLFNBQVMsMkJBQTJCLE1BQU0scUJBQXFCO0FBQzlELE1BQUksUUFBUSxLQUFNLFFBQU87QUFDekIsU0FBTztHQUNOLFdBQVcsS0FBSyxjQUFjLE9BQU8sS0FBSyxJQUFJLEtBQUs7R0FDbkQsTUFBTSxLQUFLO0dBQ1g7O0NBRUYsU0FBUyxvQkFBb0IsTUFBTTtBQUNsQyxTQUFPLHlCQUF5QixNQUFNLE1BQU07O0NBRTdDLFNBQVMseUJBQXlCLE9BQU8sc0JBQXNCLE9BQU87QUFDckUsTUFBSSxTQUFTLEtBQU0sUUFBTztBQUMxQixTQUFPO0dBQ04sV0FBVyxNQUFNO0dBQ2pCLE1BQU0sTUFBTTtHQUNaOztJQUVDLENBQUM7QUFJTCxJQUFJLGdDQUFnRCwyQkFBVyxFQUFFLDRGQUE0RixZQUFZOzs7Ozs7Ozs7Ozs7QUFZeEssUUFBTyxlQUFlLFNBQVMsY0FBYyxFQUFFLE9BQU8sTUFBTSxDQUFDO0FBQzdELFNBQVEsa0NBQWtDO0FBQzFDLFNBQVEsZ0NBQWdDO0FBQ3hDLFNBQVEscUNBQXFDO0FBQzdDLFNBQVEsOEJBQThCO0FBQ3RDLFNBQVEsbUNBQW1DOzs7O0NBSTNDLFNBQVMsZ0NBQWdDLE9BQU87QUFDL0MsTUFBSSxFQUFFLGNBQWMsVUFBVSxNQUFNLGdCQUFnQixLQUFLLEVBQUcsUUFBTztBQUNuRSxNQUFJLEVBQUUsUUFBUSxVQUFVLE1BQU0sVUFBVSxLQUFLLEVBQUcsUUFBTztBQUN2RCxTQUFPOztDQUVSLFNBQVMsOEJBQThCLE1BQU07QUFDNUMsU0FBTyxtQ0FBbUMsTUFBTSxNQUFNOztDQUV2RCxTQUFTLG1DQUFtQyxNQUFNLHFCQUFxQjtBQUN0RSxNQUFJLFFBQVEsS0FBTSxRQUFPO0FBQ3pCLFNBQU87R0FDTixZQUFZLEtBQUs7R0FDakIsTUFBTSxLQUFLO0dBQ1g7O0NBRUYsU0FBUyw0QkFBNEIsTUFBTTtBQUMxQyxTQUFPLGlDQUFpQyxNQUFNLE1BQU07O0NBRXJELFNBQVMsaUNBQWlDLE9BQU8sc0JBQXNCLE9BQU87QUFDN0UsTUFBSSxTQUFTLEtBQU0sUUFBTztBQUMxQixTQUFPO0dBQ04sWUFBWSxNQUFNO0dBQ2xCLE1BQU0sTUFBTTtHQUNaOztJQUVDLENBQUM7QUFJTCxJQUFJLG1CQUFtQywyQkFBVyxFQUFFLCtFQUErRSxZQUFZOzs7Ozs7Ozs7Ozs7QUFZOUksUUFBTyxlQUFlLFNBQVMsY0FBYyxFQUFFLE9BQU8sTUFBTSxDQUFDO0FBQzdELFNBQVEscUJBQXFCO0FBQzdCLFNBQVEsbUJBQW1CO0FBQzNCLFNBQVEsd0JBQXdCO0FBQ2hDLFNBQVEsaUJBQWlCO0FBQ3pCLFNBQVEsc0JBQXNCO0NBQzlCLE1BQU0sa0JBQWtCLHVCQUF1QjtDQUMvQyxNQUFNLDBCQUEwQiwrQkFBK0I7Ozs7Q0FJL0QsU0FBUyxtQkFBbUIsT0FBTztBQUNsQyxTQUFPOztDQUVSLFNBQVMsaUJBQWlCLE1BQU07QUFDL0IsU0FBTyxzQkFBc0IsTUFBTSxNQUFNOztDQUUxQyxTQUFTLHNCQUFzQixNQUFNLHFCQUFxQjtBQUN6RCxNQUFJLFFBQVEsS0FBTSxRQUFPO0FBQ3pCLFNBQU87R0FDTixzQkFBc0IsS0FBSyx5QkFBeUIsT0FBTyxLQUFLLElBQUksS0FBSztHQUN6RSxZQUFZLEtBQUssZUFBZSxPQUFPLEtBQUssSUFBSSxLQUFLLFlBQVksSUFBSSxnQkFBZ0Isc0JBQXNCO0dBQzNHLG1CQUFtQixLQUFLLHNCQUFzQixPQUFPLEtBQUssS0FBSyxHQUFHLHdCQUF3QiwrQkFBK0IsS0FBSyxtQkFBbUI7R0FDakosZUFBZSxLQUFLLGtCQUFrQixPQUFPLEtBQUssSUFBSSxLQUFLLGVBQWUsSUFBSSxnQkFBZ0Isc0JBQXNCO0dBQ3BILDBCQUEwQixLQUFLLDZCQUE2QixPQUFPLEtBQUssSUFBSSxLQUFLO0dBQ2pGLFlBQVksS0FBSyxlQUFlLE9BQU8sS0FBSyxJQUFJLEtBQUs7R0FDckQ7O0NBRUYsU0FBUyxlQUFlLE1BQU07QUFDN0IsU0FBTyxvQkFBb0IsTUFBTSxNQUFNOztDQUV4QyxTQUFTLG9CQUFvQixPQUFPLHNCQUFzQixPQUFPO0FBQ2hFLE1BQUksU0FBUyxLQUFNLFFBQU87QUFDMUIsU0FBTztHQUNOLHNCQUFzQixNQUFNO0dBQzVCLFlBQVksTUFBTSxlQUFlLE9BQU8sS0FBSyxJQUFJLE1BQU0sWUFBWSxJQUFJLGdCQUFnQixvQkFBb0I7R0FDM0csb0JBQW9CLEdBQUcsd0JBQXdCLDZCQUE2QixNQUFNLG1CQUFtQjtHQUNyRyxlQUFlLE1BQU0sa0JBQWtCLE9BQU8sS0FBSyxJQUFJLE1BQU0sZUFBZSxJQUFJLGdCQUFnQixvQkFBb0I7R0FDcEgsMEJBQTBCLE1BQU07R0FDaEMsWUFBWSxNQUFNO0dBQ2xCOztJQUVDLENBQUM7QUFJTCxJQUFJLCtCQUErQywyQkFBVyxFQUFFLDJGQUEyRixZQUFZOzs7Ozs7Ozs7Ozs7QUFZdEssUUFBTyxlQUFlLFNBQVMsY0FBYyxFQUFFLE9BQU8sTUFBTSxDQUFDO0FBQzdELFNBQVEscUNBQXFDLFFBQVEseUNBQXlDLEtBQUs7QUFDbkcsU0FBUSxpQ0FBaUM7QUFDekMsU0FBUSwrQkFBK0I7QUFDdkMsU0FBUSxvQ0FBb0M7QUFDNUMsU0FBUSw2QkFBNkI7QUFDckMsU0FBUSxrQ0FBa0M7Q0FDMUMsTUFBTSxhQUFhLGtCQUFrQjs7Ozs7Q0FLckMsSUFBSTtBQUNKLEVBQUMsU0FBUywwQ0FBMEM7QUFDbkQsMkNBQXlDLFFBQVE7QUFDakQsMkNBQXlDLFFBQVE7QUFDakQsMkNBQXlDLFFBQVE7QUFDakQsMkNBQXlDLFFBQVE7QUFDakQsMkNBQXlDLGdCQUFnQjtJQUN2RCwyQ0FBMkMsUUFBUSx5Q0FBeUMseUNBQXlDLEVBQUUsRUFBRTs7Ozs7Q0FLNUksSUFBSTtBQUNKLEVBQUMsU0FBUyxzQ0FBc0M7QUFDL0MsdUNBQXFDLGFBQWE7QUFDbEQsdUNBQXFDLGdCQUFnQjtBQUNyRCx1Q0FBcUMsYUFBYTtBQUNsRCx1Q0FBcUMsVUFBVTtJQUM3Qyx1Q0FBdUMsUUFBUSxxQ0FBcUMscUNBQXFDLEVBQUUsRUFBRTs7OztDQUloSSxTQUFTLCtCQUErQixPQUFPO0FBQzlDLE1BQUksRUFBRSxhQUFhLFVBQVUsTUFBTSxlQUFlLEtBQUssRUFBRyxRQUFPO0FBQ2pFLFNBQU87O0NBRVIsU0FBUyw2QkFBNkIsTUFBTTtBQUMzQyxTQUFPLGtDQUFrQyxNQUFNLE1BQU07O0NBRXRELFNBQVMsa0NBQWtDLE1BQU0scUJBQXFCO0FBQ3JFLE1BQUksUUFBUSxLQUFNLFFBQU87QUFDekIsU0FBTztHQUNOLG1CQUFtQixLQUFLLHNCQUFzQixPQUFPLEtBQUssSUFBSSxLQUFLO0dBQ25FLGFBQWEsS0FBSyxnQkFBZ0IsT0FBTyxLQUFLLElBQUksS0FBSztHQUN2RCxrQkFBa0IsS0FBSyxxQkFBcUIsT0FBTyxLQUFLLElBQUksS0FBSztHQUNqRSxVQUFVLEtBQUssYUFBYSxPQUFPLEtBQUssSUFBSSxLQUFLO0dBQ2pELG1CQUFtQixLQUFLLHNCQUFzQixPQUFPLEtBQUssSUFBSSxLQUFLO0dBQ25FLGVBQWUsS0FBSyxrQkFBa0IsT0FBTyxLQUFLLElBQUksS0FBSztHQUMzRCxlQUFlLEtBQUssa0JBQWtCLE9BQU8sS0FBSyxJQUFJLEtBQUs7R0FDM0QsYUFBYSxLQUFLLGdCQUFnQixPQUFPLEtBQUssS0FBSyxHQUFHLFdBQVcsa0JBQWtCLEtBQUssYUFBYTtHQUNyRyxXQUFXLEtBQUs7R0FDaEI7O0NBRUYsU0FBUywyQkFBMkIsTUFBTTtBQUN6QyxTQUFPLGdDQUFnQyxNQUFNLE1BQU07O0NBRXBELFNBQVMsZ0NBQWdDLE9BQU8sc0JBQXNCLE9BQU87QUFDNUUsTUFBSSxTQUFTLEtBQU0sUUFBTztBQUMxQixTQUFPO0dBQ04sbUJBQW1CLE1BQU07R0FDekIsYUFBYSxNQUFNO0dBQ25CLGtCQUFrQixNQUFNO0dBQ3hCLFVBQVUsTUFBTTtHQUNoQixtQkFBbUIsTUFBTTtHQUN6QixlQUFlLE1BQU07R0FDckIsZUFBZSxNQUFNO0dBQ3JCLGNBQWMsR0FBRyxXQUFXLGdCQUFnQixNQUFNLGFBQWE7R0FDL0QsV0FBVyxNQUFNO0dBQ2pCOztJQUVDLENBQUM7QUFJTCxJQUFJLDJCQUEyQywyQkFBVyxFQUFFLHVGQUF1RixZQUFZOzs7Ozs7Ozs7Ozs7QUFZOUosUUFBTyxlQUFlLFNBQVMsY0FBYyxFQUFFLE9BQU8sTUFBTSxDQUFDO0FBQzdELFNBQVEsbUJBQW1CLEtBQUs7QUFDaEMsU0FBUSw2QkFBNkI7QUFDckMsU0FBUSwyQkFBMkI7QUFDbkMsU0FBUSxnQ0FBZ0M7QUFDeEMsU0FBUSx5QkFBeUI7QUFDakMsU0FBUSw4QkFBOEI7Ozs7OztDQU10QyxJQUFJO0FBQ0osRUFBQyxTQUFTLG9CQUFvQjtBQUM3QixxQkFBbUIsVUFBVTtBQUM3QixxQkFBbUIsYUFBYTtBQUNoQyxxQkFBbUIsWUFBWTtBQUMvQixxQkFBbUIsVUFBVTtBQUM3QixxQkFBbUIsZUFBZTtBQUNsQyxxQkFBbUIsVUFBVTtBQUM3QixxQkFBbUIsVUFBVTtBQUM3QixxQkFBbUIsbUJBQW1CO0FBQ3RDLHFCQUFtQixXQUFXO0FBQzlCLHFCQUFtQix5QkFBeUI7SUFDMUMscUJBQXFCLFFBQVEsbUJBQW1CLG1CQUFtQixFQUFFLEVBQUU7Q0FDMUUsU0FBUywyQkFBMkIsT0FBTztBQUMxQyxPQUFLLE1BQU0sT0FBTyxpQkFBa0IsS0FBSSxPQUFPLFVBQVUsZUFBZSxLQUFLLGtCQUFrQixJQUFJLEVBQ2xHO09BQUksaUJBQWlCLFNBQVMsTUFBTyxRQUFPOztBQUU3QyxTQUFPOztDQUVSLFNBQVMseUJBQXlCLE1BQU07QUFDdkMsU0FBTyw4QkFBOEIsTUFBTSxNQUFNOztDQUVsRCxTQUFTLDhCQUE4QixNQUFNLHFCQUFxQjtBQUNqRSxTQUFPOztDQUVSLFNBQVMsdUJBQXVCLE9BQU87QUFDdEMsU0FBTzs7Q0FFUixTQUFTLDRCQUE0QixPQUFPLHFCQUFxQjtBQUNoRSxTQUFPOztJQUVMLENBQUM7QUFJTCxJQUFJLG1CQUFtQywyQkFBVyxFQUFFLCtFQUErRSxZQUFZOzs7Ozs7Ozs7Ozs7QUFZOUksUUFBTyxlQUFlLFNBQVMsY0FBYyxFQUFFLE9BQU8sTUFBTSxDQUFDO0FBQzdELFNBQVEscUJBQXFCO0FBQzdCLFNBQVEsbUJBQW1CO0FBQzNCLFNBQVEsd0JBQXdCO0FBQ2hDLFNBQVEsaUJBQWlCO0FBQ3pCLFNBQVEsc0JBQXNCO0NBQzlCLE1BQU0scUJBQXFCLDBCQUEwQjs7OztDQUlyRCxTQUFTLG1CQUFtQixPQUFPO0FBQ2xDLE1BQUksRUFBRSxnQkFBZ0IsVUFBVSxNQUFNLGtCQUFrQixLQUFLLEVBQUcsUUFBTztBQUN2RSxNQUFJLEVBQUUsY0FBYyxVQUFVLE1BQU0sZ0JBQWdCLEtBQUssRUFBRyxRQUFPO0FBQ25FLE1BQUksRUFBRSxnQkFBZ0IsVUFBVSxNQUFNLGtCQUFrQixLQUFLLEVBQUcsUUFBTztBQUN2RSxNQUFJLEVBQUUsUUFBUSxVQUFVLE1BQU0sVUFBVSxLQUFLLEVBQUcsUUFBTztBQUN2RCxTQUFPOztDQUVSLFNBQVMsaUJBQWlCLE1BQU07QUFDL0IsU0FBTyxzQkFBc0IsTUFBTSxNQUFNOztDQUUxQyxTQUFTLHNCQUFzQixNQUFNLHFCQUFxQjtBQUN6RCxNQUFJLFFBQVEsS0FBTSxRQUFPO0FBQ3pCLFNBQU87R0FDTixjQUFjLEtBQUs7R0FDbkIsYUFBYSxHQUFHLG1CQUFtQiwwQkFBMEIsS0FBSyxZQUFZO0dBQzlFLGNBQWMsS0FBSztHQUNuQixNQUFNLEtBQUs7R0FDWDs7Q0FFRixTQUFTLGVBQWUsTUFBTTtBQUM3QixTQUFPLG9CQUFvQixNQUFNLE1BQU07O0NBRXhDLFNBQVMsb0JBQW9CLE9BQU8sc0JBQXNCLE9BQU87QUFDaEUsTUFBSSxTQUFTLEtBQU0sUUFBTztBQUMxQixTQUFPO0dBQ04sY0FBYyxNQUFNO0dBQ3BCLGFBQWEsR0FBRyxtQkFBbUIsd0JBQXdCLE1BQU0sWUFBWTtHQUM3RSxjQUFjLE1BQU07R0FDcEIsTUFBTSxNQUFNO0dBQ1o7O0lBRUMsQ0FBQztBQUlMLElBQUksb0NBQW9ELDJCQUFXLEVBQUUsZ0dBQWdHLFlBQVk7Ozs7Ozs7Ozs7OztBQVloTCxRQUFPLGVBQWUsU0FBUyxjQUFjLEVBQUUsT0FBTyxNQUFNLENBQUM7QUFDN0QsU0FBUSxzQ0FBc0M7QUFDOUMsU0FBUSxvQ0FBb0M7QUFDNUMsU0FBUSx5Q0FBeUM7QUFDakQsU0FBUSxrQ0FBa0M7QUFDMUMsU0FBUSx1Q0FBdUM7Ozs7Q0FJL0MsU0FBUyxvQ0FBb0MsT0FBTztBQUNuRCxTQUFPOztDQUVSLFNBQVMsa0NBQWtDLE1BQU07QUFDaEQsU0FBTyx1Q0FBdUMsTUFBTSxNQUFNOztDQUUzRCxTQUFTLHVDQUF1QyxNQUFNLHFCQUFxQjtBQUMxRSxNQUFJLFFBQVEsS0FBTSxRQUFPO0FBQ3pCLFNBQU87R0FDTixnQkFBZ0IsS0FBSyxtQkFBbUIsT0FBTyxLQUFLLElBQUksS0FBSztHQUM3RCxzQkFBc0IsS0FBSyx5QkFBeUIsT0FBTyxLQUFLLElBQUksS0FBSztHQUN6RTs7Q0FFRixTQUFTLGdDQUFnQyxNQUFNO0FBQzlDLFNBQU8scUNBQXFDLE1BQU0sTUFBTTs7Q0FFekQsU0FBUyxxQ0FBcUMsT0FBTyxzQkFBc0IsT0FBTztBQUNqRixNQUFJLFNBQVMsS0FBTSxRQUFPO0FBQzFCLFNBQU87R0FDTixnQkFBZ0IsTUFBTTtHQUN0QixzQkFBc0IsTUFBTTtHQUM1Qjs7SUFFQyxDQUFDO0FBSUwsSUFBSSw2QkFBNkMsMkJBQVcsRUFBRSx5RkFBeUYsWUFBWTs7Ozs7Ozs7Ozs7O0FBWWxLLFFBQU8sZUFBZSxTQUFTLGNBQWMsRUFBRSxPQUFPLE1BQU0sQ0FBQztBQUM3RCxTQUFRLCtCQUErQjtBQUN2QyxTQUFRLDZCQUE2QjtBQUNyQyxTQUFRLGtDQUFrQztBQUMxQyxTQUFRLDJCQUEyQjtBQUNuQyxTQUFRLGdDQUFnQztDQUN4QyxNQUFNLDRCQUE0QixpQ0FBaUM7Q0FDbkUsTUFBTSxzQkFBc0IsMkJBQTJCOzs7O0NBSXZELFNBQVMsNkJBQTZCLE9BQU87QUFDNUMsTUFBSSxFQUFFLHFCQUFxQixVQUFVLE1BQU0sdUJBQXVCLEtBQUssRUFBRyxRQUFPO0FBQ2pGLE1BQUksRUFBRSxpQkFBaUIsVUFBVSxNQUFNLG1CQUFtQixLQUFLLEVBQUcsUUFBTztBQUN6RSxNQUFJLEVBQUUsYUFBYSxVQUFVLE1BQU0sZUFBZSxLQUFLLEVBQUcsUUFBTztBQUNqRSxTQUFPOztDQUVSLFNBQVMsMkJBQTJCLE1BQU07QUFDekMsU0FBTyxnQ0FBZ0MsTUFBTSxNQUFNOztDQUVwRCxTQUFTLGdDQUFnQyxNQUFNLHFCQUFxQjtBQUNuRSxNQUFJLFFBQVEsS0FBTSxRQUFPO0FBQ3pCLFNBQU87R0FDTixlQUFlLEtBQUssa0JBQWtCLE9BQU8sS0FBSyxJQUFJLEtBQUssZUFBZSxJQUFJLG9CQUFvQiwwQkFBMEI7R0FDNUgsbUJBQW1CLEtBQUs7R0FDeEIsZUFBZSxLQUFLO0dBQ3BCLDZCQUE2QixLQUFLLGdDQUFnQyxPQUFPLEtBQUssS0FBSyxHQUFHLDBCQUEwQixpQ0FBaUMsS0FBSyw2QkFBNkI7R0FDbkwsV0FBVyxLQUFLO0dBQ2hCOztDQUVGLFNBQVMseUJBQXlCLE1BQU07QUFDdkMsU0FBTyw4QkFBOEIsTUFBTSxNQUFNOztDQUVsRCxTQUFTLDhCQUE4QixPQUFPLHNCQUFzQixPQUFPO0FBQzFFLE1BQUksU0FBUyxLQUFNLFFBQU87QUFDMUIsU0FBTztHQUNOLGVBQWUsTUFBTSxrQkFBa0IsT0FBTyxLQUFLLElBQUksTUFBTSxlQUFlLElBQUksb0JBQW9CLHdCQUF3QjtHQUM1SCxtQkFBbUIsTUFBTTtHQUN6QixlQUFlLE1BQU07R0FDckIsOEJBQThCLEdBQUcsMEJBQTBCLCtCQUErQixNQUFNLDZCQUE2QjtHQUM3SCxXQUFXLE1BQU07R0FDakI7O0lBRUMsQ0FBQztBQUlMLElBQUksOEJBQThDLDJCQUFXLEVBQUUsMEZBQTBGLFlBQVk7Ozs7Ozs7Ozs7OztBQVlwSyxRQUFPLGVBQWUsU0FBUyxjQUFjLEVBQUUsT0FBTyxNQUFNLENBQUM7QUFDN0QsU0FBUSxnQ0FBZ0M7QUFDeEMsU0FBUSw4QkFBOEI7QUFDdEMsU0FBUSxtQ0FBbUM7QUFDM0MsU0FBUSw0QkFBNEI7QUFDcEMsU0FBUSxpQ0FBaUM7Q0FDekMsTUFBTSx1QkFBdUIsNEJBQTRCOzs7O0NBSXpELFNBQVMsOEJBQThCLE9BQU87QUFDN0MsTUFBSSxFQUFFLGFBQWEsVUFBVSxNQUFNLGVBQWUsS0FBSyxFQUFHLFFBQU87QUFDakUsU0FBTzs7Q0FFUixTQUFTLDRCQUE0QixNQUFNO0FBQzFDLFNBQU8saUNBQWlDLE1BQU0sTUFBTTs7Q0FFckQsU0FBUyxpQ0FBaUMsTUFBTSxxQkFBcUI7QUFDcEUsTUFBSSxRQUFRLEtBQU0sUUFBTztBQUN6QixTQUFPLEVBQUUsWUFBWSxHQUFHLHFCQUFxQiw0QkFBNEIsS0FBSyxXQUFXLEVBQUU7O0NBRTVGLFNBQVMsMEJBQTBCLE1BQU07QUFDeEMsU0FBTywrQkFBK0IsTUFBTSxNQUFNOztDQUVuRCxTQUFTLCtCQUErQixPQUFPLHNCQUFzQixPQUFPO0FBQzNFLE1BQUksU0FBUyxLQUFNLFFBQU87QUFDMUIsU0FBTyxFQUFFLFlBQVksR0FBRyxxQkFBcUIsMEJBQTBCLE1BQU0sV0FBVyxFQUFFOztJQUV4RixDQUFDO0FBSUwsSUFBSSw2QkFBNkMsMkJBQVcsRUFBRSx5RkFBeUYsWUFBWTs7Ozs7Ozs7Ozs7O0FBWWxLLFFBQU8sZUFBZSxTQUFTLGNBQWMsRUFBRSxPQUFPLE1BQU0sQ0FBQztBQUM3RCxTQUFRLHFCQUFxQixLQUFLO0FBQ2xDLFNBQVEsK0JBQStCO0FBQ3ZDLFNBQVEsNkJBQTZCO0FBQ3JDLFNBQVEsa0NBQWtDO0FBQzFDLFNBQVEsMkJBQTJCO0FBQ25DLFNBQVEsZ0NBQWdDOzs7Ozs7Q0FNeEMsSUFBSTtBQUNKLEVBQUMsU0FBUyxzQkFBc0I7QUFDL0IsdUJBQXFCLGVBQWU7QUFDcEMsdUJBQXFCLGtCQUFrQjtBQUN2Qyx1QkFBcUIsaUJBQWlCO0lBQ3BDLHVCQUF1QixRQUFRLHFCQUFxQixxQkFBcUIsRUFBRSxFQUFFO0NBQ2hGLFNBQVMsNkJBQTZCLE9BQU87QUFDNUMsT0FBSyxNQUFNLE9BQU8sbUJBQW9CLEtBQUksT0FBTyxVQUFVLGVBQWUsS0FBSyxvQkFBb0IsSUFBSSxFQUN0RztPQUFJLG1CQUFtQixTQUFTLE1BQU8sUUFBTzs7QUFFL0MsU0FBTzs7Q0FFUixTQUFTLDJCQUEyQixNQUFNO0FBQ3pDLFNBQU8sZ0NBQWdDLE1BQU0sTUFBTTs7Q0FFcEQsU0FBUyxnQ0FBZ0MsTUFBTSxxQkFBcUI7QUFDbkUsU0FBTzs7Q0FFUixTQUFTLHlCQUF5QixPQUFPO0FBQ3hDLFNBQU87O0NBRVIsU0FBUyw4QkFBOEIsT0FBTyxxQkFBcUI7QUFDbEUsU0FBTzs7SUFFTCxDQUFDO0FBSUwsSUFBSSxxQkFBcUMsMkJBQVcsRUFBRSxpRkFBaUYsWUFBWTs7Ozs7Ozs7Ozs7O0FBWWxKLFFBQU8sZUFBZSxTQUFTLGNBQWMsRUFBRSxPQUFPLE1BQU0sQ0FBQztBQUM3RCxTQUFRLHVCQUF1QjtBQUMvQixTQUFRLHFCQUFxQjtBQUM3QixTQUFRLDBCQUEwQjtBQUNsQyxTQUFRLG1CQUFtQjtBQUMzQixTQUFRLHdCQUF3QjtDQUNoQyxNQUFNLHVCQUF1Qiw0QkFBNEI7Ozs7Q0FJekQsU0FBUyxxQkFBcUIsT0FBTztBQUNwQyxNQUFJLEVBQUUsY0FBYyxVQUFVLE1BQU0sZ0JBQWdCLEtBQUssRUFBRyxRQUFPO0FBQ25FLE1BQUksRUFBRSxhQUFhLFVBQVUsTUFBTSxlQUFlLEtBQUssRUFBRyxRQUFPO0FBQ2pFLE1BQUksRUFBRSxnQkFBZ0IsVUFBVSxNQUFNLGtCQUFrQixLQUFLLEVBQUcsUUFBTztBQUN2RSxNQUFJLEVBQUUsUUFBUSxVQUFVLE1BQU0sVUFBVSxLQUFLLEVBQUcsUUFBTztBQUN2RCxTQUFPOztDQUVSLFNBQVMsbUJBQW1CLE1BQU07QUFDakMsU0FBTyx3QkFBd0IsTUFBTSxNQUFNOztDQUU1QyxTQUFTLHdCQUF3QixNQUFNLHFCQUFxQjtBQUMzRCxNQUFJLFFBQVEsS0FBTSxRQUFPO0FBQ3pCLFNBQU87R0FDTixhQUFhLEdBQUcscUJBQXFCLDRCQUE0QixLQUFLLFlBQVk7R0FDbEYsV0FBVyxLQUFLO0dBQ2hCLGNBQWMsS0FBSztHQUNuQixNQUFNLEtBQUs7R0FDWCxhQUFhLEtBQUssZ0JBQWdCLE9BQU8sS0FBSyxJQUFJLEtBQUs7R0FDdkQ7O0NBRUYsU0FBUyxpQkFBaUIsTUFBTTtBQUMvQixTQUFPLHNCQUFzQixNQUFNLE1BQU07O0NBRTFDLFNBQVMsc0JBQXNCLE9BQU8sc0JBQXNCLE9BQU87QUFDbEUsTUFBSSxTQUFTLEtBQU0sUUFBTztBQUMxQixTQUFPO0dBQ04sYUFBYSxHQUFHLHFCQUFxQiwwQkFBMEIsTUFBTSxZQUFZO0dBQ2pGLFdBQVcsTUFBTTtHQUNqQixjQUFjLE1BQU07R0FDcEIsTUFBTSxNQUFNO0dBQ1osYUFBYSxNQUFNO0dBQ25COztJQUVDLENBQUM7QUFJTCxJQUFJLHdDQUF3RCwyQkFBVyxFQUFFLG9HQUFvRyxZQUFZOzs7Ozs7Ozs7Ozs7QUFZeEwsUUFBTyxlQUFlLFNBQVMsY0FBYyxFQUFFLE9BQU8sTUFBTSxDQUFDO0FBQzdELFNBQVEsZ0NBQWdDLEtBQUs7QUFDN0MsU0FBUSwwQ0FBMEM7QUFDbEQsU0FBUSx3Q0FBd0M7QUFDaEQsU0FBUSw2Q0FBNkM7QUFDckQsU0FBUSxzQ0FBc0M7QUFDOUMsU0FBUSwyQ0FBMkM7Ozs7OztDQU1uRCxJQUFJO0FBQ0osRUFBQyxTQUFTLGlDQUFpQztBQUMxQyxrQ0FBZ0MsYUFBYTtBQUM3QyxrQ0FBZ0MsZUFBZTtBQUMvQyxrQ0FBZ0Msa0JBQWtCO0lBQ2hELGtDQUFrQyxRQUFRLGdDQUFnQyxnQ0FBZ0MsRUFBRSxFQUFFO0NBQ2pILFNBQVMsd0NBQXdDLE9BQU87QUFDdkQsT0FBSyxNQUFNLE9BQU8sOEJBQStCLEtBQUksT0FBTyxVQUFVLGVBQWUsS0FBSywrQkFBK0IsSUFBSSxFQUM1SDtPQUFJLDhCQUE4QixTQUFTLE1BQU8sUUFBTzs7QUFFMUQsU0FBTzs7Q0FFUixTQUFTLHNDQUFzQyxNQUFNO0FBQ3BELFNBQU8sMkNBQTJDLE1BQU0sTUFBTTs7Q0FFL0QsU0FBUywyQ0FBMkMsTUFBTSxxQkFBcUI7QUFDOUUsU0FBTzs7Q0FFUixTQUFTLG9DQUFvQyxPQUFPO0FBQ25ELFNBQU87O0NBRVIsU0FBUyx5Q0FBeUMsT0FBTyxxQkFBcUI7QUFDN0UsU0FBTzs7SUFFTCxDQUFDO0FBSUwsSUFBSSxnQ0FBZ0QsMkJBQVcsRUFBRSw0RkFBNEYsWUFBWTs7Ozs7Ozs7Ozs7O0FBWXhLLFFBQU8sZUFBZSxTQUFTLGNBQWMsRUFBRSxPQUFPLE1BQU0sQ0FBQztBQUM3RCxTQUFRLGtDQUFrQztBQUMxQyxTQUFRLGdDQUFnQztBQUN4QyxTQUFRLHFDQUFxQztBQUM3QyxTQUFRLDhCQUE4QjtBQUN0QyxTQUFRLG1DQUFtQztDQUMzQyxNQUFNLGNBQWMsaUJBQWlCO0NBQ3JDLE1BQU0sZ0JBQWdCLG1CQUFtQjs7OztDQUl6QyxTQUFTLGdDQUFnQyxPQUFPO0FBQy9DLE1BQUksRUFBRSxhQUFhLFVBQVUsTUFBTSxlQUFlLEtBQUssRUFBRyxRQUFPO0FBQ2pFLE1BQUksRUFBRSxRQUFRLFVBQVUsTUFBTSxVQUFVLEtBQUssRUFBRyxRQUFPO0FBQ3ZELE1BQUksRUFBRSxnQkFBZ0IsVUFBVSxNQUFNLGtCQUFrQixLQUFLLEVBQUcsUUFBTztBQUN2RSxTQUFPOztDQUVSLFNBQVMsOEJBQThCLE1BQU07QUFDNUMsU0FBTyxtQ0FBbUMsTUFBTSxNQUFNOztDQUV2RCxTQUFTLG1DQUFtQyxNQUFNLHFCQUFxQjtBQUN0RSxNQUFJLFFBQVEsS0FBTSxRQUFPO0FBQ3pCLFNBQU87R0FDTixZQUFZLEdBQUcsWUFBWSxpQkFBaUIsS0FBSyxXQUFXO0dBQzVELE1BQU0sS0FBSztHQUNYLGVBQWUsR0FBRyxjQUFjLG1CQUFtQixLQUFLLGNBQWM7R0FDdEU7O0NBRUYsU0FBUyw0QkFBNEIsTUFBTTtBQUMxQyxTQUFPLGlDQUFpQyxNQUFNLE1BQU07O0NBRXJELFNBQVMsaUNBQWlDLE9BQU8sc0JBQXNCLE9BQU87QUFDN0UsTUFBSSxTQUFTLEtBQU0sUUFBTztBQUMxQixTQUFPO0dBQ04sWUFBWSxHQUFHLFlBQVksZUFBZSxNQUFNLFdBQVc7R0FDM0QsTUFBTSxNQUFNO0dBQ1osZUFBZSxHQUFHLGNBQWMsaUJBQWlCLE1BQU0sY0FBYztHQUNyRTs7SUFFQyxDQUFDO0FBSUwsSUFBSSxpQ0FBaUQsMkJBQVcsRUFBRSw2RkFBNkYsWUFBWTs7Ozs7Ozs7Ozs7O0FBWTFLLFFBQU8sZUFBZSxTQUFTLGNBQWMsRUFBRSxPQUFPLE1BQU0sQ0FBQztBQUM3RCxTQUFRLG1DQUFtQztBQUMzQyxTQUFRLGlDQUFpQztBQUN6QyxTQUFRLHNDQUFzQztBQUM5QyxTQUFRLCtCQUErQjtBQUN2QyxTQUFRLG9DQUFvQztDQUM1QyxNQUFNLGtDQUFrQyx1Q0FBdUM7Ozs7Q0FJL0UsU0FBUyxpQ0FBaUMsT0FBTztBQUNoRCxNQUFJLEVBQUUsZ0JBQWdCLFVBQVUsTUFBTSxrQkFBa0IsS0FBSyxFQUFHLFFBQU87QUFDdkUsTUFBSSxFQUFFLFFBQVEsVUFBVSxNQUFNLFVBQVUsS0FBSyxFQUFHLFFBQU87QUFDdkQsTUFBSSxFQUFFLFdBQVcsVUFBVSxNQUFNLGFBQWEsS0FBSyxFQUFHLFFBQU87QUFDN0QsTUFBSSxFQUFFLGVBQWUsVUFBVSxNQUFNLGlCQUFpQixLQUFLLEVBQUcsUUFBTztBQUNyRSxTQUFPOztDQUVSLFNBQVMsK0JBQStCLE1BQU07QUFDN0MsU0FBTyxvQ0FBb0MsTUFBTSxNQUFNOztDQUV4RCxTQUFTLG9DQUFvQyxNQUFNLHFCQUFxQjtBQUN2RSxNQUFJLFFBQVEsS0FBTSxRQUFPO0FBQ3pCLFNBQU87R0FDTixZQUFZLEtBQUssZUFBZSxPQUFPLEtBQUssS0FBSyxHQUFHLGdDQUFnQyx1Q0FBdUMsS0FBSyxZQUFZO0dBQzVJLGVBQWUsS0FBSyxrQkFBa0IsT0FBTyxLQUFLLElBQUksS0FBSztHQUMzRCxjQUFjLEtBQUs7R0FDbkIsTUFBTSxLQUFLO0dBQ1gsaUJBQWlCLEtBQUssb0JBQW9CLE9BQU8sS0FBSyxJQUFJLEtBQUs7R0FDL0Qsa0JBQWtCLEtBQUsscUJBQXFCLE9BQU8sS0FBSyxJQUFJLEtBQUs7R0FDakUsU0FBUyxLQUFLO0dBQ2QsYUFBYSxLQUFLO0dBQ2xCLGdCQUFnQixLQUFLLG1CQUFtQixPQUFPLEtBQUssSUFBSSxLQUFLO0dBQzdEOztDQUVGLFNBQVMsNkJBQTZCLE1BQU07QUFDM0MsU0FBTyxrQ0FBa0MsTUFBTSxNQUFNOztDQUV0RCxTQUFTLGtDQUFrQyxPQUFPLHNCQUFzQixPQUFPO0FBQzlFLE1BQUksU0FBUyxLQUFNLFFBQU87QUFDMUIsU0FBTztHQUNOLGFBQWEsR0FBRyxnQ0FBZ0MscUNBQXFDLE1BQU0sWUFBWTtHQUN2RyxlQUFlLE1BQU07R0FDckIsY0FBYyxNQUFNO0dBQ3BCLE1BQU0sTUFBTTtHQUNaLGlCQUFpQixNQUFNO0dBQ3ZCLGtCQUFrQixNQUFNO0dBQ3hCLFNBQVMsTUFBTTtHQUNmLGFBQWEsTUFBTTtHQUNuQixnQkFBZ0IsTUFBTTtHQUN0Qjs7SUFFQyxDQUFDO0FBSUwsSUFBSSxvQ0FBb0QsMkJBQVcsRUFBRSxnR0FBZ0csWUFBWTs7Ozs7Ozs7Ozs7O0FBWWhMLFFBQU8sZUFBZSxTQUFTLGNBQWMsRUFBRSxPQUFPLE1BQU0sQ0FBQztBQUM3RCxTQUFRLHNDQUFzQztBQUM5QyxTQUFRLG9DQUFvQztBQUM1QyxTQUFRLHlDQUF5QztBQUNqRCxTQUFRLGtDQUFrQztBQUMxQyxTQUFRLHVDQUF1Qzs7OztDQUkvQyxTQUFTLG9DQUFvQyxPQUFPO0FBQ25ELFNBQU87O0NBRVIsU0FBUyxrQ0FBa0MsTUFBTTtBQUNoRCxTQUFPLHVDQUF1QyxNQUFNLE1BQU07O0NBRTNELFNBQVMsdUNBQXVDLE1BQU0scUJBQXFCO0FBQzFFLE1BQUksUUFBUSxLQUFNLFFBQU87QUFDekIsU0FBTyxFQUFFLFdBQVcsS0FBSyxjQUFjLE9BQU8sS0FBSyxJQUFJLEtBQUssWUFBWTs7Q0FFekUsU0FBUyxnQ0FBZ0MsTUFBTTtBQUM5QyxTQUFPLHFDQUFxQyxNQUFNLE1BQU07O0NBRXpELFNBQVMscUNBQXFDLE9BQU8sc0JBQXNCLE9BQU87QUFDakYsTUFBSSxTQUFTLEtBQU0sUUFBTztBQUMxQixTQUFPLEVBQUUsV0FBVyxNQUFNLFlBQVk7O0lBRXBDLENBQUM7QUFJTCxJQUFJLGdDQUFnRCwyQkFBVyxFQUFFLDRGQUE0RixZQUFZOzs7Ozs7Ozs7Ozs7QUFZeEssUUFBTyxlQUFlLFNBQVMsY0FBYyxFQUFFLE9BQU8sTUFBTSxDQUFDO0FBQzdELFNBQVEsa0NBQWtDO0FBQzFDLFNBQVEsZ0NBQWdDO0FBQ3hDLFNBQVEscUNBQXFDO0FBQzdDLFNBQVEsOEJBQThCO0FBQ3RDLFNBQVEsbUNBQW1DO0NBQzNDLE1BQU0sa0JBQWtCLHVCQUF1Qjs7OztDQUkvQyxTQUFTLGdDQUFnQyxPQUFPO0FBQy9DLE1BQUksRUFBRSxvQkFBb0IsVUFBVSxNQUFNLHNCQUFzQixLQUFLLEVBQUcsUUFBTztBQUMvRSxTQUFPOztDQUVSLFNBQVMsOEJBQThCLE1BQU07QUFDNUMsU0FBTyxtQ0FBbUMsTUFBTSxNQUFNOztDQUV2RCxTQUFTLG1DQUFtQyxNQUFNLHFCQUFxQjtBQUN0RSxNQUFJLFFBQVEsS0FBTSxRQUFPO0FBQ3pCLFNBQU87R0FDTixlQUFlLEtBQUssa0JBQWtCLE9BQU8sS0FBSyxJQUFJLEtBQUs7R0FDM0QsaUJBQWlCLEtBQUssb0JBQW9CLE9BQU8sS0FBSyxJQUFJLEtBQUs7R0FDL0QscUJBQXFCLEtBQUssd0JBQXdCLE9BQU8sS0FBSyxJQUFJLEtBQUs7R0FDdkUsbUJBQW1CLEdBQUcsZ0JBQWdCLHVCQUF1QixLQUFLLGtCQUFrQjtHQUNwRjs7Q0FFRixTQUFTLDRCQUE0QixNQUFNO0FBQzFDLFNBQU8saUNBQWlDLE1BQU0sTUFBTTs7Q0FFckQsU0FBUyxpQ0FBaUMsT0FBTyxzQkFBc0IsT0FBTztBQUM3RSxNQUFJLFNBQVMsS0FBTSxRQUFPO0FBQzFCLFNBQU87R0FDTixlQUFlLE1BQU07R0FDckIsaUJBQWlCLE1BQU07R0FDdkIscUJBQXFCLE1BQU07R0FDM0IsbUJBQW1CLEdBQUcsZ0JBQWdCLHFCQUFxQixNQUFNLGtCQUFrQjtHQUNuRjs7SUFFQyxDQUFDO0FBSUwsSUFBSSxnQ0FBZ0QsMkJBQVcsRUFBRSw0RkFBNEYsWUFBWTs7Ozs7Ozs7Ozs7O0FBWXhLLFFBQU8sZUFBZSxTQUFTLGNBQWMsRUFBRSxPQUFPLE1BQU0sQ0FBQztBQUM3RCxTQUFRLGtDQUFrQztBQUMxQyxTQUFRLGdDQUFnQztBQUN4QyxTQUFRLHFDQUFxQztBQUM3QyxTQUFRLDhCQUE4QjtBQUN0QyxTQUFRLG1DQUFtQztDQUMzQyxNQUFNLGtCQUFrQix1QkFBdUI7Ozs7Q0FJL0MsU0FBUyxnQ0FBZ0MsT0FBTztBQUMvQyxNQUFJLEVBQUUsb0JBQW9CLFVBQVUsTUFBTSxzQkFBc0IsS0FBSyxFQUFHLFFBQU87QUFDL0UsU0FBTzs7Q0FFUixTQUFTLDhCQUE4QixNQUFNO0FBQzVDLFNBQU8sbUNBQW1DLE1BQU0sTUFBTTs7Q0FFdkQsU0FBUyxtQ0FBbUMsTUFBTSxxQkFBcUI7QUFDdEUsTUFBSSxRQUFRLEtBQU0sUUFBTztBQUN6QixTQUFPO0dBQ04sbUJBQW1CLEdBQUcsZ0JBQWdCLHVCQUF1QixLQUFLLGtCQUFrQjtHQUNwRixnQkFBZ0IsS0FBSyxtQkFBbUIsT0FBTyxLQUFLLElBQUksS0FBSztHQUM3RDs7Q0FFRixTQUFTLDRCQUE0QixNQUFNO0FBQzFDLFNBQU8saUNBQWlDLE1BQU0sTUFBTTs7Q0FFckQsU0FBUyxpQ0FBaUMsT0FBTyxzQkFBc0IsT0FBTztBQUM3RSxNQUFJLFNBQVMsS0FBTSxRQUFPO0FBQzFCLFNBQU87R0FDTixtQkFBbUIsR0FBRyxnQkFBZ0IscUJBQXFCLE1BQU0sa0JBQWtCO0dBQ25GLGdCQUFnQixNQUFNO0dBQ3RCOztJQUVDLENBQUM7QUFJTCxJQUFJLDhCQUE4QywyQkFBVyxFQUFFLDBGQUEwRixZQUFZOzs7Ozs7Ozs7Ozs7QUFZcEssUUFBTyxlQUFlLFNBQVMsY0FBYyxFQUFFLE9BQU8sTUFBTSxDQUFDO0FBQzdELFNBQVEsZ0NBQWdDO0FBQ3hDLFNBQVEsOEJBQThCO0FBQ3RDLFNBQVEsbUNBQW1DO0FBQzNDLFNBQVEsNEJBQTRCO0FBQ3BDLFNBQVEsaUNBQWlDO0NBQ3pDLE1BQU0sWUFBWSxpQkFBaUI7Ozs7Q0FJbkMsU0FBUyw4QkFBOEIsT0FBTztBQUM3QyxNQUFJLEVBQUUsYUFBYSxVQUFVLE1BQU0sZUFBZSxLQUFLLEVBQUcsUUFBTztBQUNqRSxNQUFJLEVBQUUsbUJBQW1CLFVBQVUsTUFBTSxxQkFBcUIsS0FBSyxFQUFHLFFBQU87QUFDN0UsTUFBSSxFQUFFLFNBQVMsVUFBVSxNQUFNLFdBQVcsS0FBSyxFQUFHLFFBQU87QUFDekQsU0FBTzs7Q0FFUixTQUFTLDRCQUE0QixNQUFNO0FBQzFDLFNBQU8saUNBQWlDLE1BQU0sTUFBTTs7Q0FFckQsU0FBUyxpQ0FBaUMsTUFBTSxxQkFBcUI7QUFDcEUsTUFBSSxRQUFRLEtBQU0sUUFBTztBQUN6QixTQUFPO0dBQ04sWUFBWSxHQUFHLFVBQVUsaUJBQWlCLEtBQUssV0FBVztHQUMxRCxpQkFBaUIsS0FBSztHQUN0QixPQUFPLEtBQUs7R0FDWjs7Q0FFRixTQUFTLDBCQUEwQixNQUFNO0FBQ3hDLFNBQU8sK0JBQStCLE1BQU0sTUFBTTs7Q0FFbkQsU0FBUywrQkFBK0IsT0FBTyxzQkFBc0IsT0FBTztBQUMzRSxNQUFJLFNBQVMsS0FBTSxRQUFPO0FBQzFCLFNBQU87R0FDTixZQUFZLEdBQUcsVUFBVSxlQUFlLE1BQU0sV0FBVztHQUN6RCxpQkFBaUIsTUFBTTtHQUN2QixPQUFPLE1BQU07R0FDYjs7SUFFQyxDQUFDO0FBSUwsSUFBSSw4Q0FBOEQsMkJBQVcsRUFBRSwwR0FBMEcsWUFBWTs7Ozs7Ozs7Ozs7O0FBWXBNLFFBQU8sZUFBZSxTQUFTLGNBQWMsRUFBRSxPQUFPLE1BQU0sQ0FBQztBQUM3RCxTQUFRLDhDQUE4QztBQUN0RCxTQUFRLG1EQUFtRDtBQUMzRCxTQUFRLDRDQUE0QztBQUNwRCxTQUFRLGlEQUFpRDtDQUN6RCxNQUFNLDhCQUE4QixtQ0FBbUM7Q0FDdkUsTUFBTSwwQkFBMEIsK0JBQStCO0NBQy9ELE1BQU0sMEJBQTBCLCtCQUErQjtDQUMvRCxTQUFTLDRDQUE0QyxNQUFNO0FBQzFELFNBQU8saURBQWlELE1BQU0sTUFBTTs7Q0FFckUsU0FBUyxpREFBaUQsTUFBTSxxQkFBcUI7QUFDcEYsTUFBSSxRQUFRLEtBQU0sUUFBTztBQUN6QixPQUFLLEdBQUcsNEJBQTRCLHFDQUFxQyxLQUFLLENBQUUsU0FBUSxHQUFHLDRCQUE0Qix3Q0FBd0MsTUFBTSxLQUFLO0FBQzFLLE9BQUssR0FBRyx3QkFBd0IsaUNBQWlDLEtBQUssQ0FBRSxTQUFRLEdBQUcsd0JBQXdCLG9DQUFvQyxNQUFNLEtBQUs7QUFDMUosT0FBSyxHQUFHLHdCQUF3QixpQ0FBaUMsS0FBSyxDQUFFLFNBQVEsR0FBRyx3QkFBd0Isb0NBQW9DLE1BQU0sS0FBSztBQUMxSixTQUFPLEVBQUU7O0NBRVYsU0FBUywwQ0FBMEMsTUFBTTtBQUN4RCxTQUFPLCtDQUErQyxNQUFNLE1BQU07O0NBRW5FLFNBQVMsK0NBQStDLE9BQU8sc0JBQXNCLE9BQU87QUFDM0YsTUFBSSxTQUFTLEtBQU0sUUFBTztBQUMxQixPQUFLLEdBQUcsNEJBQTRCLHFDQUFxQyxNQUFNLENBQUUsU0FBUSxHQUFHLDRCQUE0QixpQ0FBaUMsTUFBTTtBQUMvSixPQUFLLEdBQUcsd0JBQXdCLGlDQUFpQyxNQUFNLENBQUUsU0FBUSxHQUFHLHdCQUF3Qiw2QkFBNkIsTUFBTTtBQUMvSSxPQUFLLEdBQUcsd0JBQXdCLGlDQUFpQyxNQUFNLENBQUUsU0FBUSxHQUFHLHdCQUF3Qiw2QkFBNkIsTUFBTTtBQUMvSSxTQUFPLEVBQUU7O0lBRVAsQ0FBQztBQUlMLElBQUksMkJBQTJDLDJCQUFXLEVBQUUsdUZBQXVGLFlBQVk7Ozs7Ozs7Ozs7OztBQVk5SixRQUFPLGVBQWUsU0FBUyxjQUFjLEVBQUUsT0FBTyxNQUFNLENBQUM7QUFDN0QsU0FBUSxtQkFBbUIsS0FBSztBQUNoQyxTQUFRLDZCQUE2QjtBQUNyQyxTQUFRLDJCQUEyQjtBQUNuQyxTQUFRLGdDQUFnQztBQUN4QyxTQUFRLHlCQUF5QjtBQUNqQyxTQUFRLDhCQUE4Qjs7Ozs7O0NBTXRDLElBQUk7QUFDSixFQUFDLFNBQVMsb0JBQW9CO0FBQzdCLHFCQUFtQixTQUFTO0FBQzVCLHFCQUFtQixTQUFTO0FBQzVCLHFCQUFtQixZQUFZO0FBQy9CLHFCQUFtQixXQUFXO0FBQzlCLHFCQUFtQixjQUFjO0FBQ2pDLHFCQUFtQixVQUFVO0FBQzdCLHFCQUFtQixpQkFBaUI7SUFDbEMscUJBQXFCLFFBQVEsbUJBQW1CLG1CQUFtQixFQUFFLEVBQUU7Q0FDMUUsU0FBUywyQkFBMkIsT0FBTztBQUMxQyxPQUFLLE1BQU0sT0FBTyxpQkFBa0IsS0FBSSxPQUFPLFVBQVUsZUFBZSxLQUFLLGtCQUFrQixJQUFJLEVBQ2xHO09BQUksaUJBQWlCLFNBQVMsTUFBTyxRQUFPOztBQUU3QyxTQUFPOztDQUVSLFNBQVMseUJBQXlCLE1BQU07QUFDdkMsU0FBTyw4QkFBOEIsTUFBTSxNQUFNOztDQUVsRCxTQUFTLDhCQUE4QixNQUFNLHFCQUFxQjtBQUNqRSxTQUFPOztDQUVSLFNBQVMsdUJBQXVCLE9BQU87QUFDdEMsU0FBTzs7Q0FFUixTQUFTLDRCQUE0QixPQUFPLHFCQUFxQjtBQUNoRSxTQUFPOztJQUVMLENBQUM7QUFJTCxJQUFJLCtCQUErQywyQkFBVyxFQUFFLDJGQUEyRixZQUFZOzs7Ozs7Ozs7Ozs7QUFZdEssUUFBTyxlQUFlLFNBQVMsY0FBYyxFQUFFLE9BQU8sTUFBTSxDQUFDO0FBQzdELFNBQVEsaUNBQWlDO0FBQ3pDLFNBQVEsK0JBQStCO0FBQ3ZDLFNBQVEsb0NBQW9DO0FBQzVDLFNBQVEsNkJBQTZCO0FBQ3JDLFNBQVEsa0NBQWtDO0NBQzFDLE1BQU0sd0NBQXdDLDZDQUE2QztDQUMzRixNQUFNLHFCQUFxQiwwQkFBMEI7Q0FDckQsTUFBTSxnQkFBZ0IsbUJBQW1COzs7O0NBSXpDLFNBQVMsK0JBQStCLE9BQU87QUFDOUMsTUFBSSxFQUFFLFdBQVcsVUFBVSxNQUFNLGFBQWEsS0FBSyxFQUFHLFFBQU87QUFDN0QsTUFBSSxFQUFFLHNCQUFzQixVQUFVLE1BQU0sd0JBQXdCLEtBQUssRUFBRyxRQUFPO0FBQ25GLE1BQUksRUFBRSxrQkFBa0IsVUFBVSxNQUFNLG9CQUFvQixLQUFLLEVBQUcsUUFBTztBQUMzRSxTQUFPOztDQUVSLFNBQVMsNkJBQTZCLE1BQU07QUFDM0MsU0FBTyxrQ0FBa0MsTUFBTSxNQUFNOztDQUV0RCxTQUFTLGtDQUFrQyxNQUFNLHFCQUFxQjtBQUNyRSxNQUFJLFFBQVEsS0FBTSxRQUFPO0FBQ3pCLFNBQU87R0FDTixnQkFBZ0IsS0FBSyxtQkFBbUIsT0FBTyxLQUFLLElBQUksS0FBSztHQUM3RCxTQUFTLEtBQUs7R0FDZCxxQkFBcUIsR0FBRyxzQ0FBc0MsNkNBQTZDLEtBQUssb0JBQW9CO0dBQ3BJLGNBQWMsS0FBSyxpQkFBaUIsT0FBTyxLQUFLLEtBQUssR0FBRyxjQUFjLG1CQUFtQixLQUFLLGNBQWM7R0FDNUcsaUJBQWlCLEdBQUcsbUJBQW1CLDBCQUEwQixLQUFLLGdCQUFnQjtHQUN0Rjs7Q0FFRixTQUFTLDJCQUEyQixNQUFNO0FBQ3pDLFNBQU8sZ0NBQWdDLE1BQU0sTUFBTTs7Q0FFcEQsU0FBUyxnQ0FBZ0MsT0FBTyxzQkFBc0IsT0FBTztBQUM1RSxNQUFJLFNBQVMsS0FBTSxRQUFPO0FBQzFCLFNBQU87R0FDTixnQkFBZ0IsTUFBTTtHQUN0QixTQUFTLE1BQU07R0FDZixxQkFBcUIsR0FBRyxzQ0FBc0MsMkNBQTJDLE1BQU0sb0JBQW9CO0dBQ25JLGVBQWUsR0FBRyxjQUFjLGlCQUFpQixNQUFNLGNBQWM7R0FDckUsaUJBQWlCLEdBQUcsbUJBQW1CLHdCQUF3QixNQUFNLGdCQUFnQjtHQUNyRjs7SUFFQyxDQUFDO0FBSUwsSUFBSSwwQ0FBMEQsMkJBQVcsRUFBRSxzR0FBc0csWUFBWTs7Ozs7Ozs7Ozs7O0FBWTVMLFFBQU8sZUFBZSxTQUFTLGNBQWMsRUFBRSxPQUFPLE1BQU0sQ0FBQztBQUM3RCxTQUFRLDRDQUE0QztBQUNwRCxTQUFRLDBDQUEwQztBQUNsRCxTQUFRLCtDQUErQztBQUN2RCxTQUFRLHdDQUF3QztBQUNoRCxTQUFRLDZDQUE2QztDQUNyRCxNQUFNLGVBQWUsb0JBQW9CO0NBQ3pDLE1BQU0sY0FBYyxtQkFBbUI7Ozs7Q0FJdkMsU0FBUywwQ0FBMEMsT0FBTztBQUN6RCxNQUFJLEVBQUUsZUFBZSxVQUFVLE1BQU0saUJBQWlCLEtBQUssRUFBRyxRQUFPO0FBQ3JFLE1BQUksRUFBRSxpQkFBaUIsVUFBVSxNQUFNLG1CQUFtQixLQUFLLEVBQUcsUUFBTztBQUN6RSxNQUFJLEVBQUUsaUJBQWlCLFVBQVUsTUFBTSxtQkFBbUIsS0FBSyxFQUFHLFFBQU87QUFDekUsU0FBTzs7Q0FFUixTQUFTLHdDQUF3QyxNQUFNO0FBQ3RELFNBQU8sNkNBQTZDLE1BQU0sTUFBTTs7Q0FFakUsU0FBUyw2Q0FBNkMsTUFBTSxxQkFBcUI7QUFDaEYsTUFBSSxRQUFRLEtBQU0sUUFBTztBQUN6QixTQUFPO0dBQ04sYUFBYSxLQUFLO0dBQ2xCLGVBQWUsS0FBSyxlQUFlLElBQUksYUFBYSxtQkFBbUI7R0FDdkUsZUFBZSxLQUFLLGVBQWUsSUFBSSxZQUFZLGtCQUFrQjtHQUNyRTs7Q0FFRixTQUFTLHNDQUFzQyxNQUFNO0FBQ3BELFNBQU8sMkNBQTJDLE1BQU0sTUFBTTs7Q0FFL0QsU0FBUywyQ0FBMkMsT0FBTyxzQkFBc0IsT0FBTztBQUN2RixNQUFJLFNBQVMsS0FBTSxRQUFPO0FBQzFCLFNBQU87R0FDTixhQUFhLE1BQU07R0FDbkIsZUFBZSxNQUFNLGVBQWUsSUFBSSxhQUFhLGlCQUFpQjtHQUN0RSxlQUFlLE1BQU0sZUFBZSxJQUFJLFlBQVksZ0JBQWdCO0dBQ3BFOztJQUVDLENBQUM7QUFJTCxJQUFJLHdDQUF3RCwyQkFBVyxFQUFFLG9HQUFvRyxZQUFZOzs7Ozs7Ozs7Ozs7QUFZeEwsUUFBTyxlQUFlLFNBQVMsY0FBYyxFQUFFLE9BQU8sTUFBTSxDQUFDO0FBQzdELFNBQVEsMENBQTBDO0FBQ2xELFNBQVEsd0NBQXdDO0FBQ2hELFNBQVEsNkNBQTZDO0FBQ3JELFNBQVEsc0NBQXNDO0FBQzlDLFNBQVEsMkNBQTJDOzs7O0NBSW5ELFNBQVMsd0NBQXdDLE9BQU87QUFDdkQsTUFBSSxFQUFFLGFBQWEsVUFBVSxNQUFNLGVBQWUsS0FBSyxFQUFHLFFBQU87QUFDakUsTUFBSSxFQUFFLGlCQUFpQixVQUFVLE1BQU0sbUJBQW1CLEtBQUssRUFBRyxRQUFPO0FBQ3pFLE1BQUksRUFBRSxnQkFBZ0IsVUFBVSxNQUFNLGtCQUFrQixLQUFLLEVBQUcsUUFBTztBQUN2RSxTQUFPOztDQUVSLFNBQVMsc0NBQXNDLE1BQU07QUFDcEQsU0FBTywyQ0FBMkMsTUFBTSxNQUFNOztDQUUvRCxTQUFTLDJDQUEyQyxNQUFNLHFCQUFxQjtBQUM5RSxNQUFJLFFBQVEsS0FBTSxRQUFPO0FBQ3pCLFNBQU87R0FDTixXQUFXLEtBQUs7R0FDaEIsZUFBZSxLQUFLO0dBQ3BCLGNBQWMsS0FBSztHQUNuQjs7Q0FFRixTQUFTLG9DQUFvQyxNQUFNO0FBQ2xELFNBQU8seUNBQXlDLE1BQU0sTUFBTTs7Q0FFN0QsU0FBUyx5Q0FBeUMsT0FBTyxzQkFBc0IsT0FBTztBQUNyRixNQUFJLFNBQVMsS0FBTSxRQUFPO0FBQzFCLFNBQU87R0FDTixXQUFXLE1BQU07R0FDakIsZUFBZSxNQUFNO0dBQ3JCLGNBQWMsTUFBTTtHQUNwQjs7SUFFQyxDQUFDO0FBSUwsSUFBSSxpQkFBaUMsMkJBQVcsRUFBRSw0RUFBNEUsWUFBWTtDQUN6SSxJQUFJLG9CQUFvQixXQUFXLFFBQVEsb0JBQW9CLE9BQU8sVUFBVSxTQUFTLEdBQUcsR0FBRyxHQUFHLElBQUk7QUFDckcsTUFBSSxPQUFPLEtBQUssRUFBRyxNQUFLO0VBQ3hCLElBQUksT0FBTyxPQUFPLHlCQUF5QixHQUFHLEVBQUU7QUFDaEQsTUFBSSxDQUFDLFNBQVMsU0FBUyxPQUFPLENBQUMsRUFBRSxhQUFhLEtBQUssWUFBWSxLQUFLLGNBQWUsUUFBTztHQUN6RixZQUFZO0dBQ1osS0FBSyxXQUFXO0FBQ2YsV0FBTyxFQUFFOztHQUVWO0FBQ0QsU0FBTyxlQUFlLEdBQUcsSUFBSSxLQUFLO09BQzdCLFNBQVMsR0FBRyxHQUFHLEdBQUcsSUFBSTtBQUMzQixNQUFJLE9BQU8sS0FBSyxFQUFHLE1BQUs7QUFDeEIsSUFBRSxNQUFNLEVBQUU7O0NBRVgsSUFBSSxpQkFBaUIsV0FBVyxRQUFRLGdCQUFnQixTQUFTLEdBQUcsV0FBVztBQUM5RSxPQUFLLElBQUksS0FBSyxFQUFHLEtBQUksTUFBTSxhQUFhLENBQUMsT0FBTyxVQUFVLGVBQWUsS0FBSyxXQUFXLEVBQUUsQ0FBRSxtQkFBa0IsV0FBVyxHQUFHLEVBQUU7O0FBRWhJLFFBQU8sZUFBZSxTQUFTLGNBQWMsRUFBRSxPQUFPLE1BQU0sQ0FBQztBQUM3RCxnQkFBZSw0Q0FBNEMsRUFBRSxRQUFRO0FBQ3JFLGdCQUFlLDZDQUE2QyxFQUFFLFFBQVE7QUFDdEUsZ0JBQWUsNkJBQTZCLEVBQUUsUUFBUTtBQUN0RCxnQkFBZSxrQ0FBa0MsRUFBRSxRQUFRO0FBQzNELGdCQUFlLG9DQUFvQyxFQUFFLFFBQVE7QUFDN0QsZ0JBQWUsMkJBQTJCLEVBQUUsUUFBUTtBQUNwRCxnQkFBZSxrQkFBa0IsRUFBRSxRQUFRO0FBQzNDLGdCQUFlLGlCQUFpQixFQUFFLFFBQVE7QUFDMUMsZ0JBQWUsNEJBQTRCLEVBQUUsUUFBUTtBQUNyRCxnQkFBZSxtQ0FBbUMsRUFBRSxRQUFRO0FBQzVELGdCQUFlLG9DQUFvQyxFQUFFLFFBQVE7QUFDN0QsZ0JBQWUsK0JBQStCLEVBQUUsUUFBUTtBQUN4RCxnQkFBZSxpQ0FBaUMsRUFBRSxRQUFRO0FBQzFELGdCQUFlLHlDQUF5QyxFQUFFLFFBQVE7QUFDbEUsZ0JBQWUsNkJBQTZCLEVBQUUsUUFBUTtBQUN0RCxnQkFBZSw0QkFBNEIsRUFBRSxRQUFRO0FBQ3JELGdCQUFlLGlDQUFpQyxFQUFFLFFBQVE7QUFDMUQsZ0JBQWUsZ0NBQWdDLEVBQUUsUUFBUTtBQUN6RCxnQkFBZSw0Q0FBNEMsRUFBRSxRQUFRO0FBQ3JFLGdCQUFlLGlDQUFpQyxFQUFFLFFBQVE7QUFDMUQsZ0JBQWUsa0JBQWtCLEVBQUUsUUFBUTtBQUMzQyxnQkFBZSxrQ0FBa0MsRUFBRSxRQUFRO0FBQzNELGdCQUFlLDBCQUEwQixFQUFFLFFBQVE7QUFDbkQsZ0JBQWUsd0NBQXdDLEVBQUUsUUFBUTtBQUNqRSxnQkFBZSxnQ0FBZ0MsRUFBRSxRQUFRO0FBQ3pELGdCQUFlLGlDQUFpQyxFQUFFLFFBQVE7QUFDMUQsZ0JBQWUsb0JBQW9CLEVBQUUsUUFBUTtBQUM3QyxnQkFBZSxvQkFBb0IsRUFBRSxRQUFRO0FBQzdDLGdCQUFlLDRCQUE0QixFQUFFLFFBQVE7QUFDckQsZ0JBQWUsdUJBQXVCLEVBQUUsUUFBUTtBQUNoRCxnQkFBZSxpQ0FBaUMsRUFBRSxRQUFRO0FBQzFELGdCQUFlLHNCQUFzQixFQUFFLFFBQVE7QUFDL0MsZ0JBQWUsNEJBQTRCLEVBQUUsUUFBUTtBQUNyRCxnQkFBZSxtQ0FBbUMsRUFBRSxRQUFRO0FBQzVELGdCQUFlLDhCQUE4QixFQUFFLFFBQVE7QUFDdkQsZ0JBQWUsdUJBQXVCLEVBQUUsUUFBUTtBQUNoRCxnQkFBZSw4QkFBOEIsRUFBRSxRQUFRO0FBQ3ZELGdCQUFlLHVCQUF1QixFQUFFLFFBQVE7QUFDaEQsZ0JBQWUsaUNBQWlDLEVBQUUsUUFBUTtBQUMxRCxnQkFBZSx5QkFBeUIsRUFBRSxRQUFRO0FBQ2xELGdCQUFlLDBCQUEwQixFQUFFLFFBQVE7QUFDbkQsZ0JBQWUsNkJBQTZCLEVBQUUsUUFBUTtBQUN0RCxnQkFBZSwyQkFBMkIsRUFBRSxRQUFRO0FBQ3BELGdCQUFlLGlDQUFpQyxFQUFFLFFBQVE7QUFDMUQsZ0JBQWUsa0NBQWtDLEVBQUUsUUFBUTtBQUMzRCxnQkFBZSwrQ0FBK0MsRUFBRSxRQUFRO0FBQ3hFLGdCQUFlLCtCQUErQixFQUFFLFFBQVE7QUFDeEQsZ0JBQWUseUNBQXlDLEVBQUUsUUFBUTtBQUNsRSxnQkFBZSw4QkFBOEIsRUFBRSxRQUFRO0FBQ3ZELGdCQUFlLHVCQUF1QixFQUFFLFFBQVE7QUFDaEQsZ0JBQWUsOEJBQThCLEVBQUUsUUFBUTtBQUN2RCxnQkFBZSxrQkFBa0IsRUFBRSxRQUFRO0FBQzNDLGdCQUFlLDBCQUEwQixFQUFFLFFBQVE7QUFDbkQsZ0JBQWUsbUNBQW1DLEVBQUUsUUFBUTtBQUM1RCxnQkFBZSwwQkFBMEIsRUFBRSxRQUFRO0FBQ25ELGdCQUFlLCtCQUErQixFQUFFLFFBQVE7QUFDeEQsZ0JBQWUsbUNBQW1DLEVBQUUsUUFBUTtBQUM1RCxnQkFBZSw0QkFBNEIsRUFBRSxRQUFRO0FBQ3JELGdCQUFlLDZCQUE2QixFQUFFLFFBQVE7QUFDdEQsZ0JBQWUsMkJBQTJCLEVBQUUsUUFBUTtBQUNwRCxnQkFBZSw0QkFBNEIsRUFBRSxRQUFRO0FBQ3JELGdCQUFlLG9CQUFvQixFQUFFLFFBQVE7QUFDN0MsZ0JBQWUsNEJBQTRCLEVBQUUsUUFBUTtBQUNyRCxnQkFBZSxxQ0FBcUMsRUFBRSxRQUFRO0FBQzlELGdCQUFlLHVDQUF1QyxFQUFFLFFBQVE7QUFDaEUsZ0JBQWUsK0JBQStCLEVBQUUsUUFBUTtBQUN4RCxnQkFBZSxnQ0FBZ0MsRUFBRSxRQUFRO0FBQ3pELGdCQUFlLGtCQUFrQixFQUFFLFFBQVE7QUFDM0MsZ0JBQWUsK0JBQStCLEVBQUUsUUFBUTtBQUN4RCxnQkFBZSxtQ0FBbUMsRUFBRSxRQUFRO0FBQzVELGdCQUFlLCtCQUErQixFQUFFLFFBQVE7QUFDeEQsZ0JBQWUsK0JBQStCLEVBQUUsUUFBUTtBQUN4RCxnQkFBZSw2QkFBNkIsRUFBRSxRQUFRO0FBQ3RELGdCQUFlLDhCQUE4QixFQUFFLFFBQVE7QUFDdkQsZ0JBQWUsNkNBQTZDLEVBQUUsUUFBUTtBQUN0RSxnQkFBZSwwQkFBMEIsRUFBRSxRQUFRO0FBQ25ELGdCQUFlLG1CQUFtQixFQUFFLFFBQVE7QUFDNUMsZ0JBQWUsNkJBQTZCLEVBQUUsUUFBUTtBQUN0RCxnQkFBZSwyQkFBMkIsRUFBRSxRQUFRO0FBQ3BELGdCQUFlLHlDQUF5QyxFQUFFLFFBQVE7QUFDbEUsZ0JBQWUsdUNBQXVDLEVBQUUsUUFBUTtJQUM3RCxDQUFDO0FBSUwsSUFBSSw2QkFBNkMsMkJBQVcsRUFBRSx1RkFBdUYsWUFBWTs7Ozs7Ozs7Ozs7O0NBWWhLLElBQUksY0FBYyxXQUFXLFFBQVEsYUFBYSxTQUFTLFNBQVMsWUFBWSxHQUFHLFdBQVc7RUFDN0YsU0FBUyxNQUFNLE9BQU87QUFDckIsVUFBTyxpQkFBaUIsSUFBSSxRQUFRLElBQUksRUFBRSxTQUFTLFNBQVM7QUFDM0QsWUFBUSxNQUFNO0tBQ2I7O0FBRUgsU0FBTyxLQUFLLE1BQU0sSUFBSSxVQUFVLFNBQVMsU0FBUyxRQUFRO0dBQ3pELFNBQVMsVUFBVSxPQUFPO0FBQ3pCLFFBQUk7QUFDSCxVQUFLLFVBQVUsS0FBSyxNQUFNLENBQUM7YUFDbkIsR0FBRztBQUNYLFlBQU8sRUFBRTs7O0dBR1gsU0FBUyxTQUFTLE9BQU87QUFDeEIsUUFBSTtBQUNILFVBQUssVUFBVSxTQUFTLE1BQU0sQ0FBQzthQUN2QixHQUFHO0FBQ1gsWUFBTyxFQUFFOzs7R0FHWCxTQUFTLEtBQUssUUFBUTtBQUNyQixXQUFPLE9BQU8sUUFBUSxPQUFPLE1BQU0sR0FBRyxNQUFNLE9BQU8sTUFBTSxDQUFDLEtBQUssV0FBVyxTQUFTOztBQUVwRixTQUFNLFlBQVksVUFBVSxNQUFNLFNBQVMsY0FBYyxFQUFFLENBQUMsRUFBRSxNQUFNLENBQUM7SUFDcEU7O0FBRUgsUUFBTyxlQUFlLFNBQVMsY0FBYyxFQUFFLE9BQU8sTUFBTSxDQUFDO0FBQzdELFNBQVEscUJBQXFCLEtBQUs7Q0FDbEMsTUFBTSxZQUFZLGlCQUFpQjtDQUNuQyxNQUFNLFlBQVksZ0JBQWdCOzs7O0NBSWxDLElBQUkscUJBQXFCLGNBQWMsVUFBVSxRQUFROzs7O0VBSXhELGdEQUFnRCxtQkFBbUIsZUFBZTtBQUNqRixVQUFPLFlBQVksTUFBTSxLQUFLLEdBQUcsS0FBSyxHQUFHLGFBQWE7SUFDckQsTUFBTSxrQkFBa0IsRUFBRTtJQUMxQixNQUFNLG1CQUFtQixFQUFFO0FBQzNCLHFCQUFpQixrQkFBa0I7QUFDbkMsUUFBSSxLQUFLLGlCQUFpQixLQUFLLGNBQWMsYUFBYTtLQUN6RCxNQUFNLFFBQVEsS0FBSyxjQUFjO0tBQ2pDLE1BQU0sY0FBYyxNQUFNLE1BQU0sVUFBVSxFQUFFLENBQUM7QUFDN0MsU0FBSSxZQUFhLGtCQUFpQixtQkFBbUIsVUFBVTs7SUFFaEUsTUFBTSxXQUFXLE1BQU0sS0FBSyxRQUFRO0tBQ25DLE1BQU07S0FDTixRQUFRO0tBQ1IsU0FBUztLQUNULE9BQU87S0FDUCxPQUFPLEdBQUcsVUFBVSwwQ0FBMEMsa0JBQWtCLHNDQUFzQztLQUN0SCxFQUFFLGNBQWM7QUFDakIsV0FBTyxJQUFJLFVBQVUsZ0JBQWdCLFdBQVcsZUFBZSxHQUFHLFVBQVUsNkNBQTZDLFVBQVUsQ0FBQztLQUNuSTs7Ozs7RUFLSCwrQ0FBK0M7QUFDOUMsVUFBTyxZQUFZLE1BQU0sV0FBVyxLQUFLLEdBQUcsV0FBVyxvQkFBb0IsRUFBRSxFQUFFLGVBQWU7QUFDN0YsV0FBTyxPQUFPLE1BQU0sS0FBSyxnREFBZ0QsbUJBQW1CLGNBQWMsRUFBRSxPQUFPO0tBQ2xIOzs7OztFQUtILHVDQUF1QyxtQkFBbUIsZUFBZTtBQUN4RSxVQUFPLFlBQVksTUFBTSxLQUFLLEdBQUcsS0FBSyxHQUFHLGFBQWE7SUFDckQsTUFBTSxrQkFBa0IsRUFBRTtJQUMxQixNQUFNLG1CQUFtQixFQUFFO0FBQzNCLHFCQUFpQixrQkFBa0I7QUFDbkMsUUFBSSxLQUFLLGlCQUFpQixLQUFLLGNBQWMsYUFBYTtLQUN6RCxNQUFNLFFBQVEsS0FBSyxjQUFjO0tBQ2pDLE1BQU0sY0FBYyxNQUFNLE1BQU0sVUFBVSxFQUFFLENBQUM7QUFDN0MsU0FBSSxZQUFhLGtCQUFpQixtQkFBbUIsVUFBVTs7SUFFaEUsTUFBTSxXQUFXLE1BQU0sS0FBSyxRQUFRO0tBQ25DLE1BQU07S0FDTixRQUFRO0tBQ1IsU0FBUztLQUNULE9BQU87S0FDUCxPQUFPLEdBQUcsVUFBVSxpQ0FBaUMsa0JBQWtCLDZCQUE2QjtLQUNwRyxFQUFFLGNBQWM7QUFDakIsV0FBTyxJQUFJLFVBQVUsZ0JBQWdCLFdBQVcsZUFBZSxHQUFHLFVBQVUsb0NBQW9DLFVBQVUsQ0FBQztLQUMxSDs7Ozs7RUFLSCxzQ0FBc0M7QUFDckMsVUFBTyxZQUFZLE1BQU0sV0FBVyxLQUFLLEdBQUcsV0FBVyxvQkFBb0IsRUFBRSxFQUFFLGVBQWU7QUFDN0YsV0FBTyxPQUFPLE1BQU0sS0FBSyx1Q0FBdUMsbUJBQW1CLGNBQWMsRUFBRSxPQUFPO0tBQ3pHOzs7OztFQUtILDRDQUE0QyxtQkFBbUIsZUFBZTtBQUM3RSxVQUFPLFlBQVksTUFBTSxLQUFLLEdBQUcsS0FBSyxHQUFHLGFBQWE7SUFDckQsTUFBTSxrQkFBa0IsRUFBRTtJQUMxQixNQUFNLG1CQUFtQixFQUFFO0FBQzNCLHFCQUFpQixrQkFBa0I7QUFDbkMsUUFBSSxLQUFLLGlCQUFpQixLQUFLLGNBQWMsYUFBYTtLQUN6RCxNQUFNLFFBQVEsS0FBSyxjQUFjO0tBQ2pDLE1BQU0sY0FBYyxNQUFNLE1BQU0sVUFBVSxFQUFFLENBQUM7QUFDN0MsU0FBSSxZQUFhLGtCQUFpQixtQkFBbUIsVUFBVTs7SUFFaEUsTUFBTSxXQUFXLE1BQU0sS0FBSyxRQUFRO0tBQ25DLE1BQU07S0FDTixRQUFRO0tBQ1IsU0FBUztLQUNULE9BQU87S0FDUCxPQUFPLEdBQUcsVUFBVSxzQ0FBc0Msa0JBQWtCLGtDQUFrQztLQUM5RyxFQUFFLGNBQWM7QUFDakIsV0FBTyxJQUFJLFVBQVUsZ0JBQWdCLFdBQVcsZUFBZSxHQUFHLFVBQVUseUNBQXlDLFVBQVUsQ0FBQztLQUMvSDs7Ozs7RUFLSCwyQ0FBMkM7QUFDMUMsVUFBTyxZQUFZLE1BQU0sV0FBVyxLQUFLLEdBQUcsV0FBVyxvQkFBb0IsRUFBRSxFQUFFLGVBQWU7QUFDN0YsV0FBTyxPQUFPLE1BQU0sS0FBSyw0Q0FBNEMsbUJBQW1CLGNBQWMsRUFBRSxPQUFPO0tBQzlHOzs7OztFQUtILG9DQUFvQyxtQkFBbUIsZUFBZTtBQUNyRSxVQUFPLFlBQVksTUFBTSxLQUFLLEdBQUcsS0FBSyxHQUFHLGFBQWE7SUFDckQsTUFBTSxrQkFBa0IsRUFBRTtJQUMxQixNQUFNLG1CQUFtQixFQUFFO0FBQzNCLHFCQUFpQixrQkFBa0I7QUFDbkMsUUFBSSxLQUFLLGlCQUFpQixLQUFLLGNBQWMsYUFBYTtLQUN6RCxNQUFNLFFBQVEsS0FBSyxjQUFjO0tBQ2pDLE1BQU0sY0FBYyxNQUFNLE1BQU0sVUFBVSxFQUFFLENBQUM7QUFDN0MsU0FBSSxZQUFhLGtCQUFpQixtQkFBbUIsVUFBVTs7SUFFaEUsTUFBTSxXQUFXLE1BQU0sS0FBSyxRQUFRO0tBQ25DLE1BQU07S0FDTixRQUFRO0tBQ1IsU0FBUztLQUNULE9BQU87S0FDUCxPQUFPLEdBQUcsVUFBVSw4QkFBOEIsa0JBQWtCLDBCQUEwQjtLQUM5RixFQUFFLGNBQWM7QUFDakIsV0FBTyxJQUFJLFVBQVUsZ0JBQWdCLFdBQVcsZUFBZSxHQUFHLFVBQVUsaUNBQWlDLFVBQVUsQ0FBQztLQUN2SDs7Ozs7RUFLSCxtQ0FBbUM7QUFDbEMsVUFBTyxZQUFZLE1BQU0sV0FBVyxLQUFLLEdBQUcsV0FBVyxvQkFBb0IsRUFBRSxFQUFFLGVBQWU7QUFDN0YsV0FBTyxPQUFPLE1BQU0sS0FBSyxvQ0FBb0MsbUJBQW1CLGNBQWMsRUFBRSxPQUFPO0tBQ3RHOzs7OztFQUtILGdDQUFnQyxtQkFBbUIsZUFBZTtBQUNqRSxVQUFPLFlBQVksTUFBTSxLQUFLLEdBQUcsS0FBSyxHQUFHLGFBQWE7SUFDckQsTUFBTSxrQkFBa0IsRUFBRTtJQUMxQixNQUFNLG1CQUFtQixFQUFFO0FBQzNCLHFCQUFpQixrQkFBa0I7QUFDbkMsUUFBSSxLQUFLLGlCQUFpQixLQUFLLGNBQWMsYUFBYTtLQUN6RCxNQUFNLFFBQVEsS0FBSyxjQUFjO0tBQ2pDLE1BQU0sY0FBYyxNQUFNLE1BQU0sVUFBVSxFQUFFLENBQUM7QUFDN0MsU0FBSSxZQUFhLGtCQUFpQixtQkFBbUIsVUFBVTs7SUFFaEUsTUFBTSxXQUFXLE1BQU0sS0FBSyxRQUFRO0tBQ25DLE1BQU07S0FDTixRQUFRO0tBQ1IsU0FBUztLQUNULE9BQU87S0FDUCxPQUFPLEdBQUcsVUFBVSwwQkFBMEIsa0JBQWtCLHNCQUFzQjtLQUN0RixFQUFFLGNBQWM7QUFDakIsV0FBTyxJQUFJLFVBQVUsZ0JBQWdCLFdBQVcsZUFBZSxHQUFHLFVBQVUsNkJBQTZCLFVBQVUsQ0FBQztLQUNuSDs7Ozs7RUFLSCwrQkFBK0I7QUFDOUIsVUFBTyxZQUFZLE1BQU0sV0FBVyxLQUFLLEdBQUcsV0FBVyxvQkFBb0IsRUFBRSxFQUFFLGVBQWU7QUFDN0YsV0FBTyxPQUFPLE1BQU0sS0FBSyxnQ0FBZ0MsbUJBQW1CLGNBQWMsRUFBRSxPQUFPO0tBQ2xHOzs7QUFHSixTQUFRLHFCQUFxQjtJQUMxQixDQUFDO0FBSUwsSUFBSSxxQkFBcUMsMkJBQVcsRUFBRSwrRUFBK0UsWUFBWTs7Ozs7Ozs7Ozs7O0NBWWhKLElBQUksY0FBYyxXQUFXLFFBQVEsYUFBYSxTQUFTLFNBQVMsWUFBWSxHQUFHLFdBQVc7RUFDN0YsU0FBUyxNQUFNLE9BQU87QUFDckIsVUFBTyxpQkFBaUIsSUFBSSxRQUFRLElBQUksRUFBRSxTQUFTLFNBQVM7QUFDM0QsWUFBUSxNQUFNO0tBQ2I7O0FBRUgsU0FBTyxLQUFLLE1BQU0sSUFBSSxVQUFVLFNBQVMsU0FBUyxRQUFRO0dBQ3pELFNBQVMsVUFBVSxPQUFPO0FBQ3pCLFFBQUk7QUFDSCxVQUFLLFVBQVUsS0FBSyxNQUFNLENBQUM7YUFDbkIsR0FBRztBQUNYLFlBQU8sRUFBRTs7O0dBR1gsU0FBUyxTQUFTLE9BQU87QUFDeEIsUUFBSTtBQUNILFVBQUssVUFBVSxTQUFTLE1BQU0sQ0FBQzthQUN2QixHQUFHO0FBQ1gsWUFBTyxFQUFFOzs7R0FHWCxTQUFTLEtBQUssUUFBUTtBQUNyQixXQUFPLE9BQU8sUUFBUSxPQUFPLE1BQU0sR0FBRyxNQUFNLE9BQU8sTUFBTSxDQUFDLEtBQUssV0FBVyxTQUFTOztBQUVwRixTQUFNLFlBQVksVUFBVSxNQUFNLFNBQVMsY0FBYyxFQUFFLENBQUMsRUFBRSxNQUFNLENBQUM7SUFDcEU7O0FBRUgsUUFBTyxlQUFlLFNBQVMsY0FBYyxFQUFFLE9BQU8sTUFBTSxDQUFDO0FBQzdELFNBQVEsMkJBQTJCLFFBQVEsYUFBYSxLQUFLO0NBQzdELE1BQU0sWUFBWSxpQkFBaUI7Q0FDbkMsTUFBTSxZQUFZLGdCQUFnQjs7OztDQUlsQyxJQUFJLGFBQWEsY0FBYyxVQUFVLFFBQVE7Ozs7RUFJaEQscUJBQXFCLGVBQWU7QUFDbkMsVUFBTyxZQUFZLE1BQU0sS0FBSyxHQUFHLEtBQUssR0FBRyxhQUFhO0lBQ3JELE1BQU0sV0FBVyxNQUFNLEtBQUssUUFBUTtLQUNuQyxNQUFNO0tBQ04sUUFBUTtLQUNSLFNBQVMsRUFBRTtLQUNYLE9BQU8sRUFBRTtLQUNULEVBQUUsY0FBYztBQUNqQixXQUFPLElBQUksVUFBVSxnQkFBZ0IsU0FBUztLQUM3Qzs7Ozs7RUFLSCxrQkFBa0IsZUFBZTtBQUNoQyxVQUFPLFlBQVksTUFBTSxLQUFLLEdBQUcsS0FBSyxHQUFHLGFBQWE7QUFDckQsV0FBTyxPQUFPLE1BQU0sS0FBSyxxQkFBcUIsY0FBYyxFQUFFLE9BQU87S0FDcEU7Ozs7O0VBS0gsaUJBQWlCLG1CQUFtQixlQUFlO0FBQ2xELFVBQU8sWUFBWSxNQUFNLEtBQUssR0FBRyxLQUFLLEdBQUcsYUFBYTtJQUNyRCxNQUFNLGtCQUFrQixFQUFFO0lBQzFCLE1BQU0sbUJBQW1CLEVBQUU7QUFDM0IscUJBQWlCLGtCQUFrQjtBQUNuQyxRQUFJLEtBQUssaUJBQWlCLEtBQUssY0FBYyxhQUFhO0tBQ3pELE1BQU0sUUFBUSxLQUFLLGNBQWM7S0FDakMsTUFBTSxjQUFjLE1BQU0sTUFBTSxVQUFVLEVBQUUsQ0FBQztBQUM3QyxTQUFJLFlBQWEsa0JBQWlCLG1CQUFtQixVQUFVOztJQUVoRSxNQUFNLFdBQVcsTUFBTSxLQUFLLFFBQVE7S0FDbkMsTUFBTTtLQUNOLFFBQVE7S0FDUixTQUFTO0tBQ1QsT0FBTztLQUNQLE1BQU0sa0JBQWtCO0tBQ3hCLEVBQUUsY0FBYztBQUNqQixXQUFPLElBQUksVUFBVSxnQkFBZ0IsU0FBUztLQUM3Qzs7Ozs7RUFLSCxnQkFBZ0I7QUFDZixVQUFPLFlBQVksTUFBTSxXQUFXLEtBQUssR0FBRyxXQUFXLG9CQUFvQixFQUFFLEVBQUUsZUFBZTtBQUM3RixXQUFPLE9BQU8sTUFBTSxLQUFLLGlCQUFpQixtQkFBbUIsY0FBYyxFQUFFLE9BQU87S0FDbkY7Ozs7O0VBS0gsZUFBZSxtQkFBbUIsZUFBZTtBQUNoRCxVQUFPLFlBQVksTUFBTSxLQUFLLEdBQUcsS0FBSyxHQUFHLGFBQWE7SUFDckQsTUFBTSxrQkFBa0IsRUFBRTtBQUMxQixRQUFJLGtCQUFrQixXQUFXLEtBQU0saUJBQWdCLFVBQVUsa0JBQWtCO0FBQ25GLFFBQUksa0JBQWtCLDRCQUE0QixLQUFNLGlCQUFnQiwyQkFBMkIsa0JBQWtCO0FBQ3JILFFBQUksa0JBQWtCLHFCQUFxQixLQUFNLGlCQUFnQixvQkFBb0Isa0JBQWtCO0lBQ3ZHLE1BQU0sbUJBQW1CLEVBQUU7QUFDM0IsUUFBSSxLQUFLLGlCQUFpQixLQUFLLGNBQWMsYUFBYTtLQUN6RCxNQUFNLFFBQVEsS0FBSyxjQUFjO0tBQ2pDLE1BQU0sY0FBYyxNQUFNLE1BQU0sVUFBVSxFQUFFLENBQUM7QUFDN0MsU0FBSSxZQUFhLGtCQUFpQixtQkFBbUIsVUFBVTs7SUFFaEUsTUFBTSxXQUFXLE1BQU0sS0FBSyxRQUFRO0tBQ25DLE1BQU07S0FDTixRQUFRO0tBQ1IsU0FBUztLQUNULE9BQU87S0FDUCxFQUFFLGNBQWM7QUFDakIsV0FBTyxJQUFJLFVBQVUsZ0JBQWdCLFNBQVM7S0FDN0M7Ozs7O0VBS0gsY0FBYztBQUNiLFVBQU8sWUFBWSxNQUFNLFdBQVcsS0FBSyxHQUFHLFdBQVcsb0JBQW9CLEVBQUUsRUFBRSxlQUFlO0FBQzdGLFdBQU8sT0FBTyxNQUFNLEtBQUssZUFBZSxtQkFBbUIsY0FBYyxFQUFFLE9BQU87S0FDakY7Ozs7O0VBS0gsYUFBYSxlQUFlO0FBQzNCLFVBQU8sWUFBWSxNQUFNLEtBQUssR0FBRyxLQUFLLEdBQUcsYUFBYTtJQUNyRCxNQUFNLFdBQVcsTUFBTSxLQUFLLFFBQVE7S0FDbkMsTUFBTTtLQUNOLFFBQVE7S0FDUixTQUFTLEVBQUU7S0FDWCxPQUFPLEVBQUU7S0FDVCxFQUFFLGNBQWM7QUFDakIsV0FBTyxJQUFJLFVBQVUsZ0JBQWdCLFNBQVM7S0FDN0M7Ozs7O0VBS0gsVUFBVSxlQUFlO0FBQ3hCLFVBQU8sWUFBWSxNQUFNLEtBQUssR0FBRyxLQUFLLEdBQUcsYUFBYTtBQUNyRCxXQUFPLE9BQU8sTUFBTSxLQUFLLGFBQWEsY0FBYyxFQUFFLE9BQU87S0FDNUQ7Ozs7O0VBS0gsMkJBQTJCLG1CQUFtQixlQUFlO0FBQzVELFVBQU8sWUFBWSxNQUFNLEtBQUssR0FBRyxLQUFLLEdBQUcsYUFBYTtJQUNyRCxNQUFNLGtCQUFrQixFQUFFO0lBQzFCLE1BQU0sbUJBQW1CLEVBQUU7QUFDM0IscUJBQWlCLGtCQUFrQjtBQUNuQyxRQUFJLEtBQUssaUJBQWlCLEtBQUssY0FBYyxhQUFhO0tBQ3pELE1BQU0sUUFBUSxLQUFLLGNBQWM7S0FDakMsTUFBTSxjQUFjLE1BQU0sTUFBTSxVQUFVLEVBQUUsQ0FBQztBQUM3QyxTQUFJLFlBQWEsa0JBQWlCLG1CQUFtQixVQUFVOztJQUVoRSxNQUFNLFdBQVcsTUFBTSxLQUFLLFFBQVE7S0FDbkMsTUFBTTtLQUNOLFFBQVE7S0FDUixTQUFTO0tBQ1QsT0FBTztLQUNQLE9BQU8sR0FBRyxVQUFVLGdDQUFnQyxrQkFBa0IsNEJBQTRCO0tBQ2xHLEVBQUUsY0FBYztBQUNqQixXQUFPLElBQUksVUFBVSxnQkFBZ0IsU0FBUztLQUM3Qzs7Ozs7RUFLSCwwQkFBMEI7QUFDekIsVUFBTyxZQUFZLE1BQU0sV0FBVyxLQUFLLEdBQUcsV0FBVyxvQkFBb0IsRUFBRSxFQUFFLGVBQWU7QUFDN0YsV0FBTyxPQUFPLE1BQU0sS0FBSywyQkFBMkIsbUJBQW1CLGNBQWMsRUFBRSxPQUFPO0tBQzdGOzs7OztFQUtILDZCQUE2QixtQkFBbUIsZUFBZTtBQUM5RCxVQUFPLFlBQVksTUFBTSxLQUFLLEdBQUcsS0FBSyxHQUFHLGFBQWE7SUFDckQsTUFBTSxrQkFBa0IsRUFBRTtJQUMxQixNQUFNLG1CQUFtQixFQUFFO0FBQzNCLHFCQUFpQixrQkFBa0I7QUFDbkMsUUFBSSxLQUFLLGlCQUFpQixLQUFLLGNBQWMsYUFBYTtLQUN6RCxNQUFNLFFBQVEsS0FBSyxjQUFjO0tBQ2pDLE1BQU0sY0FBYyxNQUFNLE1BQU0sVUFBVSxFQUFFLENBQUM7QUFDN0MsU0FBSSxZQUFhLGtCQUFpQixtQkFBbUIsVUFBVTs7SUFFaEUsTUFBTSxXQUFXLE1BQU0sS0FBSyxRQUFRO0tBQ25DLE1BQU07S0FDTixRQUFRO0tBQ1IsU0FBUztLQUNULE9BQU87S0FDUCxPQUFPLEdBQUcsVUFBVSxrQ0FBa0Msa0JBQWtCLDhCQUE4QjtLQUN0RyxFQUFFLGNBQWM7QUFDakIsV0FBTyxJQUFJLFVBQVUsZ0JBQWdCLFNBQVM7S0FDN0M7Ozs7O0VBS0gsNEJBQTRCO0FBQzNCLFVBQU8sWUFBWSxNQUFNLFdBQVcsS0FBSyxHQUFHLFdBQVcsb0JBQW9CLEVBQUUsRUFBRSxlQUFlO0FBQzdGLFdBQU8sT0FBTyxNQUFNLEtBQUssNkJBQTZCLG1CQUFtQixjQUFjLEVBQUUsT0FBTztLQUMvRjs7Ozs7O0VBTUgsOEJBQThCLG1CQUFtQixlQUFlO0FBQy9ELFVBQU8sWUFBWSxNQUFNLEtBQUssR0FBRyxLQUFLLEdBQUcsYUFBYTtJQUNyRCxNQUFNLGtCQUFrQixFQUFFO0lBQzFCLE1BQU0sbUJBQW1CLEVBQUU7QUFDM0IscUJBQWlCLGtCQUFrQjtBQUNuQyxRQUFJLEtBQUssaUJBQWlCLEtBQUssY0FBYyxhQUFhO0tBQ3pELE1BQU0sUUFBUSxLQUFLLGNBQWM7S0FDakMsTUFBTSxjQUFjLE1BQU0sTUFBTSxVQUFVLEVBQUUsQ0FBQztBQUM3QyxTQUFJLFlBQWEsa0JBQWlCLG1CQUFtQixVQUFVOztJQUVoRSxNQUFNLFdBQVcsTUFBTSxLQUFLLFFBQVE7S0FDbkMsTUFBTTtLQUNOLFFBQVE7S0FDUixTQUFTO0tBQ1QsT0FBTztLQUNQLE9BQU8sR0FBRyxVQUFVLDRCQUE0QixrQkFBa0Isd0JBQXdCO0tBQzFGLEVBQUUsY0FBYztBQUNqQixXQUFPLElBQUksVUFBVSxnQkFBZ0IsU0FBUztLQUM3Qzs7Ozs7O0VBTUgsNkJBQTZCO0FBQzVCLFVBQU8sWUFBWSxNQUFNLFdBQVcsS0FBSyxHQUFHLFdBQVcsb0JBQW9CLEVBQUUsRUFBRSxlQUFlO0FBQzdGLFdBQU8sT0FBTyxNQUFNLEtBQUssOEJBQThCLG1CQUFtQixjQUFjLEVBQUUsT0FBTztLQUNoRzs7Ozs7RUFLSCxlQUFlLG1CQUFtQixlQUFlO0FBQ2hELFVBQU8sWUFBWSxNQUFNLEtBQUssR0FBRyxLQUFLLEdBQUcsYUFBYTtJQUNyRCxNQUFNLGtCQUFrQixFQUFFO0lBQzFCLE1BQU0sbUJBQW1CLEVBQUU7QUFDM0IscUJBQWlCLGtCQUFrQjtBQUNuQyxRQUFJLEtBQUssaUJBQWlCLEtBQUssY0FBYyxhQUFhO0tBQ3pELE1BQU0sUUFBUSxLQUFLLGNBQWM7S0FDakMsTUFBTSxjQUFjLE1BQU0sTUFBTSxVQUFVLEVBQUUsQ0FBQztBQUM3QyxTQUFJLFlBQWEsa0JBQWlCLG1CQUFtQixVQUFVOztJQUVoRSxNQUFNLFdBQVcsTUFBTSxLQUFLLFFBQVE7S0FDbkMsTUFBTTtLQUNOLFFBQVE7S0FDUixTQUFTO0tBQ1QsT0FBTztLQUNQLE9BQU8sR0FBRyxVQUFVLGlCQUFpQixrQkFBa0IsYUFBYTtLQUNwRSxFQUFFLGNBQWM7QUFDakIsV0FBTyxJQUFJLFVBQVUsZ0JBQWdCLFNBQVM7S0FDN0M7Ozs7O0VBS0gsY0FBYztBQUNiLFVBQU8sWUFBWSxNQUFNLFdBQVcsS0FBSyxHQUFHLFdBQVcsb0JBQW9CLEVBQUUsRUFBRSxlQUFlO0FBQzdGLFdBQU8sT0FBTyxNQUFNLEtBQUssZUFBZSxtQkFBbUIsY0FBYyxFQUFFLE9BQU87S0FDakY7Ozs7O0VBS0gsd0JBQXdCLG1CQUFtQixlQUFlO0FBQ3pELFVBQU8sWUFBWSxNQUFNLEtBQUssR0FBRyxLQUFLLEdBQUcsYUFBYTtBQUNyRCxRQUFJLGtCQUFrQixhQUFhLEtBQU0sT0FBTSxJQUFJLFVBQVUsY0FBYyxVQUFVLDJGQUEyRjtBQUNoTCxRQUFJLGtCQUFrQixjQUFjLEtBQU0sT0FBTSxJQUFJLFVBQVUsY0FBYyxXQUFXLDRGQUE0RjtJQUNuTCxNQUFNLGtCQUFrQixFQUFFO0FBQzFCLFFBQUksa0JBQWtCLGFBQWEsS0FBTSxpQkFBZ0IsWUFBWSxrQkFBa0I7QUFDdkYsUUFBSSxrQkFBa0IsY0FBYyxLQUFNLGlCQUFnQixhQUFhLGtCQUFrQjtBQUN6RixRQUFJLGtCQUFrQixjQUFjLEtBQU0saUJBQWdCLGFBQWEsa0JBQWtCO0lBQ3pGLE1BQU0sbUJBQW1CLEVBQUU7QUFDM0IsUUFBSSxLQUFLLGlCQUFpQixLQUFLLGNBQWMsYUFBYTtLQUN6RCxNQUFNLFFBQVEsS0FBSyxjQUFjO0tBQ2pDLE1BQU0sY0FBYyxNQUFNLE1BQU0sVUFBVSxFQUFFLENBQUM7QUFDN0MsU0FBSSxZQUFhLGtCQUFpQixtQkFBbUIsVUFBVTs7SUFFaEUsTUFBTSxXQUFXLE1BQU0sS0FBSyxRQUFRO0tBQ25DLE1BQU07S0FDTixRQUFRO0tBQ1IsU0FBUztLQUNULE9BQU87S0FDUCxFQUFFLGNBQWM7QUFDakIsV0FBTyxJQUFJLFVBQVUsZ0JBQWdCLFdBQVcsZUFBZSxHQUFHLFVBQVUseUNBQXlDLFVBQVUsQ0FBQztLQUMvSDs7Ozs7RUFLSCxxQkFBcUIsbUJBQW1CLGVBQWU7QUFDdEQsVUFBTyxZQUFZLE1BQU0sS0FBSyxHQUFHLEtBQUssR0FBRyxhQUFhO0FBQ3JELFdBQU8sT0FBTyxNQUFNLEtBQUssd0JBQXdCLG1CQUFtQixjQUFjLEVBQUUsT0FBTztLQUMxRjs7Ozs7RUFLSCxrQkFBa0IsbUJBQW1CLGVBQWU7QUFDbkQsVUFBTyxZQUFZLE1BQU0sS0FBSyxHQUFHLEtBQUssR0FBRyxhQUFhO0lBQ3JELE1BQU0sa0JBQWtCLEVBQUU7QUFDMUIsUUFBSSxrQkFBa0IsZ0JBQWdCLEtBQU0saUJBQWdCLGVBQWUsa0JBQWtCO0FBQzdGLFFBQUksa0JBQWtCLGFBQWEsS0FBTSxpQkFBZ0IsWUFBWSxrQkFBa0I7QUFDdkYsUUFBSSxrQkFBa0IsY0FBYyxLQUFNLGlCQUFnQixhQUFhLGtCQUFrQjtBQUN6RixRQUFJLGtCQUFrQiwwQkFBMEIsS0FBTSxpQkFBZ0IseUJBQXlCLGtCQUFrQjtBQUNqSCxRQUFJLGtCQUFrQiw0QkFBNEIsS0FBTSxpQkFBZ0IsMkJBQTJCLGtCQUFrQjtJQUNySCxNQUFNLG1CQUFtQixFQUFFO0FBQzNCLFFBQUksS0FBSyxpQkFBaUIsS0FBSyxjQUFjLGFBQWE7S0FDekQsTUFBTSxRQUFRLEtBQUssY0FBYztLQUNqQyxNQUFNLGNBQWMsTUFBTSxNQUFNLFVBQVUsRUFBRSxDQUFDO0FBQzdDLFNBQUksWUFBYSxrQkFBaUIsbUJBQW1CLFVBQVU7O0lBRWhFLE1BQU0sV0FBVyxNQUFNLEtBQUssUUFBUTtLQUNuQyxNQUFNO0tBQ04sUUFBUTtLQUNSLFNBQVM7S0FDVCxPQUFPO0tBQ1AsRUFBRSxjQUFjO0FBQ2pCLFdBQU8sSUFBSSxVQUFVLGdCQUFnQixXQUFXLGVBQWUsR0FBRyxVQUFVLG1DQUFtQyxVQUFVLENBQUM7S0FDekg7Ozs7O0VBS0gsaUJBQWlCO0FBQ2hCLFVBQU8sWUFBWSxNQUFNLFdBQVcsS0FBSyxHQUFHLFdBQVcsb0JBQW9CLEVBQUUsRUFBRSxlQUFlO0FBQzdGLFdBQU8sT0FBTyxNQUFNLEtBQUssa0JBQWtCLG1CQUFtQixjQUFjLEVBQUUsT0FBTztLQUNwRjs7Ozs7RUFLSCxZQUFZLG1CQUFtQixlQUFlO0FBQzdDLFVBQU8sWUFBWSxNQUFNLEtBQUssR0FBRyxLQUFLLEdBQUcsYUFBYTtBQUNyRCxRQUFJLGtCQUFrQixVQUFVLEtBQU0sT0FBTSxJQUFJLFVBQVUsY0FBYyxPQUFPLDRFQUE0RTtJQUMzSixNQUFNLGtCQUFrQixFQUFFO0FBQzFCLFFBQUksa0JBQWtCLFVBQVUsS0FBTSxpQkFBZ0IsU0FBUyxrQkFBa0I7SUFDakYsTUFBTSxtQkFBbUIsRUFBRTtBQUMzQixRQUFJLEtBQUssaUJBQWlCLEtBQUssY0FBYyxhQUFhO0tBQ3pELE1BQU0sUUFBUSxLQUFLLGNBQWM7S0FDakMsTUFBTSxjQUFjLE1BQU0sTUFBTSxVQUFVLEVBQUUsQ0FBQztBQUM3QyxTQUFJLFlBQWEsa0JBQWlCLG1CQUFtQixVQUFVOztJQUVoRSxNQUFNLFdBQVcsTUFBTSxLQUFLLFFBQVE7S0FDbkMsTUFBTTtLQUNOLFFBQVE7S0FDUixTQUFTO0tBQ1QsT0FBTztLQUNQLEVBQUUsY0FBYztBQUNqQixXQUFPLElBQUksVUFBVSxnQkFBZ0IsV0FBVyxlQUFlLEdBQUcsVUFBVSw4QkFBOEIsVUFBVSxDQUFDO0tBQ3BIOzs7OztFQUtILFNBQVMsbUJBQW1CLGVBQWU7QUFDMUMsVUFBTyxZQUFZLE1BQU0sS0FBSyxHQUFHLEtBQUssR0FBRyxhQUFhO0FBQ3JELFdBQU8sT0FBTyxNQUFNLEtBQUssWUFBWSxtQkFBbUIsY0FBYyxFQUFFLE9BQU87S0FDOUU7Ozs7O0VBS0gsc0JBQXNCLG1CQUFtQixlQUFlO0FBQ3ZELFVBQU8sWUFBWSxNQUFNLEtBQUssR0FBRyxLQUFLLEdBQUcsYUFBYTtBQUNyRCxRQUFJLGtCQUFrQixhQUFhLEtBQU0sT0FBTSxJQUFJLFVBQVUsY0FBYyxVQUFVLHlGQUF5RjtBQUM5SyxRQUFJLGtCQUFrQixjQUFjLEtBQU0sT0FBTSxJQUFJLFVBQVUsY0FBYyxXQUFXLDBGQUEwRjtBQUNqTCxRQUFJLGtCQUFrQixpQkFBaUIsS0FBTSxPQUFNLElBQUksVUFBVSxjQUFjLGNBQWMsNkZBQTZGO0lBQzFMLE1BQU0sa0JBQWtCLEVBQUU7QUFDMUIsUUFBSSxrQkFBa0IsYUFBYSxLQUFNLGlCQUFnQixZQUFZLGtCQUFrQjtBQUN2RixRQUFJLGtCQUFrQixjQUFjLEtBQU0saUJBQWdCLGFBQWEsa0JBQWtCO0FBQ3pGLFFBQUksa0JBQWtCLGlCQUFpQixLQUFNLGlCQUFnQixnQkFBZ0Isa0JBQWtCO0lBQy9GLE1BQU0sbUJBQW1CLEVBQUU7QUFDM0IsUUFBSSxLQUFLLGlCQUFpQixLQUFLLGNBQWMsYUFBYTtLQUN6RCxNQUFNLFFBQVEsS0FBSyxjQUFjO0tBQ2pDLE1BQU0sY0FBYyxNQUFNLE1BQU0sVUFBVSxFQUFFLENBQUM7QUFDN0MsU0FBSSxZQUFhLGtCQUFpQixtQkFBbUIsVUFBVTs7SUFFaEUsTUFBTSxXQUFXLE1BQU0sS0FBSyxRQUFRO0tBQ25DLE1BQU07S0FDTixRQUFRO0tBQ1IsU0FBUztLQUNULE9BQU87S0FDUCxFQUFFLGNBQWM7QUFDakIsV0FBTyxJQUFJLFVBQVUsZ0JBQWdCLFdBQVcsZUFBZSxHQUFHLFVBQVUsdUNBQXVDLFVBQVUsQ0FBQztLQUM3SDs7Ozs7RUFLSCxtQkFBbUIsbUJBQW1CLGVBQWU7QUFDcEQsVUFBTyxZQUFZLE1BQU0sS0FBSyxHQUFHLEtBQUssR0FBRyxhQUFhO0FBQ3JELFdBQU8sT0FBTyxNQUFNLEtBQUssc0JBQXNCLG1CQUFtQixjQUFjLEVBQUUsT0FBTztLQUN4Rjs7O0FBR0osU0FBUSxhQUFhOzs7OztDQUtyQixJQUFJO0FBQ0osRUFBQyxTQUFTLDRCQUE0QjtBQUNyQyw2QkFBMkIsVUFBVTtBQUNyQyw2QkFBMkIsZ0JBQWdCO0FBQzNDLDZCQUEyQixTQUFTO0FBQ3BDLDZCQUEyQixVQUFVO0lBQ25DLDZCQUE2QixRQUFRLDJCQUEyQiwyQkFBMkIsRUFBRSxFQUFFO0lBQy9GLENBQUM7QUFJTCxJQUFJLHVCQUF1QywyQkFBVyxFQUFFLGlGQUFpRixZQUFZOzs7Ozs7Ozs7Ozs7Q0FZcEosSUFBSSxjQUFjLFdBQVcsUUFBUSxhQUFhLFNBQVMsU0FBUyxZQUFZLEdBQUcsV0FBVztFQUM3RixTQUFTLE1BQU0sT0FBTztBQUNyQixVQUFPLGlCQUFpQixJQUFJLFFBQVEsSUFBSSxFQUFFLFNBQVMsU0FBUztBQUMzRCxZQUFRLE1BQU07S0FDYjs7QUFFSCxTQUFPLEtBQUssTUFBTSxJQUFJLFVBQVUsU0FBUyxTQUFTLFFBQVE7R0FDekQsU0FBUyxVQUFVLE9BQU87QUFDekIsUUFBSTtBQUNILFVBQUssVUFBVSxLQUFLLE1BQU0sQ0FBQzthQUNuQixHQUFHO0FBQ1gsWUFBTyxFQUFFOzs7R0FHWCxTQUFTLFNBQVMsT0FBTztBQUN4QixRQUFJO0FBQ0gsVUFBSyxVQUFVLFNBQVMsTUFBTSxDQUFDO2FBQ3ZCLEdBQUc7QUFDWCxZQUFPLEVBQUU7OztHQUdYLFNBQVMsS0FBSyxRQUFRO0FBQ3JCLFdBQU8sT0FBTyxRQUFRLE9BQU8sTUFBTSxHQUFHLE1BQU0sT0FBTyxNQUFNLENBQUMsS0FBSyxXQUFXLFNBQVM7O0FBRXBGLFNBQU0sWUFBWSxVQUFVLE1BQU0sU0FBUyxjQUFjLEVBQUUsQ0FBQyxFQUFFLE1BQU0sQ0FBQztJQUNwRTs7QUFFSCxRQUFPLGVBQWUsU0FBUyxjQUFjLEVBQUUsT0FBTyxNQUFNLENBQUM7QUFDN0QsU0FBUSxlQUFlLEtBQUs7Q0FDNUIsTUFBTSxZQUFZLGlCQUFpQjtDQUNuQyxNQUFNLFlBQVksZ0JBQWdCOzs7O0NBSWxDLElBQUksZUFBZSxjQUFjLFVBQVUsUUFBUTs7OztFQUlsRCx1QkFBdUIsbUJBQW1CLGVBQWU7QUFDeEQsVUFBTyxZQUFZLE1BQU0sS0FBSyxHQUFHLEtBQUssR0FBRyxhQUFhO0lBQ3JELE1BQU0sa0JBQWtCLEVBQUU7SUFDMUIsTUFBTSxtQkFBbUIsRUFBRTtBQUMzQixxQkFBaUIsa0JBQWtCO0FBQ25DLFFBQUksS0FBSyxpQkFBaUIsS0FBSyxjQUFjLGFBQWE7S0FDekQsTUFBTSxRQUFRLEtBQUssY0FBYztLQUNqQyxNQUFNLGNBQWMsTUFBTSxNQUFNLFVBQVUsRUFBRSxDQUFDO0FBQzdDLFNBQUksWUFBYSxrQkFBaUIsbUJBQW1CLFVBQVU7O0lBRWhFLE1BQU0sV0FBVyxNQUFNLEtBQUssUUFBUTtLQUNuQyxNQUFNO0tBQ04sUUFBUTtLQUNSLFNBQVM7S0FDVCxPQUFPO0tBQ1AsT0FBTyxHQUFHLFVBQVUsMEJBQTBCLGtCQUFrQixzQkFBc0I7S0FDdEYsRUFBRSxjQUFjO0FBQ2pCLFdBQU8sSUFBSSxVQUFVLGdCQUFnQixXQUFXLGNBQWMsVUFBVSxJQUFJLFVBQVUsaUJBQWlCLENBQUM7S0FDdkc7Ozs7O0VBS0gsc0JBQXNCO0FBQ3JCLFVBQU8sWUFBWSxNQUFNLFdBQVcsS0FBSyxHQUFHLFdBQVcsb0JBQW9CLEVBQUUsRUFBRSxlQUFlO0FBQzdGLFdBQU8sT0FBTyxNQUFNLEtBQUssdUJBQXVCLG1CQUFtQixjQUFjLEVBQUUsT0FBTztLQUN6Rjs7Ozs7RUFLSCx5QkFBeUIsbUJBQW1CLGVBQWU7QUFDMUQsVUFBTyxZQUFZLE1BQU0sS0FBSyxHQUFHLEtBQUssR0FBRyxhQUFhO0lBQ3JELE1BQU0sa0JBQWtCLEVBQUU7SUFDMUIsTUFBTSxtQkFBbUIsRUFBRTtBQUMzQixxQkFBaUIsa0JBQWtCO0FBQ25DLFFBQUksS0FBSyxpQkFBaUIsS0FBSyxjQUFjLGFBQWE7S0FDekQsTUFBTSxRQUFRLEtBQUssY0FBYztLQUNqQyxNQUFNLGNBQWMsTUFBTSxNQUFNLFVBQVUsRUFBRSxDQUFDO0FBQzdDLFNBQUksWUFBYSxrQkFBaUIsbUJBQW1CLFVBQVU7O0lBRWhFLE1BQU0sV0FBVyxNQUFNLEtBQUssUUFBUTtLQUNuQyxNQUFNO0tBQ04sUUFBUTtLQUNSLFNBQVM7S0FDVCxPQUFPO0tBQ1AsT0FBTyxHQUFHLFVBQVUsMEJBQTBCLGtCQUFrQixzQkFBc0I7S0FDdEYsRUFBRSxjQUFjO0FBQ2pCLFdBQU8sSUFBSSxVQUFVLGdCQUFnQixXQUFXLGNBQWMsVUFBVSxJQUFJLFVBQVUsbUJBQW1CLENBQUM7S0FDekc7Ozs7O0VBS0gsd0JBQXdCO0FBQ3ZCLFVBQU8sWUFBWSxNQUFNLFdBQVcsS0FBSyxHQUFHLFdBQVcsb0JBQW9CLEVBQUUsRUFBRSxlQUFlO0FBQzdGLFdBQU8sT0FBTyxNQUFNLEtBQUsseUJBQXlCLG1CQUFtQixjQUFjLEVBQUUsT0FBTztLQUMzRjs7Ozs7RUFLSCx3QkFBd0IsbUJBQW1CLGVBQWU7QUFDekQsVUFBTyxZQUFZLE1BQU0sS0FBSyxHQUFHLEtBQUssR0FBRyxhQUFhO0lBQ3JELE1BQU0sa0JBQWtCLEVBQUU7SUFDMUIsTUFBTSxtQkFBbUIsRUFBRTtBQUMzQixxQkFBaUIsa0JBQWtCO0FBQ25DLFFBQUksS0FBSyxpQkFBaUIsS0FBSyxjQUFjLGFBQWE7S0FDekQsTUFBTSxRQUFRLEtBQUssY0FBYztLQUNqQyxNQUFNLGNBQWMsTUFBTSxNQUFNLFVBQVUsRUFBRSxDQUFDO0FBQzdDLFNBQUksWUFBYSxrQkFBaUIsbUJBQW1CLFVBQVU7O0lBRWhFLE1BQU0sV0FBVyxNQUFNLEtBQUssUUFBUTtLQUNuQyxNQUFNO0tBQ04sUUFBUTtLQUNSLFNBQVM7S0FDVCxPQUFPO0tBQ1AsT0FBTyxHQUFHLFVBQVUsNkJBQTZCLGtCQUFrQix5QkFBeUI7S0FDNUYsRUFBRSxjQUFjO0FBQ2pCLFdBQU8sSUFBSSxVQUFVLGdCQUFnQixXQUFXLGVBQWUsR0FBRyxVQUFVLGdDQUFnQyxVQUFVLENBQUM7S0FDdEg7Ozs7O0VBS0gsdUJBQXVCO0FBQ3RCLFVBQU8sWUFBWSxNQUFNLFdBQVcsS0FBSyxHQUFHLFdBQVcsb0JBQW9CLEVBQUUsRUFBRSxlQUFlO0FBQzdGLFdBQU8sT0FBTyxNQUFNLEtBQUssd0JBQXdCLG1CQUFtQixjQUFjLEVBQUUsT0FBTztLQUMxRjs7Ozs7RUFLSCxzQkFBc0IsbUJBQW1CLGVBQWU7QUFDdkQsVUFBTyxZQUFZLE1BQU0sS0FBSyxHQUFHLEtBQUssR0FBRyxhQUFhO0lBQ3JELE1BQU0sa0JBQWtCLEVBQUU7SUFDMUIsTUFBTSxtQkFBbUIsRUFBRTtBQUMzQixxQkFBaUIsa0JBQWtCO0FBQ25DLFFBQUksS0FBSyxpQkFBaUIsS0FBSyxjQUFjLGFBQWE7S0FDekQsTUFBTSxRQUFRLEtBQUssY0FBYztLQUNqQyxNQUFNLGNBQWMsTUFBTSxNQUFNLFVBQVUsRUFBRSxDQUFDO0FBQzdDLFNBQUksWUFBYSxrQkFBaUIsbUJBQW1CLFVBQVU7O0lBRWhFLE1BQU0sV0FBVyxNQUFNLEtBQUssUUFBUTtLQUNuQyxNQUFNO0tBQ04sUUFBUTtLQUNSLFNBQVM7S0FDVCxPQUFPO0tBQ1AsT0FBTyxHQUFHLFVBQVUsMkJBQTJCLGtCQUFrQix1QkFBdUI7S0FDeEYsRUFBRSxjQUFjO0FBQ2pCLFdBQU8sSUFBSSxVQUFVLGdCQUFnQixXQUFXLGVBQWUsR0FBRyxVQUFVLDhCQUE4QixVQUFVLENBQUM7S0FDcEg7Ozs7O0VBS0gscUJBQXFCO0FBQ3BCLFVBQU8sWUFBWSxNQUFNLFdBQVcsS0FBSyxHQUFHLFdBQVcsb0JBQW9CLEVBQUUsRUFBRSxlQUFlO0FBQzdGLFdBQU8sT0FBTyxNQUFNLEtBQUssc0JBQXNCLG1CQUFtQixjQUFjLEVBQUUsT0FBTztLQUN4Rjs7O0FBR0osU0FBUSxlQUFlO0lBQ3BCLENBQUM7QUFJTCxJQUFJLHNCQUFzQywyQkFBVyxFQUFFLGdGQUFnRixZQUFZOzs7Ozs7Ozs7Ozs7Q0FZbEosSUFBSSxjQUFjLFdBQVcsUUFBUSxhQUFhLFNBQVMsU0FBUyxZQUFZLEdBQUcsV0FBVztFQUM3RixTQUFTLE1BQU0sT0FBTztBQUNyQixVQUFPLGlCQUFpQixJQUFJLFFBQVEsSUFBSSxFQUFFLFNBQVMsU0FBUztBQUMzRCxZQUFRLE1BQU07S0FDYjs7QUFFSCxTQUFPLEtBQUssTUFBTSxJQUFJLFVBQVUsU0FBUyxTQUFTLFFBQVE7R0FDekQsU0FBUyxVQUFVLE9BQU87QUFDekIsUUFBSTtBQUNILFVBQUssVUFBVSxLQUFLLE1BQU0sQ0FBQzthQUNuQixHQUFHO0FBQ1gsWUFBTyxFQUFFOzs7R0FHWCxTQUFTLFNBQVMsT0FBTztBQUN4QixRQUFJO0FBQ0gsVUFBSyxVQUFVLFNBQVMsTUFBTSxDQUFDO2FBQ3ZCLEdBQUc7QUFDWCxZQUFPLEVBQUU7OztHQUdYLFNBQVMsS0FBSyxRQUFRO0FBQ3JCLFdBQU8sT0FBTyxRQUFRLE9BQU8sTUFBTSxHQUFHLE1BQU0sT0FBTyxNQUFNLENBQUMsS0FBSyxXQUFXLFNBQVM7O0FBRXBGLFNBQU0sWUFBWSxVQUFVLE1BQU0sU0FBUyxjQUFjLEVBQUUsQ0FBQyxFQUFFLE1BQU0sQ0FBQztJQUNwRTs7QUFFSCxRQUFPLGVBQWUsU0FBUyxjQUFjLEVBQUUsT0FBTyxNQUFNLENBQUM7QUFDN0QsU0FBUSxjQUFjLEtBQUs7Q0FDM0IsTUFBTSxZQUFZLGlCQUFpQjtDQUNuQyxNQUFNLFlBQVksZ0JBQWdCOzs7O0NBSWxDLElBQUksY0FBYyxjQUFjLFVBQVUsUUFBUTs7OztFQUlqRCwwQkFBMEIsbUJBQW1CLGVBQWU7QUFDM0QsVUFBTyxZQUFZLE1BQU0sS0FBSyxHQUFHLEtBQUssR0FBRyxhQUFhO0lBQ3JELE1BQU0sa0JBQWtCLEVBQUU7SUFDMUIsTUFBTSxtQkFBbUIsRUFBRTtBQUMzQixxQkFBaUIsa0JBQWtCO0FBQ25DLFFBQUksS0FBSyxpQkFBaUIsS0FBSyxjQUFjLGFBQWE7S0FDekQsTUFBTSxRQUFRLEtBQUssY0FBYztLQUNqQyxNQUFNLGNBQWMsTUFBTSxNQUFNLFVBQVUsRUFBRSxDQUFDO0FBQzdDLFNBQUksWUFBYSxrQkFBaUIsbUJBQW1CLFVBQVU7O0lBRWhFLE1BQU0sV0FBVyxNQUFNLEtBQUssUUFBUTtLQUNuQyxNQUFNO0tBQ04sUUFBUTtLQUNSLFNBQVM7S0FDVCxPQUFPO0tBQ1AsT0FBTyxHQUFHLFVBQVUsK0JBQStCLGtCQUFrQiwyQkFBMkI7S0FDaEcsRUFBRSxjQUFjO0FBQ2pCLFdBQU8sSUFBSSxVQUFVLGdCQUFnQixXQUFXLGVBQWUsR0FBRyxVQUFVLGtDQUFrQyxVQUFVLENBQUM7S0FDeEg7Ozs7O0VBS0gseUJBQXlCO0FBQ3hCLFVBQU8sWUFBWSxNQUFNLFdBQVcsS0FBSyxHQUFHLFdBQVcsb0JBQW9CLEVBQUUsRUFBRSxlQUFlO0FBQzdGLFdBQU8sT0FBTyxNQUFNLEtBQUssMEJBQTBCLG1CQUFtQixjQUFjLEVBQUUsT0FBTztLQUM1Rjs7O0FBR0osU0FBUSxjQUFjO0lBQ25CLENBQUM7QUFJTCxJQUFJLG9CQUFvQywyQkFBVyxFQUFFLDhFQUE4RSxZQUFZOzs7Ozs7Ozs7Ozs7Q0FZOUksSUFBSSxZQUFZLFdBQVcsUUFBUSxhQUFhLFNBQVMsU0FBUyxZQUFZLEdBQUcsV0FBVztFQUMzRixTQUFTLE1BQU0sT0FBTztBQUNyQixVQUFPLGlCQUFpQixJQUFJLFFBQVEsSUFBSSxFQUFFLFNBQVMsU0FBUztBQUMzRCxZQUFRLE1BQU07S0FDYjs7QUFFSCxTQUFPLEtBQUssTUFBTSxJQUFJLFVBQVUsU0FBUyxTQUFTLFFBQVE7R0FDekQsU0FBUyxVQUFVLE9BQU87QUFDekIsUUFBSTtBQUNILFVBQUssVUFBVSxLQUFLLE1BQU0sQ0FBQzthQUNuQixHQUFHO0FBQ1gsWUFBTyxFQUFFOzs7R0FHWCxTQUFTLFNBQVMsT0FBTztBQUN4QixRQUFJO0FBQ0gsVUFBSyxVQUFVLFNBQVMsTUFBTSxDQUFDO2FBQ3ZCLEdBQUc7QUFDWCxZQUFPLEVBQUU7OztHQUdYLFNBQVMsS0FBSyxRQUFRO0FBQ3JCLFdBQU8sT0FBTyxRQUFRLE9BQU8sTUFBTSxHQUFHLE1BQU0sT0FBTyxNQUFNLENBQUMsS0FBSyxXQUFXLFNBQVM7O0FBRXBGLFNBQU0sWUFBWSxVQUFVLE1BQU0sU0FBUyxjQUFjLEVBQUUsQ0FBQyxFQUFFLE1BQU0sQ0FBQztJQUNwRTs7QUFFSCxRQUFPLGVBQWUsU0FBUyxjQUFjLEVBQUUsT0FBTyxNQUFNLENBQUM7QUFDN0QsU0FBUSxZQUFZLEtBQUs7Q0FDekIsTUFBTSxVQUFVLGlCQUFpQjtDQUNqQyxNQUFNLFVBQVUsZ0JBQWdCOzs7O0NBSWhDLElBQUksWUFBWSxjQUFjLFFBQVEsUUFBUTs7O0VBRzdDLG9CQUFvQixtQkFBbUIsZUFBZTtBQUNyRCxVQUFPLFVBQVUsTUFBTSxLQUFLLEdBQUcsS0FBSyxHQUFHLGFBQWE7QUFDbkQsUUFBSSxrQkFBa0IsWUFBWSxLQUFNLE9BQU0sSUFBSSxRQUFRLGNBQWMsU0FBUyxzRkFBc0Y7SUFDdkssTUFBTSxrQkFBa0IsRUFBRTtBQUMxQixRQUFJLGtCQUFrQixZQUFZLEtBQU0saUJBQWdCLFdBQVcsa0JBQWtCO0FBQ3JGLFFBQUksa0JBQWtCLFlBQVksS0FBTSxpQkFBZ0IsV0FBVyxrQkFBa0I7QUFDckYsUUFBSSxrQkFBa0IsY0FBYyxLQUFNLGlCQUFnQixhQUFhLGtCQUFrQjtBQUN6RixRQUFJLGtCQUFrQixhQUFhLEtBQU0saUJBQWdCLFlBQVksa0JBQWtCO0lBQ3ZGLE1BQU0sbUJBQW1CLEVBQUU7QUFDM0IsUUFBSSxLQUFLLGlCQUFpQixLQUFLLGNBQWMsYUFBYTtLQUN6RCxNQUFNLFFBQVEsS0FBSyxjQUFjO0tBQ2pDLE1BQU0sY0FBYyxNQUFNLE1BQU0sVUFBVSxFQUFFLENBQUM7QUFDN0MsU0FBSSxZQUFhLGtCQUFpQixtQkFBbUIsVUFBVTs7SUFFaEUsTUFBTSxXQUFXLE1BQU0sS0FBSyxRQUFRO0tBQ25DLE1BQU07S0FDTixRQUFRO0tBQ1IsU0FBUztLQUNULE9BQU87S0FDUCxFQUFFLGNBQWM7QUFDakIsV0FBTyxJQUFJLFFBQVEsZ0JBQWdCLFdBQVcsZUFBZSxHQUFHLFFBQVEsK0JBQStCLFVBQVUsQ0FBQztLQUNqSDs7OztFQUlILGlCQUFpQixtQkFBbUIsZUFBZTtBQUNsRCxVQUFPLFVBQVUsTUFBTSxLQUFLLEdBQUcsS0FBSyxHQUFHLGFBQWE7QUFDbkQsV0FBTyxPQUFPLE1BQU0sS0FBSyxvQkFBb0IsbUJBQW1CLGNBQWMsRUFBRSxPQUFPO0tBQ3RGOzs7O0VBSUgsMEJBQTBCLG1CQUFtQixlQUFlO0FBQzNELFVBQU8sVUFBVSxNQUFNLEtBQUssR0FBRyxLQUFLLEdBQUcsYUFBYTtJQUNuRCxNQUFNLGtCQUFrQixFQUFFO0FBQzFCLFFBQUksa0JBQWtCLGFBQWEsS0FBTSxpQkFBZ0IsWUFBWSxrQkFBa0I7SUFDdkYsTUFBTSxtQkFBbUIsRUFBRTtBQUMzQixRQUFJLEtBQUssaUJBQWlCLEtBQUssY0FBYyxhQUFhO0tBQ3pELE1BQU0sUUFBUSxLQUFLLGNBQWM7S0FDakMsTUFBTSxjQUFjLE1BQU0sTUFBTSxVQUFVLEVBQUUsQ0FBQztBQUM3QyxTQUFJLFlBQWEsa0JBQWlCLG1CQUFtQixVQUFVOztJQUVoRSxNQUFNLFdBQVcsTUFBTSxLQUFLLFFBQVE7S0FDbkMsTUFBTTtLQUNOLFFBQVE7S0FDUixTQUFTO0tBQ1QsT0FBTztLQUNQLEVBQUUsY0FBYztBQUNqQixXQUFPLElBQUksUUFBUSxnQkFBZ0IsV0FBVyxlQUFlLEdBQUcsUUFBUSxtQ0FBbUMsVUFBVSxDQUFDO0tBQ3JIOzs7O0VBSUgseUJBQXlCO0FBQ3hCLFVBQU8sVUFBVSxNQUFNLFdBQVcsS0FBSyxHQUFHLFdBQVcsb0JBQW9CLEVBQUUsRUFBRSxlQUFlO0FBQzNGLFdBQU8sT0FBTyxNQUFNLEtBQUssMEJBQTBCLG1CQUFtQixjQUFjLEVBQUUsT0FBTztLQUM1Rjs7O0FBR0osU0FBUSxZQUFZO0lBQ2pCLENBQUM7QUFJTCxJQUFJLGVBQStCLDJCQUFXLEVBQUUsMEVBQTBFLFlBQVk7Q0FDckksSUFBSSxvQkFBb0IsV0FBVyxRQUFRLG9CQUFvQixPQUFPLFVBQVUsU0FBUyxHQUFHLEdBQUcsR0FBRyxJQUFJO0FBQ3JHLE1BQUksT0FBTyxLQUFLLEVBQUcsTUFBSztFQUN4QixJQUFJLE9BQU8sT0FBTyx5QkFBeUIsR0FBRyxFQUFFO0FBQ2hELE1BQUksQ0FBQyxTQUFTLFNBQVMsT0FBTyxDQUFDLEVBQUUsYUFBYSxLQUFLLFlBQVksS0FBSyxjQUFlLFFBQU87R0FDekYsWUFBWTtHQUNaLEtBQUssV0FBVztBQUNmLFdBQU8sRUFBRTs7R0FFVjtBQUNELFNBQU8sZUFBZSxHQUFHLElBQUksS0FBSztPQUM3QixTQUFTLEdBQUcsR0FBRyxHQUFHLElBQUk7QUFDM0IsTUFBSSxPQUFPLEtBQUssRUFBRyxNQUFLO0FBQ3hCLElBQUUsTUFBTSxFQUFFOztDQUVYLElBQUksaUJBQWlCLFdBQVcsUUFBUSxnQkFBZ0IsU0FBUyxHQUFHLFdBQVc7QUFDOUUsT0FBSyxJQUFJLEtBQUssRUFBRyxLQUFJLE1BQU0sYUFBYSxDQUFDLE9BQU8sVUFBVSxlQUFlLEtBQUssV0FBVyxFQUFFLENBQUUsbUJBQWtCLFdBQVcsR0FBRyxFQUFFOztBQUVoSSxRQUFPLGVBQWUsU0FBUyxjQUFjLEVBQUUsT0FBTyxNQUFNLENBQUM7QUFDN0QsZ0JBQWUsNEJBQTRCLEVBQUUsUUFBUTtBQUNyRCxnQkFBZSxvQkFBb0IsRUFBRSxRQUFRO0FBQzdDLGdCQUFlLHNCQUFzQixFQUFFLFFBQVE7QUFDL0MsZ0JBQWUscUJBQXFCLEVBQUUsUUFBUTtBQUM5QyxnQkFBZSxtQkFBbUIsRUFBRSxRQUFRO0lBQ3pDLENBQUM7QUE4QkwsSUFBSSxjQUE4Qix5QkExQkMsMkJBQVcsRUFBRSxxRUFBcUUsWUFBWTtDQUNoSSxJQUFJLGtCQUFrQixXQUFXLFFBQVEsb0JBQW9CLE9BQU8sVUFBVSxTQUFTLEdBQUcsR0FBRyxHQUFHLElBQUk7QUFDbkcsTUFBSSxPQUFPLEtBQUssRUFBRyxNQUFLO0VBQ3hCLElBQUksT0FBTyxPQUFPLHlCQUF5QixHQUFHLEVBQUU7QUFDaEQsTUFBSSxDQUFDLFNBQVMsU0FBUyxPQUFPLENBQUMsRUFBRSxhQUFhLEtBQUssWUFBWSxLQUFLLGNBQWUsUUFBTztHQUN6RixZQUFZO0dBQ1osS0FBSyxXQUFXO0FBQ2YsV0FBTyxFQUFFOztHQUVWO0FBQ0QsU0FBTyxlQUFlLEdBQUcsSUFBSSxLQUFLO09BQzdCLFNBQVMsR0FBRyxHQUFHLEdBQUcsSUFBSTtBQUMzQixNQUFJLE9BQU8sS0FBSyxFQUFHLE1BQUs7QUFDeEIsSUFBRSxNQUFNLEVBQUU7O0NBRVgsSUFBSSxlQUFlLFdBQVcsUUFBUSxnQkFBZ0IsU0FBUyxHQUFHLFdBQVc7QUFDNUUsT0FBSyxJQUFJLEtBQUssRUFBRyxLQUFJLE1BQU0sYUFBYSxDQUFDLE9BQU8sVUFBVSxlQUFlLEtBQUssV0FBVyxFQUFFLENBQUUsaUJBQWdCLFdBQVcsR0FBRyxFQUFFOztBQUU5SCxRQUFPLGVBQWUsU0FBUyxjQUFjLEVBQUUsT0FBTyxNQUFNLENBQUM7QUFDN0QsY0FBYSxpQkFBaUIsRUFBRSxRQUFRO0FBQ3hDLGNBQWEsY0FBYyxFQUFFLFFBQVE7QUFDckMsY0FBYSxnQkFBZ0IsRUFBRSxRQUFRO0lBQ3BDLENBQUMsR0FJbUQsRUFBRSxFQUFFO0FBRzVELElBQUksb0JBQW9CLFlBQVk7QUFDcEMsSUFBSSx1QkFBdUIsWUFBWTtBQUN2QyxJQUFJLDJCQUEyQixZQUFZO0FBQzNDLElBQUksd0NBQXdDLFlBQVk7QUFDeEQsSUFBSSxjQUFjLFlBQVk7QUFDOUIsSUFBSSw4QkFBOEIsWUFBWTtBQUM5QyxJQUFJLHNCQUFzQixZQUFZO0FBQ3RDLElBQUkseUJBQXlCLFlBQVk7QUFDekMsSUFBSSwwQkFBMEIsWUFBWTtBQUMxQyxJQUFJLG1DQUFtQyxZQUFZO0FBQ25ELElBQUksbUJBQW1CLFlBQVk7QUFDbkMsSUFBSSxtQkFBbUIsWUFBWTtBQUNuQyxJQUFJLHVCQUF1QixZQUFZO0FBQ3ZDLElBQUksK0JBQStCLFlBQVk7QUFDL0MsSUFBSSwyQkFBMkIsWUFBWTtBQUMzQyxJQUFJLHFDQUFxQyxZQUFZO0FBQ3JELElBQUksMEJBQTBCLFlBQVk7QUFDMUMsSUFBSSxzQkFBc0IsWUFBWTtBQUN0QyxJQUFJLHNCQUFzQixZQUFZO0FBQ3RDLElBQUksMkJBQTJCLFlBQVk7QUFDM0MsSUFBSSxnQkFBZ0IsWUFBWTtBQUNoQyxJQUFJLGlDQUFpQyxZQUFZO0FBQ2pELElBQUksbUNBQW1DLFlBQVk7QUFDbkQsSUFBSSw0QkFBNEIsWUFBWTtBQUM1QyxJQUFJLGVBQWUsWUFBWTtBQUMvQixJQUFJLHVCQUF1QixZQUFZIn0=
5923
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlzdC1DdGtJTmkxUi5qcyIsIm5hbWVzIjpbIkJhc2VBUEkiXSwic291cmNlcyI6WyIuLi9ub2RlX21vZHVsZXMvQGVudml2ZS1haS90eXBlcy9kaXN0L2luZGV4LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vI3JlZ2lvbiByb2xsZG93bjpydW50aW1lXG52YXIgX19jcmVhdGUgPSBPYmplY3QuY3JlYXRlO1xudmFyIF9fZGVmUHJvcCA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBfX2dldE93blByb3BEZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbnZhciBfX2dldE93blByb3BOYW1lcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzO1xudmFyIF9fZ2V0UHJvdG9PZiA9IE9iamVjdC5nZXRQcm90b3R5cGVPZjtcbnZhciBfX2hhc093blByb3AgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIF9fY29tbW9uSlMgPSAoY2IsIG1vZCkgPT4gZnVuY3Rpb24oKSB7XG5cdHJldHVybiBtb2QgfHwgKDAsIGNiW19fZ2V0T3duUHJvcE5hbWVzKGNiKVswXV0pKChtb2QgPSB7IGV4cG9ydHM6IHt9IH0pLmV4cG9ydHMsIG1vZCksIG1vZC5leHBvcnRzO1xufTtcbnZhciBfX2NvcHlQcm9wcyA9ICh0bywgZnJvbSwgZXhjZXB0LCBkZXNjKSA9PiB7XG5cdGlmIChmcm9tICYmIHR5cGVvZiBmcm9tID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBmcm9tID09PSBcImZ1bmN0aW9uXCIpIGZvciAodmFyIGtleXMgPSBfX2dldE93blByb3BOYW1lcyhmcm9tKSwgaSA9IDAsIG4gPSBrZXlzLmxlbmd0aCwga2V5OyBpIDwgbjsgaSsrKSB7XG5cdFx0a2V5ID0ga2V5c1tpXTtcblx0XHRpZiAoIV9faGFzT3duUHJvcC5jYWxsKHRvLCBrZXkpICYmIGtleSAhPT0gZXhjZXB0KSBfX2RlZlByb3AodG8sIGtleSwge1xuXHRcdFx0Z2V0OiAoKGspID0+IGZyb21ba10pLmJpbmQobnVsbCwga2V5KSxcblx0XHRcdGVudW1lcmFibGU6ICEoZGVzYyA9IF9fZ2V0T3duUHJvcERlc2MoZnJvbSwga2V5KSkgfHwgZGVzYy5lbnVtZXJhYmxlXG5cdFx0fSk7XG5cdH1cblx0cmV0dXJuIHRvO1xufTtcbnZhciBfX3RvRVNNID0gKG1vZCwgaXNOb2RlTW9kZSwgdGFyZ2V0KSA9PiAodGFyZ2V0ID0gbW9kICE9IG51bGwgPyBfX2NyZWF0ZShfX2dldFByb3RvT2YobW9kKSkgOiB7fSwgX19jb3B5UHJvcHMoaXNOb2RlTW9kZSB8fCAhbW9kIHx8ICFtb2QuX19lc01vZHVsZSA/IF9fZGVmUHJvcCh0YXJnZXQsIFwiZGVmYXVsdFwiLCB7XG5cdHZhbHVlOiBtb2QsXG5cdGVudW1lcmFibGU6IHRydWVcbn0pIDogdGFyZ2V0LCBtb2QpKTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gc3JjL2FuYWx5dGljcy9Hb29nbGVBbmFseXRpY3NFdmVudHMudHNcbmxldCBHb29nbGVBbmFseXRpY3NFdmVudHMgPSAvKiBAX19QVVJFX18gKi8gZnVuY3Rpb24oR29vZ2xlQW5hbHl0aWNzRXZlbnRzJDEpIHtcblx0R29vZ2xlQW5hbHl0aWNzRXZlbnRzJDFbXCJBRERfVE9fQ0FSVF92MVwiXSA9IFwiYWRkX3RvX2NhcnRcIjtcblx0R29vZ2xlQW5hbHl0aWNzRXZlbnRzJDFbXCJBRERfVE9fQ0FSVF92MlwiXSA9IFwiYWRkVG9DYXJ0XCI7XG5cdHJldHVybiBHb29nbGVBbmFseXRpY3NFdmVudHMkMTtcbn0oe30pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiBzcmMvYW5hbHl0aWNzL1BlcmZNZXRyaWNzRXZlbnRzLnRzXG5sZXQgUGVyZk1ldHJpY3NFdmVudHMgPSAvKiBAX19QVVJFX18gKi8gZnVuY3Rpb24oUGVyZk1ldHJpY3NFdmVudHMkMSkge1xuXHRQZXJmTWV0cmljc0V2ZW50cyQxW1wiUGFnZUxvYWRPZmZzZXRcIl0gPSBcInBhZ2VfbG9hZF9vZmZzZXRfbXNcIjtcblx0UGVyZk1ldHJpY3NFdmVudHMkMVtcIk1haW5CdW5kbGVMb2FkZWRcIl0gPSBcIm1haW5fYnVuZGxlX2xvYWRlZF9tc1wiO1xuXHRQZXJmTWV0cmljc0V2ZW50cyQxW1wiT3JnQ29uZmlnTG9hZFN0YXJ0ZWRcIl0gPSBcIm9yZ19jb25maWdfbG9hZF9zdGFydGVkX21zXCI7XG5cdFBlcmZNZXRyaWNzRXZlbnRzJDFbXCJPcmdDb25maWdMb2FkRW5kZWRcIl0gPSBcIm9yZ19jb25maWdfbG9hZF9lbmRlZF9tc1wiO1xuXHRQZXJmTWV0cmljc0V2ZW50cyQxW1wiRmlyc3RSZXNwb25zZVN0YXJ0ZWRcIl0gPSBcImZpcnN0X3Jlc3BvbnNlX3N0YXJ0ZWRfbXNcIjtcblx0UGVyZk1ldHJpY3NFdmVudHMkMVtcIkZpcnN0UmVzcG9uc2VDb21wbGV0ZWRcIl0gPSBcImZpcnN0X3Jlc3BvbnNlX2NvbXBsZXRlZF9tc1wiO1xuXHRQZXJmTWV0cmljc0V2ZW50cyQxW1wiRmlyc3RTdWdnZXN0aW9uc1N0YXJ0ZWRcIl0gPSBcImZpcnN0X3N1Z2dlc3Rpb25zX3N0YXJ0ZWRfbXNcIjtcblx0UGVyZk1ldHJpY3NFdmVudHMkMVtcIkZpcnN0U3VnZ2VzdGlvbnNDb21wbGV0ZWRcIl0gPSBcImZpcnN0X3N1Z2dlc3Rpb25zX2NvbXBsZXRlZF9tc1wiO1xuXHRQZXJmTWV0cmljc0V2ZW50cyQxW1wiRW1iZWRkZWRXaWRnZXRSZW5kZXJlZFwiXSA9IFwiZW1iZWRkZWRfd2lkZ2V0X3JlbmRlcmVkX21zXCI7XG5cdFBlcmZNZXRyaWNzRXZlbnRzJDFbXCJGbG9hdGluZ0J1dHRvblJlbmRlcmVkXCJdID0gXCJmbG9hdGluZ19idXR0b25fcmVuZGVyZWRfbXNcIjtcblx0UGVyZk1ldHJpY3NFdmVudHMkMVtcIlRvcFN1Z2dlc3Rpb25zQmFyUmVuZGVyZWRcIl0gPSBcInRvcF9zdWdnZXN0aW9uc19iYXJfcmVuZGVyZWRfbXNcIjtcblx0UGVyZk1ldHJpY3NFdmVudHMkMVtcIkJvdHRvbVN1Z2dlc3Rpb25zQmFyUmVuZGVyZWRcIl0gPSBcImJvdHRvbV9zdWdnZXN0aW9uc19iYXJfcmVuZGVyZWRfbXNcIjtcblx0UGVyZk1ldHJpY3NFdmVudHMkMVtcIlNlYXJjaFByb21wdFJlbmRlcmVkXCJdID0gXCJzZWFyY2hfcHJvbXB0X3JlbmRlcmVkX21zXCI7XG5cdHJldHVybiBQZXJmTWV0cmljc0V2ZW50cyQxO1xufSh7fSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy9hbmFseXRpY3MvU3BpZmZ5RXZlbnQudHNcbmxldCBTcGlmZnlFdmVudCA9IC8qIEBfX1BVUkVfXyAqLyBmdW5jdGlvbihTcGlmZnlFdmVudCQxKSB7XG5cdFNwaWZmeUV2ZW50JDFbXCJBTVBMSVRVREVfRVZFTlRcIl0gPSBcIlNQSUZGWV9BTVBMSVRVREVfRVZFTlRcIjtcblx0U3BpZmZ5RXZlbnQkMVtcIkFQUF9JTklUSUFMSVpFRFwiXSA9IFwiU1BJRkZZX0FQUF9JTklUSUFMSVpFRFwiO1xuXHRTcGlmZnlFdmVudCQxW1wiQ0FMTF9NRVJDSEFOVF9BUFBcIl0gPSBcIlNQSUZGWV9DQUxMX01FUkNIQU5UX0FQUFwiO1xuXHRTcGlmZnlFdmVudCQxW1wiTU9VTlRJTkdfTUVSQ0hBTlRfQVBQXCJdID0gXCJTUElGRllfTU9VTlRJTkdfTUVSQ0hBTlRfQVBQXCI7XG5cdFNwaWZmeUV2ZW50JDFbXCJDSEFUX0ZBQ1RPUllfSU5JVElBTElaRURcIl0gPSBcIlNQSUZGWV9DSEFUX0ZBQ1RPUllfSU5JVElBTElaRURcIjtcblx0U3BpZmZ5RXZlbnQkMVtcIkZMT0FUSU5HX0NIQVRfUkVOREVSSU5HXCJdID0gXCJTUElGRllfRkxPQVRJTkdfQ0hBVF9SRU5ERVJJTkdcIjtcblx0U3BpZmZ5RXZlbnQkMVtcIkZMT0FUSU5HX0NIQVRfTk9UX1JFTkRFUklOR1wiXSA9IFwiU1BJRkZZX0ZMT0FUSU5HX0NIQVRfTk9UX1JFTkRFUklOR1wiO1xuXHRTcGlmZnlFdmVudCQxW1wiRkxPQVRJTkdfQ0hBVF9CVVRUT05fUkVOREVSSU5HXCJdID0gXCJTUElGRllfRkxPQVRJTkdfQ0hBVF9CVVRUT05fUkVOREVSSU5HXCI7XG5cdFNwaWZmeUV2ZW50JDFbXCJTSEFET1dfRE9NX0NPTlRBSU5FUl9SRUFEWVwiXSA9IFwiU1BJRkZZX1NIQURPV19ET01fQ09OVEFJTkVSX1JFQURZXCI7XG5cdHJldHVybiBTcGlmZnlFdmVudCQxO1xufSh7fSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy9hbmFseXRpY3MvU3BpZmZ5RXZlbnROYW1lLnRzXG5sZXQgU3BpZmZ5RXZlbnROYW1lID0gLyogQF9fUFVSRV9fICovIGZ1bmN0aW9uKFNwaWZmeUV2ZW50TmFtZSQxKSB7XG5cdFNwaWZmeUV2ZW50TmFtZSQxW1wiV2lkZ2V0T3BlblwiXSA9IFwic3BpZmZ5OndpZGdldG9wZW5cIjtcblx0U3BpZmZ5RXZlbnROYW1lJDFbXCJXaWRnZXRDbG9zZVwiXSA9IFwic3BpZmZ5OndpZGdldGNsb3NlXCI7XG5cdHJldHVybiBTcGlmZnlFdmVudE5hbWUkMTtcbn0oe30pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiBzcmMvYW5hbHl0aWNzL1NwaWZmeU1ldHJpY3NFdmVudE5hbWUudHNcbmxldCBTcGlmZnlNZXRyaWNzRXZlbnROYW1lID0gLyogQF9fUFVSRV9fICovIGZ1bmN0aW9uKFNwaWZmeU1ldHJpY3NFdmVudE5hbWUkMSkge1xuXHRTcGlmZnlNZXRyaWNzRXZlbnROYW1lJDFbXCJCdW5kbGVMb2FkZWRcIl0gPSBcIkJ1bmRsZSBMb2FkZWRcIjtcblx0U3BpZmZ5TWV0cmljc0V2ZW50TmFtZSQxW1wiQ2hhdExpdmVBZ2VudEJ0bkNsaWNrXCJdID0gXCJDaGF0IExpdmUgQWdlbnQgQnRuIENsaWNrXCI7XG5cdFNwaWZmeU1ldHJpY3NFdmVudE5hbWUkMVtcIkNoYXRGbG9hdGluZ0J1dHRvblZpc2libGVcIl0gPSBcIkNoYXQgRmxvYXRpbmcgQnV0dG9uIFZpc2libGVcIjtcblx0U3BpZmZ5TWV0cmljc0V2ZW50TmFtZSQxW1wiQ2hhdENvbXBvbmVudFZpc2libGVcIl0gPSBcIkNoYXQgQ29tcG9uZW50IFZpc2libGVcIjtcblx0U3BpZmZ5TWV0cmljc0V2ZW50TmFtZSQxW1wiQ2hhdENvbXBvbmVudEV4cGFuZGVkXCJdID0gXCJDaGF0IENvbXBvbmVudCBFeHBhbmRlZFwiO1xuXHRTcGlmZnlNZXRyaWNzRXZlbnROYW1lJDFbXCJDaGF0Q29tcG9uZW50Q29sbGFwc2VkXCJdID0gXCJDaGF0IENvbXBvbmVudCBDb2xsYXBzZWRcIjtcblx0U3BpZmZ5TWV0cmljc0V2ZW50TmFtZSQxW1wiQ2hhdFVzZXJNZXNzYWdlSW5wdXRcIl0gPSBcIkNoYXQgVXNlciBNZXNzYWdlIElucHV0XCI7XG5cdFNwaWZmeU1ldHJpY3NFdmVudE5hbWUkMVtcIkNoYXRTdWdnZXN0aW9uQ2xpY2tlZFwiXSA9IFwiQ2hhdCBTdWdnZXN0aW9uIENsaWNrZWRcIjtcblx0U3BpZmZ5TWV0cmljc0V2ZW50TmFtZSQxW1wiQ2hhdEFzc2lzdGFudFJlc3BvbnNlXCJdID0gXCJDaGF0IEFzc2lzdGFudCBSZXNwb25zZVwiO1xuXHRTcGlmZnlNZXRyaWNzRXZlbnROYW1lJDFbXCJQcm9kdWN0Q2FyZENsaWNrZWRcIl0gPSBcIlByb2R1Y3QgQ2FyZCBDbGlja2VkXCI7XG5cdFNwaWZmeU1ldHJpY3NFdmVudE5hbWUkMVtcIlByb2R1Y3RSZXZpZXdDYXJkQ2xpY2tlZFwiXSA9IFwiUHJvZHVjdCBSZXZpZXcgQ2FyZCBDbGlja2VkXCI7XG5cdFNwaWZmeU1ldHJpY3NFdmVudE5hbWUkMVtcIkFkZFRvQ2FydENsaWNrZWRcIl0gPSBcIkFkZCB0byBDYXJ0IENsaWNrZWRcIjtcblx0U3BpZmZ5TWV0cmljc0V2ZW50TmFtZSQxW1wiUHJvbXB0Q2FyZENsaWNrZWRcIl0gPSBcIlByb21wdCBDYXJkIENsaWNrZWRcIjtcblx0U3BpZmZ5TWV0cmljc0V2ZW50TmFtZSQxW1wiU3VwcG9ydGVkRXZlbnRcIl0gPSBcIlN1cHBvcnRlZCBFdmVudFwiO1xuXHRTcGlmZnlNZXRyaWNzRXZlbnROYW1lJDFbXCJTZWFyY2hCYWNrVG9SZXNwb25zZUNsaWNrZWRcIl0gPSBcIlNlYXJjaCBCYWNrIHRvIFJlc3BvbnNlIENsaWNrZWRcIjtcblx0U3BpZmZ5TWV0cmljc0V2ZW50TmFtZSQxW1wiUGVyZm9ybWFuY2VNZXRyaWNzXCJdID0gXCJQZXJmb3JtYW5jZSBNZXRyaWNzXCI7XG5cdFNwaWZmeU1ldHJpY3NFdmVudE5hbWUkMVtcIlNlYXJjaEJhckNsaWNrZWRcIl0gPSBcIlNlYXJjaCBCYXIgQ2xpY2tlZFwiO1xuXHRTcGlmZnlNZXRyaWNzRXZlbnROYW1lJDFbXCJPcmRlckxvb2t1cFN0YXJ0ZWRcIl0gPSBcIk9yZGVyIExvb2t1cCBTdGFydGVkXCI7XG5cdFNwaWZmeU1ldHJpY3NFdmVudE5hbWUkMVtcIk9yZGVyTG9va3VwRm9ybVN1Ym1pdHRlZFwiXSA9IFwiT3JkZXIgTG9va3VwIEZvcm0gU3VibWl0dGVkXCI7XG5cdFNwaWZmeU1ldHJpY3NFdmVudE5hbWUkMVtcIlNlYXJjaENvbXBvbmVudFZpc2libGVcIl0gPSBcIlNlYXJjaCBDb21wb25lbnQgVmlzaWJsZVwiO1xuXHRTcGlmZnlNZXRyaWNzRXZlbnROYW1lJDFbXCJTZWFyY2haZXJvU3RhdGVTdWdnZXN0aW9uQ2xpY2tlZFwiXSA9IFwiU2VhcmNoIFplcm8gU3RhdGUgU3VnZ2VzdGlvbiBDbGlja2VkXCI7XG5cdFNwaWZmeU1ldHJpY3NFdmVudE5hbWUkMVtcIlNlYXJjaElucHV0U3RhcnRlZFwiXSA9IFwiU2VhcmNoIElucHV0IFN0YXJ0ZWRcIjtcblx0U3BpZmZ5TWV0cmljc0V2ZW50TmFtZSQxW1wiU2VhcmNoUXVlcnlTdWJtaXR0ZWRcIl0gPSBcIlNlYXJjaCBRdWVyeSBTdWJtaXR0ZWRcIjtcblx0U3BpZmZ5TWV0cmljc0V2ZW50TmFtZSQxW1wiU2VhcmNoUmVzdWx0c1ZpZXdlZFwiXSA9IFwiU2VhcmNoIFJlc3VsdHMgVmlld2VkXCI7XG5cdFNwaWZmeU1ldHJpY3NFdmVudE5hbWUkMVtcIlNlYXJjaFRpbWVUb0ZpcnN0Q2xpY2tcIl0gPSBcIlNlYXJjaCBUaW1lIHRvIEZpcnN0IENsaWNrXCI7XG5cdFNwaWZmeU1ldHJpY3NFdmVudE5hbWUkMVtcIlNlYXJjaFplcm9SZXN1bHRzUmF0ZVwiXSA9IFwiU2VhcmNoIFplcm8gUmVzdWx0cyBSYXRlXCI7XG5cdFNwaWZmeU1ldHJpY3NFdmVudE5hbWUkMVtcIlNlYXJjaEZpbHRlckNsaWNrZWRcIl0gPSBcIlNlYXJjaCBGaWx0ZXIgQ2xpY2tlZFwiO1xuXHRTcGlmZnlNZXRyaWNzRXZlbnROYW1lJDFbXCJTZWFyY2hTb3J0Q2xpY2tlZFwiXSA9IFwiU2VhcmNoIFNvcnQgQ2xpY2tlZFwiO1xuXHRyZXR1cm4gU3BpZmZ5TWV0cmljc0V2ZW50TmFtZSQxO1xufSh7fSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy9jaGF0L0NoYXRFbGVtZW50RGlzcGxheUxvY2F0aW9uLnRzXG5sZXQgQ2hhdEVsZW1lbnREaXNwbGF5TG9jYXRpb24gPSAvKiBAX19QVVJFX18gKi8gZnVuY3Rpb24oQ2hhdEVsZW1lbnREaXNwbGF5TG9jYXRpb24kMSkge1xuXHRDaGF0RWxlbWVudERpc3BsYXlMb2NhdGlvbiQxW1wiSU5fQ0hBVFwiXSA9IFwiaW5fY2hhdFwiO1xuXHRDaGF0RWxlbWVudERpc3BsYXlMb2NhdGlvbiQxW1wiQ0hBVF9QUkVWSUVXXCJdID0gXCJjaGF0X3ByZXZpZXdcIjtcblx0Q2hhdEVsZW1lbnREaXNwbGF5TG9jYXRpb24kMVtcIkZMT0FUSU5HX0JVVFRPTlwiXSA9IFwiZmxvYXRpbmdfYnV0dG9uXCI7XG5cdENoYXRFbGVtZW50RGlzcGxheUxvY2F0aW9uJDFbXCJIRUxQX01FX0NIT09TRVwiXSA9IFwiaGVscF9tZV9jaG9vc2VcIjtcblx0Q2hhdEVsZW1lbnREaXNwbGF5TG9jYXRpb24kMVtcIlBMUF9JTUFHRV9CQU5ORVJcIl0gPSBcInBscF9pbWFnZV9iYW5uZXJcIjtcblx0Q2hhdEVsZW1lbnREaXNwbGF5TG9jYXRpb24kMVtcIlRPUF9SRVZJRVdTX1NOSVBQRVRcIl0gPSBcInRvcF9yZXZpZXdzX3NuaXBwZXRcIjtcblx0Q2hhdEVsZW1lbnREaXNwbGF5TG9jYXRpb24kMVtcIkJPVFRPTV9SRVZJRVdTX1NOSVBQRVRcIl0gPSBcImJvdHRvbV9yZXZpZXdzX3NuaXBwZXRcIjtcblx0Q2hhdEVsZW1lbnREaXNwbGF5TG9jYXRpb24kMVtcIkJMT0NLX0JBQ0tfQlVUVE9OXCJdID0gXCJibG9ja19iYWNrX2J1dHRvblwiO1xuXHRDaGF0RWxlbWVudERpc3BsYXlMb2NhdGlvbiQxW1wiU1dJVENIX1RPX0FHRU5UXCJdID0gXCJzd2l0Y2hfdG9fYWdlbnRcIjtcblx0Q2hhdEVsZW1lbnREaXNwbGF5TG9jYXRpb24kMVtcIkNPTlZFUlNBVElPTkFMX1NFQVJDSFwiXSA9IFwiY29udmVyc2F0aW9uYWxfc2VhcmNoXCI7XG5cdENoYXRFbGVtZW50RGlzcGxheUxvY2F0aW9uJDFbXCJHTE9CQUxfU0VBUkNIX0VOVFJZUE9JTlRcIl0gPSBcImdsb2JhbF9zZWFyY2hfZW50cnlwb2ludFwiO1xuXHRDaGF0RWxlbWVudERpc3BsYXlMb2NhdGlvbiQxW1wiU0VBUkNIX05BVl9FTlRSWVBPSU5UXCJdID0gXCJzZWFyY2hfbmF2X2VudHJ5cG9pbnRcIjtcblx0Q2hhdEVsZW1lbnREaXNwbGF5TG9jYXRpb24kMVtcIlNFQVJDSF9QUk9NUFRcIl0gPSBcInNlYXJjaF9wcm9tcHRcIjtcblx0Q2hhdEVsZW1lbnREaXNwbGF5TG9jYXRpb24kMVtcIlNFQVJDSF9QUk9NUFRfQlVUVE9OXCJdID0gXCJzZWFyY2hfcHJvbXB0X2J1dHRvblwiO1xuXHRDaGF0RWxlbWVudERpc3BsYXlMb2NhdGlvbiQxW1wiUFJPRFVDVF9HUklEXCJdID0gXCJwcm9kdWN0X2dyaWRcIjtcblx0Q2hhdEVsZW1lbnREaXNwbGF5TG9jYXRpb24kMVtcIlVOU1BFQ0lGSUVEXCJdID0gXCJ1bnNwZWNpZmllZFwiO1xuXHRDaGF0RWxlbWVudERpc3BsYXlMb2NhdGlvbiQxW1wiRklMVEVSX01PREFMXCJdID0gXCJmaWx0ZXJfbW9kYWxcIjtcblx0Q2hhdEVsZW1lbnREaXNwbGF5TG9jYXRpb24kMVtcIlBST01QVF9DQVJEXCJdID0gXCJwcm9tcHRfY2FyZFwiO1xuXHRDaGF0RWxlbWVudERpc3BsYXlMb2NhdGlvbiQxW1wiV0lORE9XX0FQSV9DQUxMXCJdID0gXCJ3aW5kb3dfYXBpX2NhbGxcIjtcblx0cmV0dXJuIENoYXRFbGVtZW50RGlzcGxheUxvY2F0aW9uJDE7XG59KHt9KTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gc3JjL2NoYXQvQ2hhdFN0YXRlLnRzXG5sZXQgQ2hhdFN0YXRlID0gLyogQF9fUFVSRV9fICovIGZ1bmN0aW9uKENoYXRTdGF0ZSQxKSB7XG5cdENoYXRTdGF0ZSQxW1wiSU5JVElBTFwiXSA9IFwiaW5pdGlhbFwiO1xuXHRDaGF0U3RhdGUkMVtcIkZPUk1cIl0gPSBcImZvcm1cIjtcblx0Q2hhdFN0YXRlJDFbXCJDSEFUXCJdID0gXCJjaGF0XCI7XG5cdHJldHVybiBDaGF0U3RhdGUkMTtcbn0oe30pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiBzcmMvY2hhdC9NZXNzYWdlLnRzXG5sZXQgTWVzc2FnZVJvbGUgPSAvKiBAX19QVVJFX18gKi8gZnVuY3Rpb24oTWVzc2FnZVJvbGUkMSkge1xuXHRNZXNzYWdlUm9sZSQxW1wiVXNlclwiXSA9IFwidXNlclwiO1xuXHRNZXNzYWdlUm9sZSQxW1wiQXNzaXN0YW50XCJdID0gXCJhc3Npc3RhbnRcIjtcblx0cmV0dXJuIE1lc3NhZ2VSb2xlJDE7XG59KHt9KTtcbmxldCBNZXNzYWdlVHlwZSA9IC8qIEBfX1BVUkVfXyAqLyBmdW5jdGlvbihNZXNzYWdlVHlwZSQxKSB7XG5cdE1lc3NhZ2VUeXBlJDFbXCJUZXh0XCJdID0gXCJ0ZXh0XCI7XG5cdE1lc3NhZ2VUeXBlJDFbXCJTdWdnZXN0aW9uQ2xpY2tlZFwiXSA9IFwic3VnZ2VzdGlvbl9jbGlja2VkXCI7XG5cdE1lc3NhZ2VUeXBlJDFbXCJQcm9kdWN0XCJdID0gXCJwcm9kdWN0XCI7XG5cdE1lc3NhZ2VUeXBlJDFbXCJQcm9kdWN0U2VhcmNoXCJdID0gXCJwcm9kdWN0X3NlYXJjaFwiO1xuXHRNZXNzYWdlVHlwZSQxW1wiUmV2aWV3XCJdID0gXCJyZXZpZXdcIjtcblx0TWVzc2FnZVR5cGUkMVtcIlF1ZXJ5VHlwZWRcIl0gPSBcInF1ZXJ5X3R5cGVkXCI7XG5cdE1lc3NhZ2VUeXBlJDFbXCJTZXBhcmF0b3JcIl0gPSBcInNlcGFyYXRvclwiO1xuXHRNZXNzYWdlVHlwZSQxW1wiUGFnZVwiXSA9IFwicGFnZVwiO1xuXHRNZXNzYWdlVHlwZSQxW1wiU2VhcmNoXCJdID0gXCJzZWFyY2hcIjtcblx0TWVzc2FnZVR5cGUkMVtcIkF0dGFjaG1lbnRcIl0gPSBcImF0dGFjaG1lbnRcIjtcblx0TWVzc2FnZVR5cGUkMVtcIkNYQWdlbnRSZXNwb25zZVwiXSA9IFwiY3hfYWdlbnRfcmVzcG9uc2VcIjtcblx0TWVzc2FnZVR5cGUkMVtcIkZvcm1cIl0gPSBcImZvcm1cIjtcblx0TWVzc2FnZVR5cGUkMVtcIk9yZGVyXCJdID0gXCJvcmRlclwiO1xuXHRNZXNzYWdlVHlwZSQxW1wiUHJvZHVjdFNlYXJjaEZpbHRlclwiXSA9IFwicHJvZHVjdF9zZWFyY2hfZmlsdGVyXCI7XG5cdHJldHVybiBNZXNzYWdlVHlwZSQxO1xufSh7fSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy9jaGF0L1N1Z2dlc3Rpb25CYXJMb2NhdGlvbkZvck1ldHJpY3MudHNcbmxldCBTdWdnZXN0aW9uQmFyTG9jYXRpb25Gb3JNZXRyaWNzID0gLyogQF9fUFVSRV9fICovIGZ1bmN0aW9uKFN1Z2dlc3Rpb25CYXJMb2NhdGlvbkZvck1ldHJpY3MkMSkge1xuXHRTdWdnZXN0aW9uQmFyTG9jYXRpb25Gb3JNZXRyaWNzJDFbXCJTVUdHRVNUSU9OX0JBUl9UT1BcIl0gPSBcInRvcFwiO1xuXHRTdWdnZXN0aW9uQmFyTG9jYXRpb25Gb3JNZXRyaWNzJDFbXCJTVUdHRVNUSU9OX0JBUl9CT1RUT01cIl0gPSBcImJvdHRvbVwiO1xuXHRyZXR1cm4gU3VnZ2VzdGlvbkJhckxvY2F0aW9uRm9yTWV0cmljcyQxO1xufSh7fSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy9jb25maWdzL0NvbG9yc0NvbmZpZy50c1xubGV0IENvbG9yTmFtZXMgPSAvKiBAX19QVVJFX18gKi8gZnVuY3Rpb24oQ29sb3JOYW1lcyQxKSB7XG5cdENvbG9yTmFtZXMkMVtcIlRleHRQcmltYXJ5XCJdID0gXCJ0ZXh0LXByaW1hcnlcIjtcblx0Q29sb3JOYW1lcyQxW1wiVGV4dFNlY29uZGFyeVwiXSA9IFwidGV4dC1zZWNvbmRhcnlcIjtcblx0Q29sb3JOYW1lcyQxW1wiVGV4dEFjY2VudFwiXSA9IFwidGV4dC1hY2NlbnRcIjtcblx0Q29sb3JOYW1lcyQxW1wiVGV4dExpbmtcIl0gPSBcInRleHQtbGlua1wiO1xuXHRDb2xvck5hbWVzJDFbXCJUZXh0TGlnaHRcIl0gPSBcInRleHQtbGlnaHRcIjtcblx0Q29sb3JOYW1lcyQxW1wiQmFja2dyb3VuZFByaW1hcnlcIl0gPSBcImJhY2tncm91bmQtcHJpbWFyeVwiO1xuXHRDb2xvck5hbWVzJDFbXCJCYWNrZ3JvdW5kU2Vjb25kYXJ5XCJdID0gXCJiYWNrZ3JvdW5kLXNlY29uZGFyeVwiO1xuXHRDb2xvck5hbWVzJDFbXCJCYWNrZ3JvdW5kU2Vjb25kYXJ5RGFya1wiXSA9IFwiYmFja2dyb3VuZC1zZWNvbmRhcnktZGFya1wiO1xuXHRDb2xvck5hbWVzJDFbXCJCYWNrZ3JvdW5kVGVydGlhcnlcIl0gPSBcImJhY2tncm91bmQtdGVydGlhcnlcIjtcblx0Q29sb3JOYW1lcyQxW1wiQmFja2dyb3VuZERhcmtcIl0gPSBcImJhY2tncm91bmQtZGFya1wiO1xuXHRDb2xvck5hbWVzJDFbXCJCYWNrZ3JvdW5kTGlnaHRcIl0gPSBcImJhY2tncm91bmQtbGlnaHRcIjtcblx0Q29sb3JOYW1lcyQxW1wiQmFja2dyb3VuZFNhdHVyYXRlZFwiXSA9IFwiYmFja2dyb3VuZC1zYXR1cmF0ZWRcIjtcblx0Q29sb3JOYW1lcyQxW1wiQm9yZGVyTGlnaHRcIl0gPSBcImJvcmRlci1saWdodFwiO1xuXHRDb2xvck5hbWVzJDFbXCJCb3JkZXJNZWRpdW1cIl0gPSBcImJvcmRlci1tZWRpdW1cIjtcblx0Q29sb3JOYW1lcyQxW1wiQm9yZGVyRGFya1wiXSA9IFwiYm9yZGVyLWRhcmtcIjtcblx0Q29sb3JOYW1lcyQxW1wiQm9yZGVyT3V0bGluZVwiXSA9IFwiYm9yZGVyLW91dGxpbmVcIjtcblx0Q29sb3JOYW1lcyQxW1wiQWNjZW50UHJpbWFyeVwiXSA9IFwiYWNjZW50LXByaW1hcnlcIjtcblx0Q29sb3JOYW1lcyQxW1wiQWNjZW50U2Vjb25kYXJ5XCJdID0gXCJhY2NlbnQtc2Vjb25kYXJ5XCI7XG5cdHJldHVybiBDb2xvck5hbWVzJDE7XG59KHt9KTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gc3JjL2NvcmUvQ3VzdG9tZXJTZXJ2aWNlLnRzXG5sZXQgQ3VzdG9tZXJTZXJ2aWNlVHlwZSA9IC8qIEBfX1BVUkVfXyAqLyBmdW5jdGlvbihDdXN0b21lclNlcnZpY2VUeXBlJDEpIHtcblx0Q3VzdG9tZXJTZXJ2aWNlVHlwZSQxW1wic2hvcGlmeVwiXSA9IFwic2hvcGlmeVwiO1xuXHRDdXN0b21lclNlcnZpY2VUeXBlJDFbXCJnb3JnaWFzXCJdID0gXCJnb3JnaWFzXCI7XG5cdEN1c3RvbWVyU2VydmljZVR5cGUkMVtcImt1c3RvbWVyXCJdID0gXCJrdXN0b21lclwiO1xuXHRDdXN0b21lclNlcnZpY2VUeXBlJDFbXCJncm9vdmVcIl0gPSBcImdyb292ZVwiO1xuXHRDdXN0b21lclNlcnZpY2VUeXBlJDFbXCJ0aWRpb1wiXSA9IFwidGlkaW9cIjtcblx0Q3VzdG9tZXJTZXJ2aWNlVHlwZSQxW1wiem93aWVcIl0gPSBcInpvd2llXCI7XG5cdEN1c3RvbWVyU2VydmljZVR5cGUkMVtcInJlZG9cIl0gPSBcInJlZG9cIjtcblx0Q3VzdG9tZXJTZXJ2aWNlVHlwZSQxW1wiZ2xhZGx5XCJdID0gXCJnbGFkbHlcIjtcblx0Q3VzdG9tZXJTZXJ2aWNlVHlwZSQxW1wicmljaHBhbmVsXCJdID0gXCJyaWNocGFuZWxcIjtcblx0Q3VzdG9tZXJTZXJ2aWNlVHlwZSQxW1wiemVuZGVza1wiXSA9IFwiemVuZGVza1wiO1xuXHRDdXN0b21lclNlcnZpY2VUeXBlJDFbXCJ1bnN1cHBvcnRlZFwiXSA9IFwidW5zdXBwb3J0ZWRcIjtcblx0cmV0dXJuIEN1c3RvbWVyU2VydmljZVR5cGUkMTtcbn0oe30pO1xubGV0IEN1c3RvbWVyU2VydmljZUludGVncmF0aW9uTW9kZSA9IC8qIEBfX1BVUkVfXyAqLyBmdW5jdGlvbihDdXN0b21lclNlcnZpY2VJbnRlZ3JhdGlvbk1vZGUkMSkge1xuXHRDdXN0b21lclNlcnZpY2VJbnRlZ3JhdGlvbk1vZGUkMVtcIm5vbmVcIl0gPSBcIm5vbmVcIjtcblx0Q3VzdG9tZXJTZXJ2aWNlSW50ZWdyYXRpb25Nb2RlJDFbXCJzaW1wbGVcIl0gPSBcInNpbXBsZVwiO1xuXHRDdXN0b21lclNlcnZpY2VJbnRlZ3JhdGlvbk1vZGUkMVtcImZ1bGxcIl0gPSBcImZ1bGxcIjtcblx0cmV0dXJuIEN1c3RvbWVyU2VydmljZUludGVncmF0aW9uTW9kZSQxO1xufSh7fSk7XG5sZXQgQ3VzdG9tZXJTZXJ2aWNlT3ZlcnJpZGVzID0gLyogQF9fUFVSRV9fICovIGZ1bmN0aW9uKEN1c3RvbWVyU2VydmljZU92ZXJyaWRlcyQxKSB7XG5cdEN1c3RvbWVyU2VydmljZU92ZXJyaWRlcyQxW1wiTEVHQUxfTUVTU0FHRVwiXSA9IFwic3BpZmZ5LWN1c3RvbWVyLXNlcnZpY2UtbGVnYWwtbWVzc2FnZVwiO1xuXHRDdXN0b21lclNlcnZpY2VPdmVycmlkZXMkMVtcIkRBUktfQlVUVE9OX0NPTlRBSU5FUlwiXSA9IFwic3BpZmZ5LWN1c3RvbWVyLXNlcnZpY2UtZGFyay1idXR0b24tY29udGFpbmVyXCI7XG5cdEN1c3RvbWVyU2VydmljZU92ZXJyaWRlcyQxW1wiREFSS19CVVRUT05cIl0gPSBcInNwaWZmeS1jdXN0b21lci1zZXJ2aWNlLWRhcmstYnV0dG9uXCI7XG5cdEN1c3RvbWVyU2VydmljZU92ZXJyaWRlcyQxW1wiREFSS19CVVRUT05fSE9WRVJfVEVYVFwiXSA9IFwic3BpZmZ5LWN1c3RvbWVyLXNlcnZpY2UtZGFyay1idXR0b24taG92ZXItdGV4dFwiO1xuXHRDdXN0b21lclNlcnZpY2VPdmVycmlkZXMkMVtcIkRBUktfQlVUVE9OX1RFWFRcIl0gPSBcInNwaWZmeS1jdXN0b21lci1zZXJ2aWNlLWRhcmstYnV0dG9uLXRleHRcIjtcblx0Q3VzdG9tZXJTZXJ2aWNlT3ZlcnJpZGVzJDFbXCJGT1JNX0ZJRUxEXCJdID0gXCJzcGlmZnktY3VzdG9tZXItc2VydmljZS1mb3JtLWZpZWxkXCI7XG5cdEN1c3RvbWVyU2VydmljZU92ZXJyaWRlcyQxW1wiQUlfTkFNRVwiXSA9IFwic3BpZmZ5LWN1c3RvbWVyLXNlcnZpY2UtYWktbmFtZVwiO1xuXHRDdXN0b21lclNlcnZpY2VPdmVycmlkZXMkMVtcIldBSVRJTkdfTUVTU0FHRVwiXSA9IFwic3BpZmZ5LWN1c3RvbWVyLXNlcnZpY2Utd2FpdGluZy1tZXNzYWdlXCI7XG5cdEN1c3RvbWVyU2VydmljZU92ZXJyaWRlcyQxW1wiV0FJVElOR19NRVNTQUdFX0lDT05cIl0gPSBcInNwaWZmeS1jdXN0b21lci1zZXJ2aWNlLXdhaXRpbmctbWVzc2FnZS1pY29uXCI7XG5cdHJldHVybiBDdXN0b21lclNlcnZpY2VPdmVycmlkZXMkMTtcbn0oe30pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiBzcmMvY29yZS9Eb21JbnNlcnRpb24udHNcbmxldCBET01JbnNlcnRpb25UeXBlID0gLyogQF9fUFVSRV9fICovIGZ1bmN0aW9uKERPTUluc2VydGlvblR5cGUkMSkge1xuXHRET01JbnNlcnRpb25UeXBlJDFbXCJBRlRFUlwiXSA9IFwiYWZ0ZXJcIjtcblx0RE9NSW5zZXJ0aW9uVHlwZSQxW1wiQkVGT1JFXCJdID0gXCJiZWZvcmVcIjtcblx0RE9NSW5zZXJ0aW9uVHlwZSQxW1wiQURKQUNFTlRfQUZURVJfQkVHSU5cIl0gPSBcImFkamFjZW50LWFmdGVyLWJlZ2luXCI7XG5cdERPTUluc2VydGlvblR5cGUkMVtcIkFESkFDRU5UX0JFRk9SRV9CRUdJTlwiXSA9IFwiYWRqYWNlbnQtYmVmb3JlLWJlZ2luXCI7XG5cdERPTUluc2VydGlvblR5cGUkMVtcIkFESkFDRU5UX0FGVEVSX0VORFwiXSA9IFwiYWRqYWNlbnQtYWZ0ZXItZW5kXCI7XG5cdERPTUluc2VydGlvblR5cGUkMVtcIkFESkFDRU5UX0JFRk9SRV9FTkRcIl0gPSBcImFkamFjZW50LWJlZm9yZS1lbmRcIjtcblx0RE9NSW5zZXJ0aW9uVHlwZSQxW1wiQVBQRU5EX0NISUxEXCJdID0gXCJhcHBlbmQtY2hpbGRcIjtcblx0RE9NSW5zZXJ0aW9uVHlwZSQxW1wiTk9ORVwiXSA9IFwibm9uZVwiO1xuXHRyZXR1cm4gRE9NSW5zZXJ0aW9uVHlwZSQxO1xufSh7fSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy9jb3JlL0ZlYXR1cmVHYXRlcy50c1xubGV0IEZlYXR1cmVHYXRlcyA9IC8qIEBfX1BVUkVfXyAqLyBmdW5jdGlvbihGZWF0dXJlR2F0ZXMkMSkge1xuXHRGZWF0dXJlR2F0ZXMkMVtcIklzQ2xpZW50U2Vzc2lvbkVuYWJsZWRcIl0gPSBcImlzX2NsaWVudF9zZXNzaW9uX2VuYWJsZWRcIjtcblx0RmVhdHVyZUdhdGVzJDFbXCJJc05ld0ZlYXR1cmVFbmFibGVkXCJdID0gXCJpc19uZXdfZmVhdHVyZV9lbmFibGVkXCI7XG5cdEZlYXR1cmVHYXRlcyQxW1wiSXNGaW5lVHVuZWRNb2RlbDhiXCJdID0gXCJpc19maW5lX3R1bmVkX21vZGVsXzhiXCI7XG5cdEZlYXR1cmVHYXRlcyQxW1wiSXNJbWFnZUJhbm5lckVuYWJsZWRcIl0gPSBcImlzX2ltYWdlX2Jhbm5lcl9lbmFibGVkXCI7XG5cdEZlYXR1cmVHYXRlcyQxW1wiSXNPcmRlckxvb2t1cEVuYWJsZWRcIl0gPSBcImlzX29yZGVyX2xvb2t1cF9lbmFibGVkXCI7XG5cdEZlYXR1cmVHYXRlcyQxW1wiSXNTdW1tYXJpemVSZXZpZXdzRW5hYmxlZFwiXSA9IFwiaXNfc3VtbWFyaXplX3Jldmlld3NfZW5hYmxlZFwiO1xuXHRGZWF0dXJlR2F0ZXMkMVtcIklzR2xvYmFsU2VhcmNoRW5hYmxlZFwiXSA9IFwiaXNfZ2xvYmFsX3NlYXJjaF9lbmFibGVkXCI7XG5cdEZlYXR1cmVHYXRlcyQxW1wiSXNJbWFnZVByb21wdEVuYWJsZWRcIl0gPSBcImlzX2ltYWdlX3Byb21wdF9lbmFibGVkXCI7XG5cdEZlYXR1cmVHYXRlcyQxW1wiSXNXYXRlcm1hcmtFbmFibGVkXCJdID0gXCJpc193YXRlcm1hcmtfZW5hYmxlZFwiO1xuXHRGZWF0dXJlR2F0ZXMkMVtcIklzSW5mZXJlbmNlUmVnaW9uMFwiXSA9IFwiaXNfaW5mZXJlbmNlX3JlZ2lvbl8wXCI7XG5cdEZlYXR1cmVHYXRlcyQxW1wiSXNDaGF0VmFyaWFudEVuYWJsZWRcIl0gPSBcImlzX2NoYXRfdmFyaWFudF9lbmFibGVkXCI7XG5cdEZlYXR1cmVHYXRlcyQxW1wiSXNDaGF0VmFyaWFudEFFbmFibGVkXCJdID0gXCJpc19jaGF0X3ZhcmlhbnRfYV9lbmFibGVkXCI7XG5cdEZlYXR1cmVHYXRlcyQxW1wiSXNDaGF0VmFyaWFudEJFbmFibGVkXCJdID0gXCJpc19jaGF0X3ZhcmlhbnRfYl9lbmFibGVkXCI7XG5cdEZlYXR1cmVHYXRlcyQxW1wiSXNVc2VyUXVlcnlBbHdheXNFbmFibGVkXCJdID0gXCJpc191c2VyX3F1ZXJ5X2Fsd2F5c19lbmFibGVkXCI7XG5cdEZlYXR1cmVHYXRlcyQxW1wiSXNTZWFyY2hBdXRvY29tcGxldGVFbmFibGVkXCJdID0gXCJpc19zZWFyY2hfYXV0b2NvbXBsZXRlX2VuYWJsZWRcIjtcblx0RmVhdHVyZUdhdGVzJDFbXCJJc0VtcHR5RGl2UExQRW5hYmxlZFwiXSA9IFwiaXNfZW1wdHlfZGl2X3BscF9lbmFibGVkXCI7XG5cdEZlYXR1cmVHYXRlcyQxW1wiSXNSZWNvbW1lbmRlZFByb2R1Y3RzRW5hYmxlZFwiXSA9IFwiaXNfcmVjb21tZW5kZWRfcHJvZHVjdHNfZW5hYmxlZFwiO1xuXHRGZWF0dXJlR2F0ZXMkMVtcIklzQ2hhdFNjcm9sbFBhdXNlZFwiXSA9IFwiaXNfY2hhdF9zY3JvbGxfcGF1c2VkXCI7XG5cdHJldHVybiBGZWF0dXJlR2F0ZXMkMTtcbn0oe30pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiBzcmMvY29yZS9HcmlkSW5zZXJ0aW9uLnRzXG5sZXQgR3JpZEluc2VydGlvblR5cGUgPSAvKiBAX19QVVJFX18gKi8gZnVuY3Rpb24oR3JpZEluc2VydGlvblR5cGUkMSkge1xuXHRHcmlkSW5zZXJ0aW9uVHlwZSQxW1wiRklYRURfMVwiXSA9IFwiZml4ZWQtMVwiO1xuXHRHcmlkSW5zZXJ0aW9uVHlwZSQxW1wiRklYRURfMlwiXSA9IFwiZml4ZWQtMlwiO1xuXHRHcmlkSW5zZXJ0aW9uVHlwZSQxW1wiRklYRURfM1wiXSA9IFwiZml4ZWQtM1wiO1xuXHRHcmlkSW5zZXJ0aW9uVHlwZSQxW1wiRklYRURfNFwiXSA9IFwiZml4ZWQtNFwiO1xuXHRHcmlkSW5zZXJ0aW9uVHlwZSQxW1wiRklYRURfNVwiXSA9IFwiZml4ZWQtNVwiO1xuXHRHcmlkSW5zZXJ0aW9uVHlwZSQxW1wiRklYRURfNlwiXSA9IFwiZml4ZWQtNlwiO1xuXHRHcmlkSW5zZXJ0aW9uVHlwZSQxW1wiRklYRURfN1wiXSA9IFwiZml4ZWQtN1wiO1xuXHRHcmlkSW5zZXJ0aW9uVHlwZSQxW1wiRklYRURfOFwiXSA9IFwiZml4ZWQtOFwiO1xuXHRHcmlkSW5zZXJ0aW9uVHlwZSQxW1wiRklYRURfOVwiXSA9IFwiZml4ZWQtOVwiO1xuXHRHcmlkSW5zZXJ0aW9uVHlwZSQxW1wiRklYRURfMTJcIl0gPSBcImZpeGVkLTEyXCI7XG5cdEdyaWRJbnNlcnRpb25UeXBlJDFbXCJGSVhFRF8xM1wiXSA9IFwiZml4ZWQtMTNcIjtcblx0R3JpZEluc2VydGlvblR5cGUkMVtcIlJPV18xXCJdID0gXCJyb3ctMVwiO1xuXHRHcmlkSW5zZXJ0aW9uVHlwZSQxW1wiUk9XXzJcIl0gPSBcInJvdy0yXCI7XG5cdEdyaWRJbnNlcnRpb25UeXBlJDFbXCJST1dfM1wiXSA9IFwicm93LTNcIjtcblx0R3JpZEluc2VydGlvblR5cGUkMVtcIlJPV180XCJdID0gXCJyb3ctNFwiO1xuXHRyZXR1cm4gR3JpZEluc2VydGlvblR5cGUkMTtcbn0oe30pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiBzcmMvY29yZS9Mb2NhbFN0b3JhZ2VLZXlzLnRzXG5sZXQgTG9jYWxTdG9yYWdlS2V5cyA9IC8qIEBfX1BVUkVfXyAqLyBmdW5jdGlvbihMb2NhbFN0b3JhZ2VLZXlzJDEpIHtcblx0TG9jYWxTdG9yYWdlS2V5cyQxW1wiQ2hhdElkXCJdID0gXCJ2MS1zcGlmZnktY2hhdC1zZXNzaW9uLWlkXCI7XG5cdExvY2FsU3RvcmFnZUtleXMkMVtcIlNwaWZmeU9uT3ZlcnJpZGVcIl0gPSBcInNwaWZmeV9vblwiO1xuXHRMb2NhbFN0b3JhZ2VLZXlzJDFbXCJFbnZpdmVPbk92ZXJyaWRlXCJdID0gXCJlbnZpdmVfb25cIjtcblx0cmV0dXJuIExvY2FsU3RvcmFnZUtleXMkMTtcbn0oe30pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiBzcmMvY29yZS9QYWdlVmFyaWFudFRlc3QudHNcbmxldCBQYWdlVmFyaWFudFRlc3RUeXBlID0gLyogQF9fUFVSRV9fICovIGZ1bmN0aW9uKFBhZ2VWYXJpYW50VGVzdFR5cGUkMSkge1xuXHRQYWdlVmFyaWFudFRlc3RUeXBlJDFbXCJTaG9waWZ5UExQXCJdID0gXCJTaG9waWZ5UExQXCI7XG5cdFBhZ2VWYXJpYW50VGVzdFR5cGUkMVtcIlNob3BpZnlQRFBcIl0gPSBcIlNob3BpZnlQRFBcIjtcblx0UGFnZVZhcmlhbnRUZXN0VHlwZSQxW1wiUGFnZUNhdGVnb3J5XCJdID0gXCJQYWdlQ2F0ZWdvcnlcIjtcblx0UGFnZVZhcmlhbnRUZXN0VHlwZSQxW1wiQ2F0YWxvZ0NhdGVnb3J5XCJdID0gXCJDYXRhbG9nQ2F0ZWdvcnlcIjtcblx0UGFnZVZhcmlhbnRUZXN0VHlwZSQxW1wiVG9wQ2F0YWxvZ0NhdGVnb3J5XCJdID0gXCJUb3BDYXRhbG9nQ2F0ZWdvcnlcIjtcblx0UGFnZVZhcmlhbnRUZXN0VHlwZSQxW1wiSGFzUmV2aWV3c1wiXSA9IFwiSGFzUmV2aWV3c1wiO1xuXHRQYWdlVmFyaWFudFRlc3RUeXBlJDFbXCJJbkNvbGxlY3Rpb25cIl0gPSBcIkluQ29sbGVjdGlvblwiO1xuXHRQYWdlVmFyaWFudFRlc3RUeXBlJDFbXCJIYXNNZXJjaGFudFRhZ1wiXSA9IFwiSGFzTWVyY2hhbnRUYWdcIjtcblx0UGFnZVZhcmlhbnRUZXN0VHlwZSQxW1wiRmVhdHVyZUdhdGVcIl0gPSBcIkZlYXR1cmVHYXRlXCI7XG5cdFBhZ2VWYXJpYW50VGVzdFR5cGUkMVtcIlBscElkXCJdID0gXCJQbHBJZFwiO1xuXHRQYWdlVmFyaWFudFRlc3RUeXBlJDFbXCJRdWVyeVBhcmFtXCJdID0gXCJRdWVyeVBhcmFtXCI7XG5cdFBhZ2VWYXJpYW50VGVzdFR5cGUkMVtcIlByb2R1Y3RJZFwiXSA9IFwiUHJvZHVjdElkXCI7XG5cdFBhZ2VWYXJpYW50VGVzdFR5cGUkMVtcIlVzZXJIYXNJbnRlcmFjdGVkXCJdID0gXCJVc2VySGFzSW50ZXJhY3RlZFwiO1xuXHRQYWdlVmFyaWFudFRlc3RUeXBlJDFbXCJVc2VySGFzTm90SW50ZXJhY3RlZFwiXSA9IFwiVXNlckhhc05vdEludGVyYWN0ZWRcIjtcblx0UGFnZVZhcmlhbnRUZXN0VHlwZSQxW1wiaXNMb2FkaW5nXCJdID0gXCJpc0xvYWRpbmdcIjtcblx0UGFnZVZhcmlhbnRUZXN0VHlwZSQxW1wiaXNQcm9kdWN0Q29tcGFyaXNvblwiXSA9IFwiaXNQcm9kdWN0Q29tcGFyaXNvblwiO1xuXHRQYWdlVmFyaWFudFRlc3RUeXBlJDFbXCJGYWxsYmFja1wiXSA9IFwiRmFsbGJhY2tcIjtcblx0UGFnZVZhcmlhbnRUZXN0VHlwZSQxW1wiVXJsUmVzb2x2ZXJcIl0gPSBcIlVybFJlc29sdmVyXCI7XG5cdFBhZ2VWYXJpYW50VGVzdFR5cGUkMVtcIk51bGxcIl0gPSBcIm51bGxcIjtcblx0cmV0dXJuIFBhZ2VWYXJpYW50VGVzdFR5cGUkMTtcbn0oe30pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiBzcmMvY29yZS9QYWdlVmlzaXRDYXRlZ29yeS50c1xubGV0IFBhZ2VWaXNpdENhdGVnb3J5ID0gLyogQF9fUFVSRV9fICovIGZ1bmN0aW9uKFBhZ2VWaXNpdENhdGVnb3J5JDIpIHtcblx0UGFnZVZpc2l0Q2F0ZWdvcnkkMltcIlByb2R1Y3RcIl0gPSBcInByb2R1Y3RcIjtcblx0UGFnZVZpc2l0Q2F0ZWdvcnkkMltcIlNlYXJjaFwiXSA9IFwic2VhcmNoXCI7XG5cdFBhZ2VWaXNpdENhdGVnb3J5JDJbXCJJbnRlcm5hbFwiXSA9IFwiaW50ZXJuYWxcIjtcblx0UGFnZVZpc2l0Q2F0ZWdvcnkkMltcIkV4dGVybmFsXCJdID0gXCJleHRlcm5hbFwiO1xuXHRyZXR1cm4gUGFnZVZpc2l0Q2F0ZWdvcnkkMjtcbn0oe30pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiBzcmMvb3JnYW5pemF0aW9uL09yZ1Nob3J0TmFtZS50c1xubGV0IE9yZ1Nob3J0TmFtZSA9IC8qIEBfX1BVUkVfXyAqLyBmdW5jdGlvbihPcmdTaG9ydE5hbWUkMSkge1xuXHRPcmdTaG9ydE5hbWUkMVtcIkNvdGVyaWVcIl0gPSBcImNvdGVyaWVcIjtcblx0T3JnU2hvcnROYW1lJDFbXCJGb3JMb3ZlQW5kTGVtb25zXCJdID0gXCJmb3ItbG92ZS1hbmQtbGVtb25zXCI7XG5cdE9yZ1Nob3J0TmFtZSQxW1wiR3JlZW5wYW5cIl0gPSBcImdyZWVucGFuXCI7XG5cdE9yZ1Nob3J0TmFtZSQxW1wiSm9yZGFuQ3JhaWdcIl0gPSBcImpvcmRhbi1jcmFpZ1wiO1xuXHRPcmdTaG9ydE5hbWUkMVtcIkxhcnJ5QW5kU2VyZ2VzXCJdID0gXCJsYXJyeV9hbmRfc2VyZ2VzXCI7XG5cdE9yZ1Nob3J0TmFtZSQxW1wiTGVhcHNBbmRSZWJvdW5kc1wiXSA9IFwibGVhcHMtYW5kLXJlYm91bmRzXCI7XG5cdE9yZ1Nob3J0TmFtZSQxW1wiTWFudHJhQnJhbmRcIl0gPSBcIm1hbnRyYS1icmFuZFwiO1xuXHRPcmdTaG9ydE5hbWUkMVtcIlNwYW54XCJdID0gXCJzcGFueFwiO1xuXHRPcmdTaG9ydE5hbWUkMVtcIlNwYW54U3RhZ2luZ1wiXSA9IFwic3RhZ2luZy1zcGFueFwiO1xuXHRPcmdTaG9ydE5hbWUkMVtcIlN1cGVyZ29vcFwiXSA9IFwic3VwZXJnb29wXCI7XG5cdE9yZ1Nob3J0TmFtZSQxW1wiVW5pcXVlVmludGFnZVwiXSA9IFwidW5pcXVlLXZpbnRhZ2VcIjtcblx0T3JnU2hvcnROYW1lJDFbXCJKYWNrQXJjaGVyXCJdID0gXCJqYWNrLWFyY2hlclwiO1xuXHRPcmdTaG9ydE5hbWUkMVtcIlNraW5QZXJmZWN0aW9uXCJdID0gXCJza2luLXBlcmZlY3Rpb25cIjtcblx0T3JnU2hvcnROYW1lJDFbXCJMb29rT3B0aWNcIl0gPSBcImxvb2stb3B0aWNcIjtcblx0T3JnU2hvcnROYW1lJDFbXCJGaXZlQ2JkXCJdID0gXCJmaXZlLWNiZFwiO1xuXHRPcmdTaG9ydE5hbWUkMVtcIlNuYXBTdXBwbGVtZW50c1wiXSA9IFwic25hcC1zdXBwbGVtZW50c1wiO1xuXHRPcmdTaG9ydE5hbWUkMVtcIkxvbmdldml0eXJ4XCJdID0gXCJsb25nZXZpdHlyeFwiO1xuXHRPcmdTaG9ydE5hbWUkMVtcIlZlbmFDYmRcIl0gPSBcInZlbmEtY2JkXCI7XG5cdE9yZ1Nob3J0TmFtZSQxW1wiTWVkdGVycmFcIl0gPSBcIm1lZHRlcnJhXCI7XG5cdE9yZ1Nob3J0TmFtZSQxW1wiTW9kZWxsc1wiXSA9IFwibW9kZWxsc1wiO1xuXHRPcmdTaG9ydE5hbWUkMVtcIlByZXNzZWRGbG9yYWxcIl0gPSBcInByZXNzZWQtZmxvcmFsXCI7XG5cdE9yZ1Nob3J0TmFtZSQxW1wiS2luZHJlZEJyYXZlbHlcIl0gPSBcImtpbmRyZWQtYnJhdmVseVwiO1xuXHRPcmdTaG9ydE5hbWUkMVtcIldpbmVFbnRodXNpYXN0XCJdID0gXCJ3aW5lLWVudGh1c2lhc3RcIjtcblx0T3JnU2hvcnROYW1lJDFbXCJIb21lZ3Jvd25DYW5uYWJpc1wiXSA9IFwiaG9tZWdyb3duLWNhbm5hYmlzXCI7XG5cdE9yZ1Nob3J0TmFtZSQxW1wiRHJlYW1sYW5kQmFieVwiXSA9IFwiZHJlYW1sYW5kLWJhYnlcIjtcblx0T3JnU2hvcnROYW1lJDFbXCJCYW5kb2xpZXJcIl0gPSBcImJhbmRvbGllclwiO1xuXHRPcmdTaG9ydE5hbWUkMVtcIldlc3RvbkpvbkJvdWNoZXJcIl0gPSBcIndlc3Rvbi1qb24tYm91Y2hlclwiO1xuXHRPcmdTaG9ydE5hbWUkMVtcIkt1dEZyb21UaGVLbG90aFwiXSA9IFwia3V0LWZyb20tdGhlLWtsb3RoXCI7XG5cdE9yZ1Nob3J0TmFtZSQxW1wiR3Jvb3ZlTGlmZVwiXSA9IFwiZ3Jvb3ZlLWxpZmVcIjtcblx0T3JnU2hvcnROYW1lJDFbXCJDYXJwZVwiXSA9IFwiY2FycGVcIjtcblx0T3JnU2hvcnROYW1lJDFbXCJXb2xmVGFjdGljYWxcIl0gPSBcIndvbGYtdGFjdGljYWxcIjtcblx0T3JnU2hvcnROYW1lJDFbXCJXb2xmTWF0dHJlc3NcIl0gPSBcIndvbGZtYXR0cmVzc1wiO1xuXHRPcmdTaG9ydE5hbWUkMVtcIkRlZmF1bHRcIl0gPSBcImRlZmF1bHRcIjtcblx0cmV0dXJuIE9yZ1Nob3J0TmFtZSQxO1xufSh7fSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy9wcm9kdWN0L0NhdGVnb3J5RXh0cmFjdG9yLnRzXG5sZXQgQ2F0ZWdvcnlFeHRyYWN0b3JUeXBlID0gLyogQF9fUFVSRV9fICovIGZ1bmN0aW9uKENhdGVnb3J5RXh0cmFjdG9yVHlwZSQxKSB7XG5cdENhdGVnb3J5RXh0cmFjdG9yVHlwZSQxW1wiVmlzaXRDYXRlZ29yeU1hcFwiXSA9IFwiVmlzaXRDYXRlZ29yeU1hcFwiO1xuXHRDYXRlZ29yeUV4dHJhY3RvclR5cGUkMVtcIlZpc2l0Q2F0ZWdvcnlEZWZhdWx0XCJdID0gXCJWaXNpdENhdGVnb3J5RGVmYXVsdFwiO1xuXHRyZXR1cm4gQ2F0ZWdvcnlFeHRyYWN0b3JUeXBlJDE7XG59KHt9KTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gc3JjL3Byb2R1Y3QvUHJvZHVjdEV4cGVyaW1lbnQudHNcbmxldCBQcm9kdWN0RXhwZXJpbWVudCA9IC8qIEBfX1BVUkVfXyAqLyBmdW5jdGlvbihQcm9kdWN0RXhwZXJpbWVudCQxKSB7XG5cdFByb2R1Y3RFeHBlcmltZW50JDFbXCJERUZBVUxUXCJdID0gXCJkZWZhdWx0XCI7XG5cdHJldHVybiBQcm9kdWN0RXhwZXJpbWVudCQxO1xufSh7fSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy9wcm9kdWN0L1Byb2R1Y3RTb3J0aW5nLnRzXG5sZXQgUHJvZHVjdFNvcnRpbmcgPSAvKiBAX19QVVJFX18gKi8gZnVuY3Rpb24oUHJvZHVjdFNvcnRpbmckMSkge1xuXHRQcm9kdWN0U29ydGluZyQxW1wiRkVBVFVSRURcIl0gPSBcImZlYXR1cmVkXCI7XG5cdFByb2R1Y3RTb3J0aW5nJDFbXCJQUklDRV9BU0NcIl0gPSBcInByaWNlX2FzY1wiO1xuXHRQcm9kdWN0U29ydGluZyQxW1wiUFJJQ0VfREVTQ1wiXSA9IFwicHJpY2VfZGVzY1wiO1xuXHRyZXR1cm4gUHJvZHVjdFNvcnRpbmckMTtcbn0oe30pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiBzcmMvcHJvZHVjdC9WYXJpYW50SW5mby50c1xubGV0IFZhcmlhbnRUeXBlRW51bSA9IC8qIEBfX1BVUkVfXyAqLyBmdW5jdGlvbihWYXJpYW50VHlwZUVudW0kMSkge1xuXHRWYXJpYW50VHlwZUVudW0kMVtcIlBkcFwiXSA9IFwicGRwXCI7XG5cdFZhcmlhbnRUeXBlRW51bSQxW1wiUGxwXCJdID0gXCJwbHBcIjtcblx0VmFyaWFudFR5cGVFbnVtJDFbXCJQYWdlVmlzaXRcIl0gPSBcInBhZ2VfdmlzaXRcIjtcblx0cmV0dXJuIFZhcmlhbnRUeXBlRW51bSQxO1xufSh7fSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy9zZWFyY2gvQ2hhdFNlYXJjaFNvcnRPdmVycmlkZXMudHNcbmxldCBDaGF0U2VhcmNoU29ydE92ZXJyaWRlcyA9IC8qIEBfX1BVUkVfXyAqLyBmdW5jdGlvbihDaGF0U2VhcmNoU29ydE92ZXJyaWRlcyQxKSB7XG5cdENoYXRTZWFyY2hTb3J0T3ZlcnJpZGVzJDFbXCJERVNLVE9QX0ZJTFRFUl9DT05UQUlORVJcIl0gPSBcInNwaWZmeS1jaGF0LXNlYXJjaC1maWx0ZXItY29udGFpbmVyXCI7XG5cdENoYXRTZWFyY2hTb3J0T3ZlcnJpZGVzJDFbXCJERVNLVE9QX0ZJTFRFUl9TRUxFQ1RfQ09NUE9ORU5UXCJdID0gXCJzcGlmZnktY2hhdC1zZWFyY2gtZmlsdGVyLXNlbGVjdC1jb21wb25lbnRcIjtcblx0Q2hhdFNlYXJjaFNvcnRPdmVycmlkZXMkMVtcIkRFU0tUT1BfRklMVEVSX1NFTEVDVF9JQ09OXCJdID0gXCJzcGlmZnktY2hhdC1zZWFyY2gtZmlsdGVyLXNlbGVjdC1pY29uXCI7XG5cdENoYXRTZWFyY2hTb3J0T3ZlcnJpZGVzJDFbXCJNT0JJTEVfRklMVEVSX0JVVFRPTlwiXSA9IFwic3BpZmZ5LWNoYXQtc2VhcmNoLWZpbHRlci1idXR0b25cIjtcblx0Q2hhdFNlYXJjaFNvcnRPdmVycmlkZXMkMVtcIk1PQklMRV9GSUxURVJfTU9EQUxfQ09OVEFJTkVSXCJdID0gXCJzcGlmZnktY2hhdC1zZWFyY2gtZmlsdGVyLW1vZGFsLWNvbnRhaW5lclwiO1xuXHRDaGF0U2VhcmNoU29ydE92ZXJyaWRlcyQxW1wiTU9CSUxFX0ZJTFRFUl9NT0RBTF9IRUFERVJcIl0gPSBcInNwaWZmeS1jaGF0LXNlYXJjaC1maWx0ZXItbW9kYWwtaGVhZGVyXCI7XG5cdENoYXRTZWFyY2hTb3J0T3ZlcnJpZGVzJDFbXCJNT0JJTEVfRklMVEVSX01PREFMX1NFTEVDVElPTlwiXSA9IFwic3BpZmZ5LWNoYXQtc2VhcmNoLWZpbHRlci1tb2RhbC1zZWxlY3Rpb25cIjtcblx0Q2hhdFNlYXJjaFNvcnRPdmVycmlkZXMkMVtcIk1PQklMRV9GSUxURVJfTU9EQUxfT1BUSU9OXCJdID0gXCJzcGlmZnktY2hhdC1zZWFyY2gtZmlsdGVyLW1vZGFsLW9wdGlvblwiO1xuXHRDaGF0U2VhcmNoU29ydE92ZXJyaWRlcyQxW1wiTU9CSUxFX0ZJTFRFUl9NT0RBTF9PUFRJT05fUElMTFwiXSA9IFwic3BpZmZ5LWNoYXQtc2VhcmNoLWZpbHRlci1tb2RhbC1vcHRpb24tcGlsbFwiO1xuXHRDaGF0U2VhcmNoU29ydE92ZXJyaWRlcyQxW1wiTU9CSUxFX0ZJTFRFUl9NT0RBTF9PUFRJT05fREVTQ1JJUFRJT05cIl0gPSBcInNwaWZmeS1jaGF0LXNlYXJjaC1maWx0ZXItbW9kYWwtb3B0aW9uLWRlc2NcIjtcblx0Q2hhdFNlYXJjaFNvcnRPdmVycmlkZXMkMVtcIk1PQklMRV9GSUxURVJfTU9EQUxfQVBQTFlfQlVUVE9OXCJdID0gXCJzcGlmZnktY2hhdC1zZWFyY2gtZmlsdGVyLW1vZGFsLWFwcGx5LWJ1dHRvblwiO1xuXHRyZXR1cm4gQ2hhdFNlYXJjaFNvcnRPdmVycmlkZXMkMTtcbn0oe30pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiBzcmMvc2VhcmNoL1NlYXJjaFJlc3VsdHNTdGF0ZS50c1xubGV0IFNlYXJjaFJlc3VsdHNTdGF0ZSA9IC8qIEBfX1BVUkVfXyAqLyBmdW5jdGlvbihTZWFyY2hSZXN1bHRzU3RhdGUkMSkge1xuXHRTZWFyY2hSZXN1bHRzU3RhdGUkMVtTZWFyY2hSZXN1bHRzU3RhdGUkMVtcIkxvYWRpbmdcIl0gPSAwXSA9IFwiTG9hZGluZ1wiO1xuXHRTZWFyY2hSZXN1bHRzU3RhdGUkMVtTZWFyY2hSZXN1bHRzU3RhdGUkMVtcIlJlc3VsdHNcIl0gPSAxXSA9IFwiUmVzdWx0c1wiO1xuXHRTZWFyY2hSZXN1bHRzU3RhdGUkMVtTZWFyY2hSZXN1bHRzU3RhdGUkMVtcIk5vUmVzdWx0c1wiXSA9IDJdID0gXCJOb1Jlc3VsdHNcIjtcblx0cmV0dXJuIFNlYXJjaFJlc3VsdHNTdGF0ZSQxO1xufSh7fSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy93aWRnZXRzL1NwaWZmeVdpZGdldHMudHNcbi8qKlxuKiBFbnVtIG9mIGFsbCB3aWRnZXQgbmFtZXMuIFRoZXNlIGFyZSB3aWRnZXRzIHRoYXQgYXJlIHJlbmRlcmVkIGFuZCBpbnRlZ3JhdGVkIGludG9cbiogYSBtZXJjaGFudCdzIHdlYnNpdGUuXG4qL1xubGV0IFNwaWZmeVdpZGdldHMgPSAvKiBAX19QVVJFX18gKi8gZnVuY3Rpb24oU3BpZmZ5V2lkZ2V0cyQxKSB7XG5cdFNwaWZmeVdpZGdldHMkMVtcIkltYWdlQmFubmVyXCJdID0gXCJpbWFnZV9iYW5uZXJcIjtcblx0U3BpZmZ5V2lkZ2V0cyQxW1wiSW1hZ2VQcm9tcHRDYXJkXCJdID0gXCJpbWFnZV9wcm9tcHRfY2FyZFwiO1xuXHRTcGlmZnlXaWRnZXRzJDFbXCJTaW5nbGVJbWFnZVByb21wdFwiXSA9IFwic2luZ2xlX2ltYWdlX3Byb21wdFwiO1xuXHRTcGlmZnlXaWRnZXRzJDFbXCJFbWJlZGRlZFdpZGdldFwiXSA9IFwiZW1iZWRkZWRfd2lkZ2V0XCI7XG5cdFNwaWZmeVdpZGdldHMkMVtcIkZsb2F0aW5nQnV0dG9uXCJdID0gXCJmbG9hdGluZ19idXR0b25cIjtcblx0U3BpZmZ5V2lkZ2V0cyQxW1wiU3VnZ2VzdGlvbkJhclwiXSA9IFwic3VnZ2VzdGlvbl9iYXJcIjtcblx0U3BpZmZ5V2lkZ2V0cyQxW1wiU2VhcmNoUHJvbXB0XCJdID0gXCJzZWFyY2hfcHJvbXB0XCI7XG5cdFNwaWZmeVdpZGdldHMkMVtcIkdsb2JhbFNlYXJjaFwiXSA9IFwiZ2xvYmFsX3NlYXJjaFwiO1xuXHRTcGlmZnlXaWRnZXRzJDFbXCJTZWFyY2hSZXN1bHRzXCJdID0gXCJzZWFyY2hfcmVzdWx0c1wiO1xuXHRTcGlmZnlXaWRnZXRzJDFbXCJHbG9iYWxTZWFyY2hFbnRyeVBvaW50XCJdID0gXCJnbG9iYWxfc2VhcmNoX2VudHJ5X3BvaW50XCI7XG5cdHJldHVybiBTcGlmZnlXaWRnZXRzJDE7XG59KHt9KTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gc3JjL3dpZGdldHMvV2lkZ2V0VHlwZS50c1xubGV0IFdpZGdldFR5cGUgPSAvKiBAX19QVVJFX18gKi8gZnVuY3Rpb24oV2lkZ2V0VHlwZSQxKSB7XG5cdFdpZGdldFR5cGUkMVtcIkNoYXRQcmV2aWV3XCJdID0gXCJDaGF0UHJldmlld1wiO1xuXHRXaWRnZXRUeXBlJDFbXCJTb2NpYWxQcm9vZlYyXCJdID0gXCJTb2NpYWxQcm9vZlYyXCI7XG5cdFdpZGdldFR5cGUkMVtcIkNoYXRQcmV2aWV3VjJcIl0gPSBcIkNoYXRQcmV2aWV3VjJcIjtcblx0V2lkZ2V0VHlwZSQxW1wiQ2hhdFByZXZpZXdJc0xvYWRpbmdcIl0gPSBcIkNoYXRQcmV2aWV3SXNMb2FkaW5nXCI7XG5cdFdpZGdldFR5cGUkMVtcIkNoYXRQcmV2aWV3UG9zdEludGVyYWN0aW9uXCJdID0gXCJDaGF0UHJldmlld1Bvc3RJbnRlcmFjdGlvblwiO1xuXHRXaWRnZXRUeXBlJDFbXCJDaGF0UHJldmlld1Byb2R1Y3RDb21wYXJpc29uXCJdID0gXCJDaGF0UHJldmlld1Byb2R1Y3RDb21wYXJpc29uXCI7XG5cdFdpZGdldFR5cGUkMVtcIlN1Z2dlc3Rpb25CYXJcIl0gPSBcIlN1Z2dlc3Rpb25CYXJcIjtcblx0V2lkZ2V0VHlwZSQxW1wiU3VnZ2VzdGlvbkJhclYyXCJdID0gXCJTdWdnZXN0aW9uQmFyVjJcIjtcblx0V2lkZ2V0VHlwZSQxW1wiSW1hZ2VQcm9tcHRDYXJkXCJdID0gXCJJbWFnZVByb21wdENhcmRcIjtcblx0V2lkZ2V0VHlwZSQxW1wiSW1hZ2VCYW5uZXJcIl0gPSBcIkltYWdlQmFubmVyXCI7XG5cdFdpZGdldFR5cGUkMVtcIlNpbmdsZUltYWdlUHJvbXB0XCJdID0gXCJTaW5nbGVJbWFnZVByb21wdFwiO1xuXHRXaWRnZXRUeXBlJDFbXCJTZWFyY2hQcm9tcHRcIl0gPSBcIlNlYXJjaFByb21wdFwiO1xuXHRXaWRnZXRUeXBlJDFbXCJTZWFyY2haZXJvU3RhdGVFbnRyeVBvaW50XCJdID0gXCJTZWFyY2haZXJvU3RhdGVFbnRyeVBvaW50XCI7XG5cdFdpZGdldFR5cGUkMVtcIlNlYXJjaFJlc3VsdHNFbnRyeVBvaW50XCJdID0gXCJTZWFyY2hSZXN1bHRzRW50cnlQb2ludFwiO1xuXHRXaWRnZXRUeXBlJDFbXCJTZWFyY2hPdmVybGF5SG9zdFwiXSA9IFwiU2VhcmNoT3ZlcmxheUhvc3RcIjtcblx0V2lkZ2V0VHlwZSQxW1wiTm9PcFwiXSA9IFwiTm9PcFwiO1xuXHRyZXR1cm4gV2lkZ2V0VHlwZSQxO1xufSh7fSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIC4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9ydW50aW1lLmpzXG52YXIgcmVxdWlyZV9ydW50aW1lID0gLyogQF9fUFVSRV9fICovIF9fY29tbW9uSlMoeyBcIi4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9ydW50aW1lLmpzXCI6ICgoZXhwb3J0cykgPT4ge1xuXHQvKipcblx0KiBDb21tZXJjZVxuXHQqIE5vIGRlc2NyaXB0aW9uIHByb3ZpZGVkIChnZW5lcmF0ZWQgYnkgT3BlbmFwaSBHZW5lcmF0b3IgaHR0cHM6Ly9naXRodWIuY29tL29wZW5hcGl0b29scy9vcGVuYXBpLWdlbmVyYXRvcilcblx0KlxuXHQqIFRoZSB2ZXJzaW9uIG9mIHRoZSBPcGVuQVBJIGRvY3VtZW50OiAxLjEuMFxuXHQqXG5cdCpcblx0KiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IE9wZW5BUEkgR2VuZXJhdG9yIChodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2gpLlxuXHQqIGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaFxuXHQqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cblx0Ki9cblx0dmFyIF9fYXdhaXRlciQ1ID0gZXhwb3J0cyAmJiBleHBvcnRzLl9fYXdhaXRlciB8fCBmdW5jdGlvbih0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcblx0XHRmdW5jdGlvbiBhZG9wdCh2YWx1ZSkge1xuXHRcdFx0cmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24ocmVzb2x2ZSkge1xuXHRcdFx0XHRyZXNvbHZlKHZhbHVlKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHRyZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuXHRcdFx0ZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7XG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0c3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpO1xuXHRcdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdFx0cmVqZWN0KGUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkge1xuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTtcblx0XHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRcdHJlamVjdChlKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0ZnVuY3Rpb24gc3RlcChyZXN1bHQpIHtcblx0XHRcdFx0cmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7XG5cdFx0XHR9XG5cdFx0XHRzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG5cdFx0fSk7XG5cdH07XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcblx0ZXhwb3J0cy5UZXh0QXBpUmVzcG9uc2UgPSBleHBvcnRzLkJsb2JBcGlSZXNwb25zZSA9IGV4cG9ydHMuVm9pZEFwaVJlc3BvbnNlID0gZXhwb3J0cy5KU09OQXBpUmVzcG9uc2UgPSBleHBvcnRzLkNPTExFQ1RJT05fRk9STUFUUyA9IGV4cG9ydHMuUmVxdWlyZWRFcnJvciA9IGV4cG9ydHMuRmV0Y2hFcnJvciA9IGV4cG9ydHMuUmVzcG9uc2VFcnJvciA9IGV4cG9ydHMuQmFzZUFQSSA9IGV4cG9ydHMuRGVmYXVsdENvbmZpZyA9IGV4cG9ydHMuQ29uZmlndXJhdGlvbiA9IGV4cG9ydHMuQkFTRV9QQVRIID0gdm9pZCAwO1xuXHRleHBvcnRzLnF1ZXJ5c3RyaW5nID0gcXVlcnlzdHJpbmc7XG5cdGV4cG9ydHMuZXhpc3RzID0gZXhpc3RzO1xuXHRleHBvcnRzLm1hcFZhbHVlcyA9IG1hcFZhbHVlcztcblx0ZXhwb3J0cy5jYW5Db25zdW1lRm9ybSA9IGNhbkNvbnN1bWVGb3JtO1xuXHRleHBvcnRzLkJBU0VfUEFUSCA9IFwiaHR0cDovL2xvY2FsaG9zdFwiLnJlcGxhY2UoL1xcLyskLywgXCJcIik7XG5cdHZhciBDb25maWd1cmF0aW9uID0gY2xhc3Mge1xuXHRcdGNvbnN0cnVjdG9yKGNvbmZpZ3VyYXRpb24gPSB7fSkge1xuXHRcdFx0dGhpcy5jb25maWd1cmF0aW9uID0gY29uZmlndXJhdGlvbjtcblx0XHR9XG5cdFx0c2V0IGNvbmZpZyhjb25maWd1cmF0aW9uKSB7XG5cdFx0XHR0aGlzLmNvbmZpZ3VyYXRpb24gPSBjb25maWd1cmF0aW9uO1xuXHRcdH1cblx0XHRnZXQgYmFzZVBhdGgoKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5jb25maWd1cmF0aW9uLmJhc2VQYXRoICE9IG51bGwgPyB0aGlzLmNvbmZpZ3VyYXRpb24uYmFzZVBhdGggOiBleHBvcnRzLkJBU0VfUEFUSDtcblx0XHR9XG5cdFx0Z2V0IGZldGNoQXBpKCkge1xuXHRcdFx0cmV0dXJuIHRoaXMuY29uZmlndXJhdGlvbi5mZXRjaEFwaTtcblx0XHR9XG5cdFx0Z2V0IG1pZGRsZXdhcmUoKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5jb25maWd1cmF0aW9uLm1pZGRsZXdhcmUgfHwgW107XG5cdFx0fVxuXHRcdGdldCBxdWVyeVBhcmFtc1N0cmluZ2lmeSgpIHtcblx0XHRcdHJldHVybiB0aGlzLmNvbmZpZ3VyYXRpb24ucXVlcnlQYXJhbXNTdHJpbmdpZnkgfHwgcXVlcnlzdHJpbmc7XG5cdFx0fVxuXHRcdGdldCB1c2VybmFtZSgpIHtcblx0XHRcdHJldHVybiB0aGlzLmNvbmZpZ3VyYXRpb24udXNlcm5hbWU7XG5cdFx0fVxuXHRcdGdldCBwYXNzd29yZCgpIHtcblx0XHRcdHJldHVybiB0aGlzLmNvbmZpZ3VyYXRpb24ucGFzc3dvcmQ7XG5cdFx0fVxuXHRcdGdldCBhcGlLZXkoKSB7XG5cdFx0XHRjb25zdCBhcGlLZXkgPSB0aGlzLmNvbmZpZ3VyYXRpb24uYXBpS2V5O1xuXHRcdFx0aWYgKGFwaUtleSkgcmV0dXJuIHR5cGVvZiBhcGlLZXkgPT09IFwiZnVuY3Rpb25cIiA/IGFwaUtleSA6ICgpID0+IGFwaUtleTtcblx0XHR9XG5cdFx0Z2V0IGFjY2Vzc1Rva2VuKCkge1xuXHRcdFx0Y29uc3QgYWNjZXNzVG9rZW4gPSB0aGlzLmNvbmZpZ3VyYXRpb24uYWNjZXNzVG9rZW47XG5cdFx0XHRpZiAoYWNjZXNzVG9rZW4pIHJldHVybiB0eXBlb2YgYWNjZXNzVG9rZW4gPT09IFwiZnVuY3Rpb25cIiA/IGFjY2Vzc1Rva2VuIDogKCkgPT4gX19hd2FpdGVyJDUodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG5cdFx0XHRcdHJldHVybiBhY2Nlc3NUb2tlbjtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHRnZXQgaGVhZGVycygpIHtcblx0XHRcdHJldHVybiB0aGlzLmNvbmZpZ3VyYXRpb24uaGVhZGVycztcblx0XHR9XG5cdFx0Z2V0IGNyZWRlbnRpYWxzKCkge1xuXHRcdFx0cmV0dXJuIHRoaXMuY29uZmlndXJhdGlvbi5jcmVkZW50aWFscztcblx0XHR9XG5cdH07XG5cdGV4cG9ydHMuQ29uZmlndXJhdGlvbiA9IENvbmZpZ3VyYXRpb247XG5cdGV4cG9ydHMuRGVmYXVsdENvbmZpZyA9IG5ldyBDb25maWd1cmF0aW9uKCk7XG5cdC8qKlxuXHQqIFRoaXMgaXMgdGhlIGJhc2UgY2xhc3MgZm9yIGFsbCBnZW5lcmF0ZWQgQVBJIGNsYXNzZXMuXG5cdCovXG5cdHZhciBCYXNlQVBJID0gY2xhc3MgQmFzZUFQSSB7XG5cdFx0Y29uc3RydWN0b3IoY29uZmlndXJhdGlvbiA9IGV4cG9ydHMuRGVmYXVsdENvbmZpZykge1xuXHRcdFx0dGhpcy5jb25maWd1cmF0aW9uID0gY29uZmlndXJhdGlvbjtcblx0XHRcdHRoaXMuZmV0Y2hBcGkgPSAodXJsLCBpbml0KSA9PiBfX2F3YWl0ZXIkNSh0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcblx0XHRcdFx0bGV0IGZldGNoUGFyYW1zID0ge1xuXHRcdFx0XHRcdHVybCxcblx0XHRcdFx0XHRpbml0XG5cdFx0XHRcdH07XG5cdFx0XHRcdGZvciAoY29uc3QgbWlkZGxld2FyZSBvZiB0aGlzLm1pZGRsZXdhcmUpIGlmIChtaWRkbGV3YXJlLnByZSkgZmV0Y2hQYXJhbXMgPSAoeWllbGQgbWlkZGxld2FyZS5wcmUoT2JqZWN0LmFzc2lnbih7IGZldGNoOiB0aGlzLmZldGNoQXBpIH0sIGZldGNoUGFyYW1zKSkpIHx8IGZldGNoUGFyYW1zO1xuXHRcdFx0XHRsZXQgcmVzcG9uc2UgPSB2b2lkIDA7XG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0cmVzcG9uc2UgPSB5aWVsZCAodGhpcy5jb25maWd1cmF0aW9uLmZldGNoQXBpIHx8IGZldGNoKShmZXRjaFBhcmFtcy51cmwsIGZldGNoUGFyYW1zLmluaXQpO1xuXHRcdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdFx0Zm9yIChjb25zdCBtaWRkbGV3YXJlIG9mIHRoaXMubWlkZGxld2FyZSkgaWYgKG1pZGRsZXdhcmUub25FcnJvcikgcmVzcG9uc2UgPSAoeWllbGQgbWlkZGxld2FyZS5vbkVycm9yKHtcblx0XHRcdFx0XHRcdGZldGNoOiB0aGlzLmZldGNoQXBpLFxuXHRcdFx0XHRcdFx0dXJsOiBmZXRjaFBhcmFtcy51cmwsXG5cdFx0XHRcdFx0XHRpbml0OiBmZXRjaFBhcmFtcy5pbml0LFxuXHRcdFx0XHRcdFx0ZXJyb3I6IGUsXG5cdFx0XHRcdFx0XHRyZXNwb25zZTogcmVzcG9uc2UgPyByZXNwb25zZS5jbG9uZSgpIDogdm9pZCAwXG5cdFx0XHRcdFx0fSkpIHx8IHJlc3BvbnNlO1xuXHRcdFx0XHRcdGlmIChyZXNwb25zZSA9PT0gdm9pZCAwKSBpZiAoZSBpbnN0YW5jZW9mIEVycm9yKSB0aHJvdyBuZXcgRmV0Y2hFcnJvcihlLCBcIlRoZSByZXF1ZXN0IGZhaWxlZCBhbmQgdGhlIGludGVyY2VwdG9ycyBkaWQgbm90IHJldHVybiBhbiBhbHRlcm5hdGl2ZSByZXNwb25zZVwiKTtcblx0XHRcdFx0XHRlbHNlIHRocm93IGU7XG5cdFx0XHRcdH1cblx0XHRcdFx0Zm9yIChjb25zdCBtaWRkbGV3YXJlIG9mIHRoaXMubWlkZGxld2FyZSkgaWYgKG1pZGRsZXdhcmUucG9zdCkgcmVzcG9uc2UgPSAoeWllbGQgbWlkZGxld2FyZS5wb3N0KHtcblx0XHRcdFx0XHRmZXRjaDogdGhpcy5mZXRjaEFwaSxcblx0XHRcdFx0XHR1cmw6IGZldGNoUGFyYW1zLnVybCxcblx0XHRcdFx0XHRpbml0OiBmZXRjaFBhcmFtcy5pbml0LFxuXHRcdFx0XHRcdHJlc3BvbnNlOiByZXNwb25zZS5jbG9uZSgpXG5cdFx0XHRcdH0pKSB8fCByZXNwb25zZTtcblx0XHRcdFx0cmV0dXJuIHJlc3BvbnNlO1xuXHRcdFx0fSk7XG5cdFx0XHR0aGlzLm1pZGRsZXdhcmUgPSBjb25maWd1cmF0aW9uLm1pZGRsZXdhcmU7XG5cdFx0fVxuXHRcdHdpdGhNaWRkbGV3YXJlKC4uLm1pZGRsZXdhcmVzKSB7XG5cdFx0XHRjb25zdCBuZXh0ID0gdGhpcy5jbG9uZSgpO1xuXHRcdFx0bmV4dC5taWRkbGV3YXJlID0gbmV4dC5taWRkbGV3YXJlLmNvbmNhdCguLi5taWRkbGV3YXJlcyk7XG5cdFx0XHRyZXR1cm4gbmV4dDtcblx0XHR9XG5cdFx0d2l0aFByZU1pZGRsZXdhcmUoLi4ucHJlTWlkZGxld2FyZXMpIHtcblx0XHRcdGNvbnN0IG1pZGRsZXdhcmVzID0gcHJlTWlkZGxld2FyZXMubWFwKChwcmUpID0+ICh7IHByZSB9KSk7XG5cdFx0XHRyZXR1cm4gdGhpcy53aXRoTWlkZGxld2FyZSguLi5taWRkbGV3YXJlcyk7XG5cdFx0fVxuXHRcdHdpdGhQb3N0TWlkZGxld2FyZSguLi5wb3N0TWlkZGxld2FyZXMpIHtcblx0XHRcdGNvbnN0IG1pZGRsZXdhcmVzID0gcG9zdE1pZGRsZXdhcmVzLm1hcCgocG9zdCkgPT4gKHsgcG9zdCB9KSk7XG5cdFx0XHRyZXR1cm4gdGhpcy53aXRoTWlkZGxld2FyZSguLi5taWRkbGV3YXJlcyk7XG5cdFx0fVxuXHRcdC8qKlxuXHRcdCogQ2hlY2sgaWYgdGhlIGdpdmVuIE1JTUUgaXMgYSBKU09OIE1JTUUuXG5cdFx0KiBKU09OIE1JTUUgZXhhbXBsZXM6XG5cdFx0KiAgIGFwcGxpY2F0aW9uL2pzb25cblx0XHQqICAgYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD1VVEY4XG5cdFx0KiAgIEFQUExJQ0FUSU9OL0pTT05cblx0XHQqICAgYXBwbGljYXRpb24vdm5kLmNvbXBhbnkranNvblxuXHRcdCogQHBhcmFtIG1pbWUgLSBNSU1FIChNdWx0aXB1cnBvc2UgSW50ZXJuZXQgTWFpbCBFeHRlbnNpb25zKVxuXHRcdCogQHJldHVybiBUcnVlIGlmIHRoZSBnaXZlbiBNSU1FIGlzIEpTT04sIGZhbHNlIG90aGVyd2lzZS5cblx0XHQqL1xuXHRcdGlzSnNvbk1pbWUobWltZSkge1xuXHRcdFx0aWYgKCFtaW1lKSByZXR1cm4gZmFsc2U7XG5cdFx0XHRyZXR1cm4gQmFzZUFQSS5qc29uUmVnZXgudGVzdChtaW1lKTtcblx0XHR9XG5cdFx0cmVxdWVzdChjb250ZXh0LCBpbml0T3ZlcnJpZGVzKSB7XG5cdFx0XHRyZXR1cm4gX19hd2FpdGVyJDUodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG5cdFx0XHRcdGNvbnN0IHsgdXJsLCBpbml0IH0gPSB5aWVsZCB0aGlzLmNyZWF0ZUZldGNoUGFyYW1zKGNvbnRleHQsIGluaXRPdmVycmlkZXMpO1xuXHRcdFx0XHRjb25zdCByZXNwb25zZSA9IHlpZWxkIHRoaXMuZmV0Y2hBcGkodXJsLCBpbml0KTtcblx0XHRcdFx0aWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnN0YXR1cyA+PSAyMDAgJiYgcmVzcG9uc2Uuc3RhdHVzIDwgMzAwKSByZXR1cm4gcmVzcG9uc2U7XG5cdFx0XHRcdHRocm93IG5ldyBSZXNwb25zZUVycm9yKHJlc3BvbnNlLCBcIlJlc3BvbnNlIHJldHVybmVkIGFuIGVycm9yIGNvZGVcIik7XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0Y3JlYXRlRmV0Y2hQYXJhbXMoY29udGV4dCwgaW5pdE92ZXJyaWRlcykge1xuXHRcdFx0cmV0dXJuIF9fYXdhaXRlciQ1KHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuXHRcdFx0XHRsZXQgdXJsID0gdGhpcy5jb25maWd1cmF0aW9uLmJhc2VQYXRoICsgY29udGV4dC5wYXRoO1xuXHRcdFx0XHRpZiAoY29udGV4dC5xdWVyeSAhPT0gdm9pZCAwICYmIE9iamVjdC5rZXlzKGNvbnRleHQucXVlcnkpLmxlbmd0aCAhPT0gMCkgdXJsICs9IFwiP1wiICsgdGhpcy5jb25maWd1cmF0aW9uLnF1ZXJ5UGFyYW1zU3RyaW5naWZ5KGNvbnRleHQucXVlcnkpO1xuXHRcdFx0XHRjb25zdCBoZWFkZXJzID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5jb25maWd1cmF0aW9uLmhlYWRlcnMsIGNvbnRleHQuaGVhZGVycyk7XG5cdFx0XHRcdE9iamVjdC5rZXlzKGhlYWRlcnMpLmZvckVhY2goKGtleSkgPT4gaGVhZGVyc1trZXldID09PSB2b2lkIDAgPyBkZWxldGUgaGVhZGVyc1trZXldIDoge30pO1xuXHRcdFx0XHRjb25zdCBpbml0T3ZlcnJpZGVGbiA9IHR5cGVvZiBpbml0T3ZlcnJpZGVzID09PSBcImZ1bmN0aW9uXCIgPyBpbml0T3ZlcnJpZGVzIDogKCkgPT4gX19hd2FpdGVyJDUodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGluaXRPdmVycmlkZXM7XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRjb25zdCBpbml0UGFyYW1zID0ge1xuXHRcdFx0XHRcdG1ldGhvZDogY29udGV4dC5tZXRob2QsXG5cdFx0XHRcdFx0aGVhZGVycyxcblx0XHRcdFx0XHRib2R5OiBjb250ZXh0LmJvZHksXG5cdFx0XHRcdFx0Y3JlZGVudGlhbHM6IHRoaXMuY29uZmlndXJhdGlvbi5jcmVkZW50aWFsc1xuXHRcdFx0XHR9O1xuXHRcdFx0XHRjb25zdCBvdmVycmlkZGVuSW5pdCA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgaW5pdFBhcmFtcyksIHlpZWxkIGluaXRPdmVycmlkZUZuKHtcblx0XHRcdFx0XHRpbml0OiBpbml0UGFyYW1zLFxuXHRcdFx0XHRcdGNvbnRleHRcblx0XHRcdFx0fSkpO1xuXHRcdFx0XHRsZXQgYm9keTtcblx0XHRcdFx0aWYgKGlzRm9ybURhdGEob3ZlcnJpZGRlbkluaXQuYm9keSkgfHwgb3ZlcnJpZGRlbkluaXQuYm9keSBpbnN0YW5jZW9mIFVSTFNlYXJjaFBhcmFtcyB8fCBpc0Jsb2Iob3ZlcnJpZGRlbkluaXQuYm9keSkpIGJvZHkgPSBvdmVycmlkZGVuSW5pdC5ib2R5O1xuXHRcdFx0XHRlbHNlIGlmICh0aGlzLmlzSnNvbk1pbWUoaGVhZGVyc1tcIkNvbnRlbnQtVHlwZVwiXSkpIGJvZHkgPSBKU09OLnN0cmluZ2lmeShvdmVycmlkZGVuSW5pdC5ib2R5KTtcblx0XHRcdFx0ZWxzZSBib2R5ID0gb3ZlcnJpZGRlbkluaXQuYm9keTtcblx0XHRcdFx0Y29uc3QgaW5pdCA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgb3ZlcnJpZGRlbkluaXQpLCB7IGJvZHkgfSk7XG5cdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0dXJsLFxuXHRcdFx0XHRcdGluaXRcblx0XHRcdFx0fTtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHQvKipcblx0XHQqIENyZWF0ZSBhIHNoYWxsb3cgY2xvbmUgb2YgYHRoaXNgIGJ5IGNvbnN0cnVjdGluZyBhIG5ldyBpbnN0YW5jZVxuXHRcdCogYW5kIHRoZW4gc2hhbGxvdyBjbG9uaW5nIGRhdGEgbWVtYmVycy5cblx0XHQqL1xuXHRcdGNsb25lKCkge1xuXHRcdFx0Y29uc3QgY29uc3RydWN0b3IgPSB0aGlzLmNvbnN0cnVjdG9yO1xuXHRcdFx0Y29uc3QgbmV4dCA9IG5ldyBjb25zdHJ1Y3Rvcih0aGlzLmNvbmZpZ3VyYXRpb24pO1xuXHRcdFx0bmV4dC5taWRkbGV3YXJlID0gdGhpcy5taWRkbGV3YXJlLnNsaWNlKCk7XG5cdFx0XHRyZXR1cm4gbmV4dDtcblx0XHR9XG5cdH07XG5cdGV4cG9ydHMuQmFzZUFQSSA9IEJhc2VBUEk7XG5cdEJhc2VBUEkuanNvblJlZ2V4ID0gbmV3IFJlZ0V4cChcIl4oOj9hcHBsaWNhdGlvbi9qc29ufFteOy8gXHRdKy9bXjsvIFx0XStbK11qc29uKVsgXHRdKig6PzsuKik/JFwiLCBcImlcIik7XG5cdGZ1bmN0aW9uIGlzQmxvYih2YWx1ZSkge1xuXHRcdHJldHVybiB0eXBlb2YgQmxvYiAhPT0gXCJ1bmRlZmluZWRcIiAmJiB2YWx1ZSBpbnN0YW5jZW9mIEJsb2I7XG5cdH1cblx0ZnVuY3Rpb24gaXNGb3JtRGF0YSh2YWx1ZSkge1xuXHRcdHJldHVybiB0eXBlb2YgRm9ybURhdGEgIT09IFwidW5kZWZpbmVkXCIgJiYgdmFsdWUgaW5zdGFuY2VvZiBGb3JtRGF0YTtcblx0fVxuXHR2YXIgUmVzcG9uc2VFcnJvciA9IGNsYXNzIGV4dGVuZHMgRXJyb3Ige1xuXHRcdGNvbnN0cnVjdG9yKHJlc3BvbnNlLCBtc2cpIHtcblx0XHRcdHN1cGVyKG1zZyk7XG5cdFx0XHR0aGlzLnJlc3BvbnNlID0gcmVzcG9uc2U7XG5cdFx0XHR0aGlzLm5hbWUgPSBcIlJlc3BvbnNlRXJyb3JcIjtcblx0XHR9XG5cdH07XG5cdGV4cG9ydHMuUmVzcG9uc2VFcnJvciA9IFJlc3BvbnNlRXJyb3I7XG5cdHZhciBGZXRjaEVycm9yID0gY2xhc3MgZXh0ZW5kcyBFcnJvciB7XG5cdFx0Y29uc3RydWN0b3IoY2F1c2UsIG1zZykge1xuXHRcdFx0c3VwZXIobXNnKTtcblx0XHRcdHRoaXMuY2F1c2UgPSBjYXVzZTtcblx0XHRcdHRoaXMubmFtZSA9IFwiRmV0Y2hFcnJvclwiO1xuXHRcdH1cblx0fTtcblx0ZXhwb3J0cy5GZXRjaEVycm9yID0gRmV0Y2hFcnJvcjtcblx0dmFyIFJlcXVpcmVkRXJyb3IgPSBjbGFzcyBleHRlbmRzIEVycm9yIHtcblx0XHRjb25zdHJ1Y3RvcihmaWVsZCwgbXNnKSB7XG5cdFx0XHRzdXBlcihtc2cpO1xuXHRcdFx0dGhpcy5maWVsZCA9IGZpZWxkO1xuXHRcdFx0dGhpcy5uYW1lID0gXCJSZXF1aXJlZEVycm9yXCI7XG5cdFx0fVxuXHR9O1xuXHRleHBvcnRzLlJlcXVpcmVkRXJyb3IgPSBSZXF1aXJlZEVycm9yO1xuXHRleHBvcnRzLkNPTExFQ1RJT05fRk9STUFUUyA9IHtcblx0XHRjc3Y6IFwiLFwiLFxuXHRcdHNzdjogXCIgXCIsXG5cdFx0dHN2OiBcIlx0XCIsXG5cdFx0cGlwZXM6IFwifFwiXG5cdH07XG5cdGZ1bmN0aW9uIHF1ZXJ5c3RyaW5nKHBhcmFtcywgcHJlZml4ID0gXCJcIikge1xuXHRcdHJldHVybiBPYmplY3Qua2V5cyhwYXJhbXMpLm1hcCgoa2V5KSA9PiBxdWVyeXN0cmluZ1NpbmdsZUtleShrZXksIHBhcmFtc1trZXldLCBwcmVmaXgpKS5maWx0ZXIoKHBhcnQpID0+IHBhcnQubGVuZ3RoID4gMCkuam9pbihcIiZcIik7XG5cdH1cblx0ZnVuY3Rpb24gcXVlcnlzdHJpbmdTaW5nbGVLZXkoa2V5LCB2YWx1ZSwga2V5UHJlZml4ID0gXCJcIikge1xuXHRcdGNvbnN0IGZ1bGxLZXkgPSBrZXlQcmVmaXggKyAoa2V5UHJlZml4Lmxlbmd0aCA/IGBbJHtrZXl9XWAgOiBrZXkpO1xuXHRcdGlmICh2YWx1ZSBpbnN0YW5jZW9mIEFycmF5KSB7XG5cdFx0XHRjb25zdCBtdWx0aVZhbHVlID0gdmFsdWUubWFwKChzaW5nbGVWYWx1ZSkgPT4gZW5jb2RlVVJJQ29tcG9uZW50KFN0cmluZyhzaW5nbGVWYWx1ZSkpKS5qb2luKGAmJHtlbmNvZGVVUklDb21wb25lbnQoZnVsbEtleSl9PWApO1xuXHRcdFx0cmV0dXJuIGAke2VuY29kZVVSSUNvbXBvbmVudChmdWxsS2V5KX09JHttdWx0aVZhbHVlfWA7XG5cdFx0fVxuXHRcdGlmICh2YWx1ZSBpbnN0YW5jZW9mIFNldCkgcmV0dXJuIHF1ZXJ5c3RyaW5nU2luZ2xlS2V5KGtleSwgQXJyYXkuZnJvbSh2YWx1ZSksIGtleVByZWZpeCk7XG5cdFx0aWYgKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSkgcmV0dXJuIGAke2VuY29kZVVSSUNvbXBvbmVudChmdWxsS2V5KX09JHtlbmNvZGVVUklDb21wb25lbnQodmFsdWUudG9JU09TdHJpbmcoKSl9YDtcblx0XHRpZiAodmFsdWUgaW5zdGFuY2VvZiBPYmplY3QpIHJldHVybiBxdWVyeXN0cmluZyh2YWx1ZSwgZnVsbEtleSk7XG5cdFx0cmV0dXJuIGAke2VuY29kZVVSSUNvbXBvbmVudChmdWxsS2V5KX09JHtlbmNvZGVVUklDb21wb25lbnQoU3RyaW5nKHZhbHVlKSl9YDtcblx0fVxuXHRmdW5jdGlvbiBleGlzdHMoanNvbiwga2V5KSB7XG5cdFx0Y29uc3QgdmFsdWUgPSBqc29uW2tleV07XG5cdFx0cmV0dXJuIHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB2b2lkIDA7XG5cdH1cblx0ZnVuY3Rpb24gbWFwVmFsdWVzKGRhdGEsIGZuKSB7XG5cdFx0cmV0dXJuIE9iamVjdC5rZXlzKGRhdGEpLnJlZHVjZSgoYWNjLCBrZXkpID0+IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgYWNjKSwgeyBba2V5XTogZm4oZGF0YVtrZXldKSB9KSwge30pO1xuXHR9XG5cdGZ1bmN0aW9uIGNhbkNvbnN1bWVGb3JtKGNvbnN1bWVzKSB7XG5cdFx0Zm9yIChjb25zdCBjb25zdW1lIG9mIGNvbnN1bWVzKSBpZiAoXCJtdWx0aXBhcnQvZm9ybS1kYXRhXCIgPT09IGNvbnN1bWUuY29udGVudFR5cGUpIHJldHVybiB0cnVlO1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHR2YXIgSlNPTkFwaVJlc3BvbnNlID0gY2xhc3Mge1xuXHRcdGNvbnN0cnVjdG9yKHJhdywgdHJhbnNmb3JtZXIgPSAoanNvblZhbHVlKSA9PiBqc29uVmFsdWUpIHtcblx0XHRcdHRoaXMucmF3ID0gcmF3O1xuXHRcdFx0dGhpcy50cmFuc2Zvcm1lciA9IHRyYW5zZm9ybWVyO1xuXHRcdH1cblx0XHR2YWx1ZSgpIHtcblx0XHRcdHJldHVybiBfX2F3YWl0ZXIkNSh0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcblx0XHRcdFx0cmV0dXJuIHRoaXMudHJhbnNmb3JtZXIoeWllbGQgdGhpcy5yYXcuanNvbigpKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0fTtcblx0ZXhwb3J0cy5KU09OQXBpUmVzcG9uc2UgPSBKU09OQXBpUmVzcG9uc2U7XG5cdHZhciBWb2lkQXBpUmVzcG9uc2UgPSBjbGFzcyB7XG5cdFx0Y29uc3RydWN0b3IocmF3KSB7XG5cdFx0XHR0aGlzLnJhdyA9IHJhdztcblx0XHR9XG5cdFx0dmFsdWUoKSB7XG5cdFx0XHRyZXR1cm4gX19hd2FpdGVyJDUodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7fSk7XG5cdFx0fVxuXHR9O1xuXHRleHBvcnRzLlZvaWRBcGlSZXNwb25zZSA9IFZvaWRBcGlSZXNwb25zZTtcblx0dmFyIEJsb2JBcGlSZXNwb25zZSA9IGNsYXNzIHtcblx0XHRjb25zdHJ1Y3RvcihyYXcpIHtcblx0XHRcdHRoaXMucmF3ID0gcmF3O1xuXHRcdH1cblx0XHR2YWx1ZSgpIHtcblx0XHRcdHJldHVybiBfX2F3YWl0ZXIkNSh0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcblx0XHRcdFx0cmV0dXJuIHlpZWxkIHRoaXMucmF3LmJsb2IoKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0fTtcblx0ZXhwb3J0cy5CbG9iQXBpUmVzcG9uc2UgPSBCbG9iQXBpUmVzcG9uc2U7XG5cdHZhciBUZXh0QXBpUmVzcG9uc2UgPSBjbGFzcyB7XG5cdFx0Y29uc3RydWN0b3IocmF3KSB7XG5cdFx0XHR0aGlzLnJhdyA9IHJhdztcblx0XHR9XG5cdFx0dmFsdWUoKSB7XG5cdFx0XHRyZXR1cm4gX19hd2FpdGVyJDUodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG5cdFx0XHRcdHJldHVybiB5aWVsZCB0aGlzLnJhdy50ZXh0KCk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdH07XG5cdGV4cG9ydHMuVGV4dEFwaVJlc3BvbnNlID0gVGV4dEFwaVJlc3BvbnNlO1xufSkgfSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIC4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvQ3VzdG9tZXJTZXJ2aWNlUHJvdmlkZXIuanNcbnZhciByZXF1aXJlX0N1c3RvbWVyU2VydmljZVByb3ZpZGVyID0gLyogQF9fUFVSRV9fICovIF9fY29tbW9uSlMoeyBcIi4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvQ3VzdG9tZXJTZXJ2aWNlUHJvdmlkZXIuanNcIjogKChleHBvcnRzKSA9PiB7XG5cdC8qKlxuXHQqIENvbW1lcmNlXG5cdCogTm8gZGVzY3JpcHRpb24gcHJvdmlkZWQgKGdlbmVyYXRlZCBieSBPcGVuYXBpIEdlbmVyYXRvciBodHRwczovL2dpdGh1Yi5jb20vb3BlbmFwaXRvb2xzL29wZW5hcGktZ2VuZXJhdG9yKVxuXHQqXG5cdCogVGhlIHZlcnNpb24gb2YgdGhlIE9wZW5BUEkgZG9jdW1lbnQ6IDEuMS4wXG5cdCpcblx0KlxuXHQqIE5PVEU6IFRoaXMgY2xhc3MgaXMgYXV0byBnZW5lcmF0ZWQgYnkgT3BlbkFQSSBHZW5lcmF0b3IgKGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaCkuXG5cdCogaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoXG5cdCogRG8gbm90IGVkaXQgdGhlIGNsYXNzIG1hbnVhbGx5LlxuXHQqL1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5cdGV4cG9ydHMuQ3VzdG9tZXJTZXJ2aWNlUHJvdmlkZXIgPSB2b2lkIDA7XG5cdGV4cG9ydHMuaW5zdGFuY2VPZkN1c3RvbWVyU2VydmljZVByb3ZpZGVyID0gaW5zdGFuY2VPZkN1c3RvbWVyU2VydmljZVByb3ZpZGVyO1xuXHRleHBvcnRzLkN1c3RvbWVyU2VydmljZVByb3ZpZGVyRnJvbUpTT04gPSBDdXN0b21lclNlcnZpY2VQcm92aWRlckZyb21KU09OO1xuXHRleHBvcnRzLkN1c3RvbWVyU2VydmljZVByb3ZpZGVyRnJvbUpTT05UeXBlZCA9IEN1c3RvbWVyU2VydmljZVByb3ZpZGVyRnJvbUpTT05UeXBlZDtcblx0ZXhwb3J0cy5DdXN0b21lclNlcnZpY2VQcm92aWRlclRvSlNPTiA9IEN1c3RvbWVyU2VydmljZVByb3ZpZGVyVG9KU09OO1xuXHRleHBvcnRzLkN1c3RvbWVyU2VydmljZVByb3ZpZGVyVG9KU09OVHlwZWQgPSBDdXN0b21lclNlcnZpY2VQcm92aWRlclRvSlNPTlR5cGVkO1xuXHQvKipcblx0KlxuXHQqIEBleHBvcnRcblx0KiBAZW51bSB7c3RyaW5nfVxuXHQqL1xuXHR2YXIgQ3VzdG9tZXJTZXJ2aWNlUHJvdmlkZXI7XG5cdChmdW5jdGlvbihDdXN0b21lclNlcnZpY2VQcm92aWRlciQxKSB7XG5cdFx0Q3VzdG9tZXJTZXJ2aWNlUHJvdmlkZXIkMVtcIkdsYWRseVwiXSA9IFwiR0xBRExZXCI7XG5cdFx0Q3VzdG9tZXJTZXJ2aWNlUHJvdmlkZXIkMVtcIkt1c3RvbWVyXCJdID0gXCJLVVNUT01FUlwiO1xuXHRcdEN1c3RvbWVyU2VydmljZVByb3ZpZGVyJDFbXCJHb3JnaWFzXCJdID0gXCJHT1JHSUFTXCI7XG5cdFx0Q3VzdG9tZXJTZXJ2aWNlUHJvdmlkZXIkMVtcIlVuc3VwcG9ydGVkXCJdID0gXCJVTlNVUFBPUlRFRFwiO1xuXHR9KShDdXN0b21lclNlcnZpY2VQcm92aWRlciB8fCAoZXhwb3J0cy5DdXN0b21lclNlcnZpY2VQcm92aWRlciA9IEN1c3RvbWVyU2VydmljZVByb3ZpZGVyID0ge30pKTtcblx0ZnVuY3Rpb24gaW5zdGFuY2VPZkN1c3RvbWVyU2VydmljZVByb3ZpZGVyKHZhbHVlKSB7XG5cdFx0Zm9yIChjb25zdCBrZXkgaW4gQ3VzdG9tZXJTZXJ2aWNlUHJvdmlkZXIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoQ3VzdG9tZXJTZXJ2aWNlUHJvdmlkZXIsIGtleSkpIHtcblx0XHRcdGlmIChDdXN0b21lclNlcnZpY2VQcm92aWRlcltrZXldID09PSB2YWx1ZSkgcmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHRmdW5jdGlvbiBDdXN0b21lclNlcnZpY2VQcm92aWRlckZyb21KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gQ3VzdG9tZXJTZXJ2aWNlUHJvdmlkZXJGcm9tSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBDdXN0b21lclNlcnZpY2VQcm92aWRlckZyb21KU09OVHlwZWQoanNvbiwgaWdub3JlRGlzY3JpbWluYXRvcikge1xuXHRcdHJldHVybiBqc29uO1xuXHR9XG5cdGZ1bmN0aW9uIEN1c3RvbWVyU2VydmljZVByb3ZpZGVyVG9KU09OKHZhbHVlKSB7XG5cdFx0cmV0dXJuIHZhbHVlO1xuXHR9XG5cdGZ1bmN0aW9uIEN1c3RvbWVyU2VydmljZVByb3ZpZGVyVG9KU09OVHlwZWQodmFsdWUsIGlnbm9yZURpc2NyaW1pbmF0b3IpIHtcblx0XHRyZXR1cm4gdmFsdWU7XG5cdH1cbn0pIH0pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiAuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL0FkZE5vdGVUb0xhdGVzdENvbnZlcnNhdGlvblJlcXVlc3QuanNcbnZhciByZXF1aXJlX0FkZE5vdGVUb0xhdGVzdENvbnZlcnNhdGlvblJlcXVlc3QgPSAvKiBAX19QVVJFX18gKi8gX19jb21tb25KUyh7IFwiLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9BZGROb3RlVG9MYXRlc3RDb252ZXJzYXRpb25SZXF1ZXN0LmpzXCI6ICgoZXhwb3J0cykgPT4ge1xuXHQvKipcblx0KiBDb21tZXJjZVxuXHQqIE5vIGRlc2NyaXB0aW9uIHByb3ZpZGVkIChnZW5lcmF0ZWQgYnkgT3BlbmFwaSBHZW5lcmF0b3IgaHR0cHM6Ly9naXRodWIuY29tL29wZW5hcGl0b29scy9vcGVuYXBpLWdlbmVyYXRvcilcblx0KlxuXHQqIFRoZSB2ZXJzaW9uIG9mIHRoZSBPcGVuQVBJIGRvY3VtZW50OiAxLjEuMFxuXHQqXG5cdCpcblx0KiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IE9wZW5BUEkgR2VuZXJhdG9yIChodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2gpLlxuXHQqIGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaFxuXHQqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cblx0Ki9cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuXHRleHBvcnRzLmluc3RhbmNlT2ZBZGROb3RlVG9MYXRlc3RDb252ZXJzYXRpb25SZXF1ZXN0ID0gaW5zdGFuY2VPZkFkZE5vdGVUb0xhdGVzdENvbnZlcnNhdGlvblJlcXVlc3Q7XG5cdGV4cG9ydHMuQWRkTm90ZVRvTGF0ZXN0Q29udmVyc2F0aW9uUmVxdWVzdEZyb21KU09OID0gQWRkTm90ZVRvTGF0ZXN0Q29udmVyc2F0aW9uUmVxdWVzdEZyb21KU09OO1xuXHRleHBvcnRzLkFkZE5vdGVUb0xhdGVzdENvbnZlcnNhdGlvblJlcXVlc3RGcm9tSlNPTlR5cGVkID0gQWRkTm90ZVRvTGF0ZXN0Q29udmVyc2F0aW9uUmVxdWVzdEZyb21KU09OVHlwZWQ7XG5cdGV4cG9ydHMuQWRkTm90ZVRvTGF0ZXN0Q29udmVyc2F0aW9uUmVxdWVzdFRvSlNPTiA9IEFkZE5vdGVUb0xhdGVzdENvbnZlcnNhdGlvblJlcXVlc3RUb0pTT047XG5cdGV4cG9ydHMuQWRkTm90ZVRvTGF0ZXN0Q29udmVyc2F0aW9uUmVxdWVzdFRvSlNPTlR5cGVkID0gQWRkTm90ZVRvTGF0ZXN0Q29udmVyc2F0aW9uUmVxdWVzdFRvSlNPTlR5cGVkO1xuXHRjb25zdCBDdXN0b21lclNlcnZpY2VQcm92aWRlcl8xJDQgPSByZXF1aXJlX0N1c3RvbWVyU2VydmljZVByb3ZpZGVyKCk7XG5cdC8qKlxuXHQqIENoZWNrIGlmIGEgZ2l2ZW4gb2JqZWN0IGltcGxlbWVudHMgdGhlIEFkZE5vdGVUb0xhdGVzdENvbnZlcnNhdGlvblJlcXVlc3QgaW50ZXJmYWNlLlxuXHQqL1xuXHRmdW5jdGlvbiBpbnN0YW5jZU9mQWRkTm90ZVRvTGF0ZXN0Q29udmVyc2F0aW9uUmVxdWVzdCh2YWx1ZSkge1xuXHRcdGlmICghKFwiZW1haWxcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJlbWFpbFwiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0aWYgKCEoXCJzcGlmZnlfdXNlcl9pZFwiIGluIHZhbHVlKSB8fCB2YWx1ZVtcInNwaWZmeV91c2VyX2lkXCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHRmdW5jdGlvbiBBZGROb3RlVG9MYXRlc3RDb252ZXJzYXRpb25SZXF1ZXN0RnJvbUpTT04oanNvbikge1xuXHRcdHJldHVybiBBZGROb3RlVG9MYXRlc3RDb252ZXJzYXRpb25SZXF1ZXN0RnJvbUpTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gQWRkTm90ZVRvTGF0ZXN0Q29udmVyc2F0aW9uUmVxdWVzdEZyb21KU09OVHlwZWQoanNvbiwgaWdub3JlRGlzY3JpbWluYXRvcikge1xuXHRcdGlmIChqc29uID09IG51bGwpIHJldHVybiBqc29uO1xuXHRcdHJldHVybiB7XG5cdFx0XHRcImN1c3RvbWVyX3NlcnZpY2VfcHJvdmlkZXJcIjoganNvbltcImN1c3RvbWVyX3NlcnZpY2VfcHJvdmlkZXJcIl0gPT0gbnVsbCA/IHZvaWQgMCA6ICgwLCBDdXN0b21lclNlcnZpY2VQcm92aWRlcl8xJDQuQ3VzdG9tZXJTZXJ2aWNlUHJvdmlkZXJGcm9tSlNPTikoanNvbltcImN1c3RvbWVyX3NlcnZpY2VfcHJvdmlkZXJcIl0pLFxuXHRcdFx0XCJlbWFpbFwiOiBqc29uW1wiZW1haWxcIl0sXG5cdFx0XHRcIm5hbWVcIjoganNvbltcIm5hbWVcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IGpzb25bXCJuYW1lXCJdLFxuXHRcdFx0XCJzcGlmZnlfdXNlcl9pZFwiOiBqc29uW1wic3BpZmZ5X3VzZXJfaWRcIl0sXG5cdFx0XHRcInN1YmplY3RcIjoganNvbltcInN1YmplY3RcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IGpzb25bXCJzdWJqZWN0XCJdXG5cdFx0fTtcblx0fVxuXHRmdW5jdGlvbiBBZGROb3RlVG9MYXRlc3RDb252ZXJzYXRpb25SZXF1ZXN0VG9KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gQWRkTm90ZVRvTGF0ZXN0Q29udmVyc2F0aW9uUmVxdWVzdFRvSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBBZGROb3RlVG9MYXRlc3RDb252ZXJzYXRpb25SZXF1ZXN0VG9KU09OVHlwZWQodmFsdWUsIGlnbm9yZURpc2NyaW1pbmF0b3IgPSBmYWxzZSkge1xuXHRcdGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gdmFsdWU7XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwiY3VzdG9tZXJfc2VydmljZV9wcm92aWRlclwiOiAoMCwgQ3VzdG9tZXJTZXJ2aWNlUHJvdmlkZXJfMSQ0LkN1c3RvbWVyU2VydmljZVByb3ZpZGVyVG9KU09OKSh2YWx1ZVtcImN1c3RvbWVyX3NlcnZpY2VfcHJvdmlkZXJcIl0pLFxuXHRcdFx0XCJlbWFpbFwiOiB2YWx1ZVtcImVtYWlsXCJdLFxuXHRcdFx0XCJuYW1lXCI6IHZhbHVlW1wibmFtZVwiXSxcblx0XHRcdFwic3BpZmZ5X3VzZXJfaWRcIjogdmFsdWVbXCJzcGlmZnlfdXNlcl9pZFwiXSxcblx0XHRcdFwic3ViamVjdFwiOiB2YWx1ZVtcInN1YmplY3RcIl1cblx0XHR9O1xuXHR9XG59KSB9KTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9BZGROb3RlVG9MYXRlc3RDb252ZXJzYXRpb25SZXNwb25zZS5qc1xudmFyIHJlcXVpcmVfQWRkTm90ZVRvTGF0ZXN0Q29udmVyc2F0aW9uUmVzcG9uc2UgPSAvKiBAX19QVVJFX18gKi8gX19jb21tb25KUyh7IFwiLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9BZGROb3RlVG9MYXRlc3RDb252ZXJzYXRpb25SZXNwb25zZS5qc1wiOiAoKGV4cG9ydHMpID0+IHtcblx0LyoqXG5cdCogQ29tbWVyY2Vcblx0KiBObyBkZXNjcmlwdGlvbiBwcm92aWRlZCAoZ2VuZXJhdGVkIGJ5IE9wZW5hcGkgR2VuZXJhdG9yIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuYXBpdG9vbHMvb3BlbmFwaS1nZW5lcmF0b3IpXG5cdCpcblx0KiBUaGUgdmVyc2lvbiBvZiB0aGUgT3BlbkFQSSBkb2N1bWVudDogMS4xLjBcblx0KlxuXHQqXG5cdCogTk9URTogVGhpcyBjbGFzcyBpcyBhdXRvIGdlbmVyYXRlZCBieSBPcGVuQVBJIEdlbmVyYXRvciAoaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoKS5cblx0KiBodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2hcblx0KiBEbyBub3QgZWRpdCB0aGUgY2xhc3MgbWFudWFsbHkuXG5cdCovXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcblx0ZXhwb3J0cy5pbnN0YW5jZU9mQWRkTm90ZVRvTGF0ZXN0Q29udmVyc2F0aW9uUmVzcG9uc2UgPSBpbnN0YW5jZU9mQWRkTm90ZVRvTGF0ZXN0Q29udmVyc2F0aW9uUmVzcG9uc2U7XG5cdGV4cG9ydHMuQWRkTm90ZVRvTGF0ZXN0Q29udmVyc2F0aW9uUmVzcG9uc2VGcm9tSlNPTiA9IEFkZE5vdGVUb0xhdGVzdENvbnZlcnNhdGlvblJlc3BvbnNlRnJvbUpTT047XG5cdGV4cG9ydHMuQWRkTm90ZVRvTGF0ZXN0Q29udmVyc2F0aW9uUmVzcG9uc2VGcm9tSlNPTlR5cGVkID0gQWRkTm90ZVRvTGF0ZXN0Q29udmVyc2F0aW9uUmVzcG9uc2VGcm9tSlNPTlR5cGVkO1xuXHRleHBvcnRzLkFkZE5vdGVUb0xhdGVzdENvbnZlcnNhdGlvblJlc3BvbnNlVG9KU09OID0gQWRkTm90ZVRvTGF0ZXN0Q29udmVyc2F0aW9uUmVzcG9uc2VUb0pTT047XG5cdGV4cG9ydHMuQWRkTm90ZVRvTGF0ZXN0Q29udmVyc2F0aW9uUmVzcG9uc2VUb0pTT05UeXBlZCA9IEFkZE5vdGVUb0xhdGVzdENvbnZlcnNhdGlvblJlc3BvbnNlVG9KU09OVHlwZWQ7XG5cdC8qKlxuXHQqIENoZWNrIGlmIGEgZ2l2ZW4gb2JqZWN0IGltcGxlbWVudHMgdGhlIEFkZE5vdGVUb0xhdGVzdENvbnZlcnNhdGlvblJlc3BvbnNlIGludGVyZmFjZS5cblx0Ki9cblx0ZnVuY3Rpb24gaW5zdGFuY2VPZkFkZE5vdGVUb0xhdGVzdENvbnZlcnNhdGlvblJlc3BvbnNlKHZhbHVlKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0ZnVuY3Rpb24gQWRkTm90ZVRvTGF0ZXN0Q29udmVyc2F0aW9uUmVzcG9uc2VGcm9tSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIEFkZE5vdGVUb0xhdGVzdENvbnZlcnNhdGlvblJlc3BvbnNlRnJvbUpTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gQWRkTm90ZVRvTGF0ZXN0Q29udmVyc2F0aW9uUmVzcG9uc2VGcm9tSlNPTlR5cGVkKGpzb24sIGlnbm9yZURpc2NyaW1pbmF0b3IpIHtcblx0XHRpZiAoanNvbiA9PSBudWxsKSByZXR1cm4ganNvbjtcblx0XHRyZXR1cm4ge1xuXHRcdFx0XCJjb252ZXJzYXRpb25faWRcIjoganNvbltcImNvbnZlcnNhdGlvbl9pZFwiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcImNvbnZlcnNhdGlvbl9pZFwiXSxcblx0XHRcdFwiY3VzdG9tZXJfaWRcIjoganNvbltcImN1c3RvbWVyX2lkXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wiY3VzdG9tZXJfaWRcIl0sXG5cdFx0XHRcIm1lc3NhZ2VcIjoganNvbltcIm1lc3NhZ2VcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IGpzb25bXCJtZXNzYWdlXCJdXG5cdFx0fTtcblx0fVxuXHRmdW5jdGlvbiBBZGROb3RlVG9MYXRlc3RDb252ZXJzYXRpb25SZXNwb25zZVRvSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIEFkZE5vdGVUb0xhdGVzdENvbnZlcnNhdGlvblJlc3BvbnNlVG9KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIEFkZE5vdGVUb0xhdGVzdENvbnZlcnNhdGlvblJlc3BvbnNlVG9KU09OVHlwZWQodmFsdWUsIGlnbm9yZURpc2NyaW1pbmF0b3IgPSBmYWxzZSkge1xuXHRcdGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gdmFsdWU7XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwiY29udmVyc2F0aW9uX2lkXCI6IHZhbHVlW1wiY29udmVyc2F0aW9uX2lkXCJdLFxuXHRcdFx0XCJjdXN0b21lcl9pZFwiOiB2YWx1ZVtcImN1c3RvbWVyX2lkXCJdLFxuXHRcdFx0XCJtZXNzYWdlXCI6IHZhbHVlW1wibWVzc2FnZVwiXVxuXHRcdH07XG5cdH1cbn0pIH0pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiAuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL0FkZFRvQ2FydEF0dHJpYnV0ZXMuanNcbnZhciByZXF1aXJlX0FkZFRvQ2FydEF0dHJpYnV0ZXMgPSAvKiBAX19QVVJFX18gKi8gX19jb21tb25KUyh7IFwiLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9BZGRUb0NhcnRBdHRyaWJ1dGVzLmpzXCI6ICgoZXhwb3J0cykgPT4ge1xuXHQvKipcblx0KiBDb21tZXJjZVxuXHQqIE5vIGRlc2NyaXB0aW9uIHByb3ZpZGVkIChnZW5lcmF0ZWQgYnkgT3BlbmFwaSBHZW5lcmF0b3IgaHR0cHM6Ly9naXRodWIuY29tL29wZW5hcGl0b29scy9vcGVuYXBpLWdlbmVyYXRvcilcblx0KlxuXHQqIFRoZSB2ZXJzaW9uIG9mIHRoZSBPcGVuQVBJIGRvY3VtZW50OiAxLjEuMFxuXHQqXG5cdCpcblx0KiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IE9wZW5BUEkgR2VuZXJhdG9yIChodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2gpLlxuXHQqIGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaFxuXHQqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cblx0Ki9cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuXHRleHBvcnRzLmluc3RhbmNlT2ZBZGRUb0NhcnRBdHRyaWJ1dGVzID0gaW5zdGFuY2VPZkFkZFRvQ2FydEF0dHJpYnV0ZXM7XG5cdGV4cG9ydHMuQWRkVG9DYXJ0QXR0cmlidXRlc0Zyb21KU09OID0gQWRkVG9DYXJ0QXR0cmlidXRlc0Zyb21KU09OO1xuXHRleHBvcnRzLkFkZFRvQ2FydEF0dHJpYnV0ZXNGcm9tSlNPTlR5cGVkID0gQWRkVG9DYXJ0QXR0cmlidXRlc0Zyb21KU09OVHlwZWQ7XG5cdGV4cG9ydHMuQWRkVG9DYXJ0QXR0cmlidXRlc1RvSlNPTiA9IEFkZFRvQ2FydEF0dHJpYnV0ZXNUb0pTT047XG5cdGV4cG9ydHMuQWRkVG9DYXJ0QXR0cmlidXRlc1RvSlNPTlR5cGVkID0gQWRkVG9DYXJ0QXR0cmlidXRlc1RvSlNPTlR5cGVkO1xuXHQvKipcblx0KiBDaGVjayBpZiBhIGdpdmVuIG9iamVjdCBpbXBsZW1lbnRzIHRoZSBBZGRUb0NhcnRBdHRyaWJ1dGVzIGludGVyZmFjZS5cblx0Ki9cblx0ZnVuY3Rpb24gaW5zdGFuY2VPZkFkZFRvQ2FydEF0dHJpYnV0ZXModmFsdWUpIHtcblx0XHRpZiAoIShcInByb2R1Y3RfaWRcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJwcm9kdWN0X2lkXCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHRmdW5jdGlvbiBBZGRUb0NhcnRBdHRyaWJ1dGVzRnJvbUpTT04oanNvbikge1xuXHRcdHJldHVybiBBZGRUb0NhcnRBdHRyaWJ1dGVzRnJvbUpTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gQWRkVG9DYXJ0QXR0cmlidXRlc0Zyb21KU09OVHlwZWQoanNvbiwgaWdub3JlRGlzY3JpbWluYXRvcikge1xuXHRcdGlmIChqc29uID09IG51bGwpIHJldHVybiBqc29uO1xuXHRcdHJldHVybiB7IFwicHJvZHVjdF9pZFwiOiBqc29uW1wicHJvZHVjdF9pZFwiXSB9O1xuXHR9XG5cdGZ1bmN0aW9uIEFkZFRvQ2FydEF0dHJpYnV0ZXNUb0pTT04oanNvbikge1xuXHRcdHJldHVybiBBZGRUb0NhcnRBdHRyaWJ1dGVzVG9KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIEFkZFRvQ2FydEF0dHJpYnV0ZXNUb0pTT05UeXBlZCh2YWx1ZSwgaWdub3JlRGlzY3JpbWluYXRvciA9IGZhbHNlKSB7XG5cdFx0aWYgKHZhbHVlID09IG51bGwpIHJldHVybiB2YWx1ZTtcblx0XHRyZXR1cm4geyBcInByb2R1Y3RfaWRcIjogdmFsdWVbXCJwcm9kdWN0X2lkXCJdIH07XG5cdH1cbn0pIH0pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiAuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL0FuYWx5dGljc0lkZW50aWZ5UmVxdWVzdC5qc1xudmFyIHJlcXVpcmVfQW5hbHl0aWNzSWRlbnRpZnlSZXF1ZXN0ID0gLyogQF9fUFVSRV9fICovIF9fY29tbW9uSlMoeyBcIi4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvQW5hbHl0aWNzSWRlbnRpZnlSZXF1ZXN0LmpzXCI6ICgoZXhwb3J0cykgPT4ge1xuXHQvKipcblx0KiBDb21tZXJjZVxuXHQqIE5vIGRlc2NyaXB0aW9uIHByb3ZpZGVkIChnZW5lcmF0ZWQgYnkgT3BlbmFwaSBHZW5lcmF0b3IgaHR0cHM6Ly9naXRodWIuY29tL29wZW5hcGl0b29scy9vcGVuYXBpLWdlbmVyYXRvcilcblx0KlxuXHQqIFRoZSB2ZXJzaW9uIG9mIHRoZSBPcGVuQVBJIGRvY3VtZW50OiAxLjEuMFxuXHQqXG5cdCpcblx0KiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IE9wZW5BUEkgR2VuZXJhdG9yIChodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2gpLlxuXHQqIGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaFxuXHQqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cblx0Ki9cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuXHRleHBvcnRzLmluc3RhbmNlT2ZBbmFseXRpY3NJZGVudGlmeVJlcXVlc3QgPSBpbnN0YW5jZU9mQW5hbHl0aWNzSWRlbnRpZnlSZXF1ZXN0O1xuXHRleHBvcnRzLkFuYWx5dGljc0lkZW50aWZ5UmVxdWVzdEZyb21KU09OID0gQW5hbHl0aWNzSWRlbnRpZnlSZXF1ZXN0RnJvbUpTT047XG5cdGV4cG9ydHMuQW5hbHl0aWNzSWRlbnRpZnlSZXF1ZXN0RnJvbUpTT05UeXBlZCA9IEFuYWx5dGljc0lkZW50aWZ5UmVxdWVzdEZyb21KU09OVHlwZWQ7XG5cdGV4cG9ydHMuQW5hbHl0aWNzSWRlbnRpZnlSZXF1ZXN0VG9KU09OID0gQW5hbHl0aWNzSWRlbnRpZnlSZXF1ZXN0VG9KU09OO1xuXHRleHBvcnRzLkFuYWx5dGljc0lkZW50aWZ5UmVxdWVzdFRvSlNPTlR5cGVkID0gQW5hbHl0aWNzSWRlbnRpZnlSZXF1ZXN0VG9KU09OVHlwZWQ7XG5cdC8qKlxuXHQqIENoZWNrIGlmIGEgZ2l2ZW4gb2JqZWN0IGltcGxlbWVudHMgdGhlIEFuYWx5dGljc0lkZW50aWZ5UmVxdWVzdCBpbnRlcmZhY2UuXG5cdCovXG5cdGZ1bmN0aW9uIGluc3RhbmNlT2ZBbmFseXRpY3NJZGVudGlmeVJlcXVlc3QodmFsdWUpIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHRmdW5jdGlvbiBBbmFseXRpY3NJZGVudGlmeVJlcXVlc3RGcm9tSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIEFuYWx5dGljc0lkZW50aWZ5UmVxdWVzdEZyb21KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIEFuYWx5dGljc0lkZW50aWZ5UmVxdWVzdEZyb21KU09OVHlwZWQoanNvbiwgaWdub3JlRGlzY3JpbWluYXRvcikge1xuXHRcdGlmIChqc29uID09IG51bGwpIHJldHVybiBqc29uO1xuXHRcdHJldHVybiB7XG5cdFx0XHRcImFwcF92ZXJzaW9uXCI6IGpzb25bXCJhcHBfdmVyc2lvblwiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcImFwcF92ZXJzaW9uXCJdLFxuXHRcdFx0XCJjYXJyaWVyXCI6IGpzb25bXCJjYXJyaWVyXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wiY2FycmllclwiXSxcblx0XHRcdFwiY2l0eVwiOiBqc29uW1wiY2l0eVwiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcImNpdHlcIl0sXG5cdFx0XHRcImNvdW50cnlcIjoganNvbltcImNvdW50cnlcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IGpzb25bXCJjb3VudHJ5XCJdLFxuXHRcdFx0XCJkZXZpY2VfYnJhbmRcIjoganNvbltcImRldmljZV9icmFuZFwiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcImRldmljZV9icmFuZFwiXSxcblx0XHRcdFwiZGV2aWNlX2lkXCI6IGpzb25bXCJkZXZpY2VfaWRcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IGpzb25bXCJkZXZpY2VfaWRcIl0sXG5cdFx0XHRcImRldmljZV9tYW51ZmFjdHVyZXJcIjoganNvbltcImRldmljZV9tYW51ZmFjdHVyZXJcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IGpzb25bXCJkZXZpY2VfbWFudWZhY3R1cmVyXCJdLFxuXHRcdFx0XCJkZXZpY2VfbW9kZWxcIjoganNvbltcImRldmljZV9tb2RlbFwiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcImRldmljZV9tb2RlbFwiXSxcblx0XHRcdFwiZG1hXCI6IGpzb25bXCJkbWFcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IGpzb25bXCJkbWFcIl0sXG5cdFx0XHRcImdyb3Vwc1wiOiBqc29uW1wiZ3JvdXBzXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wiZ3JvdXBzXCJdLFxuXHRcdFx0XCJvc19uYW1lXCI6IGpzb25bXCJvc19uYW1lXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wib3NfbmFtZVwiXSxcblx0XHRcdFwib3NfdmVyc2lvblwiOiBqc29uW1wib3NfdmVyc2lvblwiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcIm9zX3ZlcnNpb25cIl0sXG5cdFx0XHRcInBsYXRmb3JtXCI6IGpzb25bXCJwbGF0Zm9ybVwiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcInBsYXRmb3JtXCJdLFxuXHRcdFx0XCJyZWdpb25cIjoganNvbltcInJlZ2lvblwiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcInJlZ2lvblwiXSxcblx0XHRcdFwidXNlcl9pZFwiOiBqc29uW1widXNlcl9pZFwiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcInVzZXJfaWRcIl0sXG5cdFx0XHRcInVzZXJfcHJvcGVydGllc1wiOiBqc29uW1widXNlcl9wcm9wZXJ0aWVzXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1widXNlcl9wcm9wZXJ0aWVzXCJdXG5cdFx0fTtcblx0fVxuXHRmdW5jdGlvbiBBbmFseXRpY3NJZGVudGlmeVJlcXVlc3RUb0pTT04oanNvbikge1xuXHRcdHJldHVybiBBbmFseXRpY3NJZGVudGlmeVJlcXVlc3RUb0pTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gQW5hbHl0aWNzSWRlbnRpZnlSZXF1ZXN0VG9KU09OVHlwZWQodmFsdWUsIGlnbm9yZURpc2NyaW1pbmF0b3IgPSBmYWxzZSkge1xuXHRcdGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gdmFsdWU7XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwiYXBwX3ZlcnNpb25cIjogdmFsdWVbXCJhcHBfdmVyc2lvblwiXSxcblx0XHRcdFwiY2FycmllclwiOiB2YWx1ZVtcImNhcnJpZXJcIl0sXG5cdFx0XHRcImNpdHlcIjogdmFsdWVbXCJjaXR5XCJdLFxuXHRcdFx0XCJjb3VudHJ5XCI6IHZhbHVlW1wiY291bnRyeVwiXSxcblx0XHRcdFwiZGV2aWNlX2JyYW5kXCI6IHZhbHVlW1wiZGV2aWNlX2JyYW5kXCJdLFxuXHRcdFx0XCJkZXZpY2VfaWRcIjogdmFsdWVbXCJkZXZpY2VfaWRcIl0sXG5cdFx0XHRcImRldmljZV9tYW51ZmFjdHVyZXJcIjogdmFsdWVbXCJkZXZpY2VfbWFudWZhY3R1cmVyXCJdLFxuXHRcdFx0XCJkZXZpY2VfbW9kZWxcIjogdmFsdWVbXCJkZXZpY2VfbW9kZWxcIl0sXG5cdFx0XHRcImRtYVwiOiB2YWx1ZVtcImRtYVwiXSxcblx0XHRcdFwiZ3JvdXBzXCI6IHZhbHVlW1wiZ3JvdXBzXCJdLFxuXHRcdFx0XCJvc19uYW1lXCI6IHZhbHVlW1wib3NfbmFtZVwiXSxcblx0XHRcdFwib3NfdmVyc2lvblwiOiB2YWx1ZVtcIm9zX3ZlcnNpb25cIl0sXG5cdFx0XHRcInBsYXRmb3JtXCI6IHZhbHVlW1wicGxhdGZvcm1cIl0sXG5cdFx0XHRcInJlZ2lvblwiOiB2YWx1ZVtcInJlZ2lvblwiXSxcblx0XHRcdFwidXNlcl9pZFwiOiB2YWx1ZVtcInVzZXJfaWRcIl0sXG5cdFx0XHRcInVzZXJfcHJvcGVydGllc1wiOiB2YWx1ZVtcInVzZXJfcHJvcGVydGllc1wiXVxuXHRcdH07XG5cdH1cbn0pIH0pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiAuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL0FuYWx5dGljc1RyYWNrRXZlbnRSZXF1ZXN0LmpzXG52YXIgcmVxdWlyZV9BbmFseXRpY3NUcmFja0V2ZW50UmVxdWVzdCA9IC8qIEBfX1BVUkVfXyAqLyBfX2NvbW1vbkpTKHsgXCIuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL0FuYWx5dGljc1RyYWNrRXZlbnRSZXF1ZXN0LmpzXCI6ICgoZXhwb3J0cykgPT4ge1xuXHQvKipcblx0KiBDb21tZXJjZVxuXHQqIE5vIGRlc2NyaXB0aW9uIHByb3ZpZGVkIChnZW5lcmF0ZWQgYnkgT3BlbmFwaSBHZW5lcmF0b3IgaHR0cHM6Ly9naXRodWIuY29tL29wZW5hcGl0b29scy9vcGVuYXBpLWdlbmVyYXRvcilcblx0KlxuXHQqIFRoZSB2ZXJzaW9uIG9mIHRoZSBPcGVuQVBJIGRvY3VtZW50OiAxLjEuMFxuXHQqXG5cdCpcblx0KiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IE9wZW5BUEkgR2VuZXJhdG9yIChodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2gpLlxuXHQqIGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaFxuXHQqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cblx0Ki9cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuXHRleHBvcnRzLmluc3RhbmNlT2ZBbmFseXRpY3NUcmFja0V2ZW50UmVxdWVzdCA9IGluc3RhbmNlT2ZBbmFseXRpY3NUcmFja0V2ZW50UmVxdWVzdDtcblx0ZXhwb3J0cy5BbmFseXRpY3NUcmFja0V2ZW50UmVxdWVzdEZyb21KU09OID0gQW5hbHl0aWNzVHJhY2tFdmVudFJlcXVlc3RGcm9tSlNPTjtcblx0ZXhwb3J0cy5BbmFseXRpY3NUcmFja0V2ZW50UmVxdWVzdEZyb21KU09OVHlwZWQgPSBBbmFseXRpY3NUcmFja0V2ZW50UmVxdWVzdEZyb21KU09OVHlwZWQ7XG5cdGV4cG9ydHMuQW5hbHl0aWNzVHJhY2tFdmVudFJlcXVlc3RUb0pTT04gPSBBbmFseXRpY3NUcmFja0V2ZW50UmVxdWVzdFRvSlNPTjtcblx0ZXhwb3J0cy5BbmFseXRpY3NUcmFja0V2ZW50UmVxdWVzdFRvSlNPTlR5cGVkID0gQW5hbHl0aWNzVHJhY2tFdmVudFJlcXVlc3RUb0pTT05UeXBlZDtcblx0LyoqXG5cdCogQ2hlY2sgaWYgYSBnaXZlbiBvYmplY3QgaW1wbGVtZW50cyB0aGUgQW5hbHl0aWNzVHJhY2tFdmVudFJlcXVlc3QgaW50ZXJmYWNlLlxuXHQqL1xuXHRmdW5jdGlvbiBpbnN0YW5jZU9mQW5hbHl0aWNzVHJhY2tFdmVudFJlcXVlc3QodmFsdWUpIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHRmdW5jdGlvbiBBbmFseXRpY3NUcmFja0V2ZW50UmVxdWVzdEZyb21KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gQW5hbHl0aWNzVHJhY2tFdmVudFJlcXVlc3RGcm9tSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBBbmFseXRpY3NUcmFja0V2ZW50UmVxdWVzdEZyb21KU09OVHlwZWQoanNvbiwgaWdub3JlRGlzY3JpbWluYXRvcikge1xuXHRcdGlmIChqc29uID09IG51bGwpIHJldHVybiBqc29uO1xuXHRcdHJldHVybiB7XG5cdFx0XHRcImV2ZW50XCI6IGpzb25bXCJldmVudFwiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcImV2ZW50XCJdLFxuXHRcdFx0XCJldmVudF9wcm9wZXJ0aWVzXCI6IGpzb25bXCJldmVudF9wcm9wZXJ0aWVzXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wiZXZlbnRfcHJvcGVydGllc1wiXSxcblx0XHRcdFwidXNlcl9pZFwiOiBqc29uW1widXNlcl9pZFwiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcInVzZXJfaWRcIl0sXG5cdFx0XHRcInVzZXJfcHJvcGVydGllc1wiOiBqc29uW1widXNlcl9wcm9wZXJ0aWVzXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1widXNlcl9wcm9wZXJ0aWVzXCJdXG5cdFx0fTtcblx0fVxuXHRmdW5jdGlvbiBBbmFseXRpY3NUcmFja0V2ZW50UmVxdWVzdFRvSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIEFuYWx5dGljc1RyYWNrRXZlbnRSZXF1ZXN0VG9KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIEFuYWx5dGljc1RyYWNrRXZlbnRSZXF1ZXN0VG9KU09OVHlwZWQodmFsdWUsIGlnbm9yZURpc2NyaW1pbmF0b3IgPSBmYWxzZSkge1xuXHRcdGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gdmFsdWU7XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwiZXZlbnRcIjogdmFsdWVbXCJldmVudFwiXSxcblx0XHRcdFwiZXZlbnRfcHJvcGVydGllc1wiOiB2YWx1ZVtcImV2ZW50X3Byb3BlcnRpZXNcIl0sXG5cdFx0XHRcInVzZXJfaWRcIjogdmFsdWVbXCJ1c2VyX2lkXCJdLFxuXHRcdFx0XCJ1c2VyX3Byb3BlcnRpZXNcIjogdmFsdWVbXCJ1c2VyX3Byb3BlcnRpZXNcIl1cblx0XHR9O1xuXHR9XG59KSB9KTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9BdHRhY2htZW50UmVxdWVzdC5qc1xudmFyIHJlcXVpcmVfQXR0YWNobWVudFJlcXVlc3QgPSAvKiBAX19QVVJFX18gKi8gX19jb21tb25KUyh7IFwiLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9BdHRhY2htZW50UmVxdWVzdC5qc1wiOiAoKGV4cG9ydHMpID0+IHtcblx0LyoqXG5cdCogQ29tbWVyY2Vcblx0KiBObyBkZXNjcmlwdGlvbiBwcm92aWRlZCAoZ2VuZXJhdGVkIGJ5IE9wZW5hcGkgR2VuZXJhdG9yIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuYXBpdG9vbHMvb3BlbmFwaS1nZW5lcmF0b3IpXG5cdCpcblx0KiBUaGUgdmVyc2lvbiBvZiB0aGUgT3BlbkFQSSBkb2N1bWVudDogMS4xLjBcblx0KlxuXHQqXG5cdCogTk9URTogVGhpcyBjbGFzcyBpcyBhdXRvIGdlbmVyYXRlZCBieSBPcGVuQVBJIEdlbmVyYXRvciAoaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoKS5cblx0KiBodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2hcblx0KiBEbyBub3QgZWRpdCB0aGUgY2xhc3MgbWFudWFsbHkuXG5cdCovXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcblx0ZXhwb3J0cy5pbnN0YW5jZU9mQXR0YWNobWVudFJlcXVlc3QgPSBpbnN0YW5jZU9mQXR0YWNobWVudFJlcXVlc3Q7XG5cdGV4cG9ydHMuQXR0YWNobWVudFJlcXVlc3RGcm9tSlNPTiA9IEF0dGFjaG1lbnRSZXF1ZXN0RnJvbUpTT047XG5cdGV4cG9ydHMuQXR0YWNobWVudFJlcXVlc3RGcm9tSlNPTlR5cGVkID0gQXR0YWNobWVudFJlcXVlc3RGcm9tSlNPTlR5cGVkO1xuXHRleHBvcnRzLkF0dGFjaG1lbnRSZXF1ZXN0VG9KU09OID0gQXR0YWNobWVudFJlcXVlc3RUb0pTT047XG5cdGV4cG9ydHMuQXR0YWNobWVudFJlcXVlc3RUb0pTT05UeXBlZCA9IEF0dGFjaG1lbnRSZXF1ZXN0VG9KU09OVHlwZWQ7XG5cdC8qKlxuXHQqIENoZWNrIGlmIGEgZ2l2ZW4gb2JqZWN0IGltcGxlbWVudHMgdGhlIEF0dGFjaG1lbnRSZXF1ZXN0IGludGVyZmFjZS5cblx0Ki9cblx0ZnVuY3Rpb24gaW5zdGFuY2VPZkF0dGFjaG1lbnRSZXF1ZXN0KHZhbHVlKSB7XG5cdFx0aWYgKCEoXCJiYXNlNjRfY29udGVudFwiIGluIHZhbHVlKSB8fCB2YWx1ZVtcImJhc2U2NF9jb250ZW50XCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRpZiAoIShcImNvbnRlbnRfdHlwZVwiIGluIHZhbHVlKSB8fCB2YWx1ZVtcImNvbnRlbnRfdHlwZVwiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0aWYgKCEoXCJmaWxlX25hbWVcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJmaWxlX25hbWVcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdGZ1bmN0aW9uIEF0dGFjaG1lbnRSZXF1ZXN0RnJvbUpTT04oanNvbikge1xuXHRcdHJldHVybiBBdHRhY2htZW50UmVxdWVzdEZyb21KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIEF0dGFjaG1lbnRSZXF1ZXN0RnJvbUpTT05UeXBlZChqc29uLCBpZ25vcmVEaXNjcmltaW5hdG9yKSB7XG5cdFx0aWYgKGpzb24gPT0gbnVsbCkgcmV0dXJuIGpzb247XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwiYmFzZTY0X2NvbnRlbnRcIjoganNvbltcImJhc2U2NF9jb250ZW50XCJdLFxuXHRcdFx0XCJjb250ZW50X3R5cGVcIjoganNvbltcImNvbnRlbnRfdHlwZVwiXSxcblx0XHRcdFwiZmlsZV9uYW1lXCI6IGpzb25bXCJmaWxlX25hbWVcIl1cblx0XHR9O1xuXHR9XG5cdGZ1bmN0aW9uIEF0dGFjaG1lbnRSZXF1ZXN0VG9KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gQXR0YWNobWVudFJlcXVlc3RUb0pTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gQXR0YWNobWVudFJlcXVlc3RUb0pTT05UeXBlZCh2YWx1ZSwgaWdub3JlRGlzY3JpbWluYXRvciA9IGZhbHNlKSB7XG5cdFx0aWYgKHZhbHVlID09IG51bGwpIHJldHVybiB2YWx1ZTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0XCJiYXNlNjRfY29udGVudFwiOiB2YWx1ZVtcImJhc2U2NF9jb250ZW50XCJdLFxuXHRcdFx0XCJjb250ZW50X3R5cGVcIjogdmFsdWVbXCJjb250ZW50X3R5cGVcIl0sXG5cdFx0XHRcImZpbGVfbmFtZVwiOiB2YWx1ZVtcImZpbGVfbmFtZVwiXVxuXHRcdH07XG5cdH1cbn0pIH0pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiAuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL0Zvcm1UeXBlLmpzXG52YXIgcmVxdWlyZV9Gb3JtVHlwZSA9IC8qIEBfX1BVUkVfXyAqLyBfX2NvbW1vbkpTKHsgXCIuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL0Zvcm1UeXBlLmpzXCI6ICgoZXhwb3J0cykgPT4ge1xuXHQvKipcblx0KiBDb21tZXJjZVxuXHQqIE5vIGRlc2NyaXB0aW9uIHByb3ZpZGVkIChnZW5lcmF0ZWQgYnkgT3BlbmFwaSBHZW5lcmF0b3IgaHR0cHM6Ly9naXRodWIuY29tL29wZW5hcGl0b29scy9vcGVuYXBpLWdlbmVyYXRvcilcblx0KlxuXHQqIFRoZSB2ZXJzaW9uIG9mIHRoZSBPcGVuQVBJIGRvY3VtZW50OiAxLjEuMFxuXHQqXG5cdCpcblx0KiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IE9wZW5BUEkgR2VuZXJhdG9yIChodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2gpLlxuXHQqIGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaFxuXHQqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cblx0Ki9cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuXHRleHBvcnRzLkZvcm1UeXBlID0gdm9pZCAwO1xuXHRleHBvcnRzLmluc3RhbmNlT2ZGb3JtVHlwZSA9IGluc3RhbmNlT2ZGb3JtVHlwZTtcblx0ZXhwb3J0cy5Gb3JtVHlwZUZyb21KU09OID0gRm9ybVR5cGVGcm9tSlNPTjtcblx0ZXhwb3J0cy5Gb3JtVHlwZUZyb21KU09OVHlwZWQgPSBGb3JtVHlwZUZyb21KU09OVHlwZWQ7XG5cdGV4cG9ydHMuRm9ybVR5cGVUb0pTT04gPSBGb3JtVHlwZVRvSlNPTjtcblx0ZXhwb3J0cy5Gb3JtVHlwZVRvSlNPTlR5cGVkID0gRm9ybVR5cGVUb0pTT05UeXBlZDtcblx0LyoqXG5cdCpcblx0KiBAZXhwb3J0XG5cdCogQGVudW0ge3N0cmluZ31cblx0Ki9cblx0dmFyIEZvcm1UeXBlO1xuXHQoZnVuY3Rpb24oRm9ybVR5cGUkMSkge1xuXHRcdEZvcm1UeXBlJDFbXCJFc2NhbGF0aW9uXCJdID0gXCJlc2NhbGF0aW9uXCI7XG5cdFx0Rm9ybVR5cGUkMVtcIk9yZGVyTG9va3VwXCJdID0gXCJvcmRlcl9sb29rdXBcIjtcblx0fSkoRm9ybVR5cGUgfHwgKGV4cG9ydHMuRm9ybVR5cGUgPSBGb3JtVHlwZSA9IHt9KSk7XG5cdGZ1bmN0aW9uIGluc3RhbmNlT2ZGb3JtVHlwZSh2YWx1ZSkge1xuXHRcdGZvciAoY29uc3Qga2V5IGluIEZvcm1UeXBlKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKEZvcm1UeXBlLCBrZXkpKSB7XG5cdFx0XHRpZiAoRm9ybVR5cGVba2V5XSA9PT0gdmFsdWUpIHJldHVybiB0cnVlO1xuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblx0ZnVuY3Rpb24gRm9ybVR5cGVGcm9tSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIEZvcm1UeXBlRnJvbUpTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gRm9ybVR5cGVGcm9tSlNPTlR5cGVkKGpzb24sIGlnbm9yZURpc2NyaW1pbmF0b3IpIHtcblx0XHRyZXR1cm4ganNvbjtcblx0fVxuXHRmdW5jdGlvbiBGb3JtVHlwZVRvSlNPTih2YWx1ZSkge1xuXHRcdHJldHVybiB2YWx1ZTtcblx0fVxuXHRmdW5jdGlvbiBGb3JtVHlwZVRvSlNPTlR5cGVkKHZhbHVlLCBpZ25vcmVEaXNjcmltaW5hdG9yKSB7XG5cdFx0cmV0dXJuIHZhbHVlO1xuXHR9XG59KSB9KTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9BdXRvRm9ybS5qc1xudmFyIHJlcXVpcmVfQXV0b0Zvcm0gPSAvKiBAX19QVVJFX18gKi8gX19jb21tb25KUyh7IFwiLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9BdXRvRm9ybS5qc1wiOiAoKGV4cG9ydHMpID0+IHtcblx0LyoqXG5cdCogQ29tbWVyY2Vcblx0KiBObyBkZXNjcmlwdGlvbiBwcm92aWRlZCAoZ2VuZXJhdGVkIGJ5IE9wZW5hcGkgR2VuZXJhdG9yIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuYXBpdG9vbHMvb3BlbmFwaS1nZW5lcmF0b3IpXG5cdCpcblx0KiBUaGUgdmVyc2lvbiBvZiB0aGUgT3BlbkFQSSBkb2N1bWVudDogMS4xLjBcblx0KlxuXHQqXG5cdCogTk9URTogVGhpcyBjbGFzcyBpcyBhdXRvIGdlbmVyYXRlZCBieSBPcGVuQVBJIEdlbmVyYXRvciAoaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoKS5cblx0KiBodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2hcblx0KiBEbyBub3QgZWRpdCB0aGUgY2xhc3MgbWFudWFsbHkuXG5cdCovXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcblx0ZXhwb3J0cy5pbnN0YW5jZU9mQXV0b0Zvcm0gPSBpbnN0YW5jZU9mQXV0b0Zvcm07XG5cdGV4cG9ydHMuQXV0b0Zvcm1Gcm9tSlNPTiA9IEF1dG9Gb3JtRnJvbUpTT047XG5cdGV4cG9ydHMuQXV0b0Zvcm1Gcm9tSlNPTlR5cGVkID0gQXV0b0Zvcm1Gcm9tSlNPTlR5cGVkO1xuXHRleHBvcnRzLkF1dG9Gb3JtVG9KU09OID0gQXV0b0Zvcm1Ub0pTT047XG5cdGV4cG9ydHMuQXV0b0Zvcm1Ub0pTT05UeXBlZCA9IEF1dG9Gb3JtVG9KU09OVHlwZWQ7XG5cdGNvbnN0IEZvcm1UeXBlXzEkMiA9IHJlcXVpcmVfRm9ybVR5cGUoKTtcblx0LyoqXG5cdCogQ2hlY2sgaWYgYSBnaXZlbiBvYmplY3QgaW1wbGVtZW50cyB0aGUgQXV0b0Zvcm0gaW50ZXJmYWNlLlxuXHQqL1xuXHRmdW5jdGlvbiBpbnN0YW5jZU9mQXV0b0Zvcm0odmFsdWUpIHtcblx0XHRpZiAoIShcImZvcm1fdHlwZVwiIGluIHZhbHVlKSB8fCB2YWx1ZVtcImZvcm1fdHlwZVwiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0ZnVuY3Rpb24gQXV0b0Zvcm1Gcm9tSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIEF1dG9Gb3JtRnJvbUpTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gQXV0b0Zvcm1Gcm9tSlNPTlR5cGVkKGpzb24sIGlnbm9yZURpc2NyaW1pbmF0b3IpIHtcblx0XHRpZiAoanNvbiA9PSBudWxsKSByZXR1cm4ganNvbjtcblx0XHRyZXR1cm4geyBcImZvcm1fdHlwZVwiOiAoMCwgRm9ybVR5cGVfMSQyLkZvcm1UeXBlRnJvbUpTT04pKGpzb25bXCJmb3JtX3R5cGVcIl0pIH07XG5cdH1cblx0ZnVuY3Rpb24gQXV0b0Zvcm1Ub0pTT04oanNvbikge1xuXHRcdHJldHVybiBBdXRvRm9ybVRvSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBBdXRvRm9ybVRvSlNPTlR5cGVkKHZhbHVlLCBpZ25vcmVEaXNjcmltaW5hdG9yID0gZmFsc2UpIHtcblx0XHRpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIHZhbHVlO1xuXHRcdHJldHVybiB7IFwiZm9ybV90eXBlXCI6ICgwLCBGb3JtVHlwZV8xJDIuRm9ybVR5cGVUb0pTT04pKHZhbHVlW1wiZm9ybV90eXBlXCJdKSB9O1xuXHR9XG59KSB9KTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9Db250ZXh0LmpzXG52YXIgcmVxdWlyZV9Db250ZXh0ID0gLyogQF9fUFVSRV9fICovIF9fY29tbW9uSlMoeyBcIi4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvQ29udGV4dC5qc1wiOiAoKGV4cG9ydHMpID0+IHtcblx0LyoqXG5cdCogQ29tbWVyY2Vcblx0KiBObyBkZXNjcmlwdGlvbiBwcm92aWRlZCAoZ2VuZXJhdGVkIGJ5IE9wZW5hcGkgR2VuZXJhdG9yIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuYXBpdG9vbHMvb3BlbmFwaS1nZW5lcmF0b3IpXG5cdCpcblx0KiBUaGUgdmVyc2lvbiBvZiB0aGUgT3BlbkFQSSBkb2N1bWVudDogMS4xLjBcblx0KlxuXHQqXG5cdCogTk9URTogVGhpcyBjbGFzcyBpcyBhdXRvIGdlbmVyYXRlZCBieSBPcGVuQVBJIEdlbmVyYXRvciAoaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoKS5cblx0KiBodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2hcblx0KiBEbyBub3QgZWRpdCB0aGUgY2xhc3MgbWFudWFsbHkuXG5cdCovXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcblx0ZXhwb3J0cy5Db250ZXh0U291cmNlRW51bSA9IGV4cG9ydHMuQ29udGV4dEVudkVudW0gPSB2b2lkIDA7XG5cdGV4cG9ydHMuaW5zdGFuY2VPZkNvbnRleHQgPSBpbnN0YW5jZU9mQ29udGV4dDtcblx0ZXhwb3J0cy5Db250ZXh0RnJvbUpTT04gPSBDb250ZXh0RnJvbUpTT047XG5cdGV4cG9ydHMuQ29udGV4dEZyb21KU09OVHlwZWQgPSBDb250ZXh0RnJvbUpTT05UeXBlZDtcblx0ZXhwb3J0cy5Db250ZXh0VG9KU09OID0gQ29udGV4dFRvSlNPTjtcblx0ZXhwb3J0cy5Db250ZXh0VG9KU09OVHlwZWQgPSBDb250ZXh0VG9KU09OVHlwZWQ7XG5cdC8qKlxuXHQqIEBleHBvcnRcblx0KiBAZW51bSB7c3RyaW5nfVxuXHQqL1xuXHR2YXIgQ29udGV4dEVudkVudW07XG5cdChmdW5jdGlvbihDb250ZXh0RW52RW51bSQxKSB7XG5cdFx0Q29udGV4dEVudkVudW0kMVtcIlByb2RcIl0gPSBcInByb2RcIjtcblx0XHRDb250ZXh0RW52RW51bSQxW1wiRGV2XCJdID0gXCJkZXZcIjtcblx0fSkoQ29udGV4dEVudkVudW0gfHwgKGV4cG9ydHMuQ29udGV4dEVudkVudW0gPSBDb250ZXh0RW52RW51bSA9IHt9KSk7XG5cdC8qKlxuXHQqIEBleHBvcnRcblx0KiBAZW51bSB7c3RyaW5nfVxuXHQqL1xuXHR2YXIgQ29udGV4dFNvdXJjZUVudW07XG5cdChmdW5jdGlvbihDb250ZXh0U291cmNlRW51bSQxKSB7XG5cdFx0Q29udGV4dFNvdXJjZUVudW0kMVtcIkZvcmtcIl0gPSBcImZvcmtcIjtcblx0XHRDb250ZXh0U291cmNlRW51bSQxW1wiUGxheWdyb3VuZFwiXSA9IFwicGxheWdyb3VuZFwiO1xuXHRcdENvbnRleHRTb3VyY2VFbnVtJDFbXCJBcHBcIl0gPSBcImFwcFwiO1xuXHRcdENvbnRleHRTb3VyY2VFbnVtJDFbXCJUZXN0XCJdID0gXCJ0ZXN0XCI7XG5cdH0pKENvbnRleHRTb3VyY2VFbnVtIHx8IChleHBvcnRzLkNvbnRleHRTb3VyY2VFbnVtID0gQ29udGV4dFNvdXJjZUVudW0gPSB7fSkpO1xuXHQvKipcblx0KiBDaGVjayBpZiBhIGdpdmVuIG9iamVjdCBpbXBsZW1lbnRzIHRoZSBDb250ZXh0IGludGVyZmFjZS5cblx0Ki9cblx0ZnVuY3Rpb24gaW5zdGFuY2VPZkNvbnRleHQodmFsdWUpIHtcblx0XHRpZiAoIShcInVzZXJfaWRcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJ1c2VyX2lkXCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHRmdW5jdGlvbiBDb250ZXh0RnJvbUpTT04oanNvbikge1xuXHRcdHJldHVybiBDb250ZXh0RnJvbUpTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gQ29udGV4dEZyb21KU09OVHlwZWQoanNvbiwgaWdub3JlRGlzY3JpbWluYXRvcikge1xuXHRcdGlmIChqc29uID09IG51bGwpIHJldHVybiBqc29uO1xuXHRcdHJldHVybiB7XG5cdFx0XHRcImNoYXRfaWRcIjoganNvbltcImNoYXRfaWRcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IGpzb25bXCJjaGF0X2lkXCJdLFxuXHRcdFx0XCJlbnZcIjoganNvbltcImVudlwiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcImVudlwiXSxcblx0XHRcdFwib3JnX2lkXCI6IGpzb25bXCJvcmdfaWRcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IGpzb25bXCJvcmdfaWRcIl0sXG5cdFx0XHRcIm9yZ19zaG9ydF9uYW1lXCI6IGpzb25bXCJvcmdfc2hvcnRfbmFtZVwiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcIm9yZ19zaG9ydF9uYW1lXCJdLFxuXHRcdFx0XCJzb3VyY2VcIjoganNvbltcInNvdXJjZVwiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcInNvdXJjZVwiXSxcblx0XHRcdFwidXNlcl9pZFwiOiBqc29uW1widXNlcl9pZFwiXVxuXHRcdH07XG5cdH1cblx0ZnVuY3Rpb24gQ29udGV4dFRvSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIENvbnRleHRUb0pTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gQ29udGV4dFRvSlNPTlR5cGVkKHZhbHVlLCBpZ25vcmVEaXNjcmltaW5hdG9yID0gZmFsc2UpIHtcblx0XHRpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIHZhbHVlO1xuXHRcdHJldHVybiB7XG5cdFx0XHRcImNoYXRfaWRcIjogdmFsdWVbXCJjaGF0X2lkXCJdLFxuXHRcdFx0XCJlbnZcIjogdmFsdWVbXCJlbnZcIl0sXG5cdFx0XHRcIm9yZ19pZFwiOiB2YWx1ZVtcIm9yZ19pZFwiXSxcblx0XHRcdFwib3JnX3Nob3J0X25hbWVcIjogdmFsdWVbXCJvcmdfc2hvcnRfbmFtZVwiXSxcblx0XHRcdFwic291cmNlXCI6IHZhbHVlW1wic291cmNlXCJdLFxuXHRcdFx0XCJ1c2VyX2lkXCI6IHZhbHVlW1widXNlcl9pZFwiXVxuXHRcdH07XG5cdH1cbn0pIH0pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiAuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL0NvbnZlcnNhdGlvblN0YXR1cy5qc1xudmFyIHJlcXVpcmVfQ29udmVyc2F0aW9uU3RhdHVzID0gLyogQF9fUFVSRV9fICovIF9fY29tbW9uSlMoeyBcIi4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvQ29udmVyc2F0aW9uU3RhdHVzLmpzXCI6ICgoZXhwb3J0cykgPT4ge1xuXHQvKipcblx0KiBDb21tZXJjZVxuXHQqIE5vIGRlc2NyaXB0aW9uIHByb3ZpZGVkIChnZW5lcmF0ZWQgYnkgT3BlbmFwaSBHZW5lcmF0b3IgaHR0cHM6Ly9naXRodWIuY29tL29wZW5hcGl0b29scy9vcGVuYXBpLWdlbmVyYXRvcilcblx0KlxuXHQqIFRoZSB2ZXJzaW9uIG9mIHRoZSBPcGVuQVBJIGRvY3VtZW50OiAxLjEuMFxuXHQqXG5cdCpcblx0KiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IE9wZW5BUEkgR2VuZXJhdG9yIChodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2gpLlxuXHQqIGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaFxuXHQqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cblx0Ki9cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuXHRleHBvcnRzLkNvbnZlcnNhdGlvblN0YXR1cyA9IHZvaWQgMDtcblx0ZXhwb3J0cy5pbnN0YW5jZU9mQ29udmVyc2F0aW9uU3RhdHVzID0gaW5zdGFuY2VPZkNvbnZlcnNhdGlvblN0YXR1cztcblx0ZXhwb3J0cy5Db252ZXJzYXRpb25TdGF0dXNGcm9tSlNPTiA9IENvbnZlcnNhdGlvblN0YXR1c0Zyb21KU09OO1xuXHRleHBvcnRzLkNvbnZlcnNhdGlvblN0YXR1c0Zyb21KU09OVHlwZWQgPSBDb252ZXJzYXRpb25TdGF0dXNGcm9tSlNPTlR5cGVkO1xuXHRleHBvcnRzLkNvbnZlcnNhdGlvblN0YXR1c1RvSlNPTiA9IENvbnZlcnNhdGlvblN0YXR1c1RvSlNPTjtcblx0ZXhwb3J0cy5Db252ZXJzYXRpb25TdGF0dXNUb0pTT05UeXBlZCA9IENvbnZlcnNhdGlvblN0YXR1c1RvSlNPTlR5cGVkO1xuXHQvKipcblx0KiBTdGFuZGFyZGl6ZWQgc3RhdHVzIHZhbHVlcyBmb3IgY3VzdG9tZXIgc2VydmljZSBjb252ZXJzYXRpb25zIGFjcm9zcyBwbGF0Zm9ybXNcblx0KiBAZXhwb3J0XG5cdCogQGVudW0ge3N0cmluZ31cblx0Ki9cblx0dmFyIENvbnZlcnNhdGlvblN0YXR1cztcblx0KGZ1bmN0aW9uKENvbnZlcnNhdGlvblN0YXR1cyQxKSB7XG5cdFx0Q29udmVyc2F0aW9uU3RhdHVzJDFbXCJPcGVuXCJdID0gXCJPUEVOXCI7XG5cdFx0Q29udmVyc2F0aW9uU3RhdHVzJDFbXCJDbG9zZWRcIl0gPSBcIkNMT1NFRFwiO1xuXHRcdENvbnZlcnNhdGlvblN0YXR1cyQxW1wiUGVuZGluZ1wiXSA9IFwiUEVORElOR1wiO1xuXHRcdENvbnZlcnNhdGlvblN0YXR1cyQxW1wiT3RoZXJcIl0gPSBcIk9USEVSXCI7XG5cdH0pKENvbnZlcnNhdGlvblN0YXR1cyB8fCAoZXhwb3J0cy5Db252ZXJzYXRpb25TdGF0dXMgPSBDb252ZXJzYXRpb25TdGF0dXMgPSB7fSkpO1xuXHRmdW5jdGlvbiBpbnN0YW5jZU9mQ29udmVyc2F0aW9uU3RhdHVzKHZhbHVlKSB7XG5cdFx0Zm9yIChjb25zdCBrZXkgaW4gQ29udmVyc2F0aW9uU3RhdHVzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKENvbnZlcnNhdGlvblN0YXR1cywga2V5KSkge1xuXHRcdFx0aWYgKENvbnZlcnNhdGlvblN0YXR1c1trZXldID09PSB2YWx1ZSkgcmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHRmdW5jdGlvbiBDb252ZXJzYXRpb25TdGF0dXNGcm9tSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIENvbnZlcnNhdGlvblN0YXR1c0Zyb21KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIENvbnZlcnNhdGlvblN0YXR1c0Zyb21KU09OVHlwZWQoanNvbiwgaWdub3JlRGlzY3JpbWluYXRvcikge1xuXHRcdHJldHVybiBqc29uO1xuXHR9XG5cdGZ1bmN0aW9uIENvbnZlcnNhdGlvblN0YXR1c1RvSlNPTih2YWx1ZSkge1xuXHRcdHJldHVybiB2YWx1ZTtcblx0fVxuXHRmdW5jdGlvbiBDb252ZXJzYXRpb25TdGF0dXNUb0pTT05UeXBlZCh2YWx1ZSwgaWdub3JlRGlzY3JpbWluYXRvcikge1xuXHRcdHJldHVybiB2YWx1ZTtcblx0fVxufSkgfSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIC4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvQ3JlYXRlQ29udmVyc2F0aW9uUmVxdWVzdC5qc1xudmFyIHJlcXVpcmVfQ3JlYXRlQ29udmVyc2F0aW9uUmVxdWVzdCA9IC8qIEBfX1BVUkVfXyAqLyBfX2NvbW1vbkpTKHsgXCIuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL0NyZWF0ZUNvbnZlcnNhdGlvblJlcXVlc3QuanNcIjogKChleHBvcnRzKSA9PiB7XG5cdC8qKlxuXHQqIENvbW1lcmNlXG5cdCogTm8gZGVzY3JpcHRpb24gcHJvdmlkZWQgKGdlbmVyYXRlZCBieSBPcGVuYXBpIEdlbmVyYXRvciBodHRwczovL2dpdGh1Yi5jb20vb3BlbmFwaXRvb2xzL29wZW5hcGktZ2VuZXJhdG9yKVxuXHQqXG5cdCogVGhlIHZlcnNpb24gb2YgdGhlIE9wZW5BUEkgZG9jdW1lbnQ6IDEuMS4wXG5cdCpcblx0KlxuXHQqIE5PVEU6IFRoaXMgY2xhc3MgaXMgYXV0byBnZW5lcmF0ZWQgYnkgT3BlbkFQSSBHZW5lcmF0b3IgKGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaCkuXG5cdCogaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoXG5cdCogRG8gbm90IGVkaXQgdGhlIGNsYXNzIG1hbnVhbGx5LlxuXHQqL1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5cdGV4cG9ydHMuaW5zdGFuY2VPZkNyZWF0ZUNvbnZlcnNhdGlvblJlcXVlc3QgPSBpbnN0YW5jZU9mQ3JlYXRlQ29udmVyc2F0aW9uUmVxdWVzdDtcblx0ZXhwb3J0cy5DcmVhdGVDb252ZXJzYXRpb25SZXF1ZXN0RnJvbUpTT04gPSBDcmVhdGVDb252ZXJzYXRpb25SZXF1ZXN0RnJvbUpTT047XG5cdGV4cG9ydHMuQ3JlYXRlQ29udmVyc2F0aW9uUmVxdWVzdEZyb21KU09OVHlwZWQgPSBDcmVhdGVDb252ZXJzYXRpb25SZXF1ZXN0RnJvbUpTT05UeXBlZDtcblx0ZXhwb3J0cy5DcmVhdGVDb252ZXJzYXRpb25SZXF1ZXN0VG9KU09OID0gQ3JlYXRlQ29udmVyc2F0aW9uUmVxdWVzdFRvSlNPTjtcblx0ZXhwb3J0cy5DcmVhdGVDb252ZXJzYXRpb25SZXF1ZXN0VG9KU09OVHlwZWQgPSBDcmVhdGVDb252ZXJzYXRpb25SZXF1ZXN0VG9KU09OVHlwZWQ7XG5cdGNvbnN0IEN1c3RvbWVyU2VydmljZVByb3ZpZGVyXzEkMyA9IHJlcXVpcmVfQ3VzdG9tZXJTZXJ2aWNlUHJvdmlkZXIoKTtcblx0LyoqXG5cdCogQ2hlY2sgaWYgYSBnaXZlbiBvYmplY3QgaW1wbGVtZW50cyB0aGUgQ3JlYXRlQ29udmVyc2F0aW9uUmVxdWVzdCBpbnRlcmZhY2UuXG5cdCovXG5cdGZ1bmN0aW9uIGluc3RhbmNlT2ZDcmVhdGVDb252ZXJzYXRpb25SZXF1ZXN0KHZhbHVlKSB7XG5cdFx0aWYgKCEoXCJlbWFpbFwiIGluIHZhbHVlKSB8fCB2YWx1ZVtcImVtYWlsXCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRpZiAoIShcInNwaWZmeV91c2VyX2lkXCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wic3BpZmZ5X3VzZXJfaWRcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdGZ1bmN0aW9uIENyZWF0ZUNvbnZlcnNhdGlvblJlcXVlc3RGcm9tSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIENyZWF0ZUNvbnZlcnNhdGlvblJlcXVlc3RGcm9tSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBDcmVhdGVDb252ZXJzYXRpb25SZXF1ZXN0RnJvbUpTT05UeXBlZChqc29uLCBpZ25vcmVEaXNjcmltaW5hdG9yKSB7XG5cdFx0aWYgKGpzb24gPT0gbnVsbCkgcmV0dXJuIGpzb247XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwiY3VzdG9tZXJfc2VydmljZV9wcm92aWRlclwiOiBqc29uW1wiY3VzdG9tZXJfc2VydmljZV9wcm92aWRlclwiXSA9PSBudWxsID8gdm9pZCAwIDogKDAsIEN1c3RvbWVyU2VydmljZVByb3ZpZGVyXzEkMy5DdXN0b21lclNlcnZpY2VQcm92aWRlckZyb21KU09OKShqc29uW1wiY3VzdG9tZXJfc2VydmljZV9wcm92aWRlclwiXSksXG5cdFx0XHRcImVtYWlsXCI6IGpzb25bXCJlbWFpbFwiXSxcblx0XHRcdFwibmFtZVwiOiBqc29uW1wibmFtZVwiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcIm5hbWVcIl0sXG5cdFx0XHRcInNwaWZmeV91c2VyX2lkXCI6IGpzb25bXCJzcGlmZnlfdXNlcl9pZFwiXSxcblx0XHRcdFwic3ViamVjdFwiOiBqc29uW1wic3ViamVjdFwiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcInN1YmplY3RcIl1cblx0XHR9O1xuXHR9XG5cdGZ1bmN0aW9uIENyZWF0ZUNvbnZlcnNhdGlvblJlcXVlc3RUb0pTT04oanNvbikge1xuXHRcdHJldHVybiBDcmVhdGVDb252ZXJzYXRpb25SZXF1ZXN0VG9KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIENyZWF0ZUNvbnZlcnNhdGlvblJlcXVlc3RUb0pTT05UeXBlZCh2YWx1ZSwgaWdub3JlRGlzY3JpbWluYXRvciA9IGZhbHNlKSB7XG5cdFx0aWYgKHZhbHVlID09IG51bGwpIHJldHVybiB2YWx1ZTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0XCJjdXN0b21lcl9zZXJ2aWNlX3Byb3ZpZGVyXCI6ICgwLCBDdXN0b21lclNlcnZpY2VQcm92aWRlcl8xJDMuQ3VzdG9tZXJTZXJ2aWNlUHJvdmlkZXJUb0pTT04pKHZhbHVlW1wiY3VzdG9tZXJfc2VydmljZV9wcm92aWRlclwiXSksXG5cdFx0XHRcImVtYWlsXCI6IHZhbHVlW1wiZW1haWxcIl0sXG5cdFx0XHRcIm5hbWVcIjogdmFsdWVbXCJuYW1lXCJdLFxuXHRcdFx0XCJzcGlmZnlfdXNlcl9pZFwiOiB2YWx1ZVtcInNwaWZmeV91c2VyX2lkXCJdLFxuXHRcdFx0XCJzdWJqZWN0XCI6IHZhbHVlW1wic3ViamVjdFwiXVxuXHRcdH07XG5cdH1cbn0pIH0pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiAuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL0N1c3RTZXJ2aWNlQ29udmVyc2F0aW9uLmpzXG52YXIgcmVxdWlyZV9DdXN0U2VydmljZUNvbnZlcnNhdGlvbiA9IC8qIEBfX1BVUkVfXyAqLyBfX2NvbW1vbkpTKHsgXCIuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL0N1c3RTZXJ2aWNlQ29udmVyc2F0aW9uLmpzXCI6ICgoZXhwb3J0cykgPT4ge1xuXHQvKipcblx0KiBDb21tZXJjZVxuXHQqIE5vIGRlc2NyaXB0aW9uIHByb3ZpZGVkIChnZW5lcmF0ZWQgYnkgT3BlbmFwaSBHZW5lcmF0b3IgaHR0cHM6Ly9naXRodWIuY29tL29wZW5hcGl0b29scy9vcGVuYXBpLWdlbmVyYXRvcilcblx0KlxuXHQqIFRoZSB2ZXJzaW9uIG9mIHRoZSBPcGVuQVBJIGRvY3VtZW50OiAxLjEuMFxuXHQqXG5cdCpcblx0KiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IE9wZW5BUEkgR2VuZXJhdG9yIChodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2gpLlxuXHQqIGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaFxuXHQqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cblx0Ki9cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuXHRleHBvcnRzLmluc3RhbmNlT2ZDdXN0U2VydmljZUNvbnZlcnNhdGlvbiA9IGluc3RhbmNlT2ZDdXN0U2VydmljZUNvbnZlcnNhdGlvbjtcblx0ZXhwb3J0cy5DdXN0U2VydmljZUNvbnZlcnNhdGlvbkZyb21KU09OID0gQ3VzdFNlcnZpY2VDb252ZXJzYXRpb25Gcm9tSlNPTjtcblx0ZXhwb3J0cy5DdXN0U2VydmljZUNvbnZlcnNhdGlvbkZyb21KU09OVHlwZWQgPSBDdXN0U2VydmljZUNvbnZlcnNhdGlvbkZyb21KU09OVHlwZWQ7XG5cdGV4cG9ydHMuQ3VzdFNlcnZpY2VDb252ZXJzYXRpb25Ub0pTT04gPSBDdXN0U2VydmljZUNvbnZlcnNhdGlvblRvSlNPTjtcblx0ZXhwb3J0cy5DdXN0U2VydmljZUNvbnZlcnNhdGlvblRvSlNPTlR5cGVkID0gQ3VzdFNlcnZpY2VDb252ZXJzYXRpb25Ub0pTT05UeXBlZDtcblx0LyoqXG5cdCogQ2hlY2sgaWYgYSBnaXZlbiBvYmplY3QgaW1wbGVtZW50cyB0aGUgQ3VzdFNlcnZpY2VDb252ZXJzYXRpb24gaW50ZXJmYWNlLlxuXHQqL1xuXHRmdW5jdGlvbiBpbnN0YW5jZU9mQ3VzdFNlcnZpY2VDb252ZXJzYXRpb24odmFsdWUpIHtcblx0XHRpZiAoIShcImNyZWF0ZWRfYXRcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJjcmVhdGVkX2F0XCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRpZiAoIShcImN1c3RvbWVyX2lkXCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wiY3VzdG9tZXJfaWRcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdGlmICghKFwiaWRcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJpZFwiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0aWYgKCEoXCJuYW1lXCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wibmFtZVwiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0aWYgKCEoXCJzdGF0dXNcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJzdGF0dXNcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdGZ1bmN0aW9uIEN1c3RTZXJ2aWNlQ29udmVyc2F0aW9uRnJvbUpTT04oanNvbikge1xuXHRcdHJldHVybiBDdXN0U2VydmljZUNvbnZlcnNhdGlvbkZyb21KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIEN1c3RTZXJ2aWNlQ29udmVyc2F0aW9uRnJvbUpTT05UeXBlZChqc29uLCBpZ25vcmVEaXNjcmltaW5hdG9yKSB7XG5cdFx0aWYgKGpzb24gPT0gbnVsbCkgcmV0dXJuIGpzb247XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwiY3JlYXRlZF9hdFwiOiBuZXcgRGF0ZShqc29uW1wiY3JlYXRlZF9hdFwiXSksXG5cdFx0XHRcImN1c3RvbWVyX2lkXCI6IGpzb25bXCJjdXN0b21lcl9pZFwiXSxcblx0XHRcdFwiaWRcIjoganNvbltcImlkXCJdLFxuXHRcdFx0XCJuYW1lXCI6IGpzb25bXCJuYW1lXCJdLFxuXHRcdFx0XCJzdGF0dXNcIjoganNvbltcInN0YXR1c1wiXVxuXHRcdH07XG5cdH1cblx0ZnVuY3Rpb24gQ3VzdFNlcnZpY2VDb252ZXJzYXRpb25Ub0pTT04oanNvbikge1xuXHRcdHJldHVybiBDdXN0U2VydmljZUNvbnZlcnNhdGlvblRvSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBDdXN0U2VydmljZUNvbnZlcnNhdGlvblRvSlNPTlR5cGVkKHZhbHVlLCBpZ25vcmVEaXNjcmltaW5hdG9yID0gZmFsc2UpIHtcblx0XHRpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIHZhbHVlO1xuXHRcdHJldHVybiB7XG5cdFx0XHRcImNyZWF0ZWRfYXRcIjogdmFsdWVbXCJjcmVhdGVkX2F0XCJdLnRvSVNPU3RyaW5nKCksXG5cdFx0XHRcImN1c3RvbWVyX2lkXCI6IHZhbHVlW1wiY3VzdG9tZXJfaWRcIl0sXG5cdFx0XHRcImlkXCI6IHZhbHVlW1wiaWRcIl0sXG5cdFx0XHRcIm5hbWVcIjogdmFsdWVbXCJuYW1lXCJdLFxuXHRcdFx0XCJzdGF0dXNcIjogdmFsdWVbXCJzdGF0dXNcIl1cblx0XHR9O1xuXHR9XG59KSB9KTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9DdXN0U2VydmljZUN1c3RvbWVyLmpzXG52YXIgcmVxdWlyZV9DdXN0U2VydmljZUN1c3RvbWVyID0gLyogQF9fUFVSRV9fICovIF9fY29tbW9uSlMoeyBcIi4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvQ3VzdFNlcnZpY2VDdXN0b21lci5qc1wiOiAoKGV4cG9ydHMpID0+IHtcblx0LyoqXG5cdCogQ29tbWVyY2Vcblx0KiBObyBkZXNjcmlwdGlvbiBwcm92aWRlZCAoZ2VuZXJhdGVkIGJ5IE9wZW5hcGkgR2VuZXJhdG9yIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuYXBpdG9vbHMvb3BlbmFwaS1nZW5lcmF0b3IpXG5cdCpcblx0KiBUaGUgdmVyc2lvbiBvZiB0aGUgT3BlbkFQSSBkb2N1bWVudDogMS4xLjBcblx0KlxuXHQqXG5cdCogTk9URTogVGhpcyBjbGFzcyBpcyBhdXRvIGdlbmVyYXRlZCBieSBPcGVuQVBJIEdlbmVyYXRvciAoaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoKS5cblx0KiBodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2hcblx0KiBEbyBub3QgZWRpdCB0aGUgY2xhc3MgbWFudWFsbHkuXG5cdCovXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcblx0ZXhwb3J0cy5pbnN0YW5jZU9mQ3VzdFNlcnZpY2VDdXN0b21lciA9IGluc3RhbmNlT2ZDdXN0U2VydmljZUN1c3RvbWVyO1xuXHRleHBvcnRzLkN1c3RTZXJ2aWNlQ3VzdG9tZXJGcm9tSlNPTiA9IEN1c3RTZXJ2aWNlQ3VzdG9tZXJGcm9tSlNPTjtcblx0ZXhwb3J0cy5DdXN0U2VydmljZUN1c3RvbWVyRnJvbUpTT05UeXBlZCA9IEN1c3RTZXJ2aWNlQ3VzdG9tZXJGcm9tSlNPTlR5cGVkO1xuXHRleHBvcnRzLkN1c3RTZXJ2aWNlQ3VzdG9tZXJUb0pTT04gPSBDdXN0U2VydmljZUN1c3RvbWVyVG9KU09OO1xuXHRleHBvcnRzLkN1c3RTZXJ2aWNlQ3VzdG9tZXJUb0pTT05UeXBlZCA9IEN1c3RTZXJ2aWNlQ3VzdG9tZXJUb0pTT05UeXBlZDtcblx0LyoqXG5cdCogQ2hlY2sgaWYgYSBnaXZlbiBvYmplY3QgaW1wbGVtZW50cyB0aGUgQ3VzdFNlcnZpY2VDdXN0b21lciBpbnRlcmZhY2UuXG5cdCovXG5cdGZ1bmN0aW9uIGluc3RhbmNlT2ZDdXN0U2VydmljZUN1c3RvbWVyKHZhbHVlKSB7XG5cdFx0aWYgKCEoXCJlbWFpbFwiIGluIHZhbHVlKSB8fCB2YWx1ZVtcImVtYWlsXCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRpZiAoIShcImlkXCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wiaWRcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdGZ1bmN0aW9uIEN1c3RTZXJ2aWNlQ3VzdG9tZXJGcm9tSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIEN1c3RTZXJ2aWNlQ3VzdG9tZXJGcm9tSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBDdXN0U2VydmljZUN1c3RvbWVyRnJvbUpTT05UeXBlZChqc29uLCBpZ25vcmVEaXNjcmltaW5hdG9yKSB7XG5cdFx0aWYgKGpzb24gPT0gbnVsbCkgcmV0dXJuIGpzb247XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwiZW1haWxcIjoganNvbltcImVtYWlsXCJdLFxuXHRcdFx0XCJpZFwiOiBqc29uW1wiaWRcIl1cblx0XHR9O1xuXHR9XG5cdGZ1bmN0aW9uIEN1c3RTZXJ2aWNlQ3VzdG9tZXJUb0pTT04oanNvbikge1xuXHRcdHJldHVybiBDdXN0U2VydmljZUN1c3RvbWVyVG9KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIEN1c3RTZXJ2aWNlQ3VzdG9tZXJUb0pTT05UeXBlZCh2YWx1ZSwgaWdub3JlRGlzY3JpbWluYXRvciA9IGZhbHNlKSB7XG5cdFx0aWYgKHZhbHVlID09IG51bGwpIHJldHVybiB2YWx1ZTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0XCJlbWFpbFwiOiB2YWx1ZVtcImVtYWlsXCJdLFxuXHRcdFx0XCJpZFwiOiB2YWx1ZVtcImlkXCJdXG5cdFx0fTtcblx0fVxufSkgfSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIC4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvQ3JlYXRlQ29udmVyc2F0aW9uUmVzcG9uc2UuanNcbnZhciByZXF1aXJlX0NyZWF0ZUNvbnZlcnNhdGlvblJlc3BvbnNlID0gLyogQF9fUFVSRV9fICovIF9fY29tbW9uSlMoeyBcIi4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvQ3JlYXRlQ29udmVyc2F0aW9uUmVzcG9uc2UuanNcIjogKChleHBvcnRzKSA9PiB7XG5cdC8qKlxuXHQqIENvbW1lcmNlXG5cdCogTm8gZGVzY3JpcHRpb24gcHJvdmlkZWQgKGdlbmVyYXRlZCBieSBPcGVuYXBpIEdlbmVyYXRvciBodHRwczovL2dpdGh1Yi5jb20vb3BlbmFwaXRvb2xzL29wZW5hcGktZ2VuZXJhdG9yKVxuXHQqXG5cdCogVGhlIHZlcnNpb24gb2YgdGhlIE9wZW5BUEkgZG9jdW1lbnQ6IDEuMS4wXG5cdCpcblx0KlxuXHQqIE5PVEU6IFRoaXMgY2xhc3MgaXMgYXV0byBnZW5lcmF0ZWQgYnkgT3BlbkFQSSBHZW5lcmF0b3IgKGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaCkuXG5cdCogaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoXG5cdCogRG8gbm90IGVkaXQgdGhlIGNsYXNzIG1hbnVhbGx5LlxuXHQqL1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5cdGV4cG9ydHMuaW5zdGFuY2VPZkNyZWF0ZUNvbnZlcnNhdGlvblJlc3BvbnNlID0gaW5zdGFuY2VPZkNyZWF0ZUNvbnZlcnNhdGlvblJlc3BvbnNlO1xuXHRleHBvcnRzLkNyZWF0ZUNvbnZlcnNhdGlvblJlc3BvbnNlRnJvbUpTT04gPSBDcmVhdGVDb252ZXJzYXRpb25SZXNwb25zZUZyb21KU09OO1xuXHRleHBvcnRzLkNyZWF0ZUNvbnZlcnNhdGlvblJlc3BvbnNlRnJvbUpTT05UeXBlZCA9IENyZWF0ZUNvbnZlcnNhdGlvblJlc3BvbnNlRnJvbUpTT05UeXBlZDtcblx0ZXhwb3J0cy5DcmVhdGVDb252ZXJzYXRpb25SZXNwb25zZVRvSlNPTiA9IENyZWF0ZUNvbnZlcnNhdGlvblJlc3BvbnNlVG9KU09OO1xuXHRleHBvcnRzLkNyZWF0ZUNvbnZlcnNhdGlvblJlc3BvbnNlVG9KU09OVHlwZWQgPSBDcmVhdGVDb252ZXJzYXRpb25SZXNwb25zZVRvSlNPTlR5cGVkO1xuXHRjb25zdCBDdXN0U2VydmljZUNvbnZlcnNhdGlvbl8xID0gcmVxdWlyZV9DdXN0U2VydmljZUNvbnZlcnNhdGlvbigpO1xuXHRjb25zdCBDdXN0U2VydmljZUN1c3RvbWVyXzEgPSByZXF1aXJlX0N1c3RTZXJ2aWNlQ3VzdG9tZXIoKTtcblx0LyoqXG5cdCogQ2hlY2sgaWYgYSBnaXZlbiBvYmplY3QgaW1wbGVtZW50cyB0aGUgQ3JlYXRlQ29udmVyc2F0aW9uUmVzcG9uc2UgaW50ZXJmYWNlLlxuXHQqL1xuXHRmdW5jdGlvbiBpbnN0YW5jZU9mQ3JlYXRlQ29udmVyc2F0aW9uUmVzcG9uc2UodmFsdWUpIHtcblx0XHRpZiAoIShcImNvbnZlcnNhdGlvblwiIGluIHZhbHVlKSB8fCB2YWx1ZVtcImNvbnZlcnNhdGlvblwiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0aWYgKCEoXCJjdXN0b21lclwiIGluIHZhbHVlKSB8fCB2YWx1ZVtcImN1c3RvbWVyXCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHRmdW5jdGlvbiBDcmVhdGVDb252ZXJzYXRpb25SZXNwb25zZUZyb21KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gQ3JlYXRlQ29udmVyc2F0aW9uUmVzcG9uc2VGcm9tSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBDcmVhdGVDb252ZXJzYXRpb25SZXNwb25zZUZyb21KU09OVHlwZWQoanNvbiwgaWdub3JlRGlzY3JpbWluYXRvcikge1xuXHRcdGlmIChqc29uID09IG51bGwpIHJldHVybiBqc29uO1xuXHRcdHJldHVybiB7XG5cdFx0XHRcImNvbnZlcnNhdGlvblwiOiAoMCwgQ3VzdFNlcnZpY2VDb252ZXJzYXRpb25fMS5DdXN0U2VydmljZUNvbnZlcnNhdGlvbkZyb21KU09OKShqc29uW1wiY29udmVyc2F0aW9uXCJdKSxcblx0XHRcdFwiY3VzdG9tZXJcIjogKDAsIEN1c3RTZXJ2aWNlQ3VzdG9tZXJfMS5DdXN0U2VydmljZUN1c3RvbWVyRnJvbUpTT04pKGpzb25bXCJjdXN0b21lclwiXSlcblx0XHR9O1xuXHR9XG5cdGZ1bmN0aW9uIENyZWF0ZUNvbnZlcnNhdGlvblJlc3BvbnNlVG9KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gQ3JlYXRlQ29udmVyc2F0aW9uUmVzcG9uc2VUb0pTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gQ3JlYXRlQ29udmVyc2F0aW9uUmVzcG9uc2VUb0pTT05UeXBlZCh2YWx1ZSwgaWdub3JlRGlzY3JpbWluYXRvciA9IGZhbHNlKSB7XG5cdFx0aWYgKHZhbHVlID09IG51bGwpIHJldHVybiB2YWx1ZTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0XCJjb252ZXJzYXRpb25cIjogKDAsIEN1c3RTZXJ2aWNlQ29udmVyc2F0aW9uXzEuQ3VzdFNlcnZpY2VDb252ZXJzYXRpb25Ub0pTT04pKHZhbHVlW1wiY29udmVyc2F0aW9uXCJdKSxcblx0XHRcdFwiY3VzdG9tZXJcIjogKDAsIEN1c3RTZXJ2aWNlQ3VzdG9tZXJfMS5DdXN0U2VydmljZUN1c3RvbWVyVG9KU09OKSh2YWx1ZVtcImN1c3RvbWVyXCJdKVxuXHRcdH07XG5cdH1cbn0pIH0pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiAuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL0N1c3RTZXJ2aWNlQXR0YWNobWVudC5qc1xudmFyIHJlcXVpcmVfQ3VzdFNlcnZpY2VBdHRhY2htZW50ID0gLyogQF9fUFVSRV9fICovIF9fY29tbW9uSlMoeyBcIi4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvQ3VzdFNlcnZpY2VBdHRhY2htZW50LmpzXCI6ICgoZXhwb3J0cykgPT4ge1xuXHQvKipcblx0KiBDb21tZXJjZVxuXHQqIE5vIGRlc2NyaXB0aW9uIHByb3ZpZGVkIChnZW5lcmF0ZWQgYnkgT3BlbmFwaSBHZW5lcmF0b3IgaHR0cHM6Ly9naXRodWIuY29tL29wZW5hcGl0b29scy9vcGVuYXBpLWdlbmVyYXRvcilcblx0KlxuXHQqIFRoZSB2ZXJzaW9uIG9mIHRoZSBPcGVuQVBJIGRvY3VtZW50OiAxLjEuMFxuXHQqXG5cdCpcblx0KiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IE9wZW5BUEkgR2VuZXJhdG9yIChodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2gpLlxuXHQqIGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaFxuXHQqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cblx0Ki9cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuXHRleHBvcnRzLmluc3RhbmNlT2ZDdXN0U2VydmljZUF0dGFjaG1lbnQgPSBpbnN0YW5jZU9mQ3VzdFNlcnZpY2VBdHRhY2htZW50O1xuXHRleHBvcnRzLkN1c3RTZXJ2aWNlQXR0YWNobWVudEZyb21KU09OID0gQ3VzdFNlcnZpY2VBdHRhY2htZW50RnJvbUpTT047XG5cdGV4cG9ydHMuQ3VzdFNlcnZpY2VBdHRhY2htZW50RnJvbUpTT05UeXBlZCA9IEN1c3RTZXJ2aWNlQXR0YWNobWVudEZyb21KU09OVHlwZWQ7XG5cdGV4cG9ydHMuQ3VzdFNlcnZpY2VBdHRhY2htZW50VG9KU09OID0gQ3VzdFNlcnZpY2VBdHRhY2htZW50VG9KU09OO1xuXHRleHBvcnRzLkN1c3RTZXJ2aWNlQXR0YWNobWVudFRvSlNPTlR5cGVkID0gQ3VzdFNlcnZpY2VBdHRhY2htZW50VG9KU09OVHlwZWQ7XG5cdC8qKlxuXHQqIENoZWNrIGlmIGEgZ2l2ZW4gb2JqZWN0IGltcGxlbWVudHMgdGhlIEN1c3RTZXJ2aWNlQXR0YWNobWVudCBpbnRlcmZhY2UuXG5cdCovXG5cdGZ1bmN0aW9uIGluc3RhbmNlT2ZDdXN0U2VydmljZUF0dGFjaG1lbnQodmFsdWUpIHtcblx0XHRpZiAoIShcImNvbnRlbnRfbGVuZ3RoXCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wiY29udGVudF9sZW5ndGhcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdGlmICghKFwiY29udGVudF90eXBlXCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wiY29udGVudF90eXBlXCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRpZiAoIShcImlkXCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wiaWRcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdGlmICghKFwibmFtZVwiIGluIHZhbHVlKSB8fCB2YWx1ZVtcIm5hbWVcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdGZ1bmN0aW9uIEN1c3RTZXJ2aWNlQXR0YWNobWVudEZyb21KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gQ3VzdFNlcnZpY2VBdHRhY2htZW50RnJvbUpTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gQ3VzdFNlcnZpY2VBdHRhY2htZW50RnJvbUpTT05UeXBlZChqc29uLCBpZ25vcmVEaXNjcmltaW5hdG9yKSB7XG5cdFx0aWYgKGpzb24gPT0gbnVsbCkgcmV0dXJuIGpzb247XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwiY29udGVudF9sZW5ndGhcIjoganNvbltcImNvbnRlbnRfbGVuZ3RoXCJdLFxuXHRcdFx0XCJjb250ZW50X3R5cGVcIjoganNvbltcImNvbnRlbnRfdHlwZVwiXSxcblx0XHRcdFwiaWRcIjoganNvbltcImlkXCJdLFxuXHRcdFx0XCJuYW1lXCI6IGpzb25bXCJuYW1lXCJdLFxuXHRcdFx0XCJ1cmxcIjoganNvbltcInVybFwiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcInVybFwiXVxuXHRcdH07XG5cdH1cblx0ZnVuY3Rpb24gQ3VzdFNlcnZpY2VBdHRhY2htZW50VG9KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gQ3VzdFNlcnZpY2VBdHRhY2htZW50VG9KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIEN1c3RTZXJ2aWNlQXR0YWNobWVudFRvSlNPTlR5cGVkKHZhbHVlLCBpZ25vcmVEaXNjcmltaW5hdG9yID0gZmFsc2UpIHtcblx0XHRpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIHZhbHVlO1xuXHRcdHJldHVybiB7XG5cdFx0XHRcImNvbnRlbnRfbGVuZ3RoXCI6IHZhbHVlW1wiY29udGVudF9sZW5ndGhcIl0sXG5cdFx0XHRcImNvbnRlbnRfdHlwZVwiOiB2YWx1ZVtcImNvbnRlbnRfdHlwZVwiXSxcblx0XHRcdFwiaWRcIjogdmFsdWVbXCJpZFwiXSxcblx0XHRcdFwibmFtZVwiOiB2YWx1ZVtcIm5hbWVcIl0sXG5cdFx0XHRcInVybFwiOiB2YWx1ZVtcInVybFwiXVxuXHRcdH07XG5cdH1cbn0pIH0pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiAuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL0N1c3RTZXJ2aWNlTWVzc2FnZS5qc1xudmFyIHJlcXVpcmVfQ3VzdFNlcnZpY2VNZXNzYWdlID0gLyogQF9fUFVSRV9fICovIF9fY29tbW9uSlMoeyBcIi4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvQ3VzdFNlcnZpY2VNZXNzYWdlLmpzXCI6ICgoZXhwb3J0cykgPT4ge1xuXHQvKipcblx0KiBDb21tZXJjZVxuXHQqIE5vIGRlc2NyaXB0aW9uIHByb3ZpZGVkIChnZW5lcmF0ZWQgYnkgT3BlbmFwaSBHZW5lcmF0b3IgaHR0cHM6Ly9naXRodWIuY29tL29wZW5hcGl0b29scy9vcGVuYXBpLWdlbmVyYXRvcilcblx0KlxuXHQqIFRoZSB2ZXJzaW9uIG9mIHRoZSBPcGVuQVBJIGRvY3VtZW50OiAxLjEuMFxuXHQqXG5cdCpcblx0KiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IE9wZW5BUEkgR2VuZXJhdG9yIChodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2gpLlxuXHQqIGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaFxuXHQqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cblx0Ki9cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuXHRleHBvcnRzLmluc3RhbmNlT2ZDdXN0U2VydmljZU1lc3NhZ2UgPSBpbnN0YW5jZU9mQ3VzdFNlcnZpY2VNZXNzYWdlO1xuXHRleHBvcnRzLkN1c3RTZXJ2aWNlTWVzc2FnZUZyb21KU09OID0gQ3VzdFNlcnZpY2VNZXNzYWdlRnJvbUpTT047XG5cdGV4cG9ydHMuQ3VzdFNlcnZpY2VNZXNzYWdlRnJvbUpTT05UeXBlZCA9IEN1c3RTZXJ2aWNlTWVzc2FnZUZyb21KU09OVHlwZWQ7XG5cdGV4cG9ydHMuQ3VzdFNlcnZpY2VNZXNzYWdlVG9KU09OID0gQ3VzdFNlcnZpY2VNZXNzYWdlVG9KU09OO1xuXHRleHBvcnRzLkN1c3RTZXJ2aWNlTWVzc2FnZVRvSlNPTlR5cGVkID0gQ3VzdFNlcnZpY2VNZXNzYWdlVG9KU09OVHlwZWQ7XG5cdGNvbnN0IEN1c3RTZXJ2aWNlQXR0YWNobWVudF8xID0gcmVxdWlyZV9DdXN0U2VydmljZUF0dGFjaG1lbnQoKTtcblx0LyoqXG5cdCogQ2hlY2sgaWYgYSBnaXZlbiBvYmplY3QgaW1wbGVtZW50cyB0aGUgQ3VzdFNlcnZpY2VNZXNzYWdlIGludGVyZmFjZS5cblx0Ki9cblx0ZnVuY3Rpb24gaW5zdGFuY2VPZkN1c3RTZXJ2aWNlTWVzc2FnZSh2YWx1ZSkge1xuXHRcdGlmICghKFwiYm9keVwiIGluIHZhbHVlKSB8fCB2YWx1ZVtcImJvZHlcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdGlmICghKFwiY3JlYXRlZF9hdFwiIGluIHZhbHVlKSB8fCB2YWx1ZVtcImNyZWF0ZWRfYXRcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdGlmICghKFwiY3VzdG9tZXJfaWRcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJjdXN0b21lcl9pZFwiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0aWYgKCEoXCJkaXJlY3Rpb25cIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJkaXJlY3Rpb25cIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdGlmICghKFwiaWRcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJpZFwiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0aWYgKCEoXCJpc19hZ2VudFwiIGluIHZhbHVlKSB8fCB2YWx1ZVtcImlzX2FnZW50XCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRpZiAoIShcImlzX2F1dG9tYXRpY19tZXNzYWdlXCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wiaXNfYXV0b21hdGljX21lc3NhZ2VcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdGZ1bmN0aW9uIEN1c3RTZXJ2aWNlTWVzc2FnZUZyb21KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gQ3VzdFNlcnZpY2VNZXNzYWdlRnJvbUpTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gQ3VzdFNlcnZpY2VNZXNzYWdlRnJvbUpTT05UeXBlZChqc29uLCBpZ25vcmVEaXNjcmltaW5hdG9yKSB7XG5cdFx0aWYgKGpzb24gPT0gbnVsbCkgcmV0dXJuIGpzb247XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwiYWdlbnRfaWRcIjoganNvbltcImFnZW50X2lkXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wiYWdlbnRfaWRcIl0sXG5cdFx0XHRcImFnZW50X25hbWVcIjoganNvbltcImFnZW50X25hbWVcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IGpzb25bXCJhZ2VudF9uYW1lXCJdLFxuXHRcdFx0XCJhdHRhY2htZW50c1wiOiBqc29uW1wiYXR0YWNobWVudHNcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IGpzb25bXCJhdHRhY2htZW50c1wiXS5tYXAoQ3VzdFNlcnZpY2VBdHRhY2htZW50XzEuQ3VzdFNlcnZpY2VBdHRhY2htZW50RnJvbUpTT04pLFxuXHRcdFx0XCJib2R5XCI6IGpzb25bXCJib2R5XCJdLFxuXHRcdFx0XCJjcmVhdGVkX2F0XCI6IG5ldyBEYXRlKGpzb25bXCJjcmVhdGVkX2F0XCJdKSxcblx0XHRcdFwiY3VzdG9tZXJfaWRcIjoganNvbltcImN1c3RvbWVyX2lkXCJdLFxuXHRcdFx0XCJkaXJlY3Rpb25cIjoganNvbltcImRpcmVjdGlvblwiXSxcblx0XHRcdFwiaWRcIjoganNvbltcImlkXCJdLFxuXHRcdFx0XCJpc19hZ2VudFwiOiBqc29uW1wiaXNfYWdlbnRcIl0sXG5cdFx0XHRcImlzX2F1dG9tYXRpY19tZXNzYWdlXCI6IGpzb25bXCJpc19hdXRvbWF0aWNfbWVzc2FnZVwiXSxcblx0XHRcdFwiaXNfZW1haWxcIjoganNvbltcImlzX2VtYWlsXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wiaXNfZW1haWxcIl1cblx0XHR9O1xuXHR9XG5cdGZ1bmN0aW9uIEN1c3RTZXJ2aWNlTWVzc2FnZVRvSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIEN1c3RTZXJ2aWNlTWVzc2FnZVRvSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBDdXN0U2VydmljZU1lc3NhZ2VUb0pTT05UeXBlZCh2YWx1ZSwgaWdub3JlRGlzY3JpbWluYXRvciA9IGZhbHNlKSB7XG5cdFx0aWYgKHZhbHVlID09IG51bGwpIHJldHVybiB2YWx1ZTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0XCJhZ2VudF9pZFwiOiB2YWx1ZVtcImFnZW50X2lkXCJdLFxuXHRcdFx0XCJhZ2VudF9uYW1lXCI6IHZhbHVlW1wiYWdlbnRfbmFtZVwiXSxcblx0XHRcdFwiYXR0YWNobWVudHNcIjogdmFsdWVbXCJhdHRhY2htZW50c1wiXSA9PSBudWxsID8gdm9pZCAwIDogdmFsdWVbXCJhdHRhY2htZW50c1wiXS5tYXAoQ3VzdFNlcnZpY2VBdHRhY2htZW50XzEuQ3VzdFNlcnZpY2VBdHRhY2htZW50VG9KU09OKSxcblx0XHRcdFwiYm9keVwiOiB2YWx1ZVtcImJvZHlcIl0sXG5cdFx0XHRcImNyZWF0ZWRfYXRcIjogdmFsdWVbXCJjcmVhdGVkX2F0XCJdLnRvSVNPU3RyaW5nKCksXG5cdFx0XHRcImN1c3RvbWVyX2lkXCI6IHZhbHVlW1wiY3VzdG9tZXJfaWRcIl0sXG5cdFx0XHRcImRpcmVjdGlvblwiOiB2YWx1ZVtcImRpcmVjdGlvblwiXSxcblx0XHRcdFwiaWRcIjogdmFsdWVbXCJpZFwiXSxcblx0XHRcdFwiaXNfYWdlbnRcIjogdmFsdWVbXCJpc19hZ2VudFwiXSxcblx0XHRcdFwiaXNfYXV0b21hdGljX21lc3NhZ2VcIjogdmFsdWVbXCJpc19hdXRvbWF0aWNfbWVzc2FnZVwiXSxcblx0XHRcdFwiaXNfZW1haWxcIjogdmFsdWVbXCJpc19lbWFpbFwiXVxuXHRcdH07XG5cdH1cbn0pIH0pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiAuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL0N1c3RTZXJ2aWNlQ29udmVyc2F0aW9uTWVzc2FnZXMuanNcbnZhciByZXF1aXJlX0N1c3RTZXJ2aWNlQ29udmVyc2F0aW9uTWVzc2FnZXMgPSAvKiBAX19QVVJFX18gKi8gX19jb21tb25KUyh7IFwiLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9DdXN0U2VydmljZUNvbnZlcnNhdGlvbk1lc3NhZ2VzLmpzXCI6ICgoZXhwb3J0cykgPT4ge1xuXHQvKipcblx0KiBDb21tZXJjZVxuXHQqIE5vIGRlc2NyaXB0aW9uIHByb3ZpZGVkIChnZW5lcmF0ZWQgYnkgT3BlbmFwaSBHZW5lcmF0b3IgaHR0cHM6Ly9naXRodWIuY29tL29wZW5hcGl0b29scy9vcGVuYXBpLWdlbmVyYXRvcilcblx0KlxuXHQqIFRoZSB2ZXJzaW9uIG9mIHRoZSBPcGVuQVBJIGRvY3VtZW50OiAxLjEuMFxuXHQqXG5cdCpcblx0KiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IE9wZW5BUEkgR2VuZXJhdG9yIChodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2gpLlxuXHQqIGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaFxuXHQqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cblx0Ki9cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuXHRleHBvcnRzLmluc3RhbmNlT2ZDdXN0U2VydmljZUNvbnZlcnNhdGlvbk1lc3NhZ2VzID0gaW5zdGFuY2VPZkN1c3RTZXJ2aWNlQ29udmVyc2F0aW9uTWVzc2FnZXM7XG5cdGV4cG9ydHMuQ3VzdFNlcnZpY2VDb252ZXJzYXRpb25NZXNzYWdlc0Zyb21KU09OID0gQ3VzdFNlcnZpY2VDb252ZXJzYXRpb25NZXNzYWdlc0Zyb21KU09OO1xuXHRleHBvcnRzLkN1c3RTZXJ2aWNlQ29udmVyc2F0aW9uTWVzc2FnZXNGcm9tSlNPTlR5cGVkID0gQ3VzdFNlcnZpY2VDb252ZXJzYXRpb25NZXNzYWdlc0Zyb21KU09OVHlwZWQ7XG5cdGV4cG9ydHMuQ3VzdFNlcnZpY2VDb252ZXJzYXRpb25NZXNzYWdlc1RvSlNPTiA9IEN1c3RTZXJ2aWNlQ29udmVyc2F0aW9uTWVzc2FnZXNUb0pTT047XG5cdGV4cG9ydHMuQ3VzdFNlcnZpY2VDb252ZXJzYXRpb25NZXNzYWdlc1RvSlNPTlR5cGVkID0gQ3VzdFNlcnZpY2VDb252ZXJzYXRpb25NZXNzYWdlc1RvSlNPTlR5cGVkO1xuXHRjb25zdCBDdXN0U2VydmljZU1lc3NhZ2VfMSQxID0gcmVxdWlyZV9DdXN0U2VydmljZU1lc3NhZ2UoKTtcblx0Y29uc3QgQ29udmVyc2F0aW9uU3RhdHVzXzEgPSByZXF1aXJlX0NvbnZlcnNhdGlvblN0YXR1cygpO1xuXHQvKipcblx0KiBDaGVjayBpZiBhIGdpdmVuIG9iamVjdCBpbXBsZW1lbnRzIHRoZSBDdXN0U2VydmljZUNvbnZlcnNhdGlvbk1lc3NhZ2VzIGludGVyZmFjZS5cblx0Ki9cblx0ZnVuY3Rpb24gaW5zdGFuY2VPZkN1c3RTZXJ2aWNlQ29udmVyc2F0aW9uTWVzc2FnZXModmFsdWUpIHtcblx0XHRpZiAoIShcImRhdGFcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJkYXRhXCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHRmdW5jdGlvbiBDdXN0U2VydmljZUNvbnZlcnNhdGlvbk1lc3NhZ2VzRnJvbUpTT04oanNvbikge1xuXHRcdHJldHVybiBDdXN0U2VydmljZUNvbnZlcnNhdGlvbk1lc3NhZ2VzRnJvbUpTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gQ3VzdFNlcnZpY2VDb252ZXJzYXRpb25NZXNzYWdlc0Zyb21KU09OVHlwZWQoanNvbiwgaWdub3JlRGlzY3JpbWluYXRvcikge1xuXHRcdGlmIChqc29uID09IG51bGwpIHJldHVybiBqc29uO1xuXHRcdHJldHVybiB7XG5cdFx0XHRcImNvbnZlcnNhdGlvbl9zdGF0dXNcIjoganNvbltcImNvbnZlcnNhdGlvbl9zdGF0dXNcIl0gPT0gbnVsbCA/IHZvaWQgMCA6ICgwLCBDb252ZXJzYXRpb25TdGF0dXNfMS5Db252ZXJzYXRpb25TdGF0dXNGcm9tSlNPTikoanNvbltcImNvbnZlcnNhdGlvbl9zdGF0dXNcIl0pLFxuXHRcdFx0XCJkYXRhXCI6IGpzb25bXCJkYXRhXCJdLm1hcChDdXN0U2VydmljZU1lc3NhZ2VfMSQxLkN1c3RTZXJ2aWNlTWVzc2FnZUZyb21KU09OKSxcblx0XHRcdFwibmV4dF9wYWdlXCI6IGpzb25bXCJuZXh0X3BhZ2VcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IGpzb25bXCJuZXh0X3BhZ2VcIl0sXG5cdFx0XHRcInByZXZpb3VzX3BhZ2VcIjoganNvbltcInByZXZpb3VzX3BhZ2VcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IGpzb25bXCJwcmV2aW91c19wYWdlXCJdXG5cdFx0fTtcblx0fVxuXHRmdW5jdGlvbiBDdXN0U2VydmljZUNvbnZlcnNhdGlvbk1lc3NhZ2VzVG9KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gQ3VzdFNlcnZpY2VDb252ZXJzYXRpb25NZXNzYWdlc1RvSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBDdXN0U2VydmljZUNvbnZlcnNhdGlvbk1lc3NhZ2VzVG9KU09OVHlwZWQodmFsdWUsIGlnbm9yZURpc2NyaW1pbmF0b3IgPSBmYWxzZSkge1xuXHRcdGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gdmFsdWU7XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwiY29udmVyc2F0aW9uX3N0YXR1c1wiOiAoMCwgQ29udmVyc2F0aW9uU3RhdHVzXzEuQ29udmVyc2F0aW9uU3RhdHVzVG9KU09OKSh2YWx1ZVtcImNvbnZlcnNhdGlvbl9zdGF0dXNcIl0pLFxuXHRcdFx0XCJkYXRhXCI6IHZhbHVlW1wiZGF0YVwiXS5tYXAoQ3VzdFNlcnZpY2VNZXNzYWdlXzEkMS5DdXN0U2VydmljZU1lc3NhZ2VUb0pTT04pLFxuXHRcdFx0XCJuZXh0X3BhZ2VcIjogdmFsdWVbXCJuZXh0X3BhZ2VcIl0sXG5cdFx0XHRcInByZXZpb3VzX3BhZ2VcIjogdmFsdWVbXCJwcmV2aW91c19wYWdlXCJdXG5cdFx0fTtcblx0fVxufSkgfSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIC4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvTWFudWFsRm9ybS5qc1xudmFyIHJlcXVpcmVfTWFudWFsRm9ybSA9IC8qIEBfX1BVUkVfXyAqLyBfX2NvbW1vbkpTKHsgXCIuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL01hbnVhbEZvcm0uanNcIjogKChleHBvcnRzKSA9PiB7XG5cdC8qKlxuXHQqIENvbW1lcmNlXG5cdCogTm8gZGVzY3JpcHRpb24gcHJvdmlkZWQgKGdlbmVyYXRlZCBieSBPcGVuYXBpIEdlbmVyYXRvciBodHRwczovL2dpdGh1Yi5jb20vb3BlbmFwaXRvb2xzL29wZW5hcGktZ2VuZXJhdG9yKVxuXHQqXG5cdCogVGhlIHZlcnNpb24gb2YgdGhlIE9wZW5BUEkgZG9jdW1lbnQ6IDEuMS4wXG5cdCpcblx0KlxuXHQqIE5PVEU6IFRoaXMgY2xhc3MgaXMgYXV0byBnZW5lcmF0ZWQgYnkgT3BlbkFQSSBHZW5lcmF0b3IgKGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaCkuXG5cdCogaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoXG5cdCogRG8gbm90IGVkaXQgdGhlIGNsYXNzIG1hbnVhbGx5LlxuXHQqL1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5cdGV4cG9ydHMuaW5zdGFuY2VPZk1hbnVhbEZvcm0gPSBpbnN0YW5jZU9mTWFudWFsRm9ybTtcblx0ZXhwb3J0cy5NYW51YWxGb3JtRnJvbUpTT04gPSBNYW51YWxGb3JtRnJvbUpTT047XG5cdGV4cG9ydHMuTWFudWFsRm9ybUZyb21KU09OVHlwZWQgPSBNYW51YWxGb3JtRnJvbUpTT05UeXBlZDtcblx0ZXhwb3J0cy5NYW51YWxGb3JtVG9KU09OID0gTWFudWFsRm9ybVRvSlNPTjtcblx0ZXhwb3J0cy5NYW51YWxGb3JtVG9KU09OVHlwZWQgPSBNYW51YWxGb3JtVG9KU09OVHlwZWQ7XG5cdGNvbnN0IEZvcm1UeXBlXzEkMSA9IHJlcXVpcmVfRm9ybVR5cGUoKTtcblx0LyoqXG5cdCogQ2hlY2sgaWYgYSBnaXZlbiBvYmplY3QgaW1wbGVtZW50cyB0aGUgTWFudWFsRm9ybSBpbnRlcmZhY2UuXG5cdCovXG5cdGZ1bmN0aW9uIGluc3RhbmNlT2ZNYW51YWxGb3JtKHZhbHVlKSB7XG5cdFx0aWYgKCEoXCJmb3JtX3R5cGVcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJmb3JtX3R5cGVcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdGZ1bmN0aW9uIE1hbnVhbEZvcm1Gcm9tSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIE1hbnVhbEZvcm1Gcm9tSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBNYW51YWxGb3JtRnJvbUpTT05UeXBlZChqc29uLCBpZ25vcmVEaXNjcmltaW5hdG9yKSB7XG5cdFx0aWYgKGpzb24gPT0gbnVsbCkgcmV0dXJuIGpzb247XG5cdFx0cmV0dXJuIHsgXCJmb3JtX3R5cGVcIjogKDAsIEZvcm1UeXBlXzEkMS5Gb3JtVHlwZUZyb21KU09OKShqc29uW1wiZm9ybV90eXBlXCJdKSB9O1xuXHR9XG5cdGZ1bmN0aW9uIE1hbnVhbEZvcm1Ub0pTT04oanNvbikge1xuXHRcdHJldHVybiBNYW51YWxGb3JtVG9KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIE1hbnVhbEZvcm1Ub0pTT05UeXBlZCh2YWx1ZSwgaWdub3JlRGlzY3JpbWluYXRvciA9IGZhbHNlKSB7XG5cdFx0aWYgKHZhbHVlID09IG51bGwpIHJldHVybiB2YWx1ZTtcblx0XHRyZXR1cm4geyBcImZvcm1fdHlwZVwiOiAoMCwgRm9ybVR5cGVfMSQxLkZvcm1UeXBlVG9KU09OKSh2YWx1ZVtcImZvcm1fdHlwZVwiXSkgfTtcblx0fVxufSkgfSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIC4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvRm9ybVJlc3BvbnNlQXR0cmlidXRlc0Zvcm1DYXRlZ29yeS5qc1xudmFyIHJlcXVpcmVfRm9ybVJlc3BvbnNlQXR0cmlidXRlc0Zvcm1DYXRlZ29yeSA9IC8qIEBfX1BVUkVfXyAqLyBfX2NvbW1vbkpTKHsgXCIuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL0Zvcm1SZXNwb25zZUF0dHJpYnV0ZXNGb3JtQ2F0ZWdvcnkuanNcIjogKChleHBvcnRzKSA9PiB7XG5cdC8qKlxuXHQqIENvbW1lcmNlXG5cdCogTm8gZGVzY3JpcHRpb24gcHJvdmlkZWQgKGdlbmVyYXRlZCBieSBPcGVuYXBpIEdlbmVyYXRvciBodHRwczovL2dpdGh1Yi5jb20vb3BlbmFwaXRvb2xzL29wZW5hcGktZ2VuZXJhdG9yKVxuXHQqXG5cdCogVGhlIHZlcnNpb24gb2YgdGhlIE9wZW5BUEkgZG9jdW1lbnQ6IDEuMS4wXG5cdCpcblx0KlxuXHQqIE5PVEU6IFRoaXMgY2xhc3MgaXMgYXV0byBnZW5lcmF0ZWQgYnkgT3BlbkFQSSBHZW5lcmF0b3IgKGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaCkuXG5cdCogaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoXG5cdCogRG8gbm90IGVkaXQgdGhlIGNsYXNzIG1hbnVhbGx5LlxuXHQqL1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5cdGV4cG9ydHMuRm9ybVJlc3BvbnNlQXR0cmlidXRlc0Zvcm1DYXRlZ29yeUZyb21KU09OID0gRm9ybVJlc3BvbnNlQXR0cmlidXRlc0Zvcm1DYXRlZ29yeUZyb21KU09OO1xuXHRleHBvcnRzLkZvcm1SZXNwb25zZUF0dHJpYnV0ZXNGb3JtQ2F0ZWdvcnlGcm9tSlNPTlR5cGVkID0gRm9ybVJlc3BvbnNlQXR0cmlidXRlc0Zvcm1DYXRlZ29yeUZyb21KU09OVHlwZWQ7XG5cdGV4cG9ydHMuRm9ybVJlc3BvbnNlQXR0cmlidXRlc0Zvcm1DYXRlZ29yeVRvSlNPTiA9IEZvcm1SZXNwb25zZUF0dHJpYnV0ZXNGb3JtQ2F0ZWdvcnlUb0pTT047XG5cdGV4cG9ydHMuRm9ybVJlc3BvbnNlQXR0cmlidXRlc0Zvcm1DYXRlZ29yeVRvSlNPTlR5cGVkID0gRm9ybVJlc3BvbnNlQXR0cmlidXRlc0Zvcm1DYXRlZ29yeVRvSlNPTlR5cGVkO1xuXHRjb25zdCBBdXRvRm9ybV8xID0gcmVxdWlyZV9BdXRvRm9ybSgpO1xuXHRjb25zdCBNYW51YWxGb3JtXzEgPSByZXF1aXJlX01hbnVhbEZvcm0oKTtcblx0ZnVuY3Rpb24gRm9ybVJlc3BvbnNlQXR0cmlidXRlc0Zvcm1DYXRlZ29yeUZyb21KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gRm9ybVJlc3BvbnNlQXR0cmlidXRlc0Zvcm1DYXRlZ29yeUZyb21KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIEZvcm1SZXNwb25zZUF0dHJpYnV0ZXNGb3JtQ2F0ZWdvcnlGcm9tSlNPTlR5cGVkKGpzb24sIGlnbm9yZURpc2NyaW1pbmF0b3IpIHtcblx0XHRpZiAoanNvbiA9PSBudWxsKSByZXR1cm4ganNvbjtcblx0XHRpZiAoKDAsIEF1dG9Gb3JtXzEuaW5zdGFuY2VPZkF1dG9Gb3JtKShqc29uKSkgcmV0dXJuICgwLCBBdXRvRm9ybV8xLkF1dG9Gb3JtRnJvbUpTT05UeXBlZCkoanNvbiwgdHJ1ZSk7XG5cdFx0aWYgKCgwLCBNYW51YWxGb3JtXzEuaW5zdGFuY2VPZk1hbnVhbEZvcm0pKGpzb24pKSByZXR1cm4gKDAsIE1hbnVhbEZvcm1fMS5NYW51YWxGb3JtRnJvbUpTT05UeXBlZCkoanNvbiwgdHJ1ZSk7XG5cdFx0cmV0dXJuIHt9O1xuXHR9XG5cdGZ1bmN0aW9uIEZvcm1SZXNwb25zZUF0dHJpYnV0ZXNGb3JtQ2F0ZWdvcnlUb0pTT04oanNvbikge1xuXHRcdHJldHVybiBGb3JtUmVzcG9uc2VBdHRyaWJ1dGVzRm9ybUNhdGVnb3J5VG9KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIEZvcm1SZXNwb25zZUF0dHJpYnV0ZXNGb3JtQ2F0ZWdvcnlUb0pTT05UeXBlZCh2YWx1ZSwgaWdub3JlRGlzY3JpbWluYXRvciA9IGZhbHNlKSB7XG5cdFx0aWYgKHZhbHVlID09IG51bGwpIHJldHVybiB2YWx1ZTtcblx0XHRpZiAoKDAsIEF1dG9Gb3JtXzEuaW5zdGFuY2VPZkF1dG9Gb3JtKSh2YWx1ZSkpIHJldHVybiAoMCwgQXV0b0Zvcm1fMS5BdXRvRm9ybVRvSlNPTikodmFsdWUpO1xuXHRcdGlmICgoMCwgTWFudWFsRm9ybV8xLmluc3RhbmNlT2ZNYW51YWxGb3JtKSh2YWx1ZSkpIHJldHVybiAoMCwgTWFudWFsRm9ybV8xLk1hbnVhbEZvcm1Ub0pTT04pKHZhbHVlKTtcblx0XHRyZXR1cm4ge307XG5cdH1cbn0pIH0pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiAuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL0Zvcm1SZXNwb25zZUF0dHJpYnV0ZXMuanNcbnZhciByZXF1aXJlX0Zvcm1SZXNwb25zZUF0dHJpYnV0ZXMgPSAvKiBAX19QVVJFX18gKi8gX19jb21tb25KUyh7IFwiLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9Gb3JtUmVzcG9uc2VBdHRyaWJ1dGVzLmpzXCI6ICgoZXhwb3J0cykgPT4ge1xuXHQvKipcblx0KiBDb21tZXJjZVxuXHQqIE5vIGRlc2NyaXB0aW9uIHByb3ZpZGVkIChnZW5lcmF0ZWQgYnkgT3BlbmFwaSBHZW5lcmF0b3IgaHR0cHM6Ly9naXRodWIuY29tL29wZW5hcGl0b29scy9vcGVuYXBpLWdlbmVyYXRvcilcblx0KlxuXHQqIFRoZSB2ZXJzaW9uIG9mIHRoZSBPcGVuQVBJIGRvY3VtZW50OiAxLjEuMFxuXHQqXG5cdCpcblx0KiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IE9wZW5BUEkgR2VuZXJhdG9yIChodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2gpLlxuXHQqIGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaFxuXHQqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cblx0Ki9cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuXHRleHBvcnRzLmluc3RhbmNlT2ZGb3JtUmVzcG9uc2VBdHRyaWJ1dGVzID0gaW5zdGFuY2VPZkZvcm1SZXNwb25zZUF0dHJpYnV0ZXM7XG5cdGV4cG9ydHMuRm9ybVJlc3BvbnNlQXR0cmlidXRlc0Zyb21KU09OID0gRm9ybVJlc3BvbnNlQXR0cmlidXRlc0Zyb21KU09OO1xuXHRleHBvcnRzLkZvcm1SZXNwb25zZUF0dHJpYnV0ZXNGcm9tSlNPTlR5cGVkID0gRm9ybVJlc3BvbnNlQXR0cmlidXRlc0Zyb21KU09OVHlwZWQ7XG5cdGV4cG9ydHMuRm9ybVJlc3BvbnNlQXR0cmlidXRlc1RvSlNPTiA9IEZvcm1SZXNwb25zZUF0dHJpYnV0ZXNUb0pTT047XG5cdGV4cG9ydHMuRm9ybVJlc3BvbnNlQXR0cmlidXRlc1RvSlNPTlR5cGVkID0gRm9ybVJlc3BvbnNlQXR0cmlidXRlc1RvSlNPTlR5cGVkO1xuXHRjb25zdCBGb3JtUmVzcG9uc2VBdHRyaWJ1dGVzRm9ybUNhdGVnb3J5XzEgPSByZXF1aXJlX0Zvcm1SZXNwb25zZUF0dHJpYnV0ZXNGb3JtQ2F0ZWdvcnkoKTtcblx0LyoqXG5cdCogQ2hlY2sgaWYgYSBnaXZlbiBvYmplY3QgaW1wbGVtZW50cyB0aGUgRm9ybVJlc3BvbnNlQXR0cmlidXRlcyBpbnRlcmZhY2UuXG5cdCovXG5cdGZ1bmN0aW9uIGluc3RhbmNlT2ZGb3JtUmVzcG9uc2VBdHRyaWJ1dGVzKHZhbHVlKSB7XG5cdFx0aWYgKCEoXCJzY2hlbWFcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJzY2hlbWFcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdGZ1bmN0aW9uIEZvcm1SZXNwb25zZUF0dHJpYnV0ZXNGcm9tSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIEZvcm1SZXNwb25zZUF0dHJpYnV0ZXNGcm9tSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBGb3JtUmVzcG9uc2VBdHRyaWJ1dGVzRnJvbUpTT05UeXBlZChqc29uLCBpZ25vcmVEaXNjcmltaW5hdG9yKSB7XG5cdFx0aWYgKGpzb24gPT0gbnVsbCkgcmV0dXJuIGpzb247XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwiZm9ybV9jYXRlZ29yeVwiOiBqc29uW1wiZm9ybV9jYXRlZ29yeVwiXSA9PSBudWxsID8gdm9pZCAwIDogKDAsIEZvcm1SZXNwb25zZUF0dHJpYnV0ZXNGb3JtQ2F0ZWdvcnlfMS5Gb3JtUmVzcG9uc2VBdHRyaWJ1dGVzRm9ybUNhdGVnb3J5RnJvbUpTT04pKGpzb25bXCJmb3JtX2NhdGVnb3J5XCJdKSxcblx0XHRcdFwic2NoZW1hXCI6IGpzb25bXCJzY2hlbWFcIl1cblx0XHR9O1xuXHR9XG5cdGZ1bmN0aW9uIEZvcm1SZXNwb25zZUF0dHJpYnV0ZXNUb0pTT04oanNvbikge1xuXHRcdHJldHVybiBGb3JtUmVzcG9uc2VBdHRyaWJ1dGVzVG9KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIEZvcm1SZXNwb25zZUF0dHJpYnV0ZXNUb0pTT05UeXBlZCh2YWx1ZSwgaWdub3JlRGlzY3JpbWluYXRvciA9IGZhbHNlKSB7XG5cdFx0aWYgKHZhbHVlID09IG51bGwpIHJldHVybiB2YWx1ZTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0XCJmb3JtX2NhdGVnb3J5XCI6ICgwLCBGb3JtUmVzcG9uc2VBdHRyaWJ1dGVzRm9ybUNhdGVnb3J5XzEuRm9ybVJlc3BvbnNlQXR0cmlidXRlc0Zvcm1DYXRlZ29yeVRvSlNPTikodmFsdWVbXCJmb3JtX2NhdGVnb3J5XCJdKSxcblx0XHRcdFwic2NoZW1hXCI6IHZhbHVlW1wic2NoZW1hXCJdXG5cdFx0fTtcblx0fVxufSkgfSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIC4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvRm9ybVN1Ym1pdHRlZEF0dHJpYnV0ZXMuanNcbnZhciByZXF1aXJlX0Zvcm1TdWJtaXR0ZWRBdHRyaWJ1dGVzID0gLyogQF9fUFVSRV9fICovIF9fY29tbW9uSlMoeyBcIi4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvRm9ybVN1Ym1pdHRlZEF0dHJpYnV0ZXMuanNcIjogKChleHBvcnRzKSA9PiB7XG5cdC8qKlxuXHQqIENvbW1lcmNlXG5cdCogTm8gZGVzY3JpcHRpb24gcHJvdmlkZWQgKGdlbmVyYXRlZCBieSBPcGVuYXBpIEdlbmVyYXRvciBodHRwczovL2dpdGh1Yi5jb20vb3BlbmFwaXRvb2xzL29wZW5hcGktZ2VuZXJhdG9yKVxuXHQqXG5cdCogVGhlIHZlcnNpb24gb2YgdGhlIE9wZW5BUEkgZG9jdW1lbnQ6IDEuMS4wXG5cdCpcblx0KlxuXHQqIE5PVEU6IFRoaXMgY2xhc3MgaXMgYXV0byBnZW5lcmF0ZWQgYnkgT3BlbkFQSSBHZW5lcmF0b3IgKGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaCkuXG5cdCogaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoXG5cdCogRG8gbm90IGVkaXQgdGhlIGNsYXNzIG1hbnVhbGx5LlxuXHQqL1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5cdGV4cG9ydHMuaW5zdGFuY2VPZkZvcm1TdWJtaXR0ZWRBdHRyaWJ1dGVzID0gaW5zdGFuY2VPZkZvcm1TdWJtaXR0ZWRBdHRyaWJ1dGVzO1xuXHRleHBvcnRzLkZvcm1TdWJtaXR0ZWRBdHRyaWJ1dGVzRnJvbUpTT04gPSBGb3JtU3VibWl0dGVkQXR0cmlidXRlc0Zyb21KU09OO1xuXHRleHBvcnRzLkZvcm1TdWJtaXR0ZWRBdHRyaWJ1dGVzRnJvbUpTT05UeXBlZCA9IEZvcm1TdWJtaXR0ZWRBdHRyaWJ1dGVzRnJvbUpTT05UeXBlZDtcblx0ZXhwb3J0cy5Gb3JtU3VibWl0dGVkQXR0cmlidXRlc1RvSlNPTiA9IEZvcm1TdWJtaXR0ZWRBdHRyaWJ1dGVzVG9KU09OO1xuXHRleHBvcnRzLkZvcm1TdWJtaXR0ZWRBdHRyaWJ1dGVzVG9KU09OVHlwZWQgPSBGb3JtU3VibWl0dGVkQXR0cmlidXRlc1RvSlNPTlR5cGVkO1xuXHRjb25zdCBGb3JtVHlwZV8xID0gcmVxdWlyZV9Gb3JtVHlwZSgpO1xuXHQvKipcblx0KiBDaGVjayBpZiBhIGdpdmVuIG9iamVjdCBpbXBsZW1lbnRzIHRoZSBGb3JtU3VibWl0dGVkQXR0cmlidXRlcyBpbnRlcmZhY2UuXG5cdCovXG5cdGZ1bmN0aW9uIGluc3RhbmNlT2ZGb3JtU3VibWl0dGVkQXR0cmlidXRlcyh2YWx1ZSkge1xuXHRcdGlmICghKFwiZmlsbGVkX3NjaGVtYVwiIGluIHZhbHVlKSB8fCB2YWx1ZVtcImZpbGxlZF9zY2hlbWFcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdGlmICghKFwiZm9ybV9yZXNwb25zZV9pZFwiIGluIHZhbHVlKSB8fCB2YWx1ZVtcImZvcm1fcmVzcG9uc2VfaWRcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdGlmICghKFwiZm9ybV90eXBlXCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wiZm9ybV90eXBlXCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHRmdW5jdGlvbiBGb3JtU3VibWl0dGVkQXR0cmlidXRlc0Zyb21KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gRm9ybVN1Ym1pdHRlZEF0dHJpYnV0ZXNGcm9tSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBGb3JtU3VibWl0dGVkQXR0cmlidXRlc0Zyb21KU09OVHlwZWQoanNvbiwgaWdub3JlRGlzY3JpbWluYXRvcikge1xuXHRcdGlmIChqc29uID09IG51bGwpIHJldHVybiBqc29uO1xuXHRcdHJldHVybiB7XG5cdFx0XHRcImZpbGxlZF9zY2hlbWFcIjoganNvbltcImZpbGxlZF9zY2hlbWFcIl0sXG5cdFx0XHRcImZvcm1fcmVzcG9uc2VfaWRcIjoganNvbltcImZvcm1fcmVzcG9uc2VfaWRcIl0sXG5cdFx0XHRcImZvcm1fdHlwZVwiOiAoMCwgRm9ybVR5cGVfMS5Gb3JtVHlwZUZyb21KU09OKShqc29uW1wiZm9ybV90eXBlXCJdKVxuXHRcdH07XG5cdH1cblx0ZnVuY3Rpb24gRm9ybVN1Ym1pdHRlZEF0dHJpYnV0ZXNUb0pTT04oanNvbikge1xuXHRcdHJldHVybiBGb3JtU3VibWl0dGVkQXR0cmlidXRlc1RvSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBGb3JtU3VibWl0dGVkQXR0cmlidXRlc1RvSlNPTlR5cGVkKHZhbHVlLCBpZ25vcmVEaXNjcmltaW5hdG9yID0gZmFsc2UpIHtcblx0XHRpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIHZhbHVlO1xuXHRcdHJldHVybiB7XG5cdFx0XHRcImZpbGxlZF9zY2hlbWFcIjogdmFsdWVbXCJmaWxsZWRfc2NoZW1hXCJdLFxuXHRcdFx0XCJmb3JtX3Jlc3BvbnNlX2lkXCI6IHZhbHVlW1wiZm9ybV9yZXNwb25zZV9pZFwiXSxcblx0XHRcdFwiZm9ybV90eXBlXCI6ICgwLCBGb3JtVHlwZV8xLkZvcm1UeXBlVG9KU09OKSh2YWx1ZVtcImZvcm1fdHlwZVwiXSlcblx0XHR9O1xuXHR9XG59KSB9KTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9GdWxmaWxsbWVudERpc3BsYXlTdGF0dXMuanNcbnZhciByZXF1aXJlX0Z1bGZpbGxtZW50RGlzcGxheVN0YXR1cyA9IC8qIEBfX1BVUkVfXyAqLyBfX2NvbW1vbkpTKHsgXCIuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL0Z1bGZpbGxtZW50RGlzcGxheVN0YXR1cy5qc1wiOiAoKGV4cG9ydHMpID0+IHtcblx0LyoqXG5cdCogQ29tbWVyY2Vcblx0KiBObyBkZXNjcmlwdGlvbiBwcm92aWRlZCAoZ2VuZXJhdGVkIGJ5IE9wZW5hcGkgR2VuZXJhdG9yIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuYXBpdG9vbHMvb3BlbmFwaS1nZW5lcmF0b3IpXG5cdCpcblx0KiBUaGUgdmVyc2lvbiBvZiB0aGUgT3BlbkFQSSBkb2N1bWVudDogMS4xLjBcblx0KlxuXHQqXG5cdCogTk9URTogVGhpcyBjbGFzcyBpcyBhdXRvIGdlbmVyYXRlZCBieSBPcGVuQVBJIEdlbmVyYXRvciAoaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoKS5cblx0KiBodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2hcblx0KiBEbyBub3QgZWRpdCB0aGUgY2xhc3MgbWFudWFsbHkuXG5cdCovXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcblx0ZXhwb3J0cy5GdWxmaWxsbWVudERpc3BsYXlTdGF0dXMgPSB2b2lkIDA7XG5cdGV4cG9ydHMuaW5zdGFuY2VPZkZ1bGZpbGxtZW50RGlzcGxheVN0YXR1cyA9IGluc3RhbmNlT2ZGdWxmaWxsbWVudERpc3BsYXlTdGF0dXM7XG5cdGV4cG9ydHMuRnVsZmlsbG1lbnREaXNwbGF5U3RhdHVzRnJvbUpTT04gPSBGdWxmaWxsbWVudERpc3BsYXlTdGF0dXNGcm9tSlNPTjtcblx0ZXhwb3J0cy5GdWxmaWxsbWVudERpc3BsYXlTdGF0dXNGcm9tSlNPTlR5cGVkID0gRnVsZmlsbG1lbnREaXNwbGF5U3RhdHVzRnJvbUpTT05UeXBlZDtcblx0ZXhwb3J0cy5GdWxmaWxsbWVudERpc3BsYXlTdGF0dXNUb0pTT04gPSBGdWxmaWxsbWVudERpc3BsYXlTdGF0dXNUb0pTT047XG5cdGV4cG9ydHMuRnVsZmlsbG1lbnREaXNwbGF5U3RhdHVzVG9KU09OVHlwZWQgPSBGdWxmaWxsbWVudERpc3BsYXlTdGF0dXNUb0pTT05UeXBlZDtcblx0LyoqXG5cdCpcblx0KiBAZXhwb3J0XG5cdCogQGVudW0ge3N0cmluZ31cblx0Ki9cblx0dmFyIEZ1bGZpbGxtZW50RGlzcGxheVN0YXR1cztcblx0KGZ1bmN0aW9uKEZ1bGZpbGxtZW50RGlzcGxheVN0YXR1cyQxKSB7XG5cdFx0RnVsZmlsbG1lbnREaXNwbGF5U3RhdHVzJDFbXCJBVFRFTVBURURfREVMSVZFUllcIl0gPSBcIkF0dGVtcHRlZCBkZWxpdmVyeVwiO1xuXHRcdEZ1bGZpbGxtZW50RGlzcGxheVN0YXR1cyQxW1wiQ0FOQ0VMRURcIl0gPSBcIkNhbmNlbGVkXCI7XG5cdFx0RnVsZmlsbG1lbnREaXNwbGF5U3RhdHVzJDFbXCJDT05GSVJNRURcIl0gPSBcIkNvbmZpcm1lZFwiO1xuXHRcdEZ1bGZpbGxtZW50RGlzcGxheVN0YXR1cyQxW1wiREVMSVZFUkVEXCJdID0gXCJEZWxpdmVyZWRcIjtcblx0XHRGdWxmaWxsbWVudERpc3BsYXlTdGF0dXMkMVtcIkZBSUxVUkVcIl0gPSBcIkZhaWx1cmVcIjtcblx0XHRGdWxmaWxsbWVudERpc3BsYXlTdGF0dXMkMVtcIkZVTEZJTExFRFwiXSA9IFwiRnVsZmlsbGVkXCI7XG5cdFx0RnVsZmlsbG1lbnREaXNwbGF5U3RhdHVzJDFbXCJJTl9UUkFOU0lUXCJdID0gXCJJbiB0cmFuc2l0XCI7XG5cdFx0RnVsZmlsbG1lbnREaXNwbGF5U3RhdHVzJDFbXCJMQUJFTF9QUklOVEVEXCJdID0gXCJMYWJlbCBwcmludGVkXCI7XG5cdFx0RnVsZmlsbG1lbnREaXNwbGF5U3RhdHVzJDFbXCJMQUJFTF9QVVJDSEFTRURcIl0gPSBcIkxhYmVsIHB1cmNoYXNlZFwiO1xuXHRcdEZ1bGZpbGxtZW50RGlzcGxheVN0YXR1cyQxW1wiTEFCRUxfVk9JREVEXCJdID0gXCJMYWJlbCB2b2lkZWRcIjtcblx0XHRGdWxmaWxsbWVudERpc3BsYXlTdGF0dXMkMVtcIk1BUktFRF9BU19GVUxGSUxMRURcIl0gPSBcIk1hcmtlZCBhcyBmdWxmaWxsZWRcIjtcblx0XHRGdWxmaWxsbWVudERpc3BsYXlTdGF0dXMkMVtcIk5PVF9ERUxJVkVSRURcIl0gPSBcIk5vdCBkZWxpdmVyZWRcIjtcblx0XHRGdWxmaWxsbWVudERpc3BsYXlTdGF0dXMkMVtcIk9VVF9GT1JfREVMSVZFUllcIl0gPSBcIk91dCBmb3IgZGVsaXZlcnlcIjtcblx0XHRGdWxmaWxsbWVudERpc3BsYXlTdGF0dXMkMVtcIlBJQ0tFRF9VUFwiXSA9IFwiUGlja2VkIHVwXCI7XG5cdFx0RnVsZmlsbG1lbnREaXNwbGF5U3RhdHVzJDFbXCJSRUFEWV9GT1JfUElDS1VQXCJdID0gXCJSZWFkeSBmb3IgcGlja3VwXCI7XG5cdFx0RnVsZmlsbG1lbnREaXNwbGF5U3RhdHVzJDFbXCJTVUJNSVRURURcIl0gPSBcIlN1Ym1pdHRlZFwiO1xuXHRcdEZ1bGZpbGxtZW50RGlzcGxheVN0YXR1cyQxW1wiSU5fUFJPR1JFU1NcIl0gPSBcIkluIHByb2dyZXNzXCI7XG5cdFx0RnVsZmlsbG1lbnREaXNwbGF5U3RhdHVzJDFbXCJPTl9IT0xEXCJdID0gXCJPbiBob2xkXCI7XG5cdFx0RnVsZmlsbG1lbnREaXNwbGF5U3RhdHVzJDFbXCJPUEVOXCJdID0gXCJPcGVuXCI7XG5cdFx0RnVsZmlsbG1lbnREaXNwbGF5U3RhdHVzJDFbXCJQQVJUSUFMTFlfRlVMRklMTEVEXCJdID0gXCJQYXJ0aWFsbHkgZnVsZmlsbGVkXCI7XG5cdFx0RnVsZmlsbG1lbnREaXNwbGF5U3RhdHVzJDFbXCJQRU5ESU5HX0ZVTEZJTExNRU5UXCJdID0gXCJQZW5kaW5nIGZ1bGZpbGxtZW50XCI7XG5cdFx0RnVsZmlsbG1lbnREaXNwbGF5U3RhdHVzJDFbXCJSRVFVRVNUX0RFQ0xJTkVEXCJdID0gXCJSZXF1ZXN0IGRlY2xpbmVkXCI7XG5cdFx0RnVsZmlsbG1lbnREaXNwbGF5U3RhdHVzJDFbXCJSRVNUT0NLRURcIl0gPSBcIlJlc3RvY2tlZFwiO1xuXHRcdEZ1bGZpbGxtZW50RGlzcGxheVN0YXR1cyQxW1wiU0NIRURVTEVEXCJdID0gXCJTY2hlZHVsZWRcIjtcblx0XHRGdWxmaWxsbWVudERpc3BsYXlTdGF0dXMkMVtcIlVORlVMRklMTEVEXCJdID0gXCJVbmZ1bGZpbGxlZFwiO1xuXHR9KShGdWxmaWxsbWVudERpc3BsYXlTdGF0dXMgfHwgKGV4cG9ydHMuRnVsZmlsbG1lbnREaXNwbGF5U3RhdHVzID0gRnVsZmlsbG1lbnREaXNwbGF5U3RhdHVzID0ge30pKTtcblx0ZnVuY3Rpb24gaW5zdGFuY2VPZkZ1bGZpbGxtZW50RGlzcGxheVN0YXR1cyh2YWx1ZSkge1xuXHRcdGZvciAoY29uc3Qga2V5IGluIEZ1bGZpbGxtZW50RGlzcGxheVN0YXR1cykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChGdWxmaWxsbWVudERpc3BsYXlTdGF0dXMsIGtleSkpIHtcblx0XHRcdGlmIChGdWxmaWxsbWVudERpc3BsYXlTdGF0dXNba2V5XSA9PT0gdmFsdWUpIHJldHVybiB0cnVlO1xuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblx0ZnVuY3Rpb24gRnVsZmlsbG1lbnREaXNwbGF5U3RhdHVzRnJvbUpTT04oanNvbikge1xuXHRcdHJldHVybiBGdWxmaWxsbWVudERpc3BsYXlTdGF0dXNGcm9tSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBGdWxmaWxsbWVudERpc3BsYXlTdGF0dXNGcm9tSlNPTlR5cGVkKGpzb24sIGlnbm9yZURpc2NyaW1pbmF0b3IpIHtcblx0XHRyZXR1cm4ganNvbjtcblx0fVxuXHRmdW5jdGlvbiBGdWxmaWxsbWVudERpc3BsYXlTdGF0dXNUb0pTT04odmFsdWUpIHtcblx0XHRyZXR1cm4gdmFsdWU7XG5cdH1cblx0ZnVuY3Rpb24gRnVsZmlsbG1lbnREaXNwbGF5U3RhdHVzVG9KU09OVHlwZWQodmFsdWUsIGlnbm9yZURpc2NyaW1pbmF0b3IpIHtcblx0XHRyZXR1cm4gdmFsdWU7XG5cdH1cbn0pIH0pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiAuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL0dlbmVyYXRpb25QYXJhbXMuanNcbnZhciByZXF1aXJlX0dlbmVyYXRpb25QYXJhbXMgPSAvKiBAX19QVVJFX18gKi8gX19jb21tb25KUyh7IFwiLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9HZW5lcmF0aW9uUGFyYW1zLmpzXCI6ICgoZXhwb3J0cykgPT4ge1xuXHQvKipcblx0KiBDb21tZXJjZVxuXHQqIE5vIGRlc2NyaXB0aW9uIHByb3ZpZGVkIChnZW5lcmF0ZWQgYnkgT3BlbmFwaSBHZW5lcmF0b3IgaHR0cHM6Ly9naXRodWIuY29tL29wZW5hcGl0b29scy9vcGVuYXBpLWdlbmVyYXRvcilcblx0KlxuXHQqIFRoZSB2ZXJzaW9uIG9mIHRoZSBPcGVuQVBJIGRvY3VtZW50OiAxLjEuMFxuXHQqXG5cdCpcblx0KiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IE9wZW5BUEkgR2VuZXJhdG9yIChodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2gpLlxuXHQqIGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaFxuXHQqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cblx0Ki9cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuXHRleHBvcnRzLmluc3RhbmNlT2ZHZW5lcmF0aW9uUGFyYW1zID0gaW5zdGFuY2VPZkdlbmVyYXRpb25QYXJhbXM7XG5cdGV4cG9ydHMuR2VuZXJhdGlvblBhcmFtc0Zyb21KU09OID0gR2VuZXJhdGlvblBhcmFtc0Zyb21KU09OO1xuXHRleHBvcnRzLkdlbmVyYXRpb25QYXJhbXNGcm9tSlNPTlR5cGVkID0gR2VuZXJhdGlvblBhcmFtc0Zyb21KU09OVHlwZWQ7XG5cdGV4cG9ydHMuR2VuZXJhdGlvblBhcmFtc1RvSlNPTiA9IEdlbmVyYXRpb25QYXJhbXNUb0pTT047XG5cdGV4cG9ydHMuR2VuZXJhdGlvblBhcmFtc1RvSlNPTlR5cGVkID0gR2VuZXJhdGlvblBhcmFtc1RvSlNPTlR5cGVkO1xuXHQvKipcblx0KiBDaGVjayBpZiBhIGdpdmVuIG9iamVjdCBpbXBsZW1lbnRzIHRoZSBHZW5lcmF0aW9uUGFyYW1zIGludGVyZmFjZS5cblx0Ki9cblx0ZnVuY3Rpb24gaW5zdGFuY2VPZkdlbmVyYXRpb25QYXJhbXModmFsdWUpIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHRmdW5jdGlvbiBHZW5lcmF0aW9uUGFyYW1zRnJvbUpTT04oanNvbikge1xuXHRcdHJldHVybiBHZW5lcmF0aW9uUGFyYW1zRnJvbUpTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gR2VuZXJhdGlvblBhcmFtc0Zyb21KU09OVHlwZWQoanNvbiwgaWdub3JlRGlzY3JpbWluYXRvcikge1xuXHRcdGlmIChqc29uID09IG51bGwpIHJldHVybiBqc29uO1xuXHRcdHJldHVybiB7XG5cdFx0XHRcIm1heF90b2tlbnNcIjoganNvbltcIm1heF90b2tlbnNcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IGpzb25bXCJtYXhfdG9rZW5zXCJdLFxuXHRcdFx0XCJtb2RlbFwiOiBqc29uW1wibW9kZWxcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IGpzb25bXCJtb2RlbFwiXSxcblx0XHRcdFwibnVtX3N1Z2dlc3Rpb25zXCI6IGpzb25bXCJudW1fc3VnZ2VzdGlvbnNcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IGpzb25bXCJudW1fc3VnZ2VzdGlvbnNcIl0sXG5cdFx0XHRcInJlc3BvbnNlX2NhY2hpbmdcIjoganNvbltcInJlc3BvbnNlX2NhY2hpbmdcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IGpzb25bXCJyZXNwb25zZV9jYWNoaW5nXCJdLFxuXHRcdFx0XCJyZXNwb25zZV9zeXN0ZW1fcHJvbXB0XCI6IGpzb25bXCJyZXNwb25zZV9zeXN0ZW1fcHJvbXB0XCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wicmVzcG9uc2Vfc3lzdGVtX3Byb21wdFwiXSxcblx0XHRcdFwic3RvcFwiOiBqc29uW1wic3RvcFwiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcInN0b3BcIl0sXG5cdFx0XHRcInN0cmVhbVwiOiBqc29uW1wic3RyZWFtXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wic3RyZWFtXCJdLFxuXHRcdFx0XCJzdWdnZXN0aW9uX3N5c3RlbV9wcm9tcHRcIjoganNvbltcInN1Z2dlc3Rpb25fc3lzdGVtX3Byb21wdFwiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcInN1Z2dlc3Rpb25fc3lzdGVtX3Byb21wdFwiXSxcblx0XHRcdFwidGVtcGVyYXR1cmVcIjoganNvbltcInRlbXBlcmF0dXJlXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1widGVtcGVyYXR1cmVcIl0sXG5cdFx0XHRcInRvcF9wXCI6IGpzb25bXCJ0b3BfcFwiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcInRvcF9wXCJdXG5cdFx0fTtcblx0fVxuXHRmdW5jdGlvbiBHZW5lcmF0aW9uUGFyYW1zVG9KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gR2VuZXJhdGlvblBhcmFtc1RvSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBHZW5lcmF0aW9uUGFyYW1zVG9KU09OVHlwZWQodmFsdWUsIGlnbm9yZURpc2NyaW1pbmF0b3IgPSBmYWxzZSkge1xuXHRcdGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gdmFsdWU7XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwibWF4X3Rva2Vuc1wiOiB2YWx1ZVtcIm1heF90b2tlbnNcIl0sXG5cdFx0XHRcIm1vZGVsXCI6IHZhbHVlW1wibW9kZWxcIl0sXG5cdFx0XHRcIm51bV9zdWdnZXN0aW9uc1wiOiB2YWx1ZVtcIm51bV9zdWdnZXN0aW9uc1wiXSxcblx0XHRcdFwicmVzcG9uc2VfY2FjaGluZ1wiOiB2YWx1ZVtcInJlc3BvbnNlX2NhY2hpbmdcIl0sXG5cdFx0XHRcInJlc3BvbnNlX3N5c3RlbV9wcm9tcHRcIjogdmFsdWVbXCJyZXNwb25zZV9zeXN0ZW1fcHJvbXB0XCJdLFxuXHRcdFx0XCJzdG9wXCI6IHZhbHVlW1wic3RvcFwiXSxcblx0XHRcdFwic3RyZWFtXCI6IHZhbHVlW1wic3RyZWFtXCJdLFxuXHRcdFx0XCJzdWdnZXN0aW9uX3N5c3RlbV9wcm9tcHRcIjogdmFsdWVbXCJzdWdnZXN0aW9uX3N5c3RlbV9wcm9tcHRcIl0sXG5cdFx0XHRcInRlbXBlcmF0dXJlXCI6IHZhbHVlW1widGVtcGVyYXR1cmVcIl0sXG5cdFx0XHRcInRvcF9wXCI6IHZhbHVlW1widG9wX3BcIl1cblx0XHR9O1xuXHR9XG59KSB9KTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9HZXRDb252ZXJzYXRpb25NZXNzYWdlc1JlcXVlc3QuanNcbnZhciByZXF1aXJlX0dldENvbnZlcnNhdGlvbk1lc3NhZ2VzUmVxdWVzdCA9IC8qIEBfX1BVUkVfXyAqLyBfX2NvbW1vbkpTKHsgXCIuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL0dldENvbnZlcnNhdGlvbk1lc3NhZ2VzUmVxdWVzdC5qc1wiOiAoKGV4cG9ydHMpID0+IHtcblx0LyoqXG5cdCogQ29tbWVyY2Vcblx0KiBObyBkZXNjcmlwdGlvbiBwcm92aWRlZCAoZ2VuZXJhdGVkIGJ5IE9wZW5hcGkgR2VuZXJhdG9yIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuYXBpdG9vbHMvb3BlbmFwaS1nZW5lcmF0b3IpXG5cdCpcblx0KiBUaGUgdmVyc2lvbiBvZiB0aGUgT3BlbkFQSSBkb2N1bWVudDogMS4xLjBcblx0KlxuXHQqXG5cdCogTk9URTogVGhpcyBjbGFzcyBpcyBhdXRvIGdlbmVyYXRlZCBieSBPcGVuQVBJIEdlbmVyYXRvciAoaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoKS5cblx0KiBodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2hcblx0KiBEbyBub3QgZWRpdCB0aGUgY2xhc3MgbWFudWFsbHkuXG5cdCovXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcblx0ZXhwb3J0cy5pbnN0YW5jZU9mR2V0Q29udmVyc2F0aW9uTWVzc2FnZXNSZXF1ZXN0ID0gaW5zdGFuY2VPZkdldENvbnZlcnNhdGlvbk1lc3NhZ2VzUmVxdWVzdDtcblx0ZXhwb3J0cy5HZXRDb252ZXJzYXRpb25NZXNzYWdlc1JlcXVlc3RGcm9tSlNPTiA9IEdldENvbnZlcnNhdGlvbk1lc3NhZ2VzUmVxdWVzdEZyb21KU09OO1xuXHRleHBvcnRzLkdldENvbnZlcnNhdGlvbk1lc3NhZ2VzUmVxdWVzdEZyb21KU09OVHlwZWQgPSBHZXRDb252ZXJzYXRpb25NZXNzYWdlc1JlcXVlc3RGcm9tSlNPTlR5cGVkO1xuXHRleHBvcnRzLkdldENvbnZlcnNhdGlvbk1lc3NhZ2VzUmVxdWVzdFRvSlNPTiA9IEdldENvbnZlcnNhdGlvbk1lc3NhZ2VzUmVxdWVzdFRvSlNPTjtcblx0ZXhwb3J0cy5HZXRDb252ZXJzYXRpb25NZXNzYWdlc1JlcXVlc3RUb0pTT05UeXBlZCA9IEdldENvbnZlcnNhdGlvbk1lc3NhZ2VzUmVxdWVzdFRvSlNPTlR5cGVkO1xuXHRjb25zdCBDdXN0b21lclNlcnZpY2VQcm92aWRlcl8xJDIgPSByZXF1aXJlX0N1c3RvbWVyU2VydmljZVByb3ZpZGVyKCk7XG5cdC8qKlxuXHQqIENoZWNrIGlmIGEgZ2l2ZW4gb2JqZWN0IGltcGxlbWVudHMgdGhlIEdldENvbnZlcnNhdGlvbk1lc3NhZ2VzUmVxdWVzdCBpbnRlcmZhY2UuXG5cdCovXG5cdGZ1bmN0aW9uIGluc3RhbmNlT2ZHZXRDb252ZXJzYXRpb25NZXNzYWdlc1JlcXVlc3QodmFsdWUpIHtcblx0XHRpZiAoIShcImNvbnZlcnNhdGlvbl9pZFwiIGluIHZhbHVlKSB8fCB2YWx1ZVtcImNvbnZlcnNhdGlvbl9pZFwiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0ZnVuY3Rpb24gR2V0Q29udmVyc2F0aW9uTWVzc2FnZXNSZXF1ZXN0RnJvbUpTT04oanNvbikge1xuXHRcdHJldHVybiBHZXRDb252ZXJzYXRpb25NZXNzYWdlc1JlcXVlc3RGcm9tSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBHZXRDb252ZXJzYXRpb25NZXNzYWdlc1JlcXVlc3RGcm9tSlNPTlR5cGVkKGpzb24sIGlnbm9yZURpc2NyaW1pbmF0b3IpIHtcblx0XHRpZiAoanNvbiA9PSBudWxsKSByZXR1cm4ganNvbjtcblx0XHRyZXR1cm4ge1xuXHRcdFx0XCJjb252ZXJzYXRpb25faWRcIjoganNvbltcImNvbnZlcnNhdGlvbl9pZFwiXSxcblx0XHRcdFwiY3VzdG9tZXJfc2VydmljZV9wcm92aWRlclwiOiBqc29uW1wiY3VzdG9tZXJfc2VydmljZV9wcm92aWRlclwiXSA9PSBudWxsID8gdm9pZCAwIDogKDAsIEN1c3RvbWVyU2VydmljZVByb3ZpZGVyXzEkMi5DdXN0b21lclNlcnZpY2VQcm92aWRlckZyb21KU09OKShqc29uW1wiY3VzdG9tZXJfc2VydmljZV9wcm92aWRlclwiXSlcblx0XHR9O1xuXHR9XG5cdGZ1bmN0aW9uIEdldENvbnZlcnNhdGlvbk1lc3NhZ2VzUmVxdWVzdFRvSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIEdldENvbnZlcnNhdGlvbk1lc3NhZ2VzUmVxdWVzdFRvSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBHZXRDb252ZXJzYXRpb25NZXNzYWdlc1JlcXVlc3RUb0pTT05UeXBlZCh2YWx1ZSwgaWdub3JlRGlzY3JpbWluYXRvciA9IGZhbHNlKSB7XG5cdFx0aWYgKHZhbHVlID09IG51bGwpIHJldHVybiB2YWx1ZTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0XCJjb252ZXJzYXRpb25faWRcIjogdmFsdWVbXCJjb252ZXJzYXRpb25faWRcIl0sXG5cdFx0XHRcImN1c3RvbWVyX3NlcnZpY2VfcHJvdmlkZXJcIjogKDAsIEN1c3RvbWVyU2VydmljZVByb3ZpZGVyXzEkMi5DdXN0b21lclNlcnZpY2VQcm92aWRlclRvSlNPTikodmFsdWVbXCJjdXN0b21lcl9zZXJ2aWNlX3Byb3ZpZGVyXCJdKVxuXHRcdH07XG5cdH1cbn0pIH0pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiAuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL0lzQnVzaW5lc3NIb3Vyc1JlcXVlc3QuanNcbnZhciByZXF1aXJlX0lzQnVzaW5lc3NIb3Vyc1JlcXVlc3QgPSAvKiBAX19QVVJFX18gKi8gX19jb21tb25KUyh7IFwiLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9Jc0J1c2luZXNzSG91cnNSZXF1ZXN0LmpzXCI6ICgoZXhwb3J0cykgPT4ge1xuXHQvKipcblx0KiBDb21tZXJjZVxuXHQqIE5vIGRlc2NyaXB0aW9uIHByb3ZpZGVkIChnZW5lcmF0ZWQgYnkgT3BlbmFwaSBHZW5lcmF0b3IgaHR0cHM6Ly9naXRodWIuY29tL29wZW5hcGl0b29scy9vcGVuYXBpLWdlbmVyYXRvcilcblx0KlxuXHQqIFRoZSB2ZXJzaW9uIG9mIHRoZSBPcGVuQVBJIGRvY3VtZW50OiAxLjEuMFxuXHQqXG5cdCpcblx0KiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IE9wZW5BUEkgR2VuZXJhdG9yIChodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2gpLlxuXHQqIGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaFxuXHQqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cblx0Ki9cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuXHRleHBvcnRzLmluc3RhbmNlT2ZJc0J1c2luZXNzSG91cnNSZXF1ZXN0ID0gaW5zdGFuY2VPZklzQnVzaW5lc3NIb3Vyc1JlcXVlc3Q7XG5cdGV4cG9ydHMuSXNCdXNpbmVzc0hvdXJzUmVxdWVzdEZyb21KU09OID0gSXNCdXNpbmVzc0hvdXJzUmVxdWVzdEZyb21KU09OO1xuXHRleHBvcnRzLklzQnVzaW5lc3NIb3Vyc1JlcXVlc3RGcm9tSlNPTlR5cGVkID0gSXNCdXNpbmVzc0hvdXJzUmVxdWVzdEZyb21KU09OVHlwZWQ7XG5cdGV4cG9ydHMuSXNCdXNpbmVzc0hvdXJzUmVxdWVzdFRvSlNPTiA9IElzQnVzaW5lc3NIb3Vyc1JlcXVlc3RUb0pTT047XG5cdGV4cG9ydHMuSXNCdXNpbmVzc0hvdXJzUmVxdWVzdFRvSlNPTlR5cGVkID0gSXNCdXNpbmVzc0hvdXJzUmVxdWVzdFRvSlNPTlR5cGVkO1xuXHRjb25zdCBDdXN0b21lclNlcnZpY2VQcm92aWRlcl8xJDEgPSByZXF1aXJlX0N1c3RvbWVyU2VydmljZVByb3ZpZGVyKCk7XG5cdC8qKlxuXHQqIENoZWNrIGlmIGEgZ2l2ZW4gb2JqZWN0IGltcGxlbWVudHMgdGhlIElzQnVzaW5lc3NIb3Vyc1JlcXVlc3QgaW50ZXJmYWNlLlxuXHQqL1xuXHRmdW5jdGlvbiBpbnN0YW5jZU9mSXNCdXNpbmVzc0hvdXJzUmVxdWVzdCh2YWx1ZSkge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdGZ1bmN0aW9uIElzQnVzaW5lc3NIb3Vyc1JlcXVlc3RGcm9tSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIElzQnVzaW5lc3NIb3Vyc1JlcXVlc3RGcm9tSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBJc0J1c2luZXNzSG91cnNSZXF1ZXN0RnJvbUpTT05UeXBlZChqc29uLCBpZ25vcmVEaXNjcmltaW5hdG9yKSB7XG5cdFx0aWYgKGpzb24gPT0gbnVsbCkgcmV0dXJuIGpzb247XG5cdFx0cmV0dXJuIHsgXCJjdXN0b21lcl9zZXJ2aWNlX3Byb3ZpZGVyXCI6IGpzb25bXCJjdXN0b21lcl9zZXJ2aWNlX3Byb3ZpZGVyXCJdID09IG51bGwgPyB2b2lkIDAgOiAoMCwgQ3VzdG9tZXJTZXJ2aWNlUHJvdmlkZXJfMSQxLkN1c3RvbWVyU2VydmljZVByb3ZpZGVyRnJvbUpTT04pKGpzb25bXCJjdXN0b21lcl9zZXJ2aWNlX3Byb3ZpZGVyXCJdKSB9O1xuXHR9XG5cdGZ1bmN0aW9uIElzQnVzaW5lc3NIb3Vyc1JlcXVlc3RUb0pTT04oanNvbikge1xuXHRcdHJldHVybiBJc0J1c2luZXNzSG91cnNSZXF1ZXN0VG9KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIElzQnVzaW5lc3NIb3Vyc1JlcXVlc3RUb0pTT05UeXBlZCh2YWx1ZSwgaWdub3JlRGlzY3JpbWluYXRvciA9IGZhbHNlKSB7XG5cdFx0aWYgKHZhbHVlID09IG51bGwpIHJldHVybiB2YWx1ZTtcblx0XHRyZXR1cm4geyBcImN1c3RvbWVyX3NlcnZpY2VfcHJvdmlkZXJcIjogKDAsIEN1c3RvbWVyU2VydmljZVByb3ZpZGVyXzEkMS5DdXN0b21lclNlcnZpY2VQcm92aWRlclRvSlNPTikodmFsdWVbXCJjdXN0b21lcl9zZXJ2aWNlX3Byb3ZpZGVyXCJdKSB9O1xuXHR9XG59KSB9KTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9Jc0J1c2luZXNzSG91cnNSZXNwb25zZS5qc1xudmFyIHJlcXVpcmVfSXNCdXNpbmVzc0hvdXJzUmVzcG9uc2UgPSAvKiBAX19QVVJFX18gKi8gX19jb21tb25KUyh7IFwiLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9Jc0J1c2luZXNzSG91cnNSZXNwb25zZS5qc1wiOiAoKGV4cG9ydHMpID0+IHtcblx0LyoqXG5cdCogQ29tbWVyY2Vcblx0KiBObyBkZXNjcmlwdGlvbiBwcm92aWRlZCAoZ2VuZXJhdGVkIGJ5IE9wZW5hcGkgR2VuZXJhdG9yIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuYXBpdG9vbHMvb3BlbmFwaS1nZW5lcmF0b3IpXG5cdCpcblx0KiBUaGUgdmVyc2lvbiBvZiB0aGUgT3BlbkFQSSBkb2N1bWVudDogMS4xLjBcblx0KlxuXHQqXG5cdCogTk9URTogVGhpcyBjbGFzcyBpcyBhdXRvIGdlbmVyYXRlZCBieSBPcGVuQVBJIEdlbmVyYXRvciAoaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoKS5cblx0KiBodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2hcblx0KiBEbyBub3QgZWRpdCB0aGUgY2xhc3MgbWFudWFsbHkuXG5cdCovXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcblx0ZXhwb3J0cy5pbnN0YW5jZU9mSXNCdXNpbmVzc0hvdXJzUmVzcG9uc2UgPSBpbnN0YW5jZU9mSXNCdXNpbmVzc0hvdXJzUmVzcG9uc2U7XG5cdGV4cG9ydHMuSXNCdXNpbmVzc0hvdXJzUmVzcG9uc2VGcm9tSlNPTiA9IElzQnVzaW5lc3NIb3Vyc1Jlc3BvbnNlRnJvbUpTT047XG5cdGV4cG9ydHMuSXNCdXNpbmVzc0hvdXJzUmVzcG9uc2VGcm9tSlNPTlR5cGVkID0gSXNCdXNpbmVzc0hvdXJzUmVzcG9uc2VGcm9tSlNPTlR5cGVkO1xuXHRleHBvcnRzLklzQnVzaW5lc3NIb3Vyc1Jlc3BvbnNlVG9KU09OID0gSXNCdXNpbmVzc0hvdXJzUmVzcG9uc2VUb0pTT047XG5cdGV4cG9ydHMuSXNCdXNpbmVzc0hvdXJzUmVzcG9uc2VUb0pTT05UeXBlZCA9IElzQnVzaW5lc3NIb3Vyc1Jlc3BvbnNlVG9KU09OVHlwZWQ7XG5cdC8qKlxuXHQqIENoZWNrIGlmIGEgZ2l2ZW4gb2JqZWN0IGltcGxlbWVudHMgdGhlIElzQnVzaW5lc3NIb3Vyc1Jlc3BvbnNlIGludGVyZmFjZS5cblx0Ki9cblx0ZnVuY3Rpb24gaW5zdGFuY2VPZklzQnVzaW5lc3NIb3Vyc1Jlc3BvbnNlKHZhbHVlKSB7XG5cdFx0aWYgKCEoXCJpc19idXNpbmVzc19ob3Vyc1wiIGluIHZhbHVlKSB8fCB2YWx1ZVtcImlzX2J1c2luZXNzX2hvdXJzXCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHRmdW5jdGlvbiBJc0J1c2luZXNzSG91cnNSZXNwb25zZUZyb21KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gSXNCdXNpbmVzc0hvdXJzUmVzcG9uc2VGcm9tSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBJc0J1c2luZXNzSG91cnNSZXNwb25zZUZyb21KU09OVHlwZWQoanNvbiwgaWdub3JlRGlzY3JpbWluYXRvcikge1xuXHRcdGlmIChqc29uID09IG51bGwpIHJldHVybiBqc29uO1xuXHRcdHJldHVybiB7XG5cdFx0XHRcImRldGFpbHNcIjoganNvbltcImRldGFpbHNcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IGpzb25bXCJkZXRhaWxzXCJdLFxuXHRcdFx0XCJpc19idXNpbmVzc19ob3Vyc1wiOiBqc29uW1wiaXNfYnVzaW5lc3NfaG91cnNcIl1cblx0XHR9O1xuXHR9XG5cdGZ1bmN0aW9uIElzQnVzaW5lc3NIb3Vyc1Jlc3BvbnNlVG9KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gSXNCdXNpbmVzc0hvdXJzUmVzcG9uc2VUb0pTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gSXNCdXNpbmVzc0hvdXJzUmVzcG9uc2VUb0pTT05UeXBlZCh2YWx1ZSwgaWdub3JlRGlzY3JpbWluYXRvciA9IGZhbHNlKSB7XG5cdFx0aWYgKHZhbHVlID09IG51bGwpIHJldHVybiB2YWx1ZTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0XCJkZXRhaWxzXCI6IHZhbHVlW1wiZGV0YWlsc1wiXSxcblx0XHRcdFwiaXNfYnVzaW5lc3NfaG91cnNcIjogdmFsdWVbXCJpc19idXNpbmVzc19ob3Vyc1wiXVxuXHRcdH07XG5cdH1cbn0pIH0pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiAuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL0xhYmVsVmFsdWUuanNcbnZhciByZXF1aXJlX0xhYmVsVmFsdWUgPSAvKiBAX19QVVJFX18gKi8gX19jb21tb25KUyh7IFwiLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9MYWJlbFZhbHVlLmpzXCI6ICgoZXhwb3J0cykgPT4ge1xuXHQvKipcblx0KiBDb21tZXJjZVxuXHQqIE5vIGRlc2NyaXB0aW9uIHByb3ZpZGVkIChnZW5lcmF0ZWQgYnkgT3BlbmFwaSBHZW5lcmF0b3IgaHR0cHM6Ly9naXRodWIuY29tL29wZW5hcGl0b29scy9vcGVuYXBpLWdlbmVyYXRvcilcblx0KlxuXHQqIFRoZSB2ZXJzaW9uIG9mIHRoZSBPcGVuQVBJIGRvY3VtZW50OiAxLjEuMFxuXHQqXG5cdCpcblx0KiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IE9wZW5BUEkgR2VuZXJhdG9yIChodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2gpLlxuXHQqIGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaFxuXHQqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cblx0Ki9cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuXHRleHBvcnRzLmluc3RhbmNlT2ZMYWJlbFZhbHVlID0gaW5zdGFuY2VPZkxhYmVsVmFsdWU7XG5cdGV4cG9ydHMuTGFiZWxWYWx1ZUZyb21KU09OID0gTGFiZWxWYWx1ZUZyb21KU09OO1xuXHRleHBvcnRzLkxhYmVsVmFsdWVGcm9tSlNPTlR5cGVkID0gTGFiZWxWYWx1ZUZyb21KU09OVHlwZWQ7XG5cdGV4cG9ydHMuTGFiZWxWYWx1ZVRvSlNPTiA9IExhYmVsVmFsdWVUb0pTT047XG5cdGV4cG9ydHMuTGFiZWxWYWx1ZVRvSlNPTlR5cGVkID0gTGFiZWxWYWx1ZVRvSlNPTlR5cGVkO1xuXHQvKipcblx0KiBDaGVjayBpZiBhIGdpdmVuIG9iamVjdCBpbXBsZW1lbnRzIHRoZSBMYWJlbFZhbHVlIGludGVyZmFjZS5cblx0Ki9cblx0ZnVuY3Rpb24gaW5zdGFuY2VPZkxhYmVsVmFsdWUodmFsdWUpIHtcblx0XHRpZiAoIShcImxhYmVsXCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wibGFiZWxcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdGlmICghKFwidmFsdWVcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJ2YWx1ZVwiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0ZnVuY3Rpb24gTGFiZWxWYWx1ZUZyb21KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gTGFiZWxWYWx1ZUZyb21KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIExhYmVsVmFsdWVGcm9tSlNPTlR5cGVkKGpzb24sIGlnbm9yZURpc2NyaW1pbmF0b3IpIHtcblx0XHRpZiAoanNvbiA9PSBudWxsKSByZXR1cm4ganNvbjtcblx0XHRyZXR1cm4ge1xuXHRcdFx0XCJsYWJlbFwiOiBqc29uW1wibGFiZWxcIl0sXG5cdFx0XHRcInZhbHVlXCI6IGpzb25bXCJ2YWx1ZVwiXVxuXHRcdH07XG5cdH1cblx0ZnVuY3Rpb24gTGFiZWxWYWx1ZVRvSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIExhYmVsVmFsdWVUb0pTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gTGFiZWxWYWx1ZVRvSlNPTlR5cGVkKHZhbHVlLCBpZ25vcmVEaXNjcmltaW5hdG9yID0gZmFsc2UpIHtcblx0XHRpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIHZhbHVlO1xuXHRcdHJldHVybiB7XG5cdFx0XHRcImxhYmVsXCI6IHZhbHVlW1wibGFiZWxcIl0sXG5cdFx0XHRcInZhbHVlXCI6IHZhbHVlW1widmFsdWVcIl1cblx0XHR9O1xuXHR9XG59KSB9KTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9Vc2VyRXZlbnRDYXRlZ29yeS5qc1xudmFyIHJlcXVpcmVfVXNlckV2ZW50Q2F0ZWdvcnkgPSAvKiBAX19QVVJFX18gKi8gX19jb21tb25KUyh7IFwiLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9Vc2VyRXZlbnRDYXRlZ29yeS5qc1wiOiAoKGV4cG9ydHMpID0+IHtcblx0LyoqXG5cdCogQ29tbWVyY2Vcblx0KiBObyBkZXNjcmlwdGlvbiBwcm92aWRlZCAoZ2VuZXJhdGVkIGJ5IE9wZW5hcGkgR2VuZXJhdG9yIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuYXBpdG9vbHMvb3BlbmFwaS1nZW5lcmF0b3IpXG5cdCpcblx0KiBUaGUgdmVyc2lvbiBvZiB0aGUgT3BlbkFQSSBkb2N1bWVudDogMS4xLjBcblx0KlxuXHQqXG5cdCogTk9URTogVGhpcyBjbGFzcyBpcyBhdXRvIGdlbmVyYXRlZCBieSBPcGVuQVBJIEdlbmVyYXRvciAoaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoKS5cblx0KiBodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2hcblx0KiBEbyBub3QgZWRpdCB0aGUgY2xhc3MgbWFudWFsbHkuXG5cdCovXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcblx0ZXhwb3J0cy5Vc2VyRXZlbnRDYXRlZ29yeSA9IHZvaWQgMDtcblx0ZXhwb3J0cy5pbnN0YW5jZU9mVXNlckV2ZW50Q2F0ZWdvcnkgPSBpbnN0YW5jZU9mVXNlckV2ZW50Q2F0ZWdvcnk7XG5cdGV4cG9ydHMuVXNlckV2ZW50Q2F0ZWdvcnlGcm9tSlNPTiA9IFVzZXJFdmVudENhdGVnb3J5RnJvbUpTT047XG5cdGV4cG9ydHMuVXNlckV2ZW50Q2F0ZWdvcnlGcm9tSlNPTlR5cGVkID0gVXNlckV2ZW50Q2F0ZWdvcnlGcm9tSlNPTlR5cGVkO1xuXHRleHBvcnRzLlVzZXJFdmVudENhdGVnb3J5VG9KU09OID0gVXNlckV2ZW50Q2F0ZWdvcnlUb0pTT047XG5cdGV4cG9ydHMuVXNlckV2ZW50Q2F0ZWdvcnlUb0pTT05UeXBlZCA9IFVzZXJFdmVudENhdGVnb3J5VG9KU09OVHlwZWQ7XG5cdC8qKlxuXHQqXG5cdCogQGV4cG9ydFxuXHQqIEBlbnVtIHtzdHJpbmd9XG5cdCovXG5cdHZhciBVc2VyRXZlbnRDYXRlZ29yeTtcblx0KGZ1bmN0aW9uKFVzZXJFdmVudENhdGVnb3J5JDEpIHtcblx0XHRVc2VyRXZlbnRDYXRlZ29yeSQxW1wiQXBwTG9hZGVkXCJdID0gXCJhcHBfbG9hZGVkXCI7XG5cdFx0VXNlckV2ZW50Q2F0ZWdvcnkkMVtcIlNlYXJjaFwiXSA9IFwic2VhcmNoXCI7XG5cdFx0VXNlckV2ZW50Q2F0ZWdvcnkkMVtcIlN1Z2dlc3Rpb25DbGlja2VkXCJdID0gXCJzdWdnZXN0aW9uX2NsaWNrZWRcIjtcblx0XHRVc2VyRXZlbnRDYXRlZ29yeSQxW1wiUXVlcnlUeXBlZFwiXSA9IFwicXVlcnlfdHlwZWRcIjtcblx0XHRVc2VyRXZlbnRDYXRlZ29yeSQxW1wiQXBwVW5sb2FkZWRcIl0gPSBcImFwcF91bmxvYWRlZFwiO1xuXHRcdFVzZXJFdmVudENhdGVnb3J5JDFbXCJQZHBWaXNpdFwiXSA9IFwicGRwX3Zpc2l0XCI7XG5cdFx0VXNlckV2ZW50Q2F0ZWdvcnkkMVtcIlBscFZpc2l0XCJdID0gXCJwbHBfdmlzaXRcIjtcblx0XHRVc2VyRXZlbnRDYXRlZ29yeSQxW1wiQWRkVG9DYXJ0XCJdID0gXCJhZGRfdG9fY2FydFwiO1xuXHRcdFVzZXJFdmVudENhdGVnb3J5JDFbXCJFeGl0U2VhcmNoXCJdID0gXCJleGl0X3NlYXJjaFwiO1xuXHRcdFVzZXJFdmVudENhdGVnb3J5JDFbXCJQYWdlVmlzaXRcIl0gPSBcInBhZ2VfdmlzaXRcIjtcblx0XHRVc2VyRXZlbnRDYXRlZ29yeSQxW1wiRm9ybVN1Ym1pdHRlZFwiXSA9IFwiZm9ybV9zdWJtaXR0ZWRcIjtcblx0fSkoVXNlckV2ZW50Q2F0ZWdvcnkgfHwgKGV4cG9ydHMuVXNlckV2ZW50Q2F0ZWdvcnkgPSBVc2VyRXZlbnRDYXRlZ29yeSA9IHt9KSk7XG5cdGZ1bmN0aW9uIGluc3RhbmNlT2ZVc2VyRXZlbnRDYXRlZ29yeSh2YWx1ZSkge1xuXHRcdGZvciAoY29uc3Qga2V5IGluIFVzZXJFdmVudENhdGVnb3J5KSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFVzZXJFdmVudENhdGVnb3J5LCBrZXkpKSB7XG5cdFx0XHRpZiAoVXNlckV2ZW50Q2F0ZWdvcnlba2V5XSA9PT0gdmFsdWUpIHJldHVybiB0cnVlO1xuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblx0ZnVuY3Rpb24gVXNlckV2ZW50Q2F0ZWdvcnlGcm9tSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIFVzZXJFdmVudENhdGVnb3J5RnJvbUpTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gVXNlckV2ZW50Q2F0ZWdvcnlGcm9tSlNPTlR5cGVkKGpzb24sIGlnbm9yZURpc2NyaW1pbmF0b3IpIHtcblx0XHRyZXR1cm4ganNvbjtcblx0fVxuXHRmdW5jdGlvbiBVc2VyRXZlbnRDYXRlZ29yeVRvSlNPTih2YWx1ZSkge1xuXHRcdHJldHVybiB2YWx1ZTtcblx0fVxuXHRmdW5jdGlvbiBVc2VyRXZlbnRDYXRlZ29yeVRvSlNPTlR5cGVkKHZhbHVlLCBpZ25vcmVEaXNjcmltaW5hdG9yKSB7XG5cdFx0cmV0dXJuIHZhbHVlO1xuXHR9XG59KSB9KTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9QRFBBdHRyaWJ1dGVzLmpzXG52YXIgcmVxdWlyZV9QRFBBdHRyaWJ1dGVzID0gLyogQF9fUFVSRV9fICovIF9fY29tbW9uSlMoeyBcIi4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvUERQQXR0cmlidXRlcy5qc1wiOiAoKGV4cG9ydHMpID0+IHtcblx0LyoqXG5cdCogQ29tbWVyY2Vcblx0KiBObyBkZXNjcmlwdGlvbiBwcm92aWRlZCAoZ2VuZXJhdGVkIGJ5IE9wZW5hcGkgR2VuZXJhdG9yIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuYXBpdG9vbHMvb3BlbmFwaS1nZW5lcmF0b3IpXG5cdCpcblx0KiBUaGUgdmVyc2lvbiBvZiB0aGUgT3BlbkFQSSBkb2N1bWVudDogMS4xLjBcblx0KlxuXHQqXG5cdCogTk9URTogVGhpcyBjbGFzcyBpcyBhdXRvIGdlbmVyYXRlZCBieSBPcGVuQVBJIEdlbmVyYXRvciAoaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoKS5cblx0KiBodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2hcblx0KiBEbyBub3QgZWRpdCB0aGUgY2xhc3MgbWFudWFsbHkuXG5cdCovXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcblx0ZXhwb3J0cy5pbnN0YW5jZU9mUERQQXR0cmlidXRlcyA9IGluc3RhbmNlT2ZQRFBBdHRyaWJ1dGVzO1xuXHRleHBvcnRzLlBEUEF0dHJpYnV0ZXNGcm9tSlNPTiA9IFBEUEF0dHJpYnV0ZXNGcm9tSlNPTjtcblx0ZXhwb3J0cy5QRFBBdHRyaWJ1dGVzRnJvbUpTT05UeXBlZCA9IFBEUEF0dHJpYnV0ZXNGcm9tSlNPTlR5cGVkO1xuXHRleHBvcnRzLlBEUEF0dHJpYnV0ZXNUb0pTT04gPSBQRFBBdHRyaWJ1dGVzVG9KU09OO1xuXHRleHBvcnRzLlBEUEF0dHJpYnV0ZXNUb0pTT05UeXBlZCA9IFBEUEF0dHJpYnV0ZXNUb0pTT05UeXBlZDtcblx0LyoqXG5cdCogQ2hlY2sgaWYgYSBnaXZlbiBvYmplY3QgaW1wbGVtZW50cyB0aGUgUERQQXR0cmlidXRlcyBpbnRlcmZhY2UuXG5cdCovXG5cdGZ1bmN0aW9uIGluc3RhbmNlT2ZQRFBBdHRyaWJ1dGVzKHZhbHVlKSB7XG5cdFx0aWYgKCEoXCJwcm9kdWN0X2lkXCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wicHJvZHVjdF9pZFwiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0ZnVuY3Rpb24gUERQQXR0cmlidXRlc0Zyb21KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gUERQQXR0cmlidXRlc0Zyb21KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIFBEUEF0dHJpYnV0ZXNGcm9tSlNPTlR5cGVkKGpzb24sIGlnbm9yZURpc2NyaW1pbmF0b3IpIHtcblx0XHRpZiAoanNvbiA9PSBudWxsKSByZXR1cm4ganNvbjtcblx0XHRyZXR1cm4ge1xuXHRcdFx0XCJwYXJlbnRfcHJvZHVjdF9pZFwiOiBqc29uW1wicGFyZW50X3Byb2R1Y3RfaWRcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IGpzb25bXCJwYXJlbnRfcHJvZHVjdF9pZFwiXSxcblx0XHRcdFwicHJvZHVjdF9pZFwiOiBqc29uW1wicHJvZHVjdF9pZFwiXSxcblx0XHRcdFwidXJsXCI6IGpzb25bXCJ1cmxcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IGpzb25bXCJ1cmxcIl1cblx0XHR9O1xuXHR9XG5cdGZ1bmN0aW9uIFBEUEF0dHJpYnV0ZXNUb0pTT04oanNvbikge1xuXHRcdHJldHVybiBQRFBBdHRyaWJ1dGVzVG9KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIFBEUEF0dHJpYnV0ZXNUb0pTT05UeXBlZCh2YWx1ZSwgaWdub3JlRGlzY3JpbWluYXRvciA9IGZhbHNlKSB7XG5cdFx0aWYgKHZhbHVlID09IG51bGwpIHJldHVybiB2YWx1ZTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0XCJwYXJlbnRfcHJvZHVjdF9pZFwiOiB2YWx1ZVtcInBhcmVudF9wcm9kdWN0X2lkXCJdLFxuXHRcdFx0XCJwcm9kdWN0X2lkXCI6IHZhbHVlW1wicHJvZHVjdF9pZFwiXSxcblx0XHRcdFwidXJsXCI6IHZhbHVlW1widXJsXCJdXG5cdFx0fTtcblx0fVxufSkgfSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIC4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvUExQQXR0cmlidXRlQ2F0ZWdvcnkuanNcbnZhciByZXF1aXJlX1BMUEF0dHJpYnV0ZUNhdGVnb3J5ID0gLyogQF9fUFVSRV9fICovIF9fY29tbW9uSlMoeyBcIi4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvUExQQXR0cmlidXRlQ2F0ZWdvcnkuanNcIjogKChleHBvcnRzKSA9PiB7XG5cdC8qKlxuXHQqIENvbW1lcmNlXG5cdCogTm8gZGVzY3JpcHRpb24gcHJvdmlkZWQgKGdlbmVyYXRlZCBieSBPcGVuYXBpIEdlbmVyYXRvciBodHRwczovL2dpdGh1Yi5jb20vb3BlbmFwaXRvb2xzL29wZW5hcGktZ2VuZXJhdG9yKVxuXHQqXG5cdCogVGhlIHZlcnNpb24gb2YgdGhlIE9wZW5BUEkgZG9jdW1lbnQ6IDEuMS4wXG5cdCpcblx0KlxuXHQqIE5PVEU6IFRoaXMgY2xhc3MgaXMgYXV0byBnZW5lcmF0ZWQgYnkgT3BlbkFQSSBHZW5lcmF0b3IgKGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaCkuXG5cdCogaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoXG5cdCogRG8gbm90IGVkaXQgdGhlIGNsYXNzIG1hbnVhbGx5LlxuXHQqL1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5cdGV4cG9ydHMuUExQQXR0cmlidXRlQ2F0ZWdvcnkgPSB2b2lkIDA7XG5cdGV4cG9ydHMuaW5zdGFuY2VPZlBMUEF0dHJpYnV0ZUNhdGVnb3J5ID0gaW5zdGFuY2VPZlBMUEF0dHJpYnV0ZUNhdGVnb3J5O1xuXHRleHBvcnRzLlBMUEF0dHJpYnV0ZUNhdGVnb3J5RnJvbUpTT04gPSBQTFBBdHRyaWJ1dGVDYXRlZ29yeUZyb21KU09OO1xuXHRleHBvcnRzLlBMUEF0dHJpYnV0ZUNhdGVnb3J5RnJvbUpTT05UeXBlZCA9IFBMUEF0dHJpYnV0ZUNhdGVnb3J5RnJvbUpTT05UeXBlZDtcblx0ZXhwb3J0cy5QTFBBdHRyaWJ1dGVDYXRlZ29yeVRvSlNPTiA9IFBMUEF0dHJpYnV0ZUNhdGVnb3J5VG9KU09OO1xuXHRleHBvcnRzLlBMUEF0dHJpYnV0ZUNhdGVnb3J5VG9KU09OVHlwZWQgPSBQTFBBdHRyaWJ1dGVDYXRlZ29yeVRvSlNPTlR5cGVkO1xuXHQvKipcblx0KlxuXHQqIEBleHBvcnRcblx0KiBAZW51bSB7c3RyaW5nfVxuXHQqL1xuXHR2YXIgUExQQXR0cmlidXRlQ2F0ZWdvcnk7XG5cdChmdW5jdGlvbihQTFBBdHRyaWJ1dGVDYXRlZ29yeSQxKSB7XG5cdFx0UExQQXR0cmlidXRlQ2F0ZWdvcnkkMVtcIlVybFwiXSA9IFwidXJsXCI7XG5cdFx0UExQQXR0cmlidXRlQ2F0ZWdvcnkkMVtcIklkXCJdID0gXCJpZFwiO1xuXHR9KShQTFBBdHRyaWJ1dGVDYXRlZ29yeSB8fCAoZXhwb3J0cy5QTFBBdHRyaWJ1dGVDYXRlZ29yeSA9IFBMUEF0dHJpYnV0ZUNhdGVnb3J5ID0ge30pKTtcblx0ZnVuY3Rpb24gaW5zdGFuY2VPZlBMUEF0dHJpYnV0ZUNhdGVnb3J5KHZhbHVlKSB7XG5cdFx0Zm9yIChjb25zdCBrZXkgaW4gUExQQXR0cmlidXRlQ2F0ZWdvcnkpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoUExQQXR0cmlidXRlQ2F0ZWdvcnksIGtleSkpIHtcblx0XHRcdGlmIChQTFBBdHRyaWJ1dGVDYXRlZ29yeVtrZXldID09PSB2YWx1ZSkgcmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHRmdW5jdGlvbiBQTFBBdHRyaWJ1dGVDYXRlZ29yeUZyb21KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gUExQQXR0cmlidXRlQ2F0ZWdvcnlGcm9tSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBQTFBBdHRyaWJ1dGVDYXRlZ29yeUZyb21KU09OVHlwZWQoanNvbiwgaWdub3JlRGlzY3JpbWluYXRvcikge1xuXHRcdHJldHVybiBqc29uO1xuXHR9XG5cdGZ1bmN0aW9uIFBMUEF0dHJpYnV0ZUNhdGVnb3J5VG9KU09OKHZhbHVlKSB7XG5cdFx0cmV0dXJuIHZhbHVlO1xuXHR9XG5cdGZ1bmN0aW9uIFBMUEF0dHJpYnV0ZUNhdGVnb3J5VG9KU09OVHlwZWQodmFsdWUsIGlnbm9yZURpc2NyaW1pbmF0b3IpIHtcblx0XHRyZXR1cm4gdmFsdWU7XG5cdH1cbn0pIH0pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiAuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL1BMUElkQXR0cmlidXRlcy5qc1xudmFyIHJlcXVpcmVfUExQSWRBdHRyaWJ1dGVzID0gLyogQF9fUFVSRV9fICovIF9fY29tbW9uSlMoeyBcIi4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvUExQSWRBdHRyaWJ1dGVzLmpzXCI6ICgoZXhwb3J0cykgPT4ge1xuXHQvKipcblx0KiBDb21tZXJjZVxuXHQqIE5vIGRlc2NyaXB0aW9uIHByb3ZpZGVkIChnZW5lcmF0ZWQgYnkgT3BlbmFwaSBHZW5lcmF0b3IgaHR0cHM6Ly9naXRodWIuY29tL29wZW5hcGl0b29scy9vcGVuYXBpLWdlbmVyYXRvcilcblx0KlxuXHQqIFRoZSB2ZXJzaW9uIG9mIHRoZSBPcGVuQVBJIGRvY3VtZW50OiAxLjEuMFxuXHQqXG5cdCpcblx0KiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IE9wZW5BUEkgR2VuZXJhdG9yIChodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2gpLlxuXHQqIGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaFxuXHQqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cblx0Ki9cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuXHRleHBvcnRzLmluc3RhbmNlT2ZQTFBJZEF0dHJpYnV0ZXMgPSBpbnN0YW5jZU9mUExQSWRBdHRyaWJ1dGVzO1xuXHRleHBvcnRzLlBMUElkQXR0cmlidXRlc0Zyb21KU09OID0gUExQSWRBdHRyaWJ1dGVzRnJvbUpTT047XG5cdGV4cG9ydHMuUExQSWRBdHRyaWJ1dGVzRnJvbUpTT05UeXBlZCA9IFBMUElkQXR0cmlidXRlc0Zyb21KU09OVHlwZWQ7XG5cdGV4cG9ydHMuUExQSWRBdHRyaWJ1dGVzVG9KU09OID0gUExQSWRBdHRyaWJ1dGVzVG9KU09OO1xuXHRleHBvcnRzLlBMUElkQXR0cmlidXRlc1RvSlNPTlR5cGVkID0gUExQSWRBdHRyaWJ1dGVzVG9KU09OVHlwZWQ7XG5cdC8qKlxuXHQqIENoZWNrIGlmIGEgZ2l2ZW4gb2JqZWN0IGltcGxlbWVudHMgdGhlIFBMUElkQXR0cmlidXRlcyBpbnRlcmZhY2UuXG5cdCovXG5cdGZ1bmN0aW9uIGluc3RhbmNlT2ZQTFBJZEF0dHJpYnV0ZXModmFsdWUpIHtcblx0XHRpZiAoIShcImlkXCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wiaWRcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdGZ1bmN0aW9uIFBMUElkQXR0cmlidXRlc0Zyb21KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gUExQSWRBdHRyaWJ1dGVzRnJvbUpTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gUExQSWRBdHRyaWJ1dGVzRnJvbUpTT05UeXBlZChqc29uLCBpZ25vcmVEaXNjcmltaW5hdG9yKSB7XG5cdFx0aWYgKGpzb24gPT0gbnVsbCkgcmV0dXJuIGpzb247XG5cdFx0cmV0dXJuIHsgXCJpZFwiOiBqc29uW1wiaWRcIl0gfTtcblx0fVxuXHRmdW5jdGlvbiBQTFBJZEF0dHJpYnV0ZXNUb0pTT04oanNvbikge1xuXHRcdHJldHVybiBQTFBJZEF0dHJpYnV0ZXNUb0pTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gUExQSWRBdHRyaWJ1dGVzVG9KU09OVHlwZWQodmFsdWUsIGlnbm9yZURpc2NyaW1pbmF0b3IgPSBmYWxzZSkge1xuXHRcdGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gdmFsdWU7XG5cdFx0cmV0dXJuIHsgXCJpZFwiOiB2YWx1ZVtcImlkXCJdIH07XG5cdH1cbn0pIH0pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiAuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL1BMUFVybEF0dHJpYnV0ZXMuanNcbnZhciByZXF1aXJlX1BMUFVybEF0dHJpYnV0ZXMgPSAvKiBAX19QVVJFX18gKi8gX19jb21tb25KUyh7IFwiLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9QTFBVcmxBdHRyaWJ1dGVzLmpzXCI6ICgoZXhwb3J0cykgPT4ge1xuXHQvKipcblx0KiBDb21tZXJjZVxuXHQqIE5vIGRlc2NyaXB0aW9uIHByb3ZpZGVkIChnZW5lcmF0ZWQgYnkgT3BlbmFwaSBHZW5lcmF0b3IgaHR0cHM6Ly9naXRodWIuY29tL29wZW5hcGl0b29scy9vcGVuYXBpLWdlbmVyYXRvcilcblx0KlxuXHQqIFRoZSB2ZXJzaW9uIG9mIHRoZSBPcGVuQVBJIGRvY3VtZW50OiAxLjEuMFxuXHQqXG5cdCpcblx0KiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IE9wZW5BUEkgR2VuZXJhdG9yIChodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2gpLlxuXHQqIGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaFxuXHQqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cblx0Ki9cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuXHRleHBvcnRzLmluc3RhbmNlT2ZQTFBVcmxBdHRyaWJ1dGVzID0gaW5zdGFuY2VPZlBMUFVybEF0dHJpYnV0ZXM7XG5cdGV4cG9ydHMuUExQVXJsQXR0cmlidXRlc0Zyb21KU09OID0gUExQVXJsQXR0cmlidXRlc0Zyb21KU09OO1xuXHRleHBvcnRzLlBMUFVybEF0dHJpYnV0ZXNGcm9tSlNPTlR5cGVkID0gUExQVXJsQXR0cmlidXRlc0Zyb21KU09OVHlwZWQ7XG5cdGV4cG9ydHMuUExQVXJsQXR0cmlidXRlc1RvSlNPTiA9IFBMUFVybEF0dHJpYnV0ZXNUb0pTT047XG5cdGV4cG9ydHMuUExQVXJsQXR0cmlidXRlc1RvSlNPTlR5cGVkID0gUExQVXJsQXR0cmlidXRlc1RvSlNPTlR5cGVkO1xuXHQvKipcblx0KiBDaGVjayBpZiBhIGdpdmVuIG9iamVjdCBpbXBsZW1lbnRzIHRoZSBQTFBVcmxBdHRyaWJ1dGVzIGludGVyZmFjZS5cblx0Ki9cblx0ZnVuY3Rpb24gaW5zdGFuY2VPZlBMUFVybEF0dHJpYnV0ZXModmFsdWUpIHtcblx0XHRpZiAoIShcInVybFwiIGluIHZhbHVlKSB8fCB2YWx1ZVtcInVybFwiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0ZnVuY3Rpb24gUExQVXJsQXR0cmlidXRlc0Zyb21KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gUExQVXJsQXR0cmlidXRlc0Zyb21KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIFBMUFVybEF0dHJpYnV0ZXNGcm9tSlNPTlR5cGVkKGpzb24sIGlnbm9yZURpc2NyaW1pbmF0b3IpIHtcblx0XHRpZiAoanNvbiA9PSBudWxsKSByZXR1cm4ganNvbjtcblx0XHRyZXR1cm4geyBcInVybFwiOiBqc29uW1widXJsXCJdIH07XG5cdH1cblx0ZnVuY3Rpb24gUExQVXJsQXR0cmlidXRlc1RvSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIFBMUFVybEF0dHJpYnV0ZXNUb0pTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gUExQVXJsQXR0cmlidXRlc1RvSlNPTlR5cGVkKHZhbHVlLCBpZ25vcmVEaXNjcmltaW5hdG9yID0gZmFsc2UpIHtcblx0XHRpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIHZhbHVlO1xuXHRcdHJldHVybiB7IFwidXJsXCI6IHZhbHVlW1widXJsXCJdIH07XG5cdH1cbn0pIH0pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiAuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL1BMUEF0dHJpYnV0ZXNBdHRyaWJ1dGVzLmpzXG52YXIgcmVxdWlyZV9QTFBBdHRyaWJ1dGVzQXR0cmlidXRlcyA9IC8qIEBfX1BVUkVfXyAqLyBfX2NvbW1vbkpTKHsgXCIuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL1BMUEF0dHJpYnV0ZXNBdHRyaWJ1dGVzLmpzXCI6ICgoZXhwb3J0cykgPT4ge1xuXHQvKipcblx0KiBDb21tZXJjZVxuXHQqIE5vIGRlc2NyaXB0aW9uIHByb3ZpZGVkIChnZW5lcmF0ZWQgYnkgT3BlbmFwaSBHZW5lcmF0b3IgaHR0cHM6Ly9naXRodWIuY29tL29wZW5hcGl0b29scy9vcGVuYXBpLWdlbmVyYXRvcilcblx0KlxuXHQqIFRoZSB2ZXJzaW9uIG9mIHRoZSBPcGVuQVBJIGRvY3VtZW50OiAxLjEuMFxuXHQqXG5cdCpcblx0KiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IE9wZW5BUEkgR2VuZXJhdG9yIChodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2gpLlxuXHQqIGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaFxuXHQqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cblx0Ki9cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuXHRleHBvcnRzLlBMUEF0dHJpYnV0ZXNBdHRyaWJ1dGVzRnJvbUpTT04gPSBQTFBBdHRyaWJ1dGVzQXR0cmlidXRlc0Zyb21KU09OO1xuXHRleHBvcnRzLlBMUEF0dHJpYnV0ZXNBdHRyaWJ1dGVzRnJvbUpTT05UeXBlZCA9IFBMUEF0dHJpYnV0ZXNBdHRyaWJ1dGVzRnJvbUpTT05UeXBlZDtcblx0ZXhwb3J0cy5QTFBBdHRyaWJ1dGVzQXR0cmlidXRlc1RvSlNPTiA9IFBMUEF0dHJpYnV0ZXNBdHRyaWJ1dGVzVG9KU09OO1xuXHRleHBvcnRzLlBMUEF0dHJpYnV0ZXNBdHRyaWJ1dGVzVG9KU09OVHlwZWQgPSBQTFBBdHRyaWJ1dGVzQXR0cmlidXRlc1RvSlNPTlR5cGVkO1xuXHRjb25zdCBQTFBJZEF0dHJpYnV0ZXNfMSA9IHJlcXVpcmVfUExQSWRBdHRyaWJ1dGVzKCk7XG5cdGNvbnN0IFBMUFVybEF0dHJpYnV0ZXNfMSA9IHJlcXVpcmVfUExQVXJsQXR0cmlidXRlcygpO1xuXHRmdW5jdGlvbiBQTFBBdHRyaWJ1dGVzQXR0cmlidXRlc0Zyb21KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gUExQQXR0cmlidXRlc0F0dHJpYnV0ZXNGcm9tSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBQTFBBdHRyaWJ1dGVzQXR0cmlidXRlc0Zyb21KU09OVHlwZWQoanNvbiwgaWdub3JlRGlzY3JpbWluYXRvcikge1xuXHRcdGlmIChqc29uID09IG51bGwpIHJldHVybiBqc29uO1xuXHRcdGlmICgoMCwgUExQSWRBdHRyaWJ1dGVzXzEuaW5zdGFuY2VPZlBMUElkQXR0cmlidXRlcykoanNvbikpIHJldHVybiAoMCwgUExQSWRBdHRyaWJ1dGVzXzEuUExQSWRBdHRyaWJ1dGVzRnJvbUpTT05UeXBlZCkoanNvbiwgdHJ1ZSk7XG5cdFx0aWYgKCgwLCBQTFBVcmxBdHRyaWJ1dGVzXzEuaW5zdGFuY2VPZlBMUFVybEF0dHJpYnV0ZXMpKGpzb24pKSByZXR1cm4gKDAsIFBMUFVybEF0dHJpYnV0ZXNfMS5QTFBVcmxBdHRyaWJ1dGVzRnJvbUpTT05UeXBlZCkoanNvbiwgdHJ1ZSk7XG5cdFx0cmV0dXJuIHt9O1xuXHR9XG5cdGZ1bmN0aW9uIFBMUEF0dHJpYnV0ZXNBdHRyaWJ1dGVzVG9KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gUExQQXR0cmlidXRlc0F0dHJpYnV0ZXNUb0pTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gUExQQXR0cmlidXRlc0F0dHJpYnV0ZXNUb0pTT05UeXBlZCh2YWx1ZSwgaWdub3JlRGlzY3JpbWluYXRvciA9IGZhbHNlKSB7XG5cdFx0aWYgKHZhbHVlID09IG51bGwpIHJldHVybiB2YWx1ZTtcblx0XHRpZiAoKDAsIFBMUElkQXR0cmlidXRlc18xLmluc3RhbmNlT2ZQTFBJZEF0dHJpYnV0ZXMpKHZhbHVlKSkgcmV0dXJuICgwLCBQTFBJZEF0dHJpYnV0ZXNfMS5QTFBJZEF0dHJpYnV0ZXNUb0pTT04pKHZhbHVlKTtcblx0XHRpZiAoKDAsIFBMUFVybEF0dHJpYnV0ZXNfMS5pbnN0YW5jZU9mUExQVXJsQXR0cmlidXRlcykodmFsdWUpKSByZXR1cm4gKDAsIFBMUFVybEF0dHJpYnV0ZXNfMS5QTFBVcmxBdHRyaWJ1dGVzVG9KU09OKSh2YWx1ZSk7XG5cdFx0cmV0dXJuIHt9O1xuXHR9XG59KSB9KTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9QTFBBdHRyaWJ1dGVzLmpzXG52YXIgcmVxdWlyZV9QTFBBdHRyaWJ1dGVzID0gLyogQF9fUFVSRV9fICovIF9fY29tbW9uSlMoeyBcIi4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvUExQQXR0cmlidXRlcy5qc1wiOiAoKGV4cG9ydHMpID0+IHtcblx0LyoqXG5cdCogQ29tbWVyY2Vcblx0KiBObyBkZXNjcmlwdGlvbiBwcm92aWRlZCAoZ2VuZXJhdGVkIGJ5IE9wZW5hcGkgR2VuZXJhdG9yIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuYXBpdG9vbHMvb3BlbmFwaS1nZW5lcmF0b3IpXG5cdCpcblx0KiBUaGUgdmVyc2lvbiBvZiB0aGUgT3BlbkFQSSBkb2N1bWVudDogMS4xLjBcblx0KlxuXHQqXG5cdCogTk9URTogVGhpcyBjbGFzcyBpcyBhdXRvIGdlbmVyYXRlZCBieSBPcGVuQVBJIEdlbmVyYXRvciAoaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoKS5cblx0KiBodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2hcblx0KiBEbyBub3QgZWRpdCB0aGUgY2xhc3MgbWFudWFsbHkuXG5cdCovXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcblx0ZXhwb3J0cy5pbnN0YW5jZU9mUExQQXR0cmlidXRlcyA9IGluc3RhbmNlT2ZQTFBBdHRyaWJ1dGVzO1xuXHRleHBvcnRzLlBMUEF0dHJpYnV0ZXNGcm9tSlNPTiA9IFBMUEF0dHJpYnV0ZXNGcm9tSlNPTjtcblx0ZXhwb3J0cy5QTFBBdHRyaWJ1dGVzRnJvbUpTT05UeXBlZCA9IFBMUEF0dHJpYnV0ZXNGcm9tSlNPTlR5cGVkO1xuXHRleHBvcnRzLlBMUEF0dHJpYnV0ZXNUb0pTT04gPSBQTFBBdHRyaWJ1dGVzVG9KU09OO1xuXHRleHBvcnRzLlBMUEF0dHJpYnV0ZXNUb0pTT05UeXBlZCA9IFBMUEF0dHJpYnV0ZXNUb0pTT05UeXBlZDtcblx0Y29uc3QgUExQQXR0cmlidXRlQ2F0ZWdvcnlfMSA9IHJlcXVpcmVfUExQQXR0cmlidXRlQ2F0ZWdvcnkoKTtcblx0Y29uc3QgUExQQXR0cmlidXRlc0F0dHJpYnV0ZXNfMSA9IHJlcXVpcmVfUExQQXR0cmlidXRlc0F0dHJpYnV0ZXMoKTtcblx0LyoqXG5cdCogQ2hlY2sgaWYgYSBnaXZlbiBvYmplY3QgaW1wbGVtZW50cyB0aGUgUExQQXR0cmlidXRlcyBpbnRlcmZhY2UuXG5cdCovXG5cdGZ1bmN0aW9uIGluc3RhbmNlT2ZQTFBBdHRyaWJ1dGVzKHZhbHVlKSB7XG5cdFx0aWYgKCEoXCJhdHRyaWJ1dGVzXCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wiYXR0cmlidXRlc1wiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0aWYgKCEoXCJjYXRlZ29yeVwiIGluIHZhbHVlKSB8fCB2YWx1ZVtcImNhdGVnb3J5XCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHRmdW5jdGlvbiBQTFBBdHRyaWJ1dGVzRnJvbUpTT04oanNvbikge1xuXHRcdHJldHVybiBQTFBBdHRyaWJ1dGVzRnJvbUpTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gUExQQXR0cmlidXRlc0Zyb21KU09OVHlwZWQoanNvbiwgaWdub3JlRGlzY3JpbWluYXRvcikge1xuXHRcdGlmIChqc29uID09IG51bGwpIHJldHVybiBqc29uO1xuXHRcdHJldHVybiB7XG5cdFx0XHRcImF0dHJpYnV0ZXNcIjogKDAsIFBMUEF0dHJpYnV0ZXNBdHRyaWJ1dGVzXzEuUExQQXR0cmlidXRlc0F0dHJpYnV0ZXNGcm9tSlNPTikoanNvbltcImF0dHJpYnV0ZXNcIl0pLFxuXHRcdFx0XCJjYXRlZ29yeVwiOiAoMCwgUExQQXR0cmlidXRlQ2F0ZWdvcnlfMS5QTFBBdHRyaWJ1dGVDYXRlZ29yeUZyb21KU09OKShqc29uW1wiY2F0ZWdvcnlcIl0pXG5cdFx0fTtcblx0fVxuXHRmdW5jdGlvbiBQTFBBdHRyaWJ1dGVzVG9KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gUExQQXR0cmlidXRlc1RvSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBQTFBBdHRyaWJ1dGVzVG9KU09OVHlwZWQodmFsdWUsIGlnbm9yZURpc2NyaW1pbmF0b3IgPSBmYWxzZSkge1xuXHRcdGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gdmFsdWU7XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwiYXR0cmlidXRlc1wiOiAoMCwgUExQQXR0cmlidXRlc0F0dHJpYnV0ZXNfMS5QTFBBdHRyaWJ1dGVzQXR0cmlidXRlc1RvSlNPTikodmFsdWVbXCJhdHRyaWJ1dGVzXCJdKSxcblx0XHRcdFwiY2F0ZWdvcnlcIjogKDAsIFBMUEF0dHJpYnV0ZUNhdGVnb3J5XzEuUExQQXR0cmlidXRlQ2F0ZWdvcnlUb0pTT04pKHZhbHVlW1wiY2F0ZWdvcnlcIl0pXG5cdFx0fTtcblx0fVxufSkgfSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIC4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvUGFnZVZpc2l0Q2F0ZWdvcnkuanNcbnZhciByZXF1aXJlX1BhZ2VWaXNpdENhdGVnb3J5ID0gLyogQF9fUFVSRV9fICovIF9fY29tbW9uSlMoeyBcIi4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvUGFnZVZpc2l0Q2F0ZWdvcnkuanNcIjogKChleHBvcnRzKSA9PiB7XG5cdC8qKlxuXHQqIENvbW1lcmNlXG5cdCogTm8gZGVzY3JpcHRpb24gcHJvdmlkZWQgKGdlbmVyYXRlZCBieSBPcGVuYXBpIEdlbmVyYXRvciBodHRwczovL2dpdGh1Yi5jb20vb3BlbmFwaXRvb2xzL29wZW5hcGktZ2VuZXJhdG9yKVxuXHQqXG5cdCogVGhlIHZlcnNpb24gb2YgdGhlIE9wZW5BUEkgZG9jdW1lbnQ6IDEuMS4wXG5cdCpcblx0KlxuXHQqIE5PVEU6IFRoaXMgY2xhc3MgaXMgYXV0byBnZW5lcmF0ZWQgYnkgT3BlbkFQSSBHZW5lcmF0b3IgKGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaCkuXG5cdCogaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoXG5cdCogRG8gbm90IGVkaXQgdGhlIGNsYXNzIG1hbnVhbGx5LlxuXHQqL1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5cdGV4cG9ydHMuUGFnZVZpc2l0Q2F0ZWdvcnkgPSB2b2lkIDA7XG5cdGV4cG9ydHMuaW5zdGFuY2VPZlBhZ2VWaXNpdENhdGVnb3J5ID0gaW5zdGFuY2VPZlBhZ2VWaXNpdENhdGVnb3J5O1xuXHRleHBvcnRzLlBhZ2VWaXNpdENhdGVnb3J5RnJvbUpTT04gPSBQYWdlVmlzaXRDYXRlZ29yeUZyb21KU09OO1xuXHRleHBvcnRzLlBhZ2VWaXNpdENhdGVnb3J5RnJvbUpTT05UeXBlZCA9IFBhZ2VWaXNpdENhdGVnb3J5RnJvbUpTT05UeXBlZDtcblx0ZXhwb3J0cy5QYWdlVmlzaXRDYXRlZ29yeVRvSlNPTiA9IFBhZ2VWaXNpdENhdGVnb3J5VG9KU09OO1xuXHRleHBvcnRzLlBhZ2VWaXNpdENhdGVnb3J5VG9KU09OVHlwZWQgPSBQYWdlVmlzaXRDYXRlZ29yeVRvSlNPTlR5cGVkO1xuXHQvKipcblx0KlxuXHQqIEBleHBvcnRcblx0KiBAZW51bSB7c3RyaW5nfVxuXHQqL1xuXHR2YXIgUGFnZVZpc2l0Q2F0ZWdvcnkkMTtcblx0KGZ1bmN0aW9uKFBhZ2VWaXNpdENhdGVnb3J5JDIpIHtcblx0XHRQYWdlVmlzaXRDYXRlZ29yeSQyW1wiSGVscFwiXSA9IFwiaGVscFwiO1xuXHRcdFBhZ2VWaXNpdENhdGVnb3J5JDJbXCJIb21lcGFnZVwiXSA9IFwiaG9tZXBhZ2VcIjtcblx0XHRQYWdlVmlzaXRDYXRlZ29yeSQyW1wiT3RoZXJcIl0gPSBcIm90aGVyXCI7XG5cdFx0UGFnZVZpc2l0Q2F0ZWdvcnkkMltcIlByb2R1Y3RMaWtlXCJdID0gXCJwcm9kdWN0X2xpa2VcIjtcblx0XHRQYWdlVmlzaXRDYXRlZ29yeSQyW1wiU2VhcmNoXCJdID0gXCJzZWFyY2hcIjtcblx0fSkoUGFnZVZpc2l0Q2F0ZWdvcnkkMSB8fCAoZXhwb3J0cy5QYWdlVmlzaXRDYXRlZ29yeSA9IFBhZ2VWaXNpdENhdGVnb3J5JDEgPSB7fSkpO1xuXHRmdW5jdGlvbiBpbnN0YW5jZU9mUGFnZVZpc2l0Q2F0ZWdvcnkodmFsdWUpIHtcblx0XHRmb3IgKGNvbnN0IGtleSBpbiBQYWdlVmlzaXRDYXRlZ29yeSQxKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFBhZ2VWaXNpdENhdGVnb3J5JDEsIGtleSkpIHtcblx0XHRcdGlmIChQYWdlVmlzaXRDYXRlZ29yeSQxW2tleV0gPT09IHZhbHVlKSByZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGZ1bmN0aW9uIFBhZ2VWaXNpdENhdGVnb3J5RnJvbUpTT04oanNvbikge1xuXHRcdHJldHVybiBQYWdlVmlzaXRDYXRlZ29yeUZyb21KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIFBhZ2VWaXNpdENhdGVnb3J5RnJvbUpTT05UeXBlZChqc29uLCBpZ25vcmVEaXNjcmltaW5hdG9yKSB7XG5cdFx0cmV0dXJuIGpzb247XG5cdH1cblx0ZnVuY3Rpb24gUGFnZVZpc2l0Q2F0ZWdvcnlUb0pTT04odmFsdWUpIHtcblx0XHRyZXR1cm4gdmFsdWU7XG5cdH1cblx0ZnVuY3Rpb24gUGFnZVZpc2l0Q2F0ZWdvcnlUb0pTT05UeXBlZCh2YWx1ZSwgaWdub3JlRGlzY3JpbWluYXRvcikge1xuXHRcdHJldHVybiB2YWx1ZTtcblx0fVxufSkgfSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIC4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvUGFnZVZpc2l0QXR0cmlidXRlcy5qc1xudmFyIHJlcXVpcmVfUGFnZVZpc2l0QXR0cmlidXRlcyA9IC8qIEBfX1BVUkVfXyAqLyBfX2NvbW1vbkpTKHsgXCIuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL1BhZ2VWaXNpdEF0dHJpYnV0ZXMuanNcIjogKChleHBvcnRzKSA9PiB7XG5cdC8qKlxuXHQqIENvbW1lcmNlXG5cdCogTm8gZGVzY3JpcHRpb24gcHJvdmlkZWQgKGdlbmVyYXRlZCBieSBPcGVuYXBpIEdlbmVyYXRvciBodHRwczovL2dpdGh1Yi5jb20vb3BlbmFwaXRvb2xzL29wZW5hcGktZ2VuZXJhdG9yKVxuXHQqXG5cdCogVGhlIHZlcnNpb24gb2YgdGhlIE9wZW5BUEkgZG9jdW1lbnQ6IDEuMS4wXG5cdCpcblx0KlxuXHQqIE5PVEU6IFRoaXMgY2xhc3MgaXMgYXV0byBnZW5lcmF0ZWQgYnkgT3BlbkFQSSBHZW5lcmF0b3IgKGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaCkuXG5cdCogaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoXG5cdCogRG8gbm90IGVkaXQgdGhlIGNsYXNzIG1hbnVhbGx5LlxuXHQqL1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5cdGV4cG9ydHMuaW5zdGFuY2VPZlBhZ2VWaXNpdEF0dHJpYnV0ZXMgPSBpbnN0YW5jZU9mUGFnZVZpc2l0QXR0cmlidXRlcztcblx0ZXhwb3J0cy5QYWdlVmlzaXRBdHRyaWJ1dGVzRnJvbUpTT04gPSBQYWdlVmlzaXRBdHRyaWJ1dGVzRnJvbUpTT047XG5cdGV4cG9ydHMuUGFnZVZpc2l0QXR0cmlidXRlc0Zyb21KU09OVHlwZWQgPSBQYWdlVmlzaXRBdHRyaWJ1dGVzRnJvbUpTT05UeXBlZDtcblx0ZXhwb3J0cy5QYWdlVmlzaXRBdHRyaWJ1dGVzVG9KU09OID0gUGFnZVZpc2l0QXR0cmlidXRlc1RvSlNPTjtcblx0ZXhwb3J0cy5QYWdlVmlzaXRBdHRyaWJ1dGVzVG9KU09OVHlwZWQgPSBQYWdlVmlzaXRBdHRyaWJ1dGVzVG9KU09OVHlwZWQ7XG5cdGNvbnN0IFBhZ2VWaXNpdENhdGVnb3J5XzEgPSByZXF1aXJlX1BhZ2VWaXNpdENhdGVnb3J5KCk7XG5cdC8qKlxuXHQqIENoZWNrIGlmIGEgZ2l2ZW4gb2JqZWN0IGltcGxlbWVudHMgdGhlIFBhZ2VWaXNpdEF0dHJpYnV0ZXMgaW50ZXJmYWNlLlxuXHQqL1xuXHRmdW5jdGlvbiBpbnN0YW5jZU9mUGFnZVZpc2l0QXR0cmlidXRlcyh2YWx1ZSkge1xuXHRcdGlmICghKFwicGFnZV92aXNpdF9jYXRlZ29yeVwiIGluIHZhbHVlKSB8fCB2YWx1ZVtcInBhZ2VfdmlzaXRfY2F0ZWdvcnlcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdGlmICghKFwidXJsXCIgaW4gdmFsdWUpIHx8IHZhbHVlW1widXJsXCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHRmdW5jdGlvbiBQYWdlVmlzaXRBdHRyaWJ1dGVzRnJvbUpTT04oanNvbikge1xuXHRcdHJldHVybiBQYWdlVmlzaXRBdHRyaWJ1dGVzRnJvbUpTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gUGFnZVZpc2l0QXR0cmlidXRlc0Zyb21KU09OVHlwZWQoanNvbiwgaWdub3JlRGlzY3JpbWluYXRvcikge1xuXHRcdGlmIChqc29uID09IG51bGwpIHJldHVybiBqc29uO1xuXHRcdHJldHVybiB7XG5cdFx0XHRcInBhZ2VfdmlzaXRfY2F0ZWdvcnlcIjogKDAsIFBhZ2VWaXNpdENhdGVnb3J5XzEuUGFnZVZpc2l0Q2F0ZWdvcnlGcm9tSlNPTikoanNvbltcInBhZ2VfdmlzaXRfY2F0ZWdvcnlcIl0pLFxuXHRcdFx0XCJ1cmxcIjoganNvbltcInVybFwiXVxuXHRcdH07XG5cdH1cblx0ZnVuY3Rpb24gUGFnZVZpc2l0QXR0cmlidXRlc1RvSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIFBhZ2VWaXNpdEF0dHJpYnV0ZXNUb0pTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gUGFnZVZpc2l0QXR0cmlidXRlc1RvSlNPTlR5cGVkKHZhbHVlLCBpZ25vcmVEaXNjcmltaW5hdG9yID0gZmFsc2UpIHtcblx0XHRpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIHZhbHVlO1xuXHRcdHJldHVybiB7XG5cdFx0XHRcInBhZ2VfdmlzaXRfY2F0ZWdvcnlcIjogKDAsIFBhZ2VWaXNpdENhdGVnb3J5XzEuUGFnZVZpc2l0Q2F0ZWdvcnlUb0pTT04pKHZhbHVlW1wicGFnZV92aXNpdF9jYXRlZ29yeVwiXSksXG5cdFx0XHRcInVybFwiOiB2YWx1ZVtcInVybFwiXVxuXHRcdH07XG5cdH1cbn0pIH0pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiAuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL1F1ZXJ5VHlwZWRBdHRyaWJ1dGVzLmpzXG52YXIgcmVxdWlyZV9RdWVyeVR5cGVkQXR0cmlidXRlcyA9IC8qIEBfX1BVUkVfXyAqLyBfX2NvbW1vbkpTKHsgXCIuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL1F1ZXJ5VHlwZWRBdHRyaWJ1dGVzLmpzXCI6ICgoZXhwb3J0cykgPT4ge1xuXHQvKipcblx0KiBDb21tZXJjZVxuXHQqIE5vIGRlc2NyaXB0aW9uIHByb3ZpZGVkIChnZW5lcmF0ZWQgYnkgT3BlbmFwaSBHZW5lcmF0b3IgaHR0cHM6Ly9naXRodWIuY29tL29wZW5hcGl0b29scy9vcGVuYXBpLWdlbmVyYXRvcilcblx0KlxuXHQqIFRoZSB2ZXJzaW9uIG9mIHRoZSBPcGVuQVBJIGRvY3VtZW50OiAxLjEuMFxuXHQqXG5cdCpcblx0KiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IE9wZW5BUEkgR2VuZXJhdG9yIChodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2gpLlxuXHQqIGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaFxuXHQqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cblx0Ki9cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuXHRleHBvcnRzLmluc3RhbmNlT2ZRdWVyeVR5cGVkQXR0cmlidXRlcyA9IGluc3RhbmNlT2ZRdWVyeVR5cGVkQXR0cmlidXRlcztcblx0ZXhwb3J0cy5RdWVyeVR5cGVkQXR0cmlidXRlc0Zyb21KU09OID0gUXVlcnlUeXBlZEF0dHJpYnV0ZXNGcm9tSlNPTjtcblx0ZXhwb3J0cy5RdWVyeVR5cGVkQXR0cmlidXRlc0Zyb21KU09OVHlwZWQgPSBRdWVyeVR5cGVkQXR0cmlidXRlc0Zyb21KU09OVHlwZWQ7XG5cdGV4cG9ydHMuUXVlcnlUeXBlZEF0dHJpYnV0ZXNUb0pTT04gPSBRdWVyeVR5cGVkQXR0cmlidXRlc1RvSlNPTjtcblx0ZXhwb3J0cy5RdWVyeVR5cGVkQXR0cmlidXRlc1RvSlNPTlR5cGVkID0gUXVlcnlUeXBlZEF0dHJpYnV0ZXNUb0pTT05UeXBlZDtcblx0LyoqXG5cdCogQ2hlY2sgaWYgYSBnaXZlbiBvYmplY3QgaW1wbGVtZW50cyB0aGUgUXVlcnlUeXBlZEF0dHJpYnV0ZXMgaW50ZXJmYWNlLlxuXHQqL1xuXHRmdW5jdGlvbiBpbnN0YW5jZU9mUXVlcnlUeXBlZEF0dHJpYnV0ZXModmFsdWUpIHtcblx0XHRpZiAoIShcInF1ZXJ5XCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wicXVlcnlcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdGZ1bmN0aW9uIFF1ZXJ5VHlwZWRBdHRyaWJ1dGVzRnJvbUpTT04oanNvbikge1xuXHRcdHJldHVybiBRdWVyeVR5cGVkQXR0cmlidXRlc0Zyb21KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIFF1ZXJ5VHlwZWRBdHRyaWJ1dGVzRnJvbUpTT05UeXBlZChqc29uLCBpZ25vcmVEaXNjcmltaW5hdG9yKSB7XG5cdFx0aWYgKGpzb24gPT0gbnVsbCkgcmV0dXJuIGpzb247XG5cdFx0cmV0dXJuIHsgXCJxdWVyeVwiOiBqc29uW1wicXVlcnlcIl0gfTtcblx0fVxuXHRmdW5jdGlvbiBRdWVyeVR5cGVkQXR0cmlidXRlc1RvSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIFF1ZXJ5VHlwZWRBdHRyaWJ1dGVzVG9KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIFF1ZXJ5VHlwZWRBdHRyaWJ1dGVzVG9KU09OVHlwZWQodmFsdWUsIGlnbm9yZURpc2NyaW1pbmF0b3IgPSBmYWxzZSkge1xuXHRcdGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gdmFsdWU7XG5cdFx0cmV0dXJuIHsgXCJxdWVyeVwiOiB2YWx1ZVtcInF1ZXJ5XCJdIH07XG5cdH1cbn0pIH0pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiAuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL1NlYXJjaEF0dHJpYnV0ZXMuanNcbnZhciByZXF1aXJlX1NlYXJjaEF0dHJpYnV0ZXMgPSAvKiBAX19QVVJFX18gKi8gX19jb21tb25KUyh7IFwiLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9TZWFyY2hBdHRyaWJ1dGVzLmpzXCI6ICgoZXhwb3J0cykgPT4ge1xuXHQvKipcblx0KiBDb21tZXJjZVxuXHQqIE5vIGRlc2NyaXB0aW9uIHByb3ZpZGVkIChnZW5lcmF0ZWQgYnkgT3BlbmFwaSBHZW5lcmF0b3IgaHR0cHM6Ly9naXRodWIuY29tL29wZW5hcGl0b29scy9vcGVuYXBpLWdlbmVyYXRvcilcblx0KlxuXHQqIFRoZSB2ZXJzaW9uIG9mIHRoZSBPcGVuQVBJIGRvY3VtZW50OiAxLjEuMFxuXHQqXG5cdCpcblx0KiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IE9wZW5BUEkgR2VuZXJhdG9yIChodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2gpLlxuXHQqIGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaFxuXHQqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cblx0Ki9cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuXHRleHBvcnRzLmluc3RhbmNlT2ZTZWFyY2hBdHRyaWJ1dGVzID0gaW5zdGFuY2VPZlNlYXJjaEF0dHJpYnV0ZXM7XG5cdGV4cG9ydHMuU2VhcmNoQXR0cmlidXRlc0Zyb21KU09OID0gU2VhcmNoQXR0cmlidXRlc0Zyb21KU09OO1xuXHRleHBvcnRzLlNlYXJjaEF0dHJpYnV0ZXNGcm9tSlNPTlR5cGVkID0gU2VhcmNoQXR0cmlidXRlc0Zyb21KU09OVHlwZWQ7XG5cdGV4cG9ydHMuU2VhcmNoQXR0cmlidXRlc1RvSlNPTiA9IFNlYXJjaEF0dHJpYnV0ZXNUb0pTT047XG5cdGV4cG9ydHMuU2VhcmNoQXR0cmlidXRlc1RvSlNPTlR5cGVkID0gU2VhcmNoQXR0cmlidXRlc1RvSlNPTlR5cGVkO1xuXHQvKipcblx0KiBDaGVjayBpZiBhIGdpdmVuIG9iamVjdCBpbXBsZW1lbnRzIHRoZSBTZWFyY2hBdHRyaWJ1dGVzIGludGVyZmFjZS5cblx0Ki9cblx0ZnVuY3Rpb24gaW5zdGFuY2VPZlNlYXJjaEF0dHJpYnV0ZXModmFsdWUpIHtcblx0XHRpZiAoIShcInNlYXJjaF90ZXJtXCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wic2VhcmNoX3Rlcm1cIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdGZ1bmN0aW9uIFNlYXJjaEF0dHJpYnV0ZXNGcm9tSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIFNlYXJjaEF0dHJpYnV0ZXNGcm9tSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBTZWFyY2hBdHRyaWJ1dGVzRnJvbUpTT05UeXBlZChqc29uLCBpZ25vcmVEaXNjcmltaW5hdG9yKSB7XG5cdFx0aWYgKGpzb24gPT0gbnVsbCkgcmV0dXJuIGpzb247XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwic2VhcmNoX3Rlcm1cIjoganNvbltcInNlYXJjaF90ZXJtXCJdLFxuXHRcdFx0XCJzZWxlY3RlZF9maWx0ZXJzXCI6IGpzb25bXCJzZWxlY3RlZF9maWx0ZXJzXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wic2VsZWN0ZWRfZmlsdGVyc1wiXVxuXHRcdH07XG5cdH1cblx0ZnVuY3Rpb24gU2VhcmNoQXR0cmlidXRlc1RvSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIFNlYXJjaEF0dHJpYnV0ZXNUb0pTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gU2VhcmNoQXR0cmlidXRlc1RvSlNPTlR5cGVkKHZhbHVlLCBpZ25vcmVEaXNjcmltaW5hdG9yID0gZmFsc2UpIHtcblx0XHRpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIHZhbHVlO1xuXHRcdHJldHVybiB7XG5cdFx0XHRcInNlYXJjaF90ZXJtXCI6IHZhbHVlW1wic2VhcmNoX3Rlcm1cIl0sXG5cdFx0XHRcInNlbGVjdGVkX2ZpbHRlcnNcIjogdmFsdWVbXCJzZWxlY3RlZF9maWx0ZXJzXCJdXG5cdFx0fTtcblx0fVxufSkgfSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIC4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvU3VnZ2VzdGlvbkNsaWNrZWRBdHRyaWJ1dGVzLmpzXG52YXIgcmVxdWlyZV9TdWdnZXN0aW9uQ2xpY2tlZEF0dHJpYnV0ZXMgPSAvKiBAX19QVVJFX18gKi8gX19jb21tb25KUyh7IFwiLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9TdWdnZXN0aW9uQ2xpY2tlZEF0dHJpYnV0ZXMuanNcIjogKChleHBvcnRzKSA9PiB7XG5cdC8qKlxuXHQqIENvbW1lcmNlXG5cdCogTm8gZGVzY3JpcHRpb24gcHJvdmlkZWQgKGdlbmVyYXRlZCBieSBPcGVuYXBpIEdlbmVyYXRvciBodHRwczovL2dpdGh1Yi5jb20vb3BlbmFwaXRvb2xzL29wZW5hcGktZ2VuZXJhdG9yKVxuXHQqXG5cdCogVGhlIHZlcnNpb24gb2YgdGhlIE9wZW5BUEkgZG9jdW1lbnQ6IDEuMS4wXG5cdCpcblx0KlxuXHQqIE5PVEU6IFRoaXMgY2xhc3MgaXMgYXV0byBnZW5lcmF0ZWQgYnkgT3BlbkFQSSBHZW5lcmF0b3IgKGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaCkuXG5cdCogaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoXG5cdCogRG8gbm90IGVkaXQgdGhlIGNsYXNzIG1hbnVhbGx5LlxuXHQqL1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5cdGV4cG9ydHMuaW5zdGFuY2VPZlN1Z2dlc3Rpb25DbGlja2VkQXR0cmlidXRlcyA9IGluc3RhbmNlT2ZTdWdnZXN0aW9uQ2xpY2tlZEF0dHJpYnV0ZXM7XG5cdGV4cG9ydHMuU3VnZ2VzdGlvbkNsaWNrZWRBdHRyaWJ1dGVzRnJvbUpTT04gPSBTdWdnZXN0aW9uQ2xpY2tlZEF0dHJpYnV0ZXNGcm9tSlNPTjtcblx0ZXhwb3J0cy5TdWdnZXN0aW9uQ2xpY2tlZEF0dHJpYnV0ZXNGcm9tSlNPTlR5cGVkID0gU3VnZ2VzdGlvbkNsaWNrZWRBdHRyaWJ1dGVzRnJvbUpTT05UeXBlZDtcblx0ZXhwb3J0cy5TdWdnZXN0aW9uQ2xpY2tlZEF0dHJpYnV0ZXNUb0pTT04gPSBTdWdnZXN0aW9uQ2xpY2tlZEF0dHJpYnV0ZXNUb0pTT047XG5cdGV4cG9ydHMuU3VnZ2VzdGlvbkNsaWNrZWRBdHRyaWJ1dGVzVG9KU09OVHlwZWQgPSBTdWdnZXN0aW9uQ2xpY2tlZEF0dHJpYnV0ZXNUb0pTT05UeXBlZDtcblx0LyoqXG5cdCogQ2hlY2sgaWYgYSBnaXZlbiBvYmplY3QgaW1wbGVtZW50cyB0aGUgU3VnZ2VzdGlvbkNsaWNrZWRBdHRyaWJ1dGVzIGludGVyZmFjZS5cblx0Ki9cblx0ZnVuY3Rpb24gaW5zdGFuY2VPZlN1Z2dlc3Rpb25DbGlja2VkQXR0cmlidXRlcyh2YWx1ZSkge1xuXHRcdGlmICghKFwic3VnZ2VzdGlvbl9pZFwiIGluIHZhbHVlKSB8fCB2YWx1ZVtcInN1Z2dlc3Rpb25faWRcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdGZ1bmN0aW9uIFN1Z2dlc3Rpb25DbGlja2VkQXR0cmlidXRlc0Zyb21KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gU3VnZ2VzdGlvbkNsaWNrZWRBdHRyaWJ1dGVzRnJvbUpTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gU3VnZ2VzdGlvbkNsaWNrZWRBdHRyaWJ1dGVzRnJvbUpTT05UeXBlZChqc29uLCBpZ25vcmVEaXNjcmltaW5hdG9yKSB7XG5cdFx0aWYgKGpzb24gPT0gbnVsbCkgcmV0dXJuIGpzb247XG5cdFx0cmV0dXJuIHsgXCJzdWdnZXN0aW9uX2lkXCI6IGpzb25bXCJzdWdnZXN0aW9uX2lkXCJdIH07XG5cdH1cblx0ZnVuY3Rpb24gU3VnZ2VzdGlvbkNsaWNrZWRBdHRyaWJ1dGVzVG9KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gU3VnZ2VzdGlvbkNsaWNrZWRBdHRyaWJ1dGVzVG9KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIFN1Z2dlc3Rpb25DbGlja2VkQXR0cmlidXRlc1RvSlNPTlR5cGVkKHZhbHVlLCBpZ25vcmVEaXNjcmltaW5hdG9yID0gZmFsc2UpIHtcblx0XHRpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIHZhbHVlO1xuXHRcdHJldHVybiB7IFwic3VnZ2VzdGlvbl9pZFwiOiB2YWx1ZVtcInN1Z2dlc3Rpb25faWRcIl0gfTtcblx0fVxufSkgfSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIC4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvVXNlckV2ZW50QXR0cmlidXRlcy5qc1xudmFyIHJlcXVpcmVfVXNlckV2ZW50QXR0cmlidXRlcyA9IC8qIEBfX1BVUkVfXyAqLyBfX2NvbW1vbkpTKHsgXCIuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL1VzZXJFdmVudEF0dHJpYnV0ZXMuanNcIjogKChleHBvcnRzKSA9PiB7XG5cdC8qKlxuXHQqIENvbW1lcmNlXG5cdCogTm8gZGVzY3JpcHRpb24gcHJvdmlkZWQgKGdlbmVyYXRlZCBieSBPcGVuYXBpIEdlbmVyYXRvciBodHRwczovL2dpdGh1Yi5jb20vb3BlbmFwaXRvb2xzL29wZW5hcGktZ2VuZXJhdG9yKVxuXHQqXG5cdCogVGhlIHZlcnNpb24gb2YgdGhlIE9wZW5BUEkgZG9jdW1lbnQ6IDEuMS4wXG5cdCpcblx0KlxuXHQqIE5PVEU6IFRoaXMgY2xhc3MgaXMgYXV0byBnZW5lcmF0ZWQgYnkgT3BlbkFQSSBHZW5lcmF0b3IgKGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaCkuXG5cdCogaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoXG5cdCogRG8gbm90IGVkaXQgdGhlIGNsYXNzIG1hbnVhbGx5LlxuXHQqL1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5cdGV4cG9ydHMuVXNlckV2ZW50QXR0cmlidXRlc0Zyb21KU09OID0gVXNlckV2ZW50QXR0cmlidXRlc0Zyb21KU09OO1xuXHRleHBvcnRzLlVzZXJFdmVudEF0dHJpYnV0ZXNGcm9tSlNPTlR5cGVkID0gVXNlckV2ZW50QXR0cmlidXRlc0Zyb21KU09OVHlwZWQ7XG5cdGV4cG9ydHMuVXNlckV2ZW50QXR0cmlidXRlc1RvSlNPTiA9IFVzZXJFdmVudEF0dHJpYnV0ZXNUb0pTT047XG5cdGV4cG9ydHMuVXNlckV2ZW50QXR0cmlidXRlc1RvSlNPTlR5cGVkID0gVXNlckV2ZW50QXR0cmlidXRlc1RvSlNPTlR5cGVkO1xuXHRjb25zdCBGb3JtU3VibWl0dGVkQXR0cmlidXRlc18xID0gcmVxdWlyZV9Gb3JtU3VibWl0dGVkQXR0cmlidXRlcygpO1xuXHRjb25zdCBQRFBBdHRyaWJ1dGVzXzEkMSA9IHJlcXVpcmVfUERQQXR0cmlidXRlcygpO1xuXHRjb25zdCBQTFBBdHRyaWJ1dGVzXzEkMSA9IHJlcXVpcmVfUExQQXR0cmlidXRlcygpO1xuXHRjb25zdCBQYWdlVmlzaXRBdHRyaWJ1dGVzXzEgPSByZXF1aXJlX1BhZ2VWaXNpdEF0dHJpYnV0ZXMoKTtcblx0Y29uc3QgUXVlcnlUeXBlZEF0dHJpYnV0ZXNfMSA9IHJlcXVpcmVfUXVlcnlUeXBlZEF0dHJpYnV0ZXMoKTtcblx0Y29uc3QgU2VhcmNoQXR0cmlidXRlc18xID0gcmVxdWlyZV9TZWFyY2hBdHRyaWJ1dGVzKCk7XG5cdGNvbnN0IFN1Z2dlc3Rpb25DbGlja2VkQXR0cmlidXRlc18xID0gcmVxdWlyZV9TdWdnZXN0aW9uQ2xpY2tlZEF0dHJpYnV0ZXMoKTtcblx0ZnVuY3Rpb24gVXNlckV2ZW50QXR0cmlidXRlc0Zyb21KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gVXNlckV2ZW50QXR0cmlidXRlc0Zyb21KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIFVzZXJFdmVudEF0dHJpYnV0ZXNGcm9tSlNPTlR5cGVkKGpzb24sIGlnbm9yZURpc2NyaW1pbmF0b3IpIHtcblx0XHRpZiAoanNvbiA9PSBudWxsKSByZXR1cm4ganNvbjtcblx0XHRpZiAoKDAsIEZvcm1TdWJtaXR0ZWRBdHRyaWJ1dGVzXzEuaW5zdGFuY2VPZkZvcm1TdWJtaXR0ZWRBdHRyaWJ1dGVzKShqc29uKSkgcmV0dXJuICgwLCBGb3JtU3VibWl0dGVkQXR0cmlidXRlc18xLkZvcm1TdWJtaXR0ZWRBdHRyaWJ1dGVzRnJvbUpTT05UeXBlZCkoanNvbiwgdHJ1ZSk7XG5cdFx0aWYgKCgwLCBQRFBBdHRyaWJ1dGVzXzEkMS5pbnN0YW5jZU9mUERQQXR0cmlidXRlcykoanNvbikpIHJldHVybiAoMCwgUERQQXR0cmlidXRlc18xJDEuUERQQXR0cmlidXRlc0Zyb21KU09OVHlwZWQpKGpzb24sIHRydWUpO1xuXHRcdGlmICgoMCwgUExQQXR0cmlidXRlc18xJDEuaW5zdGFuY2VPZlBMUEF0dHJpYnV0ZXMpKGpzb24pKSByZXR1cm4gKDAsIFBMUEF0dHJpYnV0ZXNfMSQxLlBMUEF0dHJpYnV0ZXNGcm9tSlNPTlR5cGVkKShqc29uLCB0cnVlKTtcblx0XHRpZiAoKDAsIFBhZ2VWaXNpdEF0dHJpYnV0ZXNfMS5pbnN0YW5jZU9mUGFnZVZpc2l0QXR0cmlidXRlcykoanNvbikpIHJldHVybiAoMCwgUGFnZVZpc2l0QXR0cmlidXRlc18xLlBhZ2VWaXNpdEF0dHJpYnV0ZXNGcm9tSlNPTlR5cGVkKShqc29uLCB0cnVlKTtcblx0XHRpZiAoKDAsIFF1ZXJ5VHlwZWRBdHRyaWJ1dGVzXzEuaW5zdGFuY2VPZlF1ZXJ5VHlwZWRBdHRyaWJ1dGVzKShqc29uKSkgcmV0dXJuICgwLCBRdWVyeVR5cGVkQXR0cmlidXRlc18xLlF1ZXJ5VHlwZWRBdHRyaWJ1dGVzRnJvbUpTT05UeXBlZCkoanNvbiwgdHJ1ZSk7XG5cdFx0aWYgKCgwLCBTZWFyY2hBdHRyaWJ1dGVzXzEuaW5zdGFuY2VPZlNlYXJjaEF0dHJpYnV0ZXMpKGpzb24pKSByZXR1cm4gKDAsIFNlYXJjaEF0dHJpYnV0ZXNfMS5TZWFyY2hBdHRyaWJ1dGVzRnJvbUpTT05UeXBlZCkoanNvbiwgdHJ1ZSk7XG5cdFx0aWYgKCgwLCBTdWdnZXN0aW9uQ2xpY2tlZEF0dHJpYnV0ZXNfMS5pbnN0YW5jZU9mU3VnZ2VzdGlvbkNsaWNrZWRBdHRyaWJ1dGVzKShqc29uKSkgcmV0dXJuICgwLCBTdWdnZXN0aW9uQ2xpY2tlZEF0dHJpYnV0ZXNfMS5TdWdnZXN0aW9uQ2xpY2tlZEF0dHJpYnV0ZXNGcm9tSlNPTlR5cGVkKShqc29uLCB0cnVlKTtcblx0XHRyZXR1cm4ge307XG5cdH1cblx0ZnVuY3Rpb24gVXNlckV2ZW50QXR0cmlidXRlc1RvSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIFVzZXJFdmVudEF0dHJpYnV0ZXNUb0pTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gVXNlckV2ZW50QXR0cmlidXRlc1RvSlNPTlR5cGVkKHZhbHVlLCBpZ25vcmVEaXNjcmltaW5hdG9yID0gZmFsc2UpIHtcblx0XHRpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIHZhbHVlO1xuXHRcdGlmICgoMCwgRm9ybVN1Ym1pdHRlZEF0dHJpYnV0ZXNfMS5pbnN0YW5jZU9mRm9ybVN1Ym1pdHRlZEF0dHJpYnV0ZXMpKHZhbHVlKSkgcmV0dXJuICgwLCBGb3JtU3VibWl0dGVkQXR0cmlidXRlc18xLkZvcm1TdWJtaXR0ZWRBdHRyaWJ1dGVzVG9KU09OKSh2YWx1ZSk7XG5cdFx0aWYgKCgwLCBQRFBBdHRyaWJ1dGVzXzEkMS5pbnN0YW5jZU9mUERQQXR0cmlidXRlcykodmFsdWUpKSByZXR1cm4gKDAsIFBEUEF0dHJpYnV0ZXNfMSQxLlBEUEF0dHJpYnV0ZXNUb0pTT04pKHZhbHVlKTtcblx0XHRpZiAoKDAsIFBMUEF0dHJpYnV0ZXNfMSQxLmluc3RhbmNlT2ZQTFBBdHRyaWJ1dGVzKSh2YWx1ZSkpIHJldHVybiAoMCwgUExQQXR0cmlidXRlc18xJDEuUExQQXR0cmlidXRlc1RvSlNPTikodmFsdWUpO1xuXHRcdGlmICgoMCwgUGFnZVZpc2l0QXR0cmlidXRlc18xLmluc3RhbmNlT2ZQYWdlVmlzaXRBdHRyaWJ1dGVzKSh2YWx1ZSkpIHJldHVybiAoMCwgUGFnZVZpc2l0QXR0cmlidXRlc18xLlBhZ2VWaXNpdEF0dHJpYnV0ZXNUb0pTT04pKHZhbHVlKTtcblx0XHRpZiAoKDAsIFF1ZXJ5VHlwZWRBdHRyaWJ1dGVzXzEuaW5zdGFuY2VPZlF1ZXJ5VHlwZWRBdHRyaWJ1dGVzKSh2YWx1ZSkpIHJldHVybiAoMCwgUXVlcnlUeXBlZEF0dHJpYnV0ZXNfMS5RdWVyeVR5cGVkQXR0cmlidXRlc1RvSlNPTikodmFsdWUpO1xuXHRcdGlmICgoMCwgU2VhcmNoQXR0cmlidXRlc18xLmluc3RhbmNlT2ZTZWFyY2hBdHRyaWJ1dGVzKSh2YWx1ZSkpIHJldHVybiAoMCwgU2VhcmNoQXR0cmlidXRlc18xLlNlYXJjaEF0dHJpYnV0ZXNUb0pTT04pKHZhbHVlKTtcblx0XHRpZiAoKDAsIFN1Z2dlc3Rpb25DbGlja2VkQXR0cmlidXRlc18xLmluc3RhbmNlT2ZTdWdnZXN0aW9uQ2xpY2tlZEF0dHJpYnV0ZXMpKHZhbHVlKSkgcmV0dXJuICgwLCBTdWdnZXN0aW9uQ2xpY2tlZEF0dHJpYnV0ZXNfMS5TdWdnZXN0aW9uQ2xpY2tlZEF0dHJpYnV0ZXNUb0pTT04pKHZhbHVlKTtcblx0XHRyZXR1cm4ge307XG5cdH1cbn0pIH0pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiAuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL1VzZXJFdmVudC5qc1xudmFyIHJlcXVpcmVfVXNlckV2ZW50ID0gLyogQF9fUFVSRV9fICovIF9fY29tbW9uSlMoeyBcIi4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvVXNlckV2ZW50LmpzXCI6ICgoZXhwb3J0cykgPT4ge1xuXHQvKipcblx0KiBDb21tZXJjZVxuXHQqIE5vIGRlc2NyaXB0aW9uIHByb3ZpZGVkIChnZW5lcmF0ZWQgYnkgT3BlbmFwaSBHZW5lcmF0b3IgaHR0cHM6Ly9naXRodWIuY29tL29wZW5hcGl0b29scy9vcGVuYXBpLWdlbmVyYXRvcilcblx0KlxuXHQqIFRoZSB2ZXJzaW9uIG9mIHRoZSBPcGVuQVBJIGRvY3VtZW50OiAxLjEuMFxuXHQqXG5cdCpcblx0KiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IE9wZW5BUEkgR2VuZXJhdG9yIChodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2gpLlxuXHQqIGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaFxuXHQqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cblx0Ki9cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuXHRleHBvcnRzLmluc3RhbmNlT2ZVc2VyRXZlbnQgPSBpbnN0YW5jZU9mVXNlckV2ZW50O1xuXHRleHBvcnRzLlVzZXJFdmVudEZyb21KU09OID0gVXNlckV2ZW50RnJvbUpTT047XG5cdGV4cG9ydHMuVXNlckV2ZW50RnJvbUpTT05UeXBlZCA9IFVzZXJFdmVudEZyb21KU09OVHlwZWQ7XG5cdGV4cG9ydHMuVXNlckV2ZW50VG9KU09OID0gVXNlckV2ZW50VG9KU09OO1xuXHRleHBvcnRzLlVzZXJFdmVudFRvSlNPTlR5cGVkID0gVXNlckV2ZW50VG9KU09OVHlwZWQ7XG5cdGNvbnN0IFVzZXJFdmVudENhdGVnb3J5XzEgPSByZXF1aXJlX1VzZXJFdmVudENhdGVnb3J5KCk7XG5cdGNvbnN0IFVzZXJFdmVudEF0dHJpYnV0ZXNfMSA9IHJlcXVpcmVfVXNlckV2ZW50QXR0cmlidXRlcygpO1xuXHQvKipcblx0KiBDaGVjayBpZiBhIGdpdmVuIG9iamVjdCBpbXBsZW1lbnRzIHRoZSBVc2VyRXZlbnQgaW50ZXJmYWNlLlxuXHQqL1xuXHRmdW5jdGlvbiBpbnN0YW5jZU9mVXNlckV2ZW50KHZhbHVlKSB7XG5cdFx0aWYgKCEoXCJjYXRlZ29yeVwiIGluIHZhbHVlKSB8fCB2YWx1ZVtcImNhdGVnb3J5XCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRpZiAoIShcImNyZWF0ZWRfYXRcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJjcmVhdGVkX2F0XCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRpZiAoIShcImV2ZW50X2lkXCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wiZXZlbnRfaWRcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdGZ1bmN0aW9uIFVzZXJFdmVudEZyb21KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gVXNlckV2ZW50RnJvbUpTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gVXNlckV2ZW50RnJvbUpTT05UeXBlZChqc29uLCBpZ25vcmVEaXNjcmltaW5hdG9yKSB7XG5cdFx0aWYgKGpzb24gPT0gbnVsbCkgcmV0dXJuIGpzb247XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwiYXR0cmlidXRlc1wiOiBqc29uW1wiYXR0cmlidXRlc1wiXSA9PSBudWxsID8gdm9pZCAwIDogKDAsIFVzZXJFdmVudEF0dHJpYnV0ZXNfMS5Vc2VyRXZlbnRBdHRyaWJ1dGVzRnJvbUpTT04pKGpzb25bXCJhdHRyaWJ1dGVzXCJdKSxcblx0XHRcdFwiY2F0ZWdvcnlcIjogKDAsIFVzZXJFdmVudENhdGVnb3J5XzEuVXNlckV2ZW50Q2F0ZWdvcnlGcm9tSlNPTikoanNvbltcImNhdGVnb3J5XCJdKSxcblx0XHRcdFwiY3JlYXRlZF9hdFwiOiBqc29uW1wiY3JlYXRlZF9hdFwiXSxcblx0XHRcdFwiZXZlbnRfaWRcIjoganNvbltcImV2ZW50X2lkXCJdXG5cdFx0fTtcblx0fVxuXHRmdW5jdGlvbiBVc2VyRXZlbnRUb0pTT04oanNvbikge1xuXHRcdHJldHVybiBVc2VyRXZlbnRUb0pTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gVXNlckV2ZW50VG9KU09OVHlwZWQodmFsdWUsIGlnbm9yZURpc2NyaW1pbmF0b3IgPSBmYWxzZSkge1xuXHRcdGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gdmFsdWU7XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwiYXR0cmlidXRlc1wiOiAoMCwgVXNlckV2ZW50QXR0cmlidXRlc18xLlVzZXJFdmVudEF0dHJpYnV0ZXNUb0pTT04pKHZhbHVlW1wiYXR0cmlidXRlc1wiXSksXG5cdFx0XHRcImNhdGVnb3J5XCI6ICgwLCBVc2VyRXZlbnRDYXRlZ29yeV8xLlVzZXJFdmVudENhdGVnb3J5VG9KU09OKSh2YWx1ZVtcImNhdGVnb3J5XCJdKSxcblx0XHRcdFwiY3JlYXRlZF9hdFwiOiB2YWx1ZVtcImNyZWF0ZWRfYXRcIl0sXG5cdFx0XHRcImV2ZW50X2lkXCI6IHZhbHVlW1wiZXZlbnRfaWRcIl1cblx0XHR9O1xuXHR9XG59KSB9KTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9OZXh0TWVzc2FnZVJlcXVlc3QuanNcbnZhciByZXF1aXJlX05leHRNZXNzYWdlUmVxdWVzdCA9IC8qIEBfX1BVUkVfXyAqLyBfX2NvbW1vbkpTKHsgXCIuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL05leHRNZXNzYWdlUmVxdWVzdC5qc1wiOiAoKGV4cG9ydHMpID0+IHtcblx0LyoqXG5cdCogQ29tbWVyY2Vcblx0KiBObyBkZXNjcmlwdGlvbiBwcm92aWRlZCAoZ2VuZXJhdGVkIGJ5IE9wZW5hcGkgR2VuZXJhdG9yIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuYXBpdG9vbHMvb3BlbmFwaS1nZW5lcmF0b3IpXG5cdCpcblx0KiBUaGUgdmVyc2lvbiBvZiB0aGUgT3BlbkFQSSBkb2N1bWVudDogMS4xLjBcblx0KlxuXHQqXG5cdCogTk9URTogVGhpcyBjbGFzcyBpcyBhdXRvIGdlbmVyYXRlZCBieSBPcGVuQVBJIEdlbmVyYXRvciAoaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoKS5cblx0KiBodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2hcblx0KiBEbyBub3QgZWRpdCB0aGUgY2xhc3MgbWFudWFsbHkuXG5cdCovXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcblx0ZXhwb3J0cy5pbnN0YW5jZU9mTmV4dE1lc3NhZ2VSZXF1ZXN0ID0gaW5zdGFuY2VPZk5leHRNZXNzYWdlUmVxdWVzdDtcblx0ZXhwb3J0cy5OZXh0TWVzc2FnZVJlcXVlc3RGcm9tSlNPTiA9IE5leHRNZXNzYWdlUmVxdWVzdEZyb21KU09OO1xuXHRleHBvcnRzLk5leHRNZXNzYWdlUmVxdWVzdEZyb21KU09OVHlwZWQgPSBOZXh0TWVzc2FnZVJlcXVlc3RGcm9tSlNPTlR5cGVkO1xuXHRleHBvcnRzLk5leHRNZXNzYWdlUmVxdWVzdFRvSlNPTiA9IE5leHRNZXNzYWdlUmVxdWVzdFRvSlNPTjtcblx0ZXhwb3J0cy5OZXh0TWVzc2FnZVJlcXVlc3RUb0pTT05UeXBlZCA9IE5leHRNZXNzYWdlUmVxdWVzdFRvSlNPTlR5cGVkO1xuXHRjb25zdCBDb250ZXh0XzEkMyA9IHJlcXVpcmVfQ29udGV4dCgpO1xuXHRjb25zdCBHZW5lcmF0aW9uUGFyYW1zXzEgPSByZXF1aXJlX0dlbmVyYXRpb25QYXJhbXMoKTtcblx0Y29uc3QgVXNlckV2ZW50XzEkMyA9IHJlcXVpcmVfVXNlckV2ZW50KCk7XG5cdC8qKlxuXHQqIENoZWNrIGlmIGEgZ2l2ZW4gb2JqZWN0IGltcGxlbWVudHMgdGhlIE5leHRNZXNzYWdlUmVxdWVzdCBpbnRlcmZhY2UuXG5cdCovXG5cdGZ1bmN0aW9uIGluc3RhbmNlT2ZOZXh0TWVzc2FnZVJlcXVlc3QodmFsdWUpIHtcblx0XHRpZiAoIShcImNvbnRleHRcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJjb250ZXh0XCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRpZiAoIShcImlkXCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wiaWRcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdGZ1bmN0aW9uIE5leHRNZXNzYWdlUmVxdWVzdEZyb21KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gTmV4dE1lc3NhZ2VSZXF1ZXN0RnJvbUpTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gTmV4dE1lc3NhZ2VSZXF1ZXN0RnJvbUpTT05UeXBlZChqc29uLCBpZ25vcmVEaXNjcmltaW5hdG9yKSB7XG5cdFx0aWYgKGpzb24gPT0gbnVsbCkgcmV0dXJuIGpzb247XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwiY29udGV4dFwiOiAoMCwgQ29udGV4dF8xJDMuQ29udGV4dEZyb21KU09OKShqc29uW1wiY29udGV4dFwiXSksXG5cdFx0XHRcImZlYXR1cmVfZmxhZ3NcIjoganNvbltcImZlYXR1cmVfZmxhZ3NcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IGpzb25bXCJmZWF0dXJlX2ZsYWdzXCJdLFxuXHRcdFx0XCJnZW5lcmF0aW9uX3BhcmFtc1wiOiBqc29uW1wiZ2VuZXJhdGlvbl9wYXJhbXNcIl0gPT0gbnVsbCA/IHZvaWQgMCA6ICgwLCBHZW5lcmF0aW9uUGFyYW1zXzEuR2VuZXJhdGlvblBhcmFtc0Zyb21KU09OKShqc29uW1wiZ2VuZXJhdGlvbl9wYXJhbXNcIl0pLFxuXHRcdFx0XCJpZFwiOiBqc29uW1wiaWRcIl0sXG5cdFx0XHRcIm9yZ19iYXNlX2NvbmZpZ192ZXJzaW9uXCI6IGpzb25bXCJvcmdfYmFzZV9jb25maWdfdmVyc2lvblwiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcIm9yZ19iYXNlX2NvbmZpZ192ZXJzaW9uXCJdLFxuXHRcdFx0XCJ1c2VyX2V2ZW50c1wiOiBqc29uW1widXNlcl9ldmVudHNcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IGpzb25bXCJ1c2VyX2V2ZW50c1wiXS5tYXAoVXNlckV2ZW50XzEkMy5Vc2VyRXZlbnRGcm9tSlNPTilcblx0XHR9O1xuXHR9XG5cdGZ1bmN0aW9uIE5leHRNZXNzYWdlUmVxdWVzdFRvSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIE5leHRNZXNzYWdlUmVxdWVzdFRvSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBOZXh0TWVzc2FnZVJlcXVlc3RUb0pTT05UeXBlZCh2YWx1ZSwgaWdub3JlRGlzY3JpbWluYXRvciA9IGZhbHNlKSB7XG5cdFx0aWYgKHZhbHVlID09IG51bGwpIHJldHVybiB2YWx1ZTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0XCJjb250ZXh0XCI6ICgwLCBDb250ZXh0XzEkMy5Db250ZXh0VG9KU09OKSh2YWx1ZVtcImNvbnRleHRcIl0pLFxuXHRcdFx0XCJmZWF0dXJlX2ZsYWdzXCI6IHZhbHVlW1wiZmVhdHVyZV9mbGFnc1wiXSxcblx0XHRcdFwiZ2VuZXJhdGlvbl9wYXJhbXNcIjogKDAsIEdlbmVyYXRpb25QYXJhbXNfMS5HZW5lcmF0aW9uUGFyYW1zVG9KU09OKSh2YWx1ZVtcImdlbmVyYXRpb25fcGFyYW1zXCJdKSxcblx0XHRcdFwiaWRcIjogdmFsdWVbXCJpZFwiXSxcblx0XHRcdFwib3JnX2Jhc2VfY29uZmlnX3ZlcnNpb25cIjogdmFsdWVbXCJvcmdfYmFzZV9jb25maWdfdmVyc2lvblwiXSxcblx0XHRcdFwidXNlcl9ldmVudHNcIjogdmFsdWVbXCJ1c2VyX2V2ZW50c1wiXSA9PSBudWxsID8gdm9pZCAwIDogdmFsdWVbXCJ1c2VyX2V2ZW50c1wiXS5tYXAoVXNlckV2ZW50XzEkMy5Vc2VyRXZlbnRUb0pTT04pXG5cdFx0fTtcblx0fVxufSkgfSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIC4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvT3JkZXJJdGVtSW5mby5qc1xudmFyIHJlcXVpcmVfT3JkZXJJdGVtSW5mbyA9IC8qIEBfX1BVUkVfXyAqLyBfX2NvbW1vbkpTKHsgXCIuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL09yZGVySXRlbUluZm8uanNcIjogKChleHBvcnRzKSA9PiB7XG5cdC8qKlxuXHQqIENvbW1lcmNlXG5cdCogTm8gZGVzY3JpcHRpb24gcHJvdmlkZWQgKGdlbmVyYXRlZCBieSBPcGVuYXBpIEdlbmVyYXRvciBodHRwczovL2dpdGh1Yi5jb20vb3BlbmFwaXRvb2xzL29wZW5hcGktZ2VuZXJhdG9yKVxuXHQqXG5cdCogVGhlIHZlcnNpb24gb2YgdGhlIE9wZW5BUEkgZG9jdW1lbnQ6IDEuMS4wXG5cdCpcblx0KlxuXHQqIE5PVEU6IFRoaXMgY2xhc3MgaXMgYXV0byBnZW5lcmF0ZWQgYnkgT3BlbkFQSSBHZW5lcmF0b3IgKGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaCkuXG5cdCogaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoXG5cdCogRG8gbm90IGVkaXQgdGhlIGNsYXNzIG1hbnVhbGx5LlxuXHQqL1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5cdGV4cG9ydHMuaW5zdGFuY2VPZk9yZGVySXRlbUluZm8gPSBpbnN0YW5jZU9mT3JkZXJJdGVtSW5mbztcblx0ZXhwb3J0cy5PcmRlckl0ZW1JbmZvRnJvbUpTT04gPSBPcmRlckl0ZW1JbmZvRnJvbUpTT047XG5cdGV4cG9ydHMuT3JkZXJJdGVtSW5mb0Zyb21KU09OVHlwZWQgPSBPcmRlckl0ZW1JbmZvRnJvbUpTT05UeXBlZDtcblx0ZXhwb3J0cy5PcmRlckl0ZW1JbmZvVG9KU09OID0gT3JkZXJJdGVtSW5mb1RvSlNPTjtcblx0ZXhwb3J0cy5PcmRlckl0ZW1JbmZvVG9KU09OVHlwZWQgPSBPcmRlckl0ZW1JbmZvVG9KU09OVHlwZWQ7XG5cdC8qKlxuXHQqIENoZWNrIGlmIGEgZ2l2ZW4gb2JqZWN0IGltcGxlbWVudHMgdGhlIE9yZGVySXRlbUluZm8gaW50ZXJmYWNlLlxuXHQqL1xuXHRmdW5jdGlvbiBpbnN0YW5jZU9mT3JkZXJJdGVtSW5mbyh2YWx1ZSkge1xuXHRcdGlmICghKFwiaXRlbV9wcmljZVwiIGluIHZhbHVlKSB8fCB2YWx1ZVtcIml0ZW1fcHJpY2VcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdGlmICghKFwiaXRlbV9xdWFudGl0eVwiIGluIHZhbHVlKSB8fCB2YWx1ZVtcIml0ZW1fcXVhbnRpdHlcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdGlmICghKFwiaXRlbV90aXRsZVwiIGluIHZhbHVlKSB8fCB2YWx1ZVtcIml0ZW1fdGl0bGVcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdGlmICghKFwib3JkZXJfaXRlbV9pZFwiIGluIHZhbHVlKSB8fCB2YWx1ZVtcIm9yZGVyX2l0ZW1faWRcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdGZ1bmN0aW9uIE9yZGVySXRlbUluZm9Gcm9tSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIE9yZGVySXRlbUluZm9Gcm9tSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBPcmRlckl0ZW1JbmZvRnJvbUpTT05UeXBlZChqc29uLCBpZ25vcmVEaXNjcmltaW5hdG9yKSB7XG5cdFx0aWYgKGpzb24gPT0gbnVsbCkgcmV0dXJuIGpzb247XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwiZGVsaXZlcmVkX2F0XCI6IGpzb25bXCJkZWxpdmVyZWRfYXRcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IG5ldyBEYXRlKGpzb25bXCJkZWxpdmVyZWRfYXRcIl0pLFxuXHRcdFx0XCJlc3RpbWF0ZWRfZGVsaXZlcnlfYXRcIjoganNvbltcImVzdGltYXRlZF9kZWxpdmVyeV9hdFwiXSA9PSBudWxsID8gdm9pZCAwIDogbmV3IERhdGUoanNvbltcImVzdGltYXRlZF9kZWxpdmVyeV9hdFwiXSksXG5cdFx0XHRcImZ1bGZpbGxtZW50X2Rpc3BsYXlfc3RhdHVzXCI6IGpzb25bXCJmdWxmaWxsbWVudF9kaXNwbGF5X3N0YXR1c1wiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcImZ1bGZpbGxtZW50X2Rpc3BsYXlfc3RhdHVzXCJdLFxuXHRcdFx0XCJpbWFnZVwiOiBqc29uW1wiaW1hZ2VcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IGpzb25bXCJpbWFnZVwiXSxcblx0XHRcdFwiaW5fdHJhbnNpdF9hdFwiOiBqc29uW1wiaW5fdHJhbnNpdF9hdFwiXSA9PSBudWxsID8gdm9pZCAwIDogbmV3IERhdGUoanNvbltcImluX3RyYW5zaXRfYXRcIl0pLFxuXHRcdFx0XCJpdGVtX3ByaWNlXCI6IGpzb25bXCJpdGVtX3ByaWNlXCJdLFxuXHRcdFx0XCJpdGVtX3F1YW50aXR5XCI6IGpzb25bXCJpdGVtX3F1YW50aXR5XCJdLFxuXHRcdFx0XCJpdGVtX3RpdGxlXCI6IGpzb25bXCJpdGVtX3RpdGxlXCJdLFxuXHRcdFx0XCJvcmRlcl9pdGVtX2lkXCI6IGpzb25bXCJvcmRlcl9pdGVtX2lkXCJdLFxuXHRcdFx0XCJ0cmFja2luZ191cmxcIjoganNvbltcInRyYWNraW5nX3VybFwiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcInRyYWNraW5nX3VybFwiXVxuXHRcdH07XG5cdH1cblx0ZnVuY3Rpb24gT3JkZXJJdGVtSW5mb1RvSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIE9yZGVySXRlbUluZm9Ub0pTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gT3JkZXJJdGVtSW5mb1RvSlNPTlR5cGVkKHZhbHVlLCBpZ25vcmVEaXNjcmltaW5hdG9yID0gZmFsc2UpIHtcblx0XHRpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIHZhbHVlO1xuXHRcdHJldHVybiB7XG5cdFx0XHRcImRlbGl2ZXJlZF9hdFwiOiB2YWx1ZVtcImRlbGl2ZXJlZF9hdFwiXSA9PSBudWxsID8gdm9pZCAwIDogdmFsdWVbXCJkZWxpdmVyZWRfYXRcIl0udG9JU09TdHJpbmcoKSxcblx0XHRcdFwiZXN0aW1hdGVkX2RlbGl2ZXJ5X2F0XCI6IHZhbHVlW1wiZXN0aW1hdGVkX2RlbGl2ZXJ5X2F0XCJdID09IG51bGwgPyB2b2lkIDAgOiB2YWx1ZVtcImVzdGltYXRlZF9kZWxpdmVyeV9hdFwiXS50b0lTT1N0cmluZygpLFxuXHRcdFx0XCJmdWxmaWxsbWVudF9kaXNwbGF5X3N0YXR1c1wiOiB2YWx1ZVtcImZ1bGZpbGxtZW50X2Rpc3BsYXlfc3RhdHVzXCJdLFxuXHRcdFx0XCJpbWFnZVwiOiB2YWx1ZVtcImltYWdlXCJdLFxuXHRcdFx0XCJpbl90cmFuc2l0X2F0XCI6IHZhbHVlW1wiaW5fdHJhbnNpdF9hdFwiXSA9PSBudWxsID8gdm9pZCAwIDogdmFsdWVbXCJpbl90cmFuc2l0X2F0XCJdLnRvSVNPU3RyaW5nKCksXG5cdFx0XHRcIml0ZW1fcHJpY2VcIjogdmFsdWVbXCJpdGVtX3ByaWNlXCJdLFxuXHRcdFx0XCJpdGVtX3F1YW50aXR5XCI6IHZhbHVlW1wiaXRlbV9xdWFudGl0eVwiXSxcblx0XHRcdFwiaXRlbV90aXRsZVwiOiB2YWx1ZVtcIml0ZW1fdGl0bGVcIl0sXG5cdFx0XHRcIm9yZGVyX2l0ZW1faWRcIjogdmFsdWVbXCJvcmRlcl9pdGVtX2lkXCJdLFxuXHRcdFx0XCJ0cmFja2luZ191cmxcIjogdmFsdWVbXCJ0cmFja2luZ191cmxcIl1cblx0XHR9O1xuXHR9XG59KSB9KTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9PcmRlclJlc3BvbnNlQXR0cmlidXRlcy5qc1xudmFyIHJlcXVpcmVfT3JkZXJSZXNwb25zZUF0dHJpYnV0ZXMgPSAvKiBAX19QVVJFX18gKi8gX19jb21tb25KUyh7IFwiLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9PcmRlclJlc3BvbnNlQXR0cmlidXRlcy5qc1wiOiAoKGV4cG9ydHMpID0+IHtcblx0LyoqXG5cdCogQ29tbWVyY2Vcblx0KiBObyBkZXNjcmlwdGlvbiBwcm92aWRlZCAoZ2VuZXJhdGVkIGJ5IE9wZW5hcGkgR2VuZXJhdG9yIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuYXBpdG9vbHMvb3BlbmFwaS1nZW5lcmF0b3IpXG5cdCpcblx0KiBUaGUgdmVyc2lvbiBvZiB0aGUgT3BlbkFQSSBkb2N1bWVudDogMS4xLjBcblx0KlxuXHQqXG5cdCogTk9URTogVGhpcyBjbGFzcyBpcyBhdXRvIGdlbmVyYXRlZCBieSBPcGVuQVBJIEdlbmVyYXRvciAoaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoKS5cblx0KiBodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2hcblx0KiBEbyBub3QgZWRpdCB0aGUgY2xhc3MgbWFudWFsbHkuXG5cdCovXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcblx0ZXhwb3J0cy5pbnN0YW5jZU9mT3JkZXJSZXNwb25zZUF0dHJpYnV0ZXMgPSBpbnN0YW5jZU9mT3JkZXJSZXNwb25zZUF0dHJpYnV0ZXM7XG5cdGV4cG9ydHMuT3JkZXJSZXNwb25zZUF0dHJpYnV0ZXNGcm9tSlNPTiA9IE9yZGVyUmVzcG9uc2VBdHRyaWJ1dGVzRnJvbUpTT047XG5cdGV4cG9ydHMuT3JkZXJSZXNwb25zZUF0dHJpYnV0ZXNGcm9tSlNPTlR5cGVkID0gT3JkZXJSZXNwb25zZUF0dHJpYnV0ZXNGcm9tSlNPTlR5cGVkO1xuXHRleHBvcnRzLk9yZGVyUmVzcG9uc2VBdHRyaWJ1dGVzVG9KU09OID0gT3JkZXJSZXNwb25zZUF0dHJpYnV0ZXNUb0pTT047XG5cdGV4cG9ydHMuT3JkZXJSZXNwb25zZUF0dHJpYnV0ZXNUb0pTT05UeXBlZCA9IE9yZGVyUmVzcG9uc2VBdHRyaWJ1dGVzVG9KU09OVHlwZWQ7XG5cdGNvbnN0IE9yZGVySXRlbUluZm9fMSA9IHJlcXVpcmVfT3JkZXJJdGVtSW5mbygpO1xuXHQvKipcblx0KiBDaGVjayBpZiBhIGdpdmVuIG9iamVjdCBpbXBsZW1lbnRzIHRoZSBPcmRlclJlc3BvbnNlQXR0cmlidXRlcyBpbnRlcmZhY2UuXG5cdCovXG5cdGZ1bmN0aW9uIGluc3RhbmNlT2ZPcmRlclJlc3BvbnNlQXR0cmlidXRlcyh2YWx1ZSkge1xuXHRcdGlmICghKFwiY3JlYXRlZF9hdFwiIGluIHZhbHVlKSB8fCB2YWx1ZVtcImNyZWF0ZWRfYXRcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdGlmICghKFwibGF0ZXN0X2V2ZW50X2RhdGVcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJsYXRlc3RfZXZlbnRfZGF0ZVwiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0aWYgKCEoXCJsaW5lX2l0ZW1zXCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wibGluZV9pdGVtc1wiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0aWYgKCEoXCJvcmRlcl9pZFwiIGluIHZhbHVlKSB8fCB2YWx1ZVtcIm9yZGVyX2lkXCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRpZiAoIShcIm9yZGVyX251bWJlclwiIGluIHZhbHVlKSB8fCB2YWx1ZVtcIm9yZGVyX251bWJlclwiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0ZnVuY3Rpb24gT3JkZXJSZXNwb25zZUF0dHJpYnV0ZXNGcm9tSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIE9yZGVyUmVzcG9uc2VBdHRyaWJ1dGVzRnJvbUpTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gT3JkZXJSZXNwb25zZUF0dHJpYnV0ZXNGcm9tSlNPTlR5cGVkKGpzb24sIGlnbm9yZURpc2NyaW1pbmF0b3IpIHtcblx0XHRpZiAoanNvbiA9PSBudWxsKSByZXR1cm4ganNvbjtcblx0XHRyZXR1cm4ge1xuXHRcdFx0XCJjcmVhdGVkX2F0XCI6IG5ldyBEYXRlKGpzb25bXCJjcmVhdGVkX2F0XCJdKSxcblx0XHRcdFwibGF0ZXN0X2V2ZW50X2RhdGVcIjogbmV3IERhdGUoanNvbltcImxhdGVzdF9ldmVudF9kYXRlXCJdKSxcblx0XHRcdFwibGluZV9pdGVtc1wiOiBqc29uW1wibGluZV9pdGVtc1wiXS5tYXAoT3JkZXJJdGVtSW5mb18xLk9yZGVySXRlbUluZm9Gcm9tSlNPTiksXG5cdFx0XHRcIm9yZGVyX2lkXCI6IGpzb25bXCJvcmRlcl9pZFwiXSxcblx0XHRcdFwib3JkZXJfbnVtYmVyXCI6IGpzb25bXCJvcmRlcl9udW1iZXJcIl1cblx0XHR9O1xuXHR9XG5cdGZ1bmN0aW9uIE9yZGVyUmVzcG9uc2VBdHRyaWJ1dGVzVG9KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gT3JkZXJSZXNwb25zZUF0dHJpYnV0ZXNUb0pTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gT3JkZXJSZXNwb25zZUF0dHJpYnV0ZXNUb0pTT05UeXBlZCh2YWx1ZSwgaWdub3JlRGlzY3JpbWluYXRvciA9IGZhbHNlKSB7XG5cdFx0aWYgKHZhbHVlID09IG51bGwpIHJldHVybiB2YWx1ZTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0XCJjcmVhdGVkX2F0XCI6IHZhbHVlW1wiY3JlYXRlZF9hdFwiXS50b0lTT1N0cmluZygpLFxuXHRcdFx0XCJsYXRlc3RfZXZlbnRfZGF0ZVwiOiB2YWx1ZVtcImxhdGVzdF9ldmVudF9kYXRlXCJdLnRvSVNPU3RyaW5nKCksXG5cdFx0XHRcImxpbmVfaXRlbXNcIjogdmFsdWVbXCJsaW5lX2l0ZW1zXCJdLm1hcChPcmRlckl0ZW1JbmZvXzEuT3JkZXJJdGVtSW5mb1RvSlNPTiksXG5cdFx0XHRcIm9yZGVyX2lkXCI6IHZhbHVlW1wib3JkZXJfaWRcIl0sXG5cdFx0XHRcIm9yZGVyX251bWJlclwiOiB2YWx1ZVtcIm9yZGVyX251bWJlclwiXVxuXHRcdH07XG5cdH1cbn0pIH0pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiAuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL09yZ2FuaXphdGlvbi5qc1xudmFyIHJlcXVpcmVfT3JnYW5pemF0aW9uID0gLyogQF9fUFVSRV9fICovIF9fY29tbW9uSlMoeyBcIi4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvT3JnYW5pemF0aW9uLmpzXCI6ICgoZXhwb3J0cykgPT4ge1xuXHQvKipcblx0KiBDb21tZXJjZVxuXHQqIE5vIGRlc2NyaXB0aW9uIHByb3ZpZGVkIChnZW5lcmF0ZWQgYnkgT3BlbmFwaSBHZW5lcmF0b3IgaHR0cHM6Ly9naXRodWIuY29tL29wZW5hcGl0b29scy9vcGVuYXBpLWdlbmVyYXRvcilcblx0KlxuXHQqIFRoZSB2ZXJzaW9uIG9mIHRoZSBPcGVuQVBJIGRvY3VtZW50OiAxLjEuMFxuXHQqXG5cdCpcblx0KiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IE9wZW5BUEkgR2VuZXJhdG9yIChodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2gpLlxuXHQqIGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaFxuXHQqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cblx0Ki9cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuXHRleHBvcnRzLk9yZ2FuaXphdGlvblN0YXR1c0VudW0gPSB2b2lkIDA7XG5cdGV4cG9ydHMuaW5zdGFuY2VPZk9yZ2FuaXphdGlvbiA9IGluc3RhbmNlT2ZPcmdhbml6YXRpb247XG5cdGV4cG9ydHMuT3JnYW5pemF0aW9uRnJvbUpTT04gPSBPcmdhbml6YXRpb25Gcm9tSlNPTjtcblx0ZXhwb3J0cy5Pcmdhbml6YXRpb25Gcm9tSlNPTlR5cGVkID0gT3JnYW5pemF0aW9uRnJvbUpTT05UeXBlZDtcblx0ZXhwb3J0cy5Pcmdhbml6YXRpb25Ub0pTT04gPSBPcmdhbml6YXRpb25Ub0pTT047XG5cdGV4cG9ydHMuT3JnYW5pemF0aW9uVG9KU09OVHlwZWQgPSBPcmdhbml6YXRpb25Ub0pTT05UeXBlZDtcblx0LyoqXG5cdCogQGV4cG9ydFxuXHQqIEBlbnVtIHtzdHJpbmd9XG5cdCovXG5cdHZhciBPcmdhbml6YXRpb25TdGF0dXNFbnVtO1xuXHQoZnVuY3Rpb24oT3JnYW5pemF0aW9uU3RhdHVzRW51bSQxKSB7XG5cdFx0T3JnYW5pemF0aW9uU3RhdHVzRW51bSQxW1wiQWN0aXZlXCJdID0gXCJhY3RpdmVcIjtcblx0XHRPcmdhbml6YXRpb25TdGF0dXNFbnVtJDFbXCJJbmFjdGl2ZVwiXSA9IFwiaW5hY3RpdmVcIjtcblx0fSkoT3JnYW5pemF0aW9uU3RhdHVzRW51bSB8fCAoZXhwb3J0cy5Pcmdhbml6YXRpb25TdGF0dXNFbnVtID0gT3JnYW5pemF0aW9uU3RhdHVzRW51bSA9IHt9KSk7XG5cdC8qKlxuXHQqIENoZWNrIGlmIGEgZ2l2ZW4gb2JqZWN0IGltcGxlbWVudHMgdGhlIE9yZ2FuaXphdGlvbiBpbnRlcmZhY2UuXG5cdCovXG5cdGZ1bmN0aW9uIGluc3RhbmNlT2ZPcmdhbml6YXRpb24odmFsdWUpIHtcblx0XHRpZiAoIShcImRpc3BsYXlfbmFtZVwiIGluIHZhbHVlKSB8fCB2YWx1ZVtcImRpc3BsYXlfbmFtZVwiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0aWYgKCEoXCJkb21haW5cIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJkb21haW5cIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdGlmICghKFwiaWRcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJpZFwiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0aWYgKCEoXCJzaG9ydF9uYW1lXCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wic2hvcnRfbmFtZVwiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0aWYgKCEoXCJzdGF0dXNcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJzdGF0dXNcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdGZ1bmN0aW9uIE9yZ2FuaXphdGlvbkZyb21KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gT3JnYW5pemF0aW9uRnJvbUpTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gT3JnYW5pemF0aW9uRnJvbUpTT05UeXBlZChqc29uLCBpZ25vcmVEaXNjcmltaW5hdG9yKSB7XG5cdFx0aWYgKGpzb24gPT0gbnVsbCkgcmV0dXJuIGpzb247XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwiY3JlYXRlZF9hdFwiOiBqc29uW1wiY3JlYXRlZF9hdFwiXSA9PSBudWxsID8gdm9pZCAwIDogbmV3IERhdGUoanNvbltcImNyZWF0ZWRfYXRcIl0pLFxuXHRcdFx0XCJkaXNwbGF5X25hbWVcIjoganNvbltcImRpc3BsYXlfbmFtZVwiXSxcblx0XHRcdFwiZG9tYWluXCI6IGpzb25bXCJkb21haW5cIl0sXG5cdFx0XHRcImlkXCI6IGpzb25bXCJpZFwiXSxcblx0XHRcdFwic2hvcnRfbmFtZVwiOiBqc29uW1wic2hvcnRfbmFtZVwiXSxcblx0XHRcdFwic3RhdHVzXCI6IGpzb25bXCJzdGF0dXNcIl0sXG5cdFx0XHRcInVwZGF0ZWRfYXRcIjoganNvbltcInVwZGF0ZWRfYXRcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IG5ldyBEYXRlKGpzb25bXCJ1cGRhdGVkX2F0XCJdKVxuXHRcdH07XG5cdH1cblx0ZnVuY3Rpb24gT3JnYW5pemF0aW9uVG9KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gT3JnYW5pemF0aW9uVG9KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIE9yZ2FuaXphdGlvblRvSlNPTlR5cGVkKHZhbHVlLCBpZ25vcmVEaXNjcmltaW5hdG9yID0gZmFsc2UpIHtcblx0XHRpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIHZhbHVlO1xuXHRcdHJldHVybiB7XG5cdFx0XHRcImNyZWF0ZWRfYXRcIjogdmFsdWVbXCJjcmVhdGVkX2F0XCJdID09IG51bGwgPyB2b2lkIDAgOiB2YWx1ZVtcImNyZWF0ZWRfYXRcIl0udG9JU09TdHJpbmcoKSxcblx0XHRcdFwiZGlzcGxheV9uYW1lXCI6IHZhbHVlW1wiZGlzcGxheV9uYW1lXCJdLFxuXHRcdFx0XCJkb21haW5cIjogdmFsdWVbXCJkb21haW5cIl0sXG5cdFx0XHRcImlkXCI6IHZhbHVlW1wiaWRcIl0sXG5cdFx0XHRcInNob3J0X25hbWVcIjogdmFsdWVbXCJzaG9ydF9uYW1lXCJdLFxuXHRcdFx0XCJzdGF0dXNcIjogdmFsdWVbXCJzdGF0dXNcIl0sXG5cdFx0XHRcInVwZGF0ZWRfYXRcIjogdmFsdWVbXCJ1cGRhdGVkX2F0XCJdID09IG51bGwgPyB2b2lkIDAgOiB2YWx1ZVtcInVwZGF0ZWRfYXRcIl0udG9JU09TdHJpbmcoKVxuXHRcdH07XG5cdH1cbn0pIH0pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiAuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL09yZ2FuaXphdGlvbkNvbmZpZy5qc1xudmFyIHJlcXVpcmVfT3JnYW5pemF0aW9uQ29uZmlnID0gLyogQF9fUFVSRV9fICovIF9fY29tbW9uSlMoeyBcIi4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvT3JnYW5pemF0aW9uQ29uZmlnLmpzXCI6ICgoZXhwb3J0cykgPT4ge1xuXHQvKipcblx0KiBDb21tZXJjZVxuXHQqIE5vIGRlc2NyaXB0aW9uIHByb3ZpZGVkIChnZW5lcmF0ZWQgYnkgT3BlbmFwaSBHZW5lcmF0b3IgaHR0cHM6Ly9naXRodWIuY29tL29wZW5hcGl0b29scy9vcGVuYXBpLWdlbmVyYXRvcilcblx0KlxuXHQqIFRoZSB2ZXJzaW9uIG9mIHRoZSBPcGVuQVBJIGRvY3VtZW50OiAxLjEuMFxuXHQqXG5cdCpcblx0KiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IE9wZW5BUEkgR2VuZXJhdG9yIChodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2gpLlxuXHQqIGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaFxuXHQqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cblx0Ki9cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuXHRleHBvcnRzLmluc3RhbmNlT2ZPcmdhbml6YXRpb25Db25maWcgPSBpbnN0YW5jZU9mT3JnYW5pemF0aW9uQ29uZmlnO1xuXHRleHBvcnRzLk9yZ2FuaXphdGlvbkNvbmZpZ0Zyb21KU09OID0gT3JnYW5pemF0aW9uQ29uZmlnRnJvbUpTT047XG5cdGV4cG9ydHMuT3JnYW5pemF0aW9uQ29uZmlnRnJvbUpTT05UeXBlZCA9IE9yZ2FuaXphdGlvbkNvbmZpZ0Zyb21KU09OVHlwZWQ7XG5cdGV4cG9ydHMuT3JnYW5pemF0aW9uQ29uZmlnVG9KU09OID0gT3JnYW5pemF0aW9uQ29uZmlnVG9KU09OO1xuXHRleHBvcnRzLk9yZ2FuaXphdGlvbkNvbmZpZ1RvSlNPTlR5cGVkID0gT3JnYW5pemF0aW9uQ29uZmlnVG9KU09OVHlwZWQ7XG5cdC8qKlxuXHQqIENoZWNrIGlmIGEgZ2l2ZW4gb2JqZWN0IGltcGxlbWVudHMgdGhlIE9yZ2FuaXphdGlvbkNvbmZpZyBpbnRlcmZhY2UuXG5cdCovXG5cdGZ1bmN0aW9uIGluc3RhbmNlT2ZPcmdhbml6YXRpb25Db25maWcodmFsdWUpIHtcblx0XHRpZiAoIShcImNvbmZpZ1wiIGluIHZhbHVlKSB8fCB2YWx1ZVtcImNvbmZpZ1wiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0aWYgKCEoXCJjcmVhdGVkX2F0XCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wiY3JlYXRlZF9hdFwiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0aWYgKCEoXCJpc19sYXRlc3RcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJpc19sYXRlc3RcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdGlmICghKFwibmFtZXNwYWNlXCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wibmFtZXNwYWNlXCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRpZiAoIShcInVwZGF0ZWRfYXRcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJ1cGRhdGVkX2F0XCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRpZiAoIShcInVwZGF0ZWRfYnlfZW50aXR5XCIgaW4gdmFsdWUpIHx8IHZhbHVlW1widXBkYXRlZF9ieV9lbnRpdHlcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdGlmICghKFwidXBkYXRlZF9ieV9lbnRpdHlfaWRcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJ1cGRhdGVkX2J5X2VudGl0eV9pZFwiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0aWYgKCEoXCJ2ZXJzaW9uXCIgaW4gdmFsdWUpIHx8IHZhbHVlW1widmVyc2lvblwiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0ZnVuY3Rpb24gT3JnYW5pemF0aW9uQ29uZmlnRnJvbUpTT04oanNvbikge1xuXHRcdHJldHVybiBPcmdhbml6YXRpb25Db25maWdGcm9tSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBPcmdhbml6YXRpb25Db25maWdGcm9tSlNPTlR5cGVkKGpzb24sIGlnbm9yZURpc2NyaW1pbmF0b3IpIHtcblx0XHRpZiAoanNvbiA9PSBudWxsKSByZXR1cm4ganNvbjtcblx0XHRyZXR1cm4ge1xuXHRcdFx0XCJjb25maWdcIjoganNvbltcImNvbmZpZ1wiXSxcblx0XHRcdFwiY3JlYXRlZF9hdFwiOiBuZXcgRGF0ZShqc29uW1wiY3JlYXRlZF9hdFwiXSksXG5cdFx0XHRcImlkXCI6IGpzb25bXCJpZFwiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcImlkXCJdLFxuXHRcdFx0XCJpc19sYXRlc3RcIjoganNvbltcImlzX2xhdGVzdFwiXSxcblx0XHRcdFwibmFtZXNwYWNlXCI6IGpzb25bXCJuYW1lc3BhY2VcIl0sXG5cdFx0XHRcIm9yZ2FuaXphdGlvbl9pZFwiOiBqc29uW1wib3JnYW5pemF0aW9uX2lkXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wib3JnYW5pemF0aW9uX2lkXCJdLFxuXHRcdFx0XCJ1cGRhdGVkX2F0XCI6IG5ldyBEYXRlKGpzb25bXCJ1cGRhdGVkX2F0XCJdKSxcblx0XHRcdFwidXBkYXRlZF9ieV9lbnRpdHlcIjoganNvbltcInVwZGF0ZWRfYnlfZW50aXR5XCJdLFxuXHRcdFx0XCJ1cGRhdGVkX2J5X2VudGl0eV9pZFwiOiBqc29uW1widXBkYXRlZF9ieV9lbnRpdHlfaWRcIl0sXG5cdFx0XHRcInZlcnNpb25cIjoganNvbltcInZlcnNpb25cIl1cblx0XHR9O1xuXHR9XG5cdGZ1bmN0aW9uIE9yZ2FuaXphdGlvbkNvbmZpZ1RvSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIE9yZ2FuaXphdGlvbkNvbmZpZ1RvSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBPcmdhbml6YXRpb25Db25maWdUb0pTT05UeXBlZCh2YWx1ZSwgaWdub3JlRGlzY3JpbWluYXRvciA9IGZhbHNlKSB7XG5cdFx0aWYgKHZhbHVlID09IG51bGwpIHJldHVybiB2YWx1ZTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0XCJjb25maWdcIjogdmFsdWVbXCJjb25maWdcIl0sXG5cdFx0XHRcImNyZWF0ZWRfYXRcIjogdmFsdWVbXCJjcmVhdGVkX2F0XCJdLnRvSVNPU3RyaW5nKCksXG5cdFx0XHRcImlkXCI6IHZhbHVlW1wiaWRcIl0sXG5cdFx0XHRcImlzX2xhdGVzdFwiOiB2YWx1ZVtcImlzX2xhdGVzdFwiXSxcblx0XHRcdFwibmFtZXNwYWNlXCI6IHZhbHVlW1wibmFtZXNwYWNlXCJdLFxuXHRcdFx0XCJvcmdhbml6YXRpb25faWRcIjogdmFsdWVbXCJvcmdhbml6YXRpb25faWRcIl0sXG5cdFx0XHRcInVwZGF0ZWRfYXRcIjogdmFsdWVbXCJ1cGRhdGVkX2F0XCJdLnRvSVNPU3RyaW5nKCksXG5cdFx0XHRcInVwZGF0ZWRfYnlfZW50aXR5XCI6IHZhbHVlW1widXBkYXRlZF9ieV9lbnRpdHlcIl0sXG5cdFx0XHRcInVwZGF0ZWRfYnlfZW50aXR5X2lkXCI6IHZhbHVlW1widXBkYXRlZF9ieV9lbnRpdHlfaWRcIl0sXG5cdFx0XHRcInZlcnNpb25cIjogdmFsdWVbXCJ2ZXJzaW9uXCJdXG5cdFx0fTtcblx0fVxufSkgfSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIC4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvT3JnYW5pemF0aW9uU2V0dGluZ3MuanNcbnZhciByZXF1aXJlX09yZ2FuaXphdGlvblNldHRpbmdzID0gLyogQF9fUFVSRV9fICovIF9fY29tbW9uSlMoeyBcIi4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvT3JnYW5pemF0aW9uU2V0dGluZ3MuanNcIjogKChleHBvcnRzKSA9PiB7XG5cdC8qKlxuXHQqIENvbW1lcmNlXG5cdCogTm8gZGVzY3JpcHRpb24gcHJvdmlkZWQgKGdlbmVyYXRlZCBieSBPcGVuYXBpIEdlbmVyYXRvciBodHRwczovL2dpdGh1Yi5jb20vb3BlbmFwaXRvb2xzL29wZW5hcGktZ2VuZXJhdG9yKVxuXHQqXG5cdCogVGhlIHZlcnNpb24gb2YgdGhlIE9wZW5BUEkgZG9jdW1lbnQ6IDEuMS4wXG5cdCpcblx0KlxuXHQqIE5PVEU6IFRoaXMgY2xhc3MgaXMgYXV0byBnZW5lcmF0ZWQgYnkgT3BlbkFQSSBHZW5lcmF0b3IgKGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaCkuXG5cdCogaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoXG5cdCogRG8gbm90IGVkaXQgdGhlIGNsYXNzIG1hbnVhbGx5LlxuXHQqL1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5cdGV4cG9ydHMuaW5zdGFuY2VPZk9yZ2FuaXphdGlvblNldHRpbmdzID0gaW5zdGFuY2VPZk9yZ2FuaXphdGlvblNldHRpbmdzO1xuXHRleHBvcnRzLk9yZ2FuaXphdGlvblNldHRpbmdzRnJvbUpTT04gPSBPcmdhbml6YXRpb25TZXR0aW5nc0Zyb21KU09OO1xuXHRleHBvcnRzLk9yZ2FuaXphdGlvblNldHRpbmdzRnJvbUpTT05UeXBlZCA9IE9yZ2FuaXphdGlvblNldHRpbmdzRnJvbUpTT05UeXBlZDtcblx0ZXhwb3J0cy5Pcmdhbml6YXRpb25TZXR0aW5nc1RvSlNPTiA9IE9yZ2FuaXphdGlvblNldHRpbmdzVG9KU09OO1xuXHRleHBvcnRzLk9yZ2FuaXphdGlvblNldHRpbmdzVG9KU09OVHlwZWQgPSBPcmdhbml6YXRpb25TZXR0aW5nc1RvSlNPTlR5cGVkO1xuXHRjb25zdCBPcmdhbml6YXRpb25fMSA9IHJlcXVpcmVfT3JnYW5pemF0aW9uKCk7XG5cdC8qKlxuXHQqIENoZWNrIGlmIGEgZ2l2ZW4gb2JqZWN0IGltcGxlbWVudHMgdGhlIE9yZ2FuaXphdGlvblNldHRpbmdzIGludGVyZmFjZS5cblx0Ki9cblx0ZnVuY3Rpb24gaW5zdGFuY2VPZk9yZ2FuaXphdGlvblNldHRpbmdzKHZhbHVlKSB7XG5cdFx0aWYgKCEoXCJvcmdcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJvcmdcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdGlmICghKFwic2V0dGluZ3NcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJzZXR0aW5nc1wiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0ZnVuY3Rpb24gT3JnYW5pemF0aW9uU2V0dGluZ3NGcm9tSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIE9yZ2FuaXphdGlvblNldHRpbmdzRnJvbUpTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gT3JnYW5pemF0aW9uU2V0dGluZ3NGcm9tSlNPTlR5cGVkKGpzb24sIGlnbm9yZURpc2NyaW1pbmF0b3IpIHtcblx0XHRpZiAoanNvbiA9PSBudWxsKSByZXR1cm4ganNvbjtcblx0XHRyZXR1cm4ge1xuXHRcdFx0XCJvcmdcIjogKDAsIE9yZ2FuaXphdGlvbl8xLk9yZ2FuaXphdGlvbkZyb21KU09OKShqc29uW1wib3JnXCJdKSxcblx0XHRcdFwic2V0dGluZ3NcIjoganNvbltcInNldHRpbmdzXCJdXG5cdFx0fTtcblx0fVxuXHRmdW5jdGlvbiBPcmdhbml6YXRpb25TZXR0aW5nc1RvSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIE9yZ2FuaXphdGlvblNldHRpbmdzVG9KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIE9yZ2FuaXphdGlvblNldHRpbmdzVG9KU09OVHlwZWQodmFsdWUsIGlnbm9yZURpc2NyaW1pbmF0b3IgPSBmYWxzZSkge1xuXHRcdGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gdmFsdWU7XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwib3JnXCI6ICgwLCBPcmdhbml6YXRpb25fMS5Pcmdhbml6YXRpb25Ub0pTT04pKHZhbHVlW1wib3JnXCJdKSxcblx0XHRcdFwic2V0dGluZ3NcIjogdmFsdWVbXCJzZXR0aW5nc1wiXVxuXHRcdH07XG5cdH1cbn0pIH0pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiAuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL1N0YXRzaWdFeHBlcmltZW50LmpzXG52YXIgcmVxdWlyZV9TdGF0c2lnRXhwZXJpbWVudCA9IC8qIEBfX1BVUkVfXyAqLyBfX2NvbW1vbkpTKHsgXCIuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL1N0YXRzaWdFeHBlcmltZW50LmpzXCI6ICgoZXhwb3J0cykgPT4ge1xuXHQvKipcblx0KiBDb21tZXJjZVxuXHQqIE5vIGRlc2NyaXB0aW9uIHByb3ZpZGVkIChnZW5lcmF0ZWQgYnkgT3BlbmFwaSBHZW5lcmF0b3IgaHR0cHM6Ly9naXRodWIuY29tL29wZW5hcGl0b29scy9vcGVuYXBpLWdlbmVyYXRvcilcblx0KlxuXHQqIFRoZSB2ZXJzaW9uIG9mIHRoZSBPcGVuQVBJIGRvY3VtZW50OiAxLjEuMFxuXHQqXG5cdCpcblx0KiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IE9wZW5BUEkgR2VuZXJhdG9yIChodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2gpLlxuXHQqIGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaFxuXHQqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cblx0Ki9cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuXHRleHBvcnRzLmluc3RhbmNlT2ZTdGF0c2lnRXhwZXJpbWVudCA9IGluc3RhbmNlT2ZTdGF0c2lnRXhwZXJpbWVudDtcblx0ZXhwb3J0cy5TdGF0c2lnRXhwZXJpbWVudEZyb21KU09OID0gU3RhdHNpZ0V4cGVyaW1lbnRGcm9tSlNPTjtcblx0ZXhwb3J0cy5TdGF0c2lnRXhwZXJpbWVudEZyb21KU09OVHlwZWQgPSBTdGF0c2lnRXhwZXJpbWVudEZyb21KU09OVHlwZWQ7XG5cdGV4cG9ydHMuU3RhdHNpZ0V4cGVyaW1lbnRUb0pTT04gPSBTdGF0c2lnRXhwZXJpbWVudFRvSlNPTjtcblx0ZXhwb3J0cy5TdGF0c2lnRXhwZXJpbWVudFRvSlNPTlR5cGVkID0gU3RhdHNpZ0V4cGVyaW1lbnRUb0pTT05UeXBlZDtcblx0LyoqXG5cdCogQ2hlY2sgaWYgYSBnaXZlbiBvYmplY3QgaW1wbGVtZW50cyB0aGUgU3RhdHNpZ0V4cGVyaW1lbnQgaW50ZXJmYWNlLlxuXHQqL1xuXHRmdW5jdGlvbiBpbnN0YW5jZU9mU3RhdHNpZ0V4cGVyaW1lbnQodmFsdWUpIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHRmdW5jdGlvbiBTdGF0c2lnRXhwZXJpbWVudEZyb21KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gU3RhdHNpZ0V4cGVyaW1lbnRGcm9tSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBTdGF0c2lnRXhwZXJpbWVudEZyb21KU09OVHlwZWQoanNvbiwgaWdub3JlRGlzY3JpbWluYXRvcikge1xuXHRcdGlmIChqc29uID09IG51bGwpIHJldHVybiBqc29uO1xuXHRcdHJldHVybiB7XG5cdFx0XHRcImdyb3VwXCI6IGpzb25bXCJncm91cFwiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcImdyb3VwXCJdLFxuXHRcdFx0XCJncm91cF9uYW1lXCI6IGpzb25bXCJncm91cF9uYW1lXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wiZ3JvdXBfbmFtZVwiXSxcblx0XHRcdFwibmFtZVwiOiBqc29uW1wibmFtZVwiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcIm5hbWVcIl0sXG5cdFx0XHRcInJ1bGVfaWRcIjoganNvbltcInJ1bGVfaWRcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IGpzb25bXCJydWxlX2lkXCJdLFxuXHRcdFx0XCJ2YWx1ZVwiOiBqc29uW1widmFsdWVcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IGpzb25bXCJ2YWx1ZVwiXVxuXHRcdH07XG5cdH1cblx0ZnVuY3Rpb24gU3RhdHNpZ0V4cGVyaW1lbnRUb0pTT04oanNvbikge1xuXHRcdHJldHVybiBTdGF0c2lnRXhwZXJpbWVudFRvSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBTdGF0c2lnRXhwZXJpbWVudFRvSlNPTlR5cGVkKHZhbHVlLCBpZ25vcmVEaXNjcmltaW5hdG9yID0gZmFsc2UpIHtcblx0XHRpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIHZhbHVlO1xuXHRcdHJldHVybiB7XG5cdFx0XHRcImdyb3VwXCI6IHZhbHVlW1wiZ3JvdXBcIl0sXG5cdFx0XHRcImdyb3VwX25hbWVcIjogdmFsdWVbXCJncm91cF9uYW1lXCJdLFxuXHRcdFx0XCJuYW1lXCI6IHZhbHVlW1wibmFtZVwiXSxcblx0XHRcdFwicnVsZV9pZFwiOiB2YWx1ZVtcInJ1bGVfaWRcIl0sXG5cdFx0XHRcInZhbHVlXCI6IHZhbHVlW1widmFsdWVcIl1cblx0XHR9O1xuXHR9XG59KSB9KTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9TdGF0c2lnRmVhdHVyZUdhdGUuanNcbnZhciByZXF1aXJlX1N0YXRzaWdGZWF0dXJlR2F0ZSA9IC8qIEBfX1BVUkVfXyAqLyBfX2NvbW1vbkpTKHsgXCIuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL1N0YXRzaWdGZWF0dXJlR2F0ZS5qc1wiOiAoKGV4cG9ydHMpID0+IHtcblx0LyoqXG5cdCogQ29tbWVyY2Vcblx0KiBObyBkZXNjcmlwdGlvbiBwcm92aWRlZCAoZ2VuZXJhdGVkIGJ5IE9wZW5hcGkgR2VuZXJhdG9yIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuYXBpdG9vbHMvb3BlbmFwaS1nZW5lcmF0b3IpXG5cdCpcblx0KiBUaGUgdmVyc2lvbiBvZiB0aGUgT3BlbkFQSSBkb2N1bWVudDogMS4xLjBcblx0KlxuXHQqXG5cdCogTk9URTogVGhpcyBjbGFzcyBpcyBhdXRvIGdlbmVyYXRlZCBieSBPcGVuQVBJIEdlbmVyYXRvciAoaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoKS5cblx0KiBodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2hcblx0KiBEbyBub3QgZWRpdCB0aGUgY2xhc3MgbWFudWFsbHkuXG5cdCovXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcblx0ZXhwb3J0cy5pbnN0YW5jZU9mU3RhdHNpZ0ZlYXR1cmVHYXRlID0gaW5zdGFuY2VPZlN0YXRzaWdGZWF0dXJlR2F0ZTtcblx0ZXhwb3J0cy5TdGF0c2lnRmVhdHVyZUdhdGVGcm9tSlNPTiA9IFN0YXRzaWdGZWF0dXJlR2F0ZUZyb21KU09OO1xuXHRleHBvcnRzLlN0YXRzaWdGZWF0dXJlR2F0ZUZyb21KU09OVHlwZWQgPSBTdGF0c2lnRmVhdHVyZUdhdGVGcm9tSlNPTlR5cGVkO1xuXHRleHBvcnRzLlN0YXRzaWdGZWF0dXJlR2F0ZVRvSlNPTiA9IFN0YXRzaWdGZWF0dXJlR2F0ZVRvSlNPTjtcblx0ZXhwb3J0cy5TdGF0c2lnRmVhdHVyZUdhdGVUb0pTT05UeXBlZCA9IFN0YXRzaWdGZWF0dXJlR2F0ZVRvSlNPTlR5cGVkO1xuXHQvKipcblx0KiBDaGVjayBpZiBhIGdpdmVuIG9iamVjdCBpbXBsZW1lbnRzIHRoZSBTdGF0c2lnRmVhdHVyZUdhdGUgaW50ZXJmYWNlLlxuXHQqL1xuXHRmdW5jdGlvbiBpbnN0YW5jZU9mU3RhdHNpZ0ZlYXR1cmVHYXRlKHZhbHVlKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0ZnVuY3Rpb24gU3RhdHNpZ0ZlYXR1cmVHYXRlRnJvbUpTT04oanNvbikge1xuXHRcdHJldHVybiBTdGF0c2lnRmVhdHVyZUdhdGVGcm9tSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBTdGF0c2lnRmVhdHVyZUdhdGVGcm9tSlNPTlR5cGVkKGpzb24sIGlnbm9yZURpc2NyaW1pbmF0b3IpIHtcblx0XHRpZiAoanNvbiA9PSBudWxsKSByZXR1cm4ganNvbjtcblx0XHRyZXR1cm4ge1xuXHRcdFx0XCJncm91cF9uYW1lXCI6IGpzb25bXCJncm91cF9uYW1lXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wiZ3JvdXBfbmFtZVwiXSxcblx0XHRcdFwibmFtZVwiOiBqc29uW1wibmFtZVwiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcIm5hbWVcIl0sXG5cdFx0XHRcInJ1bGVfaWRcIjoganNvbltcInJ1bGVfaWRcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IGpzb25bXCJydWxlX2lkXCJdLFxuXHRcdFx0XCJ2YWx1ZVwiOiBqc29uW1widmFsdWVcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IGpzb25bXCJ2YWx1ZVwiXVxuXHRcdH07XG5cdH1cblx0ZnVuY3Rpb24gU3RhdHNpZ0ZlYXR1cmVHYXRlVG9KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gU3RhdHNpZ0ZlYXR1cmVHYXRlVG9KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIFN0YXRzaWdGZWF0dXJlR2F0ZVRvSlNPTlR5cGVkKHZhbHVlLCBpZ25vcmVEaXNjcmltaW5hdG9yID0gZmFsc2UpIHtcblx0XHRpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIHZhbHVlO1xuXHRcdHJldHVybiB7XG5cdFx0XHRcImdyb3VwX25hbWVcIjogdmFsdWVbXCJncm91cF9uYW1lXCJdLFxuXHRcdFx0XCJuYW1lXCI6IHZhbHVlW1wibmFtZVwiXSxcblx0XHRcdFwicnVsZV9pZFwiOiB2YWx1ZVtcInJ1bGVfaWRcIl0sXG5cdFx0XHRcInZhbHVlXCI6IHZhbHVlW1widmFsdWVcIl1cblx0XHR9O1xuXHR9XG59KSB9KTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9Pcmdhbml6YXRpb25Db25maWdSZXN1bHRzLmpzXG52YXIgcmVxdWlyZV9Pcmdhbml6YXRpb25Db25maWdSZXN1bHRzID0gLyogQF9fUFVSRV9fICovIF9fY29tbW9uSlMoeyBcIi4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvT3JnYW5pemF0aW9uQ29uZmlnUmVzdWx0cy5qc1wiOiAoKGV4cG9ydHMpID0+IHtcblx0LyoqXG5cdCogQ29tbWVyY2Vcblx0KiBObyBkZXNjcmlwdGlvbiBwcm92aWRlZCAoZ2VuZXJhdGVkIGJ5IE9wZW5hcGkgR2VuZXJhdG9yIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuYXBpdG9vbHMvb3BlbmFwaS1nZW5lcmF0b3IpXG5cdCpcblx0KiBUaGUgdmVyc2lvbiBvZiB0aGUgT3BlbkFQSSBkb2N1bWVudDogMS4xLjBcblx0KlxuXHQqXG5cdCogTk9URTogVGhpcyBjbGFzcyBpcyBhdXRvIGdlbmVyYXRlZCBieSBPcGVuQVBJIEdlbmVyYXRvciAoaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoKS5cblx0KiBodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2hcblx0KiBEbyBub3QgZWRpdCB0aGUgY2xhc3MgbWFudWFsbHkuXG5cdCovXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcblx0ZXhwb3J0cy5pbnN0YW5jZU9mT3JnYW5pemF0aW9uQ29uZmlnUmVzdWx0cyA9IGluc3RhbmNlT2ZPcmdhbml6YXRpb25Db25maWdSZXN1bHRzO1xuXHRleHBvcnRzLk9yZ2FuaXphdGlvbkNvbmZpZ1Jlc3VsdHNGcm9tSlNPTiA9IE9yZ2FuaXphdGlvbkNvbmZpZ1Jlc3VsdHNGcm9tSlNPTjtcblx0ZXhwb3J0cy5Pcmdhbml6YXRpb25Db25maWdSZXN1bHRzRnJvbUpTT05UeXBlZCA9IE9yZ2FuaXphdGlvbkNvbmZpZ1Jlc3VsdHNGcm9tSlNPTlR5cGVkO1xuXHRleHBvcnRzLk9yZ2FuaXphdGlvbkNvbmZpZ1Jlc3VsdHNUb0pTT04gPSBPcmdhbml6YXRpb25Db25maWdSZXN1bHRzVG9KU09OO1xuXHRleHBvcnRzLk9yZ2FuaXphdGlvbkNvbmZpZ1Jlc3VsdHNUb0pTT05UeXBlZCA9IE9yZ2FuaXphdGlvbkNvbmZpZ1Jlc3VsdHNUb0pTT05UeXBlZDtcblx0Y29uc3QgT3JnYW5pemF0aW9uQ29uZmlnXzEgPSByZXF1aXJlX09yZ2FuaXphdGlvbkNvbmZpZygpO1xuXHRjb25zdCBPcmdhbml6YXRpb25TZXR0aW5nc18xID0gcmVxdWlyZV9Pcmdhbml6YXRpb25TZXR0aW5ncygpO1xuXHRjb25zdCBTdGF0c2lnRXhwZXJpbWVudF8xID0gcmVxdWlyZV9TdGF0c2lnRXhwZXJpbWVudCgpO1xuXHRjb25zdCBTdGF0c2lnRmVhdHVyZUdhdGVfMSA9IHJlcXVpcmVfU3RhdHNpZ0ZlYXR1cmVHYXRlKCk7XG5cdC8qKlxuXHQqIENoZWNrIGlmIGEgZ2l2ZW4gb2JqZWN0IGltcGxlbWVudHMgdGhlIE9yZ2FuaXphdGlvbkNvbmZpZ1Jlc3VsdHMgaW50ZXJmYWNlLlxuXHQqL1xuXHRmdW5jdGlvbiBpbnN0YW5jZU9mT3JnYW5pemF0aW9uQ29uZmlnUmVzdWx0cyh2YWx1ZSkge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdGZ1bmN0aW9uIE9yZ2FuaXphdGlvbkNvbmZpZ1Jlc3VsdHNGcm9tSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIE9yZ2FuaXphdGlvbkNvbmZpZ1Jlc3VsdHNGcm9tSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBPcmdhbml6YXRpb25Db25maWdSZXN1bHRzRnJvbUpTT05UeXBlZChqc29uLCBpZ25vcmVEaXNjcmltaW5hdG9yKSB7XG5cdFx0aWYgKGpzb24gPT0gbnVsbCkgcmV0dXJuIGpzb247XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwiY29uZmlnc1wiOiBqc29uW1wiY29uZmlnc1wiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcImNvbmZpZ3NcIl0ubWFwKE9yZ2FuaXphdGlvbkNvbmZpZ18xLk9yZ2FuaXphdGlvbkNvbmZpZ0Zyb21KU09OKSxcblx0XHRcdFwiZXhwZXJpbWVudHNcIjoganNvbltcImV4cGVyaW1lbnRzXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wiZXhwZXJpbWVudHNcIl0ubWFwKFN0YXRzaWdFeHBlcmltZW50XzEuU3RhdHNpZ0V4cGVyaW1lbnRGcm9tSlNPTiksXG5cdFx0XHRcImdhdGVzXCI6IGpzb25bXCJnYXRlc1wiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcImdhdGVzXCJdLm1hcChTdGF0c2lnRmVhdHVyZUdhdGVfMS5TdGF0c2lnRmVhdHVyZUdhdGVGcm9tSlNPTiksXG5cdFx0XHRcIm9yZ1wiOiBqc29uW1wib3JnXCJdID09IG51bGwgPyB2b2lkIDAgOiAoMCwgT3JnYW5pemF0aW9uU2V0dGluZ3NfMS5Pcmdhbml6YXRpb25TZXR0aW5nc0Zyb21KU09OKShqc29uW1wib3JnXCJdKVxuXHRcdH07XG5cdH1cblx0ZnVuY3Rpb24gT3JnYW5pemF0aW9uQ29uZmlnUmVzdWx0c1RvSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIE9yZ2FuaXphdGlvbkNvbmZpZ1Jlc3VsdHNUb0pTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gT3JnYW5pemF0aW9uQ29uZmlnUmVzdWx0c1RvSlNPTlR5cGVkKHZhbHVlLCBpZ25vcmVEaXNjcmltaW5hdG9yID0gZmFsc2UpIHtcblx0XHRpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIHZhbHVlO1xuXHRcdHJldHVybiB7XG5cdFx0XHRcImNvbmZpZ3NcIjogdmFsdWVbXCJjb25maWdzXCJdID09IG51bGwgPyB2b2lkIDAgOiB2YWx1ZVtcImNvbmZpZ3NcIl0ubWFwKE9yZ2FuaXphdGlvbkNvbmZpZ18xLk9yZ2FuaXphdGlvbkNvbmZpZ1RvSlNPTiksXG5cdFx0XHRcImV4cGVyaW1lbnRzXCI6IHZhbHVlW1wiZXhwZXJpbWVudHNcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IHZhbHVlW1wiZXhwZXJpbWVudHNcIl0ubWFwKFN0YXRzaWdFeHBlcmltZW50XzEuU3RhdHNpZ0V4cGVyaW1lbnRUb0pTT04pLFxuXHRcdFx0XCJnYXRlc1wiOiB2YWx1ZVtcImdhdGVzXCJdID09IG51bGwgPyB2b2lkIDAgOiB2YWx1ZVtcImdhdGVzXCJdLm1hcChTdGF0c2lnRmVhdHVyZUdhdGVfMS5TdGF0c2lnRmVhdHVyZUdhdGVUb0pTT04pLFxuXHRcdFx0XCJvcmdcIjogKDAsIE9yZ2FuaXphdGlvblNldHRpbmdzXzEuT3JnYW5pemF0aW9uU2V0dGluZ3NUb0pTT04pKHZhbHVlW1wib3JnXCJdKVxuXHRcdH07XG5cdH1cbn0pIH0pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiAuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL1Byb2R1Y3RSZXRyaWV2YWxSZXF1ZXN0LmpzXG52YXIgcmVxdWlyZV9Qcm9kdWN0UmV0cmlldmFsUmVxdWVzdCA9IC8qIEBfX1BVUkVfXyAqLyBfX2NvbW1vbkpTKHsgXCIuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL1Byb2R1Y3RSZXRyaWV2YWxSZXF1ZXN0LmpzXCI6ICgoZXhwb3J0cykgPT4ge1xuXHQvKipcblx0KiBDb21tZXJjZVxuXHQqIE5vIGRlc2NyaXB0aW9uIHByb3ZpZGVkIChnZW5lcmF0ZWQgYnkgT3BlbmFwaSBHZW5lcmF0b3IgaHR0cHM6Ly9naXRodWIuY29tL29wZW5hcGl0b29scy9vcGVuYXBpLWdlbmVyYXRvcilcblx0KlxuXHQqIFRoZSB2ZXJzaW9uIG9mIHRoZSBPcGVuQVBJIGRvY3VtZW50OiAxLjEuMFxuXHQqXG5cdCpcblx0KiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IE9wZW5BUEkgR2VuZXJhdG9yIChodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2gpLlxuXHQqIGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaFxuXHQqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cblx0Ki9cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuXHRleHBvcnRzLmluc3RhbmNlT2ZQcm9kdWN0UmV0cmlldmFsUmVxdWVzdCA9IGluc3RhbmNlT2ZQcm9kdWN0UmV0cmlldmFsUmVxdWVzdDtcblx0ZXhwb3J0cy5Qcm9kdWN0UmV0cmlldmFsUmVxdWVzdEZyb21KU09OID0gUHJvZHVjdFJldHJpZXZhbFJlcXVlc3RGcm9tSlNPTjtcblx0ZXhwb3J0cy5Qcm9kdWN0UmV0cmlldmFsUmVxdWVzdEZyb21KU09OVHlwZWQgPSBQcm9kdWN0UmV0cmlldmFsUmVxdWVzdEZyb21KU09OVHlwZWQ7XG5cdGV4cG9ydHMuUHJvZHVjdFJldHJpZXZhbFJlcXVlc3RUb0pTT04gPSBQcm9kdWN0UmV0cmlldmFsUmVxdWVzdFRvSlNPTjtcblx0ZXhwb3J0cy5Qcm9kdWN0UmV0cmlldmFsUmVxdWVzdFRvSlNPTlR5cGVkID0gUHJvZHVjdFJldHJpZXZhbFJlcXVlc3RUb0pTT05UeXBlZDtcblx0Y29uc3QgQ29udGV4dF8xJDIgPSByZXF1aXJlX0NvbnRleHQoKTtcblx0LyoqXG5cdCogQ2hlY2sgaWYgYSBnaXZlbiBvYmplY3QgaW1wbGVtZW50cyB0aGUgUHJvZHVjdFJldHJpZXZhbFJlcXVlc3QgaW50ZXJmYWNlLlxuXHQqL1xuXHRmdW5jdGlvbiBpbnN0YW5jZU9mUHJvZHVjdFJldHJpZXZhbFJlcXVlc3QodmFsdWUpIHtcblx0XHRpZiAoIShcImNvbnRleHRcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJjb250ZXh0XCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRpZiAoIShcInByb2R1Y3RfaWRzXCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wicHJvZHVjdF9pZHNcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdGZ1bmN0aW9uIFByb2R1Y3RSZXRyaWV2YWxSZXF1ZXN0RnJvbUpTT04oanNvbikge1xuXHRcdHJldHVybiBQcm9kdWN0UmV0cmlldmFsUmVxdWVzdEZyb21KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIFByb2R1Y3RSZXRyaWV2YWxSZXF1ZXN0RnJvbUpTT05UeXBlZChqc29uLCBpZ25vcmVEaXNjcmltaW5hdG9yKSB7XG5cdFx0aWYgKGpzb24gPT0gbnVsbCkgcmV0dXJuIGpzb247XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwiY29udGV4dFwiOiAoMCwgQ29udGV4dF8xJDIuQ29udGV4dEZyb21KU09OKShqc29uW1wiY29udGV4dFwiXSksXG5cdFx0XHRcInByb2R1Y3RfaWRzXCI6IGpzb25bXCJwcm9kdWN0X2lkc1wiXVxuXHRcdH07XG5cdH1cblx0ZnVuY3Rpb24gUHJvZHVjdFJldHJpZXZhbFJlcXVlc3RUb0pTT04oanNvbikge1xuXHRcdHJldHVybiBQcm9kdWN0UmV0cmlldmFsUmVxdWVzdFRvSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBQcm9kdWN0UmV0cmlldmFsUmVxdWVzdFRvSlNPTlR5cGVkKHZhbHVlLCBpZ25vcmVEaXNjcmltaW5hdG9yID0gZmFsc2UpIHtcblx0XHRpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIHZhbHVlO1xuXHRcdHJldHVybiB7XG5cdFx0XHRcImNvbnRleHRcIjogKDAsIENvbnRleHRfMSQyLkNvbnRleHRUb0pTT04pKHZhbHVlW1wiY29udGV4dFwiXSksXG5cdFx0XHRcInByb2R1Y3RfaWRzXCI6IHZhbHVlW1wicHJvZHVjdF9pZHNcIl1cblx0XHR9O1xuXHR9XG59KSB9KTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9SZXNwb25zZVByb2R1Y3RBdHRyaWJ1dGVzLmpzXG52YXIgcmVxdWlyZV9SZXNwb25zZVByb2R1Y3RBdHRyaWJ1dGVzID0gLyogQF9fUFVSRV9fICovIF9fY29tbW9uSlMoeyBcIi4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvUmVzcG9uc2VQcm9kdWN0QXR0cmlidXRlcy5qc1wiOiAoKGV4cG9ydHMpID0+IHtcblx0LyoqXG5cdCogQ29tbWVyY2Vcblx0KiBObyBkZXNjcmlwdGlvbiBwcm92aWRlZCAoZ2VuZXJhdGVkIGJ5IE9wZW5hcGkgR2VuZXJhdG9yIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuYXBpdG9vbHMvb3BlbmFwaS1nZW5lcmF0b3IpXG5cdCpcblx0KiBUaGUgdmVyc2lvbiBvZiB0aGUgT3BlbkFQSSBkb2N1bWVudDogMS4xLjBcblx0KlxuXHQqXG5cdCogTk9URTogVGhpcyBjbGFzcyBpcyBhdXRvIGdlbmVyYXRlZCBieSBPcGVuQVBJIEdlbmVyYXRvciAoaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoKS5cblx0KiBodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2hcblx0KiBEbyBub3QgZWRpdCB0aGUgY2xhc3MgbWFudWFsbHkuXG5cdCovXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcblx0ZXhwb3J0cy5pbnN0YW5jZU9mUmVzcG9uc2VQcm9kdWN0QXR0cmlidXRlcyA9IGluc3RhbmNlT2ZSZXNwb25zZVByb2R1Y3RBdHRyaWJ1dGVzO1xuXHRleHBvcnRzLlJlc3BvbnNlUHJvZHVjdEF0dHJpYnV0ZXNGcm9tSlNPTiA9IFJlc3BvbnNlUHJvZHVjdEF0dHJpYnV0ZXNGcm9tSlNPTjtcblx0ZXhwb3J0cy5SZXNwb25zZVByb2R1Y3RBdHRyaWJ1dGVzRnJvbUpTT05UeXBlZCA9IFJlc3BvbnNlUHJvZHVjdEF0dHJpYnV0ZXNGcm9tSlNPTlR5cGVkO1xuXHRleHBvcnRzLlJlc3BvbnNlUHJvZHVjdEF0dHJpYnV0ZXNUb0pTT04gPSBSZXNwb25zZVByb2R1Y3RBdHRyaWJ1dGVzVG9KU09OO1xuXHRleHBvcnRzLlJlc3BvbnNlUHJvZHVjdEF0dHJpYnV0ZXNUb0pTT05UeXBlZCA9IFJlc3BvbnNlUHJvZHVjdEF0dHJpYnV0ZXNUb0pTT05UeXBlZDtcblx0Y29uc3QgTGFiZWxWYWx1ZV8xJDEgPSByZXF1aXJlX0xhYmVsVmFsdWUoKTtcblx0LyoqXG5cdCogQ2hlY2sgaWYgYSBnaXZlbiBvYmplY3QgaW1wbGVtZW50cyB0aGUgUmVzcG9uc2VQcm9kdWN0QXR0cmlidXRlcyBpbnRlcmZhY2UuXG5cdCovXG5cdGZ1bmN0aW9uIGluc3RhbmNlT2ZSZXNwb25zZVByb2R1Y3RBdHRyaWJ1dGVzKHZhbHVlKSB7XG5cdFx0aWYgKCEoXCJpZFwiIGluIHZhbHVlKSB8fCB2YWx1ZVtcImlkXCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRpZiAoIShcInRpdGxlXCIgaW4gdmFsdWUpIHx8IHZhbHVlW1widGl0bGVcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdGlmICghKFwidXJsXCIgaW4gdmFsdWUpIHx8IHZhbHVlW1widXJsXCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHRmdW5jdGlvbiBSZXNwb25zZVByb2R1Y3RBdHRyaWJ1dGVzRnJvbUpTT04oanNvbikge1xuXHRcdHJldHVybiBSZXNwb25zZVByb2R1Y3RBdHRyaWJ1dGVzRnJvbUpTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gUmVzcG9uc2VQcm9kdWN0QXR0cmlidXRlc0Zyb21KU09OVHlwZWQoanNvbiwgaWdub3JlRGlzY3JpbWluYXRvcikge1xuXHRcdGlmIChqc29uID09IG51bGwpIHJldHVybiBqc29uO1xuXHRcdHJldHVybiB7XG5cdFx0XHRcImF2ZXJhZ2VfcmF0aW5nXCI6IGpzb25bXCJhdmVyYWdlX3JhdGluZ1wiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcImF2ZXJhZ2VfcmF0aW5nXCJdLFxuXHRcdFx0XCJjb2xvcnNcIjoganNvbltcImNvbG9yc1wiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcImNvbG9yc1wiXSxcblx0XHRcdFwiZGVzY3JpcHRpb25cIjoganNvbltcImRlc2NyaXB0aW9uXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wiZGVzY3JpcHRpb25cIl0sXG5cdFx0XHRcImZpbHRlcnNcIjoganNvbltcImZpbHRlcnNcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IGpzb25bXCJmaWx0ZXJzXCJdLFxuXHRcdFx0XCJpZFwiOiBqc29uW1wiaWRcIl0sXG5cdFx0XHRcImltYWdlX3VybFwiOiBqc29uW1wiaW1hZ2VfdXJsXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wiaW1hZ2VfdXJsXCJdLFxuXHRcdFx0XCJpbWFnZV91cmxzXCI6IGpzb25bXCJpbWFnZV91cmxzXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wiaW1hZ2VfdXJsc1wiXSxcblx0XHRcdFwiaXNfZm9yX2dyaWRcIjoganNvbltcImlzX2Zvcl9ncmlkXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wiaXNfZm9yX2dyaWRcIl0sXG5cdFx0XHRcIm1ldGFkYXRhXCI6IGpzb25bXCJtZXRhZGF0YVwiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcIm1ldGFkYXRhXCJdLm1hcChMYWJlbFZhbHVlXzEkMS5MYWJlbFZhbHVlRnJvbUpTT04pLFxuXHRcdFx0XCJudW1iZXJfcmV2aWV3c1wiOiBqc29uW1wibnVtYmVyX3Jldmlld3NcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IGpzb25bXCJudW1iZXJfcmV2aWV3c1wiXSxcblx0XHRcdFwib3JpZ2luYWxfcHJpY2VcIjoganNvbltcIm9yaWdpbmFsX3ByaWNlXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wib3JpZ2luYWxfcHJpY2VcIl0sXG5cdFx0XHRcInNhbGVfcHJpY2VcIjoganNvbltcInNhbGVfcHJpY2VcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IGpzb25bXCJzYWxlX3ByaWNlXCJdLFxuXHRcdFx0XCJzaXplc1wiOiBqc29uW1wic2l6ZXNcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IGpzb25bXCJzaXplc1wiXSxcblx0XHRcdFwidGl0bGVcIjoganNvbltcInRpdGxlXCJdLFxuXHRcdFx0XCJ1cmxcIjoganNvbltcInVybFwiXVxuXHRcdH07XG5cdH1cblx0ZnVuY3Rpb24gUmVzcG9uc2VQcm9kdWN0QXR0cmlidXRlc1RvSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIFJlc3BvbnNlUHJvZHVjdEF0dHJpYnV0ZXNUb0pTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gUmVzcG9uc2VQcm9kdWN0QXR0cmlidXRlc1RvSlNPTlR5cGVkKHZhbHVlLCBpZ25vcmVEaXNjcmltaW5hdG9yID0gZmFsc2UpIHtcblx0XHRpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIHZhbHVlO1xuXHRcdHJldHVybiB7XG5cdFx0XHRcImF2ZXJhZ2VfcmF0aW5nXCI6IHZhbHVlW1wiYXZlcmFnZV9yYXRpbmdcIl0sXG5cdFx0XHRcImNvbG9yc1wiOiB2YWx1ZVtcImNvbG9yc1wiXSxcblx0XHRcdFwiZGVzY3JpcHRpb25cIjogdmFsdWVbXCJkZXNjcmlwdGlvblwiXSxcblx0XHRcdFwiZmlsdGVyc1wiOiB2YWx1ZVtcImZpbHRlcnNcIl0sXG5cdFx0XHRcImlkXCI6IHZhbHVlW1wiaWRcIl0sXG5cdFx0XHRcImltYWdlX3VybFwiOiB2YWx1ZVtcImltYWdlX3VybFwiXSxcblx0XHRcdFwiaW1hZ2VfdXJsc1wiOiB2YWx1ZVtcImltYWdlX3VybHNcIl0sXG5cdFx0XHRcImlzX2Zvcl9ncmlkXCI6IHZhbHVlW1wiaXNfZm9yX2dyaWRcIl0sXG5cdFx0XHRcIm1ldGFkYXRhXCI6IHZhbHVlW1wibWV0YWRhdGFcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IHZhbHVlW1wibWV0YWRhdGFcIl0ubWFwKExhYmVsVmFsdWVfMSQxLkxhYmVsVmFsdWVUb0pTT04pLFxuXHRcdFx0XCJudW1iZXJfcmV2aWV3c1wiOiB2YWx1ZVtcIm51bWJlcl9yZXZpZXdzXCJdLFxuXHRcdFx0XCJvcmlnaW5hbF9wcmljZVwiOiB2YWx1ZVtcIm9yaWdpbmFsX3ByaWNlXCJdLFxuXHRcdFx0XCJzYWxlX3ByaWNlXCI6IHZhbHVlW1wic2FsZV9wcmljZVwiXSxcblx0XHRcdFwic2l6ZXNcIjogdmFsdWVbXCJzaXplc1wiXSxcblx0XHRcdFwidGl0bGVcIjogdmFsdWVbXCJ0aXRsZVwiXSxcblx0XHRcdFwidXJsXCI6IHZhbHVlW1widXJsXCJdXG5cdFx0fTtcblx0fVxufSkgfSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIC4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvUHJvZHVjdFJldHJpZXZhbFJlc3BvbnNlLmpzXG52YXIgcmVxdWlyZV9Qcm9kdWN0UmV0cmlldmFsUmVzcG9uc2UgPSAvKiBAX19QVVJFX18gKi8gX19jb21tb25KUyh7IFwiLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9Qcm9kdWN0UmV0cmlldmFsUmVzcG9uc2UuanNcIjogKChleHBvcnRzKSA9PiB7XG5cdC8qKlxuXHQqIENvbW1lcmNlXG5cdCogTm8gZGVzY3JpcHRpb24gcHJvdmlkZWQgKGdlbmVyYXRlZCBieSBPcGVuYXBpIEdlbmVyYXRvciBodHRwczovL2dpdGh1Yi5jb20vb3BlbmFwaXRvb2xzL29wZW5hcGktZ2VuZXJhdG9yKVxuXHQqXG5cdCogVGhlIHZlcnNpb24gb2YgdGhlIE9wZW5BUEkgZG9jdW1lbnQ6IDEuMS4wXG5cdCpcblx0KlxuXHQqIE5PVEU6IFRoaXMgY2xhc3MgaXMgYXV0byBnZW5lcmF0ZWQgYnkgT3BlbkFQSSBHZW5lcmF0b3IgKGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaCkuXG5cdCogaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoXG5cdCogRG8gbm90IGVkaXQgdGhlIGNsYXNzIG1hbnVhbGx5LlxuXHQqL1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5cdGV4cG9ydHMuaW5zdGFuY2VPZlByb2R1Y3RSZXRyaWV2YWxSZXNwb25zZSA9IGluc3RhbmNlT2ZQcm9kdWN0UmV0cmlldmFsUmVzcG9uc2U7XG5cdGV4cG9ydHMuUHJvZHVjdFJldHJpZXZhbFJlc3BvbnNlRnJvbUpTT04gPSBQcm9kdWN0UmV0cmlldmFsUmVzcG9uc2VGcm9tSlNPTjtcblx0ZXhwb3J0cy5Qcm9kdWN0UmV0cmlldmFsUmVzcG9uc2VGcm9tSlNPTlR5cGVkID0gUHJvZHVjdFJldHJpZXZhbFJlc3BvbnNlRnJvbUpTT05UeXBlZDtcblx0ZXhwb3J0cy5Qcm9kdWN0UmV0cmlldmFsUmVzcG9uc2VUb0pTT04gPSBQcm9kdWN0UmV0cmlldmFsUmVzcG9uc2VUb0pTT047XG5cdGV4cG9ydHMuUHJvZHVjdFJldHJpZXZhbFJlc3BvbnNlVG9KU09OVHlwZWQgPSBQcm9kdWN0UmV0cmlldmFsUmVzcG9uc2VUb0pTT05UeXBlZDtcblx0Y29uc3QgUmVzcG9uc2VQcm9kdWN0QXR0cmlidXRlc18xID0gcmVxdWlyZV9SZXNwb25zZVByb2R1Y3RBdHRyaWJ1dGVzKCk7XG5cdC8qKlxuXHQqIENoZWNrIGlmIGEgZ2l2ZW4gb2JqZWN0IGltcGxlbWVudHMgdGhlIFByb2R1Y3RSZXRyaWV2YWxSZXNwb25zZSBpbnRlcmZhY2UuXG5cdCovXG5cdGZ1bmN0aW9uIGluc3RhbmNlT2ZQcm9kdWN0UmV0cmlldmFsUmVzcG9uc2UodmFsdWUpIHtcblx0XHRpZiAoIShcInByb2R1Y3RzXCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wicHJvZHVjdHNcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdGZ1bmN0aW9uIFByb2R1Y3RSZXRyaWV2YWxSZXNwb25zZUZyb21KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gUHJvZHVjdFJldHJpZXZhbFJlc3BvbnNlRnJvbUpTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gUHJvZHVjdFJldHJpZXZhbFJlc3BvbnNlRnJvbUpTT05UeXBlZChqc29uLCBpZ25vcmVEaXNjcmltaW5hdG9yKSB7XG5cdFx0aWYgKGpzb24gPT0gbnVsbCkgcmV0dXJuIGpzb247XG5cdFx0cmV0dXJuIHsgXCJwcm9kdWN0c1wiOiBqc29uW1wicHJvZHVjdHNcIl0ubWFwKFJlc3BvbnNlUHJvZHVjdEF0dHJpYnV0ZXNfMS5SZXNwb25zZVByb2R1Y3RBdHRyaWJ1dGVzRnJvbUpTT04pIH07XG5cdH1cblx0ZnVuY3Rpb24gUHJvZHVjdFJldHJpZXZhbFJlc3BvbnNlVG9KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gUHJvZHVjdFJldHJpZXZhbFJlc3BvbnNlVG9KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIFByb2R1Y3RSZXRyaWV2YWxSZXNwb25zZVRvSlNPTlR5cGVkKHZhbHVlLCBpZ25vcmVEaXNjcmltaW5hdG9yID0gZmFsc2UpIHtcblx0XHRpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIHZhbHVlO1xuXHRcdHJldHVybiB7IFwicHJvZHVjdHNcIjogdmFsdWVbXCJwcm9kdWN0c1wiXS5tYXAoUmVzcG9uc2VQcm9kdWN0QXR0cmlidXRlc18xLlJlc3BvbnNlUHJvZHVjdEF0dHJpYnV0ZXNUb0pTT04pIH07XG5cdH1cbn0pIH0pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiAuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL1Byb2R1Y3RTZWFyY2hGaWx0ZXJSZXNwb25zZUF0dHJpYnV0ZXMuanNcbnZhciByZXF1aXJlX1Byb2R1Y3RTZWFyY2hGaWx0ZXJSZXNwb25zZUF0dHJpYnV0ZXMgPSAvKiBAX19QVVJFX18gKi8gX19jb21tb25KUyh7IFwiLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9Qcm9kdWN0U2VhcmNoRmlsdGVyUmVzcG9uc2VBdHRyaWJ1dGVzLmpzXCI6ICgoZXhwb3J0cykgPT4ge1xuXHQvKipcblx0KiBDb21tZXJjZVxuXHQqIE5vIGRlc2NyaXB0aW9uIHByb3ZpZGVkIChnZW5lcmF0ZWQgYnkgT3BlbmFwaSBHZW5lcmF0b3IgaHR0cHM6Ly9naXRodWIuY29tL29wZW5hcGl0b29scy9vcGVuYXBpLWdlbmVyYXRvcilcblx0KlxuXHQqIFRoZSB2ZXJzaW9uIG9mIHRoZSBPcGVuQVBJIGRvY3VtZW50OiAxLjEuMFxuXHQqXG5cdCpcblx0KiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IE9wZW5BUEkgR2VuZXJhdG9yIChodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2gpLlxuXHQqIGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaFxuXHQqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cblx0Ki9cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuXHRleHBvcnRzLmluc3RhbmNlT2ZQcm9kdWN0U2VhcmNoRmlsdGVyUmVzcG9uc2VBdHRyaWJ1dGVzID0gaW5zdGFuY2VPZlByb2R1Y3RTZWFyY2hGaWx0ZXJSZXNwb25zZUF0dHJpYnV0ZXM7XG5cdGV4cG9ydHMuUHJvZHVjdFNlYXJjaEZpbHRlclJlc3BvbnNlQXR0cmlidXRlc0Zyb21KU09OID0gUHJvZHVjdFNlYXJjaEZpbHRlclJlc3BvbnNlQXR0cmlidXRlc0Zyb21KU09OO1xuXHRleHBvcnRzLlByb2R1Y3RTZWFyY2hGaWx0ZXJSZXNwb25zZUF0dHJpYnV0ZXNGcm9tSlNPTlR5cGVkID0gUHJvZHVjdFNlYXJjaEZpbHRlclJlc3BvbnNlQXR0cmlidXRlc0Zyb21KU09OVHlwZWQ7XG5cdGV4cG9ydHMuUHJvZHVjdFNlYXJjaEZpbHRlclJlc3BvbnNlQXR0cmlidXRlc1RvSlNPTiA9IFByb2R1Y3RTZWFyY2hGaWx0ZXJSZXNwb25zZUF0dHJpYnV0ZXNUb0pTT047XG5cdGV4cG9ydHMuUHJvZHVjdFNlYXJjaEZpbHRlclJlc3BvbnNlQXR0cmlidXRlc1RvSlNPTlR5cGVkID0gUHJvZHVjdFNlYXJjaEZpbHRlclJlc3BvbnNlQXR0cmlidXRlc1RvSlNPTlR5cGVkO1xuXHQvKipcblx0KiBDaGVjayBpZiBhIGdpdmVuIG9iamVjdCBpbXBsZW1lbnRzIHRoZSBQcm9kdWN0U2VhcmNoRmlsdGVyUmVzcG9uc2VBdHRyaWJ1dGVzIGludGVyZmFjZS5cblx0Ki9cblx0ZnVuY3Rpb24gaW5zdGFuY2VPZlByb2R1Y3RTZWFyY2hGaWx0ZXJSZXNwb25zZUF0dHJpYnV0ZXModmFsdWUpIHtcblx0XHRpZiAoIShcImZpbHRlcl9uYW1lXCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wiZmlsdGVyX25hbWVcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdGZ1bmN0aW9uIFByb2R1Y3RTZWFyY2hGaWx0ZXJSZXNwb25zZUF0dHJpYnV0ZXNGcm9tSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIFByb2R1Y3RTZWFyY2hGaWx0ZXJSZXNwb25zZUF0dHJpYnV0ZXNGcm9tSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBQcm9kdWN0U2VhcmNoRmlsdGVyUmVzcG9uc2VBdHRyaWJ1dGVzRnJvbUpTT05UeXBlZChqc29uLCBpZ25vcmVEaXNjcmltaW5hdG9yKSB7XG5cdFx0aWYgKGpzb24gPT0gbnVsbCkgcmV0dXJuIGpzb247XG5cdFx0cmV0dXJuIHsgXCJmaWx0ZXJfbmFtZVwiOiBqc29uW1wiZmlsdGVyX25hbWVcIl0gfTtcblx0fVxuXHRmdW5jdGlvbiBQcm9kdWN0U2VhcmNoRmlsdGVyUmVzcG9uc2VBdHRyaWJ1dGVzVG9KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gUHJvZHVjdFNlYXJjaEZpbHRlclJlc3BvbnNlQXR0cmlidXRlc1RvSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBQcm9kdWN0U2VhcmNoRmlsdGVyUmVzcG9uc2VBdHRyaWJ1dGVzVG9KU09OVHlwZWQodmFsdWUsIGlnbm9yZURpc2NyaW1pbmF0b3IgPSBmYWxzZSkge1xuXHRcdGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gdmFsdWU7XG5cdFx0cmV0dXJuIHsgXCJmaWx0ZXJfbmFtZVwiOiB2YWx1ZVtcImZpbHRlcl9uYW1lXCJdIH07XG5cdH1cbn0pIH0pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiAuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL1NlYXJjaFJlc3BvbnNlUHJvZHVjdC5qc1xudmFyIHJlcXVpcmVfU2VhcmNoUmVzcG9uc2VQcm9kdWN0ID0gLyogQF9fUFVSRV9fICovIF9fY29tbW9uSlMoeyBcIi4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvU2VhcmNoUmVzcG9uc2VQcm9kdWN0LmpzXCI6ICgoZXhwb3J0cykgPT4ge1xuXHQvKipcblx0KiBDb21tZXJjZVxuXHQqIE5vIGRlc2NyaXB0aW9uIHByb3ZpZGVkIChnZW5lcmF0ZWQgYnkgT3BlbmFwaSBHZW5lcmF0b3IgaHR0cHM6Ly9naXRodWIuY29tL29wZW5hcGl0b29scy9vcGVuYXBpLWdlbmVyYXRvcilcblx0KlxuXHQqIFRoZSB2ZXJzaW9uIG9mIHRoZSBPcGVuQVBJIGRvY3VtZW50OiAxLjEuMFxuXHQqXG5cdCpcblx0KiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IE9wZW5BUEkgR2VuZXJhdG9yIChodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2gpLlxuXHQqIGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaFxuXHQqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cblx0Ki9cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuXHRleHBvcnRzLmluc3RhbmNlT2ZTZWFyY2hSZXNwb25zZVByb2R1Y3QgPSBpbnN0YW5jZU9mU2VhcmNoUmVzcG9uc2VQcm9kdWN0O1xuXHRleHBvcnRzLlNlYXJjaFJlc3BvbnNlUHJvZHVjdEZyb21KU09OID0gU2VhcmNoUmVzcG9uc2VQcm9kdWN0RnJvbUpTT047XG5cdGV4cG9ydHMuU2VhcmNoUmVzcG9uc2VQcm9kdWN0RnJvbUpTT05UeXBlZCA9IFNlYXJjaFJlc3BvbnNlUHJvZHVjdEZyb21KU09OVHlwZWQ7XG5cdGV4cG9ydHMuU2VhcmNoUmVzcG9uc2VQcm9kdWN0VG9KU09OID0gU2VhcmNoUmVzcG9uc2VQcm9kdWN0VG9KU09OO1xuXHRleHBvcnRzLlNlYXJjaFJlc3BvbnNlUHJvZHVjdFRvSlNPTlR5cGVkID0gU2VhcmNoUmVzcG9uc2VQcm9kdWN0VG9KU09OVHlwZWQ7XG5cdGNvbnN0IExhYmVsVmFsdWVfMSA9IHJlcXVpcmVfTGFiZWxWYWx1ZSgpO1xuXHQvKipcblx0KiBDaGVjayBpZiBhIGdpdmVuIG9iamVjdCBpbXBsZW1lbnRzIHRoZSBTZWFyY2hSZXNwb25zZVByb2R1Y3QgaW50ZXJmYWNlLlxuXHQqL1xuXHRmdW5jdGlvbiBpbnN0YW5jZU9mU2VhcmNoUmVzcG9uc2VQcm9kdWN0KHZhbHVlKSB7XG5cdFx0aWYgKCEoXCJpZFwiIGluIHZhbHVlKSB8fCB2YWx1ZVtcImlkXCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRpZiAoIShcInRpdGxlXCIgaW4gdmFsdWUpIHx8IHZhbHVlW1widGl0bGVcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdGlmICghKFwidXJsXCIgaW4gdmFsdWUpIHx8IHZhbHVlW1widXJsXCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHRmdW5jdGlvbiBTZWFyY2hSZXNwb25zZVByb2R1Y3RGcm9tSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIFNlYXJjaFJlc3BvbnNlUHJvZHVjdEZyb21KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIFNlYXJjaFJlc3BvbnNlUHJvZHVjdEZyb21KU09OVHlwZWQoanNvbiwgaWdub3JlRGlzY3JpbWluYXRvcikge1xuXHRcdGlmIChqc29uID09IG51bGwpIHJldHVybiBqc29uO1xuXHRcdHJldHVybiB7XG5cdFx0XHRcImF2ZXJhZ2VfcmF0aW5nXCI6IGpzb25bXCJhdmVyYWdlX3JhdGluZ1wiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcImF2ZXJhZ2VfcmF0aW5nXCJdLFxuXHRcdFx0XCJjb2xvcnNcIjoganNvbltcImNvbG9yc1wiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcImNvbG9yc1wiXSxcblx0XHRcdFwiZGVzY3JpcHRpb25cIjoganNvbltcImRlc2NyaXB0aW9uXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wiZGVzY3JpcHRpb25cIl0sXG5cdFx0XHRcImZpbHRlcnNcIjoganNvbltcImZpbHRlcnNcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IGpzb25bXCJmaWx0ZXJzXCJdLFxuXHRcdFx0XCJpZFwiOiBqc29uW1wiaWRcIl0sXG5cdFx0XHRcImltYWdlX3VybFwiOiBqc29uW1wiaW1hZ2VfdXJsXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wiaW1hZ2VfdXJsXCJdLFxuXHRcdFx0XCJpbWFnZV91cmxzXCI6IGpzb25bXCJpbWFnZV91cmxzXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wiaW1hZ2VfdXJsc1wiXSxcblx0XHRcdFwiaXNfZm9yX2dyaWRcIjoganNvbltcImlzX2Zvcl9ncmlkXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wiaXNfZm9yX2dyaWRcIl0sXG5cdFx0XHRcIm1ldGFkYXRhXCI6IGpzb25bXCJtZXRhZGF0YVwiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcIm1ldGFkYXRhXCJdLm1hcChMYWJlbFZhbHVlXzEuTGFiZWxWYWx1ZUZyb21KU09OKSxcblx0XHRcdFwibnVtYmVyX3Jldmlld3NcIjoganNvbltcIm51bWJlcl9yZXZpZXdzXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wibnVtYmVyX3Jldmlld3NcIl0sXG5cdFx0XHRcIm9yaWdpbmFsX3ByaWNlXCI6IGpzb25bXCJvcmlnaW5hbF9wcmljZVwiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcIm9yaWdpbmFsX3ByaWNlXCJdLFxuXHRcdFx0XCJzYWxlX3ByaWNlXCI6IGpzb25bXCJzYWxlX3ByaWNlXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wic2FsZV9wcmljZVwiXSxcblx0XHRcdFwic2l6ZXNcIjoganNvbltcInNpemVzXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wic2l6ZXNcIl0sXG5cdFx0XHRcInRpdGxlXCI6IGpzb25bXCJ0aXRsZVwiXSxcblx0XHRcdFwidXJsXCI6IGpzb25bXCJ1cmxcIl0sXG5cdFx0XHRcInJlc3BvbnNlX2lkXCI6IGpzb25bXCJyZXNwb25zZV9pZFwiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcInJlc3BvbnNlX2lkXCJdXG5cdFx0fTtcblx0fVxuXHRmdW5jdGlvbiBTZWFyY2hSZXNwb25zZVByb2R1Y3RUb0pTT04oanNvbikge1xuXHRcdHJldHVybiBTZWFyY2hSZXNwb25zZVByb2R1Y3RUb0pTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gU2VhcmNoUmVzcG9uc2VQcm9kdWN0VG9KU09OVHlwZWQodmFsdWUsIGlnbm9yZURpc2NyaW1pbmF0b3IgPSBmYWxzZSkge1xuXHRcdGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gdmFsdWU7XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwiYXZlcmFnZV9yYXRpbmdcIjogdmFsdWVbXCJhdmVyYWdlX3JhdGluZ1wiXSxcblx0XHRcdFwiY29sb3JzXCI6IHZhbHVlW1wiY29sb3JzXCJdLFxuXHRcdFx0XCJkZXNjcmlwdGlvblwiOiB2YWx1ZVtcImRlc2NyaXB0aW9uXCJdLFxuXHRcdFx0XCJmaWx0ZXJzXCI6IHZhbHVlW1wiZmlsdGVyc1wiXSxcblx0XHRcdFwiaWRcIjogdmFsdWVbXCJpZFwiXSxcblx0XHRcdFwiaW1hZ2VfdXJsXCI6IHZhbHVlW1wiaW1hZ2VfdXJsXCJdLFxuXHRcdFx0XCJpbWFnZV91cmxzXCI6IHZhbHVlW1wiaW1hZ2VfdXJsc1wiXSxcblx0XHRcdFwiaXNfZm9yX2dyaWRcIjogdmFsdWVbXCJpc19mb3JfZ3JpZFwiXSxcblx0XHRcdFwibWV0YWRhdGFcIjogdmFsdWVbXCJtZXRhZGF0YVwiXSA9PSBudWxsID8gdm9pZCAwIDogdmFsdWVbXCJtZXRhZGF0YVwiXS5tYXAoTGFiZWxWYWx1ZV8xLkxhYmVsVmFsdWVUb0pTT04pLFxuXHRcdFx0XCJudW1iZXJfcmV2aWV3c1wiOiB2YWx1ZVtcIm51bWJlcl9yZXZpZXdzXCJdLFxuXHRcdFx0XCJvcmlnaW5hbF9wcmljZVwiOiB2YWx1ZVtcIm9yaWdpbmFsX3ByaWNlXCJdLFxuXHRcdFx0XCJzYWxlX3ByaWNlXCI6IHZhbHVlW1wic2FsZV9wcmljZVwiXSxcblx0XHRcdFwic2l6ZXNcIjogdmFsdWVbXCJzaXplc1wiXSxcblx0XHRcdFwidGl0bGVcIjogdmFsdWVbXCJ0aXRsZVwiXSxcblx0XHRcdFwidXJsXCI6IHZhbHVlW1widXJsXCJdLFxuXHRcdFx0XCJyZXNwb25zZV9pZFwiOiB2YWx1ZVtcInJlc3BvbnNlX2lkXCJdXG5cdFx0fTtcblx0fVxufSkgfSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIC4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvUHJvZHVjdFNlYXJjaFJlc3BvbnNlLmpzXG52YXIgcmVxdWlyZV9Qcm9kdWN0U2VhcmNoUmVzcG9uc2UgPSAvKiBAX19QVVJFX18gKi8gX19jb21tb25KUyh7IFwiLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9Qcm9kdWN0U2VhcmNoUmVzcG9uc2UuanNcIjogKChleHBvcnRzKSA9PiB7XG5cdC8qKlxuXHQqIENvbW1lcmNlXG5cdCogTm8gZGVzY3JpcHRpb24gcHJvdmlkZWQgKGdlbmVyYXRlZCBieSBPcGVuYXBpIEdlbmVyYXRvciBodHRwczovL2dpdGh1Yi5jb20vb3BlbmFwaXRvb2xzL29wZW5hcGktZ2VuZXJhdG9yKVxuXHQqXG5cdCogVGhlIHZlcnNpb24gb2YgdGhlIE9wZW5BUEkgZG9jdW1lbnQ6IDEuMS4wXG5cdCpcblx0KlxuXHQqIE5PVEU6IFRoaXMgY2xhc3MgaXMgYXV0byBnZW5lcmF0ZWQgYnkgT3BlbkFQSSBHZW5lcmF0b3IgKGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaCkuXG5cdCogaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoXG5cdCogRG8gbm90IGVkaXQgdGhlIGNsYXNzIG1hbnVhbGx5LlxuXHQqL1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5cdGV4cG9ydHMuaW5zdGFuY2VPZlByb2R1Y3RTZWFyY2hSZXNwb25zZSA9IGluc3RhbmNlT2ZQcm9kdWN0U2VhcmNoUmVzcG9uc2U7XG5cdGV4cG9ydHMuUHJvZHVjdFNlYXJjaFJlc3BvbnNlRnJvbUpTT04gPSBQcm9kdWN0U2VhcmNoUmVzcG9uc2VGcm9tSlNPTjtcblx0ZXhwb3J0cy5Qcm9kdWN0U2VhcmNoUmVzcG9uc2VGcm9tSlNPTlR5cGVkID0gUHJvZHVjdFNlYXJjaFJlc3BvbnNlRnJvbUpTT05UeXBlZDtcblx0ZXhwb3J0cy5Qcm9kdWN0U2VhcmNoUmVzcG9uc2VUb0pTT04gPSBQcm9kdWN0U2VhcmNoUmVzcG9uc2VUb0pTT047XG5cdGV4cG9ydHMuUHJvZHVjdFNlYXJjaFJlc3BvbnNlVG9KU09OVHlwZWQgPSBQcm9kdWN0U2VhcmNoUmVzcG9uc2VUb0pTT05UeXBlZDtcblx0Y29uc3QgU2VhcmNoUmVzcG9uc2VQcm9kdWN0XzEgPSByZXF1aXJlX1NlYXJjaFJlc3BvbnNlUHJvZHVjdCgpO1xuXHQvKipcblx0KiBDaGVjayBpZiBhIGdpdmVuIG9iamVjdCBpbXBsZW1lbnRzIHRoZSBQcm9kdWN0U2VhcmNoUmVzcG9uc2UgaW50ZXJmYWNlLlxuXHQqL1xuXHRmdW5jdGlvbiBpbnN0YW5jZU9mUHJvZHVjdFNlYXJjaFJlc3BvbnNlKHZhbHVlKSB7XG5cdFx0aWYgKCEoXCJmaWx0ZXJzXCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wiZmlsdGVyc1wiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0aWYgKCEoXCJwcm9kdWN0c1wiIGluIHZhbHVlKSB8fCB2YWx1ZVtcInByb2R1Y3RzXCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHRmdW5jdGlvbiBQcm9kdWN0U2VhcmNoUmVzcG9uc2VGcm9tSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIFByb2R1Y3RTZWFyY2hSZXNwb25zZUZyb21KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIFByb2R1Y3RTZWFyY2hSZXNwb25zZUZyb21KU09OVHlwZWQoanNvbiwgaWdub3JlRGlzY3JpbWluYXRvcikge1xuXHRcdGlmIChqc29uID09IG51bGwpIHJldHVybiBqc29uO1xuXHRcdHJldHVybiB7XG5cdFx0XHRcImZpbHRlcnNcIjoganNvbltcImZpbHRlcnNcIl0sXG5cdFx0XHRcInByb2R1Y3RzXCI6IGpzb25bXCJwcm9kdWN0c1wiXS5tYXAoU2VhcmNoUmVzcG9uc2VQcm9kdWN0XzEuU2VhcmNoUmVzcG9uc2VQcm9kdWN0RnJvbUpTT04pLFxuXHRcdFx0XCJzZWFyY2hfcmVzcG9uc2VfaWRcIjoganNvbltcInNlYXJjaF9yZXNwb25zZV9pZFwiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcInNlYXJjaF9yZXNwb25zZV9pZFwiXVxuXHRcdH07XG5cdH1cblx0ZnVuY3Rpb24gUHJvZHVjdFNlYXJjaFJlc3BvbnNlVG9KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gUHJvZHVjdFNlYXJjaFJlc3BvbnNlVG9KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIFByb2R1Y3RTZWFyY2hSZXNwb25zZVRvSlNPTlR5cGVkKHZhbHVlLCBpZ25vcmVEaXNjcmltaW5hdG9yID0gZmFsc2UpIHtcblx0XHRpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIHZhbHVlO1xuXHRcdHJldHVybiB7XG5cdFx0XHRcImZpbHRlcnNcIjogdmFsdWVbXCJmaWx0ZXJzXCJdLFxuXHRcdFx0XCJwcm9kdWN0c1wiOiB2YWx1ZVtcInByb2R1Y3RzXCJdLm1hcChTZWFyY2hSZXNwb25zZVByb2R1Y3RfMS5TZWFyY2hSZXNwb25zZVByb2R1Y3RUb0pTT04pLFxuXHRcdFx0XCJzZWFyY2hfcmVzcG9uc2VfaWRcIjogdmFsdWVbXCJzZWFyY2hfcmVzcG9uc2VfaWRcIl1cblx0XHR9O1xuXHR9XG59KSB9KTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9Qcm9kdWN0U2VhcmNoUmVzcG9uc2VBdHRyaWJ1dGVzLmpzXG52YXIgcmVxdWlyZV9Qcm9kdWN0U2VhcmNoUmVzcG9uc2VBdHRyaWJ1dGVzID0gLyogQF9fUFVSRV9fICovIF9fY29tbW9uSlMoeyBcIi4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvUHJvZHVjdFNlYXJjaFJlc3BvbnNlQXR0cmlidXRlcy5qc1wiOiAoKGV4cG9ydHMpID0+IHtcblx0LyoqXG5cdCogQ29tbWVyY2Vcblx0KiBObyBkZXNjcmlwdGlvbiBwcm92aWRlZCAoZ2VuZXJhdGVkIGJ5IE9wZW5hcGkgR2VuZXJhdG9yIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuYXBpdG9vbHMvb3BlbmFwaS1nZW5lcmF0b3IpXG5cdCpcblx0KiBUaGUgdmVyc2lvbiBvZiB0aGUgT3BlbkFQSSBkb2N1bWVudDogMS4xLjBcblx0KlxuXHQqXG5cdCogTk9URTogVGhpcyBjbGFzcyBpcyBhdXRvIGdlbmVyYXRlZCBieSBPcGVuQVBJIEdlbmVyYXRvciAoaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoKS5cblx0KiBodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2hcblx0KiBEbyBub3QgZWRpdCB0aGUgY2xhc3MgbWFudWFsbHkuXG5cdCovXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcblx0ZXhwb3J0cy5pbnN0YW5jZU9mUHJvZHVjdFNlYXJjaFJlc3BvbnNlQXR0cmlidXRlcyA9IGluc3RhbmNlT2ZQcm9kdWN0U2VhcmNoUmVzcG9uc2VBdHRyaWJ1dGVzO1xuXHRleHBvcnRzLlByb2R1Y3RTZWFyY2hSZXNwb25zZUF0dHJpYnV0ZXNGcm9tSlNPTiA9IFByb2R1Y3RTZWFyY2hSZXNwb25zZUF0dHJpYnV0ZXNGcm9tSlNPTjtcblx0ZXhwb3J0cy5Qcm9kdWN0U2VhcmNoUmVzcG9uc2VBdHRyaWJ1dGVzRnJvbUpTT05UeXBlZCA9IFByb2R1Y3RTZWFyY2hSZXNwb25zZUF0dHJpYnV0ZXNGcm9tSlNPTlR5cGVkO1xuXHRleHBvcnRzLlByb2R1Y3RTZWFyY2hSZXNwb25zZUF0dHJpYnV0ZXNUb0pTT04gPSBQcm9kdWN0U2VhcmNoUmVzcG9uc2VBdHRyaWJ1dGVzVG9KU09OO1xuXHRleHBvcnRzLlByb2R1Y3RTZWFyY2hSZXNwb25zZUF0dHJpYnV0ZXNUb0pTT05UeXBlZCA9IFByb2R1Y3RTZWFyY2hSZXNwb25zZUF0dHJpYnV0ZXNUb0pTT05UeXBlZDtcblx0LyoqXG5cdCogQ2hlY2sgaWYgYSBnaXZlbiBvYmplY3QgaW1wbGVtZW50cyB0aGUgUHJvZHVjdFNlYXJjaFJlc3BvbnNlQXR0cmlidXRlcyBpbnRlcmZhY2UuXG5cdCovXG5cdGZ1bmN0aW9uIGluc3RhbmNlT2ZQcm9kdWN0U2VhcmNoUmVzcG9uc2VBdHRyaWJ1dGVzKHZhbHVlKSB7XG5cdFx0aWYgKCEoXCJnZW5lcmF0ZWRfcXVlcnlcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJnZW5lcmF0ZWRfcXVlcnlcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdGlmICghKFwicHJvZHVjdF9jb3VudFwiIGluIHZhbHVlKSB8fCB2YWx1ZVtcInByb2R1Y3RfY291bnRcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdGZ1bmN0aW9uIFByb2R1Y3RTZWFyY2hSZXNwb25zZUF0dHJpYnV0ZXNGcm9tSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIFByb2R1Y3RTZWFyY2hSZXNwb25zZUF0dHJpYnV0ZXNGcm9tSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBQcm9kdWN0U2VhcmNoUmVzcG9uc2VBdHRyaWJ1dGVzRnJvbUpTT05UeXBlZChqc29uLCBpZ25vcmVEaXNjcmltaW5hdG9yKSB7XG5cdFx0aWYgKGpzb24gPT0gbnVsbCkgcmV0dXJuIGpzb247XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwiZ2VuZXJhdGVkX3F1ZXJ5XCI6IGpzb25bXCJnZW5lcmF0ZWRfcXVlcnlcIl0sXG5cdFx0XHRcInByb2R1Y3RfY291bnRcIjoganNvbltcInByb2R1Y3RfY291bnRcIl1cblx0XHR9O1xuXHR9XG5cdGZ1bmN0aW9uIFByb2R1Y3RTZWFyY2hSZXNwb25zZUF0dHJpYnV0ZXNUb0pTT04oanNvbikge1xuXHRcdHJldHVybiBQcm9kdWN0U2VhcmNoUmVzcG9uc2VBdHRyaWJ1dGVzVG9KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIFByb2R1Y3RTZWFyY2hSZXNwb25zZUF0dHJpYnV0ZXNUb0pTT05UeXBlZCh2YWx1ZSwgaWdub3JlRGlzY3JpbWluYXRvciA9IGZhbHNlKSB7XG5cdFx0aWYgKHZhbHVlID09IG51bGwpIHJldHVybiB2YWx1ZTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0XCJnZW5lcmF0ZWRfcXVlcnlcIjogdmFsdWVbXCJnZW5lcmF0ZWRfcXVlcnlcIl0sXG5cdFx0XHRcInByb2R1Y3RfY291bnRcIjogdmFsdWVbXCJwcm9kdWN0X2NvdW50XCJdXG5cdFx0fTtcblx0fVxufSkgfSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIC4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvUmVwb3J0Q29udGVudC5qc1xudmFyIHJlcXVpcmVfUmVwb3J0Q29udGVudCA9IC8qIEBfX1BVUkVfXyAqLyBfX2NvbW1vbkpTKHsgXCIuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL1JlcG9ydENvbnRlbnQuanNcIjogKChleHBvcnRzKSA9PiB7XG5cdC8qKlxuXHQqIENvbW1lcmNlXG5cdCogTm8gZGVzY3JpcHRpb24gcHJvdmlkZWQgKGdlbmVyYXRlZCBieSBPcGVuYXBpIEdlbmVyYXRvciBodHRwczovL2dpdGh1Yi5jb20vb3BlbmFwaXRvb2xzL29wZW5hcGktZ2VuZXJhdG9yKVxuXHQqXG5cdCogVGhlIHZlcnNpb24gb2YgdGhlIE9wZW5BUEkgZG9jdW1lbnQ6IDEuMS4wXG5cdCpcblx0KlxuXHQqIE5PVEU6IFRoaXMgY2xhc3MgaXMgYXV0byBnZW5lcmF0ZWQgYnkgT3BlbkFQSSBHZW5lcmF0b3IgKGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaCkuXG5cdCogaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoXG5cdCogRG8gbm90IGVkaXQgdGhlIGNsYXNzIG1hbnVhbGx5LlxuXHQqL1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5cdGV4cG9ydHMuaW5zdGFuY2VPZlJlcG9ydENvbnRlbnQgPSBpbnN0YW5jZU9mUmVwb3J0Q29udGVudDtcblx0ZXhwb3J0cy5SZXBvcnRDb250ZW50RnJvbUpTT04gPSBSZXBvcnRDb250ZW50RnJvbUpTT047XG5cdGV4cG9ydHMuUmVwb3J0Q29udGVudEZyb21KU09OVHlwZWQgPSBSZXBvcnRDb250ZW50RnJvbUpTT05UeXBlZDtcblx0ZXhwb3J0cy5SZXBvcnRDb250ZW50VG9KU09OID0gUmVwb3J0Q29udGVudFRvSlNPTjtcblx0ZXhwb3J0cy5SZXBvcnRDb250ZW50VG9KU09OVHlwZWQgPSBSZXBvcnRDb250ZW50VG9KU09OVHlwZWQ7XG5cdC8qKlxuXHQqIENoZWNrIGlmIGEgZ2l2ZW4gb2JqZWN0IGltcGxlbWVudHMgdGhlIFJlcG9ydENvbnRlbnQgaW50ZXJmYWNlLlxuXHQqL1xuXHRmdW5jdGlvbiBpbnN0YW5jZU9mUmVwb3J0Q29udGVudCh2YWx1ZSkge1xuXHRcdGlmICghKFwiaWRcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJpZFwiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0ZnVuY3Rpb24gUmVwb3J0Q29udGVudEZyb21KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gUmVwb3J0Q29udGVudEZyb21KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIFJlcG9ydENvbnRlbnRGcm9tSlNPTlR5cGVkKGpzb24sIGlnbm9yZURpc2NyaW1pbmF0b3IpIHtcblx0XHRpZiAoanNvbiA9PSBudWxsKSByZXR1cm4ganNvbjtcblx0XHRyZXR1cm4ge1xuXHRcdFx0XCJjb250ZW50XCI6IGpzb25bXCJjb250ZW50XCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wiY29udGVudFwiXSxcblx0XHRcdFwiaWRcIjoganNvbltcImlkXCJdXG5cdFx0fTtcblx0fVxuXHRmdW5jdGlvbiBSZXBvcnRDb250ZW50VG9KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gUmVwb3J0Q29udGVudFRvSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBSZXBvcnRDb250ZW50VG9KU09OVHlwZWQodmFsdWUsIGlnbm9yZURpc2NyaW1pbmF0b3IgPSBmYWxzZSkge1xuXHRcdGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gdmFsdWU7XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwiY29udGVudFwiOiB2YWx1ZVtcImNvbnRlbnRcIl0sXG5cdFx0XHRcImlkXCI6IHZhbHVlW1wiaWRcIl1cblx0XHR9O1xuXHR9XG59KSB9KTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9UdXJuSW5mb1ByZXZVc2VyRXZlbnQuanNcbnZhciByZXF1aXJlX1R1cm5JbmZvUHJldlVzZXJFdmVudCA9IC8qIEBfX1BVUkVfXyAqLyBfX2NvbW1vbkpTKHsgXCIuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL1R1cm5JbmZvUHJldlVzZXJFdmVudC5qc1wiOiAoKGV4cG9ydHMpID0+IHtcblx0LyoqXG5cdCogQ29tbWVyY2Vcblx0KiBObyBkZXNjcmlwdGlvbiBwcm92aWRlZCAoZ2VuZXJhdGVkIGJ5IE9wZW5hcGkgR2VuZXJhdG9yIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuYXBpdG9vbHMvb3BlbmFwaS1nZW5lcmF0b3IpXG5cdCpcblx0KiBUaGUgdmVyc2lvbiBvZiB0aGUgT3BlbkFQSSBkb2N1bWVudDogMS4xLjBcblx0KlxuXHQqXG5cdCogTk9URTogVGhpcyBjbGFzcyBpcyBhdXRvIGdlbmVyYXRlZCBieSBPcGVuQVBJIEdlbmVyYXRvciAoaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoKS5cblx0KiBodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2hcblx0KiBEbyBub3QgZWRpdCB0aGUgY2xhc3MgbWFudWFsbHkuXG5cdCovXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcblx0ZXhwb3J0cy5pbnN0YW5jZU9mVHVybkluZm9QcmV2VXNlckV2ZW50ID0gaW5zdGFuY2VPZlR1cm5JbmZvUHJldlVzZXJFdmVudDtcblx0ZXhwb3J0cy5UdXJuSW5mb1ByZXZVc2VyRXZlbnRGcm9tSlNPTiA9IFR1cm5JbmZvUHJldlVzZXJFdmVudEZyb21KU09OO1xuXHRleHBvcnRzLlR1cm5JbmZvUHJldlVzZXJFdmVudEZyb21KU09OVHlwZWQgPSBUdXJuSW5mb1ByZXZVc2VyRXZlbnRGcm9tSlNPTlR5cGVkO1xuXHRleHBvcnRzLlR1cm5JbmZvUHJldlVzZXJFdmVudFRvSlNPTiA9IFR1cm5JbmZvUHJldlVzZXJFdmVudFRvSlNPTjtcblx0ZXhwb3J0cy5UdXJuSW5mb1ByZXZVc2VyRXZlbnRUb0pTT05UeXBlZCA9IFR1cm5JbmZvUHJldlVzZXJFdmVudFRvSlNPTlR5cGVkO1xuXHQvKipcblx0KiBDaGVjayBpZiBhIGdpdmVuIG9iamVjdCBpbXBsZW1lbnRzIHRoZSBUdXJuSW5mb1ByZXZVc2VyRXZlbnQgaW50ZXJmYWNlLlxuXHQqL1xuXHRmdW5jdGlvbiBpbnN0YW5jZU9mVHVybkluZm9QcmV2VXNlckV2ZW50KHZhbHVlKSB7XG5cdFx0aWYgKCEoXCJjYXRlZ29yeVwiIGluIHZhbHVlKSB8fCB2YWx1ZVtcImNhdGVnb3J5XCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRpZiAoIShcImlkXCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wiaWRcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdGZ1bmN0aW9uIFR1cm5JbmZvUHJldlVzZXJFdmVudEZyb21KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gVHVybkluZm9QcmV2VXNlckV2ZW50RnJvbUpTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gVHVybkluZm9QcmV2VXNlckV2ZW50RnJvbUpTT05UeXBlZChqc29uLCBpZ25vcmVEaXNjcmltaW5hdG9yKSB7XG5cdFx0aWYgKGpzb24gPT0gbnVsbCkgcmV0dXJuIGpzb247XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwiY2F0ZWdvcnlcIjoganNvbltcImNhdGVnb3J5XCJdLFxuXHRcdFx0XCJpZFwiOiBqc29uW1wiaWRcIl1cblx0XHR9O1xuXHR9XG5cdGZ1bmN0aW9uIFR1cm5JbmZvUHJldlVzZXJFdmVudFRvSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIFR1cm5JbmZvUHJldlVzZXJFdmVudFRvSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBUdXJuSW5mb1ByZXZVc2VyRXZlbnRUb0pTT05UeXBlZCh2YWx1ZSwgaWdub3JlRGlzY3JpbWluYXRvciA9IGZhbHNlKSB7XG5cdFx0aWYgKHZhbHVlID09IG51bGwpIHJldHVybiB2YWx1ZTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0XCJjYXRlZ29yeVwiOiB2YWx1ZVtcImNhdGVnb3J5XCJdLFxuXHRcdFx0XCJpZFwiOiB2YWx1ZVtcImlkXCJdXG5cdFx0fTtcblx0fVxufSkgfSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIC4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvVHVybkluZm8uanNcbnZhciByZXF1aXJlX1R1cm5JbmZvID0gLyogQF9fUFVSRV9fICovIF9fY29tbW9uSlMoeyBcIi4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvVHVybkluZm8uanNcIjogKChleHBvcnRzKSA9PiB7XG5cdC8qKlxuXHQqIENvbW1lcmNlXG5cdCogTm8gZGVzY3JpcHRpb24gcHJvdmlkZWQgKGdlbmVyYXRlZCBieSBPcGVuYXBpIEdlbmVyYXRvciBodHRwczovL2dpdGh1Yi5jb20vb3BlbmFwaXRvb2xzL29wZW5hcGktZ2VuZXJhdG9yKVxuXHQqXG5cdCogVGhlIHZlcnNpb24gb2YgdGhlIE9wZW5BUEkgZG9jdW1lbnQ6IDEuMS4wXG5cdCpcblx0KlxuXHQqIE5PVEU6IFRoaXMgY2xhc3MgaXMgYXV0byBnZW5lcmF0ZWQgYnkgT3BlbkFQSSBHZW5lcmF0b3IgKGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaCkuXG5cdCogaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoXG5cdCogRG8gbm90IGVkaXQgdGhlIGNsYXNzIG1hbnVhbGx5LlxuXHQqL1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5cdGV4cG9ydHMuaW5zdGFuY2VPZlR1cm5JbmZvID0gaW5zdGFuY2VPZlR1cm5JbmZvO1xuXHRleHBvcnRzLlR1cm5JbmZvRnJvbUpTT04gPSBUdXJuSW5mb0Zyb21KU09OO1xuXHRleHBvcnRzLlR1cm5JbmZvRnJvbUpTT05UeXBlZCA9IFR1cm5JbmZvRnJvbUpTT05UeXBlZDtcblx0ZXhwb3J0cy5UdXJuSW5mb1RvSlNPTiA9IFR1cm5JbmZvVG9KU09OO1xuXHRleHBvcnRzLlR1cm5JbmZvVG9KU09OVHlwZWQgPSBUdXJuSW5mb1RvSlNPTlR5cGVkO1xuXHRjb25zdCBSZXBvcnRDb250ZW50XzEgPSByZXF1aXJlX1JlcG9ydENvbnRlbnQoKTtcblx0Y29uc3QgVHVybkluZm9QcmV2VXNlckV2ZW50XzEgPSByZXF1aXJlX1R1cm5JbmZvUHJldlVzZXJFdmVudCgpO1xuXHQvKipcblx0KiBDaGVjayBpZiBhIGdpdmVuIG9iamVjdCBpbXBsZW1lbnRzIHRoZSBUdXJuSW5mbyBpbnRlcmZhY2UuXG5cdCovXG5cdGZ1bmN0aW9uIGluc3RhbmNlT2ZUdXJuSW5mbyh2YWx1ZSkge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdGZ1bmN0aW9uIFR1cm5JbmZvRnJvbUpTT04oanNvbikge1xuXHRcdHJldHVybiBUdXJuSW5mb0Zyb21KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIFR1cm5JbmZvRnJvbUpTT05UeXBlZChqc29uLCBpZ25vcmVEaXNjcmltaW5hdG9yKSB7XG5cdFx0aWYgKGpzb24gPT0gbnVsbCkgcmV0dXJuIGpzb247XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwibWVzc2FnZV9jb3JyZWN0aW9uXCI6IGpzb25bXCJtZXNzYWdlX2NvcnJlY3Rpb25cIl0gPT0gbnVsbCA/IHZvaWQgMCA6IGpzb25bXCJtZXNzYWdlX2NvcnJlY3Rpb25cIl0sXG5cdFx0XHRcIm1lc3NhZ2VzXCI6IGpzb25bXCJtZXNzYWdlc1wiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcIm1lc3NhZ2VzXCJdLm1hcChSZXBvcnRDb250ZW50XzEuUmVwb3J0Q29udGVudEZyb21KU09OKSxcblx0XHRcdFwicHJldl91c2VyX2V2ZW50XCI6IGpzb25bXCJwcmV2X3VzZXJfZXZlbnRcIl0gPT0gbnVsbCA/IHZvaWQgMCA6ICgwLCBUdXJuSW5mb1ByZXZVc2VyRXZlbnRfMS5UdXJuSW5mb1ByZXZVc2VyRXZlbnRGcm9tSlNPTikoanNvbltcInByZXZfdXNlcl9ldmVudFwiXSksXG5cdFx0XHRcInN1Z2dlc3Rpb25zXCI6IGpzb25bXCJzdWdnZXN0aW9uc1wiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcInN1Z2dlc3Rpb25zXCJdLm1hcChSZXBvcnRDb250ZW50XzEuUmVwb3J0Q29udGVudEZyb21KU09OKSxcblx0XHRcdFwic3VnZ2VzdGlvbnNfY29ycmVjdGlvblwiOiBqc29uW1wic3VnZ2VzdGlvbnNfY29ycmVjdGlvblwiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcInN1Z2dlc3Rpb25zX2NvcnJlY3Rpb25cIl0sXG5cdFx0XHRcInR1cm5faWR4XCI6IGpzb25bXCJ0dXJuX2lkeFwiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcInR1cm5faWR4XCJdXG5cdFx0fTtcblx0fVxuXHRmdW5jdGlvbiBUdXJuSW5mb1RvSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIFR1cm5JbmZvVG9KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIFR1cm5JbmZvVG9KU09OVHlwZWQodmFsdWUsIGlnbm9yZURpc2NyaW1pbmF0b3IgPSBmYWxzZSkge1xuXHRcdGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gdmFsdWU7XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwibWVzc2FnZV9jb3JyZWN0aW9uXCI6IHZhbHVlW1wibWVzc2FnZV9jb3JyZWN0aW9uXCJdLFxuXHRcdFx0XCJtZXNzYWdlc1wiOiB2YWx1ZVtcIm1lc3NhZ2VzXCJdID09IG51bGwgPyB2b2lkIDAgOiB2YWx1ZVtcIm1lc3NhZ2VzXCJdLm1hcChSZXBvcnRDb250ZW50XzEuUmVwb3J0Q29udGVudFRvSlNPTiksXG5cdFx0XHRcInByZXZfdXNlcl9ldmVudFwiOiAoMCwgVHVybkluZm9QcmV2VXNlckV2ZW50XzEuVHVybkluZm9QcmV2VXNlckV2ZW50VG9KU09OKSh2YWx1ZVtcInByZXZfdXNlcl9ldmVudFwiXSksXG5cdFx0XHRcInN1Z2dlc3Rpb25zXCI6IHZhbHVlW1wic3VnZ2VzdGlvbnNcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IHZhbHVlW1wic3VnZ2VzdGlvbnNcIl0ubWFwKFJlcG9ydENvbnRlbnRfMS5SZXBvcnRDb250ZW50VG9KU09OKSxcblx0XHRcdFwic3VnZ2VzdGlvbnNfY29ycmVjdGlvblwiOiB2YWx1ZVtcInN1Z2dlc3Rpb25zX2NvcnJlY3Rpb25cIl0sXG5cdFx0XHRcInR1cm5faWR4XCI6IHZhbHVlW1widHVybl9pZHhcIl1cblx0XHR9O1xuXHR9XG59KSB9KTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9SZXBvcnRTZXNzaW9uUmVxdWVzdC5qc1xudmFyIHJlcXVpcmVfUmVwb3J0U2Vzc2lvblJlcXVlc3QgPSAvKiBAX19QVVJFX18gKi8gX19jb21tb25KUyh7IFwiLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9SZXBvcnRTZXNzaW9uUmVxdWVzdC5qc1wiOiAoKGV4cG9ydHMpID0+IHtcblx0LyoqXG5cdCogQ29tbWVyY2Vcblx0KiBObyBkZXNjcmlwdGlvbiBwcm92aWRlZCAoZ2VuZXJhdGVkIGJ5IE9wZW5hcGkgR2VuZXJhdG9yIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuYXBpdG9vbHMvb3BlbmFwaS1nZW5lcmF0b3IpXG5cdCpcblx0KiBUaGUgdmVyc2lvbiBvZiB0aGUgT3BlbkFQSSBkb2N1bWVudDogMS4xLjBcblx0KlxuXHQqXG5cdCogTk9URTogVGhpcyBjbGFzcyBpcyBhdXRvIGdlbmVyYXRlZCBieSBPcGVuQVBJIEdlbmVyYXRvciAoaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoKS5cblx0KiBodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2hcblx0KiBEbyBub3QgZWRpdCB0aGUgY2xhc3MgbWFudWFsbHkuXG5cdCovXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcblx0ZXhwb3J0cy5SZXBvcnRTZXNzaW9uUmVxdWVzdFJlcG9ydFR5cGVFbnVtID0gZXhwb3J0cy5SZXBvcnRTZXNzaW9uUmVxdWVzdFJlcG9ydFByaW9yaXR5RW51bSA9IHZvaWQgMDtcblx0ZXhwb3J0cy5pbnN0YW5jZU9mUmVwb3J0U2Vzc2lvblJlcXVlc3QgPSBpbnN0YW5jZU9mUmVwb3J0U2Vzc2lvblJlcXVlc3Q7XG5cdGV4cG9ydHMuUmVwb3J0U2Vzc2lvblJlcXVlc3RGcm9tSlNPTiA9IFJlcG9ydFNlc3Npb25SZXF1ZXN0RnJvbUpTT047XG5cdGV4cG9ydHMuUmVwb3J0U2Vzc2lvblJlcXVlc3RGcm9tSlNPTlR5cGVkID0gUmVwb3J0U2Vzc2lvblJlcXVlc3RGcm9tSlNPTlR5cGVkO1xuXHRleHBvcnRzLlJlcG9ydFNlc3Npb25SZXF1ZXN0VG9KU09OID0gUmVwb3J0U2Vzc2lvblJlcXVlc3RUb0pTT047XG5cdGV4cG9ydHMuUmVwb3J0U2Vzc2lvblJlcXVlc3RUb0pTT05UeXBlZCA9IFJlcG9ydFNlc3Npb25SZXF1ZXN0VG9KU09OVHlwZWQ7XG5cdGNvbnN0IFR1cm5JbmZvXzEgPSByZXF1aXJlX1R1cm5JbmZvKCk7XG5cdC8qKlxuXHQqIEBleHBvcnRcblx0KiBAZW51bSB7c3RyaW5nfVxuXHQqL1xuXHR2YXIgUmVwb3J0U2Vzc2lvblJlcXVlc3RSZXBvcnRQcmlvcml0eUVudW07XG5cdChmdW5jdGlvbihSZXBvcnRTZXNzaW9uUmVxdWVzdFJlcG9ydFByaW9yaXR5RW51bSQxKSB7XG5cdFx0UmVwb3J0U2Vzc2lvblJlcXVlc3RSZXBvcnRQcmlvcml0eUVudW0kMVtcIlAwXCJdID0gXCJwMFwiO1xuXHRcdFJlcG9ydFNlc3Npb25SZXF1ZXN0UmVwb3J0UHJpb3JpdHlFbnVtJDFbXCJQMVwiXSA9IFwicDFcIjtcblx0XHRSZXBvcnRTZXNzaW9uUmVxdWVzdFJlcG9ydFByaW9yaXR5RW51bSQxW1wiUDJcIl0gPSBcInAyXCI7XG5cdFx0UmVwb3J0U2Vzc2lvblJlcXVlc3RSZXBvcnRQcmlvcml0eUVudW0kMVtcIlAzXCJdID0gXCJwM1wiO1xuXHRcdFJlcG9ydFNlc3Npb25SZXF1ZXN0UmVwb3J0UHJpb3JpdHlFbnVtJDFbXCJOb1ByaW9yaXR5XCJdID0gXCJubyBwcmlvcml0eVwiO1xuXHR9KShSZXBvcnRTZXNzaW9uUmVxdWVzdFJlcG9ydFByaW9yaXR5RW51bSB8fCAoZXhwb3J0cy5SZXBvcnRTZXNzaW9uUmVxdWVzdFJlcG9ydFByaW9yaXR5RW51bSA9IFJlcG9ydFNlc3Npb25SZXF1ZXN0UmVwb3J0UHJpb3JpdHlFbnVtID0ge30pKTtcblx0LyoqXG5cdCogQGV4cG9ydFxuXHQqIEBlbnVtIHtzdHJpbmd9XG5cdCovXG5cdHZhciBSZXBvcnRTZXNzaW9uUmVxdWVzdFJlcG9ydFR5cGVFbnVtO1xuXHQoZnVuY3Rpb24oUmVwb3J0U2Vzc2lvblJlcXVlc3RSZXBvcnRUeXBlRW51bSQxKSB7XG5cdFx0UmVwb3J0U2Vzc2lvblJlcXVlc3RSZXBvcnRUeXBlRW51bSQxW1wiTWVzc2FnZVwiXSA9IFwibWVzc2FnZVwiO1xuXHRcdFJlcG9ydFNlc3Npb25SZXF1ZXN0UmVwb3J0VHlwZUVudW0kMVtcIlN1Z2dlc3Rpb25cIl0gPSBcInN1Z2dlc3Rpb25cIjtcblx0XHRSZXBvcnRTZXNzaW9uUmVxdWVzdFJlcG9ydFR5cGVFbnVtJDFbXCJTZXNzaW9uXCJdID0gXCJzZXNzaW9uXCI7XG5cdFx0UmVwb3J0U2Vzc2lvblJlcXVlc3RSZXBvcnRUeXBlRW51bSQxW1wiVHVyblwiXSA9IFwidHVyblwiO1xuXHR9KShSZXBvcnRTZXNzaW9uUmVxdWVzdFJlcG9ydFR5cGVFbnVtIHx8IChleHBvcnRzLlJlcG9ydFNlc3Npb25SZXF1ZXN0UmVwb3J0VHlwZUVudW0gPSBSZXBvcnRTZXNzaW9uUmVxdWVzdFJlcG9ydFR5cGVFbnVtID0ge30pKTtcblx0LyoqXG5cdCogQ2hlY2sgaWYgYSBnaXZlbiBvYmplY3QgaW1wbGVtZW50cyB0aGUgUmVwb3J0U2Vzc2lvblJlcXVlc3QgaW50ZXJmYWNlLlxuXHQqL1xuXHRmdW5jdGlvbiBpbnN0YW5jZU9mUmVwb3J0U2Vzc2lvblJlcXVlc3QodmFsdWUpIHtcblx0XHRpZiAoIShcInVzZXJfaWRcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJ1c2VyX2lkXCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHRmdW5jdGlvbiBSZXBvcnRTZXNzaW9uUmVxdWVzdEZyb21KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gUmVwb3J0U2Vzc2lvblJlcXVlc3RGcm9tSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBSZXBvcnRTZXNzaW9uUmVxdWVzdEZyb21KU09OVHlwZWQoanNvbiwgaWdub3JlRGlzY3JpbWluYXRvcikge1xuXHRcdGlmIChqc29uID09IG51bGwpIHJldHVybiBqc29uO1xuXHRcdHJldHVybiB7XG5cdFx0XHRcImNvcnJlY3Rfc2Vzc2lvblwiOiBqc29uW1wiY29ycmVjdF9zZXNzaW9uXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wiY29ycmVjdF9zZXNzaW9uXCJdLFxuXHRcdFx0XCJjb3JyZWN0ZWRcIjoganNvbltcImNvcnJlY3RlZFwiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcImNvcnJlY3RlZFwiXSxcblx0XHRcdFwib3JnX3Nob3J0X25hbWVcIjoganNvbltcIm9yZ19zaG9ydF9uYW1lXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wib3JnX3Nob3J0X25hbWVcIl0sXG5cdFx0XHRcInJlYXNvblwiOiBqc29uW1wicmVhc29uXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wicmVhc29uXCJdLFxuXHRcdFx0XCJyZXBvcnRfcHJpb3JpdHlcIjoganNvbltcInJlcG9ydF9wcmlvcml0eVwiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcInJlcG9ydF9wcmlvcml0eVwiXSxcblx0XHRcdFwicmVwb3J0X3R5cGVcIjoganNvbltcInJlcG9ydF90eXBlXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wicmVwb3J0X3R5cGVcIl0sXG5cdFx0XHRcInJlcG9ydGVkX2J5XCI6IGpzb25bXCJyZXBvcnRlZF9ieVwiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcInJlcG9ydGVkX2J5XCJdLFxuXHRcdFx0XCJ0dXJuX2luZm9cIjoganNvbltcInR1cm5faW5mb1wiXSA9PSBudWxsID8gdm9pZCAwIDogKDAsIFR1cm5JbmZvXzEuVHVybkluZm9Gcm9tSlNPTikoanNvbltcInR1cm5faW5mb1wiXSksXG5cdFx0XHRcInVzZXJfaWRcIjoganNvbltcInVzZXJfaWRcIl1cblx0XHR9O1xuXHR9XG5cdGZ1bmN0aW9uIFJlcG9ydFNlc3Npb25SZXF1ZXN0VG9KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gUmVwb3J0U2Vzc2lvblJlcXVlc3RUb0pTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gUmVwb3J0U2Vzc2lvblJlcXVlc3RUb0pTT05UeXBlZCh2YWx1ZSwgaWdub3JlRGlzY3JpbWluYXRvciA9IGZhbHNlKSB7XG5cdFx0aWYgKHZhbHVlID09IG51bGwpIHJldHVybiB2YWx1ZTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0XCJjb3JyZWN0X3Nlc3Npb25cIjogdmFsdWVbXCJjb3JyZWN0X3Nlc3Npb25cIl0sXG5cdFx0XHRcImNvcnJlY3RlZFwiOiB2YWx1ZVtcImNvcnJlY3RlZFwiXSxcblx0XHRcdFwib3JnX3Nob3J0X25hbWVcIjogdmFsdWVbXCJvcmdfc2hvcnRfbmFtZVwiXSxcblx0XHRcdFwicmVhc29uXCI6IHZhbHVlW1wicmVhc29uXCJdLFxuXHRcdFx0XCJyZXBvcnRfcHJpb3JpdHlcIjogdmFsdWVbXCJyZXBvcnRfcHJpb3JpdHlcIl0sXG5cdFx0XHRcInJlcG9ydF90eXBlXCI6IHZhbHVlW1wicmVwb3J0X3R5cGVcIl0sXG5cdFx0XHRcInJlcG9ydGVkX2J5XCI6IHZhbHVlW1wicmVwb3J0ZWRfYnlcIl0sXG5cdFx0XHRcInR1cm5faW5mb1wiOiAoMCwgVHVybkluZm9fMS5UdXJuSW5mb1RvSlNPTikodmFsdWVbXCJ0dXJuX2luZm9cIl0pLFxuXHRcdFx0XCJ1c2VyX2lkXCI6IHZhbHVlW1widXNlcl9pZFwiXVxuXHRcdH07XG5cdH1cbn0pIH0pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiAuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL1Jlc3BvbnNlQ2F0ZWdvcnkuanNcbnZhciByZXF1aXJlX1Jlc3BvbnNlQ2F0ZWdvcnkgPSAvKiBAX19QVVJFX18gKi8gX19jb21tb25KUyh7IFwiLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9SZXNwb25zZUNhdGVnb3J5LmpzXCI6ICgoZXhwb3J0cykgPT4ge1xuXHQvKipcblx0KiBDb21tZXJjZVxuXHQqIE5vIGRlc2NyaXB0aW9uIHByb3ZpZGVkIChnZW5lcmF0ZWQgYnkgT3BlbmFwaSBHZW5lcmF0b3IgaHR0cHM6Ly9naXRodWIuY29tL29wZW5hcGl0b29scy9vcGVuYXBpLWdlbmVyYXRvcilcblx0KlxuXHQqIFRoZSB2ZXJzaW9uIG9mIHRoZSBPcGVuQVBJIGRvY3VtZW50OiAxLjEuMFxuXHQqXG5cdCpcblx0KiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IE9wZW5BUEkgR2VuZXJhdG9yIChodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2gpLlxuXHQqIGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaFxuXHQqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cblx0Ki9cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuXHRleHBvcnRzLlJlc3BvbnNlQ2F0ZWdvcnkgPSB2b2lkIDA7XG5cdGV4cG9ydHMuaW5zdGFuY2VPZlJlc3BvbnNlQ2F0ZWdvcnkgPSBpbnN0YW5jZU9mUmVzcG9uc2VDYXRlZ29yeTtcblx0ZXhwb3J0cy5SZXNwb25zZUNhdGVnb3J5RnJvbUpTT04gPSBSZXNwb25zZUNhdGVnb3J5RnJvbUpTT047XG5cdGV4cG9ydHMuUmVzcG9uc2VDYXRlZ29yeUZyb21KU09OVHlwZWQgPSBSZXNwb25zZUNhdGVnb3J5RnJvbUpTT05UeXBlZDtcblx0ZXhwb3J0cy5SZXNwb25zZUNhdGVnb3J5VG9KU09OID0gUmVzcG9uc2VDYXRlZ29yeVRvSlNPTjtcblx0ZXhwb3J0cy5SZXNwb25zZUNhdGVnb3J5VG9KU09OVHlwZWQgPSBSZXNwb25zZUNhdGVnb3J5VG9KU09OVHlwZWQ7XG5cdC8qKlxuXHQqXG5cdCogQGV4cG9ydFxuXHQqIEBlbnVtIHtzdHJpbmd9XG5cdCovXG5cdHZhciBSZXNwb25zZUNhdGVnb3J5O1xuXHQoZnVuY3Rpb24oUmVzcG9uc2VDYXRlZ29yeSQxKSB7XG5cdFx0UmVzcG9uc2VDYXRlZ29yeSQxW1wiVGV4dFwiXSA9IFwidGV4dFwiO1xuXHRcdFJlc3BvbnNlQ2F0ZWdvcnkkMVtcIlByb2R1Y3RcIl0gPSBcInByb2R1Y3RcIjtcblx0XHRSZXNwb25zZUNhdGVnb3J5JDFbXCJSZXZpZXdcIl0gPSBcInJldmlld1wiO1xuXHRcdFJlc3BvbnNlQ2F0ZWdvcnkkMVtcIk5vbmVcIl0gPSBcIm5vbmVcIjtcblx0XHRSZXNwb25zZUNhdGVnb3J5JDFbXCJTZXBhcmF0b3JcIl0gPSBcInNlcGFyYXRvclwiO1xuXHRcdFJlc3BvbnNlQ2F0ZWdvcnkkMVtcIlBhZ2VcIl0gPSBcInBhZ2VcIjtcblx0XHRSZXNwb25zZUNhdGVnb3J5JDFbXCJGb3JtXCJdID0gXCJmb3JtXCI7XG5cdFx0UmVzcG9uc2VDYXRlZ29yeSQxW1wiUHJvZHVjdFNlYXJjaFwiXSA9IFwicHJvZHVjdF9zZWFyY2hcIjtcblx0XHRSZXNwb25zZUNhdGVnb3J5JDFbXCJPcmRlclwiXSA9IFwib3JkZXJcIjtcblx0XHRSZXNwb25zZUNhdGVnb3J5JDFbXCJQcm9kdWN0U2VhcmNoRmlsdGVyXCJdID0gXCJwcm9kdWN0X3NlYXJjaF9maWx0ZXJcIjtcblx0fSkoUmVzcG9uc2VDYXRlZ29yeSB8fCAoZXhwb3J0cy5SZXNwb25zZUNhdGVnb3J5ID0gUmVzcG9uc2VDYXRlZ29yeSA9IHt9KSk7XG5cdGZ1bmN0aW9uIGluc3RhbmNlT2ZSZXNwb25zZUNhdGVnb3J5KHZhbHVlKSB7XG5cdFx0Zm9yIChjb25zdCBrZXkgaW4gUmVzcG9uc2VDYXRlZ29yeSkgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChSZXNwb25zZUNhdGVnb3J5LCBrZXkpKSB7XG5cdFx0XHRpZiAoUmVzcG9uc2VDYXRlZ29yeVtrZXldID09PSB2YWx1ZSkgcmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHRmdW5jdGlvbiBSZXNwb25zZUNhdGVnb3J5RnJvbUpTT04oanNvbikge1xuXHRcdHJldHVybiBSZXNwb25zZUNhdGVnb3J5RnJvbUpTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gUmVzcG9uc2VDYXRlZ29yeUZyb21KU09OVHlwZWQoanNvbiwgaWdub3JlRGlzY3JpbWluYXRvcikge1xuXHRcdHJldHVybiBqc29uO1xuXHR9XG5cdGZ1bmN0aW9uIFJlc3BvbnNlQ2F0ZWdvcnlUb0pTT04odmFsdWUpIHtcblx0XHRyZXR1cm4gdmFsdWU7XG5cdH1cblx0ZnVuY3Rpb24gUmVzcG9uc2VDYXRlZ29yeVRvSlNPTlR5cGVkKHZhbHVlLCBpZ25vcmVEaXNjcmltaW5hdG9yKSB7XG5cdFx0cmV0dXJuIHZhbHVlO1xuXHR9XG59KSB9KTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9SZXNwb25zZS5qc1xudmFyIHJlcXVpcmVfUmVzcG9uc2UgPSAvKiBAX19QVVJFX18gKi8gX19jb21tb25KUyh7IFwiLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9SZXNwb25zZS5qc1wiOiAoKGV4cG9ydHMpID0+IHtcblx0LyoqXG5cdCogQ29tbWVyY2Vcblx0KiBObyBkZXNjcmlwdGlvbiBwcm92aWRlZCAoZ2VuZXJhdGVkIGJ5IE9wZW5hcGkgR2VuZXJhdG9yIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuYXBpdG9vbHMvb3BlbmFwaS1nZW5lcmF0b3IpXG5cdCpcblx0KiBUaGUgdmVyc2lvbiBvZiB0aGUgT3BlbkFQSSBkb2N1bWVudDogMS4xLjBcblx0KlxuXHQqXG5cdCogTk9URTogVGhpcyBjbGFzcyBpcyBhdXRvIGdlbmVyYXRlZCBieSBPcGVuQVBJIEdlbmVyYXRvciAoaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoKS5cblx0KiBodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2hcblx0KiBEbyBub3QgZWRpdCB0aGUgY2xhc3MgbWFudWFsbHkuXG5cdCovXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcblx0ZXhwb3J0cy5pbnN0YW5jZU9mUmVzcG9uc2UgPSBpbnN0YW5jZU9mUmVzcG9uc2U7XG5cdGV4cG9ydHMuUmVzcG9uc2VGcm9tSlNPTiA9IFJlc3BvbnNlRnJvbUpTT047XG5cdGV4cG9ydHMuUmVzcG9uc2VGcm9tSlNPTlR5cGVkID0gUmVzcG9uc2VGcm9tSlNPTlR5cGVkO1xuXHRleHBvcnRzLlJlc3BvbnNlVG9KU09OID0gUmVzcG9uc2VUb0pTT047XG5cdGV4cG9ydHMuUmVzcG9uc2VUb0pTT05UeXBlZCA9IFJlc3BvbnNlVG9KU09OVHlwZWQ7XG5cdGNvbnN0IFJlc3BvbnNlQ2F0ZWdvcnlfMSA9IHJlcXVpcmVfUmVzcG9uc2VDYXRlZ29yeSgpO1xuXHQvKipcblx0KiBDaGVjayBpZiBhIGdpdmVuIG9iamVjdCBpbXBsZW1lbnRzIHRoZSBSZXNwb25zZSBpbnRlcmZhY2UuXG5cdCovXG5cdGZ1bmN0aW9uIGluc3RhbmNlT2ZSZXNwb25zZSh2YWx1ZSkge1xuXHRcdGlmICghKFwiYXR0cmlidXRlc1wiIGluIHZhbHVlKSB8fCB2YWx1ZVtcImF0dHJpYnV0ZXNcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdGlmICghKFwiY2F0ZWdvcnlcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJjYXRlZ29yeVwiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0aWYgKCEoXCJjcmVhdGVkX2F0XCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wiY3JlYXRlZF9hdFwiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0aWYgKCEoXCJpZFwiIGluIHZhbHVlKSB8fCB2YWx1ZVtcImlkXCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHRmdW5jdGlvbiBSZXNwb25zZUZyb21KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gUmVzcG9uc2VGcm9tSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBSZXNwb25zZUZyb21KU09OVHlwZWQoanNvbiwgaWdub3JlRGlzY3JpbWluYXRvcikge1xuXHRcdGlmIChqc29uID09IG51bGwpIHJldHVybiBqc29uO1xuXHRcdHJldHVybiB7XG5cdFx0XHRcImF0dHJpYnV0ZXNcIjoganNvbltcImF0dHJpYnV0ZXNcIl0sXG5cdFx0XHRcImNhdGVnb3J5XCI6ICgwLCBSZXNwb25zZUNhdGVnb3J5XzEuUmVzcG9uc2VDYXRlZ29yeUZyb21KU09OKShqc29uW1wiY2F0ZWdvcnlcIl0pLFxuXHRcdFx0XCJjcmVhdGVkX2F0XCI6IGpzb25bXCJjcmVhdGVkX2F0XCJdLFxuXHRcdFx0XCJpZFwiOiBqc29uW1wiaWRcIl1cblx0XHR9O1xuXHR9XG5cdGZ1bmN0aW9uIFJlc3BvbnNlVG9KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gUmVzcG9uc2VUb0pTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gUmVzcG9uc2VUb0pTT05UeXBlZCh2YWx1ZSwgaWdub3JlRGlzY3JpbWluYXRvciA9IGZhbHNlKSB7XG5cdFx0aWYgKHZhbHVlID09IG51bGwpIHJldHVybiB2YWx1ZTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0XCJhdHRyaWJ1dGVzXCI6IHZhbHVlW1wiYXR0cmlidXRlc1wiXSxcblx0XHRcdFwiY2F0ZWdvcnlcIjogKDAsIFJlc3BvbnNlQ2F0ZWdvcnlfMS5SZXNwb25zZUNhdGVnb3J5VG9KU09OKSh2YWx1ZVtcImNhdGVnb3J5XCJdKSxcblx0XHRcdFwiY3JlYXRlZF9hdFwiOiB2YWx1ZVtcImNyZWF0ZWRfYXRcIl0sXG5cdFx0XHRcImlkXCI6IHZhbHVlW1wiaWRcIl1cblx0XHR9O1xuXHR9XG59KSB9KTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9TZWFyY2hTdWdnZXN0aW9uc1Jlc3BvbnNlLmpzXG52YXIgcmVxdWlyZV9TZWFyY2hTdWdnZXN0aW9uc1Jlc3BvbnNlID0gLyogQF9fUFVSRV9fICovIF9fY29tbW9uSlMoeyBcIi4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvU2VhcmNoU3VnZ2VzdGlvbnNSZXNwb25zZS5qc1wiOiAoKGV4cG9ydHMpID0+IHtcblx0LyoqXG5cdCogQ29tbWVyY2Vcblx0KiBObyBkZXNjcmlwdGlvbiBwcm92aWRlZCAoZ2VuZXJhdGVkIGJ5IE9wZW5hcGkgR2VuZXJhdG9yIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuYXBpdG9vbHMvb3BlbmFwaS1nZW5lcmF0b3IpXG5cdCpcblx0KiBUaGUgdmVyc2lvbiBvZiB0aGUgT3BlbkFQSSBkb2N1bWVudDogMS4xLjBcblx0KlxuXHQqXG5cdCogTk9URTogVGhpcyBjbGFzcyBpcyBhdXRvIGdlbmVyYXRlZCBieSBPcGVuQVBJIEdlbmVyYXRvciAoaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoKS5cblx0KiBodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2hcblx0KiBEbyBub3QgZWRpdCB0aGUgY2xhc3MgbWFudWFsbHkuXG5cdCovXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcblx0ZXhwb3J0cy5pbnN0YW5jZU9mU2VhcmNoU3VnZ2VzdGlvbnNSZXNwb25zZSA9IGluc3RhbmNlT2ZTZWFyY2hTdWdnZXN0aW9uc1Jlc3BvbnNlO1xuXHRleHBvcnRzLlNlYXJjaFN1Z2dlc3Rpb25zUmVzcG9uc2VGcm9tSlNPTiA9IFNlYXJjaFN1Z2dlc3Rpb25zUmVzcG9uc2VGcm9tSlNPTjtcblx0ZXhwb3J0cy5TZWFyY2hTdWdnZXN0aW9uc1Jlc3BvbnNlRnJvbUpTT05UeXBlZCA9IFNlYXJjaFN1Z2dlc3Rpb25zUmVzcG9uc2VGcm9tSlNPTlR5cGVkO1xuXHRleHBvcnRzLlNlYXJjaFN1Z2dlc3Rpb25zUmVzcG9uc2VUb0pTT04gPSBTZWFyY2hTdWdnZXN0aW9uc1Jlc3BvbnNlVG9KU09OO1xuXHRleHBvcnRzLlNlYXJjaFN1Z2dlc3Rpb25zUmVzcG9uc2VUb0pTT05UeXBlZCA9IFNlYXJjaFN1Z2dlc3Rpb25zUmVzcG9uc2VUb0pTT05UeXBlZDtcblx0LyoqXG5cdCogQ2hlY2sgaWYgYSBnaXZlbiBvYmplY3QgaW1wbGVtZW50cyB0aGUgU2VhcmNoU3VnZ2VzdGlvbnNSZXNwb25zZSBpbnRlcmZhY2UuXG5cdCovXG5cdGZ1bmN0aW9uIGluc3RhbmNlT2ZTZWFyY2hTdWdnZXN0aW9uc1Jlc3BvbnNlKHZhbHVlKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0ZnVuY3Rpb24gU2VhcmNoU3VnZ2VzdGlvbnNSZXNwb25zZUZyb21KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gU2VhcmNoU3VnZ2VzdGlvbnNSZXNwb25zZUZyb21KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIFNlYXJjaFN1Z2dlc3Rpb25zUmVzcG9uc2VGcm9tSlNPTlR5cGVkKGpzb24sIGlnbm9yZURpc2NyaW1pbmF0b3IpIHtcblx0XHRpZiAoanNvbiA9PSBudWxsKSByZXR1cm4ganNvbjtcblx0XHRyZXR1cm4ge1xuXHRcdFx0XCJzZWFyY2hfdGVybXNcIjoganNvbltcInNlYXJjaF90ZXJtc1wiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcInNlYXJjaF90ZXJtc1wiXSxcblx0XHRcdFwic3VnZ2VzdGVkX3NlYXJjaGVzXCI6IGpzb25bXCJzdWdnZXN0ZWRfc2VhcmNoZXNcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IGpzb25bXCJzdWdnZXN0ZWRfc2VhcmNoZXNcIl1cblx0XHR9O1xuXHR9XG5cdGZ1bmN0aW9uIFNlYXJjaFN1Z2dlc3Rpb25zUmVzcG9uc2VUb0pTT04oanNvbikge1xuXHRcdHJldHVybiBTZWFyY2hTdWdnZXN0aW9uc1Jlc3BvbnNlVG9KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIFNlYXJjaFN1Z2dlc3Rpb25zUmVzcG9uc2VUb0pTT05UeXBlZCh2YWx1ZSwgaWdub3JlRGlzY3JpbWluYXRvciA9IGZhbHNlKSB7XG5cdFx0aWYgKHZhbHVlID09IG51bGwpIHJldHVybiB2YWx1ZTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0XCJzZWFyY2hfdGVybXNcIjogdmFsdWVbXCJzZWFyY2hfdGVybXNcIl0sXG5cdFx0XHRcInN1Z2dlc3RlZF9zZWFyY2hlc1wiOiB2YWx1ZVtcInN1Z2dlc3RlZF9zZWFyY2hlc1wiXVxuXHRcdH07XG5cdH1cbn0pIH0pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiAuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL1NlbmRNZXNzYWdlUmVxdWVzdC5qc1xudmFyIHJlcXVpcmVfU2VuZE1lc3NhZ2VSZXF1ZXN0ID0gLyogQF9fUFVSRV9fICovIF9fY29tbW9uSlMoeyBcIi4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvU2VuZE1lc3NhZ2VSZXF1ZXN0LmpzXCI6ICgoZXhwb3J0cykgPT4ge1xuXHQvKipcblx0KiBDb21tZXJjZVxuXHQqIE5vIGRlc2NyaXB0aW9uIHByb3ZpZGVkIChnZW5lcmF0ZWQgYnkgT3BlbmFwaSBHZW5lcmF0b3IgaHR0cHM6Ly9naXRodWIuY29tL29wZW5hcGl0b29scy9vcGVuYXBpLWdlbmVyYXRvcilcblx0KlxuXHQqIFRoZSB2ZXJzaW9uIG9mIHRoZSBPcGVuQVBJIGRvY3VtZW50OiAxLjEuMFxuXHQqXG5cdCpcblx0KiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IE9wZW5BUEkgR2VuZXJhdG9yIChodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2gpLlxuXHQqIGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaFxuXHQqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cblx0Ki9cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuXHRleHBvcnRzLmluc3RhbmNlT2ZTZW5kTWVzc2FnZVJlcXVlc3QgPSBpbnN0YW5jZU9mU2VuZE1lc3NhZ2VSZXF1ZXN0O1xuXHRleHBvcnRzLlNlbmRNZXNzYWdlUmVxdWVzdEZyb21KU09OID0gU2VuZE1lc3NhZ2VSZXF1ZXN0RnJvbUpTT047XG5cdGV4cG9ydHMuU2VuZE1lc3NhZ2VSZXF1ZXN0RnJvbUpTT05UeXBlZCA9IFNlbmRNZXNzYWdlUmVxdWVzdEZyb21KU09OVHlwZWQ7XG5cdGV4cG9ydHMuU2VuZE1lc3NhZ2VSZXF1ZXN0VG9KU09OID0gU2VuZE1lc3NhZ2VSZXF1ZXN0VG9KU09OO1xuXHRleHBvcnRzLlNlbmRNZXNzYWdlUmVxdWVzdFRvSlNPTlR5cGVkID0gU2VuZE1lc3NhZ2VSZXF1ZXN0VG9KU09OVHlwZWQ7XG5cdGNvbnN0IEN1c3RvbWVyU2VydmljZVByb3ZpZGVyXzEgPSByZXF1aXJlX0N1c3RvbWVyU2VydmljZVByb3ZpZGVyKCk7XG5cdGNvbnN0IEF0dGFjaG1lbnRSZXF1ZXN0XzEgPSByZXF1aXJlX0F0dGFjaG1lbnRSZXF1ZXN0KCk7XG5cdC8qKlxuXHQqIENoZWNrIGlmIGEgZ2l2ZW4gb2JqZWN0IGltcGxlbWVudHMgdGhlIFNlbmRNZXNzYWdlUmVxdWVzdCBpbnRlcmZhY2UuXG5cdCovXG5cdGZ1bmN0aW9uIGluc3RhbmNlT2ZTZW5kTWVzc2FnZVJlcXVlc3QodmFsdWUpIHtcblx0XHRpZiAoIShcImNvbnZlcnNhdGlvbl9pZFwiIGluIHZhbHVlKSB8fCB2YWx1ZVtcImNvbnZlcnNhdGlvbl9pZFwiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0aWYgKCEoXCJjdXN0b21lcl9pZFwiIGluIHZhbHVlKSB8fCB2YWx1ZVtcImN1c3RvbWVyX2lkXCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRpZiAoIShcIm1lc3NhZ2VcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJtZXNzYWdlXCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHRmdW5jdGlvbiBTZW5kTWVzc2FnZVJlcXVlc3RGcm9tSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIFNlbmRNZXNzYWdlUmVxdWVzdEZyb21KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIFNlbmRNZXNzYWdlUmVxdWVzdEZyb21KU09OVHlwZWQoanNvbiwgaWdub3JlRGlzY3JpbWluYXRvcikge1xuXHRcdGlmIChqc29uID09IG51bGwpIHJldHVybiBqc29uO1xuXHRcdHJldHVybiB7XG5cdFx0XHRcImF0dGFjaG1lbnRzXCI6IGpzb25bXCJhdHRhY2htZW50c1wiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcImF0dGFjaG1lbnRzXCJdLm1hcChBdHRhY2htZW50UmVxdWVzdF8xLkF0dGFjaG1lbnRSZXF1ZXN0RnJvbUpTT04pLFxuXHRcdFx0XCJjb252ZXJzYXRpb25faWRcIjoganNvbltcImNvbnZlcnNhdGlvbl9pZFwiXSxcblx0XHRcdFwiY3VzdG9tZXJfaWRcIjoganNvbltcImN1c3RvbWVyX2lkXCJdLFxuXHRcdFx0XCJjdXN0b21lcl9zZXJ2aWNlX3Byb3ZpZGVyXCI6IGpzb25bXCJjdXN0b21lcl9zZXJ2aWNlX3Byb3ZpZGVyXCJdID09IG51bGwgPyB2b2lkIDAgOiAoMCwgQ3VzdG9tZXJTZXJ2aWNlUHJvdmlkZXJfMS5DdXN0b21lclNlcnZpY2VQcm92aWRlckZyb21KU09OKShqc29uW1wiY3VzdG9tZXJfc2VydmljZV9wcm92aWRlclwiXSksXG5cdFx0XHRcIm1lc3NhZ2VcIjoganNvbltcIm1lc3NhZ2VcIl1cblx0XHR9O1xuXHR9XG5cdGZ1bmN0aW9uIFNlbmRNZXNzYWdlUmVxdWVzdFRvSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIFNlbmRNZXNzYWdlUmVxdWVzdFRvSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBTZW5kTWVzc2FnZVJlcXVlc3RUb0pTT05UeXBlZCh2YWx1ZSwgaWdub3JlRGlzY3JpbWluYXRvciA9IGZhbHNlKSB7XG5cdFx0aWYgKHZhbHVlID09IG51bGwpIHJldHVybiB2YWx1ZTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0XCJhdHRhY2htZW50c1wiOiB2YWx1ZVtcImF0dGFjaG1lbnRzXCJdID09IG51bGwgPyB2b2lkIDAgOiB2YWx1ZVtcImF0dGFjaG1lbnRzXCJdLm1hcChBdHRhY2htZW50UmVxdWVzdF8xLkF0dGFjaG1lbnRSZXF1ZXN0VG9KU09OKSxcblx0XHRcdFwiY29udmVyc2F0aW9uX2lkXCI6IHZhbHVlW1wiY29udmVyc2F0aW9uX2lkXCJdLFxuXHRcdFx0XCJjdXN0b21lcl9pZFwiOiB2YWx1ZVtcImN1c3RvbWVyX2lkXCJdLFxuXHRcdFx0XCJjdXN0b21lcl9zZXJ2aWNlX3Byb3ZpZGVyXCI6ICgwLCBDdXN0b21lclNlcnZpY2VQcm92aWRlcl8xLkN1c3RvbWVyU2VydmljZVByb3ZpZGVyVG9KU09OKSh2YWx1ZVtcImN1c3RvbWVyX3NlcnZpY2VfcHJvdmlkZXJcIl0pLFxuXHRcdFx0XCJtZXNzYWdlXCI6IHZhbHVlW1wibWVzc2FnZVwiXVxuXHRcdH07XG5cdH1cbn0pIH0pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiAuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL1NlbmRNZXNzYWdlUmVzcG9uc2UuanNcbnZhciByZXF1aXJlX1NlbmRNZXNzYWdlUmVzcG9uc2UgPSAvKiBAX19QVVJFX18gKi8gX19jb21tb25KUyh7IFwiLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9TZW5kTWVzc2FnZVJlc3BvbnNlLmpzXCI6ICgoZXhwb3J0cykgPT4ge1xuXHQvKipcblx0KiBDb21tZXJjZVxuXHQqIE5vIGRlc2NyaXB0aW9uIHByb3ZpZGVkIChnZW5lcmF0ZWQgYnkgT3BlbmFwaSBHZW5lcmF0b3IgaHR0cHM6Ly9naXRodWIuY29tL29wZW5hcGl0b29scy9vcGVuYXBpLWdlbmVyYXRvcilcblx0KlxuXHQqIFRoZSB2ZXJzaW9uIG9mIHRoZSBPcGVuQVBJIGRvY3VtZW50OiAxLjEuMFxuXHQqXG5cdCpcblx0KiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IE9wZW5BUEkgR2VuZXJhdG9yIChodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2gpLlxuXHQqIGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaFxuXHQqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cblx0Ki9cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuXHRleHBvcnRzLmluc3RhbmNlT2ZTZW5kTWVzc2FnZVJlc3BvbnNlID0gaW5zdGFuY2VPZlNlbmRNZXNzYWdlUmVzcG9uc2U7XG5cdGV4cG9ydHMuU2VuZE1lc3NhZ2VSZXNwb25zZUZyb21KU09OID0gU2VuZE1lc3NhZ2VSZXNwb25zZUZyb21KU09OO1xuXHRleHBvcnRzLlNlbmRNZXNzYWdlUmVzcG9uc2VGcm9tSlNPTlR5cGVkID0gU2VuZE1lc3NhZ2VSZXNwb25zZUZyb21KU09OVHlwZWQ7XG5cdGV4cG9ydHMuU2VuZE1lc3NhZ2VSZXNwb25zZVRvSlNPTiA9IFNlbmRNZXNzYWdlUmVzcG9uc2VUb0pTT047XG5cdGV4cG9ydHMuU2VuZE1lc3NhZ2VSZXNwb25zZVRvSlNPTlR5cGVkID0gU2VuZE1lc3NhZ2VSZXNwb25zZVRvSlNPTlR5cGVkO1xuXHRjb25zdCBDdXN0U2VydmljZU1lc3NhZ2VfMSA9IHJlcXVpcmVfQ3VzdFNlcnZpY2VNZXNzYWdlKCk7XG5cdC8qKlxuXHQqIENoZWNrIGlmIGEgZ2l2ZW4gb2JqZWN0IGltcGxlbWVudHMgdGhlIFNlbmRNZXNzYWdlUmVzcG9uc2UgaW50ZXJmYWNlLlxuXHQqL1xuXHRmdW5jdGlvbiBpbnN0YW5jZU9mU2VuZE1lc3NhZ2VSZXNwb25zZSh2YWx1ZSkge1xuXHRcdGlmICghKFwibWVzc2FnZVwiIGluIHZhbHVlKSB8fCB2YWx1ZVtcIm1lc3NhZ2VcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdGZ1bmN0aW9uIFNlbmRNZXNzYWdlUmVzcG9uc2VGcm9tSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIFNlbmRNZXNzYWdlUmVzcG9uc2VGcm9tSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBTZW5kTWVzc2FnZVJlc3BvbnNlRnJvbUpTT05UeXBlZChqc29uLCBpZ25vcmVEaXNjcmltaW5hdG9yKSB7XG5cdFx0aWYgKGpzb24gPT0gbnVsbCkgcmV0dXJuIGpzb247XG5cdFx0cmV0dXJuIHsgXCJtZXNzYWdlXCI6ICgwLCBDdXN0U2VydmljZU1lc3NhZ2VfMS5DdXN0U2VydmljZU1lc3NhZ2VGcm9tSlNPTikoanNvbltcIm1lc3NhZ2VcIl0pIH07XG5cdH1cblx0ZnVuY3Rpb24gU2VuZE1lc3NhZ2VSZXNwb25zZVRvSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIFNlbmRNZXNzYWdlUmVzcG9uc2VUb0pTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gU2VuZE1lc3NhZ2VSZXNwb25zZVRvSlNPTlR5cGVkKHZhbHVlLCBpZ25vcmVEaXNjcmltaW5hdG9yID0gZmFsc2UpIHtcblx0XHRpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIHZhbHVlO1xuXHRcdHJldHVybiB7IFwibWVzc2FnZVwiOiAoMCwgQ3VzdFNlcnZpY2VNZXNzYWdlXzEuQ3VzdFNlcnZpY2VNZXNzYWdlVG9KU09OKSh2YWx1ZVtcIm1lc3NhZ2VcIl0pIH07XG5cdH1cbn0pIH0pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiAuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL1N1Z2dlc3Rpb25DYXRlZ29yeS5qc1xudmFyIHJlcXVpcmVfU3VnZ2VzdGlvbkNhdGVnb3J5ID0gLyogQF9fUFVSRV9fICovIF9fY29tbW9uSlMoeyBcIi4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvU3VnZ2VzdGlvbkNhdGVnb3J5LmpzXCI6ICgoZXhwb3J0cykgPT4ge1xuXHQvKipcblx0KiBDb21tZXJjZVxuXHQqIE5vIGRlc2NyaXB0aW9uIHByb3ZpZGVkIChnZW5lcmF0ZWQgYnkgT3BlbmFwaSBHZW5lcmF0b3IgaHR0cHM6Ly9naXRodWIuY29tL29wZW5hcGl0b29scy9vcGVuYXBpLWdlbmVyYXRvcilcblx0KlxuXHQqIFRoZSB2ZXJzaW9uIG9mIHRoZSBPcGVuQVBJIGRvY3VtZW50OiAxLjEuMFxuXHQqXG5cdCpcblx0KiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IE9wZW5BUEkgR2VuZXJhdG9yIChodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2gpLlxuXHQqIGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaFxuXHQqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cblx0Ki9cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuXHRleHBvcnRzLlN1Z2dlc3Rpb25DYXRlZ29yeSA9IHZvaWQgMDtcblx0ZXhwb3J0cy5pbnN0YW5jZU9mU3VnZ2VzdGlvbkNhdGVnb3J5ID0gaW5zdGFuY2VPZlN1Z2dlc3Rpb25DYXRlZ29yeTtcblx0ZXhwb3J0cy5TdWdnZXN0aW9uQ2F0ZWdvcnlGcm9tSlNPTiA9IFN1Z2dlc3Rpb25DYXRlZ29yeUZyb21KU09OO1xuXHRleHBvcnRzLlN1Z2dlc3Rpb25DYXRlZ29yeUZyb21KU09OVHlwZWQgPSBTdWdnZXN0aW9uQ2F0ZWdvcnlGcm9tSlNPTlR5cGVkO1xuXHRleHBvcnRzLlN1Z2dlc3Rpb25DYXRlZ29yeVRvSlNPTiA9IFN1Z2dlc3Rpb25DYXRlZ29yeVRvSlNPTjtcblx0ZXhwb3J0cy5TdWdnZXN0aW9uQ2F0ZWdvcnlUb0pTT05UeXBlZCA9IFN1Z2dlc3Rpb25DYXRlZ29yeVRvSlNPTlR5cGVkO1xuXHQvKipcblx0KlxuXHQqIEBleHBvcnRcblx0KiBAZW51bSB7c3RyaW5nfVxuXHQqL1xuXHR2YXIgU3VnZ2VzdGlvbkNhdGVnb3J5O1xuXHQoZnVuY3Rpb24oU3VnZ2VzdGlvbkNhdGVnb3J5JDEpIHtcblx0XHRTdWdnZXN0aW9uQ2F0ZWdvcnkkMVtcIk5vQ29udGV4dFwiXSA9IFwibm9fY29udGV4dFwiO1xuXHRcdFN1Z2dlc3Rpb25DYXRlZ29yeSQxW1wiUHJvZHVjdEJhc2VkXCJdID0gXCJwcm9kdWN0X2Jhc2VkXCI7XG5cdFx0U3VnZ2VzdGlvbkNhdGVnb3J5JDFbXCJSZXZpZXdCYXNlZFwiXSA9IFwicmV2aWV3X2Jhc2VkXCI7XG5cdH0pKFN1Z2dlc3Rpb25DYXRlZ29yeSB8fCAoZXhwb3J0cy5TdWdnZXN0aW9uQ2F0ZWdvcnkgPSBTdWdnZXN0aW9uQ2F0ZWdvcnkgPSB7fSkpO1xuXHRmdW5jdGlvbiBpbnN0YW5jZU9mU3VnZ2VzdGlvbkNhdGVnb3J5KHZhbHVlKSB7XG5cdFx0Zm9yIChjb25zdCBrZXkgaW4gU3VnZ2VzdGlvbkNhdGVnb3J5KSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFN1Z2dlc3Rpb25DYXRlZ29yeSwga2V5KSkge1xuXHRcdFx0aWYgKFN1Z2dlc3Rpb25DYXRlZ29yeVtrZXldID09PSB2YWx1ZSkgcmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHRmdW5jdGlvbiBTdWdnZXN0aW9uQ2F0ZWdvcnlGcm9tSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIFN1Z2dlc3Rpb25DYXRlZ29yeUZyb21KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIFN1Z2dlc3Rpb25DYXRlZ29yeUZyb21KU09OVHlwZWQoanNvbiwgaWdub3JlRGlzY3JpbWluYXRvcikge1xuXHRcdHJldHVybiBqc29uO1xuXHR9XG5cdGZ1bmN0aW9uIFN1Z2dlc3Rpb25DYXRlZ29yeVRvSlNPTih2YWx1ZSkge1xuXHRcdHJldHVybiB2YWx1ZTtcblx0fVxuXHRmdW5jdGlvbiBTdWdnZXN0aW9uQ2F0ZWdvcnlUb0pTT05UeXBlZCh2YWx1ZSwgaWdub3JlRGlzY3JpbWluYXRvcikge1xuXHRcdHJldHVybiB2YWx1ZTtcblx0fVxufSkgfSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIC4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvU3VnZ2VzdGlvbi5qc1xudmFyIHJlcXVpcmVfU3VnZ2VzdGlvbiA9IC8qIEBfX1BVUkVfXyAqLyBfX2NvbW1vbkpTKHsgXCIuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL1N1Z2dlc3Rpb24uanNcIjogKChleHBvcnRzKSA9PiB7XG5cdC8qKlxuXHQqIENvbW1lcmNlXG5cdCogTm8gZGVzY3JpcHRpb24gcHJvdmlkZWQgKGdlbmVyYXRlZCBieSBPcGVuYXBpIEdlbmVyYXRvciBodHRwczovL2dpdGh1Yi5jb20vb3BlbmFwaXRvb2xzL29wZW5hcGktZ2VuZXJhdG9yKVxuXHQqXG5cdCogVGhlIHZlcnNpb24gb2YgdGhlIE9wZW5BUEkgZG9jdW1lbnQ6IDEuMS4wXG5cdCpcblx0KlxuXHQqIE5PVEU6IFRoaXMgY2xhc3MgaXMgYXV0byBnZW5lcmF0ZWQgYnkgT3BlbkFQSSBHZW5lcmF0b3IgKGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaCkuXG5cdCogaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoXG5cdCogRG8gbm90IGVkaXQgdGhlIGNsYXNzIG1hbnVhbGx5LlxuXHQqL1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5cdGV4cG9ydHMuaW5zdGFuY2VPZlN1Z2dlc3Rpb24gPSBpbnN0YW5jZU9mU3VnZ2VzdGlvbjtcblx0ZXhwb3J0cy5TdWdnZXN0aW9uRnJvbUpTT04gPSBTdWdnZXN0aW9uRnJvbUpTT047XG5cdGV4cG9ydHMuU3VnZ2VzdGlvbkZyb21KU09OVHlwZWQgPSBTdWdnZXN0aW9uRnJvbUpTT05UeXBlZDtcblx0ZXhwb3J0cy5TdWdnZXN0aW9uVG9KU09OID0gU3VnZ2VzdGlvblRvSlNPTjtcblx0ZXhwb3J0cy5TdWdnZXN0aW9uVG9KU09OVHlwZWQgPSBTdWdnZXN0aW9uVG9KU09OVHlwZWQ7XG5cdGNvbnN0IFN1Z2dlc3Rpb25DYXRlZ29yeV8xID0gcmVxdWlyZV9TdWdnZXN0aW9uQ2F0ZWdvcnkoKTtcblx0LyoqXG5cdCogQ2hlY2sgaWYgYSBnaXZlbiBvYmplY3QgaW1wbGVtZW50cyB0aGUgU3VnZ2VzdGlvbiBpbnRlcmZhY2UuXG5cdCovXG5cdGZ1bmN0aW9uIGluc3RhbmNlT2ZTdWdnZXN0aW9uKHZhbHVlKSB7XG5cdFx0aWYgKCEoXCJjYXRlZ29yeVwiIGluIHZhbHVlKSB8fCB2YWx1ZVtcImNhdGVnb3J5XCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRpZiAoIShcImNvbnRlbnRcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJjb250ZW50XCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRpZiAoIShcImNyZWF0ZWRfYXRcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJjcmVhdGVkX2F0XCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRpZiAoIShcImlkXCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wiaWRcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdGZ1bmN0aW9uIFN1Z2dlc3Rpb25Gcm9tSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIFN1Z2dlc3Rpb25Gcm9tSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBTdWdnZXN0aW9uRnJvbUpTT05UeXBlZChqc29uLCBpZ25vcmVEaXNjcmltaW5hdG9yKSB7XG5cdFx0aWYgKGpzb24gPT0gbnVsbCkgcmV0dXJuIGpzb247XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwiY2F0ZWdvcnlcIjogKDAsIFN1Z2dlc3Rpb25DYXRlZ29yeV8xLlN1Z2dlc3Rpb25DYXRlZ29yeUZyb21KU09OKShqc29uW1wiY2F0ZWdvcnlcIl0pLFxuXHRcdFx0XCJjb250ZW50XCI6IGpzb25bXCJjb250ZW50XCJdLFxuXHRcdFx0XCJjcmVhdGVkX2F0XCI6IGpzb25bXCJjcmVhdGVkX2F0XCJdLFxuXHRcdFx0XCJpZFwiOiBqc29uW1wiaWRcIl0sXG5cdFx0XHRcImlzX2Fuc3dlclwiOiBqc29uW1wiaXNfYW5zd2VyXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wiaXNfYW5zd2VyXCJdXG5cdFx0fTtcblx0fVxuXHRmdW5jdGlvbiBTdWdnZXN0aW9uVG9KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gU3VnZ2VzdGlvblRvSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBTdWdnZXN0aW9uVG9KU09OVHlwZWQodmFsdWUsIGlnbm9yZURpc2NyaW1pbmF0b3IgPSBmYWxzZSkge1xuXHRcdGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gdmFsdWU7XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwiY2F0ZWdvcnlcIjogKDAsIFN1Z2dlc3Rpb25DYXRlZ29yeV8xLlN1Z2dlc3Rpb25DYXRlZ29yeVRvSlNPTikodmFsdWVbXCJjYXRlZ29yeVwiXSksXG5cdFx0XHRcImNvbnRlbnRcIjogdmFsdWVbXCJjb250ZW50XCJdLFxuXHRcdFx0XCJjcmVhdGVkX2F0XCI6IHZhbHVlW1wiY3JlYXRlZF9hdFwiXSxcblx0XHRcdFwiaWRcIjogdmFsdWVbXCJpZFwiXSxcblx0XHRcdFwiaXNfYW5zd2VyXCI6IHZhbHVlW1wiaXNfYW5zd2VyXCJdXG5cdFx0fTtcblx0fVxufSkgfSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIC4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvU3VwcG9ydGVkRXZlbnRQcm9kdWN0Q2F0ZWdvcnkuanNcbnZhciByZXF1aXJlX1N1cHBvcnRlZEV2ZW50UHJvZHVjdENhdGVnb3J5ID0gLyogQF9fUFVSRV9fICovIF9fY29tbW9uSlMoeyBcIi4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvU3VwcG9ydGVkRXZlbnRQcm9kdWN0Q2F0ZWdvcnkuanNcIjogKChleHBvcnRzKSA9PiB7XG5cdC8qKlxuXHQqIENvbW1lcmNlXG5cdCogTm8gZGVzY3JpcHRpb24gcHJvdmlkZWQgKGdlbmVyYXRlZCBieSBPcGVuYXBpIEdlbmVyYXRvciBodHRwczovL2dpdGh1Yi5jb20vb3BlbmFwaXRvb2xzL29wZW5hcGktZ2VuZXJhdG9yKVxuXHQqXG5cdCogVGhlIHZlcnNpb24gb2YgdGhlIE9wZW5BUEkgZG9jdW1lbnQ6IDEuMS4wXG5cdCpcblx0KlxuXHQqIE5PVEU6IFRoaXMgY2xhc3MgaXMgYXV0byBnZW5lcmF0ZWQgYnkgT3BlbkFQSSBHZW5lcmF0b3IgKGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaCkuXG5cdCogaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoXG5cdCogRG8gbm90IGVkaXQgdGhlIGNsYXNzIG1hbnVhbGx5LlxuXHQqL1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5cdGV4cG9ydHMuU3VwcG9ydGVkRXZlbnRQcm9kdWN0Q2F0ZWdvcnkgPSB2b2lkIDA7XG5cdGV4cG9ydHMuaW5zdGFuY2VPZlN1cHBvcnRlZEV2ZW50UHJvZHVjdENhdGVnb3J5ID0gaW5zdGFuY2VPZlN1cHBvcnRlZEV2ZW50UHJvZHVjdENhdGVnb3J5O1xuXHRleHBvcnRzLlN1cHBvcnRlZEV2ZW50UHJvZHVjdENhdGVnb3J5RnJvbUpTT04gPSBTdXBwb3J0ZWRFdmVudFByb2R1Y3RDYXRlZ29yeUZyb21KU09OO1xuXHRleHBvcnRzLlN1cHBvcnRlZEV2ZW50UHJvZHVjdENhdGVnb3J5RnJvbUpTT05UeXBlZCA9IFN1cHBvcnRlZEV2ZW50UHJvZHVjdENhdGVnb3J5RnJvbUpTT05UeXBlZDtcblx0ZXhwb3J0cy5TdXBwb3J0ZWRFdmVudFByb2R1Y3RDYXRlZ29yeVRvSlNPTiA9IFN1cHBvcnRlZEV2ZW50UHJvZHVjdENhdGVnb3J5VG9KU09OO1xuXHRleHBvcnRzLlN1cHBvcnRlZEV2ZW50UHJvZHVjdENhdGVnb3J5VG9KU09OVHlwZWQgPSBTdXBwb3J0ZWRFdmVudFByb2R1Y3RDYXRlZ29yeVRvSlNPTlR5cGVkO1xuXHQvKipcblx0KlxuXHQqIEBleHBvcnRcblx0KiBAZW51bSB7c3RyaW5nfVxuXHQqL1xuXHR2YXIgU3VwcG9ydGVkRXZlbnRQcm9kdWN0Q2F0ZWdvcnk7XG5cdChmdW5jdGlvbihTdXBwb3J0ZWRFdmVudFByb2R1Y3RDYXRlZ29yeSQxKSB7XG5cdFx0U3VwcG9ydGVkRXZlbnRQcm9kdWN0Q2F0ZWdvcnkkMVtcIlByb2R1Y3RcIl0gPSBcInByb2R1Y3RcIjtcblx0XHRTdXBwb3J0ZWRFdmVudFByb2R1Y3RDYXRlZ29yeSQxW1wiU2hhcGV3ZWFyXCJdID0gXCJzaGFwZXdlYXJcIjtcblx0XHRTdXBwb3J0ZWRFdmVudFByb2R1Y3RDYXRlZ29yeSQxW1wiTm9uU2hhcGV3ZWFyXCJdID0gXCJub24tc2hhcGV3ZWFyXCI7XG5cdH0pKFN1cHBvcnRlZEV2ZW50UHJvZHVjdENhdGVnb3J5IHx8IChleHBvcnRzLlN1cHBvcnRlZEV2ZW50UHJvZHVjdENhdGVnb3J5ID0gU3VwcG9ydGVkRXZlbnRQcm9kdWN0Q2F0ZWdvcnkgPSB7fSkpO1xuXHRmdW5jdGlvbiBpbnN0YW5jZU9mU3VwcG9ydGVkRXZlbnRQcm9kdWN0Q2F0ZWdvcnkodmFsdWUpIHtcblx0XHRmb3IgKGNvbnN0IGtleSBpbiBTdXBwb3J0ZWRFdmVudFByb2R1Y3RDYXRlZ29yeSkgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChTdXBwb3J0ZWRFdmVudFByb2R1Y3RDYXRlZ29yeSwga2V5KSkge1xuXHRcdFx0aWYgKFN1cHBvcnRlZEV2ZW50UHJvZHVjdENhdGVnb3J5W2tleV0gPT09IHZhbHVlKSByZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGZ1bmN0aW9uIFN1cHBvcnRlZEV2ZW50UHJvZHVjdENhdGVnb3J5RnJvbUpTT04oanNvbikge1xuXHRcdHJldHVybiBTdXBwb3J0ZWRFdmVudFByb2R1Y3RDYXRlZ29yeUZyb21KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIFN1cHBvcnRlZEV2ZW50UHJvZHVjdENhdGVnb3J5RnJvbUpTT05UeXBlZChqc29uLCBpZ25vcmVEaXNjcmltaW5hdG9yKSB7XG5cdFx0cmV0dXJuIGpzb247XG5cdH1cblx0ZnVuY3Rpb24gU3VwcG9ydGVkRXZlbnRQcm9kdWN0Q2F0ZWdvcnlUb0pTT04odmFsdWUpIHtcblx0XHRyZXR1cm4gdmFsdWU7XG5cdH1cblx0ZnVuY3Rpb24gU3VwcG9ydGVkRXZlbnRQcm9kdWN0Q2F0ZWdvcnlUb0pTT05UeXBlZCh2YWx1ZSwgaWdub3JlRGlzY3JpbWluYXRvcikge1xuXHRcdHJldHVybiB2YWx1ZTtcblx0fVxufSkgfSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIC4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvU3VwcG9ydGVkRXZlbnRSZXF1ZXN0LmpzXG52YXIgcmVxdWlyZV9TdXBwb3J0ZWRFdmVudFJlcXVlc3QgPSAvKiBAX19QVVJFX18gKi8gX19jb21tb25KUyh7IFwiLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9TdXBwb3J0ZWRFdmVudFJlcXVlc3QuanNcIjogKChleHBvcnRzKSA9PiB7XG5cdC8qKlxuXHQqIENvbW1lcmNlXG5cdCogTm8gZGVzY3JpcHRpb24gcHJvdmlkZWQgKGdlbmVyYXRlZCBieSBPcGVuYXBpIEdlbmVyYXRvciBodHRwczovL2dpdGh1Yi5jb20vb3BlbmFwaXRvb2xzL29wZW5hcGktZ2VuZXJhdG9yKVxuXHQqXG5cdCogVGhlIHZlcnNpb24gb2YgdGhlIE9wZW5BUEkgZG9jdW1lbnQ6IDEuMS4wXG5cdCpcblx0KlxuXHQqIE5PVEU6IFRoaXMgY2xhc3MgaXMgYXV0byBnZW5lcmF0ZWQgYnkgT3BlbkFQSSBHZW5lcmF0b3IgKGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaCkuXG5cdCogaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoXG5cdCogRG8gbm90IGVkaXQgdGhlIGNsYXNzIG1hbnVhbGx5LlxuXHQqL1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5cdGV4cG9ydHMuaW5zdGFuY2VPZlN1cHBvcnRlZEV2ZW50UmVxdWVzdCA9IGluc3RhbmNlT2ZTdXBwb3J0ZWRFdmVudFJlcXVlc3Q7XG5cdGV4cG9ydHMuU3VwcG9ydGVkRXZlbnRSZXF1ZXN0RnJvbUpTT04gPSBTdXBwb3J0ZWRFdmVudFJlcXVlc3RGcm9tSlNPTjtcblx0ZXhwb3J0cy5TdXBwb3J0ZWRFdmVudFJlcXVlc3RGcm9tSlNPTlR5cGVkID0gU3VwcG9ydGVkRXZlbnRSZXF1ZXN0RnJvbUpTT05UeXBlZDtcblx0ZXhwb3J0cy5TdXBwb3J0ZWRFdmVudFJlcXVlc3RUb0pTT04gPSBTdXBwb3J0ZWRFdmVudFJlcXVlc3RUb0pTT047XG5cdGV4cG9ydHMuU3VwcG9ydGVkRXZlbnRSZXF1ZXN0VG9KU09OVHlwZWQgPSBTdXBwb3J0ZWRFdmVudFJlcXVlc3RUb0pTT05UeXBlZDtcblx0Y29uc3QgQ29udGV4dF8xJDEgPSByZXF1aXJlX0NvbnRleHQoKTtcblx0Y29uc3QgVXNlckV2ZW50XzEkMiA9IHJlcXVpcmVfVXNlckV2ZW50KCk7XG5cdC8qKlxuXHQqIENoZWNrIGlmIGEgZ2l2ZW4gb2JqZWN0IGltcGxlbWVudHMgdGhlIFN1cHBvcnRlZEV2ZW50UmVxdWVzdCBpbnRlcmZhY2UuXG5cdCovXG5cdGZ1bmN0aW9uIGluc3RhbmNlT2ZTdXBwb3J0ZWRFdmVudFJlcXVlc3QodmFsdWUpIHtcblx0XHRpZiAoIShcImNvbnRleHRcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJjb250ZXh0XCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRpZiAoIShcImlkXCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wiaWRcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdGlmICghKFwidXNlcl9ldmVudFwiIGluIHZhbHVlKSB8fCB2YWx1ZVtcInVzZXJfZXZlbnRcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdGZ1bmN0aW9uIFN1cHBvcnRlZEV2ZW50UmVxdWVzdEZyb21KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gU3VwcG9ydGVkRXZlbnRSZXF1ZXN0RnJvbUpTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gU3VwcG9ydGVkRXZlbnRSZXF1ZXN0RnJvbUpTT05UeXBlZChqc29uLCBpZ25vcmVEaXNjcmltaW5hdG9yKSB7XG5cdFx0aWYgKGpzb24gPT0gbnVsbCkgcmV0dXJuIGpzb247XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwiY29udGV4dFwiOiAoMCwgQ29udGV4dF8xJDEuQ29udGV4dEZyb21KU09OKShqc29uW1wiY29udGV4dFwiXSksXG5cdFx0XHRcImlkXCI6IGpzb25bXCJpZFwiXSxcblx0XHRcdFwidXNlcl9ldmVudFwiOiAoMCwgVXNlckV2ZW50XzEkMi5Vc2VyRXZlbnRGcm9tSlNPTikoanNvbltcInVzZXJfZXZlbnRcIl0pXG5cdFx0fTtcblx0fVxuXHRmdW5jdGlvbiBTdXBwb3J0ZWRFdmVudFJlcXVlc3RUb0pTT04oanNvbikge1xuXHRcdHJldHVybiBTdXBwb3J0ZWRFdmVudFJlcXVlc3RUb0pTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gU3VwcG9ydGVkRXZlbnRSZXF1ZXN0VG9KU09OVHlwZWQodmFsdWUsIGlnbm9yZURpc2NyaW1pbmF0b3IgPSBmYWxzZSkge1xuXHRcdGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gdmFsdWU7XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwiY29udGV4dFwiOiAoMCwgQ29udGV4dF8xJDEuQ29udGV4dFRvSlNPTikodmFsdWVbXCJjb250ZXh0XCJdKSxcblx0XHRcdFwiaWRcIjogdmFsdWVbXCJpZFwiXSxcblx0XHRcdFwidXNlcl9ldmVudFwiOiAoMCwgVXNlckV2ZW50XzEkMi5Vc2VyRXZlbnRUb0pTT04pKHZhbHVlW1widXNlcl9ldmVudFwiXSlcblx0XHR9O1xuXHR9XG59KSB9KTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9TdXBwb3J0ZWRFdmVudFJlc3BvbnNlLmpzXG52YXIgcmVxdWlyZV9TdXBwb3J0ZWRFdmVudFJlc3BvbnNlID0gLyogQF9fUFVSRV9fICovIF9fY29tbW9uSlMoeyBcIi4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvU3VwcG9ydGVkRXZlbnRSZXNwb25zZS5qc1wiOiAoKGV4cG9ydHMpID0+IHtcblx0LyoqXG5cdCogQ29tbWVyY2Vcblx0KiBObyBkZXNjcmlwdGlvbiBwcm92aWRlZCAoZ2VuZXJhdGVkIGJ5IE9wZW5hcGkgR2VuZXJhdG9yIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuYXBpdG9vbHMvb3BlbmFwaS1nZW5lcmF0b3IpXG5cdCpcblx0KiBUaGUgdmVyc2lvbiBvZiB0aGUgT3BlbkFQSSBkb2N1bWVudDogMS4xLjBcblx0KlxuXHQqXG5cdCogTk9URTogVGhpcyBjbGFzcyBpcyBhdXRvIGdlbmVyYXRlZCBieSBPcGVuQVBJIEdlbmVyYXRvciAoaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoKS5cblx0KiBodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2hcblx0KiBEbyBub3QgZWRpdCB0aGUgY2xhc3MgbWFudWFsbHkuXG5cdCovXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcblx0ZXhwb3J0cy5pbnN0YW5jZU9mU3VwcG9ydGVkRXZlbnRSZXNwb25zZSA9IGluc3RhbmNlT2ZTdXBwb3J0ZWRFdmVudFJlc3BvbnNlO1xuXHRleHBvcnRzLlN1cHBvcnRlZEV2ZW50UmVzcG9uc2VGcm9tSlNPTiA9IFN1cHBvcnRlZEV2ZW50UmVzcG9uc2VGcm9tSlNPTjtcblx0ZXhwb3J0cy5TdXBwb3J0ZWRFdmVudFJlc3BvbnNlRnJvbUpTT05UeXBlZCA9IFN1cHBvcnRlZEV2ZW50UmVzcG9uc2VGcm9tSlNPTlR5cGVkO1xuXHRleHBvcnRzLlN1cHBvcnRlZEV2ZW50UmVzcG9uc2VUb0pTT04gPSBTdXBwb3J0ZWRFdmVudFJlc3BvbnNlVG9KU09OO1xuXHRleHBvcnRzLlN1cHBvcnRlZEV2ZW50UmVzcG9uc2VUb0pTT05UeXBlZCA9IFN1cHBvcnRlZEV2ZW50UmVzcG9uc2VUb0pTT05UeXBlZDtcblx0Y29uc3QgU3VwcG9ydGVkRXZlbnRQcm9kdWN0Q2F0ZWdvcnlfMSA9IHJlcXVpcmVfU3VwcG9ydGVkRXZlbnRQcm9kdWN0Q2F0ZWdvcnkoKTtcblx0LyoqXG5cdCogQ2hlY2sgaWYgYSBnaXZlbiBvYmplY3QgaW1wbGVtZW50cyB0aGUgU3VwcG9ydGVkRXZlbnRSZXNwb25zZSBpbnRlcmZhY2UuXG5cdCovXG5cdGZ1bmN0aW9uIGluc3RhbmNlT2ZTdXBwb3J0ZWRFdmVudFJlc3BvbnNlKHZhbHVlKSB7XG5cdFx0aWYgKCEoXCJjcmVhdGVkX2F0XCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wiY3JlYXRlZF9hdFwiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0aWYgKCEoXCJpZFwiIGluIHZhbHVlKSB8fCB2YWx1ZVtcImlkXCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRpZiAoIShcInJlYWR5XCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wicmVhZHlcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdGlmICghKFwic3VwcG9ydGVkXCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wic3VwcG9ydGVkXCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHRmdW5jdGlvbiBTdXBwb3J0ZWRFdmVudFJlc3BvbnNlRnJvbUpTT04oanNvbikge1xuXHRcdHJldHVybiBTdXBwb3J0ZWRFdmVudFJlc3BvbnNlRnJvbUpTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gU3VwcG9ydGVkRXZlbnRSZXNwb25zZUZyb21KU09OVHlwZWQoanNvbiwgaWdub3JlRGlzY3JpbWluYXRvcikge1xuXHRcdGlmIChqc29uID09IG51bGwpIHJldHVybiBqc29uO1xuXHRcdHJldHVybiB7XG5cdFx0XHRcImNhdGVnb3J5XCI6IGpzb25bXCJjYXRlZ29yeVwiXSA9PSBudWxsID8gdm9pZCAwIDogKDAsIFN1cHBvcnRlZEV2ZW50UHJvZHVjdENhdGVnb3J5XzEuU3VwcG9ydGVkRXZlbnRQcm9kdWN0Q2F0ZWdvcnlGcm9tSlNPTikoanNvbltcImNhdGVnb3J5XCJdKSxcblx0XHRcdFwiY29sbGVjdGlvbnNcIjoganNvbltcImNvbGxlY3Rpb25zXCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1wiY29sbGVjdGlvbnNcIl0sXG5cdFx0XHRcImNyZWF0ZWRfYXRcIjoganNvbltcImNyZWF0ZWRfYXRcIl0sXG5cdFx0XHRcImlkXCI6IGpzb25bXCJpZFwiXSxcblx0XHRcdFwibWVyY2hhbnRfdGFnc1wiOiBqc29uW1wibWVyY2hhbnRfdGFnc1wiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcIm1lcmNoYW50X3RhZ3NcIl0sXG5cdFx0XHRcIm51bV9vZl9yZXZpZXdzXCI6IGpzb25bXCJudW1fb2ZfcmV2aWV3c1wiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcIm51bV9vZl9yZXZpZXdzXCJdLFxuXHRcdFx0XCJyZWFkeVwiOiBqc29uW1wicmVhZHlcIl0sXG5cdFx0XHRcInN1cHBvcnRlZFwiOiBqc29uW1wic3VwcG9ydGVkXCJdLFxuXHRcdFx0XCJ0b3BfY2F0ZWdvcnlcIjoganNvbltcInRvcF9jYXRlZ29yeVwiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcInRvcF9jYXRlZ29yeVwiXVxuXHRcdH07XG5cdH1cblx0ZnVuY3Rpb24gU3VwcG9ydGVkRXZlbnRSZXNwb25zZVRvSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIFN1cHBvcnRlZEV2ZW50UmVzcG9uc2VUb0pTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gU3VwcG9ydGVkRXZlbnRSZXNwb25zZVRvSlNPTlR5cGVkKHZhbHVlLCBpZ25vcmVEaXNjcmltaW5hdG9yID0gZmFsc2UpIHtcblx0XHRpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIHZhbHVlO1xuXHRcdHJldHVybiB7XG5cdFx0XHRcImNhdGVnb3J5XCI6ICgwLCBTdXBwb3J0ZWRFdmVudFByb2R1Y3RDYXRlZ29yeV8xLlN1cHBvcnRlZEV2ZW50UHJvZHVjdENhdGVnb3J5VG9KU09OKSh2YWx1ZVtcImNhdGVnb3J5XCJdKSxcblx0XHRcdFwiY29sbGVjdGlvbnNcIjogdmFsdWVbXCJjb2xsZWN0aW9uc1wiXSxcblx0XHRcdFwiY3JlYXRlZF9hdFwiOiB2YWx1ZVtcImNyZWF0ZWRfYXRcIl0sXG5cdFx0XHRcImlkXCI6IHZhbHVlW1wiaWRcIl0sXG5cdFx0XHRcIm1lcmNoYW50X3RhZ3NcIjogdmFsdWVbXCJtZXJjaGFudF90YWdzXCJdLFxuXHRcdFx0XCJudW1fb2ZfcmV2aWV3c1wiOiB2YWx1ZVtcIm51bV9vZl9yZXZpZXdzXCJdLFxuXHRcdFx0XCJyZWFkeVwiOiB2YWx1ZVtcInJlYWR5XCJdLFxuXHRcdFx0XCJzdXBwb3J0ZWRcIjogdmFsdWVbXCJzdXBwb3J0ZWRcIl0sXG5cdFx0XHRcInRvcF9jYXRlZ29yeVwiOiB2YWx1ZVtcInRvcF9jYXRlZ29yeVwiXVxuXHRcdH07XG5cdH1cbn0pIH0pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiAuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL1VybFJlc29sdmluZ0dlbmVyaWNDb25maWcuanNcbnZhciByZXF1aXJlX1VybFJlc29sdmluZ0dlbmVyaWNDb25maWcgPSAvKiBAX19QVVJFX18gKi8gX19jb21tb25KUyh7IFwiLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9VcmxSZXNvbHZpbmdHZW5lcmljQ29uZmlnLmpzXCI6ICgoZXhwb3J0cykgPT4ge1xuXHQvKipcblx0KiBDb21tZXJjZVxuXHQqIE5vIGRlc2NyaXB0aW9uIHByb3ZpZGVkIChnZW5lcmF0ZWQgYnkgT3BlbmFwaSBHZW5lcmF0b3IgaHR0cHM6Ly9naXRodWIuY29tL29wZW5hcGl0b29scy9vcGVuYXBpLWdlbmVyYXRvcilcblx0KlxuXHQqIFRoZSB2ZXJzaW9uIG9mIHRoZSBPcGVuQVBJIGRvY3VtZW50OiAxLjEuMFxuXHQqXG5cdCpcblx0KiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IE9wZW5BUEkgR2VuZXJhdG9yIChodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2gpLlxuXHQqIGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaFxuXHQqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cblx0Ki9cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuXHRleHBvcnRzLmluc3RhbmNlT2ZVcmxSZXNvbHZpbmdHZW5lcmljQ29uZmlnID0gaW5zdGFuY2VPZlVybFJlc29sdmluZ0dlbmVyaWNDb25maWc7XG5cdGV4cG9ydHMuVXJsUmVzb2x2aW5nR2VuZXJpY0NvbmZpZ0Zyb21KU09OID0gVXJsUmVzb2x2aW5nR2VuZXJpY0NvbmZpZ0Zyb21KU09OO1xuXHRleHBvcnRzLlVybFJlc29sdmluZ0dlbmVyaWNDb25maWdGcm9tSlNPTlR5cGVkID0gVXJsUmVzb2x2aW5nR2VuZXJpY0NvbmZpZ0Zyb21KU09OVHlwZWQ7XG5cdGV4cG9ydHMuVXJsUmVzb2x2aW5nR2VuZXJpY0NvbmZpZ1RvSlNPTiA9IFVybFJlc29sdmluZ0dlbmVyaWNDb25maWdUb0pTT047XG5cdGV4cG9ydHMuVXJsUmVzb2x2aW5nR2VuZXJpY0NvbmZpZ1RvSlNPTlR5cGVkID0gVXJsUmVzb2x2aW5nR2VuZXJpY0NvbmZpZ1RvSlNPTlR5cGVkO1xuXHQvKipcblx0KiBDaGVjayBpZiBhIGdpdmVuIG9iamVjdCBpbXBsZW1lbnRzIHRoZSBVcmxSZXNvbHZpbmdHZW5lcmljQ29uZmlnIGludGVyZmFjZS5cblx0Ki9cblx0ZnVuY3Rpb24gaW5zdGFuY2VPZlVybFJlc29sdmluZ0dlbmVyaWNDb25maWcodmFsdWUpIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHRmdW5jdGlvbiBVcmxSZXNvbHZpbmdHZW5lcmljQ29uZmlnRnJvbUpTT04oanNvbikge1xuXHRcdHJldHVybiBVcmxSZXNvbHZpbmdHZW5lcmljQ29uZmlnRnJvbUpTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gVXJsUmVzb2x2aW5nR2VuZXJpY0NvbmZpZ0Zyb21KU09OVHlwZWQoanNvbiwgaWdub3JlRGlzY3JpbWluYXRvcikge1xuXHRcdGlmIChqc29uID09IG51bGwpIHJldHVybiBqc29uO1xuXHRcdHJldHVybiB7IFwiZGV0YWlsc1wiOiBqc29uW1wiZGV0YWlsc1wiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcImRldGFpbHNcIl0gfTtcblx0fVxuXHRmdW5jdGlvbiBVcmxSZXNvbHZpbmdHZW5lcmljQ29uZmlnVG9KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gVXJsUmVzb2x2aW5nR2VuZXJpY0NvbmZpZ1RvSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBVcmxSZXNvbHZpbmdHZW5lcmljQ29uZmlnVG9KU09OVHlwZWQodmFsdWUsIGlnbm9yZURpc2NyaW1pbmF0b3IgPSBmYWxzZSkge1xuXHRcdGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gdmFsdWU7XG5cdFx0cmV0dXJuIHsgXCJkZXRhaWxzXCI6IHZhbHVlW1wiZGV0YWlsc1wiXSB9O1xuXHR9XG59KSB9KTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9VcmxSZXNvbHZpbmdQRFBDb25maWcuanNcbnZhciByZXF1aXJlX1VybFJlc29sdmluZ1BEUENvbmZpZyA9IC8qIEBfX1BVUkVfXyAqLyBfX2NvbW1vbkpTKHsgXCIuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL1VybFJlc29sdmluZ1BEUENvbmZpZy5qc1wiOiAoKGV4cG9ydHMpID0+IHtcblx0LyoqXG5cdCogQ29tbWVyY2Vcblx0KiBObyBkZXNjcmlwdGlvbiBwcm92aWRlZCAoZ2VuZXJhdGVkIGJ5IE9wZW5hcGkgR2VuZXJhdG9yIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuYXBpdG9vbHMvb3BlbmFwaS1nZW5lcmF0b3IpXG5cdCpcblx0KiBUaGUgdmVyc2lvbiBvZiB0aGUgT3BlbkFQSSBkb2N1bWVudDogMS4xLjBcblx0KlxuXHQqXG5cdCogTk9URTogVGhpcyBjbGFzcyBpcyBhdXRvIGdlbmVyYXRlZCBieSBPcGVuQVBJIEdlbmVyYXRvciAoaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoKS5cblx0KiBodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2hcblx0KiBEbyBub3QgZWRpdCB0aGUgY2xhc3MgbWFudWFsbHkuXG5cdCovXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcblx0ZXhwb3J0cy5pbnN0YW5jZU9mVXJsUmVzb2x2aW5nUERQQ29uZmlnID0gaW5zdGFuY2VPZlVybFJlc29sdmluZ1BEUENvbmZpZztcblx0ZXhwb3J0cy5VcmxSZXNvbHZpbmdQRFBDb25maWdGcm9tSlNPTiA9IFVybFJlc29sdmluZ1BEUENvbmZpZ0Zyb21KU09OO1xuXHRleHBvcnRzLlVybFJlc29sdmluZ1BEUENvbmZpZ0Zyb21KU09OVHlwZWQgPSBVcmxSZXNvbHZpbmdQRFBDb25maWdGcm9tSlNPTlR5cGVkO1xuXHRleHBvcnRzLlVybFJlc29sdmluZ1BEUENvbmZpZ1RvSlNPTiA9IFVybFJlc29sdmluZ1BEUENvbmZpZ1RvSlNPTjtcblx0ZXhwb3J0cy5VcmxSZXNvbHZpbmdQRFBDb25maWdUb0pTT05UeXBlZCA9IFVybFJlc29sdmluZ1BEUENvbmZpZ1RvSlNPTlR5cGVkO1xuXHRjb25zdCBQRFBBdHRyaWJ1dGVzXzEgPSByZXF1aXJlX1BEUEF0dHJpYnV0ZXMoKTtcblx0LyoqXG5cdCogQ2hlY2sgaWYgYSBnaXZlbiBvYmplY3QgaW1wbGVtZW50cyB0aGUgVXJsUmVzb2x2aW5nUERQQ29uZmlnIGludGVyZmFjZS5cblx0Ki9cblx0ZnVuY3Rpb24gaW5zdGFuY2VPZlVybFJlc29sdmluZ1BEUENvbmZpZyh2YWx1ZSkge1xuXHRcdGlmICghKFwicGRwX2F0dHJpYnV0ZXNcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJwZHBfYXR0cmlidXRlc1wiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0ZnVuY3Rpb24gVXJsUmVzb2x2aW5nUERQQ29uZmlnRnJvbUpTT04oanNvbikge1xuXHRcdHJldHVybiBVcmxSZXNvbHZpbmdQRFBDb25maWdGcm9tSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBVcmxSZXNvbHZpbmdQRFBDb25maWdGcm9tSlNPTlR5cGVkKGpzb24sIGlnbm9yZURpc2NyaW1pbmF0b3IpIHtcblx0XHRpZiAoanNvbiA9PSBudWxsKSByZXR1cm4ganNvbjtcblx0XHRyZXR1cm4ge1xuXHRcdFx0XCJjb2xsZWN0aW9uc1wiOiBqc29uW1wiY29sbGVjdGlvbnNcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IGpzb25bXCJjb2xsZWN0aW9uc1wiXSxcblx0XHRcdFwibWVyY2hhbnRfdGFnc1wiOiBqc29uW1wibWVyY2hhbnRfdGFnc1wiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcIm1lcmNoYW50X3RhZ3NcIl0sXG5cdFx0XHRcIm51bWJlcl9vZl9yZXZpZXdzXCI6IGpzb25bXCJudW1iZXJfb2ZfcmV2aWV3c1wiXSA9PSBudWxsID8gdm9pZCAwIDoganNvbltcIm51bWJlcl9vZl9yZXZpZXdzXCJdLFxuXHRcdFx0XCJwZHBfYXR0cmlidXRlc1wiOiAoMCwgUERQQXR0cmlidXRlc18xLlBEUEF0dHJpYnV0ZXNGcm9tSlNPTikoanNvbltcInBkcF9hdHRyaWJ1dGVzXCJdKVxuXHRcdH07XG5cdH1cblx0ZnVuY3Rpb24gVXJsUmVzb2x2aW5nUERQQ29uZmlnVG9KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gVXJsUmVzb2x2aW5nUERQQ29uZmlnVG9KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIFVybFJlc29sdmluZ1BEUENvbmZpZ1RvSlNPTlR5cGVkKHZhbHVlLCBpZ25vcmVEaXNjcmltaW5hdG9yID0gZmFsc2UpIHtcblx0XHRpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIHZhbHVlO1xuXHRcdHJldHVybiB7XG5cdFx0XHRcImNvbGxlY3Rpb25zXCI6IHZhbHVlW1wiY29sbGVjdGlvbnNcIl0sXG5cdFx0XHRcIm1lcmNoYW50X3RhZ3NcIjogdmFsdWVbXCJtZXJjaGFudF90YWdzXCJdLFxuXHRcdFx0XCJudW1iZXJfb2ZfcmV2aWV3c1wiOiB2YWx1ZVtcIm51bWJlcl9vZl9yZXZpZXdzXCJdLFxuXHRcdFx0XCJwZHBfYXR0cmlidXRlc1wiOiAoMCwgUERQQXR0cmlidXRlc18xLlBEUEF0dHJpYnV0ZXNUb0pTT04pKHZhbHVlW1wicGRwX2F0dHJpYnV0ZXNcIl0pXG5cdFx0fTtcblx0fVxufSkgfSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIC4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvVXJsUmVzb2x2aW5nUExQQ29uZmlnLmpzXG52YXIgcmVxdWlyZV9VcmxSZXNvbHZpbmdQTFBDb25maWcgPSAvKiBAX19QVVJFX18gKi8gX19jb21tb25KUyh7IFwiLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9VcmxSZXNvbHZpbmdQTFBDb25maWcuanNcIjogKChleHBvcnRzKSA9PiB7XG5cdC8qKlxuXHQqIENvbW1lcmNlXG5cdCogTm8gZGVzY3JpcHRpb24gcHJvdmlkZWQgKGdlbmVyYXRlZCBieSBPcGVuYXBpIEdlbmVyYXRvciBodHRwczovL2dpdGh1Yi5jb20vb3BlbmFwaXRvb2xzL29wZW5hcGktZ2VuZXJhdG9yKVxuXHQqXG5cdCogVGhlIHZlcnNpb24gb2YgdGhlIE9wZW5BUEkgZG9jdW1lbnQ6IDEuMS4wXG5cdCpcblx0KlxuXHQqIE5PVEU6IFRoaXMgY2xhc3MgaXMgYXV0byBnZW5lcmF0ZWQgYnkgT3BlbkFQSSBHZW5lcmF0b3IgKGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaCkuXG5cdCogaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoXG5cdCogRG8gbm90IGVkaXQgdGhlIGNsYXNzIG1hbnVhbGx5LlxuXHQqL1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5cdGV4cG9ydHMuaW5zdGFuY2VPZlVybFJlc29sdmluZ1BMUENvbmZpZyA9IGluc3RhbmNlT2ZVcmxSZXNvbHZpbmdQTFBDb25maWc7XG5cdGV4cG9ydHMuVXJsUmVzb2x2aW5nUExQQ29uZmlnRnJvbUpTT04gPSBVcmxSZXNvbHZpbmdQTFBDb25maWdGcm9tSlNPTjtcblx0ZXhwb3J0cy5VcmxSZXNvbHZpbmdQTFBDb25maWdGcm9tSlNPTlR5cGVkID0gVXJsUmVzb2x2aW5nUExQQ29uZmlnRnJvbUpTT05UeXBlZDtcblx0ZXhwb3J0cy5VcmxSZXNvbHZpbmdQTFBDb25maWdUb0pTT04gPSBVcmxSZXNvbHZpbmdQTFBDb25maWdUb0pTT047XG5cdGV4cG9ydHMuVXJsUmVzb2x2aW5nUExQQ29uZmlnVG9KU09OVHlwZWQgPSBVcmxSZXNvbHZpbmdQTFBDb25maWdUb0pTT05UeXBlZDtcblx0Y29uc3QgUExQQXR0cmlidXRlc18xID0gcmVxdWlyZV9QTFBBdHRyaWJ1dGVzKCk7XG5cdC8qKlxuXHQqIENoZWNrIGlmIGEgZ2l2ZW4gb2JqZWN0IGltcGxlbWVudHMgdGhlIFVybFJlc29sdmluZ1BMUENvbmZpZyBpbnRlcmZhY2UuXG5cdCovXG5cdGZ1bmN0aW9uIGluc3RhbmNlT2ZVcmxSZXNvbHZpbmdQTFBDb25maWcodmFsdWUpIHtcblx0XHRpZiAoIShcInBscF9hdHRyaWJ1dGVzXCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wicGxwX2F0dHJpYnV0ZXNcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdGZ1bmN0aW9uIFVybFJlc29sdmluZ1BMUENvbmZpZ0Zyb21KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gVXJsUmVzb2x2aW5nUExQQ29uZmlnRnJvbUpTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gVXJsUmVzb2x2aW5nUExQQ29uZmlnRnJvbUpTT05UeXBlZChqc29uLCBpZ25vcmVEaXNjcmltaW5hdG9yKSB7XG5cdFx0aWYgKGpzb24gPT0gbnVsbCkgcmV0dXJuIGpzb247XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwicGxwX2F0dHJpYnV0ZXNcIjogKDAsIFBMUEF0dHJpYnV0ZXNfMS5QTFBBdHRyaWJ1dGVzRnJvbUpTT04pKGpzb25bXCJwbHBfYXR0cmlidXRlc1wiXSksXG5cdFx0XHRcInRvcF9jYXRlZ29yeVwiOiBqc29uW1widG9wX2NhdGVnb3J5XCJdID09IG51bGwgPyB2b2lkIDAgOiBqc29uW1widG9wX2NhdGVnb3J5XCJdXG5cdFx0fTtcblx0fVxuXHRmdW5jdGlvbiBVcmxSZXNvbHZpbmdQTFBDb25maWdUb0pTT04oanNvbikge1xuXHRcdHJldHVybiBVcmxSZXNvbHZpbmdQTFBDb25maWdUb0pTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gVXJsUmVzb2x2aW5nUExQQ29uZmlnVG9KU09OVHlwZWQodmFsdWUsIGlnbm9yZURpc2NyaW1pbmF0b3IgPSBmYWxzZSkge1xuXHRcdGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gdmFsdWU7XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwicGxwX2F0dHJpYnV0ZXNcIjogKDAsIFBMUEF0dHJpYnV0ZXNfMS5QTFBBdHRyaWJ1dGVzVG9KU09OKSh2YWx1ZVtcInBscF9hdHRyaWJ1dGVzXCJdKSxcblx0XHRcdFwidG9wX2NhdGVnb3J5XCI6IHZhbHVlW1widG9wX2NhdGVnb3J5XCJdXG5cdFx0fTtcblx0fVxufSkgfSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIC4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvVXJsUmVzb2x2aW5nUmVxdWVzdC5qc1xudmFyIHJlcXVpcmVfVXJsUmVzb2x2aW5nUmVxdWVzdCA9IC8qIEBfX1BVUkVfXyAqLyBfX2NvbW1vbkpTKHsgXCIuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL1VybFJlc29sdmluZ1JlcXVlc3QuanNcIjogKChleHBvcnRzKSA9PiB7XG5cdC8qKlxuXHQqIENvbW1lcmNlXG5cdCogTm8gZGVzY3JpcHRpb24gcHJvdmlkZWQgKGdlbmVyYXRlZCBieSBPcGVuYXBpIEdlbmVyYXRvciBodHRwczovL2dpdGh1Yi5jb20vb3BlbmFwaXRvb2xzL29wZW5hcGktZ2VuZXJhdG9yKVxuXHQqXG5cdCogVGhlIHZlcnNpb24gb2YgdGhlIE9wZW5BUEkgZG9jdW1lbnQ6IDEuMS4wXG5cdCpcblx0KlxuXHQqIE5PVEU6IFRoaXMgY2xhc3MgaXMgYXV0byBnZW5lcmF0ZWQgYnkgT3BlbkFQSSBHZW5lcmF0b3IgKGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaCkuXG5cdCogaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoXG5cdCogRG8gbm90IGVkaXQgdGhlIGNsYXNzIG1hbnVhbGx5LlxuXHQqL1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5cdGV4cG9ydHMuaW5zdGFuY2VPZlVybFJlc29sdmluZ1JlcXVlc3QgPSBpbnN0YW5jZU9mVXJsUmVzb2x2aW5nUmVxdWVzdDtcblx0ZXhwb3J0cy5VcmxSZXNvbHZpbmdSZXF1ZXN0RnJvbUpTT04gPSBVcmxSZXNvbHZpbmdSZXF1ZXN0RnJvbUpTT047XG5cdGV4cG9ydHMuVXJsUmVzb2x2aW5nUmVxdWVzdEZyb21KU09OVHlwZWQgPSBVcmxSZXNvbHZpbmdSZXF1ZXN0RnJvbUpTT05UeXBlZDtcblx0ZXhwb3J0cy5VcmxSZXNvbHZpbmdSZXF1ZXN0VG9KU09OID0gVXJsUmVzb2x2aW5nUmVxdWVzdFRvSlNPTjtcblx0ZXhwb3J0cy5VcmxSZXNvbHZpbmdSZXF1ZXN0VG9KU09OVHlwZWQgPSBVcmxSZXNvbHZpbmdSZXF1ZXN0VG9KU09OVHlwZWQ7XG5cdGNvbnN0IENvbnRleHRfMSA9IHJlcXVpcmVfQ29udGV4dCgpO1xuXHQvKipcblx0KiBDaGVjayBpZiBhIGdpdmVuIG9iamVjdCBpbXBsZW1lbnRzIHRoZSBVcmxSZXNvbHZpbmdSZXF1ZXN0IGludGVyZmFjZS5cblx0Ki9cblx0ZnVuY3Rpb24gaW5zdGFuY2VPZlVybFJlc29sdmluZ1JlcXVlc3QodmFsdWUpIHtcblx0XHRpZiAoIShcImNvbnRleHRcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJjb250ZXh0XCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRpZiAoIShcImZlYXR1cmVfZ2F0ZXNcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJmZWF0dXJlX2dhdGVzXCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRpZiAoIShcInVybFwiIGluIHZhbHVlKSB8fCB2YWx1ZVtcInVybFwiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0ZnVuY3Rpb24gVXJsUmVzb2x2aW5nUmVxdWVzdEZyb21KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gVXJsUmVzb2x2aW5nUmVxdWVzdEZyb21KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIFVybFJlc29sdmluZ1JlcXVlc3RGcm9tSlNPTlR5cGVkKGpzb24sIGlnbm9yZURpc2NyaW1pbmF0b3IpIHtcblx0XHRpZiAoanNvbiA9PSBudWxsKSByZXR1cm4ganNvbjtcblx0XHRyZXR1cm4ge1xuXHRcdFx0XCJjb250ZXh0XCI6ICgwLCBDb250ZXh0XzEuQ29udGV4dEZyb21KU09OKShqc29uW1wiY29udGV4dFwiXSksXG5cdFx0XHRcImZlYXR1cmVfZ2F0ZXNcIjoganNvbltcImZlYXR1cmVfZ2F0ZXNcIl0sXG5cdFx0XHRcInVybFwiOiBqc29uW1widXJsXCJdXG5cdFx0fTtcblx0fVxuXHRmdW5jdGlvbiBVcmxSZXNvbHZpbmdSZXF1ZXN0VG9KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gVXJsUmVzb2x2aW5nUmVxdWVzdFRvSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBVcmxSZXNvbHZpbmdSZXF1ZXN0VG9KU09OVHlwZWQodmFsdWUsIGlnbm9yZURpc2NyaW1pbmF0b3IgPSBmYWxzZSkge1xuXHRcdGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gdmFsdWU7XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwiY29udGV4dFwiOiAoMCwgQ29udGV4dF8xLkNvbnRleHRUb0pTT04pKHZhbHVlW1wiY29udGV4dFwiXSksXG5cdFx0XHRcImZlYXR1cmVfZ2F0ZXNcIjogdmFsdWVbXCJmZWF0dXJlX2dhdGVzXCJdLFxuXHRcdFx0XCJ1cmxcIjogdmFsdWVbXCJ1cmxcIl1cblx0XHR9O1xuXHR9XG59KSB9KTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9VcmxSZXNvbHZpbmdSZXNwb25zZVNwZWNpZmljRGV0YWlscy5qc1xudmFyIHJlcXVpcmVfVXJsUmVzb2x2aW5nUmVzcG9uc2VTcGVjaWZpY0RldGFpbHMgPSAvKiBAX19QVVJFX18gKi8gX19jb21tb25KUyh7IFwiLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9VcmxSZXNvbHZpbmdSZXNwb25zZVNwZWNpZmljRGV0YWlscy5qc1wiOiAoKGV4cG9ydHMpID0+IHtcblx0LyoqXG5cdCogQ29tbWVyY2Vcblx0KiBObyBkZXNjcmlwdGlvbiBwcm92aWRlZCAoZ2VuZXJhdGVkIGJ5IE9wZW5hcGkgR2VuZXJhdG9yIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuYXBpdG9vbHMvb3BlbmFwaS1nZW5lcmF0b3IpXG5cdCpcblx0KiBUaGUgdmVyc2lvbiBvZiB0aGUgT3BlbkFQSSBkb2N1bWVudDogMS4xLjBcblx0KlxuXHQqXG5cdCogTk9URTogVGhpcyBjbGFzcyBpcyBhdXRvIGdlbmVyYXRlZCBieSBPcGVuQVBJIEdlbmVyYXRvciAoaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoKS5cblx0KiBodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2hcblx0KiBEbyBub3QgZWRpdCB0aGUgY2xhc3MgbWFudWFsbHkuXG5cdCovXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcblx0ZXhwb3J0cy5VcmxSZXNvbHZpbmdSZXNwb25zZVNwZWNpZmljRGV0YWlsc0Zyb21KU09OID0gVXJsUmVzb2x2aW5nUmVzcG9uc2VTcGVjaWZpY0RldGFpbHNGcm9tSlNPTjtcblx0ZXhwb3J0cy5VcmxSZXNvbHZpbmdSZXNwb25zZVNwZWNpZmljRGV0YWlsc0Zyb21KU09OVHlwZWQgPSBVcmxSZXNvbHZpbmdSZXNwb25zZVNwZWNpZmljRGV0YWlsc0Zyb21KU09OVHlwZWQ7XG5cdGV4cG9ydHMuVXJsUmVzb2x2aW5nUmVzcG9uc2VTcGVjaWZpY0RldGFpbHNUb0pTT04gPSBVcmxSZXNvbHZpbmdSZXNwb25zZVNwZWNpZmljRGV0YWlsc1RvSlNPTjtcblx0ZXhwb3J0cy5VcmxSZXNvbHZpbmdSZXNwb25zZVNwZWNpZmljRGV0YWlsc1RvSlNPTlR5cGVkID0gVXJsUmVzb2x2aW5nUmVzcG9uc2VTcGVjaWZpY0RldGFpbHNUb0pTT05UeXBlZDtcblx0Y29uc3QgVXJsUmVzb2x2aW5nR2VuZXJpY0NvbmZpZ18xID0gcmVxdWlyZV9VcmxSZXNvbHZpbmdHZW5lcmljQ29uZmlnKCk7XG5cdGNvbnN0IFVybFJlc29sdmluZ1BEUENvbmZpZ18xID0gcmVxdWlyZV9VcmxSZXNvbHZpbmdQRFBDb25maWcoKTtcblx0Y29uc3QgVXJsUmVzb2x2aW5nUExQQ29uZmlnXzEgPSByZXF1aXJlX1VybFJlc29sdmluZ1BMUENvbmZpZygpO1xuXHRmdW5jdGlvbiBVcmxSZXNvbHZpbmdSZXNwb25zZVNwZWNpZmljRGV0YWlsc0Zyb21KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gVXJsUmVzb2x2aW5nUmVzcG9uc2VTcGVjaWZpY0RldGFpbHNGcm9tSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBVcmxSZXNvbHZpbmdSZXNwb25zZVNwZWNpZmljRGV0YWlsc0Zyb21KU09OVHlwZWQoanNvbiwgaWdub3JlRGlzY3JpbWluYXRvcikge1xuXHRcdGlmIChqc29uID09IG51bGwpIHJldHVybiBqc29uO1xuXHRcdGlmICgoMCwgVXJsUmVzb2x2aW5nR2VuZXJpY0NvbmZpZ18xLmluc3RhbmNlT2ZVcmxSZXNvbHZpbmdHZW5lcmljQ29uZmlnKShqc29uKSkgcmV0dXJuICgwLCBVcmxSZXNvbHZpbmdHZW5lcmljQ29uZmlnXzEuVXJsUmVzb2x2aW5nR2VuZXJpY0NvbmZpZ0Zyb21KU09OVHlwZWQpKGpzb24sIHRydWUpO1xuXHRcdGlmICgoMCwgVXJsUmVzb2x2aW5nUERQQ29uZmlnXzEuaW5zdGFuY2VPZlVybFJlc29sdmluZ1BEUENvbmZpZykoanNvbikpIHJldHVybiAoMCwgVXJsUmVzb2x2aW5nUERQQ29uZmlnXzEuVXJsUmVzb2x2aW5nUERQQ29uZmlnRnJvbUpTT05UeXBlZCkoanNvbiwgdHJ1ZSk7XG5cdFx0aWYgKCgwLCBVcmxSZXNvbHZpbmdQTFBDb25maWdfMS5pbnN0YW5jZU9mVXJsUmVzb2x2aW5nUExQQ29uZmlnKShqc29uKSkgcmV0dXJuICgwLCBVcmxSZXNvbHZpbmdQTFBDb25maWdfMS5VcmxSZXNvbHZpbmdQTFBDb25maWdGcm9tSlNPTlR5cGVkKShqc29uLCB0cnVlKTtcblx0XHRyZXR1cm4ge307XG5cdH1cblx0ZnVuY3Rpb24gVXJsUmVzb2x2aW5nUmVzcG9uc2VTcGVjaWZpY0RldGFpbHNUb0pTT04oanNvbikge1xuXHRcdHJldHVybiBVcmxSZXNvbHZpbmdSZXNwb25zZVNwZWNpZmljRGV0YWlsc1RvSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBVcmxSZXNvbHZpbmdSZXNwb25zZVNwZWNpZmljRGV0YWlsc1RvSlNPTlR5cGVkKHZhbHVlLCBpZ25vcmVEaXNjcmltaW5hdG9yID0gZmFsc2UpIHtcblx0XHRpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIHZhbHVlO1xuXHRcdGlmICgoMCwgVXJsUmVzb2x2aW5nR2VuZXJpY0NvbmZpZ18xLmluc3RhbmNlT2ZVcmxSZXNvbHZpbmdHZW5lcmljQ29uZmlnKSh2YWx1ZSkpIHJldHVybiAoMCwgVXJsUmVzb2x2aW5nR2VuZXJpY0NvbmZpZ18xLlVybFJlc29sdmluZ0dlbmVyaWNDb25maWdUb0pTT04pKHZhbHVlKTtcblx0XHRpZiAoKDAsIFVybFJlc29sdmluZ1BEUENvbmZpZ18xLmluc3RhbmNlT2ZVcmxSZXNvbHZpbmdQRFBDb25maWcpKHZhbHVlKSkgcmV0dXJuICgwLCBVcmxSZXNvbHZpbmdQRFBDb25maWdfMS5VcmxSZXNvbHZpbmdQRFBDb25maWdUb0pTT04pKHZhbHVlKTtcblx0XHRpZiAoKDAsIFVybFJlc29sdmluZ1BMUENvbmZpZ18xLmluc3RhbmNlT2ZVcmxSZXNvbHZpbmdQTFBDb25maWcpKHZhbHVlKSkgcmV0dXJuICgwLCBVcmxSZXNvbHZpbmdQTFBDb25maWdfMS5VcmxSZXNvbHZpbmdQTFBDb25maWdUb0pTT04pKHZhbHVlKTtcblx0XHRyZXR1cm4ge307XG5cdH1cbn0pIH0pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiAuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL1VybFJlc29sdmluZ1R5cGUuanNcbnZhciByZXF1aXJlX1VybFJlc29sdmluZ1R5cGUgPSAvKiBAX19QVVJFX18gKi8gX19jb21tb25KUyh7IFwiLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9VcmxSZXNvbHZpbmdUeXBlLmpzXCI6ICgoZXhwb3J0cykgPT4ge1xuXHQvKipcblx0KiBDb21tZXJjZVxuXHQqIE5vIGRlc2NyaXB0aW9uIHByb3ZpZGVkIChnZW5lcmF0ZWQgYnkgT3BlbmFwaSBHZW5lcmF0b3IgaHR0cHM6Ly9naXRodWIuY29tL29wZW5hcGl0b29scy9vcGVuYXBpLWdlbmVyYXRvcilcblx0KlxuXHQqIFRoZSB2ZXJzaW9uIG9mIHRoZSBPcGVuQVBJIGRvY3VtZW50OiAxLjEuMFxuXHQqXG5cdCpcblx0KiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IE9wZW5BUEkgR2VuZXJhdG9yIChodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2gpLlxuXHQqIGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaFxuXHQqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cblx0Ki9cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuXHRleHBvcnRzLlVybFJlc29sdmluZ1R5cGUgPSB2b2lkIDA7XG5cdGV4cG9ydHMuaW5zdGFuY2VPZlVybFJlc29sdmluZ1R5cGUgPSBpbnN0YW5jZU9mVXJsUmVzb2x2aW5nVHlwZTtcblx0ZXhwb3J0cy5VcmxSZXNvbHZpbmdUeXBlRnJvbUpTT04gPSBVcmxSZXNvbHZpbmdUeXBlRnJvbUpTT047XG5cdGV4cG9ydHMuVXJsUmVzb2x2aW5nVHlwZUZyb21KU09OVHlwZWQgPSBVcmxSZXNvbHZpbmdUeXBlRnJvbUpTT05UeXBlZDtcblx0ZXhwb3J0cy5VcmxSZXNvbHZpbmdUeXBlVG9KU09OID0gVXJsUmVzb2x2aW5nVHlwZVRvSlNPTjtcblx0ZXhwb3J0cy5VcmxSZXNvbHZpbmdUeXBlVG9KU09OVHlwZWQgPSBVcmxSZXNvbHZpbmdUeXBlVG9KU09OVHlwZWQ7XG5cdC8qKlxuXHQqIFR5cGUgb2YgcGFnZSB2YXJpYW50XG5cdCogQGV4cG9ydFxuXHQqIEBlbnVtIHtzdHJpbmd9XG5cdCovXG5cdHZhciBVcmxSZXNvbHZpbmdUeXBlO1xuXHQoZnVuY3Rpb24oVXJsUmVzb2x2aW5nVHlwZSQxKSB7XG5cdFx0VXJsUmVzb2x2aW5nVHlwZSQxW1wiUGRwXCJdID0gXCJwZHBcIjtcblx0XHRVcmxSZXNvbHZpbmdUeXBlJDFbXCJQbHBcIl0gPSBcInBscFwiO1xuXHRcdFVybFJlc29sdmluZ1R5cGUkMVtcIlNlYXJjaFwiXSA9IFwic2VhcmNoXCI7XG5cdFx0VXJsUmVzb2x2aW5nVHlwZSQxW1wiT3RoZXJcIl0gPSBcIm90aGVyXCI7XG5cdFx0VXJsUmVzb2x2aW5nVHlwZSQxW1wiSG9tZXBhZ2VcIl0gPSBcImhvbWVwYWdlXCI7XG5cdFx0VXJsUmVzb2x2aW5nVHlwZSQxW1wiUGFnZVwiXSA9IFwicGFnZVwiO1xuXHRcdFVybFJlc29sdmluZ1R5cGUkMVtcIlVuc3VwcG9ydGVkXCJdID0gXCJ1bnN1cHBvcnRlZFwiO1xuXHR9KShVcmxSZXNvbHZpbmdUeXBlIHx8IChleHBvcnRzLlVybFJlc29sdmluZ1R5cGUgPSBVcmxSZXNvbHZpbmdUeXBlID0ge30pKTtcblx0ZnVuY3Rpb24gaW5zdGFuY2VPZlVybFJlc29sdmluZ1R5cGUodmFsdWUpIHtcblx0XHRmb3IgKGNvbnN0IGtleSBpbiBVcmxSZXNvbHZpbmdUeXBlKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFVybFJlc29sdmluZ1R5cGUsIGtleSkpIHtcblx0XHRcdGlmIChVcmxSZXNvbHZpbmdUeXBlW2tleV0gPT09IHZhbHVlKSByZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGZ1bmN0aW9uIFVybFJlc29sdmluZ1R5cGVGcm9tSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIFVybFJlc29sdmluZ1R5cGVGcm9tSlNPTlR5cGVkKGpzb24sIGZhbHNlKTtcblx0fVxuXHRmdW5jdGlvbiBVcmxSZXNvbHZpbmdUeXBlRnJvbUpTT05UeXBlZChqc29uLCBpZ25vcmVEaXNjcmltaW5hdG9yKSB7XG5cdFx0cmV0dXJuIGpzb247XG5cdH1cblx0ZnVuY3Rpb24gVXJsUmVzb2x2aW5nVHlwZVRvSlNPTih2YWx1ZSkge1xuXHRcdHJldHVybiB2YWx1ZTtcblx0fVxuXHRmdW5jdGlvbiBVcmxSZXNvbHZpbmdUeXBlVG9KU09OVHlwZWQodmFsdWUsIGlnbm9yZURpc2NyaW1pbmF0b3IpIHtcblx0XHRyZXR1cm4gdmFsdWU7XG5cdH1cbn0pIH0pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiAuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL1VybFJlc29sdmluZ1Jlc3BvbnNlLmpzXG52YXIgcmVxdWlyZV9VcmxSZXNvbHZpbmdSZXNwb25zZSA9IC8qIEBfX1BVUkVfXyAqLyBfX2NvbW1vbkpTKHsgXCIuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL1VybFJlc29sdmluZ1Jlc3BvbnNlLmpzXCI6ICgoZXhwb3J0cykgPT4ge1xuXHQvKipcblx0KiBDb21tZXJjZVxuXHQqIE5vIGRlc2NyaXB0aW9uIHByb3ZpZGVkIChnZW5lcmF0ZWQgYnkgT3BlbmFwaSBHZW5lcmF0b3IgaHR0cHM6Ly9naXRodWIuY29tL29wZW5hcGl0b29scy9vcGVuYXBpLWdlbmVyYXRvcilcblx0KlxuXHQqIFRoZSB2ZXJzaW9uIG9mIHRoZSBPcGVuQVBJIGRvY3VtZW50OiAxLjEuMFxuXHQqXG5cdCpcblx0KiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IE9wZW5BUEkgR2VuZXJhdG9yIChodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2gpLlxuXHQqIGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaFxuXHQqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cblx0Ki9cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuXHRleHBvcnRzLmluc3RhbmNlT2ZVcmxSZXNvbHZpbmdSZXNwb25zZSA9IGluc3RhbmNlT2ZVcmxSZXNvbHZpbmdSZXNwb25zZTtcblx0ZXhwb3J0cy5VcmxSZXNvbHZpbmdSZXNwb25zZUZyb21KU09OID0gVXJsUmVzb2x2aW5nUmVzcG9uc2VGcm9tSlNPTjtcblx0ZXhwb3J0cy5VcmxSZXNvbHZpbmdSZXNwb25zZUZyb21KU09OVHlwZWQgPSBVcmxSZXNvbHZpbmdSZXNwb25zZUZyb21KU09OVHlwZWQ7XG5cdGV4cG9ydHMuVXJsUmVzb2x2aW5nUmVzcG9uc2VUb0pTT04gPSBVcmxSZXNvbHZpbmdSZXNwb25zZVRvSlNPTjtcblx0ZXhwb3J0cy5VcmxSZXNvbHZpbmdSZXNwb25zZVRvSlNPTlR5cGVkID0gVXJsUmVzb2x2aW5nUmVzcG9uc2VUb0pTT05UeXBlZDtcblx0Y29uc3QgVXJsUmVzb2x2aW5nUmVzcG9uc2VTcGVjaWZpY0RldGFpbHNfMSA9IHJlcXVpcmVfVXJsUmVzb2x2aW5nUmVzcG9uc2VTcGVjaWZpY0RldGFpbHMoKTtcblx0Y29uc3QgVXJsUmVzb2x2aW5nVHlwZV8xID0gcmVxdWlyZV9VcmxSZXNvbHZpbmdUeXBlKCk7XG5cdGNvbnN0IFVzZXJFdmVudF8xJDEgPSByZXF1aXJlX1VzZXJFdmVudCgpO1xuXHQvKipcblx0KiBDaGVjayBpZiBhIGdpdmVuIG9iamVjdCBpbXBsZW1lbnRzIHRoZSBVcmxSZXNvbHZpbmdSZXNwb25zZSBpbnRlcmZhY2UuXG5cdCovXG5cdGZ1bmN0aW9uIGluc3RhbmNlT2ZVcmxSZXNvbHZpbmdSZXNwb25zZSh2YWx1ZSkge1xuXHRcdGlmICghKFwicmVhZHlcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJyZWFkeVwiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0aWYgKCEoXCJzcGVjaWZpY19kZXRhaWxzXCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wic3BlY2lmaWNfZGV0YWlsc1wiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0aWYgKCEoXCJ2YXJpYW50X3R5cGVcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJ2YXJpYW50X3R5cGVcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdGZ1bmN0aW9uIFVybFJlc29sdmluZ1Jlc3BvbnNlRnJvbUpTT04oanNvbikge1xuXHRcdHJldHVybiBVcmxSZXNvbHZpbmdSZXNwb25zZUZyb21KU09OVHlwZWQoanNvbiwgZmFsc2UpO1xuXHR9XG5cdGZ1bmN0aW9uIFVybFJlc29sdmluZ1Jlc3BvbnNlRnJvbUpTT05UeXBlZChqc29uLCBpZ25vcmVEaXNjcmltaW5hdG9yKSB7XG5cdFx0aWYgKGpzb24gPT0gbnVsbCkgcmV0dXJuIGpzb247XG5cdFx0cmV0dXJuIHtcblx0XHRcdFwicGFnZV92YXJpYW50XCI6IGpzb25bXCJwYWdlX3ZhcmlhbnRcIl0gPT0gbnVsbCA/IHZvaWQgMCA6IGpzb25bXCJwYWdlX3ZhcmlhbnRcIl0sXG5cdFx0XHRcInJlYWR5XCI6IGpzb25bXCJyZWFkeVwiXSxcblx0XHRcdFwic3BlY2lmaWNfZGV0YWlsc1wiOiAoMCwgVXJsUmVzb2x2aW5nUmVzcG9uc2VTcGVjaWZpY0RldGFpbHNfMS5VcmxSZXNvbHZpbmdSZXNwb25zZVNwZWNpZmljRGV0YWlsc0Zyb21KU09OKShqc29uW1wic3BlY2lmaWNfZGV0YWlsc1wiXSksXG5cdFx0XHRcInVzZXJfZXZlbnRcIjoganNvbltcInVzZXJfZXZlbnRcIl0gPT0gbnVsbCA/IHZvaWQgMCA6ICgwLCBVc2VyRXZlbnRfMSQxLlVzZXJFdmVudEZyb21KU09OKShqc29uW1widXNlcl9ldmVudFwiXSksXG5cdFx0XHRcInZhcmlhbnRfdHlwZVwiOiAoMCwgVXJsUmVzb2x2aW5nVHlwZV8xLlVybFJlc29sdmluZ1R5cGVGcm9tSlNPTikoanNvbltcInZhcmlhbnRfdHlwZVwiXSlcblx0XHR9O1xuXHR9XG5cdGZ1bmN0aW9uIFVybFJlc29sdmluZ1Jlc3BvbnNlVG9KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gVXJsUmVzb2x2aW5nUmVzcG9uc2VUb0pTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gVXJsUmVzb2x2aW5nUmVzcG9uc2VUb0pTT05UeXBlZCh2YWx1ZSwgaWdub3JlRGlzY3JpbWluYXRvciA9IGZhbHNlKSB7XG5cdFx0aWYgKHZhbHVlID09IG51bGwpIHJldHVybiB2YWx1ZTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0XCJwYWdlX3ZhcmlhbnRcIjogdmFsdWVbXCJwYWdlX3ZhcmlhbnRcIl0sXG5cdFx0XHRcInJlYWR5XCI6IHZhbHVlW1wicmVhZHlcIl0sXG5cdFx0XHRcInNwZWNpZmljX2RldGFpbHNcIjogKDAsIFVybFJlc29sdmluZ1Jlc3BvbnNlU3BlY2lmaWNEZXRhaWxzXzEuVXJsUmVzb2x2aW5nUmVzcG9uc2VTcGVjaWZpY0RldGFpbHNUb0pTT04pKHZhbHVlW1wic3BlY2lmaWNfZGV0YWlsc1wiXSksXG5cdFx0XHRcInVzZXJfZXZlbnRcIjogKDAsIFVzZXJFdmVudF8xJDEuVXNlckV2ZW50VG9KU09OKSh2YWx1ZVtcInVzZXJfZXZlbnRcIl0pLFxuXHRcdFx0XCJ2YXJpYW50X3R5cGVcIjogKDAsIFVybFJlc29sdmluZ1R5cGVfMS5VcmxSZXNvbHZpbmdUeXBlVG9KU09OKSh2YWx1ZVtcInZhcmlhbnRfdHlwZVwiXSlcblx0XHR9O1xuXHR9XG59KSB9KTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9WMUdldFNlc3Npb25NZXNzYWdlczIwMFJlc3BvbnNlLmpzXG52YXIgcmVxdWlyZV9WMUdldFNlc3Npb25NZXNzYWdlczIwMFJlc3BvbnNlID0gLyogQF9fUFVSRV9fICovIF9fY29tbW9uSlMoeyBcIi4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvVjFHZXRTZXNzaW9uTWVzc2FnZXMyMDBSZXNwb25zZS5qc1wiOiAoKGV4cG9ydHMpID0+IHtcblx0LyoqXG5cdCogQ29tbWVyY2Vcblx0KiBObyBkZXNjcmlwdGlvbiBwcm92aWRlZCAoZ2VuZXJhdGVkIGJ5IE9wZW5hcGkgR2VuZXJhdG9yIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuYXBpdG9vbHMvb3BlbmFwaS1nZW5lcmF0b3IpXG5cdCpcblx0KiBUaGUgdmVyc2lvbiBvZiB0aGUgT3BlbkFQSSBkb2N1bWVudDogMS4xLjBcblx0KlxuXHQqXG5cdCogTk9URTogVGhpcyBjbGFzcyBpcyBhdXRvIGdlbmVyYXRlZCBieSBPcGVuQVBJIEdlbmVyYXRvciAoaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoKS5cblx0KiBodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2hcblx0KiBEbyBub3QgZWRpdCB0aGUgY2xhc3MgbWFudWFsbHkuXG5cdCovXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcblx0ZXhwb3J0cy5pbnN0YW5jZU9mVjFHZXRTZXNzaW9uTWVzc2FnZXMyMDBSZXNwb25zZSA9IGluc3RhbmNlT2ZWMUdldFNlc3Npb25NZXNzYWdlczIwMFJlc3BvbnNlO1xuXHRleHBvcnRzLlYxR2V0U2Vzc2lvbk1lc3NhZ2VzMjAwUmVzcG9uc2VGcm9tSlNPTiA9IFYxR2V0U2Vzc2lvbk1lc3NhZ2VzMjAwUmVzcG9uc2VGcm9tSlNPTjtcblx0ZXhwb3J0cy5WMUdldFNlc3Npb25NZXNzYWdlczIwMFJlc3BvbnNlRnJvbUpTT05UeXBlZCA9IFYxR2V0U2Vzc2lvbk1lc3NhZ2VzMjAwUmVzcG9uc2VGcm9tSlNPTlR5cGVkO1xuXHRleHBvcnRzLlYxR2V0U2Vzc2lvbk1lc3NhZ2VzMjAwUmVzcG9uc2VUb0pTT04gPSBWMUdldFNlc3Npb25NZXNzYWdlczIwMFJlc3BvbnNlVG9KU09OO1xuXHRleHBvcnRzLlYxR2V0U2Vzc2lvbk1lc3NhZ2VzMjAwUmVzcG9uc2VUb0pTT05UeXBlZCA9IFYxR2V0U2Vzc2lvbk1lc3NhZ2VzMjAwUmVzcG9uc2VUb0pTT05UeXBlZDtcblx0Y29uc3QgU3VnZ2VzdGlvbl8xID0gcmVxdWlyZV9TdWdnZXN0aW9uKCk7XG5cdGNvbnN0IFVzZXJFdmVudF8xID0gcmVxdWlyZV9Vc2VyRXZlbnQoKTtcblx0LyoqXG5cdCogQ2hlY2sgaWYgYSBnaXZlbiBvYmplY3QgaW1wbGVtZW50cyB0aGUgVjFHZXRTZXNzaW9uTWVzc2FnZXMyMDBSZXNwb25zZSBpbnRlcmZhY2UuXG5cdCovXG5cdGZ1bmN0aW9uIGluc3RhbmNlT2ZWMUdldFNlc3Npb25NZXNzYWdlczIwMFJlc3BvbnNlKHZhbHVlKSB7XG5cdFx0aWYgKCEoXCJyZXNwb25zZXNcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJyZXNwb25zZXNcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdGlmICghKFwic3VnZ2VzdGlvbnNcIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJzdWdnZXN0aW9uc1wiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0aWYgKCEoXCJ1c2VyX2V2ZW50c1wiIGluIHZhbHVlKSB8fCB2YWx1ZVtcInVzZXJfZXZlbnRzXCJdID09PSB2b2lkIDApIHJldHVybiBmYWxzZTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHRmdW5jdGlvbiBWMUdldFNlc3Npb25NZXNzYWdlczIwMFJlc3BvbnNlRnJvbUpTT04oanNvbikge1xuXHRcdHJldHVybiBWMUdldFNlc3Npb25NZXNzYWdlczIwMFJlc3BvbnNlRnJvbUpTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gVjFHZXRTZXNzaW9uTWVzc2FnZXMyMDBSZXNwb25zZUZyb21KU09OVHlwZWQoanNvbiwgaWdub3JlRGlzY3JpbWluYXRvcikge1xuXHRcdGlmIChqc29uID09IG51bGwpIHJldHVybiBqc29uO1xuXHRcdHJldHVybiB7XG5cdFx0XHRcInJlc3BvbnNlc1wiOiBqc29uW1wicmVzcG9uc2VzXCJdLFxuXHRcdFx0XCJzdWdnZXN0aW9uc1wiOiBqc29uW1wic3VnZ2VzdGlvbnNcIl0ubWFwKFN1Z2dlc3Rpb25fMS5TdWdnZXN0aW9uRnJvbUpTT04pLFxuXHRcdFx0XCJ1c2VyX2V2ZW50c1wiOiBqc29uW1widXNlcl9ldmVudHNcIl0ubWFwKFVzZXJFdmVudF8xLlVzZXJFdmVudEZyb21KU09OKVxuXHRcdH07XG5cdH1cblx0ZnVuY3Rpb24gVjFHZXRTZXNzaW9uTWVzc2FnZXMyMDBSZXNwb25zZVRvSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIFYxR2V0U2Vzc2lvbk1lc3NhZ2VzMjAwUmVzcG9uc2VUb0pTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gVjFHZXRTZXNzaW9uTWVzc2FnZXMyMDBSZXNwb25zZVRvSlNPTlR5cGVkKHZhbHVlLCBpZ25vcmVEaXNjcmltaW5hdG9yID0gZmFsc2UpIHtcblx0XHRpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIHZhbHVlO1xuXHRcdHJldHVybiB7XG5cdFx0XHRcInJlc3BvbnNlc1wiOiB2YWx1ZVtcInJlc3BvbnNlc1wiXSxcblx0XHRcdFwic3VnZ2VzdGlvbnNcIjogdmFsdWVbXCJzdWdnZXN0aW9uc1wiXS5tYXAoU3VnZ2VzdGlvbl8xLlN1Z2dlc3Rpb25Ub0pTT04pLFxuXHRcdFx0XCJ1c2VyX2V2ZW50c1wiOiB2YWx1ZVtcInVzZXJfZXZlbnRzXCJdLm1hcChVc2VyRXZlbnRfMS5Vc2VyRXZlbnRUb0pTT04pXG5cdFx0fTtcblx0fVxufSkgfSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIC4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvVjFTZWFyY2hFeHBsYWluR2V0MjAwUmVzcG9uc2UuanNcbnZhciByZXF1aXJlX1YxU2VhcmNoRXhwbGFpbkdldDIwMFJlc3BvbnNlID0gLyogQF9fUFVSRV9fICovIF9fY29tbW9uSlMoeyBcIi4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvVjFTZWFyY2hFeHBsYWluR2V0MjAwUmVzcG9uc2UuanNcIjogKChleHBvcnRzKSA9PiB7XG5cdC8qKlxuXHQqIENvbW1lcmNlXG5cdCogTm8gZGVzY3JpcHRpb24gcHJvdmlkZWQgKGdlbmVyYXRlZCBieSBPcGVuYXBpIEdlbmVyYXRvciBodHRwczovL2dpdGh1Yi5jb20vb3BlbmFwaXRvb2xzL29wZW5hcGktZ2VuZXJhdG9yKVxuXHQqXG5cdCogVGhlIHZlcnNpb24gb2YgdGhlIE9wZW5BUEkgZG9jdW1lbnQ6IDEuMS4wXG5cdCpcblx0KlxuXHQqIE5PVEU6IFRoaXMgY2xhc3MgaXMgYXV0byBnZW5lcmF0ZWQgYnkgT3BlbkFQSSBHZW5lcmF0b3IgKGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaCkuXG5cdCogaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoXG5cdCogRG8gbm90IGVkaXQgdGhlIGNsYXNzIG1hbnVhbGx5LlxuXHQqL1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5cdGV4cG9ydHMuaW5zdGFuY2VPZlYxU2VhcmNoRXhwbGFpbkdldDIwMFJlc3BvbnNlID0gaW5zdGFuY2VPZlYxU2VhcmNoRXhwbGFpbkdldDIwMFJlc3BvbnNlO1xuXHRleHBvcnRzLlYxU2VhcmNoRXhwbGFpbkdldDIwMFJlc3BvbnNlRnJvbUpTT04gPSBWMVNlYXJjaEV4cGxhaW5HZXQyMDBSZXNwb25zZUZyb21KU09OO1xuXHRleHBvcnRzLlYxU2VhcmNoRXhwbGFpbkdldDIwMFJlc3BvbnNlRnJvbUpTT05UeXBlZCA9IFYxU2VhcmNoRXhwbGFpbkdldDIwMFJlc3BvbnNlRnJvbUpTT05UeXBlZDtcblx0ZXhwb3J0cy5WMVNlYXJjaEV4cGxhaW5HZXQyMDBSZXNwb25zZVRvSlNPTiA9IFYxU2VhcmNoRXhwbGFpbkdldDIwMFJlc3BvbnNlVG9KU09OO1xuXHRleHBvcnRzLlYxU2VhcmNoRXhwbGFpbkdldDIwMFJlc3BvbnNlVG9KU09OVHlwZWQgPSBWMVNlYXJjaEV4cGxhaW5HZXQyMDBSZXNwb25zZVRvSlNPTlR5cGVkO1xuXHQvKipcblx0KiBDaGVjayBpZiBhIGdpdmVuIG9iamVjdCBpbXBsZW1lbnRzIHRoZSBWMVNlYXJjaEV4cGxhaW5HZXQyMDBSZXNwb25zZSBpbnRlcmZhY2UuXG5cdCovXG5cdGZ1bmN0aW9uIGluc3RhbmNlT2ZWMVNlYXJjaEV4cGxhaW5HZXQyMDBSZXNwb25zZSh2YWx1ZSkge1xuXHRcdGlmICghKFwiY2hhdF9pZFwiIGluIHZhbHVlKSB8fCB2YWx1ZVtcImNoYXRfaWRcIl0gPT09IHZvaWQgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdGlmICghKFwiZXhwbGFuYXRpb25cIiBpbiB2YWx1ZSkgfHwgdmFsdWVbXCJleHBsYW5hdGlvblwiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0aWYgKCEoXCJwcm9kdWN0X2lkXCIgaW4gdmFsdWUpIHx8IHZhbHVlW1wicHJvZHVjdF9pZFwiXSA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0ZnVuY3Rpb24gVjFTZWFyY2hFeHBsYWluR2V0MjAwUmVzcG9uc2VGcm9tSlNPTihqc29uKSB7XG5cdFx0cmV0dXJuIFYxU2VhcmNoRXhwbGFpbkdldDIwMFJlc3BvbnNlRnJvbUpTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gVjFTZWFyY2hFeHBsYWluR2V0MjAwUmVzcG9uc2VGcm9tSlNPTlR5cGVkKGpzb24sIGlnbm9yZURpc2NyaW1pbmF0b3IpIHtcblx0XHRpZiAoanNvbiA9PSBudWxsKSByZXR1cm4ganNvbjtcblx0XHRyZXR1cm4ge1xuXHRcdFx0XCJjaGF0X2lkXCI6IGpzb25bXCJjaGF0X2lkXCJdLFxuXHRcdFx0XCJleHBsYW5hdGlvblwiOiBqc29uW1wiZXhwbGFuYXRpb25cIl0sXG5cdFx0XHRcInByb2R1Y3RfaWRcIjoganNvbltcInByb2R1Y3RfaWRcIl1cblx0XHR9O1xuXHR9XG5cdGZ1bmN0aW9uIFYxU2VhcmNoRXhwbGFpbkdldDIwMFJlc3BvbnNlVG9KU09OKGpzb24pIHtcblx0XHRyZXR1cm4gVjFTZWFyY2hFeHBsYWluR2V0MjAwUmVzcG9uc2VUb0pTT05UeXBlZChqc29uLCBmYWxzZSk7XG5cdH1cblx0ZnVuY3Rpb24gVjFTZWFyY2hFeHBsYWluR2V0MjAwUmVzcG9uc2VUb0pTT05UeXBlZCh2YWx1ZSwgaWdub3JlRGlzY3JpbWluYXRvciA9IGZhbHNlKSB7XG5cdFx0aWYgKHZhbHVlID09IG51bGwpIHJldHVybiB2YWx1ZTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0XCJjaGF0X2lkXCI6IHZhbHVlW1wiY2hhdF9pZFwiXSxcblx0XHRcdFwiZXhwbGFuYXRpb25cIjogdmFsdWVbXCJleHBsYW5hdGlvblwiXSxcblx0XHRcdFwicHJvZHVjdF9pZFwiOiB2YWx1ZVtcInByb2R1Y3RfaWRcIl1cblx0XHR9O1xuXHR9XG59KSB9KTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9pbmRleC5qc1xudmFyIHJlcXVpcmVfbW9kZWxzID0gLyogQF9fUFVSRV9fICovIF9fY29tbW9uSlMoeyBcIi4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvaW5kZXguanNcIjogKChleHBvcnRzKSA9PiB7XG5cdHZhciBfX2NyZWF0ZUJpbmRpbmckMiA9IGV4cG9ydHMgJiYgZXhwb3J0cy5fX2NyZWF0ZUJpbmRpbmcgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcblx0XHRpZiAoazIgPT09IHZvaWQgMCkgazIgPSBrO1xuXHRcdHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcblx0XHRpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkgZGVzYyA9IHtcblx0XHRcdGVudW1lcmFibGU6IHRydWUsXG5cdFx0XHRnZXQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRyZXR1cm4gbVtrXTtcblx0XHRcdH1cblx0XHR9O1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgZGVzYyk7XG5cdH0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG5cdFx0aWYgKGsyID09PSB2b2lkIDApIGsyID0gaztcblx0XHRvW2syXSA9IG1ba107XG5cdH0pKTtcblx0dmFyIF9fZXhwb3J0U3RhciQyID0gZXhwb3J0cyAmJiBleHBvcnRzLl9fZXhwb3J0U3RhciB8fCBmdW5jdGlvbihtLCBleHBvcnRzJDEpIHtcblx0XHRmb3IgKHZhciBwIGluIG0pIGlmIChwICE9PSBcImRlZmF1bHRcIiAmJiAhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGV4cG9ydHMkMSwgcCkpIF9fY3JlYXRlQmluZGluZyQyKGV4cG9ydHMkMSwgbSwgcCk7XG5cdH07XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcblx0X19leHBvcnRTdGFyJDIocmVxdWlyZV9BZGROb3RlVG9MYXRlc3RDb252ZXJzYXRpb25SZXF1ZXN0KCksIGV4cG9ydHMpO1xuXHRfX2V4cG9ydFN0YXIkMihyZXF1aXJlX0FkZE5vdGVUb0xhdGVzdENvbnZlcnNhdGlvblJlc3BvbnNlKCksIGV4cG9ydHMpO1xuXHRfX2V4cG9ydFN0YXIkMihyZXF1aXJlX0FkZFRvQ2FydEF0dHJpYnV0ZXMoKSwgZXhwb3J0cyk7XG5cdF9fZXhwb3J0U3RhciQyKHJlcXVpcmVfQW5hbHl0aWNzSWRlbnRpZnlSZXF1ZXN0KCksIGV4cG9ydHMpO1xuXHRfX2V4cG9ydFN0YXIkMihyZXF1aXJlX0FuYWx5dGljc1RyYWNrRXZlbnRSZXF1ZXN0KCksIGV4cG9ydHMpO1xuXHRfX2V4cG9ydFN0YXIkMihyZXF1aXJlX0F0dGFjaG1lbnRSZXF1ZXN0KCksIGV4cG9ydHMpO1xuXHRfX2V4cG9ydFN0YXIkMihyZXF1aXJlX0F1dG9Gb3JtKCksIGV4cG9ydHMpO1xuXHRfX2V4cG9ydFN0YXIkMihyZXF1aXJlX0NvbnRleHQoKSwgZXhwb3J0cyk7XG5cdF9fZXhwb3J0U3RhciQyKHJlcXVpcmVfQ29udmVyc2F0aW9uU3RhdHVzKCksIGV4cG9ydHMpO1xuXHRfX2V4cG9ydFN0YXIkMihyZXF1aXJlX0NyZWF0ZUNvbnZlcnNhdGlvblJlcXVlc3QoKSwgZXhwb3J0cyk7XG5cdF9fZXhwb3J0U3RhciQyKHJlcXVpcmVfQ3JlYXRlQ29udmVyc2F0aW9uUmVzcG9uc2UoKSwgZXhwb3J0cyk7XG5cdF9fZXhwb3J0U3RhciQyKHJlcXVpcmVfQ3VzdFNlcnZpY2VBdHRhY2htZW50KCksIGV4cG9ydHMpO1xuXHRfX2V4cG9ydFN0YXIkMihyZXF1aXJlX0N1c3RTZXJ2aWNlQ29udmVyc2F0aW9uKCksIGV4cG9ydHMpO1xuXHRfX2V4cG9ydFN0YXIkMihyZXF1aXJlX0N1c3RTZXJ2aWNlQ29udmVyc2F0aW9uTWVzc2FnZXMoKSwgZXhwb3J0cyk7XG5cdF9fZXhwb3J0U3RhciQyKHJlcXVpcmVfQ3VzdFNlcnZpY2VDdXN0b21lcigpLCBleHBvcnRzKTtcblx0X19leHBvcnRTdGFyJDIocmVxdWlyZV9DdXN0U2VydmljZU1lc3NhZ2UoKSwgZXhwb3J0cyk7XG5cdF9fZXhwb3J0U3RhciQyKHJlcXVpcmVfQ3VzdG9tZXJTZXJ2aWNlUHJvdmlkZXIoKSwgZXhwb3J0cyk7XG5cdF9fZXhwb3J0U3RhciQyKHJlcXVpcmVfRm9ybVJlc3BvbnNlQXR0cmlidXRlcygpLCBleHBvcnRzKTtcblx0X19leHBvcnRTdGFyJDIocmVxdWlyZV9Gb3JtUmVzcG9uc2VBdHRyaWJ1dGVzRm9ybUNhdGVnb3J5KCksIGV4cG9ydHMpO1xuXHRfX2V4cG9ydFN0YXIkMihyZXF1aXJlX0Zvcm1TdWJtaXR0ZWRBdHRyaWJ1dGVzKCksIGV4cG9ydHMpO1xuXHRfX2V4cG9ydFN0YXIkMihyZXF1aXJlX0Zvcm1UeXBlKCksIGV4cG9ydHMpO1xuXHRfX2V4cG9ydFN0YXIkMihyZXF1aXJlX0Z1bGZpbGxtZW50RGlzcGxheVN0YXR1cygpLCBleHBvcnRzKTtcblx0X19leHBvcnRTdGFyJDIocmVxdWlyZV9HZW5lcmF0aW9uUGFyYW1zKCksIGV4cG9ydHMpO1xuXHRfX2V4cG9ydFN0YXIkMihyZXF1aXJlX0dldENvbnZlcnNhdGlvbk1lc3NhZ2VzUmVxdWVzdCgpLCBleHBvcnRzKTtcblx0X19leHBvcnRTdGFyJDIocmVxdWlyZV9Jc0J1c2luZXNzSG91cnNSZXF1ZXN0KCksIGV4cG9ydHMpO1xuXHRfX2V4cG9ydFN0YXIkMihyZXF1aXJlX0lzQnVzaW5lc3NIb3Vyc1Jlc3BvbnNlKCksIGV4cG9ydHMpO1xuXHRfX2V4cG9ydFN0YXIkMihyZXF1aXJlX0xhYmVsVmFsdWUoKSwgZXhwb3J0cyk7XG5cdF9fZXhwb3J0U3RhciQyKHJlcXVpcmVfTWFudWFsRm9ybSgpLCBleHBvcnRzKTtcblx0X19leHBvcnRTdGFyJDIocmVxdWlyZV9OZXh0TWVzc2FnZVJlcXVlc3QoKSwgZXhwb3J0cyk7XG5cdF9fZXhwb3J0U3RhciQyKHJlcXVpcmVfT3JkZXJJdGVtSW5mbygpLCBleHBvcnRzKTtcblx0X19leHBvcnRTdGFyJDIocmVxdWlyZV9PcmRlclJlc3BvbnNlQXR0cmlidXRlcygpLCBleHBvcnRzKTtcblx0X19leHBvcnRTdGFyJDIocmVxdWlyZV9Pcmdhbml6YXRpb24oKSwgZXhwb3J0cyk7XG5cdF9fZXhwb3J0U3RhciQyKHJlcXVpcmVfT3JnYW5pemF0aW9uQ29uZmlnKCksIGV4cG9ydHMpO1xuXHRfX2V4cG9ydFN0YXIkMihyZXF1aXJlX09yZ2FuaXphdGlvbkNvbmZpZ1Jlc3VsdHMoKSwgZXhwb3J0cyk7XG5cdF9fZXhwb3J0U3RhciQyKHJlcXVpcmVfT3JnYW5pemF0aW9uU2V0dGluZ3MoKSwgZXhwb3J0cyk7XG5cdF9fZXhwb3J0U3RhciQyKHJlcXVpcmVfUERQQXR0cmlidXRlcygpLCBleHBvcnRzKTtcblx0X19leHBvcnRTdGFyJDIocmVxdWlyZV9QTFBBdHRyaWJ1dGVDYXRlZ29yeSgpLCBleHBvcnRzKTtcblx0X19leHBvcnRTdGFyJDIocmVxdWlyZV9QTFBBdHRyaWJ1dGVzKCksIGV4cG9ydHMpO1xuXHRfX2V4cG9ydFN0YXIkMihyZXF1aXJlX1BMUEF0dHJpYnV0ZXNBdHRyaWJ1dGVzKCksIGV4cG9ydHMpO1xuXHRfX2V4cG9ydFN0YXIkMihyZXF1aXJlX1BMUElkQXR0cmlidXRlcygpLCBleHBvcnRzKTtcblx0X19leHBvcnRTdGFyJDIocmVxdWlyZV9QTFBVcmxBdHRyaWJ1dGVzKCksIGV4cG9ydHMpO1xuXHRfX2V4cG9ydFN0YXIkMihyZXF1aXJlX1BhZ2VWaXNpdEF0dHJpYnV0ZXMoKSwgZXhwb3J0cyk7XG5cdF9fZXhwb3J0U3RhciQyKHJlcXVpcmVfUGFnZVZpc2l0Q2F0ZWdvcnkoKSwgZXhwb3J0cyk7XG5cdF9fZXhwb3J0U3RhciQyKHJlcXVpcmVfUHJvZHVjdFJldHJpZXZhbFJlcXVlc3QoKSwgZXhwb3J0cyk7XG5cdF9fZXhwb3J0U3RhciQyKHJlcXVpcmVfUHJvZHVjdFJldHJpZXZhbFJlc3BvbnNlKCksIGV4cG9ydHMpO1xuXHRfX2V4cG9ydFN0YXIkMihyZXF1aXJlX1Byb2R1Y3RTZWFyY2hGaWx0ZXJSZXNwb25zZUF0dHJpYnV0ZXMoKSwgZXhwb3J0cyk7XG5cdF9fZXhwb3J0U3RhciQyKHJlcXVpcmVfUHJvZHVjdFNlYXJjaFJlc3BvbnNlKCksIGV4cG9ydHMpO1xuXHRfX2V4cG9ydFN0YXIkMihyZXF1aXJlX1Byb2R1Y3RTZWFyY2hSZXNwb25zZUF0dHJpYnV0ZXMoKSwgZXhwb3J0cyk7XG5cdF9fZXhwb3J0U3RhciQyKHJlcXVpcmVfUXVlcnlUeXBlZEF0dHJpYnV0ZXMoKSwgZXhwb3J0cyk7XG5cdF9fZXhwb3J0U3RhciQyKHJlcXVpcmVfUmVwb3J0Q29udGVudCgpLCBleHBvcnRzKTtcblx0X19leHBvcnRTdGFyJDIocmVxdWlyZV9SZXBvcnRTZXNzaW9uUmVxdWVzdCgpLCBleHBvcnRzKTtcblx0X19leHBvcnRTdGFyJDIocmVxdWlyZV9SZXNwb25zZSgpLCBleHBvcnRzKTtcblx0X19leHBvcnRTdGFyJDIocmVxdWlyZV9SZXNwb25zZUNhdGVnb3J5KCksIGV4cG9ydHMpO1xuXHRfX2V4cG9ydFN0YXIkMihyZXF1aXJlX1Jlc3BvbnNlUHJvZHVjdEF0dHJpYnV0ZXMoKSwgZXhwb3J0cyk7XG5cdF9fZXhwb3J0U3RhciQyKHJlcXVpcmVfU2VhcmNoQXR0cmlidXRlcygpLCBleHBvcnRzKTtcblx0X19leHBvcnRTdGFyJDIocmVxdWlyZV9TZWFyY2hSZXNwb25zZVByb2R1Y3QoKSwgZXhwb3J0cyk7XG5cdF9fZXhwb3J0U3RhciQyKHJlcXVpcmVfU2VhcmNoU3VnZ2VzdGlvbnNSZXNwb25zZSgpLCBleHBvcnRzKTtcblx0X19leHBvcnRTdGFyJDIocmVxdWlyZV9TZW5kTWVzc2FnZVJlcXVlc3QoKSwgZXhwb3J0cyk7XG5cdF9fZXhwb3J0U3RhciQyKHJlcXVpcmVfU2VuZE1lc3NhZ2VSZXNwb25zZSgpLCBleHBvcnRzKTtcblx0X19leHBvcnRTdGFyJDIocmVxdWlyZV9TdGF0c2lnRXhwZXJpbWVudCgpLCBleHBvcnRzKTtcblx0X19leHBvcnRTdGFyJDIocmVxdWlyZV9TdGF0c2lnRmVhdHVyZUdhdGUoKSwgZXhwb3J0cyk7XG5cdF9fZXhwb3J0U3RhciQyKHJlcXVpcmVfU3VnZ2VzdGlvbigpLCBleHBvcnRzKTtcblx0X19leHBvcnRTdGFyJDIocmVxdWlyZV9TdWdnZXN0aW9uQ2F0ZWdvcnkoKSwgZXhwb3J0cyk7XG5cdF9fZXhwb3J0U3RhciQyKHJlcXVpcmVfU3VnZ2VzdGlvbkNsaWNrZWRBdHRyaWJ1dGVzKCksIGV4cG9ydHMpO1xuXHRfX2V4cG9ydFN0YXIkMihyZXF1aXJlX1N1cHBvcnRlZEV2ZW50UHJvZHVjdENhdGVnb3J5KCksIGV4cG9ydHMpO1xuXHRfX2V4cG9ydFN0YXIkMihyZXF1aXJlX1N1cHBvcnRlZEV2ZW50UmVxdWVzdCgpLCBleHBvcnRzKTtcblx0X19leHBvcnRTdGFyJDIocmVxdWlyZV9TdXBwb3J0ZWRFdmVudFJlc3BvbnNlKCksIGV4cG9ydHMpO1xuXHRfX2V4cG9ydFN0YXIkMihyZXF1aXJlX1R1cm5JbmZvKCksIGV4cG9ydHMpO1xuXHRfX2V4cG9ydFN0YXIkMihyZXF1aXJlX1R1cm5JbmZvUHJldlVzZXJFdmVudCgpLCBleHBvcnRzKTtcblx0X19leHBvcnRTdGFyJDIocmVxdWlyZV9VcmxSZXNvbHZpbmdHZW5lcmljQ29uZmlnKCksIGV4cG9ydHMpO1xuXHRfX2V4cG9ydFN0YXIkMihyZXF1aXJlX1VybFJlc29sdmluZ1BEUENvbmZpZygpLCBleHBvcnRzKTtcblx0X19leHBvcnRTdGFyJDIocmVxdWlyZV9VcmxSZXNvbHZpbmdQTFBDb25maWcoKSwgZXhwb3J0cyk7XG5cdF9fZXhwb3J0U3RhciQyKHJlcXVpcmVfVXJsUmVzb2x2aW5nUmVxdWVzdCgpLCBleHBvcnRzKTtcblx0X19leHBvcnRTdGFyJDIocmVxdWlyZV9VcmxSZXNvbHZpbmdSZXNwb25zZSgpLCBleHBvcnRzKTtcblx0X19leHBvcnRTdGFyJDIocmVxdWlyZV9VcmxSZXNvbHZpbmdSZXNwb25zZVNwZWNpZmljRGV0YWlscygpLCBleHBvcnRzKTtcblx0X19leHBvcnRTdGFyJDIocmVxdWlyZV9VcmxSZXNvbHZpbmdUeXBlKCksIGV4cG9ydHMpO1xuXHRfX2V4cG9ydFN0YXIkMihyZXF1aXJlX1VzZXJFdmVudCgpLCBleHBvcnRzKTtcblx0X19leHBvcnRTdGFyJDIocmVxdWlyZV9Vc2VyRXZlbnRBdHRyaWJ1dGVzKCksIGV4cG9ydHMpO1xuXHRfX2V4cG9ydFN0YXIkMihyZXF1aXJlX1VzZXJFdmVudENhdGVnb3J5KCksIGV4cG9ydHMpO1xuXHRfX2V4cG9ydFN0YXIkMihyZXF1aXJlX1YxR2V0U2Vzc2lvbk1lc3NhZ2VzMjAwUmVzcG9uc2UoKSwgZXhwb3J0cyk7XG5cdF9fZXhwb3J0U3RhciQyKHJlcXVpcmVfVjFTZWFyY2hFeHBsYWluR2V0MjAwUmVzcG9uc2UoKSwgZXhwb3J0cyk7XG59KSB9KTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L2FwaXMvQ3VzdG9tZXJTZXJ2aWNlQXBpLmpzXG52YXIgcmVxdWlyZV9DdXN0b21lclNlcnZpY2VBcGkgPSAvKiBAX19QVVJFX18gKi8gX19jb21tb25KUyh7IFwiLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L2FwaXMvQ3VzdG9tZXJTZXJ2aWNlQXBpLmpzXCI6ICgoZXhwb3J0cykgPT4ge1xuXHQvKipcblx0KiBDb21tZXJjZVxuXHQqIE5vIGRlc2NyaXB0aW9uIHByb3ZpZGVkIChnZW5lcmF0ZWQgYnkgT3BlbmFwaSBHZW5lcmF0b3IgaHR0cHM6Ly9naXRodWIuY29tL29wZW5hcGl0b29scy9vcGVuYXBpLWdlbmVyYXRvcilcblx0KlxuXHQqIFRoZSB2ZXJzaW9uIG9mIHRoZSBPcGVuQVBJIGRvY3VtZW50OiAxLjEuMFxuXHQqXG5cdCpcblx0KiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IE9wZW5BUEkgR2VuZXJhdG9yIChodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2gpLlxuXHQqIGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaFxuXHQqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cblx0Ki9cblx0dmFyIF9fYXdhaXRlciQ0ID0gZXhwb3J0cyAmJiBleHBvcnRzLl9fYXdhaXRlciB8fCBmdW5jdGlvbih0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcblx0XHRmdW5jdGlvbiBhZG9wdCh2YWx1ZSkge1xuXHRcdFx0cmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24ocmVzb2x2ZSkge1xuXHRcdFx0XHRyZXNvbHZlKHZhbHVlKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHRyZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuXHRcdFx0ZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7XG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0c3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpO1xuXHRcdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdFx0cmVqZWN0KGUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkge1xuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTtcblx0XHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRcdHJlamVjdChlKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0ZnVuY3Rpb24gc3RlcChyZXN1bHQpIHtcblx0XHRcdFx0cmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7XG5cdFx0XHR9XG5cdFx0XHRzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG5cdFx0fSk7XG5cdH07XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcblx0ZXhwb3J0cy5DdXN0b21lclNlcnZpY2VBcGkgPSB2b2lkIDA7XG5cdGNvbnN0IHJ1bnRpbWUkNCA9IHJlcXVpcmVfcnVudGltZSgpO1xuXHRjb25zdCBpbmRleF8xJDQgPSByZXF1aXJlX21vZGVscygpO1xuXHQvKipcblx0KlxuXHQqL1xuXHR2YXIgQ3VzdG9tZXJTZXJ2aWNlQXBpID0gY2xhc3MgZXh0ZW5kcyBydW50aW1lJDQuQmFzZUFQSSB7XG5cdFx0LyoqXG5cdFx0KiBBZGQgYSBub3RlIHRvIHRoZSBsYXRlc3QgY29udmVyc2F0aW9uIGZvciBhIGN1c3RvbWVyXG5cdFx0Ki9cblx0XHR2MUN1c3RzZXJ2aWNlQWRkTm90ZVRvTGF0ZXN0Q29udmVyc2F0aW9uUG9zdFJhdyhyZXF1ZXN0UGFyYW1ldGVycywgaW5pdE92ZXJyaWRlcykge1xuXHRcdFx0cmV0dXJuIF9fYXdhaXRlciQ0KHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuXHRcdFx0XHRjb25zdCBxdWVyeVBhcmFtZXRlcnMgPSB7fTtcblx0XHRcdFx0Y29uc3QgaGVhZGVyUGFyYW1ldGVycyA9IHt9O1xuXHRcdFx0XHRoZWFkZXJQYXJhbWV0ZXJzW1wiQ29udGVudC1UeXBlXCJdID0gXCJhcHBsaWNhdGlvbi9qc29uXCI7XG5cdFx0XHRcdGlmICh0aGlzLmNvbmZpZ3VyYXRpb24gJiYgdGhpcy5jb25maWd1cmF0aW9uLmFjY2Vzc1Rva2VuKSB7XG5cdFx0XHRcdFx0Y29uc3QgdG9rZW4gPSB0aGlzLmNvbmZpZ3VyYXRpb24uYWNjZXNzVG9rZW47XG5cdFx0XHRcdFx0Y29uc3QgdG9rZW5TdHJpbmcgPSB5aWVsZCB0b2tlbihcImJlYXJlclwiLCBbXSk7XG5cdFx0XHRcdFx0aWYgKHRva2VuU3RyaW5nKSBoZWFkZXJQYXJhbWV0ZXJzW1wiQXV0aG9yaXphdGlvblwiXSA9IGBCZWFyZXIgJHt0b2tlblN0cmluZ31gO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IHJlc3BvbnNlID0geWllbGQgdGhpcy5yZXF1ZXN0KHtcblx0XHRcdFx0XHRwYXRoOiBgL3YxL2N1c3RzZXJ2aWNlL2FkZF9ub3RlX3RvX2xhdGVzdF9jb252ZXJzYXRpb25gLFxuXHRcdFx0XHRcdG1ldGhvZDogXCJQT1NUXCIsXG5cdFx0XHRcdFx0aGVhZGVyczogaGVhZGVyUGFyYW1ldGVycyxcblx0XHRcdFx0XHRxdWVyeTogcXVlcnlQYXJhbWV0ZXJzLFxuXHRcdFx0XHRcdGJvZHk6ICgwLCBpbmRleF8xJDQuQWRkTm90ZVRvTGF0ZXN0Q29udmVyc2F0aW9uUmVxdWVzdFRvSlNPTikocmVxdWVzdFBhcmFtZXRlcnNbXCJBZGROb3RlVG9MYXRlc3RDb252ZXJzYXRpb25SZXF1ZXN0XCJdKVxuXHRcdFx0XHR9LCBpbml0T3ZlcnJpZGVzKTtcblx0XHRcdFx0cmV0dXJuIG5ldyBydW50aW1lJDQuSlNPTkFwaVJlc3BvbnNlKHJlc3BvbnNlLCAoanNvblZhbHVlKSA9PiAoMCwgaW5kZXhfMSQ0LkFkZE5vdGVUb0xhdGVzdENvbnZlcnNhdGlvblJlc3BvbnNlRnJvbUpTT04pKGpzb25WYWx1ZSkpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdC8qKlxuXHRcdCogQWRkIGEgbm90ZSB0byB0aGUgbGF0ZXN0IGNvbnZlcnNhdGlvbiBmb3IgYSBjdXN0b21lclxuXHRcdCovXG5cdFx0djFDdXN0c2VydmljZUFkZE5vdGVUb0xhdGVzdENvbnZlcnNhdGlvblBvc3QoKSB7XG5cdFx0XHRyZXR1cm4gX19hd2FpdGVyJDQodGhpcywgYXJndW1lbnRzLCB2b2lkIDAsIGZ1bmN0aW9uKiAocmVxdWVzdFBhcmFtZXRlcnMgPSB7fSwgaW5pdE92ZXJyaWRlcykge1xuXHRcdFx0XHRyZXR1cm4geWllbGQgKHlpZWxkIHRoaXMudjFDdXN0c2VydmljZUFkZE5vdGVUb0xhdGVzdENvbnZlcnNhdGlvblBvc3RSYXcocmVxdWVzdFBhcmFtZXRlcnMsIGluaXRPdmVycmlkZXMpKS52YWx1ZSgpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdC8qKlxuXHRcdCogQ3JlYXRlIGEgbmV3IGNvbnZlcnNhdGlvbiBmb3IgYSBjdXN0b21lclxuXHRcdCovXG5cdFx0djFDdXN0c2VydmljZUNyZWF0ZUNvbnZlcnNhdGlvblBvc3RSYXcocmVxdWVzdFBhcmFtZXRlcnMsIGluaXRPdmVycmlkZXMpIHtcblx0XHRcdHJldHVybiBfX2F3YWl0ZXIkNCh0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcblx0XHRcdFx0Y29uc3QgcXVlcnlQYXJhbWV0ZXJzID0ge307XG5cdFx0XHRcdGNvbnN0IGhlYWRlclBhcmFtZXRlcnMgPSB7fTtcblx0XHRcdFx0aGVhZGVyUGFyYW1ldGVyc1tcIkNvbnRlbnQtVHlwZVwiXSA9IFwiYXBwbGljYXRpb24vanNvblwiO1xuXHRcdFx0XHRpZiAodGhpcy5jb25maWd1cmF0aW9uICYmIHRoaXMuY29uZmlndXJhdGlvbi5hY2Nlc3NUb2tlbikge1xuXHRcdFx0XHRcdGNvbnN0IHRva2VuID0gdGhpcy5jb25maWd1cmF0aW9uLmFjY2Vzc1Rva2VuO1xuXHRcdFx0XHRcdGNvbnN0IHRva2VuU3RyaW5nID0geWllbGQgdG9rZW4oXCJiZWFyZXJcIiwgW10pO1xuXHRcdFx0XHRcdGlmICh0b2tlblN0cmluZykgaGVhZGVyUGFyYW1ldGVyc1tcIkF1dGhvcml6YXRpb25cIl0gPSBgQmVhcmVyICR7dG9rZW5TdHJpbmd9YDtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCByZXNwb25zZSA9IHlpZWxkIHRoaXMucmVxdWVzdCh7XG5cdFx0XHRcdFx0cGF0aDogYC92MS9jdXN0c2VydmljZS9jcmVhdGVfY29udmVyc2F0aW9uYCxcblx0XHRcdFx0XHRtZXRob2Q6IFwiUE9TVFwiLFxuXHRcdFx0XHRcdGhlYWRlcnM6IGhlYWRlclBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0cXVlcnk6IHF1ZXJ5UGFyYW1ldGVycyxcblx0XHRcdFx0XHRib2R5OiAoMCwgaW5kZXhfMSQ0LkNyZWF0ZUNvbnZlcnNhdGlvblJlcXVlc3RUb0pTT04pKHJlcXVlc3RQYXJhbWV0ZXJzW1wiQ3JlYXRlQ29udmVyc2F0aW9uUmVxdWVzdFwiXSlcblx0XHRcdFx0fSwgaW5pdE92ZXJyaWRlcyk7XG5cdFx0XHRcdHJldHVybiBuZXcgcnVudGltZSQ0LkpTT05BcGlSZXNwb25zZShyZXNwb25zZSwgKGpzb25WYWx1ZSkgPT4gKDAsIGluZGV4XzEkNC5DcmVhdGVDb252ZXJzYXRpb25SZXNwb25zZUZyb21KU09OKShqc29uVmFsdWUpKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHQvKipcblx0XHQqIENyZWF0ZSBhIG5ldyBjb252ZXJzYXRpb24gZm9yIGEgY3VzdG9tZXJcblx0XHQqL1xuXHRcdHYxQ3VzdHNlcnZpY2VDcmVhdGVDb252ZXJzYXRpb25Qb3N0KCkge1xuXHRcdFx0cmV0dXJuIF9fYXdhaXRlciQ0KHRoaXMsIGFyZ3VtZW50cywgdm9pZCAwLCBmdW5jdGlvbiogKHJlcXVlc3RQYXJhbWV0ZXJzID0ge30sIGluaXRPdmVycmlkZXMpIHtcblx0XHRcdFx0cmV0dXJuIHlpZWxkICh5aWVsZCB0aGlzLnYxQ3VzdHNlcnZpY2VDcmVhdGVDb252ZXJzYXRpb25Qb3N0UmF3KHJlcXVlc3RQYXJhbWV0ZXJzLCBpbml0T3ZlcnJpZGVzKSkudmFsdWUoKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHQvKipcblx0XHQqIEdldCBtZXNzYWdlcyBmcm9tIGEgY29udmVyc2F0aW9uXG5cdFx0Ki9cblx0XHR2MUN1c3RzZXJ2aWNlR2V0Q29udmVyc2F0aW9uTWVzc2FnZXNQb3N0UmF3KHJlcXVlc3RQYXJhbWV0ZXJzLCBpbml0T3ZlcnJpZGVzKSB7XG5cdFx0XHRyZXR1cm4gX19hd2FpdGVyJDQodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG5cdFx0XHRcdGNvbnN0IHF1ZXJ5UGFyYW1ldGVycyA9IHt9O1xuXHRcdFx0XHRjb25zdCBoZWFkZXJQYXJhbWV0ZXJzID0ge307XG5cdFx0XHRcdGhlYWRlclBhcmFtZXRlcnNbXCJDb250ZW50LVR5cGVcIl0gPSBcImFwcGxpY2F0aW9uL2pzb25cIjtcblx0XHRcdFx0aWYgKHRoaXMuY29uZmlndXJhdGlvbiAmJiB0aGlzLmNvbmZpZ3VyYXRpb24uYWNjZXNzVG9rZW4pIHtcblx0XHRcdFx0XHRjb25zdCB0b2tlbiA9IHRoaXMuY29uZmlndXJhdGlvbi5hY2Nlc3NUb2tlbjtcblx0XHRcdFx0XHRjb25zdCB0b2tlblN0cmluZyA9IHlpZWxkIHRva2VuKFwiYmVhcmVyXCIsIFtdKTtcblx0XHRcdFx0XHRpZiAodG9rZW5TdHJpbmcpIGhlYWRlclBhcmFtZXRlcnNbXCJBdXRob3JpemF0aW9uXCJdID0gYEJlYXJlciAke3Rva2VuU3RyaW5nfWA7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3QgcmVzcG9uc2UgPSB5aWVsZCB0aGlzLnJlcXVlc3Qoe1xuXHRcdFx0XHRcdHBhdGg6IGAvdjEvY3VzdHNlcnZpY2UvZ2V0X2NvbnZlcnNhdGlvbl9tZXNzYWdlc2AsXG5cdFx0XHRcdFx0bWV0aG9kOiBcIlBPU1RcIixcblx0XHRcdFx0XHRoZWFkZXJzOiBoZWFkZXJQYXJhbWV0ZXJzLFxuXHRcdFx0XHRcdHF1ZXJ5OiBxdWVyeVBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0Ym9keTogKDAsIGluZGV4XzEkNC5HZXRDb252ZXJzYXRpb25NZXNzYWdlc1JlcXVlc3RUb0pTT04pKHJlcXVlc3RQYXJhbWV0ZXJzW1wiR2V0Q29udmVyc2F0aW9uTWVzc2FnZXNSZXF1ZXN0XCJdKVxuXHRcdFx0XHR9LCBpbml0T3ZlcnJpZGVzKTtcblx0XHRcdFx0cmV0dXJuIG5ldyBydW50aW1lJDQuSlNPTkFwaVJlc3BvbnNlKHJlc3BvbnNlLCAoanNvblZhbHVlKSA9PiAoMCwgaW5kZXhfMSQ0LkN1c3RTZXJ2aWNlQ29udmVyc2F0aW9uTWVzc2FnZXNGcm9tSlNPTikoanNvblZhbHVlKSk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0LyoqXG5cdFx0KiBHZXQgbWVzc2FnZXMgZnJvbSBhIGNvbnZlcnNhdGlvblxuXHRcdCovXG5cdFx0djFDdXN0c2VydmljZUdldENvbnZlcnNhdGlvbk1lc3NhZ2VzUG9zdCgpIHtcblx0XHRcdHJldHVybiBfX2F3YWl0ZXIkNCh0aGlzLCBhcmd1bWVudHMsIHZvaWQgMCwgZnVuY3Rpb24qIChyZXF1ZXN0UGFyYW1ldGVycyA9IHt9LCBpbml0T3ZlcnJpZGVzKSB7XG5cdFx0XHRcdHJldHVybiB5aWVsZCAoeWllbGQgdGhpcy52MUN1c3RzZXJ2aWNlR2V0Q29udmVyc2F0aW9uTWVzc2FnZXNQb3N0UmF3KHJlcXVlc3RQYXJhbWV0ZXJzLCBpbml0T3ZlcnJpZGVzKSkudmFsdWUoKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHQvKipcblx0XHQqIENoZWNrIGlmIGl0IGlzIGN1cnJlbnRseSBidXNpbmVzcyBob3Vyc1xuXHRcdCovXG5cdFx0djFDdXN0c2VydmljZUlzQnVzaW5lc3NIb3Vyc1Bvc3RSYXcocmVxdWVzdFBhcmFtZXRlcnMsIGluaXRPdmVycmlkZXMpIHtcblx0XHRcdHJldHVybiBfX2F3YWl0ZXIkNCh0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcblx0XHRcdFx0Y29uc3QgcXVlcnlQYXJhbWV0ZXJzID0ge307XG5cdFx0XHRcdGNvbnN0IGhlYWRlclBhcmFtZXRlcnMgPSB7fTtcblx0XHRcdFx0aGVhZGVyUGFyYW1ldGVyc1tcIkNvbnRlbnQtVHlwZVwiXSA9IFwiYXBwbGljYXRpb24vanNvblwiO1xuXHRcdFx0XHRpZiAodGhpcy5jb25maWd1cmF0aW9uICYmIHRoaXMuY29uZmlndXJhdGlvbi5hY2Nlc3NUb2tlbikge1xuXHRcdFx0XHRcdGNvbnN0IHRva2VuID0gdGhpcy5jb25maWd1cmF0aW9uLmFjY2Vzc1Rva2VuO1xuXHRcdFx0XHRcdGNvbnN0IHRva2VuU3RyaW5nID0geWllbGQgdG9rZW4oXCJiZWFyZXJcIiwgW10pO1xuXHRcdFx0XHRcdGlmICh0b2tlblN0cmluZykgaGVhZGVyUGFyYW1ldGVyc1tcIkF1dGhvcml6YXRpb25cIl0gPSBgQmVhcmVyICR7dG9rZW5TdHJpbmd9YDtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCByZXNwb25zZSA9IHlpZWxkIHRoaXMucmVxdWVzdCh7XG5cdFx0XHRcdFx0cGF0aDogYC92MS9jdXN0c2VydmljZS9pc19idXNpbmVzc19ob3Vyc2AsXG5cdFx0XHRcdFx0bWV0aG9kOiBcIlBPU1RcIixcblx0XHRcdFx0XHRoZWFkZXJzOiBoZWFkZXJQYXJhbWV0ZXJzLFxuXHRcdFx0XHRcdHF1ZXJ5OiBxdWVyeVBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0Ym9keTogKDAsIGluZGV4XzEkNC5Jc0J1c2luZXNzSG91cnNSZXF1ZXN0VG9KU09OKShyZXF1ZXN0UGFyYW1ldGVyc1tcIklzQnVzaW5lc3NIb3Vyc1JlcXVlc3RcIl0pXG5cdFx0XHRcdH0sIGluaXRPdmVycmlkZXMpO1xuXHRcdFx0XHRyZXR1cm4gbmV3IHJ1bnRpbWUkNC5KU09OQXBpUmVzcG9uc2UocmVzcG9uc2UsIChqc29uVmFsdWUpID0+ICgwLCBpbmRleF8xJDQuSXNCdXNpbmVzc0hvdXJzUmVzcG9uc2VGcm9tSlNPTikoanNvblZhbHVlKSk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0LyoqXG5cdFx0KiBDaGVjayBpZiBpdCBpcyBjdXJyZW50bHkgYnVzaW5lc3MgaG91cnNcblx0XHQqL1xuXHRcdHYxQ3VzdHNlcnZpY2VJc0J1c2luZXNzSG91cnNQb3N0KCkge1xuXHRcdFx0cmV0dXJuIF9fYXdhaXRlciQ0KHRoaXMsIGFyZ3VtZW50cywgdm9pZCAwLCBmdW5jdGlvbiogKHJlcXVlc3RQYXJhbWV0ZXJzID0ge30sIGluaXRPdmVycmlkZXMpIHtcblx0XHRcdFx0cmV0dXJuIHlpZWxkICh5aWVsZCB0aGlzLnYxQ3VzdHNlcnZpY2VJc0J1c2luZXNzSG91cnNQb3N0UmF3KHJlcXVlc3RQYXJhbWV0ZXJzLCBpbml0T3ZlcnJpZGVzKSkudmFsdWUoKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHQvKipcblx0XHQqIFNlbmQgYSBtZXNzYWdlIGluIGFuIGV4aXN0aW5nIGNvbnZlcnNhdGlvblxuXHRcdCovXG5cdFx0djFDdXN0c2VydmljZVNlbmRNZXNzYWdlUG9zdFJhdyhyZXF1ZXN0UGFyYW1ldGVycywgaW5pdE92ZXJyaWRlcykge1xuXHRcdFx0cmV0dXJuIF9fYXdhaXRlciQ0KHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuXHRcdFx0XHRjb25zdCBxdWVyeVBhcmFtZXRlcnMgPSB7fTtcblx0XHRcdFx0Y29uc3QgaGVhZGVyUGFyYW1ldGVycyA9IHt9O1xuXHRcdFx0XHRoZWFkZXJQYXJhbWV0ZXJzW1wiQ29udGVudC1UeXBlXCJdID0gXCJhcHBsaWNhdGlvbi9qc29uXCI7XG5cdFx0XHRcdGlmICh0aGlzLmNvbmZpZ3VyYXRpb24gJiYgdGhpcy5jb25maWd1cmF0aW9uLmFjY2Vzc1Rva2VuKSB7XG5cdFx0XHRcdFx0Y29uc3QgdG9rZW4gPSB0aGlzLmNvbmZpZ3VyYXRpb24uYWNjZXNzVG9rZW47XG5cdFx0XHRcdFx0Y29uc3QgdG9rZW5TdHJpbmcgPSB5aWVsZCB0b2tlbihcImJlYXJlclwiLCBbXSk7XG5cdFx0XHRcdFx0aWYgKHRva2VuU3RyaW5nKSBoZWFkZXJQYXJhbWV0ZXJzW1wiQXV0aG9yaXphdGlvblwiXSA9IGBCZWFyZXIgJHt0b2tlblN0cmluZ31gO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IHJlc3BvbnNlID0geWllbGQgdGhpcy5yZXF1ZXN0KHtcblx0XHRcdFx0XHRwYXRoOiBgL3YxL2N1c3RzZXJ2aWNlL3NlbmRfbWVzc2FnZWAsXG5cdFx0XHRcdFx0bWV0aG9kOiBcIlBPU1RcIixcblx0XHRcdFx0XHRoZWFkZXJzOiBoZWFkZXJQYXJhbWV0ZXJzLFxuXHRcdFx0XHRcdHF1ZXJ5OiBxdWVyeVBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0Ym9keTogKDAsIGluZGV4XzEkNC5TZW5kTWVzc2FnZVJlcXVlc3RUb0pTT04pKHJlcXVlc3RQYXJhbWV0ZXJzW1wiU2VuZE1lc3NhZ2VSZXF1ZXN0XCJdKVxuXHRcdFx0XHR9LCBpbml0T3ZlcnJpZGVzKTtcblx0XHRcdFx0cmV0dXJuIG5ldyBydW50aW1lJDQuSlNPTkFwaVJlc3BvbnNlKHJlc3BvbnNlLCAoanNvblZhbHVlKSA9PiAoMCwgaW5kZXhfMSQ0LlNlbmRNZXNzYWdlUmVzcG9uc2VGcm9tSlNPTikoanNvblZhbHVlKSk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0LyoqXG5cdFx0KiBTZW5kIGEgbWVzc2FnZSBpbiBhbiBleGlzdGluZyBjb252ZXJzYXRpb25cblx0XHQqL1xuXHRcdHYxQ3VzdHNlcnZpY2VTZW5kTWVzc2FnZVBvc3QoKSB7XG5cdFx0XHRyZXR1cm4gX19hd2FpdGVyJDQodGhpcywgYXJndW1lbnRzLCB2b2lkIDAsIGZ1bmN0aW9uKiAocmVxdWVzdFBhcmFtZXRlcnMgPSB7fSwgaW5pdE92ZXJyaWRlcykge1xuXHRcdFx0XHRyZXR1cm4geWllbGQgKHlpZWxkIHRoaXMudjFDdXN0c2VydmljZVNlbmRNZXNzYWdlUG9zdFJhdyhyZXF1ZXN0UGFyYW1ldGVycywgaW5pdE92ZXJyaWRlcykpLnZhbHVlKCk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdH07XG5cdGV4cG9ydHMuQ3VzdG9tZXJTZXJ2aWNlQXBpID0gQ3VzdG9tZXJTZXJ2aWNlQXBpO1xufSkgfSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIC4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9hcGlzL0RlZmF1bHRBcGkuanNcbnZhciByZXF1aXJlX0RlZmF1bHRBcGkgPSAvKiBAX19QVVJFX18gKi8gX19jb21tb25KUyh7IFwiLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L2FwaXMvRGVmYXVsdEFwaS5qc1wiOiAoKGV4cG9ydHMpID0+IHtcblx0LyoqXG5cdCogQ29tbWVyY2Vcblx0KiBObyBkZXNjcmlwdGlvbiBwcm92aWRlZCAoZ2VuZXJhdGVkIGJ5IE9wZW5hcGkgR2VuZXJhdG9yIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuYXBpdG9vbHMvb3BlbmFwaS1nZW5lcmF0b3IpXG5cdCpcblx0KiBUaGUgdmVyc2lvbiBvZiB0aGUgT3BlbkFQSSBkb2N1bWVudDogMS4xLjBcblx0KlxuXHQqXG5cdCogTk9URTogVGhpcyBjbGFzcyBpcyBhdXRvIGdlbmVyYXRlZCBieSBPcGVuQVBJIEdlbmVyYXRvciAoaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoKS5cblx0KiBodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2hcblx0KiBEbyBub3QgZWRpdCB0aGUgY2xhc3MgbWFudWFsbHkuXG5cdCovXG5cdHZhciBfX2F3YWl0ZXIkMyA9IGV4cG9ydHMgJiYgZXhwb3J0cy5fX2F3YWl0ZXIgfHwgZnVuY3Rpb24odGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG5cdFx0ZnVuY3Rpb24gYWRvcHQodmFsdWUpIHtcblx0XHRcdHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uKHJlc29sdmUpIHtcblx0XHRcdFx0cmVzb2x2ZSh2YWx1ZSk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0cmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcblx0XHRcdGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkge1xuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTtcblx0XHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRcdHJlamVjdChlKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0ZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHtcblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7XG5cdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0XHRyZWplY3QoZSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7XG5cdFx0XHRcdHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpO1xuXHRcdFx0fVxuXHRcdFx0c3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuXHRcdH0pO1xuXHR9O1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5cdGV4cG9ydHMuVjFPcmdDb25maWdHZXRTb3VyY2VFbnVtID0gZXhwb3J0cy5EZWZhdWx0QXBpID0gdm9pZCAwO1xuXHRjb25zdCBydW50aW1lJDMgPSByZXF1aXJlX3J1bnRpbWUoKTtcblx0Y29uc3QgaW5kZXhfMSQzID0gcmVxdWlyZV9tb2RlbHMoKTtcblx0LyoqXG5cdCpcblx0Ki9cblx0dmFyIERlZmF1bHRBcGkgPSBjbGFzcyBleHRlbmRzIHJ1bnRpbWUkMy5CYXNlQVBJIHtcblx0XHQvKipcblx0XHQqIEV4ZWN1dGUgYSBHcmFwaFFMIHF1ZXJ5XG5cdFx0Ki9cblx0XHRncmFwaHFsUGxheWdyb3VuZFJhdyhpbml0T3ZlcnJpZGVzKSB7XG5cdFx0XHRyZXR1cm4gX19hd2FpdGVyJDModGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG5cdFx0XHRcdGNvbnN0IHJlc3BvbnNlID0geWllbGQgdGhpcy5yZXF1ZXN0KHtcblx0XHRcdFx0XHRwYXRoOiBgL3YxL2dyYXBocWxgLFxuXHRcdFx0XHRcdG1ldGhvZDogXCJHRVRcIixcblx0XHRcdFx0XHRoZWFkZXJzOiB7fSxcblx0XHRcdFx0XHRxdWVyeToge31cblx0XHRcdFx0fSwgaW5pdE92ZXJyaWRlcyk7XG5cdFx0XHRcdHJldHVybiBuZXcgcnVudGltZSQzLkpTT05BcGlSZXNwb25zZShyZXNwb25zZSk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0LyoqXG5cdFx0KiBFeGVjdXRlIGEgR3JhcGhRTCBxdWVyeVxuXHRcdCovXG5cdFx0Z3JhcGhxbFBsYXlncm91bmQoaW5pdE92ZXJyaWRlcykge1xuXHRcdFx0cmV0dXJuIF9fYXdhaXRlciQzKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuXHRcdFx0XHRyZXR1cm4geWllbGQgKHlpZWxkIHRoaXMuZ3JhcGhxbFBsYXlncm91bmRSYXcoaW5pdE92ZXJyaWRlcykpLnZhbHVlKCk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0LyoqXG5cdFx0KiBFeGVjdXRlIGEgR3JhcGhRTCBxdWVyeVxuXHRcdCovXG5cdFx0Z3JhcGhxbFNlcnZlclJhdyhyZXF1ZXN0UGFyYW1ldGVycywgaW5pdE92ZXJyaWRlcykge1xuXHRcdFx0cmV0dXJuIF9fYXdhaXRlciQzKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuXHRcdFx0XHRjb25zdCBxdWVyeVBhcmFtZXRlcnMgPSB7fTtcblx0XHRcdFx0Y29uc3QgaGVhZGVyUGFyYW1ldGVycyA9IHt9O1xuXHRcdFx0XHRoZWFkZXJQYXJhbWV0ZXJzW1wiQ29udGVudC1UeXBlXCJdID0gXCJhcHBsaWNhdGlvbi9qc29uXCI7XG5cdFx0XHRcdGlmICh0aGlzLmNvbmZpZ3VyYXRpb24gJiYgdGhpcy5jb25maWd1cmF0aW9uLmFjY2Vzc1Rva2VuKSB7XG5cdFx0XHRcdFx0Y29uc3QgdG9rZW4gPSB0aGlzLmNvbmZpZ3VyYXRpb24uYWNjZXNzVG9rZW47XG5cdFx0XHRcdFx0Y29uc3QgdG9rZW5TdHJpbmcgPSB5aWVsZCB0b2tlbihcImJlYXJlclwiLCBbXSk7XG5cdFx0XHRcdFx0aWYgKHRva2VuU3RyaW5nKSBoZWFkZXJQYXJhbWV0ZXJzW1wiQXV0aG9yaXphdGlvblwiXSA9IGBCZWFyZXIgJHt0b2tlblN0cmluZ31gO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IHJlc3BvbnNlID0geWllbGQgdGhpcy5yZXF1ZXN0KHtcblx0XHRcdFx0XHRwYXRoOiBgL3YxL2dyYXBocWxgLFxuXHRcdFx0XHRcdG1ldGhvZDogXCJQT1NUXCIsXG5cdFx0XHRcdFx0aGVhZGVyczogaGVhZGVyUGFyYW1ldGVycyxcblx0XHRcdFx0XHRxdWVyeTogcXVlcnlQYXJhbWV0ZXJzLFxuXHRcdFx0XHRcdGJvZHk6IHJlcXVlc3RQYXJhbWV0ZXJzW1wiYm9keVwiXVxuXHRcdFx0XHR9LCBpbml0T3ZlcnJpZGVzKTtcblx0XHRcdFx0cmV0dXJuIG5ldyBydW50aW1lJDMuSlNPTkFwaVJlc3BvbnNlKHJlc3BvbnNlKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHQvKipcblx0XHQqIEV4ZWN1dGUgYSBHcmFwaFFMIHF1ZXJ5XG5cdFx0Ki9cblx0XHRncmFwaHFsU2VydmVyKCkge1xuXHRcdFx0cmV0dXJuIF9fYXdhaXRlciQzKHRoaXMsIGFyZ3VtZW50cywgdm9pZCAwLCBmdW5jdGlvbiogKHJlcXVlc3RQYXJhbWV0ZXJzID0ge30sIGluaXRPdmVycmlkZXMpIHtcblx0XHRcdFx0cmV0dXJuIHlpZWxkICh5aWVsZCB0aGlzLmdyYXBocWxTZXJ2ZXJSYXcocmVxdWVzdFBhcmFtZXRlcnMsIGluaXRPdmVycmlkZXMpKS52YWx1ZSgpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdC8qKlxuXHRcdCogSGVhbHRoIGNoZWNrXG5cdFx0Ki9cblx0XHRoZWFsdGhFeEdldFJhdyhyZXF1ZXN0UGFyYW1ldGVycywgaW5pdE92ZXJyaWRlcykge1xuXHRcdFx0cmV0dXJuIF9fYXdhaXRlciQzKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuXHRcdFx0XHRjb25zdCBxdWVyeVBhcmFtZXRlcnMgPSB7fTtcblx0XHRcdFx0aWYgKHJlcXVlc3RQYXJhbWV0ZXJzW1wiZGVlcFwiXSAhPSBudWxsKSBxdWVyeVBhcmFtZXRlcnNbXCJkZWVwXCJdID0gcmVxdWVzdFBhcmFtZXRlcnNbXCJkZWVwXCJdO1xuXHRcdFx0XHRpZiAocmVxdWVzdFBhcmFtZXRlcnNbXCJsaW1pdF9vcmdfc2hvcnRfbmFtZXNcIl0gIT0gbnVsbCkgcXVlcnlQYXJhbWV0ZXJzW1wibGltaXRfb3JnX3Nob3J0X25hbWVzXCJdID0gcmVxdWVzdFBhcmFtZXRlcnNbXCJsaW1pdF9vcmdfc2hvcnRfbmFtZXNcIl07XG5cdFx0XHRcdGlmIChyZXF1ZXN0UGFyYW1ldGVyc1tcImxpbWl0X3Byb2R1Y3RzXCJdICE9IG51bGwpIHF1ZXJ5UGFyYW1ldGVyc1tcImxpbWl0X3Byb2R1Y3RzXCJdID0gcmVxdWVzdFBhcmFtZXRlcnNbXCJsaW1pdF9wcm9kdWN0c1wiXTtcblx0XHRcdFx0Y29uc3QgaGVhZGVyUGFyYW1ldGVycyA9IHt9O1xuXHRcdFx0XHRpZiAodGhpcy5jb25maWd1cmF0aW9uICYmIHRoaXMuY29uZmlndXJhdGlvbi5hY2Nlc3NUb2tlbikge1xuXHRcdFx0XHRcdGNvbnN0IHRva2VuID0gdGhpcy5jb25maWd1cmF0aW9uLmFjY2Vzc1Rva2VuO1xuXHRcdFx0XHRcdGNvbnN0IHRva2VuU3RyaW5nID0geWllbGQgdG9rZW4oXCJiZWFyZXJcIiwgW10pO1xuXHRcdFx0XHRcdGlmICh0b2tlblN0cmluZykgaGVhZGVyUGFyYW1ldGVyc1tcIkF1dGhvcml6YXRpb25cIl0gPSBgQmVhcmVyICR7dG9rZW5TdHJpbmd9YDtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCByZXNwb25zZSA9IHlpZWxkIHRoaXMucmVxdWVzdCh7XG5cdFx0XHRcdFx0cGF0aDogYC9oZWFsdGhleGAsXG5cdFx0XHRcdFx0bWV0aG9kOiBcIkdFVFwiLFxuXHRcdFx0XHRcdGhlYWRlcnM6IGhlYWRlclBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0cXVlcnk6IHF1ZXJ5UGFyYW1ldGVyc1xuXHRcdFx0XHR9LCBpbml0T3ZlcnJpZGVzKTtcblx0XHRcdFx0cmV0dXJuIG5ldyBydW50aW1lJDMuSlNPTkFwaVJlc3BvbnNlKHJlc3BvbnNlKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHQvKipcblx0XHQqIEhlYWx0aCBjaGVja1xuXHRcdCovXG5cdFx0aGVhbHRoRXhHZXQoKSB7XG5cdFx0XHRyZXR1cm4gX19hd2FpdGVyJDModGhpcywgYXJndW1lbnRzLCB2b2lkIDAsIGZ1bmN0aW9uKiAocmVxdWVzdFBhcmFtZXRlcnMgPSB7fSwgaW5pdE92ZXJyaWRlcykge1xuXHRcdFx0XHRyZXR1cm4geWllbGQgKHlpZWxkIHRoaXMuaGVhbHRoRXhHZXRSYXcocmVxdWVzdFBhcmFtZXRlcnMsIGluaXRPdmVycmlkZXMpKS52YWx1ZSgpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdC8qKlxuXHRcdCogSGVhbHRoIGNoZWNrXG5cdFx0Ki9cblx0XHRoZWFsdGhHZXRSYXcoaW5pdE92ZXJyaWRlcykge1xuXHRcdFx0cmV0dXJuIF9fYXdhaXRlciQzKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuXHRcdFx0XHRjb25zdCByZXNwb25zZSA9IHlpZWxkIHRoaXMucmVxdWVzdCh7XG5cdFx0XHRcdFx0cGF0aDogYC9oZWFsdGhgLFxuXHRcdFx0XHRcdG1ldGhvZDogXCJHRVRcIixcblx0XHRcdFx0XHRoZWFkZXJzOiB7fSxcblx0XHRcdFx0XHRxdWVyeToge31cblx0XHRcdFx0fSwgaW5pdE92ZXJyaWRlcyk7XG5cdFx0XHRcdHJldHVybiBuZXcgcnVudGltZSQzLkpTT05BcGlSZXNwb25zZShyZXNwb25zZSk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0LyoqXG5cdFx0KiBIZWFsdGggY2hlY2tcblx0XHQqL1xuXHRcdGhlYWx0aEdldChpbml0T3ZlcnJpZGVzKSB7XG5cdFx0XHRyZXR1cm4gX19hd2FpdGVyJDModGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG5cdFx0XHRcdHJldHVybiB5aWVsZCAoeWllbGQgdGhpcy5oZWFsdGhHZXRSYXcoaW5pdE92ZXJyaWRlcykpLnZhbHVlKCk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0LyoqXG5cdFx0KiBHZXQgdGhlIG9yZ2FuaXphdGlvbnMgY29uZmlnXG5cdFx0Ki9cblx0XHR2MUFuYWx5dGljc0lkZW50aWZ5UG9zdFJhdyhyZXF1ZXN0UGFyYW1ldGVycywgaW5pdE92ZXJyaWRlcykge1xuXHRcdFx0cmV0dXJuIF9fYXdhaXRlciQzKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuXHRcdFx0XHRjb25zdCBxdWVyeVBhcmFtZXRlcnMgPSB7fTtcblx0XHRcdFx0Y29uc3QgaGVhZGVyUGFyYW1ldGVycyA9IHt9O1xuXHRcdFx0XHRoZWFkZXJQYXJhbWV0ZXJzW1wiQ29udGVudC1UeXBlXCJdID0gXCJhcHBsaWNhdGlvbi9qc29uXCI7XG5cdFx0XHRcdGlmICh0aGlzLmNvbmZpZ3VyYXRpb24gJiYgdGhpcy5jb25maWd1cmF0aW9uLmFjY2Vzc1Rva2VuKSB7XG5cdFx0XHRcdFx0Y29uc3QgdG9rZW4gPSB0aGlzLmNvbmZpZ3VyYXRpb24uYWNjZXNzVG9rZW47XG5cdFx0XHRcdFx0Y29uc3QgdG9rZW5TdHJpbmcgPSB5aWVsZCB0b2tlbihcImJlYXJlclwiLCBbXSk7XG5cdFx0XHRcdFx0aWYgKHRva2VuU3RyaW5nKSBoZWFkZXJQYXJhbWV0ZXJzW1wiQXV0aG9yaXphdGlvblwiXSA9IGBCZWFyZXIgJHt0b2tlblN0cmluZ31gO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IHJlc3BvbnNlID0geWllbGQgdGhpcy5yZXF1ZXN0KHtcblx0XHRcdFx0XHRwYXRoOiBgL3YxL2FuYWx5dGljcy9pZGVudGlmeWAsXG5cdFx0XHRcdFx0bWV0aG9kOiBcIlBPU1RcIixcblx0XHRcdFx0XHRoZWFkZXJzOiBoZWFkZXJQYXJhbWV0ZXJzLFxuXHRcdFx0XHRcdHF1ZXJ5OiBxdWVyeVBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0Ym9keTogKDAsIGluZGV4XzEkMy5BbmFseXRpY3NJZGVudGlmeVJlcXVlc3RUb0pTT04pKHJlcXVlc3RQYXJhbWV0ZXJzW1wiQW5hbHl0aWNzSWRlbnRpZnlSZXF1ZXN0XCJdKVxuXHRcdFx0XHR9LCBpbml0T3ZlcnJpZGVzKTtcblx0XHRcdFx0cmV0dXJuIG5ldyBydW50aW1lJDMuSlNPTkFwaVJlc3BvbnNlKHJlc3BvbnNlKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHQvKipcblx0XHQqIEdldCB0aGUgb3JnYW5pemF0aW9ucyBjb25maWdcblx0XHQqL1xuXHRcdHYxQW5hbHl0aWNzSWRlbnRpZnlQb3N0KCkge1xuXHRcdFx0cmV0dXJuIF9fYXdhaXRlciQzKHRoaXMsIGFyZ3VtZW50cywgdm9pZCAwLCBmdW5jdGlvbiogKHJlcXVlc3RQYXJhbWV0ZXJzID0ge30sIGluaXRPdmVycmlkZXMpIHtcblx0XHRcdFx0cmV0dXJuIHlpZWxkICh5aWVsZCB0aGlzLnYxQW5hbHl0aWNzSWRlbnRpZnlQb3N0UmF3KHJlcXVlc3RQYXJhbWV0ZXJzLCBpbml0T3ZlcnJpZGVzKSkudmFsdWUoKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHQvKipcblx0XHQqIEdldCB0aGUgb3JnYW5pemF0aW9ucyBjb25maWdcblx0XHQqL1xuXHRcdHYxQW5hbHl0aWNzVHJhY2tFdmVudFBvc3RSYXcocmVxdWVzdFBhcmFtZXRlcnMsIGluaXRPdmVycmlkZXMpIHtcblx0XHRcdHJldHVybiBfX2F3YWl0ZXIkMyh0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcblx0XHRcdFx0Y29uc3QgcXVlcnlQYXJhbWV0ZXJzID0ge307XG5cdFx0XHRcdGNvbnN0IGhlYWRlclBhcmFtZXRlcnMgPSB7fTtcblx0XHRcdFx0aGVhZGVyUGFyYW1ldGVyc1tcIkNvbnRlbnQtVHlwZVwiXSA9IFwiYXBwbGljYXRpb24vanNvblwiO1xuXHRcdFx0XHRpZiAodGhpcy5jb25maWd1cmF0aW9uICYmIHRoaXMuY29uZmlndXJhdGlvbi5hY2Nlc3NUb2tlbikge1xuXHRcdFx0XHRcdGNvbnN0IHRva2VuID0gdGhpcy5jb25maWd1cmF0aW9uLmFjY2Vzc1Rva2VuO1xuXHRcdFx0XHRcdGNvbnN0IHRva2VuU3RyaW5nID0geWllbGQgdG9rZW4oXCJiZWFyZXJcIiwgW10pO1xuXHRcdFx0XHRcdGlmICh0b2tlblN0cmluZykgaGVhZGVyUGFyYW1ldGVyc1tcIkF1dGhvcml6YXRpb25cIl0gPSBgQmVhcmVyICR7dG9rZW5TdHJpbmd9YDtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCByZXNwb25zZSA9IHlpZWxkIHRoaXMucmVxdWVzdCh7XG5cdFx0XHRcdFx0cGF0aDogYC92MS9hbmFseXRpY3MvdHJhY2tfZXZlbnRgLFxuXHRcdFx0XHRcdG1ldGhvZDogXCJQT1NUXCIsXG5cdFx0XHRcdFx0aGVhZGVyczogaGVhZGVyUGFyYW1ldGVycyxcblx0XHRcdFx0XHRxdWVyeTogcXVlcnlQYXJhbWV0ZXJzLFxuXHRcdFx0XHRcdGJvZHk6ICgwLCBpbmRleF8xJDMuQW5hbHl0aWNzVHJhY2tFdmVudFJlcXVlc3RUb0pTT04pKHJlcXVlc3RQYXJhbWV0ZXJzW1wiQW5hbHl0aWNzVHJhY2tFdmVudFJlcXVlc3RcIl0pXG5cdFx0XHRcdH0sIGluaXRPdmVycmlkZXMpO1xuXHRcdFx0XHRyZXR1cm4gbmV3IHJ1bnRpbWUkMy5KU09OQXBpUmVzcG9uc2UocmVzcG9uc2UpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdC8qKlxuXHRcdCogR2V0IHRoZSBvcmdhbml6YXRpb25zIGNvbmZpZ1xuXHRcdCovXG5cdFx0djFBbmFseXRpY3NUcmFja0V2ZW50UG9zdCgpIHtcblx0XHRcdHJldHVybiBfX2F3YWl0ZXIkMyh0aGlzLCBhcmd1bWVudHMsIHZvaWQgMCwgZnVuY3Rpb24qIChyZXF1ZXN0UGFyYW1ldGVycyA9IHt9LCBpbml0T3ZlcnJpZGVzKSB7XG5cdFx0XHRcdHJldHVybiB5aWVsZCAoeWllbGQgdGhpcy52MUFuYWx5dGljc1RyYWNrRXZlbnRQb3N0UmF3KHJlcXVlc3RQYXJhbWV0ZXJzLCBpbml0T3ZlcnJpZGVzKSkudmFsdWUoKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHQvKipcblx0XHQqIFJlcG9ydCB0aGUgc2Vzc2lvbiBhcyBiZWluZyBhIHByb2JsZW1cblx0XHQqIFJlcG9ydCBTZXNzaW9uXG5cdFx0Ki9cblx0XHR2MUNoYXRzUmVwb3J0U2Vzc2lvbklkUG9zdFJhdyhyZXF1ZXN0UGFyYW1ldGVycywgaW5pdE92ZXJyaWRlcykge1xuXHRcdFx0cmV0dXJuIF9fYXdhaXRlciQzKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuXHRcdFx0XHRjb25zdCBxdWVyeVBhcmFtZXRlcnMgPSB7fTtcblx0XHRcdFx0Y29uc3QgaGVhZGVyUGFyYW1ldGVycyA9IHt9O1xuXHRcdFx0XHRoZWFkZXJQYXJhbWV0ZXJzW1wiQ29udGVudC1UeXBlXCJdID0gXCJhcHBsaWNhdGlvbi9qc29uXCI7XG5cdFx0XHRcdGlmICh0aGlzLmNvbmZpZ3VyYXRpb24gJiYgdGhpcy5jb25maWd1cmF0aW9uLmFjY2Vzc1Rva2VuKSB7XG5cdFx0XHRcdFx0Y29uc3QgdG9rZW4gPSB0aGlzLmNvbmZpZ3VyYXRpb24uYWNjZXNzVG9rZW47XG5cdFx0XHRcdFx0Y29uc3QgdG9rZW5TdHJpbmcgPSB5aWVsZCB0b2tlbihcImJlYXJlclwiLCBbXSk7XG5cdFx0XHRcdFx0aWYgKHRva2VuU3RyaW5nKSBoZWFkZXJQYXJhbWV0ZXJzW1wiQXV0aG9yaXphdGlvblwiXSA9IGBCZWFyZXIgJHt0b2tlblN0cmluZ31gO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IHJlc3BvbnNlID0geWllbGQgdGhpcy5yZXF1ZXN0KHtcblx0XHRcdFx0XHRwYXRoOiBgL3YxL2NoYXRzL3JlcG9ydGAsXG5cdFx0XHRcdFx0bWV0aG9kOiBcIlBPU1RcIixcblx0XHRcdFx0XHRoZWFkZXJzOiBoZWFkZXJQYXJhbWV0ZXJzLFxuXHRcdFx0XHRcdHF1ZXJ5OiBxdWVyeVBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0Ym9keTogKDAsIGluZGV4XzEkMy5SZXBvcnRTZXNzaW9uUmVxdWVzdFRvSlNPTikocmVxdWVzdFBhcmFtZXRlcnNbXCJSZXBvcnRTZXNzaW9uUmVxdWVzdFwiXSlcblx0XHRcdFx0fSwgaW5pdE92ZXJyaWRlcyk7XG5cdFx0XHRcdHJldHVybiBuZXcgcnVudGltZSQzLkpTT05BcGlSZXNwb25zZShyZXNwb25zZSk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0LyoqXG5cdFx0KiBSZXBvcnQgdGhlIHNlc3Npb24gYXMgYmVpbmcgYSBwcm9ibGVtXG5cdFx0KiBSZXBvcnQgU2Vzc2lvblxuXHRcdCovXG5cdFx0djFDaGF0c1JlcG9ydFNlc3Npb25JZFBvc3QoKSB7XG5cdFx0XHRyZXR1cm4gX19hd2FpdGVyJDModGhpcywgYXJndW1lbnRzLCB2b2lkIDAsIGZ1bmN0aW9uKiAocmVxdWVzdFBhcmFtZXRlcnMgPSB7fSwgaW5pdE92ZXJyaWRlcykge1xuXHRcdFx0XHRyZXR1cm4geWllbGQgKHlpZWxkIHRoaXMudjFDaGF0c1JlcG9ydFNlc3Npb25JZFBvc3RSYXcocmVxdWVzdFBhcmFtZXRlcnMsIGluaXRPdmVycmlkZXMpKS52YWx1ZSgpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdC8qKlxuXHRcdCogUG9zdCBhIHVzZXIgZXZlbnRcblx0XHQqL1xuXHRcdHYxRXZlbnRQb3N0UmF3KHJlcXVlc3RQYXJhbWV0ZXJzLCBpbml0T3ZlcnJpZGVzKSB7XG5cdFx0XHRyZXR1cm4gX19hd2FpdGVyJDModGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG5cdFx0XHRcdGNvbnN0IHF1ZXJ5UGFyYW1ldGVycyA9IHt9O1xuXHRcdFx0XHRjb25zdCBoZWFkZXJQYXJhbWV0ZXJzID0ge307XG5cdFx0XHRcdGhlYWRlclBhcmFtZXRlcnNbXCJDb250ZW50LVR5cGVcIl0gPSBcImFwcGxpY2F0aW9uL2pzb25cIjtcblx0XHRcdFx0aWYgKHRoaXMuY29uZmlndXJhdGlvbiAmJiB0aGlzLmNvbmZpZ3VyYXRpb24uYWNjZXNzVG9rZW4pIHtcblx0XHRcdFx0XHRjb25zdCB0b2tlbiA9IHRoaXMuY29uZmlndXJhdGlvbi5hY2Nlc3NUb2tlbjtcblx0XHRcdFx0XHRjb25zdCB0b2tlblN0cmluZyA9IHlpZWxkIHRva2VuKFwiYmVhcmVyXCIsIFtdKTtcblx0XHRcdFx0XHRpZiAodG9rZW5TdHJpbmcpIGhlYWRlclBhcmFtZXRlcnNbXCJBdXRob3JpemF0aW9uXCJdID0gYEJlYXJlciAke3Rva2VuU3RyaW5nfWA7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3QgcmVzcG9uc2UgPSB5aWVsZCB0aGlzLnJlcXVlc3Qoe1xuXHRcdFx0XHRcdHBhdGg6IGAvdjEvZXZlbnRgLFxuXHRcdFx0XHRcdG1ldGhvZDogXCJQT1NUXCIsXG5cdFx0XHRcdFx0aGVhZGVyczogaGVhZGVyUGFyYW1ldGVycyxcblx0XHRcdFx0XHRxdWVyeTogcXVlcnlQYXJhbWV0ZXJzLFxuXHRcdFx0XHRcdGJvZHk6ICgwLCBpbmRleF8xJDMuVXNlckV2ZW50VG9KU09OKShyZXF1ZXN0UGFyYW1ldGVyc1tcIlVzZXJFdmVudFwiXSlcblx0XHRcdFx0fSwgaW5pdE92ZXJyaWRlcyk7XG5cdFx0XHRcdHJldHVybiBuZXcgcnVudGltZSQzLkpTT05BcGlSZXNwb25zZShyZXNwb25zZSk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0LyoqXG5cdFx0KiBQb3N0IGEgdXNlciBldmVudFxuXHRcdCovXG5cdFx0djFFdmVudFBvc3QoKSB7XG5cdFx0XHRyZXR1cm4gX19hd2FpdGVyJDModGhpcywgYXJndW1lbnRzLCB2b2lkIDAsIGZ1bmN0aW9uKiAocmVxdWVzdFBhcmFtZXRlcnMgPSB7fSwgaW5pdE92ZXJyaWRlcykge1xuXHRcdFx0XHRyZXR1cm4geWllbGQgKHlpZWxkIHRoaXMudjFFdmVudFBvc3RSYXcocmVxdWVzdFBhcmFtZXRlcnMsIGluaXRPdmVycmlkZXMpKS52YWx1ZSgpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdC8qKlxuXHRcdCogR2V0IG1lc3NhZ2VzIGZvciBhbiBhY3RpdmUgY2hhdCBzZXNzaW9uLlxuXHRcdCovXG5cdFx0djFHZXRTZXNzaW9uTWVzc2FnZXNSYXcocmVxdWVzdFBhcmFtZXRlcnMsIGluaXRPdmVycmlkZXMpIHtcblx0XHRcdHJldHVybiBfX2F3YWl0ZXIkMyh0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcblx0XHRcdFx0aWYgKHJlcXVlc3RQYXJhbWV0ZXJzW1wib3JnX2lkXCJdID09IG51bGwpIHRocm93IG5ldyBydW50aW1lJDMuUmVxdWlyZWRFcnJvcihcIm9yZ19pZFwiLCBcIlJlcXVpcmVkIHBhcmFtZXRlciBcXFwib3JnX2lkXFxcIiB3YXMgbnVsbCBvciB1bmRlZmluZWQgd2hlbiBjYWxsaW5nIHYxR2V0U2Vzc2lvbk1lc3NhZ2VzKCkuXCIpO1xuXHRcdFx0XHRpZiAocmVxdWVzdFBhcmFtZXRlcnNbXCJ1c2VyX2lkXCJdID09IG51bGwpIHRocm93IG5ldyBydW50aW1lJDMuUmVxdWlyZWRFcnJvcihcInVzZXJfaWRcIiwgXCJSZXF1aXJlZCBwYXJhbWV0ZXIgXFxcInVzZXJfaWRcXFwiIHdhcyBudWxsIG9yIHVuZGVmaW5lZCB3aGVuIGNhbGxpbmcgdjFHZXRTZXNzaW9uTWVzc2FnZXMoKS5cIik7XG5cdFx0XHRcdGNvbnN0IHF1ZXJ5UGFyYW1ldGVycyA9IHt9O1xuXHRcdFx0XHRpZiAocmVxdWVzdFBhcmFtZXRlcnNbXCJvcmdfaWRcIl0gIT0gbnVsbCkgcXVlcnlQYXJhbWV0ZXJzW1wib3JnX2lkXCJdID0gcmVxdWVzdFBhcmFtZXRlcnNbXCJvcmdfaWRcIl07XG5cdFx0XHRcdGlmIChyZXF1ZXN0UGFyYW1ldGVyc1tcImNoYXRfaWRcIl0gIT0gbnVsbCkgcXVlcnlQYXJhbWV0ZXJzW1wiY2hhdF9pZFwiXSA9IHJlcXVlc3RQYXJhbWV0ZXJzW1wiY2hhdF9pZFwiXTtcblx0XHRcdFx0aWYgKHJlcXVlc3RQYXJhbWV0ZXJzW1widXNlcl9pZFwiXSAhPSBudWxsKSBxdWVyeVBhcmFtZXRlcnNbXCJ1c2VyX2lkXCJdID0gcmVxdWVzdFBhcmFtZXRlcnNbXCJ1c2VyX2lkXCJdO1xuXHRcdFx0XHRjb25zdCBoZWFkZXJQYXJhbWV0ZXJzID0ge307XG5cdFx0XHRcdGlmICh0aGlzLmNvbmZpZ3VyYXRpb24gJiYgdGhpcy5jb25maWd1cmF0aW9uLmFjY2Vzc1Rva2VuKSB7XG5cdFx0XHRcdFx0Y29uc3QgdG9rZW4gPSB0aGlzLmNvbmZpZ3VyYXRpb24uYWNjZXNzVG9rZW47XG5cdFx0XHRcdFx0Y29uc3QgdG9rZW5TdHJpbmcgPSB5aWVsZCB0b2tlbihcImJlYXJlclwiLCBbXSk7XG5cdFx0XHRcdFx0aWYgKHRva2VuU3RyaW5nKSBoZWFkZXJQYXJhbWV0ZXJzW1wiQXV0aG9yaXphdGlvblwiXSA9IGBCZWFyZXIgJHt0b2tlblN0cmluZ31gO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IHJlc3BvbnNlID0geWllbGQgdGhpcy5yZXF1ZXN0KHtcblx0XHRcdFx0XHRwYXRoOiBgL3YxL3Nlc3Npb24vbWVzc2FnZXNgLFxuXHRcdFx0XHRcdG1ldGhvZDogXCJHRVRcIixcblx0XHRcdFx0XHRoZWFkZXJzOiBoZWFkZXJQYXJhbWV0ZXJzLFxuXHRcdFx0XHRcdHF1ZXJ5OiBxdWVyeVBhcmFtZXRlcnNcblx0XHRcdFx0fSwgaW5pdE92ZXJyaWRlcyk7XG5cdFx0XHRcdHJldHVybiBuZXcgcnVudGltZSQzLkpTT05BcGlSZXNwb25zZShyZXNwb25zZSwgKGpzb25WYWx1ZSkgPT4gKDAsIGluZGV4XzEkMy5WMUdldFNlc3Npb25NZXNzYWdlczIwMFJlc3BvbnNlRnJvbUpTT04pKGpzb25WYWx1ZSkpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdC8qKlxuXHRcdCogR2V0IG1lc3NhZ2VzIGZvciBhbiBhY3RpdmUgY2hhdCBzZXNzaW9uLlxuXHRcdCovXG5cdFx0djFHZXRTZXNzaW9uTWVzc2FnZXMocmVxdWVzdFBhcmFtZXRlcnMsIGluaXRPdmVycmlkZXMpIHtcblx0XHRcdHJldHVybiBfX2F3YWl0ZXIkMyh0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcblx0XHRcdFx0cmV0dXJuIHlpZWxkICh5aWVsZCB0aGlzLnYxR2V0U2Vzc2lvbk1lc3NhZ2VzUmF3KHJlcXVlc3RQYXJhbWV0ZXJzLCBpbml0T3ZlcnJpZGVzKSkudmFsdWUoKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHQvKipcblx0XHQqIEdldCB0aGUgb3JnYW5pemF0aW9ucyBjb25maWdcblx0XHQqL1xuXHRcdHYxT3JnQ29uZmlnR2V0UmF3KHJlcXVlc3RQYXJhbWV0ZXJzLCBpbml0T3ZlcnJpZGVzKSB7XG5cdFx0XHRyZXR1cm4gX19hd2FpdGVyJDModGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG5cdFx0XHRcdGNvbnN0IHF1ZXJ5UGFyYW1ldGVycyA9IHt9O1xuXHRcdFx0XHRpZiAocmVxdWVzdFBhcmFtZXRlcnNbXCJuYW1lc3BhY2VcIl0gIT0gbnVsbCkgcXVlcnlQYXJhbWV0ZXJzW1wibmFtZXNwYWNlXCJdID0gcmVxdWVzdFBhcmFtZXRlcnNbXCJuYW1lc3BhY2VcIl07XG5cdFx0XHRcdGlmIChyZXF1ZXN0UGFyYW1ldGVyc1tcInNvdXJjZVwiXSAhPSBudWxsKSBxdWVyeVBhcmFtZXRlcnNbXCJzb3VyY2VcIl0gPSByZXF1ZXN0UGFyYW1ldGVyc1tcInNvdXJjZVwiXTtcblx0XHRcdFx0aWYgKHJlcXVlc3RQYXJhbWV0ZXJzW1widXNlcl9pZFwiXSAhPSBudWxsKSBxdWVyeVBhcmFtZXRlcnNbXCJ1c2VyX2lkXCJdID0gcmVxdWVzdFBhcmFtZXRlcnNbXCJ1c2VyX2lkXCJdO1xuXHRcdFx0XHRpZiAocmVxdWVzdFBhcmFtZXRlcnNbXCJpbmNsdWRlX2V4cGVyaW1lbnRzXCJdICE9IG51bGwpIHF1ZXJ5UGFyYW1ldGVyc1tcImluY2x1ZGVfZXhwZXJpbWVudHNcIl0gPSByZXF1ZXN0UGFyYW1ldGVyc1tcImluY2x1ZGVfZXhwZXJpbWVudHNcIl07XG5cdFx0XHRcdGlmIChyZXF1ZXN0UGFyYW1ldGVyc1tcImluY2x1ZGVfZmVhdHVyZV9nYXRlc1wiXSAhPSBudWxsKSBxdWVyeVBhcmFtZXRlcnNbXCJpbmNsdWRlX2ZlYXR1cmVfZ2F0ZXNcIl0gPSByZXF1ZXN0UGFyYW1ldGVyc1tcImluY2x1ZGVfZmVhdHVyZV9nYXRlc1wiXTtcblx0XHRcdFx0Y29uc3QgaGVhZGVyUGFyYW1ldGVycyA9IHt9O1xuXHRcdFx0XHRpZiAodGhpcy5jb25maWd1cmF0aW9uICYmIHRoaXMuY29uZmlndXJhdGlvbi5hY2Nlc3NUb2tlbikge1xuXHRcdFx0XHRcdGNvbnN0IHRva2VuID0gdGhpcy5jb25maWd1cmF0aW9uLmFjY2Vzc1Rva2VuO1xuXHRcdFx0XHRcdGNvbnN0IHRva2VuU3RyaW5nID0geWllbGQgdG9rZW4oXCJiZWFyZXJcIiwgW10pO1xuXHRcdFx0XHRcdGlmICh0b2tlblN0cmluZykgaGVhZGVyUGFyYW1ldGVyc1tcIkF1dGhvcml6YXRpb25cIl0gPSBgQmVhcmVyICR7dG9rZW5TdHJpbmd9YDtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCByZXNwb25zZSA9IHlpZWxkIHRoaXMucmVxdWVzdCh7XG5cdFx0XHRcdFx0cGF0aDogYC92MS9vcmcvY29uZmlnYCxcblx0XHRcdFx0XHRtZXRob2Q6IFwiR0VUXCIsXG5cdFx0XHRcdFx0aGVhZGVyczogaGVhZGVyUGFyYW1ldGVycyxcblx0XHRcdFx0XHRxdWVyeTogcXVlcnlQYXJhbWV0ZXJzXG5cdFx0XHRcdH0sIGluaXRPdmVycmlkZXMpO1xuXHRcdFx0XHRyZXR1cm4gbmV3IHJ1bnRpbWUkMy5KU09OQXBpUmVzcG9uc2UocmVzcG9uc2UsIChqc29uVmFsdWUpID0+ICgwLCBpbmRleF8xJDMuT3JnYW5pemF0aW9uQ29uZmlnUmVzdWx0c0Zyb21KU09OKShqc29uVmFsdWUpKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHQvKipcblx0XHQqIEdldCB0aGUgb3JnYW5pemF0aW9ucyBjb25maWdcblx0XHQqL1xuXHRcdHYxT3JnQ29uZmlnR2V0KCkge1xuXHRcdFx0cmV0dXJuIF9fYXdhaXRlciQzKHRoaXMsIGFyZ3VtZW50cywgdm9pZCAwLCBmdW5jdGlvbiogKHJlcXVlc3RQYXJhbWV0ZXJzID0ge30sIGluaXRPdmVycmlkZXMpIHtcblx0XHRcdFx0cmV0dXJuIHlpZWxkICh5aWVsZCB0aGlzLnYxT3JnQ29uZmlnR2V0UmF3KHJlcXVlc3RQYXJhbWV0ZXJzLCBpbml0T3ZlcnJpZGVzKSkudmFsdWUoKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHQvKipcblx0XHQqIEdldCB0aGUgb3JnYW5pemF0aW9uIGFuZCBpdHMgc2V0dGluZ3MgZ2l2ZW4gYW4gQVBJIGtleVxuXHRcdCovXG5cdFx0djFPcmdHZXRSYXcocmVxdWVzdFBhcmFtZXRlcnMsIGluaXRPdmVycmlkZXMpIHtcblx0XHRcdHJldHVybiBfX2F3YWl0ZXIkMyh0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcblx0XHRcdFx0aWYgKHJlcXVlc3RQYXJhbWV0ZXJzW1wia2V5XCJdID09IG51bGwpIHRocm93IG5ldyBydW50aW1lJDMuUmVxdWlyZWRFcnJvcihcImtleVwiLCBcIlJlcXVpcmVkIHBhcmFtZXRlciBcXFwia2V5XFxcIiB3YXMgbnVsbCBvciB1bmRlZmluZWQgd2hlbiBjYWxsaW5nIHYxT3JnR2V0KCkuXCIpO1xuXHRcdFx0XHRjb25zdCBxdWVyeVBhcmFtZXRlcnMgPSB7fTtcblx0XHRcdFx0aWYgKHJlcXVlc3RQYXJhbWV0ZXJzW1wia2V5XCJdICE9IG51bGwpIHF1ZXJ5UGFyYW1ldGVyc1tcImtleVwiXSA9IHJlcXVlc3RQYXJhbWV0ZXJzW1wia2V5XCJdO1xuXHRcdFx0XHRjb25zdCBoZWFkZXJQYXJhbWV0ZXJzID0ge307XG5cdFx0XHRcdGlmICh0aGlzLmNvbmZpZ3VyYXRpb24gJiYgdGhpcy5jb25maWd1cmF0aW9uLmFjY2Vzc1Rva2VuKSB7XG5cdFx0XHRcdFx0Y29uc3QgdG9rZW4gPSB0aGlzLmNvbmZpZ3VyYXRpb24uYWNjZXNzVG9rZW47XG5cdFx0XHRcdFx0Y29uc3QgdG9rZW5TdHJpbmcgPSB5aWVsZCB0b2tlbihcImJlYXJlclwiLCBbXSk7XG5cdFx0XHRcdFx0aWYgKHRva2VuU3RyaW5nKSBoZWFkZXJQYXJhbWV0ZXJzW1wiQXV0aG9yaXphdGlvblwiXSA9IGBCZWFyZXIgJHt0b2tlblN0cmluZ31gO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IHJlc3BvbnNlID0geWllbGQgdGhpcy5yZXF1ZXN0KHtcblx0XHRcdFx0XHRwYXRoOiBgL3YxL29yZ2AsXG5cdFx0XHRcdFx0bWV0aG9kOiBcIkdFVFwiLFxuXHRcdFx0XHRcdGhlYWRlcnM6IGhlYWRlclBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0cXVlcnk6IHF1ZXJ5UGFyYW1ldGVyc1xuXHRcdFx0XHR9LCBpbml0T3ZlcnJpZGVzKTtcblx0XHRcdFx0cmV0dXJuIG5ldyBydW50aW1lJDMuSlNPTkFwaVJlc3BvbnNlKHJlc3BvbnNlLCAoanNvblZhbHVlKSA9PiAoMCwgaW5kZXhfMSQzLk9yZ2FuaXphdGlvblNldHRpbmdzRnJvbUpTT04pKGpzb25WYWx1ZSkpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdC8qKlxuXHRcdCogR2V0IHRoZSBvcmdhbml6YXRpb24gYW5kIGl0cyBzZXR0aW5ncyBnaXZlbiBhbiBBUEkga2V5XG5cdFx0Ki9cblx0XHR2MU9yZ0dldChyZXF1ZXN0UGFyYW1ldGVycywgaW5pdE92ZXJyaWRlcykge1xuXHRcdFx0cmV0dXJuIF9fYXdhaXRlciQzKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuXHRcdFx0XHRyZXR1cm4geWllbGQgKHlpZWxkIHRoaXMudjFPcmdHZXRSYXcocmVxdWVzdFBhcmFtZXRlcnMsIGluaXRPdmVycmlkZXMpKS52YWx1ZSgpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdC8qKlxuXHRcdCogRXhwbGFpbiB3aHkgYSBwcm9kdWN0IHdhcyByZWNvbW1lbmRlZC5cblx0XHQqL1xuXHRcdHYxU2VhcmNoRXhwbGFpbkdldFJhdyhyZXF1ZXN0UGFyYW1ldGVycywgaW5pdE92ZXJyaWRlcykge1xuXHRcdFx0cmV0dXJuIF9fYXdhaXRlciQzKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuXHRcdFx0XHRpZiAocmVxdWVzdFBhcmFtZXRlcnNbXCJvcmdfaWRcIl0gPT0gbnVsbCkgdGhyb3cgbmV3IHJ1bnRpbWUkMy5SZXF1aXJlZEVycm9yKFwib3JnX2lkXCIsIFwiUmVxdWlyZWQgcGFyYW1ldGVyIFxcXCJvcmdfaWRcXFwiIHdhcyBudWxsIG9yIHVuZGVmaW5lZCB3aGVuIGNhbGxpbmcgdjFTZWFyY2hFeHBsYWluR2V0KCkuXCIpO1xuXHRcdFx0XHRpZiAocmVxdWVzdFBhcmFtZXRlcnNbXCJjaGF0X2lkXCJdID09IG51bGwpIHRocm93IG5ldyBydW50aW1lJDMuUmVxdWlyZWRFcnJvcihcImNoYXRfaWRcIiwgXCJSZXF1aXJlZCBwYXJhbWV0ZXIgXFxcImNoYXRfaWRcXFwiIHdhcyBudWxsIG9yIHVuZGVmaW5lZCB3aGVuIGNhbGxpbmcgdjFTZWFyY2hFeHBsYWluR2V0KCkuXCIpO1xuXHRcdFx0XHRpZiAocmVxdWVzdFBhcmFtZXRlcnNbXCJwcm9kdWN0X2lkXCJdID09IG51bGwpIHRocm93IG5ldyBydW50aW1lJDMuUmVxdWlyZWRFcnJvcihcInByb2R1Y3RfaWRcIiwgXCJSZXF1aXJlZCBwYXJhbWV0ZXIgXFxcInByb2R1Y3RfaWRcXFwiIHdhcyBudWxsIG9yIHVuZGVmaW5lZCB3aGVuIGNhbGxpbmcgdjFTZWFyY2hFeHBsYWluR2V0KCkuXCIpO1xuXHRcdFx0XHRjb25zdCBxdWVyeVBhcmFtZXRlcnMgPSB7fTtcblx0XHRcdFx0aWYgKHJlcXVlc3RQYXJhbWV0ZXJzW1wib3JnX2lkXCJdICE9IG51bGwpIHF1ZXJ5UGFyYW1ldGVyc1tcIm9yZ19pZFwiXSA9IHJlcXVlc3RQYXJhbWV0ZXJzW1wib3JnX2lkXCJdO1xuXHRcdFx0XHRpZiAocmVxdWVzdFBhcmFtZXRlcnNbXCJjaGF0X2lkXCJdICE9IG51bGwpIHF1ZXJ5UGFyYW1ldGVyc1tcImNoYXRfaWRcIl0gPSByZXF1ZXN0UGFyYW1ldGVyc1tcImNoYXRfaWRcIl07XG5cdFx0XHRcdGlmIChyZXF1ZXN0UGFyYW1ldGVyc1tcInByb2R1Y3RfaWRcIl0gIT0gbnVsbCkgcXVlcnlQYXJhbWV0ZXJzW1wicHJvZHVjdF9pZFwiXSA9IHJlcXVlc3RQYXJhbWV0ZXJzW1wicHJvZHVjdF9pZFwiXTtcblx0XHRcdFx0Y29uc3QgaGVhZGVyUGFyYW1ldGVycyA9IHt9O1xuXHRcdFx0XHRpZiAodGhpcy5jb25maWd1cmF0aW9uICYmIHRoaXMuY29uZmlndXJhdGlvbi5hY2Nlc3NUb2tlbikge1xuXHRcdFx0XHRcdGNvbnN0IHRva2VuID0gdGhpcy5jb25maWd1cmF0aW9uLmFjY2Vzc1Rva2VuO1xuXHRcdFx0XHRcdGNvbnN0IHRva2VuU3RyaW5nID0geWllbGQgdG9rZW4oXCJiZWFyZXJcIiwgW10pO1xuXHRcdFx0XHRcdGlmICh0b2tlblN0cmluZykgaGVhZGVyUGFyYW1ldGVyc1tcIkF1dGhvcml6YXRpb25cIl0gPSBgQmVhcmVyICR7dG9rZW5TdHJpbmd9YDtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCByZXNwb25zZSA9IHlpZWxkIHRoaXMucmVxdWVzdCh7XG5cdFx0XHRcdFx0cGF0aDogYC92MS9zZWFyY2gvZXhwbGFpbmAsXG5cdFx0XHRcdFx0bWV0aG9kOiBcIkdFVFwiLFxuXHRcdFx0XHRcdGhlYWRlcnM6IGhlYWRlclBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0cXVlcnk6IHF1ZXJ5UGFyYW1ldGVyc1xuXHRcdFx0XHR9LCBpbml0T3ZlcnJpZGVzKTtcblx0XHRcdFx0cmV0dXJuIG5ldyBydW50aW1lJDMuSlNPTkFwaVJlc3BvbnNlKHJlc3BvbnNlLCAoanNvblZhbHVlKSA9PiAoMCwgaW5kZXhfMSQzLlYxU2VhcmNoRXhwbGFpbkdldDIwMFJlc3BvbnNlRnJvbUpTT04pKGpzb25WYWx1ZSkpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdC8qKlxuXHRcdCogRXhwbGFpbiB3aHkgYSBwcm9kdWN0IHdhcyByZWNvbW1lbmRlZC5cblx0XHQqL1xuXHRcdHYxU2VhcmNoRXhwbGFpbkdldChyZXF1ZXN0UGFyYW1ldGVycywgaW5pdE92ZXJyaWRlcykge1xuXHRcdFx0cmV0dXJuIF9fYXdhaXRlciQzKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuXHRcdFx0XHRyZXR1cm4geWllbGQgKHlpZWxkIHRoaXMudjFTZWFyY2hFeHBsYWluR2V0UmF3KHJlcXVlc3RQYXJhbWV0ZXJzLCBpbml0T3ZlcnJpZGVzKSkudmFsdWUoKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0fTtcblx0ZXhwb3J0cy5EZWZhdWx0QXBpID0gRGVmYXVsdEFwaTtcblx0LyoqXG5cdCogQGV4cG9ydFxuXHQqIEBlbnVtIHtzdHJpbmd9XG5cdCovXG5cdHZhciBWMU9yZ0NvbmZpZ0dldFNvdXJjZUVudW07XG5cdChmdW5jdGlvbihWMU9yZ0NvbmZpZ0dldFNvdXJjZUVudW0kMSkge1xuXHRcdFYxT3JnQ29uZmlnR2V0U291cmNlRW51bSQxW1wiRm9ya1wiXSA9IFwiZm9ya1wiO1xuXHRcdFYxT3JnQ29uZmlnR2V0U291cmNlRW51bSQxW1wiUGxheWdyb3VuZFwiXSA9IFwicGxheWdyb3VuZFwiO1xuXHRcdFYxT3JnQ29uZmlnR2V0U291cmNlRW51bSQxW1wiQXBwXCJdID0gXCJhcHBcIjtcblx0XHRWMU9yZ0NvbmZpZ0dldFNvdXJjZUVudW0kMVtcIlRlc3RcIl0gPSBcInRlc3RcIjtcblx0fSkoVjFPcmdDb25maWdHZXRTb3VyY2VFbnVtIHx8IChleHBvcnRzLlYxT3JnQ29uZmlnR2V0U291cmNlRW51bSA9IFYxT3JnQ29uZmlnR2V0U291cmNlRW51bSA9IHt9KSk7XG59KSB9KTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L2FwaXMvSW5mZXJlbmNlQXBpLmpzXG52YXIgcmVxdWlyZV9JbmZlcmVuY2VBcGkgPSAvKiBAX19QVVJFX18gKi8gX19jb21tb25KUyh7IFwiLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L2FwaXMvSW5mZXJlbmNlQXBpLmpzXCI6ICgoZXhwb3J0cykgPT4ge1xuXHQvKipcblx0KiBDb21tZXJjZVxuXHQqIE5vIGRlc2NyaXB0aW9uIHByb3ZpZGVkIChnZW5lcmF0ZWQgYnkgT3BlbmFwaSBHZW5lcmF0b3IgaHR0cHM6Ly9naXRodWIuY29tL29wZW5hcGl0b29scy9vcGVuYXBpLWdlbmVyYXRvcilcblx0KlxuXHQqIFRoZSB2ZXJzaW9uIG9mIHRoZSBPcGVuQVBJIGRvY3VtZW50OiAxLjEuMFxuXHQqXG5cdCpcblx0KiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IE9wZW5BUEkgR2VuZXJhdG9yIChodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2gpLlxuXHQqIGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaFxuXHQqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cblx0Ki9cblx0dmFyIF9fYXdhaXRlciQyID0gZXhwb3J0cyAmJiBleHBvcnRzLl9fYXdhaXRlciB8fCBmdW5jdGlvbih0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcblx0XHRmdW5jdGlvbiBhZG9wdCh2YWx1ZSkge1xuXHRcdFx0cmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24ocmVzb2x2ZSkge1xuXHRcdFx0XHRyZXNvbHZlKHZhbHVlKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHRyZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuXHRcdFx0ZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7XG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0c3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpO1xuXHRcdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdFx0cmVqZWN0KGUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkge1xuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTtcblx0XHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRcdHJlamVjdChlKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0ZnVuY3Rpb24gc3RlcChyZXN1bHQpIHtcblx0XHRcdFx0cmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7XG5cdFx0XHR9XG5cdFx0XHRzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG5cdFx0fSk7XG5cdH07XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcblx0ZXhwb3J0cy5JbmZlcmVuY2VBcGkgPSB2b2lkIDA7XG5cdGNvbnN0IHJ1bnRpbWUkMiA9IHJlcXVpcmVfcnVudGltZSgpO1xuXHRjb25zdCBpbmRleF8xJDIgPSByZXF1aXJlX21vZGVscygpO1xuXHQvKipcblx0KlxuXHQqL1xuXHR2YXIgSW5mZXJlbmNlQXBpID0gY2xhc3MgZXh0ZW5kcyBydW50aW1lJDIuQmFzZUFQSSB7XG5cdFx0LyoqXG5cdFx0KiBSZXNwb25zZSBmb3IgYSB1c2VyIGludGVyYWN0aW9uXG5cdFx0Ki9cblx0XHR2MU5leHRSZXNwb25zZXNQb3N0UmF3KHJlcXVlc3RQYXJhbWV0ZXJzLCBpbml0T3ZlcnJpZGVzKSB7XG5cdFx0XHRyZXR1cm4gX19hd2FpdGVyJDIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG5cdFx0XHRcdGNvbnN0IHF1ZXJ5UGFyYW1ldGVycyA9IHt9O1xuXHRcdFx0XHRjb25zdCBoZWFkZXJQYXJhbWV0ZXJzID0ge307XG5cdFx0XHRcdGhlYWRlclBhcmFtZXRlcnNbXCJDb250ZW50LVR5cGVcIl0gPSBcImFwcGxpY2F0aW9uL2pzb25cIjtcblx0XHRcdFx0aWYgKHRoaXMuY29uZmlndXJhdGlvbiAmJiB0aGlzLmNvbmZpZ3VyYXRpb24uYWNjZXNzVG9rZW4pIHtcblx0XHRcdFx0XHRjb25zdCB0b2tlbiA9IHRoaXMuY29uZmlndXJhdGlvbi5hY2Nlc3NUb2tlbjtcblx0XHRcdFx0XHRjb25zdCB0b2tlblN0cmluZyA9IHlpZWxkIHRva2VuKFwiYmVhcmVyXCIsIFtdKTtcblx0XHRcdFx0XHRpZiAodG9rZW5TdHJpbmcpIGhlYWRlclBhcmFtZXRlcnNbXCJBdXRob3JpemF0aW9uXCJdID0gYEJlYXJlciAke3Rva2VuU3RyaW5nfWA7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3QgcmVzcG9uc2UgPSB5aWVsZCB0aGlzLnJlcXVlc3Qoe1xuXHRcdFx0XHRcdHBhdGg6IGAvdjEvbmV4dF9yZXNwb25zZXNgLFxuXHRcdFx0XHRcdG1ldGhvZDogXCJQT1NUXCIsXG5cdFx0XHRcdFx0aGVhZGVyczogaGVhZGVyUGFyYW1ldGVycyxcblx0XHRcdFx0XHRxdWVyeTogcXVlcnlQYXJhbWV0ZXJzLFxuXHRcdFx0XHRcdGJvZHk6ICgwLCBpbmRleF8xJDIuTmV4dE1lc3NhZ2VSZXF1ZXN0VG9KU09OKShyZXF1ZXN0UGFyYW1ldGVyc1tcIk5leHRNZXNzYWdlUmVxdWVzdFwiXSlcblx0XHRcdFx0fSwgaW5pdE92ZXJyaWRlcyk7XG5cdFx0XHRcdHJldHVybiBuZXcgcnVudGltZSQyLkpTT05BcGlSZXNwb25zZShyZXNwb25zZSwgKGpzb25WYWx1ZSkgPT4ganNvblZhbHVlLm1hcChpbmRleF8xJDIuUmVzcG9uc2VGcm9tSlNPTikpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdC8qKlxuXHRcdCogUmVzcG9uc2UgZm9yIGEgdXNlciBpbnRlcmFjdGlvblxuXHRcdCovXG5cdFx0djFOZXh0UmVzcG9uc2VzUG9zdCgpIHtcblx0XHRcdHJldHVybiBfX2F3YWl0ZXIkMih0aGlzLCBhcmd1bWVudHMsIHZvaWQgMCwgZnVuY3Rpb24qIChyZXF1ZXN0UGFyYW1ldGVycyA9IHt9LCBpbml0T3ZlcnJpZGVzKSB7XG5cdFx0XHRcdHJldHVybiB5aWVsZCAoeWllbGQgdGhpcy52MU5leHRSZXNwb25zZXNQb3N0UmF3KHJlcXVlc3RQYXJhbWV0ZXJzLCBpbml0T3ZlcnJpZGVzKSkudmFsdWUoKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHQvKipcblx0XHQqIFN1Z2dlc3Rpb25zXG5cdFx0Ki9cblx0XHR2MU5leHRTdWdnZXN0aW9uc1Bvc3RSYXcocmVxdWVzdFBhcmFtZXRlcnMsIGluaXRPdmVycmlkZXMpIHtcblx0XHRcdHJldHVybiBfX2F3YWl0ZXIkMih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcblx0XHRcdFx0Y29uc3QgcXVlcnlQYXJhbWV0ZXJzID0ge307XG5cdFx0XHRcdGNvbnN0IGhlYWRlclBhcmFtZXRlcnMgPSB7fTtcblx0XHRcdFx0aGVhZGVyUGFyYW1ldGVyc1tcIkNvbnRlbnQtVHlwZVwiXSA9IFwiYXBwbGljYXRpb24vanNvblwiO1xuXHRcdFx0XHRpZiAodGhpcy5jb25maWd1cmF0aW9uICYmIHRoaXMuY29uZmlndXJhdGlvbi5hY2Nlc3NUb2tlbikge1xuXHRcdFx0XHRcdGNvbnN0IHRva2VuID0gdGhpcy5jb25maWd1cmF0aW9uLmFjY2Vzc1Rva2VuO1xuXHRcdFx0XHRcdGNvbnN0IHRva2VuU3RyaW5nID0geWllbGQgdG9rZW4oXCJiZWFyZXJcIiwgW10pO1xuXHRcdFx0XHRcdGlmICh0b2tlblN0cmluZykgaGVhZGVyUGFyYW1ldGVyc1tcIkF1dGhvcml6YXRpb25cIl0gPSBgQmVhcmVyICR7dG9rZW5TdHJpbmd9YDtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCByZXNwb25zZSA9IHlpZWxkIHRoaXMucmVxdWVzdCh7XG5cdFx0XHRcdFx0cGF0aDogYC92MS9uZXh0X3N1Z2dlc3Rpb25zYCxcblx0XHRcdFx0XHRtZXRob2Q6IFwiUE9TVFwiLFxuXHRcdFx0XHRcdGhlYWRlcnM6IGhlYWRlclBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0cXVlcnk6IHF1ZXJ5UGFyYW1ldGVycyxcblx0XHRcdFx0XHRib2R5OiAoMCwgaW5kZXhfMSQyLk5leHRNZXNzYWdlUmVxdWVzdFRvSlNPTikocmVxdWVzdFBhcmFtZXRlcnNbXCJOZXh0TWVzc2FnZVJlcXVlc3RcIl0pXG5cdFx0XHRcdH0sIGluaXRPdmVycmlkZXMpO1xuXHRcdFx0XHRyZXR1cm4gbmV3IHJ1bnRpbWUkMi5KU09OQXBpUmVzcG9uc2UocmVzcG9uc2UsIChqc29uVmFsdWUpID0+IGpzb25WYWx1ZS5tYXAoaW5kZXhfMSQyLlN1Z2dlc3Rpb25Gcm9tSlNPTikpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdC8qKlxuXHRcdCogU3VnZ2VzdGlvbnNcblx0XHQqL1xuXHRcdHYxTmV4dFN1Z2dlc3Rpb25zUG9zdCgpIHtcblx0XHRcdHJldHVybiBfX2F3YWl0ZXIkMih0aGlzLCBhcmd1bWVudHMsIHZvaWQgMCwgZnVuY3Rpb24qIChyZXF1ZXN0UGFyYW1ldGVycyA9IHt9LCBpbml0T3ZlcnJpZGVzKSB7XG5cdFx0XHRcdHJldHVybiB5aWVsZCAoeWllbGQgdGhpcy52MU5leHRTdWdnZXN0aW9uc1Bvc3RSYXcocmVxdWVzdFBhcmFtZXRlcnMsIGluaXRPdmVycmlkZXMpKS52YWx1ZSgpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdC8qKlxuXHRcdCogQ2hlY2sgd2hldGhlciB0aGUgZXZlbnQgaXMgc3VwcG9ydGVkXG5cdFx0Ki9cblx0XHR2MVN1cHBvcnRlZEV2ZW50UG9zdFJhdyhyZXF1ZXN0UGFyYW1ldGVycywgaW5pdE92ZXJyaWRlcykge1xuXHRcdFx0cmV0dXJuIF9fYXdhaXRlciQyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuXHRcdFx0XHRjb25zdCBxdWVyeVBhcmFtZXRlcnMgPSB7fTtcblx0XHRcdFx0Y29uc3QgaGVhZGVyUGFyYW1ldGVycyA9IHt9O1xuXHRcdFx0XHRoZWFkZXJQYXJhbWV0ZXJzW1wiQ29udGVudC1UeXBlXCJdID0gXCJhcHBsaWNhdGlvbi9qc29uXCI7XG5cdFx0XHRcdGlmICh0aGlzLmNvbmZpZ3VyYXRpb24gJiYgdGhpcy5jb25maWd1cmF0aW9uLmFjY2Vzc1Rva2VuKSB7XG5cdFx0XHRcdFx0Y29uc3QgdG9rZW4gPSB0aGlzLmNvbmZpZ3VyYXRpb24uYWNjZXNzVG9rZW47XG5cdFx0XHRcdFx0Y29uc3QgdG9rZW5TdHJpbmcgPSB5aWVsZCB0b2tlbihcImJlYXJlclwiLCBbXSk7XG5cdFx0XHRcdFx0aWYgKHRva2VuU3RyaW5nKSBoZWFkZXJQYXJhbWV0ZXJzW1wiQXV0aG9yaXphdGlvblwiXSA9IGBCZWFyZXIgJHt0b2tlblN0cmluZ31gO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IHJlc3BvbnNlID0geWllbGQgdGhpcy5yZXF1ZXN0KHtcblx0XHRcdFx0XHRwYXRoOiBgL3YxL3N1cHBvcnRlZF9ldmVudGAsXG5cdFx0XHRcdFx0bWV0aG9kOiBcIlBPU1RcIixcblx0XHRcdFx0XHRoZWFkZXJzOiBoZWFkZXJQYXJhbWV0ZXJzLFxuXHRcdFx0XHRcdHF1ZXJ5OiBxdWVyeVBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0Ym9keTogKDAsIGluZGV4XzEkMi5TdXBwb3J0ZWRFdmVudFJlcXVlc3RUb0pTT04pKHJlcXVlc3RQYXJhbWV0ZXJzW1wiU3VwcG9ydGVkRXZlbnRSZXF1ZXN0XCJdKVxuXHRcdFx0XHR9LCBpbml0T3ZlcnJpZGVzKTtcblx0XHRcdFx0cmV0dXJuIG5ldyBydW50aW1lJDIuSlNPTkFwaVJlc3BvbnNlKHJlc3BvbnNlLCAoanNvblZhbHVlKSA9PiAoMCwgaW5kZXhfMSQyLlN1cHBvcnRlZEV2ZW50UmVzcG9uc2VGcm9tSlNPTikoanNvblZhbHVlKSk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0LyoqXG5cdFx0KiBDaGVjayB3aGV0aGVyIHRoZSBldmVudCBpcyBzdXBwb3J0ZWRcblx0XHQqL1xuXHRcdHYxU3VwcG9ydGVkRXZlbnRQb3N0KCkge1xuXHRcdFx0cmV0dXJuIF9fYXdhaXRlciQyKHRoaXMsIGFyZ3VtZW50cywgdm9pZCAwLCBmdW5jdGlvbiogKHJlcXVlc3RQYXJhbWV0ZXJzID0ge30sIGluaXRPdmVycmlkZXMpIHtcblx0XHRcdFx0cmV0dXJuIHlpZWxkICh5aWVsZCB0aGlzLnYxU3VwcG9ydGVkRXZlbnRQb3N0UmF3KHJlcXVlc3RQYXJhbWV0ZXJzLCBpbml0T3ZlcnJpZGVzKSkudmFsdWUoKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHQvKipcblx0XHQqIFJlc29sdmUgYSBVUkwgdG8gYSBwYWdlIHR5cGUgYW5kIGdldCBjb25maWd1cmF0aW9uXG5cdFx0Ki9cblx0XHR2MVVybFJlc29sdmluZ1Bvc3RSYXcocmVxdWVzdFBhcmFtZXRlcnMsIGluaXRPdmVycmlkZXMpIHtcblx0XHRcdHJldHVybiBfX2F3YWl0ZXIkMih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcblx0XHRcdFx0Y29uc3QgcXVlcnlQYXJhbWV0ZXJzID0ge307XG5cdFx0XHRcdGNvbnN0IGhlYWRlclBhcmFtZXRlcnMgPSB7fTtcblx0XHRcdFx0aGVhZGVyUGFyYW1ldGVyc1tcIkNvbnRlbnQtVHlwZVwiXSA9IFwiYXBwbGljYXRpb24vanNvblwiO1xuXHRcdFx0XHRpZiAodGhpcy5jb25maWd1cmF0aW9uICYmIHRoaXMuY29uZmlndXJhdGlvbi5hY2Nlc3NUb2tlbikge1xuXHRcdFx0XHRcdGNvbnN0IHRva2VuID0gdGhpcy5jb25maWd1cmF0aW9uLmFjY2Vzc1Rva2VuO1xuXHRcdFx0XHRcdGNvbnN0IHRva2VuU3RyaW5nID0geWllbGQgdG9rZW4oXCJiZWFyZXJcIiwgW10pO1xuXHRcdFx0XHRcdGlmICh0b2tlblN0cmluZykgaGVhZGVyUGFyYW1ldGVyc1tcIkF1dGhvcml6YXRpb25cIl0gPSBgQmVhcmVyICR7dG9rZW5TdHJpbmd9YDtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCByZXNwb25zZSA9IHlpZWxkIHRoaXMucmVxdWVzdCh7XG5cdFx0XHRcdFx0cGF0aDogYC92MS91cmxfcmVzb2x2aW5nYCxcblx0XHRcdFx0XHRtZXRob2Q6IFwiUE9TVFwiLFxuXHRcdFx0XHRcdGhlYWRlcnM6IGhlYWRlclBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0cXVlcnk6IHF1ZXJ5UGFyYW1ldGVycyxcblx0XHRcdFx0XHRib2R5OiAoMCwgaW5kZXhfMSQyLlVybFJlc29sdmluZ1JlcXVlc3RUb0pTT04pKHJlcXVlc3RQYXJhbWV0ZXJzW1wiVXJsUmVzb2x2aW5nUmVxdWVzdFwiXSlcblx0XHRcdFx0fSwgaW5pdE92ZXJyaWRlcyk7XG5cdFx0XHRcdHJldHVybiBuZXcgcnVudGltZSQyLkpTT05BcGlSZXNwb25zZShyZXNwb25zZSwgKGpzb25WYWx1ZSkgPT4gKDAsIGluZGV4XzEkMi5VcmxSZXNvbHZpbmdSZXNwb25zZUZyb21KU09OKShqc29uVmFsdWUpKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHQvKipcblx0XHQqIFJlc29sdmUgYSBVUkwgdG8gYSBwYWdlIHR5cGUgYW5kIGdldCBjb25maWd1cmF0aW9uXG5cdFx0Ki9cblx0XHR2MVVybFJlc29sdmluZ1Bvc3QoKSB7XG5cdFx0XHRyZXR1cm4gX19hd2FpdGVyJDIodGhpcywgYXJndW1lbnRzLCB2b2lkIDAsIGZ1bmN0aW9uKiAocmVxdWVzdFBhcmFtZXRlcnMgPSB7fSwgaW5pdE92ZXJyaWRlcykge1xuXHRcdFx0XHRyZXR1cm4geWllbGQgKHlpZWxkIHRoaXMudjFVcmxSZXNvbHZpbmdQb3N0UmF3KHJlcXVlc3RQYXJhbWV0ZXJzLCBpbml0T3ZlcnJpZGVzKSkudmFsdWUoKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0fTtcblx0ZXhwb3J0cy5JbmZlcmVuY2VBcGkgPSBJbmZlcmVuY2VBcGk7XG59KSB9KTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L2FwaXMvUHJvZHVjdHNBcGkuanNcbnZhciByZXF1aXJlX1Byb2R1Y3RzQXBpID0gLyogQF9fUFVSRV9fICovIF9fY29tbW9uSlMoeyBcIi4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9hcGlzL1Byb2R1Y3RzQXBpLmpzXCI6ICgoZXhwb3J0cykgPT4ge1xuXHQvKipcblx0KiBDb21tZXJjZVxuXHQqIE5vIGRlc2NyaXB0aW9uIHByb3ZpZGVkIChnZW5lcmF0ZWQgYnkgT3BlbmFwaSBHZW5lcmF0b3IgaHR0cHM6Ly9naXRodWIuY29tL29wZW5hcGl0b29scy9vcGVuYXBpLWdlbmVyYXRvcilcblx0KlxuXHQqIFRoZSB2ZXJzaW9uIG9mIHRoZSBPcGVuQVBJIGRvY3VtZW50OiAxLjEuMFxuXHQqXG5cdCpcblx0KiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IE9wZW5BUEkgR2VuZXJhdG9yIChodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2gpLlxuXHQqIGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaFxuXHQqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cblx0Ki9cblx0dmFyIF9fYXdhaXRlciQxID0gZXhwb3J0cyAmJiBleHBvcnRzLl9fYXdhaXRlciB8fCBmdW5jdGlvbih0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcblx0XHRmdW5jdGlvbiBhZG9wdCh2YWx1ZSkge1xuXHRcdFx0cmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24ocmVzb2x2ZSkge1xuXHRcdFx0XHRyZXNvbHZlKHZhbHVlKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHRyZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuXHRcdFx0ZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7XG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0c3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpO1xuXHRcdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdFx0cmVqZWN0KGUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkge1xuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTtcblx0XHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRcdHJlamVjdChlKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0ZnVuY3Rpb24gc3RlcChyZXN1bHQpIHtcblx0XHRcdFx0cmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7XG5cdFx0XHR9XG5cdFx0XHRzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG5cdFx0fSk7XG5cdH07XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcblx0ZXhwb3J0cy5Qcm9kdWN0c0FwaSA9IHZvaWQgMDtcblx0Y29uc3QgcnVudGltZSQxID0gcmVxdWlyZV9ydW50aW1lKCk7XG5cdGNvbnN0IGluZGV4XzEkMSA9IHJlcXVpcmVfbW9kZWxzKCk7XG5cdC8qKlxuXHQqXG5cdCovXG5cdHZhciBQcm9kdWN0c0FwaSA9IGNsYXNzIGV4dGVuZHMgcnVudGltZSQxLkJhc2VBUEkge1xuXHRcdC8qKlxuXHRcdCogUmV0cmlldmUgcHJvZHVjdHNcblx0XHQqL1xuXHRcdHYxUHJvZHVjdHNSZXRyaWV2ZVBvc3RSYXcocmVxdWVzdFBhcmFtZXRlcnMsIGluaXRPdmVycmlkZXMpIHtcblx0XHRcdHJldHVybiBfX2F3YWl0ZXIkMSh0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcblx0XHRcdFx0Y29uc3QgcXVlcnlQYXJhbWV0ZXJzID0ge307XG5cdFx0XHRcdGNvbnN0IGhlYWRlclBhcmFtZXRlcnMgPSB7fTtcblx0XHRcdFx0aGVhZGVyUGFyYW1ldGVyc1tcIkNvbnRlbnQtVHlwZVwiXSA9IFwiYXBwbGljYXRpb24vanNvblwiO1xuXHRcdFx0XHRpZiAodGhpcy5jb25maWd1cmF0aW9uICYmIHRoaXMuY29uZmlndXJhdGlvbi5hY2Nlc3NUb2tlbikge1xuXHRcdFx0XHRcdGNvbnN0IHRva2VuID0gdGhpcy5jb25maWd1cmF0aW9uLmFjY2Vzc1Rva2VuO1xuXHRcdFx0XHRcdGNvbnN0IHRva2VuU3RyaW5nID0geWllbGQgdG9rZW4oXCJiZWFyZXJcIiwgW10pO1xuXHRcdFx0XHRcdGlmICh0b2tlblN0cmluZykgaGVhZGVyUGFyYW1ldGVyc1tcIkF1dGhvcml6YXRpb25cIl0gPSBgQmVhcmVyICR7dG9rZW5TdHJpbmd9YDtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCByZXNwb25zZSA9IHlpZWxkIHRoaXMucmVxdWVzdCh7XG5cdFx0XHRcdFx0cGF0aDogYC92MS9wcm9kdWN0cy9yZXRyaWV2ZWAsXG5cdFx0XHRcdFx0bWV0aG9kOiBcIlBPU1RcIixcblx0XHRcdFx0XHRoZWFkZXJzOiBoZWFkZXJQYXJhbWV0ZXJzLFxuXHRcdFx0XHRcdHF1ZXJ5OiBxdWVyeVBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0Ym9keTogKDAsIGluZGV4XzEkMS5Qcm9kdWN0UmV0cmlldmFsUmVxdWVzdFRvSlNPTikocmVxdWVzdFBhcmFtZXRlcnNbXCJQcm9kdWN0UmV0cmlldmFsUmVxdWVzdFwiXSlcblx0XHRcdFx0fSwgaW5pdE92ZXJyaWRlcyk7XG5cdFx0XHRcdHJldHVybiBuZXcgcnVudGltZSQxLkpTT05BcGlSZXNwb25zZShyZXNwb25zZSwgKGpzb25WYWx1ZSkgPT4gKDAsIGluZGV4XzEkMS5Qcm9kdWN0UmV0cmlldmFsUmVzcG9uc2VGcm9tSlNPTikoanNvblZhbHVlKSk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0LyoqXG5cdFx0KiBSZXRyaWV2ZSBwcm9kdWN0c1xuXHRcdCovXG5cdFx0djFQcm9kdWN0c1JldHJpZXZlUG9zdCgpIHtcblx0XHRcdHJldHVybiBfX2F3YWl0ZXIkMSh0aGlzLCBhcmd1bWVudHMsIHZvaWQgMCwgZnVuY3Rpb24qIChyZXF1ZXN0UGFyYW1ldGVycyA9IHt9LCBpbml0T3ZlcnJpZGVzKSB7XG5cdFx0XHRcdHJldHVybiB5aWVsZCAoeWllbGQgdGhpcy52MVByb2R1Y3RzUmV0cmlldmVQb3N0UmF3KHJlcXVlc3RQYXJhbWV0ZXJzLCBpbml0T3ZlcnJpZGVzKSkudmFsdWUoKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0fTtcblx0ZXhwb3J0cy5Qcm9kdWN0c0FwaSA9IFByb2R1Y3RzQXBpO1xufSkgfSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIC4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9hcGlzL1NlYXJjaEFwaS5qc1xudmFyIHJlcXVpcmVfU2VhcmNoQXBpID0gLyogQF9fUFVSRV9fICovIF9fY29tbW9uSlMoeyBcIi4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9hcGlzL1NlYXJjaEFwaS5qc1wiOiAoKGV4cG9ydHMpID0+IHtcblx0LyoqXG5cdCogQ29tbWVyY2Vcblx0KiBObyBkZXNjcmlwdGlvbiBwcm92aWRlZCAoZ2VuZXJhdGVkIGJ5IE9wZW5hcGkgR2VuZXJhdG9yIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuYXBpdG9vbHMvb3BlbmFwaS1nZW5lcmF0b3IpXG5cdCpcblx0KiBUaGUgdmVyc2lvbiBvZiB0aGUgT3BlbkFQSSBkb2N1bWVudDogMS4xLjBcblx0KlxuXHQqXG5cdCogTk9URTogVGhpcyBjbGFzcyBpcyBhdXRvIGdlbmVyYXRlZCBieSBPcGVuQVBJIEdlbmVyYXRvciAoaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoKS5cblx0KiBodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2hcblx0KiBEbyBub3QgZWRpdCB0aGUgY2xhc3MgbWFudWFsbHkuXG5cdCovXG5cdHZhciBfX2F3YWl0ZXIgPSBleHBvcnRzICYmIGV4cG9ydHMuX19hd2FpdGVyIHx8IGZ1bmN0aW9uKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuXHRcdGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7XG5cdFx0XHRyZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbihyZXNvbHZlKSB7XG5cdFx0XHRcdHJlc29sdmUodmFsdWUpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG5cdFx0XHRmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHtcblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7XG5cdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0XHRyZWplY3QoZSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7XG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0c3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpO1xuXHRcdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdFx0cmVqZWN0KGUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRmdW5jdGlvbiBzdGVwKHJlc3VsdCkge1xuXHRcdFx0XHRyZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTtcblx0XHRcdH1cblx0XHRcdHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcblx0XHR9KTtcblx0fTtcblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuXHRleHBvcnRzLlNlYXJjaEFwaSA9IHZvaWQgMDtcblx0Y29uc3QgcnVudGltZSA9IHJlcXVpcmVfcnVudGltZSgpO1xuXHRjb25zdCBpbmRleF8xID0gcmVxdWlyZV9tb2RlbHMoKTtcblx0LyoqXG5cdCpcblx0Ki9cblx0dmFyIFNlYXJjaEFwaSA9IGNsYXNzIGV4dGVuZHMgcnVudGltZS5CYXNlQVBJIHtcblx0XHQvKipcblx0XHQqL1xuXHRcdHYxU2VhcmNoUXVlcnlHZXRSYXcocmVxdWVzdFBhcmFtZXRlcnMsIGluaXRPdmVycmlkZXMpIHtcblx0XHRcdHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG5cdFx0XHRcdGlmIChyZXF1ZXN0UGFyYW1ldGVyc1tcInF1ZXJ5XCJdID09IG51bGwpIHRocm93IG5ldyBydW50aW1lLlJlcXVpcmVkRXJyb3IoXCJxdWVyeVwiLCBcIlJlcXVpcmVkIHBhcmFtZXRlciBcXFwicXVlcnlcXFwiIHdhcyBudWxsIG9yIHVuZGVmaW5lZCB3aGVuIGNhbGxpbmcgdjFTZWFyY2hRdWVyeUdldCgpLlwiKTtcblx0XHRcdFx0Y29uc3QgcXVlcnlQYXJhbWV0ZXJzID0ge307XG5cdFx0XHRcdGlmIChyZXF1ZXN0UGFyYW1ldGVyc1tcInF1ZXJ5XCJdICE9IG51bGwpIHF1ZXJ5UGFyYW1ldGVyc1tcInF1ZXJ5XCJdID0gcmVxdWVzdFBhcmFtZXRlcnNbXCJxdWVyeVwiXTtcblx0XHRcdFx0aWYgKHJlcXVlc3RQYXJhbWV0ZXJzW1wibGltaXRcIl0gIT0gbnVsbCkgcXVlcnlQYXJhbWV0ZXJzW1wibGltaXRcIl0gPSByZXF1ZXN0UGFyYW1ldGVyc1tcImxpbWl0XCJdO1xuXHRcdFx0XHRpZiAocmVxdWVzdFBhcmFtZXRlcnNbXCJ1c2VyX2lkXCJdICE9IG51bGwpIHF1ZXJ5UGFyYW1ldGVyc1tcInVzZXJfaWRcIl0gPSByZXF1ZXN0UGFyYW1ldGVyc1tcInVzZXJfaWRcIl07XG5cdFx0XHRcdGlmIChyZXF1ZXN0UGFyYW1ldGVyc1tcIm9yZ19pZFwiXSAhPSBudWxsKSBxdWVyeVBhcmFtZXRlcnNbXCJvcmdfaWRcIl0gPSByZXF1ZXN0UGFyYW1ldGVyc1tcIm9yZ19pZFwiXTtcblx0XHRcdFx0Y29uc3QgaGVhZGVyUGFyYW1ldGVycyA9IHt9O1xuXHRcdFx0XHRpZiAodGhpcy5jb25maWd1cmF0aW9uICYmIHRoaXMuY29uZmlndXJhdGlvbi5hY2Nlc3NUb2tlbikge1xuXHRcdFx0XHRcdGNvbnN0IHRva2VuID0gdGhpcy5jb25maWd1cmF0aW9uLmFjY2Vzc1Rva2VuO1xuXHRcdFx0XHRcdGNvbnN0IHRva2VuU3RyaW5nID0geWllbGQgdG9rZW4oXCJiZWFyZXJcIiwgW10pO1xuXHRcdFx0XHRcdGlmICh0b2tlblN0cmluZykgaGVhZGVyUGFyYW1ldGVyc1tcIkF1dGhvcml6YXRpb25cIl0gPSBgQmVhcmVyICR7dG9rZW5TdHJpbmd9YDtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCByZXNwb25zZSA9IHlpZWxkIHRoaXMucmVxdWVzdCh7XG5cdFx0XHRcdFx0cGF0aDogYC92MS9zZWFyY2gvcXVlcnlgLFxuXHRcdFx0XHRcdG1ldGhvZDogXCJHRVRcIixcblx0XHRcdFx0XHRoZWFkZXJzOiBoZWFkZXJQYXJhbWV0ZXJzLFxuXHRcdFx0XHRcdHF1ZXJ5OiBxdWVyeVBhcmFtZXRlcnNcblx0XHRcdFx0fSwgaW5pdE92ZXJyaWRlcyk7XG5cdFx0XHRcdHJldHVybiBuZXcgcnVudGltZS5KU09OQXBpUmVzcG9uc2UocmVzcG9uc2UsIChqc29uVmFsdWUpID0+ICgwLCBpbmRleF8xLlByb2R1Y3RTZWFyY2hSZXNwb25zZUZyb21KU09OKShqc29uVmFsdWUpKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHQvKipcblx0XHQqL1xuXHRcdHYxU2VhcmNoUXVlcnlHZXQocmVxdWVzdFBhcmFtZXRlcnMsIGluaXRPdmVycmlkZXMpIHtcblx0XHRcdHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG5cdFx0XHRcdHJldHVybiB5aWVsZCAoeWllbGQgdGhpcy52MVNlYXJjaFF1ZXJ5R2V0UmF3KHJlcXVlc3RQYXJhbWV0ZXJzLCBpbml0T3ZlcnJpZGVzKSkudmFsdWUoKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHQvKipcblx0XHQqL1xuXHRcdHYxU2VhcmNoU3VnZ2VzdGlvbnNHZXRSYXcocmVxdWVzdFBhcmFtZXRlcnMsIGluaXRPdmVycmlkZXMpIHtcblx0XHRcdHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG5cdFx0XHRcdGNvbnN0IHF1ZXJ5UGFyYW1ldGVycyA9IHt9O1xuXHRcdFx0XHRpZiAocmVxdWVzdFBhcmFtZXRlcnNbXCJvcmdfaWRcIl0gIT0gbnVsbCkgcXVlcnlQYXJhbWV0ZXJzW1wib3JnX2lkXCJdID0gcmVxdWVzdFBhcmFtZXRlcnNbXCJvcmdfaWRcIl07XG5cdFx0XHRcdGNvbnN0IGhlYWRlclBhcmFtZXRlcnMgPSB7fTtcblx0XHRcdFx0aWYgKHRoaXMuY29uZmlndXJhdGlvbiAmJiB0aGlzLmNvbmZpZ3VyYXRpb24uYWNjZXNzVG9rZW4pIHtcblx0XHRcdFx0XHRjb25zdCB0b2tlbiA9IHRoaXMuY29uZmlndXJhdGlvbi5hY2Nlc3NUb2tlbjtcblx0XHRcdFx0XHRjb25zdCB0b2tlblN0cmluZyA9IHlpZWxkIHRva2VuKFwiYmVhcmVyXCIsIFtdKTtcblx0XHRcdFx0XHRpZiAodG9rZW5TdHJpbmcpIGhlYWRlclBhcmFtZXRlcnNbXCJBdXRob3JpemF0aW9uXCJdID0gYEJlYXJlciAke3Rva2VuU3RyaW5nfWA7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3QgcmVzcG9uc2UgPSB5aWVsZCB0aGlzLnJlcXVlc3Qoe1xuXHRcdFx0XHRcdHBhdGg6IGAvdjEvc2VhcmNoL3N1Z2dlc3Rpb25zYCxcblx0XHRcdFx0XHRtZXRob2Q6IFwiR0VUXCIsXG5cdFx0XHRcdFx0aGVhZGVyczogaGVhZGVyUGFyYW1ldGVycyxcblx0XHRcdFx0XHRxdWVyeTogcXVlcnlQYXJhbWV0ZXJzXG5cdFx0XHRcdH0sIGluaXRPdmVycmlkZXMpO1xuXHRcdFx0XHRyZXR1cm4gbmV3IHJ1bnRpbWUuSlNPTkFwaVJlc3BvbnNlKHJlc3BvbnNlLCAoanNvblZhbHVlKSA9PiAoMCwgaW5kZXhfMS5TZWFyY2hTdWdnZXN0aW9uc1Jlc3BvbnNlRnJvbUpTT04pKGpzb25WYWx1ZSkpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdC8qKlxuXHRcdCovXG5cdFx0djFTZWFyY2hTdWdnZXN0aW9uc0dldCgpIHtcblx0XHRcdHJldHVybiBfX2F3YWl0ZXIodGhpcywgYXJndW1lbnRzLCB2b2lkIDAsIGZ1bmN0aW9uKiAocmVxdWVzdFBhcmFtZXRlcnMgPSB7fSwgaW5pdE92ZXJyaWRlcykge1xuXHRcdFx0XHRyZXR1cm4geWllbGQgKHlpZWxkIHRoaXMudjFTZWFyY2hTdWdnZXN0aW9uc0dldFJhdyhyZXF1ZXN0UGFyYW1ldGVycywgaW5pdE92ZXJyaWRlcykpLnZhbHVlKCk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdH07XG5cdGV4cG9ydHMuU2VhcmNoQXBpID0gU2VhcmNoQXBpO1xufSkgfSk7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIC4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9hcGlzL2luZGV4LmpzXG52YXIgcmVxdWlyZV9hcGlzID0gLyogQF9fUFVSRV9fICovIF9fY29tbW9uSlMoeyBcIi4uLy4uL25vZGVfbW9kdWxlcy9Ac3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9hcGlzL2luZGV4LmpzXCI6ICgoZXhwb3J0cykgPT4ge1xuXHR2YXIgX19jcmVhdGVCaW5kaW5nJDEgPSBleHBvcnRzICYmIGV4cG9ydHMuX19jcmVhdGVCaW5kaW5nIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG5cdFx0aWYgKGsyID09PSB2b2lkIDApIGsyID0gaztcblx0XHR2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobSwgayk7XG5cdFx0aWYgKCFkZXNjIHx8IChcImdldFwiIGluIGRlc2MgPyAhbS5fX2VzTW9kdWxlIDogZGVzYy53cml0YWJsZSB8fCBkZXNjLmNvbmZpZ3VyYWJsZSkpIGRlc2MgPSB7XG5cdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuXHRcdFx0Z2V0OiBmdW5jdGlvbigpIHtcblx0XHRcdFx0cmV0dXJuIG1ba107XG5cdFx0XHR9XG5cdFx0fTtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIGRlc2MpO1xuXHR9KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuXHRcdGlmIChrMiA9PT0gdm9pZCAwKSBrMiA9IGs7XG5cdFx0b1trMl0gPSBtW2tdO1xuXHR9KSk7XG5cdHZhciBfX2V4cG9ydFN0YXIkMSA9IGV4cG9ydHMgJiYgZXhwb3J0cy5fX2V4cG9ydFN0YXIgfHwgZnVuY3Rpb24obSwgZXhwb3J0cyQxKSB7XG5cdFx0Zm9yICh2YXIgcCBpbiBtKSBpZiAocCAhPT0gXCJkZWZhdWx0XCIgJiYgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChleHBvcnRzJDEsIHApKSBfX2NyZWF0ZUJpbmRpbmckMShleHBvcnRzJDEsIG0sIHApO1xuXHR9O1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5cdF9fZXhwb3J0U3RhciQxKHJlcXVpcmVfQ3VzdG9tZXJTZXJ2aWNlQXBpKCksIGV4cG9ydHMpO1xuXHRfX2V4cG9ydFN0YXIkMShyZXF1aXJlX0RlZmF1bHRBcGkoKSwgZXhwb3J0cyk7XG5cdF9fZXhwb3J0U3RhciQxKHJlcXVpcmVfSW5mZXJlbmNlQXBpKCksIGV4cG9ydHMpO1xuXHRfX2V4cG9ydFN0YXIkMShyZXF1aXJlX1Byb2R1Y3RzQXBpKCksIGV4cG9ydHMpO1xuXHRfX2V4cG9ydFN0YXIkMShyZXF1aXJlX1NlYXJjaEFwaSgpLCBleHBvcnRzKTtcbn0pIH0pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiAuLi8uLi9ub2RlX21vZHVsZXMvQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvaW5kZXguanNcbnZhciByZXF1aXJlX2Rpc3QgPSAvKiBAX19QVVJFX18gKi8gX19jb21tb25KUyh7IFwiLi4vLi4vbm9kZV9tb2R1bGVzL0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L2luZGV4LmpzXCI6ICgoZXhwb3J0cykgPT4ge1xuXHR2YXIgX19jcmVhdGVCaW5kaW5nID0gZXhwb3J0cyAmJiBleHBvcnRzLl9fY3JlYXRlQmluZGluZyB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuXHRcdGlmIChrMiA9PT0gdm9pZCAwKSBrMiA9IGs7XG5cdFx0dmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG0sIGspO1xuXHRcdGlmICghZGVzYyB8fCAoXCJnZXRcIiBpbiBkZXNjID8gIW0uX19lc01vZHVsZSA6IGRlc2Mud3JpdGFibGUgfHwgZGVzYy5jb25maWd1cmFibGUpKSBkZXNjID0ge1xuXHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcblx0XHRcdGdldDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHJldHVybiBtW2tdO1xuXHRcdFx0fVxuXHRcdH07XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcblx0fSkgOiAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcblx0XHRpZiAoazIgPT09IHZvaWQgMCkgazIgPSBrO1xuXHRcdG9bazJdID0gbVtrXTtcblx0fSkpO1xuXHR2YXIgX19leHBvcnRTdGFyID0gZXhwb3J0cyAmJiBleHBvcnRzLl9fZXhwb3J0U3RhciB8fCBmdW5jdGlvbihtLCBleHBvcnRzJDEpIHtcblx0XHRmb3IgKHZhciBwIGluIG0pIGlmIChwICE9PSBcImRlZmF1bHRcIiAmJiAhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGV4cG9ydHMkMSwgcCkpIF9fY3JlYXRlQmluZGluZyhleHBvcnRzJDEsIG0sIHApO1xuXHR9O1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5cdF9fZXhwb3J0U3RhcihyZXF1aXJlX3J1bnRpbWUoKSwgZXhwb3J0cyk7XG5cdF9fZXhwb3J0U3RhcihyZXF1aXJlX2FwaXMoKSwgZXhwb3J0cyk7XG5cdF9fZXhwb3J0U3RhcihyZXF1aXJlX21vZGVscygpLCBleHBvcnRzKTtcbn0pIH0pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiBzcmMvY29tbWVyY2UtYXBpL2luZGV4LnRzXG52YXIgaW1wb3J0X2Rpc3QgPSAvKiBAX19QVVJFX18gKi8gX190b0VTTShyZXF1aXJlX2Rpc3QoKSwgMSk7XG5cbi8vI2VuZHJlZ2lvblxudmFyIEFwaUNvbnRleHRFbnZFbnVtID0gaW1wb3J0X2Rpc3QuQ29udGV4dEVudkVudW07XG52YXIgQXBpQ29udGV4dFNvdXJjZUVudW0gPSBpbXBvcnRfZGlzdC5Db250ZXh0U291cmNlRW51bTtcbnZhciBBcGlDdXN0U2VydmljZUF0dGFjaG1lbnQgPSBpbXBvcnRfZGlzdC5DdXN0U2VydmljZUF0dGFjaG1lbnQ7XG52YXIgQXBpRm9ybVJlc3BvbnNlQXR0cmlidXRlc0Zvcm1DYXRlZ29yeSA9IGltcG9ydF9kaXN0LkZvcm1SZXNwb25zZUF0dHJpYnV0ZXNGb3JtQ2F0ZWdvcnk7XG52YXIgQXBpRm9ybVR5cGUgPSBpbXBvcnRfZGlzdC5Gb3JtVHlwZTtcbnZhciBBcGlGdWxmaWxsbWVudERpc3BsYXlTdGF0dXMgPSBpbXBvcnRfZGlzdC5GdWxmaWxsbWVudERpc3BsYXlTdGF0dXM7XG52YXIgQXBpR2VuZXJhdGlvblBhcmFtcyA9IGltcG9ydF9kaXN0LkdlbmVyYXRpb25QYXJhbXM7XG52YXIgQXBpT3JnQ29uZmlnRXhwZXJpbWVudCA9IGltcG9ydF9kaXN0LlN0YXRzaWdFeHBlcmltZW50O1xudmFyIEFwaU9yZ0NvbmZpZ0ZlYXR1cmVHYXRlID0gaW1wb3J0X2Rpc3QuU3RhdHNpZ0ZlYXR1cmVHYXRlO1xudmFyIEFwaU9yZ0NvbmZpZ09yZ2FuaXphdGlvblNldHRpbmdzID0gaW1wb3J0X2Rpc3QuT3JnYW5pemF0aW9uU2V0dGluZ3M7XG52YXIgQXBpUERQQXR0cmlidXRlcyA9IGltcG9ydF9kaXN0LlBEUEF0dHJpYnV0ZXM7XG52YXIgQXBpUExQQXR0cmlidXRlcyA9IGltcG9ydF9kaXN0LlBMUEF0dHJpYnV0ZXM7XG52YXIgQXBpUGFnZVZpc2l0Q2F0ZWdvcnkgPSBpbXBvcnRfZGlzdC5QYWdlVmlzaXRDYXRlZ29yeTtcbnZhciBBcGlQcm9kdWN0UmVzcG9uc2VBdHRyaWJ1dGVzID0gaW1wb3J0X2Rpc3QuUmVzcG9uc2VQcm9kdWN0QXR0cmlidXRlcztcbnZhciBBcGlQcm9kdWN0U2VhcmNoUmVzcG9uc2UgPSBpbXBvcnRfZGlzdC5Qcm9kdWN0U2VhcmNoUmVzcG9uc2U7XG52YXIgQXBpUHJvZHVjdFNlYXJjaFJlc3BvbnNlQXR0cmlidXRlcyA9IGltcG9ydF9kaXN0LlByb2R1Y3RTZWFyY2hSZXNwb25zZUF0dHJpYnV0ZXM7XG52YXIgQXBpUXVlcnlUeXBlZEF0dHJpYnV0ZXMgPSBpbXBvcnRfZGlzdC5RdWVyeVR5cGVkQXR0cmlidXRlcztcbnZhciBBcGlSZXNwb25zZUNhdGVnb3J5ID0gaW1wb3J0X2Rpc3QuUmVzcG9uc2VDYXRlZ29yeTtcbnZhciBBcGlTZWFyY2hBdHRyaWJ1dGVzID0gaW1wb3J0X2Rpc3QuU2VhcmNoQXR0cmlidXRlcztcbnZhciBBcGlTZWFyY2hSZXNwb25zZVByb2R1Y3QgPSBpbXBvcnRfZGlzdC5TZWFyY2hSZXNwb25zZVByb2R1Y3Q7XG52YXIgQXBpU3VnZ2VzdGlvbiA9IGltcG9ydF9kaXN0LlN1Z2dlc3Rpb247XG52YXIgQXBpU3VnZ2VzdGlvbkNsaWNrZWRBdHRyaWJ1dGVzID0gaW1wb3J0X2Rpc3QuU3VnZ2VzdGlvbkNsaWNrZWRBdHRyaWJ1dGVzO1xudmFyIEFwaVN1cHBvcnRlZEV2ZW50UHJvZHVjdENhdGVnb3J5ID0gaW1wb3J0X2Rpc3QuU3VwcG9ydGVkRXZlbnRQcm9kdWN0Q2F0ZWdvcnk7XG52YXIgQXBpU3VwcG9ydGVkRXZlbnRSZXNwb25zZSA9IGltcG9ydF9kaXN0LlN1cHBvcnRlZEV2ZW50UmVzcG9uc2U7XG52YXIgQXBpVXNlckV2ZW50ID0gaW1wb3J0X2Rpc3QuVXNlckV2ZW50O1xudmFyIEFwaVVzZXJFdmVudENhdGVnb3J5ID0gaW1wb3J0X2Rpc3QuVXNlckV2ZW50Q2F0ZWdvcnk7XG5leHBvcnQgeyBBcGlDb250ZXh0RW52RW51bSwgQXBpQ29udGV4dFNvdXJjZUVudW0sIEFwaUN1c3RTZXJ2aWNlQXR0YWNobWVudCwgQXBpRm9ybVJlc3BvbnNlQXR0cmlidXRlc0Zvcm1DYXRlZ29yeSwgQXBpRm9ybVR5cGUsIEFwaUZ1bGZpbGxtZW50RGlzcGxheVN0YXR1cywgQXBpR2VuZXJhdGlvblBhcmFtcywgQXBpT3JnQ29uZmlnRXhwZXJpbWVudCwgQXBpT3JnQ29uZmlnRmVhdHVyZUdhdGUsIEFwaU9yZ0NvbmZpZ09yZ2FuaXphdGlvblNldHRpbmdzLCBBcGlQRFBBdHRyaWJ1dGVzLCBBcGlQTFBBdHRyaWJ1dGVzLCBBcGlQYWdlVmlzaXRDYXRlZ29yeSwgQXBpUHJvZHVjdFJlc3BvbnNlQXR0cmlidXRlcywgQXBpUHJvZHVjdFNlYXJjaFJlc3BvbnNlLCBBcGlQcm9kdWN0U2VhcmNoUmVzcG9uc2VBdHRyaWJ1dGVzLCBBcGlRdWVyeVR5cGVkQXR0cmlidXRlcywgQXBpUmVzcG9uc2VDYXRlZ29yeSwgQXBpU2VhcmNoQXR0cmlidXRlcywgQXBpU2VhcmNoUmVzcG9uc2VQcm9kdWN0LCBBcGlTdWdnZXN0aW9uLCBBcGlTdWdnZXN0aW9uQ2xpY2tlZEF0dHJpYnV0ZXMsIEFwaVN1cHBvcnRlZEV2ZW50UHJvZHVjdENhdGVnb3J5LCBBcGlTdXBwb3J0ZWRFdmVudFJlc3BvbnNlLCBBcGlVc2VyRXZlbnQsIEFwaVVzZXJFdmVudENhdGVnb3J5LCBDYXRlZ29yeUV4dHJhY3RvclR5cGUsIENoYXRFbGVtZW50RGlzcGxheUxvY2F0aW9uLCBDaGF0U2VhcmNoU29ydE92ZXJyaWRlcywgQ2hhdFN0YXRlLCBDb2xvck5hbWVzLCBDdXN0b21lclNlcnZpY2VJbnRlZ3JhdGlvbk1vZGUsIEN1c3RvbWVyU2VydmljZU92ZXJyaWRlcywgQ3VzdG9tZXJTZXJ2aWNlVHlwZSwgRE9NSW5zZXJ0aW9uVHlwZSwgRmVhdHVyZUdhdGVzLCBHb29nbGVBbmFseXRpY3NFdmVudHMsIEdyaWRJbnNlcnRpb25UeXBlLCBMb2NhbFN0b3JhZ2VLZXlzLCBNZXNzYWdlUm9sZSwgTWVzc2FnZVR5cGUsIE9yZ1Nob3J0TmFtZSwgUGFnZVZhcmlhbnRUZXN0VHlwZSwgUGFnZVZpc2l0Q2F0ZWdvcnksIFBlcmZNZXRyaWNzRXZlbnRzLCBQcm9kdWN0RXhwZXJpbWVudCwgUHJvZHVjdFNvcnRpbmcsIFNlYXJjaFJlc3VsdHNTdGF0ZSwgU3BpZmZ5RXZlbnQsIFNwaWZmeUV2ZW50TmFtZSwgU3BpZmZ5TWV0cmljc0V2ZW50TmFtZSwgU3BpZmZ5V2lkZ2V0cywgU3VnZ2VzdGlvbkJhckxvY2F0aW9uRm9yTWV0cmljcywgVmFyaWFudFR5cGVFbnVtLCBXaWRnZXRUeXBlIH07Il0sInhfZ29vZ2xlX2lnbm9yZUxpc3QiOlswXSwibWFwcGluZ3MiOiI7QUFDQSxJQUFJLFdBQVcsT0FBTztBQUN0QixJQUFJLFlBQVksT0FBTztBQUN2QixJQUFJLG1CQUFtQixPQUFPO0FBQzlCLElBQUksb0JBQW9CLE9BQU87QUFDL0IsSUFBSSxlQUFlLE9BQU87QUFDMUIsSUFBSSxlQUFlLE9BQU8sVUFBVTtBQUNwQyxJQUFJLGNBQWMsSUFBSSxRQUFRLFdBQVc7QUFDeEMsUUFBTyxRQUFRLEdBQUcsR0FBRyxrQkFBa0IsR0FBRyxDQUFDLE1BQU0sTUFBTSxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUUsU0FBUyxJQUFJLEVBQUUsSUFBSTs7QUFFNUYsSUFBSSxlQUFlLElBQUksTUFBTSxRQUFRLFNBQVM7QUFDN0MsS0FBSSxRQUFRLE9BQU8sU0FBUyxZQUFZLE9BQU8sU0FBUyxXQUFZLE1BQUssSUFBSSxPQUFPLGtCQUFrQixLQUFLLEVBQUUsSUFBSSxHQUFHLElBQUksS0FBSyxRQUFRLEtBQUssSUFBSSxHQUFHLEtBQUs7QUFDckosUUFBTSxLQUFLO0FBQ1gsTUFBSSxDQUFDLGFBQWEsS0FBSyxJQUFJLElBQUksSUFBSSxRQUFRLE9BQVEsV0FBVSxJQUFJLEtBQUs7R0FDckUsT0FBTyxNQUFNLEtBQUssSUFBSSxLQUFLLE1BQU0sSUFBSTtHQUNyQyxZQUFZLEVBQUUsT0FBTyxpQkFBaUIsTUFBTSxJQUFJLEtBQUssS0FBSztHQUMxRCxDQUFDOztBQUVILFFBQU87O0FBRVIsSUFBSSxXQUFXLEtBQUssWUFBWSxZQUFZLFNBQVMsT0FBTyxPQUFPLFNBQVMsYUFBYSxJQUFJLENBQUMsR0FBRyxFQUFF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