@cybrid/cybrid-api-bank-angular 0.123.214 → 0.123.216

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 (314) hide show
  1. package/README.md +2 -2
  2. package/esm2020/api/accounts.service.mjs +2 -2
  3. package/esm2020/api/assets.service.mjs +2 -2
  4. package/esm2020/api/banks.service.mjs +2 -2
  5. package/esm2020/api/counterparties.service.mjs +2 -2
  6. package/esm2020/api/customers.service.mjs +2 -2
  7. package/esm2020/api/depositAddresses.service.mjs +2 -2
  8. package/esm2020/api/depositBankAccounts.service.mjs +2 -2
  9. package/esm2020/api/externalBankAccounts.service.mjs +2 -2
  10. package/esm2020/api/externalWallets.service.mjs +2 -2
  11. package/esm2020/api/files.service.mjs +2 -2
  12. package/esm2020/api/identityVerifications.service.mjs +2 -2
  13. package/esm2020/api/invoices.service.mjs +2 -2
  14. package/esm2020/api/paymentInstructions.service.mjs +2 -2
  15. package/esm2020/api/prices.service.mjs +2 -2
  16. package/esm2020/api/quotes.service.mjs +2 -2
  17. package/esm2020/api/symbols.service.mjs +2 -2
  18. package/esm2020/api/trades.service.mjs +2 -2
  19. package/esm2020/api/transfers.service.mjs +2 -2
  20. package/esm2020/api/workflows.service.mjs +2 -2
  21. package/esm2020/model/account.mjs +2 -2
  22. package/esm2020/model/accountList.mjs +1 -1
  23. package/esm2020/model/accountState.mjs +2 -2
  24. package/esm2020/model/accountType.mjs +2 -2
  25. package/esm2020/model/activityLimit.mjs +2 -2
  26. package/esm2020/model/activityType.mjs +2 -2
  27. package/esm2020/model/asset.mjs +2 -2
  28. package/esm2020/model/assetList.mjs +1 -1
  29. package/esm2020/model/assetTypes.mjs +2 -2
  30. package/esm2020/model/bank.mjs +1 -1
  31. package/esm2020/model/bankFeature.mjs +2 -2
  32. package/esm2020/model/bankList.mjs +1 -1
  33. package/esm2020/model/bankSupportedPayoutSymbolsInner.mjs +2 -2
  34. package/esm2020/model/bankType.mjs +2 -2
  35. package/esm2020/model/complianceCheck.mjs +2 -2
  36. package/esm2020/model/complianceCheckOutcome.mjs +2 -2
  37. package/esm2020/model/complianceCheckType.mjs +2 -2
  38. package/esm2020/model/complianceDecision.mjs +2 -2
  39. package/esm2020/model/complianceDecisionState.mjs +2 -2
  40. package/esm2020/model/complianceDecisionType.mjs +2 -2
  41. package/esm2020/model/counterparty.mjs +1 -1
  42. package/esm2020/model/counterpartyAddress.mjs +2 -2
  43. package/esm2020/model/counterpartyAliasesInner.mjs +2 -2
  44. package/esm2020/model/counterpartyList.mjs +1 -1
  45. package/esm2020/model/counterpartyName.mjs +2 -2
  46. package/esm2020/model/counterpartyState.mjs +2 -2
  47. package/esm2020/model/counterpartyType.mjs +2 -2
  48. package/esm2020/model/customer.mjs +1 -1
  49. package/esm2020/model/customerAddress.mjs +2 -2
  50. package/esm2020/model/customerAliasesInner.mjs +2 -2
  51. package/esm2020/model/customerList.mjs +1 -1
  52. package/esm2020/model/customerName.mjs +2 -2
  53. package/esm2020/model/customerState.mjs +2 -2
  54. package/esm2020/model/customerType.mjs +2 -2
  55. package/esm2020/model/depositAddress.mjs +2 -2
  56. package/esm2020/model/depositAddressFormat.mjs +2 -2
  57. package/esm2020/model/depositAddressList.mjs +1 -1
  58. package/esm2020/model/depositAddressState.mjs +2 -2
  59. package/esm2020/model/depositBankAccount.mjs +1 -1
  60. package/esm2020/model/depositBankAccountAccountDetailsInner.mjs +2 -2
  61. package/esm2020/model/depositBankAccountCounterpartyAddress.mjs +2 -2
  62. package/esm2020/model/depositBankAccountList.mjs +1 -1
  63. package/esm2020/model/depositBankAccountRoutingDetailsInner.mjs +2 -2
  64. package/esm2020/model/depositBankAccountRoutingNumberType.mjs +2 -2
  65. package/esm2020/model/depositBankAccountState.mjs +2 -2
  66. package/esm2020/model/errorResponse.mjs +2 -2
  67. package/esm2020/model/externalBankAccount.mjs +1 -1
  68. package/esm2020/model/externalBankAccountBalances.mjs +2 -2
  69. package/esm2020/model/externalBankAccountKind.mjs +2 -2
  70. package/esm2020/model/externalBankAccountList.mjs +1 -1
  71. package/esm2020/model/externalBankAccountPiiInner.mjs +1 -1
  72. package/esm2020/model/externalBankAccountPiiInnerAddressesInner.mjs +2 -2
  73. package/esm2020/model/externalBankAccountPiiInnerRoutingDetailsInner.mjs +2 -2
  74. package/esm2020/model/externalBankAccountState.mjs +2 -2
  75. package/esm2020/model/externalWallet.mjs +2 -2
  76. package/esm2020/model/externalWalletEnvironment.mjs +2 -2
  77. package/esm2020/model/externalWalletList.mjs +1 -1
  78. package/esm2020/model/externalWalletState.mjs +2 -2
  79. package/esm2020/model/identificationNumber.mjs +2 -2
  80. package/esm2020/model/identityVerification.mjs +1 -1
  81. package/esm2020/model/identityVerificationList.mjs +1 -1
  82. package/esm2020/model/identityVerificationMethod.mjs +2 -2
  83. package/esm2020/model/identityVerificationOutcome.mjs +2 -2
  84. package/esm2020/model/identityVerificationPersonaState.mjs +2 -2
  85. package/esm2020/model/identityVerificationState.mjs +2 -2
  86. package/esm2020/model/identityVerificationType.mjs +2 -2
  87. package/esm2020/model/identityVerificationWithDetails.mjs +1 -1
  88. package/esm2020/model/identityVerificationWithDetailsPii.mjs +1 -1
  89. package/esm2020/model/identityVerificationWithDetailsPiiAddress.mjs +2 -2
  90. package/esm2020/model/identityVerificationWithDetailsPiiName.mjs +2 -2
  91. package/esm2020/model/invoice.mjs +2 -2
  92. package/esm2020/model/invoiceList.mjs +1 -1
  93. package/esm2020/model/patchBank.mjs +1 -1
  94. package/esm2020/model/patchCustomer.mjs +2 -2
  95. package/esm2020/model/patchExternalBankAccount.mjs +2 -2
  96. package/esm2020/model/paymentInstruction.mjs +2 -2
  97. package/esm2020/model/paymentInstructionList.mjs +1 -1
  98. package/esm2020/model/platformFile.mjs +2 -2
  99. package/esm2020/model/platformFileList.mjs +1 -1
  100. package/esm2020/model/postAccount.mjs +2 -2
  101. package/esm2020/model/postBank.mjs +1 -1
  102. package/esm2020/model/postCounterparty.mjs +1 -1
  103. package/esm2020/model/postCounterpartyAddress.mjs +2 -2
  104. package/esm2020/model/postCounterpartyAliasesInner.mjs +2 -2
  105. package/esm2020/model/postCounterpartyName.mjs +2 -2
  106. package/esm2020/model/postCustomer.mjs +1 -1
  107. package/esm2020/model/postCustomerAddress.mjs +2 -2
  108. package/esm2020/model/postCustomerAliasesInner.mjs +2 -2
  109. package/esm2020/model/postCustomerName.mjs +2 -2
  110. package/esm2020/model/postDepositAddress.mjs +2 -2
  111. package/esm2020/model/postDepositBankAccount.mjs +2 -2
  112. package/esm2020/model/postExternalBankAccount.mjs +1 -1
  113. package/esm2020/model/postExternalBankAccountCounterpartyAddress.mjs +2 -2
  114. package/esm2020/model/postExternalBankAccountCounterpartyBankAccount.mjs +2 -2
  115. package/esm2020/model/postExternalBankAccountCounterpartyName.mjs +2 -2
  116. package/esm2020/model/postExternalWallet.mjs +2 -2
  117. package/esm2020/model/postFee.mjs +2 -2
  118. package/esm2020/model/postFile.mjs +2 -2
  119. package/esm2020/model/postIdentificationNumber.mjs +2 -2
  120. package/esm2020/model/postIdentityVerification.mjs +1 -1
  121. package/esm2020/model/postIdentityVerificationAddress.mjs +2 -2
  122. package/esm2020/model/postIdentityVerificationAliasesInner.mjs +2 -2
  123. package/esm2020/model/postIdentityVerificationName.mjs +2 -2
  124. package/esm2020/model/postInvoice.mjs +2 -2
  125. package/esm2020/model/postPaymentInstruction.mjs +2 -2
  126. package/esm2020/model/postQuote.mjs +1 -1
  127. package/esm2020/model/postQuoteEntry.mjs +2 -2
  128. package/esm2020/model/postSupportedPayoutSymbols.mjs +2 -2
  129. package/esm2020/model/postTrade.mjs +2 -2
  130. package/esm2020/model/postTransfer.mjs +1 -1
  131. package/esm2020/model/postTransferParticipant.mjs +2 -2
  132. package/esm2020/model/postUltimateBeneficialOwner.mjs +2 -2
  133. package/esm2020/model/postWorkflow.mjs +2 -2
  134. package/esm2020/model/quote.mjs +1 -1
  135. package/esm2020/model/quoteEntry.mjs +1 -1
  136. package/esm2020/model/quoteEntryDestinationAccount.mjs +2 -2
  137. package/esm2020/model/quoteEntrySourceAccount.mjs +2 -2
  138. package/esm2020/model/quoteList.mjs +1 -1
  139. package/esm2020/model/quoteSide.mjs +2 -2
  140. package/esm2020/model/quoteType.mjs +2 -2
  141. package/esm2020/model/symbolPrice.mjs +2 -2
  142. package/esm2020/model/trade.mjs +2 -2
  143. package/esm2020/model/tradeFailureCode.mjs +2 -2
  144. package/esm2020/model/tradeList.mjs +1 -1
  145. package/esm2020/model/tradeSide.mjs +2 -2
  146. package/esm2020/model/tradeState.mjs +2 -2
  147. package/esm2020/model/tradeType.mjs +2 -2
  148. package/esm2020/model/transfer.mjs +1 -1
  149. package/esm2020/model/transferAccountType.mjs +2 -2
  150. package/esm2020/model/transferDestinationAccount.mjs +2 -2
  151. package/esm2020/model/transferEntry.mjs +1 -1
  152. package/esm2020/model/transferEntryDestinationAccount.mjs +2 -2
  153. package/esm2020/model/transferFailureCode.mjs +2 -2
  154. package/esm2020/model/transferList.mjs +1 -1
  155. package/esm2020/model/transferParticipant.mjs +2 -2
  156. package/esm2020/model/transferSide.mjs +2 -2
  157. package/esm2020/model/transferSourceAccount.mjs +2 -2
  158. package/esm2020/model/transferState.mjs +2 -2
  159. package/esm2020/model/transferType.mjs +2 -2
  160. package/esm2020/model/workflow.mjs +2 -2
  161. package/esm2020/model/workflowState.mjs +2 -2
  162. package/esm2020/model/workflowType.mjs +2 -2
  163. package/esm2020/model/workflowWithDetails.mjs +1 -1
  164. package/esm2020/model/workflowWithDetailsAllOf.mjs +2 -2
  165. package/esm2020/model/workflowsList.mjs +1 -1
  166. package/fesm2015/cybrid-cybrid-api-bank-angular.mjs +74 -74
  167. package/fesm2015/cybrid-cybrid-api-bank-angular.mjs.map +1 -1
  168. package/fesm2020/cybrid-cybrid-api-bank-angular.mjs +125 -125
  169. package/fesm2020/cybrid-cybrid-api-bank-angular.mjs.map +1 -1
  170. package/model/account.d.ts +1 -1
  171. package/model/accountList.d.ts +1 -1
  172. package/model/accountState.d.ts +1 -1
  173. package/model/accountType.d.ts +1 -1
  174. package/model/activityLimit.d.ts +1 -1
  175. package/model/activityType.d.ts +1 -1
  176. package/model/asset.d.ts +1 -1
  177. package/model/assetList.d.ts +1 -1
  178. package/model/assetTypes.d.ts +1 -1
  179. package/model/bank.d.ts +1 -1
  180. package/model/bankFeature.d.ts +1 -1
  181. package/model/bankList.d.ts +1 -1
  182. package/model/bankSupportedPayoutSymbolsInner.d.ts +1 -1
  183. package/model/bankType.d.ts +1 -1
  184. package/model/complianceCheck.d.ts +1 -1
  185. package/model/complianceCheckOutcome.d.ts +1 -1
  186. package/model/complianceCheckType.d.ts +1 -1
  187. package/model/complianceDecision.d.ts +1 -1
  188. package/model/complianceDecisionState.d.ts +1 -1
  189. package/model/complianceDecisionType.d.ts +1 -1
  190. package/model/counterparty.d.ts +1 -1
  191. package/model/counterpartyAddress.d.ts +1 -1
  192. package/model/counterpartyAliasesInner.d.ts +1 -1
  193. package/model/counterpartyList.d.ts +1 -1
  194. package/model/counterpartyName.d.ts +1 -1
  195. package/model/counterpartyState.d.ts +1 -1
  196. package/model/counterpartyType.d.ts +1 -1
  197. package/model/customer.d.ts +1 -1
  198. package/model/customerAddress.d.ts +1 -1
  199. package/model/customerAliasesInner.d.ts +1 -1
  200. package/model/customerList.d.ts +1 -1
  201. package/model/customerName.d.ts +1 -1
  202. package/model/customerState.d.ts +1 -1
  203. package/model/customerType.d.ts +1 -1
  204. package/model/depositAddress.d.ts +1 -1
  205. package/model/depositAddressFormat.d.ts +1 -1
  206. package/model/depositAddressList.d.ts +1 -1
  207. package/model/depositAddressState.d.ts +1 -1
  208. package/model/depositBankAccount.d.ts +1 -1
  209. package/model/depositBankAccountAccountDetailsInner.d.ts +1 -1
  210. package/model/depositBankAccountCounterpartyAddress.d.ts +1 -1
  211. package/model/depositBankAccountList.d.ts +1 -1
  212. package/model/depositBankAccountRoutingDetailsInner.d.ts +1 -1
  213. package/model/depositBankAccountRoutingNumberType.d.ts +1 -1
  214. package/model/depositBankAccountState.d.ts +1 -1
  215. package/model/errorResponse.d.ts +1 -1
  216. package/model/externalBankAccount.d.ts +1 -1
  217. package/model/externalBankAccountBalances.d.ts +1 -1
  218. package/model/externalBankAccountKind.d.ts +1 -1
  219. package/model/externalBankAccountList.d.ts +1 -1
  220. package/model/externalBankAccountPiiInner.d.ts +1 -1
  221. package/model/externalBankAccountPiiInnerAddressesInner.d.ts +1 -1
  222. package/model/externalBankAccountPiiInnerRoutingDetailsInner.d.ts +1 -1
  223. package/model/externalBankAccountState.d.ts +1 -1
  224. package/model/externalWallet.d.ts +1 -1
  225. package/model/externalWalletEnvironment.d.ts +1 -1
  226. package/model/externalWalletList.d.ts +1 -1
  227. package/model/externalWalletState.d.ts +1 -1
  228. package/model/identificationNumber.d.ts +1 -1
  229. package/model/identityVerification.d.ts +1 -1
  230. package/model/identityVerificationList.d.ts +1 -1
  231. package/model/identityVerificationMethod.d.ts +1 -1
  232. package/model/identityVerificationOutcome.d.ts +1 -1
  233. package/model/identityVerificationPersonaState.d.ts +1 -1
  234. package/model/identityVerificationState.d.ts +1 -1
  235. package/model/identityVerificationType.d.ts +1 -1
  236. package/model/identityVerificationWithDetails.d.ts +1 -1
  237. package/model/identityVerificationWithDetailsPii.d.ts +1 -1
  238. package/model/identityVerificationWithDetailsPiiAddress.d.ts +1 -1
  239. package/model/identityVerificationWithDetailsPiiName.d.ts +1 -1
  240. package/model/invoice.d.ts +1 -1
  241. package/model/invoiceList.d.ts +1 -1
  242. package/model/patchBank.d.ts +1 -1
  243. package/model/patchCustomer.d.ts +1 -1
  244. package/model/patchExternalBankAccount.d.ts +1 -1
  245. package/model/paymentInstruction.d.ts +1 -1
  246. package/model/paymentInstructionList.d.ts +1 -1
  247. package/model/platformFile.d.ts +1 -1
  248. package/model/platformFileList.d.ts +1 -1
  249. package/model/postAccount.d.ts +1 -1
  250. package/model/postBank.d.ts +1 -1
  251. package/model/postCounterparty.d.ts +1 -1
  252. package/model/postCounterpartyAddress.d.ts +1 -1
  253. package/model/postCounterpartyAliasesInner.d.ts +1 -1
  254. package/model/postCounterpartyName.d.ts +1 -1
  255. package/model/postCustomer.d.ts +1 -1
  256. package/model/postCustomerAddress.d.ts +1 -1
  257. package/model/postCustomerAliasesInner.d.ts +1 -1
  258. package/model/postCustomerName.d.ts +1 -1
  259. package/model/postDepositAddress.d.ts +1 -1
  260. package/model/postDepositBankAccount.d.ts +1 -1
  261. package/model/postExternalBankAccount.d.ts +1 -1
  262. package/model/postExternalBankAccountCounterpartyAddress.d.ts +1 -1
  263. package/model/postExternalBankAccountCounterpartyBankAccount.d.ts +1 -1
  264. package/model/postExternalBankAccountCounterpartyName.d.ts +1 -1
  265. package/model/postExternalWallet.d.ts +1 -1
  266. package/model/postFee.d.ts +1 -1
  267. package/model/postFile.d.ts +1 -1
  268. package/model/postIdentificationNumber.d.ts +1 -1
  269. package/model/postIdentityVerification.d.ts +1 -1
  270. package/model/postIdentityVerificationAddress.d.ts +1 -1
  271. package/model/postIdentityVerificationAliasesInner.d.ts +1 -1
  272. package/model/postIdentityVerificationName.d.ts +1 -1
  273. package/model/postInvoice.d.ts +1 -1
  274. package/model/postPaymentInstruction.d.ts +1 -1
  275. package/model/postQuote.d.ts +1 -1
  276. package/model/postQuoteEntry.d.ts +1 -1
  277. package/model/postSupportedPayoutSymbols.d.ts +1 -1
  278. package/model/postTrade.d.ts +1 -1
  279. package/model/postTransfer.d.ts +1 -1
  280. package/model/postTransferParticipant.d.ts +1 -1
  281. package/model/postUltimateBeneficialOwner.d.ts +1 -1
  282. package/model/postWorkflow.d.ts +1 -1
  283. package/model/quote.d.ts +1 -1
  284. package/model/quoteEntry.d.ts +1 -1
  285. package/model/quoteEntryDestinationAccount.d.ts +1 -1
  286. package/model/quoteEntrySourceAccount.d.ts +1 -1
  287. package/model/quoteList.d.ts +1 -1
  288. package/model/quoteSide.d.ts +1 -1
  289. package/model/quoteType.d.ts +1 -1
  290. package/model/symbolPrice.d.ts +1 -1
  291. package/model/trade.d.ts +1 -1
  292. package/model/tradeFailureCode.d.ts +1 -1
  293. package/model/tradeList.d.ts +1 -1
  294. package/model/tradeSide.d.ts +1 -1
  295. package/model/tradeState.d.ts +1 -1
  296. package/model/tradeType.d.ts +1 -1
  297. package/model/transfer.d.ts +1 -1
  298. package/model/transferAccountType.d.ts +1 -1
  299. package/model/transferDestinationAccount.d.ts +1 -1
  300. package/model/transferEntry.d.ts +1 -1
  301. package/model/transferEntryDestinationAccount.d.ts +1 -1
  302. package/model/transferFailureCode.d.ts +1 -1
  303. package/model/transferList.d.ts +1 -1
  304. package/model/transferParticipant.d.ts +1 -1
  305. package/model/transferSide.d.ts +1 -1
  306. package/model/transferSourceAccount.d.ts +1 -1
  307. package/model/transferState.d.ts +1 -1
  308. package/model/transferType.d.ts +1 -1
  309. package/model/workflow.d.ts +1 -1
  310. package/model/workflowState.d.ts +1 -1
  311. package/model/workflowType.d.ts +1 -1
  312. package/model/workflowWithDetailsAllOf.d.ts +1 -1
  313. package/model/workflowsList.d.ts +1 -1
  314. package/package.json +1 -1
@@ -16,4 +16,4 @@ export var PostQuoteBankModel;
16
16
  Sell: 'sell'
17
17
  };
18
18
  })(PostQuoteBankModel || (PostQuoteBankModel = {}));
19
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9zdFF1b3RlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vbW9kZWwvcG9zdFF1b3RlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQTRFQSxNQUFNLEtBQVcsa0JBQWtCLENBa0JsQztBQWxCRCxXQUFpQixrQkFBa0I7SUFFbEIsa0NBQWUsR0FBRztRQUMzQixPQUFPLEVBQUUsU0FBNEI7UUFDckMsV0FBVyxFQUFFLGNBQWlDO1FBQzlDLE9BQU8sRUFBRSxTQUE0QjtRQUNyQyxZQUFZLEVBQUUsZUFBa0M7UUFDaEQsY0FBYyxFQUFFLGlCQUFvQztRQUNwRCxZQUFZLEVBQUUsZUFBa0M7UUFDaEQsaUJBQWlCLEVBQUUsb0JBQXVDO0tBQzdELENBQUM7SUFFVywyQkFBUSxHQUFHO1FBQ3BCLE9BQU8sRUFBRSxTQUFxQjtRQUM5QixVQUFVLEVBQUUsWUFBd0I7UUFDcEMsR0FBRyxFQUFFLEtBQWlCO1FBQ3RCLElBQUksRUFBRSxNQUFrQjtLQUMzQixDQUFDO0FBQ04sQ0FBQyxFQWxCZ0Isa0JBQWtCLEtBQWxCLGtCQUFrQixRQWtCbEMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEN5YnJpZCBCYW5rIEFQSVxuICogIyBDeWJyaWQgQVBJIGRvY3VtZW50YXRpb24gIFdlbGNvbWUgdG8gQ3licmlkLCBhbiBhbGwtaW4tb25lIGNyeXB0byBwbGF0Zm9ybSB0aGF0IGVuYWJsZXMgeW91IHRvIGVhc2lseSAqKmJ1aWxkKiogYW5kICoqbGF1bmNoKiogd2hpdGUtbGFiZWwgY3J5cHRvIHByb2R1Y3RzIG9yIHNlcnZpY2VzLiAgSW4gdGhlc2UgZG9jdW1lbnRzLCB5b3VcXCdsbCBmaW5kIGRldGFpbHMgb24gaG93IG91ciBSRVNUIEFQSSBvcGVyYXRlcyBhbmQgZ2VuZXJhbGx5IGhvdyBvdXIgcGxhdGZvcm0gZnVuY3Rpb25zLiAgSWYgeW91XFwncmUgbG9va2luZyBmb3Igb3VyIFVJIFNESyBXaWRnZXRzIGZvciBXZWIgb3IgTW9iaWxlIChpT1MvQW5kcm9pZCksIGdlbmVyYXRlZCBBUEkgY2xpZW50cywgb3IgZGVtbyBhcHBsaWNhdGlvbnMsIGhlYWQgb3ZlciB0byBvdXIgW0dpdGh1YiByZXBvXShodHRwczovL2dpdGh1Yi5jb20vQ3licmlkLWFwcCkuICDwn5KhIFdlIHJlY29tbWVuZCBib29rbWFya2luZyB0aGUgW0N5YnJpZCBMaW5rVHJlZV0oaHR0cHM6Ly9saW5rdHIuZWUvY3licmlkdGVjaG5vbG9naWVzKSB3aGljaCBjb250YWlucyBtYW55IGhlbHBmdWwgbGlua3MgdG8gcGxhdGZvcm0gcmVzb3VyY2VzLiAgIyMgR2V0dGluZyBTdGFydGVkICBUaGlzIGlzIEN5YnJpZFxcJ3MgcHVibGljIGludGVyYWN0aXZlIEFQSSBkb2N1bWVudGF0aW9uLCB3aGljaCBhbGxvd3MgeW91IHRvIGZ1bGx5IHRlc3Qgb3VyIEFQSXMuIElmIHlvdVxcJ2QgbGlrZSB0byB1c2UgYSBkaWZmZXJlbnQgdG9vbCB0byBleGVyY2lzZSBvdXIgQVBJcywgeW91IGNhbiBkb3dubG9hZCB0aGUgW09wZW4gQVBJIDMuMCB5YW1sXShodHRwczovL2JhbmsucHJvZHVjdGlvbi5jeWJyaWQuYXBwL2FwaS9zY2hlbWEvdjEvc3dhZ2dlci55YW1sKSBmb3IgaW1wb3J0LiAgSWYgeW91XFwncmUgbmV3IHRvIG91ciBBUElzIGFuZCB0aGUgQ3licmlkIFBsYXRmb3JtLCBmb2xsb3cgdGhlIGJlbG93IGd1aWRlcyB0byBnZXQgc2V0IHVwIGFuZCBmYW1pbGlhciB3aXRoIHRoZSBwbGF0Zm9ybTogIDEuIFtJbnRyb2R1Y3Rpb25dKGh0dHBzOi8vZG9jcy5jeWJyaWQueHl6L2RvY3MvaW50cm9kdWN0aW9uKSAyLiBbUGxhdGZvcm0gSW50cm9kdWN0aW9uXShodHRwczovL2RvY3MuY3licmlkLnh5ei9kb2NzL2hvdy1pcy1jeWJyaWQtYXJjaGl0ZWN0ZWQpIDMuIFtUZXN0aW5nIHdpdGggSG9zdGVkIFdlYiBEZW1vIEFwcF0oaHR0cHM6Ly9kb2NzLmN5YnJpZC54eXovZG9jcy90ZXN0aW5nLXdpdGgtaG9zdGVkLXdlYi1kZW1vLWFwcCkgIEluIFtHZXR0aW5nIFN0YXJ0ZWQgaW4gdGhlIEN5YnJpZCBTYW5kYm94XShodHRwczovL2RvY3MuY3licmlkLnh5ei9kb2NzL2hvdy1kby1pLWdldC1zdGFydGVkLXdpdGgtdGhlLXNhbmRib3gpLCB3ZSB3YWxrIHlvdSB0aHJvdWdoIGhvdyB0byB1c2UgdGhlIFtDeWJyaWQgU2FuZGJveF0oaHR0cHM6Ly9pZC5zYW5kYm94LmN5YnJpZC5hcHAvKSB0byBjcmVhdGUgYSB0ZXN0IGJhbmsgYW5kIGdlbmVyYXRlIEFQSSBrZXlzLiBJbiBbR2V0dGluZyBSZWFkeSBmb3IgVHJhZGluZ10oaHR0cHM6Ly9rYi5jeWJyaWQueHl6L2dldHRpbmctcmVhZHktZm9yLXRyYWRpbmcpLCB3ZSB3YWxrIHRocm91Z2ggY3JlYXRpbmcgY3VzdG9tZXJzLCBjdXN0b21lciBpZGVudGl0aWVzLCBhY2NvdW50cywgYXMgd2VsbCBhcyBleGVjdXRpbmcgcXVvdGVzIGFuZCB0cmFkZXMuICAjIyBXb3JraW5nIHdpdGggdGhlIEN5YnJpZCBQbGF0Zm9ybSAgVGhlcmUgYXJlIHRocmVlIHByaW1hcnkgd2F5cyB5b3UgY2FuIGludGVyYWN0IHdpdGggdGhlIEN5YnJpZCBwbGF0Zm9ybTogIDEuIERpcmVjdGx5IHZpYSBvdXIgUkVTVGZ1bCBBUEkgKHRoaXMgZG9jdW1lbnRhdGlvbikgMi4gVXNpbmcgb3VyIEFQSSBjbGllbnRzIGF2YWlsYWJsZSBpbiBhIHZhcmlldHkgb2YgbGFuZ3VhZ2VzIChbQW5ndWxhcl0oaHR0cHM6Ly9naXRodWIuY29tL0N5YnJpZC1hcHAvY3licmlkLWFwaS1iYW5rLWFuZ3VsYXIpLCBbSmF2YV0oaHR0cHM6Ly9naXRodWIuY29tL0N5YnJpZC1hcHAvY3licmlkLWFwaS1iYW5rLWphdmEpLCBbS290bGluXShodHRwczovL2dpdGh1Yi5jb20vQ3licmlkLWFwcC9jeWJyaWQtYXBpLWJhbmsta290bGluKSwgW1B5dGhvbl0oaHR0cHM6Ly9naXRodWIuY29tL0N5YnJpZC1hcHAvY3licmlkLWFwaS1iYW5rLXB5dGhvbiksIFtSdWJ5XShodHRwczovL2dpdGh1Yi5jb20vQ3licmlkLWFwcC9jeWJyaWQtYXBpLWJhbmstcnVieSksIFtTd2lmdF0oaHR0cHM6Ly9naXRodWIuY29tL0N5YnJpZC1hcHAvY3licmlkLWFwaS1iYW5rLXN3aWZ0KSBvciBbVHlwZXNjcmlwdF0oaHR0cHM6Ly9naXRodWIuY29tL0N5YnJpZC1hcHAvY3licmlkLWFwaS1iYW5rLXR5cGVzY3JpcHQpKSAzLiBJbnRlZ3JhdGluZyBhIHBsYXRmb3JtIHNwZWNpZmljIFNESyAoW1dlYl0oaHR0cHM6Ly9naXRodWIuY29tL0N5YnJpZC1hcHAvY3licmlkLXNkay13ZWIpLCBbQW5kcm9pZF0oaHR0cHM6Ly9naXRodWIuY29tL0N5YnJpZC1hcHAvY3licmlkLXNkay1hbmRyb2lkKSwgW2lPU10oaHR0cHM6Ly9naXRodWIuY29tL0N5YnJpZC1hcHAvY3licmlkLXNkay1pb3MpKSAgT3VyIGNvbXBsZXRlIHNldCBvZiBBUElzIGFsbG93cyB5b3UgdG8gbWFuYWdlIHJlc291cmNlcyBhY3Jvc3MgdGhyZWUgZGlzdGluY3QgYXJlYXM6IHlvdXIgYE9yZ2FuaXphdGlvbmAsIHlvdXIgYEJhbmtzYCBhbmQgeW91ciBgSWRlbnRpdGllc2AuIEZvciBtb3N0IG9mIHlvdXIgdGVzdGluZyBhbmQgaW50ZXJhY3Rpb24geW91XFwnbGwgYmUgdXNpbmcgdGhlIGBCYW5rYCBBUEksIHdoaWNoIGlzIHdoZXJlIHRoZSBtYWpvcml0eSBvZiBBUElzIHJlc2lkZS4gICpUaGUgY29tcGxldGUgc2V0IG9mIEFQSXMgY2FuIGJlIGZvdW5kIG9uIHRoZSBmb2xsb3dpbmcgcGFnZXM6KiAgfCBBUEkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IHwgW09yZ2FuaXphdGlvbiBBUEldKGh0dHBzOi8vb3JnYW5pemF0aW9uLnByb2R1Y3Rpb24uY3licmlkLmFwcC9hcGkvc2NoZW1hL3N3YWdnZXItdWkpICAgfCBBUElzIHRvIG1hbmFnZSBvcmdhbml6YXRpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHwgW0JhbmsgQVBJXShodHRwczovL2JhbmsucHJvZHVjdGlvbi5jeWJyaWQuYXBwL2FwaS9zY2hlbWEvc3dhZ2dlci11aSkgICAgICAgICAgICAgICAgICAgfCBBUElzIHRvIG1hbmFnZSBiYW5rcyAoYW5kIGFsbCBkb3duc3RyZWFtIGN1c3RvbWVyIGFjdGl2aXR5KSB8IHwgW0lkZW50aXRpZXMgQVBJXShodHRwczovL2lkLnByb2R1Y3Rpb24uY3licmlkLmFwcC9hcGkvc2NoZW1hL3N3YWdnZXItdWkpICAgICAgICAgICAgICAgICAgICAgICB8IEFQSXMgdG8gbWFuYWdlIG9yZ2FuaXphdGlvbiBhbmQgYmFuayBpZGVudGl0aWVzICAgICAgICAgICAgIHwgIEZvciBxdWVzdGlvbnMgcGxlYXNlIGNvbnRhY3QgW1N1cHBvcnRdKG1haWx0bzpzdXBwb3J0QGN5YnJpZC54eXopIGF0IGFueSB0aW1lIGZvciBhc3Npc3RhbmNlLCBvciBjb250YWN0IHRoZSBbUHJvZHVjdCBUZWFtXShtYWlsdG86cHJvZHVjdEBjeWJyaWQueHl6KSBmb3IgcHJvZHVjdCBzdWdnZXN0aW9ucy4gICMjIEF1dGhlbnRpY2F0aW5nIHdpdGggdGhlIEFQSSAgVGhlIEN5YnJpZCBQbGF0Zm9ybSB1c2VzIE9BdXRoIDIuMCBCZWFyZXIgVG9rZW5zIHRvIGF1dGhlbnRpY2F0ZSByZXF1ZXN0cyB0byB0aGUgcGxhdGZvcm0uIENyZWRlbnRpYWxzIHRvIGNyZWF0ZSBgT3JnYW5pemF0aW9uYCBhbmQgYEJhbmtgIHRva2VucyBjYW4gYmUgZ2VuZXJhdGVkIHZpYSB0aGUgW0N5YnJpZCBTYW5kYm94XShodHRwczovL2lkLnByb2R1Y3Rpb24uY3licmlkLmFwcCkuIEFjY2VzcyB0b2tlbnMgY2FuIGJlIGdlbmVyYXRlZCBmb3IgYSBgQ3VzdG9tZXJgIGFzIHdlbGwgdmlhIHRoZSBbQ3licmlkIElkUF0oaHR0cHM6Ly9pZC5wcm9kdWN0aW9uLmN5YnJpZC5hcHApIGFzIHdlbGwuICBBbiBgT3JnYW5pemF0aW9uYCBhY2Nlc3MgdG9rZW4gYXBwbGllcyBicm9hZGx5IHRvIHRoZSB3aG9sZSBPcmdhbml6YXRpb24gYW5kIGFsbCBvZiBpdHMgYEJhbmtzYCwgd2hlcmVhcywgYSBgQmFua2AgYWNjZXNzIHRva2VuIGlzIHNwZWNpZmljIHRvIGFuIGluZGl2aWR1YWwgQmFuay4gYEN1c3RvbWVyYCB0b2tlbnMsIHNpbWlsYXJseSwgYXJlIHNjb3BlZCB0byBhIHNwZWNpZmljIGN1c3RvbWVyIGluIGEgYmFuay4gIEJvdGggYE9yZ2FuaXphdGlvbmAgYW5kIGBCYW5rYCB0b2tlbnMgY2FuIGJlIGNyZWF0ZWQgdXNpbmcgdGhlIE9BdXRoIENsaWVudCBDcmVkZW50aWFsIEdyYW50IGZsb3cuIEVhY2ggT3JnYW5pemF0aW9uIGFuZCBCYW5rIGhhcyBpdHMgb3duIHVuaXF1ZSBgQ2xpZW50IElEYCBhbmQgYFNlY3JldGAgdGhhdCBhbGxvd3MgZm9yIG1hY2hpbmUtdG8tbWFjaGluZSBhdXRoZW50aWNhdGlvbi4gIEEgYEJhbmtgIGNhbiB0aGVuIGdlbmVyYXRlIGBDdXN0b21lcmAgYWNjZXNzIHRva2VucyB2aWEgQVBJIHVzaW5nIG91ciBbSWRlbnRpdGllcyBBUEldKGh0dHBzOi8vaWQucHJvZHVjdGlvbi5jeWJyaWQuYXBwL2FwaS9zY2hlbWEvc3dhZ2dlci11aSkuICA8Zm9udCBjb2xvcj1cXFwib3JhbmdlXFxcIj4qKuKaoO+4jyBOZXZlciBzaGFyZSB5b3VyIENsaWVudCBJRCBvciBTZWNyZXQgcHVibGljbHkgb3IgaW4geW91ciBzb3VyY2UgY29kZSByZXBvc2l0b3J5LioqPC9mb250PiAgWW91ciBgQ2xpZW50IElEYCBhbmQgYFNlY3JldGAgY2FuIGJlIGV4Y2hhbmdlZCBmb3IgYSB0aW1lLWxpbWl0ZWQgYEJlYXJlciBUb2tlbmAgYnkgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgQ3licmlkIElkZW50aXR5IFByb3ZpZGVyIG9yIHRocm91Z2ggaW50ZXJhY3Rpbmcgd2l0aCB0aGUgKipBdXRob3JpemUqKiBidXR0b24gaW4gdGhpcyBkb2N1bWVudC4gIFRoZSBmb2xsb3dpbmcgY3VybCBjb21tYW5kIGNhbiBiZSB1c2VkIHRvIHF1aWNrbHkgZ2VuZXJhdGUgYSBgQmVhcmVyIFRva2VuYCBmb3IgdXNlIGluIHRlc3RpbmcgdGhlIEFQSSBvciBkZW1vIGFwcGxpY2F0aW9ucy4gIGBgYCAjIEV4YW1wbGUgcmVxdWVzdCB3aGVuIHVzaW5nIEJhbmsgY3JlZGVudGlhbHMgY3VybCAtWCBQT1NUIGh0dHBzOi8vaWQucHJvZHVjdGlvbi5jeWJyaWQuYXBwL29hdXRoL3Rva2VuIC1kIFxcJ3sgICAgIFxcXCJncmFudF90eXBlXFxcIjogXFxcImNsaWVudF9jcmVkZW50aWFsc1xcXCIsICAgICBcXFwiY2xpZW50X2lkXFxcIjogXFxcIjxZb3VyIENsaWVudCBJRD5cXFwiLCAgICAgXFxcImNsaWVudF9zZWNyZXRcXFwiOiBcXFwiPFlvdXIgU2VjcmV0PlxcXCIsICAgICBcXFwic2NvcGVcXFwiOiBcXFwiYmFua3M6cmVhZCBiYW5rczp3cml0ZSBiYW5rX2FwcGxpY2F0aW9uczpleGVjdXRlIGFjY291bnRzOnJlYWQgYWNjb3VudHM6ZXhlY3V0ZSBjb3VudGVycGFydGllczpyZWFkIGNvdW50ZXJwYXJ0aWVzOndyaXRlIGNvdW50ZXJwYXJ0aWVzOmV4ZWN1dGUgY3VzdG9tZXJzOnJlYWQgY3VzdG9tZXJzOndyaXRlIGN1c3RvbWVyczpleGVjdXRlIHByaWNlczpyZWFkIHF1b3RlczpleGVjdXRlIHF1b3RlczpyZWFkIHRyYWRlczpleGVjdXRlIHRyYWRlczpyZWFkIHRyYW5zZmVyczpleGVjdXRlIHRyYW5zZmVyczpyZWFkIGV4dGVybmFsX2JhbmtfYWNjb3VudHM6cmVhZCBleHRlcm5hbF9iYW5rX2FjY291bnRzOndyaXRlIGV4dGVybmFsX2JhbmtfYWNjb3VudHM6ZXhlY3V0ZSBleHRlcm5hbF93YWxsZXRzOnJlYWQgZXh0ZXJuYWxfd2FsbGV0czpleGVjdXRlIHdvcmtmbG93czpyZWFkIHdvcmtmbG93czpleGVjdXRlIGRlcG9zaXRfYWRkcmVzc2VzOnJlYWQgZGVwb3NpdF9hZGRyZXNzZXM6ZXhlY3V0ZSBkZXBvc2l0X2JhbmtfYWNjb3VudHM6cmVhZCBkZXBvc2l0X2JhbmtfYWNjb3VudHM6ZXhlY3V0ZSBpbnZvaWNlczpyZWFkIGludm9pY2VzOndyaXRlIGludm9pY2VzOmV4ZWN1dGUgaWRlbnRpdHlfdmVyaWZpY2F0aW9uczpyZWFkIGlkZW50aXR5X3ZlcmlmaWNhdGlvbnM6d3JpdGUgaWRlbnRpdHlfdmVyaWZpY2F0aW9uczpleGVjdXRlIGZpbGVzOnJlYWQgZmlsZXM6ZXhlY3V0ZVxcXCIgICB9XFwnIC1IIFxcXCJDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL2pzb25cXFwiICAjIFdoZW4gdXNpbmcgT3JnYW5pemF0aW9uIGNyZWRlbnRpYWxzIHNldCBgc2NvcGVgIHRvIFxcJ29yZ2FuaXphdGlvbnM6cmVhZCBvcmdhbml6YXRpb25zOndyaXRlIG9yZ2FuaXphdGlvbl9hcHBsaWNhdGlvbnM6ZXhlY3V0ZSBiYW5rczpyZWFkIGJhbmtzOndyaXRlIGJhbmtzOmV4ZWN1dGUgYmFua19hcHBsaWNhdGlvbnM6ZXhlY3V0ZSB1c2VyczpyZWFkIHVzZXJzOmV4ZWN1dGUgY291bnRlcnBhcnRpZXM6cmVhZCBjdXN0b21lcnM6cmVhZCBhY2NvdW50czpyZWFkIHByaWNlczpyZWFkIHF1b3RlczpleGVjdXRlIHF1b3RlczpyZWFkIHRyYWRlczpleGVjdXRlIHRyYWRlczpyZWFkIHRyYW5zZmVyczpyZWFkIHRyYW5zZmVyczpleGVjdXRlIGV4dGVybmFsX2JhbmtfYWNjb3VudHM6cmVhZCBleHRlcm5hbF93YWxsZXRzOnJlYWQgd29ya2Zsb3dzOnJlYWQgZGVwb3NpdF9hZGRyZXNzZXM6cmVhZCBkZXBvc2l0X2JhbmtfYWNjb3VudHM6cmVhZCBpbnZvaWNlczpyZWFkIHN1YnNjcmlwdGlvbnM6cmVhZCBzdWJzY3JpcHRpb25zOndyaXRlIHN1YnNjcmlwdGlvbnM6ZXhlY3V0ZSBzdWJzY3JpcHRpb25fZXZlbnRzOnJlYWQgc3Vic2NyaXB0aW9uX2V2ZW50czpleGVjdXRlIGlkZW50aXR5X3ZlcmlmaWNhdGlvbnM6cmVhZCBmaWxlczpyZWFkIGZpbGVzOmV4ZWN1dGVcXCcgYGBgIDxmb250IGNvbG9yPVxcXCJvcmFuZ2VcXFwiPioq4pqg77iPIE5vdGU6IFRoZSBhYm92ZSBjdXJsIHdpbGwgY3JlYXRlIGEgYmVhcmVyIHRva2VuIHdpdGggZnVsbCBzY29wZSBhY2Nlc3MuIERlbGV0ZSBzY29wZXMgaWYgeW91XFwnZCBsaWtlIHRvIHJlc3RyaWN0IGFjY2Vzcy4qKjwvZm9udD4gICMjIEF1dGhlbnRpY2F0aW9uIFNjb3BlcyAgVGhlIEN5YnJpZCBwbGF0Zm9ybSBzdXBwb3J0cyB0aGUgdXNlIG9mIHNjb3BlcyB0byBjb250cm9sIHRoZSBsZXZlbCBvZiBhY2Nlc3MgYSB0b2tlbiBpcyBsaW1pdGVkIHRvLiBTY29wZXMgZG8gbm90IGdyYW50IGFjY2VzcyB0byByZXNvdXJjZXM7IGluc3RlYWQsIHRoZXkgcHJvdmlkZSBsaW1pdHMsIGluIHN1cHBvcnQgb2YgdGhlIGxlYXN0IHByaXZpbGVnZSBwcmluY2lwYWwuICBUaGUgZm9sbG93aW5nIHNjb3BlcyBhcmUgYXZhaWxhYmxlIG9uIHRoZSBwbGF0Zm9ybSBhbmQgY2FuIGJlIHJlcXVlc3RlZCB3aGVuIGdlbmVyYXRpbmcgZWl0aGVyIGFuIE9yZ2FuaXphdGlvbiwgQmFuayBvciBDdXN0b21lciB0b2tlbi4gR2VuZXJhbGx5IHNwZWFraW5nLCB0aGUgX1JlYWRfIHNjb3BlIGlzIHJlcXVpcmVkIHRvIHJlYWQgYW5kIGxpc3QgcmVzb3VyY2VzLCB0aGUgX1dyaXRlXyBzY29wZSBpcyByZXF1aXJlZCB0byB1cGRhdGUgYSByZXNvdXJjZSBhbmQgdGhlIF9FeGVjdXRlXyBzY29wZSBpcyByZXF1aXJlZCB0byBjcmVhdGUgYSByZXNvdXJjZS4gIHwgUmVzb3VyY2UgICAgICAgICAgICAgIHwgUmVhZCBzY29wZSAoVG9rZW4gVHlwZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFdyaXRlIHNjb3BlIChUb2tlbiBUeXBlKSAgICAgICAgICAgICAgICAgICAgICB8IEV4ZWN1dGUgc2NvcGUgKFRva2VuIFR5cGUpICAgICAgICAgICAgICAgICAgICAgICB8IHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IHwgQWNjb3VudCAgICAgICAgICAgICAgIHwgYWNjb3VudHM6cmVhZCAoT3JnYW5pemF0aW9uLCBCYW5rLCBDdXN0b21lcikgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGFjY291bnRzOmV4ZWN1dGUgKEJhbmssIEN1c3RvbWVyKSAgICAgICAgICAgICAgICB8IHwgQmFuayAgICAgICAgICAgICAgICAgIHwgYmFua3M6cmVhZCAoT3JnYW5pemF0aW9uLCBCYW5rKSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGJhbmtzOndyaXRlIChPcmdhbml6YXRpb24sIEJhbmspICAgICAgICAgICAgICB8IGJhbmtzOmV4ZWN1dGUgKE9yZ2FuaXphdGlvbikgICAgICAgICAgICAgICAgICAgICB8IHwgQ3VzdG9tZXIgICAgICAgICAgICAgIHwgY3VzdG9tZXJzOnJlYWQgKE9yZ2FuaXphdGlvbiwgQmFuaywgQ3VzdG9tZXIpICAgICAgICAgICAgICB8IGN1c3RvbWVyczp3cml0ZSAoQmFuaywgQ3VzdG9tZXIpICAgICAgICAgICAgICB8IGN1c3RvbWVyczpleGVjdXRlIChCYW5rKSAgICAgICAgICAgICAgICAgICAgICAgICB8IHwgQ291bnRlcnBhcnR5ICAgICAgICAgIHwgY291bnRlcnBhcnRpZXM6cmVhZCAoT3JnYW5pemF0aW9uLCBCYW5rLCBDdXN0b21lcikgICAgICAgICB8IGNvdW50ZXJwYXJ0aWVzOndyaXRlIChCYW5rLCBDdXN0b21lcikgICAgICAgICB8IGNvdW50ZXJwYXJ0aWVzOmV4ZWN1dGUgKEJhbmspICAgICAgICAgICAgICAgICAgICB8IHwgRGVwb3NpdCBBZGRyZXNzICAgICAgIHwgZGVwb3NpdF9hZGRyZXNzZXM6cmVhZCAoT3JnYW5pemF0aW9uLCBCYW5rLCBDdXN0b21lcikgICAgICB8IGRlcG9zaXRfYWRkcmVzc2VzOndyaXRlIChCYW5rLCBDdXN0b21lcikgICAgICB8IGRlcG9zaXRfYWRkcmVzc2VzOmV4ZWN1dGUgKEJhbmssIEN1c3RvbWVyKSAgICAgICB8IHwgRXh0ZXJuYWwgQmFuayBBY2NvdW50IHwgZXh0ZXJuYWxfYmFua19hY2NvdW50czpyZWFkIChPcmdhbml6YXRpb24sIEJhbmssIEN1c3RvbWVyKSB8IGV4dGVybmFsX2JhbmtfYWNjb3VudHM6d3JpdGUgKEJhbmssIEN1c3RvbWVyKSB8IGV4dGVybmFsX2JhbmtfYWNjb3VudHM6ZXhlY3V0ZSAoQmFuaywgQ3VzdG9tZXIpICB8IHwgRXh0ZXJuYWwgV2FsbGV0ICAgICAgIHwgZXh0ZXJuYWxfd2FsbGV0OnJlYWQgKE9yZ2FuaXphdGlvbiwgQmFuaywgQ3VzdG9tZXIpICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGV4dGVybmFsX3dhbGxldDpleGVjdXRlIChCYW5rLCBDdXN0b21lcikgICAgICAgICB8IHwgT3JnYW5pemF0aW9uICAgICAgICAgIHwgb3JnYW5pemF0aW9uczpyZWFkIChPcmdhbml6YXRpb24pICAgICAgICAgICAgICAgICAgICAgICAgICB8IG9yZ2FuaXphdGlvbnM6d3JpdGUgKE9yZ2FuaXphdGlvbikgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHwgVXNlciAgICAgICAgICAgICAgICAgIHwgdXNlcnM6cmVhZCAoT3JnYW5pemF0aW9uKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHVzZXJzOmV4ZWN1dGUgKE9yZ2FuaXphdGlvbikgICAgICAgICAgICAgICAgICAgICB8IHwgUHJpY2UgICAgICAgICAgICAgICAgIHwgcHJpY2VzOnJlYWQgKEJhbmssIEN1c3RvbWVyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHwgUXVvdGUgICAgICAgICAgICAgICAgIHwgcXVvdGVzOnJlYWQgKE9yZ2FuaXphdGlvbiwgQmFuaywgQ3VzdG9tZXIpICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHF1b3RlczpleGVjdXRlIChPcmdhbml6YXRpb24sIEJhbmssIEN1c3RvbWVyKSAgICB8IHwgVHJhZGUgICAgICAgICAgICAgICAgIHwgdHJhZGVzOnJlYWQgKE9yZ2FuaXphdGlvbiwgQmFuaywgQ3VzdG9tZXIpICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHRyYWRlczpleGVjdXRlIChPcmdhbml6YXRpb24sIEJhbmssIEN1c3RvbWVyKSAgICB8IHwgVHJhbnNmZXIgICAgICAgICAgICAgIHwgdHJhbnNmZXJzOnJlYWQgKE9yZ2FuaXphdGlvbiwgQmFuaywgQ3VzdG9tZXIpICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHRyYW5zZmVyczpleGVjdXRlIChPcmdhbml6YXRpb24sIEJhbmssIEN1c3RvbWVyKSB8IHwgV29ya2Zsb3cgICAgICAgICAgICAgIHwgd29ya2Zsb3dzOnJlYWQgKE9yZ2FuaXphdGlvbiwgQmFuaywgQ3VzdG9tZXIpICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHdvcmtmbG93czpleGVjdXRlIChCYW5rLCBDdXN0b21lcikgICAgICAgICAgICAgICB8IHwgSW52b2ljZSAgICAgICAgICAgICAgIHwgaW52b2ljZXM6cmVhZCAoT3JnYW5pemF0aW9uLCBCYW5rLCBDdXN0b21lcikgICAgICAgICAgICAgICB8IGludm9pY2VzOndyaXRlIChCYW5rLCBDdXN0b21lcikgICAgICAgICAgICAgICB8IGludm9pY2VzOmV4ZWN1dGUgKEJhbmssIEN1c3RvbWVyKSAgICAgICAgICAgICAgICB8ICAjIyBBdmFpbGFibGUgRW5kcG9pbnRzICBUaGUgYXZhaWxhYmxlIEFQSXMgZm9yIHRoZSBbSWRlbnRpdHldKGh0dHBzOi8vaWQucHJvZHVjdGlvbi5jeWJyaWQuYXBwL2FwaS9zY2hlbWEvc3dhZ2dlci11aSksIFtPcmdhbml6YXRpb25dKGh0dHBzOi8vb3JnYW5pemF0aW9uLnByb2R1Y3Rpb24uY3licmlkLmFwcC9hcGkvc2NoZW1hL3N3YWdnZXItdWkpIGFuZCBbQmFua10oaHR0cHM6Ly9iYW5rLnByb2R1Y3Rpb24uY3licmlkLmFwcC9hcGkvc2NoZW1hL3N3YWdnZXItdWkpIEFQSSBzZXJ2aWNlcyBhcmUgbGlzdGVkIGJlbG93OiAgfCBBUEkgU2VydmljZSAgfCBNb2RlbCAgICAgICAgICAgICAgICB8IEFQSSBFbmRwb2ludCBQYXRoICAgICAgICAgICAgICB8IERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB8LS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IHwgSWRlbnRpdHkgICAgIHwgQmFuayAgICAgICAgICAgICAgICAgfCAvYXBpL2JhbmtfYXBwbGljYXRpb25zICAgICAgICAgfCBDcmVhdGUgYW5kIGxpc3QgYmFua3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgfCBJZGVudGl0eSAgICAgfCBDdXN0b21lclRva2VuICAgICAgICB8IC9hcGkvY3VzdG9tZXJfdG9rZW5zICAgICAgICAgICB8IENyZWF0ZSBjdXN0b21lciBKV1QgYWNjZXNzIHRva2VucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB8IElkZW50aXR5ICAgICB8IE9yZ2FuaXphdGlvbiAgICAgICAgIHwgL2FwaS9vcmdhbml6YXRpb25fYXBwbGljYXRpb25zIHwgQ3JlYXRlIGFuZCBsaXN0IG9yZ2FuaXphdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHwgSWRlbnRpdHkgICAgIHwgT3JnYW5pemF0aW9uICAgICAgICAgfCAvYXBpL3VzZXJzICAgICAgICAgICAgICAgICAgICAgfCBDcmVhdGUgYW5kIGxpc3Qgb3JnYW5pemF0aW9uIHVzZXJzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgfCBPcmdhbml6YXRpb24gfCBPcmdhbml6YXRpb24gICAgICAgICB8IC9hcGkvb3JnYW5pemF0aW9ucyAgICAgICAgICAgICB8IEFQSXMgdG8gcmV0cmlldmUgYW5kIHVwZGF0ZSBvcmdhbml6YXRpb24gbmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB8IEJhbmsgICAgICAgICB8IEFjY291bnQgICAgICAgICAgICAgIHwgL2FwaS9hY2NvdW50cyAgICAgICAgICAgICAgICAgIHwgQ3JlYXRlIGFuZCBsaXN0IGFjY291bnRzLCB3aGljaCBob2xkIGEgc3BlY2lmaWMgYXNzZXQgZm9yIGEgY3VzdG9tZXJzICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHwgQmFuayAgICAgICAgIHwgQXNzZXQgICAgICAgICAgICAgICAgfCAvYXBpL2Fzc2V0cyAgICAgICAgICAgICAgICAgICAgfCBHZXQgYSBsaXN0IG9mIGFzc2V0cyBzdXBwb3J0ZWQgYnkgdGhlIHBsYXRmb3JtIChleDogQlRDLCBFVEgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgfCBCYW5rICAgICAgICAgfCBCYW5rICAgICAgICAgICAgICAgICB8IC9hcGkvYmFua3MgICAgICAgICAgICAgICAgICAgICB8IENyZWF0ZSwgdXBkYXRlIGFuZCBsaXN0IGJhbmtzLCB0aGUgcGFyZW50IHRvIGN1c3RvbWVycywgYWNjb3VudHMsIGV0YyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB8IEJhbmsgICAgICAgICB8IEN1c3RvbWVyICAgICAgICAgICAgIHwgL2FwaS9jdXN0b21lcnMgICAgICAgICAgICAgICAgIHwgQ3JlYXRlIGFuZCBsaXN0IGN1c3RvbWVycyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHwgQmFuayAgICAgICAgIHwgQ291bnRlcnBhcnR5ICAgICAgICAgfCAvYXBpL2NvdW50ZXJwYXJ0aWVzICAgICAgICAgICAgfCBDcmVhdGUgYW5kIGxpc3QgY291bnRlcnBhcnRpZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgfCBCYW5rICAgICAgICAgfCBEZXBvc2l0QWRkcmVzcyAgICAgICB8IC9hcGkvZGVwb3NpdF9hZGRyZXNzZXMgICAgICAgICB8IENyZWF0ZSwgZ2V0IGFuZCBsaXN0IGRlcG9zaXQgYWRkcmVzc2VzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB8IEJhbmsgICAgICAgICB8IEV4dGVybmFsQmFua0FjY291bnQgIHwgL2FwaS9leHRlcm5hbF9iYW5rX2FjY291bnRzICAgIHwgQ3JlYXRlLCBnZXQgYW5kIGxpc3QgZXh0ZXJuYWwgYmFuayBhY2NvdW50cywgd2hpY2ggY29ubmVjdCBjdXN0b21lciBiYW5rIGFjY291bnRzIHRvIHRoZSBwbGF0Zm9ybSB8IHwgQmFuayAgICAgICAgIHwgRXh0ZXJuYWxXYWxsZXQgICAgICAgfCAvYXBpL2V4dGVybmFsX3dhbGxldHMgICAgICAgICAgfCBDcmVhdGUsIGdldCwgbGlzdCBhbmQgZGVsZXRlIGV4dGVybmFsIHdhbGxldHMsIHdoaWNoIGNvbm5lY3QgY3VzdG9tZXIgd2FsbGV0cyB0byB0aGUgcGxhdGZvcm0gICAgIHwgfCBCYW5rICAgICAgICAgfCBJZGVudGl0eVZlcmlmaWNhdGlvbiB8IC9hcGkvaWRlbnRpdHlfdmVyaWZpY2F0aW9ucyAgICB8IENyZWF0ZSBhbmQgbGlzdCBpZGVudGl0eSB2ZXJpZmljYXRpb25zLCB3aGljaCBhcmUgcGVyZm9ybWVkIG9uIGN1c3RvbWVycyBmb3IgS1lDICAgICAgICAgICAgICAgICAgfCB8IEJhbmsgICAgICAgICB8IEludm9pY2UgICAgICAgICAgICAgIHwgL2FwaS9pbnZvaWNlcyAgICAgICAgICAgICAgICAgIHwgQ3JlYXRlLCBnZXQsIGNhbmNlbCBhbmQgbGlzdCBpbnZvaWNlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHwgQmFuayAgICAgICAgIHwgUGF5bWVudEluc3RydWN0aW9uICAgfCAvYXBpL3BheW1lbnRfaW5zdHJ1Y3Rpb25zICAgICAgfCBDcmVhdGUsIGdldCBhbmQgbGlzdCBwYXltZW50IGluc3RydWN0aW9ucyBmb3IgaW52b2ljZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgfCBCYW5rICAgICAgICAgfCBQcmljZSAgICAgICAgICAgICAgICB8IC9hcGkvcHJpY2VzICAgICAgICAgICAgICAgICAgICB8IEdldCB0aGUgY3VycmVudCBwcmljZXMgZm9yIGFzc2V0cyBvbiB0aGUgcGxhdGZvcm0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB8IEJhbmsgICAgICAgICB8IFF1b3RlICAgICAgICAgICAgICAgIHwgL2FwaS9xdW90ZXMgICAgICAgICAgICAgICAgICAgIHwgQ3JlYXRlIGFuZCBsaXN0IHF1b3Rlcywgd2hpY2ggYXJlIHJlcXVpcmVkIHRvIGV4ZWN1dGUgdHJhZGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHwgQmFuayAgICAgICAgIHwgU3ltYm9sICAgICAgICAgICAgICAgfCAvYXBpL3N5bWJvbHMgICAgICAgICAgICAgICAgICAgfCBHZXQgYSBsaXN0IG9mIHN5bWJvbHMgc3VwcG9ydGVkIGZvciB0cmFkZSAoZXg6IEJUQy1VU0QpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgfCBCYW5rICAgICAgICAgfCBUcmFkZSAgICAgICAgICAgICAgICB8IC9hcGkvdHJhZGVzICAgICAgICAgICAgICAgICAgICB8IENyZWF0ZSBhbmQgbGlzdCB0cmFkZXMsIHdoaWNoIGJ1eSBvciBzZWxsIGNyeXB0b2N1cnJlbmN5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB8IEJhbmsgICAgICAgICB8IFRyYW5zZmVyICAgICAgICAgICAgIHwgL2FwaS90cmFuc2ZlcnMgICAgICAgICAgICAgICAgIHwgQ3JlYXRlLCBnZXQgYW5kIGxpc3QgdHJhbnNmZXJzIChlLmcuLCBmdW5kaW5nLCBib29rKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHwgQmFuayAgICAgICAgIHwgV29ya2Zsb3cgICAgICAgICAgICAgfCAvYXBpL3dvcmtmbG93cyAgICAgICAgICAgICAgICAgfCBDcmVhdGUsIGdldCBhbmQgbGlzdCB3b3JrZmxvd3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICMjIFVuZGVyc3RhbmRpbmcgT2JqZWN0IE1vZGVscyAmIEVuZHBvaW50cyAgKipPcmdhbml6YXRpb25zKiogIEFuIGBPcmdhbml6YXRpb25gIGlzIG1lYW50IHRvIHJlcHJlc2VudCB0aGUgb3JnYW5pemF0aW9uIHBhcnRuZXJpbmcgd2l0aCBDeWJyaWQgdG8gdXNlIG91ciBwbGF0Zm9ybS4gIEFuIGBPcmdhbml6YXRpb25gIHR5cGljYWxseSBkb2VzIG5vdCBkaXJlY3RseSBpbnRlcmFjdCB3aXRoIGBjdXN0b21lcnNgLiBJbnN0ZWFkLCBhbiBPcmdhbml6YXRpb24gaGFzIG9uZSBvciBtb3JlIGBiYW5rc2AsIHdoaWNoIGVuY29tcGFzcyB0aGUgZmluYW5jaWFsIHNlcnZpY2Ugb2ZmZXJpbmdzIG9mIHRoZSBwbGF0Zm9ybS4gICoqQmFua3MqKiAgQSBgQmFua2AgaXMgb3duZWQgYnkgYW4gYE9yZ2FuaXphdGlvbmAgYW5kIGNhbiBiZSB0aG91Z2h0IG9mIGFzIGFuIGVudmlyb25tZW50IG9yIGNvbnRhaW5lciBmb3IgYGN1c3RvbWVyc2AgYW5kIHByb2R1Y3Qgb2ZmZXJpbmdzLiBCYW5rcyBhcmUgY3JlYXRlZCBpbiBlaXRoZXIgYFNhbmRib3hgIG9yIGBQcm9kdWN0aW9uYCBtb2RlLCB3aGVyZSBgU2FuZGJveGAgaXMgdGhlIGVudmlyb25tZW50IHRoYXQgeW91IHdvdWxkIHRlc3QsIHByb3RvdHlwZSBhbmQgYnVpbGQgaW4gcHJpb3IgdG8gbW92aW5nIHRvIGBQcm9kdWN0aW9uYC4gIEFuIGBPcmdhbml6YXRpb25gIGNhbiBoYXZlIG11bHRpcGxlIGBiYW5rc2AsIGluIGVpdGhlciBgU2FuZGJveGAgb3IgYFByb2R1Y3Rpb25gIGVudmlyb25tZW50cy4gQSBgU2FuZGJveCBCYW5rYCB3aWxsIGJlIGJhY2tlZCBieSBzdHViYmVkIGRhdGEgYW5kIHByb2Nlc3MgZmxvd3MuIEZvciBpbnN0YW5jZSwgZnVuZGluZyBzb3VyY2UgdHJhbnNmZXIgcHJvY2Vzc2VzIGFzIHdlbGwgYXMgdHJhZGVzIHdpbGwgYmUgc2ltdWxhdGVkIHJhdGhlciB0aGFuIHBlcmZvcm1lZCwgaG93ZXZlciBhc3NldCBwcmljZXMgYXJlIHJlcHJlc2VudGF0aXZlIG9mIHJlYWwtd29ybGQgdmFsdWVzLiBZb3UgaGF2ZSBhbiB1bmxpbWl0ZWQgYW1vdW50IG9mIHNpbXVsYXRlZCBmaWF0IGN1cnJlbmN5IGZvciB0ZXN0aW5nIHB1cnBvc2VzLiAgKipDdXN0b21lcnMqKiAgYEN1c3RvbWVyc2AgcmVwcmVzZW50IHlvdXIgYmFua2luZyB1c2VycyBvbiB0aGUgcGxhdGZvcm0uIEF0IHByZXNlbnQsIHdlIG9mZmVyIHN1cHBvcnQgZm9yIGBJbmRpdmlkdWFsc2AgYXMgQ3VzdG9tZXJzLiAgYEN1c3RvbWVyc2AgbXVzdCBiZSB2ZXJpZmllZCAoaS5lLiwgS1lDXFwnZCkgaW4gb3VyIHN5c3RlbSBiZWZvcmUgdGhleSBjYW4gcGxheSBhbnkgcGFydCBvbiB0aGUgcGxhdGZvcm0sIHdoaWNoIG1lYW5zIHRoZXkgbXVzdCBoYXZlIGFuIGFzc29jaWF0ZWQgYW5kIGEgcGFzc2luZyBgSWRlbnRpdHkgVmVyaWZpY2F0aW9uYC4gU2VlIHRoZSBJZGVudGl0eSBWZXJpZmljYXRpb25zIHNlY3Rpb24gZm9yIG1vcmUgZGV0YWlscyBvbiBob3cgYSBjdXN0b21lciBjYW4gYmUgdmVyaWZpZWQuICBgQ3VzdG9tZXJzYCBtdXN0IGFsc28gaGF2ZSBhbiBgQWNjb3VudGAgdG8gYmUgYWJsZSB0byB0cmFuc2FjdCwgaW4gdGhlIGRlc2lyZWQgYXNzZXQgY2xhc3MuIFNlZSB0aGUgQWNjb3VudHMgQVBJcyBmb3IgbW9yZSBkZXRhaWxzIG9uIHNldHRpbmcgdXAgYWNjb3VudHMgZm9yIHRoZSBjdXN0b21lci4gXG4gKlxuICogVGhlIHZlcnNpb24gb2YgdGhlIE9wZW5BUEkgZG9jdW1lbnQ6IHYwLjEyMy4yMTRcbiAqIENvbnRhY3Q6IHN1cHBvcnRAY3licmlkLmFwcFxuICpcbiAqIE5PVEU6IFRoaXMgY2xhc3MgaXMgYXV0byBnZW5lcmF0ZWQgYnkgT3BlbkFQSSBHZW5lcmF0b3IgKGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaCkuXG4gKiBodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2hcbiAqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cbiAqL1xuaW1wb3J0IHsgUG9zdEZlZUJhbmtNb2RlbCB9IGZyb20gJy4vcG9zdEZlZSc7XG5pbXBvcnQgeyBQb3N0UXVvdGVFbnRyeUJhbmtNb2RlbCB9IGZyb20gJy4vcG9zdFF1b3RlRW50cnknO1xuXG5cbi8qKlxuICogUmVxdWVzdCBib2R5IGZvciBxdW90ZSBjcmVhdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQb3N0UXVvdGVCYW5rTW9kZWwgeyBcbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiBwcm9kdWN0IHRoZSBxdW90ZSBpcyBmb3IuXG4gICAgICovXG4gICAgcHJvZHVjdF90eXBlPzogUG9zdFF1b3RlQmFua01vZGVsLlByb2R1Y3RUeXBlRW51bSB8IG51bGw7XG4gICAgLyoqXG4gICAgICogVGhlIHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgYmFuay5cbiAgICAgKi9cbiAgICBiYW5rX2d1aWQ/OiBzdHJpbmcgfCBudWxsO1xuICAgIC8qKlxuICAgICAqIFRoZSB1bmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIGN1c3RvbWVyLlxuICAgICAqL1xuICAgIGN1c3RvbWVyX2d1aWQ/OiBzdHJpbmcgfCBudWxsO1xuICAgIC8qKlxuICAgICAqIFRoZSBhbW91bnQgdG8gYmUgcmVjZWl2ZWQgaW4gYmFzZSB1bml0cyBvZiB0aGUgY3VycmVuY3k6IGN1cnJlbmN5IGlzIFxcXCJhc3NldFxcXCIgZm9yIGJ1eSBhbmQgXFxcImNvdW50ZXJfYXNzZXRcXFwiIGZvciBzZWxsIGZvciB0cmFkZSBxdW90ZXMuXG4gICAgICovXG4gICAgcmVjZWl2ZV9hbW91bnQ/OiBzdHJpbmcgfCBudWxsO1xuICAgIC8qKlxuICAgICAqIFRoZSBhbW91bnQgdG8gYmUgZGVsaXZlcmVkIGluIGJhc2UgdW5pdHMgb2YgdGhlIGN1cnJlbmN5OiBjdXJyZW5jeSBpcyBcXFwiY291bnRlcl9hc3NldFxcXCIgZm9yIGJ1eSBhbmQgXFxcImFzc2V0XFxcIiBmb3Igc2VsbCBmb3IgdHJhZGUgcXVvdGVzLlxuICAgICAqL1xuICAgIGRlbGl2ZXJfYW1vdW50Pzogc3RyaW5nIHwgbnVsbDtcbiAgICAvKipcbiAgICAgKiBUaGUgYXNzZXQgY29kZSB0aGUgcXVvdGUgd2FzIHJlcXVlc3RlZCBmb3IuIFJlcXVpcmVkIHdoZW4gcHJvZHVjdF90eXBlIGlzIGxpZ2h0bmluZ190cmFuc2ZlciwgcHJvZHVjdF90eXBlIGlzIGJvb2tfdHJhbnNmZXIsIHByb2R1Y3RfdHlwZSBpcyBmdW5kaW5nLCBwcm9kdWN0X3R5cGUgaXMgY3J5cHRvX3RyYW5zZmVyLCBvciBwcm9kdWN0X3R5cGUgaXMgaW50ZXJfYWNjb3VudC5cbiAgICAgKi9cbiAgICBhc3NldD86IHN0cmluZyB8IG51bGw7XG4gICAgLyoqXG4gICAgICogVGhlIG5ldHdvcmsgYWRkcmVzcyB0byBwYXkgdGhlIGludm9pY2UgdG8uIFJlcXVpcmVkIHdoZW4gcHJvZHVjdF90eXBlIGlzIGxpZ2h0bmluZ190cmFuc2Zlci5cbiAgICAgKi9cbiAgICBuZXR3b3JrX2FkZHJlc3M/OiBzdHJpbmcgfCBudWxsO1xuICAgIC8qKlxuICAgICAqIFRoZSBjdXN0b20gZmVlcyBhc3NvY2lhdGVkIHdpdGggdGhlIHF1b3RlIE9wdGlvbmFsIHdoZW4gcHJvZHVjdF90eXBlIGlzIGxpZ2h0bmluZ190cmFuc2ZlciwgcHJvZHVjdF90eXBlIGlzIGZ1bmRpbmcsIHByb2R1Y3RfdHlwZSBpcyB0cmFkaW5nLCBwcm9kdWN0X3R5cGUgaXMgY3J5cHRvX3RyYW5zZmVyLCBvciBwcm9kdWN0X3R5cGUgaXMgdHJhZGluZ19leGl0LlxuICAgICAqL1xuICAgIGZlZXM/OiBBcnJheTxQb3N0RmVlQmFua01vZGVsPiB8IG51bGw7XG4gICAgLyoqXG4gICAgICogVGhlIGRpcmVjdGlvbiBmb3IgdHJhZGUgcXVvdGVzOiBlaXRoZXIgXFwnYnV5XFwnIG9yIFxcJ3NlbGxcXCcuIFRoZSBkaXJlY3Rpb24gZm9yIGZ1bmRpbmcgcXVvdGVzOiBlaXRoZXIgXFwnZGVwb3NpdFxcJyBvciBcXCd3aXRoZHJhd2FsXFwnLiBUaGUgZGlyZWN0aW9uIGZvciBjcnlwdG8gdHJhbnNmZXIgcXVvdGVzOiBcXCd3aXRoZHJhd2FsXFwnLiBCb29rIHRyYW5zZmVycyBkbyBub3QgcmVxdWlyZSBhIHNpZGUuIFRoZXkgYXJlIGFsbCBcXCdkZXBvc2l0XFwncy4gIFJlcXVpcmVkIHdoZW4gcHJvZHVjdF90eXBlIGlzIGZ1bmRpbmcsIHByb2R1Y3RfdHlwZSBpcyB0cmFkaW5nLCBvciBwcm9kdWN0X3R5cGUgaXMgY3J5cHRvX3RyYW5zZmVyLlxuICAgICAqL1xuICAgIHNpZGU/OiBQb3N0UXVvdGVCYW5rTW9kZWwuU2lkZUVudW0gfCBudWxsO1xuICAgIC8qKlxuICAgICAqIFN5bWJvbCB0aGUgcXVvdGUgaXMgYmVpbmcgcmVxdWVzdGVkIGZvci4gRm9ybWF0IGlzIFxcXCJhc3NldC1jb3VudGVyX2Fzc2V0XFxcIiBpbiB1cHBlcmNhc2UuIFNlZSB0aGUgU3ltYm9scyBBUEkgZm9yIGEgY29tcGxldGUgbGlzdCBvZiBjcnlwdG9jdXJyZW5jaWVzIHN1cHBvcnRlZC4gIFJlcXVpcmVkIHdoZW4gcHJvZHVjdF90eXBlIGlzIHRyYWRpbmcuXG4gICAgICovXG4gICAgc3ltYm9sPzogc3RyaW5nIHwgbnVsbDtcbiAgICAvKipcbiAgICAgKiBEZXN0aW5hdGlvbiBhY2NvdW50cyBmb3IgYmF0Y2ggdHJhbnNhY3Rpb25zIE9wdGlvbmFsIHdoZW4gcHJvZHVjdF90eXBlIGlzIGNyeXB0b190cmFuc2Zlci5cbiAgICAgKi9cbiAgICBkZXN0aW5hdGlvbl9hY2NvdW50cz86IEFycmF5PFBvc3RRdW90ZUVudHJ5QmFua01vZGVsPiB8IG51bGw7XG4gICAgLyoqXG4gICAgICogVGhlIGd1aWQgb2YgdGhlIHJlbGF0ZWQgdHJhZGUuIE9ubHkgcHJlc2VudCBvbiBgZXhpdGAgdHJhZGVzLiBSZXF1aXJlZCB3aGVuIHByb2R1Y3RfdHlwZSBpcyB0cmFkaW5nX2V4aXQuXG4gICAgICovXG4gICAgcmVmZXJlbmNlX3RyYWRlX2d1aWQ/OiBzdHJpbmcgfCBudWxsO1xuICAgIC8qKlxuICAgICAqIFRoZSBzb3VyY2UgYWNjb3VudFxcJ3MgaWRlbnRpZmllci4gUmVxdWlyZWQgd2hlbiBwcm9kdWN0X3R5cGUgaXMgaW50ZXJfYWNjb3VudC5cbiAgICAgKi9cbiAgICBzb3VyY2VfYWNjb3VudF9ndWlkPzogc3RyaW5nIHwgbnVsbDtcbiAgICAvKipcbiAgICAgKiBUaGUgZGVzdGluYXRpb24gYWNjb3VudFxcJ3MgaWRlbnRpZmllci4gUmVxdWlyZWQgd2hlbiBwcm9kdWN0X3R5cGUgaXMgaW50ZXJfYWNjb3VudC5cbiAgICAgKi9cbiAgICBkZXN0aW5hdGlvbl9hY2NvdW50X2d1aWQ/OiBzdHJpbmcgfCBudWxsO1xufVxuZXhwb3J0IG5hbWVzcGFjZSBQb3N0UXVvdGVCYW5rTW9kZWwge1xuICAgIGV4cG9ydCB0eXBlIFByb2R1Y3RUeXBlRW51bSA9ICd0cmFkaW5nJyB8ICd0cmFkaW5nX2V4aXQnIHwgJ2Z1bmRpbmcnIHwgJ2Jvb2tfdHJhbnNmZXInIHwgJ2NyeXB0b190cmFuc2ZlcicgfCAnaW50ZXJfYWNjb3VudCcgfCAnbGlnaHRuaW5nX3RyYW5zZmVyJztcbiAgICBleHBvcnQgY29uc3QgUHJvZHVjdFR5cGVFbnVtID0ge1xuICAgICAgICBUcmFkaW5nOiAndHJhZGluZycgYXMgUHJvZHVjdFR5cGVFbnVtLFxuICAgICAgICBUcmFkaW5nRXhpdDogJ3RyYWRpbmdfZXhpdCcgYXMgUHJvZHVjdFR5cGVFbnVtLFxuICAgICAgICBGdW5kaW5nOiAnZnVuZGluZycgYXMgUHJvZHVjdFR5cGVFbnVtLFxuICAgICAgICBCb29rVHJhbnNmZXI6ICdib29rX3RyYW5zZmVyJyBhcyBQcm9kdWN0VHlwZUVudW0sXG4gICAgICAgIENyeXB0b1RyYW5zZmVyOiAnY3J5cHRvX3RyYW5zZmVyJyBhcyBQcm9kdWN0VHlwZUVudW0sXG4gICAgICAgIEludGVyQWNjb3VudDogJ2ludGVyX2FjY291bnQnIGFzIFByb2R1Y3RUeXBlRW51bSxcbiAgICAgICAgTGlnaHRuaW5nVHJhbnNmZXI6ICdsaWdodG5pbmdfdHJhbnNmZXInIGFzIFByb2R1Y3RUeXBlRW51bVxuICAgIH07XG4gICAgZXhwb3J0IHR5cGUgU2lkZUVudW0gPSAnZGVwb3NpdCcgfCAnd2l0aGRyYXdhbCcgfCAnYnV5JyB8ICdzZWxsJztcbiAgICBleHBvcnQgY29uc3QgU2lkZUVudW0gPSB7XG4gICAgICAgIERlcG9zaXQ6ICdkZXBvc2l0JyBhcyBTaWRlRW51bSxcbiAgICAgICAgV2l0aGRyYXdhbDogJ3dpdGhkcmF3YWwnIGFzIFNpZGVFbnVtLFxuICAgICAgICBCdXk6ICdidXknIGFzIFNpZGVFbnVtLFxuICAgICAgICBTZWxsOiAnc2VsbCcgYXMgU2lkZUVudW1cbiAgICB9O1xufVxuXG5cbiJdfQ==
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9zdFF1b3RlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vbW9kZWwvcG9zdFF1b3RlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQTRFQSxNQUFNLEtBQVcsa0JBQWtCLENBa0JsQztBQWxCRCxXQUFpQixrQkFBa0I7SUFFbEIsa0NBQWUsR0FBRztRQUMzQixPQUFPLEVBQUUsU0FBNEI7UUFDckMsV0FBVyxFQUFFLGNBQWlDO1FBQzlDLE9BQU8sRUFBRSxTQUE0QjtRQUNyQyxZQUFZLEVBQUUsZUFBa0M7UUFDaEQsY0FBYyxFQUFFLGlCQUFvQztRQUNwRCxZQUFZLEVBQUUsZUFBa0M7UUFDaEQsaUJBQWlCLEVBQUUsb0JBQXVDO0tBQzdELENBQUM7SUFFVywyQkFBUSxHQUFHO1FBQ3BCLE9BQU8sRUFBRSxTQUFxQjtRQUM5QixVQUFVLEVBQUUsWUFBd0I7UUFDcEMsR0FBRyxFQUFFLEtBQWlCO1FBQ3RCLElBQUksRUFBRSxNQUFrQjtLQUMzQixDQUFDO0FBQ04sQ0FBQyxFQWxCZ0Isa0JBQWtCLEtBQWxCLGtCQUFrQixRQWtCbEMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEN5YnJpZCBCYW5rIEFQSVxuICogIyBDeWJyaWQgQVBJIGRvY3VtZW50YXRpb24gIFdlbGNvbWUgdG8gQ3licmlkLCBhbiBhbGwtaW4tb25lIGNyeXB0byBwbGF0Zm9ybSB0aGF0IGVuYWJsZXMgeW91IHRvIGVhc2lseSAqKmJ1aWxkKiogYW5kICoqbGF1bmNoKiogd2hpdGUtbGFiZWwgY3J5cHRvIHByb2R1Y3RzIG9yIHNlcnZpY2VzLiAgSW4gdGhlc2UgZG9jdW1lbnRzLCB5b3VcXCdsbCBmaW5kIGRldGFpbHMgb24gaG93IG91ciBSRVNUIEFQSSBvcGVyYXRlcyBhbmQgZ2VuZXJhbGx5IGhvdyBvdXIgcGxhdGZvcm0gZnVuY3Rpb25zLiAgSWYgeW91XFwncmUgbG9va2luZyBmb3Igb3VyIFVJIFNESyBXaWRnZXRzIGZvciBXZWIgb3IgTW9iaWxlIChpT1MvQW5kcm9pZCksIGdlbmVyYXRlZCBBUEkgY2xpZW50cywgb3IgZGVtbyBhcHBsaWNhdGlvbnMsIGhlYWQgb3ZlciB0byBvdXIgW0dpdGh1YiByZXBvXShodHRwczovL2dpdGh1Yi5jb20vQ3licmlkLWFwcCkuICDwn5KhIFdlIHJlY29tbWVuZCBib29rbWFya2luZyB0aGUgW0N5YnJpZCBMaW5rVHJlZV0oaHR0cHM6Ly9saW5rdHIuZWUvY3licmlkdGVjaG5vbG9naWVzKSB3aGljaCBjb250YWlucyBtYW55IGhlbHBmdWwgbGlua3MgdG8gcGxhdGZvcm0gcmVzb3VyY2VzLiAgIyMgR2V0dGluZyBTdGFydGVkICBUaGlzIGlzIEN5YnJpZFxcJ3MgcHVibGljIGludGVyYWN0aXZlIEFQSSBkb2N1bWVudGF0aW9uLCB3aGljaCBhbGxvd3MgeW91IHRvIGZ1bGx5IHRlc3Qgb3VyIEFQSXMuIElmIHlvdVxcJ2QgbGlrZSB0byB1c2UgYSBkaWZmZXJlbnQgdG9vbCB0byBleGVyY2lzZSBvdXIgQVBJcywgeW91IGNhbiBkb3dubG9hZCB0aGUgW09wZW4gQVBJIDMuMCB5YW1sXShodHRwczovL2JhbmsucHJvZHVjdGlvbi5jeWJyaWQuYXBwL2FwaS9zY2hlbWEvdjEvc3dhZ2dlci55YW1sKSBmb3IgaW1wb3J0LiAgSWYgeW91XFwncmUgbmV3IHRvIG91ciBBUElzIGFuZCB0aGUgQ3licmlkIFBsYXRmb3JtLCBmb2xsb3cgdGhlIGJlbG93IGd1aWRlcyB0byBnZXQgc2V0IHVwIGFuZCBmYW1pbGlhciB3aXRoIHRoZSBwbGF0Zm9ybTogIDEuIFtJbnRyb2R1Y3Rpb25dKGh0dHBzOi8vZG9jcy5jeWJyaWQueHl6L2RvY3MvaW50cm9kdWN0aW9uKSAyLiBbUGxhdGZvcm0gSW50cm9kdWN0aW9uXShodHRwczovL2RvY3MuY3licmlkLnh5ei9kb2NzL2hvdy1pcy1jeWJyaWQtYXJjaGl0ZWN0ZWQpIDMuIFtUZXN0aW5nIHdpdGggSG9zdGVkIFdlYiBEZW1vIEFwcF0oaHR0cHM6Ly9kb2NzLmN5YnJpZC54eXovZG9jcy90ZXN0aW5nLXdpdGgtaG9zdGVkLXdlYi1kZW1vLWFwcCkgIEluIFtHZXR0aW5nIFN0YXJ0ZWQgaW4gdGhlIEN5YnJpZCBTYW5kYm94XShodHRwczovL2RvY3MuY3licmlkLnh5ei9kb2NzL2hvdy1kby1pLWdldC1zdGFydGVkLXdpdGgtdGhlLXNhbmRib3gpLCB3ZSB3YWxrIHlvdSB0aHJvdWdoIGhvdyB0byB1c2UgdGhlIFtDeWJyaWQgU2FuZGJveF0oaHR0cHM6Ly9pZC5zYW5kYm94LmN5YnJpZC5hcHAvKSB0byBjcmVhdGUgYSB0ZXN0IGJhbmsgYW5kIGdlbmVyYXRlIEFQSSBrZXlzLiBJbiBbR2V0dGluZyBSZWFkeSBmb3IgVHJhZGluZ10oaHR0cHM6Ly9rYi5jeWJyaWQueHl6L2dldHRpbmctcmVhZHktZm9yLXRyYWRpbmcpLCB3ZSB3YWxrIHRocm91Z2ggY3JlYXRpbmcgY3VzdG9tZXJzLCBjdXN0b21lciBpZGVudGl0aWVzLCBhY2NvdW50cywgYXMgd2VsbCBhcyBleGVjdXRpbmcgcXVvdGVzIGFuZCB0cmFkZXMuICAjIyBXb3JraW5nIHdpdGggdGhlIEN5YnJpZCBQbGF0Zm9ybSAgVGhlcmUgYXJlIHRocmVlIHByaW1hcnkgd2F5cyB5b3UgY2FuIGludGVyYWN0IHdpdGggdGhlIEN5YnJpZCBwbGF0Zm9ybTogIDEuIERpcmVjdGx5IHZpYSBvdXIgUkVTVGZ1bCBBUEkgKHRoaXMgZG9jdW1lbnRhdGlvbikgMi4gVXNpbmcgb3VyIEFQSSBjbGllbnRzIGF2YWlsYWJsZSBpbiBhIHZhcmlldHkgb2YgbGFuZ3VhZ2VzIChbQW5ndWxhcl0oaHR0cHM6Ly9naXRodWIuY29tL0N5YnJpZC1hcHAvY3licmlkLWFwaS1iYW5rLWFuZ3VsYXIpLCBbSmF2YV0oaHR0cHM6Ly9naXRodWIuY29tL0N5YnJpZC1hcHAvY3licmlkLWFwaS1iYW5rLWphdmEpLCBbS290bGluXShodHRwczovL2dpdGh1Yi5jb20vQ3licmlkLWFwcC9jeWJyaWQtYXBpLWJhbmsta290bGluKSwgW1B5dGhvbl0oaHR0cHM6Ly9naXRodWIuY29tL0N5YnJpZC1hcHAvY3licmlkLWFwaS1iYW5rLXB5dGhvbiksIFtSdWJ5XShodHRwczovL2dpdGh1Yi5jb20vQ3licmlkLWFwcC9jeWJyaWQtYXBpLWJhbmstcnVieSksIFtTd2lmdF0oaHR0cHM6Ly9naXRodWIuY29tL0N5YnJpZC1hcHAvY3licmlkLWFwaS1iYW5rLXN3aWZ0KSBvciBbVHlwZXNjcmlwdF0oaHR0cHM6Ly9naXRodWIuY29tL0N5YnJpZC1hcHAvY3licmlkLWFwaS1iYW5rLXR5cGVzY3JpcHQpKSAzLiBJbnRlZ3JhdGluZyBhIHBsYXRmb3JtIHNwZWNpZmljIFNESyAoW1dlYl0oaHR0cHM6Ly9naXRodWIuY29tL0N5YnJpZC1hcHAvY3licmlkLXNkay13ZWIpLCBbQW5kcm9pZF0oaHR0cHM6Ly9naXRodWIuY29tL0N5YnJpZC1hcHAvY3licmlkLXNkay1hbmRyb2lkKSwgW2lPU10oaHR0cHM6Ly9naXRodWIuY29tL0N5YnJpZC1hcHAvY3licmlkLXNkay1pb3MpKSAgT3VyIGNvbXBsZXRlIHNldCBvZiBBUElzIGFsbG93cyB5b3UgdG8gbWFuYWdlIHJlc291cmNlcyBhY3Jvc3MgdGhyZWUgZGlzdGluY3QgYXJlYXM6IHlvdXIgYE9yZ2FuaXphdGlvbmAsIHlvdXIgYEJhbmtzYCBhbmQgeW91ciBgSWRlbnRpdGllc2AuIEZvciBtb3N0IG9mIHlvdXIgdGVzdGluZyBhbmQgaW50ZXJhY3Rpb24geW91XFwnbGwgYmUgdXNpbmcgdGhlIGBCYW5rYCBBUEksIHdoaWNoIGlzIHdoZXJlIHRoZSBtYWpvcml0eSBvZiBBUElzIHJlc2lkZS4gICpUaGUgY29tcGxldGUgc2V0IG9mIEFQSXMgY2FuIGJlIGZvdW5kIG9uIHRoZSBmb2xsb3dpbmcgcGFnZXM6KiAgfCBBUEkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IHwgW09yZ2FuaXphdGlvbiBBUEldKGh0dHBzOi8vb3JnYW5pemF0aW9uLnByb2R1Y3Rpb24uY3licmlkLmFwcC9hcGkvc2NoZW1hL3N3YWdnZXItdWkpICAgfCBBUElzIHRvIG1hbmFnZSBvcmdhbml6YXRpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHwgW0JhbmsgQVBJXShodHRwczovL2JhbmsucHJvZHVjdGlvbi5jeWJyaWQuYXBwL2FwaS9zY2hlbWEvc3dhZ2dlci11aSkgICAgICAgICAgICAgICAgICAgfCBBUElzIHRvIG1hbmFnZSBiYW5rcyAoYW5kIGFsbCBkb3duc3RyZWFtIGN1c3RvbWVyIGFjdGl2aXR5KSB8IHwgW0lkZW50aXRpZXMgQVBJXShodHRwczovL2lkLnByb2R1Y3Rpb24uY3licmlkLmFwcC9hcGkvc2NoZW1hL3N3YWdnZXItdWkpICAgICAgICAgICAgICAgICAgICAgICB8IEFQSXMgdG8gbWFuYWdlIG9yZ2FuaXphdGlvbiBhbmQgYmFuayBpZGVudGl0aWVzICAgICAgICAgICAgIHwgIEZvciBxdWVzdGlvbnMgcGxlYXNlIGNvbnRhY3QgW1N1cHBvcnRdKG1haWx0bzpzdXBwb3J0QGN5YnJpZC54eXopIGF0IGFueSB0aW1lIGZvciBhc3Npc3RhbmNlLCBvciBjb250YWN0IHRoZSBbUHJvZHVjdCBUZWFtXShtYWlsdG86cHJvZHVjdEBjeWJyaWQueHl6KSBmb3IgcHJvZHVjdCBzdWdnZXN0aW9ucy4gICMjIEF1dGhlbnRpY2F0aW5nIHdpdGggdGhlIEFQSSAgVGhlIEN5YnJpZCBQbGF0Zm9ybSB1c2VzIE9BdXRoIDIuMCBCZWFyZXIgVG9rZW5zIHRvIGF1dGhlbnRpY2F0ZSByZXF1ZXN0cyB0byB0aGUgcGxhdGZvcm0uIENyZWRlbnRpYWxzIHRvIGNyZWF0ZSBgT3JnYW5pemF0aW9uYCBhbmQgYEJhbmtgIHRva2VucyBjYW4gYmUgZ2VuZXJhdGVkIHZpYSB0aGUgW0N5YnJpZCBTYW5kYm94XShodHRwczovL2lkLnByb2R1Y3Rpb24uY3licmlkLmFwcCkuIEFjY2VzcyB0b2tlbnMgY2FuIGJlIGdlbmVyYXRlZCBmb3IgYSBgQ3VzdG9tZXJgIGFzIHdlbGwgdmlhIHRoZSBbQ3licmlkIElkUF0oaHR0cHM6Ly9pZC5wcm9kdWN0aW9uLmN5YnJpZC5hcHApIGFzIHdlbGwuICBBbiBgT3JnYW5pemF0aW9uYCBhY2Nlc3MgdG9rZW4gYXBwbGllcyBicm9hZGx5IHRvIHRoZSB3aG9sZSBPcmdhbml6YXRpb24gYW5kIGFsbCBvZiBpdHMgYEJhbmtzYCwgd2hlcmVhcywgYSBgQmFua2AgYWNjZXNzIHRva2VuIGlzIHNwZWNpZmljIHRvIGFuIGluZGl2aWR1YWwgQmFuay4gYEN1c3RvbWVyYCB0b2tlbnMsIHNpbWlsYXJseSwgYXJlIHNjb3BlZCB0byBhIHNwZWNpZmljIGN1c3RvbWVyIGluIGEgYmFuay4gIEJvdGggYE9yZ2FuaXphdGlvbmAgYW5kIGBCYW5rYCB0b2tlbnMgY2FuIGJlIGNyZWF0ZWQgdXNpbmcgdGhlIE9BdXRoIENsaWVudCBDcmVkZW50aWFsIEdyYW50IGZsb3cuIEVhY2ggT3JnYW5pemF0aW9uIGFuZCBCYW5rIGhhcyBpdHMgb3duIHVuaXF1ZSBgQ2xpZW50IElEYCBhbmQgYFNlY3JldGAgdGhhdCBhbGxvd3MgZm9yIG1hY2hpbmUtdG8tbWFjaGluZSBhdXRoZW50aWNhdGlvbi4gIEEgYEJhbmtgIGNhbiB0aGVuIGdlbmVyYXRlIGBDdXN0b21lcmAgYWNjZXNzIHRva2VucyB2aWEgQVBJIHVzaW5nIG91ciBbSWRlbnRpdGllcyBBUEldKGh0dHBzOi8vaWQucHJvZHVjdGlvbi5jeWJyaWQuYXBwL2FwaS9zY2hlbWEvc3dhZ2dlci11aSkuICA8Zm9udCBjb2xvcj1cXFwib3JhbmdlXFxcIj4qKuKaoO+4jyBOZXZlciBzaGFyZSB5b3VyIENsaWVudCBJRCBvciBTZWNyZXQgcHVibGljbHkgb3IgaW4geW91ciBzb3VyY2UgY29kZSByZXBvc2l0b3J5LioqPC9mb250PiAgWW91ciBgQ2xpZW50IElEYCBhbmQgYFNlY3JldGAgY2FuIGJlIGV4Y2hhbmdlZCBmb3IgYSB0aW1lLWxpbWl0ZWQgYEJlYXJlciBUb2tlbmAgYnkgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgQ3licmlkIElkZW50aXR5IFByb3ZpZGVyIG9yIHRocm91Z2ggaW50ZXJhY3Rpbmcgd2l0aCB0aGUgKipBdXRob3JpemUqKiBidXR0b24gaW4gdGhpcyBkb2N1bWVudC4gIFRoZSBmb2xsb3dpbmcgY3VybCBjb21tYW5kIGNhbiBiZSB1c2VkIHRvIHF1aWNrbHkgZ2VuZXJhdGUgYSBgQmVhcmVyIFRva2VuYCBmb3IgdXNlIGluIHRlc3RpbmcgdGhlIEFQSSBvciBkZW1vIGFwcGxpY2F0aW9ucy4gIGBgYCAjIEV4YW1wbGUgcmVxdWVzdCB3aGVuIHVzaW5nIEJhbmsgY3JlZGVudGlhbHMgY3VybCAtWCBQT1NUIGh0dHBzOi8vaWQucHJvZHVjdGlvbi5jeWJyaWQuYXBwL29hdXRoL3Rva2VuIC1kIFxcJ3sgICAgIFxcXCJncmFudF90eXBlXFxcIjogXFxcImNsaWVudF9jcmVkZW50aWFsc1xcXCIsICAgICBcXFwiY2xpZW50X2lkXFxcIjogXFxcIjxZb3VyIENsaWVudCBJRD5cXFwiLCAgICAgXFxcImNsaWVudF9zZWNyZXRcXFwiOiBcXFwiPFlvdXIgU2VjcmV0PlxcXCIsICAgICBcXFwic2NvcGVcXFwiOiBcXFwiYmFua3M6cmVhZCBiYW5rczp3cml0ZSBiYW5rX2FwcGxpY2F0aW9uczpleGVjdXRlIGFjY291bnRzOnJlYWQgYWNjb3VudHM6ZXhlY3V0ZSBjb3VudGVycGFydGllczpyZWFkIGNvdW50ZXJwYXJ0aWVzOndyaXRlIGNvdW50ZXJwYXJ0aWVzOmV4ZWN1dGUgY3VzdG9tZXJzOnJlYWQgY3VzdG9tZXJzOndyaXRlIGN1c3RvbWVyczpleGVjdXRlIHByaWNlczpyZWFkIHF1b3RlczpleGVjdXRlIHF1b3RlczpyZWFkIHRyYWRlczpleGVjdXRlIHRyYWRlczpyZWFkIHRyYW5zZmVyczpleGVjdXRlIHRyYW5zZmVyczpyZWFkIGV4dGVybmFsX2JhbmtfYWNjb3VudHM6cmVhZCBleHRlcm5hbF9iYW5rX2FjY291bnRzOndyaXRlIGV4dGVybmFsX2JhbmtfYWNjb3VudHM6ZXhlY3V0ZSBleHRlcm5hbF93YWxsZXRzOnJlYWQgZXh0ZXJuYWxfd2FsbGV0czpleGVjdXRlIHdvcmtmbG93czpyZWFkIHdvcmtmbG93czpleGVjdXRlIGRlcG9zaXRfYWRkcmVzc2VzOnJlYWQgZGVwb3NpdF9hZGRyZXNzZXM6ZXhlY3V0ZSBkZXBvc2l0X2JhbmtfYWNjb3VudHM6cmVhZCBkZXBvc2l0X2JhbmtfYWNjb3VudHM6ZXhlY3V0ZSBpbnZvaWNlczpyZWFkIGludm9pY2VzOndyaXRlIGludm9pY2VzOmV4ZWN1dGUgaWRlbnRpdHlfdmVyaWZpY2F0aW9uczpyZWFkIGlkZW50aXR5X3ZlcmlmaWNhdGlvbnM6d3JpdGUgaWRlbnRpdHlfdmVyaWZpY2F0aW9uczpleGVjdXRlIGZpbGVzOnJlYWQgZmlsZXM6ZXhlY3V0ZVxcXCIgICB9XFwnIC1IIFxcXCJDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL2pzb25cXFwiICAjIFdoZW4gdXNpbmcgT3JnYW5pemF0aW9uIGNyZWRlbnRpYWxzIHNldCBgc2NvcGVgIHRvIFxcJ29yZ2FuaXphdGlvbnM6cmVhZCBvcmdhbml6YXRpb25zOndyaXRlIG9yZ2FuaXphdGlvbl9hcHBsaWNhdGlvbnM6ZXhlY3V0ZSBiYW5rczpyZWFkIGJhbmtzOndyaXRlIGJhbmtzOmV4ZWN1dGUgYmFua19hcHBsaWNhdGlvbnM6ZXhlY3V0ZSB1c2VyczpyZWFkIHVzZXJzOmV4ZWN1dGUgY291bnRlcnBhcnRpZXM6cmVhZCBjdXN0b21lcnM6cmVhZCBhY2NvdW50czpyZWFkIHByaWNlczpyZWFkIHF1b3RlczpleGVjdXRlIHF1b3RlczpyZWFkIHRyYWRlczpleGVjdXRlIHRyYWRlczpyZWFkIHRyYW5zZmVyczpyZWFkIHRyYW5zZmVyczpleGVjdXRlIGV4dGVybmFsX2JhbmtfYWNjb3VudHM6cmVhZCBleHRlcm5hbF93YWxsZXRzOnJlYWQgd29ya2Zsb3dzOnJlYWQgZGVwb3NpdF9hZGRyZXNzZXM6cmVhZCBkZXBvc2l0X2JhbmtfYWNjb3VudHM6cmVhZCBpbnZvaWNlczpyZWFkIHN1YnNjcmlwdGlvbnM6cmVhZCBzdWJzY3JpcHRpb25zOndyaXRlIHN1YnNjcmlwdGlvbnM6ZXhlY3V0ZSBzdWJzY3JpcHRpb25fZXZlbnRzOnJlYWQgc3Vic2NyaXB0aW9uX2V2ZW50czpleGVjdXRlIGlkZW50aXR5X3ZlcmlmaWNhdGlvbnM6cmVhZCBmaWxlczpyZWFkIGZpbGVzOmV4ZWN1dGVcXCcgYGBgIDxmb250IGNvbG9yPVxcXCJvcmFuZ2VcXFwiPioq4pqg77iPIE5vdGU6IFRoZSBhYm92ZSBjdXJsIHdpbGwgY3JlYXRlIGEgYmVhcmVyIHRva2VuIHdpdGggZnVsbCBzY29wZSBhY2Nlc3MuIERlbGV0ZSBzY29wZXMgaWYgeW91XFwnZCBsaWtlIHRvIHJlc3RyaWN0IGFjY2Vzcy4qKjwvZm9udD4gICMjIEF1dGhlbnRpY2F0aW9uIFNjb3BlcyAgVGhlIEN5YnJpZCBwbGF0Zm9ybSBzdXBwb3J0cyB0aGUgdXNlIG9mIHNjb3BlcyB0byBjb250cm9sIHRoZSBsZXZlbCBvZiBhY2Nlc3MgYSB0b2tlbiBpcyBsaW1pdGVkIHRvLiBTY29wZXMgZG8gbm90IGdyYW50IGFjY2VzcyB0byByZXNvdXJjZXM7IGluc3RlYWQsIHRoZXkgcHJvdmlkZSBsaW1pdHMsIGluIHN1cHBvcnQgb2YgdGhlIGxlYXN0IHByaXZpbGVnZSBwcmluY2lwYWwuICBUaGUgZm9sbG93aW5nIHNjb3BlcyBhcmUgYXZhaWxhYmxlIG9uIHRoZSBwbGF0Zm9ybSBhbmQgY2FuIGJlIHJlcXVlc3RlZCB3aGVuIGdlbmVyYXRpbmcgZWl0aGVyIGFuIE9yZ2FuaXphdGlvbiwgQmFuayBvciBDdXN0b21lciB0b2tlbi4gR2VuZXJhbGx5IHNwZWFraW5nLCB0aGUgX1JlYWRfIHNjb3BlIGlzIHJlcXVpcmVkIHRvIHJlYWQgYW5kIGxpc3QgcmVzb3VyY2VzLCB0aGUgX1dyaXRlXyBzY29wZSBpcyByZXF1aXJlZCB0byB1cGRhdGUgYSByZXNvdXJjZSBhbmQgdGhlIF9FeGVjdXRlXyBzY29wZSBpcyByZXF1aXJlZCB0byBjcmVhdGUgYSByZXNvdXJjZS4gIHwgUmVzb3VyY2UgICAgICAgICAgICAgIHwgUmVhZCBzY29wZSAoVG9rZW4gVHlwZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFdyaXRlIHNjb3BlIChUb2tlbiBUeXBlKSAgICAgICAgICAgICAgICAgICAgICB8IEV4ZWN1dGUgc2NvcGUgKFRva2VuIFR5cGUpICAgICAgICAgICAgICAgICAgICAgICB8IHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IHwgQWNjb3VudCAgICAgICAgICAgICAgIHwgYWNjb3VudHM6cmVhZCAoT3JnYW5pemF0aW9uLCBCYW5rLCBDdXN0b21lcikgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGFjY291bnRzOmV4ZWN1dGUgKEJhbmssIEN1c3RvbWVyKSAgICAgICAgICAgICAgICB8IHwgQmFuayAgICAgICAgICAgICAgICAgIHwgYmFua3M6cmVhZCAoT3JnYW5pemF0aW9uLCBCYW5rKSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGJhbmtzOndyaXRlIChPcmdhbml6YXRpb24sIEJhbmspICAgICAgICAgICAgICB8IGJhbmtzOmV4ZWN1dGUgKE9yZ2FuaXphdGlvbikgICAgICAgICAgICAgICAgICAgICB8IHwgQ3VzdG9tZXIgICAgICAgICAgICAgIHwgY3VzdG9tZXJzOnJlYWQgKE9yZ2FuaXphdGlvbiwgQmFuaywgQ3VzdG9tZXIpICAgICAgICAgICAgICB8IGN1c3RvbWVyczp3cml0ZSAoQmFuaywgQ3VzdG9tZXIpICAgICAgICAgICAgICB8IGN1c3RvbWVyczpleGVjdXRlIChCYW5rKSAgICAgICAgICAgICAgICAgICAgICAgICB8IHwgQ291bnRlcnBhcnR5ICAgICAgICAgIHwgY291bnRlcnBhcnRpZXM6cmVhZCAoT3JnYW5pemF0aW9uLCBCYW5rLCBDdXN0b21lcikgICAgICAgICB8IGNvdW50ZXJwYXJ0aWVzOndyaXRlIChCYW5rLCBDdXN0b21lcikgICAgICAgICB8IGNvdW50ZXJwYXJ0aWVzOmV4ZWN1dGUgKEJhbmspICAgICAgICAgICAgICAgICAgICB8IHwgRGVwb3NpdCBBZGRyZXNzICAgICAgIHwgZGVwb3NpdF9hZGRyZXNzZXM6cmVhZCAoT3JnYW5pemF0aW9uLCBCYW5rLCBDdXN0b21lcikgICAgICB8IGRlcG9zaXRfYWRkcmVzc2VzOndyaXRlIChCYW5rLCBDdXN0b21lcikgICAgICB8IGRlcG9zaXRfYWRkcmVzc2VzOmV4ZWN1dGUgKEJhbmssIEN1c3RvbWVyKSAgICAgICB8IHwgRXh0ZXJuYWwgQmFuayBBY2NvdW50IHwgZXh0ZXJuYWxfYmFua19hY2NvdW50czpyZWFkIChPcmdhbml6YXRpb24sIEJhbmssIEN1c3RvbWVyKSB8IGV4dGVybmFsX2JhbmtfYWNjb3VudHM6d3JpdGUgKEJhbmssIEN1c3RvbWVyKSB8IGV4dGVybmFsX2JhbmtfYWNjb3VudHM6ZXhlY3V0ZSAoQmFuaywgQ3VzdG9tZXIpICB8IHwgRXh0ZXJuYWwgV2FsbGV0ICAgICAgIHwgZXh0ZXJuYWxfd2FsbGV0OnJlYWQgKE9yZ2FuaXphdGlvbiwgQmFuaywgQ3VzdG9tZXIpICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGV4dGVybmFsX3dhbGxldDpleGVjdXRlIChCYW5rLCBDdXN0b21lcikgICAgICAgICB8IHwgT3JnYW5pemF0aW9uICAgICAgICAgIHwgb3JnYW5pemF0aW9uczpyZWFkIChPcmdhbml6YXRpb24pICAgICAgICAgICAgICAgICAgICAgICAgICB8IG9yZ2FuaXphdGlvbnM6d3JpdGUgKE9yZ2FuaXphdGlvbikgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHwgVXNlciAgICAgICAgICAgICAgICAgIHwgdXNlcnM6cmVhZCAoT3JnYW5pemF0aW9uKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHVzZXJzOmV4ZWN1dGUgKE9yZ2FuaXphdGlvbikgICAgICAgICAgICAgICAgICAgICB8IHwgUHJpY2UgICAgICAgICAgICAgICAgIHwgcHJpY2VzOnJlYWQgKEJhbmssIEN1c3RvbWVyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHwgUXVvdGUgICAgICAgICAgICAgICAgIHwgcXVvdGVzOnJlYWQgKE9yZ2FuaXphdGlvbiwgQmFuaywgQ3VzdG9tZXIpICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHF1b3RlczpleGVjdXRlIChPcmdhbml6YXRpb24sIEJhbmssIEN1c3RvbWVyKSAgICB8IHwgVHJhZGUgICAgICAgICAgICAgICAgIHwgdHJhZGVzOnJlYWQgKE9yZ2FuaXphdGlvbiwgQmFuaywgQ3VzdG9tZXIpICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHRyYWRlczpleGVjdXRlIChPcmdhbml6YXRpb24sIEJhbmssIEN1c3RvbWVyKSAgICB8IHwgVHJhbnNmZXIgICAgICAgICAgICAgIHwgdHJhbnNmZXJzOnJlYWQgKE9yZ2FuaXphdGlvbiwgQmFuaywgQ3VzdG9tZXIpICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHRyYW5zZmVyczpleGVjdXRlIChPcmdhbml6YXRpb24sIEJhbmssIEN1c3RvbWVyKSB8IHwgV29ya2Zsb3cgICAgICAgICAgICAgIHwgd29ya2Zsb3dzOnJlYWQgKE9yZ2FuaXphdGlvbiwgQmFuaywgQ3VzdG9tZXIpICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHdvcmtmbG93czpleGVjdXRlIChCYW5rLCBDdXN0b21lcikgICAgICAgICAgICAgICB8IHwgSW52b2ljZSAgICAgICAgICAgICAgIHwgaW52b2ljZXM6cmVhZCAoT3JnYW5pemF0aW9uLCBCYW5rLCBDdXN0b21lcikgICAgICAgICAgICAgICB8IGludm9pY2VzOndyaXRlIChCYW5rLCBDdXN0b21lcikgICAgICAgICAgICAgICB8IGludm9pY2VzOmV4ZWN1dGUgKEJhbmssIEN1c3RvbWVyKSAgICAgICAgICAgICAgICB8ICAjIyBBdmFpbGFibGUgRW5kcG9pbnRzICBUaGUgYXZhaWxhYmxlIEFQSXMgZm9yIHRoZSBbSWRlbnRpdHldKGh0dHBzOi8vaWQucHJvZHVjdGlvbi5jeWJyaWQuYXBwL2FwaS9zY2hlbWEvc3dhZ2dlci11aSksIFtPcmdhbml6YXRpb25dKGh0dHBzOi8vb3JnYW5pemF0aW9uLnByb2R1Y3Rpb24uY3licmlkLmFwcC9hcGkvc2NoZW1hL3N3YWdnZXItdWkpIGFuZCBbQmFua10oaHR0cHM6Ly9iYW5rLnByb2R1Y3Rpb24uY3licmlkLmFwcC9hcGkvc2NoZW1hL3N3YWdnZXItdWkpIEFQSSBzZXJ2aWNlcyBhcmUgbGlzdGVkIGJlbG93OiAgfCBBUEkgU2VydmljZSAgfCBNb2RlbCAgICAgICAgICAgICAgICB8IEFQSSBFbmRwb2ludCBQYXRoICAgICAgICAgICAgICB8IERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB8LS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IHwgSWRlbnRpdHkgICAgIHwgQmFuayAgICAgICAgICAgICAgICAgfCAvYXBpL2JhbmtfYXBwbGljYXRpb25zICAgICAgICAgfCBDcmVhdGUgYW5kIGxpc3QgYmFua3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgfCBJZGVudGl0eSAgICAgfCBDdXN0b21lclRva2VuICAgICAgICB8IC9hcGkvY3VzdG9tZXJfdG9rZW5zICAgICAgICAgICB8IENyZWF0ZSBjdXN0b21lciBKV1QgYWNjZXNzIHRva2VucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB8IElkZW50aXR5ICAgICB8IE9yZ2FuaXphdGlvbiAgICAgICAgIHwgL2FwaS9vcmdhbml6YXRpb25fYXBwbGljYXRpb25zIHwgQ3JlYXRlIGFuZCBsaXN0IG9yZ2FuaXphdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHwgSWRlbnRpdHkgICAgIHwgT3JnYW5pemF0aW9uICAgICAgICAgfCAvYXBpL3VzZXJzICAgICAgICAgICAgICAgICAgICAgfCBDcmVhdGUgYW5kIGxpc3Qgb3JnYW5pemF0aW9uIHVzZXJzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgfCBPcmdhbml6YXRpb24gfCBPcmdhbml6YXRpb24gICAgICAgICB8IC9hcGkvb3JnYW5pemF0aW9ucyAgICAgICAgICAgICB8IEFQSXMgdG8gcmV0cmlldmUgYW5kIHVwZGF0ZSBvcmdhbml6YXRpb24gbmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB8IEJhbmsgICAgICAgICB8IEFjY291bnQgICAgICAgICAgICAgIHwgL2FwaS9hY2NvdW50cyAgICAgICAgICAgICAgICAgIHwgQ3JlYXRlIGFuZCBsaXN0IGFjY291bnRzLCB3aGljaCBob2xkIGEgc3BlY2lmaWMgYXNzZXQgZm9yIGEgY3VzdG9tZXJzICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHwgQmFuayAgICAgICAgIHwgQXNzZXQgICAgICAgICAgICAgICAgfCAvYXBpL2Fzc2V0cyAgICAgICAgICAgICAgICAgICAgfCBHZXQgYSBsaXN0IG9mIGFzc2V0cyBzdXBwb3J0ZWQgYnkgdGhlIHBsYXRmb3JtIChleDogQlRDLCBFVEgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgfCBCYW5rICAgICAgICAgfCBCYW5rICAgICAgICAgICAgICAgICB8IC9hcGkvYmFua3MgICAgICAgICAgICAgICAgICAgICB8IENyZWF0ZSwgdXBkYXRlIGFuZCBsaXN0IGJhbmtzLCB0aGUgcGFyZW50IHRvIGN1c3RvbWVycywgYWNjb3VudHMsIGV0YyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB8IEJhbmsgICAgICAgICB8IEN1c3RvbWVyICAgICAgICAgICAgIHwgL2FwaS9jdXN0b21lcnMgICAgICAgICAgICAgICAgIHwgQ3JlYXRlIGFuZCBsaXN0IGN1c3RvbWVycyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHwgQmFuayAgICAgICAgIHwgQ291bnRlcnBhcnR5ICAgICAgICAgfCAvYXBpL2NvdW50ZXJwYXJ0aWVzICAgICAgICAgICAgfCBDcmVhdGUgYW5kIGxpc3QgY291bnRlcnBhcnRpZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgfCBCYW5rICAgICAgICAgfCBEZXBvc2l0QWRkcmVzcyAgICAgICB8IC9hcGkvZGVwb3NpdF9hZGRyZXNzZXMgICAgICAgICB8IENyZWF0ZSwgZ2V0IGFuZCBsaXN0IGRlcG9zaXQgYWRkcmVzc2VzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB8IEJhbmsgICAgICAgICB8IEV4dGVybmFsQmFua0FjY291bnQgIHwgL2FwaS9leHRlcm5hbF9iYW5rX2FjY291bnRzICAgIHwgQ3JlYXRlLCBnZXQgYW5kIGxpc3QgZXh0ZXJuYWwgYmFuayBhY2NvdW50cywgd2hpY2ggY29ubmVjdCBjdXN0b21lciBiYW5rIGFjY291bnRzIHRvIHRoZSBwbGF0Zm9ybSB8IHwgQmFuayAgICAgICAgIHwgRXh0ZXJuYWxXYWxsZXQgICAgICAgfCAvYXBpL2V4dGVybmFsX3dhbGxldHMgICAgICAgICAgfCBDcmVhdGUsIGdldCwgbGlzdCBhbmQgZGVsZXRlIGV4dGVybmFsIHdhbGxldHMsIHdoaWNoIGNvbm5lY3QgY3VzdG9tZXIgd2FsbGV0cyB0byB0aGUgcGxhdGZvcm0gICAgIHwgfCBCYW5rICAgICAgICAgfCBJZGVudGl0eVZlcmlmaWNhdGlvbiB8IC9hcGkvaWRlbnRpdHlfdmVyaWZpY2F0aW9ucyAgICB8IENyZWF0ZSBhbmQgbGlzdCBpZGVudGl0eSB2ZXJpZmljYXRpb25zLCB3aGljaCBhcmUgcGVyZm9ybWVkIG9uIGN1c3RvbWVycyBmb3IgS1lDICAgICAgICAgICAgICAgICAgfCB8IEJhbmsgICAgICAgICB8IEludm9pY2UgICAgICAgICAgICAgIHwgL2FwaS9pbnZvaWNlcyAgICAgICAgICAgICAgICAgIHwgQ3JlYXRlLCBnZXQsIGNhbmNlbCBhbmQgbGlzdCBpbnZvaWNlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHwgQmFuayAgICAgICAgIHwgUGF5bWVudEluc3RydWN0aW9uICAgfCAvYXBpL3BheW1lbnRfaW5zdHJ1Y3Rpb25zICAgICAgfCBDcmVhdGUsIGdldCBhbmQgbGlzdCBwYXltZW50IGluc3RydWN0aW9ucyBmb3IgaW52b2ljZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgfCBCYW5rICAgICAgICAgfCBQcmljZSAgICAgICAgICAgICAgICB8IC9hcGkvcHJpY2VzICAgICAgICAgICAgICAgICAgICB8IEdldCB0aGUgY3VycmVudCBwcmljZXMgZm9yIGFzc2V0cyBvbiB0aGUgcGxhdGZvcm0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB8IEJhbmsgICAgICAgICB8IFF1b3RlICAgICAgICAgICAgICAgIHwgL2FwaS9xdW90ZXMgICAgICAgICAgICAgICAgICAgIHwgQ3JlYXRlIGFuZCBsaXN0IHF1b3Rlcywgd2hpY2ggYXJlIHJlcXVpcmVkIHRvIGV4ZWN1dGUgdHJhZGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHwgQmFuayAgICAgICAgIHwgU3ltYm9sICAgICAgICAgICAgICAgfCAvYXBpL3N5bWJvbHMgICAgICAgICAgICAgICAgICAgfCBHZXQgYSBsaXN0IG9mIHN5bWJvbHMgc3VwcG9ydGVkIGZvciB0cmFkZSAoZXg6IEJUQy1VU0QpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgfCBCYW5rICAgICAgICAgfCBUcmFkZSAgICAgICAgICAgICAgICB8IC9hcGkvdHJhZGVzICAgICAgICAgICAgICAgICAgICB8IENyZWF0ZSBhbmQgbGlzdCB0cmFkZXMsIHdoaWNoIGJ1eSBvciBzZWxsIGNyeXB0b2N1cnJlbmN5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB8IEJhbmsgICAgICAgICB8IFRyYW5zZmVyICAgICAgICAgICAgIHwgL2FwaS90cmFuc2ZlcnMgICAgICAgICAgICAgICAgIHwgQ3JlYXRlLCBnZXQgYW5kIGxpc3QgdHJhbnNmZXJzIChlLmcuLCBmdW5kaW5nLCBib29rKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHwgQmFuayAgICAgICAgIHwgV29ya2Zsb3cgICAgICAgICAgICAgfCAvYXBpL3dvcmtmbG93cyAgICAgICAgICAgICAgICAgfCBDcmVhdGUsIGdldCBhbmQgbGlzdCB3b3JrZmxvd3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICMjIFVuZGVyc3RhbmRpbmcgT2JqZWN0IE1vZGVscyAmIEVuZHBvaW50cyAgKipPcmdhbml6YXRpb25zKiogIEFuIGBPcmdhbml6YXRpb25gIGlzIG1lYW50IHRvIHJlcHJlc2VudCB0aGUgb3JnYW5pemF0aW9uIHBhcnRuZXJpbmcgd2l0aCBDeWJyaWQgdG8gdXNlIG91ciBwbGF0Zm9ybS4gIEFuIGBPcmdhbml6YXRpb25gIHR5cGljYWxseSBkb2VzIG5vdCBkaXJlY3RseSBpbnRlcmFjdCB3aXRoIGBjdXN0b21lcnNgLiBJbnN0ZWFkLCBhbiBPcmdhbml6YXRpb24gaGFzIG9uZSBvciBtb3JlIGBiYW5rc2AsIHdoaWNoIGVuY29tcGFzcyB0aGUgZmluYW5jaWFsIHNlcnZpY2Ugb2ZmZXJpbmdzIG9mIHRoZSBwbGF0Zm9ybS4gICoqQmFua3MqKiAgQSBgQmFua2AgaXMgb3duZWQgYnkgYW4gYE9yZ2FuaXphdGlvbmAgYW5kIGNhbiBiZSB0aG91Z2h0IG9mIGFzIGFuIGVudmlyb25tZW50IG9yIGNvbnRhaW5lciBmb3IgYGN1c3RvbWVyc2AgYW5kIHByb2R1Y3Qgb2ZmZXJpbmdzLiBCYW5rcyBhcmUgY3JlYXRlZCBpbiBlaXRoZXIgYFNhbmRib3hgIG9yIGBQcm9kdWN0aW9uYCBtb2RlLCB3aGVyZSBgU2FuZGJveGAgaXMgdGhlIGVudmlyb25tZW50IHRoYXQgeW91IHdvdWxkIHRlc3QsIHByb3RvdHlwZSBhbmQgYnVpbGQgaW4gcHJpb3IgdG8gbW92aW5nIHRvIGBQcm9kdWN0aW9uYC4gIEFuIGBPcmdhbml6YXRpb25gIGNhbiBoYXZlIG11bHRpcGxlIGBiYW5rc2AsIGluIGVpdGhlciBgU2FuZGJveGAgb3IgYFByb2R1Y3Rpb25gIGVudmlyb25tZW50cy4gQSBgU2FuZGJveCBCYW5rYCB3aWxsIGJlIGJhY2tlZCBieSBzdHViYmVkIGRhdGEgYW5kIHByb2Nlc3MgZmxvd3MuIEZvciBpbnN0YW5jZSwgZnVuZGluZyBzb3VyY2UgdHJhbnNmZXIgcHJvY2Vzc2VzIGFzIHdlbGwgYXMgdHJhZGVzIHdpbGwgYmUgc2ltdWxhdGVkIHJhdGhlciB0aGFuIHBlcmZvcm1lZCwgaG93ZXZlciBhc3NldCBwcmljZXMgYXJlIHJlcHJlc2VudGF0aXZlIG9mIHJlYWwtd29ybGQgdmFsdWVzLiBZb3UgaGF2ZSBhbiB1bmxpbWl0ZWQgYW1vdW50IG9mIHNpbXVsYXRlZCBmaWF0IGN1cnJlbmN5IGZvciB0ZXN0aW5nIHB1cnBvc2VzLiAgKipDdXN0b21lcnMqKiAgYEN1c3RvbWVyc2AgcmVwcmVzZW50IHlvdXIgYmFua2luZyB1c2VycyBvbiB0aGUgcGxhdGZvcm0uIEF0IHByZXNlbnQsIHdlIG9mZmVyIHN1cHBvcnQgZm9yIGBJbmRpdmlkdWFsc2AgYXMgQ3VzdG9tZXJzLiAgYEN1c3RvbWVyc2AgbXVzdCBiZSB2ZXJpZmllZCAoaS5lLiwgS1lDXFwnZCkgaW4gb3VyIHN5c3RlbSBiZWZvcmUgdGhleSBjYW4gcGxheSBhbnkgcGFydCBvbiB0aGUgcGxhdGZvcm0sIHdoaWNoIG1lYW5zIHRoZXkgbXVzdCBoYXZlIGFuIGFzc29jaWF0ZWQgYW5kIGEgcGFzc2luZyBgSWRlbnRpdHkgVmVyaWZpY2F0aW9uYC4gU2VlIHRoZSBJZGVudGl0eSBWZXJpZmljYXRpb25zIHNlY3Rpb24gZm9yIG1vcmUgZGV0YWlscyBvbiBob3cgYSBjdXN0b21lciBjYW4gYmUgdmVyaWZpZWQuICBgQ3VzdG9tZXJzYCBtdXN0IGFsc28gaGF2ZSBhbiBgQWNjb3VudGAgdG8gYmUgYWJsZSB0byB0cmFuc2FjdCwgaW4gdGhlIGRlc2lyZWQgYXNzZXQgY2xhc3MuIFNlZSB0aGUgQWNjb3VudHMgQVBJcyBmb3IgbW9yZSBkZXRhaWxzIG9uIHNldHRpbmcgdXAgYWNjb3VudHMgZm9yIHRoZSBjdXN0b21lci4gXG4gKlxuICogVGhlIHZlcnNpb24gb2YgdGhlIE9wZW5BUEkgZG9jdW1lbnQ6IHYwLjEyMy4yMTZcbiAqIENvbnRhY3Q6IHN1cHBvcnRAY3licmlkLmFwcFxuICpcbiAqIE5PVEU6IFRoaXMgY2xhc3MgaXMgYXV0byBnZW5lcmF0ZWQgYnkgT3BlbkFQSSBHZW5lcmF0b3IgKGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaCkuXG4gKiBodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2hcbiAqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cbiAqL1xuaW1wb3J0IHsgUG9zdEZlZUJhbmtNb2RlbCB9IGZyb20gJy4vcG9zdEZlZSc7XG5pbXBvcnQgeyBQb3N0UXVvdGVFbnRyeUJhbmtNb2RlbCB9IGZyb20gJy4vcG9zdFF1b3RlRW50cnknO1xuXG5cbi8qKlxuICogUmVxdWVzdCBib2R5IGZvciBxdW90ZSBjcmVhdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQb3N0UXVvdGVCYW5rTW9kZWwgeyBcbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiBwcm9kdWN0IHRoZSBxdW90ZSBpcyBmb3IuXG4gICAgICovXG4gICAgcHJvZHVjdF90eXBlPzogUG9zdFF1b3RlQmFua01vZGVsLlByb2R1Y3RUeXBlRW51bSB8IG51bGw7XG4gICAgLyoqXG4gICAgICogVGhlIHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgYmFuay5cbiAgICAgKi9cbiAgICBiYW5rX2d1aWQ/OiBzdHJpbmcgfCBudWxsO1xuICAgIC8qKlxuICAgICAqIFRoZSB1bmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIGN1c3RvbWVyLlxuICAgICAqL1xuICAgIGN1c3RvbWVyX2d1aWQ/OiBzdHJpbmcgfCBudWxsO1xuICAgIC8qKlxuICAgICAqIFRoZSBhbW91bnQgdG8gYmUgcmVjZWl2ZWQgaW4gYmFzZSB1bml0cyBvZiB0aGUgY3VycmVuY3k6IGN1cnJlbmN5IGlzIFxcXCJhc3NldFxcXCIgZm9yIGJ1eSBhbmQgXFxcImNvdW50ZXJfYXNzZXRcXFwiIGZvciBzZWxsIGZvciB0cmFkZSBxdW90ZXMuXG4gICAgICovXG4gICAgcmVjZWl2ZV9hbW91bnQ/OiBzdHJpbmcgfCBudWxsO1xuICAgIC8qKlxuICAgICAqIFRoZSBhbW91bnQgdG8gYmUgZGVsaXZlcmVkIGluIGJhc2UgdW5pdHMgb2YgdGhlIGN1cnJlbmN5OiBjdXJyZW5jeSBpcyBcXFwiY291bnRlcl9hc3NldFxcXCIgZm9yIGJ1eSBhbmQgXFxcImFzc2V0XFxcIiBmb3Igc2VsbCBmb3IgdHJhZGUgcXVvdGVzLlxuICAgICAqL1xuICAgIGRlbGl2ZXJfYW1vdW50Pzogc3RyaW5nIHwgbnVsbDtcbiAgICAvKipcbiAgICAgKiBUaGUgYXNzZXQgY29kZSB0aGUgcXVvdGUgd2FzIHJlcXVlc3RlZCBmb3IuIFJlcXVpcmVkIHdoZW4gcHJvZHVjdF90eXBlIGlzIGxpZ2h0bmluZ190cmFuc2ZlciwgcHJvZHVjdF90eXBlIGlzIGJvb2tfdHJhbnNmZXIsIHByb2R1Y3RfdHlwZSBpcyBmdW5kaW5nLCBwcm9kdWN0X3R5cGUgaXMgY3J5cHRvX3RyYW5zZmVyLCBvciBwcm9kdWN0X3R5cGUgaXMgaW50ZXJfYWNjb3VudC5cbiAgICAgKi9cbiAgICBhc3NldD86IHN0cmluZyB8IG51bGw7XG4gICAgLyoqXG4gICAgICogVGhlIG5ldHdvcmsgYWRkcmVzcyB0byBwYXkgdGhlIGludm9pY2UgdG8uIFJlcXVpcmVkIHdoZW4gcHJvZHVjdF90eXBlIGlzIGxpZ2h0bmluZ190cmFuc2Zlci5cbiAgICAgKi9cbiAgICBuZXR3b3JrX2FkZHJlc3M/OiBzdHJpbmcgfCBudWxsO1xuICAgIC8qKlxuICAgICAqIFRoZSBjdXN0b20gZmVlcyBhc3NvY2lhdGVkIHdpdGggdGhlIHF1b3RlIE9wdGlvbmFsIHdoZW4gcHJvZHVjdF90eXBlIGlzIGxpZ2h0bmluZ190cmFuc2ZlciwgcHJvZHVjdF90eXBlIGlzIGZ1bmRpbmcsIHByb2R1Y3RfdHlwZSBpcyB0cmFkaW5nLCBwcm9kdWN0X3R5cGUgaXMgY3J5cHRvX3RyYW5zZmVyLCBvciBwcm9kdWN0X3R5cGUgaXMgdHJhZGluZ19leGl0LlxuICAgICAqL1xuICAgIGZlZXM/OiBBcnJheTxQb3N0RmVlQmFua01vZGVsPiB8IG51bGw7XG4gICAgLyoqXG4gICAgICogVGhlIGRpcmVjdGlvbiBmb3IgdHJhZGUgcXVvdGVzOiBlaXRoZXIgXFwnYnV5XFwnIG9yIFxcJ3NlbGxcXCcuIFRoZSBkaXJlY3Rpb24gZm9yIGZ1bmRpbmcgcXVvdGVzOiBlaXRoZXIgXFwnZGVwb3NpdFxcJyBvciBcXCd3aXRoZHJhd2FsXFwnLiBUaGUgZGlyZWN0aW9uIGZvciBjcnlwdG8gdHJhbnNmZXIgcXVvdGVzOiBcXCd3aXRoZHJhd2FsXFwnLiBCb29rIHRyYW5zZmVycyBkbyBub3QgcmVxdWlyZSBhIHNpZGUuIFRoZXkgYXJlIGFsbCBcXCdkZXBvc2l0XFwncy4gIFJlcXVpcmVkIHdoZW4gcHJvZHVjdF90eXBlIGlzIGZ1bmRpbmcsIHByb2R1Y3RfdHlwZSBpcyB0cmFkaW5nLCBvciBwcm9kdWN0X3R5cGUgaXMgY3J5cHRvX3RyYW5zZmVyLlxuICAgICAqL1xuICAgIHNpZGU/OiBQb3N0UXVvdGVCYW5rTW9kZWwuU2lkZUVudW0gfCBudWxsO1xuICAgIC8qKlxuICAgICAqIFN5bWJvbCB0aGUgcXVvdGUgaXMgYmVpbmcgcmVxdWVzdGVkIGZvci4gRm9ybWF0IGlzIFxcXCJhc3NldC1jb3VudGVyX2Fzc2V0XFxcIiBpbiB1cHBlcmNhc2UuIFNlZSB0aGUgU3ltYm9scyBBUEkgZm9yIGEgY29tcGxldGUgbGlzdCBvZiBjcnlwdG9jdXJyZW5jaWVzIHN1cHBvcnRlZC4gIFJlcXVpcmVkIHdoZW4gcHJvZHVjdF90eXBlIGlzIHRyYWRpbmcuXG4gICAgICovXG4gICAgc3ltYm9sPzogc3RyaW5nIHwgbnVsbDtcbiAgICAvKipcbiAgICAgKiBEZXN0aW5hdGlvbiBhY2NvdW50cyBmb3IgYmF0Y2ggdHJhbnNhY3Rpb25zIE9wdGlvbmFsIHdoZW4gcHJvZHVjdF90eXBlIGlzIGNyeXB0b190cmFuc2Zlci5cbiAgICAgKi9cbiAgICBkZXN0aW5hdGlvbl9hY2NvdW50cz86IEFycmF5PFBvc3RRdW90ZUVudHJ5QmFua01vZGVsPiB8IG51bGw7XG4gICAgLyoqXG4gICAgICogVGhlIGd1aWQgb2YgdGhlIHJlbGF0ZWQgdHJhZGUuIE9ubHkgcHJlc2VudCBvbiBgZXhpdGAgdHJhZGVzLiBSZXF1aXJlZCB3aGVuIHByb2R1Y3RfdHlwZSBpcyB0cmFkaW5nX2V4aXQuXG4gICAgICovXG4gICAgcmVmZXJlbmNlX3RyYWRlX2d1aWQ/OiBzdHJpbmcgfCBudWxsO1xuICAgIC8qKlxuICAgICAqIFRoZSBzb3VyY2UgYWNjb3VudFxcJ3MgaWRlbnRpZmllci4gUmVxdWlyZWQgd2hlbiBwcm9kdWN0X3R5cGUgaXMgaW50ZXJfYWNjb3VudC5cbiAgICAgKi9cbiAgICBzb3VyY2VfYWNjb3VudF9ndWlkPzogc3RyaW5nIHwgbnVsbDtcbiAgICAvKipcbiAgICAgKiBUaGUgZGVzdGluYXRpb24gYWNjb3VudFxcJ3MgaWRlbnRpZmllci4gUmVxdWlyZWQgd2hlbiBwcm9kdWN0X3R5cGUgaXMgaW50ZXJfYWNjb3VudC5cbiAgICAgKi9cbiAgICBkZXN0aW5hdGlvbl9hY2NvdW50X2d1aWQ/OiBzdHJpbmcgfCBudWxsO1xufVxuZXhwb3J0IG5hbWVzcGFjZSBQb3N0UXVvdGVCYW5rTW9kZWwge1xuICAgIGV4cG9ydCB0eXBlIFByb2R1Y3RUeXBlRW51bSA9ICd0cmFkaW5nJyB8ICd0cmFkaW5nX2V4aXQnIHwgJ2Z1bmRpbmcnIHwgJ2Jvb2tfdHJhbnNmZXInIHwgJ2NyeXB0b190cmFuc2ZlcicgfCAnaW50ZXJfYWNjb3VudCcgfCAnbGlnaHRuaW5nX3RyYW5zZmVyJztcbiAgICBleHBvcnQgY29uc3QgUHJvZHVjdFR5cGVFbnVtID0ge1xuICAgICAgICBUcmFkaW5nOiAndHJhZGluZycgYXMgUHJvZHVjdFR5cGVFbnVtLFxuICAgICAgICBUcmFkaW5nRXhpdDogJ3RyYWRpbmdfZXhpdCcgYXMgUHJvZHVjdFR5cGVFbnVtLFxuICAgICAgICBGdW5kaW5nOiAnZnVuZGluZycgYXMgUHJvZHVjdFR5cGVFbnVtLFxuICAgICAgICBCb29rVHJhbnNmZXI6ICdib29rX3RyYW5zZmVyJyBhcyBQcm9kdWN0VHlwZUVudW0sXG4gICAgICAgIENyeXB0b1RyYW5zZmVyOiAnY3J5cHRvX3RyYW5zZmVyJyBhcyBQcm9kdWN0VHlwZUVudW0sXG4gICAgICAgIEludGVyQWNjb3VudDogJ2ludGVyX2FjY291bnQnIGFzIFByb2R1Y3RUeXBlRW51bSxcbiAgICAgICAgTGlnaHRuaW5nVHJhbnNmZXI6ICdsaWdodG5pbmdfdHJhbnNmZXInIGFzIFByb2R1Y3RUeXBlRW51bVxuICAgIH07XG4gICAgZXhwb3J0IHR5cGUgU2lkZUVudW0gPSAnZGVwb3NpdCcgfCAnd2l0aGRyYXdhbCcgfCAnYnV5JyB8ICdzZWxsJztcbiAgICBleHBvcnQgY29uc3QgU2lkZUVudW0gPSB7XG4gICAgICAgIERlcG9zaXQ6ICdkZXBvc2l0JyBhcyBTaWRlRW51bSxcbiAgICAgICAgV2l0aGRyYXdhbDogJ3dpdGhkcmF3YWwnIGFzIFNpZGVFbnVtLFxuICAgICAgICBCdXk6ICdidXknIGFzIFNpZGVFbnVtLFxuICAgICAgICBTZWxsOiAnc2VsbCcgYXMgU2lkZUVudW1cbiAgICB9O1xufVxuXG5cbiJdfQ==
@@ -2,7 +2,7 @@
2
2
  * Cybrid Bank API
3
3
  * # Cybrid API documentation Welcome to Cybrid, an all-in-one crypto platform that enables you to easily **build** and **launch** white-label crypto products or services. In these documents, you\'ll find details on how our REST API operates and generally how our platform functions. If you\'re looking for our UI SDK Widgets for Web or Mobile (iOS/Android), generated API clients, or demo applications, head over to our [Github repo](https://github.com/Cybrid-app). 💡 We recommend bookmarking the [Cybrid LinkTree](https://linktr.ee/cybridtechnologies) which contains many helpful links to platform resources. ## Getting Started This is Cybrid\'s public interactive API documentation, which allows you to fully test our APIs. If you\'d like to use a different tool to exercise our APIs, you can download the [Open API 3.0 yaml](https://bank.production.cybrid.app/api/schema/v1/swagger.yaml) for import. If you\'re new to our APIs and the Cybrid Platform, follow the below guides to get set up and familiar with the platform: 1. [Introduction](https://docs.cybrid.xyz/docs/introduction) 2. [Platform Introduction](https://docs.cybrid.xyz/docs/how-is-cybrid-architected) 3. [Testing with Hosted Web Demo App](https://docs.cybrid.xyz/docs/testing-with-hosted-web-demo-app) In [Getting Started in the Cybrid Sandbox](https://docs.cybrid.xyz/docs/how-do-i-get-started-with-the-sandbox), we walk you through how to use the [Cybrid Sandbox](https://id.sandbox.cybrid.app/) to create a test bank and generate API keys. In [Getting Ready for Trading](https://kb.cybrid.xyz/getting-ready-for-trading), we walk through creating customers, customer identities, accounts, as well as executing quotes and trades. ## Working with the Cybrid Platform There are three primary ways you can interact with the Cybrid platform: 1. Directly via our RESTful API (this documentation) 2. Using our API clients available in a variety of languages ([Angular](https://github.com/Cybrid-app/cybrid-api-bank-angular), [Java](https://github.com/Cybrid-app/cybrid-api-bank-java), [Kotlin](https://github.com/Cybrid-app/cybrid-api-bank-kotlin), [Python](https://github.com/Cybrid-app/cybrid-api-bank-python), [Ruby](https://github.com/Cybrid-app/cybrid-api-bank-ruby), [Swift](https://github.com/Cybrid-app/cybrid-api-bank-swift) or [Typescript](https://github.com/Cybrid-app/cybrid-api-bank-typescript)) 3. Integrating a platform specific SDK ([Web](https://github.com/Cybrid-app/cybrid-sdk-web), [Android](https://github.com/Cybrid-app/cybrid-sdk-android), [iOS](https://github.com/Cybrid-app/cybrid-sdk-ios)) Our complete set of APIs allows you to manage resources across three distinct areas: your `Organization`, your `Banks` and your `Identities`. For most of your testing and interaction you\'ll be using the `Bank` API, which is where the majority of APIs reside. *The complete set of APIs can be found on the following pages:* | API | Description | |------------------------------------------------------------------|-------------------------------------------------------------| | [Organization API](https://organization.production.cybrid.app/api/schema/swagger-ui) | APIs to manage organizations | | [Bank API](https://bank.production.cybrid.app/api/schema/swagger-ui) | APIs to manage banks (and all downstream customer activity) | | [Identities API](https://id.production.cybrid.app/api/schema/swagger-ui) | APIs to manage organization and bank identities | For questions please contact [Support](mailto:support@cybrid.xyz) at any time for assistance, or contact the [Product Team](mailto:product@cybrid.xyz) for product suggestions. ## Authenticating with the API The Cybrid Platform uses OAuth 2.0 Bearer Tokens to authenticate requests to the platform. Credentials to create `Organization` and `Bank` tokens can be generated via the [Cybrid Sandbox](https://id.production.cybrid.app). Access tokens can be generated for a `Customer` as well via the [Cybrid IdP](https://id.production.cybrid.app) as well. An `Organization` access token applies broadly to the whole Organization and all of its `Banks`, whereas, a `Bank` access token is specific to an individual Bank. `Customer` tokens, similarly, are scoped to a specific customer in a bank. Both `Organization` and `Bank` tokens can be created using the OAuth Client Credential Grant flow. Each Organization and Bank has its own unique `Client ID` and `Secret` that allows for machine-to-machine authentication. A `Bank` can then generate `Customer` access tokens via API using our [Identities API](https://id.production.cybrid.app/api/schema/swagger-ui). <font color=\"orange\">**⚠️ Never share your Client ID or Secret publicly or in your source code repository.**</font> Your `Client ID` and `Secret` can be exchanged for a time-limited `Bearer Token` by interacting with the Cybrid Identity Provider or through interacting with the **Authorize** button in this document. The following curl command can be used to quickly generate a `Bearer Token` for use in testing the API or demo applications. ``` # Example request when using Bank credentials curl -X POST https://id.production.cybrid.app/oauth/token -d \'{ \"grant_type\": \"client_credentials\", \"client_id\": \"<Your Client ID>\", \"client_secret\": \"<Your Secret>\", \"scope\": \"banks:read banks:write bank_applications:execute accounts:read accounts:execute counterparties:read counterparties:write counterparties:execute customers:read customers:write customers:execute prices:read quotes:execute quotes:read trades:execute trades:read transfers:execute transfers:read external_bank_accounts:read external_bank_accounts:write external_bank_accounts:execute external_wallets:read external_wallets:execute workflows:read workflows:execute deposit_addresses:read deposit_addresses:execute deposit_bank_accounts:read deposit_bank_accounts:execute invoices:read invoices:write invoices:execute identity_verifications:read identity_verifications:write identity_verifications:execute files:read files:execute\" }\' -H \"Content-Type: application/json\" # When using Organization credentials set `scope` to \'organizations:read organizations:write organization_applications:execute banks:read banks:write banks:execute bank_applications:execute users:read users:execute counterparties:read customers:read accounts:read prices:read quotes:execute quotes:read trades:execute trades:read transfers:read transfers:execute external_bank_accounts:read external_wallets:read workflows:read deposit_addresses:read deposit_bank_accounts:read invoices:read subscriptions:read subscriptions:write subscriptions:execute subscription_events:read subscription_events:execute identity_verifications:read files:read files:execute\' ``` <font color=\"orange\">**⚠️ Note: The above curl will create a bearer token with full scope access. Delete scopes if you\'d like to restrict access.**</font> ## Authentication Scopes The Cybrid platform supports the use of scopes to control the level of access a token is limited to. Scopes do not grant access to resources; instead, they provide limits, in support of the least privilege principal. The following scopes are available on the platform and can be requested when generating either an Organization, Bank or Customer token. Generally speaking, the _Read_ scope is required to read and list resources, the _Write_ scope is required to update a resource and the _Execute_ scope is required to create a resource. | Resource | Read scope (Token Type) | Write scope (Token Type) | Execute scope (Token Type) | |-----------------------|------------------------------------------------------------|-----------------------------------------------|--------------------------------------------------| | Account | accounts:read (Organization, Bank, Customer) | | accounts:execute (Bank, Customer) | | Bank | banks:read (Organization, Bank) | banks:write (Organization, Bank) | banks:execute (Organization) | | Customer | customers:read (Organization, Bank, Customer) | customers:write (Bank, Customer) | customers:execute (Bank) | | Counterparty | counterparties:read (Organization, Bank, Customer) | counterparties:write (Bank, Customer) | counterparties:execute (Bank) | | Deposit Address | deposit_addresses:read (Organization, Bank, Customer) | deposit_addresses:write (Bank, Customer) | deposit_addresses:execute (Bank, Customer) | | External Bank Account | external_bank_accounts:read (Organization, Bank, Customer) | external_bank_accounts:write (Bank, Customer) | external_bank_accounts:execute (Bank, Customer) | | External Wallet | external_wallet:read (Organization, Bank, Customer) | | external_wallet:execute (Bank, Customer) | | Organization | organizations:read (Organization) | organizations:write (Organization) | | | User | users:read (Organization) | | users:execute (Organization) | | Price | prices:read (Bank, Customer) | | | | Quote | quotes:read (Organization, Bank, Customer) | | quotes:execute (Organization, Bank, Customer) | | Trade | trades:read (Organization, Bank, Customer) | | trades:execute (Organization, Bank, Customer) | | Transfer | transfers:read (Organization, Bank, Customer) | | transfers:execute (Organization, Bank, Customer) | | Workflow | workflows:read (Organization, Bank, Customer) | | workflows:execute (Bank, Customer) | | Invoice | invoices:read (Organization, Bank, Customer) | invoices:write (Bank, Customer) | invoices:execute (Bank, Customer) | ## Available Endpoints The available APIs for the [Identity](https://id.production.cybrid.app/api/schema/swagger-ui), [Organization](https://organization.production.cybrid.app/api/schema/swagger-ui) and [Bank](https://bank.production.cybrid.app/api/schema/swagger-ui) API services are listed below: | API Service | Model | API Endpoint Path | Description | |--------------|----------------------|--------------------------------|---------------------------------------------------------------------------------------------------| | Identity | Bank | /api/bank_applications | Create and list banks | | Identity | CustomerToken | /api/customer_tokens | Create customer JWT access tokens | | Identity | Organization | /api/organization_applications | Create and list organizations | | Identity | Organization | /api/users | Create and list organization users | | Organization | Organization | /api/organizations | APIs to retrieve and update organization name | | Bank | Account | /api/accounts | Create and list accounts, which hold a specific asset for a customers | | Bank | Asset | /api/assets | Get a list of assets supported by the platform (ex: BTC, ETH) | | Bank | Bank | /api/banks | Create, update and list banks, the parent to customers, accounts, etc | | Bank | Customer | /api/customers | Create and list customers | | Bank | Counterparty | /api/counterparties | Create and list counterparties | | Bank | DepositAddress | /api/deposit_addresses | Create, get and list deposit addresses | | Bank | ExternalBankAccount | /api/external_bank_accounts | Create, get and list external bank accounts, which connect customer bank accounts to the platform | | Bank | ExternalWallet | /api/external_wallets | Create, get, list and delete external wallets, which connect customer wallets to the platform | | Bank | IdentityVerification | /api/identity_verifications | Create and list identity verifications, which are performed on customers for KYC | | Bank | Invoice | /api/invoices | Create, get, cancel and list invoices | | Bank | PaymentInstruction | /api/payment_instructions | Create, get and list payment instructions for invoices | | Bank | Price | /api/prices | Get the current prices for assets on the platform | | Bank | Quote | /api/quotes | Create and list quotes, which are required to execute trades | | Bank | Symbol | /api/symbols | Get a list of symbols supported for trade (ex: BTC-USD) | | Bank | Trade | /api/trades | Create and list trades, which buy or sell cryptocurrency | | Bank | Transfer | /api/transfers | Create, get and list transfers (e.g., funding, book) | | Bank | Workflow | /api/workflows | Create, get and list workflows | ## Understanding Object Models & Endpoints **Organizations** An `Organization` is meant to represent the organization partnering with Cybrid to use our platform. An `Organization` typically does not directly interact with `customers`. Instead, an Organization has one or more `banks`, which encompass the financial service offerings of the platform. **Banks** A `Bank` is owned by an `Organization` and can be thought of as an environment or container for `customers` and product offerings. Banks are created in either `Sandbox` or `Production` mode, where `Sandbox` is the environment that you would test, prototype and build in prior to moving to `Production`. An `Organization` can have multiple `banks`, in either `Sandbox` or `Production` environments. A `Sandbox Bank` will be backed by stubbed data and process flows. For instance, funding source transfer processes as well as trades will be simulated rather than performed, however asset prices are representative of real-world values. You have an unlimited amount of simulated fiat currency for testing purposes. **Customers** `Customers` represent your banking users on the platform. At present, we offer support for `Individuals` as Customers. `Customers` must be verified (i.e., KYC\'d) in our system before they can play any part on the platform, which means they must have an associated and a passing `Identity Verification`. See the Identity Verifications section for more details on how a customer can be verified. `Customers` must also have an `Account` to be able to transact, in the desired asset class. See the Accounts APIs for more details on setting up accounts for the customer.
4
4
  *
5
- * The version of the OpenAPI document: v0.123.214
5
+ * The version of the OpenAPI document: v0.123.216
6
6
  * Contact: support@cybrid.app
7
7
  *
8
8
  * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
@@ -15,4 +15,4 @@ export var PostQuoteEntryBankModel;
15
15
  ExternalWallet: 'external_wallet'
16
16
  };
17
17
  })(PostQuoteEntryBankModel || (PostQuoteEntryBankModel = {}));
18
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9zdFF1b3RlRW50cnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9tb2RlbC9wb3N0UXVvdGVFbnRyeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7OztHQVVHO0FBd0JILE1BQU0sS0FBVyx1QkFBdUIsQ0FLdkM7QUFMRCxXQUFpQix1QkFBdUI7SUFFdkIsZ0NBQVEsR0FBRztRQUNwQixjQUFjLEVBQUUsaUJBQTZCO0tBQ2hELENBQUM7QUFDTixDQUFDLEVBTGdCLHVCQUF1QixLQUF2Qix1QkFBdUIsUUFLdkMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEN5YnJpZCBCYW5rIEFQSVxuICogIyBDeWJyaWQgQVBJIGRvY3VtZW50YXRpb24gIFdlbGNvbWUgdG8gQ3licmlkLCBhbiBhbGwtaW4tb25lIGNyeXB0byBwbGF0Zm9ybSB0aGF0IGVuYWJsZXMgeW91IHRvIGVhc2lseSAqKmJ1aWxkKiogYW5kICoqbGF1bmNoKiogd2hpdGUtbGFiZWwgY3J5cHRvIHByb2R1Y3RzIG9yIHNlcnZpY2VzLiAgSW4gdGhlc2UgZG9jdW1lbnRzLCB5b3VcXCdsbCBmaW5kIGRldGFpbHMgb24gaG93IG91ciBSRVNUIEFQSSBvcGVyYXRlcyBhbmQgZ2VuZXJhbGx5IGhvdyBvdXIgcGxhdGZvcm0gZnVuY3Rpb25zLiAgSWYgeW91XFwncmUgbG9va2luZyBmb3Igb3VyIFVJIFNESyBXaWRnZXRzIGZvciBXZWIgb3IgTW9iaWxlIChpT1MvQW5kcm9pZCksIGdlbmVyYXRlZCBBUEkgY2xpZW50cywgb3IgZGVtbyBhcHBsaWNhdGlvbnMsIGhlYWQgb3ZlciB0byBvdXIgW0dpdGh1YiByZXBvXShodHRwczovL2dpdGh1Yi5jb20vQ3licmlkLWFwcCkuICDwn5KhIFdlIHJlY29tbWVuZCBib29rbWFya2luZyB0aGUgW0N5YnJpZCBMaW5rVHJlZV0oaHR0cHM6Ly9saW5rdHIuZWUvY3licmlkdGVjaG5vbG9naWVzKSB3aGljaCBjb250YWlucyBtYW55IGhlbHBmdWwgbGlua3MgdG8gcGxhdGZvcm0gcmVzb3VyY2VzLiAgIyMgR2V0dGluZyBTdGFydGVkICBUaGlzIGlzIEN5YnJpZFxcJ3MgcHVibGljIGludGVyYWN0aXZlIEFQSSBkb2N1bWVudGF0aW9uLCB3aGljaCBhbGxvd3MgeW91IHRvIGZ1bGx5IHRlc3Qgb3VyIEFQSXMuIElmIHlvdVxcJ2QgbGlrZSB0byB1c2UgYSBkaWZmZXJlbnQgdG9vbCB0byBleGVyY2lzZSBvdXIgQVBJcywgeW91IGNhbiBkb3dubG9hZCB0aGUgW09wZW4gQVBJIDMuMCB5YW1sXShodHRwczovL2JhbmsucHJvZHVjdGlvbi5jeWJyaWQuYXBwL2FwaS9zY2hlbWEvdjEvc3dhZ2dlci55YW1sKSBmb3IgaW1wb3J0LiAgSWYgeW91XFwncmUgbmV3IHRvIG91ciBBUElzIGFuZCB0aGUgQ3licmlkIFBsYXRmb3JtLCBmb2xsb3cgdGhlIGJlbG93IGd1aWRlcyB0byBnZXQgc2V0IHVwIGFuZCBmYW1pbGlhciB3aXRoIHRoZSBwbGF0Zm9ybTogIDEuIFtJbnRyb2R1Y3Rpb25dKGh0dHBzOi8vZG9jcy5jeWJyaWQueHl6L2RvY3MvaW50cm9kdWN0aW9uKSAyLiBbUGxhdGZvcm0gSW50cm9kdWN0aW9uXShodHRwczovL2RvY3MuY3licmlkLnh5ei9kb2NzL2hvdy1pcy1jeWJyaWQtYXJjaGl0ZWN0ZWQpIDMuIFtUZXN0aW5nIHdpdGggSG9zdGVkIFdlYiBEZW1vIEFwcF0oaHR0cHM6Ly9kb2NzLmN5YnJpZC54eXovZG9jcy90ZXN0aW5nLXdpdGgtaG9zdGVkLXdlYi1kZW1vLWFwcCkgIEluIFtHZXR0aW5nIFN0YXJ0ZWQgaW4gdGhlIEN5YnJpZCBTYW5kYm94XShodHRwczovL2RvY3MuY3licmlkLnh5ei9kb2NzL2hvdy1kby1pLWdldC1zdGFydGVkLXdpdGgtdGhlLXNhbmRib3gpLCB3ZSB3YWxrIHlvdSB0aHJvdWdoIGhvdyB0byB1c2UgdGhlIFtDeWJyaWQgU2FuZGJveF0oaHR0cHM6Ly9pZC5zYW5kYm94LmN5YnJpZC5hcHAvKSB0byBjcmVhdGUgYSB0ZXN0IGJhbmsgYW5kIGdlbmVyYXRlIEFQSSBrZXlzLiBJbiBbR2V0dGluZyBSZWFkeSBmb3IgVHJhZGluZ10oaHR0cHM6Ly9rYi5jeWJyaWQueHl6L2dldHRpbmctcmVhZHktZm9yLXRyYWRpbmcpLCB3ZSB3YWxrIHRocm91Z2ggY3JlYXRpbmcgY3VzdG9tZXJzLCBjdXN0b21lciBpZGVudGl0aWVzLCBhY2NvdW50cywgYXMgd2VsbCBhcyBleGVjdXRpbmcgcXVvdGVzIGFuZCB0cmFkZXMuICAjIyBXb3JraW5nIHdpdGggdGhlIEN5YnJpZCBQbGF0Zm9ybSAgVGhlcmUgYXJlIHRocmVlIHByaW1hcnkgd2F5cyB5b3UgY2FuIGludGVyYWN0IHdpdGggdGhlIEN5YnJpZCBwbGF0Zm9ybTogIDEuIERpcmVjdGx5IHZpYSBvdXIgUkVTVGZ1bCBBUEkgKHRoaXMgZG9jdW1lbnRhdGlvbikgMi4gVXNpbmcgb3VyIEFQSSBjbGllbnRzIGF2YWlsYWJsZSBpbiBhIHZhcmlldHkgb2YgbGFuZ3VhZ2VzIChbQW5ndWxhcl0oaHR0cHM6Ly9naXRodWIuY29tL0N5YnJpZC1hcHAvY3licmlkLWFwaS1iYW5rLWFuZ3VsYXIpLCBbSmF2YV0oaHR0cHM6Ly9naXRodWIuY29tL0N5YnJpZC1hcHAvY3licmlkLWFwaS1iYW5rLWphdmEpLCBbS290bGluXShodHRwczovL2dpdGh1Yi5jb20vQ3licmlkLWFwcC9jeWJyaWQtYXBpLWJhbmsta290bGluKSwgW1B5dGhvbl0oaHR0cHM6Ly9naXRodWIuY29tL0N5YnJpZC1hcHAvY3licmlkLWFwaS1iYW5rLXB5dGhvbiksIFtSdWJ5XShodHRwczovL2dpdGh1Yi5jb20vQ3licmlkLWFwcC9jeWJyaWQtYXBpLWJhbmstcnVieSksIFtTd2lmdF0oaHR0cHM6Ly9naXRodWIuY29tL0N5YnJpZC1hcHAvY3licmlkLWFwaS1iYW5rLXN3aWZ0KSBvciBbVHlwZXNjcmlwdF0oaHR0cHM6Ly9naXRodWIuY29tL0N5YnJpZC1hcHAvY3licmlkLWFwaS1iYW5rLXR5cGVzY3JpcHQpKSAzLiBJbnRlZ3JhdGluZyBhIHBsYXRmb3JtIHNwZWNpZmljIFNESyAoW1dlYl0oaHR0cHM6Ly9naXRodWIuY29tL0N5YnJpZC1hcHAvY3licmlkLXNkay13ZWIpLCBbQW5kcm9pZF0oaHR0cHM6Ly9naXRodWIuY29tL0N5YnJpZC1hcHAvY3licmlkLXNkay1hbmRyb2lkKSwgW2lPU10oaHR0cHM6Ly9naXRodWIuY29tL0N5YnJpZC1hcHAvY3licmlkLXNkay1pb3MpKSAgT3VyIGNvbXBsZXRlIHNldCBvZiBBUElzIGFsbG93cyB5b3UgdG8gbWFuYWdlIHJlc291cmNlcyBhY3Jvc3MgdGhyZWUgZGlzdGluY3QgYXJlYXM6IHlvdXIgYE9yZ2FuaXphdGlvbmAsIHlvdXIgYEJhbmtzYCBhbmQgeW91ciBgSWRlbnRpdGllc2AuIEZvciBtb3N0IG9mIHlvdXIgdGVzdGluZyBhbmQgaW50ZXJhY3Rpb24geW91XFwnbGwgYmUgdXNpbmcgdGhlIGBCYW5rYCBBUEksIHdoaWNoIGlzIHdoZXJlIHRoZSBtYWpvcml0eSBvZiBBUElzIHJlc2lkZS4gICpUaGUgY29tcGxldGUgc2V0IG9mIEFQSXMgY2FuIGJlIGZvdW5kIG9uIHRoZSBmb2xsb3dpbmcgcGFnZXM6KiAgfCBBUEkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IHwgW09yZ2FuaXphdGlvbiBBUEldKGh0dHBzOi8vb3JnYW5pemF0aW9uLnByb2R1Y3Rpb24uY3licmlkLmFwcC9hcGkvc2NoZW1hL3N3YWdnZXItdWkpICAgfCBBUElzIHRvIG1hbmFnZSBvcmdhbml6YXRpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHwgW0JhbmsgQVBJXShodHRwczovL2JhbmsucHJvZHVjdGlvbi5jeWJyaWQuYXBwL2FwaS9zY2hlbWEvc3dhZ2dlci11aSkgICAgICAgICAgICAgICAgICAgfCBBUElzIHRvIG1hbmFnZSBiYW5rcyAoYW5kIGFsbCBkb3duc3RyZWFtIGN1c3RvbWVyIGFjdGl2aXR5KSB8IHwgW0lkZW50aXRpZXMgQVBJXShodHRwczovL2lkLnByb2R1Y3Rpb24uY3licmlkLmFwcC9hcGkvc2NoZW1hL3N3YWdnZXItdWkpICAgICAgICAgICAgICAgICAgICAgICB8IEFQSXMgdG8gbWFuYWdlIG9yZ2FuaXphdGlvbiBhbmQgYmFuayBpZGVudGl0aWVzICAgICAgICAgICAgIHwgIEZvciBxdWVzdGlvbnMgcGxlYXNlIGNvbnRhY3QgW1N1cHBvcnRdKG1haWx0bzpzdXBwb3J0QGN5YnJpZC54eXopIGF0IGFueSB0aW1lIGZvciBhc3Npc3RhbmNlLCBvciBjb250YWN0IHRoZSBbUHJvZHVjdCBUZWFtXShtYWlsdG86cHJvZHVjdEBjeWJyaWQueHl6KSBmb3IgcHJvZHVjdCBzdWdnZXN0aW9ucy4gICMjIEF1dGhlbnRpY2F0aW5nIHdpdGggdGhlIEFQSSAgVGhlIEN5YnJpZCBQbGF0Zm9ybSB1c2VzIE9BdXRoIDIuMCBCZWFyZXIgVG9rZW5zIHRvIGF1dGhlbnRpY2F0ZSByZXF1ZXN0cyB0byB0aGUgcGxhdGZvcm0uIENyZWRlbnRpYWxzIHRvIGNyZWF0ZSBgT3JnYW5pemF0aW9uYCBhbmQgYEJhbmtgIHRva2VucyBjYW4gYmUgZ2VuZXJhdGVkIHZpYSB0aGUgW0N5YnJpZCBTYW5kYm94XShodHRwczovL2lkLnByb2R1Y3Rpb24uY3licmlkLmFwcCkuIEFjY2VzcyB0b2tlbnMgY2FuIGJlIGdlbmVyYXRlZCBmb3IgYSBgQ3VzdG9tZXJgIGFzIHdlbGwgdmlhIHRoZSBbQ3licmlkIElkUF0oaHR0cHM6Ly9pZC5wcm9kdWN0aW9uLmN5YnJpZC5hcHApIGFzIHdlbGwuICBBbiBgT3JnYW5pemF0aW9uYCBhY2Nlc3MgdG9rZW4gYXBwbGllcyBicm9hZGx5IHRvIHRoZSB3aG9sZSBPcmdhbml6YXRpb24gYW5kIGFsbCBvZiBpdHMgYEJhbmtzYCwgd2hlcmVhcywgYSBgQmFua2AgYWNjZXNzIHRva2VuIGlzIHNwZWNpZmljIHRvIGFuIGluZGl2aWR1YWwgQmFuay4gYEN1c3RvbWVyYCB0b2tlbnMsIHNpbWlsYXJseSwgYXJlIHNjb3BlZCB0byBhIHNwZWNpZmljIGN1c3RvbWVyIGluIGEgYmFuay4gIEJvdGggYE9yZ2FuaXphdGlvbmAgYW5kIGBCYW5rYCB0b2tlbnMgY2FuIGJlIGNyZWF0ZWQgdXNpbmcgdGhlIE9BdXRoIENsaWVudCBDcmVkZW50aWFsIEdyYW50IGZsb3cuIEVhY2ggT3JnYW5pemF0aW9uIGFuZCBCYW5rIGhhcyBpdHMgb3duIHVuaXF1ZSBgQ2xpZW50IElEYCBhbmQgYFNlY3JldGAgdGhhdCBhbGxvd3MgZm9yIG1hY2hpbmUtdG8tbWFjaGluZSBhdXRoZW50aWNhdGlvbi4gIEEgYEJhbmtgIGNhbiB0aGVuIGdlbmVyYXRlIGBDdXN0b21lcmAgYWNjZXNzIHRva2VucyB2aWEgQVBJIHVzaW5nIG91ciBbSWRlbnRpdGllcyBBUEldKGh0dHBzOi8vaWQucHJvZHVjdGlvbi5jeWJyaWQuYXBwL2FwaS9zY2hlbWEvc3dhZ2dlci11aSkuICA8Zm9udCBjb2xvcj1cXFwib3JhbmdlXFxcIj4qKuKaoO+4jyBOZXZlciBzaGFyZSB5b3VyIENsaWVudCBJRCBvciBTZWNyZXQgcHVibGljbHkgb3IgaW4geW91ciBzb3VyY2UgY29kZSByZXBvc2l0b3J5LioqPC9mb250PiAgWW91ciBgQ2xpZW50IElEYCBhbmQgYFNlY3JldGAgY2FuIGJlIGV4Y2hhbmdlZCBmb3IgYSB0aW1lLWxpbWl0ZWQgYEJlYXJlciBUb2tlbmAgYnkgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgQ3licmlkIElkZW50aXR5IFByb3ZpZGVyIG9yIHRocm91Z2ggaW50ZXJhY3Rpbmcgd2l0aCB0aGUgKipBdXRob3JpemUqKiBidXR0b24gaW4gdGhpcyBkb2N1bWVudC4gIFRoZSBmb2xsb3dpbmcgY3VybCBjb21tYW5kIGNhbiBiZSB1c2VkIHRvIHF1aWNrbHkgZ2VuZXJhdGUgYSBgQmVhcmVyIFRva2VuYCBmb3IgdXNlIGluIHRlc3RpbmcgdGhlIEFQSSBvciBkZW1vIGFwcGxpY2F0aW9ucy4gIGBgYCAjIEV4YW1wbGUgcmVxdWVzdCB3aGVuIHVzaW5nIEJhbmsgY3JlZGVudGlhbHMgY3VybCAtWCBQT1NUIGh0dHBzOi8vaWQucHJvZHVjdGlvbi5jeWJyaWQuYXBwL29hdXRoL3Rva2VuIC1kIFxcJ3sgICAgIFxcXCJncmFudF90eXBlXFxcIjogXFxcImNsaWVudF9jcmVkZW50aWFsc1xcXCIsICAgICBcXFwiY2xpZW50X2lkXFxcIjogXFxcIjxZb3VyIENsaWVudCBJRD5cXFwiLCAgICAgXFxcImNsaWVudF9zZWNyZXRcXFwiOiBcXFwiPFlvdXIgU2VjcmV0PlxcXCIsICAgICBcXFwic2NvcGVcXFwiOiBcXFwiYmFua3M6cmVhZCBiYW5rczp3cml0ZSBiYW5rX2FwcGxpY2F0aW9uczpleGVjdXRlIGFjY291bnRzOnJlYWQgYWNjb3VudHM6ZXhlY3V0ZSBjb3VudGVycGFydGllczpyZWFkIGNvdW50ZXJwYXJ0aWVzOndyaXRlIGNvdW50ZXJwYXJ0aWVzOmV4ZWN1dGUgY3VzdG9tZXJzOnJlYWQgY3VzdG9tZXJzOndyaXRlIGN1c3RvbWVyczpleGVjdXRlIHByaWNlczpyZWFkIHF1b3RlczpleGVjdXRlIHF1b3RlczpyZWFkIHRyYWRlczpleGVjdXRlIHRyYWRlczpyZWFkIHRyYW5zZmVyczpleGVjdXRlIHRyYW5zZmVyczpyZWFkIGV4dGVybmFsX2JhbmtfYWNjb3VudHM6cmVhZCBleHRlcm5hbF9iYW5rX2FjY291bnRzOndyaXRlIGV4dGVybmFsX2JhbmtfYWNjb3VudHM6ZXhlY3V0ZSBleHRlcm5hbF93YWxsZXRzOnJlYWQgZXh0ZXJuYWxfd2FsbGV0czpleGVjdXRlIHdvcmtmbG93czpyZWFkIHdvcmtmbG93czpleGVjdXRlIGRlcG9zaXRfYWRkcmVzc2VzOnJlYWQgZGVwb3NpdF9hZGRyZXNzZXM6ZXhlY3V0ZSBkZXBvc2l0X2JhbmtfYWNjb3VudHM6cmVhZCBkZXBvc2l0X2JhbmtfYWNjb3VudHM6ZXhlY3V0ZSBpbnZvaWNlczpyZWFkIGludm9pY2VzOndyaXRlIGludm9pY2VzOmV4ZWN1dGUgaWRlbnRpdHlfdmVyaWZpY2F0aW9uczpyZWFkIGlkZW50aXR5X3ZlcmlmaWNhdGlvbnM6d3JpdGUgaWRlbnRpdHlfdmVyaWZpY2F0aW9uczpleGVjdXRlIGZpbGVzOnJlYWQgZmlsZXM6ZXhlY3V0ZVxcXCIgICB9XFwnIC1IIFxcXCJDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL2pzb25cXFwiICAjIFdoZW4gdXNpbmcgT3JnYW5pemF0aW9uIGNyZWRlbnRpYWxzIHNldCBgc2NvcGVgIHRvIFxcJ29yZ2FuaXphdGlvbnM6cmVhZCBvcmdhbml6YXRpb25zOndyaXRlIG9yZ2FuaXphdGlvbl9hcHBsaWNhdGlvbnM6ZXhlY3V0ZSBiYW5rczpyZWFkIGJhbmtzOndyaXRlIGJhbmtzOmV4ZWN1dGUgYmFua19hcHBsaWNhdGlvbnM6ZXhlY3V0ZSB1c2VyczpyZWFkIHVzZXJzOmV4ZWN1dGUgY291bnRlcnBhcnRpZXM6cmVhZCBjdXN0b21lcnM6cmVhZCBhY2NvdW50czpyZWFkIHByaWNlczpyZWFkIHF1b3RlczpleGVjdXRlIHF1b3RlczpyZWFkIHRyYWRlczpleGVjdXRlIHRyYWRlczpyZWFkIHRyYW5zZmVyczpyZWFkIHRyYW5zZmVyczpleGVjdXRlIGV4dGVybmFsX2JhbmtfYWNjb3VudHM6cmVhZCBleHRlcm5hbF93YWxsZXRzOnJlYWQgd29ya2Zsb3dzOnJlYWQgZGVwb3NpdF9hZGRyZXNzZXM6cmVhZCBkZXBvc2l0X2JhbmtfYWNjb3VudHM6cmVhZCBpbnZvaWNlczpyZWFkIHN1YnNjcmlwdGlvbnM6cmVhZCBzdWJzY3JpcHRpb25zOndyaXRlIHN1YnNjcmlwdGlvbnM6ZXhlY3V0ZSBzdWJzY3JpcHRpb25fZXZlbnRzOnJlYWQgc3Vic2NyaXB0aW9uX2V2ZW50czpleGVjdXRlIGlkZW50aXR5X3ZlcmlmaWNhdGlvbnM6cmVhZCBmaWxlczpyZWFkIGZpbGVzOmV4ZWN1dGVcXCcgYGBgIDxmb250IGNvbG9yPVxcXCJvcmFuZ2VcXFwiPioq4pqg77iPIE5vdGU6IFRoZSBhYm92ZSBjdXJsIHdpbGwgY3JlYXRlIGEgYmVhcmVyIHRva2VuIHdpdGggZnVsbCBzY29wZSBhY2Nlc3MuIERlbGV0ZSBzY29wZXMgaWYgeW91XFwnZCBsaWtlIHRvIHJlc3RyaWN0IGFjY2Vzcy4qKjwvZm9udD4gICMjIEF1dGhlbnRpY2F0aW9uIFNjb3BlcyAgVGhlIEN5YnJpZCBwbGF0Zm9ybSBzdXBwb3J0cyB0aGUgdXNlIG9mIHNjb3BlcyB0byBjb250cm9sIHRoZSBsZXZlbCBvZiBhY2Nlc3MgYSB0b2tlbiBpcyBsaW1pdGVkIHRvLiBTY29wZXMgZG8gbm90IGdyYW50IGFjY2VzcyB0byByZXNvdXJjZXM7IGluc3RlYWQsIHRoZXkgcHJvdmlkZSBsaW1pdHMsIGluIHN1cHBvcnQgb2YgdGhlIGxlYXN0IHByaXZpbGVnZSBwcmluY2lwYWwuICBUaGUgZm9sbG93aW5nIHNjb3BlcyBhcmUgYXZhaWxhYmxlIG9uIHRoZSBwbGF0Zm9ybSBhbmQgY2FuIGJlIHJlcXVlc3RlZCB3aGVuIGdlbmVyYXRpbmcgZWl0aGVyIGFuIE9yZ2FuaXphdGlvbiwgQmFuayBvciBDdXN0b21lciB0b2tlbi4gR2VuZXJhbGx5IHNwZWFraW5nLCB0aGUgX1JlYWRfIHNjb3BlIGlzIHJlcXVpcmVkIHRvIHJlYWQgYW5kIGxpc3QgcmVzb3VyY2VzLCB0aGUgX1dyaXRlXyBzY29wZSBpcyByZXF1aXJlZCB0byB1cGRhdGUgYSByZXNvdXJjZSBhbmQgdGhlIF9FeGVjdXRlXyBzY29wZSBpcyByZXF1aXJlZCB0byBjcmVhdGUgYSByZXNvdXJjZS4gIHwgUmVzb3VyY2UgICAgICAgICAgICAgIHwgUmVhZCBzY29wZSAoVG9rZW4gVHlwZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFdyaXRlIHNjb3BlIChUb2tlbiBUeXBlKSAgICAgICAgICAgICAgICAgICAgICB8IEV4ZWN1dGUgc2NvcGUgKFRva2VuIFR5cGUpICAgICAgICAgICAgICAgICAgICAgICB8IHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IHwgQWNjb3VudCAgICAgICAgICAgICAgIHwgYWNjb3VudHM6cmVhZCAoT3JnYW5pemF0aW9uLCBCYW5rLCBDdXN0b21lcikgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGFjY291bnRzOmV4ZWN1dGUgKEJhbmssIEN1c3RvbWVyKSAgICAgICAgICAgICAgICB8IHwgQmFuayAgICAgICAgICAgICAgICAgIHwgYmFua3M6cmVhZCAoT3JnYW5pemF0aW9uLCBCYW5rKSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGJhbmtzOndyaXRlIChPcmdhbml6YXRpb24sIEJhbmspICAgICAgICAgICAgICB8IGJhbmtzOmV4ZWN1dGUgKE9yZ2FuaXphdGlvbikgICAgICAgICAgICAgICAgICAgICB8IHwgQ3VzdG9tZXIgICAgICAgICAgICAgIHwgY3VzdG9tZXJzOnJlYWQgKE9yZ2FuaXphdGlvbiwgQmFuaywgQ3VzdG9tZXIpICAgICAgICAgICAgICB8IGN1c3RvbWVyczp3cml0ZSAoQmFuaywgQ3VzdG9tZXIpICAgICAgICAgICAgICB8IGN1c3RvbWVyczpleGVjdXRlIChCYW5rKSAgICAgICAgICAgICAgICAgICAgICAgICB8IHwgQ291bnRlcnBhcnR5ICAgICAgICAgIHwgY291bnRlcnBhcnRpZXM6cmVhZCAoT3JnYW5pemF0aW9uLCBCYW5rLCBDdXN0b21lcikgICAgICAgICB8IGNvdW50ZXJwYXJ0aWVzOndyaXRlIChCYW5rLCBDdXN0b21lcikgICAgICAgICB8IGNvdW50ZXJwYXJ0aWVzOmV4ZWN1dGUgKEJhbmspICAgICAgICAgICAgICAgICAgICB8IHwgRGVwb3NpdCBBZGRyZXNzICAgICAgIHwgZGVwb3NpdF9hZGRyZXNzZXM6cmVhZCAoT3JnYW5pemF0aW9uLCBCYW5rLCBDdXN0b21lcikgICAgICB8IGRlcG9zaXRfYWRkcmVzc2VzOndyaXRlIChCYW5rLCBDdXN0b21lcikgICAgICB8IGRlcG9zaXRfYWRkcmVzc2VzOmV4ZWN1dGUgKEJhbmssIEN1c3RvbWVyKSAgICAgICB8IHwgRXh0ZXJuYWwgQmFuayBBY2NvdW50IHwgZXh0ZXJuYWxfYmFua19hY2NvdW50czpyZWFkIChPcmdhbml6YXRpb24sIEJhbmssIEN1c3RvbWVyKSB8IGV4dGVybmFsX2JhbmtfYWNjb3VudHM6d3JpdGUgKEJhbmssIEN1c3RvbWVyKSB8IGV4dGVybmFsX2JhbmtfYWNjb3VudHM6ZXhlY3V0ZSAoQmFuaywgQ3VzdG9tZXIpICB8IHwgRXh0ZXJuYWwgV2FsbGV0ICAgICAgIHwgZXh0ZXJuYWxfd2FsbGV0OnJlYWQgKE9yZ2FuaXphdGlvbiwgQmFuaywgQ3VzdG9tZXIpICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGV4dGVybmFsX3dhbGxldDpleGVjdXRlIChCYW5rLCBDdXN0b21lcikgICAgICAgICB8IHwgT3JnYW5pemF0aW9uICAgICAgICAgIHwgb3JnYW5pemF0aW9uczpyZWFkIChPcmdhbml6YXRpb24pICAgICAgICAgICAgICAgICAgICAgICAgICB8IG9yZ2FuaXphdGlvbnM6d3JpdGUgKE9yZ2FuaXphdGlvbikgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHwgVXNlciAgICAgICAgICAgICAgICAgIHwgdXNlcnM6cmVhZCAoT3JnYW5pemF0aW9uKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHVzZXJzOmV4ZWN1dGUgKE9yZ2FuaXphdGlvbikgICAgICAgICAgICAgICAgICAgICB8IHwgUHJpY2UgICAgICAgICAgICAgICAgIHwgcHJpY2VzOnJlYWQgKEJhbmssIEN1c3RvbWVyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHwgUXVvdGUgICAgICAgICAgICAgICAgIHwgcXVvdGVzOnJlYWQgKE9yZ2FuaXphdGlvbiwgQmFuaywgQ3VzdG9tZXIpICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHF1b3RlczpleGVjdXRlIChPcmdhbml6YXRpb24sIEJhbmssIEN1c3RvbWVyKSAgICB8IHwgVHJhZGUgICAgICAgICAgICAgICAgIHwgdHJhZGVzOnJlYWQgKE9yZ2FuaXphdGlvbiwgQmFuaywgQ3VzdG9tZXIpICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHRyYWRlczpleGVjdXRlIChPcmdhbml6YXRpb24sIEJhbmssIEN1c3RvbWVyKSAgICB8IHwgVHJhbnNmZXIgICAgICAgICAgICAgIHwgdHJhbnNmZXJzOnJlYWQgKE9yZ2FuaXphdGlvbiwgQmFuaywgQ3VzdG9tZXIpICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHRyYW5zZmVyczpleGVjdXRlIChPcmdhbml6YXRpb24sIEJhbmssIEN1c3RvbWVyKSB8IHwgV29ya2Zsb3cgICAgICAgICAgICAgIHwgd29ya2Zsb3dzOnJlYWQgKE9yZ2FuaXphdGlvbiwgQmFuaywgQ3VzdG9tZXIpICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHdvcmtmbG93czpleGVjdXRlIChCYW5rLCBDdXN0b21lcikgICAgICAgICAgICAgICB8IHwgSW52b2ljZSAgICAgICAgICAgICAgIHwgaW52b2ljZXM6cmVhZCAoT3JnYW5pemF0aW9uLCBCYW5rLCBDdXN0b21lcikgICAgICAgICAgICAgICB8IGludm9pY2VzOndyaXRlIChCYW5rLCBDdXN0b21lcikgICAgICAgICAgICAgICB8IGludm9pY2VzOmV4ZWN1dGUgKEJhbmssIEN1c3RvbWVyKSAgICAgICAgICAgICAgICB8ICAjIyBBdmFpbGFibGUgRW5kcG9pbnRzICBUaGUgYXZhaWxhYmxlIEFQSXMgZm9yIHRoZSBbSWRlbnRpdHldKGh0dHBzOi8vaWQucHJvZHVjdGlvbi5jeWJyaWQuYXBwL2FwaS9zY2hlbWEvc3dhZ2dlci11aSksIFtPcmdhbml6YXRpb25dKGh0dHBzOi8vb3JnYW5pemF0aW9uLnByb2R1Y3Rpb24uY3licmlkLmFwcC9hcGkvc2NoZW1hL3N3YWdnZXItdWkpIGFuZCBbQmFua10oaHR0cHM6Ly9iYW5rLnByb2R1Y3Rpb24uY3licmlkLmFwcC9hcGkvc2NoZW1hL3N3YWdnZXItdWkpIEFQSSBzZXJ2aWNlcyBhcmUgbGlzdGVkIGJlbG93OiAgfCBBUEkgU2VydmljZSAgfCBNb2RlbCAgICAgICAgICAgICAgICB8IEFQSSBFbmRwb2ludCBQYXRoICAgICAgICAgICAgICB8IERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB8LS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IHwgSWRlbnRpdHkgICAgIHwgQmFuayAgICAgICAgICAgICAgICAgfCAvYXBpL2JhbmtfYXBwbGljYXRpb25zICAgICAgICAgfCBDcmVhdGUgYW5kIGxpc3QgYmFua3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgfCBJZGVudGl0eSAgICAgfCBDdXN0b21lclRva2VuICAgICAgICB8IC9hcGkvY3VzdG9tZXJfdG9rZW5zICAgICAgICAgICB8IENyZWF0ZSBjdXN0b21lciBKV1QgYWNjZXNzIHRva2VucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB8IElkZW50aXR5ICAgICB8IE9yZ2FuaXphdGlvbiAgICAgICAgIHwgL2FwaS9vcmdhbml6YXRpb25fYXBwbGljYXRpb25zIHwgQ3JlYXRlIGFuZCBsaXN0IG9yZ2FuaXphdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHwgSWRlbnRpdHkgICAgIHwgT3JnYW5pemF0aW9uICAgICAgICAgfCAvYXBpL3VzZXJzICAgICAgICAgICAgICAgICAgICAgfCBDcmVhdGUgYW5kIGxpc3Qgb3JnYW5pemF0aW9uIHVzZXJzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgfCBPcmdhbml6YXRpb24gfCBPcmdhbml6YXRpb24gICAgICAgICB8IC9hcGkvb3JnYW5pemF0aW9ucyAgICAgICAgICAgICB8IEFQSXMgdG8gcmV0cmlldmUgYW5kIHVwZGF0ZSBvcmdhbml6YXRpb24gbmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB8IEJhbmsgICAgICAgICB8IEFjY291bnQgICAgICAgICAgICAgIHwgL2FwaS9hY2NvdW50cyAgICAgICAgICAgICAgICAgIHwgQ3JlYXRlIGFuZCBsaXN0IGFjY291bnRzLCB3aGljaCBob2xkIGEgc3BlY2lmaWMgYXNzZXQgZm9yIGEgY3VzdG9tZXJzICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHwgQmFuayAgICAgICAgIHwgQXNzZXQgICAgICAgICAgICAgICAgfCAvYXBpL2Fzc2V0cyAgICAgICAgICAgICAgICAgICAgfCBHZXQgYSBsaXN0IG9mIGFzc2V0cyBzdXBwb3J0ZWQgYnkgdGhlIHBsYXRmb3JtIChleDogQlRDLCBFVEgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgfCBCYW5rICAgICAgICAgfCBCYW5rICAgICAgICAgICAgICAgICB8IC9hcGkvYmFua3MgICAgICAgICAgICAgICAgICAgICB8IENyZWF0ZSwgdXBkYXRlIGFuZCBsaXN0IGJhbmtzLCB0aGUgcGFyZW50IHRvIGN1c3RvbWVycywgYWNjb3VudHMsIGV0YyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB8IEJhbmsgICAgICAgICB8IEN1c3RvbWVyICAgICAgICAgICAgIHwgL2FwaS9jdXN0b21lcnMgICAgICAgICAgICAgICAgIHwgQ3JlYXRlIGFuZCBsaXN0IGN1c3RvbWVycyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHwgQmFuayAgICAgICAgIHwgQ291bnRlcnBhcnR5ICAgICAgICAgfCAvYXBpL2NvdW50ZXJwYXJ0aWVzICAgICAgICAgICAgfCBDcmVhdGUgYW5kIGxpc3QgY291bnRlcnBhcnRpZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgfCBCYW5rICAgICAgICAgfCBEZXBvc2l0QWRkcmVzcyAgICAgICB8IC9hcGkvZGVwb3NpdF9hZGRyZXNzZXMgICAgICAgICB8IENyZWF0ZSwgZ2V0IGFuZCBsaXN0IGRlcG9zaXQgYWRkcmVzc2VzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB8IEJhbmsgICAgICAgICB8IEV4dGVybmFsQmFua0FjY291bnQgIHwgL2FwaS9leHRlcm5hbF9iYW5rX2FjY291bnRzICAgIHwgQ3JlYXRlLCBnZXQgYW5kIGxpc3QgZXh0ZXJuYWwgYmFuayBhY2NvdW50cywgd2hpY2ggY29ubmVjdCBjdXN0b21lciBiYW5rIGFjY291bnRzIHRvIHRoZSBwbGF0Zm9ybSB8IHwgQmFuayAgICAgICAgIHwgRXh0ZXJuYWxXYWxsZXQgICAgICAgfCAvYXBpL2V4dGVybmFsX3dhbGxldHMgICAgICAgICAgfCBDcmVhdGUsIGdldCwgbGlzdCBhbmQgZGVsZXRlIGV4dGVybmFsIHdhbGxldHMsIHdoaWNoIGNvbm5lY3QgY3VzdG9tZXIgd2FsbGV0cyB0byB0aGUgcGxhdGZvcm0gICAgIHwgfCBCYW5rICAgICAgICAgfCBJZGVudGl0eVZlcmlmaWNhdGlvbiB8IC9hcGkvaWRlbnRpdHlfdmVyaWZpY2F0aW9ucyAgICB8IENyZWF0ZSBhbmQgbGlzdCBpZGVudGl0eSB2ZXJpZmljYXRpb25zLCB3aGljaCBhcmUgcGVyZm9ybWVkIG9uIGN1c3RvbWVycyBmb3IgS1lDICAgICAgICAgICAgICAgICAgfCB8IEJhbmsgICAgICAgICB8IEludm9pY2UgICAgICAgICAgICAgIHwgL2FwaS9pbnZvaWNlcyAgICAgICAgICAgICAgICAgIHwgQ3JlYXRlLCBnZXQsIGNhbmNlbCBhbmQgbGlzdCBpbnZvaWNlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHwgQmFuayAgICAgICAgIHwgUGF5bWVudEluc3RydWN0aW9uICAgfCAvYXBpL3BheW1lbnRfaW5zdHJ1Y3Rpb25zICAgICAgfCBDcmVhdGUsIGdldCBhbmQgbGlzdCBwYXltZW50IGluc3RydWN0aW9ucyBmb3IgaW52b2ljZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgfCBCYW5rICAgICAgICAgfCBQcmljZSAgICAgICAgICAgICAgICB8IC9hcGkvcHJpY2VzICAgICAgICAgICAgICAgICAgICB8IEdldCB0aGUgY3VycmVudCBwcmljZXMgZm9yIGFzc2V0cyBvbiB0aGUgcGxhdGZvcm0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB8IEJhbmsgICAgICAgICB8IFF1b3RlICAgICAgICAgICAgICAgIHwgL2FwaS9xdW90ZXMgICAgICAgICAgICAgICAgICAgIHwgQ3JlYXRlIGFuZCBsaXN0IHF1b3Rlcywgd2hpY2ggYXJlIHJlcXVpcmVkIHRvIGV4ZWN1dGUgdHJhZGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHwgQmFuayAgICAgICAgIHwgU3ltYm9sICAgICAgICAgICAgICAgfCAvYXBpL3N5bWJvbHMgICAgICAgICAgICAgICAgICAgfCBHZXQgYSBsaXN0IG9mIHN5bWJvbHMgc3VwcG9ydGVkIGZvciB0cmFkZSAoZXg6IEJUQy1VU0QpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgfCBCYW5rICAgICAgICAgfCBUcmFkZSAgICAgICAgICAgICAgICB8IC9hcGkvdHJhZGVzICAgICAgICAgICAgICAgICAgICB8IENyZWF0ZSBhbmQgbGlzdCB0cmFkZXMsIHdoaWNoIGJ1eSBvciBzZWxsIGNyeXB0b2N1cnJlbmN5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB8IEJhbmsgICAgICAgICB8IFRyYW5zZmVyICAgICAgICAgICAgIHwgL2FwaS90cmFuc2ZlcnMgICAgICAgICAgICAgICAgIHwgQ3JlYXRlLCBnZXQgYW5kIGxpc3QgdHJhbnNmZXJzIChlLmcuLCBmdW5kaW5nLCBib29rKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHwgQmFuayAgICAgICAgIHwgV29ya2Zsb3cgICAgICAgICAgICAgfCAvYXBpL3dvcmtmbG93cyAgICAgICAgICAgICAgICAgfCBDcmVhdGUsIGdldCBhbmQgbGlzdCB3b3JrZmxvd3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICMjIFVuZGVyc3RhbmRpbmcgT2JqZWN0IE1vZGVscyAmIEVuZHBvaW50cyAgKipPcmdhbml6YXRpb25zKiogIEFuIGBPcmdhbml6YXRpb25gIGlzIG1lYW50IHRvIHJlcHJlc2VudCB0aGUgb3JnYW5pemF0aW9uIHBhcnRuZXJpbmcgd2l0aCBDeWJyaWQgdG8gdXNlIG91ciBwbGF0Zm9ybS4gIEFuIGBPcmdhbml6YXRpb25gIHR5cGljYWxseSBkb2VzIG5vdCBkaXJlY3RseSBpbnRlcmFjdCB3aXRoIGBjdXN0b21lcnNgLiBJbnN0ZWFkLCBhbiBPcmdhbml6YXRpb24gaGFzIG9uZSBvciBtb3JlIGBiYW5rc2AsIHdoaWNoIGVuY29tcGFzcyB0aGUgZmluYW5jaWFsIHNlcnZpY2Ugb2ZmZXJpbmdzIG9mIHRoZSBwbGF0Zm9ybS4gICoqQmFua3MqKiAgQSBgQmFua2AgaXMgb3duZWQgYnkgYW4gYE9yZ2FuaXphdGlvbmAgYW5kIGNhbiBiZSB0aG91Z2h0IG9mIGFzIGFuIGVudmlyb25tZW50IG9yIGNvbnRhaW5lciBmb3IgYGN1c3RvbWVyc2AgYW5kIHByb2R1Y3Qgb2ZmZXJpbmdzLiBCYW5rcyBhcmUgY3JlYXRlZCBpbiBlaXRoZXIgYFNhbmRib3hgIG9yIGBQcm9kdWN0aW9uYCBtb2RlLCB3aGVyZSBgU2FuZGJveGAgaXMgdGhlIGVudmlyb25tZW50IHRoYXQgeW91IHdvdWxkIHRlc3QsIHByb3RvdHlwZSBhbmQgYnVpbGQgaW4gcHJpb3IgdG8gbW92aW5nIHRvIGBQcm9kdWN0aW9uYC4gIEFuIGBPcmdhbml6YXRpb25gIGNhbiBoYXZlIG11bHRpcGxlIGBiYW5rc2AsIGluIGVpdGhlciBgU2FuZGJveGAgb3IgYFByb2R1Y3Rpb25gIGVudmlyb25tZW50cy4gQSBgU2FuZGJveCBCYW5rYCB3aWxsIGJlIGJhY2tlZCBieSBzdHViYmVkIGRhdGEgYW5kIHByb2Nlc3MgZmxvd3MuIEZvciBpbnN0YW5jZSwgZnVuZGluZyBzb3VyY2UgdHJhbnNmZXIgcHJvY2Vzc2VzIGFzIHdlbGwgYXMgdHJhZGVzIHdpbGwgYmUgc2ltdWxhdGVkIHJhdGhlciB0aGFuIHBlcmZvcm1lZCwgaG93ZXZlciBhc3NldCBwcmljZXMgYXJlIHJlcHJlc2VudGF0aXZlIG9mIHJlYWwtd29ybGQgdmFsdWVzLiBZb3UgaGF2ZSBhbiB1bmxpbWl0ZWQgYW1vdW50IG9mIHNpbXVsYXRlZCBmaWF0IGN1cnJlbmN5IGZvciB0ZXN0aW5nIHB1cnBvc2VzLiAgKipDdXN0b21lcnMqKiAgYEN1c3RvbWVyc2AgcmVwcmVzZW50IHlvdXIgYmFua2luZyB1c2VycyBvbiB0aGUgcGxhdGZvcm0uIEF0IHByZXNlbnQsIHdlIG9mZmVyIHN1cHBvcnQgZm9yIGBJbmRpdmlkdWFsc2AgYXMgQ3VzdG9tZXJzLiAgYEN1c3RvbWVyc2AgbXVzdCBiZSB2ZXJpZmllZCAoaS5lLiwgS1lDXFwnZCkgaW4gb3VyIHN5c3RlbSBiZWZvcmUgdGhleSBjYW4gcGxheSBhbnkgcGFydCBvbiB0aGUgcGxhdGZvcm0sIHdoaWNoIG1lYW5zIHRoZXkgbXVzdCBoYXZlIGFuIGFzc29jaWF0ZWQgYW5kIGEgcGFzc2luZyBgSWRlbnRpdHkgVmVyaWZpY2F0aW9uYC4gU2VlIHRoZSBJZGVudGl0eSBWZXJpZmljYXRpb25zIHNlY3Rpb24gZm9yIG1vcmUgZGV0YWlscyBvbiBob3cgYSBjdXN0b21lciBjYW4gYmUgdmVyaWZpZWQuICBgQ3VzdG9tZXJzYCBtdXN0IGFsc28gaGF2ZSBhbiBgQWNjb3VudGAgdG8gYmUgYWJsZSB0byB0cmFuc2FjdCwgaW4gdGhlIGRlc2lyZWQgYXNzZXQgY2xhc3MuIFNlZSB0aGUgQWNjb3VudHMgQVBJcyBmb3IgbW9yZSBkZXRhaWxzIG9uIHNldHRpbmcgdXAgYWNjb3VudHMgZm9yIHRoZSBjdXN0b21lci4gXG4gKlxuICogVGhlIHZlcnNpb24gb2YgdGhlIE9wZW5BUEkgZG9jdW1lbnQ6IHYwLjEyMy4yMTRcbiAqIENvbnRhY3Q6IHN1cHBvcnRAY3licmlkLmFwcFxuICpcbiAqIE5PVEU6IFRoaXMgY2xhc3MgaXMgYXV0byBnZW5lcmF0ZWQgYnkgT3BlbkFQSSBHZW5lcmF0b3IgKGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaCkuXG4gKiBodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2hcbiAqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cbiAqL1xuXG5cbi8qKlxuICogUmVxdWVzdCBib2R5IGZvciBxdW90ZSBhY2NvdW50IGNyZWF0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBvc3RRdW90ZUVudHJ5QmFua01vZGVsIHsgXG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgb2YgYWNjb3VudFxuICAgICAqL1xuICAgIHR5cGU6IFBvc3RRdW90ZUVudHJ5QmFua01vZGVsLlR5cGVFbnVtO1xuICAgIC8qKlxuICAgICAqIFRoZSBndWlkIG9mIHRoZSBhY2NvdW50XG4gICAgICovXG4gICAgZ3VpZDogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFRoZSBhbW91bnQgdG8gYmUgcmVjZWl2ZWQgaW4gYmFzZSB1bml0cyBvZiB0aGUgY3VycmVuY3k6IGN1cnJlbmN5IGlzIFxcXCJhc3NldFxcXCIgZm9yIGJ1eSBhbmQgXFxcImNvdW50ZXJfYXNzZXRcXFwiIGZvciBzZWxsIGZvciB0cmFkZSBxdW90ZXMuXG4gICAgICovXG4gICAgcmVjZWl2ZV9hbW91bnQ/OiBzdHJpbmcgfCBudWxsO1xuICAgIC8qKlxuICAgICAqIFRoZSBhbW91bnQgdG8gYmUgZGVsaXZlcmVkIGluIGJhc2UgdW5pdHMgb2YgdGhlIGN1cnJlbmN5OiBjdXJyZW5jeSBpcyBcXFwiY291bnRlcl9hc3NldFxcXCIgZm9yIGJ1eSBhbmQgXFxcImFzc2V0XFxcIiBmb3Igc2VsbCBmb3IgdHJhZGUgcXVvdGVzLlxuICAgICAqL1xuICAgIGRlbGl2ZXJfYW1vdW50Pzogc3RyaW5nIHwgbnVsbDtcbn1cbmV4cG9ydCBuYW1lc3BhY2UgUG9zdFF1b3RlRW50cnlCYW5rTW9kZWwge1xuICAgIGV4cG9ydCB0eXBlIFR5cGVFbnVtID0gJ2V4dGVybmFsX3dhbGxldCc7XG4gICAgZXhwb3J0IGNvbnN0IFR5cGVFbnVtID0ge1xuICAgICAgICBFeHRlcm5hbFdhbGxldDogJ2V4dGVybmFsX3dhbGxldCcgYXMgVHlwZUVudW1cbiAgICB9O1xufVxuXG5cbiJdfQ==
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9zdFF1b3RlRW50cnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9tb2RlbC9wb3N0UXVvdGVFbnRyeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7OztHQVVHO0FBd0JILE1BQU0sS0FBVyx1QkFBdUIsQ0FLdkM7QUFMRCxXQUFpQix1QkFBdUI7SUFFdkIsZ0NBQVEsR0FBRztRQUNwQixjQUFjLEVBQUUsaUJBQTZCO0tBQ2hELENBQUM7QUFDTixDQUFDLEVBTGdCLHVCQUF1QixLQUF2Qix1QkFBdUIsUUFLdkMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEN5YnJpZCBCYW5rIEFQSVxuICogIyBDeWJyaWQgQVBJIGRvY3VtZW50YXRpb24gIFdlbGNvbWUgdG8gQ3licmlkLCBhbiBhbGwtaW4tb25lIGNyeXB0byBwbGF0Zm9ybSB0aGF0IGVuYWJsZXMgeW91IHRvIGVhc2lseSAqKmJ1aWxkKiogYW5kICoqbGF1bmNoKiogd2hpdGUtbGFiZWwgY3J5cHRvIHByb2R1Y3RzIG9yIHNlcnZpY2VzLiAgSW4gdGhlc2UgZG9jdW1lbnRzLCB5b3VcXCdsbCBmaW5kIGRldGFpbHMgb24gaG93IG91ciBSRVNUIEFQSSBvcGVyYXRlcyBhbmQgZ2VuZXJhbGx5IGhvdyBvdXIgcGxhdGZvcm0gZnVuY3Rpb25zLiAgSWYgeW91XFwncmUgbG9va2luZyBmb3Igb3VyIFVJIFNESyBXaWRnZXRzIGZvciBXZWIgb3IgTW9iaWxlIChpT1MvQW5kcm9pZCksIGdlbmVyYXRlZCBBUEkgY2xpZW50cywgb3IgZGVtbyBhcHBsaWNhdGlvbnMsIGhlYWQgb3ZlciB0byBvdXIgW0dpdGh1YiByZXBvXShodHRwczovL2dpdGh1Yi5jb20vQ3licmlkLWFwcCkuICDwn5KhIFdlIHJlY29tbWVuZCBib29rbWFya2luZyB0aGUgW0N5YnJpZCBMaW5rVHJlZV0oaHR0cHM6Ly9saW5rdHIuZWUvY3licmlkdGVjaG5vbG9naWVzKSB3aGljaCBjb250YWlucyBtYW55IGhlbHBmdWwgbGlua3MgdG8gcGxhdGZvcm0gcmVzb3VyY2VzLiAgIyMgR2V0dGluZyBTdGFydGVkICBUaGlzIGlzIEN5YnJpZFxcJ3MgcHVibGljIGludGVyYWN0aXZlIEFQSSBkb2N1bWVudGF0aW9uLCB3aGljaCBhbGxvd3MgeW91IHRvIGZ1bGx5IHRlc3Qgb3VyIEFQSXMuIElmIHlvdVxcJ2QgbGlrZSB0byB1c2UgYSBkaWZmZXJlbnQgdG9vbCB0byBleGVyY2lzZSBvdXIgQVBJcywgeW91IGNhbiBkb3dubG9hZCB0aGUgW09wZW4gQVBJIDMuMCB5YW1sXShodHRwczovL2JhbmsucHJvZHVjdGlvbi5jeWJyaWQuYXBwL2FwaS9zY2hlbWEvdjEvc3dhZ2dlci55YW1sKSBmb3IgaW1wb3J0LiAgSWYgeW91XFwncmUgbmV3IHRvIG91ciBBUElzIGFuZCB0aGUgQ3licmlkIFBsYXRmb3JtLCBmb2xsb3cgdGhlIGJlbG93IGd1aWRlcyB0byBnZXQgc2V0IHVwIGFuZCBmYW1pbGlhciB3aXRoIHRoZSBwbGF0Zm9ybTogIDEuIFtJbnRyb2R1Y3Rpb25dKGh0dHBzOi8vZG9jcy5jeWJyaWQueHl6L2RvY3MvaW50cm9kdWN0aW9uKSAyLiBbUGxhdGZvcm0gSW50cm9kdWN0aW9uXShodHRwczovL2RvY3MuY3licmlkLnh5ei9kb2NzL2hvdy1pcy1jeWJyaWQtYXJjaGl0ZWN0ZWQpIDMuIFtUZXN0aW5nIHdpdGggSG9zdGVkIFdlYiBEZW1vIEFwcF0oaHR0cHM6Ly9kb2NzLmN5YnJpZC54eXovZG9jcy90ZXN0aW5nLXdpdGgtaG9zdGVkLXdlYi1kZW1vLWFwcCkgIEluIFtHZXR0aW5nIFN0YXJ0ZWQgaW4gdGhlIEN5YnJpZCBTYW5kYm94XShodHRwczovL2RvY3MuY3licmlkLnh5ei9kb2NzL2hvdy1kby1pLWdldC1zdGFydGVkLXdpdGgtdGhlLXNhbmRib3gpLCB3ZSB3YWxrIHlvdSB0aHJvdWdoIGhvdyB0byB1c2UgdGhlIFtDeWJyaWQgU2FuZGJveF0oaHR0cHM6Ly9pZC5zYW5kYm94LmN5YnJpZC5hcHAvKSB0byBjcmVhdGUgYSB0ZXN0IGJhbmsgYW5kIGdlbmVyYXRlIEFQSSBrZXlzLiBJbiBbR2V0dGluZyBSZWFkeSBmb3IgVHJhZGluZ10oaHR0cHM6Ly9rYi5jeWJyaWQueHl6L2dldHRpbmctcmVhZHktZm9yLXRyYWRpbmcpLCB3ZSB3YWxrIHRocm91Z2ggY3JlYXRpbmcgY3VzdG9tZXJzLCBjdXN0b21lciBpZGVudGl0aWVzLCBhY2NvdW50cywgYXMgd2VsbCBhcyBleGVjdXRpbmcgcXVvdGVzIGFuZCB0cmFkZXMuICAjIyBXb3JraW5nIHdpdGggdGhlIEN5YnJpZCBQbGF0Zm9ybSAgVGhlcmUgYXJlIHRocmVlIHByaW1hcnkgd2F5cyB5b3UgY2FuIGludGVyYWN0IHdpdGggdGhlIEN5YnJpZCBwbGF0Zm9ybTogIDEuIERpcmVjdGx5IHZpYSBvdXIgUkVTVGZ1bCBBUEkgKHRoaXMgZG9jdW1lbnRhdGlvbikgMi4gVXNpbmcgb3VyIEFQSSBjbGllbnRzIGF2YWlsYWJsZSBpbiBhIHZhcmlldHkgb2YgbGFuZ3VhZ2VzIChbQW5ndWxhcl0oaHR0cHM6Ly9naXRodWIuY29tL0N5YnJpZC1hcHAvY3licmlkLWFwaS1iYW5rLWFuZ3VsYXIpLCBbSmF2YV0oaHR0cHM6Ly9naXRodWIuY29tL0N5YnJpZC1hcHAvY3licmlkLWFwaS1iYW5rLWphdmEpLCBbS290bGluXShodHRwczovL2dpdGh1Yi5jb20vQ3licmlkLWFwcC9jeWJyaWQtYXBpLWJhbmsta290bGluKSwgW1B5dGhvbl0oaHR0cHM6Ly9naXRodWIuY29tL0N5YnJpZC1hcHAvY3licmlkLWFwaS1iYW5rLXB5dGhvbiksIFtSdWJ5XShodHRwczovL2dpdGh1Yi5jb20vQ3licmlkLWFwcC9jeWJyaWQtYXBpLWJhbmstcnVieSksIFtTd2lmdF0oaHR0cHM6Ly9naXRodWIuY29tL0N5YnJpZC1hcHAvY3licmlkLWFwaS1iYW5rLXN3aWZ0KSBvciBbVHlwZXNjcmlwdF0oaHR0cHM6Ly9naXRodWIuY29tL0N5YnJpZC1hcHAvY3licmlkLWFwaS1iYW5rLXR5cGVzY3JpcHQpKSAzLiBJbnRlZ3JhdGluZyBhIHBsYXRmb3JtIHNwZWNpZmljIFNESyAoW1dlYl0oaHR0cHM6Ly9naXRodWIuY29tL0N5YnJpZC1hcHAvY3licmlkLXNkay13ZWIpLCBbQW5kcm9pZF0oaHR0cHM6Ly9naXRodWIuY29tL0N5YnJpZC1hcHAvY3licmlkLXNkay1hbmRyb2lkKSwgW2lPU10oaHR0cHM6Ly9naXRodWIuY29tL0N5YnJpZC1hcHAvY3licmlkLXNkay1pb3MpKSAgT3VyIGNvbXBsZXRlIHNldCBvZiBBUElzIGFsbG93cyB5b3UgdG8gbWFuYWdlIHJlc291cmNlcyBhY3Jvc3MgdGhyZWUgZGlzdGluY3QgYXJlYXM6IHlvdXIgYE9yZ2FuaXphdGlvbmAsIHlvdXIgYEJhbmtzYCBhbmQgeW91ciBgSWRlbnRpdGllc2AuIEZvciBtb3N0IG9mIHlvdXIgdGVzdGluZyBhbmQgaW50ZXJhY3Rpb24geW91XFwnbGwgYmUgdXNpbmcgdGhlIGBCYW5rYCBBUEksIHdoaWNoIGlzIHdoZXJlIHRoZSBtYWpvcml0eSBvZiBBUElzIHJlc2lkZS4gICpUaGUgY29tcGxldGUgc2V0IG9mIEFQSXMgY2FuIGJlIGZvdW5kIG9uIHRoZSBmb2xsb3dpbmcgcGFnZXM6KiAgfCBBUEkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IHwgW09yZ2FuaXphdGlvbiBBUEldKGh0dHBzOi8vb3JnYW5pemF0aW9uLnByb2R1Y3Rpb24uY3licmlkLmFwcC9hcGkvc2NoZW1hL3N3YWdnZXItdWkpICAgfCBBUElzIHRvIG1hbmFnZSBvcmdhbml6YXRpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHwgW0JhbmsgQVBJXShodHRwczovL2JhbmsucHJvZHVjdGlvbi5jeWJyaWQuYXBwL2FwaS9zY2hlbWEvc3dhZ2dlci11aSkgICAgICAgICAgICAgICAgICAgfCBBUElzIHRvIG1hbmFnZSBiYW5rcyAoYW5kIGFsbCBkb3duc3RyZWFtIGN1c3RvbWVyIGFjdGl2aXR5KSB8IHwgW0lkZW50aXRpZXMgQVBJXShodHRwczovL2lkLnByb2R1Y3Rpb24uY3licmlkLmFwcC9hcGkvc2NoZW1hL3N3YWdnZXItdWkpICAgICAgICAgICAgICAgICAgICAgICB8IEFQSXMgdG8gbWFuYWdlIG9yZ2FuaXphdGlvbiBhbmQgYmFuayBpZGVudGl0aWVzICAgICAgICAgICAgIHwgIEZvciBxdWVzdGlvbnMgcGxlYXNlIGNvbnRhY3QgW1N1cHBvcnRdKG1haWx0bzpzdXBwb3J0QGN5YnJpZC54eXopIGF0IGFueSB0aW1lIGZvciBhc3Npc3RhbmNlLCBvciBjb250YWN0IHRoZSBbUHJvZHVjdCBUZWFtXShtYWlsdG86cHJvZHVjdEBjeWJyaWQueHl6KSBmb3IgcHJvZHVjdCBzdWdnZXN0aW9ucy4gICMjIEF1dGhlbnRpY2F0aW5nIHdpdGggdGhlIEFQSSAgVGhlIEN5YnJpZCBQbGF0Zm9ybSB1c2VzIE9BdXRoIDIuMCBCZWFyZXIgVG9rZW5zIHRvIGF1dGhlbnRpY2F0ZSByZXF1ZXN0cyB0byB0aGUgcGxhdGZvcm0uIENyZWRlbnRpYWxzIHRvIGNyZWF0ZSBgT3JnYW5pemF0aW9uYCBhbmQgYEJhbmtgIHRva2VucyBjYW4gYmUgZ2VuZXJhdGVkIHZpYSB0aGUgW0N5YnJpZCBTYW5kYm94XShodHRwczovL2lkLnByb2R1Y3Rpb24uY3licmlkLmFwcCkuIEFjY2VzcyB0b2tlbnMgY2FuIGJlIGdlbmVyYXRlZCBmb3IgYSBgQ3VzdG9tZXJgIGFzIHdlbGwgdmlhIHRoZSBbQ3licmlkIElkUF0oaHR0cHM6Ly9pZC5wcm9kdWN0aW9uLmN5YnJpZC5hcHApIGFzIHdlbGwuICBBbiBgT3JnYW5pemF0aW9uYCBhY2Nlc3MgdG9rZW4gYXBwbGllcyBicm9hZGx5IHRvIHRoZSB3aG9sZSBPcmdhbml6YXRpb24gYW5kIGFsbCBvZiBpdHMgYEJhbmtzYCwgd2hlcmVhcywgYSBgQmFua2AgYWNjZXNzIHRva2VuIGlzIHNwZWNpZmljIHRvIGFuIGluZGl2aWR1YWwgQmFuay4gYEN1c3RvbWVyYCB0b2tlbnMsIHNpbWlsYXJseSwgYXJlIHNjb3BlZCB0byBhIHNwZWNpZmljIGN1c3RvbWVyIGluIGEgYmFuay4gIEJvdGggYE9yZ2FuaXphdGlvbmAgYW5kIGBCYW5rYCB0b2tlbnMgY2FuIGJlIGNyZWF0ZWQgdXNpbmcgdGhlIE9BdXRoIENsaWVudCBDcmVkZW50aWFsIEdyYW50IGZsb3cuIEVhY2ggT3JnYW5pemF0aW9uIGFuZCBCYW5rIGhhcyBpdHMgb3duIHVuaXF1ZSBgQ2xpZW50IElEYCBhbmQgYFNlY3JldGAgdGhhdCBhbGxvd3MgZm9yIG1hY2hpbmUtdG8tbWFjaGluZSBhdXRoZW50aWNhdGlvbi4gIEEgYEJhbmtgIGNhbiB0aGVuIGdlbmVyYXRlIGBDdXN0b21lcmAgYWNjZXNzIHRva2VucyB2aWEgQVBJIHVzaW5nIG91ciBbSWRlbnRpdGllcyBBUEldKGh0dHBzOi8vaWQucHJvZHVjdGlvbi5jeWJyaWQuYXBwL2FwaS9zY2hlbWEvc3dhZ2dlci11aSkuICA8Zm9udCBjb2xvcj1cXFwib3JhbmdlXFxcIj4qKuKaoO+4jyBOZXZlciBzaGFyZSB5b3VyIENsaWVudCBJRCBvciBTZWNyZXQgcHVibGljbHkgb3IgaW4geW91ciBzb3VyY2UgY29kZSByZXBvc2l0b3J5LioqPC9mb250PiAgWW91ciBgQ2xpZW50IElEYCBhbmQgYFNlY3JldGAgY2FuIGJlIGV4Y2hhbmdlZCBmb3IgYSB0aW1lLWxpbWl0ZWQgYEJlYXJlciBUb2tlbmAgYnkgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgQ3licmlkIElkZW50aXR5IFByb3ZpZGVyIG9yIHRocm91Z2ggaW50ZXJhY3Rpbmcgd2l0aCB0aGUgKipBdXRob3JpemUqKiBidXR0b24gaW4gdGhpcyBkb2N1bWVudC4gIFRoZSBmb2xsb3dpbmcgY3VybCBjb21tYW5kIGNhbiBiZSB1c2VkIHRvIHF1aWNrbHkgZ2VuZXJhdGUgYSBgQmVhcmVyIFRva2VuYCBmb3IgdXNlIGluIHRlc3RpbmcgdGhlIEFQSSBvciBkZW1vIGFwcGxpY2F0aW9ucy4gIGBgYCAjIEV4YW1wbGUgcmVxdWVzdCB3aGVuIHVzaW5nIEJhbmsgY3JlZGVudGlhbHMgY3VybCAtWCBQT1NUIGh0dHBzOi8vaWQucHJvZHVjdGlvbi5jeWJyaWQuYXBwL29hdXRoL3Rva2VuIC1kIFxcJ3sgICAgIFxcXCJncmFudF90eXBlXFxcIjogXFxcImNsaWVudF9jcmVkZW50aWFsc1xcXCIsICAgICBcXFwiY2xpZW50X2lkXFxcIjogXFxcIjxZb3VyIENsaWVudCBJRD5cXFwiLCAgICAgXFxcImNsaWVudF9zZWNyZXRcXFwiOiBcXFwiPFlvdXIgU2VjcmV0PlxcXCIsICAgICBcXFwic2NvcGVcXFwiOiBcXFwiYmFua3M6cmVhZCBiYW5rczp3cml0ZSBiYW5rX2FwcGxpY2F0aW9uczpleGVjdXRlIGFjY291bnRzOnJlYWQgYWNjb3VudHM6ZXhlY3V0ZSBjb3VudGVycGFydGllczpyZWFkIGNvdW50ZXJwYXJ0aWVzOndyaXRlIGNvdW50ZXJwYXJ0aWVzOmV4ZWN1dGUgY3VzdG9tZXJzOnJlYWQgY3VzdG9tZXJzOndyaXRlIGN1c3RvbWVyczpleGVjdXRlIHByaWNlczpyZWFkIHF1b3RlczpleGVjdXRlIHF1b3RlczpyZWFkIHRyYWRlczpleGVjdXRlIHRyYWRlczpyZWFkIHRyYW5zZmVyczpleGVjdXRlIHRyYW5zZmVyczpyZWFkIGV4dGVybmFsX2JhbmtfYWNjb3VudHM6cmVhZCBleHRlcm5hbF9iYW5rX2FjY291bnRzOndyaXRlIGV4dGVybmFsX2JhbmtfYWNjb3VudHM6ZXhlY3V0ZSBleHRlcm5hbF93YWxsZXRzOnJlYWQgZXh0ZXJuYWxfd2FsbGV0czpleGVjdXRlIHdvcmtmbG93czpyZWFkIHdvcmtmbG93czpleGVjdXRlIGRlcG9zaXRfYWRkcmVzc2VzOnJlYWQgZGVwb3NpdF9hZGRyZXNzZXM6ZXhlY3V0ZSBkZXBvc2l0X2JhbmtfYWNjb3VudHM6cmVhZCBkZXBvc2l0X2JhbmtfYWNjb3VudHM6ZXhlY3V0ZSBpbnZvaWNlczpyZWFkIGludm9pY2VzOndyaXRlIGludm9pY2VzOmV4ZWN1dGUgaWRlbnRpdHlfdmVyaWZpY2F0aW9uczpyZWFkIGlkZW50aXR5X3ZlcmlmaWNhdGlvbnM6d3JpdGUgaWRlbnRpdHlfdmVyaWZpY2F0aW9uczpleGVjdXRlIGZpbGVzOnJlYWQgZmlsZXM6ZXhlY3V0ZVxcXCIgICB9XFwnIC1IIFxcXCJDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL2pzb25cXFwiICAjIFdoZW4gdXNpbmcgT3JnYW5pemF0aW9uIGNyZWRlbnRpYWxzIHNldCBgc2NvcGVgIHRvIFxcJ29yZ2FuaXphdGlvbnM6cmVhZCBvcmdhbml6YXRpb25zOndyaXRlIG9yZ2FuaXphdGlvbl9hcHBsaWNhdGlvbnM6ZXhlY3V0ZSBiYW5rczpyZWFkIGJhbmtzOndyaXRlIGJhbmtzOmV4ZWN1dGUgYmFua19hcHBsaWNhdGlvbnM6ZXhlY3V0ZSB1c2VyczpyZWFkIHVzZXJzOmV4ZWN1dGUgY291bnRlcnBhcnRpZXM6cmVhZCBjdXN0b21lcnM6cmVhZCBhY2NvdW50czpyZWFkIHByaWNlczpyZWFkIHF1b3RlczpleGVjdXRlIHF1b3RlczpyZWFkIHRyYWRlczpleGVjdXRlIHRyYWRlczpyZWFkIHRyYW5zZmVyczpyZWFkIHRyYW5zZmVyczpleGVjdXRlIGV4dGVybmFsX2JhbmtfYWNjb3VudHM6cmVhZCBleHRlcm5hbF93YWxsZXRzOnJlYWQgd29ya2Zsb3dzOnJlYWQgZGVwb3NpdF9hZGRyZXNzZXM6cmVhZCBkZXBvc2l0X2JhbmtfYWNjb3VudHM6cmVhZCBpbnZvaWNlczpyZWFkIHN1YnNjcmlwdGlvbnM6cmVhZCBzdWJzY3JpcHRpb25zOndyaXRlIHN1YnNjcmlwdGlvbnM6ZXhlY3V0ZSBzdWJzY3JpcHRpb25fZXZlbnRzOnJlYWQgc3Vic2NyaXB0aW9uX2V2ZW50czpleGVjdXRlIGlkZW50aXR5X3ZlcmlmaWNhdGlvbnM6cmVhZCBmaWxlczpyZWFkIGZpbGVzOmV4ZWN1dGVcXCcgYGBgIDxmb250IGNvbG9yPVxcXCJvcmFuZ2VcXFwiPioq4pqg77iPIE5vdGU6IFRoZSBhYm92ZSBjdXJsIHdpbGwgY3JlYXRlIGEgYmVhcmVyIHRva2VuIHdpdGggZnVsbCBzY29wZSBhY2Nlc3MuIERlbGV0ZSBzY29wZXMgaWYgeW91XFwnZCBsaWtlIHRvIHJlc3RyaWN0IGFjY2Vzcy4qKjwvZm9udD4gICMjIEF1dGhlbnRpY2F0aW9uIFNjb3BlcyAgVGhlIEN5YnJpZCBwbGF0Zm9ybSBzdXBwb3J0cyB0aGUgdXNlIG9mIHNjb3BlcyB0byBjb250cm9sIHRoZSBsZXZlbCBvZiBhY2Nlc3MgYSB0b2tlbiBpcyBsaW1pdGVkIHRvLiBTY29wZXMgZG8gbm90IGdyYW50IGFjY2VzcyB0byByZXNvdXJjZXM7IGluc3RlYWQsIHRoZXkgcHJvdmlkZSBsaW1pdHMsIGluIHN1cHBvcnQgb2YgdGhlIGxlYXN0IHByaXZpbGVnZSBwcmluY2lwYWwuICBUaGUgZm9sbG93aW5nIHNjb3BlcyBhcmUgYXZhaWxhYmxlIG9uIHRoZSBwbGF0Zm9ybSBhbmQgY2FuIGJlIHJlcXVlc3RlZCB3aGVuIGdlbmVyYXRpbmcgZWl0aGVyIGFuIE9yZ2FuaXphdGlvbiwgQmFuayBvciBDdXN0b21lciB0b2tlbi4gR2VuZXJhbGx5IHNwZWFraW5nLCB0aGUgX1JlYWRfIHNjb3BlIGlzIHJlcXVpcmVkIHRvIHJlYWQgYW5kIGxpc3QgcmVzb3VyY2VzLCB0aGUgX1dyaXRlXyBzY29wZSBpcyByZXF1aXJlZCB0byB1cGRhdGUgYSByZXNvdXJjZSBhbmQgdGhlIF9FeGVjdXRlXyBzY29wZSBpcyByZXF1aXJlZCB0byBjcmVhdGUgYSByZXNvdXJjZS4gIHwgUmVzb3VyY2UgICAgICAgICAgICAgIHwgUmVhZCBzY29wZSAoVG9rZW4gVHlwZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFdyaXRlIHNjb3BlIChUb2tlbiBUeXBlKSAgICAgICAgICAgICAgICAgICAgICB8IEV4ZWN1dGUgc2NvcGUgKFRva2VuIFR5cGUpICAgICAgICAgICAgICAgICAgICAgICB8IHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IHwgQWNjb3VudCAgICAgICAgICAgICAgIHwgYWNjb3VudHM6cmVhZCAoT3JnYW5pemF0aW9uLCBCYW5rLCBDdXN0b21lcikgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGFjY291bnRzOmV4ZWN1dGUgKEJhbmssIEN1c3RvbWVyKSAgICAgICAgICAgICAgICB8IHwgQmFuayAgICAgICAgICAgICAgICAgIHwgYmFua3M6cmVhZCAoT3JnYW5pemF0aW9uLCBCYW5rKSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGJhbmtzOndyaXRlIChPcmdhbml6YXRpb24sIEJhbmspICAgICAgICAgICAgICB8IGJhbmtzOmV4ZWN1dGUgKE9yZ2FuaXphdGlvbikgICAgICAgICAgICAgICAgICAgICB8IHwgQ3VzdG9tZXIgICAgICAgICAgICAgIHwgY3VzdG9tZXJzOnJlYWQgKE9yZ2FuaXphdGlvbiwgQmFuaywgQ3VzdG9tZXIpICAgICAgICAgICAgICB8IGN1c3RvbWVyczp3cml0ZSAoQmFuaywgQ3VzdG9tZXIpICAgICAgICAgICAgICB8IGN1c3RvbWVyczpleGVjdXRlIChCYW5rKSAgICAgICAgICAgICAgICAgICAgICAgICB8IHwgQ291bnRlcnBhcnR5ICAgICAgICAgIHwgY291bnRlcnBhcnRpZXM6cmVhZCAoT3JnYW5pemF0aW9uLCBCYW5rLCBDdXN0b21lcikgICAgICAgICB8IGNvdW50ZXJwYXJ0aWVzOndyaXRlIChCYW5rLCBDdXN0b21lcikgICAgICAgICB8IGNvdW50ZXJwYXJ0aWVzOmV4ZWN1dGUgKEJhbmspICAgICAgICAgICAgICAgICAgICB8IHwgRGVwb3NpdCBBZGRyZXNzICAgICAgIHwgZGVwb3NpdF9hZGRyZXNzZXM6cmVhZCAoT3JnYW5pemF0aW9uLCBCYW5rLCBDdXN0b21lcikgICAgICB8IGRlcG9zaXRfYWRkcmVzc2VzOndyaXRlIChCYW5rLCBDdXN0b21lcikgICAgICB8IGRlcG9zaXRfYWRkcmVzc2VzOmV4ZWN1dGUgKEJhbmssIEN1c3RvbWVyKSAgICAgICB8IHwgRXh0ZXJuYWwgQmFuayBBY2NvdW50IHwgZXh0ZXJuYWxfYmFua19hY2NvdW50czpyZWFkIChPcmdhbml6YXRpb24sIEJhbmssIEN1c3RvbWVyKSB8IGV4dGVybmFsX2JhbmtfYWNjb3VudHM6d3JpdGUgKEJhbmssIEN1c3RvbWVyKSB8IGV4dGVybmFsX2JhbmtfYWNjb3VudHM6ZXhlY3V0ZSAoQmFuaywgQ3VzdG9tZXIpICB8IHwgRXh0ZXJuYWwgV2FsbGV0ICAgICAgIHwgZXh0ZXJuYWxfd2FsbGV0OnJlYWQgKE9yZ2FuaXphdGlvbiwgQmFuaywgQ3VzdG9tZXIpICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGV4dGVybmFsX3dhbGxldDpleGVjdXRlIChCYW5rLCBDdXN0b21lcikgICAgICAgICB8IHwgT3JnYW5pemF0aW9uICAgICAgICAgIHwgb3JnYW5pemF0aW9uczpyZWFkIChPcmdhbml6YXRpb24pICAgICAgICAgICAgICAgICAgICAgICAgICB8IG9yZ2FuaXphdGlvbnM6d3JpdGUgKE9yZ2FuaXphdGlvbikgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHwgVXNlciAgICAgICAgICAgICAgICAgIHwgdXNlcnM6cmVhZCAoT3JnYW5pemF0aW9uKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHVzZXJzOmV4ZWN1dGUgKE9yZ2FuaXphdGlvbikgICAgICAgICAgICAgICAgICAgICB8IHwgUHJpY2UgICAgICAgICAgICAgICAgIHwgcHJpY2VzOnJlYWQgKEJhbmssIEN1c3RvbWVyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHwgUXVvdGUgICAgICAgICAgICAgICAgIHwgcXVvdGVzOnJlYWQgKE9yZ2FuaXphdGlvbiwgQmFuaywgQ3VzdG9tZXIpICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHF1b3RlczpleGVjdXRlIChPcmdhbml6YXRpb24sIEJhbmssIEN1c3RvbWVyKSAgICB8IHwgVHJhZGUgICAgICAgICAgICAgICAgIHwgdHJhZGVzOnJlYWQgKE9yZ2FuaXphdGlvbiwgQmFuaywgQ3VzdG9tZXIpICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHRyYWRlczpleGVjdXRlIChPcmdhbml6YXRpb24sIEJhbmssIEN1c3RvbWVyKSAgICB8IHwgVHJhbnNmZXIgICAgICAgICAgICAgIHwgdHJhbnNmZXJzOnJlYWQgKE9yZ2FuaXphdGlvbiwgQmFuaywgQ3VzdG9tZXIpICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHRyYW5zZmVyczpleGVjdXRlIChPcmdhbml6YXRpb24sIEJhbmssIEN1c3RvbWVyKSB8IHwgV29ya2Zsb3cgICAgICAgICAgICAgIHwgd29ya2Zsb3dzOnJlYWQgKE9yZ2FuaXphdGlvbiwgQmFuaywgQ3VzdG9tZXIpICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHdvcmtmbG93czpleGVjdXRlIChCYW5rLCBDdXN0b21lcikgICAgICAgICAgICAgICB8IHwgSW52b2ljZSAgICAgICAgICAgICAgIHwgaW52b2ljZXM6cmVhZCAoT3JnYW5pemF0aW9uLCBCYW5rLCBDdXN0b21lcikgICAgICAgICAgICAgICB8IGludm9pY2VzOndyaXRlIChCYW5rLCBDdXN0b21lcikgICAgICAgICAgICAgICB8IGludm9pY2VzOmV4ZWN1dGUgKEJhbmssIEN1c3RvbWVyKSAgICAgICAgICAgICAgICB8ICAjIyBBdmFpbGFibGUgRW5kcG9pbnRzICBUaGUgYXZhaWxhYmxlIEFQSXMgZm9yIHRoZSBbSWRlbnRpdHldKGh0dHBzOi8vaWQucHJvZHVjdGlvbi5jeWJyaWQuYXBwL2FwaS9zY2hlbWEvc3dhZ2dlci11aSksIFtPcmdhbml6YXRpb25dKGh0dHBzOi8vb3JnYW5pemF0aW9uLnByb2R1Y3Rpb24uY3licmlkLmFwcC9hcGkvc2NoZW1hL3N3YWdnZXItdWkpIGFuZCBbQmFua10oaHR0cHM6Ly9iYW5rLnByb2R1Y3Rpb24uY3licmlkLmFwcC9hcGkvc2NoZW1hL3N3YWdnZXItdWkpIEFQSSBzZXJ2aWNlcyBhcmUgbGlzdGVkIGJlbG93OiAgfCBBUEkgU2VydmljZSAgfCBNb2RlbCAgICAgICAgICAgICAgICB8IEFQSSBFbmRwb2ludCBQYXRoICAgICAgICAgICAgICB8IERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB8LS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IHwgSWRlbnRpdHkgICAgIHwgQmFuayAgICAgICAgICAgICAgICAgfCAvYXBpL2JhbmtfYXBwbGljYXRpb25zICAgICAgICAgfCBDcmVhdGUgYW5kIGxpc3QgYmFua3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgfCBJZGVudGl0eSAgICAgfCBDdXN0b21lclRva2VuICAgICAgICB8IC9hcGkvY3VzdG9tZXJfdG9rZW5zICAgICAgICAgICB8IENyZWF0ZSBjdXN0b21lciBKV1QgYWNjZXNzIHRva2VucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB8IElkZW50aXR5ICAgICB8IE9yZ2FuaXphdGlvbiAgICAgICAgIHwgL2FwaS9vcmdhbml6YXRpb25fYXBwbGljYXRpb25zIHwgQ3JlYXRlIGFuZCBsaXN0IG9yZ2FuaXphdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHwgSWRlbnRpdHkgICAgIHwgT3JnYW5pemF0aW9uICAgICAgICAgfCAvYXBpL3VzZXJzICAgICAgICAgICAgICAgICAgICAgfCBDcmVhdGUgYW5kIGxpc3Qgb3JnYW5pemF0aW9uIHVzZXJzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgfCBPcmdhbml6YXRpb24gfCBPcmdhbml6YXRpb24gICAgICAgICB8IC9hcGkvb3JnYW5pemF0aW9ucyAgICAgICAgICAgICB8IEFQSXMgdG8gcmV0cmlldmUgYW5kIHVwZGF0ZSBvcmdhbml6YXRpb24gbmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB8IEJhbmsgICAgICAgICB8IEFjY291bnQgICAgICAgICAgICAgIHwgL2FwaS9hY2NvdW50cyAgICAgICAgICAgICAgICAgIHwgQ3JlYXRlIGFuZCBsaXN0IGFjY291bnRzLCB3aGljaCBob2xkIGEgc3BlY2lmaWMgYXNzZXQgZm9yIGEgY3VzdG9tZXJzICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHwgQmFuayAgICAgICAgIHwgQXNzZXQgICAgICAgICAgICAgICAgfCAvYXBpL2Fzc2V0cyAgICAgICAgICAgICAgICAgICAgfCBHZXQgYSBsaXN0IG9mIGFzc2V0cyBzdXBwb3J0ZWQgYnkgdGhlIHBsYXRmb3JtIChleDogQlRDLCBFVEgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgfCBCYW5rICAgICAgICAgfCBCYW5rICAgICAgICAgICAgICAgICB8IC9hcGkvYmFua3MgICAgICAgICAgICAgICAgICAgICB8IENyZWF0ZSwgdXBkYXRlIGFuZCBsaXN0IGJhbmtzLCB0aGUgcGFyZW50IHRvIGN1c3RvbWVycywgYWNjb3VudHMsIGV0YyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB8IEJhbmsgICAgICAgICB8IEN1c3RvbWVyICAgICAgICAgICAgIHwgL2FwaS9jdXN0b21lcnMgICAgICAgICAgICAgICAgIHwgQ3JlYXRlIGFuZCBsaXN0IGN1c3RvbWVycyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHwgQmFuayAgICAgICAgIHwgQ291bnRlcnBhcnR5ICAgICAgICAgfCAvYXBpL2NvdW50ZXJwYXJ0aWVzICAgICAgICAgICAgfCBDcmVhdGUgYW5kIGxpc3QgY291bnRlcnBhcnRpZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgfCBCYW5rICAgICAgICAgfCBEZXBvc2l0QWRkcmVzcyAgICAgICB8IC9hcGkvZGVwb3NpdF9hZGRyZXNzZXMgICAgICAgICB8IENyZWF0ZSwgZ2V0IGFuZCBsaXN0IGRlcG9zaXQgYWRkcmVzc2VzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB8IEJhbmsgICAgICAgICB8IEV4dGVybmFsQmFua0FjY291bnQgIHwgL2FwaS9leHRlcm5hbF9iYW5rX2FjY291bnRzICAgIHwgQ3JlYXRlLCBnZXQgYW5kIGxpc3QgZXh0ZXJuYWwgYmFuayBhY2NvdW50cywgd2hpY2ggY29ubmVjdCBjdXN0b21lciBiYW5rIGFjY291bnRzIHRvIHRoZSBwbGF0Zm9ybSB8IHwgQmFuayAgICAgICAgIHwgRXh0ZXJuYWxXYWxsZXQgICAgICAgfCAvYXBpL2V4dGVybmFsX3dhbGxldHMgICAgICAgICAgfCBDcmVhdGUsIGdldCwgbGlzdCBhbmQgZGVsZXRlIGV4dGVybmFsIHdhbGxldHMsIHdoaWNoIGNvbm5lY3QgY3VzdG9tZXIgd2FsbGV0cyB0byB0aGUgcGxhdGZvcm0gICAgIHwgfCBCYW5rICAgICAgICAgfCBJZGVudGl0eVZlcmlmaWNhdGlvbiB8IC9hcGkvaWRlbnRpdHlfdmVyaWZpY2F0aW9ucyAgICB8IENyZWF0ZSBhbmQgbGlzdCBpZGVudGl0eSB2ZXJpZmljYXRpb25zLCB3aGljaCBhcmUgcGVyZm9ybWVkIG9uIGN1c3RvbWVycyBmb3IgS1lDICAgICAgICAgICAgICAgICAgfCB8IEJhbmsgICAgICAgICB8IEludm9pY2UgICAgICAgICAgICAgIHwgL2FwaS9pbnZvaWNlcyAgICAgICAgICAgICAgICAgIHwgQ3JlYXRlLCBnZXQsIGNhbmNlbCBhbmQgbGlzdCBpbnZvaWNlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHwgQmFuayAgICAgICAgIHwgUGF5bWVudEluc3RydWN0aW9uICAgfCAvYXBpL3BheW1lbnRfaW5zdHJ1Y3Rpb25zICAgICAgfCBDcmVhdGUsIGdldCBhbmQgbGlzdCBwYXltZW50IGluc3RydWN0aW9ucyBmb3IgaW52b2ljZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgfCBCYW5rICAgICAgICAgfCBQcmljZSAgICAgICAgICAgICAgICB8IC9hcGkvcHJpY2VzICAgICAgICAgICAgICAgICAgICB8IEdldCB0aGUgY3VycmVudCBwcmljZXMgZm9yIGFzc2V0cyBvbiB0aGUgcGxhdGZvcm0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB8IEJhbmsgICAgICAgICB8IFF1b3RlICAgICAgICAgICAgICAgIHwgL2FwaS9xdW90ZXMgICAgICAgICAgICAgICAgICAgIHwgQ3JlYXRlIGFuZCBsaXN0IHF1b3Rlcywgd2hpY2ggYXJlIHJlcXVpcmVkIHRvIGV4ZWN1dGUgdHJhZGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHwgQmFuayAgICAgICAgIHwgU3ltYm9sICAgICAgICAgICAgICAgfCAvYXBpL3N5bWJvbHMgICAgICAgICAgICAgICAgICAgfCBHZXQgYSBsaXN0IG9mIHN5bWJvbHMgc3VwcG9ydGVkIGZvciB0cmFkZSAoZXg6IEJUQy1VU0QpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgfCBCYW5rICAgICAgICAgfCBUcmFkZSAgICAgICAgICAgICAgICB8IC9hcGkvdHJhZGVzICAgICAgICAgICAgICAgICAgICB8IENyZWF0ZSBhbmQgbGlzdCB0cmFkZXMsIHdoaWNoIGJ1eSBvciBzZWxsIGNyeXB0b2N1cnJlbmN5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB8IEJhbmsgICAgICAgICB8IFRyYW5zZmVyICAgICAgICAgICAgIHwgL2FwaS90cmFuc2ZlcnMgICAgICAgICAgICAgICAgIHwgQ3JlYXRlLCBnZXQgYW5kIGxpc3QgdHJhbnNmZXJzIChlLmcuLCBmdW5kaW5nLCBib29rKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHwgQmFuayAgICAgICAgIHwgV29ya2Zsb3cgICAgICAgICAgICAgfCAvYXBpL3dvcmtmbG93cyAgICAgICAgICAgICAgICAgfCBDcmVhdGUsIGdldCBhbmQgbGlzdCB3b3JrZmxvd3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICMjIFVuZGVyc3RhbmRpbmcgT2JqZWN0IE1vZGVscyAmIEVuZHBvaW50cyAgKipPcmdhbml6YXRpb25zKiogIEFuIGBPcmdhbml6YXRpb25gIGlzIG1lYW50IHRvIHJlcHJlc2VudCB0aGUgb3JnYW5pemF0aW9uIHBhcnRuZXJpbmcgd2l0aCBDeWJyaWQgdG8gdXNlIG91ciBwbGF0Zm9ybS4gIEFuIGBPcmdhbml6YXRpb25gIHR5cGljYWxseSBkb2VzIG5vdCBkaXJlY3RseSBpbnRlcmFjdCB3aXRoIGBjdXN0b21lcnNgLiBJbnN0ZWFkLCBhbiBPcmdhbml6YXRpb24gaGFzIG9uZSBvciBtb3JlIGBiYW5rc2AsIHdoaWNoIGVuY29tcGFzcyB0aGUgZmluYW5jaWFsIHNlcnZpY2Ugb2ZmZXJpbmdzIG9mIHRoZSBwbGF0Zm9ybS4gICoqQmFua3MqKiAgQSBgQmFua2AgaXMgb3duZWQgYnkgYW4gYE9yZ2FuaXphdGlvbmAgYW5kIGNhbiBiZSB0aG91Z2h0IG9mIGFzIGFuIGVudmlyb25tZW50IG9yIGNvbnRhaW5lciBmb3IgYGN1c3RvbWVyc2AgYW5kIHByb2R1Y3Qgb2ZmZXJpbmdzLiBCYW5rcyBhcmUgY3JlYXRlZCBpbiBlaXRoZXIgYFNhbmRib3hgIG9yIGBQcm9kdWN0aW9uYCBtb2RlLCB3aGVyZSBgU2FuZGJveGAgaXMgdGhlIGVudmlyb25tZW50IHRoYXQgeW91IHdvdWxkIHRlc3QsIHByb3RvdHlwZSBhbmQgYnVpbGQgaW4gcHJpb3IgdG8gbW92aW5nIHRvIGBQcm9kdWN0aW9uYC4gIEFuIGBPcmdhbml6YXRpb25gIGNhbiBoYXZlIG11bHRpcGxlIGBiYW5rc2AsIGluIGVpdGhlciBgU2FuZGJveGAgb3IgYFByb2R1Y3Rpb25gIGVudmlyb25tZW50cy4gQSBgU2FuZGJveCBCYW5rYCB3aWxsIGJlIGJhY2tlZCBieSBzdHViYmVkIGRhdGEgYW5kIHByb2Nlc3MgZmxvd3MuIEZvciBpbnN0YW5jZSwgZnVuZGluZyBzb3VyY2UgdHJhbnNmZXIgcHJvY2Vzc2VzIGFzIHdlbGwgYXMgdHJhZGVzIHdpbGwgYmUgc2ltdWxhdGVkIHJhdGhlciB0aGFuIHBlcmZvcm1lZCwgaG93ZXZlciBhc3NldCBwcmljZXMgYXJlIHJlcHJlc2VudGF0aXZlIG9mIHJlYWwtd29ybGQgdmFsdWVzLiBZb3UgaGF2ZSBhbiB1bmxpbWl0ZWQgYW1vdW50IG9mIHNpbXVsYXRlZCBmaWF0IGN1cnJlbmN5IGZvciB0ZXN0aW5nIHB1cnBvc2VzLiAgKipDdXN0b21lcnMqKiAgYEN1c3RvbWVyc2AgcmVwcmVzZW50IHlvdXIgYmFua2luZyB1c2VycyBvbiB0aGUgcGxhdGZvcm0uIEF0IHByZXNlbnQsIHdlIG9mZmVyIHN1cHBvcnQgZm9yIGBJbmRpdmlkdWFsc2AgYXMgQ3VzdG9tZXJzLiAgYEN1c3RvbWVyc2AgbXVzdCBiZSB2ZXJpZmllZCAoaS5lLiwgS1lDXFwnZCkgaW4gb3VyIHN5c3RlbSBiZWZvcmUgdGhleSBjYW4gcGxheSBhbnkgcGFydCBvbiB0aGUgcGxhdGZvcm0sIHdoaWNoIG1lYW5zIHRoZXkgbXVzdCBoYXZlIGFuIGFzc29jaWF0ZWQgYW5kIGEgcGFzc2luZyBgSWRlbnRpdHkgVmVyaWZpY2F0aW9uYC4gU2VlIHRoZSBJZGVudGl0eSBWZXJpZmljYXRpb25zIHNlY3Rpb24gZm9yIG1vcmUgZGV0YWlscyBvbiBob3cgYSBjdXN0b21lciBjYW4gYmUgdmVyaWZpZWQuICBgQ3VzdG9tZXJzYCBtdXN0IGFsc28gaGF2ZSBhbiBgQWNjb3VudGAgdG8gYmUgYWJsZSB0byB0cmFuc2FjdCwgaW4gdGhlIGRlc2lyZWQgYXNzZXQgY2xhc3MuIFNlZSB0aGUgQWNjb3VudHMgQVBJcyBmb3IgbW9yZSBkZXRhaWxzIG9uIHNldHRpbmcgdXAgYWNjb3VudHMgZm9yIHRoZSBjdXN0b21lci4gXG4gKlxuICogVGhlIHZlcnNpb24gb2YgdGhlIE9wZW5BUEkgZG9jdW1lbnQ6IHYwLjEyMy4yMTZcbiAqIENvbnRhY3Q6IHN1cHBvcnRAY3licmlkLmFwcFxuICpcbiAqIE5PVEU6IFRoaXMgY2xhc3MgaXMgYXV0byBnZW5lcmF0ZWQgYnkgT3BlbkFQSSBHZW5lcmF0b3IgKGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaCkuXG4gKiBodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2hcbiAqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cbiAqL1xuXG5cbi8qKlxuICogUmVxdWVzdCBib2R5IGZvciBxdW90ZSBhY2NvdW50IGNyZWF0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBvc3RRdW90ZUVudHJ5QmFua01vZGVsIHsgXG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgb2YgYWNjb3VudFxuICAgICAqL1xuICAgIHR5cGU6IFBvc3RRdW90ZUVudHJ5QmFua01vZGVsLlR5cGVFbnVtO1xuICAgIC8qKlxuICAgICAqIFRoZSBndWlkIG9mIHRoZSBhY2NvdW50XG4gICAgICovXG4gICAgZ3VpZDogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFRoZSBhbW91bnQgdG8gYmUgcmVjZWl2ZWQgaW4gYmFzZSB1bml0cyBvZiB0aGUgY3VycmVuY3k6IGN1cnJlbmN5IGlzIFxcXCJhc3NldFxcXCIgZm9yIGJ1eSBhbmQgXFxcImNvdW50ZXJfYXNzZXRcXFwiIGZvciBzZWxsIGZvciB0cmFkZSBxdW90ZXMuXG4gICAgICovXG4gICAgcmVjZWl2ZV9hbW91bnQ/OiBzdHJpbmcgfCBudWxsO1xuICAgIC8qKlxuICAgICAqIFRoZSBhbW91bnQgdG8gYmUgZGVsaXZlcmVkIGluIGJhc2UgdW5pdHMgb2YgdGhlIGN1cnJlbmN5OiBjdXJyZW5jeSBpcyBcXFwiY291bnRlcl9hc3NldFxcXCIgZm9yIGJ1eSBhbmQgXFxcImFzc2V0XFxcIiBmb3Igc2VsbCBmb3IgdHJhZGUgcXVvdGVzLlxuICAgICAqL1xuICAgIGRlbGl2ZXJfYW1vdW50Pzogc3RyaW5nIHwgbnVsbDtcbn1cbmV4cG9ydCBuYW1lc3BhY2UgUG9zdFF1b3RlRW50cnlCYW5rTW9kZWwge1xuICAgIGV4cG9ydCB0eXBlIFR5cGVFbnVtID0gJ2V4dGVybmFsX3dhbGxldCc7XG4gICAgZXhwb3J0IGNvbnN0IFR5cGVFbnVtID0ge1xuICAgICAgICBFeHRlcm5hbFdhbGxldDogJ2V4dGVybmFsX3dhbGxldCcgYXMgVHlwZUVudW1cbiAgICB9O1xufVxuXG5cbiJdfQ==
@@ -2,7 +2,7 @@
2
2
  * Cybrid Bank API
3
3
  * # Cybrid API documentation Welcome to Cybrid, an all-in-one crypto platform that enables you to easily **build** and **launch** white-label crypto products or services. In these documents, you\'ll find details on how our REST API operates and generally how our platform functions. If you\'re looking for our UI SDK Widgets for Web or Mobile (iOS/Android), generated API clients, or demo applications, head over to our [Github repo](https://github.com/Cybrid-app). 💡 We recommend bookmarking the [Cybrid LinkTree](https://linktr.ee/cybridtechnologies) which contains many helpful links to platform resources. ## Getting Started This is Cybrid\'s public interactive API documentation, which allows you to fully test our APIs. If you\'d like to use a different tool to exercise our APIs, you can download the [Open API 3.0 yaml](https://bank.production.cybrid.app/api/schema/v1/swagger.yaml) for import. If you\'re new to our APIs and the Cybrid Platform, follow the below guides to get set up and familiar with the platform: 1. [Introduction](https://docs.cybrid.xyz/docs/introduction) 2. [Platform Introduction](https://docs.cybrid.xyz/docs/how-is-cybrid-architected) 3. [Testing with Hosted Web Demo App](https://docs.cybrid.xyz/docs/testing-with-hosted-web-demo-app) In [Getting Started in the Cybrid Sandbox](https://docs.cybrid.xyz/docs/how-do-i-get-started-with-the-sandbox), we walk you through how to use the [Cybrid Sandbox](https://id.sandbox.cybrid.app/) to create a test bank and generate API keys. In [Getting Ready for Trading](https://kb.cybrid.xyz/getting-ready-for-trading), we walk through creating customers, customer identities, accounts, as well as executing quotes and trades. ## Working with the Cybrid Platform There are three primary ways you can interact with the Cybrid platform: 1. Directly via our RESTful API (this documentation) 2. Using our API clients available in a variety of languages ([Angular](https://github.com/Cybrid-app/cybrid-api-bank-angular), [Java](https://github.com/Cybrid-app/cybrid-api-bank-java), [Kotlin](https://github.com/Cybrid-app/cybrid-api-bank-kotlin), [Python](https://github.com/Cybrid-app/cybrid-api-bank-python), [Ruby](https://github.com/Cybrid-app/cybrid-api-bank-ruby), [Swift](https://github.com/Cybrid-app/cybrid-api-bank-swift) or [Typescript](https://github.com/Cybrid-app/cybrid-api-bank-typescript)) 3. Integrating a platform specific SDK ([Web](https://github.com/Cybrid-app/cybrid-sdk-web), [Android](https://github.com/Cybrid-app/cybrid-sdk-android), [iOS](https://github.com/Cybrid-app/cybrid-sdk-ios)) Our complete set of APIs allows you to manage resources across three distinct areas: your `Organization`, your `Banks` and your `Identities`. For most of your testing and interaction you\'ll be using the `Bank` API, which is where the majority of APIs reside. *The complete set of APIs can be found on the following pages:* | API | Description | |------------------------------------------------------------------|-------------------------------------------------------------| | [Organization API](https://organization.production.cybrid.app/api/schema/swagger-ui) | APIs to manage organizations | | [Bank API](https://bank.production.cybrid.app/api/schema/swagger-ui) | APIs to manage banks (and all downstream customer activity) | | [Identities API](https://id.production.cybrid.app/api/schema/swagger-ui) | APIs to manage organization and bank identities | For questions please contact [Support](mailto:support@cybrid.xyz) at any time for assistance, or contact the [Product Team](mailto:product@cybrid.xyz) for product suggestions. ## Authenticating with the API The Cybrid Platform uses OAuth 2.0 Bearer Tokens to authenticate requests to the platform. Credentials to create `Organization` and `Bank` tokens can be generated via the [Cybrid Sandbox](https://id.production.cybrid.app). Access tokens can be generated for a `Customer` as well via the [Cybrid IdP](https://id.production.cybrid.app) as well. An `Organization` access token applies broadly to the whole Organization and all of its `Banks`, whereas, a `Bank` access token is specific to an individual Bank. `Customer` tokens, similarly, are scoped to a specific customer in a bank. Both `Organization` and `Bank` tokens can be created using the OAuth Client Credential Grant flow. Each Organization and Bank has its own unique `Client ID` and `Secret` that allows for machine-to-machine authentication. A `Bank` can then generate `Customer` access tokens via API using our [Identities API](https://id.production.cybrid.app/api/schema/swagger-ui). <font color=\"orange\">**⚠️ Never share your Client ID or Secret publicly or in your source code repository.**</font> Your `Client ID` and `Secret` can be exchanged for a time-limited `Bearer Token` by interacting with the Cybrid Identity Provider or through interacting with the **Authorize** button in this document. The following curl command can be used to quickly generate a `Bearer Token` for use in testing the API or demo applications. ``` # Example request when using Bank credentials curl -X POST https://id.production.cybrid.app/oauth/token -d \'{ \"grant_type\": \"client_credentials\", \"client_id\": \"<Your Client ID>\", \"client_secret\": \"<Your Secret>\", \"scope\": \"banks:read banks:write bank_applications:execute accounts:read accounts:execute counterparties:read counterparties:write counterparties:execute customers:read customers:write customers:execute prices:read quotes:execute quotes:read trades:execute trades:read transfers:execute transfers:read external_bank_accounts:read external_bank_accounts:write external_bank_accounts:execute external_wallets:read external_wallets:execute workflows:read workflows:execute deposit_addresses:read deposit_addresses:execute deposit_bank_accounts:read deposit_bank_accounts:execute invoices:read invoices:write invoices:execute identity_verifications:read identity_verifications:write identity_verifications:execute files:read files:execute\" }\' -H \"Content-Type: application/json\" # When using Organization credentials set `scope` to \'organizations:read organizations:write organization_applications:execute banks:read banks:write banks:execute bank_applications:execute users:read users:execute counterparties:read customers:read accounts:read prices:read quotes:execute quotes:read trades:execute trades:read transfers:read transfers:execute external_bank_accounts:read external_wallets:read workflows:read deposit_addresses:read deposit_bank_accounts:read invoices:read subscriptions:read subscriptions:write subscriptions:execute subscription_events:read subscription_events:execute identity_verifications:read files:read files:execute\' ``` <font color=\"orange\">**⚠️ Note: The above curl will create a bearer token with full scope access. Delete scopes if you\'d like to restrict access.**</font> ## Authentication Scopes The Cybrid platform supports the use of scopes to control the level of access a token is limited to. Scopes do not grant access to resources; instead, they provide limits, in support of the least privilege principal. The following scopes are available on the platform and can be requested when generating either an Organization, Bank or Customer token. Generally speaking, the _Read_ scope is required to read and list resources, the _Write_ scope is required to update a resource and the _Execute_ scope is required to create a resource. | Resource | Read scope (Token Type) | Write scope (Token Type) | Execute scope (Token Type) | |-----------------------|------------------------------------------------------------|-----------------------------------------------|--------------------------------------------------| | Account | accounts:read (Organization, Bank, Customer) | | accounts:execute (Bank, Customer) | | Bank | banks:read (Organization, Bank) | banks:write (Organization, Bank) | banks:execute (Organization) | | Customer | customers:read (Organization, Bank, Customer) | customers:write (Bank, Customer) | customers:execute (Bank) | | Counterparty | counterparties:read (Organization, Bank, Customer) | counterparties:write (Bank, Customer) | counterparties:execute (Bank) | | Deposit Address | deposit_addresses:read (Organization, Bank, Customer) | deposit_addresses:write (Bank, Customer) | deposit_addresses:execute (Bank, Customer) | | External Bank Account | external_bank_accounts:read (Organization, Bank, Customer) | external_bank_accounts:write (Bank, Customer) | external_bank_accounts:execute (Bank, Customer) | | External Wallet | external_wallet:read (Organization, Bank, Customer) | | external_wallet:execute (Bank, Customer) | | Organization | organizations:read (Organization) | organizations:write (Organization) | | | User | users:read (Organization) | | users:execute (Organization) | | Price | prices:read (Bank, Customer) | | | | Quote | quotes:read (Organization, Bank, Customer) | | quotes:execute (Organization, Bank, Customer) | | Trade | trades:read (Organization, Bank, Customer) | | trades:execute (Organization, Bank, Customer) | | Transfer | transfers:read (Organization, Bank, Customer) | | transfers:execute (Organization, Bank, Customer) | | Workflow | workflows:read (Organization, Bank, Customer) | | workflows:execute (Bank, Customer) | | Invoice | invoices:read (Organization, Bank, Customer) | invoices:write (Bank, Customer) | invoices:execute (Bank, Customer) | ## Available Endpoints The available APIs for the [Identity](https://id.production.cybrid.app/api/schema/swagger-ui), [Organization](https://organization.production.cybrid.app/api/schema/swagger-ui) and [Bank](https://bank.production.cybrid.app/api/schema/swagger-ui) API services are listed below: | API Service | Model | API Endpoint Path | Description | |--------------|----------------------|--------------------------------|---------------------------------------------------------------------------------------------------| | Identity | Bank | /api/bank_applications | Create and list banks | | Identity | CustomerToken | /api/customer_tokens | Create customer JWT access tokens | | Identity | Organization | /api/organization_applications | Create and list organizations | | Identity | Organization | /api/users | Create and list organization users | | Organization | Organization | /api/organizations | APIs to retrieve and update organization name | | Bank | Account | /api/accounts | Create and list accounts, which hold a specific asset for a customers | | Bank | Asset | /api/assets | Get a list of assets supported by the platform (ex: BTC, ETH) | | Bank | Bank | /api/banks | Create, update and list banks, the parent to customers, accounts, etc | | Bank | Customer | /api/customers | Create and list customers | | Bank | Counterparty | /api/counterparties | Create and list counterparties | | Bank | DepositAddress | /api/deposit_addresses | Create, get and list deposit addresses | | Bank | ExternalBankAccount | /api/external_bank_accounts | Create, get and list external bank accounts, which connect customer bank accounts to the platform | | Bank | ExternalWallet | /api/external_wallets | Create, get, list and delete external wallets, which connect customer wallets to the platform | | Bank | IdentityVerification | /api/identity_verifications | Create and list identity verifications, which are performed on customers for KYC | | Bank | Invoice | /api/invoices | Create, get, cancel and list invoices | | Bank | PaymentInstruction | /api/payment_instructions | Create, get and list payment instructions for invoices | | Bank | Price | /api/prices | Get the current prices for assets on the platform | | Bank | Quote | /api/quotes | Create and list quotes, which are required to execute trades | | Bank | Symbol | /api/symbols | Get a list of symbols supported for trade (ex: BTC-USD) | | Bank | Trade | /api/trades | Create and list trades, which buy or sell cryptocurrency | | Bank | Transfer | /api/transfers | Create, get and list transfers (e.g., funding, book) | | Bank | Workflow | /api/workflows | Create, get and list workflows | ## Understanding Object Models & Endpoints **Organizations** An `Organization` is meant to represent the organization partnering with Cybrid to use our platform. An `Organization` typically does not directly interact with `customers`. Instead, an Organization has one or more `banks`, which encompass the financial service offerings of the platform. **Banks** A `Bank` is owned by an `Organization` and can be thought of as an environment or container for `customers` and product offerings. Banks are created in either `Sandbox` or `Production` mode, where `Sandbox` is the environment that you would test, prototype and build in prior to moving to `Production`. An `Organization` can have multiple `banks`, in either `Sandbox` or `Production` environments. A `Sandbox Bank` will be backed by stubbed data and process flows. For instance, funding source transfer processes as well as trades will be simulated rather than performed, however asset prices are representative of real-world values. You have an unlimited amount of simulated fiat currency for testing purposes. **Customers** `Customers` represent your banking users on the platform. At present, we offer support for `Individuals` as Customers. `Customers` must be verified (i.e., KYC\'d) in our system before they can play any part on the platform, which means they must have an associated and a passing `Identity Verification`. See the Identity Verifications section for more details on how a customer can be verified. `Customers` must also have an `Account` to be able to transact, in the desired asset class. See the Accounts APIs for more details on setting up accounts for the customer.
4
4
  *
5
- * The version of the OpenAPI document: v0.123.214
5
+ * The version of the OpenAPI document: v0.123.216
6
6
  * Contact: support@cybrid.app
7
7
  *
8
8
  * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
@@ -22,4 +22,4 @@ export var PostSupportedPayoutSymbolsBankModel;
22
22
  MobileWallet: 'mobile_wallet'
23
23
  };
24
24
  })(PostSupportedPayoutSymbolsBankModel || (PostSupportedPayoutSymbolsBankModel = {}));
25
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9zdFN1cHBvcnRlZFBheW91dFN5bWJvbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9tb2RlbC9wb3N0U3VwcG9ydGVkUGF5b3V0U3ltYm9scy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7OztHQVVHO0FBNEJILE1BQU0sS0FBVyxtQ0FBbUMsQ0FhbkQ7QUFiRCxXQUFpQixtQ0FBbUM7SUFFbkMsd0RBQW9CLEdBQUc7UUFDaEMsR0FBRyxFQUFFLEtBQTZCO1FBQ2xDLEdBQUcsRUFBRSxLQUE2QjtRQUNsQyxHQUFHLEVBQUUsS0FBNkI7UUFDbEMsR0FBRyxFQUFFLEtBQTZCO0tBQ3JDLENBQUM7SUFFVyw2Q0FBUyxHQUFHO1FBQ3JCLFdBQVcsRUFBRSxjQUEyQjtRQUN4QyxZQUFZLEVBQUUsZUFBNEI7S0FDN0MsQ0FBQztBQUNOLENBQUMsRUFiZ0IsbUNBQW1DLEtBQW5DLG1DQUFtQyxRQWFuRCIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ3licmlkIEJhbmsgQVBJXG4gKiAjIEN5YnJpZCBBUEkgZG9jdW1lbnRhdGlvbiAgV2VsY29tZSB0byBDeWJyaWQsIGFuIGFsbC1pbi1vbmUgY3J5cHRvIHBsYXRmb3JtIHRoYXQgZW5hYmxlcyB5b3UgdG8gZWFzaWx5ICoqYnVpbGQqKiBhbmQgKipsYXVuY2gqKiB3aGl0ZS1sYWJlbCBjcnlwdG8gcHJvZHVjdHMgb3Igc2VydmljZXMuICBJbiB0aGVzZSBkb2N1bWVudHMsIHlvdVxcJ2xsIGZpbmQgZGV0YWlscyBvbiBob3cgb3VyIFJFU1QgQVBJIG9wZXJhdGVzIGFuZCBnZW5lcmFsbHkgaG93IG91ciBwbGF0Zm9ybSBmdW5jdGlvbnMuICBJZiB5b3VcXCdyZSBsb29raW5nIGZvciBvdXIgVUkgU0RLIFdpZGdldHMgZm9yIFdlYiBvciBNb2JpbGUgKGlPUy9BbmRyb2lkKSwgZ2VuZXJhdGVkIEFQSSBjbGllbnRzLCBvciBkZW1vIGFwcGxpY2F0aW9ucywgaGVhZCBvdmVyIHRvIG91ciBbR2l0aHViIHJlcG9dKGh0dHBzOi8vZ2l0aHViLmNvbS9DeWJyaWQtYXBwKS4gIPCfkqEgV2UgcmVjb21tZW5kIGJvb2ttYXJraW5nIHRoZSBbQ3licmlkIExpbmtUcmVlXShodHRwczovL2xpbmt0ci5lZS9jeWJyaWR0ZWNobm9sb2dpZXMpIHdoaWNoIGNvbnRhaW5zIG1hbnkgaGVscGZ1bCBsaW5rcyB0byBwbGF0Zm9ybSByZXNvdXJjZXMuICAjIyBHZXR0aW5nIFN0YXJ0ZWQgIFRoaXMgaXMgQ3licmlkXFwncyBwdWJsaWMgaW50ZXJhY3RpdmUgQVBJIGRvY3VtZW50YXRpb24sIHdoaWNoIGFsbG93cyB5b3UgdG8gZnVsbHkgdGVzdCBvdXIgQVBJcy4gSWYgeW91XFwnZCBsaWtlIHRvIHVzZSBhIGRpZmZlcmVudCB0b29sIHRvIGV4ZXJjaXNlIG91ciBBUElzLCB5b3UgY2FuIGRvd25sb2FkIHRoZSBbT3BlbiBBUEkgMy4wIHlhbWxdKGh0dHBzOi8vYmFuay5wcm9kdWN0aW9uLmN5YnJpZC5hcHAvYXBpL3NjaGVtYS92MS9zd2FnZ2VyLnlhbWwpIGZvciBpbXBvcnQuICBJZiB5b3VcXCdyZSBuZXcgdG8gb3VyIEFQSXMgYW5kIHRoZSBDeWJyaWQgUGxhdGZvcm0sIGZvbGxvdyB0aGUgYmVsb3cgZ3VpZGVzIHRvIGdldCBzZXQgdXAgYW5kIGZhbWlsaWFyIHdpdGggdGhlIHBsYXRmb3JtOiAgMS4gW0ludHJvZHVjdGlvbl0oaHR0cHM6Ly9kb2NzLmN5YnJpZC54eXovZG9jcy9pbnRyb2R1Y3Rpb24pIDIuIFtQbGF0Zm9ybSBJbnRyb2R1Y3Rpb25dKGh0dHBzOi8vZG9jcy5jeWJyaWQueHl6L2RvY3MvaG93LWlzLWN5YnJpZC1hcmNoaXRlY3RlZCkgMy4gW1Rlc3Rpbmcgd2l0aCBIb3N0ZWQgV2ViIERlbW8gQXBwXShodHRwczovL2RvY3MuY3licmlkLnh5ei9kb2NzL3Rlc3Rpbmctd2l0aC1ob3N0ZWQtd2ViLWRlbW8tYXBwKSAgSW4gW0dldHRpbmcgU3RhcnRlZCBpbiB0aGUgQ3licmlkIFNhbmRib3hdKGh0dHBzOi8vZG9jcy5jeWJyaWQueHl6L2RvY3MvaG93LWRvLWktZ2V0LXN0YXJ0ZWQtd2l0aC10aGUtc2FuZGJveCksIHdlIHdhbGsgeW91IHRocm91Z2ggaG93IHRvIHVzZSB0aGUgW0N5YnJpZCBTYW5kYm94XShodHRwczovL2lkLnNhbmRib3guY3licmlkLmFwcC8pIHRvIGNyZWF0ZSBhIHRlc3QgYmFuayBhbmQgZ2VuZXJhdGUgQVBJIGtleXMuIEluIFtHZXR0aW5nIFJlYWR5IGZvciBUcmFkaW5nXShodHRwczovL2tiLmN5YnJpZC54eXovZ2V0dGluZy1yZWFkeS1mb3ItdHJhZGluZyksIHdlIHdhbGsgdGhyb3VnaCBjcmVhdGluZyBjdXN0b21lcnMsIGN1c3RvbWVyIGlkZW50aXRpZXMsIGFjY291bnRzLCBhcyB3ZWxsIGFzIGV4ZWN1dGluZyBxdW90ZXMgYW5kIHRyYWRlcy4gICMjIFdvcmtpbmcgd2l0aCB0aGUgQ3licmlkIFBsYXRmb3JtICBUaGVyZSBhcmUgdGhyZWUgcHJpbWFyeSB3YXlzIHlvdSBjYW4gaW50ZXJhY3Qgd2l0aCB0aGUgQ3licmlkIHBsYXRmb3JtOiAgMS4gRGlyZWN0bHkgdmlhIG91ciBSRVNUZnVsIEFQSSAodGhpcyBkb2N1bWVudGF0aW9uKSAyLiBVc2luZyBvdXIgQVBJIGNsaWVudHMgYXZhaWxhYmxlIGluIGEgdmFyaWV0eSBvZiBsYW5ndWFnZXMgKFtBbmd1bGFyXShodHRwczovL2dpdGh1Yi5jb20vQ3licmlkLWFwcC9jeWJyaWQtYXBpLWJhbmstYW5ndWxhciksIFtKYXZhXShodHRwczovL2dpdGh1Yi5jb20vQ3licmlkLWFwcC9jeWJyaWQtYXBpLWJhbmstamF2YSksIFtLb3RsaW5dKGh0dHBzOi8vZ2l0aHViLmNvbS9DeWJyaWQtYXBwL2N5YnJpZC1hcGktYmFuay1rb3RsaW4pLCBbUHl0aG9uXShodHRwczovL2dpdGh1Yi5jb20vQ3licmlkLWFwcC9jeWJyaWQtYXBpLWJhbmstcHl0aG9uKSwgW1J1YnldKGh0dHBzOi8vZ2l0aHViLmNvbS9DeWJyaWQtYXBwL2N5YnJpZC1hcGktYmFuay1ydWJ5KSwgW1N3aWZ0XShodHRwczovL2dpdGh1Yi5jb20vQ3licmlkLWFwcC9jeWJyaWQtYXBpLWJhbmstc3dpZnQpIG9yIFtUeXBlc2NyaXB0XShodHRwczovL2dpdGh1Yi5jb20vQ3licmlkLWFwcC9jeWJyaWQtYXBpLWJhbmstdHlwZXNjcmlwdCkpIDMuIEludGVncmF0aW5nIGEgcGxhdGZvcm0gc3BlY2lmaWMgU0RLIChbV2ViXShodHRwczovL2dpdGh1Yi5jb20vQ3licmlkLWFwcC9jeWJyaWQtc2RrLXdlYiksIFtBbmRyb2lkXShodHRwczovL2dpdGh1Yi5jb20vQ3licmlkLWFwcC9jeWJyaWQtc2RrLWFuZHJvaWQpLCBbaU9TXShodHRwczovL2dpdGh1Yi5jb20vQ3licmlkLWFwcC9jeWJyaWQtc2RrLWlvcykpICBPdXIgY29tcGxldGUgc2V0IG9mIEFQSXMgYWxsb3dzIHlvdSB0byBtYW5hZ2UgcmVzb3VyY2VzIGFjcm9zcyB0aHJlZSBkaXN0aW5jdCBhcmVhczogeW91ciBgT3JnYW5pemF0aW9uYCwgeW91ciBgQmFua3NgIGFuZCB5b3VyIGBJZGVudGl0aWVzYC4gRm9yIG1vc3Qgb2YgeW91ciB0ZXN0aW5nIGFuZCBpbnRlcmFjdGlvbiB5b3VcXCdsbCBiZSB1c2luZyB0aGUgYEJhbmtgIEFQSSwgd2hpY2ggaXMgd2hlcmUgdGhlIG1ham9yaXR5IG9mIEFQSXMgcmVzaWRlLiAgKlRoZSBjb21wbGV0ZSBzZXQgb2YgQVBJcyBjYW4gYmUgZm91bmQgb24gdGhlIGZvbGxvd2luZyBwYWdlczoqICB8IEFQSSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgfCBbT3JnYW5pemF0aW9uIEFQSV0oaHR0cHM6Ly9vcmdhbml6YXRpb24ucHJvZHVjdGlvbi5jeWJyaWQuYXBwL2FwaS9zY2hlbWEvc3dhZ2dlci11aSkgICB8IEFQSXMgdG8gbWFuYWdlIG9yZ2FuaXphdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgfCBbQmFuayBBUEldKGh0dHBzOi8vYmFuay5wcm9kdWN0aW9uLmN5YnJpZC5hcHAvYXBpL3NjaGVtYS9zd2FnZ2VyLXVpKSAgICAgICAgICAgICAgICAgICB8IEFQSXMgdG8gbWFuYWdlIGJhbmtzIChhbmQgYWxsIGRvd25zdHJlYW0gY3VzdG9tZXIgYWN0aXZpdHkpIHwgfCBbSWRlbnRpdGllcyBBUEldKGh0dHBzOi8vaWQucHJvZHVjdGlvbi5jeWJyaWQuYXBwL2FwaS9zY2hlbWEvc3dhZ2dlci11aSkgICAgICAgICAgICAgICAgICAgICAgIHwgQVBJcyB0byBtYW5hZ2Ugb3JnYW5pemF0aW9uIGFuZCBiYW5rIGlkZW50aXRpZXMgICAgICAgICAgICAgfCAgRm9yIHF1ZXN0aW9ucyBwbGVhc2UgY29udGFjdCBbU3VwcG9ydF0obWFpbHRvOnN1cHBvcnRAY3licmlkLnh5eikgYXQgYW55IHRpbWUgZm9yIGFzc2lzdGFuY2UsIG9yIGNvbnRhY3QgdGhlIFtQcm9kdWN0IFRlYW1dKG1haWx0bzpwcm9kdWN0QGN5YnJpZC54eXopIGZvciBwcm9kdWN0IHN1Z2dlc3Rpb25zLiAgIyMgQXV0aGVudGljYXRpbmcgd2l0aCB0aGUgQVBJICBUaGUgQ3licmlkIFBsYXRmb3JtIHVzZXMgT0F1dGggMi4wIEJlYXJlciBUb2tlbnMgdG8gYXV0aGVudGljYXRlIHJlcXVlc3RzIHRvIHRoZSBwbGF0Zm9ybS4gQ3JlZGVudGlhbHMgdG8gY3JlYXRlIGBPcmdhbml6YXRpb25gIGFuZCBgQmFua2AgdG9rZW5zIGNhbiBiZSBnZW5lcmF0ZWQgdmlhIHRoZSBbQ3licmlkIFNhbmRib3hdKGh0dHBzOi8vaWQucHJvZHVjdGlvbi5jeWJyaWQuYXBwKS4gQWNjZXNzIHRva2VucyBjYW4gYmUgZ2VuZXJhdGVkIGZvciBhIGBDdXN0b21lcmAgYXMgd2VsbCB2aWEgdGhlIFtDeWJyaWQgSWRQXShodHRwczovL2lkLnByb2R1Y3Rpb24uY3licmlkLmFwcCkgYXMgd2VsbC4gIEFuIGBPcmdhbml6YXRpb25gIGFjY2VzcyB0b2tlbiBhcHBsaWVzIGJyb2FkbHkgdG8gdGhlIHdob2xlIE9yZ2FuaXphdGlvbiBhbmQgYWxsIG9mIGl0cyBgQmFua3NgLCB3aGVyZWFzLCBhIGBCYW5rYCBhY2Nlc3MgdG9rZW4gaXMgc3BlY2lmaWMgdG8gYW4gaW5kaXZpZHVhbCBCYW5rLiBgQ3VzdG9tZXJgIHRva2Vucywgc2ltaWxhcmx5LCBhcmUgc2NvcGVkIHRvIGEgc3BlY2lmaWMgY3VzdG9tZXIgaW4gYSBiYW5rLiAgQm90aCBgT3JnYW5pemF0aW9uYCBhbmQgYEJhbmtgIHRva2VucyBjYW4gYmUgY3JlYXRlZCB1c2luZyB0aGUgT0F1dGggQ2xpZW50IENyZWRlbnRpYWwgR3JhbnQgZmxvdy4gRWFjaCBPcmdhbml6YXRpb24gYW5kIEJhbmsgaGFzIGl0cyBvd24gdW5pcXVlIGBDbGllbnQgSURgIGFuZCBgU2VjcmV0YCB0aGF0IGFsbG93cyBmb3IgbWFjaGluZS10by1tYWNoaW5lIGF1dGhlbnRpY2F0aW9uLiAgQSBgQmFua2AgY2FuIHRoZW4gZ2VuZXJhdGUgYEN1c3RvbWVyYCBhY2Nlc3MgdG9rZW5zIHZpYSBBUEkgdXNpbmcgb3VyIFtJZGVudGl0aWVzIEFQSV0oaHR0cHM6Ly9pZC5wcm9kdWN0aW9uLmN5YnJpZC5hcHAvYXBpL3NjaGVtYS9zd2FnZ2VyLXVpKS4gIDxmb250IGNvbG9yPVxcXCJvcmFuZ2VcXFwiPioq4pqg77iPIE5ldmVyIHNoYXJlIHlvdXIgQ2xpZW50IElEIG9yIFNlY3JldCBwdWJsaWNseSBvciBpbiB5b3VyIHNvdXJjZSBjb2RlIHJlcG9zaXRvcnkuKio8L2ZvbnQ+ICBZb3VyIGBDbGllbnQgSURgIGFuZCBgU2VjcmV0YCBjYW4gYmUgZXhjaGFuZ2VkIGZvciBhIHRpbWUtbGltaXRlZCBgQmVhcmVyIFRva2VuYCBieSBpbnRlcmFjdGluZyB3aXRoIHRoZSBDeWJyaWQgSWRlbnRpdHkgUHJvdmlkZXIgb3IgdGhyb3VnaCBpbnRlcmFjdGluZyB3aXRoIHRoZSAqKkF1dGhvcml6ZSoqIGJ1dHRvbiBpbiB0aGlzIGRvY3VtZW50LiAgVGhlIGZvbGxvd2luZyBjdXJsIGNvbW1hbmQgY2FuIGJlIHVzZWQgdG8gcXVpY2tseSBnZW5lcmF0ZSBhIGBCZWFyZXIgVG9rZW5gIGZvciB1c2UgaW4gdGVzdGluZyB0aGUgQVBJIG9yIGRlbW8gYXBwbGljYXRpb25zLiAgYGBgICMgRXhhbXBsZSByZXF1ZXN0IHdoZW4gdXNpbmcgQmFuayBjcmVkZW50aWFscyBjdXJsIC1YIFBPU1QgaHR0cHM6Ly9pZC5wcm9kdWN0aW9uLmN5YnJpZC5hcHAvb2F1dGgvdG9rZW4gLWQgXFwneyAgICAgXFxcImdyYW50X3R5cGVcXFwiOiBcXFwiY2xpZW50X2NyZWRlbnRpYWxzXFxcIiwgICAgIFxcXCJjbGllbnRfaWRcXFwiOiBcXFwiPFlvdXIgQ2xpZW50IElEPlxcXCIsICAgICBcXFwiY2xpZW50X3NlY3JldFxcXCI6IFxcXCI8WW91ciBTZWNyZXQ+XFxcIiwgICAgIFxcXCJzY29wZVxcXCI6IFxcXCJiYW5rczpyZWFkIGJhbmtzOndyaXRlIGJhbmtfYXBwbGljYXRpb25zOmV4ZWN1dGUgYWNjb3VudHM6cmVhZCBhY2NvdW50czpleGVjdXRlIGNvdW50ZXJwYXJ0aWVzOnJlYWQgY291bnRlcnBhcnRpZXM6d3JpdGUgY291bnRlcnBhcnRpZXM6ZXhlY3V0ZSBjdXN0b21lcnM6cmVhZCBjdXN0b21lcnM6d3JpdGUgY3VzdG9tZXJzOmV4ZWN1dGUgcHJpY2VzOnJlYWQgcXVvdGVzOmV4ZWN1dGUgcXVvdGVzOnJlYWQgdHJhZGVzOmV4ZWN1dGUgdHJhZGVzOnJlYWQgdHJhbnNmZXJzOmV4ZWN1dGUgdHJhbnNmZXJzOnJlYWQgZXh0ZXJuYWxfYmFua19hY2NvdW50czpyZWFkIGV4dGVybmFsX2JhbmtfYWNjb3VudHM6d3JpdGUgZXh0ZXJuYWxfYmFua19hY2NvdW50czpleGVjdXRlIGV4dGVybmFsX3dhbGxldHM6cmVhZCBleHRlcm5hbF93YWxsZXRzOmV4ZWN1dGUgd29ya2Zsb3dzOnJlYWQgd29ya2Zsb3dzOmV4ZWN1dGUgZGVwb3NpdF9hZGRyZXNzZXM6cmVhZCBkZXBvc2l0X2FkZHJlc3NlczpleGVjdXRlIGRlcG9zaXRfYmFua19hY2NvdW50czpyZWFkIGRlcG9zaXRfYmFua19hY2NvdW50czpleGVjdXRlIGludm9pY2VzOnJlYWQgaW52b2ljZXM6d3JpdGUgaW52b2ljZXM6ZXhlY3V0ZSBpZGVudGl0eV92ZXJpZmljYXRpb25zOnJlYWQgaWRlbnRpdHlfdmVyaWZpY2F0aW9uczp3cml0ZSBpZGVudGl0eV92ZXJpZmljYXRpb25zOmV4ZWN1dGUgZmlsZXM6cmVhZCBmaWxlczpleGVjdXRlXFxcIiAgIH1cXCcgLUggXFxcIkNvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vanNvblxcXCIgICMgV2hlbiB1c2luZyBPcmdhbml6YXRpb24gY3JlZGVudGlhbHMgc2V0IGBzY29wZWAgdG8gXFwnb3JnYW5pemF0aW9uczpyZWFkIG9yZ2FuaXphdGlvbnM6d3JpdGUgb3JnYW5pemF0aW9uX2FwcGxpY2F0aW9uczpleGVjdXRlIGJhbmtzOnJlYWQgYmFua3M6d3JpdGUgYmFua3M6ZXhlY3V0ZSBiYW5rX2FwcGxpY2F0aW9uczpleGVjdXRlIHVzZXJzOnJlYWQgdXNlcnM6ZXhlY3V0ZSBjb3VudGVycGFydGllczpyZWFkIGN1c3RvbWVyczpyZWFkIGFjY291bnRzOnJlYWQgcHJpY2VzOnJlYWQgcXVvdGVzOmV4ZWN1dGUgcXVvdGVzOnJlYWQgdHJhZGVzOmV4ZWN1dGUgdHJhZGVzOnJlYWQgdHJhbnNmZXJzOnJlYWQgdHJhbnNmZXJzOmV4ZWN1dGUgZXh0ZXJuYWxfYmFua19hY2NvdW50czpyZWFkIGV4dGVybmFsX3dhbGxldHM6cmVhZCB3b3JrZmxvd3M6cmVhZCBkZXBvc2l0X2FkZHJlc3NlczpyZWFkIGRlcG9zaXRfYmFua19hY2NvdW50czpyZWFkIGludm9pY2VzOnJlYWQgc3Vic2NyaXB0aW9uczpyZWFkIHN1YnNjcmlwdGlvbnM6d3JpdGUgc3Vic2NyaXB0aW9uczpleGVjdXRlIHN1YnNjcmlwdGlvbl9ldmVudHM6cmVhZCBzdWJzY3JpcHRpb25fZXZlbnRzOmV4ZWN1dGUgaWRlbnRpdHlfdmVyaWZpY2F0aW9uczpyZWFkIGZpbGVzOnJlYWQgZmlsZXM6ZXhlY3V0ZVxcJyBgYGAgPGZvbnQgY29sb3I9XFxcIm9yYW5nZVxcXCI+KirimqDvuI8gTm90ZTogVGhlIGFib3ZlIGN1cmwgd2lsbCBjcmVhdGUgYSBiZWFyZXIgdG9rZW4gd2l0aCBmdWxsIHNjb3BlIGFjY2Vzcy4gRGVsZXRlIHNjb3BlcyBpZiB5b3VcXCdkIGxpa2UgdG8gcmVzdHJpY3QgYWNjZXNzLioqPC9mb250PiAgIyMgQXV0aGVudGljYXRpb24gU2NvcGVzICBUaGUgQ3licmlkIHBsYXRmb3JtIHN1cHBvcnRzIHRoZSB1c2Ugb2Ygc2NvcGVzIHRvIGNvbnRyb2wgdGhlIGxldmVsIG9mIGFjY2VzcyBhIHRva2VuIGlzIGxpbWl0ZWQgdG8uIFNjb3BlcyBkbyBub3QgZ3JhbnQgYWNjZXNzIHRvIHJlc291cmNlczsgaW5zdGVhZCwgdGhleSBwcm92aWRlIGxpbWl0cywgaW4gc3VwcG9ydCBvZiB0aGUgbGVhc3QgcHJpdmlsZWdlIHByaW5jaXBhbC4gIFRoZSBmb2xsb3dpbmcgc2NvcGVzIGFyZSBhdmFpbGFibGUgb24gdGhlIHBsYXRmb3JtIGFuZCBjYW4gYmUgcmVxdWVzdGVkIHdoZW4gZ2VuZXJhdGluZyBlaXRoZXIgYW4gT3JnYW5pemF0aW9uLCBCYW5rIG9yIEN1c3RvbWVyIHRva2VuLiBHZW5lcmFsbHkgc3BlYWtpbmcsIHRoZSBfUmVhZF8gc2NvcGUgaXMgcmVxdWlyZWQgdG8gcmVhZCBhbmQgbGlzdCByZXNvdXJjZXMsIHRoZSBfV3JpdGVfIHNjb3BlIGlzIHJlcXVpcmVkIHRvIHVwZGF0ZSBhIHJlc291cmNlIGFuZCB0aGUgX0V4ZWN1dGVfIHNjb3BlIGlzIHJlcXVpcmVkIHRvIGNyZWF0ZSBhIHJlc291cmNlLiAgfCBSZXNvdXJjZSAgICAgICAgICAgICAgfCBSZWFkIHNjb3BlIChUb2tlbiBUeXBlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgV3JpdGUgc2NvcGUgKFRva2VuIFR5cGUpICAgICAgICAgICAgICAgICAgICAgIHwgRXhlY3V0ZSBzY29wZSAoVG9rZW4gVHlwZSkgICAgICAgICAgICAgICAgICAgICAgIHwgfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgfCBBY2NvdW50ICAgICAgICAgICAgICAgfCBhY2NvdW50czpyZWFkIChPcmdhbml6YXRpb24sIEJhbmssIEN1c3RvbWVyKSAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYWNjb3VudHM6ZXhlY3V0ZSAoQmFuaywgQ3VzdG9tZXIpICAgICAgICAgICAgICAgIHwgfCBCYW5rICAgICAgICAgICAgICAgICAgfCBiYW5rczpyZWFkIChPcmdhbml6YXRpb24sIEJhbmspICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYmFua3M6d3JpdGUgKE9yZ2FuaXphdGlvbiwgQmFuaykgICAgICAgICAgICAgIHwgYmFua3M6ZXhlY3V0ZSAoT3JnYW5pemF0aW9uKSAgICAgICAgICAgICAgICAgICAgIHwgfCBDdXN0b21lciAgICAgICAgICAgICAgfCBjdXN0b21lcnM6cmVhZCAoT3JnYW5pemF0aW9uLCBCYW5rLCBDdXN0b21lcikgICAgICAgICAgICAgIHwgY3VzdG9tZXJzOndyaXRlIChCYW5rLCBDdXN0b21lcikgICAgICAgICAgICAgIHwgY3VzdG9tZXJzOmV4ZWN1dGUgKEJhbmspICAgICAgICAgICAgICAgICAgICAgICAgIHwgfCBDb3VudGVycGFydHkgICAgICAgICAgfCBjb3VudGVycGFydGllczpyZWFkIChPcmdhbml6YXRpb24sIEJhbmssIEN1c3RvbWVyKSAgICAgICAgIHwgY291bnRlcnBhcnRpZXM6d3JpdGUgKEJhbmssIEN1c3RvbWVyKSAgICAgICAgIHwgY291bnRlcnBhcnRpZXM6ZXhlY3V0ZSAoQmFuaykgICAgICAgICAgICAgICAgICAgIHwgfCBEZXBvc2l0IEFkZHJlc3MgICAgICAgfCBkZXBvc2l0X2FkZHJlc3NlczpyZWFkIChPcmdhbml6YXRpb24sIEJhbmssIEN1c3RvbWVyKSAgICAgIHwgZGVwb3NpdF9hZGRyZXNzZXM6d3JpdGUgKEJhbmssIEN1c3RvbWVyKSAgICAgIHwgZGVwb3NpdF9hZGRyZXNzZXM6ZXhlY3V0ZSAoQmFuaywgQ3VzdG9tZXIpICAgICAgIHwgfCBFeHRlcm5hbCBCYW5rIEFjY291bnQgfCBleHRlcm5hbF9iYW5rX2FjY291bnRzOnJlYWQgKE9yZ2FuaXphdGlvbiwgQmFuaywgQ3VzdG9tZXIpIHwgZXh0ZXJuYWxfYmFua19hY2NvdW50czp3cml0ZSAoQmFuaywgQ3VzdG9tZXIpIHwgZXh0ZXJuYWxfYmFua19hY2NvdW50czpleGVjdXRlIChCYW5rLCBDdXN0b21lcikgIHwgfCBFeHRlcm5hbCBXYWxsZXQgICAgICAgfCBleHRlcm5hbF93YWxsZXQ6cmVhZCAoT3JnYW5pemF0aW9uLCBCYW5rLCBDdXN0b21lcikgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZXh0ZXJuYWxfd2FsbGV0OmV4ZWN1dGUgKEJhbmssIEN1c3RvbWVyKSAgICAgICAgIHwgfCBPcmdhbml6YXRpb24gICAgICAgICAgfCBvcmdhbml6YXRpb25zOnJlYWQgKE9yZ2FuaXphdGlvbikgICAgICAgICAgICAgICAgICAgICAgICAgIHwgb3JnYW5pemF0aW9uczp3cml0ZSAoT3JnYW5pemF0aW9uKSAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgfCBVc2VyICAgICAgICAgICAgICAgICAgfCB1c2VyczpyZWFkIChPcmdhbml6YXRpb24pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdXNlcnM6ZXhlY3V0ZSAoT3JnYW5pemF0aW9uKSAgICAgICAgICAgICAgICAgICAgIHwgfCBQcmljZSAgICAgICAgICAgICAgICAgfCBwcmljZXM6cmVhZCAoQmFuaywgQ3VzdG9tZXIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgfCBRdW90ZSAgICAgICAgICAgICAgICAgfCBxdW90ZXM6cmVhZCAoT3JnYW5pemF0aW9uLCBCYW5rLCBDdXN0b21lcikgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcXVvdGVzOmV4ZWN1dGUgKE9yZ2FuaXphdGlvbiwgQmFuaywgQ3VzdG9tZXIpICAgIHwgfCBUcmFkZSAgICAgICAgICAgICAgICAgfCB0cmFkZXM6cmVhZCAoT3JnYW5pemF0aW9uLCBCYW5rLCBDdXN0b21lcikgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdHJhZGVzOmV4ZWN1dGUgKE9yZ2FuaXphdGlvbiwgQmFuaywgQ3VzdG9tZXIpICAgIHwgfCBUcmFuc2ZlciAgICAgICAgICAgICAgfCB0cmFuc2ZlcnM6cmVhZCAoT3JnYW5pemF0aW9uLCBCYW5rLCBDdXN0b21lcikgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdHJhbnNmZXJzOmV4ZWN1dGUgKE9yZ2FuaXphdGlvbiwgQmFuaywgQ3VzdG9tZXIpIHwgfCBXb3JrZmxvdyAgICAgICAgICAgICAgfCB3b3JrZmxvd3M6cmVhZCAoT3JnYW5pemF0aW9uLCBCYW5rLCBDdXN0b21lcikgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgd29ya2Zsb3dzOmV4ZWN1dGUgKEJhbmssIEN1c3RvbWVyKSAgICAgICAgICAgICAgIHwgfCBJbnZvaWNlICAgICAgICAgICAgICAgfCBpbnZvaWNlczpyZWFkIChPcmdhbml6YXRpb24sIEJhbmssIEN1c3RvbWVyKSAgICAgICAgICAgICAgIHwgaW52b2ljZXM6d3JpdGUgKEJhbmssIEN1c3RvbWVyKSAgICAgICAgICAgICAgIHwgaW52b2ljZXM6ZXhlY3V0ZSAoQmFuaywgQ3VzdG9tZXIpICAgICAgICAgICAgICAgIHwgICMjIEF2YWlsYWJsZSBFbmRwb2ludHMgIFRoZSBhdmFpbGFibGUgQVBJcyBmb3IgdGhlIFtJZGVudGl0eV0oaHR0cHM6Ly9pZC5wcm9kdWN0aW9uLmN5YnJpZC5hcHAvYXBpL3NjaGVtYS9zd2FnZ2VyLXVpKSwgW09yZ2FuaXphdGlvbl0oaHR0cHM6Ly9vcmdhbml6YXRpb24ucHJvZHVjdGlvbi5jeWJyaWQuYXBwL2FwaS9zY2hlbWEvc3dhZ2dlci11aSkgYW5kIFtCYW5rXShodHRwczovL2JhbmsucHJvZHVjdGlvbi5jeWJyaWQuYXBwL2FwaS9zY2hlbWEvc3dhZ2dlci11aSkgQVBJIHNlcnZpY2VzIGFyZSBsaXN0ZWQgYmVsb3c6ICB8IEFQSSBTZXJ2aWNlICB8IE1vZGVsICAgICAgICAgICAgICAgIHwgQVBJIEVuZHBvaW50IFBhdGggICAgICAgICAgICAgIHwgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHwtLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgfCBJZGVudGl0eSAgICAgfCBCYW5rICAgICAgICAgICAgICAgICB8IC9hcGkvYmFua19hcHBsaWNhdGlvbnMgICAgICAgICB8IENyZWF0ZSBhbmQgbGlzdCBiYW5rcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB8IElkZW50aXR5ICAgICB8IEN1c3RvbWVyVG9rZW4gICAgICAgIHwgL2FwaS9jdXN0b21lcl90b2tlbnMgICAgICAgICAgIHwgQ3JlYXRlIGN1c3RvbWVyIEpXVCBhY2Nlc3MgdG9rZW5zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHwgSWRlbnRpdHkgICAgIHwgT3JnYW5pemF0aW9uICAgICAgICAgfCAvYXBpL29yZ2FuaXphdGlvbl9hcHBsaWNhdGlvbnMgfCBDcmVhdGUgYW5kIGxpc3Qgb3JnYW5pemF0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgfCBJZGVudGl0eSAgICAgfCBPcmdhbml6YXRpb24gICAgICAgICB8IC9hcGkvdXNlcnMgICAgICAgICAgICAgICAgICAgICB8IENyZWF0ZSBhbmQgbGlzdCBvcmdhbml6YXRpb24gdXNlcnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB8IE9yZ2FuaXphdGlvbiB8IE9yZ2FuaXphdGlvbiAgICAgICAgIHwgL2FwaS9vcmdhbml6YXRpb25zICAgICAgICAgICAgIHwgQVBJcyB0byByZXRyaWV2ZSBhbmQgdXBkYXRlIG9yZ2FuaXphdGlvbiBuYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHwgQmFuayAgICAgICAgIHwgQWNjb3VudCAgICAgICAgICAgICAgfCAvYXBpL2FjY291bnRzICAgICAgICAgICAgICAgICAgfCBDcmVhdGUgYW5kIGxpc3QgYWNjb3VudHMsIHdoaWNoIGhvbGQgYSBzcGVjaWZpYyBhc3NldCBmb3IgYSBjdXN0b21lcnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgfCBCYW5rICAgICAgICAgfCBBc3NldCAgICAgICAgICAgICAgICB8IC9hcGkvYXNzZXRzICAgICAgICAgICAgICAgICAgICB8IEdldCBhIGxpc3Qgb2YgYXNzZXRzIHN1cHBvcnRlZCBieSB0aGUgcGxhdGZvcm0gKGV4OiBCVEMsIEVUSCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB8IEJhbmsgICAgICAgICB8IEJhbmsgICAgICAgICAgICAgICAgIHwgL2FwaS9iYW5rcyAgICAgICAgICAgICAgICAgICAgIHwgQ3JlYXRlLCB1cGRhdGUgYW5kIGxpc3QgYmFua3MsIHRoZSBwYXJlbnQgdG8gY3VzdG9tZXJzLCBhY2NvdW50cywgZXRjICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHwgQmFuayAgICAgICAgIHwgQ3VzdG9tZXIgICAgICAgICAgICAgfCAvYXBpL2N1c3RvbWVycyAgICAgICAgICAgICAgICAgfCBDcmVhdGUgYW5kIGxpc3QgY3VzdG9tZXJzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgfCBCYW5rICAgICAgICAgfCBDb3VudGVycGFydHkgICAgICAgICB8IC9hcGkvY291bnRlcnBhcnRpZXMgICAgICAgICAgICB8IENyZWF0ZSBhbmQgbGlzdCBjb3VudGVycGFydGllcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB8IEJhbmsgICAgICAgICB8IERlcG9zaXRBZGRyZXNzICAgICAgIHwgL2FwaS9kZXBvc2l0X2FkZHJlc3NlcyAgICAgICAgIHwgQ3JlYXRlLCBnZXQgYW5kIGxpc3QgZGVwb3NpdCBhZGRyZXNzZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHwgQmFuayAgICAgICAgIHwgRXh0ZXJuYWxCYW5rQWNjb3VudCAgfCAvYXBpL2V4dGVybmFsX2JhbmtfYWNjb3VudHMgICAgfCBDcmVhdGUsIGdldCBhbmQgbGlzdCBleHRlcm5hbCBiYW5rIGFjY291bnRzLCB3aGljaCBjb25uZWN0IGN1c3RvbWVyIGJhbmsgYWNjb3VudHMgdG8gdGhlIHBsYXRmb3JtIHwgfCBCYW5rICAgICAgICAgfCBFeHRlcm5hbFdhbGxldCAgICAgICB8IC9hcGkvZXh0ZXJuYWxfd2FsbGV0cyAgICAgICAgICB8IENyZWF0ZSwgZ2V0LCBsaXN0IGFuZCBkZWxldGUgZXh0ZXJuYWwgd2FsbGV0cywgd2hpY2ggY29ubmVjdCBjdXN0b21lciB3YWxsZXRzIHRvIHRoZSBwbGF0Zm9ybSAgICAgfCB8IEJhbmsgICAgICAgICB8IElkZW50aXR5VmVyaWZpY2F0aW9uIHwgL2FwaS9pZGVudGl0eV92ZXJpZmljYXRpb25zICAgIHwgQ3JlYXRlIGFuZCBsaXN0IGlkZW50aXR5IHZlcmlmaWNhdGlvbnMsIHdoaWNoIGFyZSBwZXJmb3JtZWQgb24gY3VzdG9tZXJzIGZvciBLWUMgICAgICAgICAgICAgICAgICB8IHwgQmFuayAgICAgICAgIHwgSW52b2ljZSAgICAgICAgICAgICAgfCAvYXBpL2ludm9pY2VzICAgICAgICAgICAgICAgICAgfCBDcmVhdGUsIGdldCwgY2FuY2VsIGFuZCBsaXN0IGludm9pY2VzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgfCBCYW5rICAgICAgICAgfCBQYXltZW50SW5zdHJ1Y3Rpb24gICB8IC9hcGkvcGF5bWVudF9pbnN0cnVjdGlvbnMgICAgICB8IENyZWF0ZSwgZ2V0IGFuZCBsaXN0IHBheW1lbnQgaW5zdHJ1Y3Rpb25zIGZvciBpbnZvaWNlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB8IEJhbmsgICAgICAgICB8IFByaWNlICAgICAgICAgICAgICAgIHwgL2FwaS9wcmljZXMgICAgICAgICAgICAgICAgICAgIHwgR2V0IHRoZSBjdXJyZW50IHByaWNlcyBmb3IgYXNzZXRzIG9uIHRoZSBwbGF0Zm9ybSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHwgQmFuayAgICAgICAgIHwgUXVvdGUgICAgICAgICAgICAgICAgfCAvYXBpL3F1b3RlcyAgICAgICAgICAgICAgICAgICAgfCBDcmVhdGUgYW5kIGxpc3QgcXVvdGVzLCB3aGljaCBhcmUgcmVxdWlyZWQgdG8gZXhlY3V0ZSB0cmFkZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgfCBCYW5rICAgICAgICAgfCBTeW1ib2wgICAgICAgICAgICAgICB8IC9hcGkvc3ltYm9scyAgICAgICAgICAgICAgICAgICB8IEdldCBhIGxpc3Qgb2Ygc3ltYm9scyBzdXBwb3J0ZWQgZm9yIHRyYWRlIChleDogQlRDLVVTRCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB8IEJhbmsgICAgICAgICB8IFRyYWRlICAgICAgICAgICAgICAgIHwgL2FwaS90cmFkZXMgICAgICAgICAgICAgICAgICAgIHwgQ3JlYXRlIGFuZCBsaXN0IHRyYWRlcywgd2hpY2ggYnV5IG9yIHNlbGwgY3J5cHRvY3VycmVuY3kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHwgQmFuayAgICAgICAgIHwgVHJhbnNmZXIgICAgICAgICAgICAgfCAvYXBpL3RyYW5zZmVycyAgICAgICAgICAgICAgICAgfCBDcmVhdGUsIGdldCBhbmQgbGlzdCB0cmFuc2ZlcnMgKGUuZy4sIGZ1bmRpbmcsIGJvb2spICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgfCBCYW5rICAgICAgICAgfCBXb3JrZmxvdyAgICAgICAgICAgICB8IC9hcGkvd29ya2Zsb3dzICAgICAgICAgICAgICAgICB8IENyZWF0ZSwgZ2V0IGFuZCBsaXN0IHdvcmtmbG93cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIyMgVW5kZXJzdGFuZGluZyBPYmplY3QgTW9kZWxzICYgRW5kcG9pbnRzICAqKk9yZ2FuaXphdGlvbnMqKiAgQW4gYE9yZ2FuaXphdGlvbmAgaXMgbWVhbnQgdG8gcmVwcmVzZW50IHRoZSBvcmdhbml6YXRpb24gcGFydG5lcmluZyB3aXRoIEN5YnJpZCB0byB1c2Ugb3VyIHBsYXRmb3JtLiAgQW4gYE9yZ2FuaXphdGlvbmAgdHlwaWNhbGx5IGRvZXMgbm90IGRpcmVjdGx5IGludGVyYWN0IHdpdGggYGN1c3RvbWVyc2AuIEluc3RlYWQsIGFuIE9yZ2FuaXphdGlvbiBoYXMgb25lIG9yIG1vcmUgYGJhbmtzYCwgd2hpY2ggZW5jb21wYXNzIHRoZSBmaW5hbmNpYWwgc2VydmljZSBvZmZlcmluZ3Mgb2YgdGhlIHBsYXRmb3JtLiAgKipCYW5rcyoqICBBIGBCYW5rYCBpcyBvd25lZCBieSBhbiBgT3JnYW5pemF0aW9uYCBhbmQgY2FuIGJlIHRob3VnaHQgb2YgYXMgYW4gZW52aXJvbm1lbnQgb3IgY29udGFpbmVyIGZvciBgY3VzdG9tZXJzYCBhbmQgcHJvZHVjdCBvZmZlcmluZ3MuIEJhbmtzIGFyZSBjcmVhdGVkIGluIGVpdGhlciBgU2FuZGJveGAgb3IgYFByb2R1Y3Rpb25gIG1vZGUsIHdoZXJlIGBTYW5kYm94YCBpcyB0aGUgZW52aXJvbm1lbnQgdGhhdCB5b3Ugd291bGQgdGVzdCwgcHJvdG90eXBlIGFuZCBidWlsZCBpbiBwcmlvciB0byBtb3ZpbmcgdG8gYFByb2R1Y3Rpb25gLiAgQW4gYE9yZ2FuaXphdGlvbmAgY2FuIGhhdmUgbXVsdGlwbGUgYGJhbmtzYCwgaW4gZWl0aGVyIGBTYW5kYm94YCBvciBgUHJvZHVjdGlvbmAgZW52aXJvbm1lbnRzLiBBIGBTYW5kYm94IEJhbmtgIHdpbGwgYmUgYmFja2VkIGJ5IHN0dWJiZWQgZGF0YSBhbmQgcHJvY2VzcyBmbG93cy4gRm9yIGluc3RhbmNlLCBmdW5kaW5nIHNvdXJjZSB0cmFuc2ZlciBwcm9jZXNzZXMgYXMgd2VsbCBhcyB0cmFkZXMgd2lsbCBiZSBzaW11bGF0ZWQgcmF0aGVyIHRoYW4gcGVyZm9ybWVkLCBob3dldmVyIGFzc2V0IHByaWNlcyBhcmUgcmVwcmVzZW50YXRpdmUgb2YgcmVhbC13b3JsZCB2YWx1ZXMuIFlvdSBoYXZlIGFuIHVubGltaXRlZCBhbW91bnQgb2Ygc2ltdWxhdGVkIGZpYXQgY3VycmVuY3kgZm9yIHRlc3RpbmcgcHVycG9zZXMuICAqKkN1c3RvbWVycyoqICBgQ3VzdG9tZXJzYCByZXByZXNlbnQgeW91ciBiYW5raW5nIHVzZXJzIG9uIHRoZSBwbGF0Zm9ybS4gQXQgcHJlc2VudCwgd2Ugb2ZmZXIgc3VwcG9ydCBmb3IgYEluZGl2aWR1YWxzYCBhcyBDdXN0b21lcnMuICBgQ3VzdG9tZXJzYCBtdXN0IGJlIHZlcmlmaWVkIChpLmUuLCBLWUNcXCdkKSBpbiBvdXIgc3lzdGVtIGJlZm9yZSB0aGV5IGNhbiBwbGF5IGFueSBwYXJ0IG9uIHRoZSBwbGF0Zm9ybSwgd2hpY2ggbWVhbnMgdGhleSBtdXN0IGhhdmUgYW4gYXNzb2NpYXRlZCBhbmQgYSBwYXNzaW5nIGBJZGVudGl0eSBWZXJpZmljYXRpb25gLiBTZWUgdGhlIElkZW50aXR5IFZlcmlmaWNhdGlvbnMgc2VjdGlvbiBmb3IgbW9yZSBkZXRhaWxzIG9uIGhvdyBhIGN1c3RvbWVyIGNhbiBiZSB2ZXJpZmllZC4gIGBDdXN0b21lcnNgIG11c3QgYWxzbyBoYXZlIGFuIGBBY2NvdW50YCB0byBiZSBhYmxlIHRvIHRyYW5zYWN0LCBpbiB0aGUgZGVzaXJlZCBhc3NldCBjbGFzcy4gU2VlIHRoZSBBY2NvdW50cyBBUElzIGZvciBtb3JlIGRldGFpbHMgb24gc2V0dGluZyB1cCBhY2NvdW50cyBmb3IgdGhlIGN1c3RvbWVyLiBcbiAqXG4gKiBUaGUgdmVyc2lvbiBvZiB0aGUgT3BlbkFQSSBkb2N1bWVudDogdjAuMTIzLjIxNFxuICogQ29udGFjdDogc3VwcG9ydEBjeWJyaWQuYXBwXG4gKlxuICogTk9URTogVGhpcyBjbGFzcyBpcyBhdXRvIGdlbmVyYXRlZCBieSBPcGVuQVBJIEdlbmVyYXRvciAoaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoKS5cbiAqIGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaFxuICogRG8gbm90IGVkaXQgdGhlIGNsYXNzIG1hbnVhbGx5LlxuICovXG5cblxuLyoqXG4gKiBTdXBwb3J0ZWQgcGF5b3V0IHN5bWJvbHMgZGV0YWlscy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQb3N0U3VwcG9ydGVkUGF5b3V0U3ltYm9sc0JhbmtNb2RlbCB7IFxuICAgIC8qKlxuICAgICAqIFRoZSBwcmltYXJ5IGFzc2V0IG9mIHRoZSBwYXlvdXQgc3ltYm9sLCBlLmcuLCBNWE4uXG4gICAgICovXG4gICAgcHJpbWFyeV9hc3NldDogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFRoZSBjb3VudGVyIGFzc2V0IG9mIHRoZSBwYXlvdXQgc3ltYm9sLCBlLmcuLCBVU0QuXG4gICAgICovXG4gICAgY291bnRlcl9hc3NldDogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFRoZSBJU08gMzE2NiBjb3VudHJ5IDItQWxwaGEgY291bnRyeSBjb2RlIGlzIHBlcm1pdHRlZCBpbiwgZS5nLiwgTVguXG4gICAgICovXG4gICAgY291bnRyeV9jb2RlOiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogVGhlIHBhcnRpY2lwYW50cyB0aGUgc3ltYm9sIGlzIHBlcm1pdHRlZCBmb3IuXG4gICAgICovXG4gICAgcGFydGljaXBhbnRzX3R5cGU6IFBvc3RTdXBwb3J0ZWRQYXlvdXRTeW1ib2xzQmFua01vZGVsLlBhcnRpY2lwYW50c1R5cGVFbnVtO1xuICAgIC8qKlxuICAgICAqIFRoZSByb3V0ZSB0aGUgc3ltYm9sIGlzIHBlcm1pdHRlZCBmb3IuXG4gICAgICovXG4gICAgcm91dGU6IFBvc3RTdXBwb3J0ZWRQYXlvdXRTeW1ib2xzQmFua01vZGVsLlJvdXRlRW51bTtcbn1cbmV4cG9ydCBuYW1lc3BhY2UgUG9zdFN1cHBvcnRlZFBheW91dFN5bWJvbHNCYW5rTW9kZWwge1xuICAgIGV4cG9ydCB0eXBlIFBhcnRpY2lwYW50c1R5cGVFbnVtID0gJ0MyQycgfCAnQzJCJyB8ICdCMkMnIHwgJ0IyQic7XG4gICAgZXhwb3J0IGNvbnN0IFBhcnRpY2lwYW50c1R5cGVFbnVtID0ge1xuICAgICAgICBDMkM6ICdDMkMnIGFzIFBhcnRpY2lwYW50c1R5cGVFbnVtLFxuICAgICAgICBDMkI6ICdDMkInIGFzIFBhcnRpY2lwYW50c1R5cGVFbnVtLFxuICAgICAgICBCMkM6ICdCMkMnIGFzIFBhcnRpY2lwYW50c1R5cGVFbnVtLFxuICAgICAgICBCMkI6ICdCMkInIGFzIFBhcnRpY2lwYW50c1R5cGVFbnVtXG4gICAgfTtcbiAgICBleHBvcnQgdHlwZSBSb3V0ZUVudW0gPSAnYmFua19hY2NvdW50JyB8ICdtb2JpbGVfd2FsbGV0JztcbiAgICBleHBvcnQgY29uc3QgUm91dGVFbnVtID0ge1xuICAgICAgICBCYW5rQWNjb3VudDogJ2JhbmtfYWNjb3VudCcgYXMgUm91dGVFbnVtLFxuICAgICAgICBNb2JpbGVXYWxsZXQ6ICdtb2JpbGVfd2FsbGV0JyBhcyBSb3V0ZUVudW1cbiAgICB9O1xufVxuXG5cbiJdfQ==
25
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9zdFN1cHBvcnRlZFBheW91dFN5bWJvbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9tb2RlbC9wb3N0U3VwcG9ydGVkUGF5b3V0U3ltYm9scy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7OztHQVVHO0FBNEJILE1BQU0sS0FBVyxtQ0FBbUMsQ0FhbkQ7QUFiRCxXQUFpQixtQ0FBbUM7SUFFbkMsd0RBQW9CLEdBQUc7UUFDaEMsR0FBRyxFQUFFLEtBQTZCO1FBQ2xDLEdBQUcsRUFBRSxLQUE2QjtRQUNsQyxHQUFHLEVBQUUsS0FBNkI7UUFDbEMsR0FBRyxFQUFFLEtBQTZCO0tBQ3JDLENBQUM7SUFFVyw2Q0FBUyxHQUFHO1FBQ3JCLFdBQVcsRUFBRSxjQUEyQjtRQUN4QyxZQUFZLEVBQUUsZUFBNEI7S0FDN0MsQ0FBQztBQUNOLENBQUMsRUFiZ0IsbUNBQW1DLEtBQW5DLG1DQUFtQyxRQWFuRCIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ3licmlkIEJhbmsgQVBJXG4gKiAjIEN5YnJpZCBBUEkgZG9jdW1lbnRhdGlvbiAgV2VsY29tZSB0byBDeWJyaWQsIGFuIGFsbC1pbi1vbmUgY3J5cHRvIHBsYXRmb3JtIHRoYXQgZW5hYmxlcyB5b3UgdG8gZWFzaWx5ICoqYnVpbGQqKiBhbmQgKipsYXVuY2gqKiB3aGl0ZS1sYWJlbCBjcnlwdG8gcHJvZHVjdHMgb3Igc2VydmljZXMuICBJbiB0aGVzZSBkb2N1bWVudHMsIHlvdVxcJ2xsIGZpbmQgZGV0YWlscyBvbiBob3cgb3VyIFJFU1QgQVBJIG9wZXJhdGVzIGFuZCBnZW5lcmFsbHkgaG93IG91ciBwbGF0Zm9ybSBmdW5jdGlvbnMuICBJZiB5b3VcXCdyZSBsb29raW5nIGZvciBvdXIgVUkgU0RLIFdpZGdldHMgZm9yIFdlYiBvciBNb2JpbGUgKGlPUy9BbmRyb2lkKSwgZ2VuZXJhdGVkIEFQSSBjbGllbnRzLCBvciBkZW1vIGFwcGxpY2F0aW9ucywgaGVhZCBvdmVyIHRvIG91ciBbR2l0aHViIHJlcG9dKGh0dHBzOi8vZ2l0aHViLmNvbS9DeWJyaWQtYXBwKS4gIPCfkqEgV2UgcmVjb21tZW5kIGJvb2ttYXJraW5nIHRoZSBbQ3licmlkIExpbmtUcmVlXShodHRwczovL2xpbmt0ci5lZS9jeWJyaWR0ZWNobm9sb2dpZXMpIHdoaWNoIGNvbnRhaW5zIG1hbnkgaGVscGZ1bCBsaW5rcyB0byBwbGF0Zm9ybSByZXNvdXJjZXMuICAjIyBHZXR0aW5nIFN0YXJ0ZWQgIFRoaXMgaXMgQ3licmlkXFwncyBwdWJsaWMgaW50ZXJhY3RpdmUgQVBJIGRvY3VtZW50YXRpb24sIHdoaWNoIGFsbG93cyB5b3UgdG8gZnVsbHkgdGVzdCBvdXIgQVBJcy4gSWYgeW91XFwnZCBsaWtlIHRvIHVzZSBhIGRpZmZlcmVudCB0b29sIHRvIGV4ZXJjaXNlIG91ciBBUElzLCB5b3UgY2FuIGRvd25sb2FkIHRoZSBbT3BlbiBBUEkgMy4wIHlhbWxdKGh0dHBzOi8vYmFuay5wcm9kdWN0aW9uLmN5YnJpZC5hcHAvYXBpL3NjaGVtYS92MS9zd2FnZ2VyLnlhbWwpIGZvciBpbXBvcnQuICBJZiB5b3VcXCdyZSBuZXcgdG8gb3VyIEFQSXMgYW5kIHRoZSBDeWJyaWQgUGxhdGZvcm0sIGZvbGxvdyB0aGUgYmVsb3cgZ3VpZGVzIHRvIGdldCBzZXQgdXAgYW5kIGZhbWlsaWFyIHdpdGggdGhlIHBsYXRmb3JtOiAgMS4gW0ludHJvZHVjdGlvbl0oaHR0cHM6Ly9kb2NzLmN5YnJpZC54eXovZG9jcy9pbnRyb2R1Y3Rpb24pIDIuIFtQbGF0Zm9ybSBJbnRyb2R1Y3Rpb25dKGh0dHBzOi8vZG9jcy5jeWJyaWQueHl6L2RvY3MvaG93LWlzLWN5YnJpZC1hcmNoaXRlY3RlZCkgMy4gW1Rlc3Rpbmcgd2l0aCBIb3N0ZWQgV2ViIERlbW8gQXBwXShodHRwczovL2RvY3MuY3licmlkLnh5ei9kb2NzL3Rlc3Rpbmctd2l0aC1ob3N0ZWQtd2ViLWRlbW8tYXBwKSAgSW4gW0dldHRpbmcgU3RhcnRlZCBpbiB0aGUgQ3licmlkIFNhbmRib3hdKGh0dHBzOi8vZG9jcy5jeWJyaWQueHl6L2RvY3MvaG93LWRvLWktZ2V0LXN0YXJ0ZWQtd2l0aC10aGUtc2FuZGJveCksIHdlIHdhbGsgeW91IHRocm91Z2ggaG93IHRvIHVzZSB0aGUgW0N5YnJpZCBTYW5kYm94XShodHRwczovL2lkLnNhbmRib3guY3licmlkLmFwcC8pIHRvIGNyZWF0ZSBhIHRlc3QgYmFuayBhbmQgZ2VuZXJhdGUgQVBJIGtleXMuIEluIFtHZXR0aW5nIFJlYWR5IGZvciBUcmFkaW5nXShodHRwczovL2tiLmN5YnJpZC54eXovZ2V0dGluZy1yZWFkeS1mb3ItdHJhZGluZyksIHdlIHdhbGsgdGhyb3VnaCBjcmVhdGluZyBjdXN0b21lcnMsIGN1c3RvbWVyIGlkZW50aXRpZXMsIGFjY291bnRzLCBhcyB3ZWxsIGFzIGV4ZWN1dGluZyBxdW90ZXMgYW5kIHRyYWRlcy4gICMjIFdvcmtpbmcgd2l0aCB0aGUgQ3licmlkIFBsYXRmb3JtICBUaGVyZSBhcmUgdGhyZWUgcHJpbWFyeSB3YXlzIHlvdSBjYW4gaW50ZXJhY3Qgd2l0aCB0aGUgQ3licmlkIHBsYXRmb3JtOiAgMS4gRGlyZWN0bHkgdmlhIG91ciBSRVNUZnVsIEFQSSAodGhpcyBkb2N1bWVudGF0aW9uKSAyLiBVc2luZyBvdXIgQVBJIGNsaWVudHMgYXZhaWxhYmxlIGluIGEgdmFyaWV0eSBvZiBsYW5ndWFnZXMgKFtBbmd1bGFyXShodHRwczovL2dpdGh1Yi5jb20vQ3licmlkLWFwcC9jeWJyaWQtYXBpLWJhbmstYW5ndWxhciksIFtKYXZhXShodHRwczovL2dpdGh1Yi5jb20vQ3licmlkLWFwcC9jeWJyaWQtYXBpLWJhbmstamF2YSksIFtLb3RsaW5dKGh0dHBzOi8vZ2l0aHViLmNvbS9DeWJyaWQtYXBwL2N5YnJpZC1hcGktYmFuay1rb3RsaW4pLCBbUHl0aG9uXShodHRwczovL2dpdGh1Yi5jb20vQ3licmlkLWFwcC9jeWJyaWQtYXBpLWJhbmstcHl0aG9uKSwgW1J1YnldKGh0dHBzOi8vZ2l0aHViLmNvbS9DeWJyaWQtYXBwL2N5YnJpZC1hcGktYmFuay1ydWJ5KSwgW1N3aWZ0XShodHRwczovL2dpdGh1Yi5jb20vQ3licmlkLWFwcC9jeWJyaWQtYXBpLWJhbmstc3dpZnQpIG9yIFtUeXBlc2NyaXB0XShodHRwczovL2dpdGh1Yi5jb20vQ3licmlkLWFwcC9jeWJyaWQtYXBpLWJhbmstdHlwZXNjcmlwdCkpIDMuIEludGVncmF0aW5nIGEgcGxhdGZvcm0gc3BlY2lmaWMgU0RLIChbV2ViXShodHRwczovL2dpdGh1Yi5jb20vQ3licmlkLWFwcC9jeWJyaWQtc2RrLXdlYiksIFtBbmRyb2lkXShodHRwczovL2dpdGh1Yi5jb20vQ3licmlkLWFwcC9jeWJyaWQtc2RrLWFuZHJvaWQpLCBbaU9TXShodHRwczovL2dpdGh1Yi5jb20vQ3licmlkLWFwcC9jeWJyaWQtc2RrLWlvcykpICBPdXIgY29tcGxldGUgc2V0IG9mIEFQSXMgYWxsb3dzIHlvdSB0byBtYW5hZ2UgcmVzb3VyY2VzIGFjcm9zcyB0aHJlZSBkaXN0aW5jdCBhcmVhczogeW91ciBgT3JnYW5pemF0aW9uYCwgeW91ciBgQmFua3NgIGFuZCB5b3VyIGBJZGVudGl0aWVzYC4gRm9yIG1vc3Qgb2YgeW91ciB0ZXN0aW5nIGFuZCBpbnRlcmFjdGlvbiB5b3VcXCdsbCBiZSB1c2luZyB0aGUgYEJhbmtgIEFQSSwgd2hpY2ggaXMgd2hlcmUgdGhlIG1ham9yaXR5IG9mIEFQSXMgcmVzaWRlLiAgKlRoZSBjb21wbGV0ZSBzZXQgb2YgQVBJcyBjYW4gYmUgZm91bmQgb24gdGhlIGZvbGxvd2luZyBwYWdlczoqICB8IEFQSSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgfCBbT3JnYW5pemF0aW9uIEFQSV0oaHR0cHM6Ly9vcmdhbml6YXRpb24ucHJvZHVjdGlvbi5jeWJyaWQuYXBwL2FwaS9zY2hlbWEvc3dhZ2dlci11aSkgICB8IEFQSXMgdG8gbWFuYWdlIG9yZ2FuaXphdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgfCBbQmFuayBBUEldKGh0dHBzOi8vYmFuay5wcm9kdWN0aW9uLmN5YnJpZC5hcHAvYXBpL3NjaGVtYS9zd2FnZ2VyLXVpKSAgICAgICAgICAgICAgICAgICB8IEFQSXMgdG8gbWFuYWdlIGJhbmtzIChhbmQgYWxsIGRvd25zdHJlYW0gY3VzdG9tZXIgYWN0aXZpdHkpIHwgfCBbSWRlbnRpdGllcyBBUEldKGh0dHBzOi8vaWQucHJvZHVjdGlvbi5jeWJyaWQuYXBwL2FwaS9zY2hlbWEvc3dhZ2dlci11aSkgICAgICAgICAgICAgICAgICAgICAgIHwgQVBJcyB0byBtYW5hZ2Ugb3JnYW5pemF0aW9uIGFuZCBiYW5rIGlkZW50aXRpZXMgICAgICAgICAgICAgfCAgRm9yIHF1ZXN0aW9ucyBwbGVhc2UgY29udGFjdCBbU3VwcG9ydF0obWFpbHRvOnN1cHBvcnRAY3licmlkLnh5eikgYXQgYW55IHRpbWUgZm9yIGFzc2lzdGFuY2UsIG9yIGNvbnRhY3QgdGhlIFtQcm9kdWN0IFRlYW1dKG1haWx0bzpwcm9kdWN0QGN5YnJpZC54eXopIGZvciBwcm9kdWN0IHN1Z2dlc3Rpb25zLiAgIyMgQXV0aGVudGljYXRpbmcgd2l0aCB0aGUgQVBJICBUaGUgQ3licmlkIFBsYXRmb3JtIHVzZXMgT0F1dGggMi4wIEJlYXJlciBUb2tlbnMgdG8gYXV0aGVudGljYXRlIHJlcXVlc3RzIHRvIHRoZSBwbGF0Zm9ybS4gQ3JlZGVudGlhbHMgdG8gY3JlYXRlIGBPcmdhbml6YXRpb25gIGFuZCBgQmFua2AgdG9rZW5zIGNhbiBiZSBnZW5lcmF0ZWQgdmlhIHRoZSBbQ3licmlkIFNhbmRib3hdKGh0dHBzOi8vaWQucHJvZHVjdGlvbi5jeWJyaWQuYXBwKS4gQWNjZXNzIHRva2VucyBjYW4gYmUgZ2VuZXJhdGVkIGZvciBhIGBDdXN0b21lcmAgYXMgd2VsbCB2aWEgdGhlIFtDeWJyaWQgSWRQXShodHRwczovL2lkLnByb2R1Y3Rpb24uY3licmlkLmFwcCkgYXMgd2VsbC4gIEFuIGBPcmdhbml6YXRpb25gIGFjY2VzcyB0b2tlbiBhcHBsaWVzIGJyb2FkbHkgdG8gdGhlIHdob2xlIE9yZ2FuaXphdGlvbiBhbmQgYWxsIG9mIGl0cyBgQmFua3NgLCB3aGVyZWFzLCBhIGBCYW5rYCBhY2Nlc3MgdG9rZW4gaXMgc3BlY2lmaWMgdG8gYW4gaW5kaXZpZHVhbCBCYW5rLiBgQ3VzdG9tZXJgIHRva2Vucywgc2ltaWxhcmx5LCBhcmUgc2NvcGVkIHRvIGEgc3BlY2lmaWMgY3VzdG9tZXIgaW4gYSBiYW5rLiAgQm90aCBgT3JnYW5pemF0aW9uYCBhbmQgYEJhbmtgIHRva2VucyBjYW4gYmUgY3JlYXRlZCB1c2luZyB0aGUgT0F1dGggQ2xpZW50IENyZWRlbnRpYWwgR3JhbnQgZmxvdy4gRWFjaCBPcmdhbml6YXRpb24gYW5kIEJhbmsgaGFzIGl0cyBvd24gdW5pcXVlIGBDbGllbnQgSURgIGFuZCBgU2VjcmV0YCB0aGF0IGFsbG93cyBmb3IgbWFjaGluZS10by1tYWNoaW5lIGF1dGhlbnRpY2F0aW9uLiAgQSBgQmFua2AgY2FuIHRoZW4gZ2VuZXJhdGUgYEN1c3RvbWVyYCBhY2Nlc3MgdG9rZW5zIHZpYSBBUEkgdXNpbmcgb3VyIFtJZGVudGl0aWVzIEFQSV0oaHR0cHM6Ly9pZC5wcm9kdWN0aW9uLmN5YnJpZC5hcHAvYXBpL3NjaGVtYS9zd2FnZ2VyLXVpKS4gIDxmb250IGNvbG9yPVxcXCJvcmFuZ2VcXFwiPioq4pqg77iPIE5ldmVyIHNoYXJlIHlvdXIgQ2xpZW50IElEIG9yIFNlY3JldCBwdWJsaWNseSBvciBpbiB5b3VyIHNvdXJjZSBjb2RlIHJlcG9zaXRvcnkuKio8L2ZvbnQ+ICBZb3VyIGBDbGllbnQgSURgIGFuZCBgU2VjcmV0YCBjYW4gYmUgZXhjaGFuZ2VkIGZvciBhIHRpbWUtbGltaXRlZCBgQmVhcmVyIFRva2VuYCBieSBpbnRlcmFjdGluZyB3aXRoIHRoZSBDeWJyaWQgSWRlbnRpdHkgUHJvdmlkZXIgb3IgdGhyb3VnaCBpbnRlcmFjdGluZyB3aXRoIHRoZSAqKkF1dGhvcml6ZSoqIGJ1dHRvbiBpbiB0aGlzIGRvY3VtZW50LiAgVGhlIGZvbGxvd2luZyBjdXJsIGNvbW1hbmQgY2FuIGJlIHVzZWQgdG8gcXVpY2tseSBnZW5lcmF0ZSBhIGBCZWFyZXIgVG9rZW5gIGZvciB1c2UgaW4gdGVzdGluZyB0aGUgQVBJIG9yIGRlbW8gYXBwbGljYXRpb25zLiAgYGBgICMgRXhhbXBsZSByZXF1ZXN0IHdoZW4gdXNpbmcgQmFuayBjcmVkZW50aWFscyBjdXJsIC1YIFBPU1QgaHR0cHM6Ly9pZC5wcm9kdWN0aW9uLmN5YnJpZC5hcHAvb2F1dGgvdG9rZW4gLWQgXFwneyAgICAgXFxcImdyYW50X3R5cGVcXFwiOiBcXFwiY2xpZW50X2NyZWRlbnRpYWxzXFxcIiwgICAgIFxcXCJjbGllbnRfaWRcXFwiOiBcXFwiPFlvdXIgQ2xpZW50IElEPlxcXCIsICAgICBcXFwiY2xpZW50X3NlY3JldFxcXCI6IFxcXCI8WW91ciBTZWNyZXQ+XFxcIiwgICAgIFxcXCJzY29wZVxcXCI6IFxcXCJiYW5rczpyZWFkIGJhbmtzOndyaXRlIGJhbmtfYXBwbGljYXRpb25zOmV4ZWN1dGUgYWNjb3VudHM6cmVhZCBhY2NvdW50czpleGVjdXRlIGNvdW50ZXJwYXJ0aWVzOnJlYWQgY291bnRlcnBhcnRpZXM6d3JpdGUgY291bnRlcnBhcnRpZXM6ZXhlY3V0ZSBjdXN0b21lcnM6cmVhZCBjdXN0b21lcnM6d3JpdGUgY3VzdG9tZXJzOmV4ZWN1dGUgcHJpY2VzOnJlYWQgcXVvdGVzOmV4ZWN1dGUgcXVvdGVzOnJlYWQgdHJhZGVzOmV4ZWN1dGUgdHJhZGVzOnJlYWQgdHJhbnNmZXJzOmV4ZWN1dGUgdHJhbnNmZXJzOnJlYWQgZXh0ZXJuYWxfYmFua19hY2NvdW50czpyZWFkIGV4dGVybmFsX2JhbmtfYWNjb3VudHM6d3JpdGUgZXh0ZXJuYWxfYmFua19hY2NvdW50czpleGVjdXRlIGV4dGVybmFsX3dhbGxldHM6cmVhZCBleHRlcm5hbF93YWxsZXRzOmV4ZWN1dGUgd29ya2Zsb3dzOnJlYWQgd29ya2Zsb3dzOmV4ZWN1dGUgZGVwb3NpdF9hZGRyZXNzZXM6cmVhZCBkZXBvc2l0X2FkZHJlc3NlczpleGVjdXRlIGRlcG9zaXRfYmFua19hY2NvdW50czpyZWFkIGRlcG9zaXRfYmFua19hY2NvdW50czpleGVjdXRlIGludm9pY2VzOnJlYWQgaW52b2ljZXM6d3JpdGUgaW52b2ljZXM6ZXhlY3V0ZSBpZGVudGl0eV92ZXJpZmljYXRpb25zOnJlYWQgaWRlbnRpdHlfdmVyaWZpY2F0aW9uczp3cml0ZSBpZGVudGl0eV92ZXJpZmljYXRpb25zOmV4ZWN1dGUgZmlsZXM6cmVhZCBmaWxlczpleGVjdXRlXFxcIiAgIH1cXCcgLUggXFxcIkNvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vanNvblxcXCIgICMgV2hlbiB1c2luZyBPcmdhbml6YXRpb24gY3JlZGVudGlhbHMgc2V0IGBzY29wZWAgdG8gXFwnb3JnYW5pemF0aW9uczpyZWFkIG9yZ2FuaXphdGlvbnM6d3JpdGUgb3JnYW5pemF0aW9uX2FwcGxpY2F0aW9uczpleGVjdXRlIGJhbmtzOnJlYWQgYmFua3M6d3JpdGUgYmFua3M6ZXhlY3V0ZSBiYW5rX2FwcGxpY2F0aW9uczpleGVjdXRlIHVzZXJzOnJlYWQgdXNlcnM6ZXhlY3V0ZSBjb3VudGVycGFydGllczpyZWFkIGN1c3RvbWVyczpyZWFkIGFjY291bnRzOnJlYWQgcHJpY2VzOnJlYWQgcXVvdGVzOmV4ZWN1dGUgcXVvdGVzOnJlYWQgdHJhZGVzOmV4ZWN1dGUgdHJhZGVzOnJlYWQgdHJhbnNmZXJzOnJlYWQgdHJhbnNmZXJzOmV4ZWN1dGUgZXh0ZXJuYWxfYmFua19hY2NvdW50czpyZWFkIGV4dGVybmFsX3dhbGxldHM6cmVhZCB3b3JrZmxvd3M6cmVhZCBkZXBvc2l0X2FkZHJlc3NlczpyZWFkIGRlcG9zaXRfYmFua19hY2NvdW50czpyZWFkIGludm9pY2VzOnJlYWQgc3Vic2NyaXB0aW9uczpyZWFkIHN1YnNjcmlwdGlvbnM6d3JpdGUgc3Vic2NyaXB0aW9uczpleGVjdXRlIHN1YnNjcmlwdGlvbl9ldmVudHM6cmVhZCBzdWJzY3JpcHRpb25fZXZlbnRzOmV4ZWN1dGUgaWRlbnRpdHlfdmVyaWZpY2F0aW9uczpyZWFkIGZpbGVzOnJlYWQgZmlsZXM6ZXhlY3V0ZVxcJyBgYGAgPGZvbnQgY29sb3I9XFxcIm9yYW5nZVxcXCI+KirimqDvuI8gTm90ZTogVGhlIGFib3ZlIGN1cmwgd2lsbCBjcmVhdGUgYSBiZWFyZXIgdG9rZW4gd2l0aCBmdWxsIHNjb3BlIGFjY2Vzcy4gRGVsZXRlIHNjb3BlcyBpZiB5b3VcXCdkIGxpa2UgdG8gcmVzdHJpY3QgYWNjZXNzLioqPC9mb250PiAgIyMgQXV0aGVudGljYXRpb24gU2NvcGVzICBUaGUgQ3licmlkIHBsYXRmb3JtIHN1cHBvcnRzIHRoZSB1c2Ugb2Ygc2NvcGVzIHRvIGNvbnRyb2wgdGhlIGxldmVsIG9mIGFjY2VzcyBhIHRva2VuIGlzIGxpbWl0ZWQgdG8uIFNjb3BlcyBkbyBub3QgZ3JhbnQgYWNjZXNzIHRvIHJlc291cmNlczsgaW5zdGVhZCwgdGhleSBwcm92aWRlIGxpbWl0cywgaW4gc3VwcG9ydCBvZiB0aGUgbGVhc3QgcHJpdmlsZWdlIHByaW5jaXBhbC4gIFRoZSBmb2xsb3dpbmcgc2NvcGVzIGFyZSBhdmFpbGFibGUgb24gdGhlIHBsYXRmb3JtIGFuZCBjYW4gYmUgcmVxdWVzdGVkIHdoZW4gZ2VuZXJhdGluZyBlaXRoZXIgYW4gT3JnYW5pemF0aW9uLCBCYW5rIG9yIEN1c3RvbWVyIHRva2VuLiBHZW5lcmFsbHkgc3BlYWtpbmcsIHRoZSBfUmVhZF8gc2NvcGUgaXMgcmVxdWlyZWQgdG8gcmVhZCBhbmQgbGlzdCByZXNvdXJjZXMsIHRoZSBfV3JpdGVfIHNjb3BlIGlzIHJlcXVpcmVkIHRvIHVwZGF0ZSBhIHJlc291cmNlIGFuZCB0aGUgX0V4ZWN1dGVfIHNjb3BlIGlzIHJlcXVpcmVkIHRvIGNyZWF0ZSBhIHJlc291cmNlLiAgfCBSZXNvdXJjZSAgICAgICAgICAgICAgfCBSZWFkIHNjb3BlIChUb2tlbiBUeXBlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgV3JpdGUgc2NvcGUgKFRva2VuIFR5cGUpICAgICAgICAgICAgICAgICAgICAgIHwgRXhlY3V0ZSBzY29wZSAoVG9rZW4gVHlwZSkgICAgICAgICAgICAgICAgICAgICAgIHwgfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgfCBBY2NvdW50ICAgICAgICAgICAgICAgfCBhY2NvdW50czpyZWFkIChPcmdhbml6YXRpb24sIEJhbmssIEN1c3RvbWVyKSAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYWNjb3VudHM6ZXhlY3V0ZSAoQmFuaywgQ3VzdG9tZXIpICAgICAgICAgICAgICAgIHwgfCBCYW5rICAgICAgICAgICAgICAgICAgfCBiYW5rczpyZWFkIChPcmdhbml6YXRpb24sIEJhbmspICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYmFua3M6d3JpdGUgKE9yZ2FuaXphdGlvbiwgQmFuaykgICAgICAgICAgICAgIHwgYmFua3M6ZXhlY3V0ZSAoT3JnYW5pemF0aW9uKSAgICAgICAgICAgICAgICAgICAgIHwgfCBDdXN0b21lciAgICAgICAgICAgICAgfCBjdXN0b21lcnM6cmVhZCAoT3JnYW5pemF0aW9uLCBCYW5rLCBDdXN0b21lcikgICAgICAgICAgICAgIHwgY3VzdG9tZXJzOndyaXRlIChCYW5rLCBDdXN0b21lcikgICAgICAgICAgICAgIHwgY3VzdG9tZXJzOmV4ZWN1dGUgKEJhbmspICAgICAgICAgICAgICAgICAgICAgICAgIHwgfCBDb3VudGVycGFydHkgICAgICAgICAgfCBjb3VudGVycGFydGllczpyZWFkIChPcmdhbml6YXRpb24sIEJhbmssIEN1c3RvbWVyKSAgICAgICAgIHwgY291bnRlcnBhcnRpZXM6d3JpdGUgKEJhbmssIEN1c3RvbWVyKSAgICAgICAgIHwgY291bnRlcnBhcnRpZXM6ZXhlY3V0ZSAoQmFuaykgICAgICAgICAgICAgICAgICAgIHwgfCBEZXBvc2l0IEFkZHJlc3MgICAgICAgfCBkZXBvc2l0X2FkZHJlc3NlczpyZWFkIChPcmdhbml6YXRpb24sIEJhbmssIEN1c3RvbWVyKSAgICAgIHwgZGVwb3NpdF9hZGRyZXNzZXM6d3JpdGUgKEJhbmssIEN1c3RvbWVyKSAgICAgIHwgZGVwb3NpdF9hZGRyZXNzZXM6ZXhlY3V0ZSAoQmFuaywgQ3VzdG9tZXIpICAgICAgIHwgfCBFeHRlcm5hbCBCYW5rIEFjY291bnQgfCBleHRlcm5hbF9iYW5rX2FjY291bnRzOnJlYWQgKE9yZ2FuaXphdGlvbiwgQmFuaywgQ3VzdG9tZXIpIHwgZXh0ZXJuYWxfYmFua19hY2NvdW50czp3cml0ZSAoQmFuaywgQ3VzdG9tZXIpIHwgZXh0ZXJuYWxfYmFua19hY2NvdW50czpleGVjdXRlIChCYW5rLCBDdXN0b21lcikgIHwgfCBFeHRlcm5hbCBXYWxsZXQgICAgICAgfCBleHRlcm5hbF93YWxsZXQ6cmVhZCAoT3JnYW5pemF0aW9uLCBCYW5rLCBDdXN0b21lcikgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZXh0ZXJuYWxfd2FsbGV0OmV4ZWN1dGUgKEJhbmssIEN1c3RvbWVyKSAgICAgICAgIHwgfCBPcmdhbml6YXRpb24gICAgICAgICAgfCBvcmdhbml6YXRpb25zOnJlYWQgKE9yZ2FuaXphdGlvbikgICAgICAgICAgICAgICAgICAgICAgICAgIHwgb3JnYW5pemF0aW9uczp3cml0ZSAoT3JnYW5pemF0aW9uKSAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgfCBVc2VyICAgICAgICAgICAgICAgICAgfCB1c2VyczpyZWFkIChPcmdhbml6YXRpb24pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdXNlcnM6ZXhlY3V0ZSAoT3JnYW5pemF0aW9uKSAgICAgICAgICAgICAgICAgICAgIHwgfCBQcmljZSAgICAgICAgICAgICAgICAgfCBwcmljZXM6cmVhZCAoQmFuaywgQ3VzdG9tZXIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgfCBRdW90ZSAgICAgICAgICAgICAgICAgfCBxdW90ZXM6cmVhZCAoT3JnYW5pemF0aW9uLCBCYW5rLCBDdXN0b21lcikgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcXVvdGVzOmV4ZWN1dGUgKE9yZ2FuaXphdGlvbiwgQmFuaywgQ3VzdG9tZXIpICAgIHwgfCBUcmFkZSAgICAgICAgICAgICAgICAgfCB0cmFkZXM6cmVhZCAoT3JnYW5pemF0aW9uLCBCYW5rLCBDdXN0b21lcikgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdHJhZGVzOmV4ZWN1dGUgKE9yZ2FuaXphdGlvbiwgQmFuaywgQ3VzdG9tZXIpICAgIHwgfCBUcmFuc2ZlciAgICAgICAgICAgICAgfCB0cmFuc2ZlcnM6cmVhZCAoT3JnYW5pemF0aW9uLCBCYW5rLCBDdXN0b21lcikgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdHJhbnNmZXJzOmV4ZWN1dGUgKE9yZ2FuaXphdGlvbiwgQmFuaywgQ3VzdG9tZXIpIHwgfCBXb3JrZmxvdyAgICAgICAgICAgICAgfCB3b3JrZmxvd3M6cmVhZCAoT3JnYW5pemF0aW9uLCBCYW5rLCBDdXN0b21lcikgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgd29ya2Zsb3dzOmV4ZWN1dGUgKEJhbmssIEN1c3RvbWVyKSAgICAgICAgICAgICAgIHwgfCBJbnZvaWNlICAgICAgICAgICAgICAgfCBpbnZvaWNlczpyZWFkIChPcmdhbml6YXRpb24sIEJhbmssIEN1c3RvbWVyKSAgICAgICAgICAgICAgIHwgaW52b2ljZXM6d3JpdGUgKEJhbmssIEN1c3RvbWVyKSAgICAgICAgICAgICAgIHwgaW52b2ljZXM6ZXhlY3V0ZSAoQmFuaywgQ3VzdG9tZXIpICAgICAgICAgICAgICAgIHwgICMjIEF2YWlsYWJsZSBFbmRwb2ludHMgIFRoZSBhdmFpbGFibGUgQVBJcyBmb3IgdGhlIFtJZGVudGl0eV0oaHR0cHM6Ly9pZC5wcm9kdWN0aW9uLmN5YnJpZC5hcHAvYXBpL3NjaGVtYS9zd2FnZ2VyLXVpKSwgW09yZ2FuaXphdGlvbl0oaHR0cHM6Ly9vcmdhbml6YXRpb24ucHJvZHVjdGlvbi5jeWJyaWQuYXBwL2FwaS9zY2hlbWEvc3dhZ2dlci11aSkgYW5kIFtCYW5rXShodHRwczovL2JhbmsucHJvZHVjdGlvbi5jeWJyaWQuYXBwL2FwaS9zY2hlbWEvc3dhZ2dlci11aSkgQVBJIHNlcnZpY2VzIGFyZSBsaXN0ZWQgYmVsb3c6ICB8IEFQSSBTZXJ2aWNlICB8IE1vZGVsICAgICAgICAgICAgICAgIHwgQVBJIEVuZHBvaW50IFBhdGggICAgICAgICAgICAgIHwgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHwtLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgfCBJZGVudGl0eSAgICAgfCBCYW5rICAgICAgICAgICAgICAgICB8IC9hcGkvYmFua19hcHBsaWNhdGlvbnMgICAgICAgICB8IENyZWF0ZSBhbmQgbGlzdCBiYW5rcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB8IElkZW50aXR5ICAgICB8IEN1c3RvbWVyVG9rZW4gICAgICAgIHwgL2FwaS9jdXN0b21lcl90b2tlbnMgICAgICAgICAgIHwgQ3JlYXRlIGN1c3RvbWVyIEpXVCBhY2Nlc3MgdG9rZW5zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHwgSWRlbnRpdHkgICAgIHwgT3JnYW5pemF0aW9uICAgICAgICAgfCAvYXBpL29yZ2FuaXphdGlvbl9hcHBsaWNhdGlvbnMgfCBDcmVhdGUgYW5kIGxpc3Qgb3JnYW5pemF0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgfCBJZGVudGl0eSAgICAgfCBPcmdhbml6YXRpb24gICAgICAgICB8IC9hcGkvdXNlcnMgICAgICAgICAgICAgICAgICAgICB8IENyZWF0ZSBhbmQgbGlzdCBvcmdhbml6YXRpb24gdXNlcnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB8IE9yZ2FuaXphdGlvbiB8IE9yZ2FuaXphdGlvbiAgICAgICAgIHwgL2FwaS9vcmdhbml6YXRpb25zICAgICAgICAgICAgIHwgQVBJcyB0byByZXRyaWV2ZSBhbmQgdXBkYXRlIG9yZ2FuaXphdGlvbiBuYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHwgQmFuayAgICAgICAgIHwgQWNjb3VudCAgICAgICAgICAgICAgfCAvYXBpL2FjY291bnRzICAgICAgICAgICAgICAgICAgfCBDcmVhdGUgYW5kIGxpc3QgYWNjb3VudHMsIHdoaWNoIGhvbGQgYSBzcGVjaWZpYyBhc3NldCBmb3IgYSBjdXN0b21lcnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgfCBCYW5rICAgICAgICAgfCBBc3NldCAgICAgICAgICAgICAgICB8IC9hcGkvYXNzZXRzICAgICAgICAgICAgICAgICAgICB8IEdldCBhIGxpc3Qgb2YgYXNzZXRzIHN1cHBvcnRlZCBieSB0aGUgcGxhdGZvcm0gKGV4OiBCVEMsIEVUSCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB8IEJhbmsgICAgICAgICB8IEJhbmsgICAgICAgICAgICAgICAgIHwgL2FwaS9iYW5rcyAgICAgICAgICAgICAgICAgICAgIHwgQ3JlYXRlLCB1cGRhdGUgYW5kIGxpc3QgYmFua3MsIHRoZSBwYXJlbnQgdG8gY3VzdG9tZXJzLCBhY2NvdW50cywgZXRjICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHwgQmFuayAgICAgICAgIHwgQ3VzdG9tZXIgICAgICAgICAgICAgfCAvYXBpL2N1c3RvbWVycyAgICAgICAgICAgICAgICAgfCBDcmVhdGUgYW5kIGxpc3QgY3VzdG9tZXJzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgfCBCYW5rICAgICAgICAgfCBDb3VudGVycGFydHkgICAgICAgICB8IC9hcGkvY291bnRlcnBhcnRpZXMgICAgICAgICAgICB8IENyZWF0ZSBhbmQgbGlzdCBjb3VudGVycGFydGllcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB8IEJhbmsgICAgICAgICB8IERlcG9zaXRBZGRyZXNzICAgICAgIHwgL2FwaS9kZXBvc2l0X2FkZHJlc3NlcyAgICAgICAgIHwgQ3JlYXRlLCBnZXQgYW5kIGxpc3QgZGVwb3NpdCBhZGRyZXNzZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHwgQmFuayAgICAgICAgIHwgRXh0ZXJuYWxCYW5rQWNjb3VudCAgfCAvYXBpL2V4dGVybmFsX2JhbmtfYWNjb3VudHMgICAgfCBDcmVhdGUsIGdldCBhbmQgbGlzdCBleHRlcm5hbCBiYW5rIGFjY291bnRzLCB3aGljaCBjb25uZWN0IGN1c3RvbWVyIGJhbmsgYWNjb3VudHMgdG8gdGhlIHBsYXRmb3JtIHwgfCBCYW5rICAgICAgICAgfCBFeHRlcm5hbFdhbGxldCAgICAgICB8IC9hcGkvZXh0ZXJuYWxfd2FsbGV0cyAgICAgICAgICB8IENyZWF0ZSwgZ2V0LCBsaXN0IGFuZCBkZWxldGUgZXh0ZXJuYWwgd2FsbGV0cywgd2hpY2ggY29ubmVjdCBjdXN0b21lciB3YWxsZXRzIHRvIHRoZSBwbGF0Zm9ybSAgICAgfCB8IEJhbmsgICAgICAgICB8IElkZW50aXR5VmVyaWZpY2F0aW9uIHwgL2FwaS9pZGVudGl0eV92ZXJpZmljYXRpb25zICAgIHwgQ3JlYXRlIGFuZCBsaXN0IGlkZW50aXR5IHZlcmlmaWNhdGlvbnMsIHdoaWNoIGFyZSBwZXJmb3JtZWQgb24gY3VzdG9tZXJzIGZvciBLWUMgICAgICAgICAgICAgICAgICB8IHwgQmFuayAgICAgICAgIHwgSW52b2ljZSAgICAgICAgICAgICAgfCAvYXBpL2ludm9pY2VzICAgICAgICAgICAgICAgICAgfCBDcmVhdGUsIGdldCwgY2FuY2VsIGFuZCBsaXN0IGludm9pY2VzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgfCBCYW5rICAgICAgICAgfCBQYXltZW50SW5zdHJ1Y3Rpb24gICB8IC9hcGkvcGF5bWVudF9pbnN0cnVjdGlvbnMgICAgICB8IENyZWF0ZSwgZ2V0IGFuZCBsaXN0IHBheW1lbnQgaW5zdHJ1Y3Rpb25zIGZvciBpbnZvaWNlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB8IEJhbmsgICAgICAgICB8IFByaWNlICAgICAgICAgICAgICAgIHwgL2FwaS9wcmljZXMgICAgICAgICAgICAgICAgICAgIHwgR2V0IHRoZSBjdXJyZW50IHByaWNlcyBmb3IgYXNzZXRzIG9uIHRoZSBwbGF0Zm9ybSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHwgQmFuayAgICAgICAgIHwgUXVvdGUgICAgICAgICAgICAgICAgfCAvYXBpL3F1b3RlcyAgICAgICAgICAgICAgICAgICAgfCBDcmVhdGUgYW5kIGxpc3QgcXVvdGVzLCB3aGljaCBhcmUgcmVxdWlyZWQgdG8gZXhlY3V0ZSB0cmFkZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgfCBCYW5rICAgICAgICAgfCBTeW1ib2wgICAgICAgICAgICAgICB8IC9hcGkvc3ltYm9scyAgICAgICAgICAgICAgICAgICB8IEdldCBhIGxpc3Qgb2Ygc3ltYm9scyBzdXBwb3J0ZWQgZm9yIHRyYWRlIChleDogQlRDLVVTRCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB8IEJhbmsgICAgICAgICB8IFRyYWRlICAgICAgICAgICAgICAgIHwgL2FwaS90cmFkZXMgICAgICAgICAgICAgICAgICAgIHwgQ3JlYXRlIGFuZCBsaXN0IHRyYWRlcywgd2hpY2ggYnV5IG9yIHNlbGwgY3J5cHRvY3VycmVuY3kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHwgQmFuayAgICAgICAgIHwgVHJhbnNmZXIgICAgICAgICAgICAgfCAvYXBpL3RyYW5zZmVycyAgICAgICAgICAgICAgICAgfCBDcmVhdGUsIGdldCBhbmQgbGlzdCB0cmFuc2ZlcnMgKGUuZy4sIGZ1bmRpbmcsIGJvb2spICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgfCBCYW5rICAgICAgICAgfCBXb3JrZmxvdyAgICAgICAgICAgICB8IC9hcGkvd29ya2Zsb3dzICAgICAgICAgICAgICAgICB8IENyZWF0ZSwgZ2V0IGFuZCBsaXN0IHdvcmtmbG93cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIyMgVW5kZXJzdGFuZGluZyBPYmplY3QgTW9kZWxzICYgRW5kcG9pbnRzICAqKk9yZ2FuaXphdGlvbnMqKiAgQW4gYE9yZ2FuaXphdGlvbmAgaXMgbWVhbnQgdG8gcmVwcmVzZW50IHRoZSBvcmdhbml6YXRpb24gcGFydG5lcmluZyB3aXRoIEN5YnJpZCB0byB1c2Ugb3VyIHBsYXRmb3JtLiAgQW4gYE9yZ2FuaXphdGlvbmAgdHlwaWNhbGx5IGRvZXMgbm90IGRpcmVjdGx5IGludGVyYWN0IHdpdGggYGN1c3RvbWVyc2AuIEluc3RlYWQsIGFuIE9yZ2FuaXphdGlvbiBoYXMgb25lIG9yIG1vcmUgYGJhbmtzYCwgd2hpY2ggZW5jb21wYXNzIHRoZSBmaW5hbmNpYWwgc2VydmljZSBvZmZlcmluZ3Mgb2YgdGhlIHBsYXRmb3JtLiAgKipCYW5rcyoqICBBIGBCYW5rYCBpcyBvd25lZCBieSBhbiBgT3JnYW5pemF0aW9uYCBhbmQgY2FuIGJlIHRob3VnaHQgb2YgYXMgYW4gZW52aXJvbm1lbnQgb3IgY29udGFpbmVyIGZvciBgY3VzdG9tZXJzYCBhbmQgcHJvZHVjdCBvZmZlcmluZ3MuIEJhbmtzIGFyZSBjcmVhdGVkIGluIGVpdGhlciBgU2FuZGJveGAgb3IgYFByb2R1Y3Rpb25gIG1vZGUsIHdoZXJlIGBTYW5kYm94YCBpcyB0aGUgZW52aXJvbm1lbnQgdGhhdCB5b3Ugd291bGQgdGVzdCwgcHJvdG90eXBlIGFuZCBidWlsZCBpbiBwcmlvciB0byBtb3ZpbmcgdG8gYFByb2R1Y3Rpb25gLiAgQW4gYE9yZ2FuaXphdGlvbmAgY2FuIGhhdmUgbXVsdGlwbGUgYGJhbmtzYCwgaW4gZWl0aGVyIGBTYW5kYm94YCBvciBgUHJvZHVjdGlvbmAgZW52aXJvbm1lbnRzLiBBIGBTYW5kYm94IEJhbmtgIHdpbGwgYmUgYmFja2VkIGJ5IHN0dWJiZWQgZGF0YSBhbmQgcHJvY2VzcyBmbG93cy4gRm9yIGluc3RhbmNlLCBmdW5kaW5nIHNvdXJjZSB0cmFuc2ZlciBwcm9jZXNzZXMgYXMgd2VsbCBhcyB0cmFkZXMgd2lsbCBiZSBzaW11bGF0ZWQgcmF0aGVyIHRoYW4gcGVyZm9ybWVkLCBob3dldmVyIGFzc2V0IHByaWNlcyBhcmUgcmVwcmVzZW50YXRpdmUgb2YgcmVhbC13b3JsZCB2YWx1ZXMuIFlvdSBoYXZlIGFuIHVubGltaXRlZCBhbW91bnQgb2Ygc2ltdWxhdGVkIGZpYXQgY3VycmVuY3kgZm9yIHRlc3RpbmcgcHVycG9zZXMuICAqKkN1c3RvbWVycyoqICBgQ3VzdG9tZXJzYCByZXByZXNlbnQgeW91ciBiYW5raW5nIHVzZXJzIG9uIHRoZSBwbGF0Zm9ybS4gQXQgcHJlc2VudCwgd2Ugb2ZmZXIgc3VwcG9ydCBmb3IgYEluZGl2aWR1YWxzYCBhcyBDdXN0b21lcnMuICBgQ3VzdG9tZXJzYCBtdXN0IGJlIHZlcmlmaWVkIChpLmUuLCBLWUNcXCdkKSBpbiBvdXIgc3lzdGVtIGJlZm9yZSB0aGV5IGNhbiBwbGF5IGFueSBwYXJ0IG9uIHRoZSBwbGF0Zm9ybSwgd2hpY2ggbWVhbnMgdGhleSBtdXN0IGhhdmUgYW4gYXNzb2NpYXRlZCBhbmQgYSBwYXNzaW5nIGBJZGVudGl0eSBWZXJpZmljYXRpb25gLiBTZWUgdGhlIElkZW50aXR5IFZlcmlmaWNhdGlvbnMgc2VjdGlvbiBmb3IgbW9yZSBkZXRhaWxzIG9uIGhvdyBhIGN1c3RvbWVyIGNhbiBiZSB2ZXJpZmllZC4gIGBDdXN0b21lcnNgIG11c3QgYWxzbyBoYXZlIGFuIGBBY2NvdW50YCB0byBiZSBhYmxlIHRvIHRyYW5zYWN0LCBpbiB0aGUgZGVzaXJlZCBhc3NldCBjbGFzcy4gU2VlIHRoZSBBY2NvdW50cyBBUElzIGZvciBtb3JlIGRldGFpbHMgb24gc2V0dGluZyB1cCBhY2NvdW50cyBmb3IgdGhlIGN1c3RvbWVyLiBcbiAqXG4gKiBUaGUgdmVyc2lvbiBvZiB0aGUgT3BlbkFQSSBkb2N1bWVudDogdjAuMTIzLjIxNlxuICogQ29udGFjdDogc3VwcG9ydEBjeWJyaWQuYXBwXG4gKlxuICogTk9URTogVGhpcyBjbGFzcyBpcyBhdXRvIGdlbmVyYXRlZCBieSBPcGVuQVBJIEdlbmVyYXRvciAoaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoKS5cbiAqIGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaFxuICogRG8gbm90IGVkaXQgdGhlIGNsYXNzIG1hbnVhbGx5LlxuICovXG5cblxuLyoqXG4gKiBTdXBwb3J0ZWQgcGF5b3V0IHN5bWJvbHMgZGV0YWlscy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQb3N0U3VwcG9ydGVkUGF5b3V0U3ltYm9sc0JhbmtNb2RlbCB7IFxuICAgIC8qKlxuICAgICAqIFRoZSBwcmltYXJ5IGFzc2V0IG9mIHRoZSBwYXlvdXQgc3ltYm9sLCBlLmcuLCBNWE4uXG4gICAgICovXG4gICAgcHJpbWFyeV9hc3NldDogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFRoZSBjb3VudGVyIGFzc2V0IG9mIHRoZSBwYXlvdXQgc3ltYm9sLCBlLmcuLCBVU0QuXG4gICAgICovXG4gICAgY291bnRlcl9hc3NldDogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFRoZSBJU08gMzE2NiBjb3VudHJ5IDItQWxwaGEgY291bnRyeSBjb2RlIGlzIHBlcm1pdHRlZCBpbiwgZS5nLiwgTVguXG4gICAgICovXG4gICAgY291bnRyeV9jb2RlOiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogVGhlIHBhcnRpY2lwYW50cyB0aGUgc3ltYm9sIGlzIHBlcm1pdHRlZCBmb3IuXG4gICAgICovXG4gICAgcGFydGljaXBhbnRzX3R5cGU6IFBvc3RTdXBwb3J0ZWRQYXlvdXRTeW1ib2xzQmFua01vZGVsLlBhcnRpY2lwYW50c1R5cGVFbnVtO1xuICAgIC8qKlxuICAgICAqIFRoZSByb3V0ZSB0aGUgc3ltYm9sIGlzIHBlcm1pdHRlZCBmb3IuXG4gICAgICovXG4gICAgcm91dGU6IFBvc3RTdXBwb3J0ZWRQYXlvdXRTeW1ib2xzQmFua01vZGVsLlJvdXRlRW51bTtcbn1cbmV4cG9ydCBuYW1lc3BhY2UgUG9zdFN1cHBvcnRlZFBheW91dFN5bWJvbHNCYW5rTW9kZWwge1xuICAgIGV4cG9ydCB0eXBlIFBhcnRpY2lwYW50c1R5cGVFbnVtID0gJ0MyQycgfCAnQzJCJyB8ICdCMkMnIHwgJ0IyQic7XG4gICAgZXhwb3J0IGNvbnN0IFBhcnRpY2lwYW50c1R5cGVFbnVtID0ge1xuICAgICAgICBDMkM6ICdDMkMnIGFzIFBhcnRpY2lwYW50c1R5cGVFbnVtLFxuICAgICAgICBDMkI6ICdDMkInIGFzIFBhcnRpY2lwYW50c1R5cGVFbnVtLFxuICAgICAgICBCMkM6ICdCMkMnIGFzIFBhcnRpY2lwYW50c1R5cGVFbnVtLFxuICAgICAgICBCMkI6ICdCMkInIGFzIFBhcnRpY2lwYW50c1R5cGVFbnVtXG4gICAgfTtcbiAgICBleHBvcnQgdHlwZSBSb3V0ZUVudW0gPSAnYmFua19hY2NvdW50JyB8ICdtb2JpbGVfd2FsbGV0JztcbiAgICBleHBvcnQgY29uc3QgUm91dGVFbnVtID0ge1xuICAgICAgICBCYW5rQWNjb3VudDogJ2JhbmtfYWNjb3VudCcgYXMgUm91dGVFbnVtLFxuICAgICAgICBNb2JpbGVXYWxsZXQ6ICdtb2JpbGVfd2FsbGV0JyBhcyBSb3V0ZUVudW1cbiAgICB9O1xufVxuXG5cbiJdfQ==