@horietakehiro/aws-cdk-utul 0.41.84 → 0.41.86
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.
- package/lib/types/cfn-resource-types/aws-appstream-imagebuilder.d.ts +10 -2
- package/lib/types/cfn-resource-types/aws-appstream-imagebuilder.js +1 -1
- package/lib/types/cfn-resource-types/aws-autoscaling-autoscalinggroup.d.ts +1 -0
- package/lib/types/cfn-resource-types/aws-autoscaling-autoscalinggroup.js +1 -1
- package/lib/types/cfn-resource-types/aws-cloudfront-anycastiplist.d.ts +36 -0
- package/lib/types/cfn-resource-types/aws-cloudfront-anycastiplist.js +1 -1
- package/lib/types/cfn-resource-types/aws-cloudfront-connectionfunction.d.ts +42 -1
- package/lib/types/cfn-resource-types/aws-cloudfront-connectionfunction.js +1 -1
- package/lib/types/cfn-resource-types/aws-cloudfront-distribution.d.ts +33 -0
- package/lib/types/cfn-resource-types/aws-cloudfront-distribution.js +1 -1
- package/lib/types/cfn-resource-types/aws-cloudfront-truststore.d.ts +24 -22
- package/lib/types/cfn-resource-types/aws-cloudfront-truststore.js +1 -1
- package/lib/types/cfn-resource-types/aws-customerprofiles-recommender.d.ts +130 -0
- package/lib/types/cfn-resource-types/aws-customerprofiles-recommender.js +3 -0
- package/lib/types/cfn-resource-types/aws-devopsagent-agentspace.d.ts +21 -0
- package/lib/types/cfn-resource-types/aws-devopsagent-agentspace.js +1 -1
- package/lib/types/cfn-resource-types/aws-devopsagent-service.d.ts +25 -0
- package/lib/types/cfn-resource-types/aws-devopsagent-service.js +1 -1
- package/lib/types/cfn-resource-types/aws-dlm-lifecyclepolicy.d.ts +1 -0
- package/lib/types/cfn-resource-types/aws-dlm-lifecyclepolicy.js +1 -1
- package/lib/types/cfn-resource-types/aws-ec2-ec2fleet.d.ts +63 -59
- package/lib/types/cfn-resource-types/aws-ec2-ec2fleet.js +1 -1
- package/lib/types/cfn-resource-types/aws-ecs-capacityprovider.d.ts +1 -0
- package/lib/types/cfn-resource-types/aws-ecs-capacityprovider.js +1 -1
- package/lib/types/cfn-resource-types/aws-eks-nodegroup.d.ts +84 -84
- package/lib/types/cfn-resource-types/aws-eks-nodegroup.js +1 -1
- package/lib/types/cfn-resource-types/aws-fsx-filesystem.d.ts +5 -0
- package/lib/types/cfn-resource-types/aws-fsx-filesystem.js +1 -1
- package/lib/types/cfn-resource-types/aws-interconnect-connection.d.ts +98 -0
- package/lib/types/cfn-resource-types/aws-interconnect-connection.js +3 -0
- package/lib/types/cfn-resource-types/aws-observabilityadmin-organizationcentralizationrule.d.ts +2 -1
- package/lib/types/cfn-resource-types/aws-observabilityadmin-organizationcentralizationrule.js +1 -1
- package/lib/types/cfn-resource-types/aws-omics-configuration.d.ts +59 -0
- package/lib/types/cfn-resource-types/aws-omics-configuration.js +3 -0
- package/lib/types/cfn-resource-types/aws-opensearchserverless-collection.d.ts +5 -0
- package/lib/types/cfn-resource-types/aws-opensearchserverless-collection.js +1 -1
- package/lib/types/cfn-resource-types/aws-pcs-cluster.d.ts +92 -58
- package/lib/types/cfn-resource-types/aws-pcs-cluster.js +1 -1
- package/lib/types/cfn-resource-types/aws-quicksight-custompermissions.d.ts +217 -36
- package/lib/types/cfn-resource-types/aws-quicksight-custompermissions.js +1 -1
- package/lib/types/cfn-resource-types.d.ts +6 -0
- package/lib/types/cfn-resource-types.js +32 -25
- package/package.json +1 -1
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzLWNsb3VkZnJvbnQtZGlzdHJpYnV0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiYXdzLWNsb3VkZnJvbnQtZGlzdHJpYnV0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEEgZGlzdHJpYnV0aW9uIHRlbGxzIENsb3VkRnJvbnQgd2hlcmUgeW91IHdhbnQgY29udGVudCB0byBiZSBkZWxpdmVyZWQgZnJvbSwgYW5kIHRoZSBkZXRhaWxzIGFib3V0IGhvdyB0byB0cmFjayBhbmQgbWFuYWdlIGNvbnRlbnQgZGVsaXZlcnkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgX0FXU19DTE9VREZST05UX0RJU1RSSUJVVElPTiB7XG5EaXN0cmlidXRpb25Db25maWc6IERpc3RyaWJ1dGlvbkNvbmZpZ1xuRG9tYWluTmFtZT86IHN0cmluZ1xuSWQ/OiBzdHJpbmdcbi8qKlxuICogQSBjb21wbGV4IHR5cGUgdGhhdCBjb250YWlucyB6ZXJvIG9yIG1vcmUgYGBUYWdgYCBlbGVtZW50cy5cbiAqL1xuVGFncz86IFRhZ1tdXG59XG4vKipcbiAqIFRoZSBkaXN0cmlidXRpb24ncyBjb25maWd1cmF0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERpc3RyaWJ1dGlvbkNvbmZpZyB7XG4vKipcbiAqIFRoaXMgZmllbGQgb25seSBzdXBwb3J0cyBzdGFuZGFyZCBkaXN0cmlidXRpb25zLiBZb3UgY2FuJ3Qgc3BlY2lmeSB0aGlzIGZpZWxkIGZvciBtdWx0aS10ZW5hbnQgZGlzdHJpYnV0aW9ucy4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbVW5zdXBwb3J0ZWQgZmVhdHVyZXMgZm9yIFNhYVMgTWFuYWdlciBmb3IgQW1hem9uIENsb3VkRnJvbnRdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9kaXN0cmlidXRpb24tY29uZmlnLW9wdGlvbnMuaHRtbCN1bnN1cHBvcnRlZC1zYWFzKSBpbiB0aGUgKkFtYXpvbiBDbG91ZEZyb250IERldmVsb3BlciBHdWlkZSouXG4gKiAgIEEgY29tcGxleCB0eXBlIHRoYXQgY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgQ05BTUVzIChhbHRlcm5hdGUgZG9tYWluIG5hbWVzKSwgaWYgYW55LCBmb3IgdGhpcyBkaXN0cmlidXRpb24uXG4gKi9cbkFsaWFzZXM/OiBzdHJpbmdbXVxuLyoqXG4gKiBUbyB1c2UgdGhpcyBmaWVsZCBmb3IgYSBtdWx0aS10ZW5hbnQgZGlzdHJpYnV0aW9uLCB1c2UgYSBjb25uZWN0aW9uIGdyb3VwIGluc3RlYWQuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0Nvbm5lY3Rpb25Hcm91cF0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2Nsb3VkZnJvbnQvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ29ubmVjdGlvbkdyb3VwLmh0bWwpLlxuICogICBJRCBvZiB0aGUgQW55Y2FzdCBzdGF0aWMgSVAgbGlzdCB0aGF0IGlzIGFzc29jaWF0ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuICovXG5BbnljYXN0SXBMaXN0SWQ/OiBzdHJpbmdcbi8qKlxuICogQW4gYWxpYXMgZm9yIHRoZSBDRiBkaXN0cmlidXRpb24ncyBkb21haW4gbmFtZS5cbiAqICAgVGhpcyBwcm9wZXJ0eSBpcyBsZWdhY3kuIFdlIHJlY29tbWVuZCB0aGF0IHlvdSB1c2UgW0FsaWFzZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1wcm9wZXJ0aWVzLWNsb3VkZnJvbnQtZGlzdHJpYnV0aW9uLWRpc3RyaWJ1dGlvbmNvbmZpZy5odG1sI2Nmbi1jbG91ZGZyb250LWRpc3RyaWJ1dGlvbi1kaXN0cmlidXRpb25jb25maWctYWxpYXNlcykgaW5zdGVhZC5cbiAqL1xuQ05BTUVzPzogc3RyaW5nW11cbi8qKlxuICogQSBjb21wbGV4IHR5cGUgdGhhdCBjb250YWlucyB6ZXJvIG9yIG1vcmUgYGBDYWNoZUJlaGF2aW9yYGAgZWxlbWVudHMuXG4gKi9cbkNhY2hlQmVoYXZpb3JzPzogQ2FjaGVCZWhhdmlvcltdXG4vKipcbiAqIEEgY29tbWVudCB0byBkZXNjcmliZSB0aGUgZGlzdHJpYnV0aW9uLiBUaGUgY29tbWVudCBjYW5ub3QgYmUgbG9uZ2VyIHRoYW4gMTI4IGNoYXJhY3RlcnMuXG4gKi9cbkNvbW1lbnQ/OiBzdHJpbmdcbi8qKlxuICogVGhpcyBmaWVsZCBzcGVjaWZpZXMgd2hldGhlciB0aGUgY29ubmVjdGlvbiBtb2RlIGlzIHRocm91Z2ggYSBzdGFuZGFyZCBkaXN0cmlidXRpb24gKGRpcmVjdCkgb3IgYSBtdWx0aS10ZW5hbnQgZGlzdHJpYnV0aW9uIHdpdGggZGlzdHJpYnV0aW9uIHRlbmFudHMgKHRlbmFudC1vbmx5KS5cbiAqL1xuQ29ubmVjdGlvbk1vZGU/OiAoXCJkaXJlY3RcIiB8IFwidGVuYW50LW9ubHlcIilcbkNvbm5lY3Rpb25GdW5jdGlvbkFzc29jaWF0aW9uPzogQ29ubmVjdGlvbkZ1bmN0aW9uQXNzb2NpYXRpb25cbi8qKlxuICogVGhpcyBmaWVsZCBvbmx5IHN1cHBvcnRzIHN0YW5kYXJkIGRpc3RyaWJ1dGlvbnMuIFlvdSBjYW4ndCBzcGVjaWZ5IHRoaXMgZmllbGQgZm9yIG11bHRpLXRlbmFudCBkaXN0cmlidXRpb25zLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtVbnN1cHBvcnRlZCBmZWF0dXJlcyBmb3IgU2FhUyBNYW5hZ2VyIGZvciBBbWF6b24gQ2xvdWRGcm9udF0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL2Rpc3RyaWJ1dGlvbi1jb25maWctb3B0aW9ucy5odG1sI3Vuc3VwcG9ydGVkLXNhYXMpIGluIHRoZSAqQW1hem9uIENsb3VkRnJvbnQgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqICAgVGhlIGlkZW50aWZpZXIgb2YgYSBjb250aW51b3VzIGRlcGxveW1lbnQgcG9saWN5LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIGBgQ3JlYXRlQ29udGludW91c0RlcGxveW1lbnRQb2xpY3lgYC5cbiAqL1xuQ29udGludW91c0RlcGxveW1lbnRQb2xpY3lJZD86IHN0cmluZ1xuLyoqXG4gKiBBIGNvbXBsZXggdHlwZSB0aGF0IGNvbnRyb2xzIHRoZSBmb2xsb3dpbmc6XG4gKiAgICsgIFdoZXRoZXIgQ2xvdWRGcm9udCByZXBsYWNlcyBIVFRQIHN0YXR1cyBjb2RlcyBpbiB0aGUgNHh4IGFuZCA1eHggcmFuZ2Ugd2l0aCBjdXN0b20gZXJyb3IgbWVzc2FnZXMgYmVmb3JlIHJldHVybmluZyB0aGUgcmVzcG9uc2UgdG8gdGhlIHZpZXdlci5cbiAqICAgKyAgSG93IGxvbmcgQ2xvdWRGcm9udCBjYWNoZXMgSFRUUCBzdGF0dXMgY29kZXMgaW4gdGhlIDR4eCBhbmQgNXh4IHJhbmdlLlxuICogICBcbiAqICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBjdXN0b20gZXJyb3IgcGFnZXMsIHNlZSBbQ3VzdG9taXppbmcgRXJyb3IgUmVzcG9uc2VzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvY3VzdG9tLWVycm9yLXBhZ2VzLmh0bWwpIGluIHRoZSAqQW1hem9uIENsb3VkRnJvbnQgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuQ3VzdG9tRXJyb3JSZXNwb25zZXM/OiBDdXN0b21FcnJvclJlc3BvbnNlW11cbkN1c3RvbU9yaWdpbj86IExlZ2FjeUN1c3RvbU9yaWdpblxuRGVmYXVsdENhY2hlQmVoYXZpb3I6IERlZmF1bHRDYWNoZUJlaGF2aW9yXG4vKipcbiAqIFdoZW4gYSB2aWV3ZXIgcmVxdWVzdHMgdGhlIHJvb3QgVVJMIGZvciB5b3VyIGRpc3RyaWJ1dGlvbiwgdGhlIGRlZmF1bHQgcm9vdCBvYmplY3QgaXMgdGhlIG9iamVjdCB0aGF0IHlvdSB3YW50IENsb3VkRnJvbnQgdG8gcmVxdWVzdCBmcm9tIHlvdXIgb3JpZ2luLiBGb3IgZXhhbXBsZSwgaWYgeW91ciByb290IFVSTCBpcyBgYGh0dHBzOi8vd3d3LmV4YW1wbGUuY29tYGAsIHlvdSBjYW4gc3BlY2lmeSBDbG91ZEZyb250IHRvIHJldHVybiB0aGUgYGBpbmRleC5odG1sYGAgZmlsZSBhcyB0aGUgZGVmYXVsdCByb290IG9iamVjdC4gWW91IGNhbiBzcGVjaWZ5IGEgZGVmYXVsdCByb290IG9iamVjdCBzbyB0aGF0IHZpZXdlcnMgc2VlIGEgc3BlY2lmaWMgZmlsZSBvciBvYmplY3QsIGluc3RlYWQgb2YgYW5vdGhlciBvYmplY3QgaW4geW91ciBkaXN0cmlidXRpb24gKGZvciBleGFtcGxlLCBgYGh0dHBzOi8vd3d3LmV4YW1wbGUuY29tL3Byb2R1Y3QtZGVzY3JpcHRpb24uaHRtbGBgKS4gQSBkZWZhdWx0IHJvb3Qgb2JqZWN0IGF2b2lkcyBleHBvc2luZyB0aGUgY29udGVudHMgb2YgeW91ciBkaXN0cmlidXRpb24uXG4gKiAgWW91IGNhbiBzcGVjaWZ5IHRoZSBvYmplY3QgbmFtZSBvciBhIHBhdGggdG8gdGhlIG9iamVjdCBuYW1lIChmb3IgZXhhbXBsZSwgYGBpbmRleC5odG1sYGAgb3IgYGBleGFtcGxlRm9sZGVyTmFtZS9pbmRleC5odG1sYGApLiBZb3VyIHN0cmluZyBjYW4ndCBiZWdpbiB3aXRoIGEgZm9yd2FyZCBzbGFzaCAoYGAvYGApLiBPbmx5IHNwZWNpZnkgdGhlIG9iamVjdCBuYW1lIG9yIHRoZSBwYXRoIHRvIHRoZSBvYmplY3QuXG4gKiAgSWYgeW91IGRvbid0IHdhbnQgdG8gc3BlY2lmeSBhIGRlZmF1bHQgcm9vdCBvYmplY3Qgd2hlbiB5b3UgY3JlYXRlIGEgZGlzdHJpYnV0aW9uLCBpbmNsdWRlIGFuIGVtcHR5IGBgRGVmYXVsdFJvb3RPYmplY3RgYCBlbGVtZW50LlxuICogIFRvIGRlbGV0ZSB0aGUgZGVmYXVsdCByb290IG9iamVjdCBmcm9tIGFuIGV4aXN0aW5nIGRpc3RyaWJ1dGlvbiwgdXBkYXRlIHRoZSBkaXN0cmlidXRpb24gY29uZmlndXJhdGlvbiBhbmQgaW5jbHVkZSBhbiBlbXB0eSBgYERlZmF1bHRSb290T2JqZWN0YGAgZWxlbWVudC5cbiAqICBUbyByZXBsYWNlIHRoZSBkZWZhdWx0IHJvb3Qgb2JqZWN0LCB1cGRhdGUgdGhlIGRpc3RyaWJ1dGlvbiBjb25maWd1cmF0aW9uIGFuZCBzcGVjaWZ5IHRoZSBuZXcgb2JqZWN0LlxuICogIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBkZWZhdWx0IHJvb3Qgb2JqZWN0LCBzZWUgW1NwZWNpZnkgYSBkZWZhdWx0IHJvb3Qgb2JqZWN0XShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvRGVmYXVsdFJvb3RPYmplY3QuaHRtbCkgaW4gdGhlICpBbWF6b24gQ2xvdWRGcm9udCBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5EZWZhdWx0Um9vdE9iamVjdD86IHN0cmluZ1xuLyoqXG4gKiBGcm9tIHRoaXMgZmllbGQsIHlvdSBjYW4gZW5hYmxlIG9yIGRpc2FibGUgdGhlIHNlbGVjdGVkIGRpc3RyaWJ1dGlvbi5cbiAqL1xuRW5hYmxlZDogYm9vbGVhblxuLyoqXG4gKiAoT3B0aW9uYWwpIFNwZWNpZnkgdGhlIEhUVFAgdmVyc2lvbihzKSB0aGF0IHlvdSB3YW50IHZpZXdlcnMgdG8gdXNlIHRvIGNvbW11bmljYXRlIHdpdGggQ0YuIFRoZSBkZWZhdWx0IHZhbHVlIGZvciBuZXcgZGlzdHJpYnV0aW9ucyBpcyBgYGh0dHAxLjFgYC5cbiAqICBGb3Igdmlld2VycyBhbmQgQ0YgdG8gdXNlIEhUVFAvMiwgdmlld2VycyBtdXN0IHN1cHBvcnQgVExTdjEuMiBvciBsYXRlciwgYW5kIG11c3Qgc3VwcG9ydCBTZXJ2ZXIgTmFtZSBJbmRpY2F0aW9uIChTTkkpLlxuICogIEZvciB2aWV3ZXJzIGFuZCBDRiB0byB1c2UgSFRUUC8zLCB2aWV3ZXJzIG11c3Qgc3VwcG9ydCBUTFN2MS4zIGFuZCBTZXJ2ZXIgTmFtZSBJbmRpY2F0aW9uIChTTkkpLiBDRiBzdXBwb3J0cyBIVFRQLzMgY29ubmVjdGlvbiBtaWdyYXRpb24gdG8gYWxsb3cgdGhlIHZpZXdlciB0byBzd2l0Y2ggbmV0d29ya3Mgd2l0aG91dCBsb3NpbmcgY29ubmVjdGlvbi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgY29ubmVjdGlvbiBtaWdyYXRpb24sIHNlZSBbQ29ubmVjdGlvbiBNaWdyYXRpb25dKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9odHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjOTAwMC5odG1sI25hbWUtY29ubmVjdGlvbi1taWdyYXRpb24pIGF0IFJGQyA5MDAwLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBzdXBwb3J0ZWQgVExTdjEuMyBjaXBoZXJzLCBzZWUgW1N1cHBvcnRlZCBwcm90b2NvbHMgYW5kIGNpcGhlcnMgYmV0d2VlbiB2aWV3ZXJzIGFuZCBDbG91ZEZyb250XShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvc2VjdXJlLWNvbm5lY3Rpb25zLXN1cHBvcnRlZC12aWV3ZXItcHJvdG9jb2xzLWNpcGhlcnMuaHRtbCkuXG4gKi9cbkh0dHBWZXJzaW9uPzogc3RyaW5nXG4vKipcbiAqIFRvIHVzZSB0aGlzIGZpZWxkIGZvciBhIG11bHRpLXRlbmFudCBkaXN0cmlidXRpb24sIHVzZSBhIGNvbm5lY3Rpb24gZ3JvdXAgaW5zdGVhZC4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbQ29ubmVjdGlvbkdyb3VwXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xvdWRmcm9udC9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9Db25uZWN0aW9uR3JvdXAuaHRtbCkuXG4gKiAgIElmIHlvdSB3YW50IENsb3VkRnJvbnQgdG8gcmVzcG9uZCB0byBJUHY2IEROUyByZXF1ZXN0cyB3aXRoIGFuIElQdjYgYWRkcmVzcyBmb3IgeW91ciBkaXN0cmlidXRpb24sIHNwZWNpZnkgYGB0cnVlYGAuIElmIHlvdSBzcGVjaWZ5IGBgZmFsc2VgYCwgQ2xvdWRGcm9udCByZXNwb25kcyB0byBJUHY2IEROUyByZXF1ZXN0cyB3aXRoIHRoZSBETlMgcmVzcG9uc2UgY29kZSBgYE5PRVJST1JgYCBhbmQgd2l0aCBubyBJUCBhZGRyZXNzZXMuIFRoaXMgYWxsb3dzIHZpZXdlcnMgdG8gc3VibWl0IGEgc2Vjb25kIHJlcXVlc3QsIGZvciBhbiBJUHY0IGFkZHJlc3MgZm9yIHlvdXIgZGlzdHJpYnV0aW9uLlxuICogIEluIGdlbmVyYWwsIHlvdSBzaG91bGQgZW5hYmxlIElQdjYgaWYgeW91IGhhdmUgdXNlcnMgb24gSVB2NiBuZXR3b3JrcyB3aG8gd2FudCB0byBhY2Nlc3MgeW91ciBjb250ZW50LiBIb3dldmVyLCBpZiB5b3UncmUgdXNpbmcgc2lnbmVkIFVSTHMgb3Igc2lnbmVkIGNvb2tpZXMgdG8gcmVzdHJpY3QgYWNjZXNzIHRvIHlvdXIgY29udGVudCwgYW5kIGlmIHlvdSdyZSB1c2luZyBhIGN1c3RvbSBwb2xpY3kgdGhhdCBpbmNsdWRlcyB0aGUgYGBJcEFkZHJlc3NgYCBwYXJhbWV0ZXIgdG8gcmVzdHJpY3QgdGhlIElQIGFkZHJlc3NlcyB0aGF0IGNhbiBhY2Nlc3MgeW91ciBjb250ZW50LCBkb24ndCBlbmFibGUgSVB2Ni4gSWYgeW91IHdhbnQgdG8gcmVzdHJpY3QgYWNjZXNzIHRvIHNvbWUgY29udGVudCBieSBJUCBhZGRyZXNzIGFuZCBub3QgcmVzdHJpY3QgYWNjZXNzIHRvIG90aGVyIGNvbnRlbnQgKG9yIHJlc3RyaWN0IGFjY2VzcyBidXQgbm90IGJ5IElQIGFkZHJlc3MpLCB5b3UgY2FuIGNyZWF0ZSB0d28gZGlzdHJpYnV0aW9ucy4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbQ3JlYXRpbmcgYSBTaWduZWQgVVJMIFVzaW5nIGEgQ3VzdG9tIFBvbGljeV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL3ByaXZhdGUtY29udGVudC1jcmVhdGluZy1zaWduZWQtdXJsLWN1c3RvbS1wb2xpY3kuaHRtbCkgaW4gdGhlICpBbWF6b24gQ2xvdWRGcm9udCBEZXZlbG9wZXIgR3VpZGUqLlxuICogIElmIHlvdSdyZSB1c2luZyBhbiBSNTNBV1NJbnRsb25nIGFsaWFzIHJlc291cmNlIHJlY29yZCBzZXQgdG8gcm91dGUgdHJhZmZpYyB0byB5b3VyIENsb3VkRnJvbnQgZGlzdHJpYnV0aW9uLCB5b3UgbmVlZCB0byBjcmVhdGUgYSBzZWNvbmQgYWxpYXMgcmVzb3VyY2UgcmVjb3JkIHNldCB3aGVuIGJvdGggb2YgdGhlIGZvbGxvd2luZyBhcmUgdHJ1ZTpcbiAqICAgKyAgWW91IGVuYWJsZSBJUHY2IGZvciB0aGUgZGlzdHJpYnV0aW9uXG4gKiAgICsgIFlvdSdyZSB1c2luZyBhbHRlcm5hdGUgZG9tYWluIG5hbWVzIGluIHRoZSBVUkxzIGZvciB5b3VyIG9iamVjdHNcbiAqICAgXG4gKiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbUm91dGluZyBUcmFmZmljIHRvIGFuIEFtYXpvbiBDbG91ZEZyb250IFdlYiBEaXN0cmlidXRpb24gYnkgVXNpbmcgWW91ciBEb21haW4gTmFtZV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL1JvdXRlNTMvbGF0ZXN0L0RldmVsb3Blckd1aWRlL3JvdXRpbmctdG8tY2xvdWRmcm9udC1kaXN0cmlidXRpb24uaHRtbCkgaW4gdGhlICpEZXZlbG9wZXIgR3VpZGUqLlxuICogIElmIHlvdSBjcmVhdGVkIGEgQ05BTUUgcmVzb3VyY2UgcmVjb3JkIHNldCwgZWl0aGVyIHdpdGggUjUzQVdTSW50bG9uZyBvciB3aXRoIGFub3RoZXIgRE5TIHNlcnZpY2UsIHlvdSBkb24ndCBuZWVkIHRvIG1ha2UgYW55IGNoYW5nZXMuIEEgQ05BTUUgcmVjb3JkIHdpbGwgcm91dGUgdHJhZmZpYyB0byB5b3VyIGRpc3RyaWJ1dGlvbiByZWdhcmRsZXNzIG9mIHRoZSBJUCBhZGRyZXNzIGZvcm1hdCBvZiB0aGUgdmlld2VyIHJlcXVlc3QuXG4gKi9cbklQVjZFbmFibGVkPzogYm9vbGVhblxuTG9nZ2luZz86IExvZ2dpbmdcbk9yaWdpbkdyb3Vwcz86IE9yaWdpbkdyb3Vwc1xuLyoqXG4gKiBBIGNvbXBsZXggdHlwZSB0aGF0IGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IG9yaWdpbnMgZm9yIHRoaXMgZGlzdHJpYnV0aW9uLlxuICogIFNwZWNpZnkgYSB2YWx1ZSBmb3IgZWl0aGVyIHRoZSBgYE9yaWdpbnNgYCBvciBgYE9yaWdpbkdyb3Vwc2BgIHByb3BlcnR5LlxuICovXG5PcmlnaW5zPzogT3JpZ2luW11cbi8qKlxuICogVGhpcyBmaWVsZCBvbmx5IHN1cHBvcnRzIHN0YW5kYXJkIGRpc3RyaWJ1dGlvbnMuIFlvdSBjYW4ndCBzcGVjaWZ5IHRoaXMgZmllbGQgZm9yIG11bHRpLXRlbmFudCBkaXN0cmlidXRpb25zLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtVbnN1cHBvcnRlZCBmZWF0dXJlcyBmb3IgU2FhUyBNYW5hZ2VyIGZvciBBbWF6b24gQ2xvdWRGcm9udF0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL2Rpc3RyaWJ1dGlvbi1jb25maWctb3B0aW9ucy5odG1sI3Vuc3VwcG9ydGVkLXNhYXMpIGluIHRoZSAqQW1hem9uIENsb3VkRnJvbnQgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqICAgVGhlIHByaWNlIGNsYXNzIHRoYXQgY29ycmVzcG9uZHMgd2l0aCB0aGUgbWF4aW11bSBwcmljZSB0aGF0IHlvdSB3YW50IHRvIHBheSBmb3IgQ2xvdWRGcm9udCBzZXJ2aWNlLiBJZiB5b3Ugc3BlY2lmeSBgYFByaWNlQ2xhc3NfQWxsYGAsIENsb3VkRnJvbnQgcmVzcG9uZHMgdG8gcmVxdWVzdHMgZm9yIHlvdXIgb2JqZWN0cyBmcm9tIGFsbCBDbG91ZEZyb250IGVkZ2UgbG9jYXRpb25zLlxuICogIElmIHlvdSBzcGVjaWZ5IGEgcHJpY2UgY2xhc3Mgb3RoZXIgdGhhbiBgYFByaWNlQ2xhc3NfQWxsYGAsIENsb3VkRnJvbnQgc2VydmVzIHlvdXIgb2JqZWN0cyBmcm9tIHRoZSBDbG91ZEZyb250IGVkZ2UgbG9jYXRpb24gdGhhdCBoYXMgdGhlIGxvd2VzdCBsYXRlbmN5IGFtb25nIHRoZSBlZGdlIGxvY2F0aW9ucyBpbiB5b3VyIHByaWNlIGNsYXNzLiBWaWV3ZXJzIHdobyBhcmUgaW4gb3IgbmVhciByZWdpb25zIHRoYXQgYXJlIGV4Y2x1ZGVkIGZyb20geW91ciBzcGVjaWZpZWQgcHJpY2UgY2xhc3MgbWF5IGVuY291bnRlciBzbG93ZXIgcGVyZm9ybWFuY2UuXG4gKiAgRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHJpY2UgY2xhc3Nlcywgc2VlIFtDaG9vc2luZyB0aGUgUHJpY2UgQ2xhc3MgZm9yIGEgQ2xvdWRGcm9udCBEaXN0cmlidXRpb25dKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9QcmljZUNsYXNzLmh0bWwpIGluIHRoZSAqQW1hem9uIENsb3VkRnJvbnQgRGV2ZWxvcGVyIEd1aWRlKi4gRm9yIGluZm9ybWF0aW9uIGFib3V0IENsb3VkRnJvbnQgcHJpY2luZywgaW5jbHVkaW5nIGhvdyBwcmljZSBjbGFzc2VzIChzdWNoIGFzIFByaWNlIENsYXNzIDEwMCkgbWFwIHRvIENsb3VkRnJvbnQgcmVnaW9ucywgc2VlIFtBbWF6b24gQ2xvdWRGcm9udCBQcmljaW5nXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xvdWRmcm9udC9wcmljaW5nLykuXG4gKi9cblByaWNlQ2xhc3M/OiBzdHJpbmdcblJlc3RyaWN0aW9ucz86IFJlc3RyaWN0aW9uc1xuUzNPcmlnaW4/OiBMZWdhY3lTM09yaWdpblxuLyoqXG4gKiBUaGlzIGZpZWxkIG9ubHkgc3VwcG9ydHMgc3RhbmRhcmQgZGlzdHJpYnV0aW9ucy4gWW91IGNhbid0IHNwZWNpZnkgdGhpcyBmaWVsZCBmb3IgbXVsdGktdGVuYW50IGRpc3RyaWJ1dGlvbnMuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1Vuc3VwcG9ydGVkIGZlYXR1cmVzIGZvciBTYWFTIE1hbmFnZXIgZm9yIEFtYXpvbiBDbG91ZEZyb250XShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvZGlzdHJpYnV0aW9uLWNvbmZpZy1vcHRpb25zLmh0bWwjdW5zdXBwb3J0ZWQtc2FhcykgaW4gdGhlICpBbWF6b24gQ2xvdWRGcm9udCBEZXZlbG9wZXIgR3VpZGUqLlxuICogICBBIEJvb2xlYW4gdGhhdCBpbmRpY2F0ZXMgd2hldGhlciB0aGlzIGlzIGEgc3RhZ2luZyBkaXN0cmlidXRpb24uIFdoZW4gdGhpcyB2YWx1ZSBpcyBgYHRydWVgYCwgdGhpcyBpcyBhIHN0YWdpbmcgZGlzdHJpYnV0aW9uLiBXaGVuIHRoaXMgdmFsdWUgaXMgYGBmYWxzZWBgLCB0aGlzIGlzIG5vdCBhIHN0YWdpbmcgZGlzdHJpYnV0aW9uLlxuICovXG5TdGFnaW5nPzogYm9vbGVhblxuLyoqXG4gKiBUaGlzIGZpZWxkIG9ubHkgc3VwcG9ydHMgbXVsdGktdGVuYW50IGRpc3RyaWJ1dGlvbnMuIFlvdSBjYW4ndCBzcGVjaWZ5IHRoaXMgZmllbGQgZm9yIHN0YW5kYXJkIGRpc3RyaWJ1dGlvbnMuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1Vuc3VwcG9ydGVkIGZlYXR1cmVzIGZvciBTYWFTIE1hbmFnZXIgZm9yIEFtYXpvbiBDbG91ZEZyb250XShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvZGlzdHJpYnV0aW9uLWNvbmZpZy1vcHRpb25zLmh0bWwjdW5zdXBwb3J0ZWQtc2FhcykgaW4gdGhlICpBbWF6b24gQ2xvdWRGcm9udCBEZXZlbG9wZXIgR3VpZGUqLlxuICogICBBIGRpc3RyaWJ1dGlvbiB0ZW5hbnQgY29uZmlndXJhdGlvbi5cbiAqL1xuVGVuYW50Q29uZmlnPzoge1xuUGFyYW1ldGVyRGVmaW5pdGlvbnM/OiBQYXJhbWV0ZXJEZWZpbml0aW9uW11cbn1cblZpZXdlck10bHNDb25maWc/OiBWaWV3ZXJNdGxzQ29uZmlnXG5WaWV3ZXJDZXJ0aWZpY2F0ZT86IFZpZXdlckNlcnRpZmljYXRlXG4vKipcbiAqIE11bHRpLXRlbmFudCBkaXN0cmlidXRpb25zIG9ubHkgc3VwcG9ydCBXQUYgVjIgd2ViIEFDTHMuXG4gKiAgIEEgdW5pcXVlIGlkZW50aWZpZXIgdGhhdCBzcGVjaWZpZXMgdGhlIFdBRiB3ZWIgQUNMLCBpZiBhbnksIHRvIGFzc29jaWF0ZSB3aXRoIHRoaXMgZGlzdHJpYnV0aW9uLiBUbyBzcGVjaWZ5IGEgd2ViIEFDTCBjcmVhdGVkIHVzaW5nIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiBXQUYsIHVzZSB0aGUgQUNMIEFSTiwgZm9yIGV4YW1wbGUgYGBhcm46YXdzOndhZnYyOnVzLWVhc3QtMToxMjM0NTY3ODkwMTI6Z2xvYmFsL3dlYmFjbC9FeGFtcGxlV2ViQUNML2ExYjJjM2Q0LTU2NzgtOTBhYi1jZGVmLUVYQU1QTEUxMTExMWBgLiBUbyBzcGVjaWZ5IGEgd2ViIEFDTCBjcmVhdGVkIHVzaW5nIFdBRiBDbGFzc2ljLCB1c2UgdGhlIEFDTCBJRCwgZm9yIGV4YW1wbGUgYGBhMWIyYzNkNC01Njc4LTkwYWItY2RlZi1FWEFNUExFMTExMTFgYC5cbiAqICBXQUYgaXMgYSB3ZWIgYXBwbGljYXRpb24gZmlyZXdhbGwgdGhhdCBsZXRzIHlvdSBtb25pdG9yIHRoZSBIVFRQIGFuZCBIVFRQUyByZXF1ZXN0cyB0aGF0IGFyZSBmb3J3YXJkZWQgdG8gQ2xvdWRGcm9udCwgYW5kIGxldHMgeW91IGNvbnRyb2wgYWNjZXNzIHRvIHlvdXIgY29udGVudC4gQmFzZWQgb24gY29uZGl0aW9ucyB0aGF0IHlvdSBzcGVjaWZ5LCBzdWNoIGFzIHRoZSBJUCBhZGRyZXNzZXMgdGhhdCByZXF1ZXN0cyBvcmlnaW5hdGUgZnJvbSBvciB0aGUgdmFsdWVzIG9mIHF1ZXJ5IHN0cmluZ3MsIENsb3VkRnJvbnQgcmVzcG9uZHMgdG8gcmVxdWVzdHMgZWl0aGVyIHdpdGggdGhlIHJlcXVlc3RlZCBjb250ZW50IG9yIHdpdGggYW4gSFRUUCA0MDMgc3RhdHVzIGNvZGUgKEZvcmJpZGRlbikuIFlvdSBjYW4gYWxzbyBjb25maWd1cmUgQ2xvdWRGcm9udCB0byByZXR1cm4gYSBjdXN0b20gZXJyb3IgcGFnZSB3aGVuIGEgcmVxdWVzdCBpcyBibG9ja2VkLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBXQUYsIHNlZSB0aGUgW0RldmVsb3BlciBHdWlkZV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3dhZi9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvd2hhdC1pcy1hd3Mtd2FmLmh0bWwpLlxuICovXG5XZWJBQ0xJZD86IHN0cmluZ1xufVxuLyoqXG4gKiBBIGNvbXBsZXggdHlwZSB0aGF0IGRlc2NyaWJlcyBob3cgQ2xvdWRGcm9udCBwcm9jZXNzZXMgcmVxdWVzdHMuXG4gKiAgWW91IG11c3QgY3JlYXRlIGF0IGxlYXN0IGFzIG1hbnkgY2FjaGUgYmVoYXZpb3JzIChpbmNsdWRpbmcgdGhlIGRlZmF1bHQgY2FjaGUgYmVoYXZpb3IpIGFzIHlvdSBoYXZlIG9yaWdpbnMgaWYgeW91IHdhbnQgQ2xvdWRGcm9udCB0byBzZXJ2ZSBvYmplY3RzIGZyb20gYWxsIG9mIHRoZSBvcmlnaW5zLiBFYWNoIGNhY2hlIGJlaGF2aW9yIHNwZWNpZmllcyB0aGUgb25lIG9yaWdpbiBmcm9tIHdoaWNoIHlvdSB3YW50IENsb3VkRnJvbnQgdG8gZ2V0IG9iamVjdHMuIElmIHlvdSBoYXZlIHR3byBvcmlnaW5zIGFuZCBvbmx5IHRoZSBkZWZhdWx0IGNhY2hlIGJlaGF2aW9yLCB0aGUgZGVmYXVsdCBjYWNoZSBiZWhhdmlvciB3aWxsIGNhdXNlIENsb3VkRnJvbnQgdG8gZ2V0IG9iamVjdHMgZnJvbSBvbmUgb2YgdGhlIG9yaWdpbnMsIGJ1dCB0aGUgb3RoZXIgb3JpZ2luIGlzIG5ldmVyIHVzZWQuXG4gKiAgRm9yIHRoZSBjdXJyZW50IHF1b3RhIChmb3JtZXJseSBrbm93biBhcyBsaW1pdCkgb24gdGhlIG51bWJlciBvZiBjYWNoZSBiZWhhdmlvcnMgdGhhdCB5b3UgY2FuIGFkZCB0byBhIGRpc3RyaWJ1dGlvbiwgc2VlIFtRdW90YXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9jbG91ZGZyb250LWxpbWl0cy5odG1sKSBpbiB0aGUgKkFtYXpvbiBDbG91ZEZyb250IERldmVsb3BlciBHdWlkZSouXG4gKiAgSWYgeW91IGRvbid0IHdhbnQgdG8gc3BlY2lmeSBhbnkgY2FjaGUgYmVoYXZpb3JzLCBpbmNsdWRlIG9ubHkgYW4gZW1wdHkgYGBDYWNoZUJlaGF2aW9yc2BgIGVsZW1lbnQuIERvbid0IHNwZWNpZnkgYW4gZW1wdHkgaW5kaXZpZHVhbCBgYENhY2hlQmVoYXZpb3JgYCBlbGVtZW50LCBiZWNhdXNlIHRoaXMgaXMgaW52YWxpZC4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbQ2FjaGVCZWhhdmlvcnNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbG91ZGZyb250L2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NhY2hlQmVoYXZpb3JzLmh0bWwpLiBcbiAqICBUbyBkZWxldGUgYWxsIGNhY2hlIGJlaGF2aW9ycyBpbiBhbiBleGlzdGluZyBkaXN0cmlidXRpb24sIHVwZGF0ZSB0aGUgZGlzdHJpYnV0aW9uIGNvbmZpZ3VyYXRpb24gYW5kIGluY2x1ZGUgb25seSBhbiBlbXB0eSBgYENhY2hlQmVoYXZpb3JzYGAgZWxlbWVudC5cbiAqICBUbyBhZGQsIGNoYW5nZSwgb3IgcmVtb3ZlIG9uZSBvciBtb3JlIGNhY2hlIGJlaGF2aW9ycywgdXBkYXRlIHRoZSBkaXN0cmlidXRpb24gY29uZmlndXJhdGlvbiBhbmQgc3BlY2lmeSBhbGwgb2YgdGhlIGNhY2hlIGJlaGF2aW9ycyB0aGF0IHlvdSB3YW50IHRvIGluY2x1ZGUgaW4gdGhlIHVwZGF0ZWQgZGlzdHJpYnV0aW9uLlxuICogICBJZiB5b3VyIG1pbmltdW0gVFRMIGlzIGdyZWF0ZXIgdGhhbiAwLCBDbG91ZEZyb250IHdpbGwgY2FjaGUgY29udGVudCBmb3IgYXQgbGVhc3QgdGhlIGR1cmF0aW9uIHNwZWNpZmllZCBpbiB0aGUgY2FjaGUgcG9saWN5J3MgbWluaW11bSBUVEwsIGV2ZW4gaWYgdGhlIGBgQ2FjaGUtQ29udHJvbDogbm8tY2FjaGVgYCwgYGBuby1zdG9yZWBgLCBvciBgYHByaXZhdGVgYCBkaXJlY3RpdmVzIGFyZSBwcmVzZW50IGluIHRoZSBvcmlnaW4gaGVhZGVycy5cbiAqICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgY2FjaGUgYmVoYXZpb3JzLCBzZWUgW0NhY2hlIEJlaGF2aW9yIFNldHRpbmdzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvZGlzdHJpYnV0aW9uLXdlYi12YWx1ZXMtc3BlY2lmeS5odG1sI0Rvd25sb2FkRGlzdFZhbHVlc0NhY2hlQmVoYXZpb3IpIGluIHRoZSAqQW1hem9uIENsb3VkRnJvbnQgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDYWNoZUJlaGF2aW9yIHtcbi8qKlxuICogQSBjb21wbGV4IHR5cGUgdGhhdCBjb250cm9scyB3aGljaCBIVFRQIG1ldGhvZHMgQ2xvdWRGcm9udCBwcm9jZXNzZXMgYW5kIGZvcndhcmRzIHRvIHlvdXIgQW1hem9uIFMzIGJ1Y2tldCBvciB5b3VyIGN1c3RvbSBvcmlnaW4uIFRoZXJlIGFyZSB0aHJlZSBjaG9pY2VzOlxuICogICArICBDbG91ZEZyb250IGZvcndhcmRzIG9ubHkgYGBHRVRgYCBhbmQgYGBIRUFEYGAgcmVxdWVzdHMuXG4gKiAgICsgIENsb3VkRnJvbnQgZm9yd2FyZHMgb25seSBgYEdFVGBgLCBgYEhFQURgYCwgYW5kIGBgT1BUSU9OU2BgIHJlcXVlc3RzLlxuICogICArICBDbG91ZEZyb250IGZvcndhcmRzIGBgR0VULCBIRUFELCBPUFRJT05TLCBQVVQsIFBBVENILCBQT1NUYGAsIGFuZCBgYERFTEVURWBgIHJlcXVlc3RzLlxuICogICBcbiAqICBJZiB5b3UgcGljayB0aGUgdGhpcmQgY2hvaWNlLCB5b3UgbWF5IG5lZWQgdG8gcmVzdHJpY3QgYWNjZXNzIHRvIHlvdXIgQW1hem9uIFMzIGJ1Y2tldCBvciB0byB5b3VyIGN1c3RvbSBvcmlnaW4gc28gdXNlcnMgY2FuJ3QgcGVyZm9ybSBvcGVyYXRpb25zIHRoYXQgeW91IGRvbid0IHdhbnQgdGhlbSB0by4gRm9yIGV4YW1wbGUsIHlvdSBtaWdodCBub3Qgd2FudCB1c2VycyB0byBoYXZlIHBlcm1pc3Npb25zIHRvIGRlbGV0ZSBvYmplY3RzIGZyb20geW91ciBvcmlnaW4uXG4gKi9cbkFsbG93ZWRNZXRob2RzPzogc3RyaW5nW11cbi8qKlxuICogVGhlIHVuaXF1ZSBpZGVudGlmaWVyIG9mIHRoZSBjYWNoZSBwb2xpY3kgdGhhdCBpcyBhdHRhY2hlZCB0byB0aGlzIGNhY2hlIGJlaGF2aW9yLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtDcmVhdGluZyBjYWNoZSBwb2xpY2llc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL2NvbnRyb2xsaW5nLXRoZS1jYWNoZS1rZXkuaHRtbCNjYWNoZS1rZXktY3JlYXRlLWNhY2hlLXBvbGljeSkgb3IgW1VzaW5nIHRoZSBtYW5hZ2VkIGNhY2hlIHBvbGljaWVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvdXNpbmctbWFuYWdlZC1jYWNoZS1wb2xpY2llcy5odG1sKSBpbiB0aGUgKkFtYXpvbiBDbG91ZEZyb250IERldmVsb3BlciBHdWlkZSouXG4gKiAgQSBgYENhY2hlQmVoYXZpb3JgYCBtdXN0IGluY2x1ZGUgZWl0aGVyIGEgYGBDYWNoZVBvbGljeUlkYGAgb3IgYGBGb3J3YXJkZWRWYWx1ZXNgYC4gV2UgcmVjb21tZW5kIHRoYXQgeW91IHVzZSBhIGBgQ2FjaGVQb2xpY3lJZGBgLlxuICovXG5DYWNoZVBvbGljeUlkPzogc3RyaW5nXG4vKipcbiAqIEEgY29tcGxleCB0eXBlIHRoYXQgY29udHJvbHMgd2hldGhlciBDbG91ZEZyb250IGNhY2hlcyB0aGUgcmVzcG9uc2UgdG8gcmVxdWVzdHMgdXNpbmcgdGhlIHNwZWNpZmllZCBIVFRQIG1ldGhvZHMuIFRoZXJlIGFyZSB0d28gY2hvaWNlczpcbiAqICAgKyAgQ2xvdWRGcm9udCBjYWNoZXMgcmVzcG9uc2VzIHRvIGBgR0VUYGAgYW5kIGBgSEVBRGBgIHJlcXVlc3RzLlxuICogICArICBDbG91ZEZyb250IGNhY2hlcyByZXNwb25zZXMgdG8gYGBHRVRgYCwgYGBIRUFEYGAsIGFuZCBgYE9QVElPTlNgYCByZXF1ZXN0cy5cbiAqICAgXG4gKiAgSWYgeW91IHBpY2sgdGhlIHNlY29uZCBjaG9pY2UgZm9yIHlvdXIgQW1hem9uIFMzIE9yaWdpbiwgeW91IG1heSBuZWVkIHRvIGZvcndhcmQgQWNjZXNzLUNvbnRyb2wtUmVxdWVzdC1NZXRob2QsIEFjY2Vzcy1Db250cm9sLVJlcXVlc3QtSGVhZGVycywgYW5kIE9yaWdpbiBoZWFkZXJzIGZvciB0aGUgcmVzcG9uc2VzIHRvIGJlIGNhY2hlZCBjb3JyZWN0bHkuXG4gKi9cbkNhY2hlZE1ldGhvZHM/OiBzdHJpbmdbXVxuLyoqXG4gKiBXaGV0aGVyIHlvdSB3YW50IENsb3VkRnJvbnQgdG8gYXV0b21hdGljYWxseSBjb21wcmVzcyBjZXJ0YWluIGZpbGVzIGZvciB0aGlzIGNhY2hlIGJlaGF2aW9yLiBJZiBzbywgc3BlY2lmeSB0cnVlOyBpZiBub3QsIHNwZWNpZnkgZmFsc2UuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1NlcnZpbmcgQ29tcHJlc3NlZCBGaWxlc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL1NlcnZpbmdDb21wcmVzc2VkRmlsZXMuaHRtbCkgaW4gdGhlICpBbWF6b24gQ2xvdWRGcm9udCBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5Db21wcmVzcz86IGJvb2xlYW5cbi8qKlxuICogVGhpcyBmaWVsZCBvbmx5IHN1cHBvcnRzIHN0YW5kYXJkIGRpc3RyaWJ1dGlvbnMuIFlvdSBjYW4ndCBzcGVjaWZ5IHRoaXMgZmllbGQgZm9yIG11bHRpLXRlbmFudCBkaXN0cmlidXRpb25zLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtVbnN1cHBvcnRlZCBmZWF0dXJlcyBmb3IgU2FhUyBNYW5hZ2VyIGZvciBBbWF6b24gQ2xvdWRGcm9udF0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL2Rpc3RyaWJ1dGlvbi1jb25maWctb3B0aW9ucy5odG1sI3Vuc3VwcG9ydGVkLXNhYXMpIGluIHRoZSAqQW1hem9uIENsb3VkRnJvbnQgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqICAgVGhpcyBmaWVsZCBpcyBkZXByZWNhdGVkLiBXZSByZWNvbW1lbmQgdGhhdCB5b3UgdXNlIHRoZSBgYERlZmF1bHRUVExgYCBmaWVsZCBpbiBhIGNhY2hlIHBvbGljeSBpbnN0ZWFkIG9mIHRoaXMgZmllbGQuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0NyZWF0aW5nIGNhY2hlIHBvbGljaWVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvY29udHJvbGxpbmctdGhlLWNhY2hlLWtleS5odG1sI2NhY2hlLWtleS1jcmVhdGUtY2FjaGUtcG9saWN5KSBvciBbVXNpbmcgdGhlIG1hbmFnZWQgY2FjaGUgcG9saWNpZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS91c2luZy1tYW5hZ2VkLWNhY2hlLXBvbGljaWVzLmh0bWwpIGluIHRoZSAqQW1hem9uIENsb3VkRnJvbnQgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqICBUaGUgZGVmYXVsdCBhbW91bnQgb2YgdGltZSB0aGF0IHlvdSB3YW50IG9iamVjdHMgdG8gc3RheSBpbiBDbG91ZEZyb250IGNhY2hlcyBiZWZvcmUgQ2xvdWRGcm9udCBmb3J3YXJkcyBhbm90aGVyIHJlcXVlc3QgdG8geW91ciBvcmlnaW4gdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIG9iamVjdCBoYXMgYmVlbiB1cGRhdGVkLiBUaGUgdmFsdWUgdGhhdCB5b3Ugc3BlY2lmeSBhcHBsaWVzIG9ubHkgd2hlbiB5b3VyIG9yaWdpbiBkb2VzIG5vdCBhZGQgSFRUUCBoZWFkZXJzIHN1Y2ggYXMgYGBDYWNoZS1Db250cm9sIG1heC1hZ2VgYCwgYGBDYWNoZS1Db250cm9sIHMtbWF4YWdlYGAsIGFuZCBgYEV4cGlyZXNgYCB0byBvYmplY3RzLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtNYW5hZ2luZyBIb3cgTG9uZyBDb250ZW50IFN0YXlzIGluIGFuIEVkZ2UgQ2FjaGUgKEV4cGlyYXRpb24pXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvRXhwaXJhdGlvbi5odG1sKSBpbiB0aGUgKkFtYXpvbiBDbG91ZEZyb250IERldmVsb3BlciBHdWlkZSouXG4gKi9cbkRlZmF1bHRUVEw/OiBudW1iZXJcbi8qKlxuICogVGhlIHZhbHVlIG9mIGBgSURgYCBmb3IgdGhlIGZpZWxkLWxldmVsIGVuY3J5cHRpb24gY29uZmlndXJhdGlvbiB0aGF0IHlvdSB3YW50IENsb3VkRnJvbnQgdG8gdXNlIGZvciBlbmNyeXB0aW5nIHNwZWNpZmljIGZpZWxkcyBvZiBkYXRhIGZvciB0aGlzIGNhY2hlIGJlaGF2aW9yLlxuICovXG5GaWVsZExldmVsRW5jcnlwdGlvbklkPzogc3RyaW5nXG5Gb3J3YXJkZWRWYWx1ZXM/OiBGb3J3YXJkZWRWYWx1ZXNcbi8qKlxuICogQSBsaXN0IG9mIENsb3VkRnJvbnQgZnVuY3Rpb25zIHRoYXQgYXJlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGNhY2hlIGJlaGF2aW9yLiBDbG91ZEZyb250IGZ1bmN0aW9ucyBtdXN0IGJlIHB1Ymxpc2hlZCB0byB0aGUgYGBMSVZFYGAgc3RhZ2UgdG8gYXNzb2NpYXRlIHRoZW0gd2l0aCBhIGNhY2hlIGJlaGF2aW9yLlxuICovXG5GdW5jdGlvbkFzc29jaWF0aW9ucz86IEZ1bmN0aW9uQXNzb2NpYXRpb25bXVxuR3JwY0NvbmZpZz86IEdycGNDb25maWdcbi8qKlxuICogQSBjb21wbGV4IHR5cGUgdGhhdCBjb250YWlucyB6ZXJvIG9yIG1vcmUgTGFtYmRhQEVkZ2UgZnVuY3Rpb24gYXNzb2NpYXRpb25zIGZvciBhIGNhY2hlIGJlaGF2aW9yLlxuICovXG5MYW1iZGFGdW5jdGlvbkFzc29jaWF0aW9ucz86IExhbWJkYUZ1bmN0aW9uQXNzb2NpYXRpb25bXVxuLyoqXG4gKiBUaGlzIGZpZWxkIG9ubHkgc3VwcG9ydHMgc3RhbmRhcmQgZGlzdHJpYnV0aW9ucy4gWW91IGNhbid0IHNwZWNpZnkgdGhpcyBmaWVsZCBmb3IgbXVsdGktdGVuYW50IGRpc3RyaWJ1dGlvbnMuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1Vuc3VwcG9ydGVkIGZlYXR1cmVzIGZvciBTYWFTIE1hbmFnZXIgZm9yIEFtYXpvbiBDbG91ZEZyb250XShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvZGlzdHJpYnV0aW9uLWNvbmZpZy1vcHRpb25zLmh0bWwjdW5zdXBwb3J0ZWQtc2FhcykgaW4gdGhlICpBbWF6b24gQ2xvdWRGcm9udCBEZXZlbG9wZXIgR3VpZGUqLlxuICogICBUaGlzIGZpZWxkIGlzIGRlcHJlY2F0ZWQuIFdlIHJlY29tbWVuZCB0aGF0IHlvdSB1c2UgdGhlIGBgTWF4VFRMYGAgZmllbGQgaW4gYSBjYWNoZSBwb2xpY3kgaW5zdGVhZCBvZiB0aGlzIGZpZWxkLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtDcmVhdGluZyBjYWNoZSBwb2xpY2llc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL2NvbnRyb2xsaW5nLXRoZS1jYWNoZS1rZXkuaHRtbCNjYWNoZS1rZXktY3JlYXRlLWNhY2hlLXBvbGljeSkgb3IgW1VzaW5nIHRoZSBtYW5hZ2VkIGNhY2hlIHBvbGljaWVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvdXNpbmctbWFuYWdlZC1jYWNoZS1wb2xpY2llcy5odG1sKSBpbiB0aGUgKkFtYXpvbiBDbG91ZEZyb250IERldmVsb3BlciBHdWlkZSouXG4gKiAgVGhlIG1heGltdW0gYW1vdW50IG9mIHRpbWUgdGhhdCB5b3Ugd2FudCBvYmplY3RzIHRvIHN0YXkgaW4gQ2xvdWRGcm9udCBjYWNoZXMgYmVmb3JlIENsb3VkRnJvbnQgZm9yd2FyZHMgYW5vdGhlciByZXF1ZXN0IHRvIHlvdXIgb3JpZ2luIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZSBvYmplY3QgaGFzIGJlZW4gdXBkYXRlZC4gVGhlIHZhbHVlIHRoYXQgeW91IHNwZWNpZnkgYXBwbGllcyBvbmx5IHdoZW4geW91ciBvcmlnaW4gYWRkcyBIVFRQIGhlYWRlcnMgc3VjaCBhcyBgYENhY2hlLUNvbnRyb2wgbWF4LWFnZWBgLCBgYENhY2hlLUNvbnRyb2wgcy1tYXhhZ2VgYCwgYW5kIGBgRXhwaXJlc2BgIHRvIG9iamVjdHMuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW01hbmFnaW5nIEhvdyBMb25nIENvbnRlbnQgU3RheXMgaW4gYW4gRWRnZSBDYWNoZSAoRXhwaXJhdGlvbildKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9FeHBpcmF0aW9uLmh0bWwpIGluIHRoZSAqQW1hem9uIENsb3VkRnJvbnQgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuTWF4VFRMPzogbnVtYmVyXG4vKipcbiAqIFRoaXMgZmllbGQgb25seSBzdXBwb3J0cyBzdGFuZGFyZCBkaXN0cmlidXRpb25zLiBZb3UgY2FuJ3Qgc3BlY2lmeSB0aGlzIGZpZWxkIGZvciBtdWx0aS10ZW5hbnQgZGlzdHJpYnV0aW9ucy4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbVW5zdXBwb3J0ZWQgZmVhdHVyZXMgZm9yIFNhYVMgTWFuYWdlciBmb3IgQW1hem9uIENsb3VkRnJvbnRdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9kaXN0cmlidXRpb24tY29uZmlnLW9wdGlvbnMuaHRtbCN1bnN1cHBvcnRlZC1zYWFzKSBpbiB0aGUgKkFtYXpvbiBDbG91ZEZyb250IERldmVsb3BlciBHdWlkZSouXG4gKiAgIFRoaXMgZmllbGQgaXMgZGVwcmVjYXRlZC4gV2UgcmVjb21tZW5kIHRoYXQgeW91IHVzZSB0aGUgYGBNaW5UVExgYCBmaWVsZCBpbiBhIGNhY2hlIHBvbGljeSBpbnN0ZWFkIG9mIHRoaXMgZmllbGQuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0NyZWF0aW5nIGNhY2hlIHBvbGljaWVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvY29udHJvbGxpbmctdGhlLWNhY2hlLWtleS5odG1sI2NhY2hlLWtleS1jcmVhdGUtY2FjaGUtcG9saWN5KSBvciBbVXNpbmcgdGhlIG1hbmFnZWQgY2FjaGUgcG9saWNpZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS91c2luZy1tYW5hZ2VkLWNhY2hlLXBvbGljaWVzLmh0bWwpIGluIHRoZSAqQW1hem9uIENsb3VkRnJvbnQgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqICBUaGUgbWluaW11bSBhbW91bnQgb2YgdGltZSB0aGF0IHlvdSB3YW50IG9iamVjdHMgdG8gc3RheSBpbiBDbG91ZEZyb250IGNhY2hlcyBiZWZvcmUgQ2xvdWRGcm9udCBmb3J3YXJkcyBhbm90aGVyIHJlcXVlc3QgdG8geW91ciBvcmlnaW4gdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIG9iamVjdCBoYXMgYmVlbiB1cGRhdGVkLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtNYW5hZ2luZyBIb3cgTG9uZyBDb250ZW50IFN0YXlzIGluIGFuIEVkZ2UgQ2FjaGUgKEV4cGlyYXRpb24pXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvRXhwaXJhdGlvbi5odG1sKSBpbiB0aGUgKkFtYXpvbiBDbG91ZEZyb250IERldmVsb3BlciBHdWlkZSouXG4gKiAgWW91IG11c3Qgc3BlY2lmeSBgYDBgYCBmb3IgYGBNaW5UVExgYCBpZiB5b3UgY29uZmlndXJlIENsb3VkRnJvbnQgdG8gZm9yd2FyZCBhbGwgaGVhZGVycyB0byB5b3VyIG9yaWdpbiAodW5kZXIgYGBIZWFkZXJzYGAsIGlmIHlvdSBzcGVjaWZ5IGBgMWBgIGZvciBgYFF1YW50aXR5YGAgYW5kIGBgKmBgIGZvciBgYE5hbWVgYCkuXG4gKi9cbk1pblRUTD86IG51bWJlclxuLyoqXG4gKiBUaGUgdW5pcXVlIGlkZW50aWZpZXIgb2YgdGhlIG9yaWdpbiByZXF1ZXN0IHBvbGljeSB0aGF0IGlzIGF0dGFjaGVkIHRvIHRoaXMgY2FjaGUgYmVoYXZpb3IuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0NyZWF0aW5nIG9yaWdpbiByZXF1ZXN0IHBvbGljaWVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvY29udHJvbGxpbmctb3JpZ2luLXJlcXVlc3RzLmh0bWwjb3JpZ2luLXJlcXVlc3QtY3JlYXRlLW9yaWdpbi1yZXF1ZXN0LXBvbGljeSkgb3IgW1VzaW5nIHRoZSBtYW5hZ2VkIG9yaWdpbiByZXF1ZXN0IHBvbGljaWVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvdXNpbmctbWFuYWdlZC1vcmlnaW4tcmVxdWVzdC1wb2xpY2llcy5odG1sKSBpbiB0aGUgKkFtYXpvbiBDbG91ZEZyb250IERldmVsb3BlciBHdWlkZSouXG4gKi9cbk9yaWdpblJlcXVlc3RQb2xpY3lJZD86IHN0cmluZ1xuLyoqXG4gKiBUaGUgcGF0dGVybiAoZm9yIGV4YW1wbGUsIGBgaW1hZ2VzLyouanBnYGApIHRoYXQgc3BlY2lmaWVzIHdoaWNoIHJlcXVlc3RzIHRvIGFwcGx5IHRoZSBiZWhhdmlvciB0by4gV2hlbiBDbG91ZEZyb250IHJlY2VpdmVzIGEgdmlld2VyIHJlcXVlc3QsIHRoZSByZXF1ZXN0ZWQgcGF0aCBpcyBjb21wYXJlZCB3aXRoIHBhdGggcGF0dGVybnMgaW4gdGhlIG9yZGVyIGluIHdoaWNoIGNhY2hlIGJlaGF2aW9ycyBhcmUgbGlzdGVkIGluIHRoZSBkaXN0cmlidXRpb24uXG4gKiAgIFlvdSBjYW4gb3B0aW9uYWxseSBpbmNsdWRlIGEgc2xhc2ggKGBgL2BgKSBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBwYXRoIHBhdHRlcm4uIEZvciBleGFtcGxlLCBgYC9pbWFnZXMvKi5qcGdgYC4gQ2xvdWRGcm9udCBiZWhhdmlvciBpcyB0aGUgc2FtZSB3aXRoIG9yIHdpdGhvdXQgdGhlIGxlYWRpbmcgYGAvYGAuXG4gKiAgIFRoZSBwYXRoIHBhdHRlcm4gZm9yIHRoZSBkZWZhdWx0IGNhY2hlIGJlaGF2aW9yIGlzIGBgKmBgIGFuZCBjYW5ub3QgYmUgY2hhbmdlZC4gSWYgdGhlIHJlcXVlc3QgZm9yIGFuIG9iamVjdCBkb2VzIG5vdCBtYXRjaCB0aGUgcGF0aCBwYXR0ZXJuIGZvciBhbnkgY2FjaGUgYmVoYXZpb3JzLCBDbG91ZEZyb250IGFwcGxpZXMgdGhlIGJlaGF2aW9yIGluIHRoZSBkZWZhdWx0IGNhY2hlIGJlaGF2aW9yLlxuICogIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1BhdGggUGF0dGVybl0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL2Rpc3RyaWJ1dGlvbi13ZWItdmFsdWVzLXNwZWNpZnkuaHRtbCNEb3dubG9hZERpc3RWYWx1ZXNQYXRoUGF0dGVybikgaW4gdGhlICpBbWF6b24gQ2xvdWRGcm9udCBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5QYXRoUGF0dGVybjogc3RyaW5nXG4vKipcbiAqIFRoZSBBbWF6b24gUmVzb3VyY2UgTmFtZSAoQVJOKSBvZiB0aGUgcmVhbC10aW1lIGxvZyBjb25maWd1cmF0aW9uIHRoYXQgaXMgYXR0YWNoZWQgdG8gdGhpcyBjYWNoZSBiZWhhdmlvci4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbUmVhbC10aW1lIGxvZ3NdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9yZWFsLXRpbWUtbG9ncy5odG1sKSBpbiB0aGUgKkFtYXpvbiBDbG91ZEZyb250IERldmVsb3BlciBHdWlkZSouXG4gKi9cblJlYWx0aW1lTG9nQ29uZmlnQXJuPzogc3RyaW5nXG4vKipcbiAqIFRoZSBpZGVudGlmaWVyIGZvciBhIHJlc3BvbnNlIGhlYWRlcnMgcG9saWN5LlxuICovXG5SZXNwb25zZUhlYWRlcnNQb2xpY3lJZD86IHN0cmluZ1xuLyoqXG4gKiBUaGlzIGZpZWxkIG9ubHkgc3VwcG9ydHMgc3RhbmRhcmQgZGlzdHJpYnV0aW9ucy4gWW91IGNhbid0IHNwZWNpZnkgdGhpcyBmaWVsZCBmb3IgbXVsdGktdGVuYW50IGRpc3RyaWJ1dGlvbnMuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1Vuc3VwcG9ydGVkIGZlYXR1cmVzIGZvciBTYWFTIE1hbmFnZXIgZm9yIEFtYXpvbiBDbG91ZEZyb250XShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvZGlzdHJpYnV0aW9uLWNvbmZpZy1vcHRpb25zLmh0bWwjdW5zdXBwb3J0ZWQtc2FhcykgaW4gdGhlICpBbWF6b24gQ2xvdWRGcm9udCBEZXZlbG9wZXIgR3VpZGUqLlxuICogICBJbmRpY2F0ZXMgd2hldGhlciB5b3Ugd2FudCB0byBkaXN0cmlidXRlIG1lZGlhIGZpbGVzIGluIHRoZSBNaWNyb3NvZnQgU21vb3RoIFN0cmVhbWluZyBmb3JtYXQgdXNpbmcgdGhlIG9yaWdpbiB0aGF0IGlzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGNhY2hlIGJlaGF2aW9yLiBJZiBzbywgc3BlY2lmeSBgYHRydWVgYDsgaWYgbm90LCBzcGVjaWZ5IGBgZmFsc2VgYC4gSWYgeW91IHNwZWNpZnkgYGB0cnVlYGAgZm9yIGBgU21vb3RoU3RyZWFtaW5nYGAsIHlvdSBjYW4gc3RpbGwgZGlzdHJpYnV0ZSBvdGhlciBjb250ZW50IHVzaW5nIHRoaXMgY2FjaGUgYmVoYXZpb3IgaWYgdGhlIGNvbnRlbnQgbWF0Y2hlcyB0aGUgdmFsdWUgb2YgYGBQYXRoUGF0dGVybmBgLlxuICovXG5TbW9vdGhTdHJlYW1pbmc/OiBib29sZWFuXG4vKipcbiAqIFRoZSB2YWx1ZSBvZiBgYElEYGAgZm9yIHRoZSBvcmlnaW4gdGhhdCB5b3Ugd2FudCBDbG91ZEZyb250IHRvIHJvdXRlIHJlcXVlc3RzIHRvIHdoZW4gdGhleSBtYXRjaCB0aGlzIGNhY2hlIGJlaGF2aW9yLlxuICovXG5UYXJnZXRPcmlnaW5JZDogc3RyaW5nXG4vKipcbiAqIEEgbGlzdCBvZiBrZXkgZ3JvdXBzIHRoYXQgQ2xvdWRGcm9udCBjYW4gdXNlIHRvIHZhbGlkYXRlIHNpZ25lZCBVUkxzIG9yIHNpZ25lZCBjb29raWVzLlxuICogIFdoZW4gYSBjYWNoZSBiZWhhdmlvciBjb250YWlucyB0cnVzdGVkIGtleSBncm91cHMsIENsb3VkRnJvbnQgcmVxdWlyZXMgc2lnbmVkIFVSTHMgb3Igc2lnbmVkIGNvb2tpZXMgZm9yIGFsbCByZXF1ZXN0cyB0aGF0IG1hdGNoIHRoZSBjYWNoZSBiZWhhdmlvci4gVGhlIFVSTHMgb3IgY29va2llcyBtdXN0IGJlIHNpZ25lZCB3aXRoIGEgcHJpdmF0ZSBrZXkgd2hvc2UgY29ycmVzcG9uZGluZyBwdWJsaWMga2V5IGlzIGluIHRoZSBrZXkgZ3JvdXAuIFRoZSBzaWduZWQgVVJMIG9yIGNvb2tpZSBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCB3aGljaCBwdWJsaWMga2V5IENsb3VkRnJvbnQgc2hvdWxkIHVzZSB0byB2ZXJpZnkgdGhlIHNpZ25hdHVyZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbU2VydmluZyBwcml2YXRlIGNvbnRlbnRdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9Qcml2YXRlQ29udGVudC5odG1sKSBpbiB0aGUgKkFtYXpvbiBDbG91ZEZyb250IERldmVsb3BlciBHdWlkZSouXG4gKi9cblRydXN0ZWRLZXlHcm91cHM/OiBzdHJpbmdbXVxuLyoqXG4gKiBXZSByZWNvbW1lbmQgdXNpbmcgYGBUcnVzdGVkS2V5R3JvdXBzYGAgaW5zdGVhZCBvZiBgYFRydXN0ZWRTaWduZXJzYGAuXG4gKiAgICBUaGlzIGZpZWxkIG9ubHkgc3VwcG9ydHMgc3RhbmRhcmQgZGlzdHJpYnV0aW9ucy4gWW91IGNhbid0IHNwZWNpZnkgdGhpcyBmaWVsZCBmb3IgbXVsdGktdGVuYW50IGRpc3RyaWJ1dGlvbnMuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1Vuc3VwcG9ydGVkIGZlYXR1cmVzIGZvciBTYWFTIE1hbmFnZXIgZm9yIEFtYXpvbiBDbG91ZEZyb250XShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvZGlzdHJpYnV0aW9uLWNvbmZpZy1vcHRpb25zLmh0bWwjdW5zdXBwb3J0ZWQtc2FhcykgaW4gdGhlICpBbWF6b24gQ2xvdWRGcm9udCBEZXZlbG9wZXIgR3VpZGUqLlxuICogICBBIGxpc3Qgb2YgQVdTLWFjY291bnQgSURzIHdob3NlIHB1YmxpYyBrZXlzIENsb3VkRnJvbnQgY2FuIHVzZSB0byB2YWxpZGF0ZSBzaWduZWQgVVJMcyBvciBzaWduZWQgY29va2llcy5cbiAqICBXaGVuIGEgY2FjaGUgYmVoYXZpb3IgY29udGFpbnMgdHJ1c3RlZCBzaWduZXJzLCBDbG91ZEZyb250IHJlcXVpcmVzIHNpZ25lZCBVUkxzIG9yIHNpZ25lZCBjb29raWVzIGZvciBhbGwgcmVxdWVzdHMgdGhhdCBtYXRjaCB0aGUgY2FjaGUgYmVoYXZpb3IuIFRoZSBVUkxzIG9yIGNvb2tpZXMgbXVzdCBiZSBzaWduZWQgd2l0aCB0aGUgcHJpdmF0ZSBrZXkgb2YgYSBDbG91ZEZyb250IGtleSBwYWlyIGluIHRoZSB0cnVzdGVkIHNpZ25lcidzIEFXUy1hY2NvdW50LiBUaGUgc2lnbmVkIFVSTCBvciBjb29raWUgY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgd2hpY2ggcHVibGljIGtleSBDbG91ZEZyb250IHNob3VsZCB1c2UgdG8gdmVyaWZ5IHRoZSBzaWduYXR1cmUuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1NlcnZpbmcgcHJpdmF0ZSBjb250ZW50XShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvUHJpdmF0ZUNvbnRlbnQuaHRtbCkgaW4gdGhlICpBbWF6b24gQ2xvdWRGcm9udCBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5UcnVzdGVkU2lnbmVycz86IHN0cmluZ1tdXG4vKipcbiAqIFRoZSBwcm90b2NvbCB0aGF0IHZpZXdlcnMgY2FuIHVzZSB0byBhY2Nlc3MgdGhlIGZpbGVzIGluIHRoZSBvcmlnaW4gc3BlY2lmaWVkIGJ5IGBgVGFyZ2V0T3JpZ2luSWRgYCB3aGVuIGEgcmVxdWVzdCBtYXRjaGVzIHRoZSBwYXRoIHBhdHRlcm4gaW4gYGBQYXRoUGF0dGVybmBgLiBZb3UgY2FuIHNwZWNpZnkgdGhlIGZvbGxvd2luZyBvcHRpb25zOlxuICogICArICBgYGFsbG93LWFsbGBgOiBWaWV3ZXJzIGNhbiB1c2UgSFRUUCBvciBIVFRQUy5cbiAqICAgKyAgYGByZWRpcmVjdC10by1odHRwc2BgOiBJZiBhIHZpZXdlciBzdWJtaXRzIGFuIEhUVFAgcmVxdWVzdCwgQ2xvdWRGcm9udCByZXR1cm5zIGFuIEhUVFAgc3RhdHVzIGNvZGUgb2YgMzAxIChNb3ZlZCBQZXJtYW5lbnRseSkgdG8gdGhlIHZpZXdlciBhbG9uZyB3aXRoIHRoZSBIVFRQUyBVUkwuIFRoZSB2aWV3ZXIgdGhlbiByZXN1Ym1pdHMgdGhlIHJlcXVlc3QgdXNpbmcgdGhlIG5ldyBVUkwuXG4gKiAgICsgIGBgaHR0cHMtb25seWBgOiBJZiBhIHZpZXdlciBzZW5kcyBhbiBIVFRQIHJlcXVlc3QsIENsb3VkRnJvbnQgcmV0dXJucyBhbiBIVFRQIHN0YXR1cyBjb2RlIG9mIDQwMyAoRm9yYmlkZGVuKS5cbiAqICAgXG4gKiAgRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcmVxdWlyaW5nIHRoZSBIVFRQUyBwcm90b2NvbCwgc2VlIFtSZXF1aXJpbmcgSFRUUFMgQmV0d2VlbiBWaWV3ZXJzIGFuZCBDbG91ZEZyb250XShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvdXNpbmctaHR0cHMtdmlld2Vycy10by1jbG91ZGZyb250Lmh0bWwpIGluIHRoZSAqQW1hem9uIENsb3VkRnJvbnQgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqICAgVGhlIG9ubHkgd2F5IHRvIGd1YXJhbnRlZSB0aGF0IHZpZXdlcnMgcmV0cmlldmUgYW4gb2JqZWN0IHRoYXQgd2FzIGZldGNoZWQgZnJvbSB0aGUgb3JpZ2luIHVzaW5nIEhUVFBTIGlzIG5ldmVyIHRvIHVzZSBhbnkgb3RoZXIgcHJvdG9jb2wgdG8gZmV0Y2ggdGhlIG9iamVjdC4gSWYgeW91IGhhdmUgcmVjZW50bHkgY2hhbmdlZCBmcm9tIEhUVFAgdG8gSFRUUFMsIHdlIHJlY29tbWVuZCB0aGF0IHlvdSBjbGVhciB5b3VyIG9iamVjdHMnIGNhY2hlIGJlY2F1c2UgY2FjaGVkIG9iamVjdHMgYXJlIHByb3RvY29sIGFnbm9zdGljLiBUaGF0IG1lYW5zIHRoYXQgYW4gZWRnZSBsb2NhdGlvbiB3aWxsIHJldHVybiBhbiBvYmplY3QgZnJvbSB0aGUgY2FjaGUgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZSBjdXJyZW50IHJlcXVlc3QgcHJvdG9jb2wgbWF0Y2hlcyB0aGUgcHJvdG9jb2wgdXNlZCBwcmV2aW91c2x5LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtNYW5hZ2luZyBDYWNoZSBFeHBpcmF0aW9uXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvRXhwaXJhdGlvbi5odG1sKSBpbiB0aGUgKkFtYXpvbiBDbG91ZEZyb250IERldmVsb3BlciBHdWlkZSouXG4gKi9cblZpZXdlclByb3RvY29sUG9saWN5OiBzdHJpbmdcbn1cbi8qKlxuICogVGhpcyBmaWVsZCBpcyBkZXByZWNhdGVkLiBXZSByZWNvbW1lbmQgdGhhdCB5b3UgdXNlIGEgY2FjaGUgcG9saWN5IG9yIGFuIG9yaWdpbiByZXF1ZXN0IHBvbGljeSBpbnN0ZWFkIG9mIHRoaXMgZmllbGQuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1dvcmtpbmcgd2l0aCBwb2xpY2llc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL3dvcmtpbmctd2l0aC1wb2xpY2llcy5odG1sKSBpbiB0aGUgKkFtYXpvbiBDbG91ZEZyb250IERldmVsb3BlciBHdWlkZSouXG4gKiAgSWYgeW91IHdhbnQgdG8gaW5jbHVkZSB2YWx1ZXMgaW4gdGhlIGNhY2hlIGtleSwgdXNlIGEgY2FjaGUgcG9saWN5LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtDcmVhdGluZyBjYWNoZSBwb2xpY2llc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL2NvbnRyb2xsaW5nLXRoZS1jYWNoZS1rZXkuaHRtbCNjYWNoZS1rZXktY3JlYXRlLWNhY2hlLXBvbGljeSkgb3IgW1VzaW5nIHRoZSBtYW5hZ2VkIGNhY2hlIHBvbGljaWVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvdXNpbmctbWFuYWdlZC1jYWNoZS1wb2xpY2llcy5odG1sKSBpbiB0aGUgKkFtYXpvbiBDbG91ZEZyb250IERldmVsb3BlciBHdWlkZSouXG4gKiAgSWYgeW91IHdhbnQgdG8gc2VuZCB2YWx1ZXMgdG8gdGhlIG9yaWdpbiBidXQgbm90IGluY2x1ZGUgdGhlbSBpbiB0aGUgY2FjaGUga2V5LCB1c2UgYW4gb3JpZ2luIHJlcXVlc3QgcG9saWN5LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtDcmVhdGluZyBvcmlnaW4gcmVxdWVzdCBwb2xpY2llc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL2NvbnRyb2xsaW5nLW9yaWdpbi1yZXF1ZXN0cy5odG1sI29yaWdpbi1yZXF1ZXN0LWNyZWF0ZS1vcmlnaW4tcmVxdWVzdC1wb2xpY3kpIG9yIFtVc2luZyB0aGUgbWFuYWdlZCBvcmlnaW4gcmVxdWVzdCBwb2xpY2llc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL3VzaW5nLW1hbmFnZWQtb3JpZ2luLXJlcXVlc3QtcG9saWNpZXMuaHRtbCkgaW4gdGhlICpBbWF6b24gQ2xvdWRGcm9udCBEZXZlbG9wZXIgR3VpZGUqLlxuICogIEEgYGBDYWNoZUJlaGF2aW9yYGAgbXVzdCBpbmNsdWRlIGVpdGhlciBhIGBgQ2FjaGVQb2xpY3lJZGBgIG9yIGBgRm9yd2FyZGVkVmFsdWVzYGAuIFdlIHJlY29tbWVuZCB0aGF0IHlvdSB1c2UgYSBgYENhY2hlUG9saWN5SWRgYC5cbiAqICBBIGNvbXBsZXggdHlwZSB0aGF0IHNwZWNpZmllcyBob3cgQ2xvdWRGcm9udCBoYW5kbGVzIHF1ZXJ5IHN0cmluZ3MsIGNvb2tpZXMsIGFuZCBIVFRQIGhlYWRlcnMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRm9yd2FyZGVkVmFsdWVzIHtcbkNvb2tpZXM/OiBDb29raWVzXG4vKipcbiAqIFRoaXMgZmllbGQgaXMgZGVwcmVjYXRlZC4gV2UgcmVjb21tZW5kIHRoYXQgeW91IHVzZSBhIGNhY2hlIHBvbGljeSBvciBhbiBvcmlnaW4gcmVxdWVzdCBwb2xpY3kgaW5zdGVhZCBvZiB0aGlzIGZpZWxkLlxuICogIElmIHlvdSB3YW50IHRvIGluY2x1ZGUgaGVhZGVycyBpbiB0aGUgY2FjaGUga2V5LCB1c2UgYSBjYWNoZSBwb2xpY3kuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0NyZWF0aW5nIGNhY2hlIHBvbGljaWVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvY29udHJvbGxpbmctdGhlLWNhY2hlLWtleS5odG1sI2NhY2hlLWtleS1jcmVhdGUtY2FjaGUtcG9saWN5KSBpbiB0aGUgKkFtYXpvbiBDbG91ZEZyb250IERldmVsb3BlciBHdWlkZSouXG4gKiAgSWYgeW91IHdhbnQgdG8gc2VuZCBoZWFkZXJzIHRvIHRoZSBvcmlnaW4gYnV0IG5vdCBpbmNsdWRlIHRoZW0gaW4gdGhlIGNhY2hlIGtleSwgdXNlIGFuIG9yaWdpbiByZXF1ZXN0IHBvbGljeS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbQ3JlYXRpbmcgb3JpZ2luIHJlcXVlc3QgcG9saWNpZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9jb250cm9sbGluZy1vcmlnaW4tcmVxdWVzdHMuaHRtbCNvcmlnaW4tcmVxdWVzdC1jcmVhdGUtb3JpZ2luLXJlcXVlc3QtcG9saWN5KSBpbiB0aGUgKkFtYXpvbiBDbG91ZEZyb250IERldmVsb3BlciBHdWlkZSouXG4gKiAgQSBjb21wbGV4IHR5cGUgdGhhdCBzcGVjaWZpZXMgdGhlIGBgSGVhZGVyc2BgLCBpZiBhbnksIHRoYXQgeW91IHdhbnQgQ2xvdWRGcm9udCB0byBmb3J3YXJkIHRvIHRoZSBvcmlnaW4gZm9yIHRoaXMgY2FjaGUgYmVoYXZpb3IgKHdoaXRlbGlzdGVkIGhlYWRlcnMpLiBGb3IgdGhlIGhlYWRlcnMgdGhhdCB5b3Ugc3BlY2lmeSwgQ2xvdWRGcm9udCBhbHNvIGNhY2hlcyBzZXBhcmF0ZSB2ZXJzaW9ucyBvZiBhIHNwZWNpZmllZCBvYmplY3QgdGhhdCBpcyBiYXNlZCBvbiB0aGUgaGVhZGVyIHZhbHVlcyBpbiB2aWV3ZXIgcmVxdWVzdHMuXG4gKiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbQ2FjaGluZyBDb250ZW50IEJhc2VkIG9uIFJlcXVlc3QgSGVhZGVyc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL2hlYWRlci1jYWNoaW5nLmh0bWwpIGluIHRoZSAqQW1hem9uIENsb3VkRnJvbnQgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuSGVhZGVycz86IHN0cmluZ1tdXG4vKipcbiAqIFRoaXMgZmllbGQgaXMgZGVwcmVjYXRlZC4gV2UgcmVjb21tZW5kIHRoYXQgeW91IHVzZSBhIGNhY2hlIHBvbGljeSBvciBhbiBvcmlnaW4gcmVxdWVzdCBwb2xpY3kgaW5zdGVhZCBvZiB0aGlzIGZpZWxkLlxuICogIElmIHlvdSB3YW50IHRvIGluY2x1ZGUgcXVlcnkgc3RyaW5ncyBpbiB0aGUgY2FjaGUga2V5LCB1c2UgYSBjYWNoZSBwb2xpY3kuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0NyZWF0aW5nIGNhY2hlIHBvbGljaWVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvY29udHJvbGxpbmctdGhlLWNhY2hlLWtleS5odG1sI2NhY2hlLWtleS1jcmVhdGUtY2FjaGUtcG9saWN5KSBpbiB0aGUgKkFtYXpvbiBDbG91ZEZyb250IERldmVsb3BlciBHdWlkZSouXG4gKiAgSWYgeW91IHdhbnQgdG8gc2VuZCBxdWVyeSBzdHJpbmdzIHRvIHRoZSBvcmlnaW4gYnV0IG5vdCBpbmNsdWRlIHRoZW0gaW4gdGhlIGNhY2hlIGtleSwgdXNlIGFuIG9yaWdpbiByZXF1ZXN0IHBvbGljeS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbQ3JlYXRpbmcgb3JpZ2luIHJlcXVlc3QgcG9saWNpZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9jb250cm9sbGluZy1vcmlnaW4tcmVxdWVzdHMuaHRtbCNvcmlnaW4tcmVxdWVzdC1jcmVhdGUtb3JpZ2luLXJlcXVlc3QtcG9saWN5KSBpbiB0aGUgKkFtYXpvbiBDbG91ZEZyb250IERldmVsb3BlciBHdWlkZSouXG4gKiAgSW5kaWNhdGVzIHdoZXRoZXIgeW91IHdhbnQgQ2xvdWRGcm9udCB0byBmb3J3YXJkIHF1ZXJ5IHN0cmluZ3MgdG8gdGhlIG9yaWdpbiB0aGF0IGlzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGNhY2hlIGJlaGF2aW9yIGFuZCBjYWNoZSBiYXNlZCBvbiB0aGUgcXVlcnkgc3RyaW5nIHBhcmFtZXRlcnMuIENsb3VkRnJvbnQgYmVoYXZpb3IgZGVwZW5kcyBvbiB0aGUgdmFsdWUgb2YgYGBRdWVyeVN0cmluZ2BgIGFuZCBvbiB0aGUgdmFsdWVzIHRoYXQgeW91IHNwZWNpZnkgZm9yIGBgUXVlcnlTdHJpbmdDYWNoZUtleXNgYCwgaWYgYW55OlxuICogIElmIHlvdSBzcGVjaWZ5IHRydWUgZm9yIGBgUXVlcnlTdHJpbmdgYCBhbmQgeW91IGRvbid0IHNwZWNpZnkgYW55IHZhbHVlcyBmb3IgYGBRdWVyeVN0cmluZ0NhY2hlS2V5c2BgLCBDbG91ZEZyb250IGZvcndhcmRzIGFsbCBxdWVyeSBzdHJpbmcgcGFyYW1ldGVycyB0byB0aGUgb3JpZ2luIGFuZCBjYWNoZXMgYmFzZWQgb24gYWxsIHF1ZXJ5IHN0cmluZyBwYXJhbWV0ZXJzLiBEZXBlbmRpbmcgb24gaG93IG1hbnkgcXVlcnkgc3RyaW5nIHBhcmFtZXRlcnMgYW5kIHZhbHVlcyB5b3UgaGF2ZSwgdGhpcyBjYW4gYWR2ZXJzZWx5IGFmZmVjdCBwZXJmb3JtYW5jZSBiZWNhdXNlIENsb3VkRnJvbnQgbXVzdCBmb3J3YXJkIG1vcmUgcmVxdWVzdHMgdG8gdGhlIG9yaWdpbi5cbiAqICBJZiB5b3Ugc3BlY2lmeSB0cnVlIGZvciBgYFF1ZXJ5U3RyaW5nYGAgYW5kIHlvdSBzcGVjaWZ5IG9uZSBvciBtb3JlIHZhbHVlcyBmb3IgYGBRdWVyeVN0cmluZ0NhY2hlS2V5c2BgLCBDbG91ZEZyb250IGZvcndhcmRzIGFsbCBxdWVyeSBzdHJpbmcgcGFyYW1ldGVycyB0byB0aGUgb3JpZ2luLCBidXQgaXQgb25seSBjYWNoZXMgYmFzZWQgb24gdGhlIHF1ZXJ5IHN0cmluZyBwYXJhbWV0ZXJzIHRoYXQgeW91IHNwZWNpZnkuXG4gKiAgSWYgeW91IHNwZWNpZnkgZmFsc2UgZm9yIGBgUXVlcnlTdHJpbmdgYCwgQ2xvdWRGcm9udCBkb2Vzbid0IGZvcndhcmQgYW55IHF1ZXJ5IHN0cmluZyBwYXJhbWV0ZXJzIHRvIHRoZSBvcmlnaW4sIGFuZCBkb2Vzbid0IGNhY2hlIGJhc2VkIG9uIHF1ZXJ5IHN0cmluZyBwYXJhbWV0ZXJzLlxuICogIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0NvbmZpZ3VyaW5nIENsb3VkRnJvbnQgdG8gQ2FjaGUgQmFzZWQgb24gUXVlcnkgU3RyaW5nIFBhcmFtZXRlcnNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9RdWVyeVN0cmluZ1BhcmFtZXRlcnMuaHRtbCkgaW4gdGhlICpBbWF6b24gQ2xvdWRGcm9udCBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5RdWVyeVN0cmluZzogYm9vbGVhblxuLyoqXG4gKiBUaGlzIGZpZWxkIGlzIGRlcHJlY2F0ZWQuIFdlIHJlY29tbWVuZCB0aGF0IHlvdSB1c2UgYSBjYWNoZSBwb2xpY3kgb3IgYW4gb3JpZ2luIHJlcXVlc3QgcG9saWN5IGluc3RlYWQgb2YgdGhpcyBmaWVsZC5cbiAqICBJZiB5b3Ugd2FudCB0byBpbmNsdWRlIHF1ZXJ5IHN0cmluZ3MgaW4gdGhlIGNhY2hlIGtleSwgdXNlIGEgY2FjaGUgcG9saWN5LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtDcmVhdGluZyBjYWNoZSBwb2xpY2llc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL2NvbnRyb2xsaW5nLXRoZS1jYWNoZS1rZXkuaHRtbCNjYWNoZS1rZXktY3JlYXRlLWNhY2hlLXBvbGljeSkgaW4gdGhlICpBbWF6b24gQ2xvdWRGcm9udCBEZXZlbG9wZXIgR3VpZGUqLlxuICogIElmIHlvdSB3YW50IHRvIHNlbmQgcXVlcnkgc3RyaW5ncyB0byB0aGUgb3JpZ2luIGJ1dCBub3QgaW5jbHVkZSB0aGVtIGluIHRoZSBjYWNoZSBrZXksIHVzZSBhbiBvcmlnaW4gcmVxdWVzdCBwb2xpY3kuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0NyZWF0aW5nIG9yaWdpbiByZXF1ZXN0IHBvbGljaWVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvY29udHJvbGxpbmctb3JpZ2luLXJlcXVlc3RzLmh0bWwjb3JpZ2luLXJlcXVlc3QtY3JlYXRlLW9yaWdpbi1yZXF1ZXN0LXBvbGljeSkgaW4gdGhlICpBbWF6b24gQ2xvdWRGcm9udCBEZXZlbG9wZXIgR3VpZGUqLlxuICogIEEgY29tcGxleCB0eXBlIHRoYXQgY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHF1ZXJ5IHN0cmluZyBwYXJhbWV0ZXJzIHRoYXQgeW91IHdhbnQgQ2xvdWRGcm9udCB0byB1c2UgZm9yIGNhY2hpbmcgZm9yIHRoaXMgY2FjaGUgYmVoYXZpb3IuXG4gKi9cblF1ZXJ5U3RyaW5nQ2FjaGVLZXlzPzogc3RyaW5nW11cbn1cbi8qKlxuICogVGhpcyBmaWVsZCBpcyBkZXByZWNhdGVkLiBXZSByZWNvbW1lbmQgdGhhdCB5b3UgdXNlIGEgY2FjaGUgcG9saWN5IG9yIGFuIG9yaWdpbiByZXF1ZXN0IHBvbGljeSBpbnN0ZWFkIG9mIHRoaXMgZmllbGQuXG4gKiAgSWYgeW91IHdhbnQgdG8gaW5jbHVkZSBjb29raWVzIGluIHRoZSBjYWNoZSBrZXksIHVzZSBhIGNhY2hlIHBvbGljeS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbQ3JlYXRpbmcgY2FjaGUgcG9saWNpZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9jb250cm9sbGluZy10aGUtY2FjaGUta2V5Lmh0bWwjY2FjaGUta2V5LWNyZWF0ZS1jYWNoZS1wb2xpY3kpIGluIHRoZSAqQW1hem9uIENsb3VkRnJvbnQgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqICBJZiB5b3Ugd2FudCB0byBzZW5kIGNvb2tpZXMgdG8gdGhlIG9yaWdpbiBidXQgbm90IGluY2x1ZGUgdGhlbSBpbiB0aGUgY2FjaGUga2V5LCB1c2UgYW4gb3JpZ2luIHJlcXVlc3QgcG9saWN5LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtDcmVhdGluZyBvcmlnaW4gcmVxdWVzdCBwb2xpY2llc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL2NvbnRyb2xsaW5nLW9yaWdpbi1yZXF1ZXN0cy5odG1sI29yaWdpbi1yZXF1ZXN0LWNyZWF0ZS1vcmlnaW4tcmVxdWVzdC1wb2xpY3kpIGluIHRoZSAqQW1hem9uIENsb3VkRnJvbnQgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqICBBIGNvbXBsZXggdHlwZSB0aGF0IHNwZWNpZmllcyB3aGV0aGVyIHlvdSB3YW50IENsb3VkRnJvbnQgdG8gZm9yd2FyZCBjb29raWVzIHRvIHRoZSBvcmlnaW4gYW5kLCBpZiBzbywgd2hpY2ggb25lcy4gRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgZm9yd2FyZGluZyBjb29raWVzIHRvIHRoZSBvcmlnaW4sIHNlZSBbSG93IENsb3VkRnJvbnQgRm9yd2FyZHMsIENhY2hlcywgYW5kIExvZ3MgQ29va2llc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL0Nvb2tpZXMuaHRtbCkgaW4gdGhlICpBbWF6b24gQ2xvdWRGcm9udCBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvb2tpZXMge1xuLyoqXG4gKiBUaGlzIGZpZWxkIGlzIGRlcHJlY2F0ZWQuIFdlIHJlY29tbWVuZCB0aGF0IHlvdSB1c2UgYSBjYWNoZSBwb2xpY3kgb3IgYW4gb3JpZ2luIHJlcXVlc3QgcG9saWN5IGluc3RlYWQgb2YgdGhpcyBmaWVsZC5cbiAqICBJZiB5b3Ugd2FudCB0byBpbmNsdWRlIGNvb2tpZXMgaW4gdGhlIGNhY2hlIGtleSwgdXNlIGEgY2FjaGUgcG9saWN5LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtDcmVhdGluZyBjYWNoZSBwb2xpY2llc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL2NvbnRyb2xsaW5nLXRoZS1jYWNoZS1rZXkuaHRtbCNjYWNoZS1rZXktY3JlYXRlLWNhY2hlLXBvbGljeSkgaW4gdGhlICpBbWF6b24gQ2xvdWRGcm9udCBEZXZlbG9wZXIgR3VpZGUqLlxuICogIElmIHlvdSB3YW50IHRvIHNlbmQgY29va2llcyB0byB0aGUgb3JpZ2luIGJ1dCBub3QgaW5jbHVkZSB0aGVtIGluIHRoZSBjYWNoZSBrZXksIHVzZSBvcmlnaW4gcmVxdWVzdCBwb2xpY3kuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0NyZWF0aW5nIG9yaWdpbiByZXF1ZXN0IHBvbGljaWVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvY29udHJvbGxpbmctb3JpZ2luLXJlcXVlc3RzLmh0bWwjb3JpZ2luLXJlcXVlc3QtY3JlYXRlLW9yaWdpbi1yZXF1ZXN0LXBvbGljeSkgaW4gdGhlICpBbWF6b24gQ2xvdWRGcm9udCBEZXZlbG9wZXIgR3VpZGUqLlxuICogIFNwZWNpZmllcyB3aGljaCBjb29raWVzIHRvIGZvcndhcmQgdG8gdGhlIG9yaWdpbiBmb3IgdGhpcyBjYWNoZSBiZWhhdmlvcjogYWxsLCBub25lLCBvciB0aGUgbGlzdCBvZiBjb29raWVzIHNwZWNpZmllZCBpbiB0aGUgYGBXaGl0ZWxpc3RlZE5hbWVzYGAgY29tcGxleCB0eXBlLlxuICogIEFtYXpvbiBTMyBkb2Vzbid0IHByb2Nlc3MgY29va2llcy4gV2hlbiB0aGUgY2FjaGUgYmVoYXZpb3IgaXMgZm9yd2FyZGluZyByZXF1ZXN0cyB0byBhbiBBbWF6b24gUzMgb3JpZ2luLCBzcGVjaWZ5IG5vbmUgZm9yIHRoZSBgYEZvcndhcmRgYCBlbGVtZW50LlxuICovXG5Gb3J3YXJkOiBzdHJpbmdcbi8qKlxuICogVGhpcyBmaWVsZCBpcyBkZXByZWNhdGVkLiBXZSByZWNvbW1lbmQgdGhhdCB5b3UgdXNlIGEgY2FjaGUgcG9saWN5IG9yIGFuIG9yaWdpbiByZXF1ZXN0IHBvbGljeSBpbnN0ZWFkIG9mIHRoaXMgZmllbGQuXG4gKiAgSWYgeW91IHdhbnQgdG8gaW5jbHVkZSBjb29raWVzIGluIHRoZSBjYWNoZSBrZXksIHVzZSBhIGNhY2hlIHBvbGljeS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbQ3JlYXRpbmcgY2FjaGUgcG9saWNpZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9jb250cm9sbGluZy10aGUtY2FjaGUta2V5Lmh0bWwjY2FjaGUta2V5LWNyZWF0ZS1jYWNoZS1wb2xpY3kpIGluIHRoZSAqQW1hem9uIENsb3VkRnJvbnQgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqICBJZiB5b3Ugd2FudCB0byBzZW5kIGNvb2tpZXMgdG8gdGhlIG9yaWdpbiBidXQgbm90IGluY2x1ZGUgdGhlbSBpbiB0aGUgY2FjaGUga2V5LCB1c2UgYW4gb3JpZ2luIHJlcXVlc3QgcG9saWN5LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtDcmVhdGluZyBvcmlnaW4gcmVxdWVzdCBwb2xpY2llc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL2NvbnRyb2xsaW5nLW9yaWdpbi1yZXF1ZXN0cy5odG1sI29yaWdpbi1yZXF1ZXN0LWNyZWF0ZS1vcmlnaW4tcmVxdWVzdC1wb2xpY3kpIGluIHRoZSAqQW1hem9uIENsb3VkRnJvbnQgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqICBSZXF1aXJlZCBpZiB5b3Ugc3BlY2lmeSBgYHdoaXRlbGlzdGBgIGZvciB0aGUgdmFsdWUgb2YgYGBGb3J3YXJkYGAuIEEgY29tcGxleCB0eXBlIHRoYXQgc3BlY2lmaWVzIGhvdyBtYW55IGRpZmZlcmVudCBjb29raWVzIHlvdSB3YW50IENsb3VkRnJvbnQgdG8gZm9yd2FyZCB0byB0aGUgb3JpZ2luIGZvciB0aGlzIGNhY2hlIGJlaGF2aW9yIGFuZCwgaWYgeW91IHdhbnQgdG8gZm9yd2FyZCBzZWxlY3RlZCBjb29raWVzLCB0aGUgbmFtZXMgb2YgdGhvc2UgY29va2llcy5cbiAqICBJZiB5b3Ugc3BlY2lmeSBgYGFsbGBgIG9yIGBgbm9uZWBgIGZvciB0aGUgdmFsdWUgb2YgYGBGb3J3YXJkYGAsIG9taXQgYGBXaGl0ZWxpc3RlZE5hbWVzYGAuIElmIHlvdSBjaGFuZ2UgdGhlIHZhbHVlIG9mIGBgRm9yd2FyZGBgIGZyb20gYGB3aGl0ZWxpc3RgYCB0byBgYGFsbGBgIG9yIGBgbm9uZWBgIGFuZCB5b3UgZG9uJ3QgZGVsZXRlIHRoZSBgYFdoaXRlbGlzdGVkTmFtZXNgYCBlbGVtZW50IGFuZCBpdHMgY2hpbGQgZWxlbWVudHMsIENsb3VkRnJvbnQgZGVsZXRlcyB0aGVtIGF1dG9tYXRpY2FsbHkuXG4gKiAgRm9yIHRoZSBjdXJyZW50IGxpbWl0IG9uIHRoZSBudW1iZXIgb2YgY29va2llIG5hbWVzIHRoYXQgeW91IGNhbiB3aGl0ZWxpc3QgZm9yIGVhY2ggY2FjaGUgYmVoYXZpb3IsIHNlZSBbQ2xvdWRGcm9udCBMaW1pdHNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9nZW5lcmFsL2xhdGVzdC9nci94cmVmYXdzX3NlcnZpY2VfbGltaXRzLmh0bWwjbGltaXRzX2Nsb3VkZnJvbnQpIGluIHRoZSAqR2VuZXJhbCBSZWZlcmVuY2UqLlxuICovXG5XaGl0ZWxpc3RlZE5hbWVzPzogc3RyaW5nW11cbn1cbi8qKlxuICogQSBDbG91ZEZyb250IGZ1bmN0aW9uIHRoYXQgaXMgYXNzb2NpYXRlZCB3aXRoIGEgY2FjaGUgYmVoYXZpb3IgaW4gYSBDbG91ZEZyb250IGRpc3RyaWJ1dGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGdW5jdGlvbkFzc29jaWF0aW9uIHtcbi8qKlxuICogVGhlIGV2ZW50IHR5cGUgb2YgdGhlIGZ1bmN0aW9uLCBlaXRoZXIgYGB2aWV3ZXItcmVxdWVzdGBgIG9yIGBgdmlld2VyLXJlc3BvbnNlYGAuIFlvdSBjYW5ub3QgdXNlIG9yaWdpbi1mYWNpbmcgZXZlbnQgdHlwZXMgKGBgb3JpZ2luLXJlcXVlc3RgYCBhbmQgYGBvcmlnaW4tcmVzcG9uc2VgYCkgd2l0aCBhIENsb3VkRnJvbnQgZnVuY3Rpb24uXG4gKi9cbkV2ZW50VHlwZT86IHN0cmluZ1xuLyoqXG4gKiBUaGUgQW1hem9uIFJlc291cmNlIE5hbWUgKEFSTikgb2YgdGhlIGZ1bmN0aW9uLlxuICovXG5GdW5jdGlvbkFSTj86IHN0cmluZ1xufVxuLyoqXG4gKiBUaGUgZ1JQQyBjb25maWd1cmF0aW9uIGZvciB5b3VyIGNhY2hlIGJlaGF2aW9yLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdycGNDb25maWcge1xuLyoqXG4gKiBFbmFibGVzIHlvdXIgQ2xvdWRGcm9udCBkaXN0cmlidXRpb24gdG8gcmVjZWl2ZSBnUlBDIHJlcXVlc3RzIGFuZCB0byBwcm94eSB0aGVtIGRpcmVjdGx5IHRvIHlvdXIgb3JpZ2lucy5cbiAqL1xuRW5hYmxlZDogYm9vbGVhblxufVxuLyoqXG4gKiBBIGNvbXBsZXggdHlwZSB0aGF0IGNvbnRhaW5zIGEgTGFtYmRhQEVkZ2UgZnVuY3Rpb24gYXNzb2NpYXRpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGFtYmRhRnVuY3Rpb25Bc3NvY2lhdGlvbiB7XG4vKipcbiAqIFNwZWNpZmllcyB0aGUgZXZlbnQgdHlwZSB0aGF0IHRyaWdnZXJzIGEgTGFtYmRhQEVkZ2UgZnVuY3Rpb24gaW52b2NhdGlvbi4gWW91IGNhbiBzcGVjaWZ5IHRoZSBmb2xsb3dpbmcgdmFsdWVzOlxuICogICArICBgYHZpZXdlci1yZXF1ZXN0YGA6IFRoZSBmdW5jdGlvbiBleGVjdXRlcyB3aGVuIENsb3VkRnJvbnQgcmVjZWl2ZXMgYSByZXF1ZXN0IGZyb20gYSB2aWV3ZXIgYW5kIGJlZm9yZSBpdCBjaGVja3MgdG8gc2VlIHdoZXRoZXIgdGhlIHJlcXVlc3RlZCBvYmplY3QgaXMgaW4gdGhlIGVkZ2UgY2FjaGUuXG4gKiAgICsgIGBgb3JpZ2luLXJlcXVlc3RgYDogVGhlIGZ1bmN0aW9uIGV4ZWN1dGVzIG9ubHkgd2hlbiBDbG91ZEZyb250IHNlbmRzIGEgcmVxdWVzdCB0byB5b3VyIG9yaWdpbi4gV2hlbiB0aGUgcmVxdWVzdGVkIG9iamVjdCBpcyBpbiB0aGUgZWRnZSBjYWNoZSwgdGhlIGZ1bmN0aW9uIGRvZXNuJ3QgZXhlY3V0ZS5cbiAqICAgKyAgYGBvcmlnaW4tcmVzcG9uc2VgYDogVGhlIGZ1bmN0aW9uIGV4ZWN1dGVzIGFmdGVyIENsb3VkRnJvbnQgcmVjZWl2ZXMgYSByZXNwb25zZSBmcm9tIHRoZSBvcmlnaW4gYW5kIGJlZm9yZSBpdCBjYWNoZXMgdGhlIG9iamVjdCBpbiB0aGUgcmVzcG9uc2UuIFdoZW4gdGhlIHJlcXVlc3RlZCBvYmplY3QgaXMgaW4gdGhlIGVkZ2UgY2FjaGUsIHRoZSBmdW5jdGlvbiBkb2Vzbid0IGV4ZWN1dGUuXG4gKiAgICsgIGBgdmlld2VyLXJlc3BvbnNlYGA6IFRoZSBmdW5jdGlvbiBleGVjdXRlcyBiZWZvcmUgQ2xvdWRGcm9udCByZXR1cm5zIHRoZSByZXF1ZXN0ZWQgb2JqZWN0IHRvIHRoZSB2aWV3ZXIuIFRoZSBmdW5jdGlvbiBleGVjdXRlcyByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhlIG9iamVjdCB3YXMgYWxyZWFkeSBpbiB0aGUgZWRnZSBjYWNoZS5cbiAqICBJZiB0aGUgb3JpZ2luIHJldHVybnMgYW4gSFRUUCBzdGF0dXMgY29kZSBvdGhlciB0aGFuIEhUVFAgMjAwIChPSyksIHRoZSBmdW5jdGlvbiBkb2Vzbid0IGV4ZWN1dGUuXG4gKi9cbkV2ZW50VHlwZT86IHN0cmluZ1xuLyoqXG4gKiBBIGZsYWcgdGhhdCBhbGxvd3MgYSBMYW1iZGFARWRnZSBmdW5jdGlvbiB0byBoYXZlIHJlYWQgYWNjZXNzIHRvIHRoZSBib2R5IGNvbnRlbnQuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0FjY2Vzc2luZyB0aGUgUmVxdWVzdCBCb2R5IGJ5IENob29zaW5nIHRoZSBJbmNsdWRlIEJvZHkgT3B0aW9uXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvbGFtYmRhLWluY2x1ZGUtYm9keS1hY2Nlc3MuaHRtbCkgaW4gdGhlIEFtYXpvbiBDbG91ZEZyb250IERldmVsb3BlciBHdWlkZS5cbiAqL1xuSW5jbHVkZUJvZHk/OiBib29sZWFuXG4vKipcbiAqIFRoZSBBUk4gb2YgdGhlIExhbWJkYUBFZGdlIGZ1bmN0aW9uLiBZb3UgbXVzdCBzcGVjaWZ5IHRoZSBBUk4gb2YgYSBmdW5jdGlvbiB2ZXJzaW9uOyB5b3UgY2FuJ3Qgc3BlY2lmeSBhbiBhbGlhcyBvciAkTEFURVNULlxuICovXG5MYW1iZGFGdW5jdGlvbkFSTj86IHN0cmluZ1xufVxuZXhwb3J0IGludGVyZmFjZSBDb25uZWN0aW9uRnVuY3Rpb25Bc3NvY2lhdGlvbiB7XG5JZDogc3RyaW5nXG59XG4vKipcbiAqIEEgY29tcGxleCB0eXBlIHRoYXQgY29udHJvbHM6XG4gKiAgICsgIFdoZXRoZXIgQ2xvdWRGcm9udCByZXBsYWNlcyBIVFRQIHN0YXR1cyBjb2RlcyBpbiB0aGUgNHh4IGFuZCA1eHggcmFuZ2Ugd2l0aCBjdXN0b20gZXJyb3IgbWVzc2FnZXMgYmVmb3JlIHJldHVybmluZyB0aGUgcmVzcG9uc2UgdG8gdGhlIHZpZXdlci5cbiAqICAgKyAgSG93IGxvbmcgQ2xvdWRGcm9udCBjYWNoZXMgSFRUUCBzdGF0dXMgY29kZXMgaW4gdGhlIDR4eCBhbmQgNXh4IHJhbmdlLlxuICogICBcbiAqICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBjdXN0b20gZXJyb3IgcGFnZXMsIHNlZSBbQ3VzdG9taXppbmcgRXJyb3IgUmVzcG9uc2VzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvY3VzdG9tLWVycm9yLXBhZ2VzLmh0bWwpIGluIHRoZSAqQW1hem9uIENsb3VkRnJvbnQgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDdXN0b21FcnJvclJlc3BvbnNlIHtcbi8qKlxuICogVGhlIG1pbmltdW0gYW1vdW50IG9mIHRpbWUsIGluIHNlY29uZHMsIHRoYXQgeW91IHdhbnQgQ2xvdWRGcm9udCB0byBjYWNoZSB0aGUgSFRUUCBzdGF0dXMgY29kZSBzcGVjaWZpZWQgaW4gYGBFcnJvckNvZGVgYC4gV2hlbiB0aGlzIHRpbWUgcGVyaW9kIGhhcyBlbGFwc2VkLCBDbG91ZEZyb250IHF1ZXJpZXMgeW91ciBvcmlnaW4gdG8gc2VlIHdoZXRoZXIgdGhlIHByb2JsZW0gdGhhdCBjYXVzZWQgdGhlIGVycm9yIGhhcyBiZWVuIHJlc29sdmVkIGFuZCB0aGUgcmVxdWVzdGVkIG9iamVjdCBpcyBub3cgYXZhaWxhYmxlLlxuICogIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0N1c3RvbWl6aW5nIEVycm9yIFJlc3BvbnNlc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL2N1c3RvbS1lcnJvci1wYWdlcy5odG1sKSBpbiB0aGUgKkFtYXpvbiBDbG91ZEZyb250IERldmVsb3BlciBHdWlkZSouXG4gKi9cbkVycm9yQ2FjaGluZ01pblRUTD86IG51bWJlclxuLyoqXG4gKiBUaGUgSFRUUCBzdGF0dXMgY29kZSBmb3Igd2hpY2ggeW91IHdhbnQgdG8gc3BlY2lmeSBhIGN1c3RvbSBlcnJvciBwYWdlIGFuZC9vciBhIGNhY2hpbmcgZHVyYXRpb24uXG4gKi9cbkVycm9yQ29kZTogbnVtYmVyXG4vKipcbiAqIFRoZSBIVFRQIHN0YXR1cyBjb2RlIHRoYXQgeW91IHdhbnQgQ2xvdWRGcm9udCB0byByZXR1cm4gdG8gdGhlIHZpZXdlciBhbG9uZyB3aXRoIHRoZSBjdXN0b20gZXJyb3IgcGFnZS4gVGhlcmUgYXJlIGEgdmFyaWV0eSBvZiByZWFzb25zIHRoYXQgeW91IG1pZ2h0IHdhbnQgQ2xvdWRGcm9udCB0byByZXR1cm4gYSBzdGF0dXMgY29kZSBkaWZmZXJlbnQgZnJvbSB0aGUgc3RhdHVzIGNvZGUgdGhhdCB5b3VyIG9yaWdpbiByZXR1cm5lZCB0byBDbG91ZEZyb250LCBmb3IgZXhhbXBsZTpcbiAqICAgKyAgU29tZSBJbnRlcm5ldCBkZXZpY2VzIChzb21lIGZpcmV3YWxscyBhbmQgY29ycG9yYXRlIHByb3hpZXMsIGZvciBleGFtcGxlKSBpbnRlcmNlcHQgSFRUUCA0eHggYW5kIDV4eCBhbmQgcHJldmVudCB0aGUgcmVzcG9uc2UgZnJvbSBiZWluZyByZXR1cm5lZCB0byB0aGUgdmlld2VyLiBJZiB5b3Ugc3Vic3RpdHV0ZSBgYDIwMGBgLCB0aGUgcmVzcG9uc2UgdHlwaWNhbGx5IHdvbid0IGJlIGludGVyY2VwdGVkLlxuICogICArICBJZiB5b3UgZG9uJ3QgY2FyZSBhYm91dCBkaXN0aW5ndWlzaGluZyBhbW9uZyBkaWZmZXJlbnQgY2xpZW50IGVycm9ycyBvciBzZXJ2ZXIgZXJyb3JzLCB5b3UgY2FuIHNwZWNpZnkgYGA0MDBgYCBvciBgYDUwMGBgIGFzIHRoZSBgYFJlc3BvbnNlQ29kZWBgIGZvciBhbGwgNHh4IG9yIDV4eCBlcnJvcnMuXG4gKiAgICsgIFlvdSBtaWdodCB3YW50IHRvIHJldHVybiBhIGBgMjAwYGAgc3RhdHVzIGNvZGUgKE9LKSBhbmQgc3RhdGljIHdlYnNpdGUgc28geW91ciBjdXN0b21lcnMgZG9uJ3Qga25vdyB0aGF0IHlvdXIgd2Vic2l0ZSBpcyBkb3duLlxuICogICBcbiAqICBJZiB5b3Ugc3BlY2lmeSBhIHZhbHVlIGZvciBgYFJlc3BvbnNlQ29kZWBgLCB5b3UgbXVzdCBhbHNvIHNwZWNpZnkgYSB2YWx1ZSBmb3IgYGBSZXNwb25zZVBhZ2VQYXRoYGAuXG4gKi9cblJlc3BvbnNlQ29kZT86IG51bWJlclxuLyoqXG4gKiBUaGUgcGF0aCB0byB0aGUgY3VzdG9tIGVycm9yIHBhZ2UgdGhhdCB5b3Ugd2FudCBDbG91ZEZyb250IHRvIHJldHVybiB0byBhIHZpZXdlciB3aGVuIHlvdXIgb3JpZ2luIHJldHVybnMgdGhlIEhUVFAgc3RhdHVzIGNvZGUgc3BlY2lmaWVkIGJ5IGBgRXJyb3JDb2RlYGAsIGZvciBleGFtcGxlLCBgYC80eHgtZXJyb3JzLzQwMy1mb3JiaWRkZW4uaHRtbGBgLiBJZiB5b3Ugd2FudCB0byBzdG9yZSB5b3VyIG9iamVjdHMgYW5kIHlvdXIgY3VzdG9tIGVycm9yIHBhZ2VzIGluIGRpZmZlcmVudCBsb2NhdGlvbnMsIHlvdXIgZGlzdHJpYnV0aW9uIG11c3QgaW5jbHVkZSBhIGNhY2hlIGJlaGF2aW9yIGZvciB3aGljaCB0aGUgZm9sbG93aW5nIGlzIHRydWU6XG4gKiAgICsgIFRoZSB2YWx1ZSBvZiBgYFBhdGhQYXR0ZXJuYGAgbWF0Y2hlcyB0aGUgcGF0aCB0byB5b3VyIGN1c3RvbSBlcnJvciBtZXNzYWdlcy4gRm9yIGV4YW1wbGUsIHN1cHBvc2UgeW91IHNhdmVkIGN1c3RvbSBlcnJvciBwYWdlcyBmb3IgNHh4IGVycm9ycyBpbiBhbiBBbWF6b24gUzMgYnVja2V0IGluIGEgZGlyZWN0b3J5IG5hbWVkIGBgLzR4eC1lcnJvcnNgYC4gWW91ciBkaXN0cmlidXRpb24gbXVzdCBpbmNsdWRlIGEgY2FjaGUgYmVoYXZpb3IgZm9yIHdoaWNoIHRoZSBwYXRoIHBhdHRlcm4gcm91dGVzIHJlcXVlc3RzIGZvciB5b3VyIGN1c3RvbSBlcnJvciBwYWdlcyB0byB0aGF0IGxvY2F0aW9uLCBmb3IgZXhhbXBsZSwgYGAvNHh4LWVycm9ycy8qYGAuXG4gKiAgICsgIFRoZSB2YWx1ZSBvZiBgYFRhcmdldE9yaWdpbklkYGAgc3BlY2lmaWVzIHRoZSB2YWx1ZSBvZiB0aGUgYGBJRGBgIGVsZW1lbnQgZm9yIHRoZSBvcmlnaW4gdGhhdCBjb250YWlucyB5b3VyIGN1c3RvbSBlcnJvciBwYWdlcy5cbiAqICAgXG4gKiAgSWYgeW91IHNwZWNpZnkgYSB2YWx1ZSBmb3IgYGBSZXNwb25zZVBhZ2VQYXRoYGAsIHlvdSBtdXN0IGFsc28gc3BlY2lmeSBhIHZhbHVlIGZvciBgYFJlc3BvbnNlQ29kZWBgLlxuICogIFdlIHJlY29tbWVuZCB0aGF0IHlvdSBzdG9yZSBjdXN0b20gZXJyb3IgcGFnZXMgaW4gYW4gQW1hem9uIFMzIGJ1Y2tldC4gSWYgeW91IHN0b3JlIGN1c3RvbSBlcnJvciBwYWdlcyBvbiBhbiBIVFRQIHNlcnZlciBhbmQgdGhlIHNlcnZlciBzdGFydHMgdG8gcmV0dXJuIDV4eCBlcnJvcnMsIENsb3VkRnJvbnQgY2FuJ3QgZ2V0IHRoZSBmaWxlcyB0aGF0IHlvdSB3YW50IHRvIHJldHVybiB0byB2aWV3ZXJzIGJlY2F1c2UgdGhlIG9yaWdpbiBzZXJ2ZXIgaXMgdW5hdmFpbGFibGUuXG4gKi9cblJlc3BvbnNlUGFnZVBhdGg/OiBzdHJpbmdcbn1cbi8qKlxuICogVGhlIHVzZXItZGVmaW5lZCBIVFRQIHNlcnZlciB0aGF0IHNlcnZlcyBhcyB0aGUgb3JpZ2luIGZvciBjb250ZW50IHRoYXQgQ0YgZGlzdHJpYnV0ZXMuXG4gKiAgIFRoaXMgcHJvcGVydHkgaXMgbGVnYWN5LiBXZSByZWNvbW1lbmQgdGhhdCB5b3UgdXNlIFtPcmlnaW5dKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1wcm9wZXJ0aWVzLWNsb3VkZnJvbnQtZGlzdHJpYnV0aW9uLW9yaWdpbi5odG1sKSBpbnN0ZWFkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIExlZ2FjeUN1c3RvbU9yaWdpbiB7XG4vKipcbiAqIFRoZSBkb21haW4gbmFtZSBhc3NpZ25lZCB0byB5b3VyIENGIGRpc3RyaWJ1dGlvbi5cbiAqL1xuRE5TTmFtZTogc3RyaW5nXG4vKipcbiAqIFRoZSBIVFRQIHBvcnQgdGhhdCBDRiB1c2VzIHRvIGNvbm5lY3QgdG8gdGhlIG9yaWdpbi4gU3BlY2lmeSB0aGUgSFRUUCBwb3J0IHRoYXQgdGhlIG9yaWdpbiBsaXN0ZW5zIG9uLlxuICovXG5IVFRQUG9ydD86IG51bWJlclxuLyoqXG4gKiBUaGUgSFRUUFMgcG9ydCB0aGF0IENGIHVzZXMgdG8gY29ubmVjdCB0byB0aGUgb3JpZ2luLiBTcGVjaWZ5IHRoZSBIVFRQUyBwb3J0IHRoYXQgdGhlIG9yaWdpbiBsaXN0ZW5zIG9uLlxuICovXG5IVFRQU1BvcnQ/OiBudW1iZXJcbi8qKlxuICogU3BlY2lmaWVzIHRoZSBwcm90b2NvbCAoSFRUUCBvciBIVFRQUykgdGhhdCBDRiB1c2VzIHRvIGNvbm5lY3QgdG8gdGhlIG9yaWdpbi5cbiAqL1xuT3JpZ2luUHJvdG9jb2xQb2xpY3k6IHN0cmluZ1xuLyoqXG4gKiBUaGUgbWluaW11bSBTU0wvVExTIHByb3RvY29sIHZlcnNpb24gdGhhdCBDRiB1c2VzIHdoZW4gY29tbXVuaWNhdGluZyB3aXRoIHlvdXIgb3JpZ2luIHNlcnZlciBvdmVyIEhUVFBzLlxuICogIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW01pbmltdW0gT3JpZ2luIFNTTCBQcm90b2NvbF0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL2Rpc3RyaWJ1dGlvbi13ZWItdmFsdWVzLXNwZWNpZnkuaHRtbCNEb3dubG9hZERpc3RWYWx1ZXNPcmlnaW5TU0xQcm90b2NvbHMpIGluIHRoZSAqRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuT3JpZ2luU1NMUHJvdG9jb2xzOiBzdHJpbmdbXVxufVxuLyoqXG4gKiBBIGNvbXBsZXggdHlwZSB0aGF0IGRlc2NyaWJlcyB0aGUgZGVmYXVsdCBjYWNoZSBiZWhhdmlvciBpZiB5b3UgZG9uJ3Qgc3BlY2lmeSBhIGBgQ2FjaGVCZWhhdmlvcmBgIGVsZW1lbnQgb3IgaWYgZmlsZXMgZG9uJ3QgbWF0Y2ggYW55IG9mIHRoZSB2YWx1ZXMgb2YgYGBQYXRoUGF0dGVybmBgIGluIGBgQ2FjaGVCZWhhdmlvcmBgIGVsZW1lbnRzLiBZb3UgbXVzdCBjcmVhdGUgZXhhY3RseSBvbmUgZGVmYXVsdCBjYWNoZSBiZWhhdmlvci5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEZWZhdWx0Q2FjaGVCZWhhdmlvciB7XG4vKipcbiAqIEEgY29tcGxleCB0eXBlIHRoYXQgY29udHJvbHMgd2hpY2ggSFRUUCBtZXRob2RzIENsb3VkRnJvbnQgcHJvY2Vzc2VzIGFuZCBmb3J3YXJkcyB0byB5b3VyIEFtYXpvbiBTMyBidWNrZXQgb3IgeW91ciBjdXN0b20gb3JpZ2luLiBUaGVyZSBhcmUgdGhyZWUgY2hvaWNlczpcbiAqICAgKyAgQ2xvdWRGcm9udCBmb3J3YXJkcyBvbmx5IGBgR0VUYGAgYW5kIGBgSEVBRGBgIHJlcXVlc3RzLlxuICogICArICBDbG91ZEZyb250IGZvcndhcmRzIG9ubHkgYGBHRVRgYCwgYGBIRUFEYGAsIGFuZCBgYE9QVElPTlNgYCByZXF1ZXN0cy5cbiAqICAgKyAgQ2xvdWRGcm9udCBmb3J3YXJkcyBgYEdFVCwgSEVBRCwgT1BUSU9OUywgUFVULCBQQVRDSCwgUE9TVGBgLCBhbmQgYGBERUxFVEVgYCByZXF1ZXN0cy5cbiAqICAgXG4gKiAgSWYgeW91IHBpY2sgdGhlIHRoaXJkIGNob2ljZSwgeW91IG1heSBuZWVkIHRvIHJlc3RyaWN0IGFjY2VzcyB0byB5b3VyIEFtYXpvbiBTMyBidWNrZXQgb3IgdG8geW91ciBjdXN0b20gb3JpZ2luIHNvIHVzZXJzIGNhbid0IHBlcmZvcm0gb3BlcmF0aW9ucyB0aGF0IHlvdSBkb24ndCB3YW50IHRoZW0gdG8uIEZvciBleGFtcGxlLCB5b3UgbWlnaHQgbm90IHdhbnQgdXNlcnMgdG8gaGF2ZSBwZXJtaXNzaW9ucyB0byBkZWxldGUgb2JqZWN0cyBmcm9tIHlvdXIgb3JpZ2luLlxuICovXG5BbGxvd2VkTWV0aG9kcz86IHN0cmluZ1tdXG4vKipcbiAqIFRoZSB1bmlxdWUgaWRlbnRpZmllciBvZiB0aGUgY2FjaGUgcG9saWN5IHRoYXQgaXMgYXR0YWNoZWQgdG8gdGhlIGRlZmF1bHQgY2FjaGUgYmVoYXZpb3IuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0NyZWF0aW5nIGNhY2hlIHBvbGljaWVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvY29udHJvbGxpbmctdGhlLWNhY2hlLWtleS5odG1sI2NhY2hlLWtleS1jcmVhdGUtY2FjaGUtcG9saWN5KSBvciBbVXNpbmcgdGhlIG1hbmFnZWQgY2FjaGUgcG9saWNpZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS91c2luZy1tYW5hZ2VkLWNhY2hlLXBvbGljaWVzLmh0bWwpIGluIHRoZSAqQW1hem9uIENsb3VkRnJvbnQgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqICBBIGBgRGVmYXVsdENhY2hlQmVoYXZpb3JgYCBtdXN0IGluY2x1ZGUgZWl0aGVyIGEgYGBDYWNoZVBvbGljeUlkYGAgb3IgYGBGb3J3YXJkZWRWYWx1ZXNgYC4gV2UgcmVjb21tZW5kIHRoYXQgeW91IHVzZSBhIGBgQ2FjaGVQb2xpY3lJZGBgLlxuICovXG5DYWNoZVBvbGljeUlkPzogc3RyaW5nXG4vKipcbiAqIEEgY29tcGxleCB0eXBlIHRoYXQgY29udHJvbHMgd2hldGhlciBDbG91ZEZyb250IGNhY2hlcyB0aGUgcmVzcG9uc2UgdG8gcmVxdWVzdHMgdXNpbmcgdGhlIHNwZWNpZmllZCBIVFRQIG1ldGhvZHMuIFRoZXJlIGFyZSB0d28gY2hvaWNlczpcbiAqICAgKyAgQ2xvdWRGcm9udCBjYWNoZXMgcmVzcG9uc2VzIHRvIGBgR0VUYGAgYW5kIGBgSEVBRGBgIHJlcXVlc3RzLlxuICogICArICBDbG91ZEZyb250IGNhY2hlcyByZXNwb25zZXMgdG8gYGBHRVRgYCwgYGBIRUFEYGAsIGFuZCBgYE9QVElPTlNgYCByZXF1ZXN0cy5cbiAqICAgXG4gKiAgSWYgeW91IHBpY2sgdGhlIHNlY29uZCBjaG9pY2UgZm9yIHlvdXIgQW1hem9uIFMzIE9yaWdpbiwgeW91IG1heSBuZWVkIHRvIGZvcndhcmQgQWNjZXNzLUNvbnRyb2wtUmVxdWVzdC1NZXRob2QsIEFjY2Vzcy1Db250cm9sLVJlcXVlc3QtSGVhZGVycywgYW5kIE9yaWdpbiBoZWFkZXJzIGZvciB0aGUgcmVzcG9uc2VzIHRvIGJlIGNhY2hlZCBjb3JyZWN0bHkuXG4gKi9cbkNhY2hlZE1ldGhvZHM/OiBzdHJpbmdbXVxuLyoqXG4gKiBXaGV0aGVyIHlvdSB3YW50IENsb3VkRnJvbnQgdG8gYXV0b21hdGljYWxseSBjb21wcmVzcyBjZXJ0YWluIGZpbGVzIGZvciB0aGlzIGNhY2hlIGJlaGF2aW9yLiBJZiBzbywgc3BlY2lmeSBgYHRydWVgYDsgaWYgbm90LCBzcGVjaWZ5IGBgZmFsc2VgYC4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbU2VydmluZyBDb21wcmVzc2VkIEZpbGVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvU2VydmluZ0NvbXByZXNzZWRGaWxlcy5odG1sKSBpbiB0aGUgKkFtYXpvbiBDbG91ZEZyb250IERldmVsb3BlciBHdWlkZSouXG4gKi9cbkNvbXByZXNzPzogYm9vbGVhblxuLyoqXG4gKiBUaGlzIGZpZWxkIG9ubHkgc3VwcG9ydHMgc3RhbmRhcmQgZGlzdHJpYnV0aW9ucy4gWW91IGNhbid0IHNwZWNpZnkgdGhpcyBmaWVsZCBmb3IgbXVsdGktdGVuYW50IGRpc3RyaWJ1dGlvbnMuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1Vuc3VwcG9ydGVkIGZlYXR1cmVzIGZvciBTYWFTIE1hbmFnZXIgZm9yIEFtYXpvbiBDbG91ZEZyb250XShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvZGlzdHJpYnV0aW9uLWNvbmZpZy1vcHRpb25zLmh0bWwjdW5zdXBwb3J0ZWQtc2FhcykgaW4gdGhlICpBbWF6b24gQ2xvdWRGcm9udCBEZXZlbG9wZXIgR3VpZGUqLlxuICogICBUaGlzIGZpZWxkIGlzIGRlcHJlY2F0ZWQuIFdlIHJlY29tbWVuZCB0aGF0IHlvdSB1c2UgdGhlIGBgRGVmYXVsdFRUTGBgIGZpZWxkIGluIGEgY2FjaGUgcG9saWN5IGluc3RlYWQgb2YgdGhpcyBmaWVsZC4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbQ3JlYXRpbmcgY2FjaGUgcG9saWNpZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9jb250cm9sbGluZy10aGUtY2FjaGUta2V5Lmh0bWwjY2FjaGUta2V5LWNyZWF0ZS1jYWNoZS1wb2xpY3kpIG9yIFtVc2luZyB0aGUgbWFuYWdlZCBjYWNoZSBwb2xpY2llc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL3VzaW5nLW1hbmFnZWQtY2FjaGUtcG9saWNpZXMuaHRtbCkgaW4gdGhlICpBbWF6b24gQ2xvdWRGcm9udCBEZXZlbG9wZXIgR3VpZGUqLlxuICogIFRoZSBkZWZhdWx0IGFtb3VudCBvZiB0aW1lIHRoYXQgeW91IHdhbnQgb2JqZWN0cyB0byBzdGF5IGluIENsb3VkRnJvbnQgY2FjaGVzIGJlZm9yZSBDbG91ZEZyb250IGZvcndhcmRzIGFub3RoZXIgcmVxdWVzdCB0byB5b3VyIG9yaWdpbiB0byBkZXRlcm1pbmUgd2hldGhlciB0aGUgb2JqZWN0IGhhcyBiZWVuIHVwZGF0ZWQuIFRoZSB2YWx1ZSB0aGF0IHlvdSBzcGVjaWZ5IGFwcGxpZXMgb25seSB3aGVuIHlvdXIgb3JpZ2luIGRvZXMgbm90IGFkZCBIVFRQIGhlYWRlcnMgc3VjaCBhcyBgYENhY2hlLUNvbnRyb2wgbWF4LWFnZWBgLCBgYENhY2hlLUNvbnRyb2wgcy1tYXhhZ2VgYCwgYW5kIGBgRXhwaXJlc2BgIHRvIG9iamVjdHMuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW01hbmFnaW5nIEhvdyBMb25nIENvbnRlbnQgU3RheXMgaW4gYW4gRWRnZSBDYWNoZSAoRXhwaXJhdGlvbildKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9FeHBpcmF0aW9uLmh0bWwpIGluIHRoZSAqQW1hem9uIENsb3VkRnJvbnQgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuRGVmYXVsdFRUTD86IG51bWJlclxuLyoqXG4gKiBUaGUgdmFsdWUgb2YgYGBJRGBgIGZvciB0aGUgZmllbGQtbGV2ZWwgZW5jcnlwdGlvbiBjb25maWd1cmF0aW9uIHRoYXQgeW91IHdhbnQgQ2xvdWRGcm9udCB0byB1c2UgZm9yIGVuY3J5cHRpbmcgc3BlY2lmaWMgZmllbGRzIG9mIGRhdGEgZm9yIHRoZSBkZWZhdWx0IGNhY2hlIGJlaGF2aW9yLlxuICovXG5GaWVsZExldmVsRW5jcnlwdGlvbklkPzogc3RyaW5nXG5Gb3J3YXJkZWRWYWx1ZXM/OiBGb3J3YXJkZWRWYWx1ZXMxXG4vKipcbiAqIEEgbGlzdCBvZiBDbG91ZEZyb250IGZ1bmN0aW9ucyB0aGF0IGFyZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBjYWNoZSBiZWhhdmlvci4gWW91ciBmdW5jdGlvbnMgbXVzdCBiZSBwdWJsaXNoZWQgdG8gdGhlIGBgTElWRWBgIHN0YWdlIHRvIGFzc29jaWF0ZSB0aGVtIHdpdGggYSBjYWNoZSBiZWhhdmlvci5cbiAqL1xuRnVuY3Rpb25Bc3NvY2lhdGlvbnM/OiBGdW5jdGlvbkFzc29jaWF0aW9uW11cbkdycGNDb25maWc/OiBHcnBjQ29uZmlnMVxuLyoqXG4gKiBBIGNvbXBsZXggdHlwZSB0aGF0IGNvbnRhaW5zIHplcm8gb3IgbW9yZSBMYW1iZGFARWRnZSBmdW5jdGlvbiBhc3NvY2lhdGlvbnMgZm9yIGEgY2FjaGUgYmVoYXZpb3IuXG4gKi9cbkxhbWJkYUZ1bmN0aW9uQXNzb2NpYXRpb25zPzogTGFtYmRhRnVuY3Rpb25Bc3NvY2lhdGlvbltdXG4vKipcbiAqIFRoaXMgZmllbGQgb25seSBzdXBwb3J0cyBzdGFuZGFyZCBkaXN0cmlidXRpb25zLiBZb3UgY2FuJ3Qgc3BlY2lmeSB0aGlzIGZpZWxkIGZvciBtdWx0aS10ZW5hbnQgZGlzdHJpYnV0aW9ucy4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbVW5zdXBwb3J0ZWQgZmVhdHVyZXMgZm9yIFNhYVMgTWFuYWdlciBmb3IgQW1hem9uIENsb3VkRnJvbnRdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9kaXN0cmlidXRpb24tY29uZmlnLW9wdGlvbnMuaHRtbCN1bnN1cHBvcnRlZC1zYWFzKSBpbiB0aGUgKkFtYXpvbiBDbG91ZEZyb250IERldmVsb3BlciBHdWlkZSouXG4gKiAgIFRoaXMgZmllbGQgaXMgZGVwcmVjYXRlZC4gV2UgcmVjb21tZW5kIHRoYXQgeW91IHVzZSB0aGUgYGBNYXhUVExgYCBmaWVsZCBpbiBhIGNhY2hlIHBvbGljeSBpbnN0ZWFkIG9mIHRoaXMgZmllbGQuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0NyZWF0aW5nIGNhY2hlIHBvbGljaWVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvY29udHJvbGxpbmctdGhlLWNhY2hlLWtleS5odG1sI2NhY2hlLWtleS1jcmVhdGUtY2FjaGUtcG9saWN5KSBvciBbVXNpbmcgdGhlIG1hbmFnZWQgY2FjaGUgcG9saWNpZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS91c2luZy1tYW5hZ2VkLWNhY2hlLXBvbGljaWVzLmh0bWwpIGluIHRoZSAqQW1hem9uIENsb3VkRnJvbnQgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqICBUaGUgbWF4aW11bSBhbW91bnQgb2YgdGltZSB0aGF0IHlvdSB3YW50IG9iamVjdHMgdG8gc3RheSBpbiBDbG91ZEZyb250IGNhY2hlcyBiZWZvcmUgQ2xvdWRGcm9udCBmb3J3YXJkcyBhbm90aGVyIHJlcXVlc3QgdG8geW91ciBvcmlnaW4gdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIG9iamVjdCBoYXMgYmVlbiB1cGRhdGVkLiBUaGUgdmFsdWUgdGhhdCB5b3Ugc3BlY2lmeSBhcHBsaWVzIG9ubHkgd2hlbiB5b3VyIG9yaWdpbiBhZGRzIEhUVFAgaGVhZGVycyBzdWNoIGFzIGBgQ2FjaGUtQ29udHJvbCBtYXgtYWdlYGAsIGBgQ2FjaGUtQ29udHJvbCBzLW1heGFnZWBgLCBhbmQgYGBFeHBpcmVzYGAgdG8gb2JqZWN0cy4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbTWFuYWdpbmcgSG93IExvbmcgQ29udGVudCBTdGF5cyBpbiBhbiBFZGdlIENhY2hlIChFeHBpcmF0aW9uKV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL0V4cGlyYXRpb24uaHRtbCkgaW4gdGhlICpBbWF6b24gQ2xvdWRGcm9udCBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5NYXhUVEw/OiBudW1iZXJcbi8qKlxuICogVGhpcyBmaWVsZCBvbmx5IHN1cHBvcnRzIHN0YW5kYXJkIGRpc3RyaWJ1dGlvbnMuIFlvdSBjYW4ndCBzcGVjaWZ5IHRoaXMgZmllbGQgZm9yIG11bHRpLXRlbmFudCBkaXN0cmlidXRpb25zLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtVbnN1cHBvcnRlZCBmZWF0dXJlcyBmb3IgU2FhUyBNYW5hZ2VyIGZvciBBbWF6b24gQ2xvdWRGcm9udF0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL2Rpc3RyaWJ1dGlvbi1jb25maWctb3B0aW9ucy5odG1sI3Vuc3VwcG9ydGVkLXNhYXMpIGluIHRoZSAqQW1hem9uIENsb3VkRnJvbnQgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqICAgVGhpcyBmaWVsZCBpcyBkZXByZWNhdGVkLiBXZSByZWNvbW1lbmQgdGhhdCB5b3UgdXNlIHRoZSBgYE1pblRUTGBgIGZpZWxkIGluIGEgY2FjaGUgcG9saWN5IGluc3RlYWQgb2YgdGhpcyBmaWVsZC4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbQ3JlYXRpbmcgY2FjaGUgcG9saWNpZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9jb250cm9sbGluZy10aGUtY2FjaGUta2V5Lmh0bWwjY2FjaGUta2V5LWNyZWF0ZS1jYWNoZS1wb2xpY3kpIG9yIFtVc2luZyB0aGUgbWFuYWdlZCBjYWNoZSBwb2xpY2llc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL3VzaW5nLW1hbmFnZWQtY2FjaGUtcG9saWNpZXMuaHRtbCkgaW4gdGhlICpBbWF6b24gQ2xvdWRGcm9udCBEZXZlbG9wZXIgR3VpZGUqLlxuICogIFRoZSBtaW5pbXVtIGFtb3VudCBvZiB0aW1lIHRoYXQgeW91IHdhbnQgb2JqZWN0cyB0byBzdGF5IGluIENsb3VkRnJvbnQgY2FjaGVzIGJlZm9yZSBDbG91ZEZyb250IGZvcndhcmRzIGFub3RoZXIgcmVxdWVzdCB0byB5b3VyIG9yaWdpbiB0byBkZXRlcm1pbmUgd2hldGhlciB0aGUgb2JqZWN0IGhhcyBiZWVuIHVwZGF0ZWQuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW01hbmFnaW5nIEhvdyBMb25nIENvbnRlbnQgU3RheXMgaW4gYW4gRWRnZSBDYWNoZSAoRXhwaXJhdGlvbildKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9FeHBpcmF0aW9uLmh0bWwpIGluIHRoZSAqQW1hem9uIENsb3VkRnJvbnQgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqICBZb3UgbXVzdCBzcGVjaWZ5IGBgMGBgIGZvciBgYE1pblRUTGBgIGlmIHlvdSBjb25maWd1cmUgQ2xvdWRGcm9udCB0byBmb3J3YXJkIGFsbCBoZWFkZXJzIHRvIHlvdXIgb3JpZ2luICh1bmRlciBgYEhlYWRlcnNgYCwgaWYgeW91IHNwZWNpZnkgYGAxYGAgZm9yIGBgUXVhbnRpdHlgYCBhbmQgYGAqYGAgZm9yIGBgTmFtZWBgKS5cbiAqL1xuTWluVFRMPzogbnVtYmVyXG4vKipcbiAqIFRoZSB1bmlxdWUgaWRlbnRpZmllciBvZiB0aGUgb3JpZ2luIHJlcXVlc3QgcG9saWN5IHRoYXQgaXMgYXR0YWNoZWQgdG8gdGhlIGRlZmF1bHQgY2FjaGUgYmVoYXZpb3IuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0NyZWF0aW5nIG9yaWdpbiByZXF1ZXN0IHBvbGljaWVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvY29udHJvbGxpbmctb3JpZ2luLXJlcXVlc3RzLmh0bWwjb3JpZ2luLXJlcXVlc3QtY3JlYXRlLW9yaWdpbi1yZXF1ZXN0LXBvbGljeSkgb3IgW1VzaW5nIHRoZSBtYW5hZ2VkIG9yaWdpbiByZXF1ZXN0IHBvbGljaWVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvdXNpbmctbWFuYWdlZC1vcmlnaW4tcmVxdWVzdC1wb2xpY2llcy5odG1sKSBpbiB0aGUgKkFtYXpvbiBDbG91ZEZyb250IERldmVsb3BlciBHdWlkZSouXG4gKi9cbk9yaWdpblJlcXVlc3RQb2xpY3lJZD86IHN0cmluZ1xuLyoqXG4gKiBUaGUgQW1hem9uIFJlc291cmNlIE5hbWUgKEFSTikgb2YgdGhlIHJlYWwtdGltZSBsb2cgY29uZmlndXJhdGlvbiB0aGF0IGlzIGF0dGFjaGVkIHRvIHRoaXMgY2FjaGUgYmVoYXZpb3IuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1JlYWwtdGltZSBsb2dzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvcmVhbC10aW1lLWxvZ3MuaHRtbCkgaW4gdGhlICpBbWF6b24gQ2xvdWRGcm9udCBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5SZWFsdGltZUxvZ0NvbmZpZ0Fybj86IHN0cmluZ1xuLyoqXG4gKiBUaGUgaWRlbnRpZmllciBmb3IgYSByZXNwb25zZSBoZWFkZXJzIHBvbGljeS5cbiAqL1xuUmVzcG9uc2VIZWFkZXJzUG9saWN5SWQ/OiBzdHJpbmdcbi8qKlxuICogVGhpcyBmaWVsZCBvbmx5IHN1cHBvcnRzIHN0YW5kYXJkIGRpc3RyaWJ1dGlvbnMuIFlvdSBjYW4ndCBzcGVjaWZ5IHRoaXMgZmllbGQgZm9yIG11bHRpLXRlbmFudCBkaXN0cmlidXRpb25zLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtVbnN1cHBvcnRlZCBmZWF0dXJlcyBmb3IgU2FhUyBNYW5hZ2VyIGZvciBBbWF6b24gQ2xvdWRGcm9udF0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL2Rpc3RyaWJ1dGlvbi1jb25maWctb3B0aW9ucy5odG1sI3Vuc3VwcG9ydGVkLXNhYXMpIGluIHRoZSAqQW1hem9uIENsb3VkRnJvbnQgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqICAgSW5kaWNhdGVzIHdoZXRoZXIgeW91IHdhbnQgdG8gZGlzdHJpYnV0ZSBtZWRpYSBmaWxlcyBpbiB0aGUgTWljcm9zb2Z0IFNtb290aCBTdHJlYW1pbmcgZm9ybWF0IHVzaW5nIHRoZSBvcmlnaW4gdGhhdCBpcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBjYWNoZSBiZWhhdmlvci4gSWYgc28sIHNwZWNpZnkgYGB0cnVlYGA7IGlmIG5vdCwgc3BlY2lmeSBgYGZhbHNlYGAuIElmIHlvdSBzcGVjaWZ5IGBgdHJ1ZWBgIGZvciBgYFNtb290aFN0cmVhbWluZ2BgLCB5b3UgY2FuIHN0aWxsIGRpc3RyaWJ1dGUgb3RoZXIgY29udGVudCB1c2luZyB0aGlzIGNhY2hlIGJlaGF2aW9yIGlmIHRoZSBjb250ZW50IG1hdGNoZXMgdGhlIHZhbHVlIG9mIGBgUGF0aFBhdHRlcm5gYC5cbiAqL1xuU21vb3RoU3RyZWFtaW5nPzogYm9vbGVhblxuLyoqXG4gKiBUaGUgdmFsdWUgb2YgYGBJRGBgIGZvciB0aGUgb3JpZ2luIHRoYXQgeW91IHdhbnQgQ2xvdWRGcm9udCB0byByb3V0ZSByZXF1ZXN0cyB0byB3aGVuIHRoZXkgdXNlIHRoZSBkZWZhdWx0IGNhY2hlIGJlaGF2aW9yLlxuICovXG5UYXJnZXRPcmlnaW5JZDogc3RyaW5nXG4vKipcbiAqIEEgbGlzdCBvZiBrZXkgZ3JvdXBzIHRoYXQgQ2xvdWRGcm9udCBjYW4gdXNlIHRvIHZhbGlkYXRlIHNpZ25lZCBVUkxzIG9yIHNpZ25lZCBjb29raWVzLlxuICogIFdoZW4gYSBjYWNoZSBiZWhhdmlvciBjb250YWlucyB0cnVzdGVkIGtleSBncm91cHMsIENsb3VkRnJvbnQgcmVxdWlyZXMgc2lnbmVkIFVSTHMgb3Igc2lnbmVkIGNvb2tpZXMgZm9yIGFsbCByZXF1ZXN0cyB0aGF0IG1hdGNoIHRoZSBjYWNoZSBiZWhhdmlvci4gVGhlIFVSTHMgb3IgY29va2llcyBtdXN0IGJlIHNpZ25lZCB3aXRoIGEgcHJpdmF0ZSBrZXkgd2hvc2UgY29ycmVzcG9uZGluZyBwdWJsaWMga2V5IGlzIGluIHRoZSBrZXkgZ3JvdXAuIFRoZSBzaWduZWQgVVJMIG9yIGNvb2tpZSBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCB3aGljaCBwdWJsaWMga2V5IENsb3VkRnJvbnQgc2hvdWxkIHVzZSB0byB2ZXJpZnkgdGhlIHNpZ25hdHVyZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbU2VydmluZyBwcml2YXRlIGNvbnRlbnRdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9Qcml2YXRlQ29udGVudC5odG1sKSBpbiB0aGUgKkFtYXpvbiBDbG91ZEZyb250IERldmVsb3BlciBHdWlkZSouXG4gKi9cblRydXN0ZWRLZXlHcm91cHM/OiBzdHJpbmdbXVxuLyoqXG4gKiBXZSByZWNvbW1lbmQgdXNpbmcgYGBUcnVzdGVkS2V5R3JvdXBzYGAgaW5zdGVhZCBvZiBgYFRydXN0ZWRTaWduZXJzYGAuXG4gKiAgICBUaGlzIGZpZWxkIG9ubHkgc3VwcG9ydHMgc3RhbmRhcmQgZGlzdHJpYnV0aW9ucy4gWW91IGNhbid0IHNwZWNpZnkgdGhpcyBmaWVsZCBmb3IgbXVsdGktdGVuYW50IGRpc3RyaWJ1dGlvbnMuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1Vuc3VwcG9ydGVkIGZlYXR1cmVzIGZvciBTYWFTIE1hbmFnZXIgZm9yIEFtYXpvbiBDbG91ZEZyb250XShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvZGlzdHJpYnV0aW9uLWNvbmZpZy1vcHRpb25zLmh0bWwjdW5zdXBwb3J0ZWQtc2FhcykgaW4gdGhlICpBbWF6b24gQ2xvdWRGcm9udCBEZXZlbG9wZXIgR3VpZGUqLlxuICogICBBIGxpc3Qgb2YgQVdTLWFjY291bnQgSURzIHdob3NlIHB1YmxpYyBrZXlzIENsb3VkRnJvbnQgY2FuIHVzZSB0byB2YWxpZGF0ZSBzaWduZWQgVVJMcyBvciBzaWduZWQgY29va2llcy5cbiAqICBXaGVuIGEgY2FjaGUgYmVoYXZpb3IgY29udGFpbnMgdHJ1c3RlZCBzaWduZXJzLCBDbG91ZEZyb250IHJlcXVpcmVzIHNpZ25lZCBVUkxzIG9yIHNpZ25lZCBjb29raWVzIGZvciBhbGwgcmVxdWVzdHMgdGhhdCBtYXRjaCB0aGUgY2FjaGUgYmVoYXZpb3IuIFRoZSBVUkxzIG9yIGNvb2tpZXMgbXVzdCBiZSBzaWduZWQgd2l0aCB0aGUgcHJpdmF0ZSBrZXkgb2YgYSBDbG91ZEZyb250IGtleSBwYWlyIGluIGEgdHJ1c3RlZCBzaWduZXIncyBBV1MtYWNjb3VudC4gVGhlIHNpZ25lZCBVUkwgb3IgY29va2llIGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IHdoaWNoIHB1YmxpYyBrZXkgQ2xvdWRGcm9udCBzaG91bGQgdXNlIHRvIHZlcmlmeSB0aGUgc2lnbmF0dXJlLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtTZXJ2aW5nIHByaXZhdGUgY29udGVudF0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL1ByaXZhdGVDb250ZW50Lmh0bWwpIGluIHRoZSAqQW1hem9uIENsb3VkRnJvbnQgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuVHJ1c3RlZFNpZ25lcnM/OiBzdHJpbmdbXVxuLyoqXG4gKiBUaGUgcHJvdG9jb2wgdGhhdCB2aWV3ZXJzIGNhbiB1c2UgdG8gYWNjZXNzIHRoZSBmaWxlcyBpbiB0aGUgb3JpZ2luIHNwZWNpZmllZCBieSBgYFRhcmdldE9yaWdpbklkYGAgd2hlbiBhIHJlcXVlc3QgbWF0Y2hlcyB0aGUgcGF0aCBwYXR0ZXJuIGluIGBgUGF0aFBhdHRlcm5gYC4gWW91IGNhbiBzcGVjaWZ5IHRoZSBmb2xsb3dpbmcgb3B0aW9uczpcbiAqICAgKyAgYGBhbGxvdy1hbGxgYDogVmlld2VycyBjYW4gdXNlIEhUVFAgb3IgSFRUUFMuXG4gKiAgICsgIGBgcmVkaXJlY3QtdG8taHR0cHNgYDogSWYgYSB2aWV3ZXIgc3VibWl0cyBhbiBIVFRQIHJlcXVlc3QsIENsb3VkRnJvbnQgcmV0dXJucyBhbiBIVFRQIHN0YXR1cyBjb2RlIG9mIDMwMSAoTW92ZWQgUGVybWFuZW50bHkpIHRvIHRoZSB2aWV3ZXIgYWxvbmcgd2l0aCB0aGUgSFRUUFMgVVJMLiBUaGUgdmlld2VyIHRoZW4gcmVzdWJtaXRzIHRoZSByZXF1ZXN0IHVzaW5nIHRoZSBuZXcgVVJMLlxuICogICArICBgYGh0dHBzLW9ubHlgYDogSWYgYSB2aWV3ZXIgc2VuZHMgYW4gSFRUUCByZXF1ZXN0LCBDbG91ZEZyb250IHJldHVybnMgYW4gSFRUUCBzdGF0dXMgY29kZSBvZiA0MDMgKEZvcmJpZGRlbikuXG4gKiAgIFxuICogIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHJlcXVpcmluZyB0aGUgSFRUUFMgcHJvdG9jb2wsIHNlZSBbUmVxdWlyaW5nIEhUVFBTIEJldHdlZW4gVmlld2VycyBhbmQgQ2xvdWRGcm9udF0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL3VzaW5nLWh0dHBzLXZpZXdlcnMtdG8tY2xvdWRmcm9udC5odG1sKSBpbiB0aGUgKkFtYXpvbiBDbG91ZEZyb250IERldmVsb3BlciBHdWlkZSouXG4gKiAgIFRoZSBvbmx5IHdheSB0byBndWFyYW50ZWUgdGhhdCB2aWV3ZXJzIHJldHJpZXZlIGFuIG9iamVjdCB0aGF0IHdhcyBmZXRjaGVkIGZyb20gdGhlIG9yaWdpbiB1c2luZyBIVFRQUyBpcyBuZXZlciB0byB1c2UgYW55IG90aGVyIHByb3RvY29sIHRvIGZldGNoIHRoZSBvYmplY3QuIElmIHlvdSBoYXZlIHJlY2VudGx5IGNoYW5nZWQgZnJvbSBIVFRQIHRvIEhUVFBTLCB3ZSByZWNvbW1lbmQgdGhhdCB5b3UgY2xlYXIgeW91ciBvYmplY3RzJyBjYWNoZSBiZWNhdXNlIGNhY2hlZCBvYmplY3RzIGFyZSBwcm90b2NvbCBhZ25vc3RpYy4gVGhhdCBtZWFucyB0aGF0IGFuIGVkZ2UgbG9jYXRpb24gd2lsbCByZXR1cm4gYW4gb2JqZWN0IGZyb20gdGhlIGNhY2hlIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGUgY3VycmVudCByZXF1ZXN0IHByb3RvY29sIG1hdGNoZXMgdGhlIHByb3RvY29sIHVzZWQgcHJldmlvdXNseS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbTWFuYWdpbmcgQ2FjaGUgRXhwaXJhdGlvbl0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL0V4cGlyYXRpb24uaHRtbCkgaW4gdGhlICpBbWF6b24gQ2xvdWRGcm9udCBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5WaWV3ZXJQcm90b2NvbFBvbGljeTogc3RyaW5nXG59XG4vKipcbiAqIFRoaXMgZmllbGQgaXMgZGVwcmVjYXRlZC4gV2UgcmVjb21tZW5kIHRoYXQgeW91IHVzZSBhIGNhY2hlIHBvbGljeSBvciBhbiBvcmlnaW4gcmVxdWVzdCBwb2xpY3kgaW5zdGVhZCBvZiB0aGlzIGZpZWxkLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtXb3JraW5nIHdpdGggcG9saWNpZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS93b3JraW5nLXdpdGgtcG9saWNpZXMuaHRtbCkgaW4gdGhlICpBbWF6b24gQ2xvdWRGcm9udCBEZXZlbG9wZXIgR3VpZGUqLlxuICogIElmIHlvdSB3YW50IHRvIGluY2x1ZGUgdmFsdWVzIGluIHRoZSBjYWNoZSBrZXksIHVzZSBhIGNhY2hlIHBvbGljeS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbQ3JlYXRpbmcgY2FjaGUgcG9saWNpZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9jb250cm9sbGluZy10aGUtY2FjaGUta2V5Lmh0bWwjY2FjaGUta2V5LWNyZWF0ZS1jYWNoZS1wb2xpY3kpIG9yIFtVc2luZyB0aGUgbWFuYWdlZCBjYWNoZSBwb2xpY2llc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL3VzaW5nLW1hbmFnZWQtY2FjaGUtcG9saWNpZXMuaHRtbCkgaW4gdGhlICpBbWF6b24gQ2xvdWRGcm9udCBEZXZlbG9wZXIgR3VpZGUqLlxuICogIElmIHlvdSB3YW50IHRvIHNlbmQgdmFsdWVzIHRvIHRoZSBvcmlnaW4gYnV0IG5vdCBpbmNsdWRlIHRoZW0gaW4gdGhlIGNhY2hlIGtleSwgdXNlIGFuIG9yaWdpbiByZXF1ZXN0IHBvbGljeS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbQ3JlYXRpbmcgb3JpZ2luIHJlcXVlc3QgcG9saWNpZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9jb250cm9sbGluZy1vcmlnaW4tcmVxdWVzdHMuaHRtbCNvcmlnaW4tcmVxdWVzdC1jcmVhdGUtb3JpZ2luLXJlcXVlc3QtcG9saWN5KSBvciBbVXNpbmcgdGhlIG1hbmFnZWQgb3JpZ2luIHJlcXVlc3QgcG9saWNpZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS91c2luZy1tYW5hZ2VkLW9yaWdpbi1yZXF1ZXN0LXBvbGljaWVzLmh0bWwpIGluIHRoZSAqQW1hem9uIENsb3VkRnJvbnQgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqICBBIGBgRGVmYXVsdENhY2hlQmVoYXZpb3JgYCBtdXN0IGluY2x1ZGUgZWl0aGVyIGEgYGBDYWNoZVBvbGljeUlkYGAgb3IgYGBGb3J3YXJkZWRWYWx1ZXNgYC4gV2UgcmVjb21tZW5kIHRoYXQgeW91IHVzZSBhIGBgQ2FjaGVQb2xpY3lJZGBgLlxuICogIEEgY29tcGxleCB0eXBlIHRoYXQgc3BlY2lmaWVzIGhvdyBDbG91ZEZyb250IGhhbmRsZXMgcXVlcnkgc3RyaW5ncywgY29va2llcywgYW5kIEhUVFAgaGVhZGVycy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGb3J3YXJkZWRWYWx1ZXMxIHtcbkNvb2tpZXM/OiBDb29raWVzXG4vKipcbiAqIFRoaXMgZmllbGQgaXMgZGVwcmVjYXRlZC4gV2UgcmVjb21tZW5kIHRoYXQgeW91IHVzZSBhIGNhY2hlIHBvbGljeSBvciBhbiBvcmlnaW4gcmVxdWVzdCBwb2xpY3kgaW5zdGVhZCBvZiB0aGlzIGZpZWxkLlxuICogIElmIHlvdSB3YW50IHRvIGluY2x1ZGUgaGVhZGVycyBpbiB0aGUgY2FjaGUga2V5LCB1c2UgYSBjYWNoZSBwb2xpY3kuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0NyZWF0aW5nIGNhY2hlIHBvbGljaWVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvY29udHJvbGxpbmctdGhlLWNhY2hlLWtleS5odG1sI2NhY2hlLWtleS1jcmVhdGUtY2FjaGUtcG9saWN5KSBpbiB0aGUgKkFtYXpvbiBDbG91ZEZyb250IERldmVsb3BlciBHdWlkZSouXG4gKiAgSWYgeW91IHdhbnQgdG8gc2VuZCBoZWFkZXJzIHRvIHRoZSBvcmlnaW4gYnV0IG5vdCBpbmNsdWRlIHRoZW0gaW4gdGhlIGNhY2hlIGtleSwgdXNlIGFuIG9yaWdpbiByZXF1ZXN0IHBvbGljeS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbQ3JlYXRpbmcgb3JpZ2luIHJlcXVlc3QgcG9saWNpZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9jb250cm9sbGluZy1vcmlnaW4tcmVxdWVzdHMuaHRtbCNvcmlnaW4tcmVxdWVzdC1jcmVhdGUtb3JpZ2luLXJlcXVlc3QtcG9saWN5KSBpbiB0aGUgKkFtYXpvbiBDbG91ZEZyb250IERldmVsb3BlciBHdWlkZSouXG4gKiAgQSBjb21wbGV4IHR5cGUgdGhhdCBzcGVjaWZpZXMgdGhlIGBgSGVhZGVyc2BgLCBpZiBhbnksIHRoYXQgeW91IHdhbnQgQ2xvdWRGcm9udCB0byBmb3J3YXJkIHRvIHRoZSBvcmlnaW4gZm9yIHRoaXMgY2FjaGUgYmVoYXZpb3IgKHdoaXRlbGlzdGVkIGhlYWRlcnMpLiBGb3IgdGhlIGhlYWRlcnMgdGhhdCB5b3Ugc3BlY2lmeSwgQ2xvdWRGcm9udCBhbHNvIGNhY2hlcyBzZXBhcmF0ZSB2ZXJzaW9ucyBvZiBhIHNwZWNpZmllZCBvYmplY3QgdGhhdCBpcyBiYXNlZCBvbiB0aGUgaGVhZGVyIHZhbHVlcyBpbiB2aWV3ZXIgcmVxdWVzdHMuXG4gKiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbQ2FjaGluZyBDb250ZW50IEJhc2VkIG9uIFJlcXVlc3QgSGVhZGVyc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL2hlYWRlci1jYWNoaW5nLmh0bWwpIGluIHRoZSAqQW1hem9uIENsb3VkRnJvbnQgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuSGVhZGVycz86IHN0cmluZ1tdXG4vKipcbiAqIFRoaXMgZmllbGQgaXMgZGVwcmVjYXRlZC4gV2UgcmVjb21tZW5kIHRoYXQgeW91IHVzZSBhIGNhY2hlIHBvbGljeSBvciBhbiBvcmlnaW4gcmVxdWVzdCBwb2xpY3kgaW5zdGVhZCBvZiB0aGlzIGZpZWxkLlxuICogIElmIHlvdSB3YW50IHRvIGluY2x1ZGUgcXVlcnkgc3RyaW5ncyBpbiB0aGUgY2FjaGUga2V5LCB1c2UgYSBjYWNoZSBwb2xpY3kuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0NyZWF0aW5nIGNhY2hlIHBvbGljaWVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvY29udHJvbGxpbmctdGhlLWNhY2hlLWtleS5odG1sI2NhY2hlLWtleS1jcmVhdGUtY2FjaGUtcG9saWN5KSBpbiB0aGUgKkFtYXpvbiBDbG91ZEZyb250IERldmVsb3BlciBHdWlkZSouXG4gKiAgSWYgeW91IHdhbnQgdG8gc2VuZCBxdWVyeSBzdHJpbmdzIHRvIHRoZSBvcmlnaW4gYnV0IG5vdCBpbmNsdWRlIHRoZW0gaW4gdGhlIGNhY2hlIGtleSwgdXNlIGFuIG9yaWdpbiByZXF1ZXN0IHBvbGljeS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbQ3JlYXRpbmcgb3JpZ2luIHJlcXVlc3QgcG9saWNpZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9jb250cm9sbGluZy1vcmlnaW4tcmVxdWVzdHMuaHRtbCNvcmlnaW4tcmVxdWVzdC1jcmVhdGUtb3JpZ2luLXJlcXVlc3QtcG9saWN5KSBpbiB0aGUgKkFtYXpvbiBDbG91ZEZyb250IERldmVsb3BlciBHdWlkZSouXG4gKiAgSW5kaWNhdGVzIHdoZXRoZXIgeW91IHdhbnQgQ2xvdWRGcm9udCB0byBmb3J3YXJkIHF1ZXJ5IHN0cmluZ3MgdG8gdGhlIG9yaWdpbiB0aGF0IGlzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGNhY2hlIGJlaGF2aW9yIGFuZCBjYWNoZSBiYXNlZCBvbiB0aGUgcXVlcnkgc3RyaW5nIHBhcmFtZXRlcnMuIENsb3VkRnJvbnQgYmVoYXZpb3IgZGVwZW5kcyBvbiB0aGUgdmFsdWUgb2YgYGBRdWVyeVN0cmluZ2BgIGFuZCBvbiB0aGUgdmFsdWVzIHRoYXQgeW91IHNwZWNpZnkgZm9yIGBgUXVlcnlTdHJpbmdDYWNoZUtleXNgYCwgaWYgYW55OlxuICogIElmIHlvdSBzcGVjaWZ5IHRydWUgZm9yIGBgUXVlcnlTdHJpbmdgYCBhbmQgeW91IGRvbid0IHNwZWNpZnkgYW55IHZhbHVlcyBmb3IgYGBRdWVyeVN0cmluZ0NhY2hlS2V5c2BgLCBDbG91ZEZyb250IGZvcndhcmRzIGFsbCBxdWVyeSBzdHJpbmcgcGFyYW1ldGVycyB0byB0aGUgb3JpZ2luIGFuZCBjYWNoZXMgYmFzZWQgb24gYWxsIHF1ZXJ5IHN0cmluZyBwYXJhbWV0ZXJzLiBEZXBlbmRpbmcgb24gaG93IG1hbnkgcXVlcnkgc3RyaW5nIHBhcmFtZXRlcnMgYW5kIHZhbHVlcyB5b3UgaGF2ZSwgdGhpcyBjYW4gYWR2ZXJzZWx5IGFmZmVjdCBwZXJmb3JtYW5jZSBiZWNhdXNlIENsb3VkRnJvbnQgbXVzdCBmb3J3YXJkIG1vcmUgcmVxdWVzdHMgdG8gdGhlIG9yaWdpbi5cbiAqICBJZiB5b3Ugc3BlY2lmeSB0cnVlIGZvciBgYFF1ZXJ5U3RyaW5nYGAgYW5kIHlvdSBzcGVjaWZ5IG9uZSBvciBtb3JlIHZhbHVlcyBmb3IgYGBRdWVyeVN0cmluZ0NhY2hlS2V5c2BgLCBDbG91ZEZyb250IGZvcndhcmRzIGFsbCBxdWVyeSBzdHJpbmcgcGFyYW1ldGVycyB0byB0aGUgb3JpZ2luLCBidXQgaXQgb25seSBjYWNoZXMgYmFzZWQgb24gdGhlIHF1ZXJ5IHN0cmluZyBwYXJhbWV0ZXJzIHRoYXQgeW91IHNwZWNpZnkuXG4gKiAgSWYgeW91IHNwZWNpZnkgZmFsc2UgZm9yIGBgUXVlcnlTdHJpbmdgYCwgQ2xvdWRGcm9udCBkb2Vzbid0IGZvcndhcmQgYW55IHF1ZXJ5IHN0cmluZyBwYXJhbWV0ZXJzIHRvIHRoZSBvcmlnaW4sIGFuZCBkb2Vzbid0IGNhY2hlIGJhc2VkIG9uIHF1ZXJ5IHN0cmluZyBwYXJhbWV0ZXJzLlxuICogIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0NvbmZpZ3VyaW5nIENsb3VkRnJvbnQgdG8gQ2FjaGUgQmFzZWQgb24gUXVlcnkgU3RyaW5nIFBhcmFtZXRlcnNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9RdWVyeVN0cmluZ1BhcmFtZXRlcnMuaHRtbCkgaW4gdGhlICpBbWF6b24gQ2xvdWRGcm9udCBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5RdWVyeVN0cmluZzogYm9vbGVhblxuLyoqXG4gKiBUaGlzIGZpZWxkIGlzIGRlcHJlY2F0ZWQuIFdlIHJlY29tbWVuZCB0aGF0IHlvdSB1c2UgYSBjYWNoZSBwb2xpY3kgb3IgYW4gb3JpZ2luIHJlcXVlc3QgcG9saWN5IGluc3RlYWQgb2YgdGhpcyBmaWVsZC5cbiAqICBJZiB5b3Ugd2FudCB0byBpbmNsdWRlIHF1ZXJ5IHN0cmluZ3MgaW4gdGhlIGNhY2hlIGtleSwgdXNlIGEgY2FjaGUgcG9saWN5LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtDcmVhdGluZyBjYWNoZSBwb2xpY2llc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL2NvbnRyb2xsaW5nLXRoZS1jYWNoZS1rZXkuaHRtbCNjYWNoZS1rZXktY3JlYXRlLWNhY2hlLXBvbGljeSkgaW4gdGhlICpBbWF6b24gQ2xvdWRGcm9udCBEZXZlbG9wZXIgR3VpZGUqLlxuICogIElmIHlvdSB3YW50IHRvIHNlbmQgcXVlcnkgc3RyaW5ncyB0byB0aGUgb3JpZ2luIGJ1dCBub3QgaW5jbHVkZSB0aGVtIGluIHRoZSBjYWNoZSBrZXksIHVzZSBhbiBvcmlnaW4gcmVxdWVzdCBwb2xpY3kuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0NyZWF0aW5nIG9yaWdpbiByZXF1ZXN0IHBvbGljaWVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvY29udHJvbGxpbmctb3JpZ2luLXJlcXVlc3RzLmh0bWwjb3JpZ2luLXJlcXVlc3QtY3JlYXRlLW9yaWdpbi1yZXF1ZXN0LXBvbGljeSkgaW4gdGhlICpBbWF6b24gQ2xvdWRGcm9udCBEZXZlbG9wZXIgR3VpZGUqLlxuICogIEEgY29tcGxleCB0eXBlIHRoYXQgY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHF1ZXJ5IHN0cmluZyBwYXJhbWV0ZXJzIHRoYXQgeW91IHdhbnQgQ2xvdWRGcm9udCB0byB1c2UgZm9yIGNhY2hpbmcgZm9yIHRoaXMgY2FjaGUgYmVoYXZpb3IuXG4gKi9cblF1ZXJ5U3RyaW5nQ2FjaGVLZXlzPzogc3RyaW5nW11cbn1cbi8qKlxuICogVGhlIGdSUEMgY29uZmlndXJhdGlvbiBmb3IgeW91ciBjYWNoZSBiZWhhdmlvci5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHcnBjQ29uZmlnMSB7XG4vKipcbiAqIEVuYWJsZXMgeW91ciBDbG91ZEZyb250IGRpc3RyaWJ1dGlvbiB0byByZWNlaXZlIGdSUEMgcmVxdWVzdHMgYW5kIHRvIHByb3h5IHRoZW0gZGlyZWN0bHkgdG8geW91ciBvcmlnaW5zLlxuICovXG5FbmFibGVkOiBib29sZWFuXG59XG4vKipcbiAqIEEgY29tcGxleCB0eXBlIHRoYXQgY29udHJvbHMgd2hldGhlciBhY2Nlc3MgbG9ncyBhcmUgd3JpdHRlbiBmb3IgdGhlIGRpc3RyaWJ1dGlvbi5cbiAqICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBsb2dnaW5nLCBzZWUgW0FjY2VzcyBMb2dzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvQWNjZXNzTG9ncy5odG1sKSBpbiB0aGUgKkFtYXpvbiBDbG91ZEZyb250IERldmVsb3BlciBHdWlkZSouXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTG9nZ2luZyB7XG4vKipcbiAqIFRoZSBBbWF6b24gUzMgYnVja2V0IHRvIHN0b3JlIHRoZSBhY2Nlc3MgbG9ncyBpbiwgZm9yIGV4YW1wbGUsIGBgYW16bi1zMy1kZW1vLWJ1Y2tldC5zMy5hbWF6b25hd3MuY29tYGAuXG4gKi9cbkJ1Y2tldD86IHN0cmluZ1xuLyoqXG4gKiBTcGVjaWZpZXMgd2hldGhlciB5b3Ugd2FudCBDbG91ZEZyb250IHRvIGluY2x1ZGUgY29va2llcyBpbiBhY2Nlc3MgbG9ncywgc3BlY2lmeSBgYHRydWVgYCBmb3IgYGBJbmNsdWRlQ29va2llc2BgLiBJZiB5b3UgY2hvb3NlIHRvIGluY2x1ZGUgY29va2llcyBpbiBsb2dzLCBDbG91ZEZyb250IGxvZ3MgYWxsIGNvb2tpZXMgcmVnYXJkbGVzcyBvZiBob3cgeW91IGNvbmZpZ3VyZSB0aGUgY2FjaGUgYmVoYXZpb3JzIGZvciB0aGlzIGRpc3RyaWJ1dGlvbi4gSWYgeW91IGRvbid0IHdhbnQgdG8gaW5jbHVkZSBjb29raWVzIHdoZW4geW91IGNyZWF0ZSBhIGRpc3RyaWJ1dGlvbiBvciBpZiB5b3Ugd2FudCB0byBkaXNhYmxlIGluY2x1ZGUgY29va2llcyBmb3IgYW4gZXhpc3RpbmcgZGlzdHJpYnV0aW9uLCBzcGVjaWZ5IGBgZmFsc2VgYCBmb3IgYGBJbmNsdWRlQ29va2llc2BgLlxuICovXG5JbmNsdWRlQ29va2llcz86IGJvb2xlYW5cbi8qKlxuICogQW4gb3B0aW9uYWwgc3RyaW5nIHRoYXQgeW91IHdhbnQgQ2xvdWRGcm9udCB0byBwcmVmaXggdG8gdGhlIGFjY2VzcyBsb2cgYGBmaWxlbmFtZXNgYCBmb3IgdGhpcyBkaXN0cmlidXRpb24sIGZvciBleGFtcGxlLCBgYG15cHJlZml4L2BgLiBJZiB5b3Ugd2FudCB0byBlbmFibGUgbG9nZ2luZywgYnV0IHlvdSBkb24ndCB3YW50IHRvIHNwZWNpZnkgYSBwcmVmaXgsIHlvdSBzdGlsbCBtdXN0IGluY2x1ZGUgYW4gZW1wdHkgYGBQcmVmaXhgYCBlbGVtZW50IGluIHRoZSBgYExvZ2dpbmdgYCBlbGVtZW50LlxuICovXG5QcmVmaXg/OiBzdHJpbmdcbn1cbi8qKlxuICogQSBjb21wbGV4IHR5cGUgdGhhdCBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCBvcmlnaW4gZ3JvdXBzIGZvciB0aGlzIGRpc3RyaWJ1dGlvbi5cbiAqICBTcGVjaWZ5IGEgdmFsdWUgZm9yIGVpdGhlciB0aGUgYGBPcmlnaW5zYGAgb3IgYGBPcmlnaW5Hcm91cHNgYCBwcm9wZXJ0eS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPcmlnaW5Hcm91cHMge1xuLyoqXG4gKiBUaGUgaXRlbXMgKG9yaWdpbiBncm91cHMpIGluIGEgZGlzdHJpYnV0aW9uLlxuICovXG5JdGVtcz86IE9yaWdpbkdyb3VwW11cbi8qKlxuICogVGhlIG51bWJlciBvZiBvcmlnaW4gZ3JvdXBzLlxuICovXG5RdWFudGl0eTogbnVtYmVyXG59XG4vKipcbiAqIEFuIG9yaWdpbiBncm91cCBpbmNsdWRlcyB0d28gb3JpZ2lucyAoYSBwcmltYXJ5IG9yaWdpbiBhbmQgYSBzZWNvbmRhcnkgb3JpZ2luIHRvIGZhaWxvdmVyIHRvKSBhbmQgYSBmYWlsb3ZlciBjcml0ZXJpYSB0aGF0IHlvdSBzcGVjaWZ5LiBZb3UgY3JlYXRlIGFuIG9yaWdpbiBncm91cCB0byBzdXBwb3J0IG9yaWdpbiBmYWlsb3ZlciBpbiBDbG91ZEZyb250LiBXaGVuIHlvdSBjcmVhdGUgb3IgdXBkYXRlIGEgZGlzdHJpYnV0aW9uLCB5b3UgY2FuIHNwZWNpZnkgdGhlIG9yaWdpbiBncm91cCBpbnN0ZWFkIG9mIGEgc2luZ2xlIG9yaWdpbiwgYW5kIENsb3VkRnJvbnQgd2lsbCBmYWlsb3ZlciBmcm9tIHRoZSBwcmltYXJ5IG9yaWdpbiB0byB0aGUgc2Vjb25kYXJ5IG9yaWdpbiB1bmRlciB0aGUgZmFpbG92ZXIgY29uZGl0aW9ucyB0aGF0IHlvdSd2ZSBjaG9zZW4uXG4gKiAgT3B0aW9uYWxseSwgeW91IGNhbiBjaG9vc2Ugc2VsZWN0aW9uIGNyaXRlcmlhIGZvciB5b3VyIG9yaWdpbiBncm91cCB0byBzcGVjaWZ5IGhvdyB5b3VyIG9yaWdpbnMgYXJlIHNlbGVjdGVkIHdoZW4geW91ciBkaXN0cmlidXRpb24gcm91dGVzIHZpZXdlciByZXF1ZXN0cy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPcmlnaW5Hcm91cCB7XG5GYWlsb3ZlckNyaXRlcmlhOiBPcmlnaW5Hcm91cEZhaWxvdmVyQ3JpdGVyaWFcbi8qKlxuICogVGhlIG9yaWdpbiBncm91cCdzIElELlxuICovXG5JZDogc3RyaW5nXG5NZW1iZXJzOiBPcmlnaW5Hcm91cE1lbWJlcnNcbi8qKlxuICogVGhlIHNlbGVjdGlvbiBjcml0ZXJpYSBmb3IgdGhlIG9yaWdpbiBncm91cC4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbQ3JlYXRlIGFuIG9yaWdpbiBncm91cF0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL2hpZ2hfYXZhaWxhYmlsaXR5X29yaWdpbl9mYWlsb3Zlci5odG1sI2NvbmNlcHRfb3JpZ2luX2dyb3Vwcy5jcmVhdGluZykgaW4gdGhlICpBbWF6b24gQ2xvdWRGcm9udCBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5TZWxlY3Rpb25Dcml0ZXJpYT86IChcImRlZmF1bHRcIiB8IFwibWVkaWEtcXVhbGl0eS1iYXNlZFwiKVxufVxuLyoqXG4gKiBBIGNvbXBsZXggdHlwZSB0aGF0IGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IHRoZSBmYWlsb3ZlciBjcml0ZXJpYSBmb3IgYW4gb3JpZ2luIGdyb3VwLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE9yaWdpbkdyb3VwRmFpbG92ZXJDcml0ZXJpYSB7XG5TdGF0dXNDb2RlczogU3RhdHVzQ29kZXNcbn1cbi8qKlxuICogVGhlIHN0YXR1cyBjb2RlcyB0aGF0LCB3aGVuIHJldHVybmVkIGZyb20gdGhlIHByaW1hcnkgb3JpZ2luLCB3aWxsIHRyaWdnZXIgQ2xvdWRGcm9udCB0byBmYWlsb3ZlciB0byB0aGUgc2Vjb25kIG9yaWdpbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdGF0dXNDb2RlcyB7XG4vKipcbiAqIFRoZSBpdGVtcyAoc3RhdHVzIGNvZGVzKSBmb3IgYW4gb3JpZ2luIGdyb3VwLlxuICovXG5JdGVtczogbnVtYmVyW11cbi8qKlxuICogVGhlIG51bWJlciBvZiBzdGF0dXMgY29kZXMuXG4gKi9cblF1YW50aXR5OiBudW1iZXJcbn1cbi8qKlxuICogQSBjb21wbGV4IHR5cGUgdGhhdCBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgb3JpZ2lucyBpbiBhbiBvcmlnaW4gZ3JvdXAuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgT3JpZ2luR3JvdXBNZW1iZXJzIHtcbi8qKlxuICogSXRlbXMgKG9yaWdpbnMpIGluIGFuIG9yaWdpbiBncm91cC5cbiAqL1xuSXRlbXM6IE9yaWdpbkdyb3VwTWVtYmVyW11cbi8qKlxuICogVGhlIG51bWJlciBvZiBvcmlnaW5zIGluIGFuIG9yaWdpbiBncm91cC5cbiAqL1xuUXVhbnRpdHk6IG51bWJlclxufVxuLyoqXG4gKiBBbiBvcmlnaW4gaW4gYW4gb3JpZ2luIGdyb3VwLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE9yaWdpbkdyb3VwTWVtYmVyIHtcbi8qKlxuICogVGhlIElEIGZvciBhbiBvcmlnaW4gaW4gYW4gb3JpZ2luIGdyb3VwLlxuICovXG5PcmlnaW5JZDogc3RyaW5nXG59XG4vKipcbiAqIEFuIG9yaWdpbi5cbiAqICBBbiBvcmlnaW4gaXMgdGhlIGxvY2F0aW9uIHdoZXJlIGNvbnRlbnQgaXMgc3RvcmVkLCBhbmQgZnJvbSB3aGljaCBDbG91ZEZyb250IGdldHMgY29udGVudCB0byBzZXJ2ZSB0byB2aWV3ZXJzLiBUbyBzcGVjaWZ5IGFuIG9yaWdpbjpcbiAqICAgKyAgVXNlIGBgUzNPcmlnaW5Db25maWdgYCB0byBzcGVjaWZ5IGFuIEFtYXpvbiBTMyBidWNrZXQgdGhhdCBpcyBub3QgY29uZmlndXJlZCB3aXRoIHN0YXRpYyB3ZWJzaXRlIGhvc3RpbmcuXG4gKiAgICsgIFVzZSBgYFZwY09yaWdpbkNvbmZpZ2BgIHRvIHNwZWNpZnkgYSBWUEMgb3JpZ2luLlxuICogICArICBVc2UgYGBDdXN0b21PcmlnaW5Db25maWdgYCB0byBzcGVjaWZ5IGFsbCBvdGhlciBraW5kcyBvZiBvcmlnaW5zLCBpbmNsdWRpbmc6XG4gKiAgICsgIEFuIEFtYXpvbiBTMyBidWNrZXQgdGhhdCBpcyBjb25maWd1cmVkIHdpdGggc3RhdGljIHdlYnNpdGUgaG9zdGluZ1xuICogICArICBBbiBFbGFzdGljIExvYWQgQmFsYW5jaW5nIGxvYWQgYmFsYW5jZXJcbiAqICAgKyAgQW4gRU1QbG9uZyBlbmRwb2ludFxuICogICArICBBbiBFTVNsb25nIGNvbnRhaW5lclxuICogICArICBBbnkgb3RoZXIgSFRUUCBzZXJ2ZXIsIHJ1bm5pbmcgb24gYW4gQW1hem9uIEVDMiBpbnN0YW5jZSBvciBhbnkgb3RoZXIga2luZCBvZiBob3N0XG4gKiAgIFxuICogICBcbiAqICBGb3IgdGhlIGN1cnJlbnQgbWF4aW11bSBudW1iZXIgb2Ygb3JpZ2lucyB0aGF0IHlvdSBjYW4gc3BlY2lmeSBwZXIgZGlzdHJpYnV0aW9uLCBzZWUgW0dlbmVyYWwgUXVvdGFzIG9uIFdlYiBEaXN0cmlidXRpb25zXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvY2xvdWRmcm9udC1saW1pdHMuaHRtbCNsaW1pdHMtd2ViLWRpc3RyaWJ1dGlvbnMpIGluIHRoZSAqQW1hem9uIENsb3VkRnJvbnQgRGV2ZWxvcGVyIEd1aWRlKiAocXVvdGFzIHdlcmUgZm9ybWVybHkgcmVmZXJyZWQgdG8gYXMgbGltaXRzKS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPcmlnaW4ge1xuLyoqXG4gKiBUaGUgbnVtYmVyIG9mIHRpbWVzIHRoYXQgQ2xvdWRGcm9udCBhdHRlbXB0cyB0byBjb25uZWN0IHRvIHRoZSBvcmlnaW4uIFRoZSBtaW5pbXVtIG51bWJlciBpcyAxLCB0aGUgbWF4aW11bSBpcyAzLCBhbmQgdGhlIGRlZmF1bHQgKGlmIHlvdSBkb24ndCBzcGVjaWZ5IG90aGVyd2lzZSkgaXMgMy5cbiAqICBGb3IgYSBjdXN0b20gb3JpZ2luIChpbmNsdWRpbmcgYW4gQW1hem9uIFMzIGJ1Y2tldCB0aGF0J3MgY29uZmlndXJlZCB3aXRoIHN0YXRpYyB3ZWJzaXRlIGhvc3RpbmcpLCB0aGlzIHZhbHVlIGFsc28gc3BlY2lmaWVzIHRoZSBudW1iZXIgb2YgdGltZXMgdGhhdCBDbG91ZEZyb250IGF0dGVtcHRzIHRvIGdldCBhIHJlc3BvbnNlIGZyb20gdGhlIG9yaWdpbiwgaW4gdGhlIGNhc2Ugb2YgYW4gW09yaWdpbiBSZXNwb25zZSBUaW1lb3V0XShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvZGlzdHJpYnV0aW9uLXdlYi12YWx1ZXMtc3BlY2lmeS5odG1sI0Rvd25sb2FkRGlzdFZhbHVlc09yaWdpblJlc3BvbnNlVGltZW91dCkuXG4gKiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbT3JpZ2luIENvbm5lY3Rpb24gQXR0ZW1wdHNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9kaXN0cmlidXRpb24td2ViLXZhbHVlcy1zcGVjaWZ5Lmh0bWwjb3JpZ2luLWNvbm5lY3Rpb24tYXR0ZW1wdHMpIGluIHRoZSAqQW1hem9uIENsb3VkRnJvbnQgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuQ29ubmVjdGlvbkF0dGVtcHRzPzogbnVtYmVyXG4vKipcbiAqIFRoZSBudW1iZXIgb2Ygc2Vjb25kcyB0aGF0IENsb3VkRnJvbnQgd2FpdHMgd2hlbiB0cnlpbmcgdG8gZXN0YWJsaXNoIGEgY29ubmVjdGlvbiB0byB0aGUgb3JpZ2luLiBUaGUgbWluaW11bSB0aW1lb3V0IGlzIDEgc2Vjb25kLCB0aGUgbWF4aW11bSBpcyAxMCBzZWNvbmRzLCBhbmQgdGhlIGRlZmF1bHQgKGlmIHlvdSBkb24ndCBzcGVjaWZ5IG90aGVyd2lzZSkgaXMgMTAgc2Vjb25kcy5cbiAqICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtPcmlnaW4gQ29ubmVjdGlvbiBUaW1lb3V0XShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvZGlzdHJpYnV0aW9uLXdlYi12YWx1ZXMtc3BlY2lmeS5odG1sI29yaWdpbi1jb25uZWN0aW9uLXRpbWVvdXQpIGluIHRoZSAqQW1hem9uIENsb3VkRnJvbnQgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuQ29ubmVjdGlvblRpbWVvdXQ/OiBudW1iZXJcbi8qKlxuICogVGhlIHRpbWUgKGluIHNlY29uZHMpIHRoYXQgYSByZXF1ZXN0IGZyb20gQ2xvdWRGcm9udCB0byB0aGUgb3JpZ2luIGNhbiBzdGF5IG9wZW4gYW5kIHdhaXQgZm9yIGEgcmVzcG9uc2UuIElmIHRoZSBjb21wbGV0ZSByZXNwb25zZSBpc24ndCByZWNlaXZlZCBmcm9tIHRoZSBvcmlnaW4gYnkgdGhpcyB0aW1lLCBDbG91ZEZyb250IGVuZHMgdGhlIGNvbm5lY3Rpb24uXG4gKiAgVGhlIHZhbHVlIGZvciBgYFJlc3BvbnNlQ29tcGxldGlvblRpbWVvdXRgYCBtdXN0IGJlIGVxdWFsIHRvIG9yIGdyZWF0ZXIgdGhhbiB0aGUgdmFsdWUgZm9yIGBgT3JpZ2luUmVhZFRpbWVvdXRgYC4gSWYgeW91IGRvbid0IHNldCBhIHZhbHVlIGZvciBgYFJlc3BvbnNlQ29tcGxldGlvblRpbWVvdXRgYCwgQ2xvdWRGcm9udCBkb2Vzbid0IGVuZm9yY2UgYSBtYXhpbXVtIHZhbHVlLlxuICogIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1Jlc3BvbnNlIGNvbXBsZXRpb24gdGltZW91dF0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL0Rvd25sb2FkRGlzdFZhbHVlc09yaWdpbi5odG1sI3Jlc3BvbnNlLWNvbXBsZXRpb24tdGltZW91dCkgaW4gdGhlICpBbWF6b24gQ2xvdWRGcm9udCBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5SZXNwb25zZUNvbXBsZXRpb25UaW1lb3V0PzogbnVtYmVyXG5DdXN0b21PcmlnaW5Db25maWc/OiBDdXN0b21PcmlnaW5Db25maWdcbi8qKlxuICogVGhlIGRvbWFpbiBuYW1lIGZvciB0aGUgb3JpZ2luLlxuICogIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW09yaWdpbiBEb21haW4gTmFtZV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL2Rpc3RyaWJ1dGlvbi13ZWItdmFsdWVzLXNwZWNpZnkuaHRtbCNEb3dubG9hZERpc3RWYWx1ZXNEb21haW5OYW1lKSBpbiB0aGUgKkFtYXpvbiBDbG91ZEZyb250IERldmVsb3BlciBHdWlkZSouXG4gKi9cbkRvbWFpbk5hbWU6IHN0cmluZ1xuLyoqXG4gKiBBIHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgb3JpZ2luLiBUaGlzIHZhbHVlIG11c3QgYmUgdW5pcXVlIHdpdGhpbiB0aGUgZGlzdHJpYnV0aW9uLlxuICogIFVzZSB0aGlzIHZhbHVlIHRvIHNwZWNpZnkgdGhlIGBgVGFyZ2V0T3JpZ2luSWRgYCBpbiBhIGBgQ2FjaGVCZWhhdmlvcmBgIG9yIGBgRGVmYXVsdENhY2hlQmVoYXZpb3JgYC5cbiAqL1xuSWQ6IHN0cmluZ1xuLyoqXG4gKiBUaGUgdW5pcXVlIGlkZW50aWZpZXIgb2YgYW4gb3JpZ2luIGFjY2VzcyBjb250cm9sIGZvciB0aGlzIG9yaWdpbi5cbiAqICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtSZXN0cmljdGluZyBhY2Nlc3MgdG8gYW4gQW1hem9uIFMzIG9yaWdpbl0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL3ByaXZhdGUtY29udGVudC1yZXN0cmljdGluZy1hY2Nlc3MtdG8tczMuaHRtbCkgaW4gdGhlICpBbWF6b24gQ2xvdWRGcm9udCBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5PcmlnaW5BY2Nlc3NDb250cm9sSWQ/OiBzdHJpbmdcbi8qKlxuICogQSBsaXN0IG9mIEhUVFAgaGVhZGVyIG5hbWVzIGFuZCB2YWx1ZXMgdGhhdCBDbG91ZEZyb250IGFkZHMgdG8gdGhlIHJlcXVlc3RzIHRoYXQgaXQgc2VuZHMgdG8gdGhlIG9yaWdpbi5cbiAqICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtBZGRpbmcgQ3VzdG9tIEhlYWRlcnMgdG8gT3JpZ2luIFJlcXVlc3RzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvYWRkLW9yaWdpbi1jdXN0b20taGVhZGVycy5odG1sKSBpbiB0aGUgKkFtYXpvbiBDbG91ZEZyb250IERldmVsb3BlciBHdWlkZSouXG4gKi9cbk9yaWdpbkN1c3RvbUhlYWRlcnM/OiBPcmlnaW5DdXN0b21IZWFkZXJbXVxuLyoqXG4gKiBBbiBvcHRpb25hbCBwYXRoIHRoYXQgQ2xvdWRGcm9udCBhcHBlbmRzIHRvIHRoZSBvcmlnaW4gZG9tYWluIG5hbWUgd2hlbiBDbG91ZEZyb250IHJlcXVlc3RzIGNvbnRlbnQgZnJvbSB0aGUgb3JpZ2luLlxuICogIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW09yaWdpbiBQYXRoXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvZGlzdHJpYnV0aW9uLXdlYi12YWx1ZXMtc3BlY2lmeS5odG1sI0Rvd25sb2FkRGlzdFZhbHVlc09yaWdpblBhdGgpIGluIHRoZSAqQW1hem9uIENsb3VkRnJvbnQgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuT3JpZ2luUGF0aD86IHN0cmluZ1xuT3JpZ2luU2hpZWxkPzogT3JpZ2luU2hpZWxkXG5TM09yaWdpbkNvbmZpZz86IFMzT3JpZ2luQ29uZmlnXG5WcGNPcmlnaW5Db25maWc/OiBWcGNPcmlnaW5Db25maWdcbn1cbi8qKlxuICogVXNlIHRoaXMgdHlwZSB0byBzcGVjaWZ5IGFuIG9yaWdpbiB0aGF0IGlzIG5vdCBhbiBBbWF6b24gUzMgYnVja2V0LCB3aXRoIG9uZSBleGNlcHRpb24uIElmIHRoZSBBbWF6b24gUzMgYnVja2V0IGlzIGNvbmZpZ3VyZWQgd2l0aCBzdGF0aWMgd2Vic2l0ZSBob3N0aW5nLCB1c2UgdGhpcyB0eXBlLiBJZiB0aGUgQW1hem9uIFMzIGJ1Y2tldCBpcyBub3QgY29uZmlndXJlZCB3aXRoIHN0YXRpYyB3ZWJzaXRlIGhvc3RpbmcsIHVzZSB0aGUgYGBTM09yaWdpbkNvbmZpZ2BgIHR5cGUgaW5zdGVhZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDdXN0b21PcmlnaW5Db25maWcge1xuLyoqXG4gKiBUaGUgSFRUUCBwb3J0IHRoYXQgQ2xvdWRGcm9udCB1c2VzIHRvIGNvbm5lY3QgdG8gdGhlIG9yaWdpbi4gU3BlY2lmeSB0aGUgSFRUUCBwb3J0IHRoYXQgdGhlIG9yaWdpbiBsaXN0ZW5zIG9uLlxuICovXG5IVFRQUG9ydD86IG51bWJlclxuLyoqXG4gKiBUaGUgSFRUUFMgcG9ydCB0aGF0IENsb3VkRnJvbnQgdXNlcyB0byBjb25uZWN0IHRvIHRoZSBvcmlnaW4uIFNwZWNpZnkgdGhlIEhUVFBTIHBvcnQgdGhhdCB0aGUgb3JpZ2luIGxpc3RlbnMgb24uXG4gKi9cbkhUVFBTUG9ydD86IG51bWJlclxuLyoqXG4gKiBTcGVjaWZpZXMgaG93IGxvbmcsIGluIHNlY29uZHMsIENsb3VkRnJvbnQgcGVyc2lzdHMgaXRzIGNvbm5lY3Rpb24gdG8gdGhlIG9yaWdpbi4gVGhlIG1pbmltdW0gdGltZW91dCBpcyAxIHNlY29uZCwgdGhlIG1heGltdW0gaXMgMTIwIHNlY29uZHMsIGFuZCB0aGUgZGVmYXVsdCAoaWYgeW91IGRvbid0IHNwZWNpZnkgb3RoZXJ3aXNlKSBpcyA1IHNlY29uZHMuXG4gKiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbS2VlcC1hbGl2ZSB0aW1lb3V0IChjdXN0b20gb3JpZ2lucyBvbmx5KV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL0Rvd25sb2FkRGlzdFZhbHVlc09yaWdpbi5odG1sI0Rvd25sb2FkRGlzdFZhbHVlc09yaWdpbktlZXBhbGl2ZVRpbWVvdXQpIGluIHRoZSAqQW1hem9uIENsb3VkRnJvbnQgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuT3JpZ2luS2VlcGFsaXZlVGltZW91dD86IG51bWJlclxuLyoqXG4gKiBTcGVjaWZpZXMgdGhlIHByb3RvY29sIChIVFRQIG9yIEhUVFBTKSB0aGF0IENsb3VkRnJvbnQgdXNlcyB0byBjb25uZWN0IHRvIHRoZSBvcmlnaW4uIFZhbGlkIHZhbHVlcyBhcmU6XG4gKiAgICsgIGBgaHR0cC1vbmx5YGAg4oCTIENsb3VkRnJvbnQgYWx3YXlzIHVzZXMgSFRUUCB0byBjb25uZWN0IHRvIHRoZSBvcmlnaW4uXG4gKiAgICsgIGBgbWF0Y2gtdmlld2VyYGAg4oCTIENsb3VkRnJvbnQgY29ubmVjdHMgdG8gdGhlIG9yaWdpbiB1c2luZyB0aGUgc2FtZSBwcm90b2NvbCB0aGF0IHRoZSB2aWV3ZXIgdXNlZCB0byBjb25uZWN0IHRvIENsb3VkRnJvbnQuXG4gKiAgICsgIGBgaHR0cHMtb25seWBgIOKAkyBDbG91ZEZyb250IGFsd2F5cyB1c2VzIEhUVFBTIHRvIGNvbm5lY3QgdG8gdGhlIG9yaWdpbi5cbiAqL1xuT3JpZ2luUHJvdG9jb2xQb2xpY3k6IHN0cmluZ1xuLyoqXG4gKiBTcGVjaWZpZXMgaG93IGxvbmcsIGluIHNlY29uZHMsIENsb3VkRnJvbnQgd2FpdHMgZm9yIGEgcmVzcG9uc2UgZnJvbSB0aGUgb3JpZ2luLiBUaGlzIGlzIGFsc28ga25vd24gYXMgdGhlICpvcmlnaW4gcmVzcG9uc2UgdGltZW91dCouIFRoZSBtaW5pbXVtIHRpbWVvdXQgaXMgMSBzZWNvbmQsIHRoZSBtYXhpbXVtIGlzIDEyMCBzZWNvbmRzLCBhbmQgdGhlIGRlZmF1bHQgKGlmIHlvdSBkb24ndCBzcGVjaWZ5IG90aGVyd2lzZSkgaXMgMzAgc2Vjb25kcy5cbiAqICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtSZXNwb25zZSB0aW1lb3V0XShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvRG93bmxvYWREaXN0VmFsdWVzT3JpZ2luLmh0bWwjRG93bmxvYWREaXN0VmFsdWVzT3JpZ2luUmVzcG9uc2VUaW1lb3V0KSBpbiB0aGUgKkFtYXpvbiBDbG91ZEZyb250IERldmVsb3BlciBHdWlkZSouXG4gKi9cbk9yaWdpblJlYWRUaW1lb3V0PzogbnVtYmVyXG4vKipcbiAqIFNwZWNpZmllcyB0aGUgbWluaW11bSBTU0wvVExTIHByb3RvY29sIHRoYXQgQ2xvdWRGcm9udCB1c2VzIHdoZW4gY29ubmVjdGluZyB0byB5b3VyIG9yaWdpbiBvdmVyIEhUVFBTLiBWYWxpZCB2YWx1ZXMgaW5jbHVkZSBgYFNTTHYzYGAsIGBgVExTdjFgYCwgYGBUTFN2MS4xYGAsIGFuZCBgYFRMU3YxLjJgYC5cbiAqICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtNaW5pbXVtIE9yaWdpbiBTU0wgUHJvdG9jb2xdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9Eb3dubG9hZERpc3RWYWx1ZXNPcmlnaW4uaHRtbCNEb3dubG9hZERpc3RWYWx1ZXNPcmlnaW5TU0xQcm90b2NvbHMpIGluIHRoZSAqQW1hem9uIENsb3VkRnJvbnQgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuT3JpZ2luU1NMUHJvdG9jb2xzPzogc3RyaW5nW11cbi8qKlxuICogU3BlY2lmaWVzIHdoaWNoIElQIHByb3RvY29sIENsb3VkRnJvbnQgdXNlcyB3aGVuIGNvbm5lY3RpbmcgdG8geW91ciBvcmlnaW4uIElmIHlvdXIgb3JpZ2luIHVzZXMgYm90aCBJUHY0IGFuZCBJUHY2IHByb3RvY29scywgeW91IGNhbiBjaG9vc2UgYGBkdWFsc3RhY2tgYCB0byBoZWxwIG9wdGltaXplIHJlbGlhYmlsaXR5LlxuICovXG5JcEFkZHJlc3NUeXBlPzogKFwiaXB2NFwiIHwgXCJpcHY2XCIgfCBcImR1YWxzdGFja1wiKVxuT3JpZ2luTXRsc0NvbmZpZz86IE9yaWdpbk10bHNDb25maWdcbn1cbmV4cG9ydCBpbnRlcmZhY2UgT3JpZ2luTXRsc0NvbmZpZyB7XG5DbGllbnRDZXJ0aWZpY2F0ZUFybjogc3RyaW5nXG59XG4vKipcbiAqIEEgY29tcGxleCB0eXBlIHRoYXQgY29udGFpbnMgYGBIZWFkZXJOYW1lYGAgYW5kIGBgSGVhZGVyVmFsdWVgYCBlbGVtZW50cywgaWYgYW55LCBmb3IgdGhpcyBkaXN0cmlidXRpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgT3JpZ2luQ3VzdG9tSGVhZGVyIHtcbi8qKlxuICogVGhlIG5hbWUgb2YgYSBoZWFkZXIgdGhhdCB5b3Ugd2FudCBDbG91ZEZyb250IHRvIHNlbmQgdG8geW91ciBvcmlnaW4uIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0FkZGluZyBDdXN0b20gSGVhZGVycyB0byBPcmlnaW4gUmVxdWVzdHNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9mb3J3YXJkLWN1c3RvbS1oZWFkZXJzLmh0bWwpIGluIHRoZSAqQW1hem9uIENsb3VkRnJvbnQgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuSGVhZGVyTmFtZTogc3RyaW5nXG4vKipcbiAqIFRoZSB2YWx1ZSBmb3IgdGhlIGhlYWRlciB0aGF0IHlvdSBzcGVjaWZpZWQgaW4gdGhlIGBgSGVhZGVyTmFtZWBgIGZpZWxkLlxuICovXG5IZWFkZXJWYWx1ZTogc3RyaW5nXG59XG4vKipcbiAqIENsb3VkRnJvbnQgT3JpZ2luIFNoaWVsZC4gVXNpbmcgT3JpZ2luIFNoaWVsZCBjYW4gaGVscCByZWR1Y2UgdGhlIGxvYWQgb24geW91ciBvcmlnaW4uXG4gKiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbVXNpbmcgT3JpZ2luIFNoaWVsZF0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL29yaWdpbi1zaGllbGQuaHRtbCkgaW4gdGhlICpBbWF6b24gQ2xvdWRGcm9udCBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE9yaWdpblNoaWVsZCB7XG4vKipcbiAqIEEgZmxhZyB0aGF0IHNwZWNpZmllcyB3aGV0aGVyIE9yaWdpbiBTaGllbGQgaXMgZW5hYmxlZC5cbiAqICBXaGVuIGl0J3MgZW5hYmxlZCwgQ2xvdWRGcm9udCByb3V0ZXMgYWxsIHJlcXVlc3RzIHRocm91Z2ggT3JpZ2luIFNoaWVsZCwgd2hpY2ggY2FuIGhlbHAgcHJvdGVjdCB5b3VyIG9yaWdpbi4gV2hlbiBpdCdzIGRpc2FibGVkLCBDbG91ZEZyb250IG1pZ2h0IHNlbmQgcmVxdWVzdHMgZGlyZWN0bHkgdG8geW91ciBvcmlnaW4gZnJvbSBtdWx0aXBsZSBlZGdlIGxvY2F0aW9ucyBvciByZWdpb25hbCBlZGdlIGNhY2hlcy5cbiAqL1xuRW5hYmxlZD86IGJvb2xlYW5cbi8qKlxuICogVGhlIEFXUy1SZWdpb24gZm9yIE9yaWdpbiBTaGllbGQuXG4gKiAgU3BlY2lmeSB0aGUgQVdTLVJlZ2lvbiB0aGF0IGhhcyB0aGUgbG93ZXN0IGxhdGVuY3kgdG8geW91ciBvcmlnaW4uIFRvIHNwZWNpZnkgYSByZWdpb24sIHVzZSB0aGUgcmVnaW9uIGNvZGUsIG5vdCB0aGUgcmVnaW9uIG5hbWUuIEZvciBleGFtcGxlLCBzcGVjaWZ5IHRoZSBVUyBFYXN0IChPaGlvKSByZWdpb24gYXMgYGB1cy1lYXN0LTJgYC5cbiAqICBXaGVuIHlvdSBlbmFibGUgQ2xvdWRGcm9udCBPcmlnaW4gU2hpZWxkLCB5b3UgbXVzdCBzcGVjaWZ5IHRoZSBBV1MtUmVnaW9uIGZvciBPcmlnaW4gU2hpZWxkLiBGb3IgdGhlIGxpc3Qgb2YgQVdTLVJlZ2lvbnMgdGhhdCB5b3UgY2FuIHNwZWNpZnksIGFuZCBmb3IgaGVscCBjaG9vc2luZyB0aGUgYmVzdCBSZWdpb24gZm9yIHlvdXIgb3JpZ2luLCBzZWUgW0Nob29zaW5nIHRoZSBmb3IgT3JpZ2luIFNoaWVsZF0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL29yaWdpbi1zaGllbGQuaHRtbCNjaG9vc2Utb3JpZ2luLXNoaWVsZC1yZWdpb24pIGluIHRoZSAqQW1hem9uIENsb3VkRnJvbnQgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuT3JpZ2luU2hpZWxkUmVnaW9uPzogc3RyaW5nXG59XG4vKipcbiAqIFVzZSB0aGlzIHR5cGUgdG8gc3BlY2lmeSBhbiBvcmlnaW4gdGhhdCBpcyBhbiBBbWF6b24gUzMgYnVja2V0IHRoYXQgaXMgbm90IGNvbmZpZ3VyZWQgd2l0aCBzdGF0aWMgd2Vic2l0ZSBob3N0aW5nLiBUbyBzcGVjaWZ5IGFueSBvdGhlciB0eXBlIG9mIG9yaWdpbiwgaW5jbHVkaW5nIGFuIEFtYXpvbiBTMyBidWNrZXQgdGhhdCBpcyBjb25maWd1cmVkIHdpdGggc3RhdGljIHdlYnNpdGUgaG9zdGluZywgdXNlIHRoZSBgYEN1c3RvbU9yaWdpbkNvbmZpZ2BgIHR5cGUgaW5zdGVhZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTM09yaWdpbkNvbmZpZyB7XG4vKipcbiAqIElmIHlvdSdyZSB1c2luZyBvcmlnaW4gYWNjZXNzIGNvbnRyb2wgKE9BQykgaW5zdGVhZCBvZiBvcmlnaW4gYWNjZXNzIGlkZW50aXR5LCBzcGVjaWZ5IGFuIGVtcHR5IGBgT3JpZ2luQWNjZXNzSWRlbnRpdHlgYCBlbGVtZW50LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtSZXN0cmljdGluZyBhY2Nlc3MgdG8gYW5dKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9wcml2YXRlLWNvbnRlbnQtcmVzdHJpY3RpbmctYWNjZXNzLXRvLW9yaWdpbi5odG1sKSBpbiB0aGUgKkFtYXpvbiBDbG91ZEZyb250IERldmVsb3BlciBHdWlkZSouXG4gKiAgIFRoZSBDbG91ZEZyb250IG9yaWdpbiBhY2Nlc3MgaWRlbnRpdHkgdG8gYXNzb2NpYXRlIHdpdGggdGhlIG9yaWdpbi4gVXNlIGFuIG9yaWdpbiBhY2Nlc3MgaWRlbnRpdHkgdG8gY29uZmlndXJlIHRoZSBvcmlnaW4gc28gdGhhdCB2aWV3ZXJzIGNhbiAqb25seSogYWNjZXNzIG9iamVjdHMgaW4gYW4gQW1hem9uIFMzIGJ1Y2tldCB0aHJvdWdoIENsb3VkRnJvbnQuIFRoZSBmb3JtYXQgb2YgdGhlIHZhbHVlIGlzOlxuICogICBgYG9yaWdpbi1hY2Nlc3MtaWRlbnRpdHkvY2xvdWRmcm9udC9JRC1vZi1vcmlnaW4tYWNjZXNzLWlkZW50aXR5YGAgXG4gKiAgVGhlIGBgSUQtb2Ytb3JpZ2luLWFjY2Vzcy1pZGVudGl0eWBgIGlzIHRoZSB2YWx1ZSB0aGF0IENsb3VkRnJvbnQgcmV0dXJuZWQgaW4gdGhlIGBgSURgYCBlbGVtZW50IHdoZW4geW91IGNyZWF0ZWQgdGhlIG9yaWdpbiBhY2Nlc3MgaWRlbnRpdHkuXG4gKiAgSWYgeW91IHdhbnQgdmlld2VycyB0byBiZSBhYmxlIHRvIGFjY2VzcyBvYmplY3RzIHVzaW5nIGVpdGhlciB0aGUgQ2xvdWRGcm9udCBVUkwgb3IgdGhlIEFtYXpvbiBTMyBVUkwsIHNwZWNpZnkgYW4gZW1wdHkgYGBPcmlnaW5BY2Nlc3NJZGVudGl0eWBgIGVsZW1lbnQuXG4gKiAgVG8gZGVsZXRlIHRoZSBvcmlnaW4gYWNjZXNzIGlkZW50aXR5IGZyb20gYW4gZXhpc3RpbmcgZGlzdHJpYnV0aW9uLCB1cGRhdGUgdGhlIGRpc3RyaWJ1dGlvbiBjb25maWd1cmF0aW9uIGFuZCBpbmNsdWRlIGFuIGVtcHR5IGBgT3JpZ2luQWNjZXNzSWRlbnRpdHlgYCBlbGVtZW50LlxuICogIFRvIHJlcGxhY2UgdGhlIG9yaWdpbiBhY2Nlc3MgaWRlbnRpdHksIHVwZGF0ZSB0aGUgZGlzdHJpYnV0aW9uIGNvbmZpZ3VyYXRpb24gYW5kIHNwZWNpZnkgdGhlIG5ldyBvcmlnaW4gYWNjZXNzIGlkZW50aXR5LlxuICogIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBvcmlnaW4gYWNjZXNzIGlkZW50aXR5LCBzZWUgW1NlcnZpbmcgUHJpdmF0ZSBDb250ZW50IHRocm91Z2ggQ2xvdWRGcm9udF0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL1ByaXZhdGVDb250ZW50Lmh0bWwpIGluIHRoZSAqQW1hem9uIENsb3VkRnJvbnQgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuT3JpZ2luQWNjZXNzSWRlbnRpdHk/OiBzdHJpbmdcbi8qKlxuICogU3BlY2lmaWVzIGhvdyBsb25nLCBpbiBzZWNvbmRzLCBDbG91ZEZyb250IHdhaXRzIGZvciBhIHJlc3BvbnNlIGZyb20gdGhlIG9yaWdpbi4gVGhpcyBpcyBhbHNvIGtub3duIGFzIHRoZSAqb3JpZ2luIHJlc3BvbnNlIHRpbWVvdXQqLiBUaGUgbWluaW11bSB0aW1lb3V0IGlzIDEgc2Vjb25kLCB0aGUgbWF4aW11bSBpcyAxMjAgc2Vjb25kcywgYW5kIHRoZSBkZWZhdWx0IChpZiB5b3UgZG9uJ3Qgc3BlY2lmeSBvdGhlcndpc2UpIGlzIDMwIHNlY29uZHMuXG4gKiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbUmVzcG9uc2UgdGltZW91dF0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL0Rvd25sb2FkRGlzdFZhbHVlc09yaWdpbi5odG1sI0Rvd25sb2FkRGlzdFZhbHVlc09yaWdpblJlc3BvbnNlVGltZW91dCkgaW4gdGhlICpBbWF6b24gQ2xvdWRGcm9udCBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5PcmlnaW5SZWFkVGltZW91dD86IG51bWJlclxufVxuLyoqXG4gKiBUaGUgVlBDIG9yaWdpbiBjb25maWd1cmF0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFZwY09yaWdpbkNvbmZpZyB7XG4vKipcbiAqIFNwZWNpZmllcyBob3cgbG9uZywgaW4gc2Vjb25kcywgQ2xvdWRGcm9udCBwZXJzaXN0cyBpdHMgY29ubmVjdGlvbiB0byB0aGUgb3JpZ2luLiBUaGUgbWluaW11bSB0aW1lb3V0IGlzIDEgc2Vjb25kLCB0aGUgbWF4aW11bSBpcyAxMjAgc2Vjb25kcywgYW5kIHRoZSBkZWZhdWx0IChpZiB5b3UgZG9uJ3Qgc3BlY2lmeSBvdGhlcndpc2UpIGlzIDUgc2Vjb25kcy5cbiAqICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtLZWVwLWFsaXZlIHRpbWVvdXQgKGN1c3RvbSBvcmlnaW5zIG9ubHkpXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvRG93bmxvYWREaXN0VmFsdWVzT3JpZ2luLmh0bWwjRG93bmxvYWREaXN0VmFsdWVzT3JpZ2luS2VlcGFsaXZlVGltZW91dCkgaW4gdGhlICpBbWF6b24gQ2xvdWRGcm9udCBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5PcmlnaW5LZWVwYWxpdmVUaW1lb3V0PzogbnVtYmVyXG4vKipcbiAqIFNwZWNpZmllcyBob3cgbG9uZywgaW4gc2Vjb25kcywgQ2xvdWRGcm9udCB3YWl0cyBmb3IgYSByZXNwb25zZSBmcm9tIHRoZSBvcmlnaW4uIFRoaXMgaXMgYWxzbyBrbm93biBhcyB0aGUgKm9yaWdpbiByZXNwb25zZSB0aW1lb3V0Ki4gVGhlIG1pbmltdW0gdGltZW91dCBpcyAxIHNlY29uZCwgdGhlIG1heGltdW0gaXMgMTIwIHNlY29uZHMsIGFuZCB0aGUgZGVmYXVsdCAoaWYgeW91IGRvbid0IHNwZWNpZnkgb3RoZXJ3aXNlKSBpcyAzMCBzZWNvbmRzLlxuICogIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1Jlc3BvbnNlIHRpbWVvdXRdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9Eb3dubG9hZERpc3RWYWx1ZXNPcmlnaW4uaHRtbCNEb3dubG9hZERpc3RWYWx1ZXNPcmlnaW5SZXNwb25zZVRpbWVvdXQpIGluIHRoZSAqQW1hem9uIENsb3VkRnJvbnQgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuT3JpZ2luUmVhZFRpbWVvdXQ/OiBudW1iZXJcbk93bmVyQWNjb3VudElkPzogc3RyaW5nXG4vKipcbiAqIFRoZSBWUEMgb3JpZ2luIElELlxuICovXG5WcGNPcmlnaW5JZDogc3RyaW5nXG59XG4vKipcbiAqIEEgY29tcGxleCB0eXBlIHRoYXQgaWRlbnRpZmllcyB3YXlzIGluIHdoaWNoIHlvdSB3YW50IHRvIHJlc3RyaWN0IGRpc3RyaWJ1dGlvbiBvZiB5b3VyIGNvbnRlbnQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVzdHJpY3Rpb25zIHtcbkdlb1Jlc3RyaWN0aW9uOiBHZW9SZXN0cmljdGlvblxufVxuLyoqXG4gKiBBIGNvbXBsZXggdHlwZSB0aGF0IGNvbnRyb2xzIHRoZSBjb3VudHJpZXMgaW4gd2hpY2ggeW91ciBjb250ZW50IGlzIGRpc3RyaWJ1dGVkLiBDRiBkZXRlcm1pbmVzIHRoZSBsb2NhdGlvbiBvZiB5b3VyIHVzZXJzIHVzaW5nIGBgTWF4TWluZGBgIEdlb0lQIGRhdGFiYXNlcy4gVG8gZGlzYWJsZSBnZW8gcmVzdHJpY3Rpb24sIHJlbW92ZSB0aGUgW1Jlc3RyaWN0aW9uc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXByb3BlcnRpZXMtY2xvdWRmcm9udC1kaXN0cmlidXRpb24tZGlzdHJpYnV0aW9uY29uZmlnLmh0bWwjY2ZuLWNsb3VkZnJvbnQtZGlzdHJpYnV0aW9uLWRpc3RyaWJ1dGlvbmNvbmZpZy1yZXN0cmljdGlvbnMpIHByb3BlcnR5IGZyb20geW91ciBzdGFjayB0ZW1wbGF0ZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHZW9SZXN0cmljdGlvbiB7XG4vKipcbiAqIEEgY29tcGxleCB0eXBlIHRoYXQgY29udGFpbnMgYSBgYExvY2F0aW9uYGAgZWxlbWVudCBmb3IgZWFjaCBjb3VudHJ5IGluIHdoaWNoIHlvdSB3YW50IENsb3VkRnJvbnQgZWl0aGVyIHRvIGRpc3RyaWJ1dGUgeW91ciBjb250ZW50IChgYHdoaXRlbGlzdGBgKSBvciBub3QgZGlzdHJpYnV0ZSB5b3VyIGNvbnRlbnQgKGBgYmxhY2tsaXN0YGApLlxuICogIFRoZSBgYExvY2F0aW9uYGAgZWxlbWVudCBpcyBhIHR3by1sZXR0ZXIsIHVwcGVyY2FzZSBjb3VudHJ5IGNvZGUgZm9yIGEgY291bnRyeSB0aGF0IHlvdSB3YW50IHRvIGluY2x1ZGUgaW4geW91ciBgYGJsYWNrbGlzdGBgIG9yIGBgd2hpdGVsaXN0YGAuIEluY2x1ZGUgb25lIGBgTG9jYXRpb25gYCBlbGVtZW50IGZvciBlYWNoIGNvdW50cnkuXG4gKiAgQ2xvdWRGcm9udCBhbmQgYGBNYXhNaW5kYGAgYm90aCB1c2UgYGBJU08gMzE2NmBgIGNvdW50cnkgY29kZXMuIEZvciB0aGUgY3VycmVudCBsaXN0IG9mIGNvdW50cmllcyBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgY29kZXMsIHNlZSBgYElTTyAzMTY2LTEtYWxwaGEtMmBgIGNvZGUgb24gdGhlICpJbnRlcm5hdGlvbmFsIE9yZ2FuaXphdGlvbiBmb3IgU3RhbmRhcmRpemF0aW9uKiB3ZWJzaXRlLiBZb3UgY2FuIGFsc28gcmVmZXIgdG8gdGhlIGNvdW50cnkgbGlzdCBvbiB0aGUgQ2xvdWRGcm9udCBjb25zb2xlLCB3aGljaCBpbmNsdWRlcyBib3RoIGNvdW50cnkgbmFtZXMgYW5kIGNvZGVzLlxuICovXG5Mb2NhdGlvbnM/OiBzdHJpbmdbXVxuLyoqXG4gKiBUaGUgbWV0aG9kIHRoYXQgeW91IHdhbnQgdG8gdXNlIHRvIHJlc3RyaWN0IGRpc3RyaWJ1dGlvbiBvZiB5b3VyIGNvbnRlbnQgYnkgY291bnRyeTpcbiAqICAgKyAgYGBub25lYGA6IE5vIGdlbyByZXN0cmljdGlvbiBpcyBlbmFibGVkLCBtZWFuaW5nIGFjY2VzcyB0byBjb250ZW50IGlzIG5vdCByZXN0cmljdGVkIGJ5IGNsaWVudCBnZW8gbG9jYXRpb24uXG4gKiAgICsgIGBgYmxhY2tsaXN0YGA6IFRoZSBgYExvY2F0aW9uYGAgZWxlbWVudHMgc3BlY2lmeSB0aGUgY291bnRyaWVzIGluIHdoaWNoIHlvdSBkb24ndCB3YW50IENsb3VkRnJvbnQgdG8gZGlzdHJpYnV0ZSB5b3VyIGNvbnRlbnQuXG4gKiAgICsgIGBgd2hpdGVsaXN0YGA6IFRoZSBgYExvY2F0aW9uYGAgZWxlbWVudHMgc3BlY2lmeSB0aGUgY291bnRyaWVzIGluIHdoaWNoIHlvdSB3YW50IENsb3VkRnJvbnQgdG8gZGlzdHJpYnV0ZSB5b3VyIGNvbnRlbnQuXG4gKi9cblJlc3RyaWN0aW9uVHlwZTogc3RyaW5nXG59XG4vKipcbiAqIFRoZSBvcmlnaW4gYXMgYW4gUzMgYnVja2V0LlxuICogICBUaGlzIHByb3BlcnR5IGlzIGxlZ2FjeS4gV2UgcmVjb21tZW5kIHRoYXQgeW91IHVzZSBbT3JpZ2luXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcHJvcGVydGllcy1jbG91ZGZyb250LWRpc3RyaWJ1dGlvbi1vcmlnaW4uaHRtbCkgaW5zdGVhZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMZWdhY3lTM09yaWdpbiB7XG4vKipcbiAqIFRoZSBkb21haW4gbmFtZSBhc3NpZ25lZCB0byB5b3VyIENGIGRpc3RyaWJ1dGlvbi5cbiAqL1xuRE5TTmFtZTogc3RyaW5nXG4vKipcbiAqIFRoZSBDRiBvcmlnaW4gYWNjZXNzIGlkZW50aXR5IHRvIGFzc29jaWF0ZSB3aXRoIHRoZSBkaXN0cmlidXRpb24uIFVzZSBhbiBvcmlnaW4gYWNjZXNzIGlkZW50aXR5IHRvIGNvbmZpZ3VyZSB0aGUgZGlzdHJpYnV0aW9uIHNvIHRoYXQgZW5kIHVzZXJzIGNhbiBvbmx5IGFjY2VzcyBvYmplY3RzIGluIGFuIFMzIHRocm91Z2ggQ0YuXG4gKiAgIFRoaXMgcHJvcGVydHkgaXMgbGVnYWN5LiBXZSByZWNvbW1lbmQgdGhhdCB5b3UgdXNlIFtPcmlnaW5BY2Nlc3NDb250cm9sXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcmVzb3VyY2UtY2xvdWRmcm9udC1vcmlnaW5hY2Nlc3Njb250cm9sLmh0bWwpIGluc3RlYWQuXG4gKi9cbk9yaWdpbkFjY2Vzc0lkZW50aXR5Pzogc3RyaW5nXG59XG4vKipcbiAqIEEgbGlzdCBvZiBwYXJhbWV0ZXIgdmFsdWVzIHRvIGFkZCB0byB0aGUgcmVzb3VyY2UuIEEgcGFyYW1ldGVyIGlzIHNwZWNpZmllZCBhcyBhIGtleS12YWx1ZSBwYWlyLiBBIHZhbGlkIHBhcmFtZXRlciB2YWx1ZSBtdXN0IGV4aXN0IGZvciBhbnkgcGFyYW1ldGVyIHRoYXQgaXMgbWFya2VkIGFzIHJlcXVpcmVkIGluIHRoZSBtdWx0aS10ZW5hbnQgZGlzdHJpYnV0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBhcmFtZXRlckRlZmluaXRpb24ge1xuLyoqXG4gKiBUaGUgbmFtZSBvZiB0aGUgcGFyYW1ldGVyLlxuICovXG5OYW1lOiBzdHJpbmdcbi8qKlxuICogVGhlIHZhbHVlIHRoYXQgeW91IGFzc2lnbmVkIHRvIHRoZSBwYXJhbWV0ZXIuXG4gKi9cbkRlZmluaXRpb246IHtcblN0cmluZ1NjaGVtYT86IHtcbkNvbW1lbnQ/OiBzdHJpbmdcbkRlZmF1bHRWYWx1ZT86IHN0cmluZ1xuUmVxdWlyZWQ6IGJvb2xlYW5cbn1cbn1cbn1cbmV4cG9ydCBpbnRlcmZhY2UgVmlld2VyTXRsc0NvbmZpZyB7XG5Nb2RlPzogKFwicmVxdWlyZWRcIiB8IFwib3B0aW9uYWxcIilcblRydXN0U3RvcmVDb25maWc/OiBUcnVzdFN0b3JlQ29uZmlnXG59XG5leHBvcnQgaW50ZXJmYWNlIFRydXN0U3RvcmVDb25maWcge1xuVHJ1c3RTdG9yZUlkOiBzdHJpbmdcbkFkdmVydGlzZVRydXN0U3RvcmVDYU5hbWVzPzogYm9vbGVhblxuSWdub3JlQ2VydGlmaWNhdGVFeHBpcnk/OiBib29sZWFuXG59XG4vKipcbiAqIEEgY29tcGxleCB0eXBlIHRoYXQgZGV0ZXJtaW5lcyB0aGUgZGlzdHJpYnV0aW9uJ3MgU1NML1RMUyBjb25maWd1cmF0aW9uIGZvciBjb21tdW5pY2F0aW5nIHdpdGggdmlld2Vycy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBWaWV3ZXJDZXJ0aWZpY2F0ZSB7XG4vKipcbiAqIEluIENsb3VkRm9ybWF0aW9uLCB0aGlzIGZpZWxkIG5hbWUgaXMgYGBBY21DZXJ0aWZpY2F0ZUFybmBgLiBOb3RlIHRoZSBkaWZmZXJlbnQgY2FwaXRhbGl6YXRpb24uXG4gKiAgIElmIHRoZSBkaXN0cmlidXRpb24gdXNlcyBgYEFsaWFzZXNgYCAoYWx0ZXJuYXRlIGRvbWFpbiBuYW1lcyBvciBDTkFNRXMpIGFuZCB0aGUgU1NML1RMUyBjZXJ0aWZpY2F0ZSBpcyBzdG9yZWQgaW4gWyhBQ00pXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYWNtL2xhdGVzdC91c2VyZ3VpZGUvYWNtLW92ZXJ2aWV3Lmh0bWwpLCBwcm92aWRlIHRoZSBBbWF6b24gUmVzb3VyY2UgTmFtZSAoQVJOKSBvZiB0aGUgQUNNIGNlcnRpZmljYXRlLiBDbG91ZEZyb250IG9ubHkgc3VwcG9ydHMgQUNNIGNlcnRpZmljYXRlcyBpbiB0aGUgVVMgRWFzdCAoTi4gVmlyZ2luaWEpIFJlZ2lvbiAoYGB1cy1lYXN0LTFgYCkuXG4gKiAgSWYgeW91IHNwZWNpZnkgYW4gQUNNIGNlcnRpZmljYXRlIEFSTiwgeW91IG11c3QgYWxzbyBzcGVjaWZ5IHZhbHVlcyBmb3IgYGBNaW5pbXVtUHJvdG9jb2xWZXJzaW9uYGAgYW5kIGBgU1NMU3VwcG9ydE1ldGhvZGBgLiAoSW4gQ2xvdWRGb3JtYXRpb24sIHRoZSBmaWVsZCBuYW1lIGlzIGBgU3NsU3VwcG9ydE1ldGhvZGBgLiBOb3RlIHRoZSBkaWZmZXJlbnQgY2FwaXRhbGl6YXRpb24uKVxuICovXG5BY21DZXJ0aWZpY2F0ZUFybj86IHN0cmluZ1xuLyoqXG4gKiBJZiB0aGUgZGlzdHJpYnV0aW9uIHVzZXMgdGhlIENsb3VkRnJvbnQgZG9tYWluIG5hbWUgc3VjaCBhcyBgYGQxMTExMTFhYmNkZWY4LmNsb3VkZnJvbnQubmV0YGAsIHNldCB0aGlzIGZpZWxkIHRvIGBgdHJ1ZWBgLlxuICogIElmIHRoZSBkaXN0cmlidXRpb24gdXNlcyBgYEFsaWFzZXNgYCAoYWx0ZXJuYXRlIGRvbWFpbiBuYW1lcyBvciBDTkFNRXMpLCBvbWl0IHRoaXMgZmllbGQgYW5kIHNwZWNpZnkgdmFsdWVzIGZvciB0aGUgZm9sbG93aW5nIGZpZWxkczpcbiAqICAgKyAgYGBBY21DZXJ0aWZpY2F0ZUFybmBgIG9yIGBgSWFtQ2VydGlmaWNhdGVJZGBgIChzcGVjaWZ5IGEgdmFsdWUgZm9yIG9uZSwgbm90IGJvdGgpIFxuICogICArICAgYGBNaW5pbXVtUHJvdG9jb2xWZXJzaW9uYGAgXG4gKiAgICsgICBgYFNzbFN1cHBvcnRNZXRob2RgYFxuICovXG5DbG91ZEZyb250RGVmYXVsdENlcnRpZmljYXRlPzogYm9vbGVhblxuLyoqXG4gKiBUaGlzIGZpZWxkIG9ubHkgc3VwcG9ydHMgc3RhbmRhcmQgZGlzdHJpYnV0aW9ucy4gWW91IGNhbid0IHNwZWNpZnkgdGhpcyBmaWVsZCBmb3IgbXVsdGktdGVuYW50IGRpc3RyaWJ1dGlvbnMuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1Vuc3VwcG9ydGVkIGZlYXR1cmVzIGZvciBTYWFTIE1hbmFnZXIgZm9yIEFtYXpvbiBDbG91ZEZyb250XShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvZGlzdHJpYnV0aW9uLWNvbmZpZy1vcHRpb25zLmh0bWwjdW5zdXBwb3J0ZWQtc2FhcykgaW4gdGhlICpBbWF6b24gQ2xvdWRGcm9udCBEZXZlbG9wZXIgR3VpZGUqLlxuICogICAgSW4gQ2xvdWRGb3JtYXRpb24sIHRoaXMgZmllbGQgbmFtZSBpcyBgYElhbUNlcnRpZmljYXRlSWRgYC4gTm90ZSB0aGUgZGlmZmVyZW50IGNhcGl0YWxpemF0aW9uLlxuICogICBJZiB0aGUgZGlzdHJpYnV0aW9uIHVzZXMgYGBBbGlhc2VzYGAgKGFsdGVybmF0ZSBkb21haW4gbmFtZXMgb3IgQ05BTUVzKSBhbmQgdGhlIFNTTC9UTFMgY2VydGlmaWNhdGUgaXMgc3RvcmVkIGluIFsoSUFNKV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0lBTS9sYXRlc3QvVXNlckd1aWRlL2lkX2NyZWRlbnRpYWxzX3NlcnZlci1jZXJ0cy5odG1sKSwgcHJvdmlkZSB0aGUgSUQgb2YgdGhlIElBTSBjZXJ0aWZpY2F0ZS5cbiAqICBJZiB5b3Ugc3BlY2lmeSBhbiBJQU0gY2VydGlmaWNhdGUgSUQsIHlvdSBtdXN0IGFsc28gc3BlY2lmeSB2YWx1ZXMgZm9yIGBgTWluaW11bVByb3RvY29sVmVyc2lvbmBgIGFuZCBgYFNTTFN1cHBvcnRNZXRob2RgYC4gKEluIENsb3VkRm9ybWF0aW9uLCB0aGUgZmllbGQgbmFtZSBpcyBgYFNzbFN1cHBvcnRNZXRob2RgYC4gTm90ZSB0aGUgZGlmZmVyZW50IGNhcGl0YWxpemF0aW9uLilcbiAqL1xuSWFtQ2VydGlmaWNhdGVJZD86IHN0cmluZ1xuLyoqXG4gKiBJZiB0aGUgZGlzdHJpYnV0aW9uIHVzZXMgYGBBbGlhc2VzYGAgKGFsdGVybmF0ZSBkb21haW4gbmFtZXMgb3IgQ05BTUVzKSwgc3BlY2lmeSB0aGUgc2VjdXJpdHkgcG9saWN5IHRoYXQgeW91IHdhbnQgQ2xvdWRGcm9udCB0byB1c2UgZm9yIEhUVFBTIGNvbm5lY3Rpb25zIHdpdGggdmlld2Vycy4gVGhlIHNlY3VyaXR5IHBvbGljeSBkZXRlcm1pbmVzIHR3byBzZXR0aW5nczpcbiAqICAgKyAgVGhlIG1pbmltdW0gU1NML1RMUyBwcm90b2NvbCB0aGF0IENsb3VkRnJvbnQgY2FuIHVzZSB0byBjb21tdW5pY2F0ZSB3aXRoIHZpZXdlcnMuXG4gKiAgICsgIFRoZSBjaXBoZXJzIHRoYXQgQ2xvdWRGcm9udCBjYW4gdXNlIHRvIGVuY3J5cHQgdGhlIGNvbnRlbnQgdGhhdCBpdCByZXR1cm5zIHRvIHZpZXdlcnMuXG4gKiAgIFxuICogIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1NlY3VyaXR5IFBvbGljeV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL2Rpc3RyaWJ1dGlvbi13ZWItdmFsdWVzLXNwZWNpZnkuaHRtbCNEb3dubG9hZERpc3RWYWx1ZXMtc2VjdXJpdHktcG9saWN5KSBhbmQgW1N1cHBvcnRlZCBQcm90b2NvbHMgYW5kIENpcGhlcnMgQmV0d2VlbiBWaWV3ZXJzIGFuZCBDbG91ZEZyb250XShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvc2VjdXJlLWNvbm5lY3Rpb25zLXN1cHBvcnRlZC12aWV3ZXItcHJvdG9jb2xzLWNpcGhlcnMuaHRtbCNzZWN1cmUtY29ubmVjdGlvbnMtc3VwcG9ydGVkLWNpcGhlcnMpIGluIHRoZSAqQW1hem9uIENsb3VkRnJvbnQgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqICAgT24gdGhlIENsb3VkRnJvbnQgY29uc29sZSwgdGhpcyBzZXR0aW5nIGlzIGNhbGxlZCAqU2VjdXJpdHkgUG9saWN5Ki5cbiAqICAgV2hlbiB5b3UncmUgdXNpbmcgU05JIG9ubHkgKHlvdSBzZXQgYGBTU0xTdXBwb3J0TWV0aG9kYGAgdG8gYGBzbmktb25seWBgKSwgeW91IG11c3Qgc3BlY2lmeSBgYFRMU3YxYGAgb3IgaGlnaGVyLiAoSW4gQ2xvdWRGb3JtYXRpb24sIHRoZSBmaWVsZCBuYW1lIGlzIGBgU3NsU3VwcG9ydE1ldGhvZGBgLiBOb3RlIHRoZSBkaWZmZXJlbnQgY2FwaXRhbGl6YXRpb24uKVxuICogIElmIHRoZSBkaXN0cmlidXRpb24gdXNlcyB0aGUgQ2xvdWRGcm9udCBkb21haW4gbmFtZSBzdWNoIGFzIGBgZDExMTExMWFiY2RlZjguY2xvdWRmcm9udC5uZXRgYCAoeW91IHNldCBgYENsb3VkRnJvbnREZWZhdWx0Q2VydGlmaWNhdGVgYCB0byBgYHRydWVgYCksIENsb3VkRnJvbnQgYXV0b21hdGljYWxseSBzZXRzIHRoZSBzZWN1cml0eSBwb2xpY3kgdG8gYGBUTFN2MWBgIHJlZ2FyZGxlc3Mgb2YgdGhlIHZhbHVlIHRoYXQgeW91IHNldCBoZXJlLlxuICovXG5NaW5pbXVtUHJvdG9jb2xWZXJzaW9uPzogc3RyaW5nXG4vKipcbiAqIEluIENsb3VkRm9ybWF0aW9uLCB0aGlzIGZpZWxkIG5hbWUgaXMgYGBTc2xTdXBwb3J0TWV0aG9kYGAuIE5vdGUgdGhlIGRpZmZlcmVudCBjYXBpdGFsaXphdGlvbi5cbiAqICAgSWYgdGhlIGRpc3RyaWJ1dGlvbiB1c2VzIGBgQWxpYXNlc2BgIChhbHRlcm5hdGUgZG9tYWluIG5hbWVzIG9yIENOQU1FcyksIHNwZWNpZnkgd2hpY2ggdmlld2VycyB0aGUgZGlzdHJpYnV0aW9uIGFjY2VwdHMgSFRUUFMgY29ubmVjdGlvbnMgZnJvbS5cbiAqICAgKyAgYGBzbmktb25seWBgIOKAkyBUaGUgZGlzdHJpYnV0aW9uIGFjY2VwdHMgSFRUUFMgY29ubmVjdGlvbnMgZnJvbSBvbmx5IHZpZXdlcnMgdGhhdCBzdXBwb3J0IFtzZXJ2ZXIgbmFtZSBpbmRpY2F0aW9uIChTTkkpXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvU2VydmVyX05hbWVfSW5kaWNhdGlvbikuIFRoaXMgaXMgcmVjb21tZW5kZWQuIE1vc3QgYnJvd3NlcnMgYW5kIGNsaWVudHMgc3VwcG9ydCBTTkkuXG4gKiAgICsgIGBgdmlwYGAg4oCTIFRoZSBkaXN0cmlidXRpb24gYWNjZXB0cyBIVFRQUyBjb25uZWN0aW9ucyBmcm9tIGFsbCB2aWV3ZXJzIGluY2x1ZGluZyB0aG9zZSB0aGF0IGRvbid0IHN1cHBvcnQgU05JLiBUaGlzIGlzIG5vdCByZWNvbW1lbmRlZCwgYW5kIHJlc3VsdHMgaW4gYWRkaXRpb25hbCBtb250aGx5IGNoYXJnZXMgZnJvbSBDbG91ZEZyb250LlxuICogICArICBgYHN0YXRpYy1pcGBgIC0gRG8gbm90IHNwZWNpZnkgdGhpcyB2YWx1ZSB1bmxlc3MgeW91ciBkaXN0cmlidXRpb24gaGFzIGJlZW4gZW5hYmxlZCBmb3IgdGhpcyBmZWF0dXJlIGJ5IHRoZSBDbG91ZEZyb250IHRlYW0uIElmIHlvdSBoYXZlIGEgdXNlIGNhc2UgdGhhdCByZXF1aXJlcyBzdGF0aWMgSVAgYWRkcmVzc2VzIGZvciBhIGRpc3RyaWJ1dGlvbiwgY29udGFjdCBDbG91ZEZyb250IHRocm91Z2ggdGhlIFtDZW50ZXJdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9zdXBwb3J0L2hvbWUpLlxuICogICBcbiAqICBJZiB0aGUgZGlzdHJpYnV0aW9uIHVzZXMgdGhlIENsb3VkRnJvbnQgZG9tYWluIG5hbWUgc3VjaCBhcyBgYGQxMTExMTFhYmNkZWY4LmNsb3VkZnJvbnQubmV0YGAsIGRvbid0IHNldCBhIHZhbHVlIGZvciB0aGlzIGZpZWxkLlxuICovXG5Tc2xTdXBwb3J0TWV0aG9kPzogc3RyaW5nXG59XG4vKipcbiAqIEEgY29tcGxleCB0eXBlIHRoYXQgY29udGFpbnMgYGBUYWdgYCBrZXkgYW5kIGBgVGFnYGAgdmFsdWUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGFnIHtcbi8qKlxuICogQSBzdHJpbmcgdGhhdCBjb250YWlucyBgYFRhZ2BgIGtleS5cbiAqICBUaGUgc3RyaW5nIGxlbmd0aCBzaG91bGQgYmUgYmV0d2VlbiAxIGFuZCAxMjggY2hhcmFjdGVycy4gVmFsaWQgY2hhcmFjdGVycyBpbmNsdWRlIGBgYS16YGAsIGBgQS1aYGAsIGBgMC05YGAsIHNwYWNlLCBhbmQgdGhlIHNwZWNpYWwgY2hhcmFjdGVycyBgYF8gLSAuIDogLyA9ICsgQGBgLlxuICovXG5LZXk6IHN0cmluZ1xuLyoqXG4gKiBBIHN0cmluZyB0aGF0IGNvbnRhaW5zIGFuIG9wdGlvbmFsIGBgVGFnYGAgdmFsdWUuXG4gKiAgVGhlIHN0cmluZyBsZW5ndGggc2hvdWxkIGJlIGJldHdlZW4gMCBhbmQgMjU2IGNoYXJhY3RlcnMuIFZhbGlkIGNoYXJhY3RlcnMgaW5jbHVkZSBgYGEtemBgLCBgYEEtWmBgLCBgYDAtOWBgLCBzcGFjZSwgYW5kIHRoZSBzcGVjaWFsIGNoYXJhY3RlcnMgYGBfIC0gLiA6IC8gPSArIEBgYC5cbiAqL1xuVmFsdWU6IHN0cmluZ1xufVxuIl19
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzLWNsb3VkZnJvbnQtZGlzdHJpYnV0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiYXdzLWNsb3VkZnJvbnQtZGlzdHJpYnV0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEEgZGlzdHJpYnV0aW9uIHRlbGxzIENsb3VkRnJvbnQgd2hlcmUgeW91IHdhbnQgY29udGVudCB0byBiZSBkZWxpdmVyZWQgZnJvbSwgYW5kIHRoZSBkZXRhaWxzIGFib3V0IGhvdyB0byB0cmFjayBhbmQgbWFuYWdlIGNvbnRlbnQgZGVsaXZlcnkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgX0FXU19DTE9VREZST05UX0RJU1RSSUJVVElPTiB7XG5EaXN0cmlidXRpb25Db25maWc6IERpc3RyaWJ1dGlvbkNvbmZpZ1xuRG9tYWluTmFtZT86IHN0cmluZ1xuSWQ/OiBzdHJpbmdcbi8qKlxuICogQSBjb21wbGV4IHR5cGUgdGhhdCBjb250YWlucyB6ZXJvIG9yIG1vcmUgYGBUYWdgYCBlbGVtZW50cy5cbiAqL1xuVGFncz86IFRhZ1tdXG59XG4vKipcbiAqIFRoZSBkaXN0cmlidXRpb24ncyBjb25maWd1cmF0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERpc3RyaWJ1dGlvbkNvbmZpZyB7XG4vKipcbiAqIFRoaXMgZmllbGQgb25seSBzdXBwb3J0cyBzdGFuZGFyZCBkaXN0cmlidXRpb25zLiBZb3UgY2FuJ3Qgc3BlY2lmeSB0aGlzIGZpZWxkIGZvciBtdWx0aS10ZW5hbnQgZGlzdHJpYnV0aW9ucy4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbVW5zdXBwb3J0ZWQgZmVhdHVyZXMgZm9yIFNhYVMgTWFuYWdlciBmb3IgQW1hem9uIENsb3VkRnJvbnRdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9kaXN0cmlidXRpb24tY29uZmlnLW9wdGlvbnMuaHRtbCN1bnN1cHBvcnRlZC1zYWFzKSBpbiB0aGUgKkFtYXpvbiBDbG91ZEZyb250IERldmVsb3BlciBHdWlkZSouXG4gKiAgIEEgY29tcGxleCB0eXBlIHRoYXQgY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgQ05BTUVzIChhbHRlcm5hdGUgZG9tYWluIG5hbWVzKSwgaWYgYW55LCBmb3IgdGhpcyBkaXN0cmlidXRpb24uXG4gKi9cbkFsaWFzZXM/OiBzdHJpbmdbXVxuLyoqXG4gKiBUbyB1c2UgdGhpcyBmaWVsZCBmb3IgYSBtdWx0aS10ZW5hbnQgZGlzdHJpYnV0aW9uLCB1c2UgYSBjb25uZWN0aW9uIGdyb3VwIGluc3RlYWQuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0Nvbm5lY3Rpb25Hcm91cF0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2Nsb3VkZnJvbnQvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ29ubmVjdGlvbkdyb3VwLmh0bWwpLlxuICogICBJRCBvZiB0aGUgQW55Y2FzdCBzdGF0aWMgSVAgbGlzdCB0aGF0IGlzIGFzc29jaWF0ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuICovXG5BbnljYXN0SXBMaXN0SWQ/OiBzdHJpbmdcbi8qKlxuICogQW4gYWxpYXMgZm9yIHRoZSBDRiBkaXN0cmlidXRpb24ncyBkb21haW4gbmFtZS5cbiAqICAgVGhpcyBwcm9wZXJ0eSBpcyBsZWdhY3kuIFdlIHJlY29tbWVuZCB0aGF0IHlvdSB1c2UgW0FsaWFzZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1wcm9wZXJ0aWVzLWNsb3VkZnJvbnQtZGlzdHJpYnV0aW9uLWRpc3RyaWJ1dGlvbmNvbmZpZy5odG1sI2Nmbi1jbG91ZGZyb250LWRpc3RyaWJ1dGlvbi1kaXN0cmlidXRpb25jb25maWctYWxpYXNlcykgaW5zdGVhZC5cbiAqL1xuQ05BTUVzPzogc3RyaW5nW11cbi8qKlxuICogQSBjb21wbGV4IHR5cGUgdGhhdCBjb250YWlucyB6ZXJvIG9yIG1vcmUgYGBDYWNoZUJlaGF2aW9yYGAgZWxlbWVudHMuXG4gKi9cbkNhY2hlQmVoYXZpb3JzPzogQ2FjaGVCZWhhdmlvcltdXG4vKipcbiAqIEEgY29tbWVudCB0byBkZXNjcmliZSB0aGUgZGlzdHJpYnV0aW9uLiBUaGUgY29tbWVudCBjYW5ub3QgYmUgbG9uZ2VyIHRoYW4gMTI4IGNoYXJhY3RlcnMuXG4gKi9cbkNvbW1lbnQ/OiBzdHJpbmdcbi8qKlxuICogVGhpcyBmaWVsZCBzcGVjaWZpZXMgd2hldGhlciB0aGUgY29ubmVjdGlvbiBtb2RlIGlzIHRocm91Z2ggYSBzdGFuZGFyZCBkaXN0cmlidXRpb24gKGRpcmVjdCkgb3IgYSBtdWx0aS10ZW5hbnQgZGlzdHJpYnV0aW9uIHdpdGggZGlzdHJpYnV0aW9uIHRlbmFudHMgKHRlbmFudC1vbmx5KS5cbiAqL1xuQ29ubmVjdGlvbk1vZGU/OiAoXCJkaXJlY3RcIiB8IFwidGVuYW50LW9ubHlcIilcbkNvbm5lY3Rpb25GdW5jdGlvbkFzc29jaWF0aW9uPzogQ29ubmVjdGlvbkZ1bmN0aW9uQXNzb2NpYXRpb25cbi8qKlxuICogVGhpcyBmaWVsZCBvbmx5IHN1cHBvcnRzIHN0YW5kYXJkIGRpc3RyaWJ1dGlvbnMuIFlvdSBjYW4ndCBzcGVjaWZ5IHRoaXMgZmllbGQgZm9yIG11bHRpLXRlbmFudCBkaXN0cmlidXRpb25zLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtVbnN1cHBvcnRlZCBmZWF0dXJlcyBmb3IgU2FhUyBNYW5hZ2VyIGZvciBBbWF6b24gQ2xvdWRGcm9udF0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL2Rpc3RyaWJ1dGlvbi1jb25maWctb3B0aW9ucy5odG1sI3Vuc3VwcG9ydGVkLXNhYXMpIGluIHRoZSAqQW1hem9uIENsb3VkRnJvbnQgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqICAgVGhlIGlkZW50aWZpZXIgb2YgYSBjb250aW51b3VzIGRlcGxveW1lbnQgcG9saWN5LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIGBgQ3JlYXRlQ29udGludW91c0RlcGxveW1lbnRQb2xpY3lgYC5cbiAqL1xuQ29udGludW91c0RlcGxveW1lbnRQb2xpY3lJZD86IHN0cmluZ1xuLyoqXG4gKiBBIGNvbXBsZXggdHlwZSB0aGF0IGNvbnRyb2xzIHRoZSBmb2xsb3dpbmc6XG4gKiAgICsgIFdoZXRoZXIgQ2xvdWRGcm9udCByZXBsYWNlcyBIVFRQIHN0YXR1cyBjb2RlcyBpbiB0aGUgNHh4IGFuZCA1eHggcmFuZ2Ugd2l0aCBjdXN0b20gZXJyb3IgbWVzc2FnZXMgYmVmb3JlIHJldHVybmluZyB0aGUgcmVzcG9uc2UgdG8gdGhlIHZpZXdlci5cbiAqICAgKyAgSG93IGxvbmcgQ2xvdWRGcm9udCBjYWNoZXMgSFRUUCBzdGF0dXMgY29kZXMgaW4gdGhlIDR4eCBhbmQgNXh4IHJhbmdlLlxuICogICBcbiAqICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBjdXN0b20gZXJyb3IgcGFnZXMsIHNlZSBbQ3VzdG9taXppbmcgRXJyb3IgUmVzcG9uc2VzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvY3VzdG9tLWVycm9yLXBhZ2VzLmh0bWwpIGluIHRoZSAqQW1hem9uIENsb3VkRnJvbnQgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuQ3VzdG9tRXJyb3JSZXNwb25zZXM/OiBDdXN0b21FcnJvclJlc3BvbnNlW11cbkN1c3RvbU9yaWdpbj86IExlZ2FjeUN1c3RvbU9yaWdpblxuRGVmYXVsdENhY2hlQmVoYXZpb3I6IERlZmF1bHRDYWNoZUJlaGF2aW9yXG4vKipcbiAqIFdoZW4gYSB2aWV3ZXIgcmVxdWVzdHMgdGhlIHJvb3QgVVJMIGZvciB5b3VyIGRpc3RyaWJ1dGlvbiwgdGhlIGRlZmF1bHQgcm9vdCBvYmplY3QgaXMgdGhlIG9iamVjdCB0aGF0IHlvdSB3YW50IENsb3VkRnJvbnQgdG8gcmVxdWVzdCBmcm9tIHlvdXIgb3JpZ2luLiBGb3IgZXhhbXBsZSwgaWYgeW91ciByb290IFVSTCBpcyBgYGh0dHBzOi8vd3d3LmV4YW1wbGUuY29tYGAsIHlvdSBjYW4gc3BlY2lmeSBDbG91ZEZyb250IHRvIHJldHVybiB0aGUgYGBpbmRleC5odG1sYGAgZmlsZSBhcyB0aGUgZGVmYXVsdCByb290IG9iamVjdC4gWW91IGNhbiBzcGVjaWZ5IGEgZGVmYXVsdCByb290IG9iamVjdCBzbyB0aGF0IHZpZXdlcnMgc2VlIGEgc3BlY2lmaWMgZmlsZSBvciBvYmplY3QsIGluc3RlYWQgb2YgYW5vdGhlciBvYmplY3QgaW4geW91ciBkaXN0cmlidXRpb24gKGZvciBleGFtcGxlLCBgYGh0dHBzOi8vd3d3LmV4YW1wbGUuY29tL3Byb2R1Y3QtZGVzY3JpcHRpb24uaHRtbGBgKS4gQSBkZWZhdWx0IHJvb3Qgb2JqZWN0IGF2b2lkcyBleHBvc2luZyB0aGUgY29udGVudHMgb2YgeW91ciBkaXN0cmlidXRpb24uXG4gKiAgWW91IGNhbiBzcGVjaWZ5IHRoZSBvYmplY3QgbmFtZSBvciBhIHBhdGggdG8gdGhlIG9iamVjdCBuYW1lIChmb3IgZXhhbXBsZSwgYGBpbmRleC5odG1sYGAgb3IgYGBleGFtcGxlRm9sZGVyTmFtZS9pbmRleC5odG1sYGApLiBZb3VyIHN0cmluZyBjYW4ndCBiZWdpbiB3aXRoIGEgZm9yd2FyZCBzbGFzaCAoYGAvYGApLiBPbmx5IHNwZWNpZnkgdGhlIG9iamVjdCBuYW1lIG9yIHRoZSBwYXRoIHRvIHRoZSBvYmplY3QuXG4gKiAgSWYgeW91IGRvbid0IHdhbnQgdG8gc3BlY2lmeSBhIGRlZmF1bHQgcm9vdCBvYmplY3Qgd2hlbiB5b3UgY3JlYXRlIGEgZGlzdHJpYnV0aW9uLCBpbmNsdWRlIGFuIGVtcHR5IGBgRGVmYXVsdFJvb3RPYmplY3RgYCBlbGVtZW50LlxuICogIFRvIGRlbGV0ZSB0aGUgZGVmYXVsdCByb290IG9iamVjdCBmcm9tIGFuIGV4aXN0aW5nIGRpc3RyaWJ1dGlvbiwgdXBkYXRlIHRoZSBkaXN0cmlidXRpb24gY29uZmlndXJhdGlvbiBhbmQgaW5jbHVkZSBhbiBlbXB0eSBgYERlZmF1bHRSb290T2JqZWN0YGAgZWxlbWVudC5cbiAqICBUbyByZXBsYWNlIHRoZSBkZWZhdWx0IHJvb3Qgb2JqZWN0LCB1cGRhdGUgdGhlIGRpc3RyaWJ1dGlvbiBjb25maWd1cmF0aW9uIGFuZCBzcGVjaWZ5IHRoZSBuZXcgb2JqZWN0LlxuICogIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBkZWZhdWx0IHJvb3Qgb2JqZWN0LCBzZWUgW1NwZWNpZnkgYSBkZWZhdWx0IHJvb3Qgb2JqZWN0XShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvRGVmYXVsdFJvb3RPYmplY3QuaHRtbCkgaW4gdGhlICpBbWF6b24gQ2xvdWRGcm9udCBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5EZWZhdWx0Um9vdE9iamVjdD86IHN0cmluZ1xuLyoqXG4gKiBGcm9tIHRoaXMgZmllbGQsIHlvdSBjYW4gZW5hYmxlIG9yIGRpc2FibGUgdGhlIHNlbGVjdGVkIGRpc3RyaWJ1dGlvbi5cbiAqL1xuRW5hYmxlZDogYm9vbGVhblxuLyoqXG4gKiAoT3B0aW9uYWwpIFNwZWNpZnkgdGhlIEhUVFAgdmVyc2lvbihzKSB0aGF0IHlvdSB3YW50IHZpZXdlcnMgdG8gdXNlIHRvIGNvbW11bmljYXRlIHdpdGggQ0YuIFRoZSBkZWZhdWx0IHZhbHVlIGZvciBuZXcgZGlzdHJpYnV0aW9ucyBpcyBgYGh0dHAxLjFgYC5cbiAqICBGb3Igdmlld2VycyBhbmQgQ0YgdG8gdXNlIEhUVFAvMiwgdmlld2VycyBtdXN0IHN1cHBvcnQgVExTdjEuMiBvciBsYXRlciwgYW5kIG11c3Qgc3VwcG9ydCBTZXJ2ZXIgTmFtZSBJbmRpY2F0aW9uIChTTkkpLlxuICogIEZvciB2aWV3ZXJzIGFuZCBDRiB0byB1c2UgSFRUUC8zLCB2aWV3ZXJzIG11c3Qgc3VwcG9ydCBUTFN2MS4zIGFuZCBTZXJ2ZXIgTmFtZSBJbmRpY2F0aW9uIChTTkkpLiBDRiBzdXBwb3J0cyBIVFRQLzMgY29ubmVjdGlvbiBtaWdyYXRpb24gdG8gYWxsb3cgdGhlIHZpZXdlciB0byBzd2l0Y2ggbmV0d29ya3Mgd2l0aG91dCBsb3NpbmcgY29ubmVjdGlvbi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgY29ubmVjdGlvbiBtaWdyYXRpb24sIHNlZSBbQ29ubmVjdGlvbiBNaWdyYXRpb25dKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9odHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjOTAwMC5odG1sI25hbWUtY29ubmVjdGlvbi1taWdyYXRpb24pIGF0IFJGQyA5MDAwLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBzdXBwb3J0ZWQgVExTdjEuMyBjaXBoZXJzLCBzZWUgW1N1cHBvcnRlZCBwcm90b2NvbHMgYW5kIGNpcGhlcnMgYmV0d2VlbiB2aWV3ZXJzIGFuZCBDbG91ZEZyb250XShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvc2VjdXJlLWNvbm5lY3Rpb25zLXN1cHBvcnRlZC12aWV3ZXItcHJvdG9jb2xzLWNpcGhlcnMuaHRtbCkuXG4gKi9cbkh0dHBWZXJzaW9uPzogc3RyaW5nXG4vKipcbiAqIFRvIHVzZSB0aGlzIGZpZWxkIGZvciBhIG11bHRpLXRlbmFudCBkaXN0cmlidXRpb24sIHVzZSBhIGNvbm5lY3Rpb24gZ3JvdXAgaW5zdGVhZC4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbQ29ubmVjdGlvbkdyb3VwXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xvdWRmcm9udC9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9Db25uZWN0aW9uR3JvdXAuaHRtbCkuXG4gKiAgIElmIHlvdSB3YW50IENsb3VkRnJvbnQgdG8gcmVzcG9uZCB0byBJUHY2IEROUyByZXF1ZXN0cyB3aXRoIGFuIElQdjYgYWRkcmVzcyBmb3IgeW91ciBkaXN0cmlidXRpb24sIHNwZWNpZnkgYGB0cnVlYGAuIElmIHlvdSBzcGVjaWZ5IGBgZmFsc2VgYCwgQ2xvdWRGcm9udCByZXNwb25kcyB0byBJUHY2IEROUyByZXF1ZXN0cyB3aXRoIHRoZSBETlMgcmVzcG9uc2UgY29kZSBgYE5PRVJST1JgYCBhbmQgd2l0aCBubyBJUCBhZGRyZXNzZXMuIFRoaXMgYWxsb3dzIHZpZXdlcnMgdG8gc3VibWl0IGEgc2Vjb25kIHJlcXVlc3QsIGZvciBhbiBJUHY0IGFkZHJlc3MgZm9yIHlvdXIgZGlzdHJpYnV0aW9uLlxuICogIEluIGdlbmVyYWwsIHlvdSBzaG91bGQgZW5hYmxlIElQdjYgaWYgeW91IGhhdmUgdXNlcnMgb24gSVB2NiBuZXR3b3JrcyB3aG8gd2FudCB0byBhY2Nlc3MgeW91ciBjb250ZW50LiBIb3dldmVyLCBpZiB5b3UncmUgdXNpbmcgc2lnbmVkIFVSTHMgb3Igc2lnbmVkIGNvb2tpZXMgdG8gcmVzdHJpY3QgYWNjZXNzIHRvIHlvdXIgY29udGVudCwgYW5kIGlmIHlvdSdyZSB1c2luZyBhIGN1c3RvbSBwb2xpY3kgdGhhdCBpbmNsdWRlcyB0aGUgYGBJcEFkZHJlc3NgYCBwYXJhbWV0ZXIgdG8gcmVzdHJpY3QgdGhlIElQIGFkZHJlc3NlcyB0aGF0IGNhbiBhY2Nlc3MgeW91ciBjb250ZW50LCBkb24ndCBlbmFibGUgSVB2Ni4gSWYgeW91IHdhbnQgdG8gcmVzdHJpY3QgYWNjZXNzIHRvIHNvbWUgY29udGVudCBieSBJUCBhZGRyZXNzIGFuZCBub3QgcmVzdHJpY3QgYWNjZXNzIHRvIG90aGVyIGNvbnRlbnQgKG9yIHJlc3RyaWN0IGFjY2VzcyBidXQgbm90IGJ5IElQIGFkZHJlc3MpLCB5b3UgY2FuIGNyZWF0ZSB0d28gZGlzdHJpYnV0aW9ucy4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbQ3JlYXRpbmcgYSBTaWduZWQgVVJMIFVzaW5nIGEgQ3VzdG9tIFBvbGljeV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL3ByaXZhdGUtY29udGVudC1jcmVhdGluZy1zaWduZWQtdXJsLWN1c3RvbS1wb2xpY3kuaHRtbCkgaW4gdGhlICpBbWF6b24gQ2xvdWRGcm9udCBEZXZlbG9wZXIgR3VpZGUqLlxuICogIElmIHlvdSdyZSB1c2luZyBhbiBSNTNBV1NJbnRsb25nIGFsaWFzIHJlc291cmNlIHJlY29yZCBzZXQgdG8gcm91dGUgdHJhZmZpYyB0byB5b3VyIENsb3VkRnJvbnQgZGlzdHJpYnV0aW9uLCB5b3UgbmVlZCB0byBjcmVhdGUgYSBzZWNvbmQgYWxpYXMgcmVzb3VyY2UgcmVjb3JkIHNldCB3aGVuIGJvdGggb2YgdGhlIGZvbGxvd2luZyBhcmUgdHJ1ZTpcbiAqICAgKyAgWW91IGVuYWJsZSBJUHY2IGZvciB0aGUgZGlzdHJpYnV0aW9uXG4gKiAgICsgIFlvdSdyZSB1c2luZyBhbHRlcm5hdGUgZG9tYWluIG5hbWVzIGluIHRoZSBVUkxzIGZvciB5b3VyIG9iamVjdHNcbiAqICAgXG4gKiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbUm91dGluZyBUcmFmZmljIHRvIGFuIEFtYXpvbiBDbG91ZEZyb250IFdlYiBEaXN0cmlidXRpb24gYnkgVXNpbmcgWW91ciBEb21haW4gTmFtZV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL1JvdXRlNTMvbGF0ZXN0L0RldmVsb3Blckd1aWRlL3JvdXRpbmctdG8tY2xvdWRmcm9udC1kaXN0cmlidXRpb24uaHRtbCkgaW4gdGhlICpEZXZlbG9wZXIgR3VpZGUqLlxuICogIElmIHlvdSBjcmVhdGVkIGEgQ05BTUUgcmVzb3VyY2UgcmVjb3JkIHNldCwgZWl0aGVyIHdpdGggUjUzQVdTSW50bG9uZyBvciB3aXRoIGFub3RoZXIgRE5TIHNlcnZpY2UsIHlvdSBkb24ndCBuZWVkIHRvIG1ha2UgYW55IGNoYW5nZXMuIEEgQ05BTUUgcmVjb3JkIHdpbGwgcm91dGUgdHJhZmZpYyB0byB5b3VyIGRpc3RyaWJ1dGlvbiByZWdhcmRsZXNzIG9mIHRoZSBJUCBhZGRyZXNzIGZvcm1hdCBvZiB0aGUgdmlld2VyIHJlcXVlc3QuXG4gKi9cbklQVjZFbmFibGVkPzogYm9vbGVhblxuTG9nZ2luZz86IExvZ2dpbmdcbk9yaWdpbkdyb3Vwcz86IE9yaWdpbkdyb3Vwc1xuLyoqXG4gKiBBIGNvbXBsZXggdHlwZSB0aGF0IGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IG9yaWdpbnMgZm9yIHRoaXMgZGlzdHJpYnV0aW9uLlxuICogIFNwZWNpZnkgYSB2YWx1ZSBmb3IgZWl0aGVyIHRoZSBgYE9yaWdpbnNgYCBvciBgYE9yaWdpbkdyb3Vwc2BgIHByb3BlcnR5LlxuICovXG5PcmlnaW5zPzogT3JpZ2luW11cbi8qKlxuICogVGhpcyBmaWVsZCBvbmx5IHN1cHBvcnRzIHN0YW5kYXJkIGRpc3RyaWJ1dGlvbnMuIFlvdSBjYW4ndCBzcGVjaWZ5IHRoaXMgZmllbGQgZm9yIG11bHRpLXRlbmFudCBkaXN0cmlidXRpb25zLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtVbnN1cHBvcnRlZCBmZWF0dXJlcyBmb3IgU2FhUyBNYW5hZ2VyIGZvciBBbWF6b24gQ2xvdWRGcm9udF0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL2Rpc3RyaWJ1dGlvbi1jb25maWctb3B0aW9ucy5odG1sI3Vuc3VwcG9ydGVkLXNhYXMpIGluIHRoZSAqQW1hem9uIENsb3VkRnJvbnQgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqICAgVGhlIHByaWNlIGNsYXNzIHRoYXQgY29ycmVzcG9uZHMgd2l0aCB0aGUgbWF4aW11bSBwcmljZSB0aGF0IHlvdSB3YW50IHRvIHBheSBmb3IgQ2xvdWRGcm9udCBzZXJ2aWNlLiBJZiB5b3Ugc3BlY2lmeSBgYFByaWNlQ2xhc3NfQWxsYGAsIENsb3VkRnJvbnQgcmVzcG9uZHMgdG8gcmVxdWVzdHMgZm9yIHlvdXIgb2JqZWN0cyBmcm9tIGFsbCBDbG91ZEZyb250IGVkZ2UgbG9jYXRpb25zLlxuICogIElmIHlvdSBzcGVjaWZ5IGEgcHJpY2UgY2xhc3Mgb3RoZXIgdGhhbiBgYFByaWNlQ2xhc3NfQWxsYGAsIENsb3VkRnJvbnQgc2VydmVzIHlvdXIgb2JqZWN0cyBmcm9tIHRoZSBDbG91ZEZyb250IGVkZ2UgbG9jYXRpb24gdGhhdCBoYXMgdGhlIGxvd2VzdCBsYXRlbmN5IGFtb25nIHRoZSBlZGdlIGxvY2F0aW9ucyBpbiB5b3VyIHByaWNlIGNsYXNzLiBWaWV3ZXJzIHdobyBhcmUgaW4gb3IgbmVhciByZWdpb25zIHRoYXQgYXJlIGV4Y2x1ZGVkIGZyb20geW91ciBzcGVjaWZpZWQgcHJpY2UgY2xhc3MgbWF5IGVuY291bnRlciBzbG93ZXIgcGVyZm9ybWFuY2UuXG4gKiAgRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHJpY2UgY2xhc3Nlcywgc2VlIFtDaG9vc2luZyB0aGUgUHJpY2UgQ2xhc3MgZm9yIGEgQ2xvdWRGcm9udCBEaXN0cmlidXRpb25dKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9QcmljZUNsYXNzLmh0bWwpIGluIHRoZSAqQW1hem9uIENsb3VkRnJvbnQgRGV2ZWxvcGVyIEd1aWRlKi4gRm9yIGluZm9ybWF0aW9uIGFib3V0IENsb3VkRnJvbnQgcHJpY2luZywgaW5jbHVkaW5nIGhvdyBwcmljZSBjbGFzc2VzIChzdWNoIGFzIFByaWNlIENsYXNzIDEwMCkgbWFwIHRvIENsb3VkRnJvbnQgcmVnaW9ucywgc2VlIFtBbWF6b24gQ2xvdWRGcm9udCBQcmljaW5nXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xvdWRmcm9udC9wcmljaW5nLykuXG4gKi9cblByaWNlQ2xhc3M/OiBzdHJpbmdcblJlc3RyaWN0aW9ucz86IFJlc3RyaWN0aW9uc1xuUzNPcmlnaW4/OiBMZWdhY3lTM09yaWdpblxuLyoqXG4gKiBUaGlzIGZpZWxkIG9ubHkgc3VwcG9ydHMgc3RhbmRhcmQgZGlzdHJpYnV0aW9ucy4gWW91IGNhbid0IHNwZWNpZnkgdGhpcyBmaWVsZCBmb3IgbXVsdGktdGVuYW50IGRpc3RyaWJ1dGlvbnMuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1Vuc3VwcG9ydGVkIGZlYXR1cmVzIGZvciBTYWFTIE1hbmFnZXIgZm9yIEFtYXpvbiBDbG91ZEZyb250XShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvZGlzdHJpYnV0aW9uLWNvbmZpZy1vcHRpb25zLmh0bWwjdW5zdXBwb3J0ZWQtc2FhcykgaW4gdGhlICpBbWF6b24gQ2xvdWRGcm9udCBEZXZlbG9wZXIgR3VpZGUqLlxuICogICBBIEJvb2xlYW4gdGhhdCBpbmRpY2F0ZXMgd2hldGhlciB0aGlzIGlzIGEgc3RhZ2luZyBkaXN0cmlidXRpb24uIFdoZW4gdGhpcyB2YWx1ZSBpcyBgYHRydWVgYCwgdGhpcyBpcyBhIHN0YWdpbmcgZGlzdHJpYnV0aW9uLiBXaGVuIHRoaXMgdmFsdWUgaXMgYGBmYWxzZWBgLCB0aGlzIGlzIG5vdCBhIHN0YWdpbmcgZGlzdHJpYnV0aW9uLlxuICovXG5TdGFnaW5nPzogYm9vbGVhblxuLyoqXG4gKiBUaGlzIGZpZWxkIG9ubHkgc3VwcG9ydHMgbXVsdGktdGVuYW50IGRpc3RyaWJ1dGlvbnMuIFlvdSBjYW4ndCBzcGVjaWZ5IHRoaXMgZmllbGQgZm9yIHN0YW5kYXJkIGRpc3RyaWJ1dGlvbnMuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1Vuc3VwcG9ydGVkIGZlYXR1cmVzIGZvciBTYWFTIE1hbmFnZXIgZm9yIEFtYXpvbiBDbG91ZEZyb250XShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvZGlzdHJpYnV0aW9uLWNvbmZpZy1vcHRpb25zLmh0bWwjdW5zdXBwb3J0ZWQtc2FhcykgaW4gdGhlICpBbWF6b24gQ2xvdWRGcm9udCBEZXZlbG9wZXIgR3VpZGUqLlxuICogICBBIGRpc3RyaWJ1dGlvbiB0ZW5hbnQgY29uZmlndXJhdGlvbi5cbiAqL1xuVGVuYW50Q29uZmlnPzoge1xuUGFyYW1ldGVyRGVmaW5pdGlvbnM/OiBQYXJhbWV0ZXJEZWZpbml0aW9uW11cbn1cblZpZXdlck10bHNDb25maWc/OiBWaWV3ZXJNdGxzQ29uZmlnXG5WaWV3ZXJDZXJ0aWZpY2F0ZT86IFZpZXdlckNlcnRpZmljYXRlXG4vKipcbiAqIE11bHRpLXRlbmFudCBkaXN0cmlidXRpb25zIG9ubHkgc3VwcG9ydCBXQUYgVjIgd2ViIEFDTHMuXG4gKiAgIEEgdW5pcXVlIGlkZW50aWZpZXIgdGhhdCBzcGVjaWZpZXMgdGhlIFdBRiB3ZWIgQUNMLCBpZiBhbnksIHRvIGFzc29jaWF0ZSB3aXRoIHRoaXMgZGlzdHJpYnV0aW9uLiBUbyBzcGVjaWZ5IGEgd2ViIEFDTCBjcmVhdGVkIHVzaW5nIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiBXQUYsIHVzZSB0aGUgQUNMIEFSTiwgZm9yIGV4YW1wbGUgYGBhcm46YXdzOndhZnYyOnVzLWVhc3QtMToxMjM0NTY3ODkwMTI6Z2xvYmFsL3dlYmFjbC9FeGFtcGxlV2ViQUNML2ExYjJjM2Q0LTU2NzgtOTBhYi1jZGVmLUVYQU1QTEUxMTExMWBgLiBUbyBzcGVjaWZ5IGEgd2ViIEFDTCBjcmVhdGVkIHVzaW5nIFdBRiBDbGFzc2ljLCB1c2UgdGhlIEFDTCBJRCwgZm9yIGV4YW1wbGUgYGBhMWIyYzNkNC01Njc4LTkwYWItY2RlZi1FWEFNUExFMTExMTFgYC5cbiAqICBXQUYgaXMgYSB3ZWIgYXBwbGljYXRpb24gZmlyZXdhbGwgdGhhdCBsZXRzIHlvdSBtb25pdG9yIHRoZSBIVFRQIGFuZCBIVFRQUyByZXF1ZXN0cyB0aGF0IGFyZSBmb3J3YXJkZWQgdG8gQ2xvdWRGcm9udCwgYW5kIGxldHMgeW91IGNvbnRyb2wgYWNjZXNzIHRvIHlvdXIgY29udGVudC4gQmFzZWQgb24gY29uZGl0aW9ucyB0aGF0IHlvdSBzcGVjaWZ5LCBzdWNoIGFzIHRoZSBJUCBhZGRyZXNzZXMgdGhhdCByZXF1ZXN0cyBvcmlnaW5hdGUgZnJvbSBvciB0aGUgdmFsdWVzIG9mIHF1ZXJ5IHN0cmluZ3MsIENsb3VkRnJvbnQgcmVzcG9uZHMgdG8gcmVxdWVzdHMgZWl0aGVyIHdpdGggdGhlIHJlcXVlc3RlZCBjb250ZW50IG9yIHdpdGggYW4gSFRUUCA0MDMgc3RhdHVzIGNvZGUgKEZvcmJpZGRlbikuIFlvdSBjYW4gYWxzbyBjb25maWd1cmUgQ2xvdWRGcm9udCB0byByZXR1cm4gYSBjdXN0b20gZXJyb3IgcGFnZSB3aGVuIGEgcmVxdWVzdCBpcyBibG9ja2VkLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBXQUYsIHNlZSB0aGUgW0RldmVsb3BlciBHdWlkZV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3dhZi9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvd2hhdC1pcy1hd3Mtd2FmLmh0bWwpLlxuICovXG5XZWJBQ0xJZD86IHN0cmluZ1xufVxuLyoqXG4gKiBBIGNvbXBsZXggdHlwZSB0aGF0IGRlc2NyaWJlcyBob3cgQ2xvdWRGcm9udCBwcm9jZXNzZXMgcmVxdWVzdHMuXG4gKiAgWW91IG11c3QgY3JlYXRlIGF0IGxlYXN0IGFzIG1hbnkgY2FjaGUgYmVoYXZpb3JzIChpbmNsdWRpbmcgdGhlIGRlZmF1bHQgY2FjaGUgYmVoYXZpb3IpIGFzIHlvdSBoYXZlIG9yaWdpbnMgaWYgeW91IHdhbnQgQ2xvdWRGcm9udCB0byBzZXJ2ZSBvYmplY3RzIGZyb20gYWxsIG9mIHRoZSBvcmlnaW5zLiBFYWNoIGNhY2hlIGJlaGF2aW9yIHNwZWNpZmllcyB0aGUgb25lIG9yaWdpbiBmcm9tIHdoaWNoIHlvdSB3YW50IENsb3VkRnJvbnQgdG8gZ2V0IG9iamVjdHMuIElmIHlvdSBoYXZlIHR3byBvcmlnaW5zIGFuZCBvbmx5IHRoZSBkZWZhdWx0IGNhY2hlIGJlaGF2aW9yLCB0aGUgZGVmYXVsdCBjYWNoZSBiZWhhdmlvciB3aWxsIGNhdXNlIENsb3VkRnJvbnQgdG8gZ2V0IG9iamVjdHMgZnJvbSBvbmUgb2YgdGhlIG9yaWdpbnMsIGJ1dCB0aGUgb3RoZXIgb3JpZ2luIGlzIG5ldmVyIHVzZWQuXG4gKiAgRm9yIHRoZSBjdXJyZW50IHF1b3RhIChmb3JtZXJseSBrbm93biBhcyBsaW1pdCkgb24gdGhlIG51bWJlciBvZiBjYWNoZSBiZWhhdmlvcnMgdGhhdCB5b3UgY2FuIGFkZCB0byBhIGRpc3RyaWJ1dGlvbiwgc2VlIFtRdW90YXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9jbG91ZGZyb250LWxpbWl0cy5odG1sKSBpbiB0aGUgKkFtYXpvbiBDbG91ZEZyb250IERldmVsb3BlciBHdWlkZSouXG4gKiAgSWYgeW91IGRvbid0IHdhbnQgdG8gc3BlY2lmeSBhbnkgY2FjaGUgYmVoYXZpb3JzLCBpbmNsdWRlIG9ubHkgYW4gZW1wdHkgYGBDYWNoZUJlaGF2aW9yc2BgIGVsZW1lbnQuIERvbid0IHNwZWNpZnkgYW4gZW1wdHkgaW5kaXZpZHVhbCBgYENhY2hlQmVoYXZpb3JgYCBlbGVtZW50LCBiZWNhdXNlIHRoaXMgaXMgaW52YWxpZC4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbQ2FjaGVCZWhhdmlvcnNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbG91ZGZyb250L2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NhY2hlQmVoYXZpb3JzLmh0bWwpLiBcbiAqICBUbyBkZWxldGUgYWxsIGNhY2hlIGJlaGF2aW9ycyBpbiBhbiBleGlzdGluZyBkaXN0cmlidXRpb24sIHVwZGF0ZSB0aGUgZGlzdHJpYnV0aW9uIGNvbmZpZ3VyYXRpb24gYW5kIGluY2x1ZGUgb25seSBhbiBlbXB0eSBgYENhY2hlQmVoYXZpb3JzYGAgZWxlbWVudC5cbiAqICBUbyBhZGQsIGNoYW5nZSwgb3IgcmVtb3ZlIG9uZSBvciBtb3JlIGNhY2hlIGJlaGF2aW9ycywgdXBkYXRlIHRoZSBkaXN0cmlidXRpb24gY29uZmlndXJhdGlvbiBhbmQgc3BlY2lmeSBhbGwgb2YgdGhlIGNhY2hlIGJlaGF2aW9ycyB0aGF0IHlvdSB3YW50IHRvIGluY2x1ZGUgaW4gdGhlIHVwZGF0ZWQgZGlzdHJpYnV0aW9uLlxuICogICBJZiB5b3VyIG1pbmltdW0gVFRMIGlzIGdyZWF0ZXIgdGhhbiAwLCBDbG91ZEZyb250IHdpbGwgY2FjaGUgY29udGVudCBmb3IgYXQgbGVhc3QgdGhlIGR1cmF0aW9uIHNwZWNpZmllZCBpbiB0aGUgY2FjaGUgcG9saWN5J3MgbWluaW11bSBUVEwsIGV2ZW4gaWYgdGhlIGBgQ2FjaGUtQ29udHJvbDogbm8tY2FjaGVgYCwgYGBuby1zdG9yZWBgLCBvciBgYHByaXZhdGVgYCBkaXJlY3RpdmVzIGFyZSBwcmVzZW50IGluIHRoZSBvcmlnaW4gaGVhZGVycy5cbiAqICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgY2FjaGUgYmVoYXZpb3JzLCBzZWUgW0NhY2hlIEJlaGF2aW9yIFNldHRpbmdzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvZGlzdHJpYnV0aW9uLXdlYi12YWx1ZXMtc3BlY2lmeS5odG1sI0Rvd25sb2FkRGlzdFZhbHVlc0NhY2hlQmVoYXZpb3IpIGluIHRoZSAqQW1hem9uIENsb3VkRnJvbnQgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDYWNoZUJlaGF2aW9yIHtcbi8qKlxuICogQSBjb21wbGV4IHR5cGUgdGhhdCBjb250cm9scyB3aGljaCBIVFRQIG1ldGhvZHMgQ2xvdWRGcm9udCBwcm9jZXNzZXMgYW5kIGZvcndhcmRzIHRvIHlvdXIgQW1hem9uIFMzIGJ1Y2tldCBvciB5b3VyIGN1c3RvbSBvcmlnaW4uIFRoZXJlIGFyZSB0aHJlZSBjaG9pY2VzOlxuICogICArICBDbG91ZEZyb250IGZvcndhcmRzIG9ubHkgYGBHRVRgYCBhbmQgYGBIRUFEYGAgcmVxdWVzdHMuXG4gKiAgICsgIENsb3VkRnJvbnQgZm9yd2FyZHMgb25seSBgYEdFVGBgLCBgYEhFQURgYCwgYW5kIGBgT1BUSU9OU2BgIHJlcXVlc3RzLlxuICogICArICBDbG91ZEZyb250IGZvcndhcmRzIGBgR0VULCBIRUFELCBPUFRJT05TLCBQVVQsIFBBVENILCBQT1NUYGAsIGFuZCBgYERFTEVURWBgIHJlcXVlc3RzLlxuICogICBcbiAqICBJZiB5b3UgcGljayB0aGUgdGhpcmQgY2hvaWNlLCB5b3UgbWF5IG5lZWQgdG8gcmVzdHJpY3QgYWNjZXNzIHRvIHlvdXIgQW1hem9uIFMzIGJ1Y2tldCBvciB0byB5b3VyIGN1c3RvbSBvcmlnaW4gc28gdXNlcnMgY2FuJ3QgcGVyZm9ybSBvcGVyYXRpb25zIHRoYXQgeW91IGRvbid0IHdhbnQgdGhlbSB0by4gRm9yIGV4YW1wbGUsIHlvdSBtaWdodCBub3Qgd2FudCB1c2VycyB0byBoYXZlIHBlcm1pc3Npb25zIHRvIGRlbGV0ZSBvYmplY3RzIGZyb20geW91ciBvcmlnaW4uXG4gKi9cbkFsbG93ZWRNZXRob2RzPzogc3RyaW5nW11cbi8qKlxuICogVGhlIHVuaXF1ZSBpZGVudGlmaWVyIG9mIHRoZSBjYWNoZSBwb2xpY3kgdGhhdCBpcyBhdHRhY2hlZCB0byB0aGlzIGNhY2hlIGJlaGF2aW9yLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtDcmVhdGluZyBjYWNoZSBwb2xpY2llc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL2NvbnRyb2xsaW5nLXRoZS1jYWNoZS1rZXkuaHRtbCNjYWNoZS1rZXktY3JlYXRlLWNhY2hlLXBvbGljeSkgb3IgW1VzaW5nIHRoZSBtYW5hZ2VkIGNhY2hlIHBvbGljaWVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvdXNpbmctbWFuYWdlZC1jYWNoZS1wb2xpY2llcy5odG1sKSBpbiB0aGUgKkFtYXpvbiBDbG91ZEZyb250IERldmVsb3BlciBHdWlkZSouXG4gKiAgQSBgYENhY2hlQmVoYXZpb3JgYCBtdXN0IGluY2x1ZGUgZWl0aGVyIGEgYGBDYWNoZVBvbGljeUlkYGAgb3IgYGBGb3J3YXJkZWRWYWx1ZXNgYC4gV2UgcmVjb21tZW5kIHRoYXQgeW91IHVzZSBhIGBgQ2FjaGVQb2xpY3lJZGBgLlxuICovXG5DYWNoZVBvbGljeUlkPzogc3RyaW5nXG4vKipcbiAqIEEgY29tcGxleCB0eXBlIHRoYXQgY29udHJvbHMgd2hldGhlciBDbG91ZEZyb250IGNhY2hlcyB0aGUgcmVzcG9uc2UgdG8gcmVxdWVzdHMgdXNpbmcgdGhlIHNwZWNpZmllZCBIVFRQIG1ldGhvZHMuIFRoZXJlIGFyZSB0d28gY2hvaWNlczpcbiAqICAgKyAgQ2xvdWRGcm9udCBjYWNoZXMgcmVzcG9uc2VzIHRvIGBgR0VUYGAgYW5kIGBgSEVBRGBgIHJlcXVlc3RzLlxuICogICArICBDbG91ZEZyb250IGNhY2hlcyByZXNwb25zZXMgdG8gYGBHRVRgYCwgYGBIRUFEYGAsIGFuZCBgYE9QVElPTlNgYCByZXF1ZXN0cy5cbiAqICAgXG4gKiAgSWYgeW91IHBpY2sgdGhlIHNlY29uZCBjaG9pY2UgZm9yIHlvdXIgQW1hem9uIFMzIE9yaWdpbiwgeW91IG1heSBuZWVkIHRvIGZvcndhcmQgQWNjZXNzLUNvbnRyb2wtUmVxdWVzdC1NZXRob2QsIEFjY2Vzcy1Db250cm9sLVJlcXVlc3QtSGVhZGVycywgYW5kIE9yaWdpbiBoZWFkZXJzIGZvciB0aGUgcmVzcG9uc2VzIHRvIGJlIGNhY2hlZCBjb3JyZWN0bHkuXG4gKi9cbkNhY2hlZE1ldGhvZHM/OiBzdHJpbmdbXVxuLyoqXG4gKiBXaGV0aGVyIHlvdSB3YW50IENsb3VkRnJvbnQgdG8gYXV0b21hdGljYWxseSBjb21wcmVzcyBjZXJ0YWluIGZpbGVzIGZvciB0aGlzIGNhY2hlIGJlaGF2aW9yLiBJZiBzbywgc3BlY2lmeSB0cnVlOyBpZiBub3QsIHNwZWNpZnkgZmFsc2UuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1NlcnZpbmcgQ29tcHJlc3NlZCBGaWxlc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL1NlcnZpbmdDb21wcmVzc2VkRmlsZXMuaHRtbCkgaW4gdGhlICpBbWF6b24gQ2xvdWRGcm9udCBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5Db21wcmVzcz86IGJvb2xlYW5cbi8qKlxuICogVGhpcyBmaWVsZCBvbmx5IHN1cHBvcnRzIHN0YW5kYXJkIGRpc3RyaWJ1dGlvbnMuIFlvdSBjYW4ndCBzcGVjaWZ5IHRoaXMgZmllbGQgZm9yIG11bHRpLXRlbmFudCBkaXN0cmlidXRpb25zLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtVbnN1cHBvcnRlZCBmZWF0dXJlcyBmb3IgU2FhUyBNYW5hZ2VyIGZvciBBbWF6b24gQ2xvdWRGcm9udF0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL2Rpc3RyaWJ1dGlvbi1jb25maWctb3B0aW9ucy5odG1sI3Vuc3VwcG9ydGVkLXNhYXMpIGluIHRoZSAqQW1hem9uIENsb3VkRnJvbnQgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqICAgVGhpcyBmaWVsZCBpcyBkZXByZWNhdGVkLiBXZSByZWNvbW1lbmQgdGhhdCB5b3UgdXNlIHRoZSBgYERlZmF1bHRUVExgYCBmaWVsZCBpbiBhIGNhY2hlIHBvbGljeSBpbnN0ZWFkIG9mIHRoaXMgZmllbGQuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0NyZWF0aW5nIGNhY2hlIHBvbGljaWVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvY29udHJvbGxpbmctdGhlLWNhY2hlLWtleS5odG1sI2NhY2hlLWtleS1jcmVhdGUtY2FjaGUtcG9saWN5KSBvciBbVXNpbmcgdGhlIG1hbmFnZWQgY2FjaGUgcG9saWNpZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS91c2luZy1tYW5hZ2VkLWNhY2hlLXBvbGljaWVzLmh0bWwpIGluIHRoZSAqQW1hem9uIENsb3VkRnJvbnQgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqICBUaGUgZGVmYXVsdCBhbW91bnQgb2YgdGltZSB0aGF0IHlvdSB3YW50IG9iamVjdHMgdG8gc3RheSBpbiBDbG91ZEZyb250IGNhY2hlcyBiZWZvcmUgQ2xvdWRGcm9udCBmb3J3YXJkcyBhbm90aGVyIHJlcXVlc3QgdG8geW91ciBvcmlnaW4gdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIG9iamVjdCBoYXMgYmVlbiB1cGRhdGVkLiBUaGUgdmFsdWUgdGhhdCB5b3Ugc3BlY2lmeSBhcHBsaWVzIG9ubHkgd2hlbiB5b3VyIG9yaWdpbiBkb2VzIG5vdCBhZGQgSFRUUCBoZWFkZXJzIHN1Y2ggYXMgYGBDYWNoZS1Db250cm9sIG1heC1hZ2VgYCwgYGBDYWNoZS1Db250cm9sIHMtbWF4YWdlYGAsIGFuZCBgYEV4cGlyZXNgYCB0byBvYmplY3RzLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtNYW5hZ2luZyBIb3cgTG9uZyBDb250ZW50IFN0YXlzIGluIGFuIEVkZ2UgQ2FjaGUgKEV4cGlyYXRpb24pXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvRXhwaXJhdGlvbi5odG1sKSBpbiB0aGUgKkFtYXpvbiBDbG91ZEZyb250IERldmVsb3BlciBHdWlkZSouXG4gKi9cbkRlZmF1bHRUVEw/OiBudW1iZXJcbi8qKlxuICogVGhlIHZhbHVlIG9mIGBgSURgYCBmb3IgdGhlIGZpZWxkLWxldmVsIGVuY3J5cHRpb24gY29uZmlndXJhdGlvbiB0aGF0IHlvdSB3YW50IENsb3VkRnJvbnQgdG8gdXNlIGZvciBlbmNyeXB0aW5nIHNwZWNpZmljIGZpZWxkcyBvZiBkYXRhIGZvciB0aGlzIGNhY2hlIGJlaGF2aW9yLlxuICovXG5GaWVsZExldmVsRW5jcnlwdGlvbklkPzogc3RyaW5nXG5Gb3J3YXJkZWRWYWx1ZXM/OiBGb3J3YXJkZWRWYWx1ZXNcbi8qKlxuICogQSBsaXN0IG9mIENsb3VkRnJvbnQgZnVuY3Rpb25zIHRoYXQgYXJlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGNhY2hlIGJlaGF2aW9yLiBDbG91ZEZyb250IGZ1bmN0aW9ucyBtdXN0IGJlIHB1Ymxpc2hlZCB0byB0aGUgYGBMSVZFYGAgc3RhZ2UgdG8gYXNzb2NpYXRlIHRoZW0gd2l0aCBhIGNhY2hlIGJlaGF2aW9yLlxuICovXG5GdW5jdGlvbkFzc29jaWF0aW9ucz86IEZ1bmN0aW9uQXNzb2NpYXRpb25bXVxuR3JwY0NvbmZpZz86IEdycGNDb25maWdcbi8qKlxuICogQSBjb21wbGV4IHR5cGUgdGhhdCBjb250YWlucyB6ZXJvIG9yIG1vcmUgTGFtYmRhQEVkZ2UgZnVuY3Rpb24gYXNzb2NpYXRpb25zIGZvciBhIGNhY2hlIGJlaGF2aW9yLlxuICovXG5MYW1iZGFGdW5jdGlvbkFzc29jaWF0aW9ucz86IExhbWJkYUZ1bmN0aW9uQXNzb2NpYXRpb25bXVxuLyoqXG4gKiBUaGlzIGZpZWxkIG9ubHkgc3VwcG9ydHMgc3RhbmRhcmQgZGlzdHJpYnV0aW9ucy4gWW91IGNhbid0IHNwZWNpZnkgdGhpcyBmaWVsZCBmb3IgbXVsdGktdGVuYW50IGRpc3RyaWJ1dGlvbnMuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1Vuc3VwcG9ydGVkIGZlYXR1cmVzIGZvciBTYWFTIE1hbmFnZXIgZm9yIEFtYXpvbiBDbG91ZEZyb250XShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvZGlzdHJpYnV0aW9uLWNvbmZpZy1vcHRpb25zLmh0bWwjdW5zdXBwb3J0ZWQtc2FhcykgaW4gdGhlICpBbWF6b24gQ2xvdWRGcm9udCBEZXZlbG9wZXIgR3VpZGUqLlxuICogICBUaGlzIGZpZWxkIGlzIGRlcHJlY2F0ZWQuIFdlIHJlY29tbWVuZCB0aGF0IHlvdSB1c2UgdGhlIGBgTWF4VFRMYGAgZmllbGQgaW4gYSBjYWNoZSBwb2xpY3kgaW5zdGVhZCBvZiB0aGlzIGZpZWxkLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtDcmVhdGluZyBjYWNoZSBwb2xpY2llc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL2NvbnRyb2xsaW5nLXRoZS1jYWNoZS1rZXkuaHRtbCNjYWNoZS1rZXktY3JlYXRlLWNhY2hlLXBvbGljeSkgb3IgW1VzaW5nIHRoZSBtYW5hZ2VkIGNhY2hlIHBvbGljaWVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvdXNpbmctbWFuYWdlZC1jYWNoZS1wb2xpY2llcy5odG1sKSBpbiB0aGUgKkFtYXpvbiBDbG91ZEZyb250IERldmVsb3BlciBHdWlkZSouXG4gKiAgVGhlIG1heGltdW0gYW1vdW50IG9mIHRpbWUgdGhhdCB5b3Ugd2FudCBvYmplY3RzIHRvIHN0YXkgaW4gQ2xvdWRGcm9udCBjYWNoZXMgYmVmb3JlIENsb3VkRnJvbnQgZm9yd2FyZHMgYW5vdGhlciByZXF1ZXN0IHRvIHlvdXIgb3JpZ2luIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZSBvYmplY3QgaGFzIGJlZW4gdXBkYXRlZC4gVGhlIHZhbHVlIHRoYXQgeW91IHNwZWNpZnkgYXBwbGllcyBvbmx5IHdoZW4geW91ciBvcmlnaW4gYWRkcyBIVFRQIGhlYWRlcnMgc3VjaCBhcyBgYENhY2hlLUNvbnRyb2wgbWF4LWFnZWBgLCBgYENhY2hlLUNvbnRyb2wgcy1tYXhhZ2VgYCwgYW5kIGBgRXhwaXJlc2BgIHRvIG9iamVjdHMuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW01hbmFnaW5nIEhvdyBMb25nIENvbnRlbnQgU3RheXMgaW4gYW4gRWRnZSBDYWNoZSAoRXhwaXJhdGlvbildKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9FeHBpcmF0aW9uLmh0bWwpIGluIHRoZSAqQW1hem9uIENsb3VkRnJvbnQgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuTWF4VFRMPzogbnVtYmVyXG4vKipcbiAqIFRoaXMgZmllbGQgb25seSBzdXBwb3J0cyBzdGFuZGFyZCBkaXN0cmlidXRpb25zLiBZb3UgY2FuJ3Qgc3BlY2lmeSB0aGlzIGZpZWxkIGZvciBtdWx0aS10ZW5hbnQgZGlzdHJpYnV0aW9ucy4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbVW5zdXBwb3J0ZWQgZmVhdHVyZXMgZm9yIFNhYVMgTWFuYWdlciBmb3IgQW1hem9uIENsb3VkRnJvbnRdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9kaXN0cmlidXRpb24tY29uZmlnLW9wdGlvbnMuaHRtbCN1bnN1cHBvcnRlZC1zYWFzKSBpbiB0aGUgKkFtYXpvbiBDbG91ZEZyb250IERldmVsb3BlciBHdWlkZSouXG4gKiAgIFRoaXMgZmllbGQgaXMgZGVwcmVjYXRlZC4gV2UgcmVjb21tZW5kIHRoYXQgeW91IHVzZSB0aGUgYGBNaW5UVExgYCBmaWVsZCBpbiBhIGNhY2hlIHBvbGljeSBpbnN0ZWFkIG9mIHRoaXMgZmllbGQuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0NyZWF0aW5nIGNhY2hlIHBvbGljaWVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvY29udHJvbGxpbmctdGhlLWNhY2hlLWtleS5odG1sI2NhY2hlLWtleS1jcmVhdGUtY2FjaGUtcG9saWN5KSBvciBbVXNpbmcgdGhlIG1hbmFnZWQgY2FjaGUgcG9saWNpZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS91c2luZy1tYW5hZ2VkLWNhY2hlLXBvbGljaWVzLmh0bWwpIGluIHRoZSAqQW1hem9uIENsb3VkRnJvbnQgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqICBUaGUgbWluaW11bSBhbW91bnQgb2YgdGltZSB0aGF0IHlvdSB3YW50IG9iamVjdHMgdG8gc3RheSBpbiBDbG91ZEZyb250IGNhY2hlcyBiZWZvcmUgQ2xvdWRGcm9udCBmb3J3YXJkcyBhbm90aGVyIHJlcXVlc3QgdG8geW91ciBvcmlnaW4gdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIG9iamVjdCBoYXMgYmVlbiB1cGRhdGVkLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtNYW5hZ2luZyBIb3cgTG9uZyBDb250ZW50IFN0YXlzIGluIGFuIEVkZ2UgQ2FjaGUgKEV4cGlyYXRpb24pXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvRXhwaXJhdGlvbi5odG1sKSBpbiB0aGUgKkFtYXpvbiBDbG91ZEZyb250IERldmVsb3BlciBHdWlkZSouXG4gKiAgWW91IG11c3Qgc3BlY2lmeSBgYDBgYCBmb3IgYGBNaW5UVExgYCBpZiB5b3UgY29uZmlndXJlIENsb3VkRnJvbnQgdG8gZm9yd2FyZCBhbGwgaGVhZGVycyB0byB5b3VyIG9yaWdpbiAodW5kZXIgYGBIZWFkZXJzYGAsIGlmIHlvdSBzcGVjaWZ5IGBgMWBgIGZvciBgYFF1YW50aXR5YGAgYW5kIGBgKmBgIGZvciBgYE5hbWVgYCkuXG4gKi9cbk1pblRUTD86IG51bWJlclxuLyoqXG4gKiBUaGUgdW5pcXVlIGlkZW50aWZpZXIgb2YgdGhlIG9yaWdpbiByZXF1ZXN0IHBvbGljeSB0aGF0IGlzIGF0dGFjaGVkIHRvIHRoaXMgY2FjaGUgYmVoYXZpb3IuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0NyZWF0aW5nIG9yaWdpbiByZXF1ZXN0IHBvbGljaWVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvY29udHJvbGxpbmctb3JpZ2luLXJlcXVlc3RzLmh0bWwjb3JpZ2luLXJlcXVlc3QtY3JlYXRlLW9yaWdpbi1yZXF1ZXN0LXBvbGljeSkgb3IgW1VzaW5nIHRoZSBtYW5hZ2VkIG9yaWdpbiByZXF1ZXN0IHBvbGljaWVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvdXNpbmctbWFuYWdlZC1vcmlnaW4tcmVxdWVzdC1wb2xpY2llcy5odG1sKSBpbiB0aGUgKkFtYXpvbiBDbG91ZEZyb250IERldmVsb3BlciBHdWlkZSouXG4gKi9cbk9yaWdpblJlcXVlc3RQb2xpY3lJZD86IHN0cmluZ1xuLyoqXG4gKiBUaGUgcGF0dGVybiAoZm9yIGV4YW1wbGUsIGBgaW1hZ2VzLyouanBnYGApIHRoYXQgc3BlY2lmaWVzIHdoaWNoIHJlcXVlc3RzIHRvIGFwcGx5IHRoZSBiZWhhdmlvciB0by4gV2hlbiBDbG91ZEZyb250IHJlY2VpdmVzIGEgdmlld2VyIHJlcXVlc3QsIHRoZSByZXF1ZXN0ZWQgcGF0aCBpcyBjb21wYXJlZCB3aXRoIHBhdGggcGF0dGVybnMgaW4gdGhlIG9yZGVyIGluIHdoaWNoIGNhY2hlIGJlaGF2aW9ycyBhcmUgbGlzdGVkIGluIHRoZSBkaXN0cmlidXRpb24uXG4gKiAgIFlvdSBjYW4gb3B0aW9uYWxseSBpbmNsdWRlIGEgc2xhc2ggKGBgL2BgKSBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBwYXRoIHBhdHRlcm4uIEZvciBleGFtcGxlLCBgYC9pbWFnZXMvKi5qcGdgYC4gQ2xvdWRGcm9udCBiZWhhdmlvciBpcyB0aGUgc2FtZSB3aXRoIG9yIHdpdGhvdXQgdGhlIGxlYWRpbmcgYGAvYGAuXG4gKiAgIFRoZSBwYXRoIHBhdHRlcm4gZm9yIHRoZSBkZWZhdWx0IGNhY2hlIGJlaGF2aW9yIGlzIGBgKmBgIGFuZCBjYW5ub3QgYmUgY2hhbmdlZC4gSWYgdGhlIHJlcXVlc3QgZm9yIGFuIG9iamVjdCBkb2VzIG5vdCBtYXRjaCB0aGUgcGF0aCBwYXR0ZXJuIGZvciBhbnkgY2FjaGUgYmVoYXZpb3JzLCBDbG91ZEZyb250IGFwcGxpZXMgdGhlIGJlaGF2aW9yIGluIHRoZSBkZWZhdWx0IGNhY2hlIGJlaGF2aW9yLlxuICogIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1BhdGggUGF0dGVybl0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL2Rpc3RyaWJ1dGlvbi13ZWItdmFsdWVzLXNwZWNpZnkuaHRtbCNEb3dubG9hZERpc3RWYWx1ZXNQYXRoUGF0dGVybikgaW4gdGhlICpBbWF6b24gQ2xvdWRGcm9udCBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5QYXRoUGF0dGVybjogc3RyaW5nXG4vKipcbiAqIFRoZSBBbWF6b24gUmVzb3VyY2UgTmFtZSAoQVJOKSBvZiB0aGUgcmVhbC10aW1lIGxvZyBjb25maWd1cmF0aW9uIHRoYXQgaXMgYXR0YWNoZWQgdG8gdGhpcyBjYWNoZSBiZWhhdmlvci4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbUmVhbC10aW1lIGxvZ3NdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9yZWFsLXRpbWUtbG9ncy5odG1sKSBpbiB0aGUgKkFtYXpvbiBDbG91ZEZyb250IERldmVsb3BlciBHdWlkZSouXG4gKi9cblJlYWx0aW1lTG9nQ29uZmlnQXJuPzogc3RyaW5nXG4vKipcbiAqIFRoZSBpZGVudGlmaWVyIGZvciBhIHJlc3BvbnNlIGhlYWRlcnMgcG9saWN5LlxuICovXG5SZXNwb25zZUhlYWRlcnNQb2xpY3lJZD86IHN0cmluZ1xuLyoqXG4gKiBUaGlzIGZpZWxkIG9ubHkgc3VwcG9ydHMgc3RhbmRhcmQgZGlzdHJpYnV0aW9ucy4gWW91IGNhbid0IHNwZWNpZnkgdGhpcyBmaWVsZCBmb3IgbXVsdGktdGVuYW50IGRpc3RyaWJ1dGlvbnMuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1Vuc3VwcG9ydGVkIGZlYXR1cmVzIGZvciBTYWFTIE1hbmFnZXIgZm9yIEFtYXpvbiBDbG91ZEZyb250XShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvZGlzdHJpYnV0aW9uLWNvbmZpZy1vcHRpb25zLmh0bWwjdW5zdXBwb3J0ZWQtc2FhcykgaW4gdGhlICpBbWF6b24gQ2xvdWRGcm9udCBEZXZlbG9wZXIgR3VpZGUqLlxuICogICBJbmRpY2F0ZXMgd2hldGhlciB5b3Ugd2FudCB0byBkaXN0cmlidXRlIG1lZGlhIGZpbGVzIGluIHRoZSBNaWNyb3NvZnQgU21vb3RoIFN0cmVhbWluZyBmb3JtYXQgdXNpbmcgdGhlIG9yaWdpbiB0aGF0IGlzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGNhY2hlIGJlaGF2aW9yLiBJZiBzbywgc3BlY2lmeSBgYHRydWVgYDsgaWYgbm90LCBzcGVjaWZ5IGBgZmFsc2VgYC4gSWYgeW91IHNwZWNpZnkgYGB0cnVlYGAgZm9yIGBgU21vb3RoU3RyZWFtaW5nYGAsIHlvdSBjYW4gc3RpbGwgZGlzdHJpYnV0ZSBvdGhlciBjb250ZW50IHVzaW5nIHRoaXMgY2FjaGUgYmVoYXZpb3IgaWYgdGhlIGNvbnRlbnQgbWF0Y2hlcyB0aGUgdmFsdWUgb2YgYGBQYXRoUGF0dGVybmBgLlxuICovXG5TbW9vdGhTdHJlYW1pbmc/OiBib29sZWFuXG4vKipcbiAqIFRoZSB2YWx1ZSBvZiBgYElEYGAgZm9yIHRoZSBvcmlnaW4gdGhhdCB5b3Ugd2FudCBDbG91ZEZyb250IHRvIHJvdXRlIHJlcXVlc3RzIHRvIHdoZW4gdGhleSBtYXRjaCB0aGlzIGNhY2hlIGJlaGF2aW9yLlxuICovXG5UYXJnZXRPcmlnaW5JZDogc3RyaW5nXG4vKipcbiAqIEEgbGlzdCBvZiBrZXkgZ3JvdXBzIHRoYXQgQ2xvdWRGcm9udCBjYW4gdXNlIHRvIHZhbGlkYXRlIHNpZ25lZCBVUkxzIG9yIHNpZ25lZCBjb29raWVzLlxuICogIFdoZW4gYSBjYWNoZSBiZWhhdmlvciBjb250YWlucyB0cnVzdGVkIGtleSBncm91cHMsIENsb3VkRnJvbnQgcmVxdWlyZXMgc2lnbmVkIFVSTHMgb3Igc2lnbmVkIGNvb2tpZXMgZm9yIGFsbCByZXF1ZXN0cyB0aGF0IG1hdGNoIHRoZSBjYWNoZSBiZWhhdmlvci4gVGhlIFVSTHMgb3IgY29va2llcyBtdXN0IGJlIHNpZ25lZCB3aXRoIGEgcHJpdmF0ZSBrZXkgd2hvc2UgY29ycmVzcG9uZGluZyBwdWJsaWMga2V5IGlzIGluIHRoZSBrZXkgZ3JvdXAuIFRoZSBzaWduZWQgVVJMIG9yIGNvb2tpZSBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCB3aGljaCBwdWJsaWMga2V5IENsb3VkRnJvbnQgc2hvdWxkIHVzZSB0byB2ZXJpZnkgdGhlIHNpZ25hdHVyZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbU2VydmluZyBwcml2YXRlIGNvbnRlbnRdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9Qcml2YXRlQ29udGVudC5odG1sKSBpbiB0aGUgKkFtYXpvbiBDbG91ZEZyb250IERldmVsb3BlciBHdWlkZSouXG4gKi9cblRydXN0ZWRLZXlHcm91cHM/OiBzdHJpbmdbXVxuLyoqXG4gKiBXZSByZWNvbW1lbmQgdXNpbmcgYGBUcnVzdGVkS2V5R3JvdXBzYGAgaW5zdGVhZCBvZiBgYFRydXN0ZWRTaWduZXJzYGAuXG4gKiAgICBUaGlzIGZpZWxkIG9ubHkgc3VwcG9ydHMgc3RhbmRhcmQgZGlzdHJpYnV0aW9ucy4gWW91IGNhbid0IHNwZWNpZnkgdGhpcyBmaWVsZCBmb3IgbXVsdGktdGVuYW50IGRpc3RyaWJ1dGlvbnMuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1Vuc3VwcG9ydGVkIGZlYXR1cmVzIGZvciBTYWFTIE1hbmFnZXIgZm9yIEFtYXpvbiBDbG91ZEZyb250XShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvZGlzdHJpYnV0aW9uLWNvbmZpZy1vcHRpb25zLmh0bWwjdW5zdXBwb3J0ZWQtc2FhcykgaW4gdGhlICpBbWF6b24gQ2xvdWRGcm9udCBEZXZlbG9wZXIgR3VpZGUqLlxuICogICBBIGxpc3Qgb2YgQVdTLWFjY291bnQgSURzIHdob3NlIHB1YmxpYyBrZXlzIENsb3VkRnJvbnQgY2FuIHVzZSB0byB2YWxpZGF0ZSBzaWduZWQgVVJMcyBvciBzaWduZWQgY29va2llcy5cbiAqICBXaGVuIGEgY2FjaGUgYmVoYXZpb3IgY29udGFpbnMgdHJ1c3RlZCBzaWduZXJzLCBDbG91ZEZyb250IHJlcXVpcmVzIHNpZ25lZCBVUkxzIG9yIHNpZ25lZCBjb29raWVzIGZvciBhbGwgcmVxdWVzdHMgdGhhdCBtYXRjaCB0aGUgY2FjaGUgYmVoYXZpb3IuIFRoZSBVUkxzIG9yIGNvb2tpZXMgbXVzdCBiZSBzaWduZWQgd2l0aCB0aGUgcHJpdmF0ZSBrZXkgb2YgYSBDbG91ZEZyb250IGtleSBwYWlyIGluIHRoZSB0cnVzdGVkIHNpZ25lcidzIEFXUy1hY2NvdW50LiBUaGUgc2lnbmVkIFVSTCBvciBjb29raWUgY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgd2hpY2ggcHVibGljIGtleSBDbG91ZEZyb250IHNob3VsZCB1c2UgdG8gdmVyaWZ5IHRoZSBzaWduYXR1cmUuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1NlcnZpbmcgcHJpdmF0ZSBjb250ZW50XShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvUHJpdmF0ZUNvbnRlbnQuaHRtbCkgaW4gdGhlICpBbWF6b24gQ2xvdWRGcm9udCBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5UcnVzdGVkU2lnbmVycz86IHN0cmluZ1tdXG4vKipcbiAqIFRoZSBwcm90b2NvbCB0aGF0IHZpZXdlcnMgY2FuIHVzZSB0byBhY2Nlc3MgdGhlIGZpbGVzIGluIHRoZSBvcmlnaW4gc3BlY2lmaWVkIGJ5IGBgVGFyZ2V0T3JpZ2luSWRgYCB3aGVuIGEgcmVxdWVzdCBtYXRjaGVzIHRoZSBwYXRoIHBhdHRlcm4gaW4gYGBQYXRoUGF0dGVybmBgLiBZb3UgY2FuIHNwZWNpZnkgdGhlIGZvbGxvd2luZyBvcHRpb25zOlxuICogICArICBgYGFsbG93LWFsbGBgOiBWaWV3ZXJzIGNhbiB1c2UgSFRUUCBvciBIVFRQUy5cbiAqICAgKyAgYGByZWRpcmVjdC10by1odHRwc2BgOiBJZiBhIHZpZXdlciBzdWJtaXRzIGFuIEhUVFAgcmVxdWVzdCwgQ2xvdWRGcm9udCByZXR1cm5zIGFuIEhUVFAgc3RhdHVzIGNvZGUgb2YgMzAxIChNb3ZlZCBQZXJtYW5lbnRseSkgdG8gdGhlIHZpZXdlciBhbG9uZyB3aXRoIHRoZSBIVFRQUyBVUkwuIFRoZSB2aWV3ZXIgdGhlbiByZXN1Ym1pdHMgdGhlIHJlcXVlc3QgdXNpbmcgdGhlIG5ldyBVUkwuXG4gKiAgICsgIGBgaHR0cHMtb25seWBgOiBJZiBhIHZpZXdlciBzZW5kcyBhbiBIVFRQIHJlcXVlc3QsIENsb3VkRnJvbnQgcmV0dXJucyBhbiBIVFRQIHN0YXR1cyBjb2RlIG9mIDQwMyAoRm9yYmlkZGVuKS5cbiAqICAgXG4gKiAgRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcmVxdWlyaW5nIHRoZSBIVFRQUyBwcm90b2NvbCwgc2VlIFtSZXF1aXJpbmcgSFRUUFMgQmV0d2VlbiBWaWV3ZXJzIGFuZCBDbG91ZEZyb250XShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvdXNpbmctaHR0cHMtdmlld2Vycy10by1jbG91ZGZyb250Lmh0bWwpIGluIHRoZSAqQW1hem9uIENsb3VkRnJvbnQgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqICAgVGhlIG9ubHkgd2F5IHRvIGd1YXJhbnRlZSB0aGF0IHZpZXdlcnMgcmV0cmlldmUgYW4gb2JqZWN0IHRoYXQgd2FzIGZldGNoZWQgZnJvbSB0aGUgb3JpZ2luIHVzaW5nIEhUVFBTIGlzIG5ldmVyIHRvIHVzZSBhbnkgb3RoZXIgcHJvdG9jb2wgdG8gZmV0Y2ggdGhlIG9iamVjdC4gSWYgeW91IGhhdmUgcmVjZW50bHkgY2hhbmdlZCBmcm9tIEhUVFAgdG8gSFRUUFMsIHdlIHJlY29tbWVuZCB0aGF0IHlvdSBjbGVhciB5b3VyIG9iamVjdHMnIGNhY2hlIGJlY2F1c2UgY2FjaGVkIG9iamVjdHMgYXJlIHByb3RvY29sIGFnbm9zdGljLiBUaGF0IG1lYW5zIHRoYXQgYW4gZWRnZSBsb2NhdGlvbiB3aWxsIHJldHVybiBhbiBvYmplY3QgZnJvbSB0aGUgY2FjaGUgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZSBjdXJyZW50IHJlcXVlc3QgcHJvdG9jb2wgbWF0Y2hlcyB0aGUgcHJvdG9jb2wgdXNlZCBwcmV2aW91c2x5LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtNYW5hZ2luZyBDYWNoZSBFeHBpcmF0aW9uXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvRXhwaXJhdGlvbi5odG1sKSBpbiB0aGUgKkFtYXpvbiBDbG91ZEZyb250IERldmVsb3BlciBHdWlkZSouXG4gKi9cblZpZXdlclByb3RvY29sUG9saWN5OiBzdHJpbmdcbn1cbi8qKlxuICogVGhpcyBmaWVsZCBpcyBkZXByZWNhdGVkLiBXZSByZWNvbW1lbmQgdGhhdCB5b3UgdXNlIGEgY2FjaGUgcG9saWN5IG9yIGFuIG9yaWdpbiByZXF1ZXN0IHBvbGljeSBpbnN0ZWFkIG9mIHRoaXMgZmllbGQuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1dvcmtpbmcgd2l0aCBwb2xpY2llc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL3dvcmtpbmctd2l0aC1wb2xpY2llcy5odG1sKSBpbiB0aGUgKkFtYXpvbiBDbG91ZEZyb250IERldmVsb3BlciBHdWlkZSouXG4gKiAgSWYgeW91IHdhbnQgdG8gaW5jbHVkZSB2YWx1ZXMgaW4gdGhlIGNhY2hlIGtleSwgdXNlIGEgY2FjaGUgcG9saWN5LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtDcmVhdGluZyBjYWNoZSBwb2xpY2llc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL2NvbnRyb2xsaW5nLXRoZS1jYWNoZS1rZXkuaHRtbCNjYWNoZS1rZXktY3JlYXRlLWNhY2hlLXBvbGljeSkgb3IgW1VzaW5nIHRoZSBtYW5hZ2VkIGNhY2hlIHBvbGljaWVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvdXNpbmctbWFuYWdlZC1jYWNoZS1wb2xpY2llcy5odG1sKSBpbiB0aGUgKkFtYXpvbiBDbG91ZEZyb250IERldmVsb3BlciBHdWlkZSouXG4gKiAgSWYgeW91IHdhbnQgdG8gc2VuZCB2YWx1ZXMgdG8gdGhlIG9yaWdpbiBidXQgbm90IGluY2x1ZGUgdGhlbSBpbiB0aGUgY2FjaGUga2V5LCB1c2UgYW4gb3JpZ2luIHJlcXVlc3QgcG9saWN5LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtDcmVhdGluZyBvcmlnaW4gcmVxdWVzdCBwb2xpY2llc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL2NvbnRyb2xsaW5nLW9yaWdpbi1yZXF1ZXN0cy5odG1sI29yaWdpbi1yZXF1ZXN0LWNyZWF0ZS1vcmlnaW4tcmVxdWVzdC1wb2xpY3kpIG9yIFtVc2luZyB0aGUgbWFuYWdlZCBvcmlnaW4gcmVxdWVzdCBwb2xpY2llc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL3VzaW5nLW1hbmFnZWQtb3JpZ2luLXJlcXVlc3QtcG9saWNpZXMuaHRtbCkgaW4gdGhlICpBbWF6b24gQ2xvdWRGcm9udCBEZXZlbG9wZXIgR3VpZGUqLlxuICogIEEgYGBDYWNoZUJlaGF2aW9yYGAgbXVzdCBpbmNsdWRlIGVpdGhlciBhIGBgQ2FjaGVQb2xpY3lJZGBgIG9yIGBgRm9yd2FyZGVkVmFsdWVzYGAuIFdlIHJlY29tbWVuZCB0aGF0IHlvdSB1c2UgYSBgYENhY2hlUG9saWN5SWRgYC5cbiAqICBBIGNvbXBsZXggdHlwZSB0aGF0IHNwZWNpZmllcyBob3cgQ2xvdWRGcm9udCBoYW5kbGVzIHF1ZXJ5IHN0cmluZ3MsIGNvb2tpZXMsIGFuZCBIVFRQIGhlYWRlcnMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRm9yd2FyZGVkVmFsdWVzIHtcbkNvb2tpZXM/OiBDb29raWVzXG4vKipcbiAqIFRoaXMgZmllbGQgaXMgZGVwcmVjYXRlZC4gV2UgcmVjb21tZW5kIHRoYXQgeW91IHVzZSBhIGNhY2hlIHBvbGljeSBvciBhbiBvcmlnaW4gcmVxdWVzdCBwb2xpY3kgaW5zdGVhZCBvZiB0aGlzIGZpZWxkLlxuICogIElmIHlvdSB3YW50IHRvIGluY2x1ZGUgaGVhZGVycyBpbiB0aGUgY2FjaGUga2V5LCB1c2UgYSBjYWNoZSBwb2xpY3kuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0NyZWF0aW5nIGNhY2hlIHBvbGljaWVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvY29udHJvbGxpbmctdGhlLWNhY2hlLWtleS5odG1sI2NhY2hlLWtleS1jcmVhdGUtY2FjaGUtcG9saWN5KSBpbiB0aGUgKkFtYXpvbiBDbG91ZEZyb250IERldmVsb3BlciBHdWlkZSouXG4gKiAgSWYgeW91IHdhbnQgdG8gc2VuZCBoZWFkZXJzIHRvIHRoZSBvcmlnaW4gYnV0IG5vdCBpbmNsdWRlIHRoZW0gaW4gdGhlIGNhY2hlIGtleSwgdXNlIGFuIG9yaWdpbiByZXF1ZXN0IHBvbGljeS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbQ3JlYXRpbmcgb3JpZ2luIHJlcXVlc3QgcG9saWNpZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9jb250cm9sbGluZy1vcmlnaW4tcmVxdWVzdHMuaHRtbCNvcmlnaW4tcmVxdWVzdC1jcmVhdGUtb3JpZ2luLXJlcXVlc3QtcG9saWN5KSBpbiB0aGUgKkFtYXpvbiBDbG91ZEZyb250IERldmVsb3BlciBHdWlkZSouXG4gKiAgQSBjb21wbGV4IHR5cGUgdGhhdCBzcGVjaWZpZXMgdGhlIGBgSGVhZGVyc2BgLCBpZiBhbnksIHRoYXQgeW91IHdhbnQgQ2xvdWRGcm9udCB0byBmb3J3YXJkIHRvIHRoZSBvcmlnaW4gZm9yIHRoaXMgY2FjaGUgYmVoYXZpb3IgKHdoaXRlbGlzdGVkIGhlYWRlcnMpLiBGb3IgdGhlIGhlYWRlcnMgdGhhdCB5b3Ugc3BlY2lmeSwgQ2xvdWRGcm9udCBhbHNvIGNhY2hlcyBzZXBhcmF0ZSB2ZXJzaW9ucyBvZiBhIHNwZWNpZmllZCBvYmplY3QgdGhhdCBpcyBiYXNlZCBvbiB0aGUgaGVhZGVyIHZhbHVlcyBpbiB2aWV3ZXIgcmVxdWVzdHMuXG4gKiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbQ2FjaGluZyBDb250ZW50IEJhc2VkIG9uIFJlcXVlc3QgSGVhZGVyc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL2hlYWRlci1jYWNoaW5nLmh0bWwpIGluIHRoZSAqQW1hem9uIENsb3VkRnJvbnQgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuSGVhZGVycz86IHN0cmluZ1tdXG4vKipcbiAqIFRoaXMgZmllbGQgaXMgZGVwcmVjYXRlZC4gV2UgcmVjb21tZW5kIHRoYXQgeW91IHVzZSBhIGNhY2hlIHBvbGljeSBvciBhbiBvcmlnaW4gcmVxdWVzdCBwb2xpY3kgaW5zdGVhZCBvZiB0aGlzIGZpZWxkLlxuICogIElmIHlvdSB3YW50IHRvIGluY2x1ZGUgcXVlcnkgc3RyaW5ncyBpbiB0aGUgY2FjaGUga2V5LCB1c2UgYSBjYWNoZSBwb2xpY3kuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0NyZWF0aW5nIGNhY2hlIHBvbGljaWVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvY29udHJvbGxpbmctdGhlLWNhY2hlLWtleS5odG1sI2NhY2hlLWtleS1jcmVhdGUtY2FjaGUtcG9saWN5KSBpbiB0aGUgKkFtYXpvbiBDbG91ZEZyb250IERldmVsb3BlciBHdWlkZSouXG4gKiAgSWYgeW91IHdhbnQgdG8gc2VuZCBxdWVyeSBzdHJpbmdzIHRvIHRoZSBvcmlnaW4gYnV0IG5vdCBpbmNsdWRlIHRoZW0gaW4gdGhlIGNhY2hlIGtleSwgdXNlIGFuIG9yaWdpbiByZXF1ZXN0IHBvbGljeS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbQ3JlYXRpbmcgb3JpZ2luIHJlcXVlc3QgcG9saWNpZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9jb250cm9sbGluZy1vcmlnaW4tcmVxdWVzdHMuaHRtbCNvcmlnaW4tcmVxdWVzdC1jcmVhdGUtb3JpZ2luLXJlcXVlc3QtcG9saWN5KSBpbiB0aGUgKkFtYXpvbiBDbG91ZEZyb250IERldmVsb3BlciBHdWlkZSouXG4gKiAgSW5kaWNhdGVzIHdoZXRoZXIgeW91IHdhbnQgQ2xvdWRGcm9udCB0byBmb3J3YXJkIHF1ZXJ5IHN0cmluZ3MgdG8gdGhlIG9yaWdpbiB0aGF0IGlzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGNhY2hlIGJlaGF2aW9yIGFuZCBjYWNoZSBiYXNlZCBvbiB0aGUgcXVlcnkgc3RyaW5nIHBhcmFtZXRlcnMuIENsb3VkRnJvbnQgYmVoYXZpb3IgZGVwZW5kcyBvbiB0aGUgdmFsdWUgb2YgYGBRdWVyeVN0cmluZ2BgIGFuZCBvbiB0aGUgdmFsdWVzIHRoYXQgeW91IHNwZWNpZnkgZm9yIGBgUXVlcnlTdHJpbmdDYWNoZUtleXNgYCwgaWYgYW55OlxuICogIElmIHlvdSBzcGVjaWZ5IHRydWUgZm9yIGBgUXVlcnlTdHJpbmdgYCBhbmQgeW91IGRvbid0IHNwZWNpZnkgYW55IHZhbHVlcyBmb3IgYGBRdWVyeVN0cmluZ0NhY2hlS2V5c2BgLCBDbG91ZEZyb250IGZvcndhcmRzIGFsbCBxdWVyeSBzdHJpbmcgcGFyYW1ldGVycyB0byB0aGUgb3JpZ2luIGFuZCBjYWNoZXMgYmFzZWQgb24gYWxsIHF1ZXJ5IHN0cmluZyBwYXJhbWV0ZXJzLiBEZXBlbmRpbmcgb24gaG93IG1hbnkgcXVlcnkgc3RyaW5nIHBhcmFtZXRlcnMgYW5kIHZhbHVlcyB5b3UgaGF2ZSwgdGhpcyBjYW4gYWR2ZXJzZWx5IGFmZmVjdCBwZXJmb3JtYW5jZSBiZWNhdXNlIENsb3VkRnJvbnQgbXVzdCBmb3J3YXJkIG1vcmUgcmVxdWVzdHMgdG8gdGhlIG9yaWdpbi5cbiAqICBJZiB5b3Ugc3BlY2lmeSB0cnVlIGZvciBgYFF1ZXJ5U3RyaW5nYGAgYW5kIHlvdSBzcGVjaWZ5IG9uZSBvciBtb3JlIHZhbHVlcyBmb3IgYGBRdWVyeVN0cmluZ0NhY2hlS2V5c2BgLCBDbG91ZEZyb250IGZvcndhcmRzIGFsbCBxdWVyeSBzdHJpbmcgcGFyYW1ldGVycyB0byB0aGUgb3JpZ2luLCBidXQgaXQgb25seSBjYWNoZXMgYmFzZWQgb24gdGhlIHF1ZXJ5IHN0cmluZyBwYXJhbWV0ZXJzIHRoYXQgeW91IHNwZWNpZnkuXG4gKiAgSWYgeW91IHNwZWNpZnkgZmFsc2UgZm9yIGBgUXVlcnlTdHJpbmdgYCwgQ2xvdWRGcm9udCBkb2Vzbid0IGZvcndhcmQgYW55IHF1ZXJ5IHN0cmluZyBwYXJhbWV0ZXJzIHRvIHRoZSBvcmlnaW4sIGFuZCBkb2Vzbid0IGNhY2hlIGJhc2VkIG9uIHF1ZXJ5IHN0cmluZyBwYXJhbWV0ZXJzLlxuICogIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0NvbmZpZ3VyaW5nIENsb3VkRnJvbnQgdG8gQ2FjaGUgQmFzZWQgb24gUXVlcnkgU3RyaW5nIFBhcmFtZXRlcnNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9RdWVyeVN0cmluZ1BhcmFtZXRlcnMuaHRtbCkgaW4gdGhlICpBbWF6b24gQ2xvdWRGcm9udCBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5RdWVyeVN0cmluZzogYm9vbGVhblxuLyoqXG4gKiBUaGlzIGZpZWxkIGlzIGRlcHJlY2F0ZWQuIFdlIHJlY29tbWVuZCB0aGF0IHlvdSB1c2UgYSBjYWNoZSBwb2xpY3kgb3IgYW4gb3JpZ2luIHJlcXVlc3QgcG9saWN5IGluc3RlYWQgb2YgdGhpcyBmaWVsZC5cbiAqICBJZiB5b3Ugd2FudCB0byBpbmNsdWRlIHF1ZXJ5IHN0cmluZ3MgaW4gdGhlIGNhY2hlIGtleSwgdXNlIGEgY2FjaGUgcG9saWN5LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtDcmVhdGluZyBjYWNoZSBwb2xpY2llc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL2NvbnRyb2xsaW5nLXRoZS1jYWNoZS1rZXkuaHRtbCNjYWNoZS1rZXktY3JlYXRlLWNhY2hlLXBvbGljeSkgaW4gdGhlICpBbWF6b24gQ2xvdWRGcm9udCBEZXZlbG9wZXIgR3VpZGUqLlxuICogIElmIHlvdSB3YW50IHRvIHNlbmQgcXVlcnkgc3RyaW5ncyB0byB0aGUgb3JpZ2luIGJ1dCBub3QgaW5jbHVkZSB0aGVtIGluIHRoZSBjYWNoZSBrZXksIHVzZSBhbiBvcmlnaW4gcmVxdWVzdCBwb2xpY3kuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0NyZWF0aW5nIG9yaWdpbiByZXF1ZXN0IHBvbGljaWVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvY29udHJvbGxpbmctb3JpZ2luLXJlcXVlc3RzLmh0bWwjb3JpZ2luLXJlcXVlc3QtY3JlYXRlLW9yaWdpbi1yZXF1ZXN0LXBvbGljeSkgaW4gdGhlICpBbWF6b24gQ2xvdWRGcm9udCBEZXZlbG9wZXIgR3VpZGUqLlxuICogIEEgY29tcGxleCB0eXBlIHRoYXQgY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHF1ZXJ5IHN0cmluZyBwYXJhbWV0ZXJzIHRoYXQgeW91IHdhbnQgQ2xvdWRGcm9udCB0byB1c2UgZm9yIGNhY2hpbmcgZm9yIHRoaXMgY2FjaGUgYmVoYXZpb3IuXG4gKi9cblF1ZXJ5U3RyaW5nQ2FjaGVLZXlzPzogc3RyaW5nW11cbn1cbi8qKlxuICogVGhpcyBmaWVsZCBpcyBkZXByZWNhdGVkLiBXZSByZWNvbW1lbmQgdGhhdCB5b3UgdXNlIGEgY2FjaGUgcG9saWN5IG9yIGFuIG9yaWdpbiByZXF1ZXN0IHBvbGljeSBpbnN0ZWFkIG9mIHRoaXMgZmllbGQuXG4gKiAgSWYgeW91IHdhbnQgdG8gaW5jbHVkZSBjb29raWVzIGluIHRoZSBjYWNoZSBrZXksIHVzZSBhIGNhY2hlIHBvbGljeS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbQ3JlYXRpbmcgY2FjaGUgcG9saWNpZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9jb250cm9sbGluZy10aGUtY2FjaGUta2V5Lmh0bWwjY2FjaGUta2V5LWNyZWF0ZS1jYWNoZS1wb2xpY3kpIGluIHRoZSAqQW1hem9uIENsb3VkRnJvbnQgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqICBJZiB5b3Ugd2FudCB0byBzZW5kIGNvb2tpZXMgdG8gdGhlIG9yaWdpbiBidXQgbm90IGluY2x1ZGUgdGhlbSBpbiB0aGUgY2FjaGUga2V5LCB1c2UgYW4gb3JpZ2luIHJlcXVlc3QgcG9saWN5LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtDcmVhdGluZyBvcmlnaW4gcmVxdWVzdCBwb2xpY2llc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL2NvbnRyb2xsaW5nLW9yaWdpbi1yZXF1ZXN0cy5odG1sI29yaWdpbi1yZXF1ZXN0LWNyZWF0ZS1vcmlnaW4tcmVxdWVzdC1wb2xpY3kpIGluIHRoZSAqQW1hem9uIENsb3VkRnJvbnQgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqICBBIGNvbXBsZXggdHlwZSB0aGF0IHNwZWNpZmllcyB3aGV0aGVyIHlvdSB3YW50IENsb3VkRnJvbnQgdG8gZm9yd2FyZCBjb29raWVzIHRvIHRoZSBvcmlnaW4gYW5kLCBpZiBzbywgd2hpY2ggb25lcy4gRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgZm9yd2FyZGluZyBjb29raWVzIHRvIHRoZSBvcmlnaW4sIHNlZSBbSG93IENsb3VkRnJvbnQgRm9yd2FyZHMsIENhY2hlcywgYW5kIExvZ3MgQ29va2llc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL0Nvb2tpZXMuaHRtbCkgaW4gdGhlICpBbWF6b24gQ2xvdWRGcm9udCBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvb2tpZXMge1xuLyoqXG4gKiBUaGlzIGZpZWxkIGlzIGRlcHJlY2F0ZWQuIFdlIHJlY29tbWVuZCB0aGF0IHlvdSB1c2UgYSBjYWNoZSBwb2xpY3kgb3IgYW4gb3JpZ2luIHJlcXVlc3QgcG9saWN5IGluc3RlYWQgb2YgdGhpcyBmaWVsZC5cbiAqICBJZiB5b3Ugd2FudCB0byBpbmNsdWRlIGNvb2tpZXMgaW4gdGhlIGNhY2hlIGtleSwgdXNlIGEgY2FjaGUgcG9saWN5LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtDcmVhdGluZyBjYWNoZSBwb2xpY2llc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL2NvbnRyb2xsaW5nLXRoZS1jYWNoZS1rZXkuaHRtbCNjYWNoZS1rZXktY3JlYXRlLWNhY2hlLXBvbGljeSkgaW4gdGhlICpBbWF6b24gQ2xvdWRGcm9udCBEZXZlbG9wZXIgR3VpZGUqLlxuICogIElmIHlvdSB3YW50IHRvIHNlbmQgY29va2llcyB0byB0aGUgb3JpZ2luIGJ1dCBub3QgaW5jbHVkZSB0aGVtIGluIHRoZSBjYWNoZSBrZXksIHVzZSBvcmlnaW4gcmVxdWVzdCBwb2xpY3kuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0NyZWF0aW5nIG9yaWdpbiByZXF1ZXN0IHBvbGljaWVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvY29udHJvbGxpbmctb3JpZ2luLXJlcXVlc3RzLmh0bWwjb3JpZ2luLXJlcXVlc3QtY3JlYXRlLW9yaWdpbi1yZXF1ZXN0LXBvbGljeSkgaW4gdGhlICpBbWF6b24gQ2xvdWRGcm9udCBEZXZlbG9wZXIgR3VpZGUqLlxuICogIFNwZWNpZmllcyB3aGljaCBjb29raWVzIHRvIGZvcndhcmQgdG8gdGhlIG9yaWdpbiBmb3IgdGhpcyBjYWNoZSBiZWhhdmlvcjogYWxsLCBub25lLCBvciB0aGUgbGlzdCBvZiBjb29raWVzIHNwZWNpZmllZCBpbiB0aGUgYGBXaGl0ZWxpc3RlZE5hbWVzYGAgY29tcGxleCB0eXBlLlxuICogIEFtYXpvbiBTMyBkb2Vzbid0IHByb2Nlc3MgY29va2llcy4gV2hlbiB0aGUgY2FjaGUgYmVoYXZpb3IgaXMgZm9yd2FyZGluZyByZXF1ZXN0cyB0byBhbiBBbWF6b24gUzMgb3JpZ2luLCBzcGVjaWZ5IG5vbmUgZm9yIHRoZSBgYEZvcndhcmRgYCBlbGVtZW50LlxuICovXG5Gb3J3YXJkOiBzdHJpbmdcbi8qKlxuICogVGhpcyBmaWVsZCBpcyBkZXByZWNhdGVkLiBXZSByZWNvbW1lbmQgdGhhdCB5b3UgdXNlIGEgY2FjaGUgcG9saWN5IG9yIGFuIG9yaWdpbiByZXF1ZXN0IHBvbGljeSBpbnN0ZWFkIG9mIHRoaXMgZmllbGQuXG4gKiAgSWYgeW91IHdhbnQgdG8gaW5jbHVkZSBjb29raWVzIGluIHRoZSBjYWNoZSBrZXksIHVzZSBhIGNhY2hlIHBvbGljeS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbQ3JlYXRpbmcgY2FjaGUgcG9saWNpZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9jb250cm9sbGluZy10aGUtY2FjaGUta2V5Lmh0bWwjY2FjaGUta2V5LWNyZWF0ZS1jYWNoZS1wb2xpY3kpIGluIHRoZSAqQW1hem9uIENsb3VkRnJvbnQgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqICBJZiB5b3Ugd2FudCB0byBzZW5kIGNvb2tpZXMgdG8gdGhlIG9yaWdpbiBidXQgbm90IGluY2x1ZGUgdGhlbSBpbiB0aGUgY2FjaGUga2V5LCB1c2UgYW4gb3JpZ2luIHJlcXVlc3QgcG9saWN5LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtDcmVhdGluZyBvcmlnaW4gcmVxdWVzdCBwb2xpY2llc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL2NvbnRyb2xsaW5nLW9yaWdpbi1yZXF1ZXN0cy5odG1sI29yaWdpbi1yZXF1ZXN0LWNyZWF0ZS1vcmlnaW4tcmVxdWVzdC1wb2xpY3kpIGluIHRoZSAqQW1hem9uIENsb3VkRnJvbnQgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqICBSZXF1aXJlZCBpZiB5b3Ugc3BlY2lmeSBgYHdoaXRlbGlzdGBgIGZvciB0aGUgdmFsdWUgb2YgYGBGb3J3YXJkYGAuIEEgY29tcGxleCB0eXBlIHRoYXQgc3BlY2lmaWVzIGhvdyBtYW55IGRpZmZlcmVudCBjb29raWVzIHlvdSB3YW50IENsb3VkRnJvbnQgdG8gZm9yd2FyZCB0byB0aGUgb3JpZ2luIGZvciB0aGlzIGNhY2hlIGJlaGF2aW9yIGFuZCwgaWYgeW91IHdhbnQgdG8gZm9yd2FyZCBzZWxlY3RlZCBjb29raWVzLCB0aGUgbmFtZXMgb2YgdGhvc2UgY29va2llcy5cbiAqICBJZiB5b3Ugc3BlY2lmeSBgYGFsbGBgIG9yIGBgbm9uZWBgIGZvciB0aGUgdmFsdWUgb2YgYGBGb3J3YXJkYGAsIG9taXQgYGBXaGl0ZWxpc3RlZE5hbWVzYGAuIElmIHlvdSBjaGFuZ2UgdGhlIHZhbHVlIG9mIGBgRm9yd2FyZGBgIGZyb20gYGB3aGl0ZWxpc3RgYCB0byBgYGFsbGBgIG9yIGBgbm9uZWBgIGFuZCB5b3UgZG9uJ3QgZGVsZXRlIHRoZSBgYFdoaXRlbGlzdGVkTmFtZXNgYCBlbGVtZW50IGFuZCBpdHMgY2hpbGQgZWxlbWVudHMsIENsb3VkRnJvbnQgZGVsZXRlcyB0aGVtIGF1dG9tYXRpY2FsbHkuXG4gKiAgRm9yIHRoZSBjdXJyZW50IGxpbWl0IG9uIHRoZSBudW1iZXIgb2YgY29va2llIG5hbWVzIHRoYXQgeW91IGNhbiB3aGl0ZWxpc3QgZm9yIGVhY2ggY2FjaGUgYmVoYXZpb3IsIHNlZSBbQ2xvdWRGcm9udCBMaW1pdHNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9nZW5lcmFsL2xhdGVzdC9nci94cmVmYXdzX3NlcnZpY2VfbGltaXRzLmh0bWwjbGltaXRzX2Nsb3VkZnJvbnQpIGluIHRoZSAqR2VuZXJhbCBSZWZlcmVuY2UqLlxuICovXG5XaGl0ZWxpc3RlZE5hbWVzPzogc3RyaW5nW11cbn1cbi8qKlxuICogQSBDbG91ZEZyb250IGZ1bmN0aW9uIHRoYXQgaXMgYXNzb2NpYXRlZCB3aXRoIGEgY2FjaGUgYmVoYXZpb3IgaW4gYSBDbG91ZEZyb250IGRpc3RyaWJ1dGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGdW5jdGlvbkFzc29jaWF0aW9uIHtcbi8qKlxuICogVGhlIGV2ZW50IHR5cGUgb2YgdGhlIGZ1bmN0aW9uLCBlaXRoZXIgYGB2aWV3ZXItcmVxdWVzdGBgIG9yIGBgdmlld2VyLXJlc3BvbnNlYGAuIFlvdSBjYW5ub3QgdXNlIG9yaWdpbi1mYWNpbmcgZXZlbnQgdHlwZXMgKGBgb3JpZ2luLXJlcXVlc3RgYCBhbmQgYGBvcmlnaW4tcmVzcG9uc2VgYCkgd2l0aCBhIENsb3VkRnJvbnQgZnVuY3Rpb24uXG4gKi9cbkV2ZW50VHlwZT86IHN0cmluZ1xuLyoqXG4gKiBUaGUgQW1hem9uIFJlc291cmNlIE5hbWUgKEFSTikgb2YgdGhlIGZ1bmN0aW9uLlxuICovXG5GdW5jdGlvbkFSTj86IHN0cmluZ1xufVxuLyoqXG4gKiBUaGUgZ1JQQyBjb25maWd1cmF0aW9uIGZvciB5b3VyIGNhY2hlIGJlaGF2aW9yLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdycGNDb25maWcge1xuLyoqXG4gKiBFbmFibGVzIHlvdXIgQ2xvdWRGcm9udCBkaXN0cmlidXRpb24gdG8gcmVjZWl2ZSBnUlBDIHJlcXVlc3RzIGFuZCB0byBwcm94eSB0aGVtIGRpcmVjdGx5IHRvIHlvdXIgb3JpZ2lucy5cbiAqL1xuRW5hYmxlZDogYm9vbGVhblxufVxuLyoqXG4gKiBBIGNvbXBsZXggdHlwZSB0aGF0IGNvbnRhaW5zIGEgTGFtYmRhQEVkZ2UgZnVuY3Rpb24gYXNzb2NpYXRpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGFtYmRhRnVuY3Rpb25Bc3NvY2lhdGlvbiB7XG4vKipcbiAqIFNwZWNpZmllcyB0aGUgZXZlbnQgdHlwZSB0aGF0IHRyaWdnZXJzIGEgTGFtYmRhQEVkZ2UgZnVuY3Rpb24gaW52b2NhdGlvbi4gWW91IGNhbiBzcGVjaWZ5IHRoZSBmb2xsb3dpbmcgdmFsdWVzOlxuICogICArICBgYHZpZXdlci1yZXF1ZXN0YGA6IFRoZSBmdW5jdGlvbiBleGVjdXRlcyB3aGVuIENsb3VkRnJvbnQgcmVjZWl2ZXMgYSByZXF1ZXN0IGZyb20gYSB2aWV3ZXIgYW5kIGJlZm9yZSBpdCBjaGVja3MgdG8gc2VlIHdoZXRoZXIgdGhlIHJlcXVlc3RlZCBvYmplY3QgaXMgaW4gdGhlIGVkZ2UgY2FjaGUuXG4gKiAgICsgIGBgb3JpZ2luLXJlcXVlc3RgYDogVGhlIGZ1bmN0aW9uIGV4ZWN1dGVzIG9ubHkgd2hlbiBDbG91ZEZyb250IHNlbmRzIGEgcmVxdWVzdCB0byB5b3VyIG9yaWdpbi4gV2hlbiB0aGUgcmVxdWVzdGVkIG9iamVjdCBpcyBpbiB0aGUgZWRnZSBjYWNoZSwgdGhlIGZ1bmN0aW9uIGRvZXNuJ3QgZXhlY3V0ZS5cbiAqICAgKyAgYGBvcmlnaW4tcmVzcG9uc2VgYDogVGhlIGZ1bmN0aW9uIGV4ZWN1dGVzIGFmdGVyIENsb3VkRnJvbnQgcmVjZWl2ZXMgYSByZXNwb25zZSBmcm9tIHRoZSBvcmlnaW4gYW5kIGJlZm9yZSBpdCBjYWNoZXMgdGhlIG9iamVjdCBpbiB0aGUgcmVzcG9uc2UuIFdoZW4gdGhlIHJlcXVlc3RlZCBvYmplY3QgaXMgaW4gdGhlIGVkZ2UgY2FjaGUsIHRoZSBmdW5jdGlvbiBkb2Vzbid0IGV4ZWN1dGUuXG4gKiAgICsgIGBgdmlld2VyLXJlc3BvbnNlYGA6IFRoZSBmdW5jdGlvbiBleGVjdXRlcyBiZWZvcmUgQ2xvdWRGcm9udCByZXR1cm5zIHRoZSByZXF1ZXN0ZWQgb2JqZWN0IHRvIHRoZSB2aWV3ZXIuIFRoZSBmdW5jdGlvbiBleGVjdXRlcyByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhlIG9iamVjdCB3YXMgYWxyZWFkeSBpbiB0aGUgZWRnZSBjYWNoZS5cbiAqICBJZiB0aGUgb3JpZ2luIHJldHVybnMgYW4gSFRUUCBzdGF0dXMgY29kZSBvdGhlciB0aGFuIEhUVFAgMjAwIChPSyksIHRoZSBmdW5jdGlvbiBkb2Vzbid0IGV4ZWN1dGUuXG4gKi9cbkV2ZW50VHlwZT86IHN0cmluZ1xuLyoqXG4gKiBBIGZsYWcgdGhhdCBhbGxvd3MgYSBMYW1iZGFARWRnZSBmdW5jdGlvbiB0byBoYXZlIHJlYWQgYWNjZXNzIHRvIHRoZSBib2R5IGNvbnRlbnQuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0FjY2Vzc2luZyB0aGUgUmVxdWVzdCBCb2R5IGJ5IENob29zaW5nIHRoZSBJbmNsdWRlIEJvZHkgT3B0aW9uXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvbGFtYmRhLWluY2x1ZGUtYm9keS1hY2Nlc3MuaHRtbCkgaW4gdGhlIEFtYXpvbiBDbG91ZEZyb250IERldmVsb3BlciBHdWlkZS5cbiAqL1xuSW5jbHVkZUJvZHk/OiBib29sZWFuXG4vKipcbiAqIFRoZSBBUk4gb2YgdGhlIExhbWJkYUBFZGdlIGZ1bmN0aW9uLiBZb3UgbXVzdCBzcGVjaWZ5IHRoZSBBUk4gb2YgYSBmdW5jdGlvbiB2ZXJzaW9uOyB5b3UgY2FuJ3Qgc3BlY2lmeSBhbiBhbGlhcyBvciAkTEFURVNULlxuICovXG5MYW1iZGFGdW5jdGlvbkFSTj86IHN0cmluZ1xufVxuLyoqXG4gKiBUaGUgZGlzdHJpYnV0aW9uJ3MgY29ubmVjdGlvbiBmdW5jdGlvbiBhc3NvY2lhdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb25uZWN0aW9uRnVuY3Rpb25Bc3NvY2lhdGlvbiB7XG4vKipcbiAqIFRoZSBhc3NvY2lhdGlvbidzIElELlxuICovXG5JZDogc3RyaW5nXG59XG4vKipcbiAqIEEgY29tcGxleCB0eXBlIHRoYXQgY29udHJvbHM6XG4gKiAgICsgIFdoZXRoZXIgQ2xvdWRGcm9udCByZXBsYWNlcyBIVFRQIHN0YXR1cyBjb2RlcyBpbiB0aGUgNHh4IGFuZCA1eHggcmFuZ2Ugd2l0aCBjdXN0b20gZXJyb3IgbWVzc2FnZXMgYmVmb3JlIHJldHVybmluZyB0aGUgcmVzcG9uc2UgdG8gdGhlIHZpZXdlci5cbiAqICAgKyAgSG93IGxvbmcgQ2xvdWRGcm9udCBjYWNoZXMgSFRUUCBzdGF0dXMgY29kZXMgaW4gdGhlIDR4eCBhbmQgNXh4IHJhbmdlLlxuICogICBcbiAqICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBjdXN0b20gZXJyb3IgcGFnZXMsIHNlZSBbQ3VzdG9taXppbmcgRXJyb3IgUmVzcG9uc2VzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvY3VzdG9tLWVycm9yLXBhZ2VzLmh0bWwpIGluIHRoZSAqQW1hem9uIENsb3VkRnJvbnQgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDdXN0b21FcnJvclJlc3BvbnNlIHtcbi8qKlxuICogVGhlIG1pbmltdW0gYW1vdW50IG9mIHRpbWUsIGluIHNlY29uZHMsIHRoYXQgeW91IHdhbnQgQ2xvdWRGcm9udCB0byBjYWNoZSB0aGUgSFRUUCBzdGF0dXMgY29kZSBzcGVjaWZpZWQgaW4gYGBFcnJvckNvZGVgYC4gV2hlbiB0aGlzIHRpbWUgcGVyaW9kIGhhcyBlbGFwc2VkLCBDbG91ZEZyb250IHF1ZXJpZXMgeW91ciBvcmlnaW4gdG8gc2VlIHdoZXRoZXIgdGhlIHByb2JsZW0gdGhhdCBjYXVzZWQgdGhlIGVycm9yIGhhcyBiZWVuIHJlc29sdmVkIGFuZCB0aGUgcmVxdWVzdGVkIG9iamVjdCBpcyBub3cgYXZhaWxhYmxlLlxuICogIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0N1c3RvbWl6aW5nIEVycm9yIFJlc3BvbnNlc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL2N1c3RvbS1lcnJvci1wYWdlcy5odG1sKSBpbiB0aGUgKkFtYXpvbiBDbG91ZEZyb250IERldmVsb3BlciBHdWlkZSouXG4gKi9cbkVycm9yQ2FjaGluZ01pblRUTD86IG51bWJlclxuLyoqXG4gKiBUaGUgSFRUUCBzdGF0dXMgY29kZSBmb3Igd2hpY2ggeW91IHdhbnQgdG8gc3BlY2lmeSBhIGN1c3RvbSBlcnJvciBwYWdlIGFuZC9vciBhIGNhY2hpbmcgZHVyYXRpb24uXG4gKi9cbkVycm9yQ29kZTogbnVtYmVyXG4vKipcbiAqIFRoZSBIVFRQIHN0YXR1cyBjb2RlIHRoYXQgeW91IHdhbnQgQ2xvdWRGcm9udCB0byByZXR1cm4gdG8gdGhlIHZpZXdlciBhbG9uZyB3aXRoIHRoZSBjdXN0b20gZXJyb3IgcGFnZS4gVGhlcmUgYXJlIGEgdmFyaWV0eSBvZiByZWFzb25zIHRoYXQgeW91IG1pZ2h0IHdhbnQgQ2xvdWRGcm9udCB0byByZXR1cm4gYSBzdGF0dXMgY29kZSBkaWZmZXJlbnQgZnJvbSB0aGUgc3RhdHVzIGNvZGUgdGhhdCB5b3VyIG9yaWdpbiByZXR1cm5lZCB0byBDbG91ZEZyb250LCBmb3IgZXhhbXBsZTpcbiAqICAgKyAgU29tZSBJbnRlcm5ldCBkZXZpY2VzIChzb21lIGZpcmV3YWxscyBhbmQgY29ycG9yYXRlIHByb3hpZXMsIGZvciBleGFtcGxlKSBpbnRlcmNlcHQgSFRUUCA0eHggYW5kIDV4eCBhbmQgcHJldmVudCB0aGUgcmVzcG9uc2UgZnJvbSBiZWluZyByZXR1cm5lZCB0byB0aGUgdmlld2VyLiBJZiB5b3Ugc3Vic3RpdHV0ZSBgYDIwMGBgLCB0aGUgcmVzcG9uc2UgdHlwaWNhbGx5IHdvbid0IGJlIGludGVyY2VwdGVkLlxuICogICArICBJZiB5b3UgZG9uJ3QgY2FyZSBhYm91dCBkaXN0aW5ndWlzaGluZyBhbW9uZyBkaWZmZXJlbnQgY2xpZW50IGVycm9ycyBvciBzZXJ2ZXIgZXJyb3JzLCB5b3UgY2FuIHNwZWNpZnkgYGA0MDBgYCBvciBgYDUwMGBgIGFzIHRoZSBgYFJlc3BvbnNlQ29kZWBgIGZvciBhbGwgNHh4IG9yIDV4eCBlcnJvcnMuXG4gKiAgICsgIFlvdSBtaWdodCB3YW50IHRvIHJldHVybiBhIGBgMjAwYGAgc3RhdHVzIGNvZGUgKE9LKSBhbmQgc3RhdGljIHdlYnNpdGUgc28geW91ciBjdXN0b21lcnMgZG9uJ3Qga25vdyB0aGF0IHlvdXIgd2Vic2l0ZSBpcyBkb3duLlxuICogICBcbiAqICBJZiB5b3Ugc3BlY2lmeSBhIHZhbHVlIGZvciBgYFJlc3BvbnNlQ29kZWBgLCB5b3UgbXVzdCBhbHNvIHNwZWNpZnkgYSB2YWx1ZSBmb3IgYGBSZXNwb25zZVBhZ2VQYXRoYGAuXG4gKi9cblJlc3BvbnNlQ29kZT86IG51bWJlclxuLyoqXG4gKiBUaGUgcGF0aCB0byB0aGUgY3VzdG9tIGVycm9yIHBhZ2UgdGhhdCB5b3Ugd2FudCBDbG91ZEZyb250IHRvIHJldHVybiB0byBhIHZpZXdlciB3aGVuIHlvdXIgb3JpZ2luIHJldHVybnMgdGhlIEhUVFAgc3RhdHVzIGNvZGUgc3BlY2lmaWVkIGJ5IGBgRXJyb3JDb2RlYGAsIGZvciBleGFtcGxlLCBgYC80eHgtZXJyb3JzLzQwMy1mb3JiaWRkZW4uaHRtbGBgLiBJZiB5b3Ugd2FudCB0byBzdG9yZSB5b3VyIG9iamVjdHMgYW5kIHlvdXIgY3VzdG9tIGVycm9yIHBhZ2VzIGluIGRpZmZlcmVudCBsb2NhdGlvbnMsIHlvdXIgZGlzdHJpYnV0aW9uIG11c3QgaW5jbHVkZSBhIGNhY2hlIGJlaGF2aW9yIGZvciB3aGljaCB0aGUgZm9sbG93aW5nIGlzIHRydWU6XG4gKiAgICsgIFRoZSB2YWx1ZSBvZiBgYFBhdGhQYXR0ZXJuYGAgbWF0Y2hlcyB0aGUgcGF0aCB0byB5b3VyIGN1c3RvbSBlcnJvciBtZXNzYWdlcy4gRm9yIGV4YW1wbGUsIHN1cHBvc2UgeW91IHNhdmVkIGN1c3RvbSBlcnJvciBwYWdlcyBmb3IgNHh4IGVycm9ycyBpbiBhbiBBbWF6b24gUzMgYnVja2V0IGluIGEgZGlyZWN0b3J5IG5hbWVkIGBgLzR4eC1lcnJvcnNgYC4gWW91ciBkaXN0cmlidXRpb24gbXVzdCBpbmNsdWRlIGEgY2FjaGUgYmVoYXZpb3IgZm9yIHdoaWNoIHRoZSBwYXRoIHBhdHRlcm4gcm91dGVzIHJlcXVlc3RzIGZvciB5b3VyIGN1c3RvbSBlcnJvciBwYWdlcyB0byB0aGF0IGxvY2F0aW9uLCBmb3IgZXhhbXBsZSwgYGAvNHh4LWVycm9ycy8qYGAuXG4gKiAgICsgIFRoZSB2YWx1ZSBvZiBgYFRhcmdldE9yaWdpbklkYGAgc3BlY2lmaWVzIHRoZSB2YWx1ZSBvZiB0aGUgYGBJRGBgIGVsZW1lbnQgZm9yIHRoZSBvcmlnaW4gdGhhdCBjb250YWlucyB5b3VyIGN1c3RvbSBlcnJvciBwYWdlcy5cbiAqICAgXG4gKiAgSWYgeW91IHNwZWNpZnkgYSB2YWx1ZSBmb3IgYGBSZXNwb25zZVBhZ2VQYXRoYGAsIHlvdSBtdXN0IGFsc28gc3BlY2lmeSBhIHZhbHVlIGZvciBgYFJlc3BvbnNlQ29kZWBgLlxuICogIFdlIHJlY29tbWVuZCB0aGF0IHlvdSBzdG9yZSBjdXN0b20gZXJyb3IgcGFnZXMgaW4gYW4gQW1hem9uIFMzIGJ1Y2tldC4gSWYgeW91IHN0b3JlIGN1c3RvbSBlcnJvciBwYWdlcyBvbiBhbiBIVFRQIHNlcnZlciBhbmQgdGhlIHNlcnZlciBzdGFydHMgdG8gcmV0dXJuIDV4eCBlcnJvcnMsIENsb3VkRnJvbnQgY2FuJ3QgZ2V0IHRoZSBmaWxlcyB0aGF0IHlvdSB3YW50IHRvIHJldHVybiB0byB2aWV3ZXJzIGJlY2F1c2UgdGhlIG9yaWdpbiBzZXJ2ZXIgaXMgdW5hdmFpbGFibGUuXG4gKi9cblJlc3BvbnNlUGFnZVBhdGg/OiBzdHJpbmdcbn1cbi8qKlxuICogVGhlIHVzZXItZGVmaW5lZCBIVFRQIHNlcnZlciB0aGF0IHNlcnZlcyBhcyB0aGUgb3JpZ2luIGZvciBjb250ZW50IHRoYXQgQ0YgZGlzdHJpYnV0ZXMuXG4gKiAgIFRoaXMgcHJvcGVydHkgaXMgbGVnYWN5LiBXZSByZWNvbW1lbmQgdGhhdCB5b3UgdXNlIFtPcmlnaW5dKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1wcm9wZXJ0aWVzLWNsb3VkZnJvbnQtZGlzdHJpYnV0aW9uLW9yaWdpbi5odG1sKSBpbnN0ZWFkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIExlZ2FjeUN1c3RvbU9yaWdpbiB7XG4vKipcbiAqIFRoZSBkb21haW4gbmFtZSBhc3NpZ25lZCB0byB5b3VyIENGIGRpc3RyaWJ1dGlvbi5cbiAqL1xuRE5TTmFtZTogc3RyaW5nXG4vKipcbiAqIFRoZSBIVFRQIHBvcnQgdGhhdCBDRiB1c2VzIHRvIGNvbm5lY3QgdG8gdGhlIG9yaWdpbi4gU3BlY2lmeSB0aGUgSFRUUCBwb3J0IHRoYXQgdGhlIG9yaWdpbiBsaXN0ZW5zIG9uLlxuICovXG5IVFRQUG9ydD86IG51bWJlclxuLyoqXG4gKiBUaGUgSFRUUFMgcG9ydCB0aGF0IENGIHVzZXMgdG8gY29ubmVjdCB0byB0aGUgb3JpZ2luLiBTcGVjaWZ5IHRoZSBIVFRQUyBwb3J0IHRoYXQgdGhlIG9yaWdpbiBsaXN0ZW5zIG9uLlxuICovXG5IVFRQU1BvcnQ/OiBudW1iZXJcbi8qKlxuICogU3BlY2lmaWVzIHRoZSBwcm90b2NvbCAoSFRUUCBvciBIVFRQUykgdGhhdCBDRiB1c2VzIHRvIGNvbm5lY3QgdG8gdGhlIG9yaWdpbi5cbiAqL1xuT3JpZ2luUHJvdG9jb2xQb2xpY3k6IHN0cmluZ1xuLyoqXG4gKiBUaGUgbWluaW11bSBTU0wvVExTIHByb3RvY29sIHZlcnNpb24gdGhhdCBDRiB1c2VzIHdoZW4gY29tbXVuaWNhdGluZyB3aXRoIHlvdXIgb3JpZ2luIHNlcnZlciBvdmVyIEhUVFBzLlxuICogIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW01pbmltdW0gT3JpZ2luIFNTTCBQcm90b2NvbF0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL2Rpc3RyaWJ1dGlvbi13ZWItdmFsdWVzLXNwZWNpZnkuaHRtbCNEb3dubG9hZERpc3RWYWx1ZXNPcmlnaW5TU0xQcm90b2NvbHMpIGluIHRoZSAqRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuT3JpZ2luU1NMUHJvdG9jb2xzOiBzdHJpbmdbXVxufVxuLyoqXG4gKiBBIGNvbXBsZXggdHlwZSB0aGF0IGRlc2NyaWJlcyB0aGUgZGVmYXVsdCBjYWNoZSBiZWhhdmlvciBpZiB5b3UgZG9uJ3Qgc3BlY2lmeSBhIGBgQ2FjaGVCZWhhdmlvcmBgIGVsZW1lbnQgb3IgaWYgZmlsZXMgZG9uJ3QgbWF0Y2ggYW55IG9mIHRoZSB2YWx1ZXMgb2YgYGBQYXRoUGF0dGVybmBgIGluIGBgQ2FjaGVCZWhhdmlvcmBgIGVsZW1lbnRzLiBZb3UgbXVzdCBjcmVhdGUgZXhhY3RseSBvbmUgZGVmYXVsdCBjYWNoZSBiZWhhdmlvci5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEZWZhdWx0Q2FjaGVCZWhhdmlvciB7XG4vKipcbiAqIEEgY29tcGxleCB0eXBlIHRoYXQgY29udHJvbHMgd2hpY2ggSFRUUCBtZXRob2RzIENsb3VkRnJvbnQgcHJvY2Vzc2VzIGFuZCBmb3J3YXJkcyB0byB5b3VyIEFtYXpvbiBTMyBidWNrZXQgb3IgeW91ciBjdXN0b20gb3JpZ2luLiBUaGVyZSBhcmUgdGhyZWUgY2hvaWNlczpcbiAqICAgKyAgQ2xvdWRGcm9udCBmb3J3YXJkcyBvbmx5IGBgR0VUYGAgYW5kIGBgSEVBRGBgIHJlcXVlc3RzLlxuICogICArICBDbG91ZEZyb250IGZvcndhcmRzIG9ubHkgYGBHRVRgYCwgYGBIRUFEYGAsIGFuZCBgYE9QVElPTlNgYCByZXF1ZXN0cy5cbiAqICAgKyAgQ2xvdWRGcm9udCBmb3J3YXJkcyBgYEdFVCwgSEVBRCwgT1BUSU9OUywgUFVULCBQQVRDSCwgUE9TVGBgLCBhbmQgYGBERUxFVEVgYCByZXF1ZXN0cy5cbiAqICAgXG4gKiAgSWYgeW91IHBpY2sgdGhlIHRoaXJkIGNob2ljZSwgeW91IG1heSBuZWVkIHRvIHJlc3RyaWN0IGFjY2VzcyB0byB5b3VyIEFtYXpvbiBTMyBidWNrZXQgb3IgdG8geW91ciBjdXN0b20gb3JpZ2luIHNvIHVzZXJzIGNhbid0IHBlcmZvcm0gb3BlcmF0aW9ucyB0aGF0IHlvdSBkb24ndCB3YW50IHRoZW0gdG8uIEZvciBleGFtcGxlLCB5b3UgbWlnaHQgbm90IHdhbnQgdXNlcnMgdG8gaGF2ZSBwZXJtaXNzaW9ucyB0byBkZWxldGUgb2JqZWN0cyBmcm9tIHlvdXIgb3JpZ2luLlxuICovXG5BbGxvd2VkTWV0aG9kcz86IHN0cmluZ1tdXG4vKipcbiAqIFRoZSB1bmlxdWUgaWRlbnRpZmllciBvZiB0aGUgY2FjaGUgcG9saWN5IHRoYXQgaXMgYXR0YWNoZWQgdG8gdGhlIGRlZmF1bHQgY2FjaGUgYmVoYXZpb3IuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0NyZWF0aW5nIGNhY2hlIHBvbGljaWVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvY29udHJvbGxpbmctdGhlLWNhY2hlLWtleS5odG1sI2NhY2hlLWtleS1jcmVhdGUtY2FjaGUtcG9saWN5KSBvciBbVXNpbmcgdGhlIG1hbmFnZWQgY2FjaGUgcG9saWNpZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS91c2luZy1tYW5hZ2VkLWNhY2hlLXBvbGljaWVzLmh0bWwpIGluIHRoZSAqQW1hem9uIENsb3VkRnJvbnQgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqICBBIGBgRGVmYXVsdENhY2hlQmVoYXZpb3JgYCBtdXN0IGluY2x1ZGUgZWl0aGVyIGEgYGBDYWNoZVBvbGljeUlkYGAgb3IgYGBGb3J3YXJkZWRWYWx1ZXNgYC4gV2UgcmVjb21tZW5kIHRoYXQgeW91IHVzZSBhIGBgQ2FjaGVQb2xpY3lJZGBgLlxuICovXG5DYWNoZVBvbGljeUlkPzogc3RyaW5nXG4vKipcbiAqIEEgY29tcGxleCB0eXBlIHRoYXQgY29udHJvbHMgd2hldGhlciBDbG91ZEZyb250IGNhY2hlcyB0aGUgcmVzcG9uc2UgdG8gcmVxdWVzdHMgdXNpbmcgdGhlIHNwZWNpZmllZCBIVFRQIG1ldGhvZHMuIFRoZXJlIGFyZSB0d28gY2hvaWNlczpcbiAqICAgKyAgQ2xvdWRGcm9udCBjYWNoZXMgcmVzcG9uc2VzIHRvIGBgR0VUYGAgYW5kIGBgSEVBRGBgIHJlcXVlc3RzLlxuICogICArICBDbG91ZEZyb250IGNhY2hlcyByZXNwb25zZXMgdG8gYGBHRVRgYCwgYGBIRUFEYGAsIGFuZCBgYE9QVElPTlNgYCByZXF1ZXN0cy5cbiAqICAgXG4gKiAgSWYgeW91IHBpY2sgdGhlIHNlY29uZCBjaG9pY2UgZm9yIHlvdXIgQW1hem9uIFMzIE9yaWdpbiwgeW91IG1heSBuZWVkIHRvIGZvcndhcmQgQWNjZXNzLUNvbnRyb2wtUmVxdWVzdC1NZXRob2QsIEFjY2Vzcy1Db250cm9sLVJlcXVlc3QtSGVhZGVycywgYW5kIE9yaWdpbiBoZWFkZXJzIGZvciB0aGUgcmVzcG9uc2VzIHRvIGJlIGNhY2hlZCBjb3JyZWN0bHkuXG4gKi9cbkNhY2hlZE1ldGhvZHM/OiBzdHJpbmdbXVxuLyoqXG4gKiBXaGV0aGVyIHlvdSB3YW50IENsb3VkRnJvbnQgdG8gYXV0b21hdGljYWxseSBjb21wcmVzcyBjZXJ0YWluIGZpbGVzIGZvciB0aGlzIGNhY2hlIGJlaGF2aW9yLiBJZiBzbywgc3BlY2lmeSBgYHRydWVgYDsgaWYgbm90LCBzcGVjaWZ5IGBgZmFsc2VgYC4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbU2VydmluZyBDb21wcmVzc2VkIEZpbGVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvU2VydmluZ0NvbXByZXNzZWRGaWxlcy5odG1sKSBpbiB0aGUgKkFtYXpvbiBDbG91ZEZyb250IERldmVsb3BlciBHdWlkZSouXG4gKi9cbkNvbXByZXNzPzogYm9vbGVhblxuLyoqXG4gKiBUaGlzIGZpZWxkIG9ubHkgc3VwcG9ydHMgc3RhbmRhcmQgZGlzdHJpYnV0aW9ucy4gWW91IGNhbid0IHNwZWNpZnkgdGhpcyBmaWVsZCBmb3IgbXVsdGktdGVuYW50IGRpc3RyaWJ1dGlvbnMuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1Vuc3VwcG9ydGVkIGZlYXR1cmVzIGZvciBTYWFTIE1hbmFnZXIgZm9yIEFtYXpvbiBDbG91ZEZyb250XShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvZGlzdHJpYnV0aW9uLWNvbmZpZy1vcHRpb25zLmh0bWwjdW5zdXBwb3J0ZWQtc2FhcykgaW4gdGhlICpBbWF6b24gQ2xvdWRGcm9udCBEZXZlbG9wZXIgR3VpZGUqLlxuICogICBUaGlzIGZpZWxkIGlzIGRlcHJlY2F0ZWQuIFdlIHJlY29tbWVuZCB0aGF0IHlvdSB1c2UgdGhlIGBgRGVmYXVsdFRUTGBgIGZpZWxkIGluIGEgY2FjaGUgcG9saWN5IGluc3RlYWQgb2YgdGhpcyBmaWVsZC4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbQ3JlYXRpbmcgY2FjaGUgcG9saWNpZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9jb250cm9sbGluZy10aGUtY2FjaGUta2V5Lmh0bWwjY2FjaGUta2V5LWNyZWF0ZS1jYWNoZS1wb2xpY3kpIG9yIFtVc2luZyB0aGUgbWFuYWdlZCBjYWNoZSBwb2xpY2llc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL3VzaW5nLW1hbmFnZWQtY2FjaGUtcG9saWNpZXMuaHRtbCkgaW4gdGhlICpBbWF6b24gQ2xvdWRGcm9udCBEZXZlbG9wZXIgR3VpZGUqLlxuICogIFRoZSBkZWZhdWx0IGFtb3VudCBvZiB0aW1lIHRoYXQgeW91IHdhbnQgb2JqZWN0cyB0byBzdGF5IGluIENsb3VkRnJvbnQgY2FjaGVzIGJlZm9yZSBDbG91ZEZyb250IGZvcndhcmRzIGFub3RoZXIgcmVxdWVzdCB0byB5b3VyIG9yaWdpbiB0byBkZXRlcm1pbmUgd2hldGhlciB0aGUgb2JqZWN0IGhhcyBiZWVuIHVwZGF0ZWQuIFRoZSB2YWx1ZSB0aGF0IHlvdSBzcGVjaWZ5IGFwcGxpZXMgb25seSB3aGVuIHlvdXIgb3JpZ2luIGRvZXMgbm90IGFkZCBIVFRQIGhlYWRlcnMgc3VjaCBhcyBgYENhY2hlLUNvbnRyb2wgbWF4LWFnZWBgLCBgYENhY2hlLUNvbnRyb2wgcy1tYXhhZ2VgYCwgYW5kIGBgRXhwaXJlc2BgIHRvIG9iamVjdHMuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW01hbmFnaW5nIEhvdyBMb25nIENvbnRlbnQgU3RheXMgaW4gYW4gRWRnZSBDYWNoZSAoRXhwaXJhdGlvbildKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9FeHBpcmF0aW9uLmh0bWwpIGluIHRoZSAqQW1hem9uIENsb3VkRnJvbnQgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuRGVmYXVsdFRUTD86IG51bWJlclxuLyoqXG4gKiBUaGUgdmFsdWUgb2YgYGBJRGBgIGZvciB0aGUgZmllbGQtbGV2ZWwgZW5jcnlwdGlvbiBjb25maWd1cmF0aW9uIHRoYXQgeW91IHdhbnQgQ2xvdWRGcm9udCB0byB1c2UgZm9yIGVuY3J5cHRpbmcgc3BlY2lmaWMgZmllbGRzIG9mIGRhdGEgZm9yIHRoZSBkZWZhdWx0IGNhY2hlIGJlaGF2aW9yLlxuICovXG5GaWVsZExldmVsRW5jcnlwdGlvbklkPzogc3RyaW5nXG5Gb3J3YXJkZWRWYWx1ZXM/OiBGb3J3YXJkZWRWYWx1ZXMxXG4vKipcbiAqIEEgbGlzdCBvZiBDbG91ZEZyb250IGZ1bmN0aW9ucyB0aGF0IGFyZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBjYWNoZSBiZWhhdmlvci4gWW91ciBmdW5jdGlvbnMgbXVzdCBiZSBwdWJsaXNoZWQgdG8gdGhlIGBgTElWRWBgIHN0YWdlIHRvIGFzc29jaWF0ZSB0aGVtIHdpdGggYSBjYWNoZSBiZWhhdmlvci5cbiAqL1xuRnVuY3Rpb25Bc3NvY2lhdGlvbnM/OiBGdW5jdGlvbkFzc29jaWF0aW9uW11cbkdycGNDb25maWc/OiBHcnBjQ29uZmlnMVxuLyoqXG4gKiBBIGNvbXBsZXggdHlwZSB0aGF0IGNvbnRhaW5zIHplcm8gb3IgbW9yZSBMYW1iZGFARWRnZSBmdW5jdGlvbiBhc3NvY2lhdGlvbnMgZm9yIGEgY2FjaGUgYmVoYXZpb3IuXG4gKi9cbkxhbWJkYUZ1bmN0aW9uQXNzb2NpYXRpb25zPzogTGFtYmRhRnVuY3Rpb25Bc3NvY2lhdGlvbltdXG4vKipcbiAqIFRoaXMgZmllbGQgb25seSBzdXBwb3J0cyBzdGFuZGFyZCBkaXN0cmlidXRpb25zLiBZb3UgY2FuJ3Qgc3BlY2lmeSB0aGlzIGZpZWxkIGZvciBtdWx0aS10ZW5hbnQgZGlzdHJpYnV0aW9ucy4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbVW5zdXBwb3J0ZWQgZmVhdHVyZXMgZm9yIFNhYVMgTWFuYWdlciBmb3IgQW1hem9uIENsb3VkRnJvbnRdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9kaXN0cmlidXRpb24tY29uZmlnLW9wdGlvbnMuaHRtbCN1bnN1cHBvcnRlZC1zYWFzKSBpbiB0aGUgKkFtYXpvbiBDbG91ZEZyb250IERldmVsb3BlciBHdWlkZSouXG4gKiAgIFRoaXMgZmllbGQgaXMgZGVwcmVjYXRlZC4gV2UgcmVjb21tZW5kIHRoYXQgeW91IHVzZSB0aGUgYGBNYXhUVExgYCBmaWVsZCBpbiBhIGNhY2hlIHBvbGljeSBpbnN0ZWFkIG9mIHRoaXMgZmllbGQuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0NyZWF0aW5nIGNhY2hlIHBvbGljaWVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvY29udHJvbGxpbmctdGhlLWNhY2hlLWtleS5odG1sI2NhY2hlLWtleS1jcmVhdGUtY2FjaGUtcG9saWN5KSBvciBbVXNpbmcgdGhlIG1hbmFnZWQgY2FjaGUgcG9saWNpZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS91c2luZy1tYW5hZ2VkLWNhY2hlLXBvbGljaWVzLmh0bWwpIGluIHRoZSAqQW1hem9uIENsb3VkRnJvbnQgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqICBUaGUgbWF4aW11bSBhbW91bnQgb2YgdGltZSB0aGF0IHlvdSB3YW50IG9iamVjdHMgdG8gc3RheSBpbiBDbG91ZEZyb250IGNhY2hlcyBiZWZvcmUgQ2xvdWRGcm9udCBmb3J3YXJkcyBhbm90aGVyIHJlcXVlc3QgdG8geW91ciBvcmlnaW4gdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIG9iamVjdCBoYXMgYmVlbiB1cGRhdGVkLiBUaGUgdmFsdWUgdGhhdCB5b3Ugc3BlY2lmeSBhcHBsaWVzIG9ubHkgd2hlbiB5b3VyIG9yaWdpbiBhZGRzIEhUVFAgaGVhZGVycyBzdWNoIGFzIGBgQ2FjaGUtQ29udHJvbCBtYXgtYWdlYGAsIGBgQ2FjaGUtQ29udHJvbCBzLW1heGFnZWBgLCBhbmQgYGBFeHBpcmVzYGAgdG8gb2JqZWN0cy4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbTWFuYWdpbmcgSG93IExvbmcgQ29udGVudCBTdGF5cyBpbiBhbiBFZGdlIENhY2hlIChFeHBpcmF0aW9uKV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL0V4cGlyYXRpb24uaHRtbCkgaW4gdGhlICpBbWF6b24gQ2xvdWRGcm9udCBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5NYXhUVEw/OiBudW1iZXJcbi8qKlxuICogVGhpcyBmaWVsZCBvbmx5IHN1cHBvcnRzIHN0YW5kYXJkIGRpc3RyaWJ1dGlvbnMuIFlvdSBjYW4ndCBzcGVjaWZ5IHRoaXMgZmllbGQgZm9yIG11bHRpLXRlbmFudCBkaXN0cmlidXRpb25zLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtVbnN1cHBvcnRlZCBmZWF0dXJlcyBmb3IgU2FhUyBNYW5hZ2VyIGZvciBBbWF6b24gQ2xvdWRGcm9udF0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL2Rpc3RyaWJ1dGlvbi1jb25maWctb3B0aW9ucy5odG1sI3Vuc3VwcG9ydGVkLXNhYXMpIGluIHRoZSAqQW1hem9uIENsb3VkRnJvbnQgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqICAgVGhpcyBmaWVsZCBpcyBkZXByZWNhdGVkLiBXZSByZWNvbW1lbmQgdGhhdCB5b3UgdXNlIHRoZSBgYE1pblRUTGBgIGZpZWxkIGluIGEgY2FjaGUgcG9saWN5IGluc3RlYWQgb2YgdGhpcyBmaWVsZC4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbQ3JlYXRpbmcgY2FjaGUgcG9saWNpZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9jb250cm9sbGluZy10aGUtY2FjaGUta2V5Lmh0bWwjY2FjaGUta2V5LWNyZWF0ZS1jYWNoZS1wb2xpY3kpIG9yIFtVc2luZyB0aGUgbWFuYWdlZCBjYWNoZSBwb2xpY2llc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL3VzaW5nLW1hbmFnZWQtY2FjaGUtcG9saWNpZXMuaHRtbCkgaW4gdGhlICpBbWF6b24gQ2xvdWRGcm9udCBEZXZlbG9wZXIgR3VpZGUqLlxuICogIFRoZSBtaW5pbXVtIGFtb3VudCBvZiB0aW1lIHRoYXQgeW91IHdhbnQgb2JqZWN0cyB0byBzdGF5IGluIENsb3VkRnJvbnQgY2FjaGVzIGJlZm9yZSBDbG91ZEZyb250IGZvcndhcmRzIGFub3RoZXIgcmVxdWVzdCB0byB5b3VyIG9yaWdpbiB0byBkZXRlcm1pbmUgd2hldGhlciB0aGUgb2JqZWN0IGhhcyBiZWVuIHVwZGF0ZWQuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW01hbmFnaW5nIEhvdyBMb25nIENvbnRlbnQgU3RheXMgaW4gYW4gRWRnZSBDYWNoZSAoRXhwaXJhdGlvbildKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9FeHBpcmF0aW9uLmh0bWwpIGluIHRoZSAqQW1hem9uIENsb3VkRnJvbnQgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqICBZb3UgbXVzdCBzcGVjaWZ5IGBgMGBgIGZvciBgYE1pblRUTGBgIGlmIHlvdSBjb25maWd1cmUgQ2xvdWRGcm9udCB0byBmb3J3YXJkIGFsbCBoZWFkZXJzIHRvIHlvdXIgb3JpZ2luICh1bmRlciBgYEhlYWRlcnNgYCwgaWYgeW91IHNwZWNpZnkgYGAxYGAgZm9yIGBgUXVhbnRpdHlgYCBhbmQgYGAqYGAgZm9yIGBgTmFtZWBgKS5cbiAqL1xuTWluVFRMPzogbnVtYmVyXG4vKipcbiAqIFRoZSB1bmlxdWUgaWRlbnRpZmllciBvZiB0aGUgb3JpZ2luIHJlcXVlc3QgcG9saWN5IHRoYXQgaXMgYXR0YWNoZWQgdG8gdGhlIGRlZmF1bHQgY2FjaGUgYmVoYXZpb3IuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0NyZWF0aW5nIG9yaWdpbiByZXF1ZXN0IHBvbGljaWVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvY29udHJvbGxpbmctb3JpZ2luLXJlcXVlc3RzLmh0bWwjb3JpZ2luLXJlcXVlc3QtY3JlYXRlLW9yaWdpbi1yZXF1ZXN0LXBvbGljeSkgb3IgW1VzaW5nIHRoZSBtYW5hZ2VkIG9yaWdpbiByZXF1ZXN0IHBvbGljaWVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvdXNpbmctbWFuYWdlZC1vcmlnaW4tcmVxdWVzdC1wb2xpY2llcy5odG1sKSBpbiB0aGUgKkFtYXpvbiBDbG91ZEZyb250IERldmVsb3BlciBHdWlkZSouXG4gKi9cbk9yaWdpblJlcXVlc3RQb2xpY3lJZD86IHN0cmluZ1xuLyoqXG4gKiBUaGUgQW1hem9uIFJlc291cmNlIE5hbWUgKEFSTikgb2YgdGhlIHJlYWwtdGltZSBsb2cgY29uZmlndXJhdGlvbiB0aGF0IGlzIGF0dGFjaGVkIHRvIHRoaXMgY2FjaGUgYmVoYXZpb3IuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1JlYWwtdGltZSBsb2dzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvcmVhbC10aW1lLWxvZ3MuaHRtbCkgaW4gdGhlICpBbWF6b24gQ2xvdWRGcm9udCBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5SZWFsdGltZUxvZ0NvbmZpZ0Fybj86IHN0cmluZ1xuLyoqXG4gKiBUaGUgaWRlbnRpZmllciBmb3IgYSByZXNwb25zZSBoZWFkZXJzIHBvbGljeS5cbiAqL1xuUmVzcG9uc2VIZWFkZXJzUG9saWN5SWQ/OiBzdHJpbmdcbi8qKlxuICogVGhpcyBmaWVsZCBvbmx5IHN1cHBvcnRzIHN0YW5kYXJkIGRpc3RyaWJ1dGlvbnMuIFlvdSBjYW4ndCBzcGVjaWZ5IHRoaXMgZmllbGQgZm9yIG11bHRpLXRlbmFudCBkaXN0cmlidXRpb25zLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtVbnN1cHBvcnRlZCBmZWF0dXJlcyBmb3IgU2FhUyBNYW5hZ2VyIGZvciBBbWF6b24gQ2xvdWRGcm9udF0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL2Rpc3RyaWJ1dGlvbi1jb25maWctb3B0aW9ucy5odG1sI3Vuc3VwcG9ydGVkLXNhYXMpIGluIHRoZSAqQW1hem9uIENsb3VkRnJvbnQgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqICAgSW5kaWNhdGVzIHdoZXRoZXIgeW91IHdhbnQgdG8gZGlzdHJpYnV0ZSBtZWRpYSBmaWxlcyBpbiB0aGUgTWljcm9zb2Z0IFNtb290aCBTdHJlYW1pbmcgZm9ybWF0IHVzaW5nIHRoZSBvcmlnaW4gdGhhdCBpcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBjYWNoZSBiZWhhdmlvci4gSWYgc28sIHNwZWNpZnkgYGB0cnVlYGA7IGlmIG5vdCwgc3BlY2lmeSBgYGZhbHNlYGAuIElmIHlvdSBzcGVjaWZ5IGBgdHJ1ZWBgIGZvciBgYFNtb290aFN0cmVhbWluZ2BgLCB5b3UgY2FuIHN0aWxsIGRpc3RyaWJ1dGUgb3RoZXIgY29udGVudCB1c2luZyB0aGlzIGNhY2hlIGJlaGF2aW9yIGlmIHRoZSBjb250ZW50IG1hdGNoZXMgdGhlIHZhbHVlIG9mIGBgUGF0aFBhdHRlcm5gYC5cbiAqL1xuU21vb3RoU3RyZWFtaW5nPzogYm9vbGVhblxuLyoqXG4gKiBUaGUgdmFsdWUgb2YgYGBJRGBgIGZvciB0aGUgb3JpZ2luIHRoYXQgeW91IHdhbnQgQ2xvdWRGcm9udCB0byByb3V0ZSByZXF1ZXN0cyB0byB3aGVuIHRoZXkgdXNlIHRoZSBkZWZhdWx0IGNhY2hlIGJlaGF2aW9yLlxuICovXG5UYXJnZXRPcmlnaW5JZDogc3RyaW5nXG4vKipcbiAqIEEgbGlzdCBvZiBrZXkgZ3JvdXBzIHRoYXQgQ2xvdWRGcm9udCBjYW4gdXNlIHRvIHZhbGlkYXRlIHNpZ25lZCBVUkxzIG9yIHNpZ25lZCBjb29raWVzLlxuICogIFdoZW4gYSBjYWNoZSBiZWhhdmlvciBjb250YWlucyB0cnVzdGVkIGtleSBncm91cHMsIENsb3VkRnJvbnQgcmVxdWlyZXMgc2lnbmVkIFVSTHMgb3Igc2lnbmVkIGNvb2tpZXMgZm9yIGFsbCByZXF1ZXN0cyB0aGF0IG1hdGNoIHRoZSBjYWNoZSBiZWhhdmlvci4gVGhlIFVSTHMgb3IgY29va2llcyBtdXN0IGJlIHNpZ25lZCB3aXRoIGEgcHJpdmF0ZSBrZXkgd2hvc2UgY29ycmVzcG9uZGluZyBwdWJsaWMga2V5IGlzIGluIHRoZSBrZXkgZ3JvdXAuIFRoZSBzaWduZWQgVVJMIG9yIGNvb2tpZSBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCB3aGljaCBwdWJsaWMga2V5IENsb3VkRnJvbnQgc2hvdWxkIHVzZSB0byB2ZXJpZnkgdGhlIHNpZ25hdHVyZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbU2VydmluZyBwcml2YXRlIGNvbnRlbnRdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9Qcml2YXRlQ29udGVudC5odG1sKSBpbiB0aGUgKkFtYXpvbiBDbG91ZEZyb250IERldmVsb3BlciBHdWlkZSouXG4gKi9cblRydXN0ZWRLZXlHcm91cHM/OiBzdHJpbmdbXVxuLyoqXG4gKiBXZSByZWNvbW1lbmQgdXNpbmcgYGBUcnVzdGVkS2V5R3JvdXBzYGAgaW5zdGVhZCBvZiBgYFRydXN0ZWRTaWduZXJzYGAuXG4gKiAgICBUaGlzIGZpZWxkIG9ubHkgc3VwcG9ydHMgc3RhbmRhcmQgZGlzdHJpYnV0aW9ucy4gWW91IGNhbid0IHNwZWNpZnkgdGhpcyBmaWVsZCBmb3IgbXVsdGktdGVuYW50IGRpc3RyaWJ1dGlvbnMuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1Vuc3VwcG9ydGVkIGZlYXR1cmVzIGZvciBTYWFTIE1hbmFnZXIgZm9yIEFtYXpvbiBDbG91ZEZyb250XShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvZGlzdHJpYnV0aW9uLWNvbmZpZy1vcHRpb25zLmh0bWwjdW5zdXBwb3J0ZWQtc2FhcykgaW4gdGhlICpBbWF6b24gQ2xvdWRGcm9udCBEZXZlbG9wZXIgR3VpZGUqLlxuICogICBBIGxpc3Qgb2YgQVdTLWFjY291bnQgSURzIHdob3NlIHB1YmxpYyBrZXlzIENsb3VkRnJvbnQgY2FuIHVzZSB0byB2YWxpZGF0ZSBzaWduZWQgVVJMcyBvciBzaWduZWQgY29va2llcy5cbiAqICBXaGVuIGEgY2FjaGUgYmVoYXZpb3IgY29udGFpbnMgdHJ1c3RlZCBzaWduZXJzLCBDbG91ZEZyb250IHJlcXVpcmVzIHNpZ25lZCBVUkxzIG9yIHNpZ25lZCBjb29raWVzIGZvciBhbGwgcmVxdWVzdHMgdGhhdCBtYXRjaCB0aGUgY2FjaGUgYmVoYXZpb3IuIFRoZSBVUkxzIG9yIGNvb2tpZXMgbXVzdCBiZSBzaWduZWQgd2l0aCB0aGUgcHJpdmF0ZSBrZXkgb2YgYSBDbG91ZEZyb250IGtleSBwYWlyIGluIGEgdHJ1c3RlZCBzaWduZXIncyBBV1MtYWNjb3VudC4gVGhlIHNpZ25lZCBVUkwgb3IgY29va2llIGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IHdoaWNoIHB1YmxpYyBrZXkgQ2xvdWRGcm9udCBzaG91bGQgdXNlIHRvIHZlcmlmeSB0aGUgc2lnbmF0dXJlLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtTZXJ2aW5nIHByaXZhdGUgY29udGVudF0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL1ByaXZhdGVDb250ZW50Lmh0bWwpIGluIHRoZSAqQW1hem9uIENsb3VkRnJvbnQgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuVHJ1c3RlZFNpZ25lcnM/OiBzdHJpbmdbXVxuLyoqXG4gKiBUaGUgcHJvdG9jb2wgdGhhdCB2aWV3ZXJzIGNhbiB1c2UgdG8gYWNjZXNzIHRoZSBmaWxlcyBpbiB0aGUgb3JpZ2luIHNwZWNpZmllZCBieSBgYFRhcmdldE9yaWdpbklkYGAgd2hlbiBhIHJlcXVlc3QgbWF0Y2hlcyB0aGUgcGF0aCBwYXR0ZXJuIGluIGBgUGF0aFBhdHRlcm5gYC4gWW91IGNhbiBzcGVjaWZ5IHRoZSBmb2xsb3dpbmcgb3B0aW9uczpcbiAqICAgKyAgYGBhbGxvdy1hbGxgYDogVmlld2VycyBjYW4gdXNlIEhUVFAgb3IgSFRUUFMuXG4gKiAgICsgIGBgcmVkaXJlY3QtdG8taHR0cHNgYDogSWYgYSB2aWV3ZXIgc3VibWl0cyBhbiBIVFRQIHJlcXVlc3QsIENsb3VkRnJvbnQgcmV0dXJucyBhbiBIVFRQIHN0YXR1cyBjb2RlIG9mIDMwMSAoTW92ZWQgUGVybWFuZW50bHkpIHRvIHRoZSB2aWV3ZXIgYWxvbmcgd2l0aCB0aGUgSFRUUFMgVVJMLiBUaGUgdmlld2VyIHRoZW4gcmVzdWJtaXRzIHRoZSByZXF1ZXN0IHVzaW5nIHRoZSBuZXcgVVJMLlxuICogICArICBgYGh0dHBzLW9ubHlgYDogSWYgYSB2aWV3ZXIgc2VuZHMgYW4gSFRUUCByZXF1ZXN0LCBDbG91ZEZyb250IHJldHVybnMgYW4gSFRUUCBzdGF0dXMgY29kZSBvZiA0MDMgKEZvcmJpZGRlbikuXG4gKiAgIFxuICogIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHJlcXVpcmluZyB0aGUgSFRUUFMgcHJvdG9jb2wsIHNlZSBbUmVxdWlyaW5nIEhUVFBTIEJldHdlZW4gVmlld2VycyBhbmQgQ2xvdWRGcm9udF0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL3VzaW5nLWh0dHBzLXZpZXdlcnMtdG8tY2xvdWRmcm9udC5odG1sKSBpbiB0aGUgKkFtYXpvbiBDbG91ZEZyb250IERldmVsb3BlciBHdWlkZSouXG4gKiAgIFRoZSBvbmx5IHdheSB0byBndWFyYW50ZWUgdGhhdCB2aWV3ZXJzIHJldHJpZXZlIGFuIG9iamVjdCB0aGF0IHdhcyBmZXRjaGVkIGZyb20gdGhlIG9yaWdpbiB1c2luZyBIVFRQUyBpcyBuZXZlciB0byB1c2UgYW55IG90aGVyIHByb3RvY29sIHRvIGZldGNoIHRoZSBvYmplY3QuIElmIHlvdSBoYXZlIHJlY2VudGx5IGNoYW5nZWQgZnJvbSBIVFRQIHRvIEhUVFBTLCB3ZSByZWNvbW1lbmQgdGhhdCB5b3UgY2xlYXIgeW91ciBvYmplY3RzJyBjYWNoZSBiZWNhdXNlIGNhY2hlZCBvYmplY3RzIGFyZSBwcm90b2NvbCBhZ25vc3RpYy4gVGhhdCBtZWFucyB0aGF0IGFuIGVkZ2UgbG9jYXRpb24gd2lsbCByZXR1cm4gYW4gb2JqZWN0IGZyb20gdGhlIGNhY2hlIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGUgY3VycmVudCByZXF1ZXN0IHByb3RvY29sIG1hdGNoZXMgdGhlIHByb3RvY29sIHVzZWQgcHJldmlvdXNseS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbTWFuYWdpbmcgQ2FjaGUgRXhwaXJhdGlvbl0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL0V4cGlyYXRpb24uaHRtbCkgaW4gdGhlICpBbWF6b24gQ2xvdWRGcm9udCBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5WaWV3ZXJQcm90b2NvbFBvbGljeTogc3RyaW5nXG59XG4vKipcbiAqIFRoaXMgZmllbGQgaXMgZGVwcmVjYXRlZC4gV2UgcmVjb21tZW5kIHRoYXQgeW91IHVzZSBhIGNhY2hlIHBvbGljeSBvciBhbiBvcmlnaW4gcmVxdWVzdCBwb2xpY3kgaW5zdGVhZCBvZiB0aGlzIGZpZWxkLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtXb3JraW5nIHdpdGggcG9saWNpZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS93b3JraW5nLXdpdGgtcG9saWNpZXMuaHRtbCkgaW4gdGhlICpBbWF6b24gQ2xvdWRGcm9udCBEZXZlbG9wZXIgR3VpZGUqLlxuICogIElmIHlvdSB3YW50IHRvIGluY2x1ZGUgdmFsdWVzIGluIHRoZSBjYWNoZSBrZXksIHVzZSBhIGNhY2hlIHBvbGljeS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbQ3JlYXRpbmcgY2FjaGUgcG9saWNpZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9jb250cm9sbGluZy10aGUtY2FjaGUta2V5Lmh0bWwjY2FjaGUta2V5LWNyZWF0ZS1jYWNoZS1wb2xpY3kpIG9yIFtVc2luZyB0aGUgbWFuYWdlZCBjYWNoZSBwb2xpY2llc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL3VzaW5nLW1hbmFnZWQtY2FjaGUtcG9saWNpZXMuaHRtbCkgaW4gdGhlICpBbWF6b24gQ2xvdWRGcm9udCBEZXZlbG9wZXIgR3VpZGUqLlxuICogIElmIHlvdSB3YW50IHRvIHNlbmQgdmFsdWVzIHRvIHRoZSBvcmlnaW4gYnV0IG5vdCBpbmNsdWRlIHRoZW0gaW4gdGhlIGNhY2hlIGtleSwgdXNlIGFuIG9yaWdpbiByZXF1ZXN0IHBvbGljeS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbQ3JlYXRpbmcgb3JpZ2luIHJlcXVlc3QgcG9saWNpZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9jb250cm9sbGluZy1vcmlnaW4tcmVxdWVzdHMuaHRtbCNvcmlnaW4tcmVxdWVzdC1jcmVhdGUtb3JpZ2luLXJlcXVlc3QtcG9saWN5KSBvciBbVXNpbmcgdGhlIG1hbmFnZWQgb3JpZ2luIHJlcXVlc3QgcG9saWNpZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS91c2luZy1tYW5hZ2VkLW9yaWdpbi1yZXF1ZXN0LXBvbGljaWVzLmh0bWwpIGluIHRoZSAqQW1hem9uIENsb3VkRnJvbnQgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqICBBIGBgRGVmYXVsdENhY2hlQmVoYXZpb3JgYCBtdXN0IGluY2x1ZGUgZWl0aGVyIGEgYGBDYWNoZVBvbGljeUlkYGAgb3IgYGBGb3J3YXJkZWRWYWx1ZXNgYC4gV2UgcmVjb21tZW5kIHRoYXQgeW91IHVzZSBhIGBgQ2FjaGVQb2xpY3lJZGBgLlxuICogIEEgY29tcGxleCB0eXBlIHRoYXQgc3BlY2lmaWVzIGhvdyBDbG91ZEZyb250IGhhbmRsZXMgcXVlcnkgc3RyaW5ncywgY29va2llcywgYW5kIEhUVFAgaGVhZGVycy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGb3J3YXJkZWRWYWx1ZXMxIHtcbkNvb2tpZXM/OiBDb29raWVzXG4vKipcbiAqIFRoaXMgZmllbGQgaXMgZGVwcmVjYXRlZC4gV2UgcmVjb21tZW5kIHRoYXQgeW91IHVzZSBhIGNhY2hlIHBvbGljeSBvciBhbiBvcmlnaW4gcmVxdWVzdCBwb2xpY3kgaW5zdGVhZCBvZiB0aGlzIGZpZWxkLlxuICogIElmIHlvdSB3YW50IHRvIGluY2x1ZGUgaGVhZGVycyBpbiB0aGUgY2FjaGUga2V5LCB1c2UgYSBjYWNoZSBwb2xpY3kuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0NyZWF0aW5nIGNhY2hlIHBvbGljaWVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvY29udHJvbGxpbmctdGhlLWNhY2hlLWtleS5odG1sI2NhY2hlLWtleS1jcmVhdGUtY2FjaGUtcG9saWN5KSBpbiB0aGUgKkFtYXpvbiBDbG91ZEZyb250IERldmVsb3BlciBHdWlkZSouXG4gKiAgSWYgeW91IHdhbnQgdG8gc2VuZCBoZWFkZXJzIHRvIHRoZSBvcmlnaW4gYnV0IG5vdCBpbmNsdWRlIHRoZW0gaW4gdGhlIGNhY2hlIGtleSwgdXNlIGFuIG9yaWdpbiByZXF1ZXN0IHBvbGljeS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbQ3JlYXRpbmcgb3JpZ2luIHJlcXVlc3QgcG9saWNpZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9jb250cm9sbGluZy1vcmlnaW4tcmVxdWVzdHMuaHRtbCNvcmlnaW4tcmVxdWVzdC1jcmVhdGUtb3JpZ2luLXJlcXVlc3QtcG9saWN5KSBpbiB0aGUgKkFtYXpvbiBDbG91ZEZyb250IERldmVsb3BlciBHdWlkZSouXG4gKiAgQSBjb21wbGV4IHR5cGUgdGhhdCBzcGVjaWZpZXMgdGhlIGBgSGVhZGVyc2BgLCBpZiBhbnksIHRoYXQgeW91IHdhbnQgQ2xvdWRGcm9udCB0byBmb3J3YXJkIHRvIHRoZSBvcmlnaW4gZm9yIHRoaXMgY2FjaGUgYmVoYXZpb3IgKHdoaXRlbGlzdGVkIGhlYWRlcnMpLiBGb3IgdGhlIGhlYWRlcnMgdGhhdCB5b3Ugc3BlY2lmeSwgQ2xvdWRGcm9udCBhbHNvIGNhY2hlcyBzZXBhcmF0ZSB2ZXJzaW9ucyBvZiBhIHNwZWNpZmllZCBvYmplY3QgdGhhdCBpcyBiYXNlZCBvbiB0aGUgaGVhZGVyIHZhbHVlcyBpbiB2aWV3ZXIgcmVxdWVzdHMuXG4gKiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbQ2FjaGluZyBDb250ZW50IEJhc2VkIG9uIFJlcXVlc3QgSGVhZGVyc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL2hlYWRlci1jYWNoaW5nLmh0bWwpIGluIHRoZSAqQW1hem9uIENsb3VkRnJvbnQgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuSGVhZGVycz86IHN0cmluZ1tdXG4vKipcbiAqIFRoaXMgZmllbGQgaXMgZGVwcmVjYXRlZC4gV2UgcmVjb21tZW5kIHRoYXQgeW91IHVzZSBhIGNhY2hlIHBvbGljeSBvciBhbiBvcmlnaW4gcmVxdWVzdCBwb2xpY3kgaW5zdGVhZCBvZiB0aGlzIGZpZWxkLlxuICogIElmIHlvdSB3YW50IHRvIGluY2x1ZGUgcXVlcnkgc3RyaW5ncyBpbiB0aGUgY2FjaGUga2V5LCB1c2UgYSBjYWNoZSBwb2xpY3kuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0NyZWF0aW5nIGNhY2hlIHBvbGljaWVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvY29udHJvbGxpbmctdGhlLWNhY2hlLWtleS5odG1sI2NhY2hlLWtleS1jcmVhdGUtY2FjaGUtcG9saWN5KSBpbiB0aGUgKkFtYXpvbiBDbG91ZEZyb250IERldmVsb3BlciBHdWlkZSouXG4gKiAgSWYgeW91IHdhbnQgdG8gc2VuZCBxdWVyeSBzdHJpbmdzIHRvIHRoZSBvcmlnaW4gYnV0IG5vdCBpbmNsdWRlIHRoZW0gaW4gdGhlIGNhY2hlIGtleSwgdXNlIGFuIG9yaWdpbiByZXF1ZXN0IHBvbGljeS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbQ3JlYXRpbmcgb3JpZ2luIHJlcXVlc3QgcG9saWNpZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9jb250cm9sbGluZy1vcmlnaW4tcmVxdWVzdHMuaHRtbCNvcmlnaW4tcmVxdWVzdC1jcmVhdGUtb3JpZ2luLXJlcXVlc3QtcG9saWN5KSBpbiB0aGUgKkFtYXpvbiBDbG91ZEZyb250IERldmVsb3BlciBHdWlkZSouXG4gKiAgSW5kaWNhdGVzIHdoZXRoZXIgeW91IHdhbnQgQ2xvdWRGcm9udCB0byBmb3J3YXJkIHF1ZXJ5IHN0cmluZ3MgdG8gdGhlIG9yaWdpbiB0aGF0IGlzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGNhY2hlIGJlaGF2aW9yIGFuZCBjYWNoZSBiYXNlZCBvbiB0aGUgcXVlcnkgc3RyaW5nIHBhcmFtZXRlcnMuIENsb3VkRnJvbnQgYmVoYXZpb3IgZGVwZW5kcyBvbiB0aGUgdmFsdWUgb2YgYGBRdWVyeVN0cmluZ2BgIGFuZCBvbiB0aGUgdmFsdWVzIHRoYXQgeW91IHNwZWNpZnkgZm9yIGBgUXVlcnlTdHJpbmdDYWNoZUtleXNgYCwgaWYgYW55OlxuICogIElmIHlvdSBzcGVjaWZ5IHRydWUgZm9yIGBgUXVlcnlTdHJpbmdgYCBhbmQgeW91IGRvbid0IHNwZWNpZnkgYW55IHZhbHVlcyBmb3IgYGBRdWVyeVN0cmluZ0NhY2hlS2V5c2BgLCBDbG91ZEZyb250IGZvcndhcmRzIGFsbCBxdWVyeSBzdHJpbmcgcGFyYW1ldGVycyB0byB0aGUgb3JpZ2luIGFuZCBjYWNoZXMgYmFzZWQgb24gYWxsIHF1ZXJ5IHN0cmluZyBwYXJhbWV0ZXJzLiBEZXBlbmRpbmcgb24gaG93IG1hbnkgcXVlcnkgc3RyaW5nIHBhcmFtZXRlcnMgYW5kIHZhbHVlcyB5b3UgaGF2ZSwgdGhpcyBjYW4gYWR2ZXJzZWx5IGFmZmVjdCBwZXJmb3JtYW5jZSBiZWNhdXNlIENsb3VkRnJvbnQgbXVzdCBmb3J3YXJkIG1vcmUgcmVxdWVzdHMgdG8gdGhlIG9yaWdpbi5cbiAqICBJZiB5b3Ugc3BlY2lmeSB0cnVlIGZvciBgYFF1ZXJ5U3RyaW5nYGAgYW5kIHlvdSBzcGVjaWZ5IG9uZSBvciBtb3JlIHZhbHVlcyBmb3IgYGBRdWVyeVN0cmluZ0NhY2hlS2V5c2BgLCBDbG91ZEZyb250IGZvcndhcmRzIGFsbCBxdWVyeSBzdHJpbmcgcGFyYW1ldGVycyB0byB0aGUgb3JpZ2luLCBidXQgaXQgb25seSBjYWNoZXMgYmFzZWQgb24gdGhlIHF1ZXJ5IHN0cmluZyBwYXJhbWV0ZXJzIHRoYXQgeW91IHNwZWNpZnkuXG4gKiAgSWYgeW91IHNwZWNpZnkgZmFsc2UgZm9yIGBgUXVlcnlTdHJpbmdgYCwgQ2xvdWRGcm9udCBkb2Vzbid0IGZvcndhcmQgYW55IHF1ZXJ5IHN0cmluZyBwYXJhbWV0ZXJzIHRvIHRoZSBvcmlnaW4sIGFuZCBkb2Vzbid0IGNhY2hlIGJhc2VkIG9uIHF1ZXJ5IHN0cmluZyBwYXJhbWV0ZXJzLlxuICogIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0NvbmZpZ3VyaW5nIENsb3VkRnJvbnQgdG8gQ2FjaGUgQmFzZWQgb24gUXVlcnkgU3RyaW5nIFBhcmFtZXRlcnNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9RdWVyeVN0cmluZ1BhcmFtZXRlcnMuaHRtbCkgaW4gdGhlICpBbWF6b24gQ2xvdWRGcm9udCBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5RdWVyeVN0cmluZzogYm9vbGVhblxuLyoqXG4gKiBUaGlzIGZpZWxkIGlzIGRlcHJlY2F0ZWQuIFdlIHJlY29tbWVuZCB0aGF0IHlvdSB1c2UgYSBjYWNoZSBwb2xpY3kgb3IgYW4gb3JpZ2luIHJlcXVlc3QgcG9saWN5IGluc3RlYWQgb2YgdGhpcyBmaWVsZC5cbiAqICBJZiB5b3Ugd2FudCB0byBpbmNsdWRlIHF1ZXJ5IHN0cmluZ3MgaW4gdGhlIGNhY2hlIGtleSwgdXNlIGEgY2FjaGUgcG9saWN5LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtDcmVhdGluZyBjYWNoZSBwb2xpY2llc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL2NvbnRyb2xsaW5nLXRoZS1jYWNoZS1rZXkuaHRtbCNjYWNoZS1rZXktY3JlYXRlLWNhY2hlLXBvbGljeSkgaW4gdGhlICpBbWF6b24gQ2xvdWRGcm9udCBEZXZlbG9wZXIgR3VpZGUqLlxuICogIElmIHlvdSB3YW50IHRvIHNlbmQgcXVlcnkgc3RyaW5ncyB0byB0aGUgb3JpZ2luIGJ1dCBub3QgaW5jbHVkZSB0aGVtIGluIHRoZSBjYWNoZSBrZXksIHVzZSBhbiBvcmlnaW4gcmVxdWVzdCBwb2xpY3kuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0NyZWF0aW5nIG9yaWdpbiByZXF1ZXN0IHBvbGljaWVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvY29udHJvbGxpbmctb3JpZ2luLXJlcXVlc3RzLmh0bWwjb3JpZ2luLXJlcXVlc3QtY3JlYXRlLW9yaWdpbi1yZXF1ZXN0LXBvbGljeSkgaW4gdGhlICpBbWF6b24gQ2xvdWRGcm9udCBEZXZlbG9wZXIgR3VpZGUqLlxuICogIEEgY29tcGxleCB0eXBlIHRoYXQgY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHF1ZXJ5IHN0cmluZyBwYXJhbWV0ZXJzIHRoYXQgeW91IHdhbnQgQ2xvdWRGcm9udCB0byB1c2UgZm9yIGNhY2hpbmcgZm9yIHRoaXMgY2FjaGUgYmVoYXZpb3IuXG4gKi9cblF1ZXJ5U3RyaW5nQ2FjaGVLZXlzPzogc3RyaW5nW11cbn1cbi8qKlxuICogVGhlIGdSUEMgY29uZmlndXJhdGlvbiBmb3IgeW91ciBjYWNoZSBiZWhhdmlvci5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHcnBjQ29uZmlnMSB7XG4vKipcbiAqIEVuYWJsZXMgeW91ciBDbG91ZEZyb250IGRpc3RyaWJ1dGlvbiB0byByZWNlaXZlIGdSUEMgcmVxdWVzdHMgYW5kIHRvIHByb3h5IHRoZW0gZGlyZWN0bHkgdG8geW91ciBvcmlnaW5zLlxuICovXG5FbmFibGVkOiBib29sZWFuXG59XG4vKipcbiAqIEEgY29tcGxleCB0eXBlIHRoYXQgY29udHJvbHMgd2hldGhlciBhY2Nlc3MgbG9ncyBhcmUgd3JpdHRlbiBmb3IgdGhlIGRpc3RyaWJ1dGlvbi5cbiAqICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBsb2dnaW5nLCBzZWUgW0FjY2VzcyBMb2dzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvQWNjZXNzTG9ncy5odG1sKSBpbiB0aGUgKkFtYXpvbiBDbG91ZEZyb250IERldmVsb3BlciBHdWlkZSouXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTG9nZ2luZyB7XG4vKipcbiAqIFRoZSBBbWF6b24gUzMgYnVja2V0IHRvIHN0b3JlIHRoZSBhY2Nlc3MgbG9ncyBpbiwgZm9yIGV4YW1wbGUsIGBgYW16bi1zMy1kZW1vLWJ1Y2tldC5zMy5hbWF6b25hd3MuY29tYGAuXG4gKi9cbkJ1Y2tldD86IHN0cmluZ1xuLyoqXG4gKiBTcGVjaWZpZXMgd2hldGhlciB5b3Ugd2FudCBDbG91ZEZyb250IHRvIGluY2x1ZGUgY29va2llcyBpbiBhY2Nlc3MgbG9ncywgc3BlY2lmeSBgYHRydWVgYCBmb3IgYGBJbmNsdWRlQ29va2llc2BgLiBJZiB5b3UgY2hvb3NlIHRvIGluY2x1ZGUgY29va2llcyBpbiBsb2dzLCBDbG91ZEZyb250IGxvZ3MgYWxsIGNvb2tpZXMgcmVnYXJkbGVzcyBvZiBob3cgeW91IGNvbmZpZ3VyZSB0aGUgY2FjaGUgYmVoYXZpb3JzIGZvciB0aGlzIGRpc3RyaWJ1dGlvbi4gSWYgeW91IGRvbid0IHdhbnQgdG8gaW5jbHVkZSBjb29raWVzIHdoZW4geW91IGNyZWF0ZSBhIGRpc3RyaWJ1dGlvbiBvciBpZiB5b3Ugd2FudCB0byBkaXNhYmxlIGluY2x1ZGUgY29va2llcyBmb3IgYW4gZXhpc3RpbmcgZGlzdHJpYnV0aW9uLCBzcGVjaWZ5IGBgZmFsc2VgYCBmb3IgYGBJbmNsdWRlQ29va2llc2BgLlxuICovXG5JbmNsdWRlQ29va2llcz86IGJvb2xlYW5cbi8qKlxuICogQW4gb3B0aW9uYWwgc3RyaW5nIHRoYXQgeW91IHdhbnQgQ2xvdWRGcm9udCB0byBwcmVmaXggdG8gdGhlIGFjY2VzcyBsb2cgYGBmaWxlbmFtZXNgYCBmb3IgdGhpcyBkaXN0cmlidXRpb24sIGZvciBleGFtcGxlLCBgYG15cHJlZml4L2BgLiBJZiB5b3Ugd2FudCB0byBlbmFibGUgbG9nZ2luZywgYnV0IHlvdSBkb24ndCB3YW50IHRvIHNwZWNpZnkgYSBwcmVmaXgsIHlvdSBzdGlsbCBtdXN0IGluY2x1ZGUgYW4gZW1wdHkgYGBQcmVmaXhgYCBlbGVtZW50IGluIHRoZSBgYExvZ2dpbmdgYCBlbGVtZW50LlxuICovXG5QcmVmaXg/OiBzdHJpbmdcbn1cbi8qKlxuICogQSBjb21wbGV4IHR5cGUgdGhhdCBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCBvcmlnaW4gZ3JvdXBzIGZvciB0aGlzIGRpc3RyaWJ1dGlvbi5cbiAqICBTcGVjaWZ5IGEgdmFsdWUgZm9yIGVpdGhlciB0aGUgYGBPcmlnaW5zYGAgb3IgYGBPcmlnaW5Hcm91cHNgYCBwcm9wZXJ0eS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPcmlnaW5Hcm91cHMge1xuLyoqXG4gKiBUaGUgaXRlbXMgKG9yaWdpbiBncm91cHMpIGluIGEgZGlzdHJpYnV0aW9uLlxuICovXG5JdGVtcz86IE9yaWdpbkdyb3VwW11cbi8qKlxuICogVGhlIG51bWJlciBvZiBvcmlnaW4gZ3JvdXBzLlxuICovXG5RdWFudGl0eTogbnVtYmVyXG59XG4vKipcbiAqIEFuIG9yaWdpbiBncm91cCBpbmNsdWRlcyB0d28gb3JpZ2lucyAoYSBwcmltYXJ5IG9yaWdpbiBhbmQgYSBzZWNvbmRhcnkgb3JpZ2luIHRvIGZhaWxvdmVyIHRvKSBhbmQgYSBmYWlsb3ZlciBjcml0ZXJpYSB0aGF0IHlvdSBzcGVjaWZ5LiBZb3UgY3JlYXRlIGFuIG9yaWdpbiBncm91cCB0byBzdXBwb3J0IG9yaWdpbiBmYWlsb3ZlciBpbiBDbG91ZEZyb250LiBXaGVuIHlvdSBjcmVhdGUgb3IgdXBkYXRlIGEgZGlzdHJpYnV0aW9uLCB5b3UgY2FuIHNwZWNpZnkgdGhlIG9yaWdpbiBncm91cCBpbnN0ZWFkIG9mIGEgc2luZ2xlIG9yaWdpbiwgYW5kIENsb3VkRnJvbnQgd2lsbCBmYWlsb3ZlciBmcm9tIHRoZSBwcmltYXJ5IG9yaWdpbiB0byB0aGUgc2Vjb25kYXJ5IG9yaWdpbiB1bmRlciB0aGUgZmFpbG92ZXIgY29uZGl0aW9ucyB0aGF0IHlvdSd2ZSBjaG9zZW4uXG4gKiAgT3B0aW9uYWxseSwgeW91IGNhbiBjaG9vc2Ugc2VsZWN0aW9uIGNyaXRlcmlhIGZvciB5b3VyIG9yaWdpbiBncm91cCB0byBzcGVjaWZ5IGhvdyB5b3VyIG9yaWdpbnMgYXJlIHNlbGVjdGVkIHdoZW4geW91ciBkaXN0cmlidXRpb24gcm91dGVzIHZpZXdlciByZXF1ZXN0cy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPcmlnaW5Hcm91cCB7XG5GYWlsb3ZlckNyaXRlcmlhOiBPcmlnaW5Hcm91cEZhaWxvdmVyQ3JpdGVyaWFcbi8qKlxuICogVGhlIG9yaWdpbiBncm91cCdzIElELlxuICovXG5JZDogc3RyaW5nXG5NZW1iZXJzOiBPcmlnaW5Hcm91cE1lbWJlcnNcbi8qKlxuICogVGhlIHNlbGVjdGlvbiBjcml0ZXJpYSBmb3IgdGhlIG9yaWdpbiBncm91cC4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbQ3JlYXRlIGFuIG9yaWdpbiBncm91cF0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL2hpZ2hfYXZhaWxhYmlsaXR5X29yaWdpbl9mYWlsb3Zlci5odG1sI2NvbmNlcHRfb3JpZ2luX2dyb3Vwcy5jcmVhdGluZykgaW4gdGhlICpBbWF6b24gQ2xvdWRGcm9udCBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5TZWxlY3Rpb25Dcml0ZXJpYT86IChcImRlZmF1bHRcIiB8IFwibWVkaWEtcXVhbGl0eS1iYXNlZFwiKVxufVxuLyoqXG4gKiBBIGNvbXBsZXggdHlwZSB0aGF0IGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IHRoZSBmYWlsb3ZlciBjcml0ZXJpYSBmb3IgYW4gb3JpZ2luIGdyb3VwLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE9yaWdpbkdyb3VwRmFpbG92ZXJDcml0ZXJpYSB7XG5TdGF0dXNDb2RlczogU3RhdHVzQ29kZXNcbn1cbi8qKlxuICogVGhlIHN0YXR1cyBjb2RlcyB0aGF0LCB3aGVuIHJldHVybmVkIGZyb20gdGhlIHByaW1hcnkgb3JpZ2luLCB3aWxsIHRyaWdnZXIgQ2xvdWRGcm9udCB0byBmYWlsb3ZlciB0byB0aGUgc2Vjb25kIG9yaWdpbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdGF0dXNDb2RlcyB7XG4vKipcbiAqIFRoZSBpdGVtcyAoc3RhdHVzIGNvZGVzKSBmb3IgYW4gb3JpZ2luIGdyb3VwLlxuICovXG5JdGVtczogbnVtYmVyW11cbi8qKlxuICogVGhlIG51bWJlciBvZiBzdGF0dXMgY29kZXMuXG4gKi9cblF1YW50aXR5OiBudW1iZXJcbn1cbi8qKlxuICogQSBjb21wbGV4IHR5cGUgdGhhdCBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgb3JpZ2lucyBpbiBhbiBvcmlnaW4gZ3JvdXAuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgT3JpZ2luR3JvdXBNZW1iZXJzIHtcbi8qKlxuICogSXRlbXMgKG9yaWdpbnMpIGluIGFuIG9yaWdpbiBncm91cC5cbiAqL1xuSXRlbXM6IE9yaWdpbkdyb3VwTWVtYmVyW11cbi8qKlxuICogVGhlIG51bWJlciBvZiBvcmlnaW5zIGluIGFuIG9yaWdpbiBncm91cC5cbiAqL1xuUXVhbnRpdHk6IG51bWJlclxufVxuLyoqXG4gKiBBbiBvcmlnaW4gaW4gYW4gb3JpZ2luIGdyb3VwLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE9yaWdpbkdyb3VwTWVtYmVyIHtcbi8qKlxuICogVGhlIElEIGZvciBhbiBvcmlnaW4gaW4gYW4gb3JpZ2luIGdyb3VwLlxuICovXG5PcmlnaW5JZDogc3RyaW5nXG59XG4vKipcbiAqIEFuIG9yaWdpbi5cbiAqICBBbiBvcmlnaW4gaXMgdGhlIGxvY2F0aW9uIHdoZXJlIGNvbnRlbnQgaXMgc3RvcmVkLCBhbmQgZnJvbSB3aGljaCBDbG91ZEZyb250IGdldHMgY29udGVudCB0byBzZXJ2ZSB0byB2aWV3ZXJzLiBUbyBzcGVjaWZ5IGFuIG9yaWdpbjpcbiAqICAgKyAgVXNlIGBgUzNPcmlnaW5Db25maWdgYCB0byBzcGVjaWZ5IGFuIEFtYXpvbiBTMyBidWNrZXQgdGhhdCBpcyBub3QgY29uZmlndXJlZCB3aXRoIHN0YXRpYyB3ZWJzaXRlIGhvc3RpbmcuXG4gKiAgICsgIFVzZSBgYFZwY09yaWdpbkNvbmZpZ2BgIHRvIHNwZWNpZnkgYSBWUEMgb3JpZ2luLlxuICogICArICBVc2UgYGBDdXN0b21PcmlnaW5Db25maWdgYCB0byBzcGVjaWZ5IGFsbCBvdGhlciBraW5kcyBvZiBvcmlnaW5zLCBpbmNsdWRpbmc6XG4gKiAgICsgIEFuIEFtYXpvbiBTMyBidWNrZXQgdGhhdCBpcyBjb25maWd1cmVkIHdpdGggc3RhdGljIHdlYnNpdGUgaG9zdGluZ1xuICogICArICBBbiBFbGFzdGljIExvYWQgQmFsYW5jaW5nIGxvYWQgYmFsYW5jZXJcbiAqICAgKyAgQW4gRU1QbG9uZyBlbmRwb2ludFxuICogICArICBBbiBFTVNsb25nIGNvbnRhaW5lclxuICogICArICBBbnkgb3RoZXIgSFRUUCBzZXJ2ZXIsIHJ1bm5pbmcgb24gYW4gQW1hem9uIEVDMiBpbnN0YW5jZSBvciBhbnkgb3RoZXIga2luZCBvZiBob3N0XG4gKiAgIFxuICogICBcbiAqICBGb3IgdGhlIGN1cnJlbnQgbWF4aW11bSBudW1iZXIgb2Ygb3JpZ2lucyB0aGF0IHlvdSBjYW4gc3BlY2lmeSBwZXIgZGlzdHJpYnV0aW9uLCBzZWUgW0dlbmVyYWwgUXVvdGFzIG9uIFdlYiBEaXN0cmlidXRpb25zXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvY2xvdWRmcm9udC1saW1pdHMuaHRtbCNsaW1pdHMtd2ViLWRpc3RyaWJ1dGlvbnMpIGluIHRoZSAqQW1hem9uIENsb3VkRnJvbnQgRGV2ZWxvcGVyIEd1aWRlKiAocXVvdGFzIHdlcmUgZm9ybWVybHkgcmVmZXJyZWQgdG8gYXMgbGltaXRzKS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPcmlnaW4ge1xuLyoqXG4gKiBUaGUgbnVtYmVyIG9mIHRpbWVzIHRoYXQgQ2xvdWRGcm9udCBhdHRlbXB0cyB0byBjb25uZWN0IHRvIHRoZSBvcmlnaW4uIFRoZSBtaW5pbXVtIG51bWJlciBpcyAxLCB0aGUgbWF4aW11bSBpcyAzLCBhbmQgdGhlIGRlZmF1bHQgKGlmIHlvdSBkb24ndCBzcGVjaWZ5IG90aGVyd2lzZSkgaXMgMy5cbiAqICBGb3IgYSBjdXN0b20gb3JpZ2luIChpbmNsdWRpbmcgYW4gQW1hem9uIFMzIGJ1Y2tldCB0aGF0J3MgY29uZmlndXJlZCB3aXRoIHN0YXRpYyB3ZWJzaXRlIGhvc3RpbmcpLCB0aGlzIHZhbHVlIGFsc28gc3BlY2lmaWVzIHRoZSBudW1iZXIgb2YgdGltZXMgdGhhdCBDbG91ZEZyb250IGF0dGVtcHRzIHRvIGdldCBhIHJlc3BvbnNlIGZyb20gdGhlIG9yaWdpbiwgaW4gdGhlIGNhc2Ugb2YgYW4gW09yaWdpbiBSZXNwb25zZSBUaW1lb3V0XShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvZGlzdHJpYnV0aW9uLXdlYi12YWx1ZXMtc3BlY2lmeS5odG1sI0Rvd25sb2FkRGlzdFZhbHVlc09yaWdpblJlc3BvbnNlVGltZW91dCkuXG4gKiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbT3JpZ2luIENvbm5lY3Rpb24gQXR0ZW1wdHNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9kaXN0cmlidXRpb24td2ViLXZhbHVlcy1zcGVjaWZ5Lmh0bWwjb3JpZ2luLWNvbm5lY3Rpb24tYXR0ZW1wdHMpIGluIHRoZSAqQW1hem9uIENsb3VkRnJvbnQgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuQ29ubmVjdGlvbkF0dGVtcHRzPzogbnVtYmVyXG4vKipcbiAqIFRoZSBudW1iZXIgb2Ygc2Vjb25kcyB0aGF0IENsb3VkRnJvbnQgd2FpdHMgd2hlbiB0cnlpbmcgdG8gZXN0YWJsaXNoIGEgY29ubmVjdGlvbiB0byB0aGUgb3JpZ2luLiBUaGUgbWluaW11bSB0aW1lb3V0IGlzIDEgc2Vjb25kLCB0aGUgbWF4aW11bSBpcyAxMCBzZWNvbmRzLCBhbmQgdGhlIGRlZmF1bHQgKGlmIHlvdSBkb24ndCBzcGVjaWZ5IG90aGVyd2lzZSkgaXMgMTAgc2Vjb25kcy5cbiAqICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtPcmlnaW4gQ29ubmVjdGlvbiBUaW1lb3V0XShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvZGlzdHJpYnV0aW9uLXdlYi12YWx1ZXMtc3BlY2lmeS5odG1sI29yaWdpbi1jb25uZWN0aW9uLXRpbWVvdXQpIGluIHRoZSAqQW1hem9uIENsb3VkRnJvbnQgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuQ29ubmVjdGlvblRpbWVvdXQ/OiBudW1iZXJcbi8qKlxuICogVGhlIHRpbWUgKGluIHNlY29uZHMpIHRoYXQgYSByZXF1ZXN0IGZyb20gQ2xvdWRGcm9udCB0byB0aGUgb3JpZ2luIGNhbiBzdGF5IG9wZW4gYW5kIHdhaXQgZm9yIGEgcmVzcG9uc2UuIElmIHRoZSBjb21wbGV0ZSByZXNwb25zZSBpc24ndCByZWNlaXZlZCBmcm9tIHRoZSBvcmlnaW4gYnkgdGhpcyB0aW1lLCBDbG91ZEZyb250IGVuZHMgdGhlIGNvbm5lY3Rpb24uXG4gKiAgVGhlIHZhbHVlIGZvciBgYFJlc3BvbnNlQ29tcGxldGlvblRpbWVvdXRgYCBtdXN0IGJlIGVxdWFsIHRvIG9yIGdyZWF0ZXIgdGhhbiB0aGUgdmFsdWUgZm9yIGBgT3JpZ2luUmVhZFRpbWVvdXRgYC4gSWYgeW91IGRvbid0IHNldCBhIHZhbHVlIGZvciBgYFJlc3BvbnNlQ29tcGxldGlvblRpbWVvdXRgYCwgQ2xvdWRGcm9udCBkb2Vzbid0IGVuZm9yY2UgYSBtYXhpbXVtIHZhbHVlLlxuICogIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1Jlc3BvbnNlIGNvbXBsZXRpb24gdGltZW91dF0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL0Rvd25sb2FkRGlzdFZhbHVlc09yaWdpbi5odG1sI3Jlc3BvbnNlLWNvbXBsZXRpb24tdGltZW91dCkgaW4gdGhlICpBbWF6b24gQ2xvdWRGcm9udCBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5SZXNwb25zZUNvbXBsZXRpb25UaW1lb3V0PzogbnVtYmVyXG5DdXN0b21PcmlnaW5Db25maWc/OiBDdXN0b21PcmlnaW5Db25maWdcbi8qKlxuICogVGhlIGRvbWFpbiBuYW1lIGZvciB0aGUgb3JpZ2luLlxuICogIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW09yaWdpbiBEb21haW4gTmFtZV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL2Rpc3RyaWJ1dGlvbi13ZWItdmFsdWVzLXNwZWNpZnkuaHRtbCNEb3dubG9hZERpc3RWYWx1ZXNEb21haW5OYW1lKSBpbiB0aGUgKkFtYXpvbiBDbG91ZEZyb250IERldmVsb3BlciBHdWlkZSouXG4gKi9cbkRvbWFpbk5hbWU6IHN0cmluZ1xuLyoqXG4gKiBBIHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgb3JpZ2luLiBUaGlzIHZhbHVlIG11c3QgYmUgdW5pcXVlIHdpdGhpbiB0aGUgZGlzdHJpYnV0aW9uLlxuICogIFVzZSB0aGlzIHZhbHVlIHRvIHNwZWNpZnkgdGhlIGBgVGFyZ2V0T3JpZ2luSWRgYCBpbiBhIGBgQ2FjaGVCZWhhdmlvcmBgIG9yIGBgRGVmYXVsdENhY2hlQmVoYXZpb3JgYC5cbiAqL1xuSWQ6IHN0cmluZ1xuLyoqXG4gKiBUaGUgdW5pcXVlIGlkZW50aWZpZXIgb2YgYW4gb3JpZ2luIGFjY2VzcyBjb250cm9sIGZvciB0aGlzIG9yaWdpbi5cbiAqICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtSZXN0cmljdGluZyBhY2Nlc3MgdG8gYW4gQW1hem9uIFMzIG9yaWdpbl0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL3ByaXZhdGUtY29udGVudC1yZXN0cmljdGluZy1hY2Nlc3MtdG8tczMuaHRtbCkgaW4gdGhlICpBbWF6b24gQ2xvdWRGcm9udCBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5PcmlnaW5BY2Nlc3NDb250cm9sSWQ/OiBzdHJpbmdcbi8qKlxuICogQSBsaXN0IG9mIEhUVFAgaGVhZGVyIG5hbWVzIGFuZCB2YWx1ZXMgdGhhdCBDbG91ZEZyb250IGFkZHMgdG8gdGhlIHJlcXVlc3RzIHRoYXQgaXQgc2VuZHMgdG8gdGhlIG9yaWdpbi5cbiAqICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtBZGRpbmcgQ3VzdG9tIEhlYWRlcnMgdG8gT3JpZ2luIFJlcXVlc3RzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvYWRkLW9yaWdpbi1jdXN0b20taGVhZGVycy5odG1sKSBpbiB0aGUgKkFtYXpvbiBDbG91ZEZyb250IERldmVsb3BlciBHdWlkZSouXG4gKi9cbk9yaWdpbkN1c3RvbUhlYWRlcnM/OiBPcmlnaW5DdXN0b21IZWFkZXJbXVxuLyoqXG4gKiBBbiBvcHRpb25hbCBwYXRoIHRoYXQgQ2xvdWRGcm9udCBhcHBlbmRzIHRvIHRoZSBvcmlnaW4gZG9tYWluIG5hbWUgd2hlbiBDbG91ZEZyb250IHJlcXVlc3RzIGNvbnRlbnQgZnJvbSB0aGUgb3JpZ2luLlxuICogIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW09yaWdpbiBQYXRoXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvZGlzdHJpYnV0aW9uLXdlYi12YWx1ZXMtc3BlY2lmeS5odG1sI0Rvd25sb2FkRGlzdFZhbHVlc09yaWdpblBhdGgpIGluIHRoZSAqQW1hem9uIENsb3VkRnJvbnQgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuT3JpZ2luUGF0aD86IHN0cmluZ1xuT3JpZ2luU2hpZWxkPzogT3JpZ2luU2hpZWxkXG5TM09yaWdpbkNvbmZpZz86IFMzT3JpZ2luQ29uZmlnXG5WcGNPcmlnaW5Db25maWc/OiBWcGNPcmlnaW5Db25maWdcbn1cbi8qKlxuICogVXNlIHRoaXMgdHlwZSB0byBzcGVjaWZ5IGFuIG9yaWdpbiB0aGF0IGlzIG5vdCBhbiBBbWF6b24gUzMgYnVja2V0LCB3aXRoIG9uZSBleGNlcHRpb24uIElmIHRoZSBBbWF6b24gUzMgYnVja2V0IGlzIGNvbmZpZ3VyZWQgd2l0aCBzdGF0aWMgd2Vic2l0ZSBob3N0aW5nLCB1c2UgdGhpcyB0eXBlLiBJZiB0aGUgQW1hem9uIFMzIGJ1Y2tldCBpcyBub3QgY29uZmlndXJlZCB3aXRoIHN0YXRpYyB3ZWJzaXRlIGhvc3RpbmcsIHVzZSB0aGUgYGBTM09yaWdpbkNvbmZpZ2BgIHR5cGUgaW5zdGVhZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDdXN0b21PcmlnaW5Db25maWcge1xuLyoqXG4gKiBUaGUgSFRUUCBwb3J0IHRoYXQgQ2xvdWRGcm9udCB1c2VzIHRvIGNvbm5lY3QgdG8gdGhlIG9yaWdpbi4gU3BlY2lmeSB0aGUgSFRUUCBwb3J0IHRoYXQgdGhlIG9yaWdpbiBsaXN0ZW5zIG9uLlxuICovXG5IVFRQUG9ydD86IG51bWJlclxuLyoqXG4gKiBUaGUgSFRUUFMgcG9ydCB0aGF0IENsb3VkRnJvbnQgdXNlcyB0byBjb25uZWN0IHRvIHRoZSBvcmlnaW4uIFNwZWNpZnkgdGhlIEhUVFBTIHBvcnQgdGhhdCB0aGUgb3JpZ2luIGxpc3RlbnMgb24uXG4gKi9cbkhUVFBTUG9ydD86IG51bWJlclxuLyoqXG4gKiBTcGVjaWZpZXMgaG93IGxvbmcsIGluIHNlY29uZHMsIENsb3VkRnJvbnQgcGVyc2lzdHMgaXRzIGNvbm5lY3Rpb24gdG8gdGhlIG9yaWdpbi4gVGhlIG1pbmltdW0gdGltZW91dCBpcyAxIHNlY29uZCwgdGhlIG1heGltdW0gaXMgMTIwIHNlY29uZHMsIGFuZCB0aGUgZGVmYXVsdCAoaWYgeW91IGRvbid0IHNwZWNpZnkgb3RoZXJ3aXNlKSBpcyA1IHNlY29uZHMuXG4gKiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbS2VlcC1hbGl2ZSB0aW1lb3V0IChjdXN0b20gb3JpZ2lucyBvbmx5KV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL0Rvd25sb2FkRGlzdFZhbHVlc09yaWdpbi5odG1sI0Rvd25sb2FkRGlzdFZhbHVlc09yaWdpbktlZXBhbGl2ZVRpbWVvdXQpIGluIHRoZSAqQW1hem9uIENsb3VkRnJvbnQgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuT3JpZ2luS2VlcGFsaXZlVGltZW91dD86IG51bWJlclxuLyoqXG4gKiBTcGVjaWZpZXMgdGhlIHByb3RvY29sIChIVFRQIG9yIEhUVFBTKSB0aGF0IENsb3VkRnJvbnQgdXNlcyB0byBjb25uZWN0IHRvIHRoZSBvcmlnaW4uIFZhbGlkIHZhbHVlcyBhcmU6XG4gKiAgICsgIGBgaHR0cC1vbmx5YGAg4oCTIENsb3VkRnJvbnQgYWx3YXlzIHVzZXMgSFRUUCB0byBjb25uZWN0IHRvIHRoZSBvcmlnaW4uXG4gKiAgICsgIGBgbWF0Y2gtdmlld2VyYGAg4oCTIENsb3VkRnJvbnQgY29ubmVjdHMgdG8gdGhlIG9yaWdpbiB1c2luZyB0aGUgc2FtZSBwcm90b2NvbCB0aGF0IHRoZSB2aWV3ZXIgdXNlZCB0byBjb25uZWN0IHRvIENsb3VkRnJvbnQuXG4gKiAgICsgIGBgaHR0cHMtb25seWBgIOKAkyBDbG91ZEZyb250IGFsd2F5cyB1c2VzIEhUVFBTIHRvIGNvbm5lY3QgdG8gdGhlIG9yaWdpbi5cbiAqL1xuT3JpZ2luUHJvdG9jb2xQb2xpY3k6IHN0cmluZ1xuLyoqXG4gKiBTcGVjaWZpZXMgaG93IGxvbmcsIGluIHNlY29uZHMsIENsb3VkRnJvbnQgd2FpdHMgZm9yIGEgcmVzcG9uc2UgZnJvbSB0aGUgb3JpZ2luLiBUaGlzIGlzIGFsc28ga25vd24gYXMgdGhlICpvcmlnaW4gcmVzcG9uc2UgdGltZW91dCouIFRoZSBtaW5pbXVtIHRpbWVvdXQgaXMgMSBzZWNvbmQsIHRoZSBtYXhpbXVtIGlzIDEyMCBzZWNvbmRzLCBhbmQgdGhlIGRlZmF1bHQgKGlmIHlvdSBkb24ndCBzcGVjaWZ5IG90aGVyd2lzZSkgaXMgMzAgc2Vjb25kcy5cbiAqICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtSZXNwb25zZSB0aW1lb3V0XShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvRG93bmxvYWREaXN0VmFsdWVzT3JpZ2luLmh0bWwjRG93bmxvYWREaXN0VmFsdWVzT3JpZ2luUmVzcG9uc2VUaW1lb3V0KSBpbiB0aGUgKkFtYXpvbiBDbG91ZEZyb250IERldmVsb3BlciBHdWlkZSouXG4gKi9cbk9yaWdpblJlYWRUaW1lb3V0PzogbnVtYmVyXG4vKipcbiAqIFNwZWNpZmllcyB0aGUgbWluaW11bSBTU0wvVExTIHByb3RvY29sIHRoYXQgQ2xvdWRGcm9udCB1c2VzIHdoZW4gY29ubmVjdGluZyB0byB5b3VyIG9yaWdpbiBvdmVyIEhUVFBTLiBWYWxpZCB2YWx1ZXMgaW5jbHVkZSBgYFNTTHYzYGAsIGBgVExTdjFgYCwgYGBUTFN2MS4xYGAsIGFuZCBgYFRMU3YxLjJgYC5cbiAqICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtNaW5pbXVtIE9yaWdpbiBTU0wgUHJvdG9jb2xdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9Eb3dubG9hZERpc3RWYWx1ZXNPcmlnaW4uaHRtbCNEb3dubG9hZERpc3RWYWx1ZXNPcmlnaW5TU0xQcm90b2NvbHMpIGluIHRoZSAqQW1hem9uIENsb3VkRnJvbnQgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuT3JpZ2luU1NMUHJvdG9jb2xzPzogc3RyaW5nW11cbi8qKlxuICogU3BlY2lmaWVzIHdoaWNoIElQIHByb3RvY29sIENsb3VkRnJvbnQgdXNlcyB3aGVuIGNvbm5lY3RpbmcgdG8geW91ciBvcmlnaW4uIElmIHlvdXIgb3JpZ2luIHVzZXMgYm90aCBJUHY0IGFuZCBJUHY2IHByb3RvY29scywgeW91IGNhbiBjaG9vc2UgYGBkdWFsc3RhY2tgYCB0byBoZWxwIG9wdGltaXplIHJlbGlhYmlsaXR5LlxuICovXG5JcEFkZHJlc3NUeXBlPzogKFwiaXB2NFwiIHwgXCJpcHY2XCIgfCBcImR1YWxzdGFja1wiKVxuT3JpZ2luTXRsc0NvbmZpZz86IE9yaWdpbk10bHNDb25maWdcbn1cbi8qKlxuICogQ29uZmlndXJlcyBtdXR1YWwgVExTIGF1dGhlbnRpY2F0aW9uIGJldHdlZW4gQ2xvdWRGcm9udCBhbmQgeW91ciBvcmlnaW4gc2VydmVyLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE9yaWdpbk10bHNDb25maWcge1xuLyoqXG4gKiBUaGUgQW1hem9uIFJlc291cmNlIE5hbWUgKEFSTikgb2YgdGhlIGNsaWVudCBjZXJ0aWZpY2F0ZSBzdG9yZWQgaW4gQVdTIENlcnRpZmljYXRlIE1hbmFnZXIgKEFDTSkgdGhhdCBDbG91ZEZyb250IHVzZXMgdG8gYXV0aGVudGljYXRlIHdpdGggeW91ciBvcmlnaW4gdXNpbmcgTXV0dWFsIFRMUy5cbiAqL1xuQ2xpZW50Q2VydGlmaWNhdGVBcm46IHN0cmluZ1xufVxuLyoqXG4gKiBBIGNvbXBsZXggdHlwZSB0aGF0IGNvbnRhaW5zIGBgSGVhZGVyTmFtZWBgIGFuZCBgYEhlYWRlclZhbHVlYGAgZWxlbWVudHMsIGlmIGFueSwgZm9yIHRoaXMgZGlzdHJpYnV0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE9yaWdpbkN1c3RvbUhlYWRlciB7XG4vKipcbiAqIFRoZSBuYW1lIG9mIGEgaGVhZGVyIHRoYXQgeW91IHdhbnQgQ2xvdWRGcm9udCB0byBzZW5kIHRvIHlvdXIgb3JpZ2luLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtBZGRpbmcgQ3VzdG9tIEhlYWRlcnMgdG8gT3JpZ2luIFJlcXVlc3RzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvZm9yd2FyZC1jdXN0b20taGVhZGVycy5odG1sKSBpbiB0aGUgKkFtYXpvbiBDbG91ZEZyb250IERldmVsb3BlciBHdWlkZSouXG4gKi9cbkhlYWRlck5hbWU6IHN0cmluZ1xuLyoqXG4gKiBUaGUgdmFsdWUgZm9yIHRoZSBoZWFkZXIgdGhhdCB5b3Ugc3BlY2lmaWVkIGluIHRoZSBgYEhlYWRlck5hbWVgYCBmaWVsZC5cbiAqL1xuSGVhZGVyVmFsdWU6IHN0cmluZ1xufVxuLyoqXG4gKiBDbG91ZEZyb250IE9yaWdpbiBTaGllbGQuIFVzaW5nIE9yaWdpbiBTaGllbGQgY2FuIGhlbHAgcmVkdWNlIHRoZSBsb2FkIG9uIHlvdXIgb3JpZ2luLlxuICogIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1VzaW5nIE9yaWdpbiBTaGllbGRdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9vcmlnaW4tc2hpZWxkLmh0bWwpIGluIHRoZSAqQW1hem9uIENsb3VkRnJvbnQgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPcmlnaW5TaGllbGQge1xuLyoqXG4gKiBBIGZsYWcgdGhhdCBzcGVjaWZpZXMgd2hldGhlciBPcmlnaW4gU2hpZWxkIGlzIGVuYWJsZWQuXG4gKiAgV2hlbiBpdCdzIGVuYWJsZWQsIENsb3VkRnJvbnQgcm91dGVzIGFsbCByZXF1ZXN0cyB0aHJvdWdoIE9yaWdpbiBTaGllbGQsIHdoaWNoIGNhbiBoZWxwIHByb3RlY3QgeW91ciBvcmlnaW4uIFdoZW4gaXQncyBkaXNhYmxlZCwgQ2xvdWRGcm9udCBtaWdodCBzZW5kIHJlcXVlc3RzIGRpcmVjdGx5IHRvIHlvdXIgb3JpZ2luIGZyb20gbXVsdGlwbGUgZWRnZSBsb2NhdGlvbnMgb3IgcmVnaW9uYWwgZWRnZSBjYWNoZXMuXG4gKi9cbkVuYWJsZWQ/OiBib29sZWFuXG4vKipcbiAqIFRoZSBBV1MtUmVnaW9uIGZvciBPcmlnaW4gU2hpZWxkLlxuICogIFNwZWNpZnkgdGhlIEFXUy1SZWdpb24gdGhhdCBoYXMgdGhlIGxvd2VzdCBsYXRlbmN5IHRvIHlvdXIgb3JpZ2luLiBUbyBzcGVjaWZ5IGEgcmVnaW9uLCB1c2UgdGhlIHJlZ2lvbiBjb2RlLCBub3QgdGhlIHJlZ2lvbiBuYW1lLiBGb3IgZXhhbXBsZSwgc3BlY2lmeSB0aGUgVVMgRWFzdCAoT2hpbykgcmVnaW9uIGFzIGBgdXMtZWFzdC0yYGAuXG4gKiAgV2hlbiB5b3UgZW5hYmxlIENsb3VkRnJvbnQgT3JpZ2luIFNoaWVsZCwgeW91IG11c3Qgc3BlY2lmeSB0aGUgQVdTLVJlZ2lvbiBmb3IgT3JpZ2luIFNoaWVsZC4gRm9yIHRoZSBsaXN0IG9mIEFXUy1SZWdpb25zIHRoYXQgeW91IGNhbiBzcGVjaWZ5LCBhbmQgZm9yIGhlbHAgY2hvb3NpbmcgdGhlIGJlc3QgUmVnaW9uIGZvciB5b3VyIG9yaWdpbiwgc2VlIFtDaG9vc2luZyB0aGUgZm9yIE9yaWdpbiBTaGllbGRdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9vcmlnaW4tc2hpZWxkLmh0bWwjY2hvb3NlLW9yaWdpbi1zaGllbGQtcmVnaW9uKSBpbiB0aGUgKkFtYXpvbiBDbG91ZEZyb250IERldmVsb3BlciBHdWlkZSouXG4gKi9cbk9yaWdpblNoaWVsZFJlZ2lvbj86IHN0cmluZ1xufVxuLyoqXG4gKiBVc2UgdGhpcyB0eXBlIHRvIHNwZWNpZnkgYW4gb3JpZ2luIHRoYXQgaXMgYW4gQW1hem9uIFMzIGJ1Y2tldCB0aGF0IGlzIG5vdCBjb25maWd1cmVkIHdpdGggc3RhdGljIHdlYnNpdGUgaG9zdGluZy4gVG8gc3BlY2lmeSBhbnkgb3RoZXIgdHlwZSBvZiBvcmlnaW4sIGluY2x1ZGluZyBhbiBBbWF6b24gUzMgYnVja2V0IHRoYXQgaXMgY29uZmlndXJlZCB3aXRoIHN0YXRpYyB3ZWJzaXRlIGhvc3RpbmcsIHVzZSB0aGUgYGBDdXN0b21PcmlnaW5Db25maWdgYCB0eXBlIGluc3RlYWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUzNPcmlnaW5Db25maWcge1xuLyoqXG4gKiBJZiB5b3UncmUgdXNpbmcgb3JpZ2luIGFjY2VzcyBjb250cm9sIChPQUMpIGluc3RlYWQgb2Ygb3JpZ2luIGFjY2VzcyBpZGVudGl0eSwgc3BlY2lmeSBhbiBlbXB0eSBgYE9yaWdpbkFjY2Vzc0lkZW50aXR5YGAgZWxlbWVudC4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbUmVzdHJpY3RpbmcgYWNjZXNzIHRvIGFuXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvcHJpdmF0ZS1jb250ZW50LXJlc3RyaWN0aW5nLWFjY2Vzcy10by1vcmlnaW4uaHRtbCkgaW4gdGhlICpBbWF6b24gQ2xvdWRGcm9udCBEZXZlbG9wZXIgR3VpZGUqLlxuICogICBUaGUgQ2xvdWRGcm9udCBvcmlnaW4gYWNjZXNzIGlkZW50aXR5IHRvIGFzc29jaWF0ZSB3aXRoIHRoZSBvcmlnaW4uIFVzZSBhbiBvcmlnaW4gYWNjZXNzIGlkZW50aXR5IHRvIGNvbmZpZ3VyZSB0aGUgb3JpZ2luIHNvIHRoYXQgdmlld2VycyBjYW4gKm9ubHkqIGFjY2VzcyBvYmplY3RzIGluIGFuIEFtYXpvbiBTMyBidWNrZXQgdGhyb3VnaCBDbG91ZEZyb250LiBUaGUgZm9ybWF0IG9mIHRoZSB2YWx1ZSBpczpcbiAqICAgYGBvcmlnaW4tYWNjZXNzLWlkZW50aXR5L2Nsb3VkZnJvbnQvSUQtb2Ytb3JpZ2luLWFjY2Vzcy1pZGVudGl0eWBgIFxuICogIFRoZSBgYElELW9mLW9yaWdpbi1hY2Nlc3MtaWRlbnRpdHlgYCBpcyB0aGUgdmFsdWUgdGhhdCBDbG91ZEZyb250IHJldHVybmVkIGluIHRoZSBgYElEYGAgZWxlbWVudCB3aGVuIHlvdSBjcmVhdGVkIHRoZSBvcmlnaW4gYWNjZXNzIGlkZW50aXR5LlxuICogIElmIHlvdSB3YW50IHZpZXdlcnMgdG8gYmUgYWJsZSB0byBhY2Nlc3Mgb2JqZWN0cyB1c2luZyBlaXRoZXIgdGhlIENsb3VkRnJvbnQgVVJMIG9yIHRoZSBBbWF6b24gUzMgVVJMLCBzcGVjaWZ5IGFuIGVtcHR5IGBgT3JpZ2luQWNjZXNzSWRlbnRpdHlgYCBlbGVtZW50LlxuICogIFRvIGRlbGV0ZSB0aGUgb3JpZ2luIGFjY2VzcyBpZGVudGl0eSBmcm9tIGFuIGV4aXN0aW5nIGRpc3RyaWJ1dGlvbiwgdXBkYXRlIHRoZSBkaXN0cmlidXRpb24gY29uZmlndXJhdGlvbiBhbmQgaW5jbHVkZSBhbiBlbXB0eSBgYE9yaWdpbkFjY2Vzc0lkZW50aXR5YGAgZWxlbWVudC5cbiAqICBUbyByZXBsYWNlIHRoZSBvcmlnaW4gYWNjZXNzIGlkZW50aXR5LCB1cGRhdGUgdGhlIGRpc3RyaWJ1dGlvbiBjb25maWd1cmF0aW9uIGFuZCBzcGVjaWZ5IHRoZSBuZXcgb3JpZ2luIGFjY2VzcyBpZGVudGl0eS5cbiAqICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgb3JpZ2luIGFjY2VzcyBpZGVudGl0eSwgc2VlIFtTZXJ2aW5nIFByaXZhdGUgQ29udGVudCB0aHJvdWdoIENsb3VkRnJvbnRdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9Qcml2YXRlQ29udGVudC5odG1sKSBpbiB0aGUgKkFtYXpvbiBDbG91ZEZyb250IERldmVsb3BlciBHdWlkZSouXG4gKi9cbk9yaWdpbkFjY2Vzc0lkZW50aXR5Pzogc3RyaW5nXG4vKipcbiAqIFNwZWNpZmllcyBob3cgbG9uZywgaW4gc2Vjb25kcywgQ2xvdWRGcm9udCB3YWl0cyBmb3IgYSByZXNwb25zZSBmcm9tIHRoZSBvcmlnaW4uIFRoaXMgaXMgYWxzbyBrbm93biBhcyB0aGUgKm9yaWdpbiByZXNwb25zZSB0aW1lb3V0Ki4gVGhlIG1pbmltdW0gdGltZW91dCBpcyAxIHNlY29uZCwgdGhlIG1heGltdW0gaXMgMTIwIHNlY29uZHMsIGFuZCB0aGUgZGVmYXVsdCAoaWYgeW91IGRvbid0IHNwZWNpZnkgb3RoZXJ3aXNlKSBpcyAzMCBzZWNvbmRzLlxuICogIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1Jlc3BvbnNlIHRpbWVvdXRdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9Eb3dubG9hZERpc3RWYWx1ZXNPcmlnaW4uaHRtbCNEb3dubG9hZERpc3RWYWx1ZXNPcmlnaW5SZXNwb25zZVRpbWVvdXQpIGluIHRoZSAqQW1hem9uIENsb3VkRnJvbnQgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuT3JpZ2luUmVhZFRpbWVvdXQ/OiBudW1iZXJcbn1cbi8qKlxuICogVGhlIFZQQyBvcmlnaW4gY29uZmlndXJhdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBWcGNPcmlnaW5Db25maWcge1xuLyoqXG4gKiBTcGVjaWZpZXMgaG93IGxvbmcsIGluIHNlY29uZHMsIENsb3VkRnJvbnQgcGVyc2lzdHMgaXRzIGNvbm5lY3Rpb24gdG8gdGhlIG9yaWdpbi4gVGhlIG1pbmltdW0gdGltZW91dCBpcyAxIHNlY29uZCwgdGhlIG1heGltdW0gaXMgMTIwIHNlY29uZHMsIGFuZCB0aGUgZGVmYXVsdCAoaWYgeW91IGRvbid0IHNwZWNpZnkgb3RoZXJ3aXNlKSBpcyA1IHNlY29uZHMuXG4gKiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbS2VlcC1hbGl2ZSB0aW1lb3V0IChjdXN0b20gb3JpZ2lucyBvbmx5KV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL0Rvd25sb2FkRGlzdFZhbHVlc09yaWdpbi5odG1sI0Rvd25sb2FkRGlzdFZhbHVlc09yaWdpbktlZXBhbGl2ZVRpbWVvdXQpIGluIHRoZSAqQW1hem9uIENsb3VkRnJvbnQgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuT3JpZ2luS2VlcGFsaXZlVGltZW91dD86IG51bWJlclxuLyoqXG4gKiBTcGVjaWZpZXMgaG93IGxvbmcsIGluIHNlY29uZHMsIENsb3VkRnJvbnQgd2FpdHMgZm9yIGEgcmVzcG9uc2UgZnJvbSB0aGUgb3JpZ2luLiBUaGlzIGlzIGFsc28ga25vd24gYXMgdGhlICpvcmlnaW4gcmVzcG9uc2UgdGltZW91dCouIFRoZSBtaW5pbXVtIHRpbWVvdXQgaXMgMSBzZWNvbmQsIHRoZSBtYXhpbXVtIGlzIDEyMCBzZWNvbmRzLCBhbmQgdGhlIGRlZmF1bHQgKGlmIHlvdSBkb24ndCBzcGVjaWZ5IG90aGVyd2lzZSkgaXMgMzAgc2Vjb25kcy5cbiAqICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtSZXNwb25zZSB0aW1lb3V0XShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvRG93bmxvYWREaXN0VmFsdWVzT3JpZ2luLmh0bWwjRG93bmxvYWREaXN0VmFsdWVzT3JpZ2luUmVzcG9uc2VUaW1lb3V0KSBpbiB0aGUgKkFtYXpvbiBDbG91ZEZyb250IERldmVsb3BlciBHdWlkZSouXG4gKi9cbk9yaWdpblJlYWRUaW1lb3V0PzogbnVtYmVyXG4vKipcbiAqIFRoZSBhY2NvdW50IElEIG9mIHRoZSBBV1MtYWNjb3VudCB0aGF0IG93bnMgdGhlIFZQQyBvcmlnaW4uXG4gKi9cbk93bmVyQWNjb3VudElkPzogc3RyaW5nXG4vKipcbiAqIFRoZSBWUEMgb3JpZ2luIElELlxuICovXG5WcGNPcmlnaW5JZDogc3RyaW5nXG59XG4vKipcbiAqIEEgY29tcGxleCB0eXBlIHRoYXQgaWRlbnRpZmllcyB3YXlzIGluIHdoaWNoIHlvdSB3YW50IHRvIHJlc3RyaWN0IGRpc3RyaWJ1dGlvbiBvZiB5b3VyIGNvbnRlbnQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVzdHJpY3Rpb25zIHtcbkdlb1Jlc3RyaWN0aW9uOiBHZW9SZXN0cmljdGlvblxufVxuLyoqXG4gKiBBIGNvbXBsZXggdHlwZSB0aGF0IGNvbnRyb2xzIHRoZSBjb3VudHJpZXMgaW4gd2hpY2ggeW91ciBjb250ZW50IGlzIGRpc3RyaWJ1dGVkLiBDRiBkZXRlcm1pbmVzIHRoZSBsb2NhdGlvbiBvZiB5b3VyIHVzZXJzIHVzaW5nIGBgTWF4TWluZGBgIEdlb0lQIGRhdGFiYXNlcy4gVG8gZGlzYWJsZSBnZW8gcmVzdHJpY3Rpb24sIHJlbW92ZSB0aGUgW1Jlc3RyaWN0aW9uc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXByb3BlcnRpZXMtY2xvdWRmcm9udC1kaXN0cmlidXRpb24tZGlzdHJpYnV0aW9uY29uZmlnLmh0bWwjY2ZuLWNsb3VkZnJvbnQtZGlzdHJpYnV0aW9uLWRpc3RyaWJ1dGlvbmNvbmZpZy1yZXN0cmljdGlvbnMpIHByb3BlcnR5IGZyb20geW91ciBzdGFjayB0ZW1wbGF0ZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHZW9SZXN0cmljdGlvbiB7XG4vKipcbiAqIEEgY29tcGxleCB0eXBlIHRoYXQgY29udGFpbnMgYSBgYExvY2F0aW9uYGAgZWxlbWVudCBmb3IgZWFjaCBjb3VudHJ5IGluIHdoaWNoIHlvdSB3YW50IENsb3VkRnJvbnQgZWl0aGVyIHRvIGRpc3RyaWJ1dGUgeW91ciBjb250ZW50IChgYHdoaXRlbGlzdGBgKSBvciBub3QgZGlzdHJpYnV0ZSB5b3VyIGNvbnRlbnQgKGBgYmxhY2tsaXN0YGApLlxuICogIFRoZSBgYExvY2F0aW9uYGAgZWxlbWVudCBpcyBhIHR3by1sZXR0ZXIsIHVwcGVyY2FzZSBjb3VudHJ5IGNvZGUgZm9yIGEgY291bnRyeSB0aGF0IHlvdSB3YW50IHRvIGluY2x1ZGUgaW4geW91ciBgYGJsYWNrbGlzdGBgIG9yIGBgd2hpdGVsaXN0YGAuIEluY2x1ZGUgb25lIGBgTG9jYXRpb25gYCBlbGVtZW50IGZvciBlYWNoIGNvdW50cnkuXG4gKiAgQ2xvdWRGcm9udCBhbmQgYGBNYXhNaW5kYGAgYm90aCB1c2UgYGBJU08gMzE2NmBgIGNvdW50cnkgY29kZXMuIEZvciB0aGUgY3VycmVudCBsaXN0IG9mIGNvdW50cmllcyBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgY29kZXMsIHNlZSBgYElTTyAzMTY2LTEtYWxwaGEtMmBgIGNvZGUgb24gdGhlICpJbnRlcm5hdGlvbmFsIE9yZ2FuaXphdGlvbiBmb3IgU3RhbmRhcmRpemF0aW9uKiB3ZWJzaXRlLiBZb3UgY2FuIGFsc28gcmVmZXIgdG8gdGhlIGNvdW50cnkgbGlzdCBvbiB0aGUgQ2xvdWRGcm9udCBjb25zb2xlLCB3aGljaCBpbmNsdWRlcyBib3RoIGNvdW50cnkgbmFtZXMgYW5kIGNvZGVzLlxuICovXG5Mb2NhdGlvbnM/OiBzdHJpbmdbXVxuLyoqXG4gKiBUaGUgbWV0aG9kIHRoYXQgeW91IHdhbnQgdG8gdXNlIHRvIHJlc3RyaWN0IGRpc3RyaWJ1dGlvbiBvZiB5b3VyIGNvbnRlbnQgYnkgY291bnRyeTpcbiAqICAgKyAgYGBub25lYGA6IE5vIGdlbyByZXN0cmljdGlvbiBpcyBlbmFibGVkLCBtZWFuaW5nIGFjY2VzcyB0byBjb250ZW50IGlzIG5vdCByZXN0cmljdGVkIGJ5IGNsaWVudCBnZW8gbG9jYXRpb24uXG4gKiAgICsgIGBgYmxhY2tsaXN0YGA6IFRoZSBgYExvY2F0aW9uYGAgZWxlbWVudHMgc3BlY2lmeSB0aGUgY291bnRyaWVzIGluIHdoaWNoIHlvdSBkb24ndCB3YW50IENsb3VkRnJvbnQgdG8gZGlzdHJpYnV0ZSB5b3VyIGNvbnRlbnQuXG4gKiAgICsgIGBgd2hpdGVsaXN0YGA6IFRoZSBgYExvY2F0aW9uYGAgZWxlbWVudHMgc3BlY2lmeSB0aGUgY291bnRyaWVzIGluIHdoaWNoIHlvdSB3YW50IENsb3VkRnJvbnQgdG8gZGlzdHJpYnV0ZSB5b3VyIGNvbnRlbnQuXG4gKi9cblJlc3RyaWN0aW9uVHlwZTogc3RyaW5nXG59XG4vKipcbiAqIFRoZSBvcmlnaW4gYXMgYW4gUzMgYnVja2V0LlxuICogICBUaGlzIHByb3BlcnR5IGlzIGxlZ2FjeS4gV2UgcmVjb21tZW5kIHRoYXQgeW91IHVzZSBbT3JpZ2luXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcHJvcGVydGllcy1jbG91ZGZyb250LWRpc3RyaWJ1dGlvbi1vcmlnaW4uaHRtbCkgaW5zdGVhZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMZWdhY3lTM09yaWdpbiB7XG4vKipcbiAqIFRoZSBkb21haW4gbmFtZSBhc3NpZ25lZCB0byB5b3VyIENGIGRpc3RyaWJ1dGlvbi5cbiAqL1xuRE5TTmFtZTogc3RyaW5nXG4vKipcbiAqIFRoZSBDRiBvcmlnaW4gYWNjZXNzIGlkZW50aXR5IHRvIGFzc29jaWF0ZSB3aXRoIHRoZSBkaXN0cmlidXRpb24uIFVzZSBhbiBvcmlnaW4gYWNjZXNzIGlkZW50aXR5IHRvIGNvbmZpZ3VyZSB0aGUgZGlzdHJpYnV0aW9uIHNvIHRoYXQgZW5kIHVzZXJzIGNhbiBvbmx5IGFjY2VzcyBvYmplY3RzIGluIGFuIFMzIHRocm91Z2ggQ0YuXG4gKiAgIFRoaXMgcHJvcGVydHkgaXMgbGVnYWN5LiBXZSByZWNvbW1lbmQgdGhhdCB5b3UgdXNlIFtPcmlnaW5BY2Nlc3NDb250cm9sXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcmVzb3VyY2UtY2xvdWRmcm9udC1vcmlnaW5hY2Nlc3Njb250cm9sLmh0bWwpIGluc3RlYWQuXG4gKi9cbk9yaWdpbkFjY2Vzc0lkZW50aXR5Pzogc3RyaW5nXG59XG4vKipcbiAqIEEgbGlzdCBvZiBwYXJhbWV0ZXIgdmFsdWVzIHRvIGFkZCB0byB0aGUgcmVzb3VyY2UuIEEgcGFyYW1ldGVyIGlzIHNwZWNpZmllZCBhcyBhIGtleS12YWx1ZSBwYWlyLiBBIHZhbGlkIHBhcmFtZXRlciB2YWx1ZSBtdXN0IGV4aXN0IGZvciBhbnkgcGFyYW1ldGVyIHRoYXQgaXMgbWFya2VkIGFzIHJlcXVpcmVkIGluIHRoZSBtdWx0aS10ZW5hbnQgZGlzdHJpYnV0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBhcmFtZXRlckRlZmluaXRpb24ge1xuLyoqXG4gKiBUaGUgbmFtZSBvZiB0aGUgcGFyYW1ldGVyLlxuICovXG5OYW1lOiBzdHJpbmdcbi8qKlxuICogVGhlIHZhbHVlIHRoYXQgeW91IGFzc2lnbmVkIHRvIHRoZSBwYXJhbWV0ZXIuXG4gKi9cbkRlZmluaXRpb246IHtcblN0cmluZ1NjaGVtYT86IHtcbkNvbW1lbnQ/OiBzdHJpbmdcbkRlZmF1bHRWYWx1ZT86IHN0cmluZ1xuUmVxdWlyZWQ6IGJvb2xlYW5cbn1cbn1cbn1cbi8qKlxuICogVGhlIGRpc3RyaWJ1dGlvbidzIHZpZXdlciBtVExTIGNvbmZpZ3VyYXRpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVmlld2VyTXRsc0NvbmZpZyB7XG4vKipcbiAqIFRoZSB2aWV3ZXIgbVRMUyBtb2RlLlxuICovXG5Nb2RlPzogKFwicmVxdWlyZWRcIiB8IFwib3B0aW9uYWxcIilcblRydXN0U3RvcmVDb25maWc/OiBUcnVzdFN0b3JlQ29uZmlnXG59XG4vKipcbiAqIFRoZSB0cnVzdCBzdG9yZSBjb25maWd1cmF0aW9uIGFzc29jaWF0ZWQgd2l0aCB0aGUgdmlld2VyIG1UTFMgY29uZmlndXJhdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUcnVzdFN0b3JlQ29uZmlnIHtcbi8qKlxuICogVGhlIHRydXN0IHN0b3JlIElELlxuICovXG5UcnVzdFN0b3JlSWQ6IHN0cmluZ1xuLyoqXG4gKiBUaGUgY29uZmlndXJhdGlvbiB0byB1c2UgdG8gYWR2ZXJ0aXNlIHRydXN0IHN0b3JlIENBIG5hbWVzLlxuICovXG5BZHZlcnRpc2VUcnVzdFN0b3JlQ2FOYW1lcz86IGJvb2xlYW5cbi8qKlxuICogVGhlIGNvbmZpZ3VyYXRpb24gdG8gdXNlIHRvIGlnbm9yZSBjZXJ0aWZpY2F0ZSBleHBpcmF0aW9uLlxuICovXG5JZ25vcmVDZXJ0aWZpY2F0ZUV4cGlyeT86IGJvb2xlYW5cbn1cbi8qKlxuICogQSBjb21wbGV4IHR5cGUgdGhhdCBkZXRlcm1pbmVzIHRoZSBkaXN0cmlidXRpb24ncyBTU0wvVExTIGNvbmZpZ3VyYXRpb24gZm9yIGNvbW11bmljYXRpbmcgd2l0aCB2aWV3ZXJzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFZpZXdlckNlcnRpZmljYXRlIHtcbi8qKlxuICogSW4gQ2xvdWRGb3JtYXRpb24sIHRoaXMgZmllbGQgbmFtZSBpcyBgYEFjbUNlcnRpZmljYXRlQXJuYGAuIE5vdGUgdGhlIGRpZmZlcmVudCBjYXBpdGFsaXphdGlvbi5cbiAqICAgSWYgdGhlIGRpc3RyaWJ1dGlvbiB1c2VzIGBgQWxpYXNlc2BgIChhbHRlcm5hdGUgZG9tYWluIG5hbWVzIG9yIENOQU1FcykgYW5kIHRoZSBTU0wvVExTIGNlcnRpZmljYXRlIGlzIHN0b3JlZCBpbiBbKEFDTSldKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hY20vbGF0ZXN0L3VzZXJndWlkZS9hY20tb3ZlcnZpZXcuaHRtbCksIHByb3ZpZGUgdGhlIEFtYXpvbiBSZXNvdXJjZSBOYW1lIChBUk4pIG9mIHRoZSBBQ00gY2VydGlmaWNhdGUuIENsb3VkRnJvbnQgb25seSBzdXBwb3J0cyBBQ00gY2VydGlmaWNhdGVzIGluIHRoZSBVUyBFYXN0IChOLiBWaXJnaW5pYSkgUmVnaW9uIChgYHVzLWVhc3QtMWBgKS5cbiAqICBJZiB5b3Ugc3BlY2lmeSBhbiBBQ00gY2VydGlmaWNhdGUgQVJOLCB5b3UgbXVzdCBhbHNvIHNwZWNpZnkgdmFsdWVzIGZvciBgYE1pbmltdW1Qcm90b2NvbFZlcnNpb25gYCBhbmQgYGBTU0xTdXBwb3J0TWV0aG9kYGAuIChJbiBDbG91ZEZvcm1hdGlvbiwgdGhlIGZpZWxkIG5hbWUgaXMgYGBTc2xTdXBwb3J0TWV0aG9kYGAuIE5vdGUgdGhlIGRpZmZlcmVudCBjYXBpdGFsaXphdGlvbi4pXG4gKi9cbkFjbUNlcnRpZmljYXRlQXJuPzogc3RyaW5nXG4vKipcbiAqIElmIHRoZSBkaXN0cmlidXRpb24gdXNlcyB0aGUgQ2xvdWRGcm9udCBkb21haW4gbmFtZSBzdWNoIGFzIGBgZDExMTExMWFiY2RlZjguY2xvdWRmcm9udC5uZXRgYCwgc2V0IHRoaXMgZmllbGQgdG8gYGB0cnVlYGAuXG4gKiAgSWYgdGhlIGRpc3RyaWJ1dGlvbiB1c2VzIGBgQWxpYXNlc2BgIChhbHRlcm5hdGUgZG9tYWluIG5hbWVzIG9yIENOQU1FcyksIG9taXQgdGhpcyBmaWVsZCBhbmQgc3BlY2lmeSB2YWx1ZXMgZm9yIHRoZSBmb2xsb3dpbmcgZmllbGRzOlxuICogICArICBgYEFjbUNlcnRpZmljYXRlQXJuYGAgb3IgYGBJYW1DZXJ0aWZpY2F0ZUlkYGAgKHNwZWNpZnkgYSB2YWx1ZSBmb3Igb25lLCBub3QgYm90aCkgXG4gKiAgICsgICBgYE1pbmltdW1Qcm90b2NvbFZlcnNpb25gYCBcbiAqICAgKyAgIGBgU3NsU3VwcG9ydE1ldGhvZGBgXG4gKi9cbkNsb3VkRnJvbnREZWZhdWx0Q2VydGlmaWNhdGU/OiBib29sZWFuXG4vKipcbiAqIFRoaXMgZmllbGQgb25seSBzdXBwb3J0cyBzdGFuZGFyZCBkaXN0cmlidXRpb25zLiBZb3UgY2FuJ3Qgc3BlY2lmeSB0aGlzIGZpZWxkIGZvciBtdWx0aS10ZW5hbnQgZGlzdHJpYnV0aW9ucy4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbVW5zdXBwb3J0ZWQgZmVhdHVyZXMgZm9yIFNhYVMgTWFuYWdlciBmb3IgQW1hem9uIENsb3VkRnJvbnRdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9kaXN0cmlidXRpb24tY29uZmlnLW9wdGlvbnMuaHRtbCN1bnN1cHBvcnRlZC1zYWFzKSBpbiB0aGUgKkFtYXpvbiBDbG91ZEZyb250IERldmVsb3BlciBHdWlkZSouXG4gKiAgICBJbiBDbG91ZEZvcm1hdGlvbiwgdGhpcyBmaWVsZCBuYW1lIGlzIGBgSWFtQ2VydGlmaWNhdGVJZGBgLiBOb3RlIHRoZSBkaWZmZXJlbnQgY2FwaXRhbGl6YXRpb24uXG4gKiAgIElmIHRoZSBkaXN0cmlidXRpb24gdXNlcyBgYEFsaWFzZXNgYCAoYWx0ZXJuYXRlIGRvbWFpbiBuYW1lcyBvciBDTkFNRXMpIGFuZCB0aGUgU1NML1RMUyBjZXJ0aWZpY2F0ZSBpcyBzdG9yZWQgaW4gWyhJQU0pXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vSUFNL2xhdGVzdC9Vc2VyR3VpZGUvaWRfY3JlZGVudGlhbHNfc2VydmVyLWNlcnRzLmh0bWwpLCBwcm92aWRlIHRoZSBJRCBvZiB0aGUgSUFNIGNlcnRpZmljYXRlLlxuICogIElmIHlvdSBzcGVjaWZ5IGFuIElBTSBjZXJ0aWZpY2F0ZSBJRCwgeW91IG11c3QgYWxzbyBzcGVjaWZ5IHZhbHVlcyBmb3IgYGBNaW5pbXVtUHJvdG9jb2xWZXJzaW9uYGAgYW5kIGBgU1NMU3VwcG9ydE1ldGhvZGBgLiAoSW4gQ2xvdWRGb3JtYXRpb24sIHRoZSBmaWVsZCBuYW1lIGlzIGBgU3NsU3VwcG9ydE1ldGhvZGBgLiBOb3RlIHRoZSBkaWZmZXJlbnQgY2FwaXRhbGl6YXRpb24uKVxuICovXG5JYW1DZXJ0aWZpY2F0ZUlkPzogc3RyaW5nXG4vKipcbiAqIElmIHRoZSBkaXN0cmlidXRpb24gdXNlcyBgYEFsaWFzZXNgYCAoYWx0ZXJuYXRlIGRvbWFpbiBuYW1lcyBvciBDTkFNRXMpLCBzcGVjaWZ5IHRoZSBzZWN1cml0eSBwb2xpY3kgdGhhdCB5b3Ugd2FudCBDbG91ZEZyb250IHRvIHVzZSBmb3IgSFRUUFMgY29ubmVjdGlvbnMgd2l0aCB2aWV3ZXJzLiBUaGUgc2VjdXJpdHkgcG9saWN5IGRldGVybWluZXMgdHdvIHNldHRpbmdzOlxuICogICArICBUaGUgbWluaW11bSBTU0wvVExTIHByb3RvY29sIHRoYXQgQ2xvdWRGcm9udCBjYW4gdXNlIHRvIGNvbW11bmljYXRlIHdpdGggdmlld2Vycy5cbiAqICAgKyAgVGhlIGNpcGhlcnMgdGhhdCBDbG91ZEZyb250IGNhbiB1c2UgdG8gZW5jcnlwdCB0aGUgY29udGVudCB0aGF0IGl0IHJldHVybnMgdG8gdmlld2Vycy5cbiAqICAgXG4gKiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbU2VjdXJpdHkgUG9saWN5XShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvZGlzdHJpYnV0aW9uLXdlYi12YWx1ZXMtc3BlY2lmeS5odG1sI0Rvd25sb2FkRGlzdFZhbHVlcy1zZWN1cml0eS1wb2xpY3kpIGFuZCBbU3VwcG9ydGVkIFByb3RvY29scyBhbmQgQ2lwaGVycyBCZXR3ZWVuIFZpZXdlcnMgYW5kIENsb3VkRnJvbnRdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9zZWN1cmUtY29ubmVjdGlvbnMtc3VwcG9ydGVkLXZpZXdlci1wcm90b2NvbHMtY2lwaGVycy5odG1sI3NlY3VyZS1jb25uZWN0aW9ucy1zdXBwb3J0ZWQtY2lwaGVycykgaW4gdGhlICpBbWF6b24gQ2xvdWRGcm9udCBEZXZlbG9wZXIgR3VpZGUqLlxuICogICBPbiB0aGUgQ2xvdWRGcm9udCBjb25zb2xlLCB0aGlzIHNldHRpbmcgaXMgY2FsbGVkICpTZWN1cml0eSBQb2xpY3kqLlxuICogICBXaGVuIHlvdSdyZSB1c2luZyBTTkkgb25seSAoeW91IHNldCBgYFNTTFN1cHBvcnRNZXRob2RgYCB0byBgYHNuaS1vbmx5YGApLCB5b3UgbXVzdCBzcGVjaWZ5IGBgVExTdjFgYCBvciBoaWdoZXIuIChJbiBDbG91ZEZvcm1hdGlvbiwgdGhlIGZpZWxkIG5hbWUgaXMgYGBTc2xTdXBwb3J0TWV0aG9kYGAuIE5vdGUgdGhlIGRpZmZlcmVudCBjYXBpdGFsaXphdGlvbi4pXG4gKiAgSWYgdGhlIGRpc3RyaWJ1dGlvbiB1c2VzIHRoZSBDbG91ZEZyb250IGRvbWFpbiBuYW1lIHN1Y2ggYXMgYGBkMTExMTExYWJjZGVmOC5jbG91ZGZyb250Lm5ldGBgICh5b3Ugc2V0IGBgQ2xvdWRGcm9udERlZmF1bHRDZXJ0aWZpY2F0ZWBgIHRvIGBgdHJ1ZWBgKSwgQ2xvdWRGcm9udCBhdXRvbWF0aWNhbGx5IHNldHMgdGhlIHNlY3VyaXR5IHBvbGljeSB0byBgYFRMU3YxYGAgcmVnYXJkbGVzcyBvZiB0aGUgdmFsdWUgdGhhdCB5b3Ugc2V0IGhlcmUuXG4gKi9cbk1pbmltdW1Qcm90b2NvbFZlcnNpb24/OiBzdHJpbmdcbi8qKlxuICogSW4gQ2xvdWRGb3JtYXRpb24sIHRoaXMgZmllbGQgbmFtZSBpcyBgYFNzbFN1cHBvcnRNZXRob2RgYC4gTm90ZSB0aGUgZGlmZmVyZW50IGNhcGl0YWxpemF0aW9uLlxuICogICBJZiB0aGUgZGlzdHJpYnV0aW9uIHVzZXMgYGBBbGlhc2VzYGAgKGFsdGVybmF0ZSBkb21haW4gbmFtZXMgb3IgQ05BTUVzKSwgc3BlY2lmeSB3aGljaCB2aWV3ZXJzIHRoZSBkaXN0cmlidXRpb24gYWNjZXB0cyBIVFRQUyBjb25uZWN0aW9ucyBmcm9tLlxuICogICArICBgYHNuaS1vbmx5YGAg4oCTIFRoZSBkaXN0cmlidXRpb24gYWNjZXB0cyBIVFRQUyBjb25uZWN0aW9ucyBmcm9tIG9ubHkgdmlld2VycyB0aGF0IHN1cHBvcnQgW3NlcnZlciBuYW1lIGluZGljYXRpb24gKFNOSSldKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9odHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9TZXJ2ZXJfTmFtZV9JbmRpY2F0aW9uKS4gVGhpcyBpcyByZWNvbW1lbmRlZC4gTW9zdCBicm93c2VycyBhbmQgY2xpZW50cyBzdXBwb3J0IFNOSS5cbiAqICAgKyAgYGB2aXBgYCDigJMgVGhlIGRpc3RyaWJ1dGlvbiBhY2NlcHRzIEhUVFBTIGNvbm5lY3Rpb25zIGZyb20gYWxsIHZpZXdlcnMgaW5jbHVkaW5nIHRob3NlIHRoYXQgZG9uJ3Qgc3VwcG9ydCBTTkkuIFRoaXMgaXMgbm90IHJlY29tbWVuZGVkLCBhbmQgcmVzdWx0cyBpbiBhZGRpdGlvbmFsIG1vbnRobHkgY2hhcmdlcyBmcm9tIENsb3VkRnJvbnQuXG4gKiAgICsgIGBgc3RhdGljLWlwYGAgLSBEbyBub3Qgc3BlY2lmeSB0aGlzIHZhbHVlIHVubGVzcyB5b3VyIGRpc3RyaWJ1dGlvbiBoYXMgYmVlbiBlbmFibGVkIGZvciB0aGlzIGZlYXR1cmUgYnkgdGhlIENsb3VkRnJvbnQgdGVhbS4gSWYgeW91IGhhdmUgYSB1c2UgY2FzZSB0aGF0IHJlcXVpcmVzIHN0YXRpYyBJUCBhZGRyZXNzZXMgZm9yIGEgZGlzdHJpYnV0aW9uLCBjb250YWN0IENsb3VkRnJvbnQgdGhyb3VnaCB0aGUgW0NlbnRlcl0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3N1cHBvcnQvaG9tZSkuXG4gKiAgIFxuICogIElmIHRoZSBkaXN0cmlidXRpb24gdXNlcyB0aGUgQ2xvdWRGcm9udCBkb21haW4gbmFtZSBzdWNoIGFzIGBgZDExMTExMWFiY2RlZjguY2xvdWRmcm9udC5uZXRgYCwgZG9uJ3Qgc2V0IGEgdmFsdWUgZm9yIHRoaXMgZmllbGQuXG4gKi9cblNzbFN1cHBvcnRNZXRob2Q/OiBzdHJpbmdcbn1cbi8qKlxuICogQSBjb21wbGV4IHR5cGUgdGhhdCBjb250YWlucyBgYFRhZ2BgIGtleSBhbmQgYGBUYWdgYCB2YWx1ZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUYWcge1xuLyoqXG4gKiBBIHN0cmluZyB0aGF0IGNvbnRhaW5zIGBgVGFnYGAga2V5LlxuICogIFRoZSBzdHJpbmcgbGVuZ3RoIHNob3VsZCBiZSBiZXR3ZWVuIDEgYW5kIDEyOCBjaGFyYWN0ZXJzLiBWYWxpZCBjaGFyYWN0ZXJzIGluY2x1ZGUgYGBhLXpgYCwgYGBBLVpgYCwgYGAwLTlgYCwgc3BhY2UsIGFuZCB0aGUgc3BlY2lhbCBjaGFyYWN0ZXJzIGBgXyAtIC4gOiAvID0gKyBAYGAuXG4gKi9cbktleTogc3RyaW5nXG4vKipcbiAqIEEgc3RyaW5nIHRoYXQgY29udGFpbnMgYW4gb3B0aW9uYWwgYGBUYWdgYCB2YWx1ZS5cbiAqICBUaGUgc3RyaW5nIGxlbmd0aCBzaG91bGQgYmUgYmV0d2VlbiAwIGFuZCAyNTYgY2hhcmFjdGVycy4gVmFsaWQgY2hhcmFjdGVycyBpbmNsdWRlIGBgYS16YGAsIGBgQS1aYGAsIGBgMC05YGAsIHNwYWNlLCBhbmQgdGhlIHNwZWNpYWwgY2hhcmFjdGVycyBgYF8gLSAuIDogLyA9ICsgQGBgLlxuICovXG5WYWx1ZTogc3RyaW5nXG59XG4iXX0=
|