terraconstructs 0.2.1 → 0.2.2

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 (277) hide show
  1. package/.jsii +1081 -229
  2. package/lib/asset-staging.js +1 -1
  3. package/lib/aws/arn.js +1 -1
  4. package/lib/aws/aws-asset-manager.js +1 -1
  5. package/lib/aws/aws-construct.js +1 -1
  6. package/lib/aws/aws-stack.js +1 -1
  7. package/lib/aws/aws-tags.js +2 -2
  8. package/lib/aws/cloudwatch/actions/appscaling.js +1 -1
  9. package/lib/aws/cloudwatch/actions/ec2.js +1 -1
  10. package/lib/aws/cloudwatch/actions/lambda.js +1 -1
  11. package/lib/aws/cloudwatch/actions/sns.js +1 -1
  12. package/lib/aws/cloudwatch/actions/ssm.js +2 -2
  13. package/lib/aws/cloudwatch/alarm-base.js +1 -1
  14. package/lib/aws/cloudwatch/alarm-rule.js +1 -1
  15. package/lib/aws/cloudwatch/alarm-status-widget.js +1 -1
  16. package/lib/aws/cloudwatch/alarm.js +1 -1
  17. package/lib/aws/cloudwatch/composite-alarm.js +1 -1
  18. package/lib/aws/cloudwatch/dashboard.js +1 -1
  19. package/lib/aws/cloudwatch/data-protection-policy.js +3 -3
  20. package/lib/aws/cloudwatch/graph.js +8 -8
  21. package/lib/aws/cloudwatch/layout.js +3 -3
  22. package/lib/aws/cloudwatch/log-destinations/kinesis.js +1 -1
  23. package/lib/aws/cloudwatch/log-destinations/lambda.js +1 -1
  24. package/lib/aws/cloudwatch/log-group.js +1 -1
  25. package/lib/aws/cloudwatch/log-query.js +1 -1
  26. package/lib/aws/cloudwatch/log-stream.js +1 -1
  27. package/lib/aws/cloudwatch/metric-filter.js +1 -1
  28. package/lib/aws/cloudwatch/metric.js +2 -2
  29. package/lib/aws/cloudwatch/pattern.js +3 -3
  30. package/lib/aws/cloudwatch/policy.js +1 -1
  31. package/lib/aws/cloudwatch/query-definition.js +2 -2
  32. package/lib/aws/cloudwatch/stats.js +1 -1
  33. package/lib/aws/cloudwatch/subscription-filter.js +1 -1
  34. package/lib/aws/cloudwatch/text.js +1 -1
  35. package/lib/aws/cloudwatch/variable.js +3 -3
  36. package/lib/aws/cloudwatch/widget.js +1 -1
  37. package/lib/aws/compute/access-log.js +4 -4
  38. package/lib/aws/compute/activity.js +1 -1
  39. package/lib/aws/compute/alb/application-listener-action.js +1 -1
  40. package/lib/aws/compute/alb/application-listener-certificate.js +1 -1
  41. package/lib/aws/compute/alb/application-listener-rule.js +1 -1
  42. package/lib/aws/compute/alb/application-listener.js +1 -1
  43. package/lib/aws/compute/alb/application-load-balancer.js +1 -1
  44. package/lib/aws/compute/alb/application-target-group.js +1 -1
  45. package/lib/aws/compute/alb/conditions.js +1 -1
  46. package/lib/aws/compute/alb/trust-store-revocation.js +1 -1
  47. package/lib/aws/compute/alb/trust-store.js +1 -1
  48. package/lib/aws/compute/api-definition.js +3 -3
  49. package/lib/aws/compute/api-key.js +2 -2
  50. package/lib/aws/compute/architecture.js +1 -1
  51. package/lib/aws/compute/aspects/require-imdsv2-aspect.js +2 -2
  52. package/lib/aws/compute/authorizer.js +1 -1
  53. package/lib/aws/compute/authorizers/identity-source.js +1 -1
  54. package/lib/aws/compute/authorizers/lambda.js +2 -2
  55. package/lib/aws/compute/base-path-mapping.js +1 -1
  56. package/lib/aws/compute/base-scalable-attribute.js +1 -1
  57. package/lib/aws/compute/bastion-host.js +1 -1
  58. package/lib/aws/compute/chain.js +1 -1
  59. package/lib/aws/compute/client-vpn-authorization-rule.js +1 -1
  60. package/lib/aws/compute/client-vpn-endpoint.js +2 -2
  61. package/lib/aws/compute/client-vpn-route.js +2 -2
  62. package/lib/aws/compute/code.js +8 -8
  63. package/lib/aws/compute/condition.js +1 -1
  64. package/lib/aws/compute/connections.js +1 -1
  65. package/lib/aws/compute/cors.js +1 -1
  66. package/lib/aws/compute/deployment.js +1 -1
  67. package/lib/aws/compute/domain-name.js +1 -1
  68. package/lib/aws/compute/event-invoke-config.js +1 -1
  69. package/lib/aws/compute/event-source-filter.js +2 -2
  70. package/lib/aws/compute/event-source-mapping.js +1 -1
  71. package/lib/aws/compute/event-sources/s3-onfailure-destination.js +1 -1
  72. package/lib/aws/compute/event-sources/s3.js +1 -1
  73. package/lib/aws/compute/event-sources/sqs-dlq.js +1 -1
  74. package/lib/aws/compute/event-sources/sqs.js +1 -1
  75. package/lib/aws/compute/fields.js +4 -4
  76. package/lib/aws/compute/function-alias.js +1 -1
  77. package/lib/aws/compute/function-base.js +2 -2
  78. package/lib/aws/compute/function-destinations/event-bridge.js +1 -1
  79. package/lib/aws/compute/function-destinations/function.js +1 -1
  80. package/lib/aws/compute/function-destinations/sqs.js +1 -1
  81. package/lib/aws/compute/function-nodejs/function.js +1 -1
  82. package/lib/aws/compute/function-url.js +1 -1
  83. package/lib/aws/compute/function.js +1 -1
  84. package/lib/aws/compute/gateway-response.js +2 -2
  85. package/lib/aws/compute/handler.js +1 -1
  86. package/lib/aws/compute/instance-types.js +1 -1
  87. package/lib/aws/compute/instance.js +1 -1
  88. package/lib/aws/compute/integration.js +1 -1
  89. package/lib/aws/compute/integrations/aws.js +1 -1
  90. package/lib/aws/compute/integrations/http.js +1 -1
  91. package/lib/aws/compute/integrations/lambda.js +1 -1
  92. package/lib/aws/compute/integrations/mock.js +1 -1
  93. package/lib/aws/compute/integrations/stepfunctions.js +1 -1
  94. package/lib/aws/compute/ip-addresses.js +2 -2
  95. package/lib/aws/compute/ipam.js +1 -1
  96. package/lib/aws/compute/key-pair.js +1 -1
  97. package/lib/aws/compute/lambda-api.js +1 -1
  98. package/lib/aws/compute/launch-template.js +2 -2
  99. package/lib/aws/compute/lb-shared/base-listener.js +1 -1
  100. package/lib/aws/compute/lb-shared/base-load-balancer.js +2 -2
  101. package/lib/aws/compute/lb-shared/base-target-group.js +1 -1
  102. package/lib/aws/compute/lb-shared/listener-certificate.js +1 -1
  103. package/lib/aws/compute/lb-shared/load-balancer-targets.js +2 -2
  104. package/lib/aws/compute/lb-targets/alb-target.js +3 -3
  105. package/lib/aws/compute/lb-targets/instance-target.js +2 -2
  106. package/lib/aws/compute/lb-targets/ip-target.js +1 -1
  107. package/lib/aws/compute/lb-targets/lambda-target.js +1 -1
  108. package/lib/aws/compute/load-balancer.js +3 -3
  109. package/lib/aws/compute/machine-image/amazon-linux-2022.js +2 -2
  110. package/lib/aws/compute/machine-image/amazon-linux-2023.js +2 -2
  111. package/lib/aws/compute/machine-image/amazon-linux2.js +2 -2
  112. package/lib/aws/compute/machine-image/common.js +1 -1
  113. package/lib/aws/compute/machine-image/machine-image.js +8 -8
  114. package/lib/aws/compute/method.js +1 -1
  115. package/lib/aws/compute/model.js +3 -3
  116. package/lib/aws/compute/nat.js +5 -5
  117. package/lib/aws/compute/network-acl-types.js +2 -2
  118. package/lib/aws/compute/network-acl.js +3 -3
  119. package/lib/aws/compute/nlb/network-listener-action.js +1 -1
  120. package/lib/aws/compute/nlb/network-listener.js +1 -1
  121. package/lib/aws/compute/nlb/network-load-balancer.js +1 -1
  122. package/lib/aws/compute/nlb/network-target-group.js +1 -1
  123. package/lib/aws/compute/peer.js +1 -1
  124. package/lib/aws/compute/placement-group.js +1 -1
  125. package/lib/aws/compute/port.js +1 -1
  126. package/lib/aws/compute/prefix-list.js +1 -1
  127. package/lib/aws/compute/requestvalidator.js +1 -1
  128. package/lib/aws/compute/resource.js +3 -3
  129. package/lib/aws/compute/restapi.js +3 -3
  130. package/lib/aws/compute/route.js +8 -8
  131. package/lib/aws/compute/runtime.js +1 -1
  132. package/lib/aws/compute/scalable-target.js +1 -1
  133. package/lib/aws/compute/schedule.js +1 -1
  134. package/lib/aws/compute/security-group.js +1 -1
  135. package/lib/aws/compute/stage.js +2 -2
  136. package/lib/aws/compute/state-graph.js +1 -1
  137. package/lib/aws/compute/state-machine-fragment.js +1 -1
  138. package/lib/aws/compute/state-machine.js +4 -4
  139. package/lib/aws/compute/states/choice.js +1 -1
  140. package/lib/aws/compute/states/custom-state.js +1 -1
  141. package/lib/aws/compute/states/distributed-map/item-batcher.js +1 -1
  142. package/lib/aws/compute/states/distributed-map/item-reader.js +5 -5
  143. package/lib/aws/compute/states/distributed-map/result-writer.js +1 -1
  144. package/lib/aws/compute/states/distributed-map.js +1 -1
  145. package/lib/aws/compute/states/fail.js +1 -1
  146. package/lib/aws/compute/states/map-base.js +1 -1
  147. package/lib/aws/compute/states/map.js +1 -1
  148. package/lib/aws/compute/states/parallel.js +1 -1
  149. package/lib/aws/compute/states/pass.js +2 -2
  150. package/lib/aws/compute/states/state.js +1 -1
  151. package/lib/aws/compute/states/succeed.js +1 -1
  152. package/lib/aws/compute/states/task-base.js +2 -2
  153. package/lib/aws/compute/states/task.js +1 -1
  154. package/lib/aws/compute/states/wait.js +2 -2
  155. package/lib/aws/compute/step-scaling-action.js +1 -1
  156. package/lib/aws/compute/step-scaling-policy.js +1 -1
  157. package/lib/aws/compute/stepfunctions-api.js +1 -1
  158. package/lib/aws/compute/subnet-v2.js +2 -2
  159. package/lib/aws/compute/subnet.js +1 -1
  160. package/lib/aws/compute/target-tracking-scaling-policy.js +1 -1
  161. package/lib/aws/compute/task-credentials.js +1 -1
  162. package/lib/aws/compute/task-input.js +1 -1
  163. package/lib/aws/compute/tasks/aws-sdk/call-aws-service.js +1 -1
  164. package/lib/aws/compute/tasks/eventbridge/put-events.js +1 -1
  165. package/lib/aws/compute/tasks/http/invoke.js +1 -1
  166. package/lib/aws/compute/tasks/lambda/invoke.js +1 -1
  167. package/lib/aws/compute/tasks/sqs/send-message.js +1 -1
  168. package/lib/aws/compute/tasks/stepfunctions/invoke-activity.js +1 -1
  169. package/lib/aws/compute/tasks/stepfunctions/start-execution.js +1 -1
  170. package/lib/aws/compute/types.js +1 -1
  171. package/lib/aws/compute/usage-plan.js +1 -1
  172. package/lib/aws/compute/user-data.js +3 -3
  173. package/lib/aws/compute/volume.js +2 -2
  174. package/lib/aws/compute/vpc-endpoint-service.js +1 -1
  175. package/lib/aws/compute/vpc-endpoint.js +6 -6
  176. package/lib/aws/compute/vpc-flow-logs.js +4 -4
  177. package/lib/aws/compute/vpc-link.js +1 -1
  178. package/lib/aws/compute/vpc-v2-base.js +1 -1
  179. package/lib/aws/compute/vpc-v2.js +2 -2
  180. package/lib/aws/compute/vpc.js +4 -4
  181. package/lib/aws/compute/vpn.js +3 -3
  182. package/lib/aws/edge/certificate.js +1 -1
  183. package/lib/aws/edge/distribution.js +3 -3
  184. package/lib/aws/edge/dns-alias-record-targets.js +6 -6
  185. package/lib/aws/edge/dns-record.js +13 -13
  186. package/lib/aws/edge/dns-zone.js +1 -1
  187. package/lib/aws/edge/function.js +2 -2
  188. package/lib/aws/edge/key-value-store.js +4 -4
  189. package/lib/aws/edge/origin.js +3 -3
  190. package/lib/aws/edge/response-headers-policy.js +1 -1
  191. package/lib/aws/encryption/alias.js +1 -1
  192. package/lib/aws/encryption/key.js +1 -1
  193. package/lib/aws/encryption/via-service-principal.js +1 -1
  194. package/lib/aws/iam/grant.js +3 -3
  195. package/lib/aws/iam/group.js +1 -1
  196. package/lib/aws/iam/instance-profile.js +1 -1
  197. package/lib/aws/iam/managed-policy.js +1 -1
  198. package/lib/aws/iam/oidc-provider.js +1 -1
  199. package/lib/aws/iam/policy-document.js +1 -1
  200. package/lib/aws/iam/policy-statement.js +1 -1
  201. package/lib/aws/iam/policy.js +1 -1
  202. package/lib/aws/iam/principals.js +20 -20
  203. package/lib/aws/iam/role.js +14 -5
  204. package/lib/aws/iam/saml-provider.js +2 -2
  205. package/lib/aws/iam/unknown-principal.js +1 -1
  206. package/lib/aws/iam/user.js +1 -1
  207. package/lib/aws/network/simple-ipv4-vpc.js +1 -1
  208. package/lib/aws/network/subnet-group.js +3 -3
  209. package/lib/aws/network/subnet.js +4 -4
  210. package/lib/aws/notify/archive.js +1 -1
  211. package/lib/aws/notify/connection.js +3 -3
  212. package/lib/aws/notify/event-bus.js +3 -3
  213. package/lib/aws/notify/event-pattern.js +1 -1
  214. package/lib/aws/notify/input.js +2 -2
  215. package/lib/aws/notify/kinesis-stream.js +1 -1
  216. package/lib/aws/notify/notification-rule.js +1 -1
  217. package/lib/aws/notify/policy.js +1 -1
  218. package/lib/aws/notify/queue-base.js +1 -1
  219. package/lib/aws/notify/queue-policy.js +1 -1
  220. package/lib/aws/notify/queue.js +1 -1
  221. package/lib/aws/notify/resource-policy.js +1 -1
  222. package/lib/aws/notify/rule.js +1 -1
  223. package/lib/aws/notify/schedule.js +1 -1
  224. package/lib/aws/notify/sqs-grants.generated.js +1 -1
  225. package/lib/aws/notify/subscription-filter.js +1 -1
  226. package/lib/aws/notify/subscription.js +4 -4
  227. package/lib/aws/notify/subscriptions/email.js +1 -1
  228. package/lib/aws/notify/subscriptions/lambda.js +1 -1
  229. package/lib/aws/notify/subscriptions/sms.js +1 -1
  230. package/lib/aws/notify/subscriptions/sqs.js +1 -1
  231. package/lib/aws/notify/subscriptions/url.js +1 -1
  232. package/lib/aws/notify/targets/event-bus.js +1 -1
  233. package/lib/aws/notify/targets/function.js +1 -1
  234. package/lib/aws/notify/targets/log-group.js +2 -2
  235. package/lib/aws/notify/targets/sqs.js +1 -1
  236. package/lib/aws/notify/targets/state-machine.js +1 -1
  237. package/lib/aws/notify/topic-base.js +1 -1
  238. package/lib/aws/notify/topic.js +1 -1
  239. package/lib/aws/storage/assets/image-asset.js +3 -3
  240. package/lib/aws/storage/assets/s3.js +1 -1
  241. package/lib/aws/storage/auth-token.js +2 -2
  242. package/lib/aws/storage/billing.js +1 -1
  243. package/lib/aws/storage/bucket-notifications.js +1 -1
  244. package/lib/aws/storage/bucket-policy.js +1 -1
  245. package/lib/aws/storage/bucket-source.js +1 -1
  246. package/lib/aws/storage/bucket.js +2 -2
  247. package/lib/aws/storage/capacity.js +1 -1
  248. package/lib/aws/storage/dynamodb-perms.d.ts +2 -2
  249. package/lib/aws/storage/dynamodb-perms.js +9 -16
  250. package/lib/aws/storage/ecr-repository.js +3 -3
  251. package/lib/aws/storage/encryption.js +1 -1
  252. package/lib/aws/storage/index.d.ts +2 -0
  253. package/lib/aws/storage/index.js +3 -1
  254. package/lib/aws/storage/notification-targets/function.js +1 -1
  255. package/lib/aws/storage/notification-targets/queue.js +1 -1
  256. package/lib/aws/storage/origin-access-identity.js +1 -1
  257. package/lib/aws/storage/parameter.js +2 -2
  258. package/lib/aws/storage/shared.d.ts +31 -2
  259. package/lib/aws/storage/shared.js +29 -2
  260. package/lib/aws/storage/stream-grants.d.ts +61 -0
  261. package/lib/aws/storage/stream-grants.js +72 -0
  262. package/lib/aws/storage/table-grants.d.ts +98 -0
  263. package/lib/aws/storage/table-grants.js +137 -0
  264. package/lib/aws/storage/table.d.ts +280 -8
  265. package/lib/aws/storage/table.js +350 -148
  266. package/lib/bundling.js +3 -3
  267. package/lib/construct-base.js +2 -2
  268. package/lib/duration.js +1 -1
  269. package/lib/errors.js +1 -1
  270. package/lib/expiration.js +1 -1
  271. package/lib/fs/ignore.js +4 -4
  272. package/lib/fs/index.js +1 -1
  273. package/lib/size.js +1 -1
  274. package/lib/stack-base.js +1 -1
  275. package/lib/terra-func.js +1 -1
  276. package/lib/time-zone.js +1 -1
  277. package/package.json +1 -1
@@ -63,7 +63,7 @@ class BlockDeviceVolume {
63
63
  }
64
64
  exports.BlockDeviceVolume = BlockDeviceVolume;
65
65
  _a = JSII_RTTI_SYMBOL_1;
66
- BlockDeviceVolume[_a] = { fqn: "terraconstructs.aws.compute.BlockDeviceVolume", version: "0.2.1" };
66
+ BlockDeviceVolume[_a] = { fqn: "terraconstructs.aws.compute.BlockDeviceVolume", version: "0.2.2" };
67
67
  /**
68
68
  * Supported EBS volume types for blockDevices
69
69
  */
@@ -422,5 +422,5 @@ class Volume extends VolumeBase {
422
422
  }
423
423
  exports.Volume = Volume;
424
424
  _b = JSII_RTTI_SYMBOL_1;
425
- Volume[_b] = { fqn: "terraconstructs.aws.compute.Volume", version: "0.2.1" };
425
+ Volume[_b] = { fqn: "terraconstructs.aws.compute.Volume", version: "0.2.2" };
426
426
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidm9sdW1lLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2F3cy9jb21wdXRlL3ZvbHVtZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDBGQUEwRjtBQUUxRixzREFBZ0Q7QUFDaEQsaUNBQThCO0FBRTlCLGdDQUFpRTtBQUVqRSw2REFBaUQ7QUFDakQscUNBQXdEO0FBQ3hELG9EQUkwQjtBQUMxQiw0Q0FBd0M7QUFDeEMsOENBQThDO0FBQzlDLDBDQUFtQztBQUNuQyx3Q0FBd0M7QUFDeEMsOENBQTBEO0FBeUkxRDs7R0FFRztBQUNILE1BQWEsaUJBQWlCO0lBQzVCOzs7OztPQUtHO0lBQ0ksTUFBTSxDQUFDLEdBQUcsQ0FDZixVQUFrQixFQUNsQixVQUE0QixFQUFFO1FBRTlCLE9BQU8sSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLE9BQU8sRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNJLE1BQU0sQ0FBQyxlQUFlLENBQzNCLFVBQWtCLEVBQ2xCLFVBQW9DLEVBQUU7UUFFdEMsT0FBTyxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsT0FBTyxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ksTUFBTSxDQUFDLFNBQVMsQ0FBQyxXQUFtQjtRQUN6QyxJQUFJLFdBQVcsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNwQixNQUFNLElBQUksS0FBSyxDQUNiLHNEQUFzRCxXQUFXLEdBQUcsQ0FDckUsQ0FBQztRQUNKLENBQUM7UUFFRCxPQUFPLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxZQUFZLFdBQVcsRUFBRSxDQUFDLENBQUM7SUFDeEQsQ0FBQztJQUVEOzs7T0FHRztJQUNILFlBQ2tCLFNBQTBCLEVBQzFCLFdBQW9CO1FBRHBCLGNBQVMsR0FBVCxTQUFTLENBQWlCO1FBQzFCLGdCQUFXLEdBQVgsV0FBVyxDQUFT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RUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsQ0FBQztZQUNoRCxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLGVBQWUsQ0FBQztZQUNyQyxJQUFJLEtBQUssQ0FBQyxVQUFVLElBQUksbUJBQW1CLENBQUMsR0FBRyxFQUFFLENBQUM7Z0JBQ2hELE1BQU0sSUFBSSxLQUFLLENBQ2Isa0VBQWtFLENBQ25FLENBQUM7WUFDSixDQUFDO1lBQ0QsSUFBSSxLQUFLLENBQUMsVUFBVSxHQUFHLEdBQUcsSUFBSSxLQUFLLENBQUMsVUFBVSxHQUFHLEdBQUcsRUFBRSxDQUFDO2dCQUNyRCxNQUFNLElBQUksS0FBSyxDQUNiLDBDQUEwQyxHQUFHLHFCQUFxQixHQUFHLEVBQUUsQ0FDeEUsQ0FBQztZQUNKLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQzs7QUFqUUgsd0JBa1FDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3MtY2RrL2Jsb2IvdjIuMTc1LjEvcGFja2FnZXMvYXdzLWNkay1saWIvYXdzLWVjMi9saWIvdm9sdW1lLnRzXG5cbmltcG9ydCB7IGVic1ZvbHVtZSB9IGZyb20gXCJAY2RrdGYvcHJvdmlkZXItYXdzXCI7XG5pbXBvcnQgeyBUb2tlbiB9IGZyb20gXCJjZGt0ZlwiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IEFjY291bnRSb290UHJpbmNpcGFsLCBHcmFudCwgSUdyYW50YWJsZSB9IGZyb20gXCIuLi9pYW1cIjtcbmltcG9ydCB7IElJbnN0YW5jZSB9IGZyb20gXCIuL2luc3RhbmNlXCI7XG5pbXBvcnQgeyBtZDVoYXNoIH0gZnJvbSBcIi4uLy4uL2hlbHBlcnMtaW50ZXJuYWxcIjtcbmltcG9ydCB7IFNpemUsIFNpemVSb3VuZGluZ0JlaGF2aW9yIH0gZnJvbSBcIi4uLy4uL3NpemVcIjtcbmltcG9ydCB7XG4gIElBd3NDb25zdHJ1Y3QsXG4gIEF3c0NvbnN0cnVjdEJhc2UsXG4gIEF3c0NvbnN0cnVjdFByb3BzLFxufSBmcm9tIFwiLi4vYXdzLWNvbnN0cnVjdFwiO1xuaW1wb3J0IHsgQXdzU3RhY2sgfSBmcm9tIFwiLi4vYXdzLXN0YWNrXCI7XG4vLyBUT0RPOiBVc2UgVGFnTWFuYWdlciBhbmQgdGFnLWFzcGVjdCBpbnN0ZWFkXG5pbXBvcnQgeyBUYWdzIH0gZnJvbSBcIi4uL2F3cy10YWdzXCI7XG4vLyBpbXBvcnQgeyBUYWdzIH0gZnJvbSBcIi4uL3RhZy1hc3BlY3RcIjtcbmltcG9ydCB7IElLZXksIFZpYVNlcnZpY2VQcmluY2lwYWwgfSBmcm9tIFwiLi4vZW5jcnlwdGlvblwiO1xuXG4vKipcbiAqIEJsb2NrIGRldmljZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJsb2NrRGV2aWNlIHtcbiAgLyoqXG4gICAqIFRoZSBkZXZpY2UgbmFtZSBleHBvc2VkIHRvIHRoZSBFQzIgaW5zdGFuY2VcbiAgICpcbiAgICogRm9yIGV4YW1wbGUsIGEgdmFsdWUgbGlrZSBgL2Rldi9zZGhgLCBgeHZkaGAuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0VDMi9sYXRlc3QvVXNlckd1aWRlL2RldmljZV9uYW1pbmcuaHRtbFxuICAgKi9cbiAgcmVhZG9ubHkgZGV2aWNlTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBEZWZpbmVzIHRoZSBibG9jayBkZXZpY2Ugdm9sdW1lLCB0byBiZSBlaXRoZXIgYW4gQW1hem9uIEVCUyB2b2x1bWUgb3IgYW4gZXBoZW1lcmFsIGluc3RhbmNlIHN0b3JlIHZvbHVtZVxuICAgKlxuICAgKiBGb3IgZXhhbXBsZSwgYSB2YWx1ZSBsaWtlIGBCbG9ja0RldmljZVZvbHVtZS5lYnMoMTUpYCwgYEJsb2NrRGV2aWNlVm9sdW1lLmVwaGVtZXJhbCgwKWAuXG4gICAqL1xuICByZWFkb25seSB2b2x1bWU6IEJsb2NrRGV2aWNlVm9sdW1lO1xuXG4gIC8qKlxuICAgKiBJZiBmYWxzZSwgdGhlIGRldmljZSBtYXBwaW5nIHdpbGwgYmUgc3VwcHJlc3NlZC5cbiAgICogSWYgc2V0IHRvIGZhbHNlIGZvciB0aGUgcm9vdCBkZXZpY2UsIHRoZSBpbnN0YW5jZSBtaWdodCBmYWlsIHRoZSBBbWF6b24gRUMyIGhlYWx0aCBjaGVjay5cbiAgICogQW1hem9uIEVDMiBBdXRvIFNjYWxpbmcgbGF1bmNoZXMgYSByZXBsYWNlbWVudCBpbnN0YW5jZSBpZiB0aGUgaW5zdGFuY2UgZmFpbHMgdGhlIGhlYWx0aCBjaGVjay5cbiAgICpcbiAgICogTk9URTogVGVycmFmb3JtIFByb3ZpZGVyIEFXUyBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZm9yIGF3c19pbnN0YW5jZSBub24tZXBoZW1lcmFsIEJsb2NrIERldmljZXNcbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZSAtIGRldmljZSBtYXBwaW5nIGlzIGxlZnQgdW50b3VjaGVkXG4gICAqL1xuICByZWFkb25seSBtYXBwaW5nRW5hYmxlZD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQmFzZSBibG9jayBkZXZpY2Ugb3B0aW9ucyBmb3IgYW4gRUJTIHZvbHVtZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVic0RldmljZU9wdGlvbnNCYXNlIHtcbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHRvIGRlbGV0ZSB0aGUgdm9sdW1lIHdoZW4gdGhlIGluc3RhbmNlIGlzIHRlcm1pbmF0ZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gdHJ1ZSBmb3IgQW1hem9uIEVDMiBBdXRvIFNjYWxpbmcsIGZhbHNlIG90aGVyd2lzZSAoZS5nLiBFQlMpXG4gICAqL1xuICByZWFkb25seSBkZWxldGVPblRlcm1pbmF0aW9uPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIG51bWJlciBvZiBJL08gb3BlcmF0aW9ucyBwZXIgc2Vjb25kIChJT1BTKSB0byBwcm92aXNpb24gZm9yIHRoZSB2b2x1bWUuXG4gICAqXG4gICAqIE11c3Qgb25seSBiZSBzZXQgZm9yIGB2b2x1bWVUeXBlYDogYEVic0RldmljZVZvbHVtZVR5cGUuSU8xYFxuICAgKlxuICAgKiBUaGUgbWF4aW11bSByYXRpbyBvZiBJT1BTIHRvIHZvbHVtZSBzaXplIChpbiBHaUIpIGlzIDUwOjEsIHNvIGZvciA1LDAwMCBwcm92aXNpb25lZCBJT1BTLFxuICAgKiB5b3UgbmVlZCBhdCBsZWFzdCAxMDAgR2lCIHN0b3JhZ2Ugb24gdGhlIHZvbHVtZS5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTRUMyL2xhdGVzdC9Vc2VyR3VpZGUvRUJTVm9sdW1lVHlwZXMuaHRtbFxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vbmUsIHJlcXVpcmVkIGZvciBgRWJzRGV2aWNlVm9sdW1lVHlwZS5JTzFgXG4gICAqL1xuICByZWFkb25seSBpb3BzPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgRUJTIHZvbHVtZSB0eXBlXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0VDMi9sYXRlc3QvVXNlckd1aWRlL0VCU1ZvbHVtZVR5cGVzLmh0bWxcbiAgICpcbiAgICogQGRlZmF1bHQgYEVic0RldmljZVZvbHVtZVR5cGUuR0VORVJBTF9QVVJQT1NFX1NTRGAgb3IgYEVic0RldmljZVZvbHVtZVR5cGUuR0VORVJBTF9QVVJQT1NFX1NTRF9HUDNgIGlmXG4gICAqIGBAYXdzLWNkay9hd3MtZWMyOmVic0RlZmF1bHRHcDNWb2x1bWVgIGlzIGVuYWJsZWQuXG4gICAqL1xuICByZWFkb25seSB2b2x1bWVUeXBlPzogRWJzRGV2aWNlVm9sdW1lVHlwZTtcblxuICAvKipcbiAgICogVGhlIHRocm91Z2hwdXQgdG8gcHJvdmlzaW9uIGZvciBhIGBncDNgIHZvbHVtZS5cbiAgICpcbiAgICogVmFsaWQgUmFuZ2U6IE1pbmltdW0gdmFsdWUgb2YgMTI1LiBNYXhpbXVtIHZhbHVlIG9mIDEwMDAuXG4gICAqXG4gICAqIGBncDNgIHZvbHVtZXMgZGVsaXZlciBhIGNvbnNpc3RlbnQgYmFzZWxpbmUgdGhyb3VnaHB1dCBwZXJmb3JtYW5jZSBvZiAxMjUgTWlCL3MuXG4gICAqIFlvdSBjYW4gcHJvdmlzaW9uIGFkZGl0aW9uYWwgdGhyb3VnaHB1dCBmb3IgYW4gYWRkaXRpb25hbCBjb3N0IGF0IGEgcmF0aW8gb2YgMC4yNSBNaUIvcyBwZXIgcHJvdmlzaW9uZWQgSU9QUy5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZWJzL2xhdGVzdC91c2VyZ3VpZGUvZ2VuZXJhbC1wdXJwb3NlLmh0bWwjZ3AzLXBlcmZvcm1hbmNlXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gMTI1IE1pQi9zLlxuICAgKi9cbiAgcmVhZG9ubHkgdGhyb3VnaHB1dD86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBCbG9jayBkZXZpY2Ugb3B0aW9ucyBmb3IgYW4gRUJTIHZvbHVtZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVic0RldmljZU9wdGlvbnMgZXh0ZW5kcyBFYnNEZXZpY2VPcHRpb25zQmFzZSB7XG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgd2hldGhlciB0aGUgRUJTIHZvbHVtZSBpcyBlbmNyeXB0ZWQuXG4gICAqIEVuY3J5cHRlZCBFQlMgdm9sdW1lcyBjYW4gb25seSBiZSBhdHRhY2hlZCB0byBpbnN0YW5jZXMgdGhhdCBzdXBwb3J0IEFtYXpvbiBFQlMgZW5jcnlwdGlvblxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NFQzIvbGF0ZXN0L1VzZXJHdWlkZS9FQlNFbmNyeXB0aW9uLmh0bWwjRUJTRW5jcnlwdGlvbl9zdXBwb3J0ZWRfaW5zdGFuY2VzXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBlbmNyeXB0ZWQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgQVJOIG9mIHRoZSBBV1MgS2V5IE1hbmFnZW1lbnQgU2VydmljZSAoQVdTIEtNUykgQ01LIHVzZWQgZm9yIGVuY3J5cHRpb24uXG4gICAqXG4gICAqIFlvdSBoYXZlIHRvIGVuc3VyZSB0aGF0IHRoZSBLTVMgQ01LIGhhcyB0aGUgY29ycmVjdCBwZXJtaXNzaW9ucyB0byBiZSB1c2VkIGJ5IHRoZSBzZXJ2aWNlIGxhdW5jaGluZyB0aGUgZWMyIGluc3RhbmNlcy5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTRUMyL2xhdGVzdC9Vc2VyR3VpZGUvRUJTRW5jcnlwdGlvbi5odG1sI2Vicy1lbmNyeXB0aW9uLXJlcXVpcmVtZW50c1xuICAgKlxuICAgKiBAZGVmYXVsdCAtIElmIGVuY3J5cHRlZCBpcyB0cnVlLCB0aGUgZGVmYXVsdCBhd3MvZWJzIEtNUyBrZXkgd2lsbCBiZSB1c2VkLlxuICAgKi9cbiAgcmVhZG9ubHkga21zS2V5PzogSUtleTtcbn1cblxuLyoqXG4gKiBCbG9jayBkZXZpY2Ugb3B0aW9ucyBmb3IgYW4gRUJTIHZvbHVtZSBjcmVhdGVkIGZyb20gYSBzbmFwc2hvdFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVic0RldmljZVNuYXBzaG90T3B0aW9ucyBleHRlbmRzIEVic0RldmljZU9wdGlvbnNCYXNlIHtcbiAgLyoqXG4gICAqIFRoZSB2b2x1bWUgc2l6ZSwgaW4gR2liaWJ5dGVzIChHaUIpXG4gICAqXG4gICAqIElmIHlvdSBzcGVjaWZ5IHZvbHVtZVNpemUsIGl0IG11c3QgYmUgZXF1YWwgb3IgZ3JlYXRlciB0aGFuIHRoZSBzaXplIG9mIHRoZSBzbmFwc2hvdC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBUaGUgc25hcHNob3Qgc2l6ZVxuICAgKi9cbiAgcmVhZG9ubHkgdm9sdW1lU2l6ZT86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIG9mIGFuIEVCUyBibG9jayBkZXZpY2VcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFYnNEZXZpY2VQcm9wc1xuICBleHRlbmRzIEVic0RldmljZVNuYXBzaG90T3B0aW9ucyxcbiAgICBFYnNEZXZpY2VPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBzbmFwc2hvdCBJRCBvZiB0aGUgdm9sdW1lIHRvIHVzZVxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIHNuYXBzaG90IHdpbGwgYmUgdXNlZFxuICAgKi9cbiAgcmVhZG9ubHkgc25hcHNob3RJZD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBEZXNjcmliZXMgYSBibG9jayBkZXZpY2UgbWFwcGluZyBmb3IgYW4gRUMyIGluc3RhbmNlIG9yIEF1dG8gU2NhbGluZyBncm91cC5cbiAqL1xuZXhwb3J0IGNsYXNzIEJsb2NrRGV2aWNlVm9sdW1lIHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgRWxhc3RpYyBCbG9jayBTdG9yYWdlIGRldmljZVxuICAgKlxuICAgKiBAcGFyYW0gdm9sdW1lU2l6ZSBUaGUgdm9sdW1lIHNpemUsIGluIEdpYmlieXRlcyAoR2lCKVxuICAgKiBAcGFyYW0gb3B0aW9ucyBhZGRpdGlvbmFsIGRldmljZSBvcHRpb25zXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGVicyhcbiAgICB2b2x1bWVTaXplOiBudW1iZXIsXG4gICAgb3B0aW9uczogRWJzRGV2aWNlT3B0aW9ucyA9IHt9LFxuICApOiBCbG9ja0RldmljZVZvbHVtZSB7XG4gICAgcmV0dXJuIG5ldyB0aGlzKHsgLi4ub3B0aW9ucywgdm9sdW1lU2l6ZSB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IEVsYXN0aWMgQmxvY2sgU3RvcmFnZSBkZXZpY2UgZnJvbSBhbiBleGlzdGluZyBzbmFwc2hvdFxuICAgKlxuICAgKiBAcGFyYW0gc25hcHNob3RJZCBUaGUgc25hcHNob3QgSUQgb2YgdGhlIHZvbHVtZSB0byB1c2VcbiAgICogQHBhcmFtIG9wdGlvbnMgYWRkaXRpb25hbCBkZXZpY2Ugb3B0aW9uc1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBlYnNGcm9tU25hcHNob3QoXG4gICAgc25hcHNob3RJZDogc3RyaW5nLFxuICAgIG9wdGlvbnM6IEVic0RldmljZVNuYXBzaG90T3B0aW9ucyA9IHt9LFxuICApOiBCbG9ja0RldmljZVZvbHVtZSB7XG4gICAgcmV0dXJuIG5ldyB0aGlzKHsgLi4ub3B0aW9ucywgc25hcHNob3RJZCB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgdmlydHVhbCwgZXBoZW1lcmFsIGRldmljZS5cbiAgICogVGhlIG5hbWUgd2lsbCBiZSBpbiB0aGUgZm9ybSBlcGhlbWVyYWx7dm9sdW1lSW5kZXh9LlxuICAgKlxuICAgKiBAcGFyYW0gdm9sdW1lSW5kZXggdGhlIHZvbHVtZSBpbmRleC4gTXVzdCBiZSBlcXVhbCBvciBncmVhdGVyIHRoYW4gMFxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBlcGhlbWVyYWwodm9sdW1lSW5kZXg6IG51bWJlcikge1xuICAgIGlmICh2b2x1bWVJbmRleCA8IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYHZvbHVtZUluZGV4IG11c3QgYmUgYSBudW1iZXIgc3RhcnRpbmcgZnJvbSAwLCBnb3QgXCIke3ZvbHVtZUluZGV4fVwiYCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyB0aGlzKHVuZGVmaW5lZCwgYGVwaGVtZXJhbCR7dm9sdW1lSW5kZXh9YCk7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIGVic0RldmljZSBFQlMgZGV2aWNlIGluZm9cbiAgICogQHBhcmFtIHZpcnR1YWxOYW1lIFZpcnR1YWwgZGV2aWNlIG5hbWVcbiAgICovXG4gIHByb3RlY3RlZCBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgcmVhZG9ubHkgZWJzRGV2aWNlPzogRWJzRGV2aWNlUHJvcHMsXG4gICAgcHVibGljIHJlYWRvbmx5IHZpcnR1YWxOYW1lPzogc3RyaW5nLFxuICApIHt9XG5cbiAgcHVibGljIGlzRXBoZW1lcmFsKCk6IHRoaXMgaXMgQmxvY2tEZXZpY2VWb2x1bWUgJiB7IHZpcnR1YWxOYW1lOiBzdHJpbmcgfSB7XG4gICAgcmV0dXJuIHRoaXMudmlydHVhbE5hbWUgIT09IHVuZGVmaW5lZDtcbiAgfVxufVxuXG4vKipcbiAqIFN1cHBvcnRlZCBFQlMgdm9sdW1lIHR5cGVzIGZvciBibG9ja0RldmljZXNcbiAqL1xuZXhwb3J0IGVudW0gRWJzRGV2aWNlVm9sdW1lVHlwZSB7XG4gIC8qKlxuICAgKiBNYWduZXRpY1xuICAgKi9cbiAgU1RBTkRBUkQgPSBcInN0YW5kYXJkXCIsXG5cbiAgLyoqXG4gICAqICBQcm92aXNpb25lZCBJT1BTIFNTRCAtIElPMVxuICAgKi9cbiAgSU8xID0gXCJpbzFcIixcblxuICAvKipcbiAgICogIFByb3Zpc2lvbmVkIElPUFMgU1NEIC0gSU8yXG4gICAqL1xuICBJTzIgPSBcImlvMlwiLFxuXG4gIC8qKlxuICAgKiBHZW5lcmFsIFB1cnBvc2UgU1NEIC0gR1AyXG4gICAqL1xuICBHUDIgPSBcImdwMlwiLFxuXG4gIC8qKlxuICAgKiBHZW5lcmFsIFB1cnBvc2UgU1NEIC0gR1AzXG4gICAqL1xuICBHUDMgPSBcImdwM1wiLFxuXG4gIC8qKlxuICAgKiBUaHJvdWdocHV0IE9wdGltaXplZCBIRERcbiAgICovXG4gIFNUMSA9IFwic3QxXCIsXG5cbiAgLyoqXG4gICAqIENvbGQgSEREXG4gICAqL1xuICBTQzEgPSBcInNjMVwiLFxuXG4gIC8qKlxuICAgKiBHZW5lcmFsIHB1cnBvc2UgU1NEIHZvbHVtZSAoR1AyKSB0aGF0IGJhbGFuY2VzIHByaWNlIGFuZCBwZXJmb3JtYW5jZSBmb3IgYSB3aWRlIHZhcmlldHkgb2Ygd29ya2xvYWRzLlxuICAgKi9cbiAgR0VORVJBTF9QVVJQT1NFX1NTRCA9IEdQMixcblxuICAvKipcbiAgICogR2VuZXJhbCBwdXJwb3NlIFNTRCB2b2x1bWUgKEdQMykgdGhhdCBiYWxhbmNlcyBwcmljZSBhbmQgcGVyZm9ybWFuY2UgZm9yIGEgd2lkZSB2YXJpZXR5IG9mIHdvcmtsb2Fkcy5cbiAgICovXG4gIEdFTkVSQUxfUFVSUE9TRV9TU0RfR1AzID0gR1AzLFxuXG4gIC8qKlxuICAgKiBIaWdoZXN0LXBlcmZvcm1hbmNlIFNTRCB2b2x1bWUgKElPMSkgZm9yIG1pc3Npb24tY3JpdGljYWwgbG93LWxhdGVuY3kgb3IgaGlnaC10aHJvdWdocHV0IHdvcmtsb2Fkcy5cbiAgICovXG4gIFBST1ZJU0lPTkVEX0lPUFNfU1NEID0gSU8xLFxuXG4gIC8qKlxuICAgKiBIaWdoZXN0LXBlcmZvcm1hbmNlIFNTRCB2b2x1bWUgKElPMikgZm9yIG1pc3Npb24tY3JpdGljYWwgbG93LWxhdGVuY3kgb3IgaGlnaC10aHJvdWdocHV0IHdvcmtsb2Fkcy5cbiAgICovXG4gIFBST1ZJU0lPTkVEX0lPUFNfU1NEX0lPMiA9IElPMixcblxuICAvKipcbiAgICogTG93LWNvc3QgSEREIHZvbHVtZSBkZXNpZ25lZCBmb3IgZnJlcXVlbnRseSBhY2Nlc3NlZCwgdGhyb3VnaHB1dC1pbnRlbnNpdmUgd29ya2xvYWRzLlxuICAgKi9cbiAgVEhST1VHSFBVVF9PUFRJTUlaRURfSEREID0gU1QxLFxuXG4gIC8qKlxuICAgKiBMb3dlc3QgY29zdCBIREQgdm9sdW1lIGRlc2lnbmVkIGZvciBsZXNzIGZyZXF1ZW50bHkgYWNjZXNzZWQgd29ya2xvYWRzLlxuICAgKi9cbiAgQ09MRF9IREQgPSBTQzEsXG5cbiAgLyoqXG4gICAqIE1hZ25ldGljIHZvbHVtZXMgYXJlIGJhY2tlZCBieSBtYWduZXRpYyBkcml2ZXMgYW5kIGFyZSBzdWl0ZWQgZm9yIHdvcmtsb2FkcyB3aGVyZSBkYXRhIGlzIGFjY2Vzc2VkIGluZnJlcXVlbnRseSwgYW5kIHNjZW5hcmlvcyB3aGVyZSBsb3ctY29zdFxuICAgKiBzdG9yYWdlIGZvciBzbWFsbCB2b2x1bWUgc2l6ZXMgaXMgaW1wb3J0YW50LlxuICAgKi9cbiAgTUFHTkVUSUMgPSBTVEFOREFSRCxcbn1cblxuLyoqXG4gKiBPdXRwdXRzIHdoaWNoIG1heSBiZSByZWdpc3RlcmVkIGZvciBvdXRwdXQgdmlhIHRoZSBHcmlkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFZvbHVtZU91dHB1dHMge1xuICAvKipcbiAgICogVGhlIEVCUyBWb2x1bWUncyBJRFxuICAgKlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSB2b2x1bWVJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgYXZhaWxhYmlsaXR5IHpvbmUgdGhhdCB0aGUgRUJTIFZvbHVtZSBpcyBjb250YWluZWQgd2l0aGluIChleDogdXMtd2VzdC0yYSlcbiAgICovXG4gIHJlYWRvbmx5IGF2YWlsYWJpbGl0eVpvbmU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGN1c3RvbWVyLW1hbmFnZWQgZW5jcnlwdGlvbiBrZXkgdGhhdCBpcyB1c2VkIHRvIGVuY3J5cHQgdGhlIFZvbHVtZS5cbiAgICpcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgZW5jcnlwdGlvbktleUlkPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEFuIEVCUyBWb2x1bWUgaW4gQVdTIEVDMi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJVm9sdW1lIGV4dGVuZHMgSUF3c0NvbnN0cnVjdCB7XG4gIC8qKiBTdHJvbmdseSB0eXBlZCBvdXRwdXRzICovXG4gIHJlYWRvbmx5IHZvbHVtZU91dHB1dHM6IFZvbHVtZU91dHB1dHM7XG4gIC8qKlxuICAgKiBUaGUgRUJTIFZvbHVtZSdzIElEXG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IHZvbHVtZUlkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBhdmFpbGFiaWxpdHkgem9uZSB0aGF0IHRoZSBFQlMgVm9sdW1lIGlzIGNvbnRhaW5lZCB3aXRoaW4gKGV4OiB1cy13ZXN0LTJhKVxuICAgKi9cbiAgcmVhZG9ubHkgYXZhaWxhYmlsaXR5Wm9uZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgY3VzdG9tZXItbWFuYWdlZCBlbmNyeXB0aW9uIGtleSB0aGF0IGlzIHVzZWQgdG8gZW5jcnlwdCB0aGUgVm9sdW1lLlxuICAgKlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSBlbmNyeXB0aW9uS2V5PzogSUtleTtcblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gYXR0YWNoIHRoaXMgVm9sdW1lIHRvIGFuIGluc3RhbmNlLlxuICAgKiBDQVVUSU9OOiBHcmFudGluZyBhbiBpbnN0YW5jZSBwZXJtaXNzaW9uIHRvIGF0dGFjaCB0byBpdHNlbGYgdXNpbmcgdGhpcyBtZXRob2Qgd2lsbCBsZWFkIHRvXG4gICAqIGFuIHVucmVzb2x2YWJsZSBjaXJjdWxhciByZWZlcmVuY2UgYmV0d2VlbiB0aGUgaW5zdGFuY2Ugcm9sZSBhbmQgdGhlIGluc3RhbmNlLlxuICAgKiBVc2UgYElWb2x1bWUuZ3JhbnRBdHRhY2hWb2x1bWVUb1NlbGZgIHRvIGdyYW50IGFuIGluc3RhbmNlIHBlcm1pc3Npb24gdG8gYXR0YWNoIHRoaXNcbiAgICogdm9sdW1lIHRvIGl0c2VsZi5cbiAgICpcbiAgICogQHBhcmFtIGdyYW50ZWUgIHRoZSBwcmluY2lwYWwgYmVpbmcgZ3JhbnRlZCBwZXJtaXNzaW9uLlxuICAgKiBAcGFyYW0gaW5zdGFuY2VzIHRoZSBpbnN0YW5jZXMgdG8gd2hpY2ggcGVybWlzc2lvbiBpcyBiZWluZyBncmFudGVkIHRvIGF0dGFjaCB0aGlzXG4gICAqICAgICAgICAgICAgICAgICB2b2x1bWUgdG8uIElmIG5vdCBzcGVjaWZpZWQsIHRoZW4gcGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGF0dGFjaFxuICAgKiAgICAgICAgICAgICAgICAgdG8gYWxsIGluc3RhbmNlcyBpbiB0aGlzIGFjY291bnQuXG4gICAqL1xuICBncmFudEF0dGFjaFZvbHVtZShncmFudGVlOiBJR3JhbnRhYmxlLCBpbnN0YW5jZXM/OiBJSW5zdGFuY2VbXSk6IEdyYW50O1xuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBhdHRhY2ggdGhlIFZvbHVtZSBieSBhIFJlc291cmNlVGFnIGNvbmRpdGlvbi4gSWYgeW91IGFyZSBsb29raW5nIHRvXG4gICAqIGdyYW50IGFuIEluc3RhbmNlLCBBdXRvU2NhbGluZ0dyb3VwLCBFQzItRmxlZXQsIFNwb3RGbGVldCwgRUNTIGhvc3QsIGV0YyB0aGUgYWJpbGl0eSB0byBhdHRhY2hcbiAgICogdGhpcyB2b2x1bWUgdG8gKippdHNlbGYqKiB0aGVuIHRoaXMgaXMgdGhlIG1ldGhvZCB5b3Ugd2FudCB0byB1c2UuXG4gICAqXG4gICAqIFRoaXMgaXMgaW1wbGVtZW50ZWQgYnkgYWRkaW5nIGEgVGFnIHdpdGgga2V5IGBWb2x1bWVHcmFudEF0dGFjaC08c3VmZml4PmAgdG8gdGhlIGdpdmVuXG4gICAqIGNvbnN0cnVjdHMgYW5kIHRoaXMgVm9sdW1lLCBhbmQgdGhlbiBjb25kaXRpb25pbmcgdGhlIEdyYW50IHN1Y2ggdGhhdCB0aGUgZ3JhbnRlZSBpcyBvbmx5XG4gICAqIGdpdmVuIHRoZSBhYmlsaXR5IHRvIEF0dGFjaFZvbHVtZSBpZiBib3RoIHRoZSBWb2x1bWUgYW5kIHRoZSBkZXN0aW5hdGlvbiBJbnN0YW5jZSBoYXZlIHRoYXRcbiAgICogdGFnIGFwcGxpZWQgdG8gdGhlbS5cbiAgICpcbiAgICogQHBhcmFtIGdyYW50ZWUgICAgdGhlIHByaW5jaXBhbCBiZWluZyBncmFudGVkIHBlcm1pc3Npb24uXG4gICAqIEBwYXJhbSBjb25zdHJ1Y3RzIFRoZSBsaXN0IG9mIGNvbnN0cnVjdHMgdGhhdCB3aWxsIGhhdmUgdGhlIGdlbmVyYXRlZCByZXNvdXJjZSB0YWcgYXBwbGllZCB0byB0aGVtLlxuICAgKiBAcGFyYW0gdGFnS2V5U3VmZml4IEEgc3VmZml4IHRvIHVzZSBvbiB0aGUgZ2VuZXJhdGVkIFRhZyBrZXkgaW4gcGxhY2Ugb2YgdGhlIGdlbmVyYXRlZCBoYXNoIHZhbHVlLlxuICAgKiAgICAgICAgICAgICAgICAgICAgIERlZmF1bHRzIHRvIGEgaGFzaCBjYWxjdWxhdGVkIGZyb20gdGhpcyB2b2x1bWUgYW5kIGxpc3Qgb2YgY29uc3RydWN0cy4gKERFUFJFQ0FURUQpXG4gICAqL1xuICBncmFudEF0dGFjaFZvbHVtZUJ5UmVzb3VyY2VUYWcoXG4gICAgZ3JhbnRlZTogSUdyYW50YWJsZSxcbiAgICBjb25zdHJ1Y3RzOiBDb25zdHJ1Y3RbXSxcbiAgICB0YWdLZXlTdWZmaXg/OiBzdHJpbmcsXG4gICk6IEdyYW50O1xuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBkZXRhY2ggdGhpcyBWb2x1bWUgZnJvbSBhbiBpbnN0YW5jZVxuICAgKiBDQVVUSU9OOiBHcmFudGluZyBhbiBpbnN0YW5jZSBwZXJtaXNzaW9uIHRvIGRldGFjaCBmcm9tIGl0c2VsZiB1c2luZyB0aGlzIG1ldGhvZCB3aWxsIGxlYWQgdG9cbiAgICogYW4gdW5yZXNvbHZhYmxlIGNpcmN1bGFyIHJlZmVyZW5jZSBiZXR3ZWVuIHRoZSBpbnN0YW5jZSByb2xlIGFuZCB0aGUgaW5zdGFuY2UuXG4gICAqIFVzZSBgSVZvbHVtZS5ncmFudERldGFjaFZvbHVtZUZyb21TZWxmYCB0byBncmFudCBhbiBpbnN0YW5jZSBwZXJtaXNzaW9uIHRvIGRldGFjaCB0aGlzXG4gICAqIHZvbHVtZSBmcm9tIGl0c2VsZi5cbiAgICpcbiAgICogQHBhcmFtIGdyYW50ZWUgIHRoZSBwcmluY2lwYWwgYmVpbmcgZ3JhbnRlZCBwZXJtaXNzaW9uLlxuICAgKiBAcGFyYW0gaW5zdGFuY2VzIHRoZSBpbnN0YW5jZXMgdG8gd2hpY2ggcGVybWlzc2lvbiBpcyBiZWluZyBncmFudGVkIHRvIGRldGFjaCB0aGlzXG4gICAqICAgICAgICAgICAgICAgICB2b2x1bWUgZnJvbS4gSWYgbm90IHNwZWNpZmllZCwgdGhlbiBwZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gZGV0YWNoXG4gICAqICAgICAgICAgICAgICAgICBmcm9tIGFsbCBpbnN0YW5jZXMgaW4gdGhpcyBhY2NvdW50LlxuICAgKi9cbiAgZ3JhbnREZXRhY2hWb2x1bWUoZ3JhbnRlZTogSUdyYW50YWJsZSwgaW5zdGFuY2VzPzogSUluc3RhbmNlW10pOiBHcmFudDtcblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gZGV0YWNoIHRoZSBWb2x1bWUgYnkgYSBSZXNvdXJjZVRhZyBjb25kaXRpb24uXG4gICAqXG4gICAqIFRoaXMgaXMgaW1wbGVtZW50ZWQgdmlhIHRoZSBzYW1lIG1lY2hhbmlzbSBhcyBgSVZvbHVtZS5ncmFudEF0dGFjaFZvbHVtZUJ5UmVzb3VyY2VUYWdgLFxuICAgKiBhbmQgaXMgc3ViamVjdCB0byB0aGUgc2FtZSBjb25kaXRpb25zLlxuICAgKlxuICAgKiBAcGFyYW0gZ3JhbnRlZSAgICB0aGUgcHJpbmNpcGFsIGJlaW5nIGdyYW50ZWQgcGVybWlzc2lvbi5cbiAgICogQHBhcmFtIGNvbnN0cnVjdHMgVGhlIGxpc3Qgb2YgY29uc3RydWN0cyB0aGF0IHdpbGwgaGF2ZSB0aGUgZ2VuZXJhdGVkIHJlc291cmNlIHRhZyBhcHBsaWVkIHRvIHRoZW0uXG4gICAqIEBwYXJhbSB0YWdLZXlTdWZmaXggQSBzdWZmaXggdG8gdXNlIG9uIHRoZSBnZW5lcmF0ZWQgVGFnIGtleSBpbiBwbGFjZSBvZiB0aGUgZ2VuZXJhdGVkIGhhc2ggdmFsdWUuXG4gICAqICAgICAgICAgICAgICAgICAgICAgRGVmYXVsdHMgdG8gYSBoYXNoIGNhbGN1bGF0ZWQgZnJvbSB0aGlzIHZvbHVtZSBhbmQgbGlzdCBvZiBjb25zdHJ1Y3RzLiAoREVQUkVDQVRFRClcbiAgICovXG4gIGdyYW50RGV0YWNoVm9sdW1lQnlSZXNvdXJjZVRhZyhcbiAgICBncmFudGVlOiBJR3JhbnRhYmxlLFxuICAgIGNvbnN0cnVjdHM6IENvbnN0cnVjdFtdLFxuICAgIHRhZ0tleVN1ZmZpeD86IHN0cmluZyxcbiAgKTogR3JhbnQ7XG59XG5cbi8qKlxuICogUHJvcGVydGllcyBvZiBhbiBFQlMgVm9sdW1lXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVm9sdW1lUHJvcHMgZXh0ZW5kcyBBd3NDb25zdHJ1Y3RQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgdmFsdWUgb2YgdGhlIHBoeXNpY2FsTmFtZSBwcm9wZXJ0eSBvZiB0aGlzIHJlc291cmNlLlxuICAgKlxuICAgKiBAZGVmYXVsdCBUaGUgcGh5c2ljYWwgbmFtZSB3aWxsIGJlIGFsbG9jYXRlZCBieSBDbG91ZEZvcm1hdGlvbiBhdCBkZXBsb3ltZW50IHRpbWVcbiAgICovXG4gIHJlYWRvbmx5IHZvbHVtZU5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBBdmFpbGFiaWxpdHkgWm9uZSBpbiB3aGljaCB0byBjcmVhdGUgdGhlIHZvbHVtZS5cbiAgICovXG4gIHJlYWRvbmx5IGF2YWlsYWJpbGl0eVpvbmU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHNpemUgb2YgdGhlIHZvbHVtZSwgaW4gR2lCcy4gWW91IG11c3Qgc3BlY2lmeSBlaXRoZXIgYSBzbmFwc2hvdCBJRCBvciBhIHZvbHVtZSBzaXplLlxuICAgKiBTZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXJlc291cmNlLWVjMi12b2x1bWUuaHRtbFxuICAgKiBmb3IgZGV0YWlscyBvbiB0aGUgYWxsb3dhYmxlIHNpemUgZm9yIGVhY2ggdHlwZSBvZiB2b2x1bWUuXG4gICAqXG4gICAqIEBkZWZhdWx0IElmIHlvdSdyZSBjcmVhdGluZyB0aGUgdm9sdW1lIGZyb20gYSBzbmFwc2hvdCBhbmQgZG9uJ3Qgc3BlY2lmeSBhIHZvbHVtZSBzaXplLCB0aGUgZGVmYXVsdCBpcyB0aGUgc25hcHNob3Qgc2l6ZS5cbiAgICovXG4gIHJlYWRvbmx5IHNpemU/OiBTaXplO1xuXG4gIC8qKlxuICAgKiBUaGUgc25hcHNob3QgZnJvbSB3aGljaCB0byBjcmVhdGUgdGhlIHZvbHVtZS4gWW91IG11c3Qgc3BlY2lmeSBlaXRoZXIgYSBzbmFwc2hvdCBJRCBvciBhIHZvbHVtZSBzaXplLlxuICAgKlxuICAgKiBAZGVmYXVsdCBUaGUgRUJTIHZvbHVtZSBpcyBub3QgY3JlYXRlZCBmcm9tIGEgc25hcHNob3QuXG4gICAqL1xuICByZWFkb25seSBzbmFwc2hvdElkPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciBBbWF6b24gRUJTIE11bHRpLUF0dGFjaCBpcyBlbmFibGVkLlxuICAgKiBTZWUgW0NvbnNpZGVyYXRpb25zIGFuZCBsaW1pdGF0aW9uc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0VDMi9sYXRlc3QvVXNlckd1aWRlL2Vicy12b2x1bWVzLW11bHRpLmh0bWwjY29uc2lkZXJhdGlvbnMpXG4gICAqIGZvciB0aGUgY29uc3RyYWludHMgb2YgbXVsdGktYXR0YWNoLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgZW5hYmxlTXVsdGlBdHRhY2g/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgd2hldGhlciB0aGUgdm9sdW1lIHNob3VsZCBiZSBlbmNyeXB0ZWQuIFRoZSBlZmZlY3Qgb2Ygc2V0dGluZyB0aGUgZW5jcnlwdGlvbiBzdGF0ZSB0byB0cnVlIGRlcGVuZHMgb24gdGhlIHZvbHVtZSBvcmlnaW5cbiAgICogKG5ldyBvciBmcm9tIGEgc25hcHNob3QpLCBzdGFydGluZyBlbmNyeXB0aW9uIHN0YXRlLCBvd25lcnNoaXAsIGFuZCB3aGV0aGVyIGVuY3J5cHRpb24gYnkgZGVmYXVsdCBpcyBlbmFibGVkLiBGb3IgbW9yZSBpbmZvcm1hdGlvbixcbiAgICogc2VlIFtFbmNyeXB0aW9uIGJ5IERlZmF1bHRdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NFQzIvbGF0ZXN0L1VzZXJHdWlkZS9FQlNFbmNyeXB0aW9uLmh0bWwjZW5jcnlwdGlvbi1ieS1kZWZhdWx0KVxuICAgKiBpbiB0aGUgQW1hem9uIEVsYXN0aWMgQ29tcHV0ZSBDbG91ZCBVc2VyIEd1aWRlLlxuICAgKlxuICAgKiBFbmNyeXB0ZWQgQW1hem9uIEVCUyB2b2x1bWVzIG11c3QgYmUgYXR0YWNoZWQgdG8gaW5zdGFuY2VzIHRoYXQgc3VwcG9ydCBBbWF6b24gRUJTIGVuY3J5cHRpb24uIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWVcbiAgICogW1N1cHBvcnRlZCBJbnN0YW5jZSBUeXBlc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0VDMi9sYXRlc3QvVXNlckd1aWRlL0VCU0VuY3J5cHRpb24uaHRtbCNFQlNFbmNyeXB0aW9uX3N1cHBvcnRlZF9pbnN0YW5jZXMpLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgZW5jcnlwdGVkPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIGN1c3RvbWVyLW1hbmFnZWQgZW5jcnlwdGlvbiBrZXkgdGhhdCBpcyB1c2VkIHRvIGVuY3J5cHQgdGhlIFZvbHVtZS4gVGhlIGVuY3J5cHRlZCBwcm9wZXJ0eSBtdXN0XG4gICAqIGJlIHRydWUgaWYgdGhpcyBpcyBwcm92aWRlZC5cbiAgICpcbiAgICogTm90ZTogSWYgdXNpbmcgYW4gYGF3cy1rbXMuSUtleWAgY3JlYXRlZCBmcm9tIGEgYGF3cy1rbXMuS2V5LmZyb21LZXlBcm4oKWAgaGVyZSxcbiAgICogdGhlbiB0aGUgS01TIGtleSAqKm11c3QqKiBoYXZlIHRoZSBmb2xsb3dpbmcgaW4gaXRzIEtleSBwb2xpY3k7IG90aGVyd2lzZSwgdGhlIFZvbHVtZVxuICAgKiB3aWxsIGZhaWwgdG8gY3JlYXRlLlxuICAgKlxuICAgKiAgICAge1xuICAgKiAgICAgICBcIkVmZmVjdFwiOiBcIkFsbG93XCIsXG4gICAqICAgICAgIFwiUHJpbmNpcGFsXCI6IHsgXCJBV1NcIjogXCI8YXJuIGZvciB5b3VyIGFjY291bnQtdXNlcj4gZXg6IGFybjphd3M6aWFtOjowMDAwMDAwMDAwMDpyb290XCIgfSxcbiAgICogICAgICAgXCJSZXNvdXJjZVwiOiBcIipcIixcbiAgICogICAgICAgXCJBY3Rpb25cIjogW1xuICAgKiAgICAgICAgIFwia21zOkRlc2NyaWJlS2V5XCIsXG4gICAqICAgICAgICAgXCJrbXM6R2VuZXJhdGVEYXRhS2V5V2l0aG91dFBsYWluVGV4dFwiLFxuICAgKiAgICAgICBdLFxuICAgKiAgICAgICBcIkNvbmRpdGlvblwiOiB7XG4gICAqICAgICAgICAgXCJTdHJpbmdFcXVhbHNcIjoge1xuICAgKiAgICAgICAgICAgXCJrbXM6VmlhU2VydmljZVwiOiBcImVjMi48UmVnaW9uPi5hbWF6b25hd3MuY29tXCIsIChlZzogZWMyLnVzLWVhc3QtMS5hbWF6b25hd3MuY29tKVxuICAgKiAgICAgICAgICAgXCJrbXM6Q2FsbGVyQWNjb3VudFwiOiBcIjAwMDAwMDAwMDBcIiAoeW91ciBhY2NvdW50IElEKVxuICAgKiAgICAgICAgIH1cbiAgICogICAgICAgfVxuICAgKiAgICAgfVxuICAgKlxuICAgKiBAZGVmYXVsdCBUaGUgZGVmYXVsdCBLTVMga2V5IGZvciB0aGUgYWNjb3VudCwgcmVnaW9uLCBhbmQgRUMyIHNlcnZpY2UgaXMgdXNlZC5cbiAgICovXG4gIHJlYWRvbmx5IGVuY3J5cHRpb25LZXk/OiBJS2V5O1xuXG4gIC8vIFRPRE86IFN1cHBvcnQgZm9yIGF1dG9FbmFibGVJb1xuICAvLyBodHRwczovL2dpdGh1Yi5jb20vaGFzaGljb3JwL3RlcnJhZm9ybS1wcm92aWRlci1hd3MvaXNzdWVzLzM0MTEwXG4gIC8vIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1yZXNvdXJjZS1lYzItdm9sdW1lLmh0bWwjY2ZuLWVjMi12b2x1bWUtYXV0b2VuYWJsZWlvXG4gIC8vIC8qKlxuICAvLyAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgdm9sdW1lIGlzIGF1dG8tZW5hYmxlZCBmb3IgSS9PIG9wZXJhdGlvbnMuIEJ5IGRlZmF1bHQsIEFtYXpvbiBFQlMgZGlzYWJsZXMgSS9PIHRvIHRoZSB2b2x1bWUgZnJvbSBhdHRhY2hlZCBFQzJcbiAgLy8gICogaW5zdGFuY2VzIHdoZW4gaXQgZGV0ZXJtaW5lcyB0aGF0IGEgdm9sdW1lJ3MgZGF0YSBpcyBwb3RlbnRpYWxseSBpbmNvbnNpc3RlbnQuIElmIHRoZSBjb25zaXN0ZW5jeSBvZiB0aGUgdm9sdW1lIGlzIG5vdCBhIGNvbmNlcm4sIGFuZFxuICAvLyAgKiB5b3UgcHJlZmVyIHRoYXQgdGhlIHZvbHVtZSBiZSBtYWRlIGF2YWlsYWJsZSBpbW1lZGlhdGVseSBpZiBpdCdzIGltcGFpcmVkLCB5b3UgY2FuIGNvbmZpZ3VyZSB0aGUgdm9sdW1lIHRvIGF1dG9tYXRpY2FsbHkgZW5hYmxlIEkvTy5cbiAgLy8gICpcbiAgLy8gICogQGRlZmF1bHQgZmFsc2VcbiAgLy8gICovXG4gIC8vIHJlYWRvbmx5IGF1dG9FbmFibGVJbz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIHRoZSB2b2x1bWU7IHdoYXQgdHlwZSBvZiBzdG9yYWdlIHRvIHVzZSB0byBmb3JtIHRoZSBFQlMgVm9sdW1lLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgRWJzRGV2aWNlVm9sdW1lVHlwZS5HRU5FUkFMX1BVUlBPU0VfU1NEX0dQM2BcbiAgICovXG4gIHJlYWRvbmx5IHZvbHVtZVR5cGU/OiBFYnNEZXZpY2VWb2x1bWVUeXBlO1xuXG4gIC8qKlxuICAgKiBUaGUgbnVtYmVyIG9mIEkvTyBvcGVyYXRpb25zIHBlciBzZWNvbmQgKElPUFMpIHRvIHByb3Zpc2lvbiBmb3IgdGhlIHZvbHVtZS4gVGhlIG1heGltdW0gcmF0aW8gaXMgNTAgSU9QUy9HaUIgZm9yIFBST1ZJU0lPTkVEX0lPUFNfU1NELFxuICAgKiBhbmQgNTAwIElPUFMvR2lCIGZvciBib3RoIFBST1ZJU0lPTkVEX0lPUFNfU1NEX0lPMiBhbmQgR0VORVJBTF9QVVJQT1NFX1NTRF9HUDMuXG4gICAqIFNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcmVzb3VyY2UtZWMyLXZvbHVtZS5odG1sXG4gICAqIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICAgKlxuICAgKiBUaGlzIHBhcmFtZXRlciBpcyB2YWxpZCBvbmx5IGZvciBQUk9WSVNJT05FRF9JT1BTX1NTRCwgUFJPVklTSU9ORURfSU9QU19TU0RfSU8yIGFuZCBHRU5FUkFMX1BVUlBPU0VfU1NEX0dQMyB2b2x1bWVzLlxuICAgKlxuICAgKiBAZGVmYXVsdCBOb25lIC0tIFJlcXVpcmVkIGZvciBpbzEgYW5kIGlvMiB2b2x1bWVzLiBUaGUgZGVmYXVsdCBmb3IgZ3AzIHZvbHVtZXMgaXMgMywwMDAgSU9QUyBpZiBvbWl0dGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgaW9wcz86IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIHRocm91Z2hwdXQgdGhhdCB0aGUgdm9sdW1lIHN1cHBvcnRzLCBpbiBNaUIvc1xuICAgKiBUYWtlcyBhIG1pbmltdW0gb2YgMTI1IGFuZCBtYXhpbXVtIG9mIDEwMDAuXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXJlc291cmNlLWVjMi12b2x1bWUuaHRtbCNjZm4tZWMyLXZvbHVtZS10aHJvdWdocHV0XG4gICAqIEBkZWZhdWx0IC0gMTI1IE1pQi9zLiBPbmx5IHZhbGlkIG9uIGdwMyB2b2x1bWVzLlxuICAgKi9cbiAgcmVhZG9ubHkgdGhyb3VnaHB1dD86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBBdHRyaWJ1dGVzIHJlcXVpcmVkIHRvIGltcG9ydCBhbiBleGlzdGluZyBFQlMgVm9sdW1lIGludG8gdGhlIFN0YWNrLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFZvbHVtZUF0dHJpYnV0ZXMge1xuICAvKipcbiAgICogVGhlIEVCUyBWb2x1bWUncyBJRFxuICAgKi9cbiAgcmVhZG9ubHkgdm9sdW1lSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGF2YWlsYWJpbGl0eSB6b25lIHRoYXQgdGhlIEVCUyBWb2x1bWUgaXMgY29udGFpbmVkIHdpdGhpbiAoZXg6IHVzLXdlc3QtMmEpXG4gICAqL1xuICByZWFkb25seSBhdmFpbGFiaWxpdHlab25lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBjdXN0b21lci1tYW5hZ2VkIGVuY3J5cHRpb24ga2V5IHRoYXQgaXMgdXNlZCB0byBlbmNyeXB0IHRoZSBWb2x1bWUuXG4gICAqXG4gICAqIEBkZWZhdWx0IE5vbmUgLS0gVGhlIEVCUyBWb2x1bWUgaXMgbm90IHVzaW5nIGEgY3VzdG9tZXItbWFuYWdlZCBLTVMga2V5IGZvciBlbmNyeXB0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgZW5jcnlwdGlvbktleT86IElLZXk7XG59XG5cbi8qKlxuICogQ29tbW9uIGJlaGF2aW9yIG9mIFZvbHVtZXMuIFVzZXJzIHNob3VsZCBub3QgdXNlIHRoaXMgY2xhc3MgZGlyZWN0bHksIGFuZCBpbnN0ZWFkIHVzZSBgYFZvbHVtZWBgLlxuICovXG5hYnN0cmFjdCBjbGFzcyBWb2x1bWVCYXNlIGV4dGVuZHMgQXdzQ29uc3RydWN0QmFzZSBpbXBsZW1lbnRzIElWb2x1bWUge1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgdm9sdW1lSWQ6IHN0cmluZztcbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IGF2YWlsYWJpbGl0eVpvbmU6IHN0cmluZztcbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IGVuY3J5cHRpb25LZXk/OiBJS2V5O1xuICBwdWJsaWMgZ2V0IHZvbHVtZU91dHB1dHMoKTogVm9sdW1lT3V0cHV0cyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHZvbHVtZUlkOiB0aGlzLnZvbHVtZUlkLFxuICAgICAgYXZhaWxhYmlsaXR5Wm9uZTogdGhpcy5hdmFpbGFiaWxpdHlab25lLFxuICAgICAgZW5jcnlwdGlvbktleUlkOiB0aGlzLmVuY3J5cHRpb25LZXk/LmtleUlkLFxuICAgIH07XG4gIH1cbiAgcHVibGljIGdldCBvdXRwdXRzKCk6IFJlY29yZDxzdHJpbmcsIGFueT4ge1xuICAgIHJldHVybiB0aGlzLnZvbHVtZU91dHB1dHM7XG4gIH1cblxuICBwdWJsaWMgZ3JhbnRBdHRhY2hWb2x1bWUoXG4gICAgZ3JhbnRlZTogSUdyYW50YWJsZSxcbiAgICBpbnN0YW5jZXM/OiBJSW5zdGFuY2VbXSxcbiAgKTogR3JhbnQge1xuICAgIGNvbnN0IHJlc3VsdCA9IEdyYW50LmFkZFRvUHJpbmNpcGFsKHtcbiAgICAgIGdyYW50ZWUsXG4gICAgICBhY3Rpb25zOiBbXCJlYzI6QXR0YWNoVm9sdW1lXCJdLFxuICAgICAgcmVzb3VyY2VBcm5zOiB0aGlzLmNvbGxlY3RHcmFudFJlc291cmNlQXJucyhpbnN0YW5jZXMpLFxuICAgIH0pO1xuXG4gICAgaWYgKHRoaXMuZW5jcnlwdGlvbktleSkge1xuICAgICAgLy8gV2hlbiBhdHRhY2hpbmcgYSB2b2x1bWUsIHRoZSBFQzIgU2VydmljZSB3aWxsIG5lZWQgdG8gZ3JhbnQgdG8gaXRzZWxmIHBlcm1pc3Npb25cbiAgICAgIC8vIHRvIGJlIGFibGUgdG8gZGVjcnlwdCB0aGUgZW5jcnlwdGlvbiBrZXkuIFdlIHJlc3RyaWN0IHRoZSBDcmVhdGVHcmFudCBmb3IgcHJpbmNpcGxlXG4gICAgICAvLyBvZiBsZWFzdCBwcml2aWxlZ2UsIGluIGFjY29yZGFuY2Ugd2l0aCBiZXN0IHByYWN0aWNlcy5cbiAgICAgIC8vIFNlZTogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0VDMi9sYXRlc3QvVXNlckd1aWRlL0VCU0VuY3J5cHRpb24uaHRtbCNlYnMtZW5jcnlwdGlvbi1wZXJtaXNzaW9uc1xuICAgICAgY29uc3Qga21zR3JhbnQ6IEdyYW50ID0gdGhpcy5lbmNyeXB0aW9uS2V5LmdyYW50KFxuICAgICAgICBncmFudGVlLFxuICAgICAgICBcImttczpDcmVhdGVHcmFudFwiLFxuICAgICAgKTtcbiAgICAgIGttc0dyYW50LnByaW5jaXBhbFN0YXRlbWVudCEuYWRkQ29uZGl0aW9ucyhcbiAgICAgICAge1xuICAgICAgICAgIHRlc3Q6IFwiQm9vbFwiLFxuICAgICAgICAgIHZhcmlhYmxlOiBcImttczpHcmFudElzRm9yQVdTUmVzb3VyY2VcIixcbiAgICAgICAgICB2YWx1ZXM6IFtcInRydWVcIl0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICB0ZXN0OiBcIlN0cmluZ0VxdWFsc1wiLFxuICAgICAgICAgIHZhcmlhYmxlOiBcImttczpWaWFTZXJ2aWNlXCIsXG4gICAgICAgICAgdmFsdWVzOiBbYGVjMi4ke0F3c1N0YWNrLm9mQXdzQ29uc3RydWN0KHRoaXMpLnJlZ2lvbn0uYW1hem9uYXdzLmNvbWBdLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgdGVzdDogXCJTdHJpbmdFcXVhbHNcIixcbiAgICAgICAgICB2YXJpYWJsZTogXCJrbXM6R3JhbnRDb25zdHJhaW50VHlwZVwiLFxuICAgICAgICAgIHZhbHVlczogW1wiRW5jcnlwdGlvbkNvbnRleHRTdWJzZXRcIl0sXG4gICAgICAgIH0sXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwdWJsaWMgZ3JhbnRBdHRhY2hWb2x1bWVCeVJlc291cmNlVGFnKFxuICAgIGdyYW50ZWU6IElHcmFudGFibGUsXG4gICAgY29uc3RydWN0czogQ29uc3RydWN0W10sXG4gICAgdGFnS2V5U3VmZml4Pzogc3RyaW5nLFxuICApOiBHcmFudCB7XG4gICAgY29uc3QgdGFnVmFsdWUgPSB0aGlzLmNhbGN1bGF0ZVJlc291cmNlVGFnVmFsdWUoW3RoaXMsIC4uLmNvbnN0cnVjdHNdKTtcbiAgICBjb25zdCB0YWdLZXkgPSBgVm9sdW1lR3JhbnRBdHRhY2gtJHt0YWdLZXlTdWZmaXggPz8gdGFnVmFsdWUuc2xpY2UoMCwgMTApLnRvVXBwZXJDYXNlKCl9YDtcbiAgICBjb25zdCByZXN1bHQgPSB0aGlzLmdyYW50QXR0YWNoVm9sdW1lKGdyYW50ZWUpO1xuICAgIHJlc3VsdC5wcmluY2lwYWxTdGF0ZW1lbnQhLmFkZENvbmRpdGlvbih7XG4gICAgICB0ZXN0OiBcIkZvckFueVZhbHVlOlN0cmluZ0VxdWFsc1wiLFxuICAgICAgdmFyaWFibGU6IGBlYzI6UmVzb3VyY2VUYWcvJHt0YWdLZXl9YCxcbiAgICAgIHZhbHVlczogW3RhZ1ZhbHVlXSxcbiAgICB9KTtcblxuICAgIC8vIFRoZSBSZXNvdXJjZVRhZyBjb25kaXRpb24gcmVxdWlyZXMgdGhhdCBhbGwgcmVzb3VyY2VzIGludm9sdmVkIGluIHRoZSBvcGVyYXRpb24gaGF2ZVxuICAgIC8vIHRoZSBnaXZlbiB0YWcsIHNvIHdlIHRhZyB0aGlzIGFuZCBhbGwgY29uc3RydWN0cyBnaXZlbi5cbiAgICBUYWdzLm9mKHRoaXMpLmFkZCh0YWdLZXksIHRhZ1ZhbHVlKTtcbiAgICBjb25zdHJ1Y3RzLmZvckVhY2goKGNvbnN0cnVjdCkgPT4gVGFncy5vZihjb25zdHJ1Y3QpLmFkZCh0YWdLZXksIHRhZ1ZhbHVlKSk7XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcHVibGljIGdyYW50RGV0YWNoVm9sdW1lKFxuICAgIGdyYW50ZWU6IElHcmFudGFibGUsXG4gICAgaW5zdGFuY2VzPzogSUluc3RhbmNlW10sXG4gICk6IEdyYW50IHtcbiAgICBjb25zdCByZXN1bHQgPSBHcmFudC5hZGRUb1ByaW5jaXBhbCh7XG4gICAgICBncmFudGVlLFxuICAgICAgYWN0aW9uczogW1wiZWMyOkRldGFjaFZvbHVtZVwiXSxcbiAgICAgIHJlc291cmNlQXJuczogdGhpcy5jb2xsZWN0R3JhbnRSZXNvdXJjZUFybnMoaW5zdGFuY2VzKSxcbiAgICB9KTtcbiAgICAvLyBOb3RlOiBObyBlbmNyeXB0aW9uIGtleSBwZXJtaXNzaW9ucyBhcmUgcmVxdWlyZWQgdG8gZGV0YWNoIGFuIGVuY3J5cHRlZCB2b2x1bWUuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHB1YmxpYyBncmFudERldGFjaFZvbHVtZUJ5UmVzb3VyY2VUYWcoXG4gICAgZ3JhbnRlZTogSUdyYW50YWJsZSxcbiAgICBjb25zdHJ1Y3RzOiBDb25zdHJ1Y3RbXSxcbiAgICB0YWdLZXlTdWZmaXg/OiBzdHJpbmcsXG4gICk6IEdyYW50IHtcbiAgICBjb25zdCB0YWdWYWx1ZSA9IHRoaXMuY2FsY3VsYXRlUmVzb3VyY2VUYWdWYWx1ZShbdGhpcywgLi4uY29uc3RydWN0c10pO1xuICAgIGNvbnN0IHRhZ0tleSA9IGBWb2x1bWVHcmFudERldGFjaC0ke3RhZ0tleVN1ZmZpeCA/PyB0YWdWYWx1ZS5zbGljZSgwLCAxMCkudG9VcHBlckNhc2UoKX1gO1xuICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuZ3JhbnREZXRhY2hWb2x1bWUoZ3JhbnRlZSk7XG4gICAgcmVzdWx0LnByaW5jaXBhbFN0YXRlbWVudCEuYWRkQ29uZGl0aW9uKHtcbiAgICAgIHRlc3Q6IFwiRm9yQW55VmFsdWU6U3RyaW5nRXF1YWxzXCIsXG4gICAgICB2YXJpYWJsZTogYGVjMjpSZXNvdXJjZVRhZy8ke3RhZ0tleX1gLFxuICAgICAgdmFsdWVzOiBbdGFnVmFsdWVdLFxuICAgIH0pO1xuXG4gICAgLy8gVGhlIFJlc291cmNlVGFnIGNvbmRpdGlvbiByZXF1aXJlcyB0aGF0IGFsbCByZXNvdXJjZXMgaW52b2x2ZWQgaW4gdGhlIG9wZXJhdGlvbiBoYXZlXG4gICAgLy8gdGhlIGdpdmVuIHRhZywgc28gd2UgdGFnIHRoaXMgYW5kIGFsbCBjb25zdHJ1Y3RzIGdpdmVuLlxuICAgIFRhZ3Mub2YodGhpcykuYWRkKHRhZ0tleSwgdGFnVmFsdWUpO1xuICAgIGNvbnN0cnVjdHMuZm9yRWFjaCgoY29uc3RydWN0KSA9PiBUYWdzLm9mKGNvbnN0cnVjdCkuYWRkKHRhZ0tleSwgdGFnVmFsdWUpKTtcblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwcml2YXRlIGNvbGxlY3RHcmFudFJlc291cmNlQXJucyhpbnN0YW5jZXM/OiBJSW5zdGFuY2VbXSk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBzdGFjayA9IEF3c1N0YWNrLm9mQXdzQ29uc3RydWN0KHRoaXMpO1xuICAgIGNvbnN0IHJlc291cmNlQXJuczogc3RyaW5nW10gPSBbXG4gICAgICBgYXJuOiR7c3RhY2sucGFydGl0aW9ufTplYzI6JHtzdGFjay5yZWdpb259OiR7c3RhY2suYWNjb3VudH06dm9sdW1lLyR7dGhpcy52b2x1bWVJZH1gLFxuICAgIF07XG4gICAgY29uc3QgaW5zdGFuY2VBcm5QcmVmaXggPSBgYXJuOiR7c3RhY2sucGFydGl0aW9ufTplYzI6JHtzdGFjay5yZWdpb259OiR7c3RhY2suYWNjb3VudH06aW5zdGFuY2VgO1xuICAgIGlmIChpbnN0YW5jZXMpIHtcbiAgICAgIGluc3RhbmNlcy5mb3JFYWNoKChpbnN0YW5jZSkgPT5cbiAgICAgICAgcmVzb3VyY2VBcm5zLnB1c2goYCR7aW5zdGFuY2VBcm5QcmVmaXh9LyR7aW5zdGFuY2U/Lmluc3RhbmNlSWR9YCksXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXNvdXJjZUFybnMucHVzaChgJHtpbnN0YW5jZUFyblByZWZpeH0vKmApO1xuICAgIH1cbiAgICByZXR1cm4gcmVzb3VyY2VBcm5zO1xuICB9XG5cbiAgcHJpdmF0ZSBjYWxjdWxhdGVSZXNvdXJjZVRhZ1ZhbHVlKGNvbnN0cnVjdHM6IENvbnN0cnVjdFtdKTogc3RyaW5nIHtcbiAgICByZXR1cm4gbWQ1aGFzaChjb25zdHJ1Y3RzLm1hcCgoYykgPT4gQXdzU3RhY2sudW5pcXVlSWQoYykpLmpvaW4oXCJcIikpO1xuICB9XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBFQlMgVm9sdW1lIGluIEFXUyBFQzIuXG4gKi9cbmV4cG9ydCBjbGFzcyBWb2x1bWUgZXh0ZW5kcyBWb2x1bWVCYXNlIHtcbiAgLyoqXG4gICAqIEltcG9ydCBhbiBleGlzdGluZyBFQlMgVm9sdW1lIGludG8gdGhlIFN0YWNrLlxuICAgKlxuICAgKiBAcGFyYW0gc2NvcGUgdGhlIHNjb3BlIG9mIHRoZSBpbXBvcnQuXG4gICAqIEBwYXJhbSBpZCAgICB0aGUgSUQgb2YgdGhlIGltcG9ydGVkIFZvbHVtZSBpbiB0aGUgY29uc3RydWN0IHRyZWUuXG4gICAqIEBwYXJhbSBhdHRycyB0aGUgYXR0cmlidXRlcyBvZiB0aGUgaW1wb3J0ZWQgVm9sdW1lXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21Wb2x1bWVBdHRyaWJ1dGVzKFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgaWQ6IHN0cmluZyxcbiAgICBhdHRyczogVm9sdW1lQXR0cmlidXRlcyxcbiAgKTogSVZvbHVtZSB7XG4gICAgY2xhc3MgSW1wb3J0IGV4dGVuZHMgVm9sdW1lQmFzZSB7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgdm9sdW1lSWQgPSBhdHRycy52b2x1bWVJZDtcbiAgICAgIHB1YmxpYyByZWFkb25seSBhdmFpbGFiaWxpdHlab25lID0gYXR0cnMuYXZhaWxhYmlsaXR5Wm9uZTtcbiAgICAgIHB1YmxpYyByZWFkb25seSBlbmNyeXB0aW9uS2V5ID0gYXR0cnMuZW5jcnlwdGlvbktleTtcbiAgICB9XG4gICAgLy8gQ2hlY2sgdGhhdCB0aGUgcHJvdmlkZWQgdm9sdW1lSWQgbG9va3MgbGlrZSBpdCBjb3VsZCBiZSB2YWxpZC5cbiAgICBpZiAoXG4gICAgICAhVG9rZW4uaXNVbnJlc29sdmVkKGF0dHJzLnZvbHVtZUlkKSAmJlxuICAgICAgIS9edm9sLVswLTlhLWZBLUZdKyQvLnRlc3QoYXR0cnMudm9sdW1lSWQpXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiYHZvbHVtZUlkYCBkb2VzIG5vdCBtYXRjaCBleHBlY3RlZCBwYXR0ZXJuLiBFeHBlY3RlZCBgdm9sLTxoZXhhZGVjbWlhbCB2YWx1ZT5gIChleDogYHZvbC0wNWFiZTI0NmFmYCkgb3IgYSBUb2tlblwiLFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBJbXBvcnQoc2NvcGUsIGlkKTtcbiAgfVxuXG4gIHB1YmxpYyByZWFkb25seSB2b2x1bWVJZDogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgYXZhaWxhYmlsaXR5Wm9uZTogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgZW5jcnlwdGlvbktleT86IElLZXk7XG5cbiAgcHVibGljIHJlYWRvbmx5IHJlc291cmNlOiBlYnNWb2x1bWUuRWJzVm9sdW1lO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBWb2x1bWVQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgcHJvcHMpO1xuICAgIGNvbnN0IHZvbHVtZU5hbWUgPVxuICAgICAgcHJvcHMudm9sdW1lTmFtZSB8fFxuICAgICAgdGhpcy5zdGFjay51bmlxdWVSZXNvdXJjZU5hbWUodGhpcywge1xuICAgICAgICBwcmVmaXg6IHRoaXMuZ3JpZFVVSUQsXG4gICAgICB9KTtcblxuICAgIHRoaXMudmFsaWRhdGVQcm9wcyhwcm9wcyk7XG5cbiAgICB0aGlzLnJlc291cmNlID0gbmV3IGVic1ZvbHVtZS5FYnNWb2x1bWUodGhpcywgXCJSZXNvdXJjZVwiLCB7XG4gICAgICBhdmFpbGFiaWxpdHlab25lOiBwcm9wcy5hdmFpbGFiaWxpdHlab25lLFxuICAgICAgLy8gYXV0b0VuYWJsZUlvOiBwcm9wcy5hdXRvRW5hYmxlSW8sXG4gICAgICBlbmNyeXB0ZWQ6IHByb3BzLmVuY3J5cHRlZCxcbiAgICAgIGttc0tleUlkOiBwcm9wcy5lbmNyeXB0aW9uS2V5Py5rZXlBcm4sXG4gICAgICBpb3BzOiBwcm9wcy5pb3BzLFxuICAgICAgbXVsdGlBdHRhY2hFbmFibGVkOiBwcm9wcy5lbmFibGVNdWx0aUF0dGFjaCA/PyBmYWxzZSxcbiAgICAgIHNpemU6IHByb3BzLnNpemU/LnRvR2liaWJ5dGVzKHsgcm91bmRpbmc6IFNpemVSb3VuZGluZ0JlaGF2aW9yLkZBSUwgfSksXG4gICAgICBzbmFwc2hvdElkOiBwcm9wcy5zbmFwc2hvdElkLFxuICAgICAgdGhyb3VnaHB1dDogcHJvcHMudGhyb3VnaHB1dCxcbiAgICAgIHR5cGU6IHByb3BzLnZvbHVtZVR5cGUgPz8gRWJzRGV2aWNlVm9sdW1lVHlwZS5HRU5FUkFMX1BVUlBPU0VfU1NEX0dQMyxcbiAgICB9KTtcblxuICAgIGlmIChwcm9wcy52b2x1bWVOYW1lKSBUYWdzLm9mKHRoaXMucmVzb3VyY2UpLmFkZChcIk5hbWVcIiwgdm9sdW1lTmFtZSk7XG5cbiAgICB0aGlzLnZvbHVtZUlkID0gdGhpcy5yZXNvdXJjZS5pZDtcbiAgICB0aGlzLmF2YWlsYWJpbGl0eVpvbmUgPSBwcm9wcy5hdmFpbGFiaWxpdHlab25lO1xuICAgIHRoaXMuZW5jcnlwdGlvbktleSA9IHByb3BzLmVuY3J5cHRpb25LZXk7XG5cbiAgICBpZiAodGhpcy5lbmNyeXB0aW9uS2V5KSB7XG4gICAgICAvLyBQZXI6IGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NFQzIvbGF0ZXN0L1VzZXJHdWlkZS9FQlNFbmNyeXB0aW9uLmh0bWwjZWJzLWVuY3J5cHRpb24tcmVxdWlyZW1lbnRzXG4gICAgICBjb25zdCBwcmluY2lwYWwgPSBuZXcgVmlhU2VydmljZVByaW5jaXBhbChcbiAgICAgICAgYGVjMi4ke0F3c1N0YWNrLm9mQXdzQ29uc3RydWN0KHRoaXMpLnJlZ2lvbn0uYW1hem9uYXdzLmNvbWAsXG4gICAgICAgIG5ldyBBY2NvdW50Um9vdFByaW5jaXBhbCgpLFxuICAgICAgKS53aXRoQ29uZGl0aW9ucyh7XG4gICAgICAgIHRlc3Q6IFwiU3RyaW5nRXF1YWxzXCIsXG4gICAgICAgIHZhcmlhYmxlOiBcImttczpDYWxsZXJBY2NvdW50XCIsXG4gICAgICAgIHZhbHVlczogW0F3c1N0YWNrLm9mQXdzQ29uc3RydWN0KHRoaXMpLmFjY291bnRdLFxuICAgICAgfSk7XG4gICAgICBjb25zdCBncmFudCA9IHRoaXMuZW5jcnlwdGlvbktleS5ncmFudChcbiAgICAgICAgcHJpbmNpcGFsLFxuICAgICAgICAvLyBEZXNjcmliZSAmIEdlbmVyYXRlIGFyZSByZXF1aXJlZCB0byBiZSBhYmxlIHRvIGNyZWF0ZSB0aGUgQ01LLWVuY3J5cHRlZCBWb2x1bWUuXG4gICAgICAgIFwia21zOkRlc2NyaWJlS2V5XCIsXG4gICAgICAgIFwia21zOkdlbmVyYXRlRGF0YUtleVdpdGhvdXRQbGFpblRleHRcIixcbiAgICAgICk7XG4gICAgICBpZiAocHJvcHMuc25hcHNob3RJZCkge1xuICAgICAgICAvLyBSZUVuY3J5cHQgaXMgcmVxdWlyZWQgZm9yIHdoZW4gcmUtZW5jcnlwdGluZyBmcm9tIGFuIGVuY3J5cHRlZCBzbmFwc2hvdC5cbiAgICAgICAgZ3JhbnQucHJpbmNpcGFsU3RhdGVtZW50Py5hZGRBY3Rpb25zKFwia21zOlJlRW5jcnlwdCpcIik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIHZhbGlkYXRlUHJvcHMocHJvcHM6IFZvbHVtZVByb3BzKSB7XG4gICAgaWYgKCEocHJvcHMuc2l6ZSB8fCBwcm9wcy5zbmFwc2hvdElkKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTXVzdCBwcm92aWRlIGF0IGxlYXN0IG9uZSBvZiBgc2l6ZWAgb3IgYHNuYXBzaG90SWRgXCIpO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIHByb3BzLnNuYXBzaG90SWQgJiZcbiAgICAgICFUb2tlbi5pc1VucmVzb2x2ZWQocHJvcHMuc25hcHNob3RJZCkgJiZcbiAgICAgICEvXnNuYXAtWzAtOWEtZkEtRl0rJC8udGVzdChwcm9wcy5zbmFwc2hvdElkKVxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcImBzbmFwc2hvdElkYCBkb2VzIG1hdGNoIGV4cGVjdGVkIHBhdHRlcm4uIEV4cGVjdGVkIGBzbmFwLTxoZXhhZGVjbWlhbCB2YWx1ZT5gIChleDogYHNuYXAtMDVhYmUyNDZhZmApIG9yIFRva2VuXCIsXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChwcm9wcy5lbmNyeXB0aW9uS2V5ICYmICFwcm9wcy5lbmNyeXB0ZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJgZW5jcnlwdGVkYCBtdXN0IGJlIHRydWUgd2hlbiBwcm92aWRpbmcgYW4gYGVuY3J5cHRpb25LZXlgLlwiLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBwcm9wcy52b2x1bWVUeXBlICYmXG4gICAgICBbXG4gICAgICAgIEVic0RldmljZVZvbHVtZVR5cGUuUFJPVklTSU9ORURfSU9QU19TU0QsXG4gICAgICAgIEVic0RldmljZVZvbHVtZVR5cGUuUFJPVklTSU9ORURfSU9QU19TU0RfSU8yLFxuICAgICAgXS5pbmNsdWRlcyhwcm9wcy52b2x1bWVUeXBlKSAmJlxuICAgICAgIXByb3BzLmlvcHNcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJgaW9wc2AgbXVzdCBiZSBzcGVjaWZpZWQgaWYgdGhlIGB2b2x1bWVUeXBlYCBpcyBgUFJPVklTSU9ORURfSU9QU19TU0RgIG9yIGBQUk9WSVNJT05FRF9JT1BTX1NTRF9JTzJgLlwiLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAocHJvcHMuaW9wcykge1xuICAgICAgY29uc3Qgdm9sdW1lVHlwZSA9XG4gICAgICAgIHByb3BzLnZvbHVtZVR5cGUgPz8gRWJzRGV2aWNlVm9sdW1lVHlwZS5HRU5FUkFMX1BVUlBPU0VfU1NEO1xuICAgICAgaWYgKFxuICAgICAgICAhW1xuICAgICAgICAgIEVic0RldmljZVZvbHVtZVR5cGUuUFJPVklTSU9ORURfSU9QU19TU0QsXG4gICAgICAgICAgRWJzRGV2aWNlVm9sdW1lVHlwZS5QUk9WSVNJT05FRF9JT1BTX1NTRF9JTzIsXG4gICAgICAgICAgRWJzRGV2aWNlVm9sdW1lVHlwZS5HRU5FUkFMX1BVUlBPU0VfU1NEX0dQMyxcbiAgICAgICAgXS5pbmNsdWRlcyh2b2x1bWVUeXBlKVxuICAgICAgKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBcImBpb3BzYCBtYXkgb25seSBiZSBzcGVjaWZpZWQgaWYgdGhlIGB2b2x1bWVUeXBlYCBpcyBgUFJPVklTSU9ORURfSU9QU19TU0RgLCBgUFJPVklTSU9ORURfSU9QU19TU0RfSU8yYCBvciBgR0VORVJBTF9QVVJQT1NFX1NTRF9HUDNgLlwiLFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgLy8gRW5mb3JjZSBtaW5pbXVtICYgbWF4aW11bSBJT1BTOlxuICAgICAgLy8gaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXJlc291cmNlLWVjMi12b2x1bWUuaHRtbFxuICAgICAgY29uc3QgaW9wc1JhbmdlczogeyBba2V5OiBzdHJpbmddOiB7IE1pbjogbnVtYmVyOyBNYXg6IG51bWJlciB9IH0gPSB7fTtcbiAgICAgIGlvcHNSYW5nZXNbRWJzRGV2aWNlVm9sdW1lVHlwZS5HRU5FUkFMX1BVUlBPU0VfU1NEX0dQM10gPSB7XG4gICAgICAgIE1pbjogMzAwMCxcbiAgICAgICAgTWF4OiAxNjAwMCxcbiAgICAgIH07XG4gICAgICBpb3BzUmFuZ2VzW0Vic0RldmljZVZvbHVtZVR5cGUuUFJPVklTSU9ORURfSU9QU19TU0RdID0ge1xuICAgICAgICBNaW46IDEwMCxcbiAgICAgICAgTWF4OiA2NDAwMCxcbiAgICAgIH07XG4gICAgICBpb3BzUmFuZ2VzW0Vic0RldmljZVZvbHVtZVR5cGUuUFJPVklTSU9ORURfSU9QU19TU0RfSU8yXSA9IHtcbiAgICAgICAgTWluOiAxMDAsXG4gICAgICAgIE1heDogMjU2MDAwLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHsgTWluLCBNYXggfSA9IGlvcHNSYW5nZXNbdm9sdW1lVHlwZV07XG4gICAgICBpZiAocHJvcHMuaW9wcyA8IE1pbiB8fCBwcm9wcy5pb3BzID4gTWF4KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgXFxgJHt2b2x1bWVUeXBlfVxcYCB2b2x1bWVzIGlvcHMgbXVzdCBiZSBiZXR3ZWVuICR7TWlufSBhbmQgJHtNYXh9LmAsXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIC8vIEVuZm9yY2UgbWF4aW11bSByYXRpbyBvZiBJT1BTL0dpQjpcbiAgICAgIC8vIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NFQzIvbGF0ZXN0L1VzZXJHdWlkZS9lYnMtdm9sdW1lLXR5cGVzLmh0bWxcbiAgICAgIGNvbnN0IG1heGltdW1SYXRpb3M6IHsgW2tleTogc3RyaW5nXTogbnVtYmVyIH0gPSB7fTtcbiAgICAgIG1heGltdW1SYXRpb3NbRWJzRGV2aWNlVm9sdW1lVHlwZS5HRU5FUkFMX1BVUlBPU0VfU1NEX0dQM10gPSA1MDA7XG4gICAgICBtYXhpbXVtUmF0aW9zW0Vic0RldmljZVZvbHVtZVR5cGUuUFJPVklTSU9ORURfSU9QU19TU0RdID0gNTA7XG4gICAgICBtYXhpbXVtUmF0aW9zW0Vic0RldmljZVZvbHVtZVR5cGUuUFJPVklTSU9ORURfSU9QU19TU0RfSU8yXSA9IDUwMDtcbiAgICAgIGNvbnN0IG1heGltdW1SYXRpbyA9IG1heGltdW1SYXRpb3Nbdm9sdW1lVHlwZV07XG4gICAgICBpZiAoXG4gICAgICAgIHByb3BzLnNpemUgJiZcbiAgICAgICAgcHJvcHMuaW9wcyA+XG4gICAgICAgICAgbWF4aW11bVJhdGlvICpcbiAgICAgICAgICAgIHByb3BzLnNpemUudG9HaWJpYnl0ZXMoeyByb3VuZGluZzogU2l6ZVJvdW5kaW5nQmVoYXZpb3IuRkFJTCB9KVxuICAgICAgKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgXFxgJHt2b2x1bWVUeXBlfVxcYCB2b2x1bWVzIGlvcHMgaGFzIGEgbWF4aW11bSByYXRpbyBvZiAke21heGltdW1SYXRpb30gSU9QUy9HaUIuYCxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbWF4aW11bVRocm91Z2hwdXRSYXRpb3M6IHsgW2tleTogc3RyaW5nXTogbnVtYmVyIH0gPSB7fTtcbiAgICAgIG1heGltdW1UaHJvdWdocHV0UmF0aW9zW0Vic0RldmljZVZvbHVtZVR5cGUuR1AzXSA9IDAuMjU7XG4gICAgICBjb25zdCBtYXhpbXVtVGhyb3VnaHB1dFJhdGlvID0gbWF4aW11bVRocm91Z2hwdXRSYXRpb3Nbdm9sdW1lVHlwZV07XG4gICAgICBpZiAocHJvcHMudGhyb3VnaHB1dCAmJiBwcm9wcy5pb3BzKSB7XG4gICAgICAgIGNvbnN0IGlvcHNSYXRpbyA9IHByb3BzLnRocm91Z2hwdXQgLyBwcm9wcy5pb3BzO1xuICAgICAgICBpZiAoaW9wc1JhdGlvID4gbWF4aW11bVRocm91Z2hwdXRSYXRpbykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGBUaHJvdWdocHV0IChNaUJwcykgdG8gaW9wcyByYXRpbyBvZiAke2lvcHNSYXRpb30gaXMgdG9vIGhpZ2g7IG1heGltdW0gaXMgJHttYXhpbXVtVGhyb3VnaHB1dFJhdGlvfSBNaUJwcyBwZXIgaW9wc2AsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChwcm9wcy5lbmFibGVNdWx0aUF0dGFjaCkge1xuICAgICAgY29uc3Qgdm9sdW1lVHlwZSA9XG4gICAgICAgIHByb3BzLnZvbHVtZVR5cGUgPz8gRWJzRGV2aWNlVm9sdW1lVHlwZS5HRU5FUkFMX1BVUlBPU0VfU1NEO1xuICAgICAgaWYgKFxuICAgICAgICAhW1xuICAgICAgICAgIEVic0RldmljZVZvbHVtZVR5cGUuUFJPVklTSU9ORURfSU9QU19TU0QsXG4gICAgICAgICAgRWJzRGV2aWNlVm9sdW1lVHlwZS5QUk9WSVNJT05FRF9JT1BTX1NTRF9JTzIsXG4gICAgICAgIF0uaW5jbHVkZXModm9sdW1lVHlwZSlcbiAgICAgICkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgXCJtdWx0aS1hdHRhY2ggaXMgc3VwcG9ydGVkIGV4Y2x1c2l2ZWx5IG9uIGBQUk9WSVNJT05FRF9JT1BTX1NTRGAgYW5kIGBQUk9WSVNJT05FRF9JT1BTX1NTRF9JTzJgIHZvbHVtZXMuXCIsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHByb3BzLnNpemUpIHtcbiAgICAgIGNvbnN0IHNpemUgPSBwcm9wcy5zaXplLnRvR2liaWJ5dGVzKHtcbiAgICAgICAgcm91bmRpbmc6IFNpemVSb3VuZGluZ0JlaGF2aW9yLkZBSUwsXG4gICAgICB9KTtcbiAgICAgIC8vIEVuZm9yY2UgbWluaW11bSAmIG1heGltdW0gdm9sdW1lIHNpemU6XG4gICAgICAvLyBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcmVzb3VyY2UtZWMyLXZvbHVtZS5odG1sXG4gICAgICBjb25zdCBzaXplUmFuZ2VzOiB7IFtrZXk6IHN0cmluZ106IHsgTWluOiBudW1iZXI7IE1heDogbnVtYmVyIH0gfSA9IHt9O1xuICAgICAgc2l6ZVJhbmdlc1tFYnNEZXZpY2VWb2x1bWVUeXBlLkdFTkVSQUxfUFVSUE9TRV9TU0RdID0ge1xuICAgICAgICBNaW46IDEsXG4gICAgICAgIE1heDogMTYzODQsXG4gICAgICB9O1xuICAgICAgc2l6ZVJhbmdlc1tFYnNEZXZpY2VWb2x1bWVUeXBlLkdFTkVSQUxfUFVSUE9TRV9TU0RfR1AzXSA9IHtcbiAgICAgICAgTWluOiAxLFxuICAgICAgICBNYXg6IDE2Mzg0LFxuICAgICAgfTtcbiAgICAgIHNpemVSYW5nZXNbRWJzRGV2aWNlVm9sdW1lVHlwZS5QUk9WSVNJT05FRF9JT1BTX1NTRF0gPSB7XG4gICAgICAgIE1pbjogNCxcbiAgICAgICAgTWF4OiAxNjM4NCxcbiAgICAgIH07XG4gICAgICBzaXplUmFuZ2VzW0Vic0RldmljZVZvbHVtZVR5cGUuUFJPVklTSU9ORURfSU9QU19TU0RfSU8yXSA9IHtcbiAgICAgICAgTWluOiA0LFxuICAgICAgICBNYXg6IDE2Mzg0LFxuICAgICAgfTtcbiAgICAgIHNpemVSYW5nZXNbRWJzRGV2aWNlVm9sdW1lVHlwZS5USFJPVUdIUFVUX09QVElNSVpFRF9IRERdID0ge1xuICAgICAgICBNaW46IDEyNSxcbiAgICAgICAgTWF4OiAxNjM4NCxcbiAgICAgIH07XG4gICAgICBzaXplUmFuZ2VzW0Vic0RldmljZVZvbHVtZVR5cGUuQ09MRF9IRERdID0geyBNaW46IDEyNSwgTWF4OiAxNjM4NCB9O1xuICAgICAgc2l6ZVJhbmdlc1tFYnNEZXZpY2VWb2x1bWVUeXBlLk1BR05FVElDXSA9IHsgTWluOiAxLCBNYXg6IDEwMjQgfTtcbiAgICAgIGNvbnN0IHZvbHVtZVR5cGUgPVxuICAgICAgICBwcm9wcy52b2x1bWVUeXBlID8/IEVic0RldmljZVZvbHVtZVR5cGUuR0VORVJBTF9QVVJQT1NFX1NTRDtcbiAgICAgIGNvbnN0IHsgTWluLCBNYXggfSA9IHNpemVSYW5nZXNbdm9sdW1lVHlwZV07XG4gICAgICBpZiAoc2l6ZSA8IE1pbiB8fCBzaXplID4gTWF4KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgXFxgJHt2b2x1bWVUeXBlfVxcYCB2b2x1bWVzIG11c3QgYmUgYmV0d2VlbiAke01pbn0gR2lCIGFuZCAke01heH0gR2lCIGluIHNpemUuYCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocHJvcHMudGhyb3VnaHB1dCkge1xuICAgICAgY29uc3QgdGhyb3VnaHB1dFJhbmdlID0geyBNaW46IDEyNSwgTWF4OiAxMDAwIH07XG4gICAgICBjb25zdCB7IE1pbiwgTWF4IH0gPSB0aHJvdWdocHV0UmFuZ2U7XG4gICAgICBpZiAocHJvcHMudm9sdW1lVHlwZSAhPSBFYnNEZXZpY2VWb2x1bWVUeXBlLkdQMykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgXCJ0aHJvdWdocHV0IHByb3BlcnR5IHJlcXVpcmVzIHZvbHVtZVR5cGU6IEVic0RldmljZVZvbHVtZVR5cGUuR1AzXCIsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAocHJvcHMudGhyb3VnaHB1dCA8IE1pbiB8fCBwcm9wcy50aHJvdWdocHV0ID4gTWF4KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgdGhyb3VnaHB1dCBwcm9wZXJ0eSB0YWtlcyBhIG1pbmltdW0gb2YgJHtNaW59IGFuZCBhIG1heGltdW0gb2YgJHtNYXh9YCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiJdfQ==
@@ -81,7 +81,7 @@ class VpcEndpointService extends aws_construct_1.AwsConstructBase {
81
81
  }
82
82
  exports.VpcEndpointService = VpcEndpointService;
83
83
  _a = JSII_RTTI_SYMBOL_1;
84
- VpcEndpointService[_a] = { fqn: "terraconstructs.aws.compute.VpcEndpointService", version: "0.2.1" };
84
+ VpcEndpointService[_a] = { fqn: "terraconstructs.aws.compute.VpcEndpointService", version: "0.2.2" };
85
85
  /**
86
86
  * The default value for a VPC Endpoint Service name prefix, useful if you do
87
87
  * not have a synthesize-time region literal available.
@@ -44,7 +44,7 @@ class VpcEndpoint extends aws_construct_1.AwsConstructBase {
44
44
  }
45
45
  exports.VpcEndpoint = VpcEndpoint;
46
46
  _a = JSII_RTTI_SYMBOL_1;
47
- VpcEndpoint[_a] = { fqn: "terraconstructs.aws.compute.VpcEndpoint", version: "0.2.1" };
47
+ VpcEndpoint[_a] = { fqn: "terraconstructs.aws.compute.VpcEndpoint", version: "0.2.2" };
48
48
  /**
49
49
  * The type of VPC endpoint.
50
50
  */
@@ -84,7 +84,7 @@ class GatewayVpcEndpointAwsService {
84
84
  }
85
85
  exports.GatewayVpcEndpointAwsService = GatewayVpcEndpointAwsService;
86
86
  _b = JSII_RTTI_SYMBOL_1;
87
- GatewayVpcEndpointAwsService[_b] = { fqn: "terraconstructs.aws.compute.GatewayVpcEndpointAwsService", version: "0.2.1" };
87
+ GatewayVpcEndpointAwsService[_b] = { fqn: "terraconstructs.aws.compute.GatewayVpcEndpointAwsService", version: "0.2.2" };
88
88
  // https://github.com/aws/aws-cdk/blob/v2.179.0/packages/aws-cdk-lib/aws-ec2/lib/vpc-endpoint.ts#L93
89
89
  GatewayVpcEndpointAwsService.DYNAMODB = new GatewayVpcEndpointAwsService('dynamodb'); // prettier-ignore
90
90
  GatewayVpcEndpointAwsService.S3 = new GatewayVpcEndpointAwsService('s3'); // prettier-ignore
@@ -131,7 +131,7 @@ class GatewayVpcEndpoint extends VpcEndpoint {
131
131
  }
132
132
  exports.GatewayVpcEndpoint = GatewayVpcEndpoint;
133
133
  _c = JSII_RTTI_SYMBOL_1;
134
- GatewayVpcEndpoint[_c] = { fqn: "terraconstructs.aws.compute.GatewayVpcEndpoint", version: "0.2.1" };
134
+ GatewayVpcEndpoint[_c] = { fqn: "terraconstructs.aws.compute.GatewayVpcEndpoint", version: "0.2.2" };
135
135
  /**
136
136
  * A custom-hosted service for an interface VPC endpoint.
137
137
  */
@@ -147,7 +147,7 @@ class InterfaceVpcEndpointService {
147
147
  }
148
148
  exports.InterfaceVpcEndpointService = InterfaceVpcEndpointService;
149
149
  _d = JSII_RTTI_SYMBOL_1;
150
- InterfaceVpcEndpointService[_d] = { fqn: "terraconstructs.aws.compute.InterfaceVpcEndpointService", version: "0.2.1" };
150
+ InterfaceVpcEndpointService[_d] = { fqn: "terraconstructs.aws.compute.InterfaceVpcEndpointService", version: "0.2.2" };
151
151
  /**
152
152
  * An AWS service for an interface VPC endpoint.
153
153
  */
@@ -324,7 +324,7 @@ class InterfaceVpcEndpointAwsService {
324
324
  }
325
325
  exports.InterfaceVpcEndpointAwsService = InterfaceVpcEndpointAwsService;
326
326
  _e = JSII_RTTI_SYMBOL_1;
327
- InterfaceVpcEndpointAwsService[_e] = { fqn: "terraconstructs.aws.compute.InterfaceVpcEndpointAwsService", version: "0.2.1" };
327
+ InterfaceVpcEndpointAwsService[_e] = { fqn: "terraconstructs.aws.compute.InterfaceVpcEndpointAwsService", version: "0.2.2" };
328
328
  // TODO: Switch to biome :/
329
329
  // see:
330
330
  // - https://github.com/prettier/prettier/issues/5287
@@ -807,5 +807,5 @@ class InterfaceVpcEndpoint extends VpcEndpoint {
807
807
  }
808
808
  exports.InterfaceVpcEndpoint = InterfaceVpcEndpoint;
809
809
  _f = JSII_RTTI_SYMBOL_1;
810
- InterfaceVpcEndpoint[_f] = { fqn: "terraconstructs.aws.compute.InterfaceVpcEndpoint", version: "0.2.1" };
810
+ InterfaceVpcEndpoint[_f] = { fqn: "terraconstructs.aws.compute.InterfaceVpcEndpoint", version: "0.2.2" };
811
811
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidnBjLWVuZHBvaW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2F3cy9jb21wdXRlL3ZwYy1lbmRwb2ludC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLGdHQUFnRztBQUVoRyxzREFBa0Q7QUFDbEQsaUNBS2U7QUFFZiwrQ0FBMEQ7QUFDMUQseUNBQXVEO0FBQ3ZELGlDQUE4QjtBQUM5QixpQ0FBOEI7QUFDOUIscURBQWlFO0FBRWpFLG9EQUkwQjtBQUMxQiw0Q0FBd0M7QUFDeEMsOEJBQThCO0FBMkI5QixNQUFzQixXQUNwQixTQUFRLGdDQUFnQjtJQUl4QixJQUFXLGtCQUFrQjtRQUMzQixPQUFPO1lBQ0wsYUFBYSxFQUFFLElBQUksQ0FBQyxhQUFhO1NBQ2xDLENBQUM7SUFDSixDQUFDO0lBQ0QsSUFBVyxPQUFPO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDO0lBQ2pDLENBQUM7SUFJRDs7Ozs7Ozs7T0FRRztJQUNJLFdBQVcsQ0FBQyxTQUE4QjtRQUMvQyxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQzVCLE1BQU0sSUFBSSxLQUFLLENBQUMsb0NBQW9DLENBQUMsQ0FBQztRQUN4RCxDQUFDO1FBRUQsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN6QixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksR0FBRyxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDL0QsQ0FBQztRQUVELElBQUksQ0FBQyxjQUFjLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQy9DLENBQUM7O0FBbkNILGtDQW9DQzs7O0FBT0Q7O0dBRUc7QUFDSCxJQUFZLGVBcUJYO0FBckJELFdBQVksZUFBZTtJQUN6Qjs7Ozs7O09BTUc7SUFDSCwwQ0FBdUIsQ0FBQTtJQUV2Qjs7Ozs7T0FLRztJQUNILHNDQUFtQixDQUFBO0lBRW5CLGlD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UUFDN0csMkhBQTJIO1FBQzNILHVCQUF1QjtRQUN2Qiw4Q0FBOEM7UUFDOUMsNkRBQTZEO1FBRTdELG1FQUFtRTtRQUNuRSx5REFBeUQ7UUFDekQseUNBQXlDO1FBQ3pDLGdFQUFnRTtRQUNoRSwwQkFBMEI7UUFFMUIscUNBQXFDO1FBQ3JDLGtFQUFrRTtRQUVsRSxrQ0FBa0M7UUFDbEMsMkVBQTJFO1FBQzNFLGdEQUFnRDtRQUNoRCwrQ0FBK0M7UUFDL0MsS0FBSztRQUVMLDJEQUEyRDtRQUMzRCx1REFBdUQ7UUFDdkQscUNBQXFDO1FBQ3JDLHFCQUFxQjtRQUNyQixvSEFBb0g7UUFDcEgsT0FBTztRQUNQLElBQUk7UUFDSixpREFBaUQ7SUFDbkQsQ0FBQzs7QUEzTEgsb0RBOFBDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3MtY2RrL2Jsb2IvdjIuMTc1LjEvcGFja2FnZXMvYXdzLWNkay1saWIvYXdzLWVjMi9saWIvdnBjLWVuZHBvaW50LnRzXG5cbmltcG9ydCB7IHZwY0VuZHBvaW50IH0gZnJvbSBcIkBjZGt0Zi9wcm92aWRlci1hd3NcIjtcbmltcG9ydCB7XG4gIC8vIFRPRE86IFVzZSBHcmlkIGFzIGNvbnRleHRQcm92aWRlclxuICAvLyBDb250ZXh0UHJvdmlkZXIsXG4gIC8vIFRva2VuLFxuICBMYXp5LFxufSBmcm9tIFwiY2RrdGZcIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgeyBDb25uZWN0aW9ucywgSUNvbm5lY3RhYmxlIH0gZnJvbSBcIi4vY29ubmVjdGlvbnNcIjtcbmltcG9ydCB7IGFsbFJvdXRlVGFibGVJZHMsIGZsYXR0ZW4gfSBmcm9tIFwiLi9lYzItdXRpbFwiO1xuaW1wb3J0IHsgUGVlciB9IGZyb20gXCIuL3BlZXJcIjtcbmltcG9ydCB7IFBvcnQgfSBmcm9tIFwiLi9wb3J0XCI7XG5pbXBvcnQgeyBJU2VjdXJpdHlHcm91cCwgU2VjdXJpdHlHcm91cCB9IGZyb20gXCIuL3NlY3VyaXR5LWdyb3VwXCI7XG5pbXBvcnQgeyBJU3VibmV0LCBJVnBjLCBTdWJuZXRTZWxlY3Rpb24gfSBmcm9tIFwiLi92cGNcIjtcbmltcG9ydCB7XG4gIElBd3NDb25zdHJ1Y3QsXG4gIEF3c0NvbnN0cnVjdEJhc2UsXG4gIEF3c0NvbnN0cnVjdFByb3BzLFxufSBmcm9tIFwiLi4vYXdzLWNvbnN0cnVjdFwiO1xuaW1wb3J0IHsgQXdzU3RhY2sgfSBmcm9tIFwiLi4vYXdzLXN0YWNrXCI7XG5pbXBvcnQgKiBhcyBpYW0gZnJvbSBcIi4uL2lhbVwiO1xuXG4vKipcbiAqIE91dHB1dHMgd2hpY2ggbWF5IGJlIHJlZ2lzdGVyZWQgZm9yIG91dHB1dCB2aWEgdGhlIEdyaWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVnBjRW5kcG9pbnRPdXRwdXRzIHtcbiAgLyoqXG4gICAqIFRoZSBWUEMgZW5kcG9pbnQgaWRlbnRpZmllci5cbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgdnBjRW5kcG9pbnRJZDogc3RyaW5nO1xufVxuXG4vKipcbiAqIEEgVlBDIGVuZHBvaW50LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElWcGNFbmRwb2ludCBleHRlbmRzIElBd3NDb25zdHJ1Y3Qge1xuICAvKiogU3Ryb25nbHkgdHlwZWQgb3V0cHV0cyAqL1xuICByZWFkb25seSB2cGNFbmRwb2ludE91dHB1dHM6IFZwY0VuZHBvaW50T3V0cHV0cztcblxuICAvKipcbiAgICogVGhlIFZQQyBlbmRwb2ludCBpZGVudGlmaWVyLlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSB2cGNFbmRwb2ludElkOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBWcGNFbmRwb2ludFxuICBleHRlbmRzIEF3c0NvbnN0cnVjdEJhc2VcbiAgaW1wbGVtZW50cyBJVnBjRW5kcG9pbnRcbntcbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IHZwY0VuZHBvaW50SWQ6IHN0cmluZztcbiAgcHVibGljIGdldCB2cGNFbmRwb2ludE91dHB1dHMoKTogVnBjRW5kcG9pbnRPdXRwdXRzIHtcbiAgICByZXR1cm4ge1xuICAgICAgdnBjRW5kcG9pbnRJZDogdGhpcy52cGNFbmRwb2ludElkLFxuICAgIH07XG4gIH1cbiAgcHVibGljIGdldCBvdXRwdXRzKCk6IFJlY29yZDxzdHJpbmcsIGFueT4ge1xuICAgIHJldHVybiB0aGlzLnZwY0VuZHBvaW50T3V0cHV0cztcbiAgfVxuXG4gIHByb3RlY3RlZCBwb2xpY3lEb2N1bWVudD86IGlhbS5Qb2xpY3lEb2N1bWVudDtcblxuICAvKipcbiAgICogQWRkcyBhIHN0YXRlbWVudCB0byB0aGUgcG9saWN5IGRvY3VtZW50IG9mIHRoZSBWUEMgZW5kcG9pbnQuIFRoZSBzdGF0ZW1lbnRcbiAgICogbXVzdCBoYXZlIGEgUHJpbmNpcGFsLlxuICAgKlxuICAgKiBOb3QgYWxsIGludGVyZmFjZSBWUEMgZW5kcG9pbnRzIHN1cHBvcnQgcG9saWN5LiBGb3IgbW9yZSBpbmZvcm1hdGlvblxuICAgKiBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3ZwYy9sYXRlc3QvdXNlcmd1aWRlL3ZwY2UtaW50ZXJmYWNlLmh0bWxcbiAgICpcbiAgICogQHBhcmFtIHN0YXRlbWVudCB0aGUgSUFNIHN0YXRlbWVudCB0byBhZGRcbiAgICovXG4gIHB1YmxpYyBhZGRUb1BvbGljeShzdGF0ZW1lbnQ6IGlhbS5Qb2xpY3lTdGF0ZW1lbnQpIHtcbiAgICBpZiAoIXN0YXRlbWVudC5oYXNQcmluY2lwYWwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlN0YXRlbWVudCBtdXN0IGhhdmUgYSBgUHJpbmNpcGFsYC5cIik7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLnBvbGljeURvY3VtZW50KSB7XG4gICAgICB0aGlzLnBvbGljeURvY3VtZW50ID0gbmV3IGlhbS5Qb2xpY3lEb2N1bWVudCh0aGlzLCBcIlBvbGljeVwiKTtcbiAgICB9XG5cbiAgICB0aGlzLnBvbGljeURvY3VtZW50LmFkZFN0YXRlbWVudHMoc3RhdGVtZW50KTtcbiAgfVxufVxuXG4vKipcbiAqIEEgZ2F0ZXdheSBWUEMgZW5kcG9pbnQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUdhdGV3YXlWcGNFbmRwb2ludCBleHRlbmRzIElWcGNFbmRwb2ludCB7fVxuXG4vKipcbiAqIFRoZSB0eXBlIG9mIFZQQyBlbmRwb2ludC5cbiAqL1xuZXhwb3J0IGVudW0gVnBjRW5kcG9pbnRUeXBlIHtcbiAgLyoqXG4gICAqIEludGVyZmFjZVxuICAgKlxuICAgKiBBbiBpbnRlcmZhY2UgZW5kcG9pbnQgaXMgYW4gZWxhc3RpYyBuZXR3b3JrIGludGVyZmFjZSB3aXRoIGEgcHJpdmF0ZSBJUFxuICAgKiBhZGRyZXNzIHRoYXQgc2VydmVzIGFzIGFuIGVudHJ5IHBvaW50IGZvciB0cmFmZmljIGRlc3RpbmVkIHRvIGEgc3VwcG9ydGVkXG4gICAqIHNlcnZpY2UuXG4gICAqL1xuICBJTlRFUkZBQ0UgPSBcIkludGVyZmFjZVwiLFxuXG4gIC8qKlxuICAgKiBHYXRld2F5XG4gICAqXG4gICAqIEEgZ2F0ZXdheSBlbmRwb2ludCBpcyBhIGdhdGV3YXkgdGhhdCBpcyBhIHRhcmdldCBmb3IgYSBzcGVjaWZpZWQgcm91dGUgaW5cbiAgICogeW91ciByb3V0ZSB0YWJsZSwgdXNlZCBmb3IgdHJhZmZpYyBkZXN0aW5lZCB0byBhIHN1cHBvcnRlZCBBV1Mgc2VydmljZS5cbiAgICovXG4gIEdBVEVXQVkgPSBcIkdhdGV3YXlcIixcblxuICAvLyBUT0RPOiBBZGQgR2F0ZXdheUxvYWRCYWxhbmNlcj9cbiAgLy8gLSBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvaGFzaGljb3JwL2F3cy81LjY4LjAvZG9jcy9yZXNvdXJjZXMvdnBjX2VuZHBvaW50I3ZwY19lbmRwb2ludF90eXBlLTFcbiAgLy8gLSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcmVzb3VyY2UtZWMyLXZwY2VuZHBvaW50Lmh0bWwjY2ZuLWVjMi12cGNlbmRwb2ludC12cGNlbmRwb2ludHR5cGVcbn1cblxuLyoqXG4gKiBBIHNlcnZpY2UgZm9yIGEgZ2F0ZXdheSBWUEMgZW5kcG9pbnQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUdhdGV3YXlWcGNFbmRwb2ludFNlcnZpY2Uge1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIHNlcnZpY2UuXG4gICAqL1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQW4gQVdTIHNlcnZpY2UgZm9yIGEgZ2F0ZXdheSBWUEMgZW5kcG9pbnQuXG4gKi9cbmV4cG9ydCBjbGFzcyBHYXRld2F5VnBjRW5kcG9pbnRBd3NTZXJ2aWNlXG4gIGltcGxlbWVudHMgSUdhdGV3YXlWcGNFbmRwb2ludFNlcnZpY2VcbntcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3MtY2RrL2Jsb2IvdjIuMTc5LjAvcGFja2FnZXMvYXdzLWNkay1saWIvYXdzLWVjMi9saWIvdnBjLWVuZHBvaW50LnRzI0w5M1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IERZTkFNT0RCID0gbmV3IEdhdGV3YXlWcGNFbmRwb2ludEF3c1NlcnZpY2UoJ2R5bmFtb2RiJyk7IC8vIHByZXR0aWVyLWlnbm9yZVxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFMzID0gbmV3IEdhdGV3YXlWcGNFbmRwb2ludEF3c1NlcnZpY2UoJ3MzJyk7IC8vIHByZXR0aWVyLWlnbm9yZVxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFMzX0VYUFJFU1MgPSBuZXcgR2F0ZXdheVZwY0VuZHBvaW50QXdzU2VydmljZSgnczNleHByZXNzJyk7IC8vIHByZXR0aWVyLWlnbm9yZVxuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgc2VydmljZS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBzaG9ydCBuYW1lIG9mIHRoZSBzZXJ2aWNlLiBlLmcuIGVjc1xuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHNob3J0TmFtZTogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKG5hbWU6IHN0cmluZywgcHJlZml4Pzogc3RyaW5nKSB7XG4gICAgLy8gQXdzLlJlZ2lvbiAtIGltcGxlbWVudGVkIGFzIGEgbGF6eSB2YWx1ZVxuICAgIGNvbnN0IHJlZ2lvblByZWZpeCA9XG4gICAgICBMYXp5LnN0cmluZ1ZhbHVlKHtcbiAgICAgICAgcHJvZHVjZTogKGNvbnRleHQpID0+IEF3c1N0YWNrLm9mQXdzQ29uc3RydWN0KGNvbnRleHQuc2NvcGUpLnJlZ2lvbixcbiAgICAgIH0pICsgXCIuXCI7XG4gICAgdGhpcy5zaG9ydE5hbWUgPSBuYW1lO1xuICAgIHRoaXMubmFtZSA9IGAke3ByZWZpeCB8fCBcImNvbS5hbWF6b25hd3NcIn0uJHtyZWdpb25QcmVmaXh9JHtuYW1lfWA7XG4gIH1cbn1cblxuLyoqXG4gKiBPcHRpb25zIHRvIGFkZCBhIGdhdGV3YXkgZW5kcG9pbnQgdG8gYSBWUEMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR2F0ZXdheVZwY0VuZHBvaW50T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgc2VydmljZSB0byB1c2UgZm9yIHRoaXMgZ2F0ZXdheSBWUEMgZW5kcG9pbnQuXG4gICAqL1xuICByZWFkb25seSBzZXJ2aWNlOiBJR2F0ZXdheVZwY0VuZHBvaW50U2VydmljZTtcblxuICAvKipcbiAgICogV2hlcmUgdG8gYWRkIGVuZHBvaW50IHJvdXRpbmcuXG4gICAqXG4gICAqIEJ5IGRlZmF1bHQsIHRoaXMgZW5kcG9pbnQgd2lsbCBiZSByb3V0YWJsZSBmcm9tIGFsbCBzdWJuZXRzIGluIHRoZSBWUEMuXG4gICAqIFNwZWNpZnkgYSBsaXN0IG9mIHN1Ym5ldCBzZWxlY3Rpb24gb2JqZWN0cyBoZXJlIHRvIGJlIG1vcmUgc3BlY2lmaWMuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gQWxsIHN1Ym5ldHMgaW4gdGhlIFZQQ1xuICAgKiBAZXhhbXBsZVxuICAgKlxuICAgKiBkZWNsYXJlIGNvbnN0IHZwYzogY29tcHV0ZS5WcGM7XG4gICAqXG4gICAqIHZwYy5hZGRHYXRld2F5RW5kcG9pbnQoJ0R5bmFtb0RiRW5kcG9pbnQnLCB7XG4gICAqICAgc2VydmljZTogZWMyLkdhdGV3YXlWcGNFbmRwb2ludEF3c1NlcnZpY2UuRFlOQU1PREIsXG4gICAqICAgLy8gQWRkIG9ubHkgdG8gSVNPTEFURUQgc3VibmV0c1xuICAgKiAgIHN1Ym5ldHM6IFtcbiAgICogICAgIHsgc3VibmV0VHlwZTogZWMyLlN1Ym5ldFR5cGUuUFJJVkFURV9JU09MQVRFRCB9XG4gICAqICAgXVxuICAgKiB9KTtcbiAgICpcbiAgICpcbiAgICovXG4gIHJlYWRvbmx5IHN1Ym5ldHM/OiBTdWJuZXRTZWxlY3Rpb25bXTtcbn1cblxuLyoqXG4gKiBDb25zdHJ1Y3Rpb24gcHJvcGVydGllcyBmb3IgYSBHYXRld2F5VnBjRW5kcG9pbnQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR2F0ZXdheVZwY0VuZHBvaW50UHJvcHNcbiAgZXh0ZW5kcyBHYXRld2F5VnBjRW5kcG9pbnRPcHRpb25zLFxuICAgIEF3c0NvbnN0cnVjdFByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBWUEMgbmV0d29yayBpbiB3aGljaCB0aGUgZ2F0ZXdheSBlbmRwb2ludCB3aWxsIGJlIHVzZWQuXG4gICAqL1xuICByZWFkb25seSB2cGM6IElWcGM7XG59XG5cbi8qKlxuICogQSBnYXRld2F5IFZQQyBlbmRwb2ludC5cbiAqIEByZXNvdXJjZSBhd3NfdnBjX2VuZHBvaW50XG4gKi9cbmV4cG9ydCBjbGFzcyBHYXRld2F5VnBjRW5kcG9pbnRcbiAgZXh0ZW5kcyBWcGNFbmRwb2ludFxuICBpbXBsZW1lbnRzIElHYXRld2F5VnBjRW5kcG9pbnRcbntcbiAgcHVibGljIHN0YXRpYyBmcm9tR2F0ZXdheVZwY0VuZHBvaW50SWQoXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBpZDogc3RyaW5nLFxuICAgIGdhdGV3YXlWcGNFbmRwb2ludElkOiBzdHJpbmcsXG4gICk6IElHYXRld2F5VnBjRW5kcG9pbnQge1xuICAgIGNsYXNzIEltcG9ydCBleHRlbmRzIFZwY0VuZHBvaW50IHtcbiAgICAgIHB1YmxpYyB2cGNFbmRwb2ludElkID0gZ2F0ZXdheVZwY0VuZHBvaW50SWQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBJbXBvcnQoc2NvcGUsIGlkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgZ2F0ZXdheSBWUEMgZW5kcG9pbnQgaWRlbnRpZmllci5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB2cGNFbmRwb2ludElkOiBzdHJpbmc7XG5cbiAgLy8gLyoqXG4gIC8vICAqIFRoZSBkYXRlIGFuZCB0aW1lIHRoZSBnYXRld2F5IFZQQyBlbmRwb2ludCB3YXMgY3JlYXRlZC5cbiAgLy8gICogQGF0dHJpYnV0ZVxuICAvLyAgKi9cbiAgLy8gcHVibGljIHJlYWRvbmx5IHZwY0VuZHBvaW50Q3JlYXRpb25UaW1lc3RhbXA6IHN0cmluZztcblxuICAvKipcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHZwY0VuZHBvaW50TmV0d29ya0ludGVyZmFjZUlkczogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB2cGNFbmRwb2ludERuc0VudHJpZXM6IHZwY0VuZHBvaW50LlZwY0VuZHBvaW50RG5zRW50cnlMaXN0O1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBHYXRld2F5VnBjRW5kcG9pbnRQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgcHJvcHMpO1xuXG4gICAgY29uc3Qgc3VibmV0czogSVN1Ym5ldFtdID0gcHJvcHMuc3VibmV0c1xuICAgICAgPyBmbGF0dGVuKHByb3BzLnN1Ym5ldHMubWFwKChzKSA9PiBwcm9wcy52cGMuc2VsZWN0U3VibmV0cyhzKS5zdWJuZXRzKSlcbiAgICAgIDogW1xuICAgICAgICAgIC4uLnByb3BzLnZwYy5wcml2YXRlU3VibmV0cyxcbiAgICAgICAgICAuLi5wcm9wcy52cGMucHVibGljU3VibmV0cyxcbiAgICAgICAgICAuLi5wcm9wcy52cGMuaXNvbGF0ZWRTdWJuZXRzLFxuICAgICAgICBdO1xuICAgIGNvbnN0IHJvdXRlVGFibGVJZHMgPSBhbGxSb3V0ZVRhYmxlSWRzKHN1Ym5ldHMpO1xuXG4gICAgaWYgKHJvdXRlVGFibGVJZHMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiQ2FuJ3QgYWRkIGEgZ2F0ZXdheSBlbmRwb2ludCB0byBWUEM7IHJvdXRlIHRhYmxlIElEcyBhcmUgbm90IGF2YWlsYWJsZVwiLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBlbmRwb2ludCA9IG5ldyB2cGNFbmRwb2ludC5WcGNFbmRwb2ludCh0aGlzLCBcIlJlc291cmNlXCIsIHtcbiAgICAgIHBvbGljeTogdGhpcy5wb2xpY3lEb2N1bWVudD8uanNvbixcbiAgICAgIHJvdXRlVGFibGVJZHMsXG4gICAgICBzZXJ2aWNlTmFtZTogcHJvcHMuc2VydmljZS5uYW1lLFxuICAgICAgdnBjRW5kcG9pbnRUeXBlOiBWcGNFbmRwb2ludFR5cGUuR0FURVdBWSxcbiAgICAgIHZwY0lkOiBwcm9wcy52cGMudnBjSWQsXG4gICAgfSk7XG5cbiAgICB0aGlzLnZwY0VuZHBvaW50SWQgPSBlbmRwb2ludC5pZDtcbiAgICAvLyB0aGlzLnZwY0VuZHBvaW50Q3JlYXRpb25UaW1lc3RhbXAgPSBlbmRwb2ludC5hdHRyQ3JlYXRpb25UaW1lc3RhbXA7XG4gICAgdGhpcy52cGNFbmRwb2ludERuc0VudHJpZXMgPSBlbmRwb2ludC5kbnNFbnRyeTtcbiAgICB0aGlzLnZwY0VuZHBvaW50TmV0d29ya0ludGVyZmFjZUlkcyA9IGVuZHBvaW50Lm5ldHdvcmtJbnRlcmZhY2VJZHM7XG4gIH1cbn1cblxuLyoqXG4gKiBBIHNlcnZpY2UgZm9yIGFuIGludGVyZmFjZSBWUEMgZW5kcG9pbnQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUludGVyZmFjZVZwY0VuZHBvaW50U2VydmljZSB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgc2VydmljZS5cbiAgICovXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHBvcnQgb2YgdGhlIHNlcnZpY2UuXG4gICAqL1xuICByZWFkb25seSBwb3J0OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgUHJpdmF0ZSBETlMgaXMgc3VwcG9ydGVkIGJ5IGRlZmF1bHQuXG4gICAqL1xuICByZWFkb25seSBwcml2YXRlRG5zRGVmYXVsdD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQSBjdXN0b20taG9zdGVkIHNlcnZpY2UgZm9yIGFuIGludGVyZmFjZSBWUEMgZW5kcG9pbnQuXG4gKi9cbmV4cG9ydCBjbGFzcyBJbnRlcmZhY2VWcGNFbmRwb2ludFNlcnZpY2VcbiAgaW1wbGVtZW50cyBJSW50ZXJmYWNlVnBjRW5kcG9pbnRTZXJ2aWNlXG57XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgc2VydmljZS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBwb3J0IG9mIHRoZSBzZXJ2aWNlLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHBvcnQ6IG51bWJlcjtcblxuICAvKipcbiAgICogV2hldGhlciBQcml2YXRlIEROUyBpcyBzdXBwb3J0ZWQgYnkgZGVmYXVsdC5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBwcml2YXRlRG5zRGVmYXVsdD86IGJvb2xlYW4gPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmcsIHBvcnQ/OiBudW1iZXIpIHtcbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgIHRoaXMucG9ydCA9IHBvcnQgfHwgNDQzO1xuICB9XG59XG5cbi8qKlxuICogT3B0aW9uYWwgcHJvcGVydGllcyBmb3IgdGhlIEludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZSBjbGFzc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZVByb3BzIHtcbiAgLyoqXG4gICAqIElmIHRydWUsIHRoZSBzZXJ2aWNlIGlzIGEgZ2xvYmFsIGVuZHBvaW50IGFuZFxuICAgKiBpdHMgbmFtZSB3aWxsIG5vdCBiZSBwcmVmaXhlZCB3aXRoIHRoZSBzdGFjaydzIHJlZ2lvbi5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGdsb2JhbD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQW4gQVdTIHNlcnZpY2UgZm9yIGFuIGludGVyZmFjZSBWUEMgZW5kcG9pbnQuXG4gKi9cbmV4cG9ydCBjbGFzcyBJbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2VcbiAgaW1wbGVtZW50cyBJSW50ZXJmYWNlVnBjRW5kcG9pbnRTZXJ2aWNlXG57XG4gIC8vIFRPRE86IFN3aXRjaCB0byBiaW9tZSA6L1xuICAvLyBzZWU6XG4gIC8vICAgLSBodHRwczovL2dpdGh1Yi5jb20vcHJldHRpZXIvcHJldHRpZXIvaXNzdWVzLzUyODdcbiAgLy8gICAtIGh0dHBzOi8vZ2l0aHViLmNvbS9iaW9tZWpzL2Jpb21lL2lzc3Vlcy80NTY5XG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay9ibG9iL3YyLjE3OS4wL3BhY2thZ2VzL2F3cy1jZGstbGliL2F3cy1lYzIvbGliL3ZwYy1lbmRwb2ludC50cyNMMjc1XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgQUNDRVNTX0FOQUxZWkVSID0gbmV3IEludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZSgnYWNjZXNzLWFuYWx5emVyJyk7IC8vIHByZXR0aWVyLWlnbm9yZVxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEFDQ09VTlRfTUFOQUdFTUVOVCA9IG5ldyBJbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UoJ2FjY291bnQnKTsgLy8gcHJldHRpZXItaWdub3JlXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgQUlSRkxPV19BUEkgPSBuZXcgSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlKCdhaXJmbG93LmFwaScpOyAvLyBwcmV0dGllci1pZ25vcmVcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBBSVJGTE9XX0FQSV9GSVBTID0gbmV3IEludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZSgnYWlyZmxvdy5hcGktZmlwcycpOyAvLyBwcmV0dGllci1pZ25vcmVcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBBSVJGTE9XX0VOViA9IG5ldyBJbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UoJ2FpcmZsb3cuZW52Jyk7IC8vIHByZXR0aWVyLWlnbm9yZVxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEFJUkZMT1dfRU5WX0ZJUFMgPSBuZXcgSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlKCdhaXJmbG93LmVudi1maXBzJyk7IC8vIHByZXR0aWVyLWlnbm9yZVxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEFJUkZMT1dfT1BTID0gbmV3IEludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZSgnYWlyZmxvdy5vcHMnKTsgLy8gcHJldHRpZXItaWdub3JlXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgQVBJR0FURVdBWSA9IG5ldyBJbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UoJ2V4ZWN1dGUtYXBpJyk7IC8vIHByZXR0aWVyLWlnbm9yZVxuICAvKiogQGRlcHJlY2F0ZWQgLSBVc2UgSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlLkFQUF9NRVNIX0VOVk9ZX01BTkFHRU1FTlQgaW5zdGVhZC4gKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBBUFBfTUVTSCA9IG5ldyBJbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UoJ2FwcG1lc2gtZW52b3ktbWFuYWdlbWVudCcpOyAvLyBwcmV0dGllci1pZ25vcmVcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBBUFBfTUVTSF9FTlZPWV9NQU5BR0VNRU5UID0gbmV3IEludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZSgnYXBwbWVzaC1lbnZveS1tYW5hZ2VtZW50Jyk7IC8vIHByZXR0aWVyLWlnbm9yZVxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEFQUF9NRVNIX09QUyA9IG5ldyBJbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UoJ2FwcG1lc2gnKTsgLy8gcHJldHRpZXItaWdub3JlXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgQVBQX1JVTk5FUiA9IG5ldyBJbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UoJ2FwcHJ1bm5lcicpOyAvLyBwcmV0dGllci1pZ25vcmVcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBBUFBfUlVOTkVSX1JFUVVFU1RTID0gbmV3IEludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZSgnYXBwcnVubmVyLnJlcXVlc3RzJyk7IC8vIHByZXR0aWVyLWlnbm9yZVxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEFQUF9TWU5DID0gbmV3IEludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZSgnYXBwc3luYy1hcGknKTsgLy8gcHJldHRpZXItaWdub3JlXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgQVBQQ09ORklHID0gbmV3IEludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZSgnYXBwY29uZmlnJyk7IC8vIHByZXR0aWVyLWlnbm9yZVxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEFQUENPTkZJR0RBVEEgPSBuZXcgSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlKCdhcHBjb25maWdkYXRhJyk7IC8vIHByZXR0aWVyLWlnbm9yZVxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEFQUExJQ0FUSU9OX0FVVE9TQ0FMSU5HID0gbmV3IEludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZSgnYXBwbGljYXRpb24tYXV0b3NjYWxpbmcnKTsgLy8gcHJldHRpZXItaWdub3JlXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgQVBQTElDQVRJT05fRElTQ09WRVJZX0FSU0VOQUwgPSBuZXcgSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlKCdhcnNlbmFsLWRpc2NvdmVyeScpOyAvLyBwcmV0dGllci1pZ25vcmVcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBBUFBMSUNBVElPTl9ESVNDT1ZFUllfU0VSVklDRSA9IG5ldyBJbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UoJ2Rpc2NvdmVyeScpOyAvLyBwcmV0dGllci1pZ25vcmVcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBBUFBMSUNBVElPTl9NSUdSQVRJT05fU0VSVklDRSA9IG5ldyBJbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UoJ21nbicpOyAvLyBwcmV0dGllci1pZ25vcmVcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBBUFBTVFJFQU1fQVBJID0gbmV3IEludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZSgnYXBwc3RyZWFtLmFwaScpOyAvLyBwcmV0dGllci1pZ25vcmVcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBBUFBTVFJFQU1fU1RSRUFNSU5HID0gbmV3IEludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZSgnYXBwc3RyZWFtLnN0cmVhbWluZycpOyAvLyBwcmV0dGllci1pZ25vcmVcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBBVEhFTkEgPSBuZXcgSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlKCdhdGhlbmEnKTsgLy8gcHJldHRpZXItaWdub3JlXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgQVVESVRfTUFOQUdFUiA9IG5ldyBJbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UoJ2F1ZGl0bWFuYWdlcicpOyAvLyBwcmV0dGllci1pZ25vcmVcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBBVVRPU0NBTElORyA9IG5ldyBJbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UoJ2F1dG9zY2FsaW5nJyk7IC8vIHByZXR0aWVyLWlnbm9yZVxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEFVVE9TQ0FMSU5HX1BMQU5TID0gbmV3IEludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZSgnYXV0b3NjYWxpbmctcGxhbnMnKTsgLy8gcHJldHRpZXItaWdub3JlXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgQjJCX0RBVEFfSU5URVJDSEFOR0UgPSBuZXcgSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlKCdiMmJpJyk7IC8vIHByZXR0aWVyLWlnbm9yZVxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEJBQ0tVUCA9IG5ldyBJbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UoJ2JhY2t1cCcpOyAvLyBwcmV0dGllci1pZ25vcmVcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBCQUNLVVBfR0FURVdBWSA9IG5ldyBJbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UoJ2JhY2t1cC1nYXRld2F5Jyk7IC8vIHByZXR0aWVyLWlnbm9yZVxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEJBVENIID0gbmV3IEludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZSgnYmF0Y2gnKTsgLy8gcHJldHRpZXItaWdub3JlXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgQkVEUk9DSyA9IG5ldyBJbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UoJ2JlZHJvY2snKTsgLy8gcHJldHRpZXItaWdub3JlXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgQkVEUk9DS19BR0VOVCA9IG5ldyBJbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UoJ2JlZHJvY2stYWdlbnQnKTsgLy8gcHJldHRpZXItaWdub3JlXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgQkVEUk9DS19BR0VOVF9SVU5USU1FID0gbmV3IEludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZSgnYmVkcm9jay1hZ2VudC1ydW50aW1lJyk7IC8vIHByZXR0aWVyLWlnbm9yZVxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEJFRFJPQ0tfUlVOVElNRSA9IG5ldyBJbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UoJ2JlZHJvY2stcnVudGltZScpOyAvLyBwcmV0dGllci1pZ25vcmVcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBCSUxMSU5HID0gbmV3IEludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZSgnYmlsbGluZycpOyAvLyBwcmV0dGllci1pZ25vcmVcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBCSUxMSU5HX0FORF9DT1NUX01BTkFHRU1FTlRfRlJFRVRJRVIgPSBuZXcgSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlKCdmcmVldGllcicsICdhd3MuYXBpJyk7IC8vIHByZXR0aWVyLWlnbm9yZVxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEJJTExJTkdfQU5EX0NPU1RfTUFOQUdFTUVOVF9UQVggPSBuZXcgSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlKCd0YXgnKTsgLy8gcHJldHRpZXItaWdub3JlXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgQklMTElOR19DT05EVUNUT1IgPSBuZXcgSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlKCdiaWxsaW5nY29uZHVjdG9yJyk7IC8vIHByZXR0aWVyLWlnbm9yZVxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEJSQUtFVCA9IG5ldyBJbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UoJ2JyYWtldCcpOyAvLyBwcmV0dGllci1pZ25vcmVcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBDTEVBTl9ST09NUyA9IG5ldyBJbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UoJ2NsZWFucm9vbXMnKTsgLy8gcHJldHRpZXItaWdub3JlXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgQ0xFQU5fUk9PTVNfTUwgPSBuZXcgSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlKCdjbGVhbnJvb21zLW1sJyk7IC8vIHByZXR0aWVyLWlnbm9yZVxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IENMT1VEX0NPTlRST0xfQVBJID0gbmV3IEludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZSgnY2xvdWRjb250cm9sYXBpJyk7IC8vIHByZXR0aWVyLWlnbm9yZVxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IENMT1VEX0NPTlRST0xfQVBJX0ZJUFMgPSBuZXcgSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlKCdjbG91ZGNvbnRyb2xhcGktZmlwcycpOyAvLyBwcmV0dGllci1pZ25vcmVcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBDTE9VRF9ESVJFQ1RPUlkgPSBuZXcgSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlKCdjbG91ZGRpcmVjdG9yeScpOyAvLyBwcmV0dGllci1pZ25vcmVcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBDTE9VRF9NQVBfREFUQV9TRVJWSUNFX0RJU0NPVkVSWSA9IG5ldyBJbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UoJ2RhdGEtc2VydmljZWRpc2NvdmVyeScpOyAvLyBwcmV0dGllci1pZ25vcmVcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBDTE9VRF9NQVBfREFUQV9TRVJWSUNFX0RJU0NPVkVSWV9GSVBTID0gbmV3IEludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZSgnZGF0YS1zZXJ2aWNlZGlzY292ZXJ5LWZpcHMnKTsgLy8gcHJldHRpZXItaWdub3JlXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgQ0xPVURfTUFQX1NFUlZJQ0VfRElTQ09WRVJZID0gbmV3IEludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZSgnc2VydmljZWRpc2NvdmVyeScpOyAvLyBwcmV0dGllci1pZ25vcmVcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBDTE9VRF9NQVBfU0VSVklDRV9ESVNDT1ZFUllfRklQUyA9IG5ldyBJbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UoJ3NlcnZpY2VkaXNjb3ZlcnktZmlwcycpOyAvLyBwcmV0dGllci1pZ25vcmVcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBDTE9VREZPUk1BVElPTiA9IG5ldyBJbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UoJ2Nsb3VkZm9ybWF0aW9uJyk7IC8vIHByZXR0aWVyLWlnbm9yZVxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IENMT1VESFNNID0gbmV3IEludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZSgnY2xvdWRoc212MicpOyAvLyBwcmV0dGllci1pZ25vcmVcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBDTE9VRFRSQUlMID0gbmV3IEludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZSgnY2xvdWR0cmFpbCcpOyAvLyBwcmV0dGllci1pZ25vcmVcbiAgLyoqIEBkZXByZWNhdGVkIFVzZSBJbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UuUV9ERVZFTE9QRVJfQ09ERV9XSElTUEVSRVIgaW5zdGVhZC4qL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IENPREVXSElTUEVSRVIgPSBuZXcgSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlKCdjb2Rld2hpc3BlcmVyJyk7IC8vIHByZXR0aWVyLWlnbm9yZVxuICAvKiogQGRlcHJlY2F0ZWQgLSBVc2UgSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlLkNMT1VEV0FUQ0hfTU9OSVRPUklORyBpbnN0ZWFkLiAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IENMT1VEV0FUQ0ggPSBuZXcgSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlKCdtb25pdG9yaW5nJyk7IC8vIHByZXR0aWVyLWlnbm9yZVxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IENMT1VEV0FUQ0hfQVBQTElDQVRJT05fSU5TSUdIVFMgPSBuZXcgSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlKCdhcHBsaWNhdGlvbmluc2lnaHRzJyk7IC8vIHByZXR0aWVyLWlnbm9yZVxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IENMT1VEV0FUQ0hfQVBQTElDQVRJT05fU0lHTkFMUyA9IG5ldyBJbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UoJ2FwcGxpY2F0aW9uLXNpZ25hbHMnKTsgLy8gcHJldHRpZXItaWdub3JlXG4gIC8qKiBAZGVwcmVjYXRlZCAtIFVzZSBJbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UuRVZFTlRCUklER0UgaW5zdGVhZC4gKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBDTE9VRFdBVENIX0VWRU5UUyA9IG5ldyBJbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UoJ2V2ZW50cycpOyAvLyBwcmV0dGllci1pZ25vcmVcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBDTE9VRFdBVENIX0VWSURFTlRMWSA9IG5ldyBJbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UoJ2V2aWRlbnRseScpOyAvLyBwcmV0dGllci1pZ25vcmVcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBDTE9VRFdBVENIX0VWSURFTlRMWV9EQVRBUExBTkUgPSBuZXcgSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlKCdldmlkZW50bHktZGF0YXBsYW5lJyk7IC8vIHByZXR0aWVyLWlnbm9yZVxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IENMT1VEV0FUQ0hfTE9HUyA9IG5ldyBJbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UoJ2xvZ3MnKTsgLy8gcHJldHRpZXItaWdub3JlXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgQ0xPVURXQVRDSF9NT05JVE9SSU5HID0gbmV3IEludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZSgnbW9uaXRvcmluZycpOyAvLyBwcmV0dGllci1pZ25vcmVcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBDTE9VRFdBVENIX05FVFdPUktfTU9OSVRPUiA9IG5ldyBJbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UoJ25ldHdvcmttb25pdG9yJyk7IC8vIHByZXR0aWVyLWlnbm9yZVxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IENMT1VEV0FUQ0hfUlVNID0gbmV3IEludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZSgncnVtJyk7IC8vIHByZXR0aWVyLWlnbm9yZVxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IENMT1VEV0FUQ0hfUlVNX0RBVEFQTEFORSA9IG5ldyBJbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UoJ3J1bS1kYXRhcGxhbmUnKTsgLy8gcHJldHRpZXItaWdub3JlXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgQ0xPVURXQVRDSF9TWU5USEVUSUNTID0gbmV3IEludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZSgnc3ludGhldGljcycpOyAvLyBwcmV0dGllci1pZ25vcmVcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBDTE9VRFdBVENIX1NZTlRIRVRJQ1NfRklQUyA9IG5ldyBJbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UoJ3N5bnRoZXRpY3MtZmlwcycpOyAvLyBwcmV0dGllci1pZ25vcmVcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBDT0RFQVJUSUZBQ1RfQVBJID0gbmV3IEludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZSgnY29kZWFydGlmYWN0LmFwaScpOyAvLyBwcmV0dGllci1pZ25vcmVcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBDT0RFQVJUSUZBQ1RfUkVQT1NJVE9SSUVTID0gbmV3IEludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZSgnY29kZWFydGlmYWN0LnJlcG9zaXRvcmllcycpOyAvLyBwcmV0dGllci1pZ25vcmVcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBDT0RFQlVJTEQgPSBuZXcgSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlKCdjb2RlYnVpbGQnKTsgLy8gcHJldHRpZXItaWdub3JlXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgQ09ERUJVSUxEX0ZJUFMgPSBuZXcgSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlKCdjb2RlYnVpbGQtZmlwcycpOyAvLyBwcmV0dGllci1pZ25vcmVcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBDT0RFQ0FUQUxZU1QgPSBuZXcgSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlKCdjb2RlY2F0YWx5c3QnLCAnYXdzLmFwaS5nbG9iYWwnLCB1bmRlZmluZWQsIHsgZ2xvYmFsOiB0cnVlIH0pOyAvLyBwcmV0dGllci1pZ25vcmVcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBDT0RFQ0FUQUxZU1RfR0lUID0gbmV3IEludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZSgnY29kZWNhdGFseXN0LmdpdCcpOyAvLyBwcmV0dGllci1pZ25vcmVcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBDT0RFQ0FUQUxZU1RfUEFDS0FHRVMgPSBuZXcgSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlKCdjb2RlY2F0YWx5c3QucGFja2FnZXMnKTsgLy8gcHJldHRpZXItaWdub3JlXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgQ09ERUNPTU1JVCA9IG5ldyBJbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UoJ2NvZGVjb21taXQnKTsgLy8gcHJldHRpZXItaWdub3JlXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgQ09ERUNPTU1JVF9GSVBTID0gbmV3IEludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZSgnY29kZWNvbW1pdC1maXBzJyk7IC8vIHByZXR0aWVyLWlnbm9yZVxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IENPREVERVBMT1kgPSBuZXcgSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlKCdjb2RlZGVwbG95Jyk7IC8vIHByZXR0aWVyLWlnbm9yZVxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IENPREVERVBMT1lfQ09NTUFORFNfU0VDVVJFID0gbmV3IEludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZSgnY29kZWRlcGxveS1jb21tYW5kcy1zZWN1cmUnKTsgLy8gcHJldHRpZXItaWdub3JlXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgQ09ERUdVUlVfUFJPRklMRVIgPSBuZXcgSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlKCdjb2RlZ3VydS1wcm9maWxlcicpOyAvLyBwcmV0dGllci1pZ25vcmVcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBDT0RFR1VSVV9SRVZJRVdFUiA9IG5ldyBJbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UoJ2NvZGVndXJ1LXJldmlld2VyJyk7IC8vIHByZXR0aWVyLWlnbm9yZVxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IENPREVQSVBFTElORSA9IG5ldyBJbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UoJ2NvZGVwaXBlbGluZScpOyAvLyBwcmV0dGllci1pZ25vcmVcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBDT0RFU1RBUl9DT05ORUNUSU9OUyA9IG5ldyBJbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UoJ2NvZGVzdGFyLWNvbm5lY3Rpb25zLmFwaScpOyAvLyBwcmV0dGllci1pZ25vcmVcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBDT0RFX0NPTk5FQ1RJT05TID0gbmV3IEludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZSgnY29kZWNvbm5lY3Rpb25zLmFwaScpOyAvLyBwcmV0dGllci1pZ25vcmVcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBDT01QUkVIRU5EID0gbmV3IEludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZSgnY29tcHJlaGVuZCcpOyAvLyBwcmV0dGllci1pZ25vcmVcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBDT01QUkVIRU5EX01FRElDQUwgPSBuZXcgSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlKCdjb21wcmVoZW5kbWVkaWNhbCcpOyAvLyBwcmV0dGllci1pZ25vcmVcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBDT01QVVRFX09QVElNSVpFUiA9IG5ldyBJbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UoJ2NvbXB1dGUtb3B0aW1pemVyJyk7IC8vIHByZXR0aWVyLWlnbm9yZVxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IENPTkZJRyA9IG5ldyBJbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UoJ2NvbmZpZycpOyAvLyBwcmV0dGllci1pZ25vcmVcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBDT05ORUNUX0FQUF9JTlRFR1JBVElPTlMgPSBuZXcgSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlKCdhcHAtaW50ZWdyYXRpb25zJyk7IC8vIHByZXR0aWVyLWlnbm9yZVxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IENPTk5FQ1RfQ0FTRVMgPSBuZXcgSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlKCdjYXNlcycpOyAvLyBwcmV0dGllci1pZ25vcmVcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBDT05ORUNUX0NPTk5FQ1RfQ0FNUEFJR05TID0gbmV3IEludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZSgnY29ubmVjdC1jYW1wYWlnbnMnKTsgLy8gcHJldHRpZXItaWdub3JlXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgQ09OTkVDVF9QUk9GSUxFID0gbmV3IEludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZSgncHJvZmlsZScpOyAvLyBwcmV0dGllci1pZ25vcmVcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBDT05ORUNUX1ZPSUNFSUQgPSBuZXcgSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlKCd2b2ljZWlkJyk7IC8vIHByZXR0aWVyLWlnbm9yZVxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IENPTk5FQ1RfV0lTRE9NID0gbmV3IEludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZSgnd2lzZG9tJyk7IC8vIHByZXR0aWVyLWlnbm9yZVxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IENPTlRST0xfQ0FUQUxPRyA9IG5ldyBJbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UoJ2NvbnRyb2xjYXRhbG9nJyk7IC8vIHByZXR0aWVyLWlnbm9yZVxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IENPU1RfRVhQTE9SRVIgPSBuZXcgSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlKCdjZScpOyAvLyBwcmV0dGllci1pZ25vcmVcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBDT1NUX09QVElNSVpBVElPTl9IVUIgPSBuZXcgSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlKCdjb3N0LW9wdGltaXphdGlvbi1odWInKTsgLy8gcHJldHRpZXItaWdub3JlXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgREFUQV9FWENIQU5HRSA9IG5ldyBJbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UoJ2RhdGFleGNoYW5nZScpOyAvLyBwcmV0dGllci1pZ25vcmVcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBEQVRBX0VYUE9SVFMgPSBuZXcgSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlKCdiY20tZGF0YS1leHBvcnRzJywgJ2F3cy5hcGknKTsgLy8gcHJldHRpZXItaWdub3JlXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgREFUQVNZTkMgPSBuZXcgSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlKCdkYXRhc3luYycpOyAvLyBwcmV0dGllci1pZ25vcmVcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBEQVRBWk9ORSA9IG5ldyBJbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UoJ2RhdGF6b25lJyk7IC8vIHByZXR0aWVyLWlnbm9yZVxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IERBVEFCQVNFX01JR1JBVElPTl9TRVJWSUNFID0gbmV3IEludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZSgnZG1zJyk7IC8vIHByZXR0aWVyLWlnbm9yZVxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IERBVEFCQVNFX01JR1JBVElPTl9TRVJWSUNFX0ZJUFMgPSBuZXcgSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlKCdkbXMtZmlwcycpOyAvLyBwcmV0dGllci1pZ25vcmVcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBERUFETElORV9DTE9VRF9NQU5BR0VNRU5UID0gbmV3IEludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZSgnZGVhZGxpbmUubWFuYWdlbWVudCcpOyAvLyBwcmV0dGllci1pZ25vcmVcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBERUFETElORV9DTE9VRF9TQ0hFRFVMSU5HID0gbmV3IEludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZSgnZGVhZGxpbmUuc2NoZWR1bGluZycpOyAvLyBwcmV0dGllci1pZ25vcmVcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBERVZPUFNfR1VSVSA9IG5ldyBJbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UoJ2Rldm9wcy1ndXJ1Jyk7IC8vIHByZXR0aWVyLWlnbm9yZVxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IERJUkVDVE9SWV9TRVJWSUNFID0gbmV3IEludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZSgnZHMnKTsgLy8gcHJldHRpZXItaWdub3JlXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgRElSRUNUT1JZX1NFUlZJQ0VfREFUQSA9IG5ldyBJbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UoJ2RzLWRhdGEnKTsgLy8gcHJldHRpZXItaWdub3JlXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgRFlOQU1PREIgPSBuZXcgSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlKCdkeW5hbW9kYicpOyAvLyBwcmV0dGllci1pZ25vcmVcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBEWU5BTU9EQl9GSVBTID0gbmV3IEludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZSgnZHluYW1vZGItZmlwcycpOyAvLyBwcmV0dGllci1pZ25vcmVcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBFQlNfRElSRUNUID0gbmV3IEludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZSgnZWJzJyk7IC8vIHByZXR0aWVyLWlnbm9yZVxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEVDMiA9IG5ldyBJbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UoJ2VjMicpOyAvLyBwcmV0dGllci1pZ25vcmVcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBFQzJfTUVTU0FHRVMgPSBuZXcgSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlKCdlYzJtZXNzYWdlcycpOyAvLyBwcmV0dGllci1pZ25vcmVcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBFQ1IgPSBuZXcgSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlKCdlY3IuYXBpJyk7IC8vIHByZXR0aWVyLWlnbm9yZVxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEVDUl9ET0NLRVIgPSBuZXcgSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlKCdlY3IuZGtyJyk7IC8vIHByZXR0aWVyLWlnbm9yZVxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEVDUyA9IG5ldyBJbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UoJ2VjcycpOyAvLyBwcmV0dGllci1pZ25vcmVcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBFQ1NfQUdFTlQgPSBuZXcgSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlKCdlY3MtYWdlbnQnKTsgLy8gcHJldHRpZXItaWdub3JlXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgRUNTX1RFTEVNRVRSWSA9IG5ldyBJbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UoJ2Vjcy10ZWxlbWV0cnknKTsgLy8gcHJldHRpZXItaWdub3JlXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgRUtTID0gbmV3IEludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZSgnZWtzJyk7IC8vIHByZXR0aWVyLWlnbm9yZVxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEVLU19BVVRIID0gbmV3IEludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZSgnZWtzLWF1dGgnKTsgLy8gcHJldHRpZXItaWdub3JlXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgRUxBU1RJQ19CRUFOU1RBTEsgPSBuZXcgSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlKCdlbGFzdGljYmVhbnN0YWxrJyk7IC8vIHByZXR0aWVyLWlnbm9yZVxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEVMQVNUSUNfQkVBTlNUQUxLX0hFQUxUSCA9IG5ldyBJbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UoJ2VsYXN0aWNiZWFuc3RhbGstaGVhbHRoJyk7IC8vIHByZXR0aWVyLWlnbm9yZVxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEVMQVNUSUNfRElTQVNURVJfUkVDT1ZFUlkgPSBuZXcgSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlKCdkcnMnKTsgLy8gcHJldHRpZXItaWdub3JlXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgRUxBU1RJQ19GSUxFU1lTVEVNID0gbmV3IEludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZSgnZWxhc3RpY2ZpbGVzeXN0ZW0nKTsgLy8gcHJldHRpZXItaWdub3JlXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgRUxBU1RJQ19GSUxFU1lTVEVNX0ZJUFMgPSBuZXcgSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlKCdlbGFzdGljZmlsZXN5c3RlbS1maXBzJyk7IC8vIHByZXR0aWVyLWlnbm9yZVxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEVMQVNUSUNfSU5GRVJFTkNFX1JVTlRJTUUgPSBuZXcgSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlKCdlbGFzdGljLWluZmVyZW5jZS5ydW50aW1lJyk7IC8vIHByZXR0aWVyLWlnbm9yZVxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEVMQVNUSUNfTE9BRF9CQUxBTkNJTkcgPSBuZXcgSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlKCdlbGFzdGljbG9hZGJhbGFuY2luZycpOyAvLyBwcmV0dGllci1pZ25vcmVcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBFTEFTVElDQUNIRSA9IG5ldyBJbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UoJ2VsYXN0aWNhY2hlJyk7IC8vIHByZXR0aWVyLWlnbm9yZVxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEVMQVNUSUNBQ0hFX0ZJUFMgPSBuZXcgSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlKCdlbGFzdGljYWNoZS1maXBzJyk7IC8vIHByZXR0aWVyLWlnbm9yZVxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEVMRU1FTlRBTF9NRURJQUNPTk5FQ1QgPSBuZXcgSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlKCdtZWRpYWNvbm5lY3QnKTsgLy8gcHJldHRpZXItaWdub3JlXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgRU1BSUxfU01UUCA9IG5ldyBJbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UoJ2VtYWlsLXNtdHAnKTsgLy8gcHJldHRpZXItaWdub3JlXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgRU1SID0gbmV3IEludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZSgnZWxhc3RpY21hcHJlZHVjZScpOyAvLyBwcmV0dGllci1pZ25vcmVcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBFTVJfRUtTID0gbmV3IEludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZSgnZW1yLWNvbnRhaW5lcnMnKTsgLy8gcHJldHRpZXItaWdub3JlXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgRU1SX1NFUlZFUkxFU1MgPSBuZXcgSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlKCdlbXItc2VydmVybGVzcycpOyAvLyBwcmV0dGllci1pZ25vcmVcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBFTVJfU0VSVkVSTEVTU19MSVZZID0gbmV3IEludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZSgnZW1yLXNlcnZlcmxlc3Mtc2VydmljZXMubGl2eScpOyAvLyBwcmV0dGllci1pZ25vcmVcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBFTVJfV0FMID0gbmV3IEludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZSgnZW1yd2FsLnByb2QnKTsgLy8gcHJldHRpZXItaWdub3JlXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgRU5EX1VTRVJfTUVTU0FHSU5HX1NPQ0lBTCA9IG5ldyBJbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UoJ3NvY2lhbC1tZXNzYWdpbmcnKTsgLy8gcHJldHRpZXItaWdub3JlXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgRU5USVRZX1JFU09MVVRJT04gPSBuZXcgSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlKCdlbnRpdHlyZXNvbHV0aW9uJyk7IC8vIHByZXR0aWVyLWlnbm9yZVxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEVWRU5UQlJJREdFID0gbmV3IEludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZSgnZXZlbnRzJyk7IC8vIHByZXR0aWVyLWlnbm9yZVxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEVWRU5UQlJJREdFX1NDSEVNQV9SRUdJU1RSWSA9IG5ldyBJbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UoJ3NjaGVtYXMnKTsgLy8gcHJldHRpZXItaWdub3JlXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgRkFVTFRfSU5KRUNUSU9OX1NJTVVMQVRPUiA9IG5ldyBJbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UoJ2ZpcycpOyAvLyBwcmV0dGllci1pZ25vcmVcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBGSU5TUEFDRSA9IG5ldyBJbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UoJ2ZpbnNwYWNlJyk7IC8vIHByZXR0aWVyLWlnbm9yZVxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEZJTlNQQUNFX0FQSSA9IG5ldyBJbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UoJ2ZpbnNwYWNlLWFwaScpOyAvLyBwcmV0dGllci1pZ25vcmVcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBGT1JFQ0FTVCA9IG5ldyBJbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UoJ2ZvcmVjYXN0Jyk7IC8vIHByZXR0aWVyLWlnbm9yZVxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEZPUkVDQVNUX1FVRVJZID0gbmV3IEludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZSgnZm9yZWNhc3RxdWVyeScpOyAvLyBwcmV0dGllci1pZ25vcmVcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBGT1JFQ0FTVF9GSVBTID0gbmV3IEludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZSgnZm9yZWNhc3QtZmlwcycpOyAvLyBwcmV0dGllci1pZ25vcmVcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBGT1JFQ0FTVF9RVUVSWV9GSVBTID0gbmV3IEludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZSgnZm9yZWNhc3RxdWVyeS1maXBzJyk7IC8vIHByZXR0aWVyLWlnbm9yZVxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEZSQVVEX0RFVEVDVE9SID0gbmV3IEludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZSgnZnJhdWRkZXRlY3RvcicpOyAvLyBwcmV0dGllci1pZ25vcmVcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBGU1ggPSBuZXcgSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlKCdmc3gnKTsgLy8gcHJldHRpZXItaWdub3JlXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgRlNYX0ZJUFMgPSBuZXcgSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlKCdmc3gtZmlwcycpOyAvLyBwcmV0dGllci1pZ25vcmVcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBDT0RFQ09NTUlUX0dJVCA9IG5ldyBJbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UoJ2dpdC1jb2RlY29tbWl0Jyk7IC8vIHByZXR0aWVyLWlnbm9yZVxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IENPREVDT01NSVRfR0lUX0ZJUFMgPSBuZXcgSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlKCdnaXQtY29kZWNvbW1pdC1maXBzJyk7IC8vIHByZXR0aWVyLWlnbm9yZVxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEdMVUUgPSBuZXcgSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlKCdnbHVlJyk7IC8vIHByZXR0aWVyLWlnbm9yZVxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEdMVUVfREFUQUJSRVcgPSBuZXcgSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlKCdkYXRhYnJldycpOyAvLyBwcmV0dGllci1pZ25vcmVcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBHTFVFX0RBU0hCT0FSRCA9IG5ldyBJbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UoJ2dsdWUuZGFzaGJvYXJkJyk7IC8vIHByZXR0aWVyLWlnbm9yZVxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEdSQUZBTkEgPSBuZXcgSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlKCdncmFmYW5hJyk7IC8vIHByZXR0aWVyLWlnbm9yZVxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEdSQUZBTkFfV09SS1NQQUNFID0gbmV3IEludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZSgnZ3JhZmFuYS13b3Jrc3BhY2UnKTsgLy8gcHJldHRpZXItaWdub3JlXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgR1JPVU5EU1RBVElPTiA9IG5ldyBJbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UoJ2dyb3VuZHN0YXRpb24nKTsgLy8gcHJldHRpZXItaWdub3JlXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgR1VBUkREVVRZID0gbmV3IEludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZSgnZ3VhcmRkdXR5Jyk7IC8vIHByZXR0aWVyLWlnbm9yZVxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEdVQVJERFVUWV9GSVBTID0gbmV3IEludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZSgnZ3VhcmRkdXR5LWZpcHMnKTsgLy8gcHJldHRpZXItaWdub3JlXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgR1VBUkREVVRZX0RBVEEgPSBuZXcgSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlKCdndWFyZGR1dHktZGF0YScpOyAvLyBwcmV0dGllci1pZ25vcmVcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBHVUFSRERVVFlfREFUQV9GSVBTID0gbmV3IEludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZSgnZ3VhcmRkdXR5LWRhdGEtZmlwcycpOyAvLyBwcmV0dGllci1pZ25vcmVcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBIRUFMVEhfSU1BR0lORyA9IG5ldyBJbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UoJ21lZGljYWwtaW1hZ2luZycpOyAvLyBwcmV0dGllci1pZ25vcmVcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBIRUFMVEhfSU1BR0lOR19SVU5USU1FID0gbmV3IEludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZSgncnVudGltZS1tZWRpY2FsLWltYWdpbmcnKTsgLy8gcHJldHRpZXItaWdub3JlXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgSEVBTFRIX0lNQUdJTkdfRElDT00gPSBuZXcgSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlKCdkaWNvbS1tZWRpY2FsLWltYWdpbmcnKTsgLy8gcHJldHRpZXItaWdub3JlXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgSEVBTFRITEFLRSA9IG5ldyBJbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UoJ2hlYWx0aGxha2UnKTsgLy8gcHJldHRpZXItaWdub3JlXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgSUFNID0gbmV3IEludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZSgnaWFtJywgJ2NvbS5hbWF6b25hd3MnLCB1bmRlZmluZWQsIHsgZ2xvYmFsOiB0cnVlIH0pOyAvLyBwcmV0dGllci1pZ25vcmVcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBJQU1fSURFTlRJVFlfQ0VOVEVSID0gbmV3IEludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZSgnaWRlbnRpdHlzdG9yZScpOyAvLyBwcmV0dGllci1pZ25vcmVcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBJQU1fUk9MRVNfQU5ZV0hFUkUgPSBuZXcgSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlKCdyb2xlc2FueXdoZXJlJyk7IC8vIHByZXR0aWVyLWlnbm9yZVxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IElNQUdFX0JVSUxERVIgPSBuZXcgSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlKCdpbWFnZWJ1aWxkZXInKTsgLy8gcHJldHRpZXItaWdub3JlXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgSU5TUEVDVE9SID0gbmV3IEludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZSgnaW5zcGVjdG9yMicpOyAvLyBwcmV0dGllci1pZ25vcmVcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBJTlNQRUNUT1JfU0NBTiA9IG5ldyBJbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UoJ2luc3BlY3Rvci1zY2FuJyk7IC8vIHByZXR0aWVyLWlnbm9yZVxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IElOVEVSTkVUX01PTklUT1IgPSBuZXcgSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlKCdpbnRlcm5ldG1vbml0b3InKTsgLy8gcHJldHRpZXItaWdub3JlXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgSU5URVJORVRfTU9OSVRPUl9GSVBTID0gbmV3IEludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZSgnaW50ZXJuZXRtb25pdG9yLWZpcHMnKTsgLy8gcHJldHRpZXItaWdub3JlXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgSU5WT0lDSU5HID0gbmV3IEludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZSgnaW52b2ljaW5nJyk7IC8vIHByZXR0aWVyLWlnbm9yZVxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IElPVF9DT1JFID0gbmV3IEludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZSgnaW90LmRhdGEnKTsgLy8gcHJldHRpZXItaWdub3JlXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgSU9UX0NPUkVfQ1JFREVOVElBTFMgPSBuZXcgSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlKCdpb3QuY3JlZGVudGlhbHMnKTsgLy8gcHJldHRpZXItaWdub3JlXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgSU9UX0NPUkVfREVWSUNFX0FEVklTT1IgPSBuZXcgSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlKCdkZXZpY2VhZHZpc29yLmlvdCcpOyAvLyBwcmV0dGllci1pZ25vcmVcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBJT1RfQ09SRV9GTEVFVEhVQl9BUEkgPSBuZXcgSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlKCdpb3QuZmxlZXRodWIuYXBpJyk7IC8vIHByZXR0aWVyLWlnbm9yZVxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IElPVF9DT1JFX0ZPUl9MT1JBV0FOID0gbmV3IEludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZSgnaW90d2lyZWxlc3MuYXBpJyk7IC8vIHByZXR0aWVyLWlnbm9yZVxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IElPVF9GTEVFVFdJU0UgPSBuZXcgSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlKCdpb3RmbGVldHdpc2UnKTsgLy8gcHJldHRpZXItaWdub3JlXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgSU9UX0xPUkFXQU5fQ1VQUyA9IG5ldyBJbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UoJ2xvcmF3YW4uY3VwcycpOyAvLyBwcmV0dGllci1pZ25vcmVcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBJT1RfTE9SQVdBTl9MTlMgPSBuZXcgSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlKCdsb3Jhd2FuLmxucycpOyAvLyBwcmV0dGllci1pZ25vcmVcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBJT1RfR1JFRU5HUkFTUyA9IG5ldyBJbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UoJ2dyZWVuZ3Jhc3MnKTsgLy8gcHJldHRpZXItaWdub3JlXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgSU9UX1JPQk9SVU5ORVIgPSBuZXcgSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlKCdpb3Ryb2JvcnVubmVyJyk7IC8vIHByZXR0aWVyLWlnbm9yZVxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IElPVF9TSVRFV0lTRV9BUEkgPSBuZXcgSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlKCdpb3RzaXRld2lzZS5hcGknKTsgLy8gcHJldHRpZXItaWdub3JlXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgSU9UX1NJVEVXSVNFX0RBVEEgPSBuZXcgSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlKCdpb3RzaXRld2lzZS5kYXRhJyk7IC8vIHByZXR0aWVyLWlnbm9yZVxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IElPVF9UV0lOTUFLRVJfQVBJID0gbmV3IEludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZSgnaW90dHdpbm1ha2VyLmFwaScpOyAvLyBwcmV0dGllci1pZ25vcmVcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBJT1RfVFdJTk1BS0VSX0RBVEEgPSBuZXcgSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlKCdpb3R0d2lubWFrZXIuZGF0YScpOyAvLyBwcmV0dGllci1pZ25vcmVcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBLQUZLQSA9IG5ldyBJbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UoJ2thZmthJyk7IC8vIHByZXR0aWVyLWlnbm9yZVxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEtBRktBX0ZJUFMgPSBuZXcgSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlKCdrYWZrYS1maXBzJyk7IC8vIHByZXR0aWVyLWlnbm9yZVxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEtBRktBX0NPTk5FQ1QgPSBuZXcgSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlKCdrYWZrYWNvbm5lY3QnKTsgLy8gcHJldHRpZXItaWdub3JlXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgS0VORFJBID0gbmV3IEludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZSgna2VuZHJhJyk7IC8vIHByZXR0aWVyLWlnbm9yZVxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEtFTkRSQV9SQU5LSU5HID0gbmV3IEludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZSgna2VuZHJhLXJhbmtpbmcnLCAnYXdzLmFwaScpOyAvLyBwcmV0dGllci1pZ25vcmVcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBLRVlTUEFDRVMgPSBuZXcgSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlKCdjYXNzYW5kcmEnLCAnJywgOTE0Mik7IC8vIHByZXR0aWVyLWlnbm9yZVxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEtFWVNQQUNFU19GSVBTID0gbmV3IEludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZSgnY2Fzc2FuZHJhLWZpcHMnLCAnJywgOTE0Mik7IC8vIHByZXR0aWVyLWlnbm9yZVxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEtJTkVTSVNfU1RSRUFNUyA9IG5ldyBJbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UoJ2tpbmVzaXMtc3RyZWFtcycpOyAvLyBwcmV0dGllci1pZ25vcmVcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBLSU5FU0lTX1NUUkVBTVNfRklQUyA9IG5ldyBJbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UoJ2tpbmVzaXMtc3RyZWFtcy1maXBzJyk7IC8vIHByZXR0aWVyLWlnbm9yZVxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEtJTkVTSVNfRklSRUhPU0UgPSBuZXcgSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlKCdraW5lc2lzLWZpcmVob3NlJyk7IC8vIHByZXR0aWVyLWlnbm9yZVxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEtNUyA9IG5ldyBJbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UoJ2ttcycpOyAvLyBwcmV0dGllci1pZ25vcmVcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBLTVNfRklQUyA9IG5ldyBJbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UoJ2ttcy1maXBzJyk7IC8vIHByZXR0aWVyLWlnbm9yZVxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IExBS0VfRk9STUFUSU9OID0gbmV3IEludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZSgnbGFrZWZvcm1hdGlvbicpOyAvLyBwcmV0dGllci1pZ25vcmVcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBMQVVOQ0hfV0laQVJEID0gbmV3IEludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZSgnbGF1bmNod2l6YXJkJyk7IC8vIHByZXR0aWVyLWlnbm9yZVxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IExBTUJEQSA9IG5ldyBJbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UoJ2xhbWJkYScpOyAvLyBwcmV0dGllci1pZ25vcmVcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBMRVhfTU9ERUxTID0gbmV3IEludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZSgnbW9kZWxzLXYyLWxleCcpOyAvLyBwcmV0dGllci1pZ25vcmVcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBMRVhfUlVOVElNRSA9IG5ldyBJbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UoJ3J1bnRpbWUtdjItbGV4Jyk7IC8vIHByZXR0aWVyLWlnbm9yZVxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IExJQ0VOU0VfTUFOQUdFUiA9IG5ldyBJbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UoJ2xpY2Vuc2UtbWFuYWdlcicpOyAvLyBwcmV0dGllci1pZ25vcmVcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBMSUNFTlNFX01BTkFHRVJfRklQUyA9IG5ldyBJbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UoJ2xpY2Vuc2UtbWFuYWdlci1maXBzJyk7IC8vIHByZXR0aWVyLWlnbm9yZVxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IExJQ0VOU0VfTUFOQUdFUl9MSU5VWF9TVUJTQ1JJUFRJT05TID0gbmV3IEludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZSgnbGljZW5zZS1tYW5hZ2VyLWxpbnV4LXN1YnNjcmlwdGlvbnMnKTsgLy8gcHJldHRpZXItaWdub3JlXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgTElDRU5TRV9NQU5BR0VSX0xJTlVYX1NVQlNDUklQVElPTlNfRklQUyA9IG5ldyBJbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UoJ2xpY2Vuc2UtbWFuYWdlci1saW51eC1zdWJzY3JpcHRpb25zLWZpcHMnKTsgLy8gcHJldHRpZXItaWdub3JlXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgTElDRU5TRV9NQU5BR0VSX1VTRVJfU1VCU0NSSVBUSU9OUyA9IG5ldyBJbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UoJ2xpY2Vuc2UtbWFuYWdlci11c2VyLXN1YnNjcmlwdGlvbnMnKTsgLy8gcHJldHRpZXItaWdub3JlXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgTE9PS09VVF9FUVVJUE1FTlQgPSBuZXcgSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlKCdsb29rb3V0ZXF1aXBtZW50Jyk7IC8vIHByZXR0aWVyLWlnbm9yZVxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IExPT0tPVVRfTUVUUklDUyA9IG5ldyBJbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UoJ2xvb2tvdXRtZXRyaWNzJyk7IC8vIHByZXR0aWVyLWlnbm9yZVxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IExPT0tPVVRfVklTSU9OID0gbmV3IEludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZSgnbG9va291dHZpc2lvbicpOyAvLyBwcmV0dGllci1pZ25vcmVcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBNQUlORlJBTUVfTU9ERVJOSVpBVElPTiA9IG5ldyBJbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UoJ20yJyk7IC8vIHByZXR0aWVyLWlnbm9yZVxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE1BSU5GUkFNRV9NT0RFUk5JWkFUSU9OX0FQUF9URVNUID0gbmV3IEludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZSgnYXBwdGVzdCcpOyAvLyBwcmV0dGllci1pZ25vcmVcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBNQUNJRSA9IG5ldyBJbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UoJ21hY2llMicpOyAvLyBwcmV0dGllci1pZ25vcmVcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBNQU5BR0VNRU5UX0NPTlNPTEUgPSBuZXcgSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlKCdjb25zb2xlJyk7IC8vIHByZXR0aWVyLWlnbm9yZVxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE1BTkFHRU1FTlRfQ09OU09MRV9TSUdOSU4gPSBuZXcgSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlKCdzaWduaW4nKTsgLy8gcHJldHRpZXItaWdub3JlXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgTUFOQUdFRF9CTE9DS0NIQUlOX1FVRVJZID0gbmV3IEludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZSgnbWFuYWdlZGJsb2NrY2hhaW4tcXVlcnknKTsgLy8gcHJldHRpZXItaWdub3JlXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgTUFOQUdFRF9CTE9DS0NIQUlOX0JJVENPSU5fTUFJTk5FVCA9IG5ldyBJbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UoJ21hbmFnZWRibG9ja2NoYWluLmJpdGNvaW4ubWFpbm5ldCcpOyAvLyBwcmV0dGllci1pZ25vcmVcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBNQU5BR0VEX0JMT0NLQ0hBSU5fQklUQ09JTl9URVNUTkVUID0gbmV3IEludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZSgnbWFuYWdlZGJsb2NrY2hhaW4uYml0Y29pbi50ZXN0bmV0Jyk7IC8vIHByZXR0aWVyLWlnbm9yZVxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE1FTU9SWV9EQiA9IG5ldyBJbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UoJ21lbW9yeS1kYicpOyAvLyBwcmV0dGllci1pZ25vcmVcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBNRU1PUllfREJfRklQUyA9IG5ldyBJbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UoJ21lbW9yeWRiLWZpcHMnKTsgLy8gcHJldHRpZXItaWdub3JlXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgTUlHUkFUSU9OSFVCX09SQ0hFU1RSQVRPUiA9IG5ldyBJbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UoJ21pZ3JhdGlvbmh1Yi1vcmNoZXN0cmF0b3InKTsgLy8gcHJldHRpZXItaWdub3JlXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgTUlHUkFUSU9OSFVCX1JFRkFDVE9SX1NQQUNFUyA9IG5ldyBJbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UoJ3JlZmFjdG9yLXNwYWNlcycpOyAvLyBwcmV0dGllci1pZ25vcmVcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBNSUdSQVRJT05IVUJfU1RSQVRFR1kgPSBuZXcgSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlKCdtaWdyYXRpb25odWItc3RyYXRlZ3knKTsgLy8gcHJldHRpZXItaWdub3JlXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgTVEgPSBuZXcgSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlKCdtcScpOyAvLyBwcmV0dGllci1pZ25vcmVcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBORVBUVU5FX0FOQUxZVElDUyA9IG5ldyBJbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UoJ25lcHR1bmUtZ3JhcGgnKTsgLy8gcHJldHRpZXItaWdub3JlXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgTkVQVFVORV9BTkFMWVRJQ1NfREFUQSA9IG5ldyBJbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UoJ25lcHR1bmUtZ3JhcGgtZGF0YScpOyAvLyBwcmV0dGllci1pZ25vcmVcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBORVBUVU5FX0FOQUxZVElDU19GSVBTID0gbmV3IEludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZSgnbmVwdHVuZS1ncmFwaC1maXBzJyk7IC8vIHByZXR0aWVyLWlnbm9yZVxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE5FVFdPUktfRklSRVdBTEwgPSBuZXcgSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlKCduZXR3b3JrLWZpcmV3YWxsJyk7IC8vIHByZXR0aWVyLWlnbm9yZVxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE5FVFdPUktfRklSRVdBTExfRklQUyA9IG5ldyBJbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UoJ25ldHdvcmstZmlyZXdhbGwtZmlwcycpOyAvLyBwcmV0dGllci1pZ25vcmVcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBORVRXT1JLX0ZMT1dfTU9OSVRPUiA9IG5ldyBJbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UoJ25ldHdvcmtmbG93bW9uaXRvcicpOyAvLyBwcmV0dGllci1pZ25vcmVcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBORVRXT1JLX0ZMT1dfTU9OSVRPUl9SRVBPUlRTID0gbmV3IEludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZSgnbmV0d29ya2Zsb3dtb25pdG9ycmVwb3J0cycpOyAvLyBwcmV0dGllci1pZ25vcmVcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBOSU1CTEVfU1RVRElPID0gbmV3IEludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZSgnbmltYmxlJyk7IC8vIHByZXR0aWVyLWlnbm9yZVxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE9CU0VSVkFCSUxJVFlfQURNSU4gPSBuZXcgSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlKCdvYnNlcnZhYmlsaXR5YWRtaW4nKTsgLy8gcHJldHRpZXItaWdub3JlXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgT1VUUE9TVFMgPSBuZXcgSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlKCdvdXRwb3N0cycpOyAvLyBwcmV0dGllci1pZ25vcmVcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBPUkdBTklaQVRJT05TID0gbmV3IEludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZSgnb3JnYW5pemF0aW9ucycpOyAvLyBwcmV0dGllci1pZ25vcmVcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBPUkdBTklaQVRJT05TX0ZJUFMgPSBuZXcgSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlKCdvcmdhbml6YXRpb25zLWZpcHMnKTsgLy8gcHJldHRpZXItaWdub3JlXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgT01JQ1NfQU5BTFlUSUNTID0gbmV3IEludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZSgnYW5hbHl0aWNzLW9taWNzJyk7IC8vIHByZXR0aWVyLWlnbm9yZVxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE9NSUNTX0NPTlRST0xfU1RPUkFHRSA9IG5ldyBJbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UoJ2NvbnRyb2wtc3RvcmFnZS1vbWljcycpOyAvLyBwcmV0dGllci1pZ25vcmVcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBPTUlDU19TVE9SQUdFID0gbmV3IEludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZSgnc3RvcmFnZS1vbWljcycpOyAvLyBwcmV0dGllci1pZ25vcmVcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBPTUlDU19UQUdTID0gbmV3IEludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZSgndGFncy1vbWljcycpOyAvLyBwcmV0dGllci1pZ25vcmVcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBPTUlDU19XT1JLRkxPV1MgPSBuZXcgSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlKCd3b3JrZmxvd3Mtb21pY3MnKTsgLy8gcHJldHRpZXItaWdub3JlXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUEFOT1JBTUEgPSBuZXcgSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlKCdwYW5vcmFtYScpOyAvLyBwcmV0dGllci1pZ25vcmVcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBQQVJBTExFTF9DT01QVVRJTkdfU0VSVklDRSA9IG5ldyBJbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UoJ3BjcycpOyAvLyBwcmV0dGllci1pZ25vcmVcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBQQVJBTExFTF9DT01QVVRJTkdfU0VSVklDRV9GSVBTID0gbmV3IEludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZSgncGNzLWZpcHMnKTsgLy8gcHJldHRpZXItaWdub3JlXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUEFZTUVOVF9DUllQVE9HUkFQSFlfQ09OVFJPTFBMQU5FID0gbmV3IEludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZSgncGF5bWVudC1jcnlwdG9ncmFwaHkuY29udHJvbHBsYW5lJyk7IC8vIHByZXR0aWVyLWlnbm9yZVxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFBBWU1FTlRfQ1JZUFRPR1JBUEhZX0RBVEFQTEFORSA9IG5ldyBJbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UoJ3BheW1lbnQtY3J5cHRvZ3JhcGh5LmRhdGFwbGFuZScpOyAvLyBwcmV0dGllci1pZ25vcmVcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBQRVJTT05BTElaRSA9IG5ldyBJbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UoJ3BlcnNvbmFsaXplJyk7IC8vIHByZXR0aWVyLWlnbm9yZVxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFBFUlNPTkFMSVpFX0VWRU5UUyA9IG5ldyBJbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UoJ3BlcnNvbmFsaXplLWV2ZW50cycpOyAvLyBwcmV0dGllci1pZ25vcmVcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBQRVJTT05BTElaRV9SVU5USU1FID0gbmV3IEludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZSgncGVyc29uYWxpemUtcnVudGltZScpOyAvLyBwcmV0dGllci1pZ25vcmVcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBQSU5QT0lOVF9WMSA9IG5ldyBJbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UoJ3BpbnBvaW50Jyk7IC8vIHByZXR0aWVyLWlnbm9yZVxuICAvKiogQGRlcHJlY2F0ZWQgLSBVc2UgSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlLlBJTlBPSU5UX1NNU19WT0lDRV9WMiBpbnN0ZWFkLiAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFBJTlBPSU5UID0gbmV3IEludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZSgncGlucG9pbnQtc21zLXZvaWNlLXYyJyk7IC8vIHByZXR0aWVyLWlnbm9yZVxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFBJTlBPSU5UX1NNU19WT0lDRV9WMiA9IG5ldyBJbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UoJ3BpbnBvaW50LXNtcy12b2ljZS12MicpOyAvLyBwcmV0dGllci1pZ25vcmVcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBQSVBFUyA9IG5ldyBJbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UoJ3BpcGVzJyk7IC8vIHByZXR0aWVyLWlnbm9yZVxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFBJUEVTX0RBVEEgPSBuZXcgSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlKCdwaXBlcy1kYXRhJyk7IC8vIHByZXR0aWVyLWlnbm9yZVxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFBJUEVTX0ZJUFMgPSBuZXcgSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlKCdwaXBlcy1maXBzJyk7IC8vIHByZXR0aWVyLWlnbm9yZVxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFBSSUNFX0xJU1QgPSBuZXcgSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlKCdwcmljaW5nLmFwaScpOyAvLyBwcmV0dGllci1pZ25vcmVcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBQUklDSU5HX0NBTENVTEFUT1IgPSBuZXcgSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlKCdiY20tcHJpY2luZy1jYWxjdWxhdG9yJyk7IC8vIHByZXR0aWVyLWlnbm9yZVxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFBPTExZID0gbmV3IEludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZSgncG9sbHknKTsgLy8gcHJldHRpZXItaWdub3JlXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUFJJVkFURV81RyA9IG5ldyBJbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UoJ3ByaXZhdGUtbmV0d29ya3MnKTsgLy8gcHJldHRpZXItaWdub3JlXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUFJJVkFURV9DRVJUSUZJQ0FURV9BVVRIT1JJVFkgPSBuZXcgSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlKCdhY20tcGNhJyk7IC8vIHByZXR0aWVyLWlnbm9yZVxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFBSSVZBVEVfQ0VSVElGSUNBVEVfQVVUSE9SSVRZX0NPTk5FQ1RPUl9BRCA9IG5ldyBJbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UoJ3BjYS1jb25uZWN0b3ItYWQnKTsgLy8gcHJldHRpZXItaWdub3JlXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUFJJVkFURV9DRVJUSUZJQ0FURV9BVVRIT1JJVFlfQ09OTkVDVE9SX1NDRVAgPSBuZXcgSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlKCdwY2EtY29ubmVjdG9yLXNjZXAnKTsgLy8gcHJldHRpZXItaWdub3JlXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUFJPTUVUSEVVUyA9IG5ldyBJbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UoJ2FwcycpOyAvLyBwcmV0dGllci1pZ25vcmVcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBQUk9NRVRIRVVTX1dPUktTUEFDRVMgPSBuZXcgSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlKCdhcHMtd29ya3NwYWNlcycpOyAvLyBwcmV0dGllci1pZ25vcmVcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBQUk9UT04gPSBuZXcgSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlKCdwcm90b24nKTsgLy8gcHJldHRpZXItaWdub3JlXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUV9CVVNTSU5FU1MgPSBuZXcgSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlKCdxYnVzaW5lc3MnLCAnYXdzLmFwaScpOyAvLyBwcmV0dGllci1pZ25vcmVcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBRX0RFVkVMT1BFUiA9IG5ldyBJbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UoJ3EnKTsgLy8gcHJldHRpZXItaWdub3JlXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUV9ERVZFTE9QRVJfQ09ERV9XSElTUEVSRVIgPSBuZXcgSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlKCdjb2Rld2hpc3BlcmVyJyk7IC8vIHByZXR0aWVyLWlnbm9yZVxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFFfREVWRUxPUEVSX1FBUFBTID0gbmV3IEludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZSgncWFwcHMnKTsgLy8gcHJldHRpZXItaWdub3JlXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUV9VU0VSX1NVQlNDUklQVElPTlMgPSBuZXcgSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlKCdzZXJ2aWNlLnVzZXItc3Vic2NyaXB0aW9ucycpOyAvLyBwcmV0dGllci1pZ25vcmVcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBRTERCID0gbmV3IEludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZSgncWxkYi5zZXNzaW9uJyk7IC8vIHByZXR0aWVyLWlnbm9yZVxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFFVSUNLU0lHSFRfV0VCU0lURSA9IG5ldyBJbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UoJ3F1aWNrc2lnaHQtd2Vic2l0ZScpOyAvLyBwcmV0dGllci1pZ25vcmVcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBSRFMgPSBuZXcgSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlKCdyZHMnKTsgLy8gcHJldHRpZXItaWdub3JlXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUkRTX0RBVEEgPSBuZXcgSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlKCdyZHMtZGF0YScpOyAvLyBwcmV0dGllci1pZ25vcmVcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBSRFNfUEVSRk9STUFOQ0VfSU5TSUdIVFMgPSBuZXcgSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlKCdwaScpOyAvLyBwcmV0dGllci1pZ25vcmVcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBSRFNfUEVSRk9STUFOQ0VfSU5TSUdIVFNfRklQUyA9IG5ldyBJbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UoJ3BpLWZpcHMnKTsgLy8gcHJldHRpZXItaWdub3JlXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUkVEU0hJRlQgPSBuZXcgSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlKCdyZWRzaGlmdCcpOyAvLyBwcmV0dGllci1pZ25vcmVcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBSRURTSElGVF9GSVBTID0gbmV3IEludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZSgncmVkc2hpZnQtZmlwcycpOyAvLyBwcmV0dGllci1pZ25vcmVcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBSRURTSElGVF9EQVRBID0gbmV3IEludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZSgncmVkc2hpZnQtZGF0YScpOyAvLyBwcmV0dGllci1pZ25vcmVcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBSRURTSElGVF9EQVRBX0ZJUFMgPSBuZXcgSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlKCdyZWRzaGlmdC1kYXRhLWZpcHMnKTsgLy8gcHJldHRpZXItaWdub3JlXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUkVEU0hJRlRfU0VSVkVSTEVTUyA9IG5ldyBJbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UoJ3JlZHNoaWZ0LXNlcnZlcmxlc3MnKTsgLy8gcHJldHRpZXItaWdub3JlXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUkVEU0hJRlRfU0VSVkVSTEVTU19GSVBTID0gbmV3IEludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZSgncmVkc2hpZnQtc2VydmVybGVzcy1maXBzJyk7IC8vIHByZXR0aWVyLWlnbm9yZVxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFJFS09HTklUSU9OID0gbmV3IEludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZSgncmVrb2duaXRpb24nKTsgLy8gcHJldHRpZXItaWdub3JlXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUkVLT0dOSVRJT05fRklQUyA9IG5ldyBJbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UoJ3Jla29nbml0aW9uLWZpcHMnKTsgLy8gcHJldHRpZXItaWdub3JlXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUkVLT0dOSVRJT05fU1RSRUFNSU5HID0gbmV3IEludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZSgnc3RyZWFtaW5nLXJla29nbml0aW9uJyk7IC8vIHByZXR0aWVyLWlnbm9yZVxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFJFS09HTklUSU9OX1NUUkVBTUlOR19GSVBTID0gbmV3IEludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZSgnc3RyZWFtaW5nLXJla29nbml0aW9uLWZpcHMnKTsgLy8gcHJldHRpZXItaWdub3JlXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUkVQT1NUX1NQQUNFID0gbmV3IEludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZSgncmVwb3N0c3BhY2UnKTsgLy8gcHJldHRpZXItaWdub3JlXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUkVTT1VSQ0VfQUNDRVNTX01BTkFHRVIgPSBuZXcgSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlKCdyYW0nKTsgLy8gcHJldHRpZXItaWdub3JlXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUkVTT1VSQ0VfR1JPVVBTID0gbmV3IEludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZSgncmVzb3VyY2UtZ3JvdXBzJyk7IC8vIHByZXR0aWVyLWlnbm9yZVxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFJFU09VUkNFX0dST1VQU19GSVBTID0gbmV3IEludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZSgncmVzb3VyY2UtZ3JvdXBzLWZpcHMnKTsgLy8gcHJldHRpZXItaWdub3JlXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUk9CT01BS0VSID0gbmV3IEludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZSgncm9ib21ha2VyJyk7IC8vIHByZXR0aWVyLWlnbm9yZVxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFJFQ1lDTEVfQklOID0gbmV3IEludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZSgncmJpbicpOyAvLyBwcmV0dGllci1pZ25vcmVcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBTMyA9IG5ldyBJbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UoJ3MzJyk7IC8vIHByZXR0aWVyLWlnbm9yZVxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFMzX09VVFBPU1RTID0gbmV3IEludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZSgnczMtb3V0cG9zdHMnKTsgLy8gcHJldHRpZXItaWdub3JlXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUzNfTVVMVElfUkVHSU9OX0FDQ0VTU19QT0lOVFMgPSBuZXcgSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlKCdzMy1nbG9iYWwuYWNjZXNzcG9pbnQnLCAnY29tLmFtYXpvbmF3cycsIHVuZGVmaW5lZCwgeyBnbG9iYWw6IHRydWUgfSk7IC8vIHByZXR0aWVyLWlnbm9yZVxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFMzX1RBQkxFUyA9IG5ldyBJbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UoJ3MzdGFibGVzJyk7IC8vIHByZXR0aWVyLWlnbm9yZVxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFNBVklOR1NfUExBTlMgPSBuZXcgSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlKCdzYXZpbmdzcGxhbnMnLCAnY29tLmFtYXpvbmF3cycsIHVuZGVmaW5lZCwgeyBnbG9iYWw6IHRydWUgfSk7IC8vIHByZXR0aWVyLWlnbm9yZVxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFNBR0VNQUtFUl9BUEkgPSBuZXcgSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlKCdzYWdlbWFrZXIuYXBpJyk7IC8vIHByZXR0aWVyLWlnbm9yZVxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFNBR0VNQUtFUl9BUElfRklQUyA9IG5ldyBJbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UoJ3NhZ2VtYWtlci5hcGktZmlwcycpOyAvLyBwcmV0dGllci1pZ25vcmVcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBTQUdFTUFLRVJfREFUQV9TQ0lFTkNFX0FTU0lTVEFOVCA9IG5ldyBJbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UoJ3NhZ2VtYWtlci1kYXRhLXNjaWVuY2UtYXNzaXN0YW50Jyk7IC8vIHByZXR0aWVyLWlnbm9yZVxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFNBR0VNQUtFUl9FWFBFUklNRU5UUyA9IG5ldyBJbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UoJ2V4cGVyaW1lbnRzJywgJ2F3cy5zYWdlbWFrZXInKTsgLy8gcHJldHRpZXItaWdub3JlXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgU0FHRU1BS0VSX0ZFQVRVUkVTVE9SRV9SVU5USU1FID0gbmV3IEludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZSgnc2FnZW1ha2VyLmZlYXR1cmVzdG9yZS1ydW50aW1lJyk7IC8vIHByZXR0aWVyLWlnbm9yZVxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFNBR0VNQUtFUl9HRU9TUEFUSUFMID0gbmV3IEludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZSgnc2FnZW1ha2VyLWdlb3NwYXRpYWwnKTsgLy8gcHJldHRpZXItaWdub3JlXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgU0FHRU1BS0VSX01FVFJJQ1MgPSBuZXcgSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlKCdzYWdlbWFrZXIubWV0cmljcycpOyAvLyBwcmV0dGllci1pZ25vcmVcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBTQUdFTUFLRVJfTk9URUJPT0sgPSBuZXcgSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlKCdub3RlYm9vaycsICdhd3Muc2FnZW1ha2VyJyk7IC8vIHByZXR0aWVyLWlnbm9yZVxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFNBR0VNQUtFUl9QQVJUTkVSX0FQUCA9IG5ldyBJbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UoJ3BhcnRuZXItYXBwJywgJ2F3cy5zYWdlbWFrZXInKTsgLy8gcHJldHRpZXItaWdub3JlXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgU0FHRU1BS0VSX1JVTlRJTUUgPSBuZXcgSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlKCdzYWdlbWFrZXIucnVudGltZScpOyAvLyBwcmV0dGllci1pZ25vcmVcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBTQUdFTUFLRVJfUlVOVElNRV9GSVBTID0gbmV3IEludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZSgnc2FnZW1ha2VyLnJ1bnRpbWUtZmlwcycpOyAvLyBwcmV0dGllci1pZ25vcmVcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBTQUdFTUFLRVJfU1RVRElPID0gbmV3IEludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZSgnc3R1ZGlvJywgJ2F3cy5zYWdlbWFrZXInKTsgLy8gcHJldHRpZXItaWdub3JlXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgU0VDUkVUU19NQU5BR0VSID0gbmV3IEludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZSgnc2VjcmV0c21hbmFnZXInKTsgLy8gcHJldHRpZXItaWdub3JlXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgU0VDVVJJVFlIVUIgPSBuZXcgSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlKCdzZWN1cml0eWh1YicpOyAvLyBwcmV0dGllci1pZ25vcmVcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBTRVJWSUNFX0NBVEFMT0cgPSBuZXcgSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlKCdzZXJ2aWNlY2F0YWxvZycpOyAvLyBwcmV0dGllci1pZ25vcmVcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBTRVJWSUNFX0NBVEFMT0dfQVBQUkVHSVNUUlkgPSBuZXcgSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlKCdzZXJ2aWNlY2F0YWxvZy1hcHByZWdpc3RyeScpOyAvLyBwcmV0dGllci1pZ25vcmVcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBTRVJWRVJfTUlHUkFUSU9OX1NFUlZJQ0UgPSBuZXcgSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlKCdzbXMnKTsgLy8gcHJldHRpZXItaWdub3JlXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgU0VSVkVSX01JR1JBVElPTl9TRVJWSUNFX0ZJUFMgPSBuZXcgSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlKCdzbXMtZmlwcycpOyAvLyBwcmV0dGllci1pZ25vcmVcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBTRVJWRVJfTUlHUkFUSU9OX1NFUlZJQ0VfQVdTQ09OTkVDVE9SID0gbmV3IEludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZSgnYXdzY29ubmVjdG9yJyk7IC8vIHByZXR0aWVyLWlnbm9yZVxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFNFUlZFUkxFU1NfQVBQTElDQVRJT05fUkVQT1NJVE9SWSA9IG5ldyBJbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UoJ3NlcnZlcmxlc3NyZXBvJyk7IC8vIHByZXR0aWVyLWlnbm9yZVxuICAvKiogQGRlcHJlY2F0ZWQgLSBVc2UgSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlLkVNQUlMX1NNVFAgaW5zdGVhZC4gKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBTRVMgPSBuZXcgSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlKCdlbWFpbC1zbXRwJyk7IC8vIHByZXR0aWVyLWlnbm9yZVxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFNJTVNQQUNFX1dFQVZFUiA9IG5ldyBJbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UoJ3NpbXNwYWNld2VhdmVyJyk7IC8vIHByZXR0aWVyLWlnbm9yZVxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFNOT1dfREVWSUNFX01BTkFHRU1FTlQgPSBuZXcgSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlKCdzbm93LWRldmljZS1tYW5hZ2VtZW50Jyk7IC8vIHByZXR0aWVyLWlnbm9yZVxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFNOUyA9IG5ldyBJbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UoJ3NucycpOyAvLyBwcmV0dGllci1pZ25vcmVcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBTUVMgPSBuZXcgSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlKCdzcXMnKTsgLy8gcHJldHRpZXItaWdub3JlXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgU1NNID0gbmV3IEludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZSgnc3NtJyk7IC8vIHByZXR0aWVyLWlnbm9yZVxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFNTTV9GSVBTID0gbmV3IEludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZSgnc3NtLWZpcHMnKTsgLy8gcHJldHRpZXItaWdub3JlXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgU1NNX01FU1NBR0VTID0gbmV3IEludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZSgnc3NtbWVzc2FnZXMnKTsgLy8gcHJldHRpZXItaWdub3JlXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgU1NNX0NPTlRBQ1RTID0gbmV3IEludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZSgnc3NtLWNvbnRhY3RzJyk7IC8vIHByZXR0aWVyLWlnbm9yZVxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFNTTV9JTkNJREVOVFMgPSBuZXcgSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlKCdzc20taW5jaWRlbnRzJyk7IC8vIHByZXR0aWVyLWlnbm9yZVxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFNTTV9RVUlDS19TRVRVUCA9IG5ldyBJbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UoJ3NzbS1xdWlja3NldHVwJyk7IC8vIHByZXR0aWVyLWlnbm9yZVxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFNURVBfRlVOQ1RJT05TID0gbmV3IEludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZSgnc3RhdGVzJyk7IC8vIHByZXR0aWVyLWlnbm9yZVxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFNURVBfRlVOQ1RJT05TX1NZTkMgPSBuZXcgSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlKCdzeW5jLXN0YXRlcycpOyAvLyBwcmV0dGllci1pZ25vcmVcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBTVE9SQUdFX0dBVEVXQVkgPSBuZXcgSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlKCdzdG9yYWdlZ2F0ZXdheScpOyAvLyBwcmV0dGllci1pZ25vcmVcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBTVFMgPSBuZXcgSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlKCdzdHMnKTsgLy8gcHJldHRpZXItaWdub3JlXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgU1VQUExZX0NIQUlOID0gbmV3IEludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZSgnc2NuJyk7IC8vIHByZXR0aWVyLWlnbm9yZVxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFNXRiA9IG5ldyBJbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UoJ3N3ZicpOyAvLyBwcmV0dGllci1pZ25vcmVcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBTV0ZfRklQUyA9IG5ldyBJbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UoJ3N3Zi1maXBzJyk7IC8vIHByZXR0aWVyLWlnbm9yZVxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFRBR0dJTkcgPSBuZXcgSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlKCd0YWdnaW5nJyk7IC8vIHByZXR0aWVyLWlnbm9yZVxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFRFTENPX05FVFdPUktfQlVJTERFUiA9IG5ldyBJbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UoJ3RuYicpOyAvLyBwcmV0dGllci1pZ25vcmVcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBURVhUUkFDVCA9IG5ldyBJbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UoJ3RleHRyYWN0Jyk7IC8vIHByZXR0aWVyLWlnbm9yZVxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFRFWFRSQUNUX0ZJUFMgPSBuZXcgSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlKCd0ZXh0cmFjdC1maXBzJyk7IC8vIHByZXR0aWVyLWlnbm9yZVxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFRJTUVTVFJFQU1fSU5GTFVYREIgPSBuZXcgSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlKCd0aW1lc3RyZWFtLWluZmx1eGRiJyk7IC8vIHByZXR0aWVyLWlnbm9yZVxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFRJTUVTVFJFQU1fSU5GTFVYREJfRklQUyA9IG5ldyBJbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UoJ3RpbWVzdHJlYW0taW5mbHV4ZGItZmlwcycpOyAvLyBwcmV0dGllci1pZ25vcmVcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBUUkFOU0NSSUJFID0gbmV3IEludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZSgndHJhbnNjcmliZScpOyAvLyBwcmV0dGllci1pZ25vcmVcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBUUkFOU0NSSUJFX1NUUkVBTUlORyA9IG5ldyBJbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UoJ3RyYW5zY3JpYmVzdHJlYW1pbmcnKTsgLy8gcHJldHRpZXItaWdub3JlXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgVFJBTlNGRVIgPSBuZXcgSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlKCd0cmFuc2ZlcicpOyAvLyBwcmV0dGllci1pZ25vcmVcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBUUkFOU0ZFUl9TRVJWRVIgPSBuZXcgSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlKCd0cmFuc2Zlci5zZXJ2ZXInKTsgLy8gcHJldHRpZXItaWdub3JlXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgVFJBTlNMQVRFID0gbmV3IEludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZSgndHJhbnNsYXRlJyk7IC8vIHByZXR0aWVyLWlnbm9yZVxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFRSVVNURURfQURWSVNPUiA9IG5ldyBJbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UoJ3RydXN0ZWRhZHZpc29yJyk7IC8vIHByZXR0aWVyLWlnbm9yZVxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFdFTExfQVJDSElURUNURURfVE9PTCA9IG5ldyBJbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UoJ3dlbGxhcmNoaXRlY3RlZCcpOyAvLyBwcmV0dGllci1pZ25vcmVcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBXT1JLTUFJTCA9IG5ldyBJbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UoJ3dvcmttYWlsJyk7IC8vIHByZXR0aWVyLWlnbm9yZVxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFdPUktTUEFDRVMgPSBuZXcgSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlKCd3b3Jrc3BhY2VzJyk7IC8vIHByZXR0aWVyLWlnbm9yZVxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFdPUktTUEFDRVNfVEhJTl9DTElFTlQgPSBuZXcgSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlKCd0aGluY2xpZW50LmFwaScpOyAvLyBwcmV0dGllci1pZ25vcmVcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBXT1JLU1BBQ0VTX1dFQiA9IG5ldyBJbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UoJ3dvcmtzcGFjZXMtd2ViJyk7IC8vIHByZXR0aWVyLWlnbm9yZVxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFdPUktTUEFDRVNfV0VCX0ZJUFMgPSBuZXcgSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlKCd3b3Jrc3BhY2VzLXdlYi1maXBzJyk7IC8vIHByZXR0aWVyLWlnbm9yZVxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFhSQVkgPSBuZXcgSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlKCd4cmF5Jyk7IC8vIHByZXR0aWVyLWlnbm9yZVxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFZFUklGSUVEX1BFUk1JU1NJT05TID0gbmV3IEludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZSgndmVyaWZpZWRwZXJtaXNzaW9ucycpOyAvLyBwcmV0dGllci1pZ25vcmVcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBWUENfTEFUVElDRSA9IG5ldyBJbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UoJ3ZwYy1sYXR0aWNlJyk7IC8vIHByZXR0aWVyLWlnbm9yZVxuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgc2VydmljZS4gZS5nLiBjb20uYW1hem9uYXdzLnVzLWVhc3QtMS5lY3NcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBzaG9ydCBuYW1lIG9mIHRoZSBzZXJ2aWNlLiBlLmcuIGVjc1xuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHNob3J0TmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcG9ydCBvZiB0aGUgc2VydmljZS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBwb3J0OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgUHJpdmF0ZSBETlMgaXMgc3VwcG9ydGVkIGJ5IGRlZmF1bHQuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcHJpdmF0ZURuc0RlZmF1bHQ/OiBib29sZWFuID0gdHJ1ZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgcHJlZml4Pzogc3RyaW5nLFxuICAgIHBvcnQ/OiBudW1iZXIsXG4gICAgcHJvcHM/OiBJbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2VQcm9wcyxcbiAgKSB7XG4gICAgY29uc3QgcmVnaW9uUHJlZml4ID0gcHJvcHM/Lmdsb2JhbFxuICAgICAgPyBcIlwiXG4gICAgICA6IExhenkuc3RyaW5nVmFsdWUoe1xuICAgICAgICAgIHByb2R1Y2U6IChjb250ZXh0KSA9PiBBd3NTdGFjay5vZkF3c0NvbnN0cnVjdChjb250ZXh0LnNjb3BlKS5yZWdpb24sXG4gICAgICAgIH0pICsgXCIuXCI7XG4gICAgY29uc3QgZGVmYXVsdEVuZHBvaW50UHJlZml4ID0gTGF6eS5zdHJpbmdWYWx1ZSh7XG4gICAgICBwcm9kdWNlOiAoY29udGV4dCkgPT4ge1xuICAgICAgICBjb25zdCByZWdpb25OYW1lID0gQXdzU3RhY2sub2ZBd3NDb25zdHJ1Y3QoY29udGV4dC5zY29wZSkucmVnaW9uO1xuICAgICAgICByZXR1cm4gdGhpcy5nZXREZWZhdWx0RW5kcG9pbnRQcmVmaXgobmFtZSwgcmVnaW9uTmFtZSk7XG4gICAgICB9LFxuICAgIH0pO1xuICAgIGNvbnN0IGRlZmF1bHRFbmRwb2ludFN1ZmZpeCA9IExhenkuc3RyaW5nVmFsdWUoe1xuICAgICAgcHJvZHVjZTogKGNvbnRleHQpID0+IHtcbiAgICAgICAgY29uc3QgcmVnaW9uTmFtZSA9IEF3c1N0YWNrLm9mQXdzQ29uc3RydWN0KGNvbnRleHQuc2NvcGUpLnJlZ2lvbjtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RGVmYXVsdEVuZHBvaW50U3VmZml4KG5hbWUsIHJlZ2lvbk5hbWUpO1xuICAgICAgfSxcbiAgICB9KTtcblxuICAgIHRoaXMubmFtZSA9IGAke3ByZWZpeCB8fCBkZWZhdWx0RW5kcG9pbnRQcmVmaXh9LiR7cmVnaW9uUHJlZml4fSR7bmFtZX0ke2RlZmF1bHRFbmRwb2ludFN1ZmZpeH1gO1xuICAgIHRoaXMuc2hvcnROYW1lID0gbmFtZTtcbiAgICB0aGlzLnBvcnQgPSBwb3J0IHx8IDQ0MztcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGVuZHBvaW50IHByZWZpeCBmb3IgdGhlIHNlcnZpY2UgaW4gdGhlIHNwZWNpZmllZCByZWdpb25cbiAgICogYmVjYXVzZSB0aGUgcHJlZml4IGZvciBzb21lIG9mIHRoZSBzZXJ2aWNlcyBpbiBjbi1ub3J0aC0xIGFuZCBjbi1ub3J0aHdlc3QtMSBhcmUgZGlmZmVyZW50XG4gICAqXG4gICAqIEZvciBmdXR1cmUgbWFpbnRlbmFuY2XvvIwgdGhlIHZwYyBlbmRwb2ludCBzZXJ2aWNlcyBjb3VsZCBiZSBmZXRjaGVkIHVzaW5nIEFXUyBDTEkgQ29tbW1hbmQ6XG4gICAqIGF3cyBlYzIgZGVzY3JpYmUtdnBjLWVuZHBvaW50LXNlcnZpY2VzXG4gICAqL1xuICBwcml2YXRlIGdldERlZmF1bHRFbmRwb2ludFByZWZpeChuYW1lOiBzdHJpbmcsIHJlZ2lvbjogc3RyaW5nKSB7XG4gICAgY29uc3QgVlBDX0VORFBPSU5UX1NFUlZJQ0VfRVhDRVBUSU9OUzogeyBbcmVnaW9uOiBzdHJpbmddOiBzdHJpbmdbXSB9ID0ge1xuICAgICAgXCJjbi1ub3J0aC0xXCI6IFtcbiAgICAgICAgXCJhcHBsaWNhdGlvbi1hdXRvc2NhbGluZ1wiLFxuICAgICAgICBcImFwcG1lc2gtZW52b3ktbWFuYWdlbWVudFwiLFxuICAgICAgICBcImF0aGVuYVwiLFxuICAgICAgICBcImF1dG9zY2FsaW5nXCIsXG4gICAgICAgIFwiYXdzY29ubmVjdG9yXCIsXG4gICAgICAgIFwiYmFja3VwXCIsXG4gICAgICAgIFwiYmF0Y2hcIixcbiAgICAgICAgXCJjYXNzYW5kcmFcIixcbiAgICAgICAgXCJjbG91ZGNvbnRyb2xhcGlcIixcbiAgICAgICAgXCJjbG91ZGZvcm1hdGlvblwiLFxuICAgICAgICBcImNvZGVkZXBsb3ktY29tbWFuZHMtc2VjdXJlXCIsXG4gICAgICAgIFwiZGF0YWJyZXdcIixcbiAgICAgICAgXCJkbXNcIixcbiAgICAgICAgXCJlYnNcIixcbiAgICAgICAgXCJlYzJcIixcbiAgICAgICAgXCJlY3IuYXBpXCIsXG4gICAgICAgIFwiZWNyLmRrclwiLFxuICAgICAgICBcImVrc1wiLFxuICAgICAgICBcImVsYXN0aWNhY2hlXCIsXG4gICAgICAgIFwiZWxhc3RpY2JlYW5zdGFsa1wiLFxuICAgICAgICBcImVsYXN0aWNmaWxlc3lzdGVtXCIsXG4gICAgICAgIFwiZWxhc3RpY2ZpbGVzeXN0ZW0tZmlwc1wiLFxuICAgICAgICBcImVtci1jb250YWluZXJzXCIsXG4gICAgICAgIFwiZXhlY3V0ZS1hcGlcIixcbiAgICAgICAgXCJmc3hcIixcbiAgICAgICAgXCJpbWFnZWJ1aWxkZXJcIixcbiAgICAgICAgXCJpb3QuZGF0YVwiLFxuICAgICAgICBcImlvdHNpdGV3aXNlLmFwaVwiLFxuICAgICAgICBcImlvdHNpdGV3aXNlLmRhdGFcIixcbiAgICAgICAgXCJraW5lc2lzLXN0cmVhbXNcIixcbiAgICAgICAgXCJsYW1iZGFcIixcbiAgICAgICAgXCJsaWNlbnNlLW1hbmFnZXJcIixcbiAgICAgICAgXCJtb25pdG9yaW5nXCIsXG4gICAgICAgIFwicmRzXCIsXG4gICAgICAgIFwicmVkc2hpZnRcIixcbiAgICAgICAgXCJyZWRzaGlmdC1kYXRhXCIsXG4gICAgICAgIFwiczNcIixcbiAgICAgICAgXCJzYWdlbWFrZXIuYXBpXCIsXG4gICAgICAgIFwic2FnZW1ha2VyLmZlYXR1cmVzdG9yZS1ydW50aW1lXCIsXG4gICAgICAgIFwic2FnZW1ha2VyLnJ1bnRpbWVcIixcbiAgICAgICAgXCJzZWN1cml0eWh1YlwiLFxuICAgICAgICBcInNlcnZpY2VjYXRhbG9nXCIsXG4gICAgICAgIFwic21zXCIsXG4gICAgICAgIFwic3FzXCIsXG4gICAgICAgIFwic3RhdGVzXCIsXG4gICAgICAgIFwic3RzXCIsXG4gICAgICAgIFwic3luYy1zdGF0ZXNcIixcbiAgICAgICAgXCJzeW50aGV0aWNzXCIsXG4gICAgICAgIFwidHJhbnNjcmliZVwiLFxuICAgICAgICBcInRyYW5zY3JpYmVzdHJlYW1pbmdcIixcbiAgICAgICAgXCJ0cmFuc2ZlclwiLFxuICAgICAgICBcInhyYXlcIixcbiAgICAgIF0sXG4gICAgICBcImNuLW5vcnRod2VzdC0xXCI6IFtcbiAgICAgICAgXCJhY2NvdW50XCIsXG4gICAgICAgIFwiYXBwbGljYXRpb24tYXV0b3NjYWxpbmdcIixcbiAgICAgICAgXCJhcHBtZXNoLWVudm95LW1hbmFnZW1lbnRcIixcbiAgICAgICAgXCJhdGhlbmFcIixcbiAgICAgICAgXCJhdXRvc2NhbGluZ1wiLFxuICAgICAgICBcImF3c2Nvbm5lY3RvclwiLFxuICAgICAgICBcImJhY2t1cFwiLFxuICAgICAgICBcImJhdGNoXCIsXG4gICAgICAgIFwiY2Fzc2FuZHJhXCIsXG4gICAgICAgIFwiY2xvdWRjb250cm9sYXBpXCIsXG4gICAgICAgIFwiY2xvdWRmb3JtYXRpb25cIixcbiAgICAgICAgXCJjb2RlZGVwbG95LWNvbW1hbmRzLXNlY3VyZVwiLFxuICAgICAgICBcImRhdGFicmV3XCIsXG4gICAgICAgIFwiZG1zXCIsXG4gICAgICAgIFwiZWJzXCIsXG4gICAgICAgIFwiZWMyXCIsXG4gICAgICAgIFwiZWNyLmFwaVwiLFxuICAgICAgICBcImVjci5ka3JcIixcbiAgICAgICAgXCJla3NcIixcbiAgICAgICAgXCJlbGFzdGljYWNoZVwiLFxuICAgICAgICBcImVsYXN0aWNiZWFuc3RhbGtcIixcbiAgICAgICAgXCJlbGFzdGljZmlsZXN5c3RlbVwiLFxuICAgICAgICBcImVsYXN0aWNmaWxlc3lzdGVtLWZpcHNcIixcbiAgICAgICAgXCJlbXItY29udGFpbmVyc1wiLFxuICAgICAgICBcImV4ZWN1dGUtYXBpXCIsXG4gICAgICAgIFwiZnN4XCIsXG4gICAgICAgIFwiaW1hZ2VidWlsZGVyXCIsXG4gICAgICAgIFwiaW90LmRhdGFcIixcbiAgICAgICAgXCJraW5lc2lzLXN0cmVhbXNcIixcbiAgICAgICAgXCJsYW1iZGFcIixcbiAgICAgICAgXCJsaWNlbnNlLW1hbmFnZXJcIixcbiAgICAgICAgXCJtb25pdG9yaW5nXCIsXG4gICAgICAgIFwicG9sbHlcIixcbiAgICAgICAgXCJyZHNcIixcbiAgICAgICAgXCJyZWRzaGlmdFwiLFxuICAgICAgICBcInJlZHNoaWZ0LWRhdGFcIixcbiAgICAgICAgXCJzM1wiLFxuICAgICAgICBcInNhZ2VtYWtlci5hcGlcIixcbiAgICAgICAgXCJzYWdlbWFrZXIuZmVhdHVyZXN0b3JlLXJ1bnRpbWVcIixcbiAgICAgICAgXCJzYWdlbWFrZXIucnVudGltZVwiLFxuICAgICAgICBcInNlY3VyaXR5aHViXCIsXG4gICAgICAgIFwic2VydmljZWNhdGFsb2dcIixcbiAgICAgICAgXCJzbXNcIixcbiAgICAgICAgXCJzcXNcIixcbiAgICAgICAgXCJzdGF0ZXNcIixcbiAgICAgICAgXCJzdHNcIixcbiAgICAgICAgXCJzeW5jLXN0YXRlc1wiLFxuICAgICAgICBcInN5bnRoZXRpY3NcIixcbiAgICAgICAgXCJ0cmFuc2NyaWJlXCIsXG4gICAgICAgIFwidHJhbnNjcmliZXN0cmVhbWluZ1wiLFxuICAgICAgICBcInRyYW5zZmVyXCIsXG4gICAgICAgIFwid29ya3NwYWNlc1wiLFxuICAgICAgICBcInhyYXlcIixcbiAgICAgIF0sXG4gICAgfTtcbiAgICBpZiAoVlBDX0VORFBPSU5UX1NFUlZJQ0VfRVhDRVBUSU9OU1tyZWdpb25dPy5pbmNsdWRlcyhuYW1lKSkge1xuICAgICAgcmV0dXJuIFwiY24uY29tLmFtYXpvbmF3c1wiO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gXCJjb20uYW1hem9uYXdzXCI7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgZW5kcG9pbnQgc3VmZml4IGZvciB0aGUgc2VydmljZSBpbiB0aGUgc3BlY2lmaWVkIHJlZ2lvbi5cbiAgICogSW4gY24tbm9ydGgtMSBhbmQgY24tbm9ydGh3ZXN0LTEsIHRoZSB2cGMgZW5kcG9pbnQgb2YgdHJhbnNjcmliZSBpczpcbiAgICogICBjbi5jb20uYW1hem9uYXdzLmNuLW5vcnRoLTEudHJhbnNjcmliZS5jblxuICAgKiAgIGNuLmNvbS5hbWF6b25hd3MuY24tbm9ydGh3ZXN0LTEudHJhbnNjcmliZS5jblxuICAgKiBzbyBzdWZmaXggJy5jbicgc2hvdWxkIGJlIHJldHVybiBpbiB0aGVzZSBzY2VuYXJpb3MuXG4gICAqXG4gICAqIEZvciBmdXR1cmUgbWFpbnRlbmFuY2XvvIwgdGhlIHZwYyBlbmRwb2ludCBzZXJ2aWNlcyBjb3VsZCBiZSBmZXRjaGVkIHVzaW5nIEFXUyBDTEkgQ29tbW1hbmQ6XG4gICAqIGF3cyBlYzIgZGVzY3JpYmUtdnBjLWVuZHBvaW50LXNlcnZpY2VzXG4gICAqL1xuICBwcml2YXRlIGdldERlZmF1bHRFbmRwb2ludFN1ZmZpeChuYW1lOiBzdHJpbmcsIHJlZ2lvbjogc3RyaW5nKSB7XG4gICAgY29uc3QgVlBDX0VORFBPSU5UX1NFUlZJQ0VfRVhDRVBUSU9OUzogeyBbcmVnaW9uOiBzdHJpbmddOiBzdHJpbmdbXSB9ID0ge1xuICAgICAgXCJjbi1ub3J0aC0xXCI6IFtcInRyYW5zY3JpYmVcIl0sXG4gICAgICBcImNuLW5vcnRod2VzdC0xXCI6IFtcInRyYW5zY3JpYmVcIl0sXG4gICAgfTtcbiAgICByZXR1cm4gVlBDX0VORFBPSU5UX1NFUlZJQ0VfRVhDRVBUSU9OU1tyZWdpb25dPy5pbmNsdWRlcyhuYW1lKSA/IFwiLmNuXCIgOiBcIlwiO1xuICB9XG59XG5cbi8qKlxuICogT3B0aW9ucyB0byBhZGQgYW4gaW50ZXJmYWNlIGVuZHBvaW50IHRvIGEgVlBDLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEludGVyZmFjZVZwY0VuZHBvaW50T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgc2VydmljZSB0byB1c2UgZm9yIHRoaXMgaW50ZXJmYWNlIFZQQyBlbmRwb2ludC5cbiAgICovXG4gIHJlYWRvbmx5IHNlcnZpY2U6IElJbnRlcmZhY2VWcGNFbmRwb2ludFNlcnZpY2U7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gYXNzb2NpYXRlIGEgcHJpdmF0ZSBob3N0ZWQgem9uZSB3aXRoIHRoZSBzcGVjaWZpZWQgVlBDLiBUaGlzXG4gICAqIGFsbG93cyB5b3UgdG8gbWFrZSByZXF1ZXN0cyB0byB0aGUgc2VydmljZSB1c2luZyBpdHMgZGVmYXVsdCBETlMgaG9zdG5hbWUuXG4gICAqXG4gICAqIEBkZWZhdWx0IHNldCBieSB0aGUgaW5zdGFuY2Ugb2YgSUludGVyZmFjZVZwY0VuZHBvaW50U2VydmljZSwgb3IgdHJ1ZSBpZlxuICAgKiBub3QgZGVmaW5lZCBieSB0aGUgaW5zdGFuY2Ugb2YgSUludGVyZmFjZVZwY0VuZHBvaW50U2VydmljZVxuICAgKi9cbiAgcmVhZG9ubHkgcHJpdmF0ZURuc0VuYWJsZWQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgc3VibmV0cyBpbiB3aGljaCB0byBjcmVhdGUgYW4gZW5kcG9pbnQgbmV0d29yayBpbnRlcmZhY2UuIEF0IG1vc3Qgb25lXG4gICAqIHBlciBhdmFpbGFiaWxpdHkgem9uZS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBwcml2YXRlIHN1Ym5ldHNcbiAgICovXG4gIHJlYWRvbmx5IHN1Ym5ldHM/OiBTdWJuZXRTZWxlY3Rpb247XG5cbiAgLyoqXG4gICAqIFRoZSBzZWN1cml0eSBncm91cHMgdG8gYXNzb2NpYXRlIHdpdGggdGhpcyBpbnRlcmZhY2UgVlBDIGVuZHBvaW50LlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGEgbmV3IHNlY3VyaXR5IGdyb3VwIGlzIGNyZWF0ZWRcbiAgICovXG4gIHJlYWRvbmx5IHNlY3VyaXR5R3JvdXBzPzogSVNlY3VyaXR5R3JvdXBbXTtcblxuICAvKipcbiAgICogV2hldGhlciB0byBhdXRvbWF0aWNhbGx5IGFsbG93IFZQQyB0cmFmZmljIHRvIHRoZSBlbmRwb2ludFxuICAgKlxuICAgKiBJZiBlbmFibGVkLCBhbGwgdHJhZmZpYyB0byB0aGUgZW5kcG9pbnQgZnJvbSB3aXRoaW4gdGhlIFZQQyB3aWxsIGJlXG4gICAqIGF1dG9tYXRpY2FsbHkgYWxsb3dlZC4gVGhpcyBpcyBkb25lIGJhc2VkIG9uIHRoZSBWUEMncyBDSURSIHJhbmdlLlxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSBvcGVuPzogYm9vbGVhbjtcblxuICAvLyBUT0RPOiBJbXBsZW1lbnQgQ29udGV4dFByb3ZpZGVyIHRvIHZhbGlkYXRlIEFac1xuICAvLyAvKipcbiAgLy8gICogTGltaXQgdG8gb25seSB0aG9zZSBhdmFpbGFiaWxpdHkgem9uZXMgd2hlcmUgdGhlIGVuZHBvaW50IHNlcnZpY2UgY2FuIGJlIGNyZWF0ZWRcbiAgLy8gICpcbiAgLy8gICogU2V0dGluZyB0aGlzIHRvICd0cnVlJyByZXF1aXJlcyBhIGxvb2t1cCB0byBiZSBwZXJmb3JtZWQgYXQgc3ludGhlc2lzIHRpbWUuIEFjY291bnRcbiAgLy8gICogYW5kIHJlZ2lvbiBtdXN0IGJlIHNldCBvbiB0aGUgY29udGFpbmluZyBzdGFjayBmb3IgdGhpcyB0byB3b3JrLlxuICAvLyAgKlxuICAvLyAgKiBAZGVmYXVsdCBmYWxzZVxuICAvLyAgKi9cbiAgLy8gcmVhZG9ubHkgbG9va3VwU3VwcG9ydGVkQXpzPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBDb25zdHJ1Y3Rpb24gcHJvcGVydGllcyBmb3IgYW4gSW50ZXJmYWNlVnBjRW5kcG9pbnQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW50ZXJmYWNlVnBjRW5kcG9pbnRQcm9wcyBleHRlbmRzIEludGVyZmFjZVZwY0VuZHBvaW50T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgVlBDIG5ldHdvcmsgaW4gd2hpY2ggdGhlIGludGVyZmFjZSBlbmRwb2ludCB3aWxsIGJlIHVzZWQuXG4gICAqL1xuICByZWFkb25seSB2cGM6IElWcGM7XG59XG5cbi8qKlxuICogQW4gaW50ZXJmYWNlIFZQQyBlbmRwb2ludC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJSW50ZXJmYWNlVnBjRW5kcG9pbnQgZXh0ZW5kcyBJVnBjRW5kcG9pbnQsIElDb25uZWN0YWJsZSB7fVxuXG4vKipcbiAqIEEgaW50ZXJmYWNlIFZQQyBlbmRwb2ludC5cbiAqIEByZXNvdXJjZSBBV1M6OkVDMjo6VlBDRW5kcG9pbnRcbiAqL1xuZXhwb3J0IGNsYXNzIEludGVyZmFjZVZwY0VuZHBvaW50XG4gIGV4dGVuZHMgVnBjRW5kcG9pbnRcbiAgaW1wbGVtZW50cyBJSW50ZXJmYWNlVnBjRW5kcG9pbnRcbntcbiAgLyoqXG4gICAqIEltcG9ydHMgYW4gZXhpc3RpbmcgaW50ZXJmYWNlIFZQQyBlbmRwb2ludC5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbUludGVyZmFjZVZwY0VuZHBvaW50QXR0cmlidXRlcyhcbiAgICBzY29wZTogQ29uc3RydWN0LFxuICAgIGlkOiBzdHJpbmcsXG4gICAgYXR0cnM6IEludGVyZmFjZVZwY0VuZHBvaW50QXR0cmlidXRlcyxcbiAgKTogSUludGVyZmFjZVZwY0VuZHBvaW50IHtcbiAgICBjb25zdCBzZWN1cml0eUdyb3VwcyA9IGF0dHJzLnNlY3VyaXR5R3JvdXBJZFxuICAgICAgPyBbXG4gICAgICAgICAgU2VjdXJpdHlHcm91cC5mcm9tU2VjdXJpdHlHcm91cElkKFxuICAgICAgICAgICAgc2NvcGUsXG4gICAgICAgICAgICBcIlNlY3VyaXR5R3JvdXBcIixcbiAgICAgICAgICAgIGF0dHJzLnNlY3VyaXR5R3JvdXBJZCxcbiAgICAgICAgICApLFxuICAgICAgICBdXG4gICAgICA6IGF0dHJzLnNlY3VyaXR5R3JvdXBzO1xuXG4gICAgY2xhc3MgSW1wb3J0IGV4dGVuZHMgQXdzQ29uc3RydWN0QmFzZSBpbXBsZW1lbnRzIElJbnRlcmZhY2VWcGNFbmRwb2ludCB7XG4gICAgICBwdWJsaWMgZ2V0IHZwY0VuZHBvaW50T3V0cHV0cygpOiBWcGNFbmRwb2ludE91dHB1dHMge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHZwY0VuZHBvaW50SWQ6IHRoaXMudnBjRW5kcG9pbnRJZCxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHB1YmxpYyBnZXQgb3V0cHV0cygpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMudnBjRW5kcG9pbnRPdXRwdXRzO1xuICAgICAgfVxuICAgICAgcHVibGljIHJlYWRvbmx5IHZwY0VuZHBvaW50SWQgPSBhdHRycy52cGNFbmRwb2ludElkO1xuICAgICAgcHVibGljIHJlYWRvbmx5IGNvbm5lY3Rpb25zID0gbmV3IENvbm5lY3Rpb25zKHtcbiAgICAgICAgZGVmYXVsdFBvcnQ6IFBvcnQudGNwKGF0dHJzLnBvcnQpLFxuICAgICAgICBzZWN1cml0eUdyb3VwcyxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgSW1wb3J0KHNjb3BlLCBpZCk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGludGVyZmFjZSBWUEMgZW5kcG9pbnQgaWRlbnRpZmllci5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB2cGNFbmRwb2ludElkOiBzdHJpbmc7XG5cbiAgLy8gVEYgUHJvdmlkZXIgZG9lcyBub3QgcHJvdmlkZSB0aGlzIGF0dHJpYnV0ZVxuICAvLyAvKipcbiAgLy8gICogVGhlIGRhdGUgYW5kIHRpbWUgdGhlIGludGVyZmFjZSBWUEMgZW5kcG9pbnQgd2FzIGNyZWF0ZWQuXG4gIC8vICAqIEBhdHRyaWJ1dGVcbiAgLy8gICovXG4gIC8vIHB1YmxpYyByZWFkb25seSB2cGNFbmRwb2ludENyZWF0aW9uVGltZXN0YW1wOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBETlMgZW50cmllcyBmb3IgdGhlIGludGVyZmFjZSBWUEMgZW5kcG9pbnQuXG4gICAqIEVhY2ggZW50cnkgaXMgYSBjb21iaW5hdGlvbiBvZiB0aGUgaG9zdGVkIHpvbmUgSUQgYW5kIHRoZSBETlMgbmFtZS5cbiAgICogVGhlIGVudHJpZXMgYXJlIG9yZGVyZWQgYXMgZm9sbG93czogcmVnaW9uYWwgcHVibGljIEROUywgem9uYWwgcHVibGljIEROUywgcHJpdmF0ZSBETlMsIGFuZCB3aWxkY2FyZCBETlMuXG4gICAqIFRoaXMgb3JkZXIgaXMgbm90IGVuZm9yY2VkIGZvciBBV1MgTWFya2V0cGxhY2Ugc2VydmljZXMuXG4gICAqXG4gICAqIFRoZSBmb2xsb3dpbmcgaXMgYW4gZXhhbXBsZS4gSW4gdGhlIGZpcnN0IGVudHJ5LCB0aGUgaG9zdGVkIHpvbmUgSUQgaXMgWjFIVUIyM1VVTFFYVlxuICAgKiBhbmQgdGhlIEROUyBuYW1lIGlzIHZwY2UtMDFhYmMyMzQ1NmRlNzhmOWctMTJhYmNjZDMuZWMyLnVzLWVhc3QtMS52cGNlLmFtYXpvbmF3cy5jb20uXG4gICAqXG4gICAqIFtcbiAgICogIHsgaG9zdGVkWm9uZUlkOiBcIloxSFVCMjNVVUxRWFZcIiwgXCJkbnNOYW1lXCI6IFwidnBjZS0wMWFiYzIzNDU2ZGU3OGY5Zy0xMmFiY2NkMy5lYzIudXMtZWFzdC0xLnZwY2UuYW1hem9uYXdzLmNvbVwiIH0sXG4gICAqICB7IGhvc3RlZFpvbmVJZDogXCJaMUhVQjIzVVVMUVhWLCBcImRuc05hbWVcIjogXCJ2cGNlLTAxYWJjMjM0NTZkZTc4ZjlnLTEyYWJjY2QzLXVzLWVhc3QtMWEuZWMyLnVzLWVhc3QtMS52cGNlLmFtYXpvbmF3cy5jb21cIiB9LFxuICAgKiAgeyBob3N0ZWRab25lSWQ6IFwiWjFDMTIzNDRWWURJVEIwLCBcImRuc05hbWVcIjogXCJlYzIudXMtZWFzdC0xLmFtYXpvbmF3cy5jb21cIiB9XG4gICAqIF1cbiAgICpcbiAgICogSWYgeW91IHVwZGF0ZSB0aGUgUHJpdmF0ZURuc0VuYWJsZWQgb3IgU3VibmV0SWRzIHByb3BlcnRpZXMsIHRoZSBETlMgZW50cmllcyBpbiB0aGUgbGlzdCB3aWxsIGNoYW5nZS5cbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHZwY0VuZHBvaW50RG5zRW50cmllczogdnBjRW5kcG9pbnQuVnBjRW5kcG9pbnREbnNFbnRyeUxpc3Q7XG5cbiAgLyoqXG4gICAqIE9uZSBvciBtb3JlIG5ldHdvcmsgaW50ZXJmYWNlcyBmb3IgdGhlIGludGVyZmFjZSBWUEMgZW5kcG9pbnQuXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB2cGNFbmRwb2ludE5ldHdvcmtJbnRlcmZhY2VJZHM6IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBUaGUgaWRlbnRpZmllciBvZiB0aGUgZmlyc3Qgc2VjdXJpdHkgZ3JvdXAgYXNzb2NpYXRlZCB3aXRoIHRoaXMgaW50ZXJmYWNlXG4gICAqIFZQQyBlbmRwb2ludC5cbiAgICpcbiAgICogQGRlcHJlY2F0ZWQgdXNlIHRoZSBgY29ubmVjdGlvbnNgIG9iamVjdFxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHNlY3VyaXR5R3JvdXBJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBY2Nlc3MgdG8gbmV0d29yayBjb25uZWN0aW9ucy5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBjb25uZWN0aW9uczogQ29ubmVjdGlvbnM7XG5cbiAgcHVibGljIHJlc291cmNlOiB2cGNFbmRwb2ludC5WcGNFbmRwb2ludDtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogSW50ZXJmYWNlVnBjRW5kcG9pbnRQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICBjb25zdCBzZWN1cml0eUdyb3VwcyA9IHByb3BzLnNlY3VyaXR5R3JvdXBzIHx8IFtcbiAgICAgIG5ldyBTZWN1cml0eUdyb3VwKHRoaXMsIFwiU2VjdXJpdHlHcm91cFwiLCB7XG4gICAgICAgIHZwYzogcHJvcHMudnBjLFxuICAgICAgfSksXG4gICAgXTtcblxuICAgIHRoaXMuc2VjdXJpdHlHcm91cElkID0gc2VjdXJpdHlHcm91cHNbMF0uc2VjdXJpdHlHcm91cElkO1xuICAgIHRoaXMuY29ubmVjdGlvbnMgPSBuZXcgQ29ubmVjdGlvbnMoe1xuICAgICAgZGVmYXVsdFBvcnQ6IFBvcnQudGNwKHByb3BzLnNlcnZpY2UucG9ydCksXG4gICAgICBzZWN1cml0eUdyb3VwcyxcbiAgICB9KTtcblxuICAgIGlmIChwcm9wcy5vcGVuICE9PSBmYWxzZSkge1xuICAgICAgdGhpcy5jb25uZWN0aW9ucy5hbGxvd0RlZmF1bHRQb3J0RnJvbShQZWVyLmlwdjQocHJvcHMudnBjLnZwY0NpZHJCbG9jaykpO1xuICAgIH1cblxuICAgIC8vIERldGVybWluZSB3aGljaCBzdWJuZXRzIHRvIHBsYWNlIHRoZSBlbmRwb2ludCBpblxuICAgIGNvbnN0IHN1Ym5ldElkcyA9IHRoaXMuZW5kcG9pbnRTdWJuZXRzKHByb3BzKTtcblxuICAgIHRoaXMucmVzb3VyY2UgPSBuZXcgdnBjRW5kcG9pbnQuVnBjRW5kcG9pbnQodGhpcywgXCJSZXNvdXJjZVwiLCB7XG4gICAgICBwcml2YXRlRG5zRW5hYmxlZDpcbiAgICAgICAgcHJvcHMucHJpdmF0ZURuc0VuYWJsZWQgPz8gcHJvcHMuc2VydmljZS5wcml2YXRlRG5zRGVmYXVsdCA/PyB0cnVlLFxuICAgICAgcG9saWN5OiB0aGlzLnBvbGljeURvY3VtZW50Py5qc29uLFxuICAgICAgc2VjdXJpdHlHcm91cElkczogc2VjdXJpdHlHcm91cHMubWFwKChzKSA9PiBzLnNlY3VyaXR5R3JvdXBJZCksXG4gICAgICBzZXJ2aWNlTmFtZTogcHJvcHMuc2VydmljZS5uYW1lLFxuICAgICAgdnBjRW5kcG9pbnRUeXBlOiBWcGNFbmRwb2ludFR5cGUuSU5URVJGQUNFLFxuICAgICAgc3VibmV0SWRzLFxuICAgICAgdnBjSWQ6IHByb3BzLnZwYy52cGNJZCxcbiAgICB9KTtcblxuICAgIHRoaXMudnBjRW5kcG9pbnRJZCA9IHRoaXMucmVzb3VyY2UuaWQ7XG4gICAgLy8gdGhpcy52cGNFbmRwb2ludENyZWF0aW9uVGltZXN0YW1wID0gdGhpcy5yZXNvdXJjZS5jcmVhdGlvblRpbWVzdGFtcDtcbiAgICB0aGlzLnZwY0VuZHBvaW50RG5zRW50cmllcyA9IHRoaXMucmVzb3VyY2UuZG5zRW50cnk7XG4gICAgdGhpcy52cGNFbmRwb2ludE5ldHdvcmtJbnRlcmZhY2VJZHMgPSB0aGlzLnJlc291cmNlLm5ldHdvcmtJbnRlcmZhY2VJZHM7XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lIHdoaWNoIHN1Ym5ldHMgdG8gcGxhY2UgdGhlIGVuZHBvaW50IGluLiBUaGlzIGlzIGluIGl0cyBvd24gZnVuY3Rpb25cbiAgICogYmVjYXVzZSB0aGVyZSdzIGEgbG90IG9mIGNvZGUuXG4gICAqL1xuICBwcml2YXRlIGVuZHBvaW50U3VibmV0cyhwcm9wczogSW50ZXJmYWNlVnBjRW5kcG9pbnRQcm9wcykge1xuICAgIC8vIGNvbnN0IGxvb2t1cFN1cHBvcnRlZEF6cyA9IHByb3BzLmxvb2t1cFN1cHBvcnRlZEF6cyA/PyBmYWxzZTtcbiAgICBjb25zdCBzdWJuZXRTZWxlY3Rpb24gPSBwcm9wcy52cGMuc2VsZWN0U3VibmV0cyh7XG4gICAgICAuLi5wcm9wcy5zdWJuZXRzLFxuICAgICAgb25lUGVyQXo6IHRydWUsXG4gICAgfSk7XG5cbiAgICAvLyBTYW5pdHkgY2hlY2sgdGhlIHN1Ym5ldCBjb3VudFxuICAgIGlmIChcbiAgICAgICFzdWJuZXRTZWxlY3Rpb24uaXNQZW5kaW5nTG9va3VwICYmXG4gICAgICBzdWJuZXRTZWxlY3Rpb24uc3VibmV0cy5sZW5ndGggPT0gMFxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IGNyZWF0ZSBhIFZQQyBFbmRwb2ludCB3aXRoIG5vIHN1Ym5ldHNcIik7XG4gICAgfVxuXG4gICAgLy8gVE9ETzogSW1wbGVtZW50IENvbnRleHRQcm92aWRlciB0byB2YWxpZGF0ZSBBWnNcbiAgICAvLyBJZiB3ZSBhcmVuJ3QgZ29pbmcgdG8gbG9va3VwIHN1cHBvcnRlZCBBWnMgd2UnbGwgZXhpdCBlYXJseSwgcmV0dXJuaW5nIHRoZSBzdWJuZXRJZHMgZnJvbSB0aGUgcHJvdmlkZWQgc3VibmV0IHNlbGVjdGlvblxuICAgIC8vIGlmICghbG9va3VwU3VwcG9ydGVkQXpzKSB7XG4gICAgcmV0dXJuIHN1Ym5ldFNlbGVjdGlvbi5zdWJuZXRJZHM7XG4gICAgLy8gfVxuXG4gICAgLy8gLy8gU29tZSBzZXJ2aWNlIG5hbWVzLCBzdWNoIGFzIEFXUyBzZXJ2aWNlIG5hbWUgcmVmZXJlbmNlcywgdXNlIFRva2VucyB0byBhdXRvbWF0aWNhbGx5IGZpbGwgaW4gdGhlIHJlZ2lvblxuICAgIC8vIC8vIElmIGl0IGlzIGFuIEludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZSwgdGhlbiB0aGUgcmVmZXJlbmNlIHdpbGwgYmUgcmVzb2x2YWJsZSBzaW5jZSBpdCBvbmx5IHJlZmVyZW5jZXMgdGhlIHJlZ2lvblxuICAgIC8vIGNvbnN0IGlzQXdzU2VydmljZSA9XG4gICAgLy8gICBUb2tlbi5pc1VucmVzb2x2ZWQocHJvcHMuc2VydmljZS5uYW1lKSAmJlxuICAgIC8vICAgcHJvcHMuc2VydmljZSBpbnN0YW5jZW9mIEludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZTtcblxuICAgIC8vIC8vIERldGVybWluZSB3aGF0IHNlcnZpY2UgbmFtZSBnZXRzIHBhc3MgdG8gdGhlIGNvbnRleHQgcHJvdmlkZXJcbiAgICAvLyAvLyBJZiBpdCBpcyBhbiBBV1Mgc2VydmljZSBpdCB3aWxsIGhhdmUgYSBSRUdJT04gdG9rZW5cbiAgICAvLyBjb25zdCBsb29rdXBTZXJ2aWNlTmFtZSA9IGlzQXdzU2VydmljZVxuICAgIC8vICAgPyBBd3NTdGFjay5vZkF3c0NvbnN0cnVjdCh0aGlzKS5yZXNvbHZlKHByb3BzLnNlcnZpY2UubmFtZSlcbiAgICAvLyAgIDogcHJvcHMuc2VydmljZS5uYW1lO1xuXG4gICAgLy8gLy8gQ2hlY2sgdGhhdCB0aGUgbG9va3VwIHdpbGwgd29ya1xuICAgIC8vIHRoaXMudmFsaWRhdGVDYW5Mb29rdXBTdXBwb3J0ZWRBenMoc3VibmV0cywgbG9va3VwU2VydmljZU5hbWUpO1xuXG4gICAgLy8gLy8gRG8gdGhlIGFjdHVhbCBsb29rdXAgZm9yIEFac1xuICAgIC8vIGNvbnN0IGF2YWlsYWJsZUFacyA9IHRoaXMuYXZhaWxhYmxlQXZhaWxhYmlsaXR5Wm9uZXMobG9va3VwU2VydmljZU5hbWUpO1xuICAgIC8vIGNvbnN0IGZpbHRlcmVkU3VibmV0cyA9IHN1Ym5ldHMuZmlsdGVyKChzKSA9PlxuICAgIC8vICAgYXZhaWxhYmxlQVpzLmluY2x1ZGVzKHMuYXZhaWxhYmlsaXR5Wm9uZSksXG4gICAgLy8gKTtcblxuICAgIC8vIC8vIFRocm93IGFuIGVycm9yIGlmIHRoZSBsb29rdXAgZmlsdGVyZWQgb3V0IGFsbCBzdWJuZXRzXG4gICAgLy8gLy8gVnBjRW5kcG9pbnRzIG11c3QgYmUgY3JlYXRlZCB3aXRoIGF0IGxlYXN0IG9uZSBBWlxuICAgIC8vIGlmIChmaWx0ZXJlZFN1Ym5ldHMubGVuZ3RoID09IDApIHtcbiAgICAvLyAgIHRocm93IG5ldyBFcnJvcihcbiAgICAvLyAgICAgYGxvb2t1cFN1cHBvcnRlZEF6cyByZXR1cm5lZCAke2F2YWlsYWJsZUFac30gYnV0IHN1Ym5ldHMgaGF2ZSBBWnMgJHtzdWJuZXRzLm1hcCgocykgPT4gcy5hdmFpbGFiaWxpdHlab25lKX1gLFxuICAgIC8vICAgKTtcbiAgICAvLyB9XG4gICAgLy8gcmV0dXJuIGZpbHRlcmVkU3VibmV0cy5tYXAoKHMpID0+IHMuc3VibmV0SWQpO1xuICB9XG5cbiAgLy8gLyoqXG4gIC8vICAqIFNhbml0eSBjaGVja2luZyB3aGVuIGxvb2tpbmcgdXAgQVpzIGZvciBhbiBlbmRwb2ludCBzZXJ2aWNlLCB0byBtYWtlIHN1cmUgaXQgd29uJ3QgZmFpbFxuICAvLyAgKi9cbiAgLy8gcHJpdmF0ZSB2YWxpZGF0ZUNhbkxvb2t1cFN1cHBvcnRlZEF6cyhcbiAgLy8gICBzdWJuZXRzOiBJU3VibmV0W10sXG4gIC8vICAgc2VydmljZU5hbWU6IHN0cmluZyxcbiAgLy8gKSB7XG4gIC8vICAgLy8gSGF2aW5nIGFueSBvZiB0aGVzZSBiZSB0cnVlIHdpbGwgY2F1c2UgdGhlIEFaIGxvb2t1cCB0byBmYWlsIGF0IHN5bnRoZXNpcyB0aW1lXG4gIC8vICAgY29uc3QgYWdub3N0aWNBY2N0ID0gVG9rZW4uaXNVbnJlc29sdmVkKHRoaXMuZW52LmFjY291bnQpO1xuICAvLyAgIGNvbnN0IGFnbm9zdGljUmVnaW9uID0gVG9rZW4uaXNVbnJlc29sdmVkKHRoaXMuZW52LnJlZ2lvbik7XG4gIC8vICAgY29uc3QgYWdub3N0aWNTZXJ2aWNlID0gVG9rZW4uaXNVbnJlc29sdmVkKHNlcnZpY2VOYW1lKTtcblxuICAvLyAgIC8vIEhhdmluZyBzdWJuZXRzIHdpdGggVG9rZW4gQVpzIGNhbiBjYXVzZSB0aGUgZW5kcG9pbnQgdG8gYmUgY3JlYXRlZCB3aXRoIG5vIHN1Ym5ldHMsIGZhaWxpbmcgYXQgZGVwbG95bWVudCB0aW1lXG4gIC8vICAgY29uc3QgYWdub3N0aWNTdWJuZXRzID0gc3VibmV0cy5zb21lKChzKSA9PlxuICAvLyAgICAgVG9rZW4uaXNVbnJlc29sdmVkKHMuYXZhaWxhYmlsaXR5Wm9uZSksXG4gIC8vICAgKTtcbiAgLy8gICBjb25zdCBhZ25vc3RpY1N1Ym5ldExpc3QgPSBUb2tlbi5pc1VucmVzb2x2ZWQoXG4gIC8vICAgICBzdWJuZXRzLm1hcCgocykgPT4gcy5hdmFpbGFiaWxpdHlab25lKSxcbiAgLy8gICApO1xuXG4gIC8vICAgLy8gQ29udGV4dCBwcm92aWRlciBjYW5ub3QgbWFrZSBhbiBBV1MgY2FsbCB3aXRob3V0IGFuIGFjY291bnQvcmVnaW9uXG4gIC8vICAgaWYgKGFnbm9zdGljQWNjdCB8fCBhZ25vc3RpY1JlZ2lvbikge1xuICAvLyAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAvLyAgICAgICBcIkNhbm5vdCBsb29rIHVwIFZQQyBlbmRwb2ludCBhdmFpbGFiaWxpdHkgem9uZXMgaWYgYWNjb3VudC9yZWdpb24gYXJlIG5vdCBzcGVjaWZpZWRcIixcbiAgLy8gICAgICk7XG4gIC8vICAgfVxuXG4gIC8vICAgLy8gVGhlIEFXUyBjYWxsIHdpbGwgZmFpbCBpZiB0aGVyZSBpcyBhIFRva2VuIGluIHRoZSBzZXJ2aWNlIG5hbWVcbiAgLy8gICBpZiAoYWdub3N0aWNTZXJ2aWNlKSB7XG4gIC8vICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gIC8vICAgICAgIGBDYW5ub3QgbG9va3VwIEFacyBmb3IgYSBzZXJ2aWNlIG5hbWUgd2l0aCBhIFRva2VuOiAke3NlcnZpY2VOYW1lfWAsXG4gIC8vICAgICApO1xuICAvLyAgIH1cblxuICAvLyAgIC8vIFRoZSBBV1MgY2FsbCByZXR1cm4gc3RyaW5ncyBmb3IgQVpzLCBsaWtlIHVzLWVhc3QtMWEsIHVzLWVhc3QtMWIsIGV0Y1xuICAvLyAgIC8vIElmIHRoZSBzdWJuZXQgQVpzIGFyZSBUb2tlbnMsIGEgc3RyaW5nIGNvbXBhcmlzb24gYmV0d2VlbiB0aGUgc3VibmV0IEFacyBhbmQgdGhlIEFacyBmcm9tIHRoZSBBV1MgY2FsbFxuICAvLyAgIC8vIHdpbGwgbm90IG1hdGNoXG4gIC8vICAgaWYgKGFnbm9zdGljU3VibmV0cyB8fCBhZ25vc3RpY1N1Ym5ldExpc3QpIHtcbiAgLy8gICAgIGNvbnN0IGFnbm9zdGljID0gc3VibmV0cy5maWx0ZXIoKHMpID0+XG4gIC8vICAgICAgIFRva2VuLmlzVW5yZXNvbHZlZChzLmF2YWlsYWJpbGl0eVpvbmUpLFxuICAvLyAgICAgKTtcbiAgLy8gICAgIHRocm93IG5ldyBFcnJvcihcbiAgLy8gICAgICAgYGxvb2t1cFN1cHBvcnRlZEF6cyBjYW5ub3QgZmlsdGVyIG9uIHN1Ym5ldHMgd2l0aCBUb2tlbiBBWnM6ICR7YWdub3N0aWN9YCxcbiAgLy8gICAgICk7XG4gIC8vICAgfVxuICAvLyB9XG5cbiAgLy8gLy8gVE9ETzogSW1wbGVtZW50IENvbnRleHRQcm92aWRlciB0byB2YWxpZGF0ZSBBWnNcbiAgLy8gcHJpdmF0ZSBhdmFpbGFibGVBdmFpbGFiaWxpdHlab25lcyhzZXJ2aWNlTmFtZTogc3RyaW5nKTogc3RyaW5nW10ge1xuICAvLyAgIC8vIEhlcmUgd2UgY2hlY2sgd2hhdCBBWnMgdGhlIGVuZHBvaW50IHNlcnZpY2UgaXMgYXZhaWxhYmxlIGluXG4gIC8vICAgLy8gSWYgZm9yIHdoYXRldmVyIHJlYXNvbiB3ZSBjYW4ndCByZXRyaWV2ZSB0aGUgQVpzLCBhbmQgbm8gY29udGV4dCBpcyBzZXQsXG4gIC8vICAgLy8gd2Ugd2lsbCBmYWxsIGJhY2sgdG8gYWxsIEFac1xuICAvLyAgIGNvbnN0IGF2YWlsYWJsZUFacyA9IENvbnRleHRQcm92aWRlci5nZXRWYWx1ZSh0aGlzLCB7XG4gIC8vICAgICBwcm92aWRlcjpcbiAgLy8gICAgICAgY3hzY2hlbWEuQ29udGV4dFByb3ZpZGVyLkVORFBPSU5UX1NFUlZJQ0VfQVZBSUxBQklMSVRZX1pPTkVfUFJPVklERVIsXG4gIC8vICAgICBkdW1teVZhbHVlOiB0aGlzLnN0YWNrLmF2YWlsYWJpbGl0eVpvbmVzKCksXG4gIC8vICAgICBwcm9wczogeyBzZXJ2aWNlTmFtZSB9LFxuICAvLyAgIH0pLnZhbHVlO1xuICAvLyAgIGlmICghQXJyYXkuaXNBcnJheShhdmFpbGFibGVBWnMpKSB7XG4gIC8vICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gIC8vICAgICAgIGBEaXNjb3ZlcmVkIEFacyBmb3IgZW5kcG9pbnQgc2VydmljZSAke3NlcnZpY2VOYW1lfSBtdXN0IGJlIGFuIGFycmF5YCxcbiAgLy8gICAgICk7XG4gIC8vICAgfVxuICAvLyAgIHJldHVybiBhdmFpbGFibGVBWnM7XG4gIC8vIH1cbn1cblxuLyoqXG4gKiBDb25zdHJ1Y3Rpb24gcHJvcGVydGllcyBmb3IgYW4gSW1wb3J0ZWRJbnRlcmZhY2VWcGNFbmRwb2ludC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbnRlcmZhY2VWcGNFbmRwb2ludEF0dHJpYnV0ZXMge1xuICAvKipcbiAgICogVGhlIGludGVyZmFjZSBWUEMgZW5kcG9pbnQgaWRlbnRpZmllci5cbiAgICovXG4gIHJlYWRvbmx5IHZwY0VuZHBvaW50SWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGlkZW50aWZpZXIgb2YgdGhlIHNlY3VyaXR5IGdyb3VwIGFzc29jaWF0ZWQgd2l0aCB0aGUgaW50ZXJmYWNlIFZQQyBlbmRwb2ludC5cbiAgICpcbiAgICogQGRlcHJlY2F0ZWQgdXNlIGBzZWN1cml0eUdyb3Vwc2AgaW5zdGVhZFxuICAgKi9cbiAgcmVhZG9ubHkgc2VjdXJpdHlHcm91cElkPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgc2VjdXJpdHkgZ3JvdXBzIGFzc29jaWF0ZWQgd2l0aCB0aGUgaW50ZXJmYWNlIFZQQyBlbmRwb2ludC5cbiAgICpcbiAgICogSWYgeW91IHdpc2ggdG8gbWFuYWdlIHRoZSBuZXR3b3JrIGNvbm5lY3Rpb25zIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGVuZHBvaW50LFxuICAgKiB5b3Ugd2lsbCBuZWVkIHRvIHNwZWNpZnkgaXRzIHNlY3VyaXR5IGdyb3Vwcy5cbiAgICovXG4gIHJlYWRvbmx5IHNlY3VyaXR5R3JvdXBzPzogSVNlY3VyaXR5R3JvdXBbXTtcblxuICAvKipcbiAgICogVGhlIHBvcnQgb2YgdGhlIHNlcnZpY2Ugb2YgdGhlIGludGVyZmFjZSBWUEMgZW5kcG9pbnQuXG4gICAqL1xuICByZWFkb25seSBwb3J0OiBudW1iZXI7XG59XG4iXX0=