@horietakehiro/aws-cdk-utul 0.40.2 → 0.40.4
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/typed-resource.d.ts +6 -3
- package/lib/typed-resource.js +1 -31
- package/lib/types/cfn-resource-types/aws-aiops-investigationgroup.d.ts +7 -0
- package/lib/types/cfn-resource-types/aws-aiops-investigationgroup.js +1 -1
- package/lib/types/cfn-resource-types/aws-b2bi-partnership.d.ts +29 -0
- package/lib/types/cfn-resource-types/aws-b2bi-partnership.js +1 -1
- package/lib/types/cfn-resource-types/aws-b2bi-transformer.d.ts +11 -0
- package/lib/types/cfn-resource-types/aws-b2bi-transformer.js +1 -1
- package/lib/types/cfn-resource-types/aws-cassandra-table.d.ts +16 -0
- package/lib/types/cfn-resource-types/aws-cassandra-table.js +1 -1
- package/lib/types/cfn-resource-types/aws-connect-rule.d.ts +4 -4
- package/lib/types/cfn-resource-types/aws-connect-rule.js +1 -1
- package/lib/types/cfn-resource-types/aws-dynamodb-globaltable.d.ts +108 -99
- package/lib/types/cfn-resource-types/aws-dynamodb-globaltable.js +1 -1
- package/lib/types/cfn-resource-types/aws-ec2-trafficmirrorfilterrule.d.ts +56 -4
- package/lib/types/cfn-resource-types/aws-ec2-trafficmirrorfilterrule.js +1 -1
- package/lib/types/cfn-resource-types/aws-ecs-service.d.ts +1 -1
- package/lib/types/cfn-resource-types/aws-ecs-service.js +1 -1
- package/lib/types/cfn-resource-types/aws-ecs-taskdefinition.d.ts +2 -2
- package/lib/types/cfn-resource-types/aws-ecs-taskdefinition.js +1 -1
- package/lib/types/cfn-resource-types/aws-emrserverless-application.d.ts +10 -0
- package/lib/types/cfn-resource-types/aws-emrserverless-application.js +1 -1
- package/lib/types/cfn-resource-types/aws-fsx-s3accesspointattachment.d.ts +39 -0
- package/lib/types/cfn-resource-types/aws-fsx-s3accesspointattachment.js +3 -0
- package/lib/types/cfn-resource-types/aws-gamelift-containerfleet.d.ts +4 -0
- package/lib/types/cfn-resource-types/aws-gamelift-containerfleet.js +1 -1
- package/lib/types/cfn-resource-types/aws-gamelift-fleet.d.ts +2 -2
- package/lib/types/cfn-resource-types/aws-gamelift-fleet.js +1 -1
- package/lib/types/cfn-resource-types/aws-kms-key.d.ts +9 -2
- package/lib/types/cfn-resource-types/aws-kms-key.js +1 -1
- package/lib/types/cfn-resource-types/aws-lex-bot.d.ts +31 -9
- package/lib/types/cfn-resource-types/aws-lex-bot.js +1 -1
- package/lib/types/cfn-resource-types/aws-mediatailor-playbackconfiguration.d.ts +4 -0
- package/lib/types/cfn-resource-types/aws-mediatailor-playbackconfiguration.js +1 -1
- package/lib/types/cfn-resource-types/aws-neptune-dbinstance.d.ts +67 -10
- package/lib/types/cfn-resource-types/aws-neptune-dbinstance.js +1 -1
- package/lib/types/cfn-resource-types/aws-networkmanager-vpcattachment.d.ts +62 -54
- package/lib/types/cfn-resource-types/aws-networkmanager-vpcattachment.js +1 -1
- package/lib/types/cfn-resource-types/aws-pcs-cluster.d.ts +32 -32
- package/lib/types/cfn-resource-types/aws-pcs-cluster.js +1 -1
- package/lib/types/cfn-resource-types/aws-qbusiness-dataaccessor.d.ts +18 -0
- package/lib/types/cfn-resource-types/aws-qbusiness-dataaccessor.js +1 -1
- package/lib/types/cfn-resource-types/aws-qbusiness-permission.d.ts +14 -0
- package/lib/types/cfn-resource-types/aws-qbusiness-permission.js +1 -1
- package/lib/types/cfn-resource-types/aws-rds-dbinstance.d.ts +552 -552
- package/lib/types/cfn-resource-types/aws-rds-dbinstance.js +1 -1
- package/lib/types/cfn-resource-types/aws-redshiftserverless-snapshot.d.ts +49 -0
- package/lib/types/cfn-resource-types/aws-redshiftserverless-snapshot.js +3 -0
- package/lib/types/cfn-resource-types/aws-workspacesinstances-volume.d.ts +64 -0
- package/lib/types/cfn-resource-types/aws-workspacesinstances-volume.js +3 -0
- package/lib/types/cfn-resource-types/aws-workspacesinstances-volumeassociation.d.ts +21 -0
- package/lib/types/cfn-resource-types/aws-workspacesinstances-volumeassociation.js +3 -0
- package/lib/types/cfn-resource-types/aws-workspacesinstances-workspaceinstance.d.ts +119 -0
- package/lib/types/cfn-resource-types/aws-workspacesinstances-workspaceinstance.js +3 -0
- package/lib/types/cfn-resource-types.d.ts +10 -0
- package/lib/types/cfn-resource-types.js +29 -19
- 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzLWVjcy10YXNrZGVmaW5pdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImF3cy1lY3MtdGFza2RlZmluaXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUmVnaXN0ZXJzIGEgbmV3IHRhc2sgZGVmaW5pdGlvbiBmcm9tIHRoZSBzdXBwbGllZCBgYGZhbWlseWBgIGFuZCBgYGNvbnRhaW5lckRlZmluaXRpb25zYGAuIE9wdGlvbmFsbHksIHlvdSBjYW4gYWRkIGRhdGEgdm9sdW1lcyB0byB5b3VyIGNvbnRhaW5lcnMgd2l0aCB0aGUgYGB2b2x1bWVzYGAgcGFyYW1ldGVyLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0YXNrIGRlZmluaXRpb24gcGFyYW1ldGVycyBhbmQgZGVmYXVsdHMsIHNlZSBbQW1hem9uIEVDUyBUYXNrIERlZmluaXRpb25zXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS90YXNrX2RlZmludGlvbnMuaHRtbCkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLlxuICogIFlvdSBjYW4gc3BlY2lmeSBhIHJvbGUgZm9yIHlvdXIgdGFzayB3aXRoIHRoZSBgYHRhc2tSb2xlQXJuYGAgcGFyYW1ldGVyLiBXaGVuIHlvdSBzcGVjaWZ5IGEgcm9sZSBmb3IgYSB0YXNrLCBpdHMgY29udGFpbmVycyBjYW4gdGhlbiB1c2UgdGhlIGxhdGVzdCB2ZXJzaW9ucyBvZiB0aGUgQ0xJIG9yIFNES3MgdG8gbWFrZSBBUEkgcmVxdWVzdHMgdG8gdGhlIEFXUyBzZXJ2aWNlcyB0aGF0IGFyZSBzcGVjaWZpZWQgaW4gdGhlIHBvbGljeSB0aGF0J3MgYXNzb2NpYXRlZCB3aXRoIHRoZSByb2xlLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtJQU0gUm9sZXMgZm9yIFRhc2tzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS90YXNrLWlhbS1yb2xlcy5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSouXG4gKiAgWW91IGNhbiBzcGVjaWZ5IGEgRG9ja2VyIG5ldHdvcmtpbmcgbW9kZSBmb3IgdGhlIGNvbnRhaW5lcnMgaW4geW91ciB0YXNrIGRlZmluaXRpb24gd2l0aCB0aGUgYGBuZXR3b3JrTW9kZWBgIHBhcmFtZXRlci4gSWYgeW91IHNwZWNpZnkgdGhlIGBgYXdzdnBjYGAgbmV0d29yayBtb2RlLCB0aGUgdGFzayBpcyBhbGxvY2F0ZWQgYW4gZWxhc3RpYyBuZXR3b3JrIGludGVyZmFjZSwgYW5kIHlvdSBtdXN0IHNwZWNpZnkgYSBbTmV0d29ya0NvbmZpZ3VyYXRpb25dKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfTmV0d29ya0NvbmZpZ3VyYXRpb24uaHRtbCkgd2hlbiB5b3UgY3JlYXRlIGEgc2VydmljZSBvciBydW4gYSB0YXNrIHdpdGggdGhlIHRhc2sgZGVmaW5pdGlvbi4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbVGFzayBOZXR3b3JraW5nXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS90YXNrLW5ldHdvcmtpbmcuaHRtbCkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLlxuICogICBJbiB0aGUgZm9sbG93aW5nIGV4YW1wbGUgb3IgZXhhbXBsZXMsIHRoZSBBdXRob3JpemF0aW9uIGhlYWRlciBjb250ZW50cyAoYGBBVVRIUEFSQU1TYGApIG11c3QgYmUgcmVwbGFjZWQgd2l0aCBhbiBBV1MgU2lnbmF0dXJlIFZlcnNpb24gNCBzaWduYXR1cmUuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1NpZ25hdHVyZSBWZXJzaW9uIDQgU2lnbmluZyBQcm9jZXNzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZ2VuZXJhbC9sYXRlc3QvZ3Ivc2lnbmF0dXJlLXZlcnNpb24tNC5odG1sKSBpbiB0aGUgKkdlbmVyYWwgUmVmZXJlbmNlKi5cbiAqICBZb3Ugb25seSBuZWVkIHRvIGxlYXJuIGhvdyB0byBzaWduIEhUVFAgcmVxdWVzdHMgaWYgeW91IGludGVuZCB0byBjcmVhdGUgdGhlbSBtYW51YWxseS4gV2hlbiB5b3UgdXNlIHRoZSBbXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xpLykgb3Igb25lIG9mIHRoZSBbU0RLc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3Rvb2xzLykgdG8gbWFrZSByZXF1ZXN0cyB0byBBV1MsIHRoZXNlIHRvb2xzIGF1dG9tYXRpY2FsbHkgc2lnbiB0aGUgcmVxdWVzdHMgZm9yIHlvdSwgd2l0aCB0aGUgYWNjZXNzIGtleSB0aGF0IHlvdSBzcGVjaWZ5IHdoZW4geW91IGNvbmZpZ3VyZSB0aGUgdG9vbHMuIFdoZW4geW91IHVzZSB0aGVzZSB0b29scywgeW91IGRvbid0IGhhdmUgdG8gc2lnbiByZXF1ZXN0cyB5b3Vyc2VsZi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBfQVdTX0VDU19UQVNLREVGSU5JVElPTiB7XG4vKipcbiAqIFRoZSBzaG9ydCBuYW1lIG9yIGZ1bGwgQW1hem9uIFJlc291cmNlIE5hbWUgKEFSTikgb2YgdGhlIElBTWxvbmcgcm9sZSB0aGF0IGdyYW50cyBjb250YWluZXJzIGluIHRoZSB0YXNrIHBlcm1pc3Npb24gdG8gY2FsbCBBV1MgQVBJcyBvbiB5b3VyIGJlaGFsZi4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbQW1hem9uIEVDUyBUYXNrIFJvbGVdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3Rhc2staWFtLXJvbGVzLmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqICBJQU0gcm9sZXMgZm9yIHRhc2tzIG9uIFdpbmRvd3MgcmVxdWlyZSB0aGF0IHRoZSBgYC1FbmFibGVUYXNrSUFNUm9sZWBgIG9wdGlvbiBpcyBzZXQgd2hlbiB5b3UgbGF1bmNoIHRoZSBBbWF6b24gRUNTLW9wdGltaXplZCBXaW5kb3dzIEFNSS4gWW91ciBjb250YWluZXJzIG11c3QgYWxzbyBydW4gc29tZSBjb25maWd1cmF0aW9uIGNvZGUgdG8gdXNlIHRoZSBmZWF0dXJlLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtXaW5kb3dzIElBTSByb2xlcyBmb3IgdGFza3NdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3dpbmRvd3NfdGFza19JQU1fcm9sZXMuaHRtbCkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLlxuICogICBTdHJpbmcgdmFsaWRhdGlvbiBpcyBkb25lIG9uIHRoZSBFQ1Mgc2lkZS4gSWYgYW4gaW52YWxpZCBzdHJpbmcgdmFsdWUgaXMgZ2l2ZW4gZm9yIGBgVGFza1JvbGVBcm5gYCwgaXQgbWF5IGNhdXNlIHRoZSBDbG91ZGZvcm1hdGlvbiBqb2IgdG8gaGFuZy5cbiAqL1xuVGFza1JvbGVBcm4/OiBzdHJpbmdcbi8qKlxuICogVGhlIElQQyByZXNvdXJjZSBuYW1lc3BhY2UgdG8gdXNlIGZvciB0aGUgY29udGFpbmVycyBpbiB0aGUgdGFzay4gVGhlIHZhbGlkIHZhbHVlcyBhcmUgYGBob3N0YGAsIGBgdGFza2BgLCBvciBgYG5vbmVgYC4gSWYgYGBob3N0YGAgaXMgc3BlY2lmaWVkLCB0aGVuIGFsbCBjb250YWluZXJzIHdpdGhpbiB0aGUgdGFza3MgdGhhdCBzcGVjaWZpZWQgdGhlIGBgaG9zdGBgIElQQyBtb2RlIG9uIHRoZSBzYW1lIGNvbnRhaW5lciBpbnN0YW5jZSBzaGFyZSB0aGUgc2FtZSBJUEMgcmVzb3VyY2VzIHdpdGggdGhlIGhvc3QgQW1hem9uIEVDMiBpbnN0YW5jZS4gSWYgYGB0YXNrYGAgaXMgc3BlY2lmaWVkLCBhbGwgY29udGFpbmVycyB3aXRoaW4gdGhlIHNwZWNpZmllZCB0YXNrIHNoYXJlIHRoZSBzYW1lIElQQyByZXNvdXJjZXMuIElmIGBgbm9uZWBgIGlzIHNwZWNpZmllZCwgdGhlbiBJUEMgcmVzb3VyY2VzIHdpdGhpbiB0aGUgY29udGFpbmVycyBvZiBhIHRhc2sgYXJlIHByaXZhdGUgYW5kIG5vdCBzaGFyZWQgd2l0aCBvdGhlciBjb250YWluZXJzIGluIGEgdGFzayBvciBvbiB0aGUgY29udGFpbmVyIGluc3RhbmNlLiBJZiBubyB2YWx1ZSBpcyBzcGVjaWZpZWQsIHRoZW4gdGhlIElQQyByZXNvdXJjZSBuYW1lc3BhY2Ugc2hhcmluZyBkZXBlbmRzIG9uIHRoZSBEb2NrZXIgZGFlbW9uIHNldHRpbmcgb24gdGhlIGNvbnRhaW5lciBpbnN0YW5jZS5cbiAqICBJZiB0aGUgYGBob3N0YGAgSVBDIG1vZGUgaXMgdXNlZCwgYmUgYXdhcmUgdGhhdCB0aGVyZSBpcyBhIGhlaWdodGVuZWQgcmlzayBvZiB1bmRlc2lyZWQgSVBDIG5hbWVzcGFjZSBleHBvc2UuXG4gKiAgSWYgeW91IGFyZSBzZXR0aW5nIG5hbWVzcGFjZWQga2VybmVsIHBhcmFtZXRlcnMgdXNpbmcgYGBzeXN0ZW1Db250cm9sc2BgIGZvciB0aGUgY29udGFpbmVycyBpbiB0aGUgdGFzaywgdGhlIGZvbGxvd2luZyB3aWxsIGFwcGx5IHRvIHlvdXIgSVBDIHJlc291cmNlIG5hbWVzcGFjZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbU3lzdGVtIENvbnRyb2xzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS90YXNrX2RlZmluaXRpb25fcGFyYW1ldGVycy5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSouXG4gKiAgICsgIEZvciB0YXNrcyB0aGF0IHVzZSB0aGUgYGBob3N0YGAgSVBDIG1vZGUsIElQQyBuYW1lc3BhY2UgcmVsYXRlZCBgYHN5c3RlbUNvbnRyb2xzYGAgYXJlIG5vdCBzdXBwb3J0ZWQuXG4gKiAgICsgIEZvciB0YXNrcyB0aGF0IHVzZSB0aGUgYGB0YXNrYGAgSVBDIG1vZGUsIElQQyBuYW1lc3BhY2UgcmVsYXRlZCBgYHN5c3RlbUNvbnRyb2xzYGAgd2lsbCBhcHBseSB0byBhbGwgY29udGFpbmVycyB3aXRoaW4gYSB0YXNrLlxuICogICBcbiAqICAgVGhpcyBwYXJhbWV0ZXIgaXMgbm90IHN1cHBvcnRlZCBmb3IgV2luZG93cyBjb250YWluZXJzIG9yIHRhc2tzIHJ1biBvbiBGQVJHQVRFbG9uZy5cbiAqL1xuSXBjTW9kZT86IHN0cmluZ1xuLyoqXG4gKiBUaGUgRWxhc3RpYyBJbmZlcmVuY2UgYWNjZWxlcmF0b3JzIHRvIHVzZSBmb3IgdGhlIGNvbnRhaW5lcnMgaW4gdGhlIHRhc2suXG4gKi9cbkluZmVyZW5jZUFjY2VsZXJhdG9ycz86IEluZmVyZW5jZUFjY2VsZXJhdG9yW11cbi8qKlxuICogVGhlIGFtb3VudCAoaW4gTWlCKSBvZiBtZW1vcnkgdXNlZCBieSB0aGUgdGFzay5cbiAqICBJZiB5b3VyIHRhc2tzIHJ1bnMgb24gQW1hem9uIEVDMiBpbnN0YW5jZXMsIHlvdSBtdXN0IHNwZWNpZnkgZWl0aGVyIGEgdGFzay1sZXZlbCBtZW1vcnkgdmFsdWUgb3IgYSBjb250YWluZXItbGV2ZWwgbWVtb3J5IHZhbHVlLiBUaGlzIGZpZWxkIGlzIG9wdGlvbmFsIGFuZCBhbnkgdmFsdWUgY2FuIGJlIHVzZWQuIElmIGEgdGFzay1sZXZlbCBtZW1vcnkgdmFsdWUgaXMgc3BlY2lmaWVkLCB0aGUgY29udGFpbmVyLWxldmVsIG1lbW9yeSB2YWx1ZSBpcyBvcHRpb25hbC4gRm9yIG1vcmUgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvbnRhaW5lci1sZXZlbCBtZW1vcnkgYW5kIG1lbW9yeSByZXNlcnZhdGlvbiwgc2VlIFtDb250YWluZXJEZWZpbml0aW9uXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NvbnRhaW5lckRlZmluaXRpb24uaHRtbCkuXG4gKiAgSWYgeW91ciB0YXNrcyBydW5zIG9uIEZBUkdBVEVsb25nLCB0aGlzIGZpZWxkIGlzIHJlcXVpcmVkLiBZb3UgbXVzdCB1c2Ugb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzLiBUaGUgdmFsdWUgeW91IGNob29zZSBkZXRlcm1pbmVzIHlvdXIgcmFuZ2Ugb2YgdmFsaWQgdmFsdWVzIGZvciB0aGUgYGBjcHVgYCBwYXJhbWV0ZXIuXG4gKiAgICsgIDUxMiAoMC41IEdCKSwgMTAyNCAoMSBHQiksIDIwNDggKDIgR0IpIC0gQXZhaWxhYmxlIGBgY3B1YGAgdmFsdWVzOiAyNTYgKC4yNSB2Q1BVKVxuICogICArICAxMDI0ICgxIEdCKSwgMjA0OCAoMiBHQiksIDMwNzIgKDMgR0IpLCA0MDk2ICg0IEdCKSAtIEF2YWlsYWJsZSBgYGNwdWBgIHZhbHVlczogNTEyICguNSB2Q1BVKVxuICogICArICAyMDQ4ICgyIEdCKSwgMzA3MiAoMyBHQiksIDQwOTYgKDQgR0IpLCA1MTIwICg1IEdCKSwgNjE0NCAoNiBHQiksIDcxNjggKDcgR0IpLCA4MTkyICg4IEdCKSAtIEF2YWlsYWJsZSBgYGNwdWBgIHZhbHVlczogMTAyNCAoMSB2Q1BVKVxuICogICArICBCZXR3ZWVuIDQwOTYgKDQgR0IpIGFuZCAxNjM4NCAoMTYgR0IpIGluIGluY3JlbWVudHMgb2YgMTAyNCAoMSBHQikgLSBBdmFpbGFibGUgYGBjcHVgYCB2YWx1ZXM6IDIwNDggKDIgdkNQVSlcbiAqICAgKyAgQmV0d2VlbiA4MTkyICg4IEdCKSBhbmQgMzA3MjAgKDMwIEdCKSBpbiBpbmNyZW1lbnRzIG9mIDEwMjQgKDEgR0IpIC0gQXZhaWxhYmxlIGBgY3B1YGAgdmFsdWVzOiA0MDk2ICg0IHZDUFUpXG4gKiAgICsgIEJldHdlZW4gMTYgR0IgYW5kIDYwIEdCIGluIDQgR0IgaW5jcmVtZW50cyAtIEF2YWlsYWJsZSBgYGNwdWBgIHZhbHVlczogODE5MiAoOCB2Q1BVKVxuICogIFRoaXMgb3B0aW9uIHJlcXVpcmVzIExpbnV4IHBsYXRmb3JtIGBgMS40LjBgYCBvciBsYXRlci5cbiAqICAgKyAgQmV0d2VlbiAzMkdCIGFuZCAxMjAgR0IgaW4gOCBHQiBpbmNyZW1lbnRzIC0gQXZhaWxhYmxlIGBgY3B1YGAgdmFsdWVzOiAxNjM4NCAoMTYgdkNQVSlcbiAqICBUaGlzIG9wdGlvbiByZXF1aXJlcyBMaW51eCBwbGF0Zm9ybSBgYDEuNC4wYGAgb3IgbGF0ZXIuXG4gKi9cbk1lbW9yeT86IHN0cmluZ1xuLyoqXG4gKiBBbiBhcnJheSBvZiBwbGFjZW1lbnQgY29uc3RyYWludCBvYmplY3RzIHRvIHVzZSBmb3IgdGFza3MuXG4gKiAgIFRoaXMgcGFyYW1ldGVyIGlzbid0IHN1cHBvcnRlZCBmb3IgdGFza3MgcnVuIG9uIEZBUkdBVEVsb25nLlxuICovXG5QbGFjZW1lbnRDb25zdHJhaW50cz86IFRhc2tEZWZpbml0aW9uUGxhY2VtZW50Q29uc3RyYWludFtdXG4vKipcbiAqIFRoZSBudW1iZXIgb2YgYGBjcHVgYCB1bml0cyB1c2VkIGJ5IHRoZSB0YXNrLiBJZiB5b3UgdXNlIHRoZSBFQzIgbGF1bmNoIHR5cGUsIHRoaXMgZmllbGQgaXMgb3B0aW9uYWwuIEFueSB2YWx1ZSBjYW4gYmUgdXNlZC4gSWYgeW91IHVzZSB0aGUgRmFyZ2F0ZSBsYXVuY2ggdHlwZSwgdGhpcyBmaWVsZCBpcyByZXF1aXJlZC4gWW91IG11c3QgdXNlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlcy4gVGhlIHZhbHVlIHRoYXQgeW91IGNob29zZSBkZXRlcm1pbmVzIHlvdXIgcmFuZ2Ugb2YgdmFsaWQgdmFsdWVzIGZvciB0aGUgYGBtZW1vcnlgYCBwYXJhbWV0ZXIuXG4gKiAgSWYgeW91J3JlIHVzaW5nIHRoZSBFQzIgbGF1bmNoIHR5cGUgb3IgdGhlIGV4dGVybmFsIGxhdW5jaCB0eXBlLCB0aGlzIGZpZWxkIGlzIG9wdGlvbmFsLiBTdXBwb3J0ZWQgdmFsdWVzIGFyZSBiZXR3ZWVuIGBgMTI4YGAgQ1BVIHVuaXRzIChgYDAuMTI1YGAgdkNQVXMpIGFuZCBgYDE5NjYwOGBgIENQVSB1bml0cyAoYGAxOTJgYCB2Q1BVcykuIFxuICogIFRoaXMgZmllbGQgaXMgcmVxdWlyZWQgZm9yIEZhcmdhdGUuIEZvciBpbmZvcm1hdGlvbiBhYm91dCB0aGUgdmFsaWQgdmFsdWVzLCBzZWUgW1Rhc2sgc2l6ZV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvdGFza19kZWZpbml0aW9uX3BhcmFtZXRlcnMuaHRtbCN0YXNrX3NpemUpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuQ3B1Pzogc3RyaW5nXG4vKipcbiAqIFRoZSB0YXNrIGxhdW5jaCB0eXBlcyB0aGUgdGFzayBkZWZpbml0aW9uIHdhcyB2YWxpZGF0ZWQgYWdhaW5zdC4gVGhlIHZhbGlkIHZhbHVlcyBhcmUgYGBFQzJgYCwgYGBGQVJHQVRFYGAsIGFuZCBgYEVYVEVSTkFMYGAuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0FtYXpvbiBFQ1MgbGF1bmNoIHR5cGVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9sYXVuY2hfdHlwZXMuaHRtbCkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5SZXF1aXJlc0NvbXBhdGliaWxpdGllcz86IHN0cmluZ1tdXG4vKipcbiAqIFRoZSBEb2NrZXIgbmV0d29ya2luZyBtb2RlIHRvIHVzZSBmb3IgdGhlIGNvbnRhaW5lcnMgaW4gdGhlIHRhc2suIFRoZSB2YWxpZCB2YWx1ZXMgYXJlIGBgbm9uZWBgLCBgYGJyaWRnZWBgLCBgYGF3c3ZwY2BgLCBhbmQgYGBob3N0YGAuIElmIG5vIG5ldHdvcmsgbW9kZSBpcyBzcGVjaWZpZWQsIHRoZSBkZWZhdWx0IGlzIGBgYnJpZGdlYGAuXG4gKiAgRm9yIEFtYXpvbiBFQ1MgdGFza3Mgb24gRmFyZ2F0ZSwgdGhlIGBgYXdzdnBjYGAgbmV0d29yayBtb2RlIGlzIHJlcXVpcmVkLiBGb3IgQW1hem9uIEVDUyB0YXNrcyBvbiBBbWF6b24gRUMyIExpbnV4IGluc3RhbmNlcywgYW55IG5ldHdvcmsgbW9kZSBjYW4gYmUgdXNlZC4gRm9yIEFtYXpvbiBFQ1MgdGFza3Mgb24gQW1hem9uIEVDMiBXaW5kb3dzIGluc3RhbmNlcywgYGA8ZGVmYXVsdD5gYCBvciBgYGF3c3ZwY2BgIGNhbiBiZSB1c2VkLiBJZiB0aGUgbmV0d29yayBtb2RlIGlzIHNldCB0byBgYG5vbmVgYCwgeW91IGNhbm5vdCBzcGVjaWZ5IHBvcnQgbWFwcGluZ3MgaW4geW91ciBjb250YWluZXIgZGVmaW5pdGlvbnMsIGFuZCB0aGUgdGFza3MgY29udGFpbmVycyBkbyBub3QgaGF2ZSBleHRlcm5hbCBjb25uZWN0aXZpdHkuIFRoZSBgYGhvc3RgYCBhbmQgYGBhd3N2cGNgYCBuZXR3b3JrIG1vZGVzIG9mZmVyIHRoZSBoaWdoZXN0IG5ldHdvcmtpbmcgcGVyZm9ybWFuY2UgZm9yIGNvbnRhaW5lcnMgYmVjYXVzZSB0aGV5IHVzZSB0aGUgRUMyIG5ldHdvcmsgc3RhY2sgaW5zdGVhZCBvZiB0aGUgdmlydHVhbGl6ZWQgbmV0d29yayBzdGFjayBwcm92aWRlZCBieSB0aGUgYGBicmlkZ2VgYCBtb2RlLlxuICogIFdpdGggdGhlIGBgaG9zdGBgIGFuZCBgYGF3c3ZwY2BgIG5ldHdvcmsgbW9kZXMsIGV4cG9zZWQgY29udGFpbmVyIHBvcnRzIGFyZSBtYXBwZWQgZGlyZWN0bHkgdG8gdGhlIGNvcnJlc3BvbmRpbmcgaG9zdCBwb3J0IChmb3IgdGhlIGBgaG9zdGBgIG5ldHdvcmsgbW9kZSkgb3IgdGhlIGF0dGFjaGVkIGVsYXN0aWMgbmV0d29yayBpbnRlcmZhY2UgcG9ydCAoZm9yIHRoZSBgYGF3c3ZwY2BgIG5ldHdvcmsgbW9kZSksIHNvIHlvdSBjYW5ub3QgdGFrZSBhZHZhbnRhZ2Ugb2YgZHluYW1pYyBob3N0IHBvcnQgbWFwcGluZ3MuIFxuICogICBXaGVuIHVzaW5nIHRoZSBgYGhvc3RgYCBuZXR3b3JrIG1vZGUsIHlvdSBzaG91bGQgbm90IHJ1biBjb250YWluZXJzIHVzaW5nIHRoZSByb290IHVzZXIgKFVJRCAwKS4gSXQgaXMgY29uc2lkZXJlZCBiZXN0IHByYWN0aWNlIHRvIHVzZSBhIG5vbi1yb290IHVzZXIuXG4gKiAgIElmIHRoZSBuZXR3b3JrIG1vZGUgaXMgYGBhd3N2cGNgYCwgdGhlIHRhc2sgaXMgYWxsb2NhdGVkIGFuIGVsYXN0aWMgbmV0d29yayBpbnRlcmZhY2UsIGFuZCB5b3UgbXVzdCBzcGVjaWZ5IGEgW05ldHdvcmtDb25maWd1cmF0aW9uXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX05ldHdvcmtDb25maWd1cmF0aW9uLmh0bWwpIHZhbHVlIHdoZW4geW91IGNyZWF0ZSBhIHNlcnZpY2Ugb3IgcnVuIGEgdGFzayB3aXRoIHRoZSB0YXNrIGRlZmluaXRpb24uIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1Rhc2sgTmV0d29ya2luZ10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvdGFzay1uZXR3b3JraW5nLmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqICBJZiB0aGUgbmV0d29yayBtb2RlIGlzIGBgaG9zdGBgLCB5b3UgY2Fubm90IHJ1biBtdWx0aXBsZSBpbnN0YW50aWF0aW9ucyBvZiB0aGUgc2FtZSB0YXNrIG9uIGEgc2luZ2xlIGNvbnRhaW5lciBpbnN0YW5jZSB3aGVuIHBvcnQgbWFwcGluZ3MgYXJlIHVzZWQuXG4gKi9cbk5ldHdvcmtNb2RlPzogc3RyaW5nXG4vKipcbiAqIFRoZSBwcm9jZXNzIG5hbWVzcGFjZSB0byB1c2UgZm9yIHRoZSBjb250YWluZXJzIGluIHRoZSB0YXNrLiBUaGUgdmFsaWQgdmFsdWVzIGFyZSBgYGhvc3RgYCBvciBgYHRhc2tgYC4gT24gRmFyZ2F0ZSBmb3IgTGludXggY29udGFpbmVycywgdGhlIG9ubHkgdmFsaWQgdmFsdWUgaXMgYGB0YXNrYGAuIEZvciBleGFtcGxlLCBtb25pdG9yaW5nIHNpZGVjYXJzIG1pZ2h0IG5lZWQgYGBwaWRNb2RlYGAgdG8gYWNjZXNzIGluZm9ybWF0aW9uIGFib3V0IG90aGVyIGNvbnRhaW5lcnMgcnVubmluZyBpbiB0aGUgc2FtZSB0YXNrLlxuICogIElmIGBgaG9zdGBgIGlzIHNwZWNpZmllZCwgYWxsIGNvbnRhaW5lcnMgd2l0aGluIHRoZSB0YXNrcyB0aGF0IHNwZWNpZmllZCB0aGUgYGBob3N0YGAgUElEIG1vZGUgb24gdGhlIHNhbWUgY29udGFpbmVyIGluc3RhbmNlIHNoYXJlIHRoZSBzYW1lIHByb2Nlc3MgbmFtZXNwYWNlIHdpdGggdGhlIGhvc3QgQW1hem9uIEVDMiBpbnN0YW5jZS5cbiAqICBJZiBgYHRhc2tgYCBpcyBzcGVjaWZpZWQsIGFsbCBjb250YWluZXJzIHdpdGhpbiB0aGUgc3BlY2lmaWVkIHRhc2sgc2hhcmUgdGhlIHNhbWUgcHJvY2VzcyBuYW1lc3BhY2UuXG4gKiAgSWYgbm8gdmFsdWUgaXMgc3BlY2lmaWVkLCB0aGUgZGVmYXVsdCBpcyBhIHByaXZhdGUgbmFtZXNwYWNlIGZvciBlYWNoIGNvbnRhaW5lci5cbiAqICBJZiB0aGUgYGBob3N0YGAgUElEIG1vZGUgaXMgdXNlZCwgdGhlcmUncyBhIGhlaWdodGVuZWQgcmlzayBvZiB1bmRlc2lyZWQgcHJvY2VzcyBuYW1lc3BhY2UgZXhwb3N1cmUuXG4gKiAgIFRoaXMgcGFyYW1ldGVyIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIFdpbmRvd3MgY29udGFpbmVycy5cbiAqICAgIFRoaXMgcGFyYW1ldGVyIGlzIG9ubHkgc3VwcG9ydGVkIGZvciB0YXNrcyB0aGF0IGFyZSBob3N0ZWQgb24gRkFSR0FURWxvbmcgaWYgdGhlIHRhc2tzIGFyZSB1c2luZyBwbGF0Zm9ybSB2ZXJzaW9uIGBgMS40LjBgYCBvciBsYXRlciAoTGludXgpLiBUaGlzIGlzbid0IHN1cHBvcnRlZCBmb3IgV2luZG93cyBjb250YWluZXJzIG9uIEZhcmdhdGUuXG4gKi9cblBpZE1vZGU/OiBzdHJpbmdcbi8qKlxuICogRW5hYmxlcyBmYXVsdCBpbmplY3Rpb24gYW5kIGFsbG93cyBmb3IgZmF1bHQgaW5qZWN0aW9uIHJlcXVlc3RzIHRvIGJlIGFjY2VwdGVkIGZyb20gdGhlIHRhc2sncyBjb250YWluZXJzLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBgYGZhbHNlYGAuXG4gKi9cbkVuYWJsZUZhdWx0SW5qZWN0aW9uPzogYm9vbGVhblxuLyoqXG4gKiBUaGUgQW1hem9uIFJlc291cmNlIE5hbWUgKEFSTikgb2YgdGhlIHRhc2sgZXhlY3V0aW9uIHJvbGUgdGhhdCBncmFudHMgdGhlIEFtYXpvbiBFQ1MgY29udGFpbmVyIGFnZW50IHBlcm1pc3Npb24gdG8gbWFrZSBBV1MgQVBJIGNhbGxzIG9uIHlvdXIgYmVoYWxmLiBGb3IgaW5mb3JtYXRpb25hYm91dCB0aGUgcmVxdWlyZWQgSUFNIHJvbGVzIGZvciBBbWF6b24gRUNTLCBzZWUgW0lBTSByb2xlcyBmb3IgQW1hem9uIEVDU10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvc2VjdXJpdHktZWNzLWlhbS1yb2xlLW92ZXJ2aWV3Lmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuRXhlY3V0aW9uUm9sZUFybj86IHN0cmluZ1xuUnVudGltZVBsYXRmb3JtPzogUnVudGltZVBsYXRmb3JtXG5Qcm94eUNvbmZpZ3VyYXRpb24/OiBQcm94eUNvbmZpZ3VyYXRpb25cbi8qKlxuICogVGhlIGxpc3Qgb2YgZGF0YSB2b2x1bWUgZGVmaW5pdGlvbnMgZm9yIHRoZSB0YXNrLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtVc2luZyBkYXRhIHZvbHVtZXMgaW4gdGFza3NdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3VzaW5nX2RhdGFfdm9sdW1lcy5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSouXG4gKiAgIFRoZSBgYGhvc3RgYCBhbmQgYGBzb3VyY2VQYXRoYGAgcGFyYW1ldGVycyBhcmVuJ3Qgc3VwcG9ydGVkIGZvciB0YXNrcyBydW4gb24gRkFSR0FURWxvbmcuXG4gKi9cblZvbHVtZXM/OiBWb2x1bWVbXVxuLyoqXG4gKiBBIGxpc3Qgb2YgY29udGFpbmVyIGRlZmluaXRpb25zIGluIEpTT04gZm9ybWF0IHRoYXQgZGVzY3JpYmUgdGhlIGRpZmZlcmVudCBjb250YWluZXJzIHRoYXQgbWFrZSB1cCB5b3VyIHRhc2suIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGNvbnRhaW5lciBkZWZpbml0aW9uIHBhcmFtZXRlcnMgYW5kIGRlZmF1bHRzLCBzZWUgW0FtYXpvbiBFQ1MgVGFzayBEZWZpbml0aW9uc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvdGFza19kZWZpbnRpb25zLmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuQ29udGFpbmVyRGVmaW5pdGlvbnM/OiBDb250YWluZXJEZWZpbml0aW9uW11cbi8qKlxuICogVGhlIG5hbWUgb2YgYSBmYW1pbHkgdGhhdCB0aGlzIHRhc2sgZGVmaW5pdGlvbiBpcyByZWdpc3RlcmVkIHRvLiBVcCB0byAyNTUgbGV0dGVycyAodXBwZXJjYXNlIGFuZCBsb3dlcmNhc2UpLCBudW1iZXJzLCBoeXBoZW5zLCBhbmQgdW5kZXJzY29yZXMgYXJlIGFsbG93ZWQuXG4gKiAgQSBmYW1pbHkgZ3JvdXBzIG11bHRpcGxlIHZlcnNpb25zIG9mIGEgdGFzayBkZWZpbml0aW9uLiBBbWF6b24gRUNTIGdpdmVzIHRoZSBmaXJzdCB0YXNrIGRlZmluaXRpb24gdGhhdCB5b3UgcmVnaXN0ZXJlZCB0byBhIGZhbWlseSBhIHJldmlzaW9uIG51bWJlciBvZiAxLiBBbWF6b24gRUNTIGdpdmVzIHNlcXVlbnRpYWwgcmV2aXNpb24gbnVtYmVycyB0byBlYWNoIHRhc2sgZGVmaW5pdGlvbiB0aGF0IHlvdSBhZGQuXG4gKiAgIFRvIHVzZSByZXZpc2lvbiBudW1iZXJzIHdoZW4geW91IHVwZGF0ZSBhIHRhc2sgZGVmaW5pdGlvbiwgc3BlY2lmeSB0aGlzIHByb3BlcnR5LiBJZiB5b3UgZG9uJ3Qgc3BlY2lmeSBhIHZhbHVlLCBDRk5sb25nIGdlbmVyYXRlcyBhIG5ldyB0YXNrIGRlZmluaXRpb24gZWFjaCB0aW1lIHRoYXQgeW91IHVwZGF0ZSBpdC5cbiAqL1xuRmFtaWx5Pzogc3RyaW5nXG5FcGhlbWVyYWxTdG9yYWdlPzogRXBoZW1lcmFsU3RvcmFnZVxuLyoqXG4gKiBUaGUgbWV0YWRhdGEgdGhhdCB5b3UgYXBwbHkgdG8gdGhlIHRhc2sgZGVmaW5pdGlvbiB0byBoZWxwIHlvdSBjYXRlZ29yaXplIGFuZCBvcmdhbml6ZSB0aGVtLiBFYWNoIHRhZyBjb25zaXN0cyBvZiBhIGtleSBhbmQgYW4gb3B0aW9uYWwgdmFsdWUuIFlvdSBkZWZpbmUgYm90aCBvZiB0aGVtLlxuICogIFRoZSBmb2xsb3dpbmcgYmFzaWMgcmVzdHJpY3Rpb25zIGFwcGx5IHRvIHRhZ3M6XG4gKiAgICsgIE1heGltdW0gbnVtYmVyIG9mIHRhZ3MgcGVyIHJlc291cmNlIC0gNTBcbiAqICAgKyAgRm9yIGVhY2ggcmVzb3VyY2UsIGVhY2ggdGFnIGtleSBtdXN0IGJlIHVuaXF1ZSwgYW5kIGVhY2ggdGFnIGtleSBjYW4gaGF2ZSBvbmx5IG9uZSB2YWx1ZS5cbiAqICAgKyAgTWF4aW11bSBrZXkgbGVuZ3RoIC0gMTI4IFVuaWNvZGUgY2hhcmFjdGVycyBpbiBVVEYtOFxuICogICArICBNYXhpbXVtIHZhbHVlIGxlbmd0aCAtIDI1NiBVbmljb2RlIGNoYXJhY3RlcnMgaW4gVVRGLThcbiAqICAgKyAgSWYgeW91ciB0YWdnaW5nIHNjaGVtYSBpcyB1c2VkIGFjcm9zcyBtdWx0aXBsZSBzZXJ2aWNlcyBhbmQgcmVzb3VyY2VzLCByZW1lbWJlciB0aGF0IG90aGVyIHNlcnZpY2VzIG1heSBoYXZlIHJlc3RyaWN0aW9ucyBvbiBhbGxvd2VkIGNoYXJhY3RlcnMuIEdlbmVyYWxseSBhbGxvd2VkIGNoYXJhY3RlcnMgYXJlOiBsZXR0ZXJzLCBudW1iZXJzLCBhbmQgc3BhY2VzIHJlcHJlc2VudGFibGUgaW4gVVRGLTgsIGFuZCB0aGUgZm9sbG93aW5nIGNoYXJhY3RlcnM6ICsgLSA9IC4gXyA6IC8gQC5cbiAqICAgKyAgVGFnIGtleXMgYW5kIHZhbHVlcyBhcmUgY2FzZS1zZW5zaXRpdmUuXG4gKiAgICsgIERvIG5vdCB1c2UgYGBhd3M6YGAsIGBgQVdTOmBgLCBvciBhbnkgdXBwZXIgb3IgbG93ZXJjYXNlIGNvbWJpbmF0aW9uIG9mIHN1Y2ggYXMgYSBwcmVmaXggZm9yIGVpdGhlciBrZXlzIG9yIHZhbHVlcyBhcyBpdCBpcyByZXNlcnZlZCBmb3IgQVdTIHVzZS4gWW91IGNhbm5vdCBlZGl0IG9yIGRlbGV0ZSB0YWcga2V5cyBvciB2YWx1ZXMgd2l0aCB0aGlzIHByZWZpeC4gVGFncyB3aXRoIHRoaXMgcHJlZml4IGRvIG5vdCBjb3VudCBhZ2FpbnN0IHlvdXIgdGFncyBwZXIgcmVzb3VyY2UgbGltaXQuXG4gKi9cblRhZ3M/OiBUYWdbXVxuVGFza0RlZmluaXRpb25Bcm4/OiBzdHJpbmdcbn1cbi8qKlxuICogRGV0YWlscyBvbiBhbiBFbGFzdGljIEluZmVyZW5jZSBhY2NlbGVyYXRvci4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbV29ya2luZyB3aXRoIEFtYXpvbiBFbGFzdGljIEluZmVyZW5jZSBvbiBBbWF6b24gRUNTXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9lY3MtaW5mZXJlbmNlLmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbmZlcmVuY2VBY2NlbGVyYXRvciB7XG4vKipcbiAqIFRoZSBFbGFzdGljIEluZmVyZW5jZSBhY2NlbGVyYXRvciB0eXBlIHRvIHVzZS5cbiAqL1xuRGV2aWNlVHlwZT86IHN0cmluZ1xuLyoqXG4gKiBUaGUgRWxhc3RpYyBJbmZlcmVuY2UgYWNjZWxlcmF0b3IgZGV2aWNlIG5hbWUuIFRoZSBgYGRldmljZU5hbWVgYCBtdXN0IGFsc28gYmUgcmVmZXJlbmNlZCBpbiBhIGNvbnRhaW5lciBkZWZpbml0aW9uIGFzIGEgW1Jlc291cmNlUmVxdWlyZW1lbnRdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfUmVzb3VyY2VSZXF1aXJlbWVudC5odG1sKS5cbiAqL1xuRGV2aWNlTmFtZT86IHN0cmluZ1xufVxuLyoqXG4gKiBUaGUgY29uc3RyYWludCBvbiB0YXNrIHBsYWNlbWVudCBpbiB0aGUgdGFzayBkZWZpbml0aW9uLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtUYXNrIHBsYWNlbWVudCBjb25zdHJhaW50c10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvdGFzay1wbGFjZW1lbnQtY29uc3RyYWludHMuaHRtbCkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLlxuICogICBUYXNrIHBsYWNlbWVudCBjb25zdHJhaW50cyBhcmVuJ3Qgc3VwcG9ydGVkIGZvciB0YXNrcyBydW4gb24gRkFSR0FURWxvbmcuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGFza0RlZmluaXRpb25QbGFjZW1lbnRDb25zdHJhaW50IHtcbi8qKlxuICogVGhlIHR5cGUgb2YgY29uc3RyYWludC4gVGhlIGBgTWVtYmVyT2ZgYCBjb25zdHJhaW50IHJlc3RyaWN0cyBzZWxlY3Rpb24gdG8gYmUgZnJvbSBhIGdyb3VwIG9mIHZhbGlkIGNhbmRpZGF0ZXMuXG4gKi9cblR5cGU6IHN0cmluZ1xuLyoqXG4gKiBBIGNsdXN0ZXIgcXVlcnkgbGFuZ3VhZ2UgZXhwcmVzc2lvbiB0byBhcHBseSB0byB0aGUgY29uc3RyYWludC4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbQ2x1c3RlciBxdWVyeSBsYW5ndWFnZV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvY2x1c3Rlci1xdWVyeS1sYW5ndWFnZS5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSouXG4gKi9cbkV4cHJlc3Npb24/OiBzdHJpbmdcbn1cbi8qKlxuICogVGhlIG9wZXJhdGluZyBzeXN0ZW0gdGhhdCB5b3VyIHRhc2tzIGRlZmluaXRpb25zIHJ1biBvbi4gQSBwbGF0Zm9ybSBmYW1pbHkgaXMgc3BlY2lmaWVkIG9ubHkgZm9yIHRhc2tzIHVzaW5nIHRoZSBGYXJnYXRlIGxhdW5jaCB0eXBlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJ1bnRpbWVQbGF0Zm9ybSB7XG4vKipcbiAqIFRoZSBvcGVyYXRpbmcgc3lzdGVtLlxuICovXG5PcGVyYXRpbmdTeXN0ZW1GYW1pbHk/OiBzdHJpbmdcbi8qKlxuICogVGhlIENQVSBhcmNoaXRlY3R1cmUuXG4gKiAgWW91IGNhbiBydW4geW91ciBMaW51eCB0YXNrcyBvbiBhbiBBUk0tYmFzZWQgcGxhdGZvcm0gYnkgc2V0dGluZyB0aGUgdmFsdWUgdG8gYGBBUk02NGBgLiBUaGlzIG9wdGlvbiBpcyBhdmFpbGFibGUgZm9yIHRhc2tzIHRoYXQgcnVuIG9uIExpbnV4IEFtYXpvbiBFQzIgaW5zdGFuY2Ugb3IgTGludXggY29udGFpbmVycyBvbiBGYXJnYXRlLlxuICovXG5DcHVBcmNoaXRlY3R1cmU/OiBzdHJpbmdcbn1cbi8qKlxuICogVGhlIGNvbmZpZ3VyYXRpb24gZGV0YWlscyBmb3IgdGhlIEFwcCBNZXNoIHByb3h5LlxuICogIFlvdXIgQW1hem9uIEVDUyBjb250YWluZXIgaW5zdGFuY2VzIHJlcXVpcmUgYXQgbGVhc3QgdmVyc2lvbiAxLjI2LjAgb2YgdGhlIGNvbnRhaW5lciBhZ2VudCBhbmQgYXQgbGVhc3QgdmVyc2lvbiAxLjI2LjAtMSBvZiB0aGUgYGBlY3MtaW5pdGBgIHBhY2thZ2UgdG8gdXNlIGEgcHJveHkgY29uZmlndXJhdGlvbi4gSWYgeW91ciBjb250YWluZXIgaW5zdGFuY2VzIGFyZSBsYXVuY2hlZCBmcm9tIHRoZSBBbWF6b24gRUNTIG9wdGltaXplZCBBTUkgdmVyc2lvbiBgYDIwMTkwMzAxYGAgb3IgbGF0ZXIsIHRoZXkgY29udGFpbiB0aGUgcmVxdWlyZWQgdmVyc2lvbnMgb2YgdGhlIGNvbnRhaW5lciBhZ2VudCBhbmQgYGBlY3MtaW5pdGBgLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtBbWF6b24gRUNTLW9wdGltaXplZCBMaW51eCBBTUldKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2Vjcy1vcHRpbWl6ZWRfQU1JLmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQcm94eUNvbmZpZ3VyYXRpb24ge1xuLyoqXG4gKiBUaGUgc2V0IG9mIG5ldHdvcmsgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIHRvIHByb3ZpZGUgdGhlIENvbnRhaW5lciBOZXR3b3JrIEludGVyZmFjZSAoQ05JKSBwbHVnaW4sIHNwZWNpZmllZCBhcyBrZXktdmFsdWUgcGFpcnMuXG4gKiAgICsgIGBgSWdub3JlZFVJRGBgIC0gKFJlcXVpcmVkKSBUaGUgdXNlciBJRCAoVUlEKSBvZiB0aGUgcHJveHkgY29udGFpbmVyIGFzIGRlZmluZWQgYnkgdGhlIGBgdXNlcmBgIHBhcmFtZXRlciBpbiBhIGNvbnRhaW5lciBkZWZpbml0aW9uLiBUaGlzIGlzIHVzZWQgdG8gZW5zdXJlIHRoZSBwcm94eSBpZ25vcmVzIGl0cyBvd24gdHJhZmZpYy4gSWYgYGBJZ25vcmVkR0lEYGAgaXMgc3BlY2lmaWVkLCB0aGlzIGZpZWxkIGNhbiBiZSBlbXB0eS5cbiAqICAgKyAgYGBJZ25vcmVkR0lEYGAgLSAoUmVxdWlyZWQpIFRoZSBncm91cCBJRCAoR0lEKSBvZiB0aGUgcHJveHkgY29udGFpbmVyIGFzIGRlZmluZWQgYnkgdGhlIGBgdXNlcmBgIHBhcmFtZXRlciBpbiBhIGNvbnRhaW5lciBkZWZpbml0aW9uLiBUaGlzIGlzIHVzZWQgdG8gZW5zdXJlIHRoZSBwcm94eSBpZ25vcmVzIGl0cyBvd24gdHJhZmZpYy4gSWYgYGBJZ25vcmVkVUlEYGAgaXMgc3BlY2lmaWVkLCB0aGlzIGZpZWxkIGNhbiBiZSBlbXB0eS5cbiAqICAgKyAgYGBBcHBQb3J0c2BgIC0gKFJlcXVpcmVkKSBUaGUgbGlzdCBvZiBwb3J0cyB0aGF0IHRoZSBhcHBsaWNhdGlvbiB1c2VzLiBOZXR3b3JrIHRyYWZmaWMgdG8gdGhlc2UgcG9ydHMgaXMgZm9yd2FyZGVkIHRvIHRoZSBgYFByb3h5SW5ncmVzc1BvcnRgYCBhbmQgYGBQcm94eUVncmVzc1BvcnRgYC5cbiAqICAgKyAgYGBQcm94eUluZ3Jlc3NQb3J0YGAgLSAoUmVxdWlyZWQpIFNwZWNpZmllcyB0aGUgcG9ydCB0aGF0IGluY29taW5nIHRyYWZmaWMgdG8gdGhlIGBgQXBwUG9ydHNgYCBpcyBkaXJlY3RlZCB0by5cbiAqICAgKyAgYGBQcm94eUVncmVzc1BvcnRgYCAtIChSZXF1aXJlZCkgU3BlY2lmaWVzIHRoZSBwb3J0IHRoYXQgb3V0Z29pbmcgdHJhZmZpYyBmcm9tIHRoZSBgYEFwcFBvcnRzYGAgaXMgZGlyZWN0ZWQgdG8uXG4gKiAgICsgIGBgRWdyZXNzSWdub3JlZFBvcnRzYGAgLSAoUmVxdWlyZWQpIFRoZSBlZ3Jlc3MgdHJhZmZpYyBnb2luZyB0byB0aGUgc3BlY2lmaWVkIHBvcnRzIGlzIGlnbm9yZWQgYW5kIG5vdCByZWRpcmVjdGVkIHRvIHRoZSBgYFByb3h5RWdyZXNzUG9ydGBgLiBJdCBjYW4gYmUgYW4gZW1wdHkgbGlzdC5cbiAqICAgKyAgYGBFZ3Jlc3NJZ25vcmVkSVBzYGAgLSAoUmVxdWlyZWQpIFRoZSBlZ3Jlc3MgdHJhZmZpYyBnb2luZyB0byB0aGUgc3BlY2lmaWVkIElQIGFkZHJlc3NlcyBpcyBpZ25vcmVkIGFuZCBub3QgcmVkaXJlY3RlZCB0byB0aGUgYGBQcm94eUVncmVzc1BvcnRgYC4gSXQgY2FuIGJlIGFuIGVtcHR5IGxpc3QuXG4gKi9cblByb3h5Q29uZmlndXJhdGlvblByb3BlcnRpZXM/OiBLZXlWYWx1ZVBhaXJbXVxuLyoqXG4gKiBUaGUgcHJveHkgdHlwZS4gVGhlIG9ubHkgc3VwcG9ydGVkIHZhbHVlIGlzIGBgQVBQTUVTSGBgLlxuICovXG5UeXBlPzogc3RyaW5nXG4vKipcbiAqIFRoZSBuYW1lIG9mIHRoZSBjb250YWluZXIgdGhhdCB3aWxsIHNlcnZlIGFzIHRoZSBBcHAgTWVzaCBwcm94eS5cbiAqL1xuQ29udGFpbmVyTmFtZTogc3RyaW5nXG59XG4vKipcbiAqIEEga2V5LXZhbHVlIHBhaXIgb2JqZWN0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEtleVZhbHVlUGFpciB7XG4vKipcbiAqIFRoZSB2YWx1ZSBvZiB0aGUga2V5LXZhbHVlIHBhaXIuIEZvciBlbnZpcm9ubWVudCB2YXJpYWJsZXMsIHRoaXMgaXMgdGhlIHZhbHVlIG9mIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZS5cbiAqL1xuVmFsdWU/OiBzdHJpbmdcbi8qKlxuICogVGhlIG5hbWUgb2YgdGhlIGtleS12YWx1ZSBwYWlyLiBGb3IgZW52aXJvbm1lbnQgdmFyaWFibGVzLCB0aGlzIGlzIHRoZSBuYW1lIG9mIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZS5cbiAqL1xuTmFtZT86IHN0cmluZ1xufVxuLyoqXG4gKiBUaGUgZGF0YSB2b2x1bWUgY29uZmlndXJhdGlvbiBmb3IgdGFza3MgbGF1bmNoZWQgdXNpbmcgdGhpcyB0YXNrIGRlZmluaXRpb24uIFNwZWNpZnlpbmcgYSB2b2x1bWUgY29uZmlndXJhdGlvbiBpbiBhIHRhc2sgZGVmaW5pdGlvbiBpcyBvcHRpb25hbC4gVGhlIHZvbHVtZSBjb25maWd1cmF0aW9uIG1heSBjb250YWluIG11bHRpcGxlIHZvbHVtZXMgYnV0IG9ubHkgb25lIHZvbHVtZSBjb25maWd1cmVkIGF0IGxhdW5jaCBpcyBzdXBwb3J0ZWQuIEVhY2ggdm9sdW1lIGRlZmluZWQgaW4gdGhlIHZvbHVtZSBjb25maWd1cmF0aW9uIG1heSBvbmx5IHNwZWNpZnkgYSBgYG5hbWVgYCBhbmQgb25lIG9mIGVpdGhlciBgYGNvbmZpZ3VyZWRBdExhdW5jaGBgLCBgYGRvY2tlclZvbHVtZUNvbmZpZ3VyYXRpb25gYCwgYGBlZnNWb2x1bWVDb25maWd1cmF0aW9uYGAsIGBgZnN4V2luZG93c0ZpbGVTZXJ2ZXJWb2x1bWVDb25maWd1cmF0aW9uYGAsIG9yIGBgaG9zdGBgLiBJZiBhbiBlbXB0eSB2b2x1bWUgY29uZmlndXJhdGlvbiBpcyBzcGVjaWZpZWQsIGJ5IGRlZmF1bHQgQW1hem9uIEVDUyB1c2VzIGEgaG9zdCB2b2x1bWUuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1VzaW5nIGRhdGEgdm9sdW1lcyBpbiB0YXNrc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvdXNpbmdfZGF0YV92b2x1bWVzLmh0bWwpLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFZvbHVtZSB7XG5FRlNWb2x1bWVDb25maWd1cmF0aW9uPzogRUZTVm9sdW1lQ29uZmlndXJhdGlvblxuSG9zdD86IEhvc3RWb2x1bWVQcm9wZXJ0aWVzXG4vKipcbiAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSB2b2x1bWUgc2hvdWxkIGJlIGNvbmZpZ3VyZWQgYXQgbGF1bmNoIHRpbWUuIFRoaXMgaXMgdXNlZCB0byBjcmVhdGUgQW1hem9uIEVCUyB2b2x1bWVzIGZvciBzdGFuZGFsb25lIHRhc2tzIG9yIHRhc2tzIGNyZWF0ZWQgYXMgcGFydCBvZiBhIHNlcnZpY2UuIEVhY2ggdGFzayBkZWZpbml0aW9uIHJldmlzaW9uIG1heSBvbmx5IGhhdmUgb25lIHZvbHVtZSBjb25maWd1cmVkIGF0IGxhdW5jaCBpbiB0aGUgdm9sdW1lIGNvbmZpZ3VyYXRpb24uXG4gKiAgVG8gY29uZmlndXJlIGEgdm9sdW1lIGF0IGxhdW5jaCB0aW1lLCB1c2UgdGhpcyB0YXNrIGRlZmluaXRpb24gcmV2aXNpb24gYW5kIHNwZWNpZnkgYSBgYHZvbHVtZUNvbmZpZ3VyYXRpb25zYGAgb2JqZWN0IHdoZW4gY2FsbGluZyB0aGUgYGBDcmVhdGVTZXJ2aWNlYGAsIGBgVXBkYXRlU2VydmljZWBgLCBgYFJ1blRhc2tgYCBvciBgYFN0YXJ0VGFza2BgIEFQSXMuXG4gKi9cbkNvbmZpZ3VyZWRBdExhdW5jaD86IGJvb2xlYW5cbkRvY2tlclZvbHVtZUNvbmZpZ3VyYXRpb24/OiBEb2NrZXJWb2x1bWVDb25maWd1cmF0aW9uXG5GU3hXaW5kb3dzRmlsZVNlcnZlclZvbHVtZUNvbmZpZ3VyYXRpb24/OiBGU3hXaW5kb3dzRmlsZVNlcnZlclZvbHVtZUNvbmZpZ3VyYXRpb25cbi8qKlxuICogVGhlIG5hbWUgb2YgdGhlIHZvbHVtZS4gVXAgdG8gMjU1IGxldHRlcnMgKHVwcGVyY2FzZSBhbmQgbG93ZXJjYXNlKSwgbnVtYmVycywgdW5kZXJzY29yZXMsIGFuZCBoeXBoZW5zIGFyZSBhbGxvd2VkLlxuICogIFdoZW4gdXNpbmcgYSB2b2x1bWUgY29uZmlndXJlZCBhdCBsYXVuY2gsIHRoZSBgYG5hbWVgYCBpcyByZXF1aXJlZCBhbmQgbXVzdCBhbHNvIGJlIHNwZWNpZmllZCBhcyB0aGUgdm9sdW1lIG5hbWUgaW4gdGhlIGBgU2VydmljZVZvbHVtZUNvbmZpZ3VyYXRpb25gYCBvciBgYFRhc2tWb2x1bWVDb25maWd1cmF0aW9uYGAgcGFyYW1ldGVyIHdoZW4gY3JlYXRpbmcgeW91ciBzZXJ2aWNlIG9yIHN0YW5kYWxvbmUgdGFzay5cbiAqICBGb3IgYWxsIG90aGVyIHR5cGVzIG9mIHZvbHVtZXMsIHRoaXMgbmFtZSBpcyByZWZlcmVuY2VkIGluIHRoZSBgYHNvdXJjZVZvbHVtZWBgIHBhcmFtZXRlciBvZiB0aGUgYGBtb3VudFBvaW50c2BgIG9iamVjdCBpbiB0aGUgY29udGFpbmVyIGRlZmluaXRpb24uXG4gKiAgV2hlbiBhIHZvbHVtZSBpcyB1c2luZyB0aGUgYGBlZnNWb2x1bWVDb25maWd1cmF0aW9uYGAsIHRoZSBuYW1lIGlzIHJlcXVpcmVkLlxuICovXG5OYW1lPzogc3RyaW5nXG59XG4vKipcbiAqIFRoaXMgcGFyYW1ldGVyIGlzIHNwZWNpZmllZCB3aGVuIHlvdSB1c2UgYW4gQW1hem9uIEVsYXN0aWMgRmlsZSBTeXN0ZW0gZmlsZSBzeXN0ZW0gZm9yIHRhc2sgc3RvcmFnZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFRlNWb2x1bWVDb25maWd1cmF0aW9uIHtcbi8qKlxuICogVGhlIEFtYXpvbiBFRlMgZmlsZSBzeXN0ZW0gSUQgdG8gdXNlLlxuICovXG5GaWxlc3lzdGVtSWQ6IHN0cmluZ1xuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdG8gdXNlIGVuY3J5cHRpb24gZm9yIEFtYXpvbiBFRlMgZGF0YSBpbiB0cmFuc2l0IGJldHdlZW4gdGhlIEFtYXpvbiBFQ1MgaG9zdCBhbmQgdGhlIEFtYXpvbiBFRlMgc2VydmVyLiBUcmFuc2l0IGVuY3J5cHRpb24gbXVzdCBiZSB0dXJuZWQgb24gaWYgQW1hem9uIEVGUyBJQU0gYXV0aG9yaXphdGlvbiBpcyB1c2VkLiBJZiB0aGlzIHBhcmFtZXRlciBpcyBvbWl0dGVkLCB0aGUgZGVmYXVsdCB2YWx1ZSBvZiBgYERJU0FCTEVEYGAgaXMgdXNlZC4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbRW5jcnlwdGluZyBkYXRhIGluIHRyYW5zaXRdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9lZnMvbGF0ZXN0L3VnL2VuY3J5cHRpb24taW4tdHJhbnNpdC5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIEZpbGUgU3lzdGVtIFVzZXIgR3VpZGUqLlxuICovXG5UcmFuc2l0RW5jcnlwdGlvbj86IChcIkVOQUJMRURcIiB8IFwiRElTQUJMRURcIilcbkF1dGhvcml6YXRpb25Db25maWc/OiBBdXRob3JpemF0aW9uQ29uZmlnXG4vKipcbiAqIFRoZSBkaXJlY3Rvcnkgd2l0aGluIHRoZSBBbWF6b24gRUZTIGZpbGUgc3lzdGVtIHRvIG1vdW50IGFzIHRoZSByb290IGRpcmVjdG9yeSBpbnNpZGUgdGhlIGhvc3QuIElmIHRoaXMgcGFyYW1ldGVyIGlzIG9taXR0ZWQsIHRoZSByb290IG9mIHRoZSBBbWF6b24gRUZTIHZvbHVtZSB3aWxsIGJlIHVzZWQuIFNwZWNpZnlpbmcgYGAvYGAgd2lsbCBoYXZlIHRoZSBzYW1lIGVmZmVjdCBhcyBvbWl0dGluZyB0aGlzIHBhcmFtZXRlci5cbiAqICAgSWYgYW4gRUZTIGFjY2VzcyBwb2ludCBpcyBzcGVjaWZpZWQgaW4gdGhlIGBgYXV0aG9yaXphdGlvbkNvbmZpZ2BgLCB0aGUgcm9vdCBkaXJlY3RvcnkgcGFyYW1ldGVyIG11c3QgZWl0aGVyIGJlIG9taXR0ZWQgb3Igc2V0IHRvIGBgL2BgIHdoaWNoIHdpbGwgZW5mb3JjZSB0aGUgcGF0aCBzZXQgb24gdGhlIEVGUyBhY2Nlc3MgcG9pbnQuXG4gKi9cblJvb3REaXJlY3Rvcnk/OiBzdHJpbmdcbi8qKlxuICogVGhlIHBvcnQgdG8gdXNlIHdoZW4gc2VuZGluZyBlbmNyeXB0ZWQgZGF0YSBiZXR3ZWVuIHRoZSBBbWF6b24gRUNTIGhvc3QgYW5kIHRoZSBBbWF6b24gRUZTIHNlcnZlci4gSWYgeW91IGRvIG5vdCBzcGVjaWZ5IGEgdHJhbnNpdCBlbmNyeXB0aW9uIHBvcnQsIGl0IHdpbGwgdXNlIHRoZSBwb3J0IHNlbGVjdGlvbiBzdHJhdGVneSB0aGF0IHRoZSBBbWF6b24gRUZTIG1vdW50IGhlbHBlciB1c2VzLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtFRlMgbW91bnQgaGVscGVyXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZWZzL2xhdGVzdC91Zy9lZnMtbW91bnQtaGVscGVyLmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgRmlsZSBTeXN0ZW0gVXNlciBHdWlkZSouXG4gKi9cblRyYW5zaXRFbmNyeXB0aW9uUG9ydD86IG51bWJlclxufVxuLyoqXG4gKiBUaGUgYXV0aG9yaXphdGlvbiBjb25maWd1cmF0aW9uIGRldGFpbHMgZm9yIHRoZSBBbWF6b24gRUZTIGZpbGUgc3lzdGVtLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEF1dGhvcml6YXRpb25Db25maWcge1xuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdG8gdXNlIHRoZSBBbWF6b24gRUNTIHRhc2sgcm9sZSBkZWZpbmVkIGluIGEgdGFzayBkZWZpbml0aW9uIHdoZW4gbW91bnRpbmcgdGhlIEFtYXpvbiBFRlMgZmlsZSBzeXN0ZW0uIElmIGl0IGlzIHR1cm5lZCBvbiwgdHJhbnNpdCBlbmNyeXB0aW9uIG11c3QgYmUgdHVybmVkIG9uIGluIHRoZSBgYEVGU1ZvbHVtZUNvbmZpZ3VyYXRpb25gYC4gSWYgdGhpcyBwYXJhbWV0ZXIgaXMgb21pdHRlZCwgdGhlIGRlZmF1bHQgdmFsdWUgb2YgYGBESVNBQkxFRGBgIGlzIHVzZWQuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1VzaW5nIEFtYXpvbiBFRlMgYWNjZXNzIHBvaW50c10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvZWZzLXZvbHVtZXMuaHRtbCNlZnMtdm9sdW1lLWFjY2Vzc3BvaW50cykgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5JQU0/OiAoXCJFTkFCTEVEXCIgfCBcIkRJU0FCTEVEXCIpXG4vKipcbiAqIFRoZSBBbWF6b24gRUZTIGFjY2VzcyBwb2ludCBJRCB0byB1c2UuIElmIGFuIGFjY2VzcyBwb2ludCBpcyBzcGVjaWZpZWQsIHRoZSByb290IGRpcmVjdG9yeSB2YWx1ZSBzcGVjaWZpZWQgaW4gdGhlIGBgRUZTVm9sdW1lQ29uZmlndXJhdGlvbmBgIG11c3QgZWl0aGVyIGJlIG9taXR0ZWQgb3Igc2V0IHRvIGBgL2BgIHdoaWNoIHdpbGwgZW5mb3JjZSB0aGUgcGF0aCBzZXQgb24gdGhlIEVGUyBhY2Nlc3MgcG9pbnQuIElmIGFuIGFjY2VzcyBwb2ludCBpcyB1c2VkLCB0cmFuc2l0IGVuY3J5cHRpb24gbXVzdCBiZSBvbiBpbiB0aGUgYGBFRlNWb2x1bWVDb25maWd1cmF0aW9uYGAuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1dvcmtpbmcgd2l0aCBBbWF6b24gRUZTIGFjY2VzcyBwb2ludHNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9lZnMvbGF0ZXN0L3VnL2Vmcy1hY2Nlc3MtcG9pbnRzLmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgRmlsZSBTeXN0ZW0gVXNlciBHdWlkZSouXG4gKi9cbkFjY2Vzc1BvaW50SWQ/OiBzdHJpbmdcbn1cbi8qKlxuICogVGhpcyBwYXJhbWV0ZXIgaXMgc3BlY2lmaWVkIHdoZW4geW91IHVzZSBiaW5kIG1vdW50IGhvc3Qgdm9sdW1lcy4gVGhlIGNvbnRlbnRzIG9mIHRoZSBgYGhvc3RgYCBwYXJhbWV0ZXIgZGV0ZXJtaW5lIHdoZXRoZXIgeW91ciBiaW5kIG1vdW50IGhvc3Qgdm9sdW1lIHBlcnNpc3RzIG9uIHRoZSBob3N0IGNvbnRhaW5lciBpbnN0YW5jZSBhbmQgd2hlcmUgaXQncyBzdG9yZWQuIElmIHRoZSBgYGhvc3RgYCBwYXJhbWV0ZXIgaXMgZW1wdHksIHRoZW4gdGhlIERvY2tlciBkYWVtb24gYXNzaWducyBhIGhvc3QgcGF0aCBmb3IgeW91ciBkYXRhIHZvbHVtZS4gSG93ZXZlciwgdGhlIGRhdGEgaXNuJ3QgZ3VhcmFudGVlZCB0byBwZXJzaXN0IGFmdGVyIHRoZSBjb250YWluZXJzIHRoYXQgYXJlIGFzc29jaWF0ZWQgd2l0aCBpdCBzdG9wIHJ1bm5pbmcuXG4gKiAgV2luZG93cyBjb250YWluZXJzIGNhbiBtb3VudCB3aG9sZSBkaXJlY3RvcmllcyBvbiB0aGUgc2FtZSBkcml2ZSBhcyBgYCRlbnY6UHJvZ3JhbURhdGFgYC4gV2luZG93cyBjb250YWluZXJzIGNhbid0IG1vdW50IGRpcmVjdG9yaWVzIG9uIGEgZGlmZmVyZW50IGRyaXZlLCBhbmQgbW91bnQgcG9pbnQgY2FuJ3QgYmUgYWNyb3NzIGRyaXZlcy4gRm9yIGV4YW1wbGUsIHlvdSBjYW4gbW91bnQgYGBDOlxcbXlcXHBhdGg6QzpcXG15XFxwYXRoYGAgYW5kIGBgRDpcXDpEOlxcYGAsIGJ1dCBub3QgYGBEOlxcbXlcXHBhdGg6QzpcXG15XFxwYXRoYGAgb3IgYGBEOlxcOkM6XFxteVxccGF0aGBgLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEhvc3RWb2x1bWVQcm9wZXJ0aWVzIHtcbi8qKlxuICogV2hlbiB0aGUgYGBob3N0YGAgcGFyYW1ldGVyIGlzIHVzZWQsIHNwZWNpZnkgYSBgYHNvdXJjZVBhdGhgYCB0byBkZWNsYXJlIHRoZSBwYXRoIG9uIHRoZSBob3N0IGNvbnRhaW5lciBpbnN0YW5jZSB0aGF0J3MgcHJlc2VudGVkIHRvIHRoZSBjb250YWluZXIuIElmIHRoaXMgcGFyYW1ldGVyIGlzIGVtcHR5LCB0aGVuIHRoZSBEb2NrZXIgZGFlbW9uIGhhcyBhc3NpZ25lZCBhIGhvc3QgcGF0aCBmb3IgeW91LiBJZiB0aGUgYGBob3N0YGAgcGFyYW1ldGVyIGNvbnRhaW5zIGEgYGBzb3VyY2VQYXRoYGAgZmlsZSBsb2NhdGlvbiwgdGhlbiB0aGUgZGF0YSB2b2x1bWUgcGVyc2lzdHMgYXQgdGhlIHNwZWNpZmllZCBsb2NhdGlvbiBvbiB0aGUgaG9zdCBjb250YWluZXIgaW5zdGFuY2UgdW50aWwgeW91IGRlbGV0ZSBpdCBtYW51YWxseS4gSWYgdGhlIGBgc291cmNlUGF0aGBgIHZhbHVlIGRvZXNuJ3QgZXhpc3Qgb24gdGhlIGhvc3QgY29udGFpbmVyIGluc3RhbmNlLCB0aGUgRG9ja2VyIGRhZW1vbiBjcmVhdGVzIGl0LiBJZiB0aGUgbG9jYXRpb24gZG9lcyBleGlzdCwgdGhlIGNvbnRlbnRzIG9mIHRoZSBzb3VyY2UgcGF0aCBmb2xkZXIgYXJlIGV4cG9ydGVkLlxuICogIElmIHlvdSdyZSB1c2luZyB0aGUgRmFyZ2F0ZSBsYXVuY2ggdHlwZSwgdGhlIGBgc291cmNlUGF0aGBgIHBhcmFtZXRlciBpcyBub3Qgc3VwcG9ydGVkLlxuICovXG5Tb3VyY2VQYXRoPzogc3RyaW5nXG59XG4vKipcbiAqIFRoaXMgcGFyYW1ldGVyIGlzIHNwZWNpZmllZCB3aGVuIHlvdSB1c2UgRG9ja2VyIHZvbHVtZXMuXG4gKiAgV2luZG93cyBjb250YWluZXJzIG9ubHkgc3VwcG9ydCB0aGUgdXNlIG9mIHRoZSBgYGxvY2FsYGAgZHJpdmVyLiBUbyB1c2UgYmluZCBtb3VudHMsIHNwZWNpZnkgdGhlIGBgaG9zdGBgIHBhcmFtZXRlciBpbnN0ZWFkLlxuICogICBEb2NrZXIgdm9sdW1lcyBhcmVuJ3Qgc3VwcG9ydGVkIGJ5IHRhc2tzIHJ1biBvbiBGQVJHQVRFbG9uZy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEb2NrZXJWb2x1bWVDb25maWd1cmF0aW9uIHtcbi8qKlxuICogQSBtYXAgb2YgRG9ja2VyIGRyaXZlci1zcGVjaWZpYyBvcHRpb25zIHBhc3NlZCB0aHJvdWdoLiBUaGlzIHBhcmFtZXRlciBtYXBzIHRvIGBgRHJpdmVyT3B0c2BgIGluIHRoZSBkb2NrZXIgY3JlYXRlLXZvbHVtZSBjb21tYW5kIGFuZCB0aGUgYGB4eG9wdGBgIG9wdGlvbiB0byBkb2NrZXIgdm9sdW1lIGNyZWF0ZS5cbiAqL1xuRHJpdmVyT3B0cz86IHtcbi8qKlxuICogVGhpcyBpbnRlcmZhY2Ugd2FzIHJlZmVyZW5jZWQgYnkgYHVuZGVmaW5lZGAncyBKU09OLVNjaGVtYSBkZWZpbml0aW9uXG4gKiB2aWEgdGhlIGBwYXR0ZXJuUHJvcGVydHlgIFwiLnsxLH1cIi5cbiAqL1xuW2s6IHN0cmluZ106IHN0cmluZ1xufVxuLyoqXG4gKiBUaGUgc2NvcGUgZm9yIHRoZSBEb2NrZXIgdm9sdW1lIHRoYXQgZGV0ZXJtaW5lcyBpdHMgbGlmZWN5Y2xlLiBEb2NrZXIgdm9sdW1lcyB0aGF0IGFyZSBzY29wZWQgdG8gYSBgYHRhc2tgYCBhcmUgYXV0b21hdGljYWxseSBwcm92aXNpb25lZCB3aGVuIHRoZSB0YXNrIHN0YXJ0cyBhbmQgZGVzdHJveWVkIHdoZW4gdGhlIHRhc2sgc3RvcHMuIERvY2tlciB2b2x1bWVzIHRoYXQgYXJlIHNjb3BlZCBhcyBgYHNoYXJlZGBgIHBlcnNpc3QgYWZ0ZXIgdGhlIHRhc2sgc3RvcHMuXG4gKi9cblNjb3BlPzogc3RyaW5nXG4vKipcbiAqIElmIHRoaXMgdmFsdWUgaXMgYGB0cnVlYGAsIHRoZSBEb2NrZXIgdm9sdW1lIGlzIGNyZWF0ZWQgaWYgaXQgZG9lc24ndCBhbHJlYWR5IGV4aXN0LlxuICogICBUaGlzIGZpZWxkIGlzIG9ubHkgdXNlZCBpZiB0aGUgYGBzY29wZWBgIGlzIGBgc2hhcmVkYGAuXG4gKi9cbkF1dG9wcm92aXNpb24/OiBib29sZWFuXG4vKipcbiAqIFRoZSBEb2NrZXIgdm9sdW1lIGRyaXZlciB0byB1c2UuIFRoZSBkcml2ZXIgdmFsdWUgbXVzdCBtYXRjaCB0aGUgZHJpdmVyIG5hbWUgcHJvdmlkZWQgYnkgRG9ja2VyIGJlY2F1c2UgaXQgaXMgdXNlZCBmb3IgdGFzayBwbGFjZW1lbnQuIElmIHRoZSBkcml2ZXIgd2FzIGluc3RhbGxlZCB1c2luZyB0aGUgRG9ja2VyIHBsdWdpbiBDTEksIHVzZSBgYGRvY2tlciBwbHVnaW4gbHNgYCB0byByZXRyaWV2ZSB0aGUgZHJpdmVyIG5hbWUgZnJvbSB5b3VyIGNvbnRhaW5lciBpbnN0YW5jZS4gSWYgdGhlIGRyaXZlciB3YXMgaW5zdGFsbGVkIHVzaW5nIGFub3RoZXIgbWV0aG9kLCB1c2UgRG9ja2VyIHBsdWdpbiBkaXNjb3ZlcnkgdG8gcmV0cmlldmUgdGhlIGRyaXZlciBuYW1lLiBUaGlzIHBhcmFtZXRlciBtYXBzIHRvIGBgRHJpdmVyYGAgaW4gdGhlIGRvY2tlciBjb250YWluZXIgY3JlYXRlIGNvbW1hbmQgYW5kIHRoZSBgYHh4ZHJpdmVyYGAgb3B0aW9uIHRvIGRvY2tlciB2b2x1bWUgY3JlYXRlLlxuICovXG5Ecml2ZXI/OiBzdHJpbmdcbi8qKlxuICogQ3VzdG9tIG1ldGFkYXRhIHRvIGFkZCB0byB5b3VyIERvY2tlciB2b2x1bWUuIFRoaXMgcGFyYW1ldGVyIG1hcHMgdG8gYGBMYWJlbHNgYCBpbiB0aGUgZG9ja2VyIGNvbnRhaW5lciBjcmVhdGUgY29tbWFuZCBhbmQgdGhlIGBgeHhsYWJlbGBgIG9wdGlvbiB0byBkb2NrZXIgdm9sdW1lIGNyZWF0ZS5cbiAqL1xuTGFiZWxzPzoge1xuLyoqXG4gKiBUaGlzIGludGVyZmFjZSB3YXMgcmVmZXJlbmNlZCBieSBgdW5kZWZpbmVkYCdzIEpTT04tU2NoZW1hIGRlZmluaXRpb25cbiAqIHZpYSB0aGUgYHBhdHRlcm5Qcm9wZXJ0eWAgXCIuezEsfVwiLlxuICovXG5bazogc3RyaW5nXTogc3RyaW5nXG59XG59XG4vKipcbiAqIFRoaXMgcGFyYW1ldGVyIGlzIHNwZWNpZmllZCB3aGVuIHlvdSB1c2UgQW1hem9uIEZTeCBmb3IgV2luZG93cyBGaWxlIFNlcnZlciBmaWxlIHN5c3RlbSBmb3IgdGFzayBzdG9yYWdlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZTeFdpbmRvd3NGaWxlU2VydmVyVm9sdW1lQ29uZmlndXJhdGlvbiB7XG5BdXRob3JpemF0aW9uQ29uZmlnPzogRlN4QXV0aG9yaXphdGlvbkNvbmZpZ1xuLyoqXG4gKiBUaGUgQW1hem9uIEZTeCBmb3IgV2luZG93cyBGaWxlIFNlcnZlciBmaWxlIHN5c3RlbSBJRCB0byB1c2UuXG4gKi9cbkZpbGVTeXN0ZW1JZDogc3RyaW5nXG4vKipcbiAqIFRoZSBkaXJlY3Rvcnkgd2l0aGluIHRoZSBBbWF6b24gRlN4IGZvciBXaW5kb3dzIEZpbGUgU2VydmVyIGZpbGUgc3lzdGVtIHRvIG1vdW50IGFzIHRoZSByb290IGRpcmVjdG9yeSBpbnNpZGUgdGhlIGhvc3QuXG4gKi9cblJvb3REaXJlY3Rvcnk6IHN0cmluZ1xufVxuLyoqXG4gKiBUaGUgYXV0aG9yaXphdGlvbiBjb25maWd1cmF0aW9uIGRldGFpbHMgZm9yIHRoZSBBbWF6b24gRlN4IGZvciBXaW5kb3dzIEZpbGUgU2VydmVyIGZpbGUgc3lzdGVtLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZTeEF1dGhvcml6YXRpb25Db25maWcge1xuLyoqXG4gKiBUaGUgYXV0aG9yaXphdGlvbiBjcmVkZW50aWFsIG9wdGlvbiB0byB1c2UuIFRoZSBhdXRob3JpemF0aW9uIGNyZWRlbnRpYWwgb3B0aW9ucyBjYW4gYmUgcHJvdmlkZWQgdXNpbmcgZWl0aGVyIHRoZSBBbWF6b24gUmVzb3VyY2UgTmFtZSAoQVJOKSBvZiBhbiBBU01sb25nIHNlY3JldCBvciBTU00gUGFyYW1ldGVyIFN0b3JlIHBhcmFtZXRlci4gVGhlIEFSTiByZWZlcnMgdG8gdGhlIHN0b3JlZCBjcmVkZW50aWFscy5cbiAqL1xuQ3JlZGVudGlhbHNQYXJhbWV0ZXI6IHN0cmluZ1xuLyoqXG4gKiBBIGZ1bGx5IHF1YWxpZmllZCBkb21haW4gbmFtZSBob3N0ZWQgYnkgYW4gW10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2RpcmVjdG9yeXNlcnZpY2UvbGF0ZXN0L2FkbWluLWd1aWRlL2RpcmVjdG9yeV9taWNyb3NvZnRfYWQuaHRtbCkgTWFuYWdlZCBNaWNyb3NvZnQgQUQgKEFjdGl2ZSBEaXJlY3RvcnkpIG9yIHNlbGYtaG9zdGVkIEFEIG9uIEFtYXpvbiBFQzIuXG4gKi9cbkRvbWFpbjogc3RyaW5nXG59XG4vKipcbiAqIFRoZSBgYENvbnRhaW5lckRlZmluaXRpb25gYCBwcm9wZXJ0eSBzcGVjaWZpZXMgYSBjb250YWluZXIgZGVmaW5pdGlvbi4gQ29udGFpbmVyIGRlZmluaXRpb25zIGFyZSB1c2VkIGluIHRhc2sgZGVmaW5pdGlvbnMgdG8gZGVzY3JpYmUgdGhlIGRpZmZlcmVudCBjb250YWluZXJzIHRoYXQgYXJlIGxhdW5jaGVkIGFzIHBhcnQgb2YgYSB0YXNrLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbnRhaW5lckRlZmluaXRpb24ge1xuLyoqXG4gKiBUaGUgdXNlciB0byB1c2UgaW5zaWRlIHRoZSBjb250YWluZXIuIFRoaXMgcGFyYW1ldGVyIG1hcHMgdG8gYGBVc2VyYGAgaW4gdGhlIGRvY2tlciBjb250YWluZXIgY3JlYXRlIGNvbW1hbmQgYW5kIHRoZSBgYC0tdXNlcmBgIG9wdGlvbiB0byBkb2NrZXIgcnVuLlxuICogICBXaGVuIHJ1bm5pbmcgdGFza3MgdXNpbmcgdGhlIGBgaG9zdGBgIG5ldHdvcmsgbW9kZSwgZG9uJ3QgcnVuIGNvbnRhaW5lcnMgdXNpbmcgdGhlIHJvb3QgdXNlciAoVUlEIDApLiBXZSByZWNvbW1lbmQgdXNpbmcgYSBub24tcm9vdCB1c2VyIGZvciBiZXR0ZXIgc2VjdXJpdHkuXG4gKiAgIFlvdSBjYW4gc3BlY2lmeSB0aGUgYGB1c2VyYGAgdXNpbmcgdGhlIGZvbGxvd2luZyBmb3JtYXRzLiBJZiBzcGVjaWZ5aW5nIGEgVUlEIG9yIEdJRCwgeW91IG11c3Qgc3BlY2lmeSBpdCBhcyBhIHBvc2l0aXZlIGludGVnZXIuXG4gKiAgICsgICBgYHVzZXJgYCBcbiAqICAgKyAgIGBgdXNlcjpncm91cGBgIFxuICogICArICAgYGB1aWRgYCBcbiAqICAgKyAgIGBgdWlkOmdpZGBgIFxuICogICArICAgYGB1c2VyOmdpZGBgIFxuICogICArICAgYGB1aWQ6Z3JvdXBgYCBcbiAqICAgXG4gKiAgIFRoaXMgcGFyYW1ldGVyIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIFdpbmRvd3MgY29udGFpbmVycy5cbiAqL1xuVXNlcj86IHN0cmluZ1xuLyoqXG4gKiBUaGUgc2VjcmV0cyB0byBwYXNzIHRvIHRoZSBjb250YWluZXIuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1NwZWNpZnlpbmcgU2Vuc2l0aXZlIERhdGFdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3NwZWNpZnlpbmctc2Vuc2l0aXZlLWRhdGEuaHRtbCkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5TZWNyZXRzPzogU2VjcmV0W11cbi8qKlxuICogVGhlIGFtb3VudCAoaW4gTWlCKSBvZiBtZW1vcnkgdG8gcHJlc2VudCB0byB0aGUgY29udGFpbmVyLiBJZiB5b3VyIGNvbnRhaW5lciBhdHRlbXB0cyB0byBleGNlZWQgdGhlIG1lbW9yeSBzcGVjaWZpZWQgaGVyZSwgdGhlIGNvbnRhaW5lciBpcyBraWxsZWQuIFRoZSB0b3RhbCBhbW91bnQgb2YgbWVtb3J5IHJlc2VydmVkIGZvciBhbGwgY29udGFpbmVycyB3aXRoaW4gYSB0YXNrIG11c3QgYmUgbG93ZXIgdGhhbiB0aGUgdGFzayBgYG1lbW9yeWBgIHZhbHVlLCBpZiBvbmUgaXMgc3BlY2lmaWVkLiBUaGlzIHBhcmFtZXRlciBtYXBzIHRvIGBgTWVtb3J5YGAgaW4gdGhlIFtDcmVhdGUgYSBjb250YWluZXJdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9odHRwczovL2RvY3MuZG9ja2VyLmNvbS9lbmdpbmUvYXBpL3YxLjM1LyNvcGVyYXRpb24vQ29udGFpbmVyQ3JlYXRlKSBzZWN0aW9uIG9mIHRoZSBbRG9ja2VyIFJlbW90ZSBBUEldKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9odHRwczovL2RvY3MuZG9ja2VyLmNvbS9lbmdpbmUvYXBpL3YxLjM1LykgYW5kIHRoZSBgYC0tbWVtb3J5YGAgb3B0aW9uIHRvIFtkb2NrZXIgcnVuXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vaHR0cHM6Ly9kb2NzLmRvY2tlci5jb20vZW5naW5lL3JlZmVyZW5jZS9ydW4vI3NlY3VyaXR5LWNvbmZpZ3VyYXRpb24pLlxuICogIElmIHVzaW5nIHRoZSBGYXJnYXRlIGxhdW5jaCB0eXBlLCB0aGlzIHBhcmFtZXRlciBpcyBvcHRpb25hbC5cbiAqICBJZiB1c2luZyB0aGUgRUMyIGxhdW5jaCB0eXBlLCB5b3UgbXVzdCBzcGVjaWZ5IGVpdGhlciBhIHRhc2stbGV2ZWwgbWVtb3J5IHZhbHVlIG9yIGEgY29udGFpbmVyLWxldmVsIG1lbW9yeSB2YWx1ZS4gSWYgeW91IHNwZWNpZnkgYm90aCBhIGNvbnRhaW5lci1sZXZlbCBgYG1lbW9yeWBgIGFuZCBgYG1lbW9yeVJlc2VydmF0aW9uYGAgdmFsdWUsIGBgbWVtb3J5YGAgbXVzdCBiZSBncmVhdGVyIHRoYW4gYGBtZW1vcnlSZXNlcnZhdGlvbmBgLiBJZiB5b3Ugc3BlY2lmeSBgYG1lbW9yeVJlc2VydmF0aW9uYGAsIHRoZW4gdGhhdCB2YWx1ZSBpcyBzdWJ0cmFjdGVkIGZyb20gdGhlIGF2YWlsYWJsZSBtZW1vcnkgcmVzb3VyY2VzIGZvciB0aGUgY29udGFpbmVyIGluc3RhbmNlIHdoZXJlIHRoZSBjb250YWluZXIgaXMgcGxhY2VkLiBPdGhlcndpc2UsIHRoZSB2YWx1ZSBvZiBgYG1lbW9yeWBgIGlzIHVzZWQuXG4gKiAgVGhlIERvY2tlciAyMC4xMC4wIG9yIGxhdGVyIGRhZW1vbiByZXNlcnZlcyBhIG1pbmltdW0gb2YgNiBNaUIgb2YgbWVtb3J5IGZvciBhIGNvbnRhaW5lciwgc28geW91IHNob3VsZCBub3Qgc3BlY2lmeSBmZXdlciB0aGFuIDYgTWlCIG9mIG1lbW9yeSBmb3IgeW91ciBjb250YWluZXJzLlxuICogIFRoZSBEb2NrZXIgMTkuMDMuMTMtY2Ugb3IgZWFybGllciBkYWVtb24gcmVzZXJ2ZXMgYSBtaW5pbXVtIG9mIDQgTWlCIG9mIG1lbW9yeSBmb3IgYSBjb250YWluZXIsIHNvIHlvdSBzaG91bGQgbm90IHNwZWNpZnkgZmV3ZXIgdGhhbiA0IE1pQiBvZiBtZW1vcnkgZm9yIHlvdXIgY29udGFpbmVycy5cbiAqL1xuTWVtb3J5PzogbnVtYmVyXG4vKipcbiAqIFdoZW4gdGhpcyBwYXJhbWV0ZXIgaXMgdHJ1ZSwgdGhlIGNvbnRhaW5lciBpcyBnaXZlbiBlbGV2YXRlZCBwcml2aWxlZ2VzIG9uIHRoZSBob3N0IGNvbnRhaW5lciBpbnN0YW5jZSAoc2ltaWxhciB0byB0aGUgYGByb290YGAgdXNlcikuIFRoaXMgcGFyYW1ldGVyIG1hcHMgdG8gYGBQcml2aWxlZ2VkYGAgaW4gdGhlIGRvY2tlciBjb250YWluZXIgY3JlYXRlIGNvbW1hbmQgYW5kIHRoZSBgYC0tcHJpdmlsZWdlZGBgIG9wdGlvbiB0byBkb2NrZXIgcnVuXG4gKiAgIFRoaXMgcGFyYW1ldGVyIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIFdpbmRvd3MgY29udGFpbmVycyBvciB0YXNrcyBydW4gb24gRkFSR0FURWxvbmcuXG4gKi9cblByaXZpbGVnZWQ/OiBib29sZWFuXG5IZWFsdGhDaGVjaz86IEhlYWx0aENoZWNrXG4vKipcbiAqIFRpbWUgZHVyYXRpb24gKGluIHNlY29uZHMpIHRvIHdhaXQgYmVmb3JlIGdpdmluZyB1cCBvbiByZXNvbHZpbmcgZGVwZW5kZW5jaWVzIGZvciBhIGNvbnRhaW5lci4gRm9yIGV4YW1wbGUsIHlvdSBzcGVjaWZ5IHR3byBjb250YWluZXJzIGluIGEgdGFzayBkZWZpbml0aW9uIHdpdGggY29udGFpbmVyQSBoYXZpbmcgYSBkZXBlbmRlbmN5IG9uIGNvbnRhaW5lckIgcmVhY2hpbmcgYSBgYENPTVBMRVRFYGAsIGBgU1VDQ0VTU2BgLCBvciBgYEhFQUxUSFlgYCBzdGF0dXMuIElmIGEgYGBzdGFydFRpbWVvdXRgYCB2YWx1ZSBpcyBzcGVjaWZpZWQgZm9yIGNvbnRhaW5lckIgYW5kIGl0IGRvZXNuJ3QgcmVhY2ggdGhlIGRlc2lyZWQgc3RhdHVzIHdpdGhpbiB0aGF0IHRpbWUgdGhlbiBjb250YWluZXJBIGdpdmVzIHVwIGFuZCBub3Qgc3RhcnQuIFRoaXMgcmVzdWx0cyBpbiB0aGUgdGFzayB0cmFuc2l0aW9uaW5nIHRvIGEgYGBTVE9QUEVEYGAgc3RhdGUuXG4gKiAgIFdoZW4gdGhlIGBgRUNTX0NPTlRBSU5FUl9TVEFSVF9USU1FT1VUYGAgY29udGFpbmVyIGFnZW50IGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgaXMgdXNlZCwgaXQncyBlbmZvcmNlZCBpbmRlcGVuZGVudGx5IGZyb20gdGhpcyBzdGFydCB0aW1lb3V0IHZhbHVlLlxuICogICBGb3IgdGFza3MgdXNpbmcgdGhlIEZhcmdhdGUgbGF1bmNoIHR5cGUsIHRoZSB0YXNrIG9yIHNlcnZpY2UgcmVxdWlyZXMgdGhlIGZvbGxvd2luZyBwbGF0Zm9ybXM6XG4gKiAgICsgIExpbnV4IHBsYXRmb3JtIHZlcnNpb24gYGAxLjMuMGBgIG9yIGxhdGVyLlxuICogICArICBXaW5kb3dzIHBsYXRmb3JtIHZlcnNpb24gYGAxLjAuMGBgIG9yIGxhdGVyLlxuICogICBcbiAqICBGb3IgdGFza3MgdXNpbmcgdGhlIEVDMiBsYXVuY2ggdHlwZSwgeW91ciBjb250YWluZXIgaW5zdGFuY2VzIHJlcXVpcmUgYXQgbGVhc3QgdmVyc2lvbiBgYDEuMjYuMGBgIG9mIHRoZSBjb250YWluZXIgYWdlbnQgdG8gdXNlIGEgY29udGFpbmVyIHN0YXJ0IHRpbWVvdXQgdmFsdWUuIEhvd2V2ZXIsIHdlIHJlY29tbWVuZCB1c2luZyB0aGUgbGF0ZXN0IGNvbnRhaW5lciBhZ2VudCB2ZXJzaW9uLiBGb3IgaW5mb3JtYXRpb24gYWJvdXQgY2hlY2tpbmcgeW91ciBhZ2VudCB2ZXJzaW9uIGFuZCB1cGRhdGluZyB0byB0aGUgbGF0ZXN0IHZlcnNpb24sIHNlZSBbVXBkYXRpbmcgdGhlIEFtYXpvbiBFQ1MgQ29udGFpbmVyIEFnZW50XShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9lY3MtYWdlbnQtdXBkYXRlLmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi4gSWYgeW91J3JlIHVzaW5nIGFuIEFtYXpvbiBFQ1Mtb3B0aW1pemVkIExpbnV4IEFNSSwgeW91ciBpbnN0YW5jZSBuZWVkcyBhdCBsZWFzdCB2ZXJzaW9uIGBgMS4yNi4wLTFgYCBvZiB0aGUgYGBlY3MtaW5pdGBgIHBhY2thZ2UuIElmIHlvdXIgY29udGFpbmVyIGluc3RhbmNlcyBhcmUgbGF1bmNoZWQgZnJvbSB2ZXJzaW9uIGBgMjAxOTAzMDFgYCBvciBsYXRlciwgdGhlbiB0aGV5IGNvbnRhaW4gdGhlIHJlcXVpcmVkIHZlcnNpb25zIG9mIHRoZSBjb250YWluZXIgYWdlbnQgYW5kIGBgZWNzLWluaXRgYC4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbQW1hem9uIEVDUy1vcHRpbWl6ZWQgTGludXggQU1JXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9lY3Mtb3B0aW1pemVkX0FNSS5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSouXG4gKiAgVGhlIHZhbGlkIHZhbHVlcyBmb3IgRmFyZ2F0ZSBhcmUgMi0xMjAgc2Vjb25kcy5cbiAqL1xuU3RhcnRUaW1lb3V0PzogbnVtYmVyXG4vKipcbiAqIERhdGEgdm9sdW1lcyB0byBtb3VudCBmcm9tIGFub3RoZXIgY29udGFpbmVyLiBUaGlzIHBhcmFtZXRlciBtYXBzIHRvIGBgVm9sdW1lc0Zyb21gYCBpbiB0aGUgZG9ja2VyIGNvbnRhaW5lciBjcmVhdGUgY29tbWFuZCBhbmQgdGhlIGBgLS12b2x1bWVzLWZyb21gYCBvcHRpb24gdG8gZG9ja2VyIHJ1bi5cbiAqL1xuVm9sdW1lc0Zyb20/OiBWb2x1bWVGcm9tW11cbi8qKlxuICogVGhlIG51bWJlciBvZiBgYGNwdWBgIHVuaXRzIHJlc2VydmVkIGZvciB0aGUgY29udGFpbmVyLiBUaGlzIHBhcmFtZXRlciBtYXBzIHRvIGBgQ3B1U2hhcmVzYGAgaW4gdGhlIGRvY2tlciBjb250YWluZXIgY3JlYXRlIGNvbW1hbmRhbmQgdGhlIGBgLS1jcHUtc2hhcmVzYGAgb3B0aW9uIHRvIGRvY2tlciBydW4uXG4gKiAgVGhpcyBmaWVsZCBpcyBvcHRpb25hbCBmb3IgdGFza3MgdXNpbmcgdGhlIEZhcmdhdGUgbGF1bmNoIHR5cGUsIGFuZCB0aGUgb25seSByZXF1aXJlbWVudCBpcyB0aGF0IHRoZSB0b3RhbCBhbW91bnQgb2YgQ1BVIHJlc2VydmVkIGZvciBhbGwgY29udGFpbmVycyB3aXRoaW4gYSB0YXNrIGJlIGxvd2VyIHRoYW4gdGhlIHRhc2stbGV2ZWwgYGBjcHVgYCB2YWx1ZS5cbiAqICAgWW91IGNhbiBkZXRlcm1pbmUgdGhlIG51bWJlciBvZiBDUFUgdW5pdHMgdGhhdCBhcmUgYXZhaWxhYmxlIHBlciBFQzIgaW5zdGFuY2UgdHlwZSBieSBtdWx0aXBseWluZyB0aGUgdkNQVXMgbGlzdGVkIGZvciB0aGF0IGluc3RhbmNlIHR5cGUgb24gdGhlIFtBbWF6b24gRUMyIEluc3RhbmNlc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2VjMi9pbnN0YW5jZS10eXBlcy8pIGRldGFpbCBwYWdlIGJ5IDEsMDI0LlxuICogICBMaW51eCBjb250YWluZXJzIHNoYXJlIHVuYWxsb2NhdGVkIENQVSB1bml0cyB3aXRoIG90aGVyIGNvbnRhaW5lcnMgb24gdGhlIGNvbnRhaW5lciBpbnN0YW5jZSB3aXRoIHRoZSBzYW1lIHJhdGlvIGFzIHRoZWlyIGFsbG9jYXRlZCBhbW91bnQuIEZvciBleGFtcGxlLCBpZiB5b3UgcnVuIGEgc2luZ2xlLWNvbnRhaW5lciB0YXNrIG9uIGEgc2luZ2xlLWNvcmUgaW5zdGFuY2UgdHlwZSB3aXRoIDUxMiBDUFUgdW5pdHMgc3BlY2lmaWVkIGZvciB0aGF0IGNvbnRhaW5lciwgYW5kIHRoYXQncyB0aGUgb25seSB0YXNrIHJ1bm5pbmcgb24gdGhlIGNvbnRhaW5lciBpbnN0YW5jZSwgdGhhdCBjb250YWluZXIgY291bGQgdXNlIHRoZSBmdWxsIDEsMDI0IENQVSB1bml0IHNoYXJlIGF0IGFueSBnaXZlbiB0aW1lLiBIb3dldmVyLCBpZiB5b3UgbGF1bmNoZWQgYW5vdGhlciBjb3B5IG9mIHRoZSBzYW1lIHRhc2sgb24gdGhhdCBjb250YWluZXIgaW5zdGFuY2UsIGVhY2ggdGFzayBpcyBndWFyYW50ZWVkIGEgbWluaW11bSBvZiA1MTIgQ1BVIHVuaXRzIHdoZW4gbmVlZGVkLiBNb3Jlb3ZlciwgZWFjaCBjb250YWluZXIgY291bGQgZmxvYXQgdG8gaGlnaGVyIENQVSB1c2FnZSBpZiB0aGUgb3RoZXIgY29udGFpbmVyIHdhcyBub3QgdXNpbmcgaXQuIElmIGJvdGggdGFza3Mgd2VyZSAxMDAlIGFjdGl2ZSBhbGwgb2YgdGhlIHRpbWUsIHRoZXkgd291bGQgYmUgbGltaXRlZCB0byA1MTIgQ1BVIHVuaXRzLlxuICogIE9uIExpbnV4IGNvbnRhaW5lciBpbnN0YW5jZXMsIHRoZSBEb2NrZXIgZGFlbW9uIG9uIHRoZSBjb250YWluZXIgaW5zdGFuY2UgdXNlcyB0aGUgQ1BVIHZhbHVlIHRvIGNhbGN1bGF0ZSB0aGUgcmVsYXRpdmUgQ1BVIHNoYXJlIHJhdGlvcyBmb3IgcnVubmluZyBjb250YWluZXJzLiBUaGUgbWluaW11bSB2YWxpZCBDUFUgc2hhcmUgdmFsdWUgdGhhdCB0aGUgTGludXgga2VybmVsIGFsbG93cyBpcyAyLCBhbmQgdGhlIG1heGltdW0gdmFsaWQgQ1BVIHNoYXJlIHZhbHVlIHRoYXQgdGhlIExpbnV4IGtlcm5lbCBhbGxvd3MgaXMgMjYyMTQ0LiBIb3dldmVyLCB0aGUgQ1BVIHBhcmFtZXRlciBpc24ndCByZXF1aXJlZCwgYW5kIHlvdSBjYW4gdXNlIENQVSB2YWx1ZXMgYmVsb3cgMiBvciBhYm92ZSAyNjIxNDQgaW4geW91ciBjb250YWluZXIgZGVmaW5pdGlvbnMuIEZvciBDUFUgdmFsdWVzIGJlbG93IDIgKGluY2x1ZGluZyBudWxsKSBvciBhYm92ZSAyNjIxNDQsIHRoZSBiZWhhdmlvciB2YXJpZXMgYmFzZWQgb24geW91ciBBbWF6b24gRUNTIGNvbnRhaW5lciBhZ2VudCB2ZXJzaW9uOlxuICogICArICAqQWdlbnQgdmVyc2lvbnMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDEuMS4wOiogTnVsbCBhbmQgemVybyBDUFUgdmFsdWVzIGFyZSBwYXNzZWQgdG8gRG9ja2VyIGFzIDAsIHdoaWNoIERvY2tlciB0aGVuIGNvbnZlcnRzIHRvIDEsMDI0IENQVSBzaGFyZXMuIENQVSB2YWx1ZXMgb2YgMSBhcmUgcGFzc2VkIHRvIERvY2tlciBhcyAxLCB3aGljaCB0aGUgTGludXgga2VybmVsIGNvbnZlcnRzIHRvIHR3byBDUFUgc2hhcmVzLlxuICogICArICAqQWdlbnQgdmVyc2lvbnMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDEuMi4wOiogTnVsbCwgemVybywgYW5kIENQVSB2YWx1ZXMgb2YgMSBhcmUgcGFzc2VkIHRvIERvY2tlciBhcyAyLlxuICogICArICAqQWdlbnQgdmVyc2lvbnMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDEuODQuMDoqIENQVSB2YWx1ZXMgZ3JlYXRlciB0aGFuIDI1NiB2Q1BVIGFyZSBwYXNzZWQgdG8gRG9ja2VyIGFzIDI1Niwgd2hpY2ggaXMgZXF1aXZhbGVudCB0byAyNjIxNDQgQ1BVIHNoYXJlcy5cbiAqICAgXG4gKiAgT24gV2luZG93cyBjb250YWluZXIgaW5zdGFuY2VzLCB0aGUgQ1BVIGxpbWl0IGlzIGVuZm9yY2VkIGFzIGFuIGFic29sdXRlIGxpbWl0LCBvciBhIHF1b3RhLiBXaW5kb3dzIGNvbnRhaW5lcnMgb25seSBoYXZlIGFjY2VzcyB0byB0aGUgc3BlY2lmaWVkIGFtb3VudCBvZiBDUFUgdGhhdCdzIGRlc2NyaWJlZCBpbiB0aGUgdGFzayBkZWZpbml0aW9uLiBBIG51bGwgb3IgemVybyBDUFUgdmFsdWUgaXMgcGFzc2VkIHRvIERvY2tlciBhcyBgYDBgYCwgd2hpY2ggV2luZG93cyBpbnRlcnByZXRzIGFzIDElIG9mIG9uZSBDUFUuXG4gKi9cbkNwdT86IG51bWJlclxuLyoqXG4gKiBFYXJseSB2ZXJzaW9ucyBvZiB0aGUgQW1hem9uIEVDUyBjb250YWluZXIgYWdlbnQgZG9uJ3QgcHJvcGVybHkgaGFuZGxlIGBgZW50cnlQb2ludGBgIHBhcmFtZXRlcnMuIElmIHlvdSBoYXZlIHByb2JsZW1zIHVzaW5nIGBgZW50cnlQb2ludGBgLCB1cGRhdGUgeW91ciBjb250YWluZXIgYWdlbnQgb3IgZW50ZXIgeW91ciBjb21tYW5kcyBhbmQgYXJndW1lbnRzIGFzIGBgY29tbWFuZGBgIGFycmF5IGl0ZW1zIGluc3RlYWQuXG4gKiAgIFRoZSBlbnRyeSBwb2ludCB0aGF0J3MgcGFzc2VkIHRvIHRoZSBjb250YWluZXIuIFRoaXMgcGFyYW1ldGVyIG1hcHMgdG8gYGBFbnRyeXBvaW50YGAgaW4gdGhlIGRvY2tlciBjb250YWluZXIgY3JlYXRlIGNvbW1hbmQgYW5kIHRoZSBgYC0tZW50cnlwb2ludGBgIG9wdGlvbiB0byBkb2NrZXIgcnVuLlxuICovXG5FbnRyeVBvaW50Pzogc3RyaW5nW11cbi8qKlxuICogQSBsaXN0IG9mIEROUyBzZXJ2ZXJzIHRoYXQgYXJlIHByZXNlbnRlZCB0byB0aGUgY29udGFpbmVyLiBUaGlzIHBhcmFtZXRlciBtYXBzIHRvIGBgRG5zYGAgaW4gdGhlIGRvY2tlciBjb250YWluZXIgY3JlYXRlIGNvbW1hbmQgYW5kIHRoZSBgYC0tZG5zYGAgb3B0aW9uIHRvIGRvY2tlciBydW4uXG4gKiAgIFRoaXMgcGFyYW1ldGVyIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIFdpbmRvd3MgY29udGFpbmVycy5cbiAqL1xuRG5zU2VydmVycz86IHN0cmluZ1tdXG4vKipcbiAqIFdoZW4gdGhpcyBwYXJhbWV0ZXIgaXMgdHJ1ZSwgdGhlIGNvbnRhaW5lciBpcyBnaXZlbiByZWFkLW9ubHkgYWNjZXNzIHRvIGl0cyByb290IGZpbGUgc3lzdGVtLiBUaGlzIHBhcmFtZXRlciBtYXBzIHRvIGBgUmVhZG9ubHlSb290ZnNgYCBpbiB0aGUgZG9ja2VyIGNvbnRhaW5lciBjcmVhdGUgY29tbWFuZCBhbmQgdGhlIGBgLS1yZWFkLW9ubHlgYCBvcHRpb24gdG8gZG9ja2VyIHJ1bi5cbiAqICAgVGhpcyBwYXJhbWV0ZXIgaXMgbm90IHN1cHBvcnRlZCBmb3IgV2luZG93cyBjb250YWluZXJzLlxuICovXG5SZWFkb25seVJvb3RGaWxlc3lzdGVtPzogYm9vbGVhblxuLyoqXG4gKiBUaGUgaW1hZ2UgdXNlZCB0byBzdGFydCBhIGNvbnRhaW5lci4gVGhpcyBzdHJpbmcgaXMgcGFzc2VkIGRpcmVjdGx5IHRvIHRoZSBEb2NrZXIgZGFlbW9uLiBCeSBkZWZhdWx0LCBpbWFnZXMgaW4gdGhlIERvY2tlciBIdWIgcmVnaXN0cnkgYXJlIGF2YWlsYWJsZS4gT3RoZXIgcmVwb3NpdG9yaWVzIGFyZSBzcGVjaWZpZWQgd2l0aCBlaXRoZXIgYGByZXBvc2l0b3J5LXVybC9pbWFnZTp0YWdgYCBvciBgYHJlcG9zaXRvcnktdXJsL2ltYWdlQGRpZ2VzdGBgLiBVcCB0byAyNTUgbGV0dGVycyAodXBwZXJjYXNlIGFuZCBsb3dlcmNhc2UpLCBudW1iZXJzLCBoeXBoZW5zLCB1bmRlcnNjb3JlcywgY29sb25zLCBwZXJpb2RzLCBmb3J3YXJkIHNsYXNoZXMsIGFuZCBudW1iZXIgc2lnbnMgYXJlIGFsbG93ZWQuIFRoaXMgcGFyYW1ldGVyIG1hcHMgdG8gYGBJbWFnZWBgIGluIHRoZSBkb2NrZXIgY29udGFpbmVyIGNyZWF0ZSBjb21tYW5kIGFuZCB0aGUgYGBJTUFHRWBgIHBhcmFtZXRlciBvZiBkb2NrZXIgcnVuLlxuICogICArICBXaGVuIGEgbmV3IHRhc2sgc3RhcnRzLCB0aGUgQW1hem9uIEVDUyBjb250YWluZXIgYWdlbnQgcHVsbHMgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoZSBzcGVjaWZpZWQgaW1hZ2UgYW5kIHRhZyBmb3IgdGhlIGNvbnRhaW5lciB0byB1c2UuIEhvd2V2ZXIsIHN1YnNlcXVlbnQgdXBkYXRlcyB0byBhIHJlcG9zaXRvcnkgaW1hZ2UgYXJlbid0IHByb3BhZ2F0ZWQgdG8gYWxyZWFkeSBydW5uaW5nIHRhc2tzLlxuICogICArICBJbWFnZXMgaW4gQW1hem9uIEVDUiByZXBvc2l0b3JpZXMgY2FuIGJlIHNwZWNpZmllZCBieSBlaXRoZXIgdXNpbmcgdGhlIGZ1bGwgYGByZWdpc3RyeS9yZXBvc2l0b3J5OnRhZ2BgIG9yIGBgcmVnaXN0cnkvcmVwb3NpdG9yeUBkaWdlc3RgYC4gRm9yIGV4YW1wbGUsIGBgMDEyMzQ1Njc4OTEwLmRrci5lY3IuPHJlZ2lvbi1uYW1lPi5hbWF6b25hd3MuY29tLzxyZXBvc2l0b3J5LW5hbWU+OmxhdGVzdGBgIG9yIGBgMDEyMzQ1Njc4OTEwLmRrci5lY3IuPHJlZ2lvbi1uYW1lPi5hbWF6b25hd3MuY29tLzxyZXBvc2l0b3J5LW5hbWU+QHNoYTI1Njo5NGFmZDFmMmU2NGQ5MDhiYzkwZGJjYTAwMzVhNWI1NjdFWEFNUExFYGAuIFxuICogICArICBJbWFnZXMgaW4gb2ZmaWNpYWwgcmVwb3NpdG9yaWVzIG9uIERvY2tlciBIdWIgdXNlIGEgc2luZ2xlIG5hbWUgKGZvciBleGFtcGxlLCBgYHVidW50dWBgIG9yIGBgbW9uZ29gYCkuXG4gKiAgICsgIEltYWdlcyBpbiBvdGhlciByZXBvc2l0b3JpZXMgb24gRG9ja2VyIEh1YiBhcmUgcXVhbGlmaWVkIHdpdGggYW4gb3JnYW5pemF0aW9uIG5hbWUgKGZvciBleGFtcGxlLCBgYGFtYXpvbi9hbWF6b24tZWNzLWFnZW50YGApLlxuICogICArICBJbWFnZXMgaW4gb3RoZXIgb25saW5lIHJlcG9zaXRvcmllcyBhcmUgcXVhbGlmaWVkIGZ1cnRoZXIgYnkgYSBkb21haW4gbmFtZSAoZm9yIGV4YW1wbGUsIGBgcXVheS5pby9hc3NlbWJseWxpbmUvdWJ1bnR1YGApLlxuICovXG5JbWFnZTogc3RyaW5nXG4vKipcbiAqIElmIHRoZSBgYGVzc2VudGlhbGBgIHBhcmFtZXRlciBvZiBhIGNvbnRhaW5lciBpcyBtYXJrZWQgYXMgYGB0cnVlYGAsIGFuZCB0aGF0IGNvbnRhaW5lciBmYWlscyBvciBzdG9wcyBmb3IgYW55IHJlYXNvbiwgYWxsIG90aGVyIGNvbnRhaW5lcnMgdGhhdCBhcmUgcGFydCBvZiB0aGUgdGFzayBhcmUgc3RvcHBlZC4gSWYgdGhlIGBgZXNzZW50aWFsYGAgcGFyYW1ldGVyIG9mIGEgY29udGFpbmVyIGlzIG1hcmtlZCBhcyBgYGZhbHNlYGAsIGl0cyBmYWlsdXJlIGRvZXNuJ3QgYWZmZWN0IHRoZSByZXN0IG9mIHRoZSBjb250YWluZXJzIGluIGEgdGFzay4gSWYgdGhpcyBwYXJhbWV0ZXIgaXMgb21pdHRlZCwgYSBjb250YWluZXIgaXMgYXNzdW1lZCB0byBiZSBlc3NlbnRpYWwuXG4gKiAgQWxsIHRhc2tzIG11c3QgaGF2ZSBhdCBsZWFzdCBvbmUgZXNzZW50aWFsIGNvbnRhaW5lci4gSWYgeW91IGhhdmUgYW4gYXBwbGljYXRpb24gdGhhdCdzIGNvbXBvc2VkIG9mIG11bHRpcGxlIGNvbnRhaW5lcnMsIGdyb3VwIGNvbnRhaW5lcnMgdGhhdCBhcmUgdXNlZCBmb3IgYSBjb21tb24gcHVycG9zZSBpbnRvIGNvbXBvbmVudHMsIGFuZCBzZXBhcmF0ZSB0aGUgZGlmZmVyZW50IGNvbXBvbmVudHMgaW50byBtdWx0aXBsZSB0YXNrIGRlZmluaXRpb25zLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtBcHBsaWNhdGlvbiBBcmNoaXRlY3R1cmVdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2FwcGxpY2F0aW9uX2FyY2hpdGVjdHVyZS5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSouXG4gKi9cbkVzc2VudGlhbD86IGJvb2xlYW5cbkxvZ0NvbmZpZ3VyYXRpb24/OiBMb2dDb25maWd1cmF0aW9uXG4vKipcbiAqIFRoZSB0eXBlIGFuZCBhbW91bnQgb2YgYSByZXNvdXJjZSB0byBhc3NpZ24gdG8gYSBjb250YWluZXIuIFRoZSBvbmx5IHN1cHBvcnRlZCByZXNvdXJjZSBpcyBhIEdQVS5cbiAqL1xuUmVzb3VyY2VSZXF1aXJlbWVudHM/OiBSZXNvdXJjZVJlcXVpcmVtZW50W11cbi8qKlxuICogQSBsaXN0IG9mIGZpbGVzIGNvbnRhaW5pbmcgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcyB0byBwYXNzIHRvIGEgY29udGFpbmVyLiBUaGlzIHBhcmFtZXRlciBtYXBzIHRvIHRoZSBgYC0tZW52LWZpbGVgYCBvcHRpb24gdG8gZG9ja2VyIHJ1bi5cbiAqICBZb3UgY2FuIHNwZWNpZnkgdXAgdG8gdGVuIGVudmlyb25tZW50IGZpbGVzLiBUaGUgZmlsZSBtdXN0IGhhdmUgYSBgYC5lbnZgYCBmaWxlIGV4dGVuc2lvbi4gRWFjaCBsaW5lIGluIGFuIGVudmlyb25tZW50IGZpbGUgY29udGFpbnMgYW4gZW52aXJvbm1lbnQgdmFyaWFibGUgaW4gYGBWQVJJQUJMRT1WQUxVRWBgIGZvcm1hdC4gTGluZXMgYmVnaW5uaW5nIHdpdGggYGAjYGAgYXJlIHRyZWF0ZWQgYXMgY29tbWVudHMgYW5kIGFyZSBpZ25vcmVkLlxuICogIElmIHRoZXJlIGFyZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgc3BlY2lmaWVkIHVzaW5nIHRoZSBgYGVudmlyb25tZW50YGAgcGFyYW1ldGVyIGluIGEgY29udGFpbmVyIGRlZmluaXRpb24sIHRoZXkgdGFrZSBwcmVjZWRlbmNlIG92ZXIgdGhlIHZhcmlhYmxlcyBjb250YWluZWQgd2l0aGluIGFuIGVudmlyb25tZW50IGZpbGUuIElmIG11bHRpcGxlIGVudmlyb25tZW50IGZpbGVzIGFyZSBzcGVjaWZpZWQgdGhhdCBjb250YWluIHRoZSBzYW1lIHZhcmlhYmxlLCB0aGV5J3JlIHByb2Nlc3NlZCBmcm9tIHRoZSB0b3AgZG93bi4gV2UgcmVjb21tZW5kIHRoYXQgeW91IHVzZSB1bmlxdWUgdmFyaWFibGUgbmFtZXMuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1NwZWNpZnlpbmcgRW52aXJvbm1lbnQgVmFyaWFibGVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS90YXNrZGVmLWVudmZpbGVzLmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuRW52aXJvbm1lbnRGaWxlcz86IEVudmlyb25tZW50RmlsZVtdXG4vKipcbiAqIFRoZSBuYW1lIG9mIGEgY29udGFpbmVyLiBJZiB5b3UncmUgbGlua2luZyBtdWx0aXBsZSBjb250YWluZXJzIHRvZ2V0aGVyIGluIGEgdGFzayBkZWZpbml0aW9uLCB0aGUgYGBuYW1lYGAgb2Ygb25lIGNvbnRhaW5lciBjYW4gYmUgZW50ZXJlZCBpbiB0aGUgYGBsaW5rc2BgIG9mIGFub3RoZXIgY29udGFpbmVyIHRvIGNvbm5lY3QgdGhlIGNvbnRhaW5lcnMuIFVwIHRvIDI1NSBsZXR0ZXJzICh1cHBlcmNhc2UgYW5kIGxvd2VyY2FzZSksIG51bWJlcnMsIHVuZGVyc2NvcmVzLCBhbmQgaHlwaGVucyBhcmUgYWxsb3dlZC4gVGhpcyBwYXJhbWV0ZXIgbWFwcyB0byBgYG5hbWVgYCBpbiB0aGUgZG9ja2VyIGNvbnRhaW5lciBjcmVhdGUgY29tbWFuZCBhbmQgdGhlIGBgLS1uYW1lYGAgb3B0aW9uIHRvIGRvY2tlciBydW4uXG4gKi9cbk5hbWU6IHN0cmluZ1xuRmlyZWxlbnNDb25maWd1cmF0aW9uPzogRmlyZWxlbnNDb25maWd1cmF0aW9uXG4vKipcbiAqIEEgbGlzdCBvZiBzdHJpbmdzIHRvIHByb3ZpZGUgY3VzdG9tIGNvbmZpZ3VyYXRpb24gZm9yIG11bHRpcGxlIHNlY3VyaXR5IHN5c3RlbXMuIFRoaXMgZmllbGQgaXNuJ3QgdmFsaWQgZm9yIGNvbnRhaW5lcnMgaW4gdGFza3MgdXNpbmcgdGhlIEZhcmdhdGUgbGF1bmNoIHR5cGUuXG4gKiAgRm9yIExpbnV4IHRhc2tzIG9uIEVDMiwgdGhpcyBwYXJhbWV0ZXIgY2FuIGJlIHVzZWQgdG8gcmVmZXJlbmNlIGN1c3RvbSBsYWJlbHMgZm9yIFNFTGludXggYW5kIEFwcEFybW9yIG11bHRpLWxldmVsIHNlY3VyaXR5IHN5c3RlbXMuXG4gKiAgRm9yIGFueSB0YXNrcyBvbiBFQzIsIHRoaXMgcGFyYW1ldGVyIGNhbiBiZSB1c2VkIHRvIHJlZmVyZW5jZSBhIGNyZWRlbnRpYWwgc3BlYyBmaWxlIHRoYXQgY29uZmlndXJlcyBhIGNvbnRhaW5lciBmb3IgQWN0aXZlIERpcmVjdG9yeSBhdXRoZW50aWNhdGlvbi4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbVXNpbmcgZ01TQXMgZm9yIFdpbmRvd3MgQ29udGFpbmVyc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvd2luZG93cy1nbXNhLmh0bWwpIGFuZCBbVXNpbmcgZ01TQXMgZm9yIExpbnV4IENvbnRhaW5lcnNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2xpbnV4LWdtc2EuaHRtbCkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLlxuICogIFRoaXMgcGFyYW1ldGVyIG1hcHMgdG8gYGBTZWN1cml0eU9wdGBgIGluIHRoZSBkb2NrZXIgY29udGFpbmVyIGNyZWF0ZSBjb21tYW5kIGFuZCB0aGUgYGAtLXNlY3VyaXR5LW9wdGBgIG9wdGlvbiB0byBkb2NrZXIgcnVuLlxuICogICBUaGUgQW1hem9uIEVDUyBjb250YWluZXIgYWdlbnQgcnVubmluZyBvbiBhIGNvbnRhaW5lciBpbnN0YW5jZSBtdXN0IHJlZ2lzdGVyIHdpdGggdGhlIGBgRUNTX1NFTElOVVhfQ0FQQUJMRT10cnVlYGAgb3IgYGBFQ1NfQVBQQVJNT1JfQ0FQQUJMRT10cnVlYGAgZW52aXJvbm1lbnQgdmFyaWFibGVzIGJlZm9yZSBjb250YWluZXJzIHBsYWNlZCBvbiB0aGF0IGluc3RhbmNlIGNhbiB1c2UgdGhlc2Ugc2VjdXJpdHkgb3B0aW9ucy4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbQW1hem9uIEVDUyBDb250YWluZXIgQWdlbnQgQ29uZmlndXJhdGlvbl0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvZWNzLWFnZW50LWNvbmZpZy5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSouXG4gKiAgIFZhbGlkIHZhbHVlczogXCJuby1uZXctcHJpdmlsZWdlc1wiIHwgXCJhcHBhcm1vcjpQUk9GSUxFXCIgfCBcImxhYmVsOnZhbHVlXCIgfCBcImNyZWRlbnRpYWxzcGVjOkNyZWRlbnRpYWxTcGVjRmlsZVBhdGhcIlxuICovXG5Eb2NrZXJTZWN1cml0eU9wdGlvbnM/OiBzdHJpbmdbXVxuLyoqXG4gKiBBIGxpc3Qgb2YgbmFtZXNwYWNlZCBrZXJuZWwgcGFyYW1ldGVycyB0byBzZXQgaW4gdGhlIGNvbnRhaW5lci4gVGhpcyBwYXJhbWV0ZXIgbWFwcyB0byBgYFN5c2N0bHNgYCBpbiB0aGUgZG9ja2VyIGNvbnRhaW5lciBjcmVhdGUgY29tbWFuZCBhbmQgdGhlIGBgLS1zeXNjdGxgYCBvcHRpb24gdG8gZG9ja2VyIHJ1bi4gRm9yIGV4YW1wbGUsIHlvdSBjYW4gY29uZmlndXJlIGBgbmV0LmlwdjQudGNwX2tlZXBhbGl2ZV90aW1lYGAgc2V0dGluZyB0byBtYWludGFpbiBsb25nZXIgbGl2ZWQgY29ubmVjdGlvbnMuXG4gKi9cblN5c3RlbUNvbnRyb2xzPzogU3lzdGVtQ29udHJvbFtdXG4vKipcbiAqIFdoZW4gdGhpcyBwYXJhbWV0ZXIgaXMgYGB0cnVlYGAsIHlvdSBjYW4gZGVwbG95IGNvbnRhaW5lcml6ZWQgYXBwbGljYXRpb25zIHRoYXQgcmVxdWlyZSBgYHN0ZGluYGAgb3IgYSBgYHR0eWBgIHRvIGJlIGFsbG9jYXRlZC4gVGhpcyBwYXJhbWV0ZXIgbWFwcyB0byBgYE9wZW5TdGRpbmBgIGluIHRoZSBkb2NrZXIgY29udGFpbmVyIGNyZWF0ZSBjb21tYW5kIGFuZCB0aGUgYGAtLWludGVyYWN0aXZlYGAgb3B0aW9uIHRvIGRvY2tlciBydW4uXG4gKi9cbkludGVyYWN0aXZlPzogYm9vbGVhblxuLyoqXG4gKiBBIGxpc3Qgb2YgRE5TIHNlYXJjaCBkb21haW5zIHRoYXQgYXJlIHByZXNlbnRlZCB0byB0aGUgY29udGFpbmVyLiBUaGlzIHBhcmFtZXRlciBtYXBzIHRvIGBgRG5zU2VhcmNoYGAgaW4gdGhlIGRvY2tlciBjb250YWluZXIgY3JlYXRlIGNvbW1hbmQgYW5kIHRoZSBgYC0tZG5zLXNlYXJjaGBgIG9wdGlvbiB0byBkb2NrZXIgcnVuLlxuICogICBUaGlzIHBhcmFtZXRlciBpcyBub3Qgc3VwcG9ydGVkIGZvciBXaW5kb3dzIGNvbnRhaW5lcnMuXG4gKi9cbkRuc1NlYXJjaERvbWFpbnM/OiBzdHJpbmdbXVxuLyoqXG4gKiBBIGxpc3Qgb2YgQVJOcyBpbiBTU00gb3IgQW1hem9uIFMzIHRvIGEgY3JlZGVudGlhbCBzcGVjIChgYENyZWRTcGVjYGApIGZpbGUgdGhhdCBjb25maWd1cmVzIHRoZSBjb250YWluZXIgZm9yIEFjdGl2ZSBEaXJlY3RvcnkgYXV0aGVudGljYXRpb24uIFdlIHJlY29tbWVuZCB0aGF0IHlvdSB1c2UgdGhpcyBwYXJhbWV0ZXIgaW5zdGVhZCBvZiB0aGUgYGBkb2NrZXJTZWN1cml0eU9wdGlvbnNgYC4gVGhlIG1heGltdW0gbnVtYmVyIG9mIEFSTnMgaXMgMS5cbiAqICBUaGVyZSBhcmUgdHdvIGZvcm1hdHMgZm9yIGVhY2ggQVJOLlxuICogICArIGNyZWRlbnRpYWxzcGVjZG9tYWlubGVzczpNeUFSTiBZb3UgdXNlIGNyZWRlbnRpYWxzcGVjZG9tYWlubGVzczpNeUFSTiB0byBwcm92aWRlIGEgQ3JlZFNwZWMgd2l0aCBhbiBhZGRpdGlvbmFsIHNlY3Rpb24gZm9yIGEgc2VjcmV0IGluIC4gWW91IHByb3ZpZGUgdGhlIGxvZ2luIGNyZWRlbnRpYWxzIHRvIHRoZSBkb21haW4gaW4gdGhlIHNlY3JldC4gRWFjaCB0YXNrIHRoYXQgcnVucyBvbiBhbnkgY29udGFpbmVyIGluc3RhbmNlIGNhbiBqb2luIGRpZmZlcmVudCBkb21haW5zLiBZb3UgY2FuIHVzZSB0aGlzIGZvcm1hdCB3aXRob3V0IGpvaW5pbmcgdGhlIGNvbnRhaW5lciBpbnN0YW5jZSB0byBhIGRvbWFpbi4gKyBjcmVkZW50aWFsc3BlYzpNeUFSTiBZb3UgdXNlIGNyZWRlbnRpYWxzcGVjOk15QVJOIHRvIHByb3ZpZGUgYSBDcmVkU3BlYyBmb3IgYSBzaW5nbGUgZG9tYWluLiBZb3UgbXVzdCBqb2luIHRoZSBjb250YWluZXIgaW5zdGFuY2UgdG8gdGhlIGRvbWFpbiBiZWZvcmUgeW91IHN0YXJ0IGFueSB0YXNrcyB0aGF0IHVzZSB0aGlzIHRhc2sgZGVmaW5pdGlvbi4gXG4gKiAgSW4gYm90aCBmb3JtYXRzLCByZXBsYWNlIGBgTXlBUk5gYCB3aXRoIHRoZSBBUk4gaW4gU1NNIG9yIEFtYXpvbiBTMy5cbiAqICBJZiB5b3UgcHJvdmlkZSBhIGBgY3JlZGVudGlhbHNwZWNkb21haW5sZXNzOk15QVJOYGAsIHRoZSBgYGNyZWRzcGVjYGAgbXVzdCBwcm92aWRlIGEgQVJOIGluIEFTTWxvbmcgZm9yIGEgc2VjcmV0IGNvbnRhaW5pbmcgdGhlIHVzZXJuYW1lLCBwYXNzd29yZCwgYW5kIHRoZSBkb21haW4gdG8gY29ubmVjdCB0by4gRm9yIGJldHRlciBzZWN1cml0eSwgdGhlIGluc3RhbmNlIGlzbid0IGpvaW5lZCB0byB0aGUgZG9tYWluIGZvciBkb21haW5sZXNzIGF1dGhlbnRpY2F0aW9uLiBPdGhlciBhcHBsaWNhdGlvbnMgb24gdGhlIGluc3RhbmNlIGNhbid0IHVzZSB0aGUgZG9tYWlubGVzcyBjcmVkZW50aWFscy4gWW91IGNhbiB1c2UgdGhpcyBwYXJhbWV0ZXIgdG8gcnVuIHRhc2tzIG9uIHRoZSBzYW1lIGluc3RhbmNlLCBldmVuIGl0IHRoZSB0YXNrcyBuZWVkIHRvIGpvaW4gZGlmZmVyZW50IGRvbWFpbnMuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1VzaW5nIGdNU0FzIGZvciBXaW5kb3dzIENvbnRhaW5lcnNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3dpbmRvd3MtZ21zYS5odG1sKSBhbmQgW1VzaW5nIGdNU0FzIGZvciBMaW51eCBDb250YWluZXJzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9saW51eC1nbXNhLmh0bWwpLlxuICovXG5DcmVkZW50aWFsU3BlY3M/OiBzdHJpbmdbXVxuLyoqXG4gKiBBIGxpc3Qgb2YgYGB1bGltaXRzYGAgdG8gc2V0IGluIHRoZSBjb250YWluZXIuIFRoaXMgcGFyYW1ldGVyIG1hcHMgdG8gYGBVbGltaXRzYGAgaW4gdGhlIFtDcmVhdGUgYSBjb250YWluZXJdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9odHRwczovL2RvY3MuZG9ja2VyLmNvbS9lbmdpbmUvYXBpL3YxLjM1LyNvcGVyYXRpb24vQ29udGFpbmVyQ3JlYXRlKSBzZWN0aW9uIG9mIHRoZSBbRG9ja2VyIFJlbW90ZSBBUEldKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9odHRwczovL2RvY3MuZG9ja2VyLmNvbS9lbmdpbmUvYXBpL3YxLjM1LykgYW5kIHRoZSBgYC0tdWxpbWl0YGAgb3B0aW9uIHRvIFtkb2NrZXIgcnVuXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vaHR0cHM6Ly9kb2NzLmRvY2tlci5jb20vZW5naW5lL3JlZmVyZW5jZS9ydW4vKS4gVmFsaWQgbmFtaW5nIHZhbHVlcyBhcmUgZGlzcGxheWVkIGluIHRoZSBbVWxpbWl0XShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX1VsaW1pdC5odG1sKSBkYXRhIHR5cGUuIFRoaXMgcGFyYW1ldGVyIHJlcXVpcmVzIHZlcnNpb24gMS4xOCBvZiB0aGUgRG9ja2VyIFJlbW90ZSBBUEkgb3IgZ3JlYXRlciBvbiB5b3VyIGNvbnRhaW5lciBpbnN0YW5jZS4gVG8gY2hlY2sgdGhlIERvY2tlciBSZW1vdGUgQVBJIHZlcnNpb24gb24geW91ciBjb250YWluZXIgaW5zdGFuY2UsIGxvZyBpbiB0byB5b3VyIGNvbnRhaW5lciBpbnN0YW5jZSBhbmQgcnVuIHRoZSBmb2xsb3dpbmcgY29tbWFuZDogYGBzdWRvIGRvY2tlciB2ZXJzaW9uIC0tZm9ybWF0ICd7ey5TZXJ2ZXIuQVBJVmVyc2lvbn19J2BgXG4gKiAgIFRoaXMgcGFyYW1ldGVyIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIFdpbmRvd3MgY29udGFpbmVycy5cbiAqL1xuVWxpbWl0cz86IFVsaW1pdFtdXG4vKipcbiAqIFRpbWUgZHVyYXRpb24gKGluIHNlY29uZHMpIHRvIHdhaXQgYmVmb3JlIHRoZSBjb250YWluZXIgaXMgZm9yY2VmdWxseSBraWxsZWQgaWYgaXQgZG9lc24ndCBleGl0IG5vcm1hbGx5IG9uIGl0cyBvd24uXG4gKiAgRm9yIHRhc2tzIHVzaW5nIHRoZSBGYXJnYXRlIGxhdW5jaCB0eXBlLCB0aGUgdGFzayBvciBzZXJ2aWNlIHJlcXVpcmVzIHRoZSBmb2xsb3dpbmcgcGxhdGZvcm1zOlxuICogICArICBMaW51eCBwbGF0Zm9ybSB2ZXJzaW9uIGBgMS4zLjBgYCBvciBsYXRlci5cbiAqICAgKyAgV2luZG93cyBwbGF0Zm9ybSB2ZXJzaW9uIGBgMS4wLjBgYCBvciBsYXRlci5cbiAqICAgXG4gKiAgRm9yIHRhc2tzIHRoYXQgdXNlIHRoZSBGYXJnYXRlIGxhdW5jaCB0eXBlLCB0aGUgbWF4IHN0b3AgdGltZW91dCB2YWx1ZSBpcyAxMjAgc2Vjb25kcyBhbmQgaWYgdGhlIHBhcmFtZXRlciBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgZGVmYXVsdCB2YWx1ZSBvZiAzMCBzZWNvbmRzIGlzIHVzZWQuXG4gKiAgRm9yIHRhc2tzIHRoYXQgdXNlIHRoZSBFQzIgbGF1bmNoIHR5cGUsIGlmIHRoZSBgYHN0b3BUaW1lb3V0YGAgcGFyYW1ldGVyIGlzbid0IHNwZWNpZmllZCwgdGhlIHZhbHVlIHNldCBmb3IgdGhlIEFtYXpvbiBFQ1MgY29udGFpbmVyIGFnZW50IGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgYGBFQ1NfQ09OVEFJTkVSX1NUT1BfVElNRU9VVGBgIGlzIHVzZWQuIElmIG5laXRoZXIgdGhlIGBgc3RvcFRpbWVvdXRgYCBwYXJhbWV0ZXIgb3IgdGhlIGBgRUNTX0NPTlRBSU5FUl9TVE9QX1RJTUVPVVRgYCBhZ2VudCBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGFyZSBzZXQsIHRoZW4gdGhlIGRlZmF1bHQgdmFsdWVzIG9mIDMwIHNlY29uZHMgZm9yIExpbnV4IGNvbnRhaW5lcnMgYW5kIDMwIHNlY29uZHMgb24gV2luZG93cyBjb250YWluZXJzIGFyZSB1c2VkLiBZb3VyIGNvbnRhaW5lciBpbnN0YW5jZXMgcmVxdWlyZSBhdCBsZWFzdCB2ZXJzaW9uIDEuMjYuMCBvZiB0aGUgY29udGFpbmVyIGFnZW50IHRvIHVzZSBhIGNvbnRhaW5lciBzdG9wIHRpbWVvdXQgdmFsdWUuIEhvd2V2ZXIsIHdlIHJlY29tbWVuZCB1c2luZyB0aGUgbGF0ZXN0IGNvbnRhaW5lciBhZ2VudCB2ZXJzaW9uLiBGb3IgaW5mb3JtYXRpb24gYWJvdXQgY2hlY2tpbmcgeW91ciBhZ2VudCB2ZXJzaW9uIGFuZCB1cGRhdGluZyB0byB0aGUgbGF0ZXN0IHZlcnNpb24sIHNlZSBbVXBkYXRpbmcgdGhlIEFtYXpvbiBFQ1MgQ29udGFpbmVyIEFnZW50XShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9lY3MtYWdlbnQtdXBkYXRlLmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi4gSWYgeW91J3JlIHVzaW5nIGFuIEFtYXpvbiBFQ1Mtb3B0aW1pemVkIExpbnV4IEFNSSwgeW91ciBpbnN0YW5jZSBuZWVkcyBhdCBsZWFzdCB2ZXJzaW9uIDEuMjYuMC0xIG9mIHRoZSBgYGVjcy1pbml0YGAgcGFja2FnZS4gSWYgeW91ciBjb250YWluZXIgaW5zdGFuY2VzIGFyZSBsYXVuY2hlZCBmcm9tIHZlcnNpb24gYGAyMDE5MDMwMWBgIG9yIGxhdGVyLCB0aGVuIHRoZXkgY29udGFpbiB0aGUgcmVxdWlyZWQgdmVyc2lvbnMgb2YgdGhlIGNvbnRhaW5lciBhZ2VudCBhbmQgYGBlY3MtaW5pdGBgLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtBbWF6b24gRUNTLW9wdGltaXplZCBMaW51eCBBTUldKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2Vjcy1vcHRpbWl6ZWRfQU1JLmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqICBUaGUgdmFsaWQgdmFsdWVzIGZvciBGYXJnYXRlIGFyZSAyLTEyMCBzZWNvbmRzLlxuICovXG5TdG9wVGltZW91dD86IG51bWJlclxuLyoqXG4gKiBUaGUgd29ya2luZyBkaXJlY3RvcnkgdG8gcnVuIGNvbW1hbmRzIGluc2lkZSB0aGUgY29udGFpbmVyIGluLiBUaGlzIHBhcmFtZXRlciBtYXBzIHRvIGBgV29ya2luZ0RpcmBgIGluIHRoZSBkb2NrZXIgY29udGFpbmVyIGNyZWF0ZSBjb21tYW5kIGFuZCB0aGUgYGAtLXdvcmtkaXJgYCBvcHRpb24gdG8gZG9ja2VyIHJ1bi5cbiAqL1xuV29ya2luZ0RpcmVjdG9yeT86IHN0cmluZ1xuLyoqXG4gKiBUaGUgc29mdCBsaW1pdCAoaW4gTWlCKSBvZiBtZW1vcnkgdG8gcmVzZXJ2ZSBmb3IgdGhlIGNvbnRhaW5lci4gV2hlbiBzeXN0ZW0gbWVtb3J5IGlzIHVuZGVyIGhlYXZ5IGNvbnRlbnRpb24sIERvY2tlciBhdHRlbXB0cyB0byBrZWVwIHRoZSBjb250YWluZXIgbWVtb3J5IHRvIHRoaXMgc29mdCBsaW1pdC4gSG93ZXZlciwgeW91ciBjb250YWluZXIgY2FuIGNvbnN1bWUgbW9yZSBtZW1vcnkgd2hlbiBpdCBuZWVkcyB0bywgdXAgdG8gZWl0aGVyIHRoZSBoYXJkIGxpbWl0IHNwZWNpZmllZCB3aXRoIHRoZSBgYG1lbW9yeWBgIHBhcmFtZXRlciAoaWYgYXBwbGljYWJsZSksIG9yIGFsbCBvZiB0aGUgYXZhaWxhYmxlIG1lbW9yeSBvbiB0aGUgY29udGFpbmVyIGluc3RhbmNlLCB3aGljaGV2ZXIgY29tZXMgZmlyc3QuIFRoaXMgcGFyYW1ldGVyIG1hcHMgdG8gYGBNZW1vcnlSZXNlcnZhdGlvbmBgIGluIHRoZSBkb2NrZXIgY29udGFpbmVyIGNyZWF0ZSBjb21tYW5kIGFuZCB0aGUgYGAtLW1lbW9yeS1yZXNlcnZhdGlvbmBgIG9wdGlvbiB0byBkb2NrZXIgcnVuLlxuICogIElmIGEgdGFzay1sZXZlbCBtZW1vcnkgdmFsdWUgaXMgbm90IHNwZWNpZmllZCwgeW91IG11c3Qgc3BlY2lmeSBhIG5vbi16ZXJvIGludGVnZXIgZm9yIG9uZSBvciBib3RoIG9mIGBgbWVtb3J5YGAgb3IgYGBtZW1vcnlSZXNlcnZhdGlvbmBgIGluIGEgY29udGFpbmVyIGRlZmluaXRpb24uIElmIHlvdSBzcGVjaWZ5IGJvdGgsIGBgbWVtb3J5YGAgbXVzdCBiZSBncmVhdGVyIHRoYW4gYGBtZW1vcnlSZXNlcnZhdGlvbmBgLiBJZiB5b3Ugc3BlY2lmeSBgYG1lbW9yeVJlc2VydmF0aW9uYGAsIHRoZW4gdGhhdCB2YWx1ZSBpcyBzdWJ0cmFjdGVkIGZyb20gdGhlIGF2YWlsYWJsZSBtZW1vcnkgcmVzb3VyY2VzIGZvciB0aGUgY29udGFpbmVyIGluc3RhbmNlIHdoZXJlIHRoZSBjb250YWluZXIgaXMgcGxhY2VkLiBPdGhlcndpc2UsIHRoZSB2YWx1ZSBvZiBgYG1lbW9yeWBgIGlzIHVzZWQuXG4gKiAgRm9yIGV4YW1wbGUsIGlmIHlvdXIgY29udGFpbmVyIG5vcm1hbGx5IHVzZXMgMTI4IE1pQiBvZiBtZW1vcnksIGJ1dCBvY2Nhc2lvbmFsbHkgYnVyc3RzIHRvIDI1NiBNaUIgb2YgbWVtb3J5IGZvciBzaG9ydCBwZXJpb2RzIG9mIHRpbWUsIHlvdSBjYW4gc2V0IGEgYGBtZW1vcnlSZXNlcnZhdGlvbmBgIG9mIDEyOCBNaUIsIGFuZCBhIGBgbWVtb3J5YGAgaGFyZCBsaW1pdCBvZiAzMDAgTWlCLiBUaGlzIGNvbmZpZ3VyYXRpb24gd291bGQgYWxsb3cgdGhlIGNvbnRhaW5lciB0byBvbmx5IHJlc2VydmUgMTI4IE1pQiBvZiBtZW1vcnkgZnJvbSB0aGUgcmVtYWluaW5nIHJlc291cmNlcyBvbiB0aGUgY29udGFpbmVyIGluc3RhbmNlLCBidXQgYWxzbyBhbGxvdyB0aGUgY29udGFpbmVyIHRvIGNvbnN1bWUgbW9yZSBtZW1vcnkgcmVzb3VyY2VzIHdoZW4gbmVlZGVkLlxuICogIFRoZSBEb2NrZXIgMjAuMTAuMCBvciBsYXRlciBkYWVtb24gcmVzZXJ2ZXMgYSBtaW5pbXVtIG9mIDYgTWlCIG9mIG1lbW9yeSBmb3IgYSBjb250YWluZXIuIFNvLCBkb24ndCBzcGVjaWZ5IGxlc3MgdGhhbiA2IE1pQiBvZiBtZW1vcnkgZm9yIHlvdXIgY29udGFpbmVycy4gXG4gKiAgVGhlIERvY2tlciAxOS4wMy4xMy1jZSBvciBlYXJsaWVyIGRhZW1vbiByZXNlcnZlcyBhIG1pbmltdW0gb2YgNCBNaUIgb2YgbWVtb3J5IGZvciBhIGNvbnRhaW5lci4gU28sIGRvbid0IHNwZWNpZnkgbGVzcyB0aGFuIDQgTWlCIG9mIG1lbW9yeSBmb3IgeW91ciBjb250YWluZXJzLlxuICovXG5NZW1vcnlSZXNlcnZhdGlvbj86IG51bWJlclxuUmVwb3NpdG9yeUNyZWRlbnRpYWxzPzogUmVwb3NpdG9yeUNyZWRlbnRpYWxzXG4vKipcbiAqIEEgbGlzdCBvZiBob3N0bmFtZXMgYW5kIElQIGFkZHJlc3MgbWFwcGluZ3MgdG8gYXBwZW5kIHRvIHRoZSBgYC9ldGMvaG9zdHNgYCBmaWxlIG9uIHRoZSBjb250YWluZXIuIFRoaXMgcGFyYW1ldGVyIG1hcHMgdG8gYGBFeHRyYUhvc3RzYGAgaW4gdGhlIGRvY2tlciBjb250YWluZXIgY3JlYXRlIGNvbW1hbmQgYW5kIHRoZSBgYC0tYWRkLWhvc3RgYCBvcHRpb24gdG8gZG9ja2VyIHJ1bi5cbiAqICAgVGhpcyBwYXJhbWV0ZXIgaXNuJ3Qgc3VwcG9ydGVkIGZvciBXaW5kb3dzIGNvbnRhaW5lcnMgb3IgdGFza3MgdGhhdCB1c2UgdGhlIGBgYXdzdnBjYGAgbmV0d29yayBtb2RlLlxuICovXG5FeHRyYUhvc3RzPzogSG9zdEVudHJ5W11cbi8qKlxuICogVGhlIGhvc3RuYW1lIHRvIHVzZSBmb3IgeW91ciBjb250YWluZXIuIFRoaXMgcGFyYW1ldGVyIG1hcHMgdG8gYGBIb3N0bmFtZWBgIGluIHRoZSBkb2NrZXIgY29udGFpbmVyIGNyZWF0ZSBjb21tYW5kIGFuZCB0aGUgYGAtLWhvc3RuYW1lYGAgb3B0aW9uIHRvIGRvY2tlciBydW4uXG4gKiAgIFRoZSBgYGhvc3RuYW1lYGAgcGFyYW1ldGVyIGlzIG5vdCBzdXBwb3J0ZWQgaWYgeW91J3JlIHVzaW5nIHRoZSBgYGF3c3ZwY2BgIG5ldHdvcmsgbW9kZS5cbiAqL1xuSG9zdG5hbWU/OiBzdHJpbmdcbkxpbnV4UGFyYW1ldGVycz86IExpbnV4UGFyYW1ldGVyc1xuLyoqXG4gKiBTcGVjaWZpZXMgd2hldGhlciBBbWF6b24gRUNTIHdpbGwgcmVzb2x2ZSB0aGUgY29udGFpbmVyIGltYWdlIHRhZyBwcm92aWRlZCBpbiB0aGUgY29udGFpbmVyIGRlZmluaXRpb24gdG8gYW4gaW1hZ2UgZGlnZXN0LiBCeSBkZWZhdWx0LCB0aGUgdmFsdWUgaXMgYGBlbmFibGVkYGAuIElmIHlvdSBzZXQgdGhlIHZhbHVlIGZvciBhIGNvbnRhaW5lciBhcyBgYGRpc2FibGVkYGAsIEFtYXpvbiBFQ1Mgd2lsbCBub3QgcmVzb2x2ZSB0aGUgcHJvdmlkZWQgY29udGFpbmVyIGltYWdlIHRhZyB0byBhIGRpZ2VzdCBhbmQgd2lsbCB1c2UgdGhlIG9yaWdpbmFsIGltYWdlIFVSSSBzcGVjaWZpZWQgaW4gdGhlIGNvbnRhaW5lciBkZWZpbml0aW9uIGZvciBkZXBsb3ltZW50LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBjb250YWluZXIgaW1hZ2UgcmVzb2x1dGlvbiwgc2VlIFtDb250YWluZXIgaW1hZ2UgcmVzb2x1dGlvbl0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvZGVwbG95bWVudC10eXBlLWVjcy5odG1sI2RlcGxveW1lbnQtY29udGFpbmVyLWltYWdlLXN0YWJpbGl0eSkgaW4gdGhlICpBbWF6b24gRUNTIERldmVsb3BlciBHdWlkZSouXG4gKi9cblZlcnNpb25Db25zaXN0ZW5jeT86IChcImVuYWJsZWRcIiB8IFwiZGlzYWJsZWRcIilcblJlc3RhcnRQb2xpY3k/OiBSZXN0YXJ0UG9saWN5XG4vKipcbiAqIFdoZW4gdGhpcyBwYXJhbWV0ZXIgaXMgdHJ1ZSwgbmV0d29ya2luZyBpcyBvZmYgd2l0aGluIHRoZSBjb250YWluZXIuIFRoaXMgcGFyYW1ldGVyIG1hcHMgdG8gYGBOZXR3b3JrRGlzYWJsZWRgYCBpbiB0aGUgZG9ja2VyIGNvbnRhaW5lciBjcmVhdGUgY29tbWFuZC5cbiAqICAgVGhpcyBwYXJhbWV0ZXIgaXMgbm90IHN1cHBvcnRlZCBmb3IgV2luZG93cyBjb250YWluZXJzLlxuICovXG5EaXNhYmxlTmV0d29ya2luZz86IGJvb2xlYW5cbi8qKlxuICogV2hlbiB0aGlzIHBhcmFtZXRlciBpcyBgYHRydWVgYCwgYSBUVFkgaXMgYWxsb2NhdGVkLiBUaGlzIHBhcmFtZXRlciBtYXBzIHRvIGBgVHR5YGAgaW4gdGhlIGRvY2tlciBjb250YWluZXIgY3JlYXRlIGNvbW1hbmQgYW5kIHRoZSBgYC0tdHR5YGAgb3B0aW9uIHRvIGRvY2tlciBydW4uXG4gKi9cblBzZXVkb1Rlcm1pbmFsPzogYm9vbGVhblxuLyoqXG4gKiBUaGUgbW91bnQgcG9pbnRzIGZvciBkYXRhIHZvbHVtZXMgaW4geW91ciBjb250YWluZXIuXG4gKiAgVGhpcyBwYXJhbWV0ZXIgbWFwcyB0byBgYFZvbHVtZXNgYCBpbiB0aGUgZG9ja2VyIGNvbnRhaW5lciBjcmVhdGUgY29tbWFuZCBhbmQgdGhlIGBgLS12b2x1bWVgYCBvcHRpb24gdG8gZG9ja2VyIHJ1bi5cbiAqICBXaW5kb3dzIGNvbnRhaW5lcnMgY2FuIG1vdW50IHdob2xlIGRpcmVjdG9yaWVzIG9uIHRoZSBzYW1lIGRyaXZlIGFzIGBgJGVudjpQcm9ncmFtRGF0YWBgLiBXaW5kb3dzIGNvbnRhaW5lcnMgY2FuJ3QgbW91bnQgZGlyZWN0b3JpZXMgb24gYSBkaWZmZXJlbnQgZHJpdmUsIGFuZCBtb3VudCBwb2ludCBjYW4ndCBiZSBhY3Jvc3MgZHJpdmVzLlxuICovXG5Nb3VudFBvaW50cz86IE1vdW50UG9pbnRbXVxuLyoqXG4gKiBUaGUgZGVwZW5kZW5jaWVzIGRlZmluZWQgZm9yIGNvbnRhaW5lciBzdGFydHVwIGFuZCBzaHV0ZG93bi4gQSBjb250YWluZXIgY2FuIGNvbnRhaW4gbXVsdGlwbGUgZGVwZW5kZW5jaWVzLiBXaGVuIGEgZGVwZW5kZW5jeSBpcyBkZWZpbmVkIGZvciBjb250YWluZXIgc3RhcnR1cCwgZm9yIGNvbnRhaW5lciBzaHV0ZG93biBpdCBpcyByZXZlcnNlZC5cbiAqICBGb3IgdGFza3MgdXNpbmcgdGhlIEVDMiBsYXVuY2ggdHlwZSwgdGhlIGNvbnRhaW5lciBpbnN0YW5jZXMgcmVxdWlyZSBhdCBsZWFzdCB2ZXJzaW9uIDEuMjYuMCBvZiB0aGUgY29udGFpbmVyIGFnZW50IHRvIHR1cm4gb24gY29udGFpbmVyIGRlcGVuZGVuY2llcy4gSG93ZXZlciwgd2UgcmVjb21tZW5kIHVzaW5nIHRoZSBsYXRlc3QgY29udGFpbmVyIGFnZW50IHZlcnNpb24uIEZvciBpbmZvcm1hdGlvbiBhYm91dCBjaGVja2luZyB5b3VyIGFnZW50IHZlcnNpb24gYW5kIHVwZGF0aW5nIHRvIHRoZSBsYXRlc3QgdmVyc2lvbiwgc2VlIFtVcGRhdGluZyB0aGUgQW1hem9uIEVDUyBDb250YWluZXIgQWdlbnRdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2Vjcy1hZ2VudC11cGRhdGUuaHRtbCkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLiBJZiB5b3UncmUgdXNpbmcgYW4gQW1hem9uIEVDUy1vcHRpbWl6ZWQgTGludXggQU1JLCB5b3VyIGluc3RhbmNlIG5lZWRzIGF0IGxlYXN0IHZlcnNpb24gMS4yNi4wLTEgb2YgdGhlIGBgZWNzLWluaXRgYCBwYWNrYWdlLiBJZiB5b3VyIGNvbnRhaW5lciBpbnN0YW5jZXMgYXJlIGxhdW5jaGVkIGZyb20gdmVyc2lvbiBgYDIwMTkwMzAxYGAgb3IgbGF0ZXIsIHRoZW4gdGhleSBjb250YWluIHRoZSByZXF1aXJlZCB2ZXJzaW9ucyBvZiB0aGUgY29udGFpbmVyIGFnZW50IGFuZCBgYGVjcy1pbml0YGAuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0FtYXpvbiBFQ1Mtb3B0aW1pemVkIExpbnV4IEFNSV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvZWNzLW9wdGltaXplZF9BTUkuaHRtbCkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLlxuICogIEZvciB0YXNrcyB1c2luZyB0aGUgRmFyZ2F0ZSBsYXVuY2ggdHlwZSwgdGhlIHRhc2sgb3Igc2VydmljZSByZXF1aXJlcyB0aGUgZm9sbG93aW5nIHBsYXRmb3JtczpcbiAqICAgKyAgTGludXggcGxhdGZvcm0gdmVyc2lvbiBgYDEuMy4wYGAgb3IgbGF0ZXIuXG4gKiAgICsgIFdpbmRvd3MgcGxhdGZvcm0gdmVyc2lvbiBgYDEuMC4wYGAgb3IgbGF0ZXIuXG4gKiAgIFxuICogIElmIHRoZSB0YXNrIGRlZmluaXRpb24gaXMgdXNlZCBpbiBhIGJsdWUvZ3JlZW4gZGVwbG95bWVudCB0aGF0IHVzZXMgW0FXUzo6Q29kZURlcGxveTo6RGVwbG95bWVudEdyb3VwIEJsdWVHcmVlbkRlcGxveW1lbnRDb25maWd1cmF0aW9uXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcHJvcGVydGllcy1jb2RlZGVwbG95LWRlcGxveW1lbnRncm91cC1ibHVlZ3JlZW5kZXBsb3ltZW50Y29uZmlndXJhdGlvbi5odG1sKSwgdGhlIGBgZGVwZW5kc09uYGAgcGFyYW1ldGVyIGlzIG5vdCBzdXBwb3J0ZWQuIEZvciBtb3JlIGluZm9ybWF0aW9uIHNlZSBbSXNzdWUgIzY4MF0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2h0dHBzOi8vZ2l0aHViLmNvbS9hd3MtY2xvdWRmb3JtYXRpb24vY2xvdWRmb3JtYXRpb24tY292ZXJhZ2Utcm9hZG1hcC9pc3N1ZXMvNjgwKSBvbiB0aGUgb24gdGhlIEdpdEh1YiB3ZWJzaXRlLlxuICovXG5EZXBlbmRzT24/OiBDb250YWluZXJEZXBlbmRlbmN5W11cbi8qKlxuICogQSBrZXkvdmFsdWUgbWFwIG9mIGxhYmVscyB0byBhZGQgdG8gdGhlIGNvbnRhaW5lci4gVGhpcyBwYXJhbWV0ZXIgbWFwcyB0byBgYExhYmVsc2BgIGluIHRoZSBkb2NrZXIgY29udGFpbmVyIGNyZWF0ZSBjb21tYW5kIGFuZCB0aGUgYGAtLWxhYmVsYGAgb3B0aW9uIHRvIGRvY2tlciBydW4uIFRoaXMgcGFyYW1ldGVyIHJlcXVpcmVzIHZlcnNpb24gMS4xOCBvZiB0aGUgRG9ja2VyIFJlbW90ZSBBUEkgb3IgZ3JlYXRlciBvbiB5b3VyIGNvbnRhaW5lciBpbnN0YW5jZS4gVG8gY2hlY2sgdGhlIERvY2tlciBSZW1vdGUgQVBJIHZlcnNpb24gb24geW91ciBjb250YWluZXIgaW5zdGFuY2UsIGxvZyBpbiB0byB5b3VyIGNvbnRhaW5lciBpbnN0YW5jZSBhbmQgcnVuIHRoZSBmb2xsb3dpbmcgY29tbWFuZDogYGBzdWRvIGRvY2tlciB2ZXJzaW9uIC0tZm9ybWF0ICd7ey5TZXJ2ZXIuQVBJVmVyc2lvbn19J2BgXG4gKi9cbkRvY2tlckxhYmVscz86IHtcbi8qKlxuICogVGhpcyBpbnRlcmZhY2Ugd2FzIHJlZmVyZW5jZWQgYnkgYHVuZGVmaW5lZGAncyBKU09OLVNjaGVtYSBkZWZpbml0aW9uXG4gKiB2aWEgdGhlIGBwYXR0ZXJuUHJvcGVydHlgIFwiLnsxLH1cIi5cbiAqL1xuW2s6IHN0cmluZ106IHN0cmluZ1xufVxuLyoqXG4gKiBUaGUgbGlzdCBvZiBwb3J0IG1hcHBpbmdzIGZvciB0aGUgY29udGFpbmVyLiBQb3J0IG1hcHBpbmdzIGFsbG93IGNvbnRhaW5lcnMgdG8gYWNjZXNzIHBvcnRzIG9uIHRoZSBob3N0IGNvbnRhaW5lciBpbnN0YW5jZSB0byBzZW5kIG9yIHJlY2VpdmUgdHJhZmZpYy5cbiAqICBGb3IgdGFzayBkZWZpbml0aW9ucyB0aGF0IHVzZSB0aGUgYGBhd3N2cGNgYCBuZXR3b3JrIG1vZGUsIHlvdSBzaG91bGQgb25seSBzcGVjaWZ5IHRoZSBgYGNvbnRhaW5lclBvcnRgYC4gVGhlIGBgaG9zdFBvcnRgYCBjYW4gYmUgbGVmdCBibGFuayBvciBpdCBtdXN0IGJlIHRoZSBzYW1lIHZhbHVlIGFzIHRoZSBgYGNvbnRhaW5lclBvcnRgYC5cbiAqICBQb3J0IG1hcHBpbmdzIG9uIFdpbmRvd3MgdXNlIHRoZSBgYE5ldE5BVGBgIGdhdGV3YXkgYWRkcmVzcyByYXRoZXIgdGhhbiBgYGxvY2FsaG9zdGBgLiBUaGVyZSBpcyBubyBsb29wYmFjayBmb3IgcG9ydCBtYXBwaW5ncyBvbiBXaW5kb3dzLCBzbyB5b3UgY2Fubm90IGFjY2VzcyBhIGNvbnRhaW5lcidzIG1hcHBlZCBwb3J0IGZyb20gdGhlIGhvc3QgaXRzZWxmLiBcbiAqICBUaGlzIHBhcmFtZXRlciBtYXBzIHRvIGBgUG9ydEJpbmRpbmdzYGAgaW4gdGhlIFtDcmVhdGUgYSBjb250YWluZXJdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9odHRwczovL2RvY3MuZG9ja2VyLmNvbS9lbmdpbmUvYXBpL3YxLjM1LyNvcGVyYXRpb24vQ29udGFpbmVyQ3JlYXRlKSBzZWN0aW9uIG9mIHRoZSBbRG9ja2VyIFJlbW90ZSBBUEldKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9odHRwczovL2RvY3MuZG9ja2VyLmNvbS9lbmdpbmUvYXBpL3YxLjM1LykgYW5kIHRoZSBgYC0tcHVibGlzaGBgIG9wdGlvbiB0byBbZG9ja2VyIHJ1bl0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2h0dHBzOi8vZG9jcy5kb2NrZXIuY29tL2VuZ2luZS9yZWZlcmVuY2UvcnVuLykuIElmIHRoZSBuZXR3b3JrIG1vZGUgb2YgYSB0YXNrIGRlZmluaXRpb24gaXMgc2V0IHRvIGBgbm9uZWBgLCB0aGVuIHlvdSBjYW4ndCBzcGVjaWZ5IHBvcnQgbWFwcGluZ3MuIElmIHRoZSBuZXR3b3JrIG1vZGUgb2YgYSB0YXNrIGRlZmluaXRpb24gaXMgc2V0IHRvIGBgaG9zdGBgLCB0aGVuIGhvc3QgcG9ydHMgbXVzdCBlaXRoZXIgYmUgdW5kZWZpbmVkIG9yIHRoZXkgbXVzdCBtYXRjaCB0aGUgY29udGFpbmVyIHBvcnQgaW4gdGhlIHBvcnQgbWFwcGluZy5cbiAqICAgQWZ0ZXIgYSB0YXNrIHJlYWNoZXMgdGhlIGBgUlVOTklOR2BgIHN0YXR1cywgbWFudWFsIGFuZCBhdXRvbWF0aWMgaG9zdCBhbmQgY29udGFpbmVyIHBvcnQgYXNzaWdubWVudHMgYXJlIHZpc2libGUgaW4gdGhlICpOZXR3b3JrIEJpbmRpbmdzKiBzZWN0aW9uIG9mIGEgY29udGFpbmVyIGRlc2NyaXB0aW9uIGZvciBhIHNlbGVjdGVkIHRhc2sgaW4gdGhlIEFtYXpvbiBFQ1MgY29uc29sZS4gVGhlIGFzc2lnbm1lbnRzIGFyZSBhbHNvIHZpc2libGUgaW4gdGhlIGBgbmV0d29ya0JpbmRpbmdzYGAgc2VjdGlvbiBbRGVzY3JpYmVUYXNrc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9EZXNjcmliZVRhc2tzLmh0bWwpIHJlc3BvbnNlcy5cbiAqL1xuUG9ydE1hcHBpbmdzPzogUG9ydE1hcHBpbmdbXVxuLyoqXG4gKiBUaGUgY29tbWFuZCB0aGF0J3MgcGFzc2VkIHRvIHRoZSBjb250YWluZXIuIFRoaXMgcGFyYW1ldGVyIG1hcHMgdG8gYGBDbWRgYCBpbiB0aGUgZG9ja2VyIGNvbnRhaW5lciBjcmVhdGUgY29tbWFuZCBhbmQgdGhlIGBgQ09NTUFORGBgIHBhcmFtZXRlciB0byBkb2NrZXIgcnVuLiBJZiB0aGVyZSBhcmUgbXVsdGlwbGUgYXJndW1lbnRzLCBlYWNoIGFyZ3VtZW50IGlzIGEgc2VwYXJhdGVkIHN0cmluZyBpbiB0aGUgYXJyYXkuXG4gKi9cbkNvbW1hbmQ/OiBzdHJpbmdbXVxuLyoqXG4gKiBUaGUgZW52aXJvbm1lbnQgdmFyaWFibGVzIHRvIHBhc3MgdG8gYSBjb250YWluZXIuIFRoaXMgcGFyYW1ldGVyIG1hcHMgdG8gYGBFbnZgYCBpbiB0aGUgZG9ja2VyIGNvbnRhaW5lciBjcmVhdGUgY29tbWFuZCBhbmQgdGhlIGBgLS1lbnZgYCBvcHRpb24gdG8gZG9ja2VyIHJ1bi5cbiAqICAgV2UgZG9uJ3QgcmVjb21tZW5kIHRoYXQgeW91IHVzZSBwbGFpbnRleHQgZW52aXJvbm1lbnQgdmFyaWFibGVzIGZvciBzZW5zaXRpdmUgaW5mb3JtYXRpb24sIHN1Y2ggYXMgY3JlZGVudGlhbCBkYXRhLlxuICovXG5FbnZpcm9ubWVudD86IEtleVZhbHVlUGFpcltdXG4vKipcbiAqIFRoZSBgYGxpbmtzYGAgcGFyYW1ldGVyIGFsbG93cyBjb250YWluZXJzIHRvIGNvbW11bmljYXRlIHdpdGggZWFjaCBvdGhlciB3aXRob3V0IHRoZSBuZWVkIGZvciBwb3J0IG1hcHBpbmdzLiBUaGlzIHBhcmFtZXRlciBpcyBvbmx5IHN1cHBvcnRlZCBpZiB0aGUgbmV0d29yayBtb2RlIG9mIGEgdGFzayBkZWZpbml0aW9uIGlzIGBgYnJpZGdlYGAuIFRoZSBgYG5hbWU6aW50ZXJuYWxOYW1lYGAgY29uc3RydWN0IGlzIGFuYWxvZ291cyB0byBgYG5hbWU6YWxpYXNgYCBpbiBEb2NrZXIgbGlua3MuIFVwIHRvIDI1NSBsZXR0ZXJzICh1cHBlcmNhc2UgYW5kIGxvd2VyY2FzZSksIG51bWJlcnMsIHVuZGVyc2NvcmVzLCBhbmQgaHlwaGVucyBhcmUgYWxsb3dlZC4uIFRoaXMgcGFyYW1ldGVyIG1hcHMgdG8gYGBMaW5rc2BgIGluIHRoZSBkb2NrZXIgY29udGFpbmVyIGNyZWF0ZSBjb21tYW5kIGFuZCB0aGUgYGAtLWxpbmtgYCBvcHRpb24gdG8gZG9ja2VyIHJ1bi5cbiAqICAgVGhpcyBwYXJhbWV0ZXIgaXMgbm90IHN1cHBvcnRlZCBmb3IgV2luZG93cyBjb250YWluZXJzLlxuICogICAgQ29udGFpbmVycyB0aGF0IGFyZSBjb2xsb2NhdGVkIG9uIGEgc2luZ2xlIGNvbnRhaW5lciBpbnN0YW5jZSBtYXkgYmUgYWJsZSB0byBjb21tdW5pY2F0ZSB3aXRoIGVhY2ggb3RoZXIgd2l0aG91dCByZXF1aXJpbmcgbGlua3Mgb3IgaG9zdCBwb3J0IG1hcHBpbmdzLiBOZXR3b3JrIGlzb2xhdGlvbiBpcyBhY2hpZXZlZCBvbiB0aGUgY29udGFpbmVyIGluc3RhbmNlIHVzaW5nIHNlY3VyaXR5IGdyb3VwcyBhbmQgVlBDIHNldHRpbmdzLlxuICovXG5MaW5rcz86IHN0cmluZ1tdXG59XG4vKipcbiAqIEFuIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIHNlY3JldCB0byBleHBvc2UgdG8geW91ciBjb250YWluZXIuIFNlY3JldHMgY2FuIGJlIGV4cG9zZWQgdG8gYSBjb250YWluZXIgaW4gdGhlIGZvbGxvd2luZyB3YXlzOlxuICogICArICBUbyBpbmplY3Qgc2Vuc2l0aXZlIGRhdGEgaW50byB5b3VyIGNvbnRhaW5lcnMgYXMgZW52aXJvbm1lbnQgdmFyaWFibGVzLCB1c2UgdGhlIGBgc2VjcmV0c2BgIGNvbnRhaW5lciBkZWZpbml0aW9uIHBhcmFtZXRlci5cbiAqICAgKyAgVG8gcmVmZXJlbmNlIHNlbnNpdGl2ZSBpbmZvcm1hdGlvbiBpbiB0aGUgbG9nIGNvbmZpZ3VyYXRpb24gb2YgYSBjb250YWluZXIsIHVzZSB0aGUgYGBzZWNyZXRPcHRpb25zYGAgY29udGFpbmVyIGRlZmluaXRpb24gcGFyYW1ldGVyLlxuICogICBcbiAqICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtTcGVjaWZ5aW5nIHNlbnNpdGl2ZSBkYXRhXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9zcGVjaWZ5aW5nLXNlbnNpdGl2ZS1kYXRhLmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZWNyZXQge1xuLyoqXG4gKiBUaGUgc2VjcmV0IHRvIGV4cG9zZSB0byB0aGUgY29udGFpbmVyLiBUaGUgc3VwcG9ydGVkIHZhbHVlcyBhcmUgZWl0aGVyIHRoZSBmdWxsIEFSTiBvZiB0aGUgQVNNbG9uZyBzZWNyZXQgb3IgdGhlIGZ1bGwgQVJOIG9mIHRoZSBwYXJhbWV0ZXIgaW4gdGhlIFNTTSBQYXJhbWV0ZXIgU3RvcmUuXG4gKiAgRm9yIGluZm9ybWF0aW9uIGFib3V0IHRoZSByZXF1aXJlIElBTWxvbmcgcGVybWlzc2lvbnMsIHNlZSBbUmVxdWlyZWQgSUFNIHBlcm1pc3Npb25zIGZvciBBbWF6b24gRUNTIHNlY3JldHNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3NwZWNpZnlpbmctc2Vuc2l0aXZlLWRhdGEtc2VjcmV0cy5odG1sI3NlY3JldHMtaWFtKSAoZm9yIFNlY3JldHMgTWFuYWdlcikgb3IgW1JlcXVpcmVkIElBTSBwZXJtaXNzaW9ucyBmb3IgQW1hem9uIEVDUyBzZWNyZXRzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9zcGVjaWZ5aW5nLXNlbnNpdGl2ZS1kYXRhLXBhcmFtZXRlcnMuaHRtbCkgKGZvciBTeXN0ZW1zIE1hbmFnZXIgUGFyYW1ldGVyIHN0b3JlKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSouXG4gKiAgIElmIHRoZSBTU00gUGFyYW1ldGVyIFN0b3JlIHBhcmFtZXRlciBleGlzdHMgaW4gdGhlIHNhbWUgUmVnaW9uIGFzIHRoZSB0YXNrIHlvdSdyZSBsYXVuY2hpbmcsIHRoZW4geW91IGNhbiB1c2UgZWl0aGVyIHRoZSBmdWxsIEFSTiBvciBuYW1lIG9mIHRoZSBwYXJhbWV0ZXIuIElmIHRoZSBwYXJhbWV0ZXIgZXhpc3RzIGluIGEgZGlmZmVyZW50IFJlZ2lvbiwgdGhlbiB0aGUgZnVsbCBBUk4gbXVzdCBiZSBzcGVjaWZpZWQuXG4gKi9cblZhbHVlRnJvbTogc3RyaW5nXG4vKipcbiAqIFRoZSBuYW1lIG9mIHRoZSBzZWNyZXQuXG4gKi9cbk5hbWU6IHN0cmluZ1xufVxuLyoqXG4gKiBUaGUgY29udGFpbmVyIGhlYWx0aCBjaGVjayBjb21tYW5kIGFuZCBhc3NvY2lhdGVkIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBmb3IgdGhlIGNvbnRhaW5lci4gVGhpcyBwYXJhbWV0ZXIgbWFwcyB0byBgYEhlYWx0aENoZWNrYGAgaW4gdGhlIGRvY2tlciBjb250YWluZXIgY3JlYXRlIGNvbW1hbmQgYW5kIHRoZSBgYEhFQUxUSENIRUNLYGAgcGFyYW1ldGVyIG9mIGRvY2tlciBydW4uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSGVhbHRoQ2hlY2sge1xuLyoqXG4gKiBBIHN0cmluZyBhcnJheSByZXByZXNlbnRpbmcgdGhlIGNvbW1hbmQgdGhhdCB0aGUgY29udGFpbmVyIHJ1bnMgdG8gZGV0ZXJtaW5lIGlmIGl0IGlzIGhlYWx0aHkuIFRoZSBzdHJpbmcgYXJyYXkgbXVzdCBzdGFydCB3aXRoIGBgQ01EYGAgdG8gcnVuIHRoZSBjb21tYW5kIGFyZ3VtZW50cyBkaXJlY3RseSwgb3IgYGBDTUQtU0hFTExgYCB0byBydW4gdGhlIGNvbW1hbmQgd2l0aCB0aGUgY29udGFpbmVyJ3MgZGVmYXVsdCBzaGVsbC4gXG4gKiAgIFdoZW4geW91IHVzZSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZSBKU09OIHBhbmVsLCB0aGUgQ0xJbG9uZywgb3IgdGhlIEFQSXMsIGVuY2xvc2UgdGhlIGxpc3Qgb2YgY29tbWFuZHMgaW4gZG91YmxlIHF1b3RlcyBhbmQgYnJhY2tldHMuXG4gKiAgIGBgWyBcIkNNRC1TSEVMTFwiLCBcImN1cmwgLWYgaHR0cDovL2xvY2FsaG9zdC8gfHwgZXhpdCAxXCIgXWBgIFxuICogIFlvdSBkb24ndCBpbmNsdWRlIHRoZSBkb3VibGUgcXVvdGVzIGFuZCBicmFja2V0cyB3aGVuIHlvdSB1c2UgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUuXG4gKiAgIGBgQ01ELVNIRUxMLCBjdXJsIC1mIGh0dHA6Ly9sb2NhbGhvc3QvIHx8IGV4aXQgMWBgIFxuICogIEFuIGV4aXQgY29kZSBvZiAwIGluZGljYXRlcyBzdWNjZXNzLCBhbmQgbm9uLXplcm8gZXhpdCBjb2RlIGluZGljYXRlcyBmYWlsdXJlLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIGBgSGVhbHRoQ2hlY2tgYCBpbiB0aGUgZG9ja2VyIGNvbnRhaW5lciBjcmVhdGUgY29tbWFuZC5cbiAqL1xuQ29tbWFuZD86IHN0cmluZ1tdXG4vKipcbiAqIFRoZSB0aW1lIHBlcmlvZCBpbiBzZWNvbmRzIHRvIHdhaXQgZm9yIGEgaGVhbHRoIGNoZWNrIHRvIHN1Y2NlZWQgYmVmb3JlIGl0IGlzIGNvbnNpZGVyZWQgYSBmYWlsdXJlLiBZb3UgbWF5IHNwZWNpZnkgYmV0d2VlbiAyIGFuZCA2MCBzZWNvbmRzLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA1LiBUaGlzIHZhbHVlIGFwcGxpZXMgb25seSB3aGVuIHlvdSBzcGVjaWZ5IGEgYGBjb21tYW5kYGAuXG4gKi9cblRpbWVvdXQ/OiBudW1iZXJcbi8qKlxuICogVGhlIG51bWJlciBvZiB0aW1lcyB0byByZXRyeSBhIGZhaWxlZCBoZWFsdGggY2hlY2sgYmVmb3JlIHRoZSBjb250YWluZXIgaXMgY29uc2lkZXJlZCB1bmhlYWx0aHkuIFlvdSBtYXkgc3BlY2lmeSBiZXR3ZWVuIDEgYW5kIDEwIHJldHJpZXMuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDMuIFRoaXMgdmFsdWUgYXBwbGllcyBvbmx5IHdoZW4geW91IHNwZWNpZnkgYSBgYGNvbW1hbmRgYC5cbiAqL1xuUmV0cmllcz86IG51bWJlclxuLyoqXG4gKiBUaGUgdGltZSBwZXJpb2QgaW4gc2Vjb25kcyBiZXR3ZWVuIGVhY2ggaGVhbHRoIGNoZWNrIGV4ZWN1dGlvbi4gWW91IG1heSBzcGVjaWZ5IGJldHdlZW4gNSBhbmQgMzAwIHNlY29uZHMuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDMwIHNlY29uZHMuIFRoaXMgdmFsdWUgYXBwbGllcyBvbmx5IHdoZW4geW91IHNwZWNpZnkgYSBgYGNvbW1hbmRgYC5cbiAqL1xuSW50ZXJ2YWw/OiBudW1iZXJcbi8qKlxuICogVGhlIG9wdGlvbmFsIGdyYWNlIHBlcmlvZCB0byBwcm92aWRlIGNvbnRhaW5lcnMgdGltZSB0byBib290c3RyYXAgYmVmb3JlIGZhaWxlZCBoZWFsdGggY2hlY2tzIGNvdW50IHRvd2FyZHMgdGhlIG1heGltdW0gbnVtYmVyIG9mIHJldHJpZXMuIFlvdSBjYW4gc3BlY2lmeSBiZXR3ZWVuIDAgYW5kIDMwMCBzZWNvbmRzLiBCeSBkZWZhdWx0LCB0aGUgYGBzdGFydFBlcmlvZGBgIGlzIG9mZi4gVGhpcyB2YWx1ZSBhcHBsaWVzIG9ubHkgd2hlbiB5b3Ugc3BlY2lmeSBhIGBgY29tbWFuZGBgLiBcbiAqICAgSWYgYSBoZWFsdGggY2hlY2sgc3VjY2VlZHMgd2l0aGluIHRoZSBgYHN0YXJ0UGVyaW9kYGAsIHRoZW4gdGhlIGNvbnRhaW5lciBpcyBjb25zaWRlcmVkIGhlYWx0aHkgYW5kIGFueSBzdWJzZXF1ZW50IGZhaWx1cmVzIGNvdW50IHRvd2FyZCB0aGUgbWF4aW11bSBudW1iZXIgb2YgcmV0cmllcy5cbiAqL1xuU3RhcnRQZXJpb2Q/OiBudW1iZXJcbn1cbi8qKlxuICogRGV0YWlscyBvbiBhIGRhdGEgdm9sdW1lIGZyb20gYW5vdGhlciBjb250YWluZXIgaW4gdGhlIHNhbWUgdGFzayBkZWZpbml0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFZvbHVtZUZyb20ge1xuLyoqXG4gKiBJZiB0aGlzIHZhbHVlIGlzIGBgdHJ1ZWBgLCB0aGUgY29udGFpbmVyIGhhcyByZWFkLW9ubHkgYWNjZXNzIHRvIHRoZSB2b2x1bWUuIElmIHRoaXMgdmFsdWUgaXMgYGBmYWxzZWBgLCB0aGVuIHRoZSBjb250YWluZXIgY2FuIHdyaXRlIHRvIHRoZSB2b2x1bWUuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGBgZmFsc2VgYC5cbiAqL1xuUmVhZE9ubHk/OiBib29sZWFuXG4vKipcbiAqIFRoZSBuYW1lIG9mIGFub3RoZXIgY29udGFpbmVyIHdpdGhpbiB0aGUgc2FtZSB0YXNrIGRlZmluaXRpb24gdG8gbW91bnQgdm9sdW1lcyBmcm9tLlxuICovXG5Tb3VyY2VDb250YWluZXI/OiBzdHJpbmdcbn1cbi8qKlxuICogVGhlIGxvZyBjb25maWd1cmF0aW9uIHNwZWNpZmljYXRpb24gZm9yIHRoZSBjb250YWluZXIuXG4gKiAgVGhpcyBwYXJhbWV0ZXIgbWFwcyB0byBgYExvZ0NvbmZpZ2BgIGluIHRoZSBkb2NrZXIgQ3JlYXRlIGEgY29udGFpbmVyIGNvbW1hbmQgYW5kIHRoZSBgYC0tbG9nLWRyaXZlcmBgIG9wdGlvbiB0byBkb2NrZXIgcnVuLiBCeSBkZWZhdWx0LCBjb250YWluZXJzIHVzZSB0aGUgc2FtZSBsb2dnaW5nIGRyaXZlciB0aGF0IHRoZSBEb2NrZXIgZGFlbW9uIHVzZXMuIEhvd2V2ZXIsIHRoZSBjb250YWluZXIgbWF5IHVzZSBhIGRpZmZlcmVudCBsb2dnaW5nIGRyaXZlciB0aGFuIHRoZSBEb2NrZXIgZGFlbW9uIGJ5IHNwZWNpZnlpbmcgYSBsb2cgZHJpdmVyIHdpdGggdGhpcyBwYXJhbWV0ZXIgaW4gdGhlIGNvbnRhaW5lciBkZWZpbml0aW9uLiBUbyB1c2UgYSBkaWZmZXJlbnQgbG9nZ2luZyBkcml2ZXIgZm9yIGEgY29udGFpbmVyLCB0aGUgbG9nIHN5c3RlbSBtdXN0IGJlIGNvbmZpZ3VyZWQgcHJvcGVybHkgb24gdGhlIGNvbnRhaW5lciBpbnN0YW5jZSAob3Igb24gYSBkaWZmZXJlbnQgbG9nIHNlcnZlciBmb3IgcmVtb3RlIGxvZ2dpbmcgb3B0aW9ucykuIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBvcHRpb25zIGZvciBkaWZmZXJlbnQgc3VwcG9ydGVkIGxvZyBkcml2ZXJzLCBzZWUgW0NvbmZpZ3VyZSBsb2dnaW5nIGRyaXZlcnNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9odHRwczovL2RvY3MuZG9ja2VyLmNvbS9lbmdpbmUvYWRtaW4vbG9nZ2luZy9vdmVydmlldy8pIGluIHRoZSBEb2NrZXIgZG9jdW1lbnRhdGlvbi5cbiAqICAgQW1hem9uIEVDUyBjdXJyZW50bHkgc3VwcG9ydHMgYSBzdWJzZXQgb2YgdGhlIGxvZ2dpbmcgZHJpdmVycyBhdmFpbGFibGUgdG8gdGhlIERvY2tlciBkYWVtb24gKHNob3duIGluIHRoZSBbTG9nQ29uZmlndXJhdGlvbl0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9Mb2dDb25maWd1cmF0aW9uLmh0bWwpIGRhdGEgdHlwZSkuIEFkZGl0aW9uYWwgbG9nIGRyaXZlcnMgbWF5IGJlIGF2YWlsYWJsZSBpbiBmdXR1cmUgcmVsZWFzZXMgb2YgdGhlIEFtYXpvbiBFQ1MgY29udGFpbmVyIGFnZW50LlxuICogICBUaGlzIHBhcmFtZXRlciByZXF1aXJlcyB2ZXJzaW9uIDEuMTggb2YgdGhlIERvY2tlciBSZW1vdGUgQVBJIG9yIGdyZWF0ZXIgb24geW91ciBjb250YWluZXIgaW5zdGFuY2UuIFRvIGNoZWNrIHRoZSBEb2NrZXIgUmVtb3RlIEFQSSB2ZXJzaW9uIG9uIHlvdXIgY29udGFpbmVyIGluc3RhbmNlLCBsb2cgaW4gdG8geW91ciBjb250YWluZXIgaW5zdGFuY2UgYW5kIHJ1biB0aGUgZm9sbG93aW5nIGNvbW1hbmQ6IGBgc3VkbyBkb2NrZXIgdmVyc2lvbiAtLWZvcm1hdCAne3suU2VydmVyLkFQSVZlcnNpb259fSdgYFxuICogICBUaGUgQW1hem9uIEVDUyBjb250YWluZXIgYWdlbnQgcnVubmluZyBvbiBhIGNvbnRhaW5lciBpbnN0YW5jZSBtdXN0IHJlZ2lzdGVyIHRoZSBsb2dnaW5nIGRyaXZlcnMgYXZhaWxhYmxlIG9uIHRoYXQgaW5zdGFuY2Ugd2l0aCB0aGUgYGBFQ1NfQVZBSUxBQkxFX0xPR0dJTkdfRFJJVkVSU2BgIGVudmlyb25tZW50IHZhcmlhYmxlIGJlZm9yZSBjb250YWluZXJzIHBsYWNlZCBvbiB0aGF0IGluc3RhbmNlIGNhbiB1c2UgdGhlc2UgbG9nIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbQ29udGFpbmVyIEFnZW50IENvbmZpZ3VyYXRpb25dKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2Vjcy1hZ2VudC1jb25maWcuaHRtbCkgaW4gdGhlICpEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIExvZ0NvbmZpZ3VyYXRpb24ge1xuLyoqXG4gKiBUaGUgc2VjcmV0cyB0byBwYXNzIHRvIHRoZSBsb2cgY29uZmlndXJhdGlvbi4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbU3BlY2lmeWluZyBzZW5zaXRpdmUgZGF0YV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvc3BlY2lmeWluZy1zZW5zaXRpdmUtZGF0YS5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSouXG4gKi9cblNlY3JldE9wdGlvbnM/OiBTZWNyZXRbXVxuLyoqXG4gKiBUaGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHRvIHNlbmQgdG8gdGhlIGxvZyBkcml2ZXIuXG4gKiAgVGhlIG9wdGlvbnMgeW91IGNhbiBzcGVjaWZ5IGRlcGVuZCBvbiB0aGUgbG9nIGRyaXZlci4gU29tZSBvZiB0aGUgb3B0aW9ucyB5b3UgY2FuIHNwZWNpZnkgd2hlbiB5b3UgdXNlIHRoZSBgYGF3c2xvZ3NgYCBsb2cgZHJpdmVyIHRvIHJvdXRlIGxvZ3MgdG8gQW1hem9uIENsb3VkV2F0Y2ggaW5jbHVkZSB0aGUgZm9sbG93aW5nOlxuICogICArIGF3c2xvZ3MtY3JlYXRlLWdyb3VwIFJlcXVpcmVkOiBObyBTcGVjaWZ5IHdoZXRoZXIgeW91IHdhbnQgdGhlIGxvZyBncm91cCB0byBiZSBjcmVhdGVkIGF1dG9tYXRpY2FsbHkuIElmIHRoaXMgb3B0aW9uIGlzbid0IHNwZWNpZmllZCwgaXQgZGVmYXVsdHMgdG8gZmFsc2UuIFlvdXIgSUFNIHBvbGljeSBtdXN0IGluY2x1ZGUgdGhlIGxvZ3M6Q3JlYXRlTG9nR3JvdXAgcGVybWlzc2lvbiBiZWZvcmUgeW91IGF0dGVtcHQgdG8gdXNlIGF3c2xvZ3MtY3JlYXRlLWdyb3VwLiArIGF3c2xvZ3MtcmVnaW9uIFJlcXVpcmVkOiBZZXMgU3BlY2lmeSB0aGUgUmVnaW9uIHRoYXQgdGhlIGF3c2xvZ3MgbG9nIGRyaXZlciBpcyB0byBzZW5kIHlvdXIgRG9ja2VyIGxvZ3MgdG8uIFlvdSBjYW4gY2hvb3NlIHRvIHNlbmQgYWxsIG9mIHlvdXIgbG9ncyBmcm9tIGNsdXN0ZXJzIGluIGRpZmZlcmVudCBSZWdpb25zIHRvIGEgc2luZ2xlIHJlZ2lvbiBpbiBDbG91ZFdhdGNoIExvZ3MuIFRoaXMgaXMgc28gdGhhdCB0aGV5J3JlIGFsbCB2aXNpYmxlIGluIG9uZSBsb2NhdGlvbi4gT3RoZXJ3aXNlLCB5b3UgY2FuIHNlcGFyYXRlIHRoZW0gYnkgUmVnaW9uIGZvciBtb3JlIGdyYW51bGFyaXR5LiBNYWtlIHN1cmUgdGhhdCB0aGUgc3BlY2lmaWVkIGxvZyBncm91cCBleGlzdHMgaW4gdGhlIFJlZ2lvbiB0aGF0IHlvdSBzcGVjaWZ5IHdpdGggdGhpcyBvcHRpb24uICsgYXdzbG9ncy1ncm91cCBSZXF1aXJlZDogWWVzIE1ha2Ugc3VyZSB0byBzcGVjaWZ5IGEgbG9nIGdyb3VwIHRoYXQgdGhlIGF3c2xvZ3MgbG9nIGRyaXZlciBzZW5kcyBpdHMgbG9nIHN0cmVhbXMgdG8uICsgYXdzbG9ncy1zdHJlYW0tcHJlZml4IFJlcXVpcmVkOiBZZXMsIHdoZW4gdXNpbmcgRmFyZ2F0ZS5PcHRpb25hbCB3aGVuIHVzaW5nIEVDMi4gVXNlIHRoZSBhd3Nsb2dzLXN0cmVhbS1wcmVmaXggb3B0aW9uIHRvIGFzc29jaWF0ZSBhIGxvZyBzdHJlYW0gd2l0aCB0aGUgc3BlY2lmaWVkIHByZWZpeCwgdGhlIGNvbnRhaW5lciBuYW1lLCBhbmQgdGhlIElEIG9mIHRoZSBBbWF6b24gRUNTIHRhc2sgdGhhdCB0aGUgY29udGFpbmVyIGJlbG9uZ3MgdG8uIElmIHlvdSBzcGVjaWZ5IGEgcHJlZml4IHdpdGggdGhpcyBvcHRpb24sIHRoZW4gdGhlIGxvZyBzdHJlYW0gdGFrZXMgdGhlIGZvcm1hdCBwcmVmaXgtbmFtZS9jb250YWluZXItbmFtZS9lY3MtdGFzay1pZC4gSWYgeW91IGRvbid0IHNwZWNpZnkgYSBwcmVmaXggd2l0aCB0aGlzIG9wdGlvbiwgdGhlbiB0aGUgbG9nIHN0cmVhbSBpcyBuYW1lZCBhZnRlciB0aGUgY29udGFpbmVyIElEIHRoYXQncyBhc3NpZ25lZCBieSB0aGUgRG9ja2VyIGRhZW1vbiBvbiB0aGUgY29udGFpbmVyIGluc3RhbmNlLiBCZWNhdXNlIGl0J3MgZGlmZmljdWx0IHRvIHRyYWNlIGxvZ3MgYmFjayB0byB0aGUgY29udGFpbmVyIHRoYXQgc2VudCB0aGVtIHdpdGgganVzdCB0aGUgRG9ja2VyIGNvbnRhaW5lciBJRCAod2hpY2ggaXMgb25seSBhdmFpbGFibGUgb24gdGhlIGNvbnRhaW5lciBpbnN0YW5jZSksIHdlIHJlY29tbWVuZCB0aGF0IHlvdSBzcGVjaWZ5IGEgcHJlZml4IHdpdGggdGhpcyBvcHRpb24uIEZvciBBbWF6b24gRUNTIHNlcnZpY2VzLCB5b3UgY2FuIHVzZSB0aGUgc2VydmljZSBuYW1lIGFzIHRoZSBwcmVmaXguIERvaW5nIHNvLCB5b3UgY2FuIHRyYWNlIGxvZyBzdHJlYW1zIHRvIHRoZSBzZXJ2aWNlIHRoYXQgdGhlIGNvbnRhaW5lciBiZWxvbmdzIHRvLCB0aGUgbmFtZSBvZiB0aGUgY29udGFpbmVyIHRoYXQgc2VudCB0aGVtLCBhbmQgdGhlIElEIG9mIHRoZSB0YXNrIHRoYXQgdGhlIGNvbnRhaW5lciBiZWxvbmdzIHRvLiBZb3UgbXVzdCBzcGVjaWZ5IGEgc3RyZWFtLXByZWZpeCBmb3IgeW91ciBsb2dzIHRvIGhhdmUgeW91ciBsb2dzIGFwcGVhciBpbiB0aGUgTG9nIHBhbmUgd2hlbiB1c2luZyB0aGUgQW1hem9uIEVDUyBjb25zb2xlLiArIGF3c2xvZ3MtZGF0ZXRpbWUtZm9ybWF0IFJlcXVpcmVkOiBObyBUaGlzIG9wdGlvbiBkZWZpbmVzIGEgbXVsdGlsaW5lIHN0YXJ0IHBhdHRlcm4gaW4gUHl0aG9uIHN0cmZ0aW1lIGZvcm1hdC4gQSBsb2cgbWVzc2FnZSBjb25zaXN0cyBvZiBhIGxpbmUgdGhhdCBtYXRjaGVzIHRoZSBwYXR0ZXJuIGFuZCBhbnkgZm9sbG93aW5nIGxpbmVzIHRoYXQgZG9u4oCZdCBtYXRjaCB0aGUgcGF0dGVybi4gVGhlIG1hdGNoZWQgbGluZSBpcyB0aGUgZGVsaW1pdGVyIGJldHdlZW4gbG9nIG1lc3NhZ2VzLiBPbmUgZXhhbXBsZSBvZiBhIHVzZSBjYXNlIGZvciB1c2luZyB0aGlzIGZvcm1hdCBpcyBmb3IgcGFyc2luZyBvdXRwdXQgc3VjaCBhcyBhIHN0YWNrIGR1bXAsIHdoaWNoIG1pZ2h0IG90aGVyd2lzZSBiZSBsb2dnZWQgaW4gbXVsdGlwbGUgZW50cmllcy4gVGhlIGNvcnJlY3QgcGF0dGVybiBhbGxvd3MgaXQgdG8gYmUgY2FwdHVyZWQgaW4gYSBzaW5nbGUgZW50cnkuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgYXdzbG9ncy1kYXRldGltZS1mb3JtYXQuIFlvdSBjYW5ub3QgY29uZmlndXJlIGJvdGggdGhlIGF3c2xvZ3MtZGF0ZXRpbWUtZm9ybWF0IGFuZCBhd3Nsb2dzLW11bHRpbGluZS1wYXR0ZXJuIG9wdGlvbnMuIE11bHRpbGluZSBsb2dnaW5nIHBlcmZvcm1zIHJlZ3VsYXIgZXhwcmVzc2lvbiBwYXJzaW5nIGFuZCBtYXRjaGluZyBvZiBhbGwgbG9nIG1lc3NhZ2VzLiBUaGlzIG1pZ2h0IGhhdmUgYSBuZWdhdGl2ZSBpbXBhY3Qgb24gbG9nZ2luZyBwZXJmb3JtYW5jZS4gKyBhd3Nsb2dzLW11bHRpbGluZS1wYXR0ZXJuIFJlcXVpcmVkOiBObyBUaGlzIG9wdGlvbiBkZWZpbmVzIGEgbXVsdGlsaW5lIHN0YXJ0IHBhdHRlcm4gdGhhdCB1c2VzIGEgcmVndWxhciBleHByZXNzaW9uLiBBIGxvZyBtZXNzYWdlIGNvbnNpc3RzIG9mIGEgbGluZSB0aGF0IG1hdGNoZXMgdGhlIHBhdHRlcm4gYW5kIGFueSBmb2xsb3dpbmcgbGluZXMgdGhhdCBkb27igJl0IG1hdGNoIHRoZSBwYXR0ZXJuLiBUaGUgbWF0Y2hlZCBsaW5lIGlzIHRoZSBkZWxpbWl0ZXIgYmV0d2VlbiBsb2cgbWVzc2FnZXMuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgYXdzbG9ncy1tdWx0aWxpbmUtcGF0dGVybi4gVGhpcyBvcHRpb24gaXMgaWdub3JlZCBpZiBhd3Nsb2dzLWRhdGV0aW1lLWZvcm1hdCBpcyBhbHNvIGNvbmZpZ3VyZWQuIFlvdSBjYW5ub3QgY29uZmlndXJlIGJvdGggdGhlIGF3c2xvZ3MtZGF0ZXRpbWUtZm9ybWF0IGFuZCBhd3Nsb2dzLW11bHRpbGluZS1wYXR0ZXJuIG9wdGlvbnMuIE11bHRpbGluZSBsb2dnaW5nIHBlcmZvcm1zIHJlZ3VsYXIgZXhwcmVzc2lvbiBwYXJzaW5nIGFuZCBtYXRjaGluZyBvZiBhbGwgbG9nIG1lc3NhZ2VzLiBUaGlzIG1pZ2h0IGhhdmUgYSBuZWdhdGl2ZSBpbXBhY3Qgb24gbG9nZ2luZyBwZXJmb3JtYW5jZS4gXG4gKiAgVGhlIGZvbGxvd2luZyBvcHRpb25zIGFwcGx5IHRvIGFsbCBzdXBwb3J0ZWQgbG9nIGRyaXZlcnMuXG4gKiAgICsgbW9kZSBSZXF1aXJlZDogTm8gVmFsaWQgdmFsdWVzOiBub24tYmxvY2tpbmcgfCBibG9ja2luZyBUaGlzIG9wdGlvbiBkZWZpbmVzIHRoZSBkZWxpdmVyeSBtb2RlIG9mIGxvZyBtZXNzYWdlcyBmcm9tIHRoZSBjb250YWluZXIgdG8gdGhlIGxvZyBkcml2ZXIgc3BlY2lmaWVkIHVzaW5nIGxvZ0RyaXZlci4gVGhlIGRlbGl2ZXJ5IG1vZGUgeW91IGNob29zZSBhZmZlY3RzIGFwcGxpY2F0aW9uIGF2YWlsYWJpbGl0eSB3aGVuIHRoZSBmbG93IG9mIGxvZ3MgZnJvbSBjb250YWluZXIgaXMgaW50ZXJydXB0ZWQuIElmIHlvdSB1c2UgdGhlIGJsb2NraW5nIG1vZGUgYW5kIHRoZSBmbG93IG9mIGxvZ3MgaXMgaW50ZXJydXB0ZWQsIGNhbGxzIGZyb20gY29udGFpbmVyIGNvZGUgdG8gd3JpdGUgdG8gdGhlIHN0ZG91dCBhbmQgc3RkZXJyIHN0cmVhbXMgd2lsbCBibG9jay4gVGhlIGxvZ2dpbmcgdGhyZWFkIG9mIHRoZSBhcHBsaWNhdGlvbiB3aWxsIGJsb2NrIGFzIGEgcmVzdWx0LiBUaGlzIG1heSBjYXVzZSB0aGUgYXBwbGljYXRpb24gdG8gYmVjb21lIHVucmVzcG9uc2l2ZSBhbmQgbGVhZCB0byBjb250YWluZXIgaGVhbHRoY2hlY2sgZmFpbHVyZS4gSWYgeW91IHVzZSB0aGUgbm9uLWJsb2NraW5nIG1vZGUsIHRoZSBjb250YWluZXIncyBsb2dzIGFyZSBpbnN0ZWFkIHN0b3JlZCBpbiBhbiBpbi1tZW1vcnkgaW50ZXJtZWRpYXRlIGJ1ZmZlciBjb25maWd1cmVkIHdpdGggdGhlIG1heC1idWZmZXItc2l6ZSBvcHRpb24uIFRoaXMgcHJldmVudHMgdGhlIGFwcGxpY2F0aW9uIGZyb20gYmVjb21pbmcgdW5yZXNwb25zaXZlIHdoZW4gbG9ncyBjYW5ub3QgYmUgc2VudC4gV2UgcmVjb21tZW5kIHVzaW5nIHRoaXMgbW9kZSBpZiB5b3Ugd2FudCB0byBlbnN1cmUgc2VydmljZSBhdmFpbGFiaWxpdHkgYW5kIGFyZSBva2F5IHdpdGggc29tZSBsb2cgbG9zcy4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBQcmV2ZW50aW5nIGxvZyBsb3NzIHdpdGggbm9uLWJsb2NraW5nIG1vZGUgaW4gdGhlIGF3c2xvZ3MgY29udGFpbmVyIGxvZyBkcml2ZXIuIFlvdSBjYW4gc2V0IGEgZGVmYXVsdCBtb2RlIGZvciBhbGwgY29udGFpbmVycyBpbiBhIHNwZWNpZmljIFJlZ2lvbiBieSB1c2luZyB0aGUgZGVmYXVsdExvZ0RyaXZlck1vZGUgYWNjb3VudCBzZXR0aW5nLiBJZiB5b3UgZG9uJ3Qgc3BlY2lmeSB0aGUgbW9kZSBvcHRpb24gb3IgY29uZmlndXJlIHRoZSBhY2NvdW50IHNldHRpbmcsIEFtYXpvbiBFQ1Mgd2lsbCBkZWZhdWx0IHRvIHRoZSBibG9ja2luZyBtb2RlLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgYWNjb3VudCBzZXR0aW5nLCBzZWUgRGVmYXVsdCBsb2cgZHJpdmVyIG1vZGUgaW4gdGhlIEFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZS4gT24gSnVuZSAyNSwgMjAyNSwgQW1hem9uIEVDUyBpcyBjaGFuZ2luZyB0aGUgZGVmYXVsdCBsb2cgZHJpdmVyIG1vZGUgZnJvbSBibG9ja2luZyB0byBub24tYmxvY2tpbmcgdG8gcHJpb3JpdGl6ZSB0YXNrIGF2YWlsYWJpbGl0eSBvdmVyIGxvZ2dpbmcuIFRvIGNvbnRpbnVlIHVzaW5nIHRoZSBibG9ja2luZyBtb2RlIGFmdGVyIHRoaXMgY2hhbmdlLCBkbyBvbmUgb2YgdGhlIGZvbGxvd2luZzogU2V0IHRoZSBtb2RlIG9wdGlvbiBpbiB5b3VyIGNvbnRhaW5lciBkZWZpbml0aW9uJ3MgbG9nQ29uZmlndXJhdGlvbiBhcyBibG9ja2luZy4gU2V0IHRoZSBkZWZhdWx0TG9nRHJpdmVyTW9kZSBhY2NvdW50IHNldHRpbmcgdG8gYmxvY2tpbmcuICsgbWF4LWJ1ZmZlci1zaXplIFJlcXVpcmVkOiBObyBEZWZhdWx0IHZhbHVlOiAxbSBXaGVuIG5vbi1ibG9ja2luZyBtb2RlIGlzIHVzZWQsIHRoZSBtYXgtYnVmZmVyLXNpemUgbG9nIG9wdGlvbiBjb250cm9scyB0aGUgc2l6ZSBvZiB0aGUgYnVmZmVyIHRoYXQncyB1c2VkIGZvciBpbnRlcm1lZGlhdGUgbWVzc2FnZSBzdG9yYWdlLiBNYWtlIHN1cmUgdG8gc3BlY2lmeSBhbiBhZGVxdWF0ZSBidWZmZXIgc2l6ZSBiYXNlZCBvbiB5b3VyIGFwcGxpY2F0aW9uLiBXaGVuIHRoZSBidWZmZXIgZmlsbHMgdXAsIGZ1cnRoZXIgbG9ncyBjYW5ub3QgYmUgc3RvcmVkLiBMb2dzIHRoYXQgY2Fubm90IGJlIHN0b3JlZCBhcmUgbG9zdC4gXG4gKiAgVG8gcm91dGUgbG9ncyB1c2luZyB0aGUgYGBzcGx1bmtgYCBsb2cgcm91dGVyLCB5b3UgbmVlZCB0byBzcGVjaWZ5IGEgYGBzcGx1bmstdG9rZW5gYCBhbmQgYSBgYHNwbHVuay11cmxgYC5cbiAqICBXaGVuIHlvdSB1c2UgdGhlIGBgYXdzZmlyZWxlbnNgYCBsb2cgcm91dGVyIHRvIHJvdXRlIGxvZ3MgdG8gYW4gQVdTIFNlcnZpY2Ugb3IgQVdTIFBhcnRuZXIgTmV0d29yayBkZXN0aW5hdGlvbiBmb3IgbG9nIHN0b3JhZ2UgYW5kIGFuYWx5dGljcywgeW91IGNhbiBzZXQgdGhlIGBgbG9nLWRyaXZlci1idWZmZXItbGltaXRgYCBvcHRpb24gdG8gbGltaXQgdGhlIG51bWJlciBvZiBldmVudHMgdGhhdCBhcmUgYnVmZmVyZWQgaW4gbWVtb3J5LCBiZWZvcmUgYmVpbmcgc2VudCB0byB0aGUgbG9nIHJvdXRlciBjb250YWluZXIuIEl0IGNhbiBoZWxwIHRvIHJlc29sdmUgcG90ZW50aWFsIGxvZyBsb3NzIGlzc3VlIGJlY2F1c2UgaGlnaCB0aHJvdWdocHV0IG1pZ2h0IHJlc3VsdCBpbiBtZW1vcnkgcnVubmluZyBvdXQgZm9yIHRoZSBidWZmZXIgaW5zaWRlIG9mIERvY2tlci5cbiAqICBPdGhlciBvcHRpb25zIHlvdSBjYW4gc3BlY2lmeSB3aGVuIHVzaW5nIGBgYXdzZmlyZWxlbnNgYCB0byByb3V0ZSBsb2dzIGRlcGVuZCBvbiB0aGUgZGVzdGluYXRpb24uIFdoZW4geW91IGV4cG9ydCBsb2dzIHRvIEFtYXpvbiBEYXRhIEZpcmVob3NlLCB5b3UgY2FuIHNwZWNpZnkgdGhlIEFXUyBSZWdpb24gd2l0aCBgYHJlZ2lvbmBgIGFuZCBhIG5hbWUgZm9yIHRoZSBsb2cgc3RyZWFtIHdpdGggYGBkZWxpdmVyeV9zdHJlYW1gYC5cbiAqICBXaGVuIHlvdSBleHBvcnQgbG9ncyB0byBBbWF6b24gS2luZXNpcyBEYXRhIFN0cmVhbXMsIHlvdSBjYW4gc3BlY2lmeSBhbiBBV1MgUmVnaW9uIHdpdGggYGByZWdpb25gYCBhbmQgYSBkYXRhIHN0cmVhbSBuYW1lIHdpdGggYGBzdHJlYW1gYC5cbiAqICAgV2hlbiB5b3UgZXhwb3J0IGxvZ3MgdG8gQW1hem9uIE9wZW5TZWFyY2ggU2VydmljZSwgeW91IGNhbiBzcGVjaWZ5IG9wdGlvbnMgbGlrZSBgYE5hbWVgYCwgYGBIb3N0YGAgKE9wZW5TZWFyY2ggU2VydmljZSBlbmRwb2ludCB3aXRob3V0IHByb3RvY29sKSwgYGBQb3J0YGAsIGBgSW5kZXhgYCwgYGBUeXBlYGAsIGBgQXdzX2F1dGhgYCwgYGBBd3NfcmVnaW9uYGAsIGBgU3VwcHJlc3NfVHlwZV9OYW1lYGAsIGFuZCBgYHRsc2BgLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtVbmRlciB0aGUgaG9vZDogRmlyZUxlbnMgZm9yIEFtYXpvbiBFQ1MgVGFza3NdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jb250YWluZXJzL3VuZGVyLXRoZS1ob29kLWZpcmVsZW5zLWZvci1hbWF6b24tZWNzLXRhc2tzLykuXG4gKiAgV2hlbiB5b3UgZXhwb3J0IGxvZ3MgdG8gQW1hem9uIFMzLCB5b3UgY2FuIHNwZWNpZnkgdGhlIGJ1Y2tldCB1c2luZyB0aGUgYGBidWNrZXRgYCBvcHRpb24uIFlvdSBjYW4gYWxzbyBzcGVjaWZ5IGBgcmVnaW9uYGAsIGBgdG90YWxfZmlsZV9zaXplYGAsIGBgdXBsb2FkX3RpbWVvdXRgYCwgYW5kIGBgdXNlX3B1dF9vYmplY3RgYCBhcyBvcHRpb25zLlxuICogIFRoaXMgcGFyYW1ldGVyIHJlcXVpcmVzIHZlcnNpb24gMS4xOSBvZiB0aGUgRG9ja2VyIFJlbW90ZSBBUEkgb3IgZ3JlYXRlciBvbiB5b3VyIGNvbnRhaW5lciBpbnN0YW5jZS4gVG8gY2hlY2sgdGhlIERvY2tlciBSZW1vdGUgQVBJIHZlcnNpb24gb24geW91ciBjb250YWluZXIgaW5zdGFuY2UsIGxvZyBpbiB0byB5b3VyIGNvbnRhaW5lciBpbnN0YW5jZSBhbmQgcnVuIHRoZSBmb2xsb3dpbmcgY29tbWFuZDogYGBzdWRvIGRvY2tlciB2ZXJzaW9uIC0tZm9ybWF0ICd7ey5TZXJ2ZXIuQVBJVmVyc2lvbn19J2BgXG4gKi9cbk9wdGlvbnM/OiB7XG4vKipcbiAqIFRoaXMgaW50ZXJmYWNlIHdhcyByZWZlcmVuY2VkIGJ5IGB1bmRlZmluZWRgJ3MgSlNPTi1TY2hlbWEgZGVmaW5pdGlvblxuICogdmlhIHRoZSBgcGF0dGVyblByb3BlcnR5YCBcIi57MSx9XCIuXG4gKi9cbltrOiBzdHJpbmddOiBzdHJpbmdcbn1cbi8qKlxuICogVGhlIGxvZyBkcml2ZXIgdG8gdXNlIGZvciB0aGUgY29udGFpbmVyLlxuICogIEZvciB0YXNrcyBvbiBGQVJHQVRFbG9uZywgdGhlIHN1cHBvcnRlZCBsb2cgZHJpdmVycyBhcmUgYGBhd3Nsb2dzYGAsIGBgc3BsdW5rYGAsIGFuZCBgYGF3c2ZpcmVsZW5zYGAuXG4gKiAgRm9yIHRhc2tzIGhvc3RlZCBvbiBBbWF6b24gRUMyIGluc3RhbmNlcywgdGhlIHN1cHBvcnRlZCBsb2cgZHJpdmVycyBhcmUgYGBhd3Nsb2dzYGAsIGBgZmx1ZW50ZGBgLCBgYGdlbGZgYCwgYGBqc29uLWZpbGVgYCwgYGBqb3VybmFsZGBgLCBgYHN5c2xvZ2BgLCBgYHNwbHVua2BgLCBhbmQgYGBhd3NmaXJlbGVuc2BgLlxuICogIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHVzaW5nIHRoZSBgYGF3c2xvZ3NgYCBsb2cgZHJpdmVyLCBzZWUgW1NlbmQgQW1hem9uIEVDUyBsb2dzIHRvIENsb3VkV2F0Y2hdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3VzaW5nX2F3c2xvZ3MuaHRtbCkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLlxuICogIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHVzaW5nIHRoZSBgYGF3c2ZpcmVsZW5zYGAgbG9nIGRyaXZlciwgc2VlIFtTZW5kIEFtYXpvbiBFQ1MgbG9ncyB0byBhbiBzZXJ2aWNlIG9yIFBhcnRuZXJdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3VzaW5nX2ZpcmVsZW5zLmh0bWwpLlxuICogICBJZiB5b3UgaGF2ZSBhIGN1c3RvbSBkcml2ZXIgdGhhdCBpc24ndCBsaXN0ZWQsIHlvdSBjYW4gZm9yayB0aGUgQW1hem9uIEVDUyBjb250YWluZXIgYWdlbnQgcHJvamVjdCB0aGF0J3MgW2F2YWlsYWJsZSBvbiBHaXRIdWJdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9odHRwczovL2dpdGh1Yi5jb20vYXdzL2FtYXpvbi1lY3MtYWdlbnQpIGFuZCBjdXN0b21pemUgaXQgdG8gd29yayB3aXRoIHRoYXQgZHJpdmVyLiBXZSBlbmNvdXJhZ2UgeW91IHRvIHN1Ym1pdCBwdWxsIHJlcXVlc3RzIGZvciBjaGFuZ2VzIHRoYXQgeW91IHdvdWxkIGxpa2UgdG8gaGF2ZSBpbmNsdWRlZC4gSG93ZXZlciwgd2UgZG9uJ3QgY3VycmVudGx5IHByb3ZpZGUgc3VwcG9ydCBmb3IgcnVubmluZyBtb2RpZmllZCBjb3BpZXMgb2YgdGhpcyBzb2Z0d2FyZS5cbiAqL1xuTG9nRHJpdmVyOiBzdHJpbmdcbn1cbi8qKlxuICogVGhlIHR5cGUgYW5kIGFtb3VudCBvZiBhIHJlc291cmNlIHRvIGFzc2lnbiB0byBhIGNvbnRhaW5lci4gVGhlIHN1cHBvcnRlZCByZXNvdXJjZSB0eXBlcyBhcmUgR1BVcyBhbmQgRWxhc3RpYyBJbmZlcmVuY2UgYWNjZWxlcmF0b3JzLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtXb3JraW5nIHdpdGggR1BVcyBvbiBBbWF6b24gRUNTXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9lY3MtZ3B1Lmh0bWwpIG9yIFtXb3JraW5nIHdpdGggQW1hem9uIEVsYXN0aWMgSW5mZXJlbmNlIG9uIEFtYXpvbiBFQ1NdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2Vjcy1pbmZlcmVuY2UuaHRtbCkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVzb3VyY2VSZXF1aXJlbWVudCB7XG4vKipcbiAqIFRoZSB0eXBlIG9mIHJlc291cmNlIHRvIGFzc2lnbiB0byBhIGNvbnRhaW5lci5cbiAqL1xuVHlwZTogc3RyaW5nXG4vKipcbiAqIFRoZSB2YWx1ZSBmb3IgdGhlIHNwZWNpZmllZCByZXNvdXJjZSB0eXBlLlxuICogIFdoZW4gdGhlIHR5cGUgaXMgYGBHUFVgYCwgdGhlIHZhbHVlIGlzIHRoZSBudW1iZXIgb2YgcGh5c2ljYWwgYGBHUFVzYGAgdGhlIEFtYXpvbiBFQ1MgY29udGFpbmVyIGFnZW50IHJlc2VydmVzIGZvciB0aGUgY29udGFpbmVyLiBUaGUgbnVtYmVyIG9mIEdQVXMgdGhhdCdzIHJlc2VydmVkIGZvciBhbGwgY29udGFpbmVycyBpbiBhIHRhc2sgY2FuJ3QgZXhjZWVkIHRoZSBudW1iZXIgb2YgYXZhaWxhYmxlIEdQVXMgb24gdGhlIGNvbnRhaW5lciBpbnN0YW5jZSB0aGF0IHRoZSB0YXNrIGlzIGxhdW5jaGVkIG9uLlxuICogIFdoZW4gdGhlIHR5cGUgaXMgYGBJbmZlcmVuY2VBY2NlbGVyYXRvcmBgLCB0aGUgYGB2YWx1ZWBgIG1hdGNoZXMgdGhlIGBgZGV2aWNlTmFtZWBgIGZvciBhbiBbSW5mZXJlbmNlQWNjZWxlcmF0b3JdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfSW5mZXJlbmNlQWNjZWxlcmF0b3IuaHRtbCkgc3BlY2lmaWVkIGluIGEgdGFzayBkZWZpbml0aW9uLlxuICovXG5WYWx1ZTogc3RyaW5nXG59XG4vKipcbiAqIEEgbGlzdCBvZiBmaWxlcyBjb250YWluaW5nIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgdG8gcGFzcyB0byBhIGNvbnRhaW5lci4gWW91IGNhbiBzcGVjaWZ5IHVwIHRvIHRlbiBlbnZpcm9ubWVudCBmaWxlcy4gVGhlIGZpbGUgbXVzdCBoYXZlIGEgYGAuZW52YGAgZmlsZSBleHRlbnNpb24uIEVhY2ggbGluZSBpbiBhbiBlbnZpcm9ubWVudCBmaWxlIHNob3VsZCBjb250YWluIGFuIGVudmlyb25tZW50IHZhcmlhYmxlIGluIGBgVkFSSUFCTEU9VkFMVUVgYCBmb3JtYXQuIExpbmVzIGJlZ2lubmluZyB3aXRoIGBgI2BgIGFyZSB0cmVhdGVkIGFzIGNvbW1lbnRzIGFuZCBhcmUgaWdub3JlZC5cbiAqICBJZiB0aGVyZSBhcmUgZW52aXJvbm1lbnQgdmFyaWFibGVzIHNwZWNpZmllZCB1c2luZyB0aGUgYGBlbnZpcm9ubWVudGBgIHBhcmFtZXRlciBpbiBhIGNvbnRhaW5lciBkZWZpbml0aW9uLCB0aGV5IHRha2UgcHJlY2VkZW5jZSBvdmVyIHRoZSB2YXJpYWJsZXMgY29udGFpbmVkIHdpdGhpbiBhbiBlbnZpcm9ubWVudCBmaWxlLiBJZiBtdWx0aXBsZSBlbnZpcm9ubWVudCBmaWxlcyBhcmUgc3BlY2lmaWVkIHRoYXQgY29udGFpbiB0aGUgc2FtZSB2YXJpYWJsZSwgdGhleSdyZSBwcm9jZXNzZWQgZnJvbSB0aGUgdG9wIGRvd24uIFdlIHJlY29tbWVuZCB0aGF0IHlvdSB1c2UgdW5pcXVlIHZhcmlhYmxlIG5hbWVzLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtVc2UgYSBmaWxlIHRvIHBhc3MgZW52aXJvbm1lbnQgdmFyaWFibGVzIHRvIGEgY29udGFpbmVyXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS91c2UtZW52aXJvbm1lbnQtZmlsZS5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSouXG4gKiAgRW52aXJvbm1lbnQgdmFyaWFibGUgZmlsZXMgYXJlIG9iamVjdHMgaW4gQW1hem9uIFMzIGFuZCBhbGwgQW1hem9uIFMzIHNlY3VyaXR5IGNvbnNpZGVyYXRpb25zIGFwcGx5LiBcbiAqICBZb3UgbXVzdCB1c2UgdGhlIGZvbGxvd2luZyBwbGF0Zm9ybXMgZm9yIHRoZSBGYXJnYXRlIGxhdW5jaCB0eXBlOlxuICogICArICBMaW51eCBwbGF0Zm9ybSB2ZXJzaW9uIGBgMS40LjBgYCBvciBsYXRlci5cbiAqICAgKyAgV2luZG93cyBwbGF0Zm9ybSB2ZXJzaW9uIGBgMS4wLjBgYCBvciBsYXRlci5cbiAqICAgXG4gKiAgQ29uc2lkZXIgdGhlIGZvbGxvd2luZyB3aGVuIHVzaW5nIHRoZSBGYXJnYXRlIGxhdW5jaCB0eXBlOlxuICogICArICBUaGUgZmlsZSBpcyBoYW5kbGVkIGxpa2UgYSBuYXRpdmUgRG9ja2VyIGVudi1maWxlLlxuICogICArICBUaGVyZSBpcyBubyBzdXBwb3J0IGZvciBzaGVsbCBlc2NhcGUgaGFuZGxpbmcuXG4gKiAgICsgIFRoZSBjb250YWluZXIgZW50cnkgcG9pbnQgaW50ZXJwZXJ0cyB0aGUgYGBWQVJJQUJMRWBgIHZhbHVlcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbnZpcm9ubWVudEZpbGUge1xuLyoqXG4gKiBUaGUgZmlsZSB0eXBlIHRvIHVzZS4gRW52aXJvbm1lbnQgZmlsZXMgYXJlIG9iamVjdHMgaW4gQW1hem9uIFMzLiBUaGUgb25seSBzdXBwb3J0ZWQgdmFsdWUgaXMgYGBzM2BgLlxuICovXG5UeXBlPzogc3RyaW5nXG4vKipcbiAqIFRoZSBBbWF6b24gUmVzb3VyY2UgTmFtZSAoQVJOKSBvZiB0aGUgQW1hem9uIFMzIG9iamVjdCBjb250YWluaW5nIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBmaWxlLlxuICovXG5WYWx1ZT86IHN0cmluZ1xufVxuLyoqXG4gKiBUaGUgRmlyZUxlbnMgY29uZmlndXJhdGlvbiBmb3IgdGhlIGNvbnRhaW5lci4gVGhpcyBpcyB1c2VkIHRvIHNwZWNpZnkgYW5kIGNvbmZpZ3VyZSBhIGxvZyByb3V0ZXIgZm9yIGNvbnRhaW5lciBsb2dzLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtDdXN0b20gTG9nIFJvdXRpbmddKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3VzaW5nX2ZpcmVsZW5zLmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaXJlbGVuc0NvbmZpZ3VyYXRpb24ge1xuLyoqXG4gKiBUaGUgb3B0aW9ucyB0byB1c2Ugd2hlbiBjb25maWd1cmluZyB0aGUgbG9nIHJvdXRlci4gVGhpcyBmaWVsZCBpcyBvcHRpb25hbCBhbmQgY2FuIGJlIHVzZWQgdG8gYWRkIGFkZGl0aW9uYWwgbWV0YWRhdGEsIHN1Y2ggYXMgdGhlIHRhc2ssIHRhc2sgZGVmaW5pdGlvbiwgY2x1c3RlciwgYW5kIGNvbnRhaW5lciBpbnN0YW5jZSBkZXRhaWxzIHRvIHRoZSBsb2cgZXZlbnQuXG4gKiAgIElmIHNwZWNpZmllZCwgdmFsaWQgb3B0aW9uIGtleXMgYXJlOlxuICogICArICBgYGVuYWJsZS1lY3MtbG9nLW1ldGFkYXRhYGAsIHdoaWNoIGNhbiBiZSBgYHRydWVgYCBvciBgYGZhbHNlYGBcbiAqICAgKyAgYGBjb25maWctZmlsZS10eXBlYGAsIHdoaWNoIGNhbiBiZSBgYHMzYGAgb3IgYGBmaWxlYGBcbiAqICAgKyAgYGBjb25maWctZmlsZS12YWx1ZWBgLCB3aGljaCBpcyBlaXRoZXIgYW4gUzMgQVJOIG9yIGEgZmlsZSBwYXRoXG4gKi9cbk9wdGlvbnM/OiB7XG4vKipcbiAqIFRoaXMgaW50ZXJmYWNlIHdhcyByZWZlcmVuY2VkIGJ5IGB1bmRlZmluZWRgJ3MgSlNPTi1TY2hlbWEgZGVmaW5pdGlvblxuICogdmlhIHRoZSBgcGF0dGVyblByb3BlcnR5YCBcIi57MSx9XCIuXG4gKi9cbltrOiBzdHJpbmddOiBzdHJpbmdcbn1cbi8qKlxuICogVGhlIGxvZyByb3V0ZXIgdG8gdXNlLiBUaGUgdmFsaWQgdmFsdWVzIGFyZSBgYGZsdWVudGRgYCBvciBgYGZsdWVudGJpdGBgLlxuICovXG5UeXBlPzogc3RyaW5nXG59XG4vKipcbiAqIEEgbGlzdCBvZiBuYW1lc3BhY2VkIGtlcm5lbCBwYXJhbWV0ZXJzIHRvIHNldCBpbiB0aGUgY29udGFpbmVyLiBUaGlzIHBhcmFtZXRlciBtYXBzIHRvIGBgU3lzY3Rsc2BgIGluIHRoZSBkb2NrZXIgY29udGFpbmVyIGNyZWF0ZSBjb21tYW5kIGFuZCB0aGUgYGAtLXN5c2N0bGBgIG9wdGlvbiB0byBkb2NrZXIgcnVuLiBGb3IgZXhhbXBsZSwgeW91IGNhbiBjb25maWd1cmUgYGBuZXQuaXB2NC50Y3Bfa2VlcGFsaXZlX3RpbWVgYCBzZXR0aW5nIHRvIG1haW50YWluIGxvbmdlciBsaXZlZCBjb25uZWN0aW9ucy5cbiAqICBXZSBkb24ndCByZWNvbW1lbmQgdGhhdCB5b3Ugc3BlY2lmeSBuZXR3b3JrLXJlbGF0ZWQgYGBzeXN0ZW1Db250cm9sc2BgIHBhcmFtZXRlcnMgZm9yIG11bHRpcGxlIGNvbnRhaW5lcnMgaW4gYSBzaW5nbGUgdGFzayB0aGF0IGFsc28gdXNlcyBlaXRoZXIgdGhlIGBgYXdzdnBjYGAgb3IgYGBob3N0YGAgbmV0d29yayBtb2RlLiBEb2luZyB0aGlzIGhhcyB0aGUgZm9sbG93aW5nIGRpc2FkdmFudGFnZXM6XG4gKiAgICsgIEZvciB0YXNrcyB0aGF0IHVzZSB0aGUgYGBhd3N2cGNgYCBuZXR3b3JrIG1vZGUgaW5jbHVkaW5nIEZhcmdhdGUsIGlmIHlvdSBzZXQgYGBzeXN0ZW1Db250cm9sc2BgIGZvciBhbnkgY29udGFpbmVyLCBpdCBhcHBsaWVzIHRvIGFsbCBjb250YWluZXJzIGluIHRoZSB0YXNrLiBJZiB5b3Ugc2V0IGRpZmZlcmVudCBgYHN5c3RlbUNvbnRyb2xzYGAgZm9yIG11bHRpcGxlIGNvbnRhaW5lcnMgaW4gYSBzaW5nbGUgdGFzaywgdGhlIGNvbnRhaW5lciB0aGF0J3Mgc3RhcnRlZCBsYXN0IGRldGVybWluZXMgd2hpY2ggYGBzeXN0ZW1Db250cm9sc2BgIHRha2UgZWZmZWN0LlxuICogICArICBGb3IgdGFza3MgdGhhdCB1c2UgdGhlIGBgaG9zdGBgIG5ldHdvcmsgbW9kZSwgdGhlIG5ldHdvcmsgbmFtZXNwYWNlIGBgc3lzdGVtQ29udHJvbHNgYCBhcmVuJ3Qgc3VwcG9ydGVkLlxuICogICBcbiAqICBJZiB5b3UncmUgc2V0dGluZyBhbiBJUEMgcmVzb3VyY2UgbmFtZXNwYWNlIHRvIHVzZSBmb3IgdGhlIGNvbnRhaW5lcnMgaW4gdGhlIHRhc2ssIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcHBseSB0byB5b3VyIHN5c3RlbSBjb250cm9scy4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbSVBDIG1vZGVdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3Rhc2tfZGVmaW5pdGlvbl9wYXJhbWV0ZXJzLmh0bWwjdGFza19kZWZpbml0aW9uX2lwY21vZGUpLlxuICogICArICBGb3IgdGFza3MgdGhhdCB1c2UgdGhlIGBgaG9zdGBgIElQQyBtb2RlLCBJUEMgbmFtZXNwYWNlIGBgc3lzdGVtQ29udHJvbHNgYCBhcmVuJ3Qgc3VwcG9ydGVkLlxuICogICArICBGb3IgdGFza3MgdGhhdCB1c2UgdGhlIGBgdGFza2BgIElQQyBtb2RlLCBJUEMgbmFtZXNwYWNlIGBgc3lzdGVtQ29udHJvbHNgYCB2YWx1ZXMgYXBwbHkgdG8gYWxsIGNvbnRhaW5lcnMgd2l0aGluIGEgdGFzay5cbiAqICAgXG4gKiAgIFRoaXMgcGFyYW1ldGVyIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIFdpbmRvd3MgY29udGFpbmVycy5cbiAqICAgIFRoaXMgcGFyYW1ldGVyIGlzIG9ubHkgc3VwcG9ydGVkIGZvciB0YXNrcyB0aGF0IGFyZSBob3N0ZWQgb24gRkFSR0FURWxvbmcgaWYgdGhlIHRhc2tzIGFyZSB1c2luZyBwbGF0Zm9ybSB2ZXJzaW9uIGBgMS40LjBgYCBvciBsYXRlciAoTGludXgpLiBUaGlzIGlzbid0IHN1cHBvcnRlZCBmb3IgV2luZG93cyBjb250YWluZXJzIG9uIEZhcmdhdGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3lzdGVtQ29udHJvbCB7XG4vKipcbiAqIFRoZSBuYW1lc3BhY2VkIGtlcm5lbCBwYXJhbWV0ZXIgdG8gc2V0IGEgYGB2YWx1ZWBgIGZvci5cbiAqICBWYWxpZCBJUEMgbmFtZXNwYWNlIHZhbHVlczogYGBcImtlcm5lbC5tc2dtYXhcIiB8IFwia2VybmVsLm1zZ21uYlwiIHwgXCJrZXJuZWwubXNnbW5pXCIgfCBcImtlcm5lbC5zZW1cIiB8IFwia2VybmVsLnNobWFsbFwiIHwgXCJrZXJuZWwuc2htbWF4XCIgfCBcImtlcm5lbC5zaG1tbmlcIiB8IFwia2VybmVsLnNobV9ybWlkX2ZvcmNlZFwiYGAsIGFuZCBgYFN5c2N0bHNgYCB0aGF0IHN0YXJ0IHdpdGggYGBcImZzLm1xdWV1ZS4qXCJgYFxuICogIFZhbGlkIG5ldHdvcmsgbmFtZXNwYWNlIHZhbHVlczogYGBTeXNjdGxzYGAgdGhhdCBzdGFydCB3aXRoIGBgXCJuZXQuKlwiYGAuIE9ubHkgbmFtZXNwYWNlZCBgYFN5c2N0bHNgYCB0aGF0IGV4aXN0IHdpdGhpbiB0aGUgY29udGFpbmVyIHN0YXJ0aW5nIHdpdGggXCJuZXQuKiBhcmUgYWNjZXB0ZWQuXG4gKiAgQWxsIG9mIHRoZXNlIHZhbHVlcyBhcmUgc3VwcG9ydGVkIGJ5IEZhcmdhdGUuXG4gKi9cblZhbHVlPzogc3RyaW5nXG4vKipcbiAqIFRoZSBuYW1lc3BhY2VkIGtlcm5lbCBwYXJhbWV0ZXIgdG8gc2V0IGEgYGB2YWx1ZWBgIGZvci5cbiAqL1xuTmFtZXNwYWNlPzogc3RyaW5nXG59XG4vKipcbiAqIFRoZSBgYHVsaW1pdGBgIHNldHRpbmdzIHRvIHBhc3MgdG8gdGhlIGNvbnRhaW5lci5cbiAqICBBbWF6b24gRUNTIHRhc2tzIGhvc3RlZCBvbiBGQVJHQVRFbG9uZyB1c2UgdGhlIGRlZmF1bHQgcmVzb3VyY2UgbGltaXQgdmFsdWVzIHNldCBieSB0aGUgb3BlcmF0aW5nIHN5c3RlbSB3aXRoIHRoZSBleGNlcHRpb24gb2YgdGhlIGBgbm9maWxlYGAgcmVzb3VyY2UgbGltaXQgcGFyYW1ldGVyIHdoaWNoIEZBUkdBVEVsb25nIG92ZXJyaWRlcy4gVGhlIGBgbm9maWxlYGAgcmVzb3VyY2UgbGltaXQgc2V0cyBhIHJlc3RyaWN0aW9uIG9uIHRoZSBudW1iZXIgb2Ygb3BlbiBmaWxlcyB0aGF0IGEgY29udGFpbmVyIGNhbiB1c2UuIFRoZSBkZWZhdWx0IGBgbm9maWxlYGAgc29mdCBsaW1pdCBpcyBgYDY1NTM1YGAgYW5kIHRoZSBkZWZhdWx0IGhhcmQgbGltaXQgaXMgYGA2NTUzNWBgLlxuICogIFlvdSBjYW4gc3BlY2lmeSB0aGUgYGB1bGltaXRgYCBzZXR0aW5ncyBmb3IgYSBjb250YWluZXIgaW4gYSB0YXNrIGRlZmluaXRpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVWxpbWl0IHtcbi8qKlxuICogVGhlIHNvZnQgbGltaXQgZm9yIHRoZSBgYHVsaW1pdGBgIHR5cGUuIFRoZSB2YWx1ZSBjYW4gYmUgc3BlY2lmaWVkIGluIGJ5dGVzLCBzZWNvbmRzLCBvciBhcyBhIGNvdW50LCBkZXBlbmRpbmcgb24gdGhlIGBgdHlwZWBgIG9mIHRoZSBgYHVsaW1pdGBgLlxuICovXG5Tb2Z0TGltaXQ6IG51bWJlclxuLyoqXG4gKiBUaGUgaGFyZCBsaW1pdCBmb3IgdGhlIGBgdWxpbWl0YGAgdHlwZS4gVGhlIHZhbHVlIGNhbiBiZSBzcGVjaWZpZWQgaW4gYnl0ZXMsIHNlY29uZHMsIG9yIGFzIGEgY291bnQsIGRlcGVuZGluZyBvbiB0aGUgYGB0eXBlYGAgb2YgdGhlIGBgdWxpbWl0YGAuXG4gKi9cbkhhcmRMaW1pdDogbnVtYmVyXG4vKipcbiAqIFRoZSBgYHR5cGVgYCBvZiB0aGUgYGB1bGltaXRgYC5cbiAqL1xuTmFtZTogc3RyaW5nXG59XG4vKipcbiAqIFRoZSBwcml2YXRlIHJlcG9zaXRvcnkgYXV0aGVudGljYXRpb24gY3JlZGVudGlhbHMgdG8gdXNlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlcG9zaXRvcnlDcmVkZW50aWFscyB7XG4vKipcbiAqIFRoZSBBbWF6b24gUmVzb3VyY2UgTmFtZSAoQVJOKSBvZiB0aGUgc2VjcmV0IGNvbnRhaW5pbmcgdGhlIHByaXZhdGUgcmVwb3NpdG9yeSBjcmVkZW50aWFscy5cbiAqICAgV2hlbiB5b3UgdXNlIHRoZSBBbWF6b24gRUNTIEFQSSwgQ0xJLCBvciBBV1MgU0RLLCBpZiB0aGUgc2VjcmV0IGV4aXN0cyBpbiB0aGUgc2FtZSBSZWdpb24gYXMgdGhlIHRhc2sgdGhhdCB5b3UncmUgbGF1bmNoaW5nIHRoZW4geW91IGNhbiB1c2UgZWl0aGVyIHRoZSBmdWxsIEFSTiBvciB0aGUgbmFtZSBvZiB0aGUgc2VjcmV0LiBXaGVuIHlvdSB1c2UgdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUsIHlvdSBtdXN0IHNwZWNpZnkgdGhlIGZ1bGwgQVJOIG9mIHRoZSBzZWNyZXQuXG4gKi9cbkNyZWRlbnRpYWxzUGFyYW1ldGVyPzogc3RyaW5nXG59XG4vKipcbiAqIFRoZSBgYEhvc3RFbnRyeWBgIHByb3BlcnR5IHNwZWNpZmllcyBhIGhvc3RuYW1lIGFuZCBhbiBJUCBhZGRyZXNzIHRoYXQgYXJlIGFkZGVkIHRvIHRoZSBgYC9ldGMvaG9zdHNgYCBmaWxlIG9mIGEgY29udGFpbmVyIHRocm91Z2ggdGhlIGBgZXh0cmFIb3N0c2BgIHBhcmFtZXRlciBvZiBpdHMgYGBDb250YWluZXJEZWZpbml0aW9uYGAgcmVzb3VyY2UuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSG9zdEVudHJ5IHtcbi8qKlxuICogVGhlIGhvc3RuYW1lIHRvIHVzZSBpbiB0aGUgYGAvZXRjL2hvc3RzYGAgZW50cnkuXG4gKi9cbkhvc3RuYW1lPzogc3RyaW5nXG4vKipcbiAqIFRoZSBJUCBhZGRyZXNzIHRvIHVzZSBpbiB0aGUgYGAvZXRjL2hvc3RzYGAgZW50cnkuXG4gKi9cbklwQWRkcmVzcz86IHN0cmluZ1xufVxuLyoqXG4gKiBMaW51eC1zcGVjaWZpYyBtb2RpZmljYXRpb25zIHRoYXQgYXJlIGFwcGxpZWQgdG8gdGhlIGNvbnRhaW5lciwgc3VjaCBhcyBMaW51eCBrZXJuZWwgY2FwYWJpbGl0aWVzLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBzZWUgW0tlcm5lbENhcGFiaWxpdGllc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9LZXJuZWxDYXBhYmlsaXRpZXMuaHRtbCkuXG4gKiAgIFRoaXMgcGFyYW1ldGVyIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIFdpbmRvd3MgY29udGFpbmVycy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMaW51eFBhcmFtZXRlcnMge1xuQ2FwYWJpbGl0aWVzPzogS2VybmVsQ2FwYWJpbGl0aWVzXG4vKipcbiAqIFRoaXMgYWxsb3dzIHlvdSB0byB0dW5lIGEgY29udGFpbmVyJ3MgbWVtb3J5IHN3YXBwaW5lc3MgYmVoYXZpb3IuIEEgYGBzd2FwcGluZXNzYGAgdmFsdWUgb2YgYGAwYGAgd2lsbCBjYXVzZSBzd2FwcGluZyB0byBub3QgaGFwcGVuIHVubGVzcyBhYnNvbHV0ZWx5IG5lY2Vzc2FyeS4gQSBgYHN3YXBwaW5lc3NgYCB2YWx1ZSBvZiBgYDEwMGBgIHdpbGwgY2F1c2UgcGFnZXMgdG8gYmUgc3dhcHBlZCB2ZXJ5IGFnZ3Jlc3NpdmVseS4gQWNjZXB0ZWQgdmFsdWVzIGFyZSB3aG9sZSBudW1iZXJzIGJldHdlZW4gYGAwYGAgYW5kIGBgMTAwYGAuIElmIHRoZSBgYHN3YXBwaW5lc3NgYCBwYXJhbWV0ZXIgaXMgbm90IHNwZWNpZmllZCwgYSBkZWZhdWx0IHZhbHVlIG9mIGBgNjBgYCBpcyB1c2VkLiBJZiBhIHZhbHVlIGlzIG5vdCBzcGVjaWZpZWQgZm9yIGBgbWF4U3dhcGBgIHRoZW4gdGhpcyBwYXJhbWV0ZXIgaXMgaWdub3JlZC4gVGhpcyBwYXJhbWV0ZXIgbWFwcyB0byB0aGUgYGAtLW1lbW9yeS1zd2FwcGluZXNzYGAgb3B0aW9uIHRvIGRvY2tlciBydW4uXG4gKiAgIElmIHlvdSdyZSB1c2luZyB0YXNrcyB0aGF0IHVzZSB0aGUgRmFyZ2F0ZSBsYXVuY2ggdHlwZSwgdGhlIGBgc3dhcHBpbmVzc2BgIHBhcmFtZXRlciBpc24ndCBzdXBwb3J0ZWQuXG4gKiAgSWYgeW91J3JlIHVzaW5nIHRhc2tzIG9uIEFtYXpvbiBMaW51eCAyMDIzIHRoZSBgYHN3YXBwaW5lc3NgYCBwYXJhbWV0ZXIgaXNuJ3Qgc3VwcG9ydGVkLlxuICovXG5Td2FwcGluZXNzPzogbnVtYmVyXG4vKipcbiAqIFRoZSBjb250YWluZXIgcGF0aCwgbW91bnQgb3B0aW9ucywgYW5kIHNpemUgKGluIE1pQikgb2YgdGhlIHRtcGZzIG1vdW50LiBUaGlzIHBhcmFtZXRlciBtYXBzIHRvIHRoZSBgYC0tdG1wZnNgYCBvcHRpb24gdG8gZG9ja2VyIHJ1bi5cbiAqICAgSWYgeW91J3JlIHVzaW5nIHRhc2tzIHRoYXQgdXNlIHRoZSBGYXJnYXRlIGxhdW5jaCB0eXBlLCB0aGUgYGB0bXBmc2BgIHBhcmFtZXRlciBpc24ndCBzdXBwb3J0ZWQuXG4gKi9cblRtcGZzPzogVG1wZnNbXVxuLyoqXG4gKiBUaGUgdmFsdWUgZm9yIHRoZSBzaXplIChpbiBNaUIpIG9mIHRoZSBgYC9kZXYvc2htYGAgdm9sdW1lLiBUaGlzIHBhcmFtZXRlciBtYXBzIHRvIHRoZSBgYC0tc2htLXNpemVgYCBvcHRpb24gdG8gZG9ja2VyIHJ1bi5cbiAqICAgSWYgeW91IGFyZSB1c2luZyB0YXNrcyB0aGF0IHVzZSB0aGUgRmFyZ2F0ZSBsYXVuY2ggdHlwZSwgdGhlIGBgc2hhcmVkTWVtb3J5U2l6ZWBgIHBhcmFtZXRlciBpcyBub3Qgc3VwcG9ydGVkLlxuICovXG5TaGFyZWRNZW1vcnlTaXplPzogbnVtYmVyXG4vKipcbiAqIEFueSBob3N0IGRldmljZXMgdG8gZXhwb3NlIHRvIHRoZSBjb250YWluZXIuIFRoaXMgcGFyYW1ldGVyIG1hcHMgdG8gYGBEZXZpY2VzYGAgaW4gdGhlIGRvY2tlciBjb250YWluZXIgY3JlYXRlIGNvbW1hbmQgYW5kIHRoZSBgYC0tZGV2aWNlYGAgb3B0aW9uIHRvIGRvY2tlciBydW4uXG4gKiAgIElmIHlvdSdyZSB1c2luZyB0YXNrcyB0aGF0IHVzZSB0aGUgRmFyZ2F0ZSBsYXVuY2ggdHlwZSwgdGhlIGBgZGV2aWNlc2BgIHBhcmFtZXRlciBpc24ndCBzdXBwb3J0ZWQuXG4gKi9cbkRldmljZXM/OiBEZXZpY2VbXVxuLyoqXG4gKiBSdW4gYW4gYGBpbml0YGAgcHJvY2VzcyBpbnNpZGUgdGhlIGNvbnRhaW5lciB0aGF0IGZvcndhcmRzIHNpZ25hbHMgYW5kIHJlYXBzIHByb2Nlc3Nlcy4gVGhpcyBwYXJhbWV0ZXIgbWFwcyB0byB0aGUgYGAtLWluaXRgYCBvcHRpb24gdG8gZG9ja2VyIHJ1bi4gVGhpcyBwYXJhbWV0ZXIgcmVxdWlyZXMgdmVyc2lvbiAxLjI1IG9mIHRoZSBEb2NrZXIgUmVtb3RlIEFQSSBvciBncmVhdGVyIG9uIHlvdXIgY29udGFpbmVyIGluc3RhbmNlLiBUbyBjaGVjayB0aGUgRG9ja2VyIFJlbW90ZSBBUEkgdmVyc2lvbiBvbiB5b3VyIGNvbnRhaW5lciBpbnN0YW5jZSwgbG9nIGluIHRvIHlvdXIgY29udGFpbmVyIGluc3RhbmNlIGFuZCBydW4gdGhlIGZvbGxvd2luZyBjb21tYW5kOiBgYHN1ZG8gZG9ja2VyIHZlcnNpb24gLS1mb3JtYXQgJ3t7LlNlcnZlci5BUElWZXJzaW9ufX0nYGBcbiAqL1xuSW5pdFByb2Nlc3NFbmFibGVkPzogYm9vbGVhblxuLyoqXG4gKiBUaGUgdG90YWwgYW1vdW50IG9mIHN3YXAgbWVtb3J5IChpbiBNaUIpIGEgY29udGFpbmVyIGNhbiB1c2UuIFRoaXMgcGFyYW1ldGVyIHdpbGwgYmUgdHJhbnNsYXRlZCB0byB0aGUgYGAtLW1lbW9yeS1zd2FwYGAgb3B0aW9uIHRvIGRvY2tlciBydW4gd2hlcmUgdGhlIHZhbHVlIHdvdWxkIGJlIHRoZSBzdW0gb2YgdGhlIGNvbnRhaW5lciBtZW1vcnkgcGx1cyB0aGUgYGBtYXhTd2FwYGAgdmFsdWUuXG4gKiAgSWYgYSBgYG1heFN3YXBgYCB2YWx1ZSBvZiBgYDBgYCBpcyBzcGVjaWZpZWQsIHRoZSBjb250YWluZXIgd2lsbCBub3QgdXNlIHN3YXAuIEFjY2VwdGVkIHZhbHVlcyBhcmUgYGAwYGAgb3IgYW55IHBvc2l0aXZlIGludGVnZXIuIElmIHRoZSBgYG1heFN3YXBgYCBwYXJhbWV0ZXIgaXMgb21pdHRlZCwgdGhlIGNvbnRhaW5lciB3aWxsIHVzZSB0aGUgc3dhcCBjb25maWd1cmF0aW9uIGZvciB0aGUgY29udGFpbmVyIGluc3RhbmNlIGl0IGlzIHJ1bm5pbmcgb24uIEEgYGBtYXhTd2FwYGAgdmFsdWUgbXVzdCBiZSBzZXQgZm9yIHRoZSBgYHN3YXBwaW5lc3NgYCBwYXJhbWV0ZXIgdG8gYmUgdXNlZC5cbiAqICAgSWYgeW91J3JlIHVzaW5nIHRhc2tzIHRoYXQgdXNlIHRoZSBGYXJnYXRlIGxhdW5jaCB0eXBlLCB0aGUgYGBtYXhTd2FwYGAgcGFyYW1ldGVyIGlzbid0IHN1cHBvcnRlZC5cbiAqICBJZiB5b3UncmUgdXNpbmcgdGFza3Mgb24gQW1hem9uIExpbnV4IDIwMjMgdGhlIGBgc3dhcHBpbmVzc2BgIHBhcmFtZXRlciBpc24ndCBzdXBwb3J0ZWQuXG4gKi9cbk1heFN3YXA/OiBudW1iZXJcbn1cbi8qKlxuICogVGhlIExpbnV4IGNhcGFiaWxpdGllcyBmb3IgdGhlIGNvbnRhaW5lciB0aGF0IGFyZSBhZGRlZCB0byBvciBkcm9wcGVkIGZyb20gdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiBwcm92aWRlZCBieSBEb2NrZXIuXG4gKiAgIEZvciB0YXNrcyB0aGF0IHVzZSB0aGUgRmFyZ2F0ZSBsYXVuY2ggdHlwZSwgYGBjYXBhYmlsaXRpZXNgYCBpcyBzdXBwb3J0ZWQgZm9yIGFsbCBwbGF0Zm9ybSB2ZXJzaW9ucyBidXQgdGhlIGBgYWRkYGAgcGFyYW1ldGVyIGlzIG9ubHkgc3VwcG9ydGVkIGlmIHVzaW5nIHBsYXRmb3JtIHZlcnNpb24gMS40LjAgb3IgbGF0ZXIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgS2VybmVsQ2FwYWJpbGl0aWVzIHtcbi8qKlxuICogVGhlIExpbnV4IGNhcGFiaWxpdGllcyBmb3IgdGhlIGNvbnRhaW5lciB0aGF0IGhhdmUgYmVlbiBhZGRlZCB0byB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIHByb3ZpZGVkIGJ5IERvY2tlci4gVGhpcyBwYXJhbWV0ZXIgbWFwcyB0byBgYENhcEFkZGBgIGluIHRoZSBkb2NrZXIgY29udGFpbmVyIGNyZWF0ZSBjb21tYW5kIGFuZCB0aGUgYGAtLWNhcC1hZGRgYCBvcHRpb24gdG8gZG9ja2VyIHJ1bi5cbiAqICAgVGFza3MgbGF1bmNoZWQgb24gRkFSR0FURWxvbmcgb25seSBzdXBwb3J0IGFkZGluZyB0aGUgYGBTWVNfUFRSQUNFYGAga2VybmVsIGNhcGFiaWxpdHkuXG4gKiAgIFZhbGlkIHZhbHVlczogYGBcIkFMTFwiIHwgXCJBVURJVF9DT05UUk9MXCIgfCBcIkFVRElUX1dSSVRFXCIgfCBcIkJMT0NLX1NVU1BFTkRcIiB8IFwiQ0hPV05cIiB8IFwiREFDX09WRVJSSURFXCIgfCBcIkRBQ19SRUFEX1NFQVJDSFwiIHwgXCJGT1dORVJcIiB8IFwiRlNFVElEXCIgfCBcIklQQ19MT0NLXCIgfCBcIklQQ19PV05FUlwiIHwgXCJLSUxMXCIgfCBcIkxFQVNFXCIgfCBcIkxJTlVYX0lNTVVUQUJMRVwiIHwgXCJNQUNfQURNSU5cIiB8IFwiTUFDX09WRVJSSURFXCIgfCBcIk1LTk9EXCIgfCBcIk5FVF9BRE1JTlwiIHwgXCJORVRfQklORF9TRVJWSUNFXCIgfCBcIk5FVF9CUk9BRENBU1RcIiB8IFwiTkVUX1JBV1wiIHwgXCJTRVRGQ0FQXCIgfCBcIlNFVEdJRFwiIHwgXCJTRVRQQ0FQXCIgfCBcIlNFVFVJRFwiIHwgXCJTWVNfQURNSU5cIiB8IFwiU1lTX0JPT1RcIiB8IFwiU1lTX0NIUk9PVFwiIHwgXCJTWVNfTU9EVUxFXCIgfCBcIlNZU19OSUNFXCIgfCBcIlNZU19QQUNDVFwiIHwgXCJTWVNfUFRSQUNFXCIgfCBcIlNZU19SQVdJT1wiIHwgXCJTWVNfUkVTT1VSQ0VcIiB8IFwiU1lTX1RJTUVcIiB8IFwiU1lTX1RUWV9DT05GSUdcIiB8IFwiU1lTTE9HXCIgfCBcIldBS0VfQUxBUk1cImBgXG4gKi9cbkFkZD86IHN0cmluZ1tdXG4vKipcbiAqIFRoZSBMaW51eCBjYXBhYmlsaXRpZXMgZm9yIHRoZSBjb250YWluZXIgdGhhdCBoYXZlIGJlZW4gcmVtb3ZlZCBmcm9tIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gcHJvdmlkZWQgYnkgRG9ja2VyLiBUaGlzIHBhcmFtZXRlciBtYXBzIHRvIGBgQ2FwRHJvcGBgIGluIHRoZSBkb2NrZXIgY29udGFpbmVyIGNyZWF0ZSBjb21tYW5kIGFuZCB0aGUgYGAtLWNhcC1kcm9wYGAgb3B0aW9uIHRvIGRvY2tlciBydW4uXG4gKiAgVmFsaWQgdmFsdWVzOiBgYFwiQUxMXCIgfCBcIkFVRElUX0NPTlRST0xcIiB8IFwiQVVESVRfV1JJVEVcIiB8IFwiQkxPQ0tfU1VTUEVORFwiIHwgXCJDSE9XTlwiIHwgXCJEQUNfT1ZFUlJJREVcIiB8IFwiREFDX1JFQURfU0VBUkNIXCIgfCBcIkZPV05FUlwiIHwgXCJGU0VUSURcIiB8IFwiSVBDX0xPQ0tcIiB8IFwiSVBDX09XTkVSXCIgfCBcIktJTExcIiB8IFwiTEVBU0VcIiB8IFwiTElOVVhfSU1NVVRBQkxFXCIgfCBcIk1BQ19BRE1JTlwiIHwgXCJNQUNfT1ZFUlJJREVcIiB8IFwiTUtOT0RcIiB8IFwiTkVUX0FETUlOXCIgfCBcIk5FVF9CSU5EX1NFUlZJQ0VcIiB8IFwiTkVUX0JST0FEQ0FTVFwiIHwgXCJORVRfUkFXXCIgfCBcIlNFVEZDQVBcIiB8IFwiU0VUR0lEXCIgfCBcIlNFVFBDQVBcIiB8IFwiU0VUVUlEXCIgfCBcIlNZU19BRE1JTlwiIHwgXCJTWVNfQk9PVFwiIHwgXCJTWVNfQ0hST09UXCIgfCBcIlNZU19NT0RVTEVcIiB8IFwiU1lTX05JQ0VcIiB8IFwiU1lTX1BBQ0NUXCIgfCBcIlNZU19QVFJBQ0VcIiB8IFwiU1lTX1JBV0lPXCIgfCBcIlNZU19SRVNPVVJDRVwiIHwgXCJTWVNfVElNRVwiIHwgXCJTWVNfVFRZX0NPTkZJR1wiIHwgXCJTWVNMT0dcIiB8IFwiV0FLRV9BTEFSTVwiYGBcbiAqL1xuRHJvcD86IHN0cmluZ1tdXG59XG4vKipcbiAqIFRoZSBjb250YWluZXIgcGF0aCwgbW91bnQgb3B0aW9ucywgYW5kIHNpemUgb2YgdGhlIHRtcGZzIG1vdW50LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRtcGZzIHtcbi8qKlxuICogVGhlIG1heGltdW0gc2l6ZSAoaW4gTWlCKSBvZiB0aGUgdG1wZnMgdm9sdW1lLlxuICovXG5TaXplOiBudW1iZXJcbi8qKlxuICogVGhlIGFic29sdXRlIGZpbGUgcGF0aCB3aGVyZSB0aGUgdG1wZnMgdm9sdW1lIGlzIHRvIGJlIG1vdW50ZWQuXG4gKi9cbkNvbnRhaW5lclBhdGg/OiBzdHJpbmdcbi8qKlxuICogVGhlIGxpc3Qgb2YgdG1wZnMgdm9sdW1lIG1vdW50IG9wdGlvbnMuXG4gKiAgVmFsaWQgdmFsdWVzOiBgYFwiZGVmYXVsdHNcIiB8IFwicm9cIiB8IFwicndcIiB8IFwic3VpZFwiIHwgXCJub3N1aWRcIiB8IFwiZGV2XCIgfCBcIm5vZGV2XCIgfCBcImV4ZWNcIiB8IFwibm9leGVjXCIgfCBcInN5bmNcIiB8IFwiYXN5bmNcIiB8IFwiZGlyc3luY1wiIHwgXCJyZW1vdW50XCIgfCBcIm1hbmRcIiB8IFwibm9tYW5kXCIgfCBcImF0aW1lXCIgfCBcIm5vYXRpbWVcIiB8IFwiZGlyYXRpbWVcIiB8IFwibm9kaXJhdGltZVwiIHwgXCJiaW5kXCIgfCBcInJiaW5kXCIgfCBcInVuYmluZGFibGVcIiB8IFwicnVuYmluZGFibGVcIiB8IFwicHJpdmF0ZVwiIHwgXCJycHJpdmF0ZVwiIHwgXCJzaGFyZWRcIiB8IFwicnNoYXJlZFwiIHwgXCJzbGF2ZVwiIHwgXCJyc2xhdmVcIiB8IFwicmVsYXRpbWVcIiB8IFwibm9yZWxhdGltZVwiIHwgXCJzdHJpY3RhdGltZVwiIHwgXCJub3N0cmljdGF0aW1lXCIgfCBcIm1vZGVcIiB8IFwidWlkXCIgfCBcImdpZFwiIHwgXCJucl9pbm9kZXNcIiB8IFwibnJfYmxvY2tzXCIgfCBcIm1wb2xcImBgXG4gKi9cbk1vdW50T3B0aW9ucz86IHN0cmluZ1tdXG59XG4vKipcbiAqIFRoZSBgYERldmljZWBgIHByb3BlcnR5IHNwZWNpZmllcyBhbiBvYmplY3QgcmVwcmVzZW50aW5nIGEgY29udGFpbmVyIGluc3RhbmNlIGhvc3QgZGV2aWNlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERldmljZSB7XG4vKipcbiAqIFRoZSBwYXRoIGZvciB0aGUgZGV2aWNlIG9uIHRoZSBob3N0IGNvbnRhaW5lciBpbnN0YW5jZS5cbiAqL1xuSG9zdFBhdGg/OiBzdHJpbmdcbi8qKlxuICogVGhlIGV4cGxpY2l0IHBlcm1pc3Npb25zIHRvIHByb3ZpZGUgdG8gdGhlIGNvbnRhaW5lciBmb3IgdGhlIGRldmljZS4gQnkgZGVmYXVsdCwgdGhlIGNvbnRhaW5lciBoYXMgcGVybWlzc2lvbnMgZm9yIGBgcmVhZGBgLCBgYHdyaXRlYGAsIGFuZCBgYG1rbm9kYGAgZm9yIHRoZSBkZXZpY2UuXG4gKi9cblBlcm1pc3Npb25zPzogc3RyaW5nW11cbi8qKlxuICogVGhlIHBhdGggaW5zaWRlIHRoZSBjb250YWluZXIgYXQgd2hpY2ggdG8gZXhwb3NlIHRoZSBob3N0IGRldmljZS5cbiAqL1xuQ29udGFpbmVyUGF0aD86IHN0cmluZ1xufVxuLyoqXG4gKiBUaGUgcmVzdGFydCBwb2xpY3kgZm9yIGEgY29udGFpbmVyLiBXaGVuIHlvdSBzZXQgdXAgYSByZXN0YXJ0IHBvbGljeSwgQW1hem9uIEVDUyBjYW4gcmVzdGFydCB0aGUgY29udGFpbmVyIHdpdGhvdXQgbmVlZGluZyB0byByZXBsYWNlIHRoZSB0YXNrLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtSZXN0YXJ0IGluZGl2aWR1YWwgY29udGFpbmVycyBpbiBBbWF6b24gRUNTIHRhc2tzIHdpdGggY29udGFpbmVyIHJlc3RhcnQgcG9saWNpZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2NvbnRhaW5lci1yZXN0YXJ0LXBvbGljeS5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSouXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVzdGFydFBvbGljeSB7XG4vKipcbiAqIEEgbGlzdCBvZiBleGl0IGNvZGVzIHRoYXQgQW1hem9uIEVDUyB3aWxsIGlnbm9yZSBhbmQgbm90IGF0dGVtcHQgYSByZXN0YXJ0IG9uLiBZb3UgY2FuIHNwZWNpZnkgYSBtYXhpbXVtIG9mIDUwIGNvbnRhaW5lciBleGl0IGNvZGVzLiBCeSBkZWZhdWx0LCBBbWF6b24gRUNTIGRvZXMgbm90IGlnbm9yZSBhbnkgZXhpdCBjb2Rlcy5cbiAqL1xuSWdub3JlZEV4aXRDb2Rlcz86IG51bWJlcltdXG4vKipcbiAqIEEgcGVyaW9kIG9mIHRpbWUgKGluIHNlY29uZHMpIHRoYXQgdGhlIGNvbnRhaW5lciBtdXN0IHJ1biBmb3IgYmVmb3JlIGEgcmVzdGFydCBjYW4gYmUgYXR0ZW1wdGVkLiBBIGNvbnRhaW5lciBjYW4gYmUgcmVzdGFydGVkIG9ubHkgb25jZSBldmVyeSBgYHJlc3RhcnRBdHRlbXB0UGVyaW9kYGAgc2Vjb25kcy4gSWYgYSBjb250YWluZXIgaXNuJ3QgYWJsZSB0byBydW4gZm9yIHRoaXMgdGltZSBwZXJpb2QgYW5kIGV4aXRzIGVhcmx5LCBpdCB3aWxsIG5vdCBiZSByZXN0YXJ0ZWQuIFlvdSBjYW4gc2V0IGEgbWluaW11bSBgYHJlc3RhcnRBdHRlbXB0UGVyaW9kYGAgb2YgNjAgc2Vjb25kcyBhbmQgYSBtYXhpbXVtIGBgcmVzdGFydEF0dGVtcHRQZXJpb2RgYCBvZiAxODAwIHNlY29uZHMuIEJ5IGRlZmF1bHQsIGEgY29udGFpbmVyIG11c3QgcnVuIGZvciAzMDAgc2Vjb25kcyBiZWZvcmUgaXQgY2FuIGJlIHJlc3RhcnRlZC5cbiAqL1xuUmVzdGFydEF0dGVtcHRQZXJpb2Q/OiBudW1iZXJcbi8qKlxuICogU3BlY2lmaWVzIHdoZXRoZXIgYSByZXN0YXJ0IHBvbGljeSBpcyBlbmFibGVkIGZvciB0aGUgY29udGFpbmVyLlxuICovXG5FbmFibGVkPzogYm9vbGVhblxufVxuLyoqXG4gKiBUaGUgZGV0YWlscyBmb3IgYSB2b2x1bWUgbW91bnQgcG9pbnQgdGhhdCdzIHVzZWQgaW4gYSBjb250YWluZXIgZGVmaW5pdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNb3VudFBvaW50IHtcbi8qKlxuICogSWYgdGhpcyB2YWx1ZSBpcyBgYHRydWVgYCwgdGhlIGNvbnRhaW5lciBoYXMgcmVhZC1vbmx5IGFjY2VzcyB0byB0aGUgdm9sdW1lLiBJZiB0aGlzIHZhbHVlIGlzIGBgZmFsc2VgYCwgdGhlbiB0aGUgY29udGFpbmVyIGNhbiB3cml0ZSB0byB0aGUgdm9sdW1lLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBgYGZhbHNlYGAuXG4gKi9cblJlYWRPbmx5PzogYm9vbGVhblxuLyoqXG4gKiBUaGUgbmFtZSBvZiB0aGUgdm9sdW1lIHRvIG1vdW50LiBNdXN0IGJlIGEgdm9sdW1lIG5hbWUgcmVmZXJlbmNlZCBpbiB0aGUgYGBuYW1lYGAgcGFyYW1ldGVyIG9mIHRhc2sgZGVmaW5pdGlvbiBgYHZvbHVtZWBgLlxuICovXG5Tb3VyY2VWb2x1bWU/OiBzdHJpbmdcbi8qKlxuICogVGhlIHBhdGggb24gdGhlIGNvbnRhaW5lciB0byBtb3VudCB0aGUgaG9zdCB2b2x1bWUgYXQuXG4gKi9cbkNvbnRhaW5lclBhdGg/OiBzdHJpbmdcbn1cbi8qKlxuICogVGhlIGBgQ29udGFpbmVyRGVwZW5kZW5jeWBgIHByb3BlcnR5IHNwZWNpZmllcyB0aGUgZGVwZW5kZW5jaWVzIGRlZmluZWQgZm9yIGNvbnRhaW5lciBzdGFydHVwIGFuZCBzaHV0ZG93bi4gQSBjb250YWluZXIgY2FuIGNvbnRhaW4gbXVsdGlwbGUgZGVwZW5kZW5jaWVzLiBXaGVuIGEgZGVwZW5kZW5jeSBpcyBkZWZpbmVkIGZvciBjb250YWluZXIgc3RhcnR1cCwgZm9yIGNvbnRhaW5lciBzaHV0ZG93biBpdCBpcyByZXZlcnNlZC5cbiAqICBZb3VyIEFtYXpvbiBFQ1MgY29udGFpbmVyIGluc3RhbmNlcyByZXF1aXJlIGF0IGxlYXN0IHZlcnNpb24gMS4yNi4wIG9mIHRoZSBjb250YWluZXIgYWdlbnQgdG8gZW5hYmxlIGNvbnRhaW5lciBkZXBlbmRlbmNpZXMuIEhvd2V2ZXIsIHdlIHJlY29tbWVuZCB1c2luZyB0aGUgbGF0ZXN0IGNvbnRhaW5lciBhZ2VudCB2ZXJzaW9uLiBGb3IgaW5mb3JtYXRpb24gYWJvdXQgY2hlY2tpbmcgeW91ciBhZ2VudCB2ZXJzaW9uIGFuZCB1cGRhdGluZyB0byB0aGUgbGF0ZXN0IHZlcnNpb24sIHNlZSBbVXBkYXRpbmcgdGhlIEFtYXpvbiBFQ1MgQ29udGFpbmVyIEFnZW50XShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9lY3MtYWdlbnQtdXBkYXRlLmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi4gSWYgeW91IGFyZSB1c2luZyBhbiBBbWF6b24gRUNTLW9wdGltaXplZCBMaW51eCBBTUksIHlvdXIgaW5zdGFuY2UgbmVlZHMgYXQgbGVhc3QgdmVyc2lvbiAxLjI2LjAtMSBvZiB0aGUgYGBlY3MtaW5pdGBgIHBhY2thZ2UuIElmIHlvdXIgY29udGFpbmVyIGluc3RhbmNlcyBhcmUgbGF1bmNoZWQgZnJvbSB2ZXJzaW9uIGBgMjAxOTAzMDFgYCBvciBsYXRlciwgdGhlbiB0aGV5IGNvbnRhaW4gdGhlIHJlcXVpcmVkIHZlcnNpb25zIG9mIHRoZSBjb250YWluZXIgYWdlbnQgYW5kIGBgZWNzLWluaXRgYC4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbQW1hem9uIEVDUy1vcHRpbWl6ZWQgTGludXggQU1JXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9lY3Mtb3B0aW1pemVkX0FNSS5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSouXG4gKiAgIEZvciB0YXNrcyB1c2luZyB0aGUgRmFyZ2F0ZSBsYXVuY2ggdHlwZSwgdGhpcyBwYXJhbWV0ZXIgcmVxdWlyZXMgdGhhdCB0aGUgdGFzayBvciBzZXJ2aWNlIHVzZXMgcGxhdGZvcm0gdmVyc2lvbiAxLjMuMCBvciBsYXRlci5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb250YWluZXJEZXBlbmRlbmN5IHtcbi8qKlxuICogVGhlIGRlcGVuZGVuY3kgY29uZGl0aW9uIG9mIHRoZSBjb250YWluZXIuIFRoZSBmb2xsb3dpbmcgYXJlIHRoZSBhdmFpbGFibGUgY29uZGl0aW9ucyBhbmQgdGhlaXIgYmVoYXZpb3I6XG4gKiAgICsgIGBgU1RBUlRgYCAtIFRoaXMgY29uZGl0aW9uIGVtdWxhdGVzIHRoZSBiZWhhdmlvciBvZiBsaW5rcyBhbmQgdm9sdW1lcyB0b2RheS4gSXQgdmFsaWRhdGVzIHRoYXQgYSBkZXBlbmRlbnQgY29udGFpbmVyIGlzIHN0YXJ0ZWQgYmVmb3JlIHBlcm1pdHRpbmcgb3RoZXIgY29udGFpbmVycyB0byBzdGFydC5cbiAqICAgKyAgYGBDT01QTEVURWBgIC0gVGhpcyBjb25kaXRpb24gdmFsaWRhdGVzIHRoYXQgYSBkZXBlbmRlbnQgY29udGFpbmVyIHJ1bnMgdG8gY29tcGxldGlvbiAoZXhpdHMpIGJlZm9yZSBwZXJtaXR0aW5nIG90aGVyIGNvbnRhaW5lcnMgdG8gc3RhcnQuIFRoaXMgY2FuIGJlIHVzZWZ1bCBmb3Igbm9uZXNzZW50aWFsIGNvbnRhaW5lcnMgdGhhdCBydW4gYSBzY3JpcHQgYW5kIHRoZW4gZXhpdC4gVGhpcyBjb25kaXRpb24gY2FuJ3QgYmUgc2V0IG9uIGFuIGVzc2VudGlhbCBjb250YWluZXIuXG4gKiAgICsgIGBgU1VDQ0VTU2BgIC0gVGhpcyBjb25kaXRpb24gaXMgdGhlIHNhbWUgYXMgYGBDT01QTEVURWBgLCBidXQgaXQgYWxzbyByZXF1aXJlcyB0aGF0IHRoZSBjb250YWluZXIgZXhpdHMgd2l0aCBhIGBgemVyb2BgIHN0YXR1cy4gVGhpcyBjb25kaXRpb24gY2FuJ3QgYmUgc2V0IG9uIGFuIGVzc2VudGlhbCBjb250YWluZXIuXG4gKiAgICsgIGBgSEVBTFRIWWBgIC0gVGhpcyBjb25kaXRpb24gdmFsaWRhdGVzIHRoYXQgdGhlIGRlcGVuZGVudCBjb250YWluZXIgcGFzc2VzIGl0cyBEb2NrZXIgaGVhbHRoIGNoZWNrIGJlZm9yZSBwZXJtaXR0aW5nIG90aGVyIGNvbnRhaW5lcnMgdG8gc3RhcnQuIFRoaXMgcmVxdWlyZXMgdGhhdCB0aGUgZGVwZW5kZW50IGNvbnRhaW5lciBoYXMgaGVhbHRoIGNoZWNrcyBjb25maWd1cmVkLiBUaGlzIGNvbmRpdGlvbiBpcyBjb25maXJtZWQgb25seSBhdCB0YXNrIHN0YXJ0dXAuXG4gKi9cbkNvbmRpdGlvbj86IHN0cmluZ1xuLyoqXG4gKiBUaGUgbmFtZSBvZiBhIGNvbnRhaW5lci5cbiAqL1xuQ29udGFpbmVyTmFtZT86IHN0cmluZ1xufVxuLyoqXG4gKiBUaGUgYGBQb3J0TWFwcGluZ2BgIHByb3BlcnR5IHNwZWNpZmllcyBhIHBvcnQgbWFwcGluZy4gUG9ydCBtYXBwaW5ncyBhbGxvdyBjb250YWluZXJzIHRvIGFjY2VzcyBwb3J0cyBvbiB0aGUgaG9zdCBjb250YWluZXIgaW5zdGFuY2UgdG8gc2VuZCBvciByZWNlaXZlIHRyYWZmaWMuIFBvcnQgbWFwcGluZ3MgYXJlIHNwZWNpZmllZCBhcyBwYXJ0IG9mIHRoZSBjb250YWluZXIgZGVmaW5pdGlvbi5cbiAqICBJZiB5b3UgYXJlIHVzaW5nIGNvbnRhaW5lcnMgaW4gYSB0YXNrIHdpdGggdGhlIGBgYXdzdnBjYGAgb3IgYGBob3N0YGAgbmV0d29yayBtb2RlLCBleHBvc2VkIHBvcnRzIHNob3VsZCBiZSBzcGVjaWZpZWQgdXNpbmcgYGBjb250YWluZXJQb3J0YGAuIFRoZSBgYGhvc3RQb3J0YGAgY2FuIGJlIGxlZnQgYmxhbmsgb3IgaXQgbXVzdCBiZSB0aGUgc2FtZSB2YWx1ZSBhcyB0aGUgYGBjb250YWluZXJQb3J0YGAuXG4gKiAgQWZ0ZXIgYSB0YXNrIHJlYWNoZXMgdGhlIGBgUlVOTklOR2BgIHN0YXR1cywgbWFudWFsIGFuZCBhdXRvbWF0aWMgaG9zdCBhbmQgY29udGFpbmVyIHBvcnQgYXNzaWdubWVudHMgYXJlIHZpc2libGUgaW4gdGhlIGBgbmV0d29ya0JpbmRpbmdzYGAgc2VjdGlvbiBvZiBbRGVzY3JpYmVUYXNrc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9EZXNjcmliZVRhc2tzLmh0bWwpIEFQSSByZXNwb25zZXMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUG9ydE1hcHBpbmcge1xuLyoqXG4gKiBUaGUgYXBwbGljYXRpb24gcHJvdG9jb2wgdGhhdCdzIHVzZWQgZm9yIHRoZSBwb3J0IG1hcHBpbmcuIFRoaXMgcGFyYW1ldGVyIG9ubHkgYXBwbGllcyB0byBTZXJ2aWNlIENvbm5lY3QuIFdlIHJlY29tbWVuZCB0aGF0IHlvdSBzZXQgdGhpcyBwYXJhbWV0ZXIgdG8gYmUgY29uc2lzdGVudCB3aXRoIHRoZSBwcm90b2NvbCB0aGF0IHlvdXIgYXBwbGljYXRpb24gdXNlcy4gSWYgeW91IHNldCB0aGlzIHBhcmFtZXRlciwgQW1hem9uIEVDUyBhZGRzIHByb3RvY29sLXNwZWNpZmljIGNvbm5lY3Rpb24gaGFuZGxpbmcgdG8gdGhlIFNlcnZpY2UgQ29ubmVjdCBwcm94eS4gSWYgeW91IHNldCB0aGlzIHBhcmFtZXRlciwgQW1hem9uIEVDUyBhZGRzIHByb3RvY29sLXNwZWNpZmljIHRlbGVtZXRyeSBpbiB0aGUgQW1hem9uIEVDUyBjb25zb2xlIGFuZCBDbG91ZFdhdGNoLlxuICogIElmIHlvdSBkb24ndCBzZXQgYSB2YWx1ZSBmb3IgdGhpcyBwYXJhbWV0ZXIsIHRoZW4gVENQIGlzIHVzZWQuIEhvd2V2ZXIsIEFtYXpvbiBFQ1MgZG9lc24ndCBhZGQgcHJvdG9jb2wtc3BlY2lmaWMgdGVsZW1ldHJ5IGZvciBUQ1AuXG4gKiAgYGBhcHBQcm90b2NvbGBgIGlzIGltbXV0YWJsZSBpbiBhIFNlcnZpY2UgQ29ubmVjdCBzZXJ2aWNlLiBVcGRhdGluZyB0aGlzIGZpZWxkIHJlcXVpcmVzIGEgc2VydmljZSBkZWxldGlvbiBhbmQgcmVkZXBsb3ltZW50LlxuICogIFRhc2tzIHRoYXQgcnVuIGluIGEgbmFtZXNwYWNlIGNhbiB1c2Ugc2hvcnQgbmFtZXMgdG8gY29ubmVjdCB0byBzZXJ2aWNlcyBpbiB0aGUgbmFtZXNwYWNlLiBUYXNrcyBjYW4gY29ubmVjdCB0byBzZXJ2aWNlcyBhY3Jvc3MgYWxsIG9mIHRoZSBjbHVzdGVycyBpbiB0aGUgbmFtZXNwYWNlLiBUYXNrcyBjb25uZWN0IHRocm91Z2ggYSBtYW5hZ2VkIHByb3h5IGNvbnRhaW5lciB0aGF0IGNvbGxlY3RzIGxvZ3MgYW5kIG1ldHJpY3MgZm9yIGluY3JlYXNlZCB2aXNpYmlsaXR5LiBPbmx5IHRoZSB0YXNrcyB0aGF0IEFtYXpvbiBFQ1Mgc2VydmljZXMgY3JlYXRlIGFyZSBzdXBwb3J0ZWQgd2l0aCBTZXJ2aWNlIENvbm5lY3QuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1NlcnZpY2UgQ29ubmVjdF0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvc2VydmljZS1jb25uZWN0Lmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuQXBwUHJvdG9jb2w/OiAoXCJodHRwXCIgfCBcImh0dHAyXCIgfCBcImdycGNcIilcbi8qKlxuICogVGhlIHBvcnQgbnVtYmVyIHJhbmdlIG9uIHRoZSBjb250YWluZXIgdGhhdCdzIGJvdW5kIHRvIHRoZSBkeW5hbWljYWxseSBtYXBwZWQgaG9zdCBwb3J0IHJhbmdlLiBcbiAqICBUaGUgZm9sbG93aW5nIHJ1bGVzIGFwcGx5IHdoZW4geW91IHNwZWNpZnkgYSBgYGNvbnRhaW5lclBvcnRSYW5nZWBgOlxuICogICArICBZb3UgbXVzdCB1c2UgZWl0aGVyIHRoZSBgYGJyaWRnZWBgIG5ldHdvcmsgbW9kZSBvciB0aGUgYGBhd3N2cGNgYCBuZXR3b3JrIG1vZGUuXG4gKiAgICsgIFRoaXMgcGFyYW1ldGVyIGlzIGF2YWlsYWJsZSBmb3IgYm90aCB0aGUgRUMyIGFuZCBGQVJHQVRFbG9uZyBsYXVuY2ggdHlwZXMuXG4gKiAgICsgIFRoaXMgcGFyYW1ldGVyIGlzIGF2YWlsYWJsZSBmb3IgYm90aCB0aGUgTGludXggYW5kIFdpbmRvd3Mgb3BlcmF0aW5nIHN5c3RlbXMuXG4gKiAgICsgIFRoZSBjb250YWluZXIgaW5zdGFuY2UgbXVzdCBoYXZlIGF0IGxlYXN0IHZlcnNpb24gMS42Ny4wIG9mIHRoZSBjb250YWluZXIgYWdlbnQgYW5kIGF0IGxlYXN0IHZlcnNpb24gMS42Ny4wLTEgb2YgdGhlIGBgZWNzLWluaXRgYCBwYWNrYWdlIFxuICogICArICBZb3UgY2FuIHNwZWNpZnkgYSBtYXhpbXVtIG9mIDEwMCBwb3J0IHJhbmdlcyBwZXIgY29udGFpbmVyLlxuICogICArICBZb3UgZG8gbm90IHNwZWNpZnkgYSBgYGhvc3RQb3J0UmFuZ2VgYC4gVGhlIHZhbHVlIG9mIHRoZSBgYGhvc3RQb3J0UmFuZ2VgYCBpcyBzZXQgYXMgZm9sbG93czpcbiAqICAgKyAgRm9yIGNvbnRhaW5lcnMgaW4gYSB0YXNrIHdpdGggdGhlIGBgYXdzdnBjYGAgbmV0d29yayBtb2RlLCB0aGUgYGBob3N0UG9ydFJhbmdlYGAgaXMgc2V0IHRvIHRoZSBzYW1lIHZhbHVlIGFzIHRoZSBgYGNvbnRhaW5lclBvcnRSYW5nZWBgLiBUaGlzIGlzIGEgc3RhdGljIG1hcHBpbmcgc3RyYXRlZ3kuXG4gKiAgICsgIEZvciBjb250YWluZXJzIGluIGEgdGFzayB3aXRoIHRoZSBgYGJyaWRnZWBgIG5ldHdvcmsgbW9kZSwgdGhlIEFtYXpvbiBFQ1MgYWdlbnQgZmluZHMgb3BlbiBob3N0IHBvcnRzIGZyb20gdGhlIGRlZmF1bHQgZXBoZW1lcmFsIHJhbmdlIGFuZCBwYXNzZXMgaXQgdG8gZG9ja2VyIHRvIGJpbmQgdGhlbSB0byB0aGUgY29udGFpbmVyIHBvcnRzLlxuICogICBcbiAqICAgKyAgVGhlIGBgY29udGFpbmVyUG9ydFJhbmdlYGAgdmFsaWQgdmFsdWVzIGFyZSBiZXR3ZWVuIDEgYW5kIDY1NTM1LlxuICogICArICBBIHBvcnQgY2FuIG9ubHkgYmUgaW5jbHVkZWQgaW4gb25lIHBvcnQgbWFwcGluZyBwZXIgY29udGFpbmVyLlxuICogICArICBZb3UgY2Fubm90IHNwZWNpZnkgb3ZlcmxhcHBpbmcgcG9ydCByYW5nZXMuXG4gKiAgICsgIFRoZSBmaXJzdCBwb3J0IGluIHRoZSByYW5nZSBtdXN0IGJlIGxlc3MgdGhhbiBsYXN0IHBvcnQgaW4gdGhlIHJhbmdlLlxuICogICArICBEb2NrZXIgcmVjb21tZW5kcyB0aGF0IHlvdSB0dXJuIG9mZiB0aGUgZG9ja2VyLXByb3h5IGluIHRoZSBEb2NrZXIgZGFlbW9uIGNvbmZpZyBmaWxlIHdoZW4geW91IGhhdmUgYSBsYXJnZSBudW1iZXIgb2YgcG9ydHMuXG4gKiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbSXNzdWUgIzExMTg1XShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vaHR0cHM6Ly9naXRodWIuY29tL21vYnkvbW9ieS9pc3N1ZXMvMTExODUpIG9uIHRoZSBHaXRodWIgd2Vic2l0ZS5cbiAqICBGb3IgaW5mb3JtYXRpb24gYWJvdXQgaG93IHRvIHR1cm4gb2ZmIHRoZSBkb2NrZXItcHJveHkgaW4gdGhlIERvY2tlciBkYWVtb24gY29uZmlnIGZpbGUsIHNlZSBbRG9ja2VyIGRhZW1vbl0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvYm9vdHN0cmFwX2NvbnRhaW5lcl9pbnN0YW5jZS5odG1sI2Jvb3RzdHJhcF9kb2NrZXJfZGFlbW9uKSBpbiB0aGUgKkFtYXpvbiBFQ1MgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqICAgXG4gKiAgWW91IGNhbiBjYWxsIFtEZXNjcmliZVRhc2tzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0Rlc2NyaWJlVGFza3MuaHRtbCkgdG8gdmlldyB0aGUgYGBob3N0UG9ydFJhbmdlYGAgd2hpY2ggYXJlIHRoZSBob3N0IHBvcnRzIHRoYXQgYXJlIGJvdW5kIHRvIHRoZSBjb250YWluZXIgcG9ydHMuXG4gKi9cbkNvbnRhaW5lclBvcnRSYW5nZT86IHN0cmluZ1xuLyoqXG4gKiBUaGUgcG9ydCBudW1iZXIgb24gdGhlIGNvbnRhaW5lciBpbnN0YW5jZSB0byByZXNlcnZlIGZvciB5b3VyIGNvbnRhaW5lci5cbiAqICBJZiB5b3Ugc3BlY2lmeSBhIGBgY29udGFpbmVyUG9ydFJhbmdlYGAsIGxlYXZlIHRoaXMgZmllbGQgZW1wdHkgYW5kIHRoZSB2YWx1ZSBvZiB0aGUgYGBob3N0UG9ydGBgIGlzIHNldCBhcyBmb2xsb3dzOlxuICogICArICBGb3IgY29udGFpbmVycyBpbiBhIHRhc2sgd2l0aCB0aGUgYGBhd3N2cGNgYCBuZXR3b3JrIG1vZGUsIHRoZSBgYGhvc3RQb3J0YGAgaXMgc2V0IHRvIHRoZSBzYW1lIHZhbHVlIGFzIHRoZSBgYGNvbnRhaW5lclBvcnRgYC4gVGhpcyBpcyBhIHN0YXRpYyBtYXBwaW5nIHN0cmF0ZWd5LlxuICogICArICBGb3IgY29udGFpbmVycyBpbiBhIHRhc2sgd2l0aCB0aGUgYGBicmlkZ2VgYCBuZXR3b3JrIG1vZGUsIHRoZSBBbWF6b24gRUNTIGFnZW50IGZpbmRzIG9wZW4gcG9ydHMgb24gdGhlIGhvc3QgYW5kIGF1dG9tYXRpY2FsbHkgYmluZHMgdGhlbSB0byB0aGUgY29udGFpbmVyIHBvcnRzLiBUaGlzIGlzIGEgZHluYW1pYyBtYXBwaW5nIHN0cmF0ZWd5LlxuICogICBcbiAqICBJZiB5b3UgdXNlIGNvbnRhaW5lcnMgaW4gYSB0YXNrIHdpdGggdGhlIGBgYXdzdnBjYGAgb3IgYGBob3N0YGAgbmV0d29yayBtb2RlLCB0aGUgYGBob3N0UG9ydGBgIGNhbiBlaXRoZXIgYmUgbGVmdCBibGFuayBvciBzZXQgdG8gdGhlIHNhbWUgdmFsdWUgYXMgdGhlIGBgY29udGFpbmVyUG9ydGBgLlxuICogIElmIHlvdSB1c2UgY29udGFpbmVycyBpbiBhIHRhc2sgd2l0aCB0aGUgYGBicmlkZ2VgYCBuZXR3b3JrIG1vZGUsIHlvdSBjYW4gc3BlY2lmeSBhIG5vbi1yZXNlcnZlZCBob3N0IHBvcnQgZm9yIHlvdXIgY29udGFpbmVyIHBvcnQgbWFwcGluZywgb3IgeW91IGNhbiBvbWl0IHRoZSBgYGhvc3RQb3J0YGAgKG9yIHNldCBpdCB0byBgYDBgYCkgd2hpbGUgc3BlY2lmeWluZyBhIGBgY29udGFpbmVyUG9ydGBgIGFuZCB5b3VyIGNvbnRhaW5lciBhdXRvbWF0aWNhbGx5IHJlY2VpdmVzIGEgcG9ydCBpbiB0aGUgZXBoZW1lcmFsIHBvcnQgcmFuZ2UgZm9yIHlvdXIgY29udGFpbmVyIGluc3RhbmNlIG9wZXJhdGluZyBzeXN0ZW0gYW5kIERvY2tlciB2ZXJzaW9uLlxuICogIFRoZSBkZWZhdWx0IGVwaGVtZXJhbCBwb3J0IHJhbmdlIGZvciBEb2NrZXIgdmVyc2lvbiAxLjYuMCBhbmQgbGF0ZXIgaXMgbGlzdGVkIG9uIHRoZSBpbnN0YW5jZSB1bmRlciBgYC9wcm9jL3N5cy9uZXQvaXB2NC9pcF9sb2NhbF9wb3J0X3JhbmdlYGAuIElmIHRoaXMga2VybmVsIHBhcmFtZXRlciBpcyB1bmF2YWlsYWJsZSwgdGhlIGRlZmF1bHQgZXBoZW1lcmFsIHBvcnQgcmFuZ2UgZnJvbSA0OTE1MyB0aHJvdWdoIDY1NTM1IChMaW51eCkgb3IgNDkxNTIgdGhyb3VnaCA2NTUzNSAoV2luZG93cykgaXMgdXNlZC4gRG8gbm90IGF0dGVtcHQgdG8gc3BlY2lmeSBhIGhvc3QgcG9ydCBpbiB0aGUgZXBoZW1lcmFsIHBvcnQgcmFuZ2UgYXMgdGhlc2UgYXJlIHJlc2VydmVkIGZvciBhdXRvbWF0aWMgYXNzaWdubWVudC4gSW4gZ2VuZXJhbCwgcG9ydHMgYmVsb3cgMzI3NjggYXJlIG91dHNpZGUgb2YgdGhlIGVwaGVtZXJhbCBwb3J0IHJhbmdlLlxuICogIFRoZSBkZWZhdWx0IHJlc2VydmVkIHBvcnRzIGFyZSAyMiBmb3IgU1NILCB0aGUgRG9ja2VyIHBvcnRzIDIzNzUgYW5kIDIzNzYsIGFuZCB0aGUgQW1hem9uIEVDUyBjb250YWluZXIgYWdlbnQgcG9ydHMgNTE2NzgtNTE2ODAuIEFueSBob3N0IHBvcnQgdGhhdCB3YXMgcHJldmlvdXNseSBzcGVjaWZpZWQgaW4gYSBydW5uaW5nIHRhc2sgaXMgYWxzbyByZXNlcnZlZCB3aGlsZSB0aGUgdGFzayBpcyBydW5uaW5nLiBUaGF0IGlzLCBhZnRlciBhIHRhc2sgc3RvcHMsIHRoZSBob3N0IHBvcnQgaXMgcmVsZWFzZWQuIFRoZSBjdXJyZW50IHJlc2VydmVkIHBvcnRzIGFyZSBkaXNwbGF5ZWQgaW4gdGhlIGBgcmVtYWluaW5nUmVzb3VyY2VzYGAgb2YgW0Rlc2NyaWJlQ29udGFpbmVySW5zdGFuY2VzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0Rlc2NyaWJlQ29udGFpbmVySW5zdGFuY2VzLmh0bWwpIG91dHB1dC4gQSBjb250YWluZXIgaW5zdGFuY2UgY2FuIGhhdmUgdXAgdG8gMTAwIHJlc2VydmVkIHBvcnRzIGF0IGEgdGltZS4gVGhpcyBudW1iZXIgaW5jbHVkZXMgdGhlIGRlZmF1bHQgcmVzZXJ2ZWQgcG9ydHMuIEF1dG9tYXRpY2FsbHkgYXNzaWduZWQgcG9ydHMgYXJlbid0IGluY2x1ZGVkIGluIHRoZSAxMDAgcmVzZXJ2ZWQgcG9ydHMgcXVvdGEuXG4gKi9cbkhvc3RQb3J0PzogbnVtYmVyXG4vKipcbiAqIFRoZSBwb3J0IG51bWJlciBvbiB0aGUgY29udGFpbmVyIHRoYXQncyBib3VuZCB0byB0aGUgdXNlci1zcGVjaWZpZWQgb3IgYXV0b21hdGljYWxseSBhc3NpZ25lZCBob3N0IHBvcnQuXG4gKiAgSWYgeW91IHVzZSBjb250YWluZXJzIGluIGEgdGFzayB3aXRoIHRoZSBgYGF3c3ZwY2BgIG9yIGBgaG9zdGBgIG5ldHdvcmsgbW9kZSwgc3BlY2lmeSB0aGUgZXhwb3NlZCBwb3J0cyB1c2luZyBgYGNvbnRhaW5lclBvcnRgYC5cbiAqICBJZiB5b3UgdXNlIGNvbnRhaW5lcnMgaW4gYSB0YXNrIHdpdGggdGhlIGBgYnJpZGdlYGAgbmV0d29yayBtb2RlIGFuZCB5b3Ugc3BlY2lmeSBhIGNvbnRhaW5lciBwb3J0IGFuZCBub3QgYSBob3N0IHBvcnQsIHlvdXIgY29udGFpbmVyIGF1dG9tYXRpY2FsbHkgcmVjZWl2ZXMgYSBob3N0IHBvcnQgaW4gdGhlIGVwaGVtZXJhbCBwb3J0IHJhbmdlLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIGBgaG9zdFBvcnRgYC4gUG9ydCBtYXBwaW5ncyB0aGF0IGFyZSBhdXRvbWF0aWNhbGx5IGFzc2lnbmVkIGluIHRoaXMgd2F5IGRvIG5vdCBjb3VudCB0b3dhcmQgdGhlIDEwMCByZXNlcnZlZCBwb3J0cyBsaW1pdCBvZiBhIGNvbnRhaW5lciBpbnN0YW5jZS5cbiAqL1xuQ29udGFpbmVyUG9ydD86IG51bWJlclxuLyoqXG4gKiBUaGUgcHJvdG9jb2wgdXNlZCBmb3IgdGhlIHBvcnQgbWFwcGluZy4gVmFsaWQgdmFsdWVzIGFyZSBgYHRjcGBgIGFuZCBgYHVkcGBgLiBUaGUgZGVmYXVsdCBpcyBgYHRjcGBgLiBgYHByb3RvY29sYGAgaXMgaW1tdXRhYmxlIGluIGEgU2VydmljZSBDb25uZWN0IHNlcnZpY2UuIFVwZGF0aW5nIHRoaXMgZmllbGQgcmVxdWlyZXMgYSBzZXJ2aWNlIGRlbGV0aW9uIGFuZCByZWRlcGxveW1lbnQuXG4gKi9cblByb3RvY29sPzogc3RyaW5nXG4vKipcbiAqIFRoZSBuYW1lIHRoYXQncyB1c2VkIGZvciB0aGUgcG9ydCBtYXBwaW5nLiBUaGlzIHBhcmFtZXRlciBpcyB0aGUgbmFtZSB0aGF0IHlvdSB1c2UgaW4gdGhlIGBgc2VydmljZUNvbm5lY3RDb25maWd1cmF0aW9uYGAgYW5kIHRoZSBgYHZwY0xhdHRpY2VDb25maWd1cmF0aW9uc2BgIG9mIGEgc2VydmljZS4gVGhlIG5hbWUgY2FuIGluY2x1ZGUgdXAgdG8gNjQgY2hhcmFjdGVycy4gVGhlIGNoYXJhY3RlcnMgY2FuIGluY2x1ZGUgbG93ZXJjYXNlIGxldHRlcnMsIG51bWJlcnMsIHVuZGVyc2NvcmVzIChfKSwgYW5kIGh5cGhlbnMgKC0pLiBUaGUgbmFtZSBjYW4ndCBzdGFydCB3aXRoIGEgaHlwaGVuLlxuICovXG5OYW1lPzogc3RyaW5nXG59XG4vKipcbiAqIFRoZSBlcGhlbWVyYWwgc3RvcmFnZSBzZXR0aW5ncyB0byB1c2UgZm9yIHRhc2tzIHJ1biB3aXRoIHRoZSB0YXNrIGRlZmluaXRpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXBoZW1lcmFsU3RvcmFnZSB7XG4vKipcbiAqIFRoZSB0b3RhbCBhbW91bnQsIGluIEdpQiwgb2YgZXBoZW1lcmFsIHN0b3JhZ2UgdG8gc2V0IGZvciB0aGUgdGFzay4gVGhlIG1pbmltdW0gc3VwcG9ydGVkIHZhbHVlIGlzIGBgMjFgYCBHaUIgYW5kIHRoZSBtYXhpbXVtIHN1cHBvcnRlZCB2YWx1ZSBpcyBgYDIwMGBgIEdpQi5cbiAqL1xuU2l6ZUluR2lCPzogbnVtYmVyXG59XG4vKipcbiAqIFRoZSBtZXRhZGF0YSB0aGF0IHlvdSBhcHBseSB0byBhIHJlc291cmNlIHRvIGhlbHAgeW91IGNhdGVnb3JpemUgYW5kIG9yZ2FuaXplIHRoZW0uIEVhY2ggdGFnIGNvbnNpc3RzIG9mIGEga2V5IGFuZCBhbiBvcHRpb25hbCB2YWx1ZS4gWW91IGRlZmluZSB0aGVtLlxuICogIFRoZSBmb2xsb3dpbmcgYmFzaWMgcmVzdHJpY3Rpb25zIGFwcGx5IHRvIHRhZ3M6XG4gKiAgICsgIE1heGltdW0gbnVtYmVyIG9mIHRhZ3MgcGVyIHJlc291cmNlIC0gNTBcbiAqICAgKyAgRm9yIGVhY2ggcmVzb3VyY2UsIGVhY2ggdGFnIGtleSBtdXN0IGJlIHVuaXF1ZSwgYW5kIGVhY2ggdGFnIGtleSBjYW4gaGF2ZSBvbmx5IG9uZSB2YWx1ZS5cbiAqICAgKyAgTWF4aW11bSBrZXkgbGVuZ3RoIC0gMTI4IFVuaWNvZGUgY2hhcmFjdGVycyBpbiBVVEYtOFxuICogICArICBNYXhpbXVtIHZhbHVlIGxlbmd0aCAtIDI1NiBVbmljb2RlIGNoYXJhY3RlcnMgaW4gVVRGLThcbiAqICAgKyAgSWYgeW91ciB0YWdnaW5nIHNjaGVtYSBpcyB1c2VkIGFjcm9zcyBtdWx0aXBsZSBzZXJ2aWNlcyBhbmQgcmVzb3VyY2VzLCByZW1lbWJlciB0aGF0IG90aGVyIHNlcnZpY2VzIG1heSBoYXZlIHJlc3RyaWN0aW9ucyBvbiBhbGxvd2VkIGNoYXJhY3RlcnMuIEdlbmVyYWxseSBhbGxvd2VkIGNoYXJhY3RlcnMgYXJlOiBsZXR0ZXJzLCBudW1iZXJzLCBhbmQgc3BhY2VzIHJlcHJlc2VudGFibGUgaW4gVVRGLTgsIGFuZCB0aGUgZm9sbG93aW5nIGNoYXJhY3RlcnM6ICsgLSA9IC4gXyA6IC8gQC5cbiAqICAgKyAgVGFnIGtleXMgYW5kIHZhbHVlcyBhcmUgY2FzZS1zZW5zaXRpdmUuXG4gKiAgICsgIERvIG5vdCB1c2UgYGBhd3M6YGAsIGBgQVdTOmBgLCBvciBhbnkgdXBwZXIgb3IgbG93ZXJjYXNlIGNvbWJpbmF0aW9uIG9mIHN1Y2ggYXMgYSBwcmVmaXggZm9yIGVpdGhlciBrZXlzIG9yIHZhbHVlcyBhcyBpdCBpcyByZXNlcnZlZCBmb3IgQVdTIHVzZS4gWW91IGNhbm5vdCBlZGl0IG9yIGRlbGV0ZSB0YWcga2V5cyBvciB2YWx1ZXMgd2l0aCB0aGlzIHByZWZpeC4gVGFncyB3aXRoIHRoaXMgcHJlZml4IGRvIG5vdCBjb3VudCBhZ2FpbnN0IHlvdXIgdGFncyBwZXIgcmVzb3VyY2UgbGltaXQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGFnIHtcbi8qKlxuICogVGhlIG9wdGlvbmFsIHBhcnQgb2YgYSBrZXktdmFsdWUgcGFpciB0aGF0IG1ha2UgdXAgYSB0YWcuIEEgYGB2YWx1ZWBgIGFjdHMgYXMgYSBkZXNjcmlwdG9yIHdpdGhpbiBhIHRhZyBjYXRlZ29yeSAoa2V5KS5cbiAqL1xuVmFsdWU/OiBzdHJpbmdcbi8qKlxuICogT25lIHBhcnQgb2YgYSBrZXktdmFsdWUgcGFpciB0aGF0IG1ha2UgdXAgYSB0YWcuIEEgYGBrZXlgYCBpcyBhIGdlbmVyYWwgbGFiZWwgdGhhdCBhY3RzIGxpa2UgYSBjYXRlZ29yeSBmb3IgbW9yZSBzcGVjaWZpYyB0YWcgdmFsdWVzLlxuICovXG5LZXk/OiBzdHJpbmdcbn1cbiJdfQ==
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzLWVjcy10YXNrZGVmaW5pdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImF3cy1lY3MtdGFza2RlZmluaXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUmVnaXN0ZXJzIGEgbmV3IHRhc2sgZGVmaW5pdGlvbiBmcm9tIHRoZSBzdXBwbGllZCBgYGZhbWlseWBgIGFuZCBgYGNvbnRhaW5lckRlZmluaXRpb25zYGAuIE9wdGlvbmFsbHksIHlvdSBjYW4gYWRkIGRhdGEgdm9sdW1lcyB0byB5b3VyIGNvbnRhaW5lcnMgd2l0aCB0aGUgYGB2b2x1bWVzYGAgcGFyYW1ldGVyLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0YXNrIGRlZmluaXRpb24gcGFyYW1ldGVycyBhbmQgZGVmYXVsdHMsIHNlZSBbQW1hem9uIEVDUyBUYXNrIERlZmluaXRpb25zXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS90YXNrX2RlZmludGlvbnMuaHRtbCkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLlxuICogIFlvdSBjYW4gc3BlY2lmeSBhIHJvbGUgZm9yIHlvdXIgdGFzayB3aXRoIHRoZSBgYHRhc2tSb2xlQXJuYGAgcGFyYW1ldGVyLiBXaGVuIHlvdSBzcGVjaWZ5IGEgcm9sZSBmb3IgYSB0YXNrLCBpdHMgY29udGFpbmVycyBjYW4gdGhlbiB1c2UgdGhlIGxhdGVzdCB2ZXJzaW9ucyBvZiB0aGUgQ0xJIG9yIFNES3MgdG8gbWFrZSBBUEkgcmVxdWVzdHMgdG8gdGhlIEFXUyBzZXJ2aWNlcyB0aGF0IGFyZSBzcGVjaWZpZWQgaW4gdGhlIHBvbGljeSB0aGF0J3MgYXNzb2NpYXRlZCB3aXRoIHRoZSByb2xlLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtJQU0gUm9sZXMgZm9yIFRhc2tzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS90YXNrLWlhbS1yb2xlcy5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSouXG4gKiAgWW91IGNhbiBzcGVjaWZ5IGEgRG9ja2VyIG5ldHdvcmtpbmcgbW9kZSBmb3IgdGhlIGNvbnRhaW5lcnMgaW4geW91ciB0YXNrIGRlZmluaXRpb24gd2l0aCB0aGUgYGBuZXR3b3JrTW9kZWBgIHBhcmFtZXRlci4gSWYgeW91IHNwZWNpZnkgdGhlIGBgYXdzdnBjYGAgbmV0d29yayBtb2RlLCB0aGUgdGFzayBpcyBhbGxvY2F0ZWQgYW4gZWxhc3RpYyBuZXR3b3JrIGludGVyZmFjZSwgYW5kIHlvdSBtdXN0IHNwZWNpZnkgYSBbTmV0d29ya0NvbmZpZ3VyYXRpb25dKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfTmV0d29ya0NvbmZpZ3VyYXRpb24uaHRtbCkgd2hlbiB5b3UgY3JlYXRlIGEgc2VydmljZSBvciBydW4gYSB0YXNrIHdpdGggdGhlIHRhc2sgZGVmaW5pdGlvbi4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbVGFzayBOZXR3b3JraW5nXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS90YXNrLW5ldHdvcmtpbmcuaHRtbCkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLlxuICogICBJbiB0aGUgZm9sbG93aW5nIGV4YW1wbGUgb3IgZXhhbXBsZXMsIHRoZSBBdXRob3JpemF0aW9uIGhlYWRlciBjb250ZW50cyAoYGBBVVRIUEFSQU1TYGApIG11c3QgYmUgcmVwbGFjZWQgd2l0aCBhbiBBV1MgU2lnbmF0dXJlIFZlcnNpb24gNCBzaWduYXR1cmUuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1NpZ25hdHVyZSBWZXJzaW9uIDQgU2lnbmluZyBQcm9jZXNzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZ2VuZXJhbC9sYXRlc3QvZ3Ivc2lnbmF0dXJlLXZlcnNpb24tNC5odG1sKSBpbiB0aGUgKkdlbmVyYWwgUmVmZXJlbmNlKi5cbiAqICBZb3Ugb25seSBuZWVkIHRvIGxlYXJuIGhvdyB0byBzaWduIEhUVFAgcmVxdWVzdHMgaWYgeW91IGludGVuZCB0byBjcmVhdGUgdGhlbSBtYW51YWxseS4gV2hlbiB5b3UgdXNlIHRoZSBbXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xpLykgb3Igb25lIG9mIHRoZSBbU0RLc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3Rvb2xzLykgdG8gbWFrZSByZXF1ZXN0cyB0byBBV1MsIHRoZXNlIHRvb2xzIGF1dG9tYXRpY2FsbHkgc2lnbiB0aGUgcmVxdWVzdHMgZm9yIHlvdSwgd2l0aCB0aGUgYWNjZXNzIGtleSB0aGF0IHlvdSBzcGVjaWZ5IHdoZW4geW91IGNvbmZpZ3VyZSB0aGUgdG9vbHMuIFdoZW4geW91IHVzZSB0aGVzZSB0b29scywgeW91IGRvbid0IGhhdmUgdG8gc2lnbiByZXF1ZXN0cyB5b3Vyc2VsZi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBfQVdTX0VDU19UQVNLREVGSU5JVElPTiB7XG4vKipcbiAqIFRoZSBzaG9ydCBuYW1lIG9yIGZ1bGwgQW1hem9uIFJlc291cmNlIE5hbWUgKEFSTikgb2YgdGhlIElBTWxvbmcgcm9sZSB0aGF0IGdyYW50cyBjb250YWluZXJzIGluIHRoZSB0YXNrIHBlcm1pc3Npb24gdG8gY2FsbCBBV1MgQVBJcyBvbiB5b3VyIGJlaGFsZi4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbQW1hem9uIEVDUyBUYXNrIFJvbGVdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3Rhc2staWFtLXJvbGVzLmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqICBJQU0gcm9sZXMgZm9yIHRhc2tzIG9uIFdpbmRvd3MgcmVxdWlyZSB0aGF0IHRoZSBgYC1FbmFibGVUYXNrSUFNUm9sZWBgIG9wdGlvbiBpcyBzZXQgd2hlbiB5b3UgbGF1bmNoIHRoZSBBbWF6b24gRUNTLW9wdGltaXplZCBXaW5kb3dzIEFNSS4gWW91ciBjb250YWluZXJzIG11c3QgYWxzbyBydW4gc29tZSBjb25maWd1cmF0aW9uIGNvZGUgdG8gdXNlIHRoZSBmZWF0dXJlLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtXaW5kb3dzIElBTSByb2xlcyBmb3IgdGFza3NdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3dpbmRvd3NfdGFza19JQU1fcm9sZXMuaHRtbCkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLlxuICogICBTdHJpbmcgdmFsaWRhdGlvbiBpcyBkb25lIG9uIHRoZSBFQ1Mgc2lkZS4gSWYgYW4gaW52YWxpZCBzdHJpbmcgdmFsdWUgaXMgZ2l2ZW4gZm9yIGBgVGFza1JvbGVBcm5gYCwgaXQgbWF5IGNhdXNlIHRoZSBDbG91ZGZvcm1hdGlvbiBqb2IgdG8gaGFuZy5cbiAqL1xuVGFza1JvbGVBcm4/OiBzdHJpbmdcbi8qKlxuICogVGhlIElQQyByZXNvdXJjZSBuYW1lc3BhY2UgdG8gdXNlIGZvciB0aGUgY29udGFpbmVycyBpbiB0aGUgdGFzay4gVGhlIHZhbGlkIHZhbHVlcyBhcmUgYGBob3N0YGAsIGBgdGFza2BgLCBvciBgYG5vbmVgYC4gSWYgYGBob3N0YGAgaXMgc3BlY2lmaWVkLCB0aGVuIGFsbCBjb250YWluZXJzIHdpdGhpbiB0aGUgdGFza3MgdGhhdCBzcGVjaWZpZWQgdGhlIGBgaG9zdGBgIElQQyBtb2RlIG9uIHRoZSBzYW1lIGNvbnRhaW5lciBpbnN0YW5jZSBzaGFyZSB0aGUgc2FtZSBJUEMgcmVzb3VyY2VzIHdpdGggdGhlIGhvc3QgQW1hem9uIEVDMiBpbnN0YW5jZS4gSWYgYGB0YXNrYGAgaXMgc3BlY2lmaWVkLCBhbGwgY29udGFpbmVycyB3aXRoaW4gdGhlIHNwZWNpZmllZCB0YXNrIHNoYXJlIHRoZSBzYW1lIElQQyByZXNvdXJjZXMuIElmIGBgbm9uZWBgIGlzIHNwZWNpZmllZCwgdGhlbiBJUEMgcmVzb3VyY2VzIHdpdGhpbiB0aGUgY29udGFpbmVycyBvZiBhIHRhc2sgYXJlIHByaXZhdGUgYW5kIG5vdCBzaGFyZWQgd2l0aCBvdGhlciBjb250YWluZXJzIGluIGEgdGFzayBvciBvbiB0aGUgY29udGFpbmVyIGluc3RhbmNlLiBJZiBubyB2YWx1ZSBpcyBzcGVjaWZpZWQsIHRoZW4gdGhlIElQQyByZXNvdXJjZSBuYW1lc3BhY2Ugc2hhcmluZyBkZXBlbmRzIG9uIHRoZSBEb2NrZXIgZGFlbW9uIHNldHRpbmcgb24gdGhlIGNvbnRhaW5lciBpbnN0YW5jZS5cbiAqICBJZiB0aGUgYGBob3N0YGAgSVBDIG1vZGUgaXMgdXNlZCwgYmUgYXdhcmUgdGhhdCB0aGVyZSBpcyBhIGhlaWdodGVuZWQgcmlzayBvZiB1bmRlc2lyZWQgSVBDIG5hbWVzcGFjZSBleHBvc2UuXG4gKiAgSWYgeW91IGFyZSBzZXR0aW5nIG5hbWVzcGFjZWQga2VybmVsIHBhcmFtZXRlcnMgdXNpbmcgYGBzeXN0ZW1Db250cm9sc2BgIGZvciB0aGUgY29udGFpbmVycyBpbiB0aGUgdGFzaywgdGhlIGZvbGxvd2luZyB3aWxsIGFwcGx5IHRvIHlvdXIgSVBDIHJlc291cmNlIG5hbWVzcGFjZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbU3lzdGVtIENvbnRyb2xzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS90YXNrX2RlZmluaXRpb25fcGFyYW1ldGVycy5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSouXG4gKiAgICsgIEZvciB0YXNrcyB0aGF0IHVzZSB0aGUgYGBob3N0YGAgSVBDIG1vZGUsIElQQyBuYW1lc3BhY2UgcmVsYXRlZCBgYHN5c3RlbUNvbnRyb2xzYGAgYXJlIG5vdCBzdXBwb3J0ZWQuXG4gKiAgICsgIEZvciB0YXNrcyB0aGF0IHVzZSB0aGUgYGB0YXNrYGAgSVBDIG1vZGUsIElQQyBuYW1lc3BhY2UgcmVsYXRlZCBgYHN5c3RlbUNvbnRyb2xzYGAgd2lsbCBhcHBseSB0byBhbGwgY29udGFpbmVycyB3aXRoaW4gYSB0YXNrLlxuICogICBcbiAqICAgVGhpcyBwYXJhbWV0ZXIgaXMgbm90IHN1cHBvcnRlZCBmb3IgV2luZG93cyBjb250YWluZXJzIG9yIHRhc2tzIHJ1biBvbiBGQVJHQVRFbG9uZy5cbiAqL1xuSXBjTW9kZT86IHN0cmluZ1xuLyoqXG4gKiBUaGUgRWxhc3RpYyBJbmZlcmVuY2UgYWNjZWxlcmF0b3JzIHRvIHVzZSBmb3IgdGhlIGNvbnRhaW5lcnMgaW4gdGhlIHRhc2suXG4gKi9cbkluZmVyZW5jZUFjY2VsZXJhdG9ycz86IEluZmVyZW5jZUFjY2VsZXJhdG9yW11cbi8qKlxuICogVGhlIGFtb3VudCAoaW4gTWlCKSBvZiBtZW1vcnkgdXNlZCBieSB0aGUgdGFzay5cbiAqICBJZiB5b3VyIHRhc2tzIHJ1bnMgb24gQW1hem9uIEVDMiBpbnN0YW5jZXMsIHlvdSBtdXN0IHNwZWNpZnkgZWl0aGVyIGEgdGFzay1sZXZlbCBtZW1vcnkgdmFsdWUgb3IgYSBjb250YWluZXItbGV2ZWwgbWVtb3J5IHZhbHVlLiBUaGlzIGZpZWxkIGlzIG9wdGlvbmFsIGFuZCBhbnkgdmFsdWUgY2FuIGJlIHVzZWQuIElmIGEgdGFzay1sZXZlbCBtZW1vcnkgdmFsdWUgaXMgc3BlY2lmaWVkLCB0aGUgY29udGFpbmVyLWxldmVsIG1lbW9yeSB2YWx1ZSBpcyBvcHRpb25hbC4gRm9yIG1vcmUgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvbnRhaW5lci1sZXZlbCBtZW1vcnkgYW5kIG1lbW9yeSByZXNlcnZhdGlvbiwgc2VlIFtDb250YWluZXJEZWZpbml0aW9uXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NvbnRhaW5lckRlZmluaXRpb24uaHRtbCkuXG4gKiAgSWYgeW91ciB0YXNrcyBydW5zIG9uIEZBUkdBVEVsb25nLCB0aGlzIGZpZWxkIGlzIHJlcXVpcmVkLiBZb3UgbXVzdCB1c2Ugb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzLiBUaGUgdmFsdWUgeW91IGNob29zZSBkZXRlcm1pbmVzIHlvdXIgcmFuZ2Ugb2YgdmFsaWQgdmFsdWVzIGZvciB0aGUgYGBjcHVgYCBwYXJhbWV0ZXIuXG4gKiAgICsgIDUxMiAoMC41IEdCKSwgMTAyNCAoMSBHQiksIDIwNDggKDIgR0IpIC0gQXZhaWxhYmxlIGBgY3B1YGAgdmFsdWVzOiAyNTYgKC4yNSB2Q1BVKVxuICogICArICAxMDI0ICgxIEdCKSwgMjA0OCAoMiBHQiksIDMwNzIgKDMgR0IpLCA0MDk2ICg0IEdCKSAtIEF2YWlsYWJsZSBgYGNwdWBgIHZhbHVlczogNTEyICguNSB2Q1BVKVxuICogICArICAyMDQ4ICgyIEdCKSwgMzA3MiAoMyBHQiksIDQwOTYgKDQgR0IpLCA1MTIwICg1IEdCKSwgNjE0NCAoNiBHQiksIDcxNjggKDcgR0IpLCA4MTkyICg4IEdCKSAtIEF2YWlsYWJsZSBgYGNwdWBgIHZhbHVlczogMTAyNCAoMSB2Q1BVKVxuICogICArICBCZXR3ZWVuIDQwOTYgKDQgR0IpIGFuZCAxNjM4NCAoMTYgR0IpIGluIGluY3JlbWVudHMgb2YgMTAyNCAoMSBHQikgLSBBdmFpbGFibGUgYGBjcHVgYCB2YWx1ZXM6IDIwNDggKDIgdkNQVSlcbiAqICAgKyAgQmV0d2VlbiA4MTkyICg4IEdCKSBhbmQgMzA3MjAgKDMwIEdCKSBpbiBpbmNyZW1lbnRzIG9mIDEwMjQgKDEgR0IpIC0gQXZhaWxhYmxlIGBgY3B1YGAgdmFsdWVzOiA0MDk2ICg0IHZDUFUpXG4gKiAgICsgIEJldHdlZW4gMTYgR0IgYW5kIDYwIEdCIGluIDQgR0IgaW5jcmVtZW50cyAtIEF2YWlsYWJsZSBgYGNwdWBgIHZhbHVlczogODE5MiAoOCB2Q1BVKVxuICogIFRoaXMgb3B0aW9uIHJlcXVpcmVzIExpbnV4IHBsYXRmb3JtIGBgMS40LjBgYCBvciBsYXRlci5cbiAqICAgKyAgQmV0d2VlbiAzMkdCIGFuZCAxMjAgR0IgaW4gOCBHQiBpbmNyZW1lbnRzIC0gQXZhaWxhYmxlIGBgY3B1YGAgdmFsdWVzOiAxNjM4NCAoMTYgdkNQVSlcbiAqICBUaGlzIG9wdGlvbiByZXF1aXJlcyBMaW51eCBwbGF0Zm9ybSBgYDEuNC4wYGAgb3IgbGF0ZXIuXG4gKi9cbk1lbW9yeT86IHN0cmluZ1xuLyoqXG4gKiBBbiBhcnJheSBvZiBwbGFjZW1lbnQgY29uc3RyYWludCBvYmplY3RzIHRvIHVzZSBmb3IgdGFza3MuXG4gKiAgIFRoaXMgcGFyYW1ldGVyIGlzbid0IHN1cHBvcnRlZCBmb3IgdGFza3MgcnVuIG9uIEZBUkdBVEVsb25nLlxuICovXG5QbGFjZW1lbnRDb25zdHJhaW50cz86IFRhc2tEZWZpbml0aW9uUGxhY2VtZW50Q29uc3RyYWludFtdXG4vKipcbiAqIFRoZSBudW1iZXIgb2YgYGBjcHVgYCB1bml0cyB1c2VkIGJ5IHRoZSB0YXNrLiBJZiB5b3UgdXNlIHRoZSBFQzIgbGF1bmNoIHR5cGUsIHRoaXMgZmllbGQgaXMgb3B0aW9uYWwuIEFueSB2YWx1ZSBjYW4gYmUgdXNlZC4gSWYgeW91IHVzZSB0aGUgRmFyZ2F0ZSBsYXVuY2ggdHlwZSwgdGhpcyBmaWVsZCBpcyByZXF1aXJlZC4gWW91IG11c3QgdXNlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlcy4gVGhlIHZhbHVlIHRoYXQgeW91IGNob29zZSBkZXRlcm1pbmVzIHlvdXIgcmFuZ2Ugb2YgdmFsaWQgdmFsdWVzIGZvciB0aGUgYGBtZW1vcnlgYCBwYXJhbWV0ZXIuXG4gKiAgSWYgeW91J3JlIHVzaW5nIHRoZSBFQzIgbGF1bmNoIHR5cGUgb3IgdGhlIGV4dGVybmFsIGxhdW5jaCB0eXBlLCB0aGlzIGZpZWxkIGlzIG9wdGlvbmFsLiBTdXBwb3J0ZWQgdmFsdWVzIGFyZSBiZXR3ZWVuIGBgMTI4YGAgQ1BVIHVuaXRzIChgYDAuMTI1YGAgdkNQVXMpIGFuZCBgYDE5NjYwOGBgIENQVSB1bml0cyAoYGAxOTJgYCB2Q1BVcykuIFxuICogIFRoaXMgZmllbGQgaXMgcmVxdWlyZWQgZm9yIEZhcmdhdGUuIEZvciBpbmZvcm1hdGlvbiBhYm91dCB0aGUgdmFsaWQgdmFsdWVzLCBzZWUgW1Rhc2sgc2l6ZV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvdGFza19kZWZpbml0aW9uX3BhcmFtZXRlcnMuaHRtbCN0YXNrX3NpemUpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuQ3B1Pzogc3RyaW5nXG4vKipcbiAqIFRoZSB0YXNrIGxhdW5jaCB0eXBlcyB0aGUgdGFzayBkZWZpbml0aW9uIHdhcyB2YWxpZGF0ZWQgYWdhaW5zdC4gVGhlIHZhbGlkIHZhbHVlcyBhcmUgYGBFQzJgYCwgYGBGQVJHQVRFYGAsIGFuZCBgYEVYVEVSTkFMYGAuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0FtYXpvbiBFQ1MgbGF1bmNoIHR5cGVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9sYXVuY2hfdHlwZXMuaHRtbCkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5SZXF1aXJlc0NvbXBhdGliaWxpdGllcz86IHN0cmluZ1tdXG4vKipcbiAqIFRoZSBEb2NrZXIgbmV0d29ya2luZyBtb2RlIHRvIHVzZSBmb3IgdGhlIGNvbnRhaW5lcnMgaW4gdGhlIHRhc2suIFRoZSB2YWxpZCB2YWx1ZXMgYXJlIGBgbm9uZWBgLCBgYGJyaWRnZWBgLCBgYGF3c3ZwY2BgLCBhbmQgYGBob3N0YGAuIElmIG5vIG5ldHdvcmsgbW9kZSBpcyBzcGVjaWZpZWQsIHRoZSBkZWZhdWx0IGlzIGBgYnJpZGdlYGAuXG4gKiAgRm9yIEFtYXpvbiBFQ1MgdGFza3Mgb24gRmFyZ2F0ZSwgdGhlIGBgYXdzdnBjYGAgbmV0d29yayBtb2RlIGlzIHJlcXVpcmVkLiBGb3IgQW1hem9uIEVDUyB0YXNrcyBvbiBBbWF6b24gRUMyIExpbnV4IGluc3RhbmNlcywgYW55IG5ldHdvcmsgbW9kZSBjYW4gYmUgdXNlZC4gRm9yIEFtYXpvbiBFQ1MgdGFza3Mgb24gQW1hem9uIEVDMiBXaW5kb3dzIGluc3RhbmNlcywgYGA8ZGVmYXVsdD5gYCBvciBgYGF3c3ZwY2BgIGNhbiBiZSB1c2VkLiBJZiB0aGUgbmV0d29yayBtb2RlIGlzIHNldCB0byBgYG5vbmVgYCwgeW91IGNhbm5vdCBzcGVjaWZ5IHBvcnQgbWFwcGluZ3MgaW4geW91ciBjb250YWluZXIgZGVmaW5pdGlvbnMsIGFuZCB0aGUgdGFza3MgY29udGFpbmVycyBkbyBub3QgaGF2ZSBleHRlcm5hbCBjb25uZWN0aXZpdHkuIFRoZSBgYGhvc3RgYCBhbmQgYGBhd3N2cGNgYCBuZXR3b3JrIG1vZGVzIG9mZmVyIHRoZSBoaWdoZXN0IG5ldHdvcmtpbmcgcGVyZm9ybWFuY2UgZm9yIGNvbnRhaW5lcnMgYmVjYXVzZSB0aGV5IHVzZSB0aGUgRUMyIG5ldHdvcmsgc3RhY2sgaW5zdGVhZCBvZiB0aGUgdmlydHVhbGl6ZWQgbmV0d29yayBzdGFjayBwcm92aWRlZCBieSB0aGUgYGBicmlkZ2VgYCBtb2RlLlxuICogIFdpdGggdGhlIGBgaG9zdGBgIGFuZCBgYGF3c3ZwY2BgIG5ldHdvcmsgbW9kZXMsIGV4cG9zZWQgY29udGFpbmVyIHBvcnRzIGFyZSBtYXBwZWQgZGlyZWN0bHkgdG8gdGhlIGNvcnJlc3BvbmRpbmcgaG9zdCBwb3J0IChmb3IgdGhlIGBgaG9zdGBgIG5ldHdvcmsgbW9kZSkgb3IgdGhlIGF0dGFjaGVkIGVsYXN0aWMgbmV0d29yayBpbnRlcmZhY2UgcG9ydCAoZm9yIHRoZSBgYGF3c3ZwY2BgIG5ldHdvcmsgbW9kZSksIHNvIHlvdSBjYW5ub3QgdGFrZSBhZHZhbnRhZ2Ugb2YgZHluYW1pYyBob3N0IHBvcnQgbWFwcGluZ3MuIFxuICogICBXaGVuIHVzaW5nIHRoZSBgYGhvc3RgYCBuZXR3b3JrIG1vZGUsIHlvdSBzaG91bGQgbm90IHJ1biBjb250YWluZXJzIHVzaW5nIHRoZSByb290IHVzZXIgKFVJRCAwKS4gSXQgaXMgY29uc2lkZXJlZCBiZXN0IHByYWN0aWNlIHRvIHVzZSBhIG5vbi1yb290IHVzZXIuXG4gKiAgIElmIHRoZSBuZXR3b3JrIG1vZGUgaXMgYGBhd3N2cGNgYCwgdGhlIHRhc2sgaXMgYWxsb2NhdGVkIGFuIGVsYXN0aWMgbmV0d29yayBpbnRlcmZhY2UsIGFuZCB5b3UgbXVzdCBzcGVjaWZ5IGEgW05ldHdvcmtDb25maWd1cmF0aW9uXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX05ldHdvcmtDb25maWd1cmF0aW9uLmh0bWwpIHZhbHVlIHdoZW4geW91IGNyZWF0ZSBhIHNlcnZpY2Ugb3IgcnVuIGEgdGFzayB3aXRoIHRoZSB0YXNrIGRlZmluaXRpb24uIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1Rhc2sgTmV0d29ya2luZ10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvdGFzay1uZXR3b3JraW5nLmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqICBJZiB0aGUgbmV0d29yayBtb2RlIGlzIGBgaG9zdGBgLCB5b3UgY2Fubm90IHJ1biBtdWx0aXBsZSBpbnN0YW50aWF0aW9ucyBvZiB0aGUgc2FtZSB0YXNrIG9uIGEgc2luZ2xlIGNvbnRhaW5lciBpbnN0YW5jZSB3aGVuIHBvcnQgbWFwcGluZ3MgYXJlIHVzZWQuXG4gKi9cbk5ldHdvcmtNb2RlPzogc3RyaW5nXG4vKipcbiAqIFRoZSBwcm9jZXNzIG5hbWVzcGFjZSB0byB1c2UgZm9yIHRoZSBjb250YWluZXJzIGluIHRoZSB0YXNrLiBUaGUgdmFsaWQgdmFsdWVzIGFyZSBgYGhvc3RgYCBvciBgYHRhc2tgYC4gT24gRmFyZ2F0ZSBmb3IgTGludXggY29udGFpbmVycywgdGhlIG9ubHkgdmFsaWQgdmFsdWUgaXMgYGB0YXNrYGAuIEZvciBleGFtcGxlLCBtb25pdG9yaW5nIHNpZGVjYXJzIG1pZ2h0IG5lZWQgYGBwaWRNb2RlYGAgdG8gYWNjZXNzIGluZm9ybWF0aW9uIGFib3V0IG90aGVyIGNvbnRhaW5lcnMgcnVubmluZyBpbiB0aGUgc2FtZSB0YXNrLlxuICogIElmIGBgaG9zdGBgIGlzIHNwZWNpZmllZCwgYWxsIGNvbnRhaW5lcnMgd2l0aGluIHRoZSB0YXNrcyB0aGF0IHNwZWNpZmllZCB0aGUgYGBob3N0YGAgUElEIG1vZGUgb24gdGhlIHNhbWUgY29udGFpbmVyIGluc3RhbmNlIHNoYXJlIHRoZSBzYW1lIHByb2Nlc3MgbmFtZXNwYWNlIHdpdGggdGhlIGhvc3QgQW1hem9uIEVDMiBpbnN0YW5jZS5cbiAqICBJZiBgYHRhc2tgYCBpcyBzcGVjaWZpZWQsIGFsbCBjb250YWluZXJzIHdpdGhpbiB0aGUgc3BlY2lmaWVkIHRhc2sgc2hhcmUgdGhlIHNhbWUgcHJvY2VzcyBuYW1lc3BhY2UuXG4gKiAgSWYgbm8gdmFsdWUgaXMgc3BlY2lmaWVkLCB0aGUgZGVmYXVsdCBpcyBhIHByaXZhdGUgbmFtZXNwYWNlIGZvciBlYWNoIGNvbnRhaW5lci5cbiAqICBJZiB0aGUgYGBob3N0YGAgUElEIG1vZGUgaXMgdXNlZCwgdGhlcmUncyBhIGhlaWdodGVuZWQgcmlzayBvZiB1bmRlc2lyZWQgcHJvY2VzcyBuYW1lc3BhY2UgZXhwb3N1cmUuXG4gKiAgIFRoaXMgcGFyYW1ldGVyIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIFdpbmRvd3MgY29udGFpbmVycy5cbiAqICAgIFRoaXMgcGFyYW1ldGVyIGlzIG9ubHkgc3VwcG9ydGVkIGZvciB0YXNrcyB0aGF0IGFyZSBob3N0ZWQgb24gRkFSR0FURWxvbmcgaWYgdGhlIHRhc2tzIGFyZSB1c2luZyBwbGF0Zm9ybSB2ZXJzaW9uIGBgMS40LjBgYCBvciBsYXRlciAoTGludXgpLiBUaGlzIGlzbid0IHN1cHBvcnRlZCBmb3IgV2luZG93cyBjb250YWluZXJzIG9uIEZhcmdhdGUuXG4gKi9cblBpZE1vZGU/OiBzdHJpbmdcbi8qKlxuICogRW5hYmxlcyBmYXVsdCBpbmplY3Rpb24gYW5kIGFsbG93cyBmb3IgZmF1bHQgaW5qZWN0aW9uIHJlcXVlc3RzIHRvIGJlIGFjY2VwdGVkIGZyb20gdGhlIHRhc2sncyBjb250YWluZXJzLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBgYGZhbHNlYGAuXG4gKi9cbkVuYWJsZUZhdWx0SW5qZWN0aW9uPzogYm9vbGVhblxuLyoqXG4gKiBUaGUgQW1hem9uIFJlc291cmNlIE5hbWUgKEFSTikgb2YgdGhlIHRhc2sgZXhlY3V0aW9uIHJvbGUgdGhhdCBncmFudHMgdGhlIEFtYXpvbiBFQ1MgY29udGFpbmVyIGFnZW50IHBlcm1pc3Npb24gdG8gbWFrZSBBV1MgQVBJIGNhbGxzIG9uIHlvdXIgYmVoYWxmLiBGb3IgaW5mb3JtYXRpb25hYm91dCB0aGUgcmVxdWlyZWQgSUFNIHJvbGVzIGZvciBBbWF6b24gRUNTLCBzZWUgW0lBTSByb2xlcyBmb3IgQW1hem9uIEVDU10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvc2VjdXJpdHktZWNzLWlhbS1yb2xlLW92ZXJ2aWV3Lmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuRXhlY3V0aW9uUm9sZUFybj86IHN0cmluZ1xuUnVudGltZVBsYXRmb3JtPzogUnVudGltZVBsYXRmb3JtXG5Qcm94eUNvbmZpZ3VyYXRpb24/OiBQcm94eUNvbmZpZ3VyYXRpb25cbi8qKlxuICogVGhlIGxpc3Qgb2YgZGF0YSB2b2x1bWUgZGVmaW5pdGlvbnMgZm9yIHRoZSB0YXNrLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtVc2luZyBkYXRhIHZvbHVtZXMgaW4gdGFza3NdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3VzaW5nX2RhdGFfdm9sdW1lcy5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSouXG4gKiAgIFRoZSBgYGhvc3RgYCBhbmQgYGBzb3VyY2VQYXRoYGAgcGFyYW1ldGVycyBhcmVuJ3Qgc3VwcG9ydGVkIGZvciB0YXNrcyBydW4gb24gRkFSR0FURWxvbmcuXG4gKi9cblZvbHVtZXM/OiBWb2x1bWVbXVxuLyoqXG4gKiBBIGxpc3Qgb2YgY29udGFpbmVyIGRlZmluaXRpb25zIGluIEpTT04gZm9ybWF0IHRoYXQgZGVzY3JpYmUgdGhlIGRpZmZlcmVudCBjb250YWluZXJzIHRoYXQgbWFrZSB1cCB5b3VyIHRhc2suIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGNvbnRhaW5lciBkZWZpbml0aW9uIHBhcmFtZXRlcnMgYW5kIGRlZmF1bHRzLCBzZWUgW0FtYXpvbiBFQ1MgVGFzayBEZWZpbml0aW9uc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvdGFza19kZWZpbnRpb25zLmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuQ29udGFpbmVyRGVmaW5pdGlvbnM/OiBDb250YWluZXJEZWZpbml0aW9uW11cbi8qKlxuICogVGhlIG5hbWUgb2YgYSBmYW1pbHkgdGhhdCB0aGlzIHRhc2sgZGVmaW5pdGlvbiBpcyByZWdpc3RlcmVkIHRvLiBVcCB0byAyNTUgbGV0dGVycyAodXBwZXJjYXNlIGFuZCBsb3dlcmNhc2UpLCBudW1iZXJzLCBoeXBoZW5zLCBhbmQgdW5kZXJzY29yZXMgYXJlIGFsbG93ZWQuXG4gKiAgQSBmYW1pbHkgZ3JvdXBzIG11bHRpcGxlIHZlcnNpb25zIG9mIGEgdGFzayBkZWZpbml0aW9uLiBBbWF6b24gRUNTIGdpdmVzIHRoZSBmaXJzdCB0YXNrIGRlZmluaXRpb24gdGhhdCB5b3UgcmVnaXN0ZXJlZCB0byBhIGZhbWlseSBhIHJldmlzaW9uIG51bWJlciBvZiAxLiBBbWF6b24gRUNTIGdpdmVzIHNlcXVlbnRpYWwgcmV2aXNpb24gbnVtYmVycyB0byBlYWNoIHRhc2sgZGVmaW5pdGlvbiB0aGF0IHlvdSBhZGQuXG4gKiAgIFRvIHVzZSByZXZpc2lvbiBudW1iZXJzIHdoZW4geW91IHVwZGF0ZSBhIHRhc2sgZGVmaW5pdGlvbiwgc3BlY2lmeSB0aGlzIHByb3BlcnR5LiBJZiB5b3UgZG9uJ3Qgc3BlY2lmeSBhIHZhbHVlLCBDRk5sb25nIGdlbmVyYXRlcyBhIG5ldyB0YXNrIGRlZmluaXRpb24gZWFjaCB0aW1lIHRoYXQgeW91IHVwZGF0ZSBpdC5cbiAqL1xuRmFtaWx5Pzogc3RyaW5nXG5FcGhlbWVyYWxTdG9yYWdlPzogRXBoZW1lcmFsU3RvcmFnZVxuLyoqXG4gKiBUaGUgbWV0YWRhdGEgdGhhdCB5b3UgYXBwbHkgdG8gdGhlIHRhc2sgZGVmaW5pdGlvbiB0byBoZWxwIHlvdSBjYXRlZ29yaXplIGFuZCBvcmdhbml6ZSB0aGVtLiBFYWNoIHRhZyBjb25zaXN0cyBvZiBhIGtleSBhbmQgYW4gb3B0aW9uYWwgdmFsdWUuIFlvdSBkZWZpbmUgYm90aCBvZiB0aGVtLlxuICogIFRoZSBmb2xsb3dpbmcgYmFzaWMgcmVzdHJpY3Rpb25zIGFwcGx5IHRvIHRhZ3M6XG4gKiAgICsgIE1heGltdW0gbnVtYmVyIG9mIHRhZ3MgcGVyIHJlc291cmNlIC0gNTBcbiAqICAgKyAgRm9yIGVhY2ggcmVzb3VyY2UsIGVhY2ggdGFnIGtleSBtdXN0IGJlIHVuaXF1ZSwgYW5kIGVhY2ggdGFnIGtleSBjYW4gaGF2ZSBvbmx5IG9uZSB2YWx1ZS5cbiAqICAgKyAgTWF4aW11bSBrZXkgbGVuZ3RoIC0gMTI4IFVuaWNvZGUgY2hhcmFjdGVycyBpbiBVVEYtOFxuICogICArICBNYXhpbXVtIHZhbHVlIGxlbmd0aCAtIDI1NiBVbmljb2RlIGNoYXJhY3RlcnMgaW4gVVRGLThcbiAqICAgKyAgSWYgeW91ciB0YWdnaW5nIHNjaGVtYSBpcyB1c2VkIGFjcm9zcyBtdWx0aXBsZSBzZXJ2aWNlcyBhbmQgcmVzb3VyY2VzLCByZW1lbWJlciB0aGF0IG90aGVyIHNlcnZpY2VzIG1heSBoYXZlIHJlc3RyaWN0aW9ucyBvbiBhbGxvd2VkIGNoYXJhY3RlcnMuIEdlbmVyYWxseSBhbGxvd2VkIGNoYXJhY3RlcnMgYXJlOiBsZXR0ZXJzLCBudW1iZXJzLCBhbmQgc3BhY2VzIHJlcHJlc2VudGFibGUgaW4gVVRGLTgsIGFuZCB0aGUgZm9sbG93aW5nIGNoYXJhY3RlcnM6ICsgLSA9IC4gXyA6IC8gQC5cbiAqICAgKyAgVGFnIGtleXMgYW5kIHZhbHVlcyBhcmUgY2FzZS1zZW5zaXRpdmUuXG4gKiAgICsgIERvIG5vdCB1c2UgYGBhd3M6YGAsIGBgQVdTOmBgLCBvciBhbnkgdXBwZXIgb3IgbG93ZXJjYXNlIGNvbWJpbmF0aW9uIG9mIHN1Y2ggYXMgYSBwcmVmaXggZm9yIGVpdGhlciBrZXlzIG9yIHZhbHVlcyBhcyBpdCBpcyByZXNlcnZlZCBmb3IgQVdTIHVzZS4gWW91IGNhbm5vdCBlZGl0IG9yIGRlbGV0ZSB0YWcga2V5cyBvciB2YWx1ZXMgd2l0aCB0aGlzIHByZWZpeC4gVGFncyB3aXRoIHRoaXMgcHJlZml4IGRvIG5vdCBjb3VudCBhZ2FpbnN0IHlvdXIgdGFncyBwZXIgcmVzb3VyY2UgbGltaXQuXG4gKi9cblRhZ3M/OiBUYWdbXVxuVGFza0RlZmluaXRpb25Bcm4/OiBzdHJpbmdcbn1cbi8qKlxuICogRGV0YWlscyBvbiBhbiBFbGFzdGljIEluZmVyZW5jZSBhY2NlbGVyYXRvci4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbV29ya2luZyB3aXRoIEFtYXpvbiBFbGFzdGljIEluZmVyZW5jZSBvbiBBbWF6b24gRUNTXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9lY3MtaW5mZXJlbmNlLmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbmZlcmVuY2VBY2NlbGVyYXRvciB7XG4vKipcbiAqIFRoZSBFbGFzdGljIEluZmVyZW5jZSBhY2NlbGVyYXRvciB0eXBlIHRvIHVzZS5cbiAqL1xuRGV2aWNlVHlwZT86IHN0cmluZ1xuLyoqXG4gKiBUaGUgRWxhc3RpYyBJbmZlcmVuY2UgYWNjZWxlcmF0b3IgZGV2aWNlIG5hbWUuIFRoZSBgYGRldmljZU5hbWVgYCBtdXN0IGFsc28gYmUgcmVmZXJlbmNlZCBpbiBhIGNvbnRhaW5lciBkZWZpbml0aW9uIGFzIGEgW1Jlc291cmNlUmVxdWlyZW1lbnRdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfUmVzb3VyY2VSZXF1aXJlbWVudC5odG1sKS5cbiAqL1xuRGV2aWNlTmFtZT86IHN0cmluZ1xufVxuLyoqXG4gKiBUaGUgY29uc3RyYWludCBvbiB0YXNrIHBsYWNlbWVudCBpbiB0aGUgdGFzayBkZWZpbml0aW9uLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtUYXNrIHBsYWNlbWVudCBjb25zdHJhaW50c10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvdGFzay1wbGFjZW1lbnQtY29uc3RyYWludHMuaHRtbCkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLlxuICogICBUYXNrIHBsYWNlbWVudCBjb25zdHJhaW50cyBhcmVuJ3Qgc3VwcG9ydGVkIGZvciB0YXNrcyBydW4gb24gRkFSR0FURWxvbmcuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGFza0RlZmluaXRpb25QbGFjZW1lbnRDb25zdHJhaW50IHtcbi8qKlxuICogVGhlIHR5cGUgb2YgY29uc3RyYWludC4gVGhlIGBgTWVtYmVyT2ZgYCBjb25zdHJhaW50IHJlc3RyaWN0cyBzZWxlY3Rpb24gdG8gYmUgZnJvbSBhIGdyb3VwIG9mIHZhbGlkIGNhbmRpZGF0ZXMuXG4gKi9cblR5cGU6IHN0cmluZ1xuLyoqXG4gKiBBIGNsdXN0ZXIgcXVlcnkgbGFuZ3VhZ2UgZXhwcmVzc2lvbiB0byBhcHBseSB0byB0aGUgY29uc3RyYWludC4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbQ2x1c3RlciBxdWVyeSBsYW5ndWFnZV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvY2x1c3Rlci1xdWVyeS1sYW5ndWFnZS5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSouXG4gKi9cbkV4cHJlc3Npb24/OiBzdHJpbmdcbn1cbi8qKlxuICogVGhlIG9wZXJhdGluZyBzeXN0ZW0gdGhhdCB5b3VyIHRhc2tzIGRlZmluaXRpb25zIHJ1biBvbi4gQSBwbGF0Zm9ybSBmYW1pbHkgaXMgc3BlY2lmaWVkIG9ubHkgZm9yIHRhc2tzIHVzaW5nIHRoZSBGYXJnYXRlIGxhdW5jaCB0eXBlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJ1bnRpbWVQbGF0Zm9ybSB7XG4vKipcbiAqIFRoZSBvcGVyYXRpbmcgc3lzdGVtLlxuICovXG5PcGVyYXRpbmdTeXN0ZW1GYW1pbHk/OiBzdHJpbmdcbi8qKlxuICogVGhlIENQVSBhcmNoaXRlY3R1cmUuXG4gKiAgWW91IGNhbiBydW4geW91ciBMaW51eCB0YXNrcyBvbiBhbiBBUk0tYmFzZWQgcGxhdGZvcm0gYnkgc2V0dGluZyB0aGUgdmFsdWUgdG8gYGBBUk02NGBgLiBUaGlzIG9wdGlvbiBpcyBhdmFpbGFibGUgZm9yIHRhc2tzIHRoYXQgcnVuIG9uIExpbnV4IEFtYXpvbiBFQzIgaW5zdGFuY2Ugb3IgTGludXggY29udGFpbmVycyBvbiBGYXJnYXRlLlxuICovXG5DcHVBcmNoaXRlY3R1cmU/OiBzdHJpbmdcbn1cbi8qKlxuICogVGhlIGNvbmZpZ3VyYXRpb24gZGV0YWlscyBmb3IgdGhlIEFwcCBNZXNoIHByb3h5LlxuICogIFlvdXIgQW1hem9uIEVDUyBjb250YWluZXIgaW5zdGFuY2VzIHJlcXVpcmUgYXQgbGVhc3QgdmVyc2lvbiAxLjI2LjAgb2YgdGhlIGNvbnRhaW5lciBhZ2VudCBhbmQgYXQgbGVhc3QgdmVyc2lvbiAxLjI2LjAtMSBvZiB0aGUgYGBlY3MtaW5pdGBgIHBhY2thZ2UgdG8gdXNlIGEgcHJveHkgY29uZmlndXJhdGlvbi4gSWYgeW91ciBjb250YWluZXIgaW5zdGFuY2VzIGFyZSBsYXVuY2hlZCBmcm9tIHRoZSBBbWF6b24gRUNTIG9wdGltaXplZCBBTUkgdmVyc2lvbiBgYDIwMTkwMzAxYGAgb3IgbGF0ZXIsIHRoZXkgY29udGFpbiB0aGUgcmVxdWlyZWQgdmVyc2lvbnMgb2YgdGhlIGNvbnRhaW5lciBhZ2VudCBhbmQgYGBlY3MtaW5pdGBgLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtBbWF6b24gRUNTLW9wdGltaXplZCBMaW51eCBBTUldKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2Vjcy1vcHRpbWl6ZWRfQU1JLmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQcm94eUNvbmZpZ3VyYXRpb24ge1xuLyoqXG4gKiBUaGUgc2V0IG9mIG5ldHdvcmsgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIHRvIHByb3ZpZGUgdGhlIENvbnRhaW5lciBOZXR3b3JrIEludGVyZmFjZSAoQ05JKSBwbHVnaW4sIHNwZWNpZmllZCBhcyBrZXktdmFsdWUgcGFpcnMuXG4gKiAgICsgIGBgSWdub3JlZFVJRGBgIC0gKFJlcXVpcmVkKSBUaGUgdXNlciBJRCAoVUlEKSBvZiB0aGUgcHJveHkgY29udGFpbmVyIGFzIGRlZmluZWQgYnkgdGhlIGBgdXNlcmBgIHBhcmFtZXRlciBpbiBhIGNvbnRhaW5lciBkZWZpbml0aW9uLiBUaGlzIGlzIHVzZWQgdG8gZW5zdXJlIHRoZSBwcm94eSBpZ25vcmVzIGl0cyBvd24gdHJhZmZpYy4gSWYgYGBJZ25vcmVkR0lEYGAgaXMgc3BlY2lmaWVkLCB0aGlzIGZpZWxkIGNhbiBiZSBlbXB0eS5cbiAqICAgKyAgYGBJZ25vcmVkR0lEYGAgLSAoUmVxdWlyZWQpIFRoZSBncm91cCBJRCAoR0lEKSBvZiB0aGUgcHJveHkgY29udGFpbmVyIGFzIGRlZmluZWQgYnkgdGhlIGBgdXNlcmBgIHBhcmFtZXRlciBpbiBhIGNvbnRhaW5lciBkZWZpbml0aW9uLiBUaGlzIGlzIHVzZWQgdG8gZW5zdXJlIHRoZSBwcm94eSBpZ25vcmVzIGl0cyBvd24gdHJhZmZpYy4gSWYgYGBJZ25vcmVkVUlEYGAgaXMgc3BlY2lmaWVkLCB0aGlzIGZpZWxkIGNhbiBiZSBlbXB0eS5cbiAqICAgKyAgYGBBcHBQb3J0c2BgIC0gKFJlcXVpcmVkKSBUaGUgbGlzdCBvZiBwb3J0cyB0aGF0IHRoZSBhcHBsaWNhdGlvbiB1c2VzLiBOZXR3b3JrIHRyYWZmaWMgdG8gdGhlc2UgcG9ydHMgaXMgZm9yd2FyZGVkIHRvIHRoZSBgYFByb3h5SW5ncmVzc1BvcnRgYCBhbmQgYGBQcm94eUVncmVzc1BvcnRgYC5cbiAqICAgKyAgYGBQcm94eUluZ3Jlc3NQb3J0YGAgLSAoUmVxdWlyZWQpIFNwZWNpZmllcyB0aGUgcG9ydCB0aGF0IGluY29taW5nIHRyYWZmaWMgdG8gdGhlIGBgQXBwUG9ydHNgYCBpcyBkaXJlY3RlZCB0by5cbiAqICAgKyAgYGBQcm94eUVncmVzc1BvcnRgYCAtIChSZXF1aXJlZCkgU3BlY2lmaWVzIHRoZSBwb3J0IHRoYXQgb3V0Z29pbmcgdHJhZmZpYyBmcm9tIHRoZSBgYEFwcFBvcnRzYGAgaXMgZGlyZWN0ZWQgdG8uXG4gKiAgICsgIGBgRWdyZXNzSWdub3JlZFBvcnRzYGAgLSAoUmVxdWlyZWQpIFRoZSBlZ3Jlc3MgdHJhZmZpYyBnb2luZyB0byB0aGUgc3BlY2lmaWVkIHBvcnRzIGlzIGlnbm9yZWQgYW5kIG5vdCByZWRpcmVjdGVkIHRvIHRoZSBgYFByb3h5RWdyZXNzUG9ydGBgLiBJdCBjYW4gYmUgYW4gZW1wdHkgbGlzdC5cbiAqICAgKyAgYGBFZ3Jlc3NJZ25vcmVkSVBzYGAgLSAoUmVxdWlyZWQpIFRoZSBlZ3Jlc3MgdHJhZmZpYyBnb2luZyB0byB0aGUgc3BlY2lmaWVkIElQIGFkZHJlc3NlcyBpcyBpZ25vcmVkIGFuZCBub3QgcmVkaXJlY3RlZCB0byB0aGUgYGBQcm94eUVncmVzc1BvcnRgYC4gSXQgY2FuIGJlIGFuIGVtcHR5IGxpc3QuXG4gKi9cblByb3h5Q29uZmlndXJhdGlvblByb3BlcnRpZXM/OiBLZXlWYWx1ZVBhaXJbXVxuLyoqXG4gKiBUaGUgcHJveHkgdHlwZS4gVGhlIG9ubHkgc3VwcG9ydGVkIHZhbHVlIGlzIGBgQVBQTUVTSGBgLlxuICovXG5UeXBlPzogc3RyaW5nXG4vKipcbiAqIFRoZSBuYW1lIG9mIHRoZSBjb250YWluZXIgdGhhdCB3aWxsIHNlcnZlIGFzIHRoZSBBcHAgTWVzaCBwcm94eS5cbiAqL1xuQ29udGFpbmVyTmFtZTogc3RyaW5nXG59XG4vKipcbiAqIEEga2V5LXZhbHVlIHBhaXIgb2JqZWN0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEtleVZhbHVlUGFpciB7XG4vKipcbiAqIFRoZSB2YWx1ZSBvZiB0aGUga2V5LXZhbHVlIHBhaXIuIEZvciBlbnZpcm9ubWVudCB2YXJpYWJsZXMsIHRoaXMgaXMgdGhlIHZhbHVlIG9mIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZS5cbiAqL1xuVmFsdWU/OiBzdHJpbmdcbi8qKlxuICogVGhlIG5hbWUgb2YgdGhlIGtleS12YWx1ZSBwYWlyLiBGb3IgZW52aXJvbm1lbnQgdmFyaWFibGVzLCB0aGlzIGlzIHRoZSBuYW1lIG9mIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZS5cbiAqL1xuTmFtZT86IHN0cmluZ1xufVxuLyoqXG4gKiBUaGUgZGF0YSB2b2x1bWUgY29uZmlndXJhdGlvbiBmb3IgdGFza3MgbGF1bmNoZWQgdXNpbmcgdGhpcyB0YXNrIGRlZmluaXRpb24uIFNwZWNpZnlpbmcgYSB2b2x1bWUgY29uZmlndXJhdGlvbiBpbiBhIHRhc2sgZGVmaW5pdGlvbiBpcyBvcHRpb25hbC4gVGhlIHZvbHVtZSBjb25maWd1cmF0aW9uIG1heSBjb250YWluIG11bHRpcGxlIHZvbHVtZXMgYnV0IG9ubHkgb25lIHZvbHVtZSBjb25maWd1cmVkIGF0IGxhdW5jaCBpcyBzdXBwb3J0ZWQuIEVhY2ggdm9sdW1lIGRlZmluZWQgaW4gdGhlIHZvbHVtZSBjb25maWd1cmF0aW9uIG1heSBvbmx5IHNwZWNpZnkgYSBgYG5hbWVgYCBhbmQgb25lIG9mIGVpdGhlciBgYGNvbmZpZ3VyZWRBdExhdW5jaGBgLCBgYGRvY2tlclZvbHVtZUNvbmZpZ3VyYXRpb25gYCwgYGBlZnNWb2x1bWVDb25maWd1cmF0aW9uYGAsIGBgZnN4V2luZG93c0ZpbGVTZXJ2ZXJWb2x1bWVDb25maWd1cmF0aW9uYGAsIG9yIGBgaG9zdGBgLiBJZiBhbiBlbXB0eSB2b2x1bWUgY29uZmlndXJhdGlvbiBpcyBzcGVjaWZpZWQsIGJ5IGRlZmF1bHQgQW1hem9uIEVDUyB1c2VzIGEgaG9zdCB2b2x1bWUuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1VzaW5nIGRhdGEgdm9sdW1lcyBpbiB0YXNrc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvdXNpbmdfZGF0YV92b2x1bWVzLmh0bWwpLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFZvbHVtZSB7XG5FRlNWb2x1bWVDb25maWd1cmF0aW9uPzogRUZTVm9sdW1lQ29uZmlndXJhdGlvblxuSG9zdD86IEhvc3RWb2x1bWVQcm9wZXJ0aWVzXG4vKipcbiAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSB2b2x1bWUgc2hvdWxkIGJlIGNvbmZpZ3VyZWQgYXQgbGF1bmNoIHRpbWUuIFRoaXMgaXMgdXNlZCB0byBjcmVhdGUgQW1hem9uIEVCUyB2b2x1bWVzIGZvciBzdGFuZGFsb25lIHRhc2tzIG9yIHRhc2tzIGNyZWF0ZWQgYXMgcGFydCBvZiBhIHNlcnZpY2UuIEVhY2ggdGFzayBkZWZpbml0aW9uIHJldmlzaW9uIG1heSBvbmx5IGhhdmUgb25lIHZvbHVtZSBjb25maWd1cmVkIGF0IGxhdW5jaCBpbiB0aGUgdm9sdW1lIGNvbmZpZ3VyYXRpb24uXG4gKiAgVG8gY29uZmlndXJlIGEgdm9sdW1lIGF0IGxhdW5jaCB0aW1lLCB1c2UgdGhpcyB0YXNrIGRlZmluaXRpb24gcmV2aXNpb24gYW5kIHNwZWNpZnkgYSBgYHZvbHVtZUNvbmZpZ3VyYXRpb25zYGAgb2JqZWN0IHdoZW4gY2FsbGluZyB0aGUgYGBDcmVhdGVTZXJ2aWNlYGAsIGBgVXBkYXRlU2VydmljZWBgLCBgYFJ1blRhc2tgYCBvciBgYFN0YXJ0VGFza2BgIEFQSXMuXG4gKi9cbkNvbmZpZ3VyZWRBdExhdW5jaD86IGJvb2xlYW5cbkRvY2tlclZvbHVtZUNvbmZpZ3VyYXRpb24/OiBEb2NrZXJWb2x1bWVDb25maWd1cmF0aW9uXG5GU3hXaW5kb3dzRmlsZVNlcnZlclZvbHVtZUNvbmZpZ3VyYXRpb24/OiBGU3hXaW5kb3dzRmlsZVNlcnZlclZvbHVtZUNvbmZpZ3VyYXRpb25cbi8qKlxuICogVGhlIG5hbWUgb2YgdGhlIHZvbHVtZS4gVXAgdG8gMjU1IGxldHRlcnMgKHVwcGVyY2FzZSBhbmQgbG93ZXJjYXNlKSwgbnVtYmVycywgdW5kZXJzY29yZXMsIGFuZCBoeXBoZW5zIGFyZSBhbGxvd2VkLlxuICogIFdoZW4gdXNpbmcgYSB2b2x1bWUgY29uZmlndXJlZCBhdCBsYXVuY2gsIHRoZSBgYG5hbWVgYCBpcyByZXF1aXJlZCBhbmQgbXVzdCBhbHNvIGJlIHNwZWNpZmllZCBhcyB0aGUgdm9sdW1lIG5hbWUgaW4gdGhlIGBgU2VydmljZVZvbHVtZUNvbmZpZ3VyYXRpb25gYCBvciBgYFRhc2tWb2x1bWVDb25maWd1cmF0aW9uYGAgcGFyYW1ldGVyIHdoZW4gY3JlYXRpbmcgeW91ciBzZXJ2aWNlIG9yIHN0YW5kYWxvbmUgdGFzay5cbiAqICBGb3IgYWxsIG90aGVyIHR5cGVzIG9mIHZvbHVtZXMsIHRoaXMgbmFtZSBpcyByZWZlcmVuY2VkIGluIHRoZSBgYHNvdXJjZVZvbHVtZWBgIHBhcmFtZXRlciBvZiB0aGUgYGBtb3VudFBvaW50c2BgIG9iamVjdCBpbiB0aGUgY29udGFpbmVyIGRlZmluaXRpb24uXG4gKiAgV2hlbiBhIHZvbHVtZSBpcyB1c2luZyB0aGUgYGBlZnNWb2x1bWVDb25maWd1cmF0aW9uYGAsIHRoZSBuYW1lIGlzIHJlcXVpcmVkLlxuICovXG5OYW1lPzogc3RyaW5nXG59XG4vKipcbiAqIFRoaXMgcGFyYW1ldGVyIGlzIHNwZWNpZmllZCB3aGVuIHlvdSB1c2UgYW4gQW1hem9uIEVsYXN0aWMgRmlsZSBTeXN0ZW0gZmlsZSBzeXN0ZW0gZm9yIHRhc2sgc3RvcmFnZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFRlNWb2x1bWVDb25maWd1cmF0aW9uIHtcbi8qKlxuICogVGhlIEFtYXpvbiBFRlMgZmlsZSBzeXN0ZW0gSUQgdG8gdXNlLlxuICovXG5GaWxlc3lzdGVtSWQ6IHN0cmluZ1xuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdG8gdXNlIGVuY3J5cHRpb24gZm9yIEFtYXpvbiBFRlMgZGF0YSBpbiB0cmFuc2l0IGJldHdlZW4gdGhlIEFtYXpvbiBFQ1MgaG9zdCBhbmQgdGhlIEFtYXpvbiBFRlMgc2VydmVyLiBUcmFuc2l0IGVuY3J5cHRpb24gbXVzdCBiZSB0dXJuZWQgb24gaWYgQW1hem9uIEVGUyBJQU0gYXV0aG9yaXphdGlvbiBpcyB1c2VkLiBJZiB0aGlzIHBhcmFtZXRlciBpcyBvbWl0dGVkLCB0aGUgZGVmYXVsdCB2YWx1ZSBvZiBgYERJU0FCTEVEYGAgaXMgdXNlZC4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbRW5jcnlwdGluZyBkYXRhIGluIHRyYW5zaXRdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9lZnMvbGF0ZXN0L3VnL2VuY3J5cHRpb24taW4tdHJhbnNpdC5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIEZpbGUgU3lzdGVtIFVzZXIgR3VpZGUqLlxuICovXG5UcmFuc2l0RW5jcnlwdGlvbj86IChcIkVOQUJMRURcIiB8IFwiRElTQUJMRURcIilcbkF1dGhvcml6YXRpb25Db25maWc/OiBBdXRob3JpemF0aW9uQ29uZmlnXG4vKipcbiAqIFRoZSBkaXJlY3Rvcnkgd2l0aGluIHRoZSBBbWF6b24gRUZTIGZpbGUgc3lzdGVtIHRvIG1vdW50IGFzIHRoZSByb290IGRpcmVjdG9yeSBpbnNpZGUgdGhlIGhvc3QuIElmIHRoaXMgcGFyYW1ldGVyIGlzIG9taXR0ZWQsIHRoZSByb290IG9mIHRoZSBBbWF6b24gRUZTIHZvbHVtZSB3aWxsIGJlIHVzZWQuIFNwZWNpZnlpbmcgYGAvYGAgd2lsbCBoYXZlIHRoZSBzYW1lIGVmZmVjdCBhcyBvbWl0dGluZyB0aGlzIHBhcmFtZXRlci5cbiAqICAgSWYgYW4gRUZTIGFjY2VzcyBwb2ludCBpcyBzcGVjaWZpZWQgaW4gdGhlIGBgYXV0aG9yaXphdGlvbkNvbmZpZ2BgLCB0aGUgcm9vdCBkaXJlY3RvcnkgcGFyYW1ldGVyIG11c3QgZWl0aGVyIGJlIG9taXR0ZWQgb3Igc2V0IHRvIGBgL2BgIHdoaWNoIHdpbGwgZW5mb3JjZSB0aGUgcGF0aCBzZXQgb24gdGhlIEVGUyBhY2Nlc3MgcG9pbnQuXG4gKi9cblJvb3REaXJlY3Rvcnk/OiBzdHJpbmdcbi8qKlxuICogVGhlIHBvcnQgdG8gdXNlIHdoZW4gc2VuZGluZyBlbmNyeXB0ZWQgZGF0YSBiZXR3ZWVuIHRoZSBBbWF6b24gRUNTIGhvc3QgYW5kIHRoZSBBbWF6b24gRUZTIHNlcnZlci4gSWYgeW91IGRvIG5vdCBzcGVjaWZ5IGEgdHJhbnNpdCBlbmNyeXB0aW9uIHBvcnQsIGl0IHdpbGwgdXNlIHRoZSBwb3J0IHNlbGVjdGlvbiBzdHJhdGVneSB0aGF0IHRoZSBBbWF6b24gRUZTIG1vdW50IGhlbHBlciB1c2VzLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtFRlMgbW91bnQgaGVscGVyXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZWZzL2xhdGVzdC91Zy9lZnMtbW91bnQtaGVscGVyLmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgRmlsZSBTeXN0ZW0gVXNlciBHdWlkZSouXG4gKi9cblRyYW5zaXRFbmNyeXB0aW9uUG9ydD86IG51bWJlclxufVxuLyoqXG4gKiBUaGUgYXV0aG9yaXphdGlvbiBjb25maWd1cmF0aW9uIGRldGFpbHMgZm9yIHRoZSBBbWF6b24gRUZTIGZpbGUgc3lzdGVtLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEF1dGhvcml6YXRpb25Db25maWcge1xuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdG8gdXNlIHRoZSBBbWF6b24gRUNTIHRhc2sgcm9sZSBkZWZpbmVkIGluIGEgdGFzayBkZWZpbml0aW9uIHdoZW4gbW91bnRpbmcgdGhlIEFtYXpvbiBFRlMgZmlsZSBzeXN0ZW0uIElmIGl0IGlzIHR1cm5lZCBvbiwgdHJhbnNpdCBlbmNyeXB0aW9uIG11c3QgYmUgdHVybmVkIG9uIGluIHRoZSBgYEVGU1ZvbHVtZUNvbmZpZ3VyYXRpb25gYC4gSWYgdGhpcyBwYXJhbWV0ZXIgaXMgb21pdHRlZCwgdGhlIGRlZmF1bHQgdmFsdWUgb2YgYGBESVNBQkxFRGBgIGlzIHVzZWQuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1VzaW5nIEFtYXpvbiBFRlMgYWNjZXNzIHBvaW50c10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvZWZzLXZvbHVtZXMuaHRtbCNlZnMtdm9sdW1lLWFjY2Vzc3BvaW50cykgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5JQU0/OiAoXCJFTkFCTEVEXCIgfCBcIkRJU0FCTEVEXCIpXG4vKipcbiAqIFRoZSBBbWF6b24gRUZTIGFjY2VzcyBwb2ludCBJRCB0byB1c2UuIElmIGFuIGFjY2VzcyBwb2ludCBpcyBzcGVjaWZpZWQsIHRoZSByb290IGRpcmVjdG9yeSB2YWx1ZSBzcGVjaWZpZWQgaW4gdGhlIGBgRUZTVm9sdW1lQ29uZmlndXJhdGlvbmBgIG11c3QgZWl0aGVyIGJlIG9taXR0ZWQgb3Igc2V0IHRvIGBgL2BgIHdoaWNoIHdpbGwgZW5mb3JjZSB0aGUgcGF0aCBzZXQgb24gdGhlIEVGUyBhY2Nlc3MgcG9pbnQuIElmIGFuIGFjY2VzcyBwb2ludCBpcyB1c2VkLCB0cmFuc2l0IGVuY3J5cHRpb24gbXVzdCBiZSBvbiBpbiB0aGUgYGBFRlNWb2x1bWVDb25maWd1cmF0aW9uYGAuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1dvcmtpbmcgd2l0aCBBbWF6b24gRUZTIGFjY2VzcyBwb2ludHNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9lZnMvbGF0ZXN0L3VnL2Vmcy1hY2Nlc3MtcG9pbnRzLmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgRmlsZSBTeXN0ZW0gVXNlciBHdWlkZSouXG4gKi9cbkFjY2Vzc1BvaW50SWQ/OiBzdHJpbmdcbn1cbi8qKlxuICogVGhpcyBwYXJhbWV0ZXIgaXMgc3BlY2lmaWVkIHdoZW4geW91IHVzZSBiaW5kIG1vdW50IGhvc3Qgdm9sdW1lcy4gVGhlIGNvbnRlbnRzIG9mIHRoZSBgYGhvc3RgYCBwYXJhbWV0ZXIgZGV0ZXJtaW5lIHdoZXRoZXIgeW91ciBiaW5kIG1vdW50IGhvc3Qgdm9sdW1lIHBlcnNpc3RzIG9uIHRoZSBob3N0IGNvbnRhaW5lciBpbnN0YW5jZSBhbmQgd2hlcmUgaXQncyBzdG9yZWQuIElmIHRoZSBgYGhvc3RgYCBwYXJhbWV0ZXIgaXMgZW1wdHksIHRoZW4gdGhlIERvY2tlciBkYWVtb24gYXNzaWducyBhIGhvc3QgcGF0aCBmb3IgeW91ciBkYXRhIHZvbHVtZS4gSG93ZXZlciwgdGhlIGRhdGEgaXNuJ3QgZ3VhcmFudGVlZCB0byBwZXJzaXN0IGFmdGVyIHRoZSBjb250YWluZXJzIHRoYXQgYXJlIGFzc29jaWF0ZWQgd2l0aCBpdCBzdG9wIHJ1bm5pbmcuXG4gKiAgV2luZG93cyBjb250YWluZXJzIGNhbiBtb3VudCB3aG9sZSBkaXJlY3RvcmllcyBvbiB0aGUgc2FtZSBkcml2ZSBhcyBgYCRlbnY6UHJvZ3JhbURhdGFgYC4gV2luZG93cyBjb250YWluZXJzIGNhbid0IG1vdW50IGRpcmVjdG9yaWVzIG9uIGEgZGlmZmVyZW50IGRyaXZlLCBhbmQgbW91bnQgcG9pbnQgY2FuJ3QgYmUgYWNyb3NzIGRyaXZlcy4gRm9yIGV4YW1wbGUsIHlvdSBjYW4gbW91bnQgYGBDOlxcbXlcXHBhdGg6QzpcXG15XFxwYXRoYGAgYW5kIGBgRDpcXDpEOlxcYGAsIGJ1dCBub3QgYGBEOlxcbXlcXHBhdGg6QzpcXG15XFxwYXRoYGAgb3IgYGBEOlxcOkM6XFxteVxccGF0aGBgLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEhvc3RWb2x1bWVQcm9wZXJ0aWVzIHtcbi8qKlxuICogV2hlbiB0aGUgYGBob3N0YGAgcGFyYW1ldGVyIGlzIHVzZWQsIHNwZWNpZnkgYSBgYHNvdXJjZVBhdGhgYCB0byBkZWNsYXJlIHRoZSBwYXRoIG9uIHRoZSBob3N0IGNvbnRhaW5lciBpbnN0YW5jZSB0aGF0J3MgcHJlc2VudGVkIHRvIHRoZSBjb250YWluZXIuIElmIHRoaXMgcGFyYW1ldGVyIGlzIGVtcHR5LCB0aGVuIHRoZSBEb2NrZXIgZGFlbW9uIGhhcyBhc3NpZ25lZCBhIGhvc3QgcGF0aCBmb3IgeW91LiBJZiB0aGUgYGBob3N0YGAgcGFyYW1ldGVyIGNvbnRhaW5zIGEgYGBzb3VyY2VQYXRoYGAgZmlsZSBsb2NhdGlvbiwgdGhlbiB0aGUgZGF0YSB2b2x1bWUgcGVyc2lzdHMgYXQgdGhlIHNwZWNpZmllZCBsb2NhdGlvbiBvbiB0aGUgaG9zdCBjb250YWluZXIgaW5zdGFuY2UgdW50aWwgeW91IGRlbGV0ZSBpdCBtYW51YWxseS4gSWYgdGhlIGBgc291cmNlUGF0aGBgIHZhbHVlIGRvZXNuJ3QgZXhpc3Qgb24gdGhlIGhvc3QgY29udGFpbmVyIGluc3RhbmNlLCB0aGUgRG9ja2VyIGRhZW1vbiBjcmVhdGVzIGl0LiBJZiB0aGUgbG9jYXRpb24gZG9lcyBleGlzdCwgdGhlIGNvbnRlbnRzIG9mIHRoZSBzb3VyY2UgcGF0aCBmb2xkZXIgYXJlIGV4cG9ydGVkLlxuICogIElmIHlvdSdyZSB1c2luZyB0aGUgRmFyZ2F0ZSBsYXVuY2ggdHlwZSwgdGhlIGBgc291cmNlUGF0aGBgIHBhcmFtZXRlciBpcyBub3Qgc3VwcG9ydGVkLlxuICovXG5Tb3VyY2VQYXRoPzogc3RyaW5nXG59XG4vKipcbiAqIFRoaXMgcGFyYW1ldGVyIGlzIHNwZWNpZmllZCB3aGVuIHlvdSB1c2UgRG9ja2VyIHZvbHVtZXMuXG4gKiAgV2luZG93cyBjb250YWluZXJzIG9ubHkgc3VwcG9ydCB0aGUgdXNlIG9mIHRoZSBgYGxvY2FsYGAgZHJpdmVyLiBUbyB1c2UgYmluZCBtb3VudHMsIHNwZWNpZnkgdGhlIGBgaG9zdGBgIHBhcmFtZXRlciBpbnN0ZWFkLlxuICogICBEb2NrZXIgdm9sdW1lcyBhcmVuJ3Qgc3VwcG9ydGVkIGJ5IHRhc2tzIHJ1biBvbiBGQVJHQVRFbG9uZy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEb2NrZXJWb2x1bWVDb25maWd1cmF0aW9uIHtcbi8qKlxuICogQSBtYXAgb2YgRG9ja2VyIGRyaXZlci1zcGVjaWZpYyBvcHRpb25zIHBhc3NlZCB0aHJvdWdoLiBUaGlzIHBhcmFtZXRlciBtYXBzIHRvIGBgRHJpdmVyT3B0c2BgIGluIHRoZSBkb2NrZXIgY3JlYXRlLXZvbHVtZSBjb21tYW5kIGFuZCB0aGUgYGB4eG9wdGBgIG9wdGlvbiB0byBkb2NrZXIgdm9sdW1lIGNyZWF0ZS5cbiAqL1xuRHJpdmVyT3B0cz86IHtcbi8qKlxuICogVGhpcyBpbnRlcmZhY2Ugd2FzIHJlZmVyZW5jZWQgYnkgYHVuZGVmaW5lZGAncyBKU09OLVNjaGVtYSBkZWZpbml0aW9uXG4gKiB2aWEgdGhlIGBwYXR0ZXJuUHJvcGVydHlgIFwiLnsxLH1cIi5cbiAqL1xuW2s6IHN0cmluZ106IHN0cmluZ1xufVxuLyoqXG4gKiBUaGUgc2NvcGUgZm9yIHRoZSBEb2NrZXIgdm9sdW1lIHRoYXQgZGV0ZXJtaW5lcyBpdHMgbGlmZWN5Y2xlLiBEb2NrZXIgdm9sdW1lcyB0aGF0IGFyZSBzY29wZWQgdG8gYSBgYHRhc2tgYCBhcmUgYXV0b21hdGljYWxseSBwcm92aXNpb25lZCB3aGVuIHRoZSB0YXNrIHN0YXJ0cyBhbmQgZGVzdHJveWVkIHdoZW4gdGhlIHRhc2sgc3RvcHMuIERvY2tlciB2b2x1bWVzIHRoYXQgYXJlIHNjb3BlZCBhcyBgYHNoYXJlZGBgIHBlcnNpc3QgYWZ0ZXIgdGhlIHRhc2sgc3RvcHMuXG4gKi9cblNjb3BlPzogc3RyaW5nXG4vKipcbiAqIElmIHRoaXMgdmFsdWUgaXMgYGB0cnVlYGAsIHRoZSBEb2NrZXIgdm9sdW1lIGlzIGNyZWF0ZWQgaWYgaXQgZG9lc24ndCBhbHJlYWR5IGV4aXN0LlxuICogICBUaGlzIGZpZWxkIGlzIG9ubHkgdXNlZCBpZiB0aGUgYGBzY29wZWBgIGlzIGBgc2hhcmVkYGAuXG4gKi9cbkF1dG9wcm92aXNpb24/OiBib29sZWFuXG4vKipcbiAqIFRoZSBEb2NrZXIgdm9sdW1lIGRyaXZlciB0byB1c2UuIFRoZSBkcml2ZXIgdmFsdWUgbXVzdCBtYXRjaCB0aGUgZHJpdmVyIG5hbWUgcHJvdmlkZWQgYnkgRG9ja2VyIGJlY2F1c2UgaXQgaXMgdXNlZCBmb3IgdGFzayBwbGFjZW1lbnQuIElmIHRoZSBkcml2ZXIgd2FzIGluc3RhbGxlZCB1c2luZyB0aGUgRG9ja2VyIHBsdWdpbiBDTEksIHVzZSBgYGRvY2tlciBwbHVnaW4gbHNgYCB0byByZXRyaWV2ZSB0aGUgZHJpdmVyIG5hbWUgZnJvbSB5b3VyIGNvbnRhaW5lciBpbnN0YW5jZS4gSWYgdGhlIGRyaXZlciB3YXMgaW5zdGFsbGVkIHVzaW5nIGFub3RoZXIgbWV0aG9kLCB1c2UgRG9ja2VyIHBsdWdpbiBkaXNjb3ZlcnkgdG8gcmV0cmlldmUgdGhlIGRyaXZlciBuYW1lLiBUaGlzIHBhcmFtZXRlciBtYXBzIHRvIGBgRHJpdmVyYGAgaW4gdGhlIGRvY2tlciBjb250YWluZXIgY3JlYXRlIGNvbW1hbmQgYW5kIHRoZSBgYHh4ZHJpdmVyYGAgb3B0aW9uIHRvIGRvY2tlciB2b2x1bWUgY3JlYXRlLlxuICovXG5Ecml2ZXI/OiBzdHJpbmdcbi8qKlxuICogQ3VzdG9tIG1ldGFkYXRhIHRvIGFkZCB0byB5b3VyIERvY2tlciB2b2x1bWUuIFRoaXMgcGFyYW1ldGVyIG1hcHMgdG8gYGBMYWJlbHNgYCBpbiB0aGUgZG9ja2VyIGNvbnRhaW5lciBjcmVhdGUgY29tbWFuZCBhbmQgdGhlIGBgeHhsYWJlbGBgIG9wdGlvbiB0byBkb2NrZXIgdm9sdW1lIGNyZWF0ZS5cbiAqL1xuTGFiZWxzPzoge1xuLyoqXG4gKiBUaGlzIGludGVyZmFjZSB3YXMgcmVmZXJlbmNlZCBieSBgdW5kZWZpbmVkYCdzIEpTT04tU2NoZW1hIGRlZmluaXRpb25cbiAqIHZpYSB0aGUgYHBhdHRlcm5Qcm9wZXJ0eWAgXCIuezEsfVwiLlxuICovXG5bazogc3RyaW5nXTogc3RyaW5nXG59XG59XG4vKipcbiAqIFRoaXMgcGFyYW1ldGVyIGlzIHNwZWNpZmllZCB3aGVuIHlvdSB1c2UgQW1hem9uIEZTeCBmb3IgV2luZG93cyBGaWxlIFNlcnZlciBmaWxlIHN5c3RlbSBmb3IgdGFzayBzdG9yYWdlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZTeFdpbmRvd3NGaWxlU2VydmVyVm9sdW1lQ29uZmlndXJhdGlvbiB7XG5BdXRob3JpemF0aW9uQ29uZmlnPzogRlN4QXV0aG9yaXphdGlvbkNvbmZpZ1xuLyoqXG4gKiBUaGUgQW1hem9uIEZTeCBmb3IgV2luZG93cyBGaWxlIFNlcnZlciBmaWxlIHN5c3RlbSBJRCB0byB1c2UuXG4gKi9cbkZpbGVTeXN0ZW1JZDogc3RyaW5nXG4vKipcbiAqIFRoZSBkaXJlY3Rvcnkgd2l0aGluIHRoZSBBbWF6b24gRlN4IGZvciBXaW5kb3dzIEZpbGUgU2VydmVyIGZpbGUgc3lzdGVtIHRvIG1vdW50IGFzIHRoZSByb290IGRpcmVjdG9yeSBpbnNpZGUgdGhlIGhvc3QuXG4gKi9cblJvb3REaXJlY3Rvcnk6IHN0cmluZ1xufVxuLyoqXG4gKiBUaGUgYXV0aG9yaXphdGlvbiBjb25maWd1cmF0aW9uIGRldGFpbHMgZm9yIHRoZSBBbWF6b24gRlN4IGZvciBXaW5kb3dzIEZpbGUgU2VydmVyIGZpbGUgc3lzdGVtLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZTeEF1dGhvcml6YXRpb25Db25maWcge1xuLyoqXG4gKiBUaGUgYXV0aG9yaXphdGlvbiBjcmVkZW50aWFsIG9wdGlvbiB0byB1c2UuIFRoZSBhdXRob3JpemF0aW9uIGNyZWRlbnRpYWwgb3B0aW9ucyBjYW4gYmUgcHJvdmlkZWQgdXNpbmcgZWl0aGVyIHRoZSBBbWF6b24gUmVzb3VyY2UgTmFtZSAoQVJOKSBvZiBhbiBBU01sb25nIHNlY3JldCBvciBTU00gUGFyYW1ldGVyIFN0b3JlIHBhcmFtZXRlci4gVGhlIEFSTiByZWZlcnMgdG8gdGhlIHN0b3JlZCBjcmVkZW50aWFscy5cbiAqL1xuQ3JlZGVudGlhbHNQYXJhbWV0ZXI6IHN0cmluZ1xuLyoqXG4gKiBBIGZ1bGx5IHF1YWxpZmllZCBkb21haW4gbmFtZSBob3N0ZWQgYnkgYW4gW10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2RpcmVjdG9yeXNlcnZpY2UvbGF0ZXN0L2FkbWluLWd1aWRlL2RpcmVjdG9yeV9taWNyb3NvZnRfYWQuaHRtbCkgTWFuYWdlZCBNaWNyb3NvZnQgQUQgKEFjdGl2ZSBEaXJlY3RvcnkpIG9yIHNlbGYtaG9zdGVkIEFEIG9uIEFtYXpvbiBFQzIuXG4gKi9cbkRvbWFpbjogc3RyaW5nXG59XG4vKipcbiAqIFRoZSBgYENvbnRhaW5lckRlZmluaXRpb25gYCBwcm9wZXJ0eSBzcGVjaWZpZXMgYSBjb250YWluZXIgZGVmaW5pdGlvbi4gQ29udGFpbmVyIGRlZmluaXRpb25zIGFyZSB1c2VkIGluIHRhc2sgZGVmaW5pdGlvbnMgdG8gZGVzY3JpYmUgdGhlIGRpZmZlcmVudCBjb250YWluZXJzIHRoYXQgYXJlIGxhdW5jaGVkIGFzIHBhcnQgb2YgYSB0YXNrLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbnRhaW5lckRlZmluaXRpb24ge1xuLyoqXG4gKiBUaGUgdXNlciB0byB1c2UgaW5zaWRlIHRoZSBjb250YWluZXIuIFRoaXMgcGFyYW1ldGVyIG1hcHMgdG8gYGBVc2VyYGAgaW4gdGhlIGRvY2tlciBjb250YWluZXIgY3JlYXRlIGNvbW1hbmQgYW5kIHRoZSBgYC0tdXNlcmBgIG9wdGlvbiB0byBkb2NrZXIgcnVuLlxuICogICBXaGVuIHJ1bm5pbmcgdGFza3MgdXNpbmcgdGhlIGBgaG9zdGBgIG5ldHdvcmsgbW9kZSwgZG9uJ3QgcnVuIGNvbnRhaW5lcnMgdXNpbmcgdGhlIHJvb3QgdXNlciAoVUlEIDApLiBXZSByZWNvbW1lbmQgdXNpbmcgYSBub24tcm9vdCB1c2VyIGZvciBiZXR0ZXIgc2VjdXJpdHkuXG4gKiAgIFlvdSBjYW4gc3BlY2lmeSB0aGUgYGB1c2VyYGAgdXNpbmcgdGhlIGZvbGxvd2luZyBmb3JtYXRzLiBJZiBzcGVjaWZ5aW5nIGEgVUlEIG9yIEdJRCwgeW91IG11c3Qgc3BlY2lmeSBpdCBhcyBhIHBvc2l0aXZlIGludGVnZXIuXG4gKiAgICsgICBgYHVzZXJgYCBcbiAqICAgKyAgIGBgdXNlcjpncm91cGBgIFxuICogICArICAgYGB1aWRgYCBcbiAqICAgKyAgIGBgdWlkOmdpZGBgIFxuICogICArICAgYGB1c2VyOmdpZGBgIFxuICogICArICAgYGB1aWQ6Z3JvdXBgYCBcbiAqICAgXG4gKiAgIFRoaXMgcGFyYW1ldGVyIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIFdpbmRvd3MgY29udGFpbmVycy5cbiAqL1xuVXNlcj86IHN0cmluZ1xuLyoqXG4gKiBUaGUgc2VjcmV0cyB0byBwYXNzIHRvIHRoZSBjb250YWluZXIuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1NwZWNpZnlpbmcgU2Vuc2l0aXZlIERhdGFdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3NwZWNpZnlpbmctc2Vuc2l0aXZlLWRhdGEuaHRtbCkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5TZWNyZXRzPzogU2VjcmV0W11cbi8qKlxuICogVGhlIGFtb3VudCAoaW4gTWlCKSBvZiBtZW1vcnkgdG8gcHJlc2VudCB0byB0aGUgY29udGFpbmVyLiBJZiB5b3VyIGNvbnRhaW5lciBhdHRlbXB0cyB0byBleGNlZWQgdGhlIG1lbW9yeSBzcGVjaWZpZWQgaGVyZSwgdGhlIGNvbnRhaW5lciBpcyBraWxsZWQuIFRoZSB0b3RhbCBhbW91bnQgb2YgbWVtb3J5IHJlc2VydmVkIGZvciBhbGwgY29udGFpbmVycyB3aXRoaW4gYSB0YXNrIG11c3QgYmUgbG93ZXIgdGhhbiB0aGUgdGFzayBgYG1lbW9yeWBgIHZhbHVlLCBpZiBvbmUgaXMgc3BlY2lmaWVkLiBUaGlzIHBhcmFtZXRlciBtYXBzIHRvIGBgTWVtb3J5YGAgaW4gdGhlIFtDcmVhdGUgYSBjb250YWluZXJdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9odHRwczovL2RvY3MuZG9ja2VyLmNvbS9lbmdpbmUvYXBpL3YxLjM1LyNvcGVyYXRpb24vQ29udGFpbmVyQ3JlYXRlKSBzZWN0aW9uIG9mIHRoZSBbRG9ja2VyIFJlbW90ZSBBUEldKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9odHRwczovL2RvY3MuZG9ja2VyLmNvbS9lbmdpbmUvYXBpL3YxLjM1LykgYW5kIHRoZSBgYC0tbWVtb3J5YGAgb3B0aW9uIHRvIFtkb2NrZXIgcnVuXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vaHR0cHM6Ly9kb2NzLmRvY2tlci5jb20vZW5naW5lL3JlZmVyZW5jZS9ydW4vI3NlY3VyaXR5LWNvbmZpZ3VyYXRpb24pLlxuICogIElmIHVzaW5nIHRoZSBGYXJnYXRlIGxhdW5jaCB0eXBlLCB0aGlzIHBhcmFtZXRlciBpcyBvcHRpb25hbC5cbiAqICBJZiB1c2luZyB0aGUgRUMyIGxhdW5jaCB0eXBlLCB5b3UgbXVzdCBzcGVjaWZ5IGVpdGhlciBhIHRhc2stbGV2ZWwgbWVtb3J5IHZhbHVlIG9yIGEgY29udGFpbmVyLWxldmVsIG1lbW9yeSB2YWx1ZS4gSWYgeW91IHNwZWNpZnkgYm90aCBhIGNvbnRhaW5lci1sZXZlbCBgYG1lbW9yeWBgIGFuZCBgYG1lbW9yeVJlc2VydmF0aW9uYGAgdmFsdWUsIGBgbWVtb3J5YGAgbXVzdCBiZSBncmVhdGVyIHRoYW4gYGBtZW1vcnlSZXNlcnZhdGlvbmBgLiBJZiB5b3Ugc3BlY2lmeSBgYG1lbW9yeVJlc2VydmF0aW9uYGAsIHRoZW4gdGhhdCB2YWx1ZSBpcyBzdWJ0cmFjdGVkIGZyb20gdGhlIGF2YWlsYWJsZSBtZW1vcnkgcmVzb3VyY2VzIGZvciB0aGUgY29udGFpbmVyIGluc3RhbmNlIHdoZXJlIHRoZSBjb250YWluZXIgaXMgcGxhY2VkLiBPdGhlcndpc2UsIHRoZSB2YWx1ZSBvZiBgYG1lbW9yeWBgIGlzIHVzZWQuXG4gKiAgVGhlIERvY2tlciAyMC4xMC4wIG9yIGxhdGVyIGRhZW1vbiByZXNlcnZlcyBhIG1pbmltdW0gb2YgNiBNaUIgb2YgbWVtb3J5IGZvciBhIGNvbnRhaW5lciwgc28geW91IHNob3VsZCBub3Qgc3BlY2lmeSBmZXdlciB0aGFuIDYgTWlCIG9mIG1lbW9yeSBmb3IgeW91ciBjb250YWluZXJzLlxuICogIFRoZSBEb2NrZXIgMTkuMDMuMTMtY2Ugb3IgZWFybGllciBkYWVtb24gcmVzZXJ2ZXMgYSBtaW5pbXVtIG9mIDQgTWlCIG9mIG1lbW9yeSBmb3IgYSBjb250YWluZXIsIHNvIHlvdSBzaG91bGQgbm90IHNwZWNpZnkgZmV3ZXIgdGhhbiA0IE1pQiBvZiBtZW1vcnkgZm9yIHlvdXIgY29udGFpbmVycy5cbiAqL1xuTWVtb3J5PzogbnVtYmVyXG4vKipcbiAqIFdoZW4gdGhpcyBwYXJhbWV0ZXIgaXMgdHJ1ZSwgdGhlIGNvbnRhaW5lciBpcyBnaXZlbiBlbGV2YXRlZCBwcml2aWxlZ2VzIG9uIHRoZSBob3N0IGNvbnRhaW5lciBpbnN0YW5jZSAoc2ltaWxhciB0byB0aGUgYGByb290YGAgdXNlcikuIFRoaXMgcGFyYW1ldGVyIG1hcHMgdG8gYGBQcml2aWxlZ2VkYGAgaW4gdGhlIGRvY2tlciBjb250YWluZXIgY3JlYXRlIGNvbW1hbmQgYW5kIHRoZSBgYC0tcHJpdmlsZWdlZGBgIG9wdGlvbiB0byBkb2NrZXIgcnVuXG4gKiAgIFRoaXMgcGFyYW1ldGVyIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIFdpbmRvd3MgY29udGFpbmVycyBvciB0YXNrcyBydW4gb24gRkFSR0FURWxvbmcuXG4gKi9cblByaXZpbGVnZWQ/OiBib29sZWFuXG5IZWFsdGhDaGVjaz86IEhlYWx0aENoZWNrXG4vKipcbiAqIFRpbWUgZHVyYXRpb24gKGluIHNlY29uZHMpIHRvIHdhaXQgYmVmb3JlIGdpdmluZyB1cCBvbiByZXNvbHZpbmcgZGVwZW5kZW5jaWVzIGZvciBhIGNvbnRhaW5lci4gRm9yIGV4YW1wbGUsIHlvdSBzcGVjaWZ5IHR3byBjb250YWluZXJzIGluIGEgdGFzayBkZWZpbml0aW9uIHdpdGggY29udGFpbmVyQSBoYXZpbmcgYSBkZXBlbmRlbmN5IG9uIGNvbnRhaW5lckIgcmVhY2hpbmcgYSBgYENPTVBMRVRFYGAsIGBgU1VDQ0VTU2BgLCBvciBgYEhFQUxUSFlgYCBzdGF0dXMuIElmIGEgYGBzdGFydFRpbWVvdXRgYCB2YWx1ZSBpcyBzcGVjaWZpZWQgZm9yIGNvbnRhaW5lckIgYW5kIGl0IGRvZXNuJ3QgcmVhY2ggdGhlIGRlc2lyZWQgc3RhdHVzIHdpdGhpbiB0aGF0IHRpbWUgdGhlbiBjb250YWluZXJBIGdpdmVzIHVwIGFuZCBub3Qgc3RhcnQuIFRoaXMgcmVzdWx0cyBpbiB0aGUgdGFzayB0cmFuc2l0aW9uaW5nIHRvIGEgYGBTVE9QUEVEYGAgc3RhdGUuXG4gKiAgIFdoZW4gdGhlIGBgRUNTX0NPTlRBSU5FUl9TVEFSVF9USU1FT1VUYGAgY29udGFpbmVyIGFnZW50IGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgaXMgdXNlZCwgaXQncyBlbmZvcmNlZCBpbmRlcGVuZGVudGx5IGZyb20gdGhpcyBzdGFydCB0aW1lb3V0IHZhbHVlLlxuICogICBGb3IgdGFza3MgdXNpbmcgdGhlIEZhcmdhdGUgbGF1bmNoIHR5cGUsIHRoZSB0YXNrIG9yIHNlcnZpY2UgcmVxdWlyZXMgdGhlIGZvbGxvd2luZyBwbGF0Zm9ybXM6XG4gKiAgICsgIExpbnV4IHBsYXRmb3JtIHZlcnNpb24gYGAxLjMuMGBgIG9yIGxhdGVyLlxuICogICArICBXaW5kb3dzIHBsYXRmb3JtIHZlcnNpb24gYGAxLjAuMGBgIG9yIGxhdGVyLlxuICogICBcbiAqICBGb3IgdGFza3MgdXNpbmcgdGhlIEVDMiBsYXVuY2ggdHlwZSwgeW91ciBjb250YWluZXIgaW5zdGFuY2VzIHJlcXVpcmUgYXQgbGVhc3QgdmVyc2lvbiBgYDEuMjYuMGBgIG9mIHRoZSBjb250YWluZXIgYWdlbnQgdG8gdXNlIGEgY29udGFpbmVyIHN0YXJ0IHRpbWVvdXQgdmFsdWUuIEhvd2V2ZXIsIHdlIHJlY29tbWVuZCB1c2luZyB0aGUgbGF0ZXN0IGNvbnRhaW5lciBhZ2VudCB2ZXJzaW9uLiBGb3IgaW5mb3JtYXRpb24gYWJvdXQgY2hlY2tpbmcgeW91ciBhZ2VudCB2ZXJzaW9uIGFuZCB1cGRhdGluZyB0byB0aGUgbGF0ZXN0IHZlcnNpb24sIHNlZSBbVXBkYXRpbmcgdGhlIEFtYXpvbiBFQ1MgQ29udGFpbmVyIEFnZW50XShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9lY3MtYWdlbnQtdXBkYXRlLmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi4gSWYgeW91J3JlIHVzaW5nIGFuIEFtYXpvbiBFQ1Mtb3B0aW1pemVkIExpbnV4IEFNSSwgeW91ciBpbnN0YW5jZSBuZWVkcyBhdCBsZWFzdCB2ZXJzaW9uIGBgMS4yNi4wLTFgYCBvZiB0aGUgYGBlY3MtaW5pdGBgIHBhY2thZ2UuIElmIHlvdXIgY29udGFpbmVyIGluc3RhbmNlcyBhcmUgbGF1bmNoZWQgZnJvbSB2ZXJzaW9uIGBgMjAxOTAzMDFgYCBvciBsYXRlciwgdGhlbiB0aGV5IGNvbnRhaW4gdGhlIHJlcXVpcmVkIHZlcnNpb25zIG9mIHRoZSBjb250YWluZXIgYWdlbnQgYW5kIGBgZWNzLWluaXRgYC4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbQW1hem9uIEVDUy1vcHRpbWl6ZWQgTGludXggQU1JXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9lY3Mtb3B0aW1pemVkX0FNSS5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSouXG4gKiAgVGhlIHZhbGlkIHZhbHVlcyBmb3IgRmFyZ2F0ZSBhcmUgMi0xMjAgc2Vjb25kcy5cbiAqL1xuU3RhcnRUaW1lb3V0PzogbnVtYmVyXG4vKipcbiAqIERhdGEgdm9sdW1lcyB0byBtb3VudCBmcm9tIGFub3RoZXIgY29udGFpbmVyLiBUaGlzIHBhcmFtZXRlciBtYXBzIHRvIGBgVm9sdW1lc0Zyb21gYCBpbiB0aGUgZG9ja2VyIGNvbnRhaW5lciBjcmVhdGUgY29tbWFuZCBhbmQgdGhlIGBgLS12b2x1bWVzLWZyb21gYCBvcHRpb24gdG8gZG9ja2VyIHJ1bi5cbiAqL1xuVm9sdW1lc0Zyb20/OiBWb2x1bWVGcm9tW11cbi8qKlxuICogVGhlIG51bWJlciBvZiBgYGNwdWBgIHVuaXRzIHJlc2VydmVkIGZvciB0aGUgY29udGFpbmVyLiBUaGlzIHBhcmFtZXRlciBtYXBzIHRvIGBgQ3B1U2hhcmVzYGAgaW4gdGhlIGRvY2tlciBjb250YWluZXIgY3JlYXRlIGNvbW1hbmRhbmQgdGhlIGBgLS1jcHUtc2hhcmVzYGAgb3B0aW9uIHRvIGRvY2tlciBydW4uXG4gKiAgVGhpcyBmaWVsZCBpcyBvcHRpb25hbCBmb3IgdGFza3MgdXNpbmcgdGhlIEZhcmdhdGUgbGF1bmNoIHR5cGUsIGFuZCB0aGUgb25seSByZXF1aXJlbWVudCBpcyB0aGF0IHRoZSB0b3RhbCBhbW91bnQgb2YgQ1BVIHJlc2VydmVkIGZvciBhbGwgY29udGFpbmVycyB3aXRoaW4gYSB0YXNrIGJlIGxvd2VyIHRoYW4gdGhlIHRhc2stbGV2ZWwgYGBjcHVgYCB2YWx1ZS5cbiAqICAgWW91IGNhbiBkZXRlcm1pbmUgdGhlIG51bWJlciBvZiBDUFUgdW5pdHMgdGhhdCBhcmUgYXZhaWxhYmxlIHBlciBFQzIgaW5zdGFuY2UgdHlwZSBieSBtdWx0aXBseWluZyB0aGUgdkNQVXMgbGlzdGVkIGZvciB0aGF0IGluc3RhbmNlIHR5cGUgb24gdGhlIFtBbWF6b24gRUMyIEluc3RhbmNlc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2VjMi9pbnN0YW5jZS10eXBlcy8pIGRldGFpbCBwYWdlIGJ5IDEsMDI0LlxuICogICBMaW51eCBjb250YWluZXJzIHNoYXJlIHVuYWxsb2NhdGVkIENQVSB1bml0cyB3aXRoIG90aGVyIGNvbnRhaW5lcnMgb24gdGhlIGNvbnRhaW5lciBpbnN0YW5jZSB3aXRoIHRoZSBzYW1lIHJhdGlvIGFzIHRoZWlyIGFsbG9jYXRlZCBhbW91bnQuIEZvciBleGFtcGxlLCBpZiB5b3UgcnVuIGEgc2luZ2xlLWNvbnRhaW5lciB0YXNrIG9uIGEgc2luZ2xlLWNvcmUgaW5zdGFuY2UgdHlwZSB3aXRoIDUxMiBDUFUgdW5pdHMgc3BlY2lmaWVkIGZvciB0aGF0IGNvbnRhaW5lciwgYW5kIHRoYXQncyB0aGUgb25seSB0YXNrIHJ1bm5pbmcgb24gdGhlIGNvbnRhaW5lciBpbnN0YW5jZSwgdGhhdCBjb250YWluZXIgY291bGQgdXNlIHRoZSBmdWxsIDEsMDI0IENQVSB1bml0IHNoYXJlIGF0IGFueSBnaXZlbiB0aW1lLiBIb3dldmVyLCBpZiB5b3UgbGF1bmNoZWQgYW5vdGhlciBjb3B5IG9mIHRoZSBzYW1lIHRhc2sgb24gdGhhdCBjb250YWluZXIgaW5zdGFuY2UsIGVhY2ggdGFzayBpcyBndWFyYW50ZWVkIGEgbWluaW11bSBvZiA1MTIgQ1BVIHVuaXRzIHdoZW4gbmVlZGVkLiBNb3Jlb3ZlciwgZWFjaCBjb250YWluZXIgY291bGQgZmxvYXQgdG8gaGlnaGVyIENQVSB1c2FnZSBpZiB0aGUgb3RoZXIgY29udGFpbmVyIHdhcyBub3QgdXNpbmcgaXQuIElmIGJvdGggdGFza3Mgd2VyZSAxMDAlIGFjdGl2ZSBhbGwgb2YgdGhlIHRpbWUsIHRoZXkgd291bGQgYmUgbGltaXRlZCB0byA1MTIgQ1BVIHVuaXRzLlxuICogIE9uIExpbnV4IGNvbnRhaW5lciBpbnN0YW5jZXMsIHRoZSBEb2NrZXIgZGFlbW9uIG9uIHRoZSBjb250YWluZXIgaW5zdGFuY2UgdXNlcyB0aGUgQ1BVIHZhbHVlIHRvIGNhbGN1bGF0ZSB0aGUgcmVsYXRpdmUgQ1BVIHNoYXJlIHJhdGlvcyBmb3IgcnVubmluZyBjb250YWluZXJzLiBUaGUgbWluaW11bSB2YWxpZCBDUFUgc2hhcmUgdmFsdWUgdGhhdCB0aGUgTGludXgga2VybmVsIGFsbG93cyBpcyAyLCBhbmQgdGhlIG1heGltdW0gdmFsaWQgQ1BVIHNoYXJlIHZhbHVlIHRoYXQgdGhlIExpbnV4IGtlcm5lbCBhbGxvd3MgaXMgMjYyMTQ0LiBIb3dldmVyLCB0aGUgQ1BVIHBhcmFtZXRlciBpc24ndCByZXF1aXJlZCwgYW5kIHlvdSBjYW4gdXNlIENQVSB2YWx1ZXMgYmVsb3cgMiBvciBhYm92ZSAyNjIxNDQgaW4geW91ciBjb250YWluZXIgZGVmaW5pdGlvbnMuIEZvciBDUFUgdmFsdWVzIGJlbG93IDIgKGluY2x1ZGluZyBudWxsKSBvciBhYm92ZSAyNjIxNDQsIHRoZSBiZWhhdmlvciB2YXJpZXMgYmFzZWQgb24geW91ciBBbWF6b24gRUNTIGNvbnRhaW5lciBhZ2VudCB2ZXJzaW9uOlxuICogICArICAqQWdlbnQgdmVyc2lvbnMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDEuMS4wOiogTnVsbCBhbmQgemVybyBDUFUgdmFsdWVzIGFyZSBwYXNzZWQgdG8gRG9ja2VyIGFzIDAsIHdoaWNoIERvY2tlciB0aGVuIGNvbnZlcnRzIHRvIDEsMDI0IENQVSBzaGFyZXMuIENQVSB2YWx1ZXMgb2YgMSBhcmUgcGFzc2VkIHRvIERvY2tlciBhcyAxLCB3aGljaCB0aGUgTGludXgga2VybmVsIGNvbnZlcnRzIHRvIHR3byBDUFUgc2hhcmVzLlxuICogICArICAqQWdlbnQgdmVyc2lvbnMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDEuMi4wOiogTnVsbCwgemVybywgYW5kIENQVSB2YWx1ZXMgb2YgMSBhcmUgcGFzc2VkIHRvIERvY2tlciBhcyAyLlxuICogICArICAqQWdlbnQgdmVyc2lvbnMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDEuODQuMDoqIENQVSB2YWx1ZXMgZ3JlYXRlciB0aGFuIDI1NiB2Q1BVIGFyZSBwYXNzZWQgdG8gRG9ja2VyIGFzIDI1Niwgd2hpY2ggaXMgZXF1aXZhbGVudCB0byAyNjIxNDQgQ1BVIHNoYXJlcy5cbiAqICAgXG4gKiAgT24gV2luZG93cyBjb250YWluZXIgaW5zdGFuY2VzLCB0aGUgQ1BVIGxpbWl0IGlzIGVuZm9yY2VkIGFzIGFuIGFic29sdXRlIGxpbWl0LCBvciBhIHF1b3RhLiBXaW5kb3dzIGNvbnRhaW5lcnMgb25seSBoYXZlIGFjY2VzcyB0byB0aGUgc3BlY2lmaWVkIGFtb3VudCBvZiBDUFUgdGhhdCdzIGRlc2NyaWJlZCBpbiB0aGUgdGFzayBkZWZpbml0aW9uLiBBIG51bGwgb3IgemVybyBDUFUgdmFsdWUgaXMgcGFzc2VkIHRvIERvY2tlciBhcyBgYDBgYCwgd2hpY2ggV2luZG93cyBpbnRlcnByZXRzIGFzIDElIG9mIG9uZSBDUFUuXG4gKi9cbkNwdT86IG51bWJlclxuLyoqXG4gKiBFYXJseSB2ZXJzaW9ucyBvZiB0aGUgQW1hem9uIEVDUyBjb250YWluZXIgYWdlbnQgZG9uJ3QgcHJvcGVybHkgaGFuZGxlIGBgZW50cnlQb2ludGBgIHBhcmFtZXRlcnMuIElmIHlvdSBoYXZlIHByb2JsZW1zIHVzaW5nIGBgZW50cnlQb2ludGBgLCB1cGRhdGUgeW91ciBjb250YWluZXIgYWdlbnQgb3IgZW50ZXIgeW91ciBjb21tYW5kcyBhbmQgYXJndW1lbnRzIGFzIGBgY29tbWFuZGBgIGFycmF5IGl0ZW1zIGluc3RlYWQuXG4gKiAgIFRoZSBlbnRyeSBwb2ludCB0aGF0J3MgcGFzc2VkIHRvIHRoZSBjb250YWluZXIuIFRoaXMgcGFyYW1ldGVyIG1hcHMgdG8gYGBFbnRyeXBvaW50YGAgaW4gdGhlIGRvY2tlciBjb250YWluZXIgY3JlYXRlIGNvbW1hbmQgYW5kIHRoZSBgYC0tZW50cnlwb2ludGBgIG9wdGlvbiB0byBkb2NrZXIgcnVuLlxuICovXG5FbnRyeVBvaW50Pzogc3RyaW5nW11cbi8qKlxuICogQSBsaXN0IG9mIEROUyBzZXJ2ZXJzIHRoYXQgYXJlIHByZXNlbnRlZCB0byB0aGUgY29udGFpbmVyLiBUaGlzIHBhcmFtZXRlciBtYXBzIHRvIGBgRG5zYGAgaW4gdGhlIGRvY2tlciBjb250YWluZXIgY3JlYXRlIGNvbW1hbmQgYW5kIHRoZSBgYC0tZG5zYGAgb3B0aW9uIHRvIGRvY2tlciBydW4uXG4gKiAgIFRoaXMgcGFyYW1ldGVyIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIFdpbmRvd3MgY29udGFpbmVycy5cbiAqL1xuRG5zU2VydmVycz86IHN0cmluZ1tdXG4vKipcbiAqIFdoZW4gdGhpcyBwYXJhbWV0ZXIgaXMgdHJ1ZSwgdGhlIGNvbnRhaW5lciBpcyBnaXZlbiByZWFkLW9ubHkgYWNjZXNzIHRvIGl0cyByb290IGZpbGUgc3lzdGVtLiBUaGlzIHBhcmFtZXRlciBtYXBzIHRvIGBgUmVhZG9ubHlSb290ZnNgYCBpbiB0aGUgZG9ja2VyIGNvbnRhaW5lciBjcmVhdGUgY29tbWFuZCBhbmQgdGhlIGBgLS1yZWFkLW9ubHlgYCBvcHRpb24gdG8gZG9ja2VyIHJ1bi5cbiAqICAgVGhpcyBwYXJhbWV0ZXIgaXMgbm90IHN1cHBvcnRlZCBmb3IgV2luZG93cyBjb250YWluZXJzLlxuICovXG5SZWFkb25seVJvb3RGaWxlc3lzdGVtPzogYm9vbGVhblxuLyoqXG4gKiBUaGUgaW1hZ2UgdXNlZCB0byBzdGFydCBhIGNvbnRhaW5lci4gVGhpcyBzdHJpbmcgaXMgcGFzc2VkIGRpcmVjdGx5IHRvIHRoZSBEb2NrZXIgZGFlbW9uLiBCeSBkZWZhdWx0LCBpbWFnZXMgaW4gdGhlIERvY2tlciBIdWIgcmVnaXN0cnkgYXJlIGF2YWlsYWJsZS4gT3RoZXIgcmVwb3NpdG9yaWVzIGFyZSBzcGVjaWZpZWQgd2l0aCBlaXRoZXIgYGByZXBvc2l0b3J5LXVybC9pbWFnZTp0YWdgYCBvciBgYHJlcG9zaXRvcnktdXJsL2ltYWdlQGRpZ2VzdGBgLiBGb3IgaW1hZ2VzIHVzaW5nIHRhZ3MgKHJlcG9zaXRvcnktdXJsL2ltYWdlOnRhZyksIHVwIHRvIDI1NSBjaGFyYWN0ZXJzIHRvdGFsIGFyZSBhbGxvd2VkLCBpbmNsdWRpbmcgbGV0dGVycyAodXBwZXJjYXNlIGFuZCBsb3dlcmNhc2UpLCBudW1iZXJzLCBoeXBoZW5zLCB1bmRlcnNjb3JlcywgY29sb25zLCBwZXJpb2RzLCBmb3J3YXJkIHNsYXNoZXMsIGFuZCBudW1iZXIgc2lnbnMgKCMpLiBGb3IgaW1hZ2VzIHVzaW5nIGRpZ2VzdHMgKHJlcG9zaXRvcnktdXJsL2ltYWdlQGRpZ2VzdCksIHRoZSAyNTUgY2hhcmFjdGVyIGxpbWl0IGFwcGxpZXMgb25seSB0byB0aGUgcmVwb3NpdG9yeSBVUkwgYW5kIGltYWdlIG5hbWUgKGV2ZXJ5dGhpbmcgYmVmb3JlIHRoZSBAIHNpZ24pLiBUaGUgb25seSBzdXBwb3J0ZWQgaGFzaCBmdW5jdGlvbiBpcyBzaGEyNTYsIGFuZCB0aGUgaGFzaCB2YWx1ZSBhZnRlciBzaGEyNTY6IG11c3QgYmUgZXhhY3RseSA2NCBjaGFyYWN0ZXJzIChvbmx5IGxldHRlcnMgQS1GLCBhLWYsIGFuZCBudW1iZXJzIDAtOSBhcmUgYWxsb3dlZCkuIFRoaXMgcGFyYW1ldGVyIG1hcHMgdG8gYGBJbWFnZWBgIGluIHRoZSBkb2NrZXIgY29udGFpbmVyIGNyZWF0ZSBjb21tYW5kIGFuZCB0aGUgYGBJTUFHRWBgIHBhcmFtZXRlciBvZiBkb2NrZXIgcnVuLlxuICogICArICBXaGVuIGEgbmV3IHRhc2sgc3RhcnRzLCB0aGUgQW1hem9uIEVDUyBjb250YWluZXIgYWdlbnQgcHVsbHMgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoZSBzcGVjaWZpZWQgaW1hZ2UgYW5kIHRhZyBmb3IgdGhlIGNvbnRhaW5lciB0byB1c2UuIEhvd2V2ZXIsIHN1YnNlcXVlbnQgdXBkYXRlcyB0byBhIHJlcG9zaXRvcnkgaW1hZ2UgYXJlbid0IHByb3BhZ2F0ZWQgdG8gYWxyZWFkeSBydW5uaW5nIHRhc2tzLlxuICogICArICBJbWFnZXMgaW4gQW1hem9uIEVDUiByZXBvc2l0b3JpZXMgY2FuIGJlIHNwZWNpZmllZCBieSBlaXRoZXIgdXNpbmcgdGhlIGZ1bGwgYGByZWdpc3RyeS9yZXBvc2l0b3J5OnRhZ2BgIG9yIGBgcmVnaXN0cnkvcmVwb3NpdG9yeUBkaWdlc3RgYC4gRm9yIGV4YW1wbGUsIGBgMDEyMzQ1Njc4OTEwLmRrci5lY3IuPHJlZ2lvbi1uYW1lPi5hbWF6b25hd3MuY29tLzxyZXBvc2l0b3J5LW5hbWU+OmxhdGVzdGBgIG9yIGBgMDEyMzQ1Njc4OTEwLmRrci5lY3IuPHJlZ2lvbi1uYW1lPi5hbWF6b25hd3MuY29tLzxyZXBvc2l0b3J5LW5hbWU+QHNoYTI1Njo5NGFmZDFmMmU2NGQ5MDhiYzkwZGJjYTAwMzVhNWI1NjdFWEFNUExFYGAuIFxuICogICArICBJbWFnZXMgaW4gb2ZmaWNpYWwgcmVwb3NpdG9yaWVzIG9uIERvY2tlciBIdWIgdXNlIGEgc2luZ2xlIG5hbWUgKGZvciBleGFtcGxlLCBgYHVidW50dWBgIG9yIGBgbW9uZ29gYCkuXG4gKiAgICsgIEltYWdlcyBpbiBvdGhlciByZXBvc2l0b3JpZXMgb24gRG9ja2VyIEh1YiBhcmUgcXVhbGlmaWVkIHdpdGggYW4gb3JnYW5pemF0aW9uIG5hbWUgKGZvciBleGFtcGxlLCBgYGFtYXpvbi9hbWF6b24tZWNzLWFnZW50YGApLlxuICogICArICBJbWFnZXMgaW4gb3RoZXIgb25saW5lIHJlcG9zaXRvcmllcyBhcmUgcXVhbGlmaWVkIGZ1cnRoZXIgYnkgYSBkb21haW4gbmFtZSAoZm9yIGV4YW1wbGUsIGBgcXVheS5pby9hc3NlbWJseWxpbmUvdWJ1bnR1YGApLlxuICovXG5JbWFnZTogc3RyaW5nXG4vKipcbiAqIElmIHRoZSBgYGVzc2VudGlhbGBgIHBhcmFtZXRlciBvZiBhIGNvbnRhaW5lciBpcyBtYXJrZWQgYXMgYGB0cnVlYGAsIGFuZCB0aGF0IGNvbnRhaW5lciBmYWlscyBvciBzdG9wcyBmb3IgYW55IHJlYXNvbiwgYWxsIG90aGVyIGNvbnRhaW5lcnMgdGhhdCBhcmUgcGFydCBvZiB0aGUgdGFzayBhcmUgc3RvcHBlZC4gSWYgdGhlIGBgZXNzZW50aWFsYGAgcGFyYW1ldGVyIG9mIGEgY29udGFpbmVyIGlzIG1hcmtlZCBhcyBgYGZhbHNlYGAsIGl0cyBmYWlsdXJlIGRvZXNuJ3QgYWZmZWN0IHRoZSByZXN0IG9mIHRoZSBjb250YWluZXJzIGluIGEgdGFzay4gSWYgdGhpcyBwYXJhbWV0ZXIgaXMgb21pdHRlZCwgYSBjb250YWluZXIgaXMgYXNzdW1lZCB0byBiZSBlc3NlbnRpYWwuXG4gKiAgQWxsIHRhc2tzIG11c3QgaGF2ZSBhdCBsZWFzdCBvbmUgZXNzZW50aWFsIGNvbnRhaW5lci4gSWYgeW91IGhhdmUgYW4gYXBwbGljYXRpb24gdGhhdCdzIGNvbXBvc2VkIG9mIG11bHRpcGxlIGNvbnRhaW5lcnMsIGdyb3VwIGNvbnRhaW5lcnMgdGhhdCBhcmUgdXNlZCBmb3IgYSBjb21tb24gcHVycG9zZSBpbnRvIGNvbXBvbmVudHMsIGFuZCBzZXBhcmF0ZSB0aGUgZGlmZmVyZW50IGNvbXBvbmVudHMgaW50byBtdWx0aXBsZSB0YXNrIGRlZmluaXRpb25zLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtBcHBsaWNhdGlvbiBBcmNoaXRlY3R1cmVdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2FwcGxpY2F0aW9uX2FyY2hpdGVjdHVyZS5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSouXG4gKi9cbkVzc2VudGlhbD86IGJvb2xlYW5cbkxvZ0NvbmZpZ3VyYXRpb24/OiBMb2dDb25maWd1cmF0aW9uXG4vKipcbiAqIFRoZSB0eXBlIGFuZCBhbW91bnQgb2YgYSByZXNvdXJjZSB0byBhc3NpZ24gdG8gYSBjb250YWluZXIuIFRoZSBvbmx5IHN1cHBvcnRlZCByZXNvdXJjZSBpcyBhIEdQVS5cbiAqL1xuUmVzb3VyY2VSZXF1aXJlbWVudHM/OiBSZXNvdXJjZVJlcXVpcmVtZW50W11cbi8qKlxuICogQSBsaXN0IG9mIGZpbGVzIGNvbnRhaW5pbmcgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcyB0byBwYXNzIHRvIGEgY29udGFpbmVyLiBUaGlzIHBhcmFtZXRlciBtYXBzIHRvIHRoZSBgYC0tZW52LWZpbGVgYCBvcHRpb24gdG8gZG9ja2VyIHJ1bi5cbiAqICBZb3UgY2FuIHNwZWNpZnkgdXAgdG8gdGVuIGVudmlyb25tZW50IGZpbGVzLiBUaGUgZmlsZSBtdXN0IGhhdmUgYSBgYC5lbnZgYCBmaWxlIGV4dGVuc2lvbi4gRWFjaCBsaW5lIGluIGFuIGVudmlyb25tZW50IGZpbGUgY29udGFpbnMgYW4gZW52aXJvbm1lbnQgdmFyaWFibGUgaW4gYGBWQVJJQUJMRT1WQUxVRWBgIGZvcm1hdC4gTGluZXMgYmVnaW5uaW5nIHdpdGggYGAjYGAgYXJlIHRyZWF0ZWQgYXMgY29tbWVudHMgYW5kIGFyZSBpZ25vcmVkLlxuICogIElmIHRoZXJlIGFyZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgc3BlY2lmaWVkIHVzaW5nIHRoZSBgYGVudmlyb25tZW50YGAgcGFyYW1ldGVyIGluIGEgY29udGFpbmVyIGRlZmluaXRpb24sIHRoZXkgdGFrZSBwcmVjZWRlbmNlIG92ZXIgdGhlIHZhcmlhYmxlcyBjb250YWluZWQgd2l0aGluIGFuIGVudmlyb25tZW50IGZpbGUuIElmIG11bHRpcGxlIGVudmlyb25tZW50IGZpbGVzIGFyZSBzcGVjaWZpZWQgdGhhdCBjb250YWluIHRoZSBzYW1lIHZhcmlhYmxlLCB0aGV5J3JlIHByb2Nlc3NlZCBmcm9tIHRoZSB0b3AgZG93bi4gV2UgcmVjb21tZW5kIHRoYXQgeW91IHVzZSB1bmlxdWUgdmFyaWFibGUgbmFtZXMuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1NwZWNpZnlpbmcgRW52aXJvbm1lbnQgVmFyaWFibGVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS90YXNrZGVmLWVudmZpbGVzLmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuRW52aXJvbm1lbnRGaWxlcz86IEVudmlyb25tZW50RmlsZVtdXG4vKipcbiAqIFRoZSBuYW1lIG9mIGEgY29udGFpbmVyLiBJZiB5b3UncmUgbGlua2luZyBtdWx0aXBsZSBjb250YWluZXJzIHRvZ2V0aGVyIGluIGEgdGFzayBkZWZpbml0aW9uLCB0aGUgYGBuYW1lYGAgb2Ygb25lIGNvbnRhaW5lciBjYW4gYmUgZW50ZXJlZCBpbiB0aGUgYGBsaW5rc2BgIG9mIGFub3RoZXIgY29udGFpbmVyIHRvIGNvbm5lY3QgdGhlIGNvbnRhaW5lcnMuIFVwIHRvIDI1NSBsZXR0ZXJzICh1cHBlcmNhc2UgYW5kIGxvd2VyY2FzZSksIG51bWJlcnMsIHVuZGVyc2NvcmVzLCBhbmQgaHlwaGVucyBhcmUgYWxsb3dlZC4gVGhpcyBwYXJhbWV0ZXIgbWFwcyB0byBgYG5hbWVgYCBpbiB0aGUgZG9ja2VyIGNvbnRhaW5lciBjcmVhdGUgY29tbWFuZCBhbmQgdGhlIGBgLS1uYW1lYGAgb3B0aW9uIHRvIGRvY2tlciBydW4uXG4gKi9cbk5hbWU6IHN0cmluZ1xuRmlyZWxlbnNDb25maWd1cmF0aW9uPzogRmlyZWxlbnNDb25maWd1cmF0aW9uXG4vKipcbiAqIEEgbGlzdCBvZiBzdHJpbmdzIHRvIHByb3ZpZGUgY3VzdG9tIGNvbmZpZ3VyYXRpb24gZm9yIG11bHRpcGxlIHNlY3VyaXR5IHN5c3RlbXMuIFRoaXMgZmllbGQgaXNuJ3QgdmFsaWQgZm9yIGNvbnRhaW5lcnMgaW4gdGFza3MgdXNpbmcgdGhlIEZhcmdhdGUgbGF1bmNoIHR5cGUuXG4gKiAgRm9yIExpbnV4IHRhc2tzIG9uIEVDMiwgdGhpcyBwYXJhbWV0ZXIgY2FuIGJlIHVzZWQgdG8gcmVmZXJlbmNlIGN1c3RvbSBsYWJlbHMgZm9yIFNFTGludXggYW5kIEFwcEFybW9yIG11bHRpLWxldmVsIHNlY3VyaXR5IHN5c3RlbXMuXG4gKiAgRm9yIGFueSB0YXNrcyBvbiBFQzIsIHRoaXMgcGFyYW1ldGVyIGNhbiBiZSB1c2VkIHRvIHJlZmVyZW5jZSBhIGNyZWRlbnRpYWwgc3BlYyBmaWxlIHRoYXQgY29uZmlndXJlcyBhIGNvbnRhaW5lciBmb3IgQWN0aXZlIERpcmVjdG9yeSBhdXRoZW50aWNhdGlvbi4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbVXNpbmcgZ01TQXMgZm9yIFdpbmRvd3MgQ29udGFpbmVyc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvd2luZG93cy1nbXNhLmh0bWwpIGFuZCBbVXNpbmcgZ01TQXMgZm9yIExpbnV4IENvbnRhaW5lcnNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2xpbnV4LWdtc2EuaHRtbCkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLlxuICogIFRoaXMgcGFyYW1ldGVyIG1hcHMgdG8gYGBTZWN1cml0eU9wdGBgIGluIHRoZSBkb2NrZXIgY29udGFpbmVyIGNyZWF0ZSBjb21tYW5kIGFuZCB0aGUgYGAtLXNlY3VyaXR5LW9wdGBgIG9wdGlvbiB0byBkb2NrZXIgcnVuLlxuICogICBUaGUgQW1hem9uIEVDUyBjb250YWluZXIgYWdlbnQgcnVubmluZyBvbiBhIGNvbnRhaW5lciBpbnN0YW5jZSBtdXN0IHJlZ2lzdGVyIHdpdGggdGhlIGBgRUNTX1NFTElOVVhfQ0FQQUJMRT10cnVlYGAgb3IgYGBFQ1NfQVBQQVJNT1JfQ0FQQUJMRT10cnVlYGAgZW52aXJvbm1lbnQgdmFyaWFibGVzIGJlZm9yZSBjb250YWluZXJzIHBsYWNlZCBvbiB0aGF0IGluc3RhbmNlIGNhbiB1c2UgdGhlc2Ugc2VjdXJpdHkgb3B0aW9ucy4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbQW1hem9uIEVDUyBDb250YWluZXIgQWdlbnQgQ29uZmlndXJhdGlvbl0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvZWNzLWFnZW50LWNvbmZpZy5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSouXG4gKiAgIFZhbGlkIHZhbHVlczogXCJuby1uZXctcHJpdmlsZWdlc1wiIHwgXCJhcHBhcm1vcjpQUk9GSUxFXCIgfCBcImxhYmVsOnZhbHVlXCIgfCBcImNyZWRlbnRpYWxzcGVjOkNyZWRlbnRpYWxTcGVjRmlsZVBhdGhcIlxuICovXG5Eb2NrZXJTZWN1cml0eU9wdGlvbnM/OiBzdHJpbmdbXVxuLyoqXG4gKiBBIGxpc3Qgb2YgbmFtZXNwYWNlZCBrZXJuZWwgcGFyYW1ldGVycyB0byBzZXQgaW4gdGhlIGNvbnRhaW5lci4gVGhpcyBwYXJhbWV0ZXIgbWFwcyB0byBgYFN5c2N0bHNgYCBpbiB0aGUgZG9ja2VyIGNvbnRhaW5lciBjcmVhdGUgY29tbWFuZCBhbmQgdGhlIGBgLS1zeXNjdGxgYCBvcHRpb24gdG8gZG9ja2VyIHJ1bi4gRm9yIGV4YW1wbGUsIHlvdSBjYW4gY29uZmlndXJlIGBgbmV0LmlwdjQudGNwX2tlZXBhbGl2ZV90aW1lYGAgc2V0dGluZyB0byBtYWludGFpbiBsb25nZXIgbGl2ZWQgY29ubmVjdGlvbnMuXG4gKi9cblN5c3RlbUNvbnRyb2xzPzogU3lzdGVtQ29udHJvbFtdXG4vKipcbiAqIFdoZW4gdGhpcyBwYXJhbWV0ZXIgaXMgYGB0cnVlYGAsIHlvdSBjYW4gZGVwbG95IGNvbnRhaW5lcml6ZWQgYXBwbGljYXRpb25zIHRoYXQgcmVxdWlyZSBgYHN0ZGluYGAgb3IgYSBgYHR0eWBgIHRvIGJlIGFsbG9jYXRlZC4gVGhpcyBwYXJhbWV0ZXIgbWFwcyB0byBgYE9wZW5TdGRpbmBgIGluIHRoZSBkb2NrZXIgY29udGFpbmVyIGNyZWF0ZSBjb21tYW5kIGFuZCB0aGUgYGAtLWludGVyYWN0aXZlYGAgb3B0aW9uIHRvIGRvY2tlciBydW4uXG4gKi9cbkludGVyYWN0aXZlPzogYm9vbGVhblxuLyoqXG4gKiBBIGxpc3Qgb2YgRE5TIHNlYXJjaCBkb21haW5zIHRoYXQgYXJlIHByZXNlbnRlZCB0byB0aGUgY29udGFpbmVyLiBUaGlzIHBhcmFtZXRlciBtYXBzIHRvIGBgRG5zU2VhcmNoYGAgaW4gdGhlIGRvY2tlciBjb250YWluZXIgY3JlYXRlIGNvbW1hbmQgYW5kIHRoZSBgYC0tZG5zLXNlYXJjaGBgIG9wdGlvbiB0byBkb2NrZXIgcnVuLlxuICogICBUaGlzIHBhcmFtZXRlciBpcyBub3Qgc3VwcG9ydGVkIGZvciBXaW5kb3dzIGNvbnRhaW5lcnMuXG4gKi9cbkRuc1NlYXJjaERvbWFpbnM/OiBzdHJpbmdbXVxuLyoqXG4gKiBBIGxpc3Qgb2YgQVJOcyBpbiBTU00gb3IgQW1hem9uIFMzIHRvIGEgY3JlZGVudGlhbCBzcGVjIChgYENyZWRTcGVjYGApIGZpbGUgdGhhdCBjb25maWd1cmVzIHRoZSBjb250YWluZXIgZm9yIEFjdGl2ZSBEaXJlY3RvcnkgYXV0aGVudGljYXRpb24uIFdlIHJlY29tbWVuZCB0aGF0IHlvdSB1c2UgdGhpcyBwYXJhbWV0ZXIgaW5zdGVhZCBvZiB0aGUgYGBkb2NrZXJTZWN1cml0eU9wdGlvbnNgYC4gVGhlIG1heGltdW0gbnVtYmVyIG9mIEFSTnMgaXMgMS5cbiAqICBUaGVyZSBhcmUgdHdvIGZvcm1hdHMgZm9yIGVhY2ggQVJOLlxuICogICArIGNyZWRlbnRpYWxzcGVjZG9tYWlubGVzczpNeUFSTiBZb3UgdXNlIGNyZWRlbnRpYWxzcGVjZG9tYWlubGVzczpNeUFSTiB0byBwcm92aWRlIGEgQ3JlZFNwZWMgd2l0aCBhbiBhZGRpdGlvbmFsIHNlY3Rpb24gZm9yIGEgc2VjcmV0IGluIC4gWW91IHByb3ZpZGUgdGhlIGxvZ2luIGNyZWRlbnRpYWxzIHRvIHRoZSBkb21haW4gaW4gdGhlIHNlY3JldC4gRWFjaCB0YXNrIHRoYXQgcnVucyBvbiBhbnkgY29udGFpbmVyIGluc3RhbmNlIGNhbiBqb2luIGRpZmZlcmVudCBkb21haW5zLiBZb3UgY2FuIHVzZSB0aGlzIGZvcm1hdCB3aXRob3V0IGpvaW5pbmcgdGhlIGNvbnRhaW5lciBpbnN0YW5jZSB0byBhIGRvbWFpbi4gKyBjcmVkZW50aWFsc3BlYzpNeUFSTiBZb3UgdXNlIGNyZWRlbnRpYWxzcGVjOk15QVJOIHRvIHByb3ZpZGUgYSBDcmVkU3BlYyBmb3IgYSBzaW5nbGUgZG9tYWluLiBZb3UgbXVzdCBqb2luIHRoZSBjb250YWluZXIgaW5zdGFuY2UgdG8gdGhlIGRvbWFpbiBiZWZvcmUgeW91IHN0YXJ0IGFueSB0YXNrcyB0aGF0IHVzZSB0aGlzIHRhc2sgZGVmaW5pdGlvbi4gXG4gKiAgSW4gYm90aCBmb3JtYXRzLCByZXBsYWNlIGBgTXlBUk5gYCB3aXRoIHRoZSBBUk4gaW4gU1NNIG9yIEFtYXpvbiBTMy5cbiAqICBJZiB5b3UgcHJvdmlkZSBhIGBgY3JlZGVudGlhbHNwZWNkb21haW5sZXNzOk15QVJOYGAsIHRoZSBgYGNyZWRzcGVjYGAgbXVzdCBwcm92aWRlIGEgQVJOIGluIEFTTWxvbmcgZm9yIGEgc2VjcmV0IGNvbnRhaW5pbmcgdGhlIHVzZXJuYW1lLCBwYXNzd29yZCwgYW5kIHRoZSBkb21haW4gdG8gY29ubmVjdCB0by4gRm9yIGJldHRlciBzZWN1cml0eSwgdGhlIGluc3RhbmNlIGlzbid0IGpvaW5lZCB0byB0aGUgZG9tYWluIGZvciBkb21haW5sZXNzIGF1dGhlbnRpY2F0aW9uLiBPdGhlciBhcHBsaWNhdGlvbnMgb24gdGhlIGluc3RhbmNlIGNhbid0IHVzZSB0aGUgZG9tYWlubGVzcyBjcmVkZW50aWFscy4gWW91IGNhbiB1c2UgdGhpcyBwYXJhbWV0ZXIgdG8gcnVuIHRhc2tzIG9uIHRoZSBzYW1lIGluc3RhbmNlLCBldmVuIGl0IHRoZSB0YXNrcyBuZWVkIHRvIGpvaW4gZGlmZmVyZW50IGRvbWFpbnMuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1VzaW5nIGdNU0FzIGZvciBXaW5kb3dzIENvbnRhaW5lcnNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3dpbmRvd3MtZ21zYS5odG1sKSBhbmQgW1VzaW5nIGdNU0FzIGZvciBMaW51eCBDb250YWluZXJzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9saW51eC1nbXNhLmh0bWwpLlxuICovXG5DcmVkZW50aWFsU3BlY3M/OiBzdHJpbmdbXVxuLyoqXG4gKiBBIGxpc3Qgb2YgYGB1bGltaXRzYGAgdG8gc2V0IGluIHRoZSBjb250YWluZXIuIFRoaXMgcGFyYW1ldGVyIG1hcHMgdG8gYGBVbGltaXRzYGAgaW4gdGhlIFtDcmVhdGUgYSBjb250YWluZXJdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9odHRwczovL2RvY3MuZG9ja2VyLmNvbS9lbmdpbmUvYXBpL3YxLjM1LyNvcGVyYXRpb24vQ29udGFpbmVyQ3JlYXRlKSBzZWN0aW9uIG9mIHRoZSBbRG9ja2VyIFJlbW90ZSBBUEldKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9odHRwczovL2RvY3MuZG9ja2VyLmNvbS9lbmdpbmUvYXBpL3YxLjM1LykgYW5kIHRoZSBgYC0tdWxpbWl0YGAgb3B0aW9uIHRvIFtkb2NrZXIgcnVuXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vaHR0cHM6Ly9kb2NzLmRvY2tlci5jb20vZW5naW5lL3JlZmVyZW5jZS9ydW4vKS4gVmFsaWQgbmFtaW5nIHZhbHVlcyBhcmUgZGlzcGxheWVkIGluIHRoZSBbVWxpbWl0XShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX1VsaW1pdC5odG1sKSBkYXRhIHR5cGUuIFRoaXMgcGFyYW1ldGVyIHJlcXVpcmVzIHZlcnNpb24gMS4xOCBvZiB0aGUgRG9ja2VyIFJlbW90ZSBBUEkgb3IgZ3JlYXRlciBvbiB5b3VyIGNvbnRhaW5lciBpbnN0YW5jZS4gVG8gY2hlY2sgdGhlIERvY2tlciBSZW1vdGUgQVBJIHZlcnNpb24gb24geW91ciBjb250YWluZXIgaW5zdGFuY2UsIGxvZyBpbiB0byB5b3VyIGNvbnRhaW5lciBpbnN0YW5jZSBhbmQgcnVuIHRoZSBmb2xsb3dpbmcgY29tbWFuZDogYGBzdWRvIGRvY2tlciB2ZXJzaW9uIC0tZm9ybWF0ICd7ey5TZXJ2ZXIuQVBJVmVyc2lvbn19J2BgXG4gKiAgIFRoaXMgcGFyYW1ldGVyIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIFdpbmRvd3MgY29udGFpbmVycy5cbiAqL1xuVWxpbWl0cz86IFVsaW1pdFtdXG4vKipcbiAqIFRpbWUgZHVyYXRpb24gKGluIHNlY29uZHMpIHRvIHdhaXQgYmVmb3JlIHRoZSBjb250YWluZXIgaXMgZm9yY2VmdWxseSBraWxsZWQgaWYgaXQgZG9lc24ndCBleGl0IG5vcm1hbGx5IG9uIGl0cyBvd24uXG4gKiAgRm9yIHRhc2tzIHVzaW5nIHRoZSBGYXJnYXRlIGxhdW5jaCB0eXBlLCB0aGUgdGFzayBvciBzZXJ2aWNlIHJlcXVpcmVzIHRoZSBmb2xsb3dpbmcgcGxhdGZvcm1zOlxuICogICArICBMaW51eCBwbGF0Zm9ybSB2ZXJzaW9uIGBgMS4zLjBgYCBvciBsYXRlci5cbiAqICAgKyAgV2luZG93cyBwbGF0Zm9ybSB2ZXJzaW9uIGBgMS4wLjBgYCBvciBsYXRlci5cbiAqICAgXG4gKiAgRm9yIHRhc2tzIHRoYXQgdXNlIHRoZSBGYXJnYXRlIGxhdW5jaCB0eXBlLCB0aGUgbWF4IHN0b3AgdGltZW91dCB2YWx1ZSBpcyAxMjAgc2Vjb25kcyBhbmQgaWYgdGhlIHBhcmFtZXRlciBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgZGVmYXVsdCB2YWx1ZSBvZiAzMCBzZWNvbmRzIGlzIHVzZWQuXG4gKiAgRm9yIHRhc2tzIHRoYXQgdXNlIHRoZSBFQzIgbGF1bmNoIHR5cGUsIGlmIHRoZSBgYHN0b3BUaW1lb3V0YGAgcGFyYW1ldGVyIGlzbid0IHNwZWNpZmllZCwgdGhlIHZhbHVlIHNldCBmb3IgdGhlIEFtYXpvbiBFQ1MgY29udGFpbmVyIGFnZW50IGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgYGBFQ1NfQ09OVEFJTkVSX1NUT1BfVElNRU9VVGBgIGlzIHVzZWQuIElmIG5laXRoZXIgdGhlIGBgc3RvcFRpbWVvdXRgYCBwYXJhbWV0ZXIgb3IgdGhlIGBgRUNTX0NPTlRBSU5FUl9TVE9QX1RJTUVPVVRgYCBhZ2VudCBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGFyZSBzZXQsIHRoZW4gdGhlIGRlZmF1bHQgdmFsdWVzIG9mIDMwIHNlY29uZHMgZm9yIExpbnV4IGNvbnRhaW5lcnMgYW5kIDMwIHNlY29uZHMgb24gV2luZG93cyBjb250YWluZXJzIGFyZSB1c2VkLiBZb3VyIGNvbnRhaW5lciBpbnN0YW5jZXMgcmVxdWlyZSBhdCBsZWFzdCB2ZXJzaW9uIDEuMjYuMCBvZiB0aGUgY29udGFpbmVyIGFnZW50IHRvIHVzZSBhIGNvbnRhaW5lciBzdG9wIHRpbWVvdXQgdmFsdWUuIEhvd2V2ZXIsIHdlIHJlY29tbWVuZCB1c2luZyB0aGUgbGF0ZXN0IGNvbnRhaW5lciBhZ2VudCB2ZXJzaW9uLiBGb3IgaW5mb3JtYXRpb24gYWJvdXQgY2hlY2tpbmcgeW91ciBhZ2VudCB2ZXJzaW9uIGFuZCB1cGRhdGluZyB0byB0aGUgbGF0ZXN0IHZlcnNpb24sIHNlZSBbVXBkYXRpbmcgdGhlIEFtYXpvbiBFQ1MgQ29udGFpbmVyIEFnZW50XShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9lY3MtYWdlbnQtdXBkYXRlLmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi4gSWYgeW91J3JlIHVzaW5nIGFuIEFtYXpvbiBFQ1Mtb3B0aW1pemVkIExpbnV4IEFNSSwgeW91ciBpbnN0YW5jZSBuZWVkcyBhdCBsZWFzdCB2ZXJzaW9uIDEuMjYuMC0xIG9mIHRoZSBgYGVjcy1pbml0YGAgcGFja2FnZS4gSWYgeW91ciBjb250YWluZXIgaW5zdGFuY2VzIGFyZSBsYXVuY2hlZCBmcm9tIHZlcnNpb24gYGAyMDE5MDMwMWBgIG9yIGxhdGVyLCB0aGVuIHRoZXkgY29udGFpbiB0aGUgcmVxdWlyZWQgdmVyc2lvbnMgb2YgdGhlIGNvbnRhaW5lciBhZ2VudCBhbmQgYGBlY3MtaW5pdGBgLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtBbWF6b24gRUNTLW9wdGltaXplZCBMaW51eCBBTUldKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2Vjcy1vcHRpbWl6ZWRfQU1JLmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqICBUaGUgdmFsaWQgdmFsdWVzIGZvciBGYXJnYXRlIGFyZSAyLTEyMCBzZWNvbmRzLlxuICovXG5TdG9wVGltZW91dD86IG51bWJlclxuLyoqXG4gKiBUaGUgd29ya2luZyBkaXJlY3RvcnkgdG8gcnVuIGNvbW1hbmRzIGluc2lkZSB0aGUgY29udGFpbmVyIGluLiBUaGlzIHBhcmFtZXRlciBtYXBzIHRvIGBgV29ya2luZ0RpcmBgIGluIHRoZSBkb2NrZXIgY29udGFpbmVyIGNyZWF0ZSBjb21tYW5kIGFuZCB0aGUgYGAtLXdvcmtkaXJgYCBvcHRpb24gdG8gZG9ja2VyIHJ1bi5cbiAqL1xuV29ya2luZ0RpcmVjdG9yeT86IHN0cmluZ1xuLyoqXG4gKiBUaGUgc29mdCBsaW1pdCAoaW4gTWlCKSBvZiBtZW1vcnkgdG8gcmVzZXJ2ZSBmb3IgdGhlIGNvbnRhaW5lci4gV2hlbiBzeXN0ZW0gbWVtb3J5IGlzIHVuZGVyIGhlYXZ5IGNvbnRlbnRpb24sIERvY2tlciBhdHRlbXB0cyB0byBrZWVwIHRoZSBjb250YWluZXIgbWVtb3J5IHRvIHRoaXMgc29mdCBsaW1pdC4gSG93ZXZlciwgeW91ciBjb250YWluZXIgY2FuIGNvbnN1bWUgbW9yZSBtZW1vcnkgd2hlbiBpdCBuZWVkcyB0bywgdXAgdG8gZWl0aGVyIHRoZSBoYXJkIGxpbWl0IHNwZWNpZmllZCB3aXRoIHRoZSBgYG1lbW9yeWBgIHBhcmFtZXRlciAoaWYgYXBwbGljYWJsZSksIG9yIGFsbCBvZiB0aGUgYXZhaWxhYmxlIG1lbW9yeSBvbiB0aGUgY29udGFpbmVyIGluc3RhbmNlLCB3aGljaGV2ZXIgY29tZXMgZmlyc3QuIFRoaXMgcGFyYW1ldGVyIG1hcHMgdG8gYGBNZW1vcnlSZXNlcnZhdGlvbmBgIGluIHRoZSBkb2NrZXIgY29udGFpbmVyIGNyZWF0ZSBjb21tYW5kIGFuZCB0aGUgYGAtLW1lbW9yeS1yZXNlcnZhdGlvbmBgIG9wdGlvbiB0byBkb2NrZXIgcnVuLlxuICogIElmIGEgdGFzay1sZXZlbCBtZW1vcnkgdmFsdWUgaXMgbm90IHNwZWNpZmllZCwgeW91IG11c3Qgc3BlY2lmeSBhIG5vbi16ZXJvIGludGVnZXIgZm9yIG9uZSBvciBib3RoIG9mIGBgbWVtb3J5YGAgb3IgYGBtZW1vcnlSZXNlcnZhdGlvbmBgIGluIGEgY29udGFpbmVyIGRlZmluaXRpb24uIElmIHlvdSBzcGVjaWZ5IGJvdGgsIGBgbWVtb3J5YGAgbXVzdCBiZSBncmVhdGVyIHRoYW4gYGBtZW1vcnlSZXNlcnZhdGlvbmBgLiBJZiB5b3Ugc3BlY2lmeSBgYG1lbW9yeVJlc2VydmF0aW9uYGAsIHRoZW4gdGhhdCB2YWx1ZSBpcyBzdWJ0cmFjdGVkIGZyb20gdGhlIGF2YWlsYWJsZSBtZW1vcnkgcmVzb3VyY2VzIGZvciB0aGUgY29udGFpbmVyIGluc3RhbmNlIHdoZXJlIHRoZSBjb250YWluZXIgaXMgcGxhY2VkLiBPdGhlcndpc2UsIHRoZSB2YWx1ZSBvZiBgYG1lbW9yeWBgIGlzIHVzZWQuXG4gKiAgRm9yIGV4YW1wbGUsIGlmIHlvdXIgY29udGFpbmVyIG5vcm1hbGx5IHVzZXMgMTI4IE1pQiBvZiBtZW1vcnksIGJ1dCBvY2Nhc2lvbmFsbHkgYnVyc3RzIHRvIDI1NiBNaUIgb2YgbWVtb3J5IGZvciBzaG9ydCBwZXJpb2RzIG9mIHRpbWUsIHlvdSBjYW4gc2V0IGEgYGBtZW1vcnlSZXNlcnZhdGlvbmBgIG9mIDEyOCBNaUIsIGFuZCBhIGBgbWVtb3J5YGAgaGFyZCBsaW1pdCBvZiAzMDAgTWlCLiBUaGlzIGNvbmZpZ3VyYXRpb24gd291bGQgYWxsb3cgdGhlIGNvbnRhaW5lciB0byBvbmx5IHJlc2VydmUgMTI4IE1pQiBvZiBtZW1vcnkgZnJvbSB0aGUgcmVtYWluaW5nIHJlc291cmNlcyBvbiB0aGUgY29udGFpbmVyIGluc3RhbmNlLCBidXQgYWxzbyBhbGxvdyB0aGUgY29udGFpbmVyIHRvIGNvbnN1bWUgbW9yZSBtZW1vcnkgcmVzb3VyY2VzIHdoZW4gbmVlZGVkLlxuICogIFRoZSBEb2NrZXIgMjAuMTAuMCBvciBsYXRlciBkYWVtb24gcmVzZXJ2ZXMgYSBtaW5pbXVtIG9mIDYgTWlCIG9mIG1lbW9yeSBmb3IgYSBjb250YWluZXIuIFNvLCBkb24ndCBzcGVjaWZ5IGxlc3MgdGhhbiA2IE1pQiBvZiBtZW1vcnkgZm9yIHlvdXIgY29udGFpbmVycy4gXG4gKiAgVGhlIERvY2tlciAxOS4wMy4xMy1jZSBvciBlYXJsaWVyIGRhZW1vbiByZXNlcnZlcyBhIG1pbmltdW0gb2YgNCBNaUIgb2YgbWVtb3J5IGZvciBhIGNvbnRhaW5lci4gU28sIGRvbid0IHNwZWNpZnkgbGVzcyB0aGFuIDQgTWlCIG9mIG1lbW9yeSBmb3IgeW91ciBjb250YWluZXJzLlxuICovXG5NZW1vcnlSZXNlcnZhdGlvbj86IG51bWJlclxuUmVwb3NpdG9yeUNyZWRlbnRpYWxzPzogUmVwb3NpdG9yeUNyZWRlbnRpYWxzXG4vKipcbiAqIEEgbGlzdCBvZiBob3N0bmFtZXMgYW5kIElQIGFkZHJlc3MgbWFwcGluZ3MgdG8gYXBwZW5kIHRvIHRoZSBgYC9ldGMvaG9zdHNgYCBmaWxlIG9uIHRoZSBjb250YWluZXIuIFRoaXMgcGFyYW1ldGVyIG1hcHMgdG8gYGBFeHRyYUhvc3RzYGAgaW4gdGhlIGRvY2tlciBjb250YWluZXIgY3JlYXRlIGNvbW1hbmQgYW5kIHRoZSBgYC0tYWRkLWhvc3RgYCBvcHRpb24gdG8gZG9ja2VyIHJ1bi5cbiAqICAgVGhpcyBwYXJhbWV0ZXIgaXNuJ3Qgc3VwcG9ydGVkIGZvciBXaW5kb3dzIGNvbnRhaW5lcnMgb3IgdGFza3MgdGhhdCB1c2UgdGhlIGBgYXdzdnBjYGAgbmV0d29yayBtb2RlLlxuICovXG5FeHRyYUhvc3RzPzogSG9zdEVudHJ5W11cbi8qKlxuICogVGhlIGhvc3RuYW1lIHRvIHVzZSBmb3IgeW91ciBjb250YWluZXIuIFRoaXMgcGFyYW1ldGVyIG1hcHMgdG8gYGBIb3N0bmFtZWBgIGluIHRoZSBkb2NrZXIgY29udGFpbmVyIGNyZWF0ZSBjb21tYW5kIGFuZCB0aGUgYGAtLWhvc3RuYW1lYGAgb3B0aW9uIHRvIGRvY2tlciBydW4uXG4gKiAgIFRoZSBgYGhvc3RuYW1lYGAgcGFyYW1ldGVyIGlzIG5vdCBzdXBwb3J0ZWQgaWYgeW91J3JlIHVzaW5nIHRoZSBgYGF3c3ZwY2BgIG5ldHdvcmsgbW9kZS5cbiAqL1xuSG9zdG5hbWU/OiBzdHJpbmdcbkxpbnV4UGFyYW1ldGVycz86IExpbnV4UGFyYW1ldGVyc1xuLyoqXG4gKiBTcGVjaWZpZXMgd2hldGhlciBBbWF6b24gRUNTIHdpbGwgcmVzb2x2ZSB0aGUgY29udGFpbmVyIGltYWdlIHRhZyBwcm92aWRlZCBpbiB0aGUgY29udGFpbmVyIGRlZmluaXRpb24gdG8gYW4gaW1hZ2UgZGlnZXN0LiBCeSBkZWZhdWx0LCB0aGUgdmFsdWUgaXMgYGBlbmFibGVkYGAuIElmIHlvdSBzZXQgdGhlIHZhbHVlIGZvciBhIGNvbnRhaW5lciBhcyBgYGRpc2FibGVkYGAsIEFtYXpvbiBFQ1Mgd2lsbCBub3QgcmVzb2x2ZSB0aGUgcHJvdmlkZWQgY29udGFpbmVyIGltYWdlIHRhZyB0byBhIGRpZ2VzdCBhbmQgd2lsbCB1c2UgdGhlIG9yaWdpbmFsIGltYWdlIFVSSSBzcGVjaWZpZWQgaW4gdGhlIGNvbnRhaW5lciBkZWZpbml0aW9uIGZvciBkZXBsb3ltZW50LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBjb250YWluZXIgaW1hZ2UgcmVzb2x1dGlvbiwgc2VlIFtDb250YWluZXIgaW1hZ2UgcmVzb2x1dGlvbl0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvZGVwbG95bWVudC10eXBlLWVjcy5odG1sI2RlcGxveW1lbnQtY29udGFpbmVyLWltYWdlLXN0YWJpbGl0eSkgaW4gdGhlICpBbWF6b24gRUNTIERldmVsb3BlciBHdWlkZSouXG4gKi9cblZlcnNpb25Db25zaXN0ZW5jeT86IChcImVuYWJsZWRcIiB8IFwiZGlzYWJsZWRcIilcblJlc3RhcnRQb2xpY3k/OiBSZXN0YXJ0UG9saWN5XG4vKipcbiAqIFdoZW4gdGhpcyBwYXJhbWV0ZXIgaXMgdHJ1ZSwgbmV0d29ya2luZyBpcyBvZmYgd2l0aGluIHRoZSBjb250YWluZXIuIFRoaXMgcGFyYW1ldGVyIG1hcHMgdG8gYGBOZXR3b3JrRGlzYWJsZWRgYCBpbiB0aGUgZG9ja2VyIGNvbnRhaW5lciBjcmVhdGUgY29tbWFuZC5cbiAqICAgVGhpcyBwYXJhbWV0ZXIgaXMgbm90IHN1cHBvcnRlZCBmb3IgV2luZG93cyBjb250YWluZXJzLlxuICovXG5EaXNhYmxlTmV0d29ya2luZz86IGJvb2xlYW5cbi8qKlxuICogV2hlbiB0aGlzIHBhcmFtZXRlciBpcyBgYHRydWVgYCwgYSBUVFkgaXMgYWxsb2NhdGVkLiBUaGlzIHBhcmFtZXRlciBtYXBzIHRvIGBgVHR5YGAgaW4gdGhlIGRvY2tlciBjb250YWluZXIgY3JlYXRlIGNvbW1hbmQgYW5kIHRoZSBgYC0tdHR5YGAgb3B0aW9uIHRvIGRvY2tlciBydW4uXG4gKi9cblBzZXVkb1Rlcm1pbmFsPzogYm9vbGVhblxuLyoqXG4gKiBUaGUgbW91bnQgcG9pbnRzIGZvciBkYXRhIHZvbHVtZXMgaW4geW91ciBjb250YWluZXIuXG4gKiAgVGhpcyBwYXJhbWV0ZXIgbWFwcyB0byBgYFZvbHVtZXNgYCBpbiB0aGUgZG9ja2VyIGNvbnRhaW5lciBjcmVhdGUgY29tbWFuZCBhbmQgdGhlIGBgLS12b2x1bWVgYCBvcHRpb24gdG8gZG9ja2VyIHJ1bi5cbiAqICBXaW5kb3dzIGNvbnRhaW5lcnMgY2FuIG1vdW50IHdob2xlIGRpcmVjdG9yaWVzIG9uIHRoZSBzYW1lIGRyaXZlIGFzIGBgJGVudjpQcm9ncmFtRGF0YWBgLiBXaW5kb3dzIGNvbnRhaW5lcnMgY2FuJ3QgbW91bnQgZGlyZWN0b3JpZXMgb24gYSBkaWZmZXJlbnQgZHJpdmUsIGFuZCBtb3VudCBwb2ludCBjYW4ndCBiZSBhY3Jvc3MgZHJpdmVzLlxuICovXG5Nb3VudFBvaW50cz86IE1vdW50UG9pbnRbXVxuLyoqXG4gKiBUaGUgZGVwZW5kZW5jaWVzIGRlZmluZWQgZm9yIGNvbnRhaW5lciBzdGFydHVwIGFuZCBzaHV0ZG93bi4gQSBjb250YWluZXIgY2FuIGNvbnRhaW4gbXVsdGlwbGUgZGVwZW5kZW5jaWVzLiBXaGVuIGEgZGVwZW5kZW5jeSBpcyBkZWZpbmVkIGZvciBjb250YWluZXIgc3RhcnR1cCwgZm9yIGNvbnRhaW5lciBzaHV0ZG93biBpdCBpcyByZXZlcnNlZC5cbiAqICBGb3IgdGFza3MgdXNpbmcgdGhlIEVDMiBsYXVuY2ggdHlwZSwgdGhlIGNvbnRhaW5lciBpbnN0YW5jZXMgcmVxdWlyZSBhdCBsZWFzdCB2ZXJzaW9uIDEuMjYuMCBvZiB0aGUgY29udGFpbmVyIGFnZW50IHRvIHR1cm4gb24gY29udGFpbmVyIGRlcGVuZGVuY2llcy4gSG93ZXZlciwgd2UgcmVjb21tZW5kIHVzaW5nIHRoZSBsYXRlc3QgY29udGFpbmVyIGFnZW50IHZlcnNpb24uIEZvciBpbmZvcm1hdGlvbiBhYm91dCBjaGVja2luZyB5b3VyIGFnZW50IHZlcnNpb24gYW5kIHVwZGF0aW5nIHRvIHRoZSBsYXRlc3QgdmVyc2lvbiwgc2VlIFtVcGRhdGluZyB0aGUgQW1hem9uIEVDUyBDb250YWluZXIgQWdlbnRdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2Vjcy1hZ2VudC11cGRhdGUuaHRtbCkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLiBJZiB5b3UncmUgdXNpbmcgYW4gQW1hem9uIEVDUy1vcHRpbWl6ZWQgTGludXggQU1JLCB5b3VyIGluc3RhbmNlIG5lZWRzIGF0IGxlYXN0IHZlcnNpb24gMS4yNi4wLTEgb2YgdGhlIGBgZWNzLWluaXRgYCBwYWNrYWdlLiBJZiB5b3VyIGNvbnRhaW5lciBpbnN0YW5jZXMgYXJlIGxhdW5jaGVkIGZyb20gdmVyc2lvbiBgYDIwMTkwMzAxYGAgb3IgbGF0ZXIsIHRoZW4gdGhleSBjb250YWluIHRoZSByZXF1aXJlZCB2ZXJzaW9ucyBvZiB0aGUgY29udGFpbmVyIGFnZW50IGFuZCBgYGVjcy1pbml0YGAuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0FtYXpvbiBFQ1Mtb3B0aW1pemVkIExpbnV4IEFNSV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvZWNzLW9wdGltaXplZF9BTUkuaHRtbCkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLlxuICogIEZvciB0YXNrcyB1c2luZyB0aGUgRmFyZ2F0ZSBsYXVuY2ggdHlwZSwgdGhlIHRhc2sgb3Igc2VydmljZSByZXF1aXJlcyB0aGUgZm9sbG93aW5nIHBsYXRmb3JtczpcbiAqICAgKyAgTGludXggcGxhdGZvcm0gdmVyc2lvbiBgYDEuMy4wYGAgb3IgbGF0ZXIuXG4gKiAgICsgIFdpbmRvd3MgcGxhdGZvcm0gdmVyc2lvbiBgYDEuMC4wYGAgb3IgbGF0ZXIuXG4gKiAgIFxuICogIElmIHRoZSB0YXNrIGRlZmluaXRpb24gaXMgdXNlZCBpbiBhIGJsdWUvZ3JlZW4gZGVwbG95bWVudCB0aGF0IHVzZXMgW0FXUzo6Q29kZURlcGxveTo6RGVwbG95bWVudEdyb3VwIEJsdWVHcmVlbkRlcGxveW1lbnRDb25maWd1cmF0aW9uXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcHJvcGVydGllcy1jb2RlZGVwbG95LWRlcGxveW1lbnRncm91cC1ibHVlZ3JlZW5kZXBsb3ltZW50Y29uZmlndXJhdGlvbi5odG1sKSwgdGhlIGBgZGVwZW5kc09uYGAgcGFyYW1ldGVyIGlzIG5vdCBzdXBwb3J0ZWQuXG4gKi9cbkRlcGVuZHNPbj86IENvbnRhaW5lckRlcGVuZGVuY3lbXVxuLyoqXG4gKiBBIGtleS92YWx1ZSBtYXAgb2YgbGFiZWxzIHRvIGFkZCB0byB0aGUgY29udGFpbmVyLiBUaGlzIHBhcmFtZXRlciBtYXBzIHRvIGBgTGFiZWxzYGAgaW4gdGhlIGRvY2tlciBjb250YWluZXIgY3JlYXRlIGNvbW1hbmQgYW5kIHRoZSBgYC0tbGFiZWxgYCBvcHRpb24gdG8gZG9ja2VyIHJ1bi4gVGhpcyBwYXJhbWV0ZXIgcmVxdWlyZXMgdmVyc2lvbiAxLjE4IG9mIHRoZSBEb2NrZXIgUmVtb3RlIEFQSSBvciBncmVhdGVyIG9uIHlvdXIgY29udGFpbmVyIGluc3RhbmNlLiBUbyBjaGVjayB0aGUgRG9ja2VyIFJlbW90ZSBBUEkgdmVyc2lvbiBvbiB5b3VyIGNvbnRhaW5lciBpbnN0YW5jZSwgbG9nIGluIHRvIHlvdXIgY29udGFpbmVyIGluc3RhbmNlIGFuZCBydW4gdGhlIGZvbGxvd2luZyBjb21tYW5kOiBgYHN1ZG8gZG9ja2VyIHZlcnNpb24gLS1mb3JtYXQgJ3t7LlNlcnZlci5BUElWZXJzaW9ufX0nYGBcbiAqL1xuRG9ja2VyTGFiZWxzPzoge1xuLyoqXG4gKiBUaGlzIGludGVyZmFjZSB3YXMgcmVmZXJlbmNlZCBieSBgdW5kZWZpbmVkYCdzIEpTT04tU2NoZW1hIGRlZmluaXRpb25cbiAqIHZpYSB0aGUgYHBhdHRlcm5Qcm9wZXJ0eWAgXCIuezEsfVwiLlxuICovXG5bazogc3RyaW5nXTogc3RyaW5nXG59XG4vKipcbiAqIFRoZSBsaXN0IG9mIHBvcnQgbWFwcGluZ3MgZm9yIHRoZSBjb250YWluZXIuIFBvcnQgbWFwcGluZ3MgYWxsb3cgY29udGFpbmVycyB0byBhY2Nlc3MgcG9ydHMgb24gdGhlIGhvc3QgY29udGFpbmVyIGluc3RhbmNlIHRvIHNlbmQgb3IgcmVjZWl2ZSB0cmFmZmljLlxuICogIEZvciB0YXNrIGRlZmluaXRpb25zIHRoYXQgdXNlIHRoZSBgYGF3c3ZwY2BgIG5ldHdvcmsgbW9kZSwgeW91IHNob3VsZCBvbmx5IHNwZWNpZnkgdGhlIGBgY29udGFpbmVyUG9ydGBgLiBUaGUgYGBob3N0UG9ydGBgIGNhbiBiZSBsZWZ0IGJsYW5rIG9yIGl0IG11c3QgYmUgdGhlIHNhbWUgdmFsdWUgYXMgdGhlIGBgY29udGFpbmVyUG9ydGBgLlxuICogIFBvcnQgbWFwcGluZ3Mgb24gV2luZG93cyB1c2UgdGhlIGBgTmV0TkFUYGAgZ2F0ZXdheSBhZGRyZXNzIHJhdGhlciB0aGFuIGBgbG9jYWxob3N0YGAuIFRoZXJlIGlzIG5vIGxvb3BiYWNrIGZvciBwb3J0IG1hcHBpbmdzIG9uIFdpbmRvd3MsIHNvIHlvdSBjYW5ub3QgYWNjZXNzIGEgY29udGFpbmVyJ3MgbWFwcGVkIHBvcnQgZnJvbSB0aGUgaG9zdCBpdHNlbGYuIFxuICogIFRoaXMgcGFyYW1ldGVyIG1hcHMgdG8gYGBQb3J0QmluZGluZ3NgYCBpbiB0aGUgW0NyZWF0ZSBhIGNvbnRhaW5lcl0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2h0dHBzOi8vZG9jcy5kb2NrZXIuY29tL2VuZ2luZS9hcGkvdjEuMzUvI29wZXJhdGlvbi9Db250YWluZXJDcmVhdGUpIHNlY3Rpb24gb2YgdGhlIFtEb2NrZXIgUmVtb3RlIEFQSV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2h0dHBzOi8vZG9jcy5kb2NrZXIuY29tL2VuZ2luZS9hcGkvdjEuMzUvKSBhbmQgdGhlIGBgLS1wdWJsaXNoYGAgb3B0aW9uIHRvIFtkb2NrZXIgcnVuXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vaHR0cHM6Ly9kb2NzLmRvY2tlci5jb20vZW5naW5lL3JlZmVyZW5jZS9ydW4vKS4gSWYgdGhlIG5ldHdvcmsgbW9kZSBvZiBhIHRhc2sgZGVmaW5pdGlvbiBpcyBzZXQgdG8gYGBub25lYGAsIHRoZW4geW91IGNhbid0IHNwZWNpZnkgcG9ydCBtYXBwaW5ncy4gSWYgdGhlIG5ldHdvcmsgbW9kZSBvZiBhIHRhc2sgZGVmaW5pdGlvbiBpcyBzZXQgdG8gYGBob3N0YGAsIHRoZW4gaG9zdCBwb3J0cyBtdXN0IGVpdGhlciBiZSB1bmRlZmluZWQgb3IgdGhleSBtdXN0IG1hdGNoIHRoZSBjb250YWluZXIgcG9ydCBpbiB0aGUgcG9ydCBtYXBwaW5nLlxuICogICBBZnRlciBhIHRhc2sgcmVhY2hlcyB0aGUgYGBSVU5OSU5HYGAgc3RhdHVzLCBtYW51YWwgYW5kIGF1dG9tYXRpYyBob3N0IGFuZCBjb250YWluZXIgcG9ydCBhc3NpZ25tZW50cyBhcmUgdmlzaWJsZSBpbiB0aGUgKk5ldHdvcmsgQmluZGluZ3MqIHNlY3Rpb24gb2YgYSBjb250YWluZXIgZGVzY3JpcHRpb24gZm9yIGEgc2VsZWN0ZWQgdGFzayBpbiB0aGUgQW1hem9uIEVDUyBjb25zb2xlLiBUaGUgYXNzaWdubWVudHMgYXJlIGFsc28gdmlzaWJsZSBpbiB0aGUgYGBuZXR3b3JrQmluZGluZ3NgYCBzZWN0aW9uIFtEZXNjcmliZVRhc2tzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0Rlc2NyaWJlVGFza3MuaHRtbCkgcmVzcG9uc2VzLlxuICovXG5Qb3J0TWFwcGluZ3M/OiBQb3J0TWFwcGluZ1tdXG4vKipcbiAqIFRoZSBjb21tYW5kIHRoYXQncyBwYXNzZWQgdG8gdGhlIGNvbnRhaW5lci4gVGhpcyBwYXJhbWV0ZXIgbWFwcyB0byBgYENtZGBgIGluIHRoZSBkb2NrZXIgY29udGFpbmVyIGNyZWF0ZSBjb21tYW5kIGFuZCB0aGUgYGBDT01NQU5EYGAgcGFyYW1ldGVyIHRvIGRvY2tlciBydW4uIElmIHRoZXJlIGFyZSBtdWx0aXBsZSBhcmd1bWVudHMsIGVhY2ggYXJndW1lbnQgaXMgYSBzZXBhcmF0ZWQgc3RyaW5nIGluIHRoZSBhcnJheS5cbiAqL1xuQ29tbWFuZD86IHN0cmluZ1tdXG4vKipcbiAqIFRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgdG8gcGFzcyB0byBhIGNvbnRhaW5lci4gVGhpcyBwYXJhbWV0ZXIgbWFwcyB0byBgYEVudmBgIGluIHRoZSBkb2NrZXIgY29udGFpbmVyIGNyZWF0ZSBjb21tYW5kIGFuZCB0aGUgYGAtLWVudmBgIG9wdGlvbiB0byBkb2NrZXIgcnVuLlxuICogICBXZSBkb24ndCByZWNvbW1lbmQgdGhhdCB5b3UgdXNlIHBsYWludGV4dCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZm9yIHNlbnNpdGl2ZSBpbmZvcm1hdGlvbiwgc3VjaCBhcyBjcmVkZW50aWFsIGRhdGEuXG4gKi9cbkVudmlyb25tZW50PzogS2V5VmFsdWVQYWlyW11cbi8qKlxuICogVGhlIGBgbGlua3NgYCBwYXJhbWV0ZXIgYWxsb3dzIGNvbnRhaW5lcnMgdG8gY29tbXVuaWNhdGUgd2l0aCBlYWNoIG90aGVyIHdpdGhvdXQgdGhlIG5lZWQgZm9yIHBvcnQgbWFwcGluZ3MuIFRoaXMgcGFyYW1ldGVyIGlzIG9ubHkgc3VwcG9ydGVkIGlmIHRoZSBuZXR3b3JrIG1vZGUgb2YgYSB0YXNrIGRlZmluaXRpb24gaXMgYGBicmlkZ2VgYC4gVGhlIGBgbmFtZTppbnRlcm5hbE5hbWVgYCBjb25zdHJ1Y3QgaXMgYW5hbG9nb3VzIHRvIGBgbmFtZTphbGlhc2BgIGluIERvY2tlciBsaW5rcy4gVXAgdG8gMjU1IGxldHRlcnMgKHVwcGVyY2FzZSBhbmQgbG93ZXJjYXNlKSwgbnVtYmVycywgdW5kZXJzY29yZXMsIGFuZCBoeXBoZW5zIGFyZSBhbGxvd2VkLi4gVGhpcyBwYXJhbWV0ZXIgbWFwcyB0byBgYExpbmtzYGAgaW4gdGhlIGRvY2tlciBjb250YWluZXIgY3JlYXRlIGNvbW1hbmQgYW5kIHRoZSBgYC0tbGlua2BgIG9wdGlvbiB0byBkb2NrZXIgcnVuLlxuICogICBUaGlzIHBhcmFtZXRlciBpcyBub3Qgc3VwcG9ydGVkIGZvciBXaW5kb3dzIGNvbnRhaW5lcnMuXG4gKiAgICBDb250YWluZXJzIHRoYXQgYXJlIGNvbGxvY2F0ZWQgb24gYSBzaW5nbGUgY29udGFpbmVyIGluc3RhbmNlIG1heSBiZSBhYmxlIHRvIGNvbW11bmljYXRlIHdpdGggZWFjaCBvdGhlciB3aXRob3V0IHJlcXVpcmluZyBsaW5rcyBvciBob3N0IHBvcnQgbWFwcGluZ3MuIE5ldHdvcmsgaXNvbGF0aW9uIGlzIGFjaGlldmVkIG9uIHRoZSBjb250YWluZXIgaW5zdGFuY2UgdXNpbmcgc2VjdXJpdHkgZ3JvdXBzIGFuZCBWUEMgc2V0dGluZ3MuXG4gKi9cbkxpbmtzPzogc3RyaW5nW11cbn1cbi8qKlxuICogQW4gb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgc2VjcmV0IHRvIGV4cG9zZSB0byB5b3VyIGNvbnRhaW5lci4gU2VjcmV0cyBjYW4gYmUgZXhwb3NlZCB0byBhIGNvbnRhaW5lciBpbiB0aGUgZm9sbG93aW5nIHdheXM6XG4gKiAgICsgIFRvIGluamVjdCBzZW5zaXRpdmUgZGF0YSBpbnRvIHlvdXIgY29udGFpbmVycyBhcyBlbnZpcm9ubWVudCB2YXJpYWJsZXMsIHVzZSB0aGUgYGBzZWNyZXRzYGAgY29udGFpbmVyIGRlZmluaXRpb24gcGFyYW1ldGVyLlxuICogICArICBUbyByZWZlcmVuY2Ugc2Vuc2l0aXZlIGluZm9ybWF0aW9uIGluIHRoZSBsb2cgY29uZmlndXJhdGlvbiBvZiBhIGNvbnRhaW5lciwgdXNlIHRoZSBgYHNlY3JldE9wdGlvbnNgYCBjb250YWluZXIgZGVmaW5pdGlvbiBwYXJhbWV0ZXIuXG4gKiAgIFxuICogIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1NwZWNpZnlpbmcgc2Vuc2l0aXZlIGRhdGFdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3NwZWNpZnlpbmctc2Vuc2l0aXZlLWRhdGEuaHRtbCkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlY3JldCB7XG4vKipcbiAqIFRoZSBzZWNyZXQgdG8gZXhwb3NlIHRvIHRoZSBjb250YWluZXIuIFRoZSBzdXBwb3J0ZWQgdmFsdWVzIGFyZSBlaXRoZXIgdGhlIGZ1bGwgQVJOIG9mIHRoZSBBU01sb25nIHNlY3JldCBvciB0aGUgZnVsbCBBUk4gb2YgdGhlIHBhcmFtZXRlciBpbiB0aGUgU1NNIFBhcmFtZXRlciBTdG9yZS5cbiAqICBGb3IgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHJlcXVpcmUgSUFNbG9uZyBwZXJtaXNzaW9ucywgc2VlIFtSZXF1aXJlZCBJQU0gcGVybWlzc2lvbnMgZm9yIEFtYXpvbiBFQ1Mgc2VjcmV0c10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvc3BlY2lmeWluZy1zZW5zaXRpdmUtZGF0YS1zZWNyZXRzLmh0bWwjc2VjcmV0cy1pYW0pIChmb3IgU2VjcmV0cyBNYW5hZ2VyKSBvciBbUmVxdWlyZWQgSUFNIHBlcm1pc3Npb25zIGZvciBBbWF6b24gRUNTIHNlY3JldHNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3NwZWNpZnlpbmctc2Vuc2l0aXZlLWRhdGEtcGFyYW1ldGVycy5odG1sKSAoZm9yIFN5c3RlbXMgTWFuYWdlciBQYXJhbWV0ZXIgc3RvcmUpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqICAgSWYgdGhlIFNTTSBQYXJhbWV0ZXIgU3RvcmUgcGFyYW1ldGVyIGV4aXN0cyBpbiB0aGUgc2FtZSBSZWdpb24gYXMgdGhlIHRhc2sgeW91J3JlIGxhdW5jaGluZywgdGhlbiB5b3UgY2FuIHVzZSBlaXRoZXIgdGhlIGZ1bGwgQVJOIG9yIG5hbWUgb2YgdGhlIHBhcmFtZXRlci4gSWYgdGhlIHBhcmFtZXRlciBleGlzdHMgaW4gYSBkaWZmZXJlbnQgUmVnaW9uLCB0aGVuIHRoZSBmdWxsIEFSTiBtdXN0IGJlIHNwZWNpZmllZC5cbiAqL1xuVmFsdWVGcm9tOiBzdHJpbmdcbi8qKlxuICogVGhlIG5hbWUgb2YgdGhlIHNlY3JldC5cbiAqL1xuTmFtZTogc3RyaW5nXG59XG4vKipcbiAqIFRoZSBjb250YWluZXIgaGVhbHRoIGNoZWNrIGNvbW1hbmQgYW5kIGFzc29jaWF0ZWQgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIGZvciB0aGUgY29udGFpbmVyLiBUaGlzIHBhcmFtZXRlciBtYXBzIHRvIGBgSGVhbHRoQ2hlY2tgYCBpbiB0aGUgZG9ja2VyIGNvbnRhaW5lciBjcmVhdGUgY29tbWFuZCBhbmQgdGhlIGBgSEVBTFRIQ0hFQ0tgYCBwYXJhbWV0ZXIgb2YgZG9ja2VyIHJ1bi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBIZWFsdGhDaGVjayB7XG4vKipcbiAqIEEgc3RyaW5nIGFycmF5IHJlcHJlc2VudGluZyB0aGUgY29tbWFuZCB0aGF0IHRoZSBjb250YWluZXIgcnVucyB0byBkZXRlcm1pbmUgaWYgaXQgaXMgaGVhbHRoeS4gVGhlIHN0cmluZyBhcnJheSBtdXN0IHN0YXJ0IHdpdGggYGBDTURgYCB0byBydW4gdGhlIGNvbW1hbmQgYXJndW1lbnRzIGRpcmVjdGx5LCBvciBgYENNRC1TSEVMTGBgIHRvIHJ1biB0aGUgY29tbWFuZCB3aXRoIHRoZSBjb250YWluZXIncyBkZWZhdWx0IHNoZWxsLiBcbiAqICAgV2hlbiB5b3UgdXNlIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlIEpTT04gcGFuZWwsIHRoZSBDTElsb25nLCBvciB0aGUgQVBJcywgZW5jbG9zZSB0aGUgbGlzdCBvZiBjb21tYW5kcyBpbiBkb3VibGUgcXVvdGVzIGFuZCBicmFja2V0cy5cbiAqICAgYGBbIFwiQ01ELVNIRUxMXCIsIFwiY3VybCAtZiBodHRwOi8vbG9jYWxob3N0LyB8fCBleGl0IDFcIiBdYGAgXG4gKiAgWW91IGRvbid0IGluY2x1ZGUgdGhlIGRvdWJsZSBxdW90ZXMgYW5kIGJyYWNrZXRzIHdoZW4geW91IHVzZSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZS5cbiAqICAgYGBDTUQtU0hFTEwsIGN1cmwgLWYgaHR0cDovL2xvY2FsaG9zdC8gfHwgZXhpdCAxYGAgXG4gKiAgQW4gZXhpdCBjb2RlIG9mIDAgaW5kaWNhdGVzIHN1Y2Nlc3MsIGFuZCBub24temVybyBleGl0IGNvZGUgaW5kaWNhdGVzIGZhaWx1cmUuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgYGBIZWFsdGhDaGVja2BgIGluIHRoZSBkb2NrZXIgY29udGFpbmVyIGNyZWF0ZSBjb21tYW5kLlxuICovXG5Db21tYW5kPzogc3RyaW5nW11cbi8qKlxuICogVGhlIHRpbWUgcGVyaW9kIGluIHNlY29uZHMgdG8gd2FpdCBmb3IgYSBoZWFsdGggY2hlY2sgdG8gc3VjY2VlZCBiZWZvcmUgaXQgaXMgY29uc2lkZXJlZCBhIGZhaWx1cmUuIFlvdSBtYXkgc3BlY2lmeSBiZXR3ZWVuIDIgYW5kIDYwIHNlY29uZHMuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDUuIFRoaXMgdmFsdWUgYXBwbGllcyBvbmx5IHdoZW4geW91IHNwZWNpZnkgYSBgYGNvbW1hbmRgYC5cbiAqL1xuVGltZW91dD86IG51bWJlclxuLyoqXG4gKiBUaGUgbnVtYmVyIG9mIHRpbWVzIHRvIHJldHJ5IGEgZmFpbGVkIGhlYWx0aCBjaGVjayBiZWZvcmUgdGhlIGNvbnRhaW5lciBpcyBjb25zaWRlcmVkIHVuaGVhbHRoeS4gWW91IG1heSBzcGVjaWZ5IGJldHdlZW4gMSBhbmQgMTAgcmV0cmllcy4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgMy4gVGhpcyB2YWx1ZSBhcHBsaWVzIG9ubHkgd2hlbiB5b3Ugc3BlY2lmeSBhIGBgY29tbWFuZGBgLlxuICovXG5SZXRyaWVzPzogbnVtYmVyXG4vKipcbiAqIFRoZSB0aW1lIHBlcmlvZCBpbiBzZWNvbmRzIGJldHdlZW4gZWFjaCBoZWFsdGggY2hlY2sgZXhlY3V0aW9uLiBZb3UgbWF5IHNwZWNpZnkgYmV0d2VlbiA1IGFuZCAzMDAgc2Vjb25kcy4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgMzAgc2Vjb25kcy4gVGhpcyB2YWx1ZSBhcHBsaWVzIG9ubHkgd2hlbiB5b3Ugc3BlY2lmeSBhIGBgY29tbWFuZGBgLlxuICovXG5JbnRlcnZhbD86IG51bWJlclxuLyoqXG4gKiBUaGUgb3B0aW9uYWwgZ3JhY2UgcGVyaW9kIHRvIHByb3ZpZGUgY29udGFpbmVycyB0aW1lIHRvIGJvb3RzdHJhcCBiZWZvcmUgZmFpbGVkIGhlYWx0aCBjaGVja3MgY291bnQgdG93YXJkcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgcmV0cmllcy4gWW91IGNhbiBzcGVjaWZ5IGJldHdlZW4gMCBhbmQgMzAwIHNlY29uZHMuIEJ5IGRlZmF1bHQsIHRoZSBgYHN0YXJ0UGVyaW9kYGAgaXMgb2ZmLiBUaGlzIHZhbHVlIGFwcGxpZXMgb25seSB3aGVuIHlvdSBzcGVjaWZ5IGEgYGBjb21tYW5kYGAuIFxuICogICBJZiBhIGhlYWx0aCBjaGVjayBzdWNjZWVkcyB3aXRoaW4gdGhlIGBgc3RhcnRQZXJpb2RgYCwgdGhlbiB0aGUgY29udGFpbmVyIGlzIGNvbnNpZGVyZWQgaGVhbHRoeSBhbmQgYW55IHN1YnNlcXVlbnQgZmFpbHVyZXMgY291bnQgdG93YXJkIHRoZSBtYXhpbXVtIG51bWJlciBvZiByZXRyaWVzLlxuICovXG5TdGFydFBlcmlvZD86IG51bWJlclxufVxuLyoqXG4gKiBEZXRhaWxzIG9uIGEgZGF0YSB2b2x1bWUgZnJvbSBhbm90aGVyIGNvbnRhaW5lciBpbiB0aGUgc2FtZSB0YXNrIGRlZmluaXRpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVm9sdW1lRnJvbSB7XG4vKipcbiAqIElmIHRoaXMgdmFsdWUgaXMgYGB0cnVlYGAsIHRoZSBjb250YWluZXIgaGFzIHJlYWQtb25seSBhY2Nlc3MgdG8gdGhlIHZvbHVtZS4gSWYgdGhpcyB2YWx1ZSBpcyBgYGZhbHNlYGAsIHRoZW4gdGhlIGNvbnRhaW5lciBjYW4gd3JpdGUgdG8gdGhlIHZvbHVtZS4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgYGBmYWxzZWBgLlxuICovXG5SZWFkT25seT86IGJvb2xlYW5cbi8qKlxuICogVGhlIG5hbWUgb2YgYW5vdGhlciBjb250YWluZXIgd2l0aGluIHRoZSBzYW1lIHRhc2sgZGVmaW5pdGlvbiB0byBtb3VudCB2b2x1bWVzIGZyb20uXG4gKi9cblNvdXJjZUNvbnRhaW5lcj86IHN0cmluZ1xufVxuLyoqXG4gKiBUaGUgbG9nIGNvbmZpZ3VyYXRpb24gc3BlY2lmaWNhdGlvbiBmb3IgdGhlIGNvbnRhaW5lci5cbiAqICBUaGlzIHBhcmFtZXRlciBtYXBzIHRvIGBgTG9nQ29uZmlnYGAgaW4gdGhlIGRvY2tlciBDcmVhdGUgYSBjb250YWluZXIgY29tbWFuZCBhbmQgdGhlIGBgLS1sb2ctZHJpdmVyYGAgb3B0aW9uIHRvIGRvY2tlciBydW4uIEJ5IGRlZmF1bHQsIGNvbnRhaW5lcnMgdXNlIHRoZSBzYW1lIGxvZ2dpbmcgZHJpdmVyIHRoYXQgdGhlIERvY2tlciBkYWVtb24gdXNlcy4gSG93ZXZlciwgdGhlIGNvbnRhaW5lciBtYXkgdXNlIGEgZGlmZmVyZW50IGxvZ2dpbmcgZHJpdmVyIHRoYW4gdGhlIERvY2tlciBkYWVtb24gYnkgc3BlY2lmeWluZyBhIGxvZyBkcml2ZXIgd2l0aCB0aGlzIHBhcmFtZXRlciBpbiB0aGUgY29udGFpbmVyIGRlZmluaXRpb24uIFRvIHVzZSBhIGRpZmZlcmVudCBsb2dnaW5nIGRyaXZlciBmb3IgYSBjb250YWluZXIsIHRoZSBsb2cgc3lzdGVtIG11c3QgYmUgY29uZmlndXJlZCBwcm9wZXJseSBvbiB0aGUgY29udGFpbmVyIGluc3RhbmNlIChvciBvbiBhIGRpZmZlcmVudCBsb2cgc2VydmVyIGZvciByZW1vdGUgbG9nZ2luZyBvcHRpb25zKS4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIG9wdGlvbnMgZm9yIGRpZmZlcmVudCBzdXBwb3J0ZWQgbG9nIGRyaXZlcnMsIHNlZSBbQ29uZmlndXJlIGxvZ2dpbmcgZHJpdmVyc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2h0dHBzOi8vZG9jcy5kb2NrZXIuY29tL2VuZ2luZS9hZG1pbi9sb2dnaW5nL292ZXJ2aWV3LykgaW4gdGhlIERvY2tlciBkb2N1bWVudGF0aW9uLlxuICogICBBbWF6b24gRUNTIGN1cnJlbnRseSBzdXBwb3J0cyBhIHN1YnNldCBvZiB0aGUgbG9nZ2luZyBkcml2ZXJzIGF2YWlsYWJsZSB0byB0aGUgRG9ja2VyIGRhZW1vbiAoc2hvd24gaW4gdGhlIFtMb2dDb25maWd1cmF0aW9uXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0xvZ0NvbmZpZ3VyYXRpb24uaHRtbCkgZGF0YSB0eXBlKS4gQWRkaXRpb25hbCBsb2cgZHJpdmVycyBtYXkgYmUgYXZhaWxhYmxlIGluIGZ1dHVyZSByZWxlYXNlcyBvZiB0aGUgQW1hem9uIEVDUyBjb250YWluZXIgYWdlbnQuXG4gKiAgIFRoaXMgcGFyYW1ldGVyIHJlcXVpcmVzIHZlcnNpb24gMS4xOCBvZiB0aGUgRG9ja2VyIFJlbW90ZSBBUEkgb3IgZ3JlYXRlciBvbiB5b3VyIGNvbnRhaW5lciBpbnN0YW5jZS4gVG8gY2hlY2sgdGhlIERvY2tlciBSZW1vdGUgQVBJIHZlcnNpb24gb24geW91ciBjb250YWluZXIgaW5zdGFuY2UsIGxvZyBpbiB0byB5b3VyIGNvbnRhaW5lciBpbnN0YW5jZSBhbmQgcnVuIHRoZSBmb2xsb3dpbmcgY29tbWFuZDogYGBzdWRvIGRvY2tlciB2ZXJzaW9uIC0tZm9ybWF0ICd7ey5TZXJ2ZXIuQVBJVmVyc2lvbn19J2BgXG4gKiAgIFRoZSBBbWF6b24gRUNTIGNvbnRhaW5lciBhZ2VudCBydW5uaW5nIG9uIGEgY29udGFpbmVyIGluc3RhbmNlIG11c3QgcmVnaXN0ZXIgdGhlIGxvZ2dpbmcgZHJpdmVycyBhdmFpbGFibGUgb24gdGhhdCBpbnN0YW5jZSB3aXRoIHRoZSBgYEVDU19BVkFJTEFCTEVfTE9HR0lOR19EUklWRVJTYGAgZW52aXJvbm1lbnQgdmFyaWFibGUgYmVmb3JlIGNvbnRhaW5lcnMgcGxhY2VkIG9uIHRoYXQgaW5zdGFuY2UgY2FuIHVzZSB0aGVzZSBsb2cgY29uZmlndXJhdGlvbiBvcHRpb25zLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtDb250YWluZXIgQWdlbnQgQ29uZmlndXJhdGlvbl0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvZWNzLWFnZW50LWNvbmZpZy5odG1sKSBpbiB0aGUgKkRldmVsb3BlciBHdWlkZSouXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTG9nQ29uZmlndXJhdGlvbiB7XG4vKipcbiAqIFRoZSBzZWNyZXRzIHRvIHBhc3MgdG8gdGhlIGxvZyBjb25maWd1cmF0aW9uLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtTcGVjaWZ5aW5nIHNlbnNpdGl2ZSBkYXRhXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9zcGVjaWZ5aW5nLXNlbnNpdGl2ZS1kYXRhLmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuU2VjcmV0T3B0aW9ucz86IFNlY3JldFtdXG4vKipcbiAqIFRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdG8gc2VuZCB0byB0aGUgbG9nIGRyaXZlci5cbiAqICBUaGUgb3B0aW9ucyB5b3UgY2FuIHNwZWNpZnkgZGVwZW5kIG9uIHRoZSBsb2cgZHJpdmVyLiBTb21lIG9mIHRoZSBvcHRpb25zIHlvdSBjYW4gc3BlY2lmeSB3aGVuIHlvdSB1c2UgdGhlIGBgYXdzbG9nc2BgIGxvZyBkcml2ZXIgdG8gcm91dGUgbG9ncyB0byBBbWF6b24gQ2xvdWRXYXRjaCBpbmNsdWRlIHRoZSBmb2xsb3dpbmc6XG4gKiAgICsgYXdzbG9ncy1jcmVhdGUtZ3JvdXAgUmVxdWlyZWQ6IE5vIFNwZWNpZnkgd2hldGhlciB5b3Ugd2FudCB0aGUgbG9nIGdyb3VwIHRvIGJlIGNyZWF0ZWQgYXV0b21hdGljYWxseS4gSWYgdGhpcyBvcHRpb24gaXNuJ3Qgc3BlY2lmaWVkLCBpdCBkZWZhdWx0cyB0byBmYWxzZS4gWW91ciBJQU0gcG9saWN5IG11c3QgaW5jbHVkZSB0aGUgbG9nczpDcmVhdGVMb2dHcm91cCBwZXJtaXNzaW9uIGJlZm9yZSB5b3UgYXR0ZW1wdCB0byB1c2UgYXdzbG9ncy1jcmVhdGUtZ3JvdXAuICsgYXdzbG9ncy1yZWdpb24gUmVxdWlyZWQ6IFllcyBTcGVjaWZ5IHRoZSBSZWdpb24gdGhhdCB0aGUgYXdzbG9ncyBsb2cgZHJpdmVyIGlzIHRvIHNlbmQgeW91ciBEb2NrZXIgbG9ncyB0by4gWW91IGNhbiBjaG9vc2UgdG8gc2VuZCBhbGwgb2YgeW91ciBsb2dzIGZyb20gY2x1c3RlcnMgaW4gZGlmZmVyZW50IFJlZ2lvbnMgdG8gYSBzaW5nbGUgcmVnaW9uIGluIENsb3VkV2F0Y2ggTG9ncy4gVGhpcyBpcyBzbyB0aGF0IHRoZXkncmUgYWxsIHZpc2libGUgaW4gb25lIGxvY2F0aW9uLiBPdGhlcndpc2UsIHlvdSBjYW4gc2VwYXJhdGUgdGhlbSBieSBSZWdpb24gZm9yIG1vcmUgZ3JhbnVsYXJpdHkuIE1ha2Ugc3VyZSB0aGF0IHRoZSBzcGVjaWZpZWQgbG9nIGdyb3VwIGV4aXN0cyBpbiB0aGUgUmVnaW9uIHRoYXQgeW91IHNwZWNpZnkgd2l0aCB0aGlzIG9wdGlvbi4gKyBhd3Nsb2dzLWdyb3VwIFJlcXVpcmVkOiBZZXMgTWFrZSBzdXJlIHRvIHNwZWNpZnkgYSBsb2cgZ3JvdXAgdGhhdCB0aGUgYXdzbG9ncyBsb2cgZHJpdmVyIHNlbmRzIGl0cyBsb2cgc3RyZWFtcyB0by4gKyBhd3Nsb2dzLXN0cmVhbS1wcmVmaXggUmVxdWlyZWQ6IFllcywgd2hlbiB1c2luZyBGYXJnYXRlLk9wdGlvbmFsIHdoZW4gdXNpbmcgRUMyLiBVc2UgdGhlIGF3c2xvZ3Mtc3RyZWFtLXByZWZpeCBvcHRpb24gdG8gYXNzb2NpYXRlIGEgbG9nIHN0cmVhbSB3aXRoIHRoZSBzcGVjaWZpZWQgcHJlZml4LCB0aGUgY29udGFpbmVyIG5hbWUsIGFuZCB0aGUgSUQgb2YgdGhlIEFtYXpvbiBFQ1MgdGFzayB0aGF0IHRoZSBjb250YWluZXIgYmVsb25ncyB0by4gSWYgeW91IHNwZWNpZnkgYSBwcmVmaXggd2l0aCB0aGlzIG9wdGlvbiwgdGhlbiB0aGUgbG9nIHN0cmVhbSB0YWtlcyB0aGUgZm9ybWF0IHByZWZpeC1uYW1lL2NvbnRhaW5lci1uYW1lL2Vjcy10YXNrLWlkLiBJZiB5b3UgZG9uJ3Qgc3BlY2lmeSBhIHByZWZpeCB3aXRoIHRoaXMgb3B0aW9uLCB0aGVuIHRoZSBsb2cgc3RyZWFtIGlzIG5hbWVkIGFmdGVyIHRoZSBjb250YWluZXIgSUQgdGhhdCdzIGFzc2lnbmVkIGJ5IHRoZSBEb2NrZXIgZGFlbW9uIG9uIHRoZSBjb250YWluZXIgaW5zdGFuY2UuIEJlY2F1c2UgaXQncyBkaWZmaWN1bHQgdG8gdHJhY2UgbG9ncyBiYWNrIHRvIHRoZSBjb250YWluZXIgdGhhdCBzZW50IHRoZW0gd2l0aCBqdXN0IHRoZSBEb2NrZXIgY29udGFpbmVyIElEICh3aGljaCBpcyBvbmx5IGF2YWlsYWJsZSBvbiB0aGUgY29udGFpbmVyIGluc3RhbmNlKSwgd2UgcmVjb21tZW5kIHRoYXQgeW91IHNwZWNpZnkgYSBwcmVmaXggd2l0aCB0aGlzIG9wdGlvbi4gRm9yIEFtYXpvbiBFQ1Mgc2VydmljZXMsIHlvdSBjYW4gdXNlIHRoZSBzZXJ2aWNlIG5hbWUgYXMgdGhlIHByZWZpeC4gRG9pbmcgc28sIHlvdSBjYW4gdHJhY2UgbG9nIHN0cmVhbXMgdG8gdGhlIHNlcnZpY2UgdGhhdCB0aGUgY29udGFpbmVyIGJlbG9uZ3MgdG8sIHRoZSBuYW1lIG9mIHRoZSBjb250YWluZXIgdGhhdCBzZW50IHRoZW0sIGFuZCB0aGUgSUQgb2YgdGhlIHRhc2sgdGhhdCB0aGUgY29udGFpbmVyIGJlbG9uZ3MgdG8uIFlvdSBtdXN0IHNwZWNpZnkgYSBzdHJlYW0tcHJlZml4IGZvciB5b3VyIGxvZ3MgdG8gaGF2ZSB5b3VyIGxvZ3MgYXBwZWFyIGluIHRoZSBMb2cgcGFuZSB3aGVuIHVzaW5nIHRoZSBBbWF6b24gRUNTIGNvbnNvbGUuICsgYXdzbG9ncy1kYXRldGltZS1mb3JtYXQgUmVxdWlyZWQ6IE5vIFRoaXMgb3B0aW9uIGRlZmluZXMgYSBtdWx0aWxpbmUgc3RhcnQgcGF0dGVybiBpbiBQeXRob24gc3RyZnRpbWUgZm9ybWF0LiBBIGxvZyBtZXNzYWdlIGNvbnNpc3RzIG9mIGEgbGluZSB0aGF0IG1hdGNoZXMgdGhlIHBhdHRlcm4gYW5kIGFueSBmb2xsb3dpbmcgbGluZXMgdGhhdCBkb27igJl0IG1hdGNoIHRoZSBwYXR0ZXJuLiBUaGUgbWF0Y2hlZCBsaW5lIGlzIHRoZSBkZWxpbWl0ZXIgYmV0d2VlbiBsb2cgbWVzc2FnZXMuIE9uZSBleGFtcGxlIG9mIGEgdXNlIGNhc2UgZm9yIHVzaW5nIHRoaXMgZm9ybWF0IGlzIGZvciBwYXJzaW5nIG91dHB1dCBzdWNoIGFzIGEgc3RhY2sgZHVtcCwgd2hpY2ggbWlnaHQgb3RoZXJ3aXNlIGJlIGxvZ2dlZCBpbiBtdWx0aXBsZSBlbnRyaWVzLiBUaGUgY29ycmVjdCBwYXR0ZXJuIGFsbG93cyBpdCB0byBiZSBjYXB0dXJlZCBpbiBhIHNpbmdsZSBlbnRyeS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBhd3Nsb2dzLWRhdGV0aW1lLWZvcm1hdC4gWW91IGNhbm5vdCBjb25maWd1cmUgYm90aCB0aGUgYXdzbG9ncy1kYXRldGltZS1mb3JtYXQgYW5kIGF3c2xvZ3MtbXVsdGlsaW5lLXBhdHRlcm4gb3B0aW9ucy4gTXVsdGlsaW5lIGxvZ2dpbmcgcGVyZm9ybXMgcmVndWxhciBleHByZXNzaW9uIHBhcnNpbmcgYW5kIG1hdGNoaW5nIG9mIGFsbCBsb2cgbWVzc2FnZXMuIFRoaXMgbWlnaHQgaGF2ZSBhIG5lZ2F0aXZlIGltcGFjdCBvbiBsb2dnaW5nIHBlcmZvcm1hbmNlLiArIGF3c2xvZ3MtbXVsdGlsaW5lLXBhdHRlcm4gUmVxdWlyZWQ6IE5vIFRoaXMgb3B0aW9uIGRlZmluZXMgYSBtdWx0aWxpbmUgc3RhcnQgcGF0dGVybiB0aGF0IHVzZXMgYSByZWd1bGFyIGV4cHJlc3Npb24uIEEgbG9nIG1lc3NhZ2UgY29uc2lzdHMgb2YgYSBsaW5lIHRoYXQgbWF0Y2hlcyB0aGUgcGF0dGVybiBhbmQgYW55IGZvbGxvd2luZyBsaW5lcyB0aGF0IGRvbuKAmXQgbWF0Y2ggdGhlIHBhdHRlcm4uIFRoZSBtYXRjaGVkIGxpbmUgaXMgdGhlIGRlbGltaXRlciBiZXR3ZWVuIGxvZyBtZXNzYWdlcy4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBhd3Nsb2dzLW11bHRpbGluZS1wYXR0ZXJuLiBUaGlzIG9wdGlvbiBpcyBpZ25vcmVkIGlmIGF3c2xvZ3MtZGF0ZXRpbWUtZm9ybWF0IGlzIGFsc28gY29uZmlndXJlZC4gWW91IGNhbm5vdCBjb25maWd1cmUgYm90aCB0aGUgYXdzbG9ncy1kYXRldGltZS1mb3JtYXQgYW5kIGF3c2xvZ3MtbXVsdGlsaW5lLXBhdHRlcm4gb3B0aW9ucy4gTXVsdGlsaW5lIGxvZ2dpbmcgcGVyZm9ybXMgcmVndWxhciBleHByZXNzaW9uIHBhcnNpbmcgYW5kIG1hdGNoaW5nIG9mIGFsbCBsb2cgbWVzc2FnZXMuIFRoaXMgbWlnaHQgaGF2ZSBhIG5lZ2F0aXZlIGltcGFjdCBvbiBsb2dnaW5nIHBlcmZvcm1hbmNlLiBcbiAqICBUaGUgZm9sbG93aW5nIG9wdGlvbnMgYXBwbHkgdG8gYWxsIHN1cHBvcnRlZCBsb2cgZHJpdmVycy5cbiAqICAgKyBtb2RlIFJlcXVpcmVkOiBObyBWYWxpZCB2YWx1ZXM6IG5vbi1ibG9ja2luZyB8IGJsb2NraW5nIFRoaXMgb3B0aW9uIGRlZmluZXMgdGhlIGRlbGl2ZXJ5IG1vZGUgb2YgbG9nIG1lc3NhZ2VzIGZyb20gdGhlIGNvbnRhaW5lciB0byB0aGUgbG9nIGRyaXZlciBzcGVjaWZpZWQgdXNpbmcgbG9nRHJpdmVyLiBUaGUgZGVsaXZlcnkgbW9kZSB5b3UgY2hvb3NlIGFmZmVjdHMgYXBwbGljYXRpb24gYXZhaWxhYmlsaXR5IHdoZW4gdGhlIGZsb3cgb2YgbG9ncyBmcm9tIGNvbnRhaW5lciBpcyBpbnRlcnJ1cHRlZC4gSWYgeW91IHVzZSB0aGUgYmxvY2tpbmcgbW9kZSBhbmQgdGhlIGZsb3cgb2YgbG9ncyBpcyBpbnRlcnJ1cHRlZCwgY2FsbHMgZnJvbSBjb250YWluZXIgY29kZSB0byB3cml0ZSB0byB0aGUgc3Rkb3V0IGFuZCBzdGRlcnIgc3RyZWFtcyB3aWxsIGJsb2NrLiBUaGUgbG9nZ2luZyB0aHJlYWQgb2YgdGhlIGFwcGxpY2F0aW9uIHdpbGwgYmxvY2sgYXMgYSByZXN1bHQuIFRoaXMgbWF5IGNhdXNlIHRoZSBhcHBsaWNhdGlvbiB0byBiZWNvbWUgdW5yZXNwb25zaXZlIGFuZCBsZWFkIHRvIGNvbnRhaW5lciBoZWFsdGhjaGVjayBmYWlsdXJlLiBJZiB5b3UgdXNlIHRoZSBub24tYmxvY2tpbmcgbW9kZSwgdGhlIGNvbnRhaW5lcidzIGxvZ3MgYXJlIGluc3RlYWQgc3RvcmVkIGluIGFuIGluLW1lbW9yeSBpbnRlcm1lZGlhdGUgYnVmZmVyIGNvbmZpZ3VyZWQgd2l0aCB0aGUgbWF4LWJ1ZmZlci1zaXplIG9wdGlvbi4gVGhpcyBwcmV2ZW50cyB0aGUgYXBwbGljYXRpb24gZnJvbSBiZWNvbWluZyB1bnJlc3BvbnNpdmUgd2hlbiBsb2dzIGNhbm5vdCBiZSBzZW50LiBXZSByZWNvbW1lbmQgdXNpbmcgdGhpcyBtb2RlIGlmIHlvdSB3YW50IHRvIGVuc3VyZSBzZXJ2aWNlIGF2YWlsYWJpbGl0eSBhbmQgYXJlIG9rYXkgd2l0aCBzb21lIGxvZyBsb3NzLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFByZXZlbnRpbmcgbG9nIGxvc3Mgd2l0aCBub24tYmxvY2tpbmcgbW9kZSBpbiB0aGUgYXdzbG9ncyBjb250YWluZXIgbG9nIGRyaXZlci4gWW91IGNhbiBzZXQgYSBkZWZhdWx0IG1vZGUgZm9yIGFsbCBjb250YWluZXJzIGluIGEgc3BlY2lmaWMgUmVnaW9uIGJ5IHVzaW5nIHRoZSBkZWZhdWx0TG9nRHJpdmVyTW9kZSBhY2NvdW50IHNldHRpbmcuIElmIHlvdSBkb24ndCBzcGVjaWZ5IHRoZSBtb2RlIG9wdGlvbiBvciBjb25maWd1cmUgdGhlIGFjY291bnQgc2V0dGluZywgQW1hem9uIEVDUyB3aWxsIGRlZmF1bHQgdG8gdGhlIGJsb2NraW5nIG1vZGUuIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBhY2NvdW50IHNldHRpbmcsIHNlZSBEZWZhdWx0IGxvZyBkcml2ZXIgbW9kZSBpbiB0aGUgQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlLiBPbiBKdW5lIDI1LCAyMDI1LCBBbWF6b24gRUNTIGlzIGNoYW5naW5nIHRoZSBkZWZhdWx0IGxvZyBkcml2ZXIgbW9kZSBmcm9tIGJsb2NraW5nIHRvIG5vbi1ibG9ja2luZyB0byBwcmlvcml0aXplIHRhc2sgYXZhaWxhYmlsaXR5IG92ZXIgbG9nZ2luZy4gVG8gY29udGludWUgdXNpbmcgdGhlIGJsb2NraW5nIG1vZGUgYWZ0ZXIgdGhpcyBjaGFuZ2UsIGRvIG9uZSBvZiB0aGUgZm9sbG93aW5nOiBTZXQgdGhlIG1vZGUgb3B0aW9uIGluIHlvdXIgY29udGFpbmVyIGRlZmluaXRpb24ncyBsb2dDb25maWd1cmF0aW9uIGFzIGJsb2NraW5nLiBTZXQgdGhlIGRlZmF1bHRMb2dEcml2ZXJNb2RlIGFjY291bnQgc2V0dGluZyB0byBibG9ja2luZy4gKyBtYXgtYnVmZmVyLXNpemUgUmVxdWlyZWQ6IE5vIERlZmF1bHQgdmFsdWU6IDFtIFdoZW4gbm9uLWJsb2NraW5nIG1vZGUgaXMgdXNlZCwgdGhlIG1heC1idWZmZXItc2l6ZSBsb2cgb3B0aW9uIGNvbnRyb2xzIHRoZSBzaXplIG9mIHRoZSBidWZmZXIgdGhhdCdzIHVzZWQgZm9yIGludGVybWVkaWF0ZSBtZXNzYWdlIHN0b3JhZ2UuIE1ha2Ugc3VyZSB0byBzcGVjaWZ5IGFuIGFkZXF1YXRlIGJ1ZmZlciBzaXplIGJhc2VkIG9uIHlvdXIgYXBwbGljYXRpb24uIFdoZW4gdGhlIGJ1ZmZlciBmaWxscyB1cCwgZnVydGhlciBsb2dzIGNhbm5vdCBiZSBzdG9yZWQuIExvZ3MgdGhhdCBjYW5ub3QgYmUgc3RvcmVkIGFyZSBsb3N0LiBcbiAqICBUbyByb3V0ZSBsb2dzIHVzaW5nIHRoZSBgYHNwbHVua2BgIGxvZyByb3V0ZXIsIHlvdSBuZWVkIHRvIHNwZWNpZnkgYSBgYHNwbHVuay10b2tlbmBgIGFuZCBhIGBgc3BsdW5rLXVybGBgLlxuICogIFdoZW4geW91IHVzZSB0aGUgYGBhd3NmaXJlbGVuc2BgIGxvZyByb3V0ZXIgdG8gcm91dGUgbG9ncyB0byBhbiBBV1MgU2VydmljZSBvciBBV1MgUGFydG5lciBOZXR3b3JrIGRlc3RpbmF0aW9uIGZvciBsb2cgc3RvcmFnZSBhbmQgYW5hbHl0aWNzLCB5b3UgY2FuIHNldCB0aGUgYGBsb2ctZHJpdmVyLWJ1ZmZlci1saW1pdGBgIG9wdGlvbiB0byBsaW1pdCB0aGUgbnVtYmVyIG9mIGV2ZW50cyB0aGF0IGFyZSBidWZmZXJlZCBpbiBtZW1vcnksIGJlZm9yZSBiZWluZyBzZW50IHRvIHRoZSBsb2cgcm91dGVyIGNvbnRhaW5lci4gSXQgY2FuIGhlbHAgdG8gcmVzb2x2ZSBwb3RlbnRpYWwgbG9nIGxvc3MgaXNzdWUgYmVjYXVzZSBoaWdoIHRocm91Z2hwdXQgbWlnaHQgcmVzdWx0IGluIG1lbW9yeSBydW5uaW5nIG91dCBmb3IgdGhlIGJ1ZmZlciBpbnNpZGUgb2YgRG9ja2VyLlxuICogIE90aGVyIG9wdGlvbnMgeW91IGNhbiBzcGVjaWZ5IHdoZW4gdXNpbmcgYGBhd3NmaXJlbGVuc2BgIHRvIHJvdXRlIGxvZ3MgZGVwZW5kIG9uIHRoZSBkZXN0aW5hdGlvbi4gV2hlbiB5b3UgZXhwb3J0IGxvZ3MgdG8gQW1hem9uIERhdGEgRmlyZWhvc2UsIHlvdSBjYW4gc3BlY2lmeSB0aGUgQVdTIFJlZ2lvbiB3aXRoIGBgcmVnaW9uYGAgYW5kIGEgbmFtZSBmb3IgdGhlIGxvZyBzdHJlYW0gd2l0aCBgYGRlbGl2ZXJ5X3N0cmVhbWBgLlxuICogIFdoZW4geW91IGV4cG9ydCBsb2dzIHRvIEFtYXpvbiBLaW5lc2lzIERhdGEgU3RyZWFtcywgeW91IGNhbiBzcGVjaWZ5IGFuIEFXUyBSZWdpb24gd2l0aCBgYHJlZ2lvbmBgIGFuZCBhIGRhdGEgc3RyZWFtIG5hbWUgd2l0aCBgYHN0cmVhbWBgLlxuICogICBXaGVuIHlvdSBleHBvcnQgbG9ncyB0byBBbWF6b24gT3BlblNlYXJjaCBTZXJ2aWNlLCB5b3UgY2FuIHNwZWNpZnkgb3B0aW9ucyBsaWtlIGBgTmFtZWBgLCBgYEhvc3RgYCAoT3BlblNlYXJjaCBTZXJ2aWNlIGVuZHBvaW50IHdpdGhvdXQgcHJvdG9jb2wpLCBgYFBvcnRgYCwgYGBJbmRleGBgLCBgYFR5cGVgYCwgYGBBd3NfYXV0aGBgLCBgYEF3c19yZWdpb25gYCwgYGBTdXBwcmVzc19UeXBlX05hbWVgYCwgYW5kIGBgdGxzYGAuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1VuZGVyIHRoZSBob29kOiBGaXJlTGVucyBmb3IgQW1hem9uIEVDUyBUYXNrc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NvbnRhaW5lcnMvdW5kZXItdGhlLWhvb2QtZmlyZWxlbnMtZm9yLWFtYXpvbi1lY3MtdGFza3MvKS5cbiAqICBXaGVuIHlvdSBleHBvcnQgbG9ncyB0byBBbWF6b24gUzMsIHlvdSBjYW4gc3BlY2lmeSB0aGUgYnVja2V0IHVzaW5nIHRoZSBgYGJ1Y2tldGBgIG9wdGlvbi4gWW91IGNhbiBhbHNvIHNwZWNpZnkgYGByZWdpb25gYCwgYGB0b3RhbF9maWxlX3NpemVgYCwgYGB1cGxvYWRfdGltZW91dGBgLCBhbmQgYGB1c2VfcHV0X29iamVjdGBgIGFzIG9wdGlvbnMuXG4gKiAgVGhpcyBwYXJhbWV0ZXIgcmVxdWlyZXMgdmVyc2lvbiAxLjE5IG9mIHRoZSBEb2NrZXIgUmVtb3RlIEFQSSBvciBncmVhdGVyIG9uIHlvdXIgY29udGFpbmVyIGluc3RhbmNlLiBUbyBjaGVjayB0aGUgRG9ja2VyIFJlbW90ZSBBUEkgdmVyc2lvbiBvbiB5b3VyIGNvbnRhaW5lciBpbnN0YW5jZSwgbG9nIGluIHRvIHlvdXIgY29udGFpbmVyIGluc3RhbmNlIGFuZCBydW4gdGhlIGZvbGxvd2luZyBjb21tYW5kOiBgYHN1ZG8gZG9ja2VyIHZlcnNpb24gLS1mb3JtYXQgJ3t7LlNlcnZlci5BUElWZXJzaW9ufX0nYGBcbiAqL1xuT3B0aW9ucz86IHtcbi8qKlxuICogVGhpcyBpbnRlcmZhY2Ugd2FzIHJlZmVyZW5jZWQgYnkgYHVuZGVmaW5lZGAncyBKU09OLVNjaGVtYSBkZWZpbml0aW9uXG4gKiB2aWEgdGhlIGBwYXR0ZXJuUHJvcGVydHlgIFwiLnsxLH1cIi5cbiAqL1xuW2s6IHN0cmluZ106IHN0cmluZ1xufVxuLyoqXG4gKiBUaGUgbG9nIGRyaXZlciB0byB1c2UgZm9yIHRoZSBjb250YWluZXIuXG4gKiAgRm9yIHRhc2tzIG9uIEZBUkdBVEVsb25nLCB0aGUgc3VwcG9ydGVkIGxvZyBkcml2ZXJzIGFyZSBgYGF3c2xvZ3NgYCwgYGBzcGx1bmtgYCwgYW5kIGBgYXdzZmlyZWxlbnNgYC5cbiAqICBGb3IgdGFza3MgaG9zdGVkIG9uIEFtYXpvbiBFQzIgaW5zdGFuY2VzLCB0aGUgc3VwcG9ydGVkIGxvZyBkcml2ZXJzIGFyZSBgYGF3c2xvZ3NgYCwgYGBmbHVlbnRkYGAsIGBgZ2VsZmBgLCBgYGpzb24tZmlsZWBgLCBgYGpvdXJuYWxkYGAsIGBgc3lzbG9nYGAsIGBgc3BsdW5rYGAsIGFuZCBgYGF3c2ZpcmVsZW5zYGAuXG4gKiAgRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdXNpbmcgdGhlIGBgYXdzbG9nc2BgIGxvZyBkcml2ZXIsIHNlZSBbU2VuZCBBbWF6b24gRUNTIGxvZ3MgdG8gQ2xvdWRXYXRjaF0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvdXNpbmdfYXdzbG9ncy5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSouXG4gKiAgRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdXNpbmcgdGhlIGBgYXdzZmlyZWxlbnNgYCBsb2cgZHJpdmVyLCBzZWUgW1NlbmQgQW1hem9uIEVDUyBsb2dzIHRvIGFuIHNlcnZpY2Ugb3IgUGFydG5lcl0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvdXNpbmdfZmlyZWxlbnMuaHRtbCkuXG4gKiAgIElmIHlvdSBoYXZlIGEgY3VzdG9tIGRyaXZlciB0aGF0IGlzbid0IGxpc3RlZCwgeW91IGNhbiBmb3JrIHRoZSBBbWF6b24gRUNTIGNvbnRhaW5lciBhZ2VudCBwcm9qZWN0IHRoYXQncyBbYXZhaWxhYmxlIG9uIEdpdEh1Yl0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2h0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYW1hem9uLWVjcy1hZ2VudCkgYW5kIGN1c3RvbWl6ZSBpdCB0byB3b3JrIHdpdGggdGhhdCBkcml2ZXIuIFdlIGVuY291cmFnZSB5b3UgdG8gc3VibWl0IHB1bGwgcmVxdWVzdHMgZm9yIGNoYW5nZXMgdGhhdCB5b3Ugd291bGQgbGlrZSB0byBoYXZlIGluY2x1ZGVkLiBIb3dldmVyLCB3ZSBkb24ndCBjdXJyZW50bHkgcHJvdmlkZSBzdXBwb3J0IGZvciBydW5uaW5nIG1vZGlmaWVkIGNvcGllcyBvZiB0aGlzIHNvZnR3YXJlLlxuICovXG5Mb2dEcml2ZXI6IHN0cmluZ1xufVxuLyoqXG4gKiBUaGUgdHlwZSBhbmQgYW1vdW50IG9mIGEgcmVzb3VyY2UgdG8gYXNzaWduIHRvIGEgY29udGFpbmVyLiBUaGUgc3VwcG9ydGVkIHJlc291cmNlIHR5cGVzIGFyZSBHUFVzIGFuZCBFbGFzdGljIEluZmVyZW5jZSBhY2NlbGVyYXRvcnMuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1dvcmtpbmcgd2l0aCBHUFVzIG9uIEFtYXpvbiBFQ1NdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2Vjcy1ncHUuaHRtbCkgb3IgW1dvcmtpbmcgd2l0aCBBbWF6b24gRWxhc3RpYyBJbmZlcmVuY2Ugb24gQW1hem9uIEVDU10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvZWNzLWluZmVyZW5jZS5odG1sKSBpbiB0aGUgKkFtYXpvbiBFbGFzdGljIENvbnRhaW5lciBTZXJ2aWNlIERldmVsb3BlciBHdWlkZSpcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXNvdXJjZVJlcXVpcmVtZW50IHtcbi8qKlxuICogVGhlIHR5cGUgb2YgcmVzb3VyY2UgdG8gYXNzaWduIHRvIGEgY29udGFpbmVyLlxuICovXG5UeXBlOiBzdHJpbmdcbi8qKlxuICogVGhlIHZhbHVlIGZvciB0aGUgc3BlY2lmaWVkIHJlc291cmNlIHR5cGUuXG4gKiAgV2hlbiB0aGUgdHlwZSBpcyBgYEdQVWBgLCB0aGUgdmFsdWUgaXMgdGhlIG51bWJlciBvZiBwaHlzaWNhbCBgYEdQVXNgYCB0aGUgQW1hem9uIEVDUyBjb250YWluZXIgYWdlbnQgcmVzZXJ2ZXMgZm9yIHRoZSBjb250YWluZXIuIFRoZSBudW1iZXIgb2YgR1BVcyB0aGF0J3MgcmVzZXJ2ZWQgZm9yIGFsbCBjb250YWluZXJzIGluIGEgdGFzayBjYW4ndCBleGNlZWQgdGhlIG51bWJlciBvZiBhdmFpbGFibGUgR1BVcyBvbiB0aGUgY29udGFpbmVyIGluc3RhbmNlIHRoYXQgdGhlIHRhc2sgaXMgbGF1bmNoZWQgb24uXG4gKiAgV2hlbiB0aGUgdHlwZSBpcyBgYEluZmVyZW5jZUFjY2VsZXJhdG9yYGAsIHRoZSBgYHZhbHVlYGAgbWF0Y2hlcyB0aGUgYGBkZXZpY2VOYW1lYGAgZm9yIGFuIFtJbmZlcmVuY2VBY2NlbGVyYXRvcl0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9JbmZlcmVuY2VBY2NlbGVyYXRvci5odG1sKSBzcGVjaWZpZWQgaW4gYSB0YXNrIGRlZmluaXRpb24uXG4gKi9cblZhbHVlOiBzdHJpbmdcbn1cbi8qKlxuICogQSBsaXN0IG9mIGZpbGVzIGNvbnRhaW5pbmcgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcyB0byBwYXNzIHRvIGEgY29udGFpbmVyLiBZb3UgY2FuIHNwZWNpZnkgdXAgdG8gdGVuIGVudmlyb25tZW50IGZpbGVzLiBUaGUgZmlsZSBtdXN0IGhhdmUgYSBgYC5lbnZgYCBmaWxlIGV4dGVuc2lvbi4gRWFjaCBsaW5lIGluIGFuIGVudmlyb25tZW50IGZpbGUgc2hvdWxkIGNvbnRhaW4gYW4gZW52aXJvbm1lbnQgdmFyaWFibGUgaW4gYGBWQVJJQUJMRT1WQUxVRWBgIGZvcm1hdC4gTGluZXMgYmVnaW5uaW5nIHdpdGggYGAjYGAgYXJlIHRyZWF0ZWQgYXMgY29tbWVudHMgYW5kIGFyZSBpZ25vcmVkLlxuICogIElmIHRoZXJlIGFyZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgc3BlY2lmaWVkIHVzaW5nIHRoZSBgYGVudmlyb25tZW50YGAgcGFyYW1ldGVyIGluIGEgY29udGFpbmVyIGRlZmluaXRpb24sIHRoZXkgdGFrZSBwcmVjZWRlbmNlIG92ZXIgdGhlIHZhcmlhYmxlcyBjb250YWluZWQgd2l0aGluIGFuIGVudmlyb25tZW50IGZpbGUuIElmIG11bHRpcGxlIGVudmlyb25tZW50IGZpbGVzIGFyZSBzcGVjaWZpZWQgdGhhdCBjb250YWluIHRoZSBzYW1lIHZhcmlhYmxlLCB0aGV5J3JlIHByb2Nlc3NlZCBmcm9tIHRoZSB0b3AgZG93bi4gV2UgcmVjb21tZW5kIHRoYXQgeW91IHVzZSB1bmlxdWUgdmFyaWFibGUgbmFtZXMuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1VzZSBhIGZpbGUgdG8gcGFzcyBlbnZpcm9ubWVudCB2YXJpYWJsZXMgdG8gYSBjb250YWluZXJdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3VzZS1lbnZpcm9ubWVudC1maWxlLmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqICBFbnZpcm9ubWVudCB2YXJpYWJsZSBmaWxlcyBhcmUgb2JqZWN0cyBpbiBBbWF6b24gUzMgYW5kIGFsbCBBbWF6b24gUzMgc2VjdXJpdHkgY29uc2lkZXJhdGlvbnMgYXBwbHkuIFxuICogIFlvdSBtdXN0IHVzZSB0aGUgZm9sbG93aW5nIHBsYXRmb3JtcyBmb3IgdGhlIEZhcmdhdGUgbGF1bmNoIHR5cGU6XG4gKiAgICsgIExpbnV4IHBsYXRmb3JtIHZlcnNpb24gYGAxLjQuMGBgIG9yIGxhdGVyLlxuICogICArICBXaW5kb3dzIHBsYXRmb3JtIHZlcnNpb24gYGAxLjAuMGBgIG9yIGxhdGVyLlxuICogICBcbiAqICBDb25zaWRlciB0aGUgZm9sbG93aW5nIHdoZW4gdXNpbmcgdGhlIEZhcmdhdGUgbGF1bmNoIHR5cGU6XG4gKiAgICsgIFRoZSBmaWxlIGlzIGhhbmRsZWQgbGlrZSBhIG5hdGl2ZSBEb2NrZXIgZW52LWZpbGUuXG4gKiAgICsgIFRoZXJlIGlzIG5vIHN1cHBvcnQgZm9yIHNoZWxsIGVzY2FwZSBoYW5kbGluZy5cbiAqICAgKyAgVGhlIGNvbnRhaW5lciBlbnRyeSBwb2ludCBpbnRlcnBlcnRzIHRoZSBgYFZBUklBQkxFYGAgdmFsdWVzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVudmlyb25tZW50RmlsZSB7XG4vKipcbiAqIFRoZSBmaWxlIHR5cGUgdG8gdXNlLiBFbnZpcm9ubWVudCBmaWxlcyBhcmUgb2JqZWN0cyBpbiBBbWF6b24gUzMuIFRoZSBvbmx5IHN1cHBvcnRlZCB2YWx1ZSBpcyBgYHMzYGAuXG4gKi9cblR5cGU/OiBzdHJpbmdcbi8qKlxuICogVGhlIEFtYXpvbiBSZXNvdXJjZSBOYW1lIChBUk4pIG9mIHRoZSBBbWF6b24gUzMgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIGZpbGUuXG4gKi9cblZhbHVlPzogc3RyaW5nXG59XG4vKipcbiAqIFRoZSBGaXJlTGVucyBjb25maWd1cmF0aW9uIGZvciB0aGUgY29udGFpbmVyLiBUaGlzIGlzIHVzZWQgdG8gc3BlY2lmeSBhbmQgY29uZmlndXJlIGEgbG9nIHJvdXRlciBmb3IgY29udGFpbmVyIGxvZ3MuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0N1c3RvbSBMb2cgUm91dGluZ10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvdXNpbmdfZmlyZWxlbnMuaHRtbCkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpcmVsZW5zQ29uZmlndXJhdGlvbiB7XG4vKipcbiAqIFRoZSBvcHRpb25zIHRvIHVzZSB3aGVuIGNvbmZpZ3VyaW5nIHRoZSBsb2cgcm91dGVyLiBUaGlzIGZpZWxkIGlzIG9wdGlvbmFsIGFuZCBjYW4gYmUgdXNlZCB0byBhZGQgYWRkaXRpb25hbCBtZXRhZGF0YSwgc3VjaCBhcyB0aGUgdGFzaywgdGFzayBkZWZpbml0aW9uLCBjbHVzdGVyLCBhbmQgY29udGFpbmVyIGluc3RhbmNlIGRldGFpbHMgdG8gdGhlIGxvZyBldmVudC5cbiAqICAgSWYgc3BlY2lmaWVkLCB2YWxpZCBvcHRpb24ga2V5cyBhcmU6XG4gKiAgICsgIGBgZW5hYmxlLWVjcy1sb2ctbWV0YWRhdGFgYCwgd2hpY2ggY2FuIGJlIGBgdHJ1ZWBgIG9yIGBgZmFsc2VgYFxuICogICArICBgYGNvbmZpZy1maWxlLXR5cGVgYCwgd2hpY2ggY2FuIGJlIGBgczNgYCBvciBgYGZpbGVgYFxuICogICArICBgYGNvbmZpZy1maWxlLXZhbHVlYGAsIHdoaWNoIGlzIGVpdGhlciBhbiBTMyBBUk4gb3IgYSBmaWxlIHBhdGhcbiAqL1xuT3B0aW9ucz86IHtcbi8qKlxuICogVGhpcyBpbnRlcmZhY2Ugd2FzIHJlZmVyZW5jZWQgYnkgYHVuZGVmaW5lZGAncyBKU09OLVNjaGVtYSBkZWZpbml0aW9uXG4gKiB2aWEgdGhlIGBwYXR0ZXJuUHJvcGVydHlgIFwiLnsxLH1cIi5cbiAqL1xuW2s6IHN0cmluZ106IHN0cmluZ1xufVxuLyoqXG4gKiBUaGUgbG9nIHJvdXRlciB0byB1c2UuIFRoZSB2YWxpZCB2YWx1ZXMgYXJlIGBgZmx1ZW50ZGBgIG9yIGBgZmx1ZW50Yml0YGAuXG4gKi9cblR5cGU/OiBzdHJpbmdcbn1cbi8qKlxuICogQSBsaXN0IG9mIG5hbWVzcGFjZWQga2VybmVsIHBhcmFtZXRlcnMgdG8gc2V0IGluIHRoZSBjb250YWluZXIuIFRoaXMgcGFyYW1ldGVyIG1hcHMgdG8gYGBTeXNjdGxzYGAgaW4gdGhlIGRvY2tlciBjb250YWluZXIgY3JlYXRlIGNvbW1hbmQgYW5kIHRoZSBgYC0tc3lzY3RsYGAgb3B0aW9uIHRvIGRvY2tlciBydW4uIEZvciBleGFtcGxlLCB5b3UgY2FuIGNvbmZpZ3VyZSBgYG5ldC5pcHY0LnRjcF9rZWVwYWxpdmVfdGltZWBgIHNldHRpbmcgdG8gbWFpbnRhaW4gbG9uZ2VyIGxpdmVkIGNvbm5lY3Rpb25zLlxuICogIFdlIGRvbid0IHJlY29tbWVuZCB0aGF0IHlvdSBzcGVjaWZ5IG5ldHdvcmstcmVsYXRlZCBgYHN5c3RlbUNvbnRyb2xzYGAgcGFyYW1ldGVycyBmb3IgbXVsdGlwbGUgY29udGFpbmVycyBpbiBhIHNpbmdsZSB0YXNrIHRoYXQgYWxzbyB1c2VzIGVpdGhlciB0aGUgYGBhd3N2cGNgYCBvciBgYGhvc3RgYCBuZXR3b3JrIG1vZGUuIERvaW5nIHRoaXMgaGFzIHRoZSBmb2xsb3dpbmcgZGlzYWR2YW50YWdlczpcbiAqICAgKyAgRm9yIHRhc2tzIHRoYXQgdXNlIHRoZSBgYGF3c3ZwY2BgIG5ldHdvcmsgbW9kZSBpbmNsdWRpbmcgRmFyZ2F0ZSwgaWYgeW91IHNldCBgYHN5c3RlbUNvbnRyb2xzYGAgZm9yIGFueSBjb250YWluZXIsIGl0IGFwcGxpZXMgdG8gYWxsIGNvbnRhaW5lcnMgaW4gdGhlIHRhc2suIElmIHlvdSBzZXQgZGlmZmVyZW50IGBgc3lzdGVtQ29udHJvbHNgYCBmb3IgbXVsdGlwbGUgY29udGFpbmVycyBpbiBhIHNpbmdsZSB0YXNrLCB0aGUgY29udGFpbmVyIHRoYXQncyBzdGFydGVkIGxhc3QgZGV0ZXJtaW5lcyB3aGljaCBgYHN5c3RlbUNvbnRyb2xzYGAgdGFrZSBlZmZlY3QuXG4gKiAgICsgIEZvciB0YXNrcyB0aGF0IHVzZSB0aGUgYGBob3N0YGAgbmV0d29yayBtb2RlLCB0aGUgbmV0d29yayBuYW1lc3BhY2UgYGBzeXN0ZW1Db250cm9sc2BgIGFyZW4ndCBzdXBwb3J0ZWQuXG4gKiAgIFxuICogIElmIHlvdSdyZSBzZXR0aW5nIGFuIElQQyByZXNvdXJjZSBuYW1lc3BhY2UgdG8gdXNlIGZvciB0aGUgY29udGFpbmVycyBpbiB0aGUgdGFzaywgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFwcGx5IHRvIHlvdXIgc3lzdGVtIGNvbnRyb2xzLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtJUEMgbW9kZV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvdGFza19kZWZpbml0aW9uX3BhcmFtZXRlcnMuaHRtbCN0YXNrX2RlZmluaXRpb25faXBjbW9kZSkuXG4gKiAgICsgIEZvciB0YXNrcyB0aGF0IHVzZSB0aGUgYGBob3N0YGAgSVBDIG1vZGUsIElQQyBuYW1lc3BhY2UgYGBzeXN0ZW1Db250cm9sc2BgIGFyZW4ndCBzdXBwb3J0ZWQuXG4gKiAgICsgIEZvciB0YXNrcyB0aGF0IHVzZSB0aGUgYGB0YXNrYGAgSVBDIG1vZGUsIElQQyBuYW1lc3BhY2UgYGBzeXN0ZW1Db250cm9sc2BgIHZhbHVlcyBhcHBseSB0byBhbGwgY29udGFpbmVycyB3aXRoaW4gYSB0YXNrLlxuICogICBcbiAqICAgVGhpcyBwYXJhbWV0ZXIgaXMgbm90IHN1cHBvcnRlZCBmb3IgV2luZG93cyBjb250YWluZXJzLlxuICogICAgVGhpcyBwYXJhbWV0ZXIgaXMgb25seSBzdXBwb3J0ZWQgZm9yIHRhc2tzIHRoYXQgYXJlIGhvc3RlZCBvbiBGQVJHQVRFbG9uZyBpZiB0aGUgdGFza3MgYXJlIHVzaW5nIHBsYXRmb3JtIHZlcnNpb24gYGAxLjQuMGBgIG9yIGxhdGVyIChMaW51eCkuIFRoaXMgaXNuJ3Qgc3VwcG9ydGVkIGZvciBXaW5kb3dzIGNvbnRhaW5lcnMgb24gRmFyZ2F0ZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTeXN0ZW1Db250cm9sIHtcbi8qKlxuICogVGhlIG5hbWVzcGFjZWQga2VybmVsIHBhcmFtZXRlciB0byBzZXQgYSBgYHZhbHVlYGAgZm9yLlxuICogIFZhbGlkIElQQyBuYW1lc3BhY2UgdmFsdWVzOiBgYFwia2VybmVsLm1zZ21heFwiIHwgXCJrZXJuZWwubXNnbW5iXCIgfCBcImtlcm5lbC5tc2dtbmlcIiB8IFwia2VybmVsLnNlbVwiIHwgXCJrZXJuZWwuc2htYWxsXCIgfCBcImtlcm5lbC5zaG1tYXhcIiB8IFwia2VybmVsLnNobW1uaVwiIHwgXCJrZXJuZWwuc2htX3JtaWRfZm9yY2VkXCJgYCwgYW5kIGBgU3lzY3Rsc2BgIHRoYXQgc3RhcnQgd2l0aCBgYFwiZnMubXF1ZXVlLipcImBgXG4gKiAgVmFsaWQgbmV0d29yayBuYW1lc3BhY2UgdmFsdWVzOiBgYFN5c2N0bHNgYCB0aGF0IHN0YXJ0IHdpdGggYGBcIm5ldC4qXCJgYC4gT25seSBuYW1lc3BhY2VkIGBgU3lzY3Rsc2BgIHRoYXQgZXhpc3Qgd2l0aGluIHRoZSBjb250YWluZXIgc3RhcnRpbmcgd2l0aCBcIm5ldC4qIGFyZSBhY2NlcHRlZC5cbiAqICBBbGwgb2YgdGhlc2UgdmFsdWVzIGFyZSBzdXBwb3J0ZWQgYnkgRmFyZ2F0ZS5cbiAqL1xuVmFsdWU/OiBzdHJpbmdcbi8qKlxuICogVGhlIG5hbWVzcGFjZWQga2VybmVsIHBhcmFtZXRlciB0byBzZXQgYSBgYHZhbHVlYGAgZm9yLlxuICovXG5OYW1lc3BhY2U/OiBzdHJpbmdcbn1cbi8qKlxuICogVGhlIGBgdWxpbWl0YGAgc2V0dGluZ3MgdG8gcGFzcyB0byB0aGUgY29udGFpbmVyLlxuICogIEFtYXpvbiBFQ1MgdGFza3MgaG9zdGVkIG9uIEZBUkdBVEVsb25nIHVzZSB0aGUgZGVmYXVsdCByZXNvdXJjZSBsaW1pdCB2YWx1ZXMgc2V0IGJ5IHRoZSBvcGVyYXRpbmcgc3lzdGVtIHdpdGggdGhlIGV4Y2VwdGlvbiBvZiB0aGUgYGBub2ZpbGVgYCByZXNvdXJjZSBsaW1pdCBwYXJhbWV0ZXIgd2hpY2ggRkFSR0FURWxvbmcgb3ZlcnJpZGVzLiBUaGUgYGBub2ZpbGVgYCByZXNvdXJjZSBsaW1pdCBzZXRzIGEgcmVzdHJpY3Rpb24gb24gdGhlIG51bWJlciBvZiBvcGVuIGZpbGVzIHRoYXQgYSBjb250YWluZXIgY2FuIHVzZS4gVGhlIGRlZmF1bHQgYGBub2ZpbGVgYCBzb2Z0IGxpbWl0IGlzIGBgNjU1MzVgYCBhbmQgdGhlIGRlZmF1bHQgaGFyZCBsaW1pdCBpcyBgYDY1NTM1YGAuXG4gKiAgWW91IGNhbiBzcGVjaWZ5IHRoZSBgYHVsaW1pdGBgIHNldHRpbmdzIGZvciBhIGNvbnRhaW5lciBpbiBhIHRhc2sgZGVmaW5pdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVbGltaXQge1xuLyoqXG4gKiBUaGUgc29mdCBsaW1pdCBmb3IgdGhlIGBgdWxpbWl0YGAgdHlwZS4gVGhlIHZhbHVlIGNhbiBiZSBzcGVjaWZpZWQgaW4gYnl0ZXMsIHNlY29uZHMsIG9yIGFzIGEgY291bnQsIGRlcGVuZGluZyBvbiB0aGUgYGB0eXBlYGAgb2YgdGhlIGBgdWxpbWl0YGAuXG4gKi9cblNvZnRMaW1pdDogbnVtYmVyXG4vKipcbiAqIFRoZSBoYXJkIGxpbWl0IGZvciB0aGUgYGB1bGltaXRgYCB0eXBlLiBUaGUgdmFsdWUgY2FuIGJlIHNwZWNpZmllZCBpbiBieXRlcywgc2Vjb25kcywgb3IgYXMgYSBjb3VudCwgZGVwZW5kaW5nIG9uIHRoZSBgYHR5cGVgYCBvZiB0aGUgYGB1bGltaXRgYC5cbiAqL1xuSGFyZExpbWl0OiBudW1iZXJcbi8qKlxuICogVGhlIGBgdHlwZWBgIG9mIHRoZSBgYHVsaW1pdGBgLlxuICovXG5OYW1lOiBzdHJpbmdcbn1cbi8qKlxuICogVGhlIHByaXZhdGUgcmVwb3NpdG9yeSBhdXRoZW50aWNhdGlvbiBjcmVkZW50aWFscyB0byB1c2UuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVwb3NpdG9yeUNyZWRlbnRpYWxzIHtcbi8qKlxuICogVGhlIEFtYXpvbiBSZXNvdXJjZSBOYW1lIChBUk4pIG9mIHRoZSBzZWNyZXQgY29udGFpbmluZyB0aGUgcHJpdmF0ZSByZXBvc2l0b3J5IGNyZWRlbnRpYWxzLlxuICogICBXaGVuIHlvdSB1c2UgdGhlIEFtYXpvbiBFQ1MgQVBJLCBDTEksIG9yIEFXUyBTREssIGlmIHRoZSBzZWNyZXQgZXhpc3RzIGluIHRoZSBzYW1lIFJlZ2lvbiBhcyB0aGUgdGFzayB0aGF0IHlvdSdyZSBsYXVuY2hpbmcgdGhlbiB5b3UgY2FuIHVzZSBlaXRoZXIgdGhlIGZ1bGwgQVJOIG9yIHRoZSBuYW1lIG9mIHRoZSBzZWNyZXQuIFdoZW4geW91IHVzZSB0aGUgQVdTIE1hbmFnZW1lbnQgQ29uc29sZSwgeW91IG11c3Qgc3BlY2lmeSB0aGUgZnVsbCBBUk4gb2YgdGhlIHNlY3JldC5cbiAqL1xuQ3JlZGVudGlhbHNQYXJhbWV0ZXI/OiBzdHJpbmdcbn1cbi8qKlxuICogVGhlIGBgSG9zdEVudHJ5YGAgcHJvcGVydHkgc3BlY2lmaWVzIGEgaG9zdG5hbWUgYW5kIGFuIElQIGFkZHJlc3MgdGhhdCBhcmUgYWRkZWQgdG8gdGhlIGBgL2V0Yy9ob3N0c2BgIGZpbGUgb2YgYSBjb250YWluZXIgdGhyb3VnaCB0aGUgYGBleHRyYUhvc3RzYGAgcGFyYW1ldGVyIG9mIGl0cyBgYENvbnRhaW5lckRlZmluaXRpb25gYCByZXNvdXJjZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBIb3N0RW50cnkge1xuLyoqXG4gKiBUaGUgaG9zdG5hbWUgdG8gdXNlIGluIHRoZSBgYC9ldGMvaG9zdHNgYCBlbnRyeS5cbiAqL1xuSG9zdG5hbWU/OiBzdHJpbmdcbi8qKlxuICogVGhlIElQIGFkZHJlc3MgdG8gdXNlIGluIHRoZSBgYC9ldGMvaG9zdHNgYCBlbnRyeS5cbiAqL1xuSXBBZGRyZXNzPzogc3RyaW5nXG59XG4vKipcbiAqIExpbnV4LXNwZWNpZmljIG1vZGlmaWNhdGlvbnMgdGhhdCBhcmUgYXBwbGllZCB0byB0aGUgY29udGFpbmVyLCBzdWNoIGFzIExpbnV4IGtlcm5lbCBjYXBhYmlsaXRpZXMuIEZvciBtb3JlIGluZm9ybWF0aW9uIHNlZSBbS2VybmVsQ2FwYWJpbGl0aWVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0tlcm5lbENhcGFiaWxpdGllcy5odG1sKS5cbiAqICAgVGhpcyBwYXJhbWV0ZXIgaXMgbm90IHN1cHBvcnRlZCBmb3IgV2luZG93cyBjb250YWluZXJzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIExpbnV4UGFyYW1ldGVycyB7XG5DYXBhYmlsaXRpZXM/OiBLZXJuZWxDYXBhYmlsaXRpZXNcbi8qKlxuICogVGhpcyBhbGxvd3MgeW91IHRvIHR1bmUgYSBjb250YWluZXIncyBtZW1vcnkgc3dhcHBpbmVzcyBiZWhhdmlvci4gQSBgYHN3YXBwaW5lc3NgYCB2YWx1ZSBvZiBgYDBgYCB3aWxsIGNhdXNlIHN3YXBwaW5nIHRvIG5vdCBoYXBwZW4gdW5sZXNzIGFic29sdXRlbHkgbmVjZXNzYXJ5LiBBIGBgc3dhcHBpbmVzc2BgIHZhbHVlIG9mIGBgMTAwYGAgd2lsbCBjYXVzZSBwYWdlcyB0byBiZSBzd2FwcGVkIHZlcnkgYWdncmVzc2l2ZWx5LiBBY2NlcHRlZCB2YWx1ZXMgYXJlIHdob2xlIG51bWJlcnMgYmV0d2VlbiBgYDBgYCBhbmQgYGAxMDBgYC4gSWYgdGhlIGBgc3dhcHBpbmVzc2BgIHBhcmFtZXRlciBpcyBub3Qgc3BlY2lmaWVkLCBhIGRlZmF1bHQgdmFsdWUgb2YgYGA2MGBgIGlzIHVzZWQuIElmIGEgdmFsdWUgaXMgbm90IHNwZWNpZmllZCBmb3IgYGBtYXhTd2FwYGAgdGhlbiB0aGlzIHBhcmFtZXRlciBpcyBpZ25vcmVkLiBUaGlzIHBhcmFtZXRlciBtYXBzIHRvIHRoZSBgYC0tbWVtb3J5LXN3YXBwaW5lc3NgYCBvcHRpb24gdG8gZG9ja2VyIHJ1bi5cbiAqICAgSWYgeW91J3JlIHVzaW5nIHRhc2tzIHRoYXQgdXNlIHRoZSBGYXJnYXRlIGxhdW5jaCB0eXBlLCB0aGUgYGBzd2FwcGluZXNzYGAgcGFyYW1ldGVyIGlzbid0IHN1cHBvcnRlZC5cbiAqICBJZiB5b3UncmUgdXNpbmcgdGFza3Mgb24gQW1hem9uIExpbnV4IDIwMjMgdGhlIGBgc3dhcHBpbmVzc2BgIHBhcmFtZXRlciBpc24ndCBzdXBwb3J0ZWQuXG4gKi9cblN3YXBwaW5lc3M/OiBudW1iZXJcbi8qKlxuICogVGhlIGNvbnRhaW5lciBwYXRoLCBtb3VudCBvcHRpb25zLCBhbmQgc2l6ZSAoaW4gTWlCKSBvZiB0aGUgdG1wZnMgbW91bnQuIFRoaXMgcGFyYW1ldGVyIG1hcHMgdG8gdGhlIGBgLS10bXBmc2BgIG9wdGlvbiB0byBkb2NrZXIgcnVuLlxuICogICBJZiB5b3UncmUgdXNpbmcgdGFza3MgdGhhdCB1c2UgdGhlIEZhcmdhdGUgbGF1bmNoIHR5cGUsIHRoZSBgYHRtcGZzYGAgcGFyYW1ldGVyIGlzbid0IHN1cHBvcnRlZC5cbiAqL1xuVG1wZnM/OiBUbXBmc1tdXG4vKipcbiAqIFRoZSB2YWx1ZSBmb3IgdGhlIHNpemUgKGluIE1pQikgb2YgdGhlIGBgL2Rldi9zaG1gYCB2b2x1bWUuIFRoaXMgcGFyYW1ldGVyIG1hcHMgdG8gdGhlIGBgLS1zaG0tc2l6ZWBgIG9wdGlvbiB0byBkb2NrZXIgcnVuLlxuICogICBJZiB5b3UgYXJlIHVzaW5nIHRhc2tzIHRoYXQgdXNlIHRoZSBGYXJnYXRlIGxhdW5jaCB0eXBlLCB0aGUgYGBzaGFyZWRNZW1vcnlTaXplYGAgcGFyYW1ldGVyIGlzIG5vdCBzdXBwb3J0ZWQuXG4gKi9cblNoYXJlZE1lbW9yeVNpemU/OiBudW1iZXJcbi8qKlxuICogQW55IGhvc3QgZGV2aWNlcyB0byBleHBvc2UgdG8gdGhlIGNvbnRhaW5lci4gVGhpcyBwYXJhbWV0ZXIgbWFwcyB0byBgYERldmljZXNgYCBpbiB0aGUgZG9ja2VyIGNvbnRhaW5lciBjcmVhdGUgY29tbWFuZCBhbmQgdGhlIGBgLS1kZXZpY2VgYCBvcHRpb24gdG8gZG9ja2VyIHJ1bi5cbiAqICAgSWYgeW91J3JlIHVzaW5nIHRhc2tzIHRoYXQgdXNlIHRoZSBGYXJnYXRlIGxhdW5jaCB0eXBlLCB0aGUgYGBkZXZpY2VzYGAgcGFyYW1ldGVyIGlzbid0IHN1cHBvcnRlZC5cbiAqL1xuRGV2aWNlcz86IERldmljZVtdXG4vKipcbiAqIFJ1biBhbiBgYGluaXRgYCBwcm9jZXNzIGluc2lkZSB0aGUgY29udGFpbmVyIHRoYXQgZm9yd2FyZHMgc2lnbmFscyBhbmQgcmVhcHMgcHJvY2Vzc2VzLiBUaGlzIHBhcmFtZXRlciBtYXBzIHRvIHRoZSBgYC0taW5pdGBgIG9wdGlvbiB0byBkb2NrZXIgcnVuLiBUaGlzIHBhcmFtZXRlciByZXF1aXJlcyB2ZXJzaW9uIDEuMjUgb2YgdGhlIERvY2tlciBSZW1vdGUgQVBJIG9yIGdyZWF0ZXIgb24geW91ciBjb250YWluZXIgaW5zdGFuY2UuIFRvIGNoZWNrIHRoZSBEb2NrZXIgUmVtb3RlIEFQSSB2ZXJzaW9uIG9uIHlvdXIgY29udGFpbmVyIGluc3RhbmNlLCBsb2cgaW4gdG8geW91ciBjb250YWluZXIgaW5zdGFuY2UgYW5kIHJ1biB0aGUgZm9sbG93aW5nIGNvbW1hbmQ6IGBgc3VkbyBkb2NrZXIgdmVyc2lvbiAtLWZvcm1hdCAne3suU2VydmVyLkFQSVZlcnNpb259fSdgYFxuICovXG5Jbml0UHJvY2Vzc0VuYWJsZWQ/OiBib29sZWFuXG4vKipcbiAqIFRoZSB0b3RhbCBhbW91bnQgb2Ygc3dhcCBtZW1vcnkgKGluIE1pQikgYSBjb250YWluZXIgY2FuIHVzZS4gVGhpcyBwYXJhbWV0ZXIgd2lsbCBiZSB0cmFuc2xhdGVkIHRvIHRoZSBgYC0tbWVtb3J5LXN3YXBgYCBvcHRpb24gdG8gZG9ja2VyIHJ1biB3aGVyZSB0aGUgdmFsdWUgd291bGQgYmUgdGhlIHN1bSBvZiB0aGUgY29udGFpbmVyIG1lbW9yeSBwbHVzIHRoZSBgYG1heFN3YXBgYCB2YWx1ZS5cbiAqICBJZiBhIGBgbWF4U3dhcGBgIHZhbHVlIG9mIGBgMGBgIGlzIHNwZWNpZmllZCwgdGhlIGNvbnRhaW5lciB3aWxsIG5vdCB1c2Ugc3dhcC4gQWNjZXB0ZWQgdmFsdWVzIGFyZSBgYDBgYCBvciBhbnkgcG9zaXRpdmUgaW50ZWdlci4gSWYgdGhlIGBgbWF4U3dhcGBgIHBhcmFtZXRlciBpcyBvbWl0dGVkLCB0aGUgY29udGFpbmVyIHdpbGwgdXNlIHRoZSBzd2FwIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBjb250YWluZXIgaW5zdGFuY2UgaXQgaXMgcnVubmluZyBvbi4gQSBgYG1heFN3YXBgYCB2YWx1ZSBtdXN0IGJlIHNldCBmb3IgdGhlIGBgc3dhcHBpbmVzc2BgIHBhcmFtZXRlciB0byBiZSB1c2VkLlxuICogICBJZiB5b3UncmUgdXNpbmcgdGFza3MgdGhhdCB1c2UgdGhlIEZhcmdhdGUgbGF1bmNoIHR5cGUsIHRoZSBgYG1heFN3YXBgYCBwYXJhbWV0ZXIgaXNuJ3Qgc3VwcG9ydGVkLlxuICogIElmIHlvdSdyZSB1c2luZyB0YXNrcyBvbiBBbWF6b24gTGludXggMjAyMyB0aGUgYGBzd2FwcGluZXNzYGAgcGFyYW1ldGVyIGlzbid0IHN1cHBvcnRlZC5cbiAqL1xuTWF4U3dhcD86IG51bWJlclxufVxuLyoqXG4gKiBUaGUgTGludXggY2FwYWJpbGl0aWVzIGZvciB0aGUgY29udGFpbmVyIHRoYXQgYXJlIGFkZGVkIHRvIG9yIGRyb3BwZWQgZnJvbSB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIHByb3ZpZGVkIGJ5IERvY2tlci5cbiAqICAgRm9yIHRhc2tzIHRoYXQgdXNlIHRoZSBGYXJnYXRlIGxhdW5jaCB0eXBlLCBgYGNhcGFiaWxpdGllc2BgIGlzIHN1cHBvcnRlZCBmb3IgYWxsIHBsYXRmb3JtIHZlcnNpb25zIGJ1dCB0aGUgYGBhZGRgYCBwYXJhbWV0ZXIgaXMgb25seSBzdXBwb3J0ZWQgaWYgdXNpbmcgcGxhdGZvcm0gdmVyc2lvbiAxLjQuMCBvciBsYXRlci5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBLZXJuZWxDYXBhYmlsaXRpZXMge1xuLyoqXG4gKiBUaGUgTGludXggY2FwYWJpbGl0aWVzIGZvciB0aGUgY29udGFpbmVyIHRoYXQgaGF2ZSBiZWVuIGFkZGVkIHRvIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gcHJvdmlkZWQgYnkgRG9ja2VyLiBUaGlzIHBhcmFtZXRlciBtYXBzIHRvIGBgQ2FwQWRkYGAgaW4gdGhlIGRvY2tlciBjb250YWluZXIgY3JlYXRlIGNvbW1hbmQgYW5kIHRoZSBgYC0tY2FwLWFkZGBgIG9wdGlvbiB0byBkb2NrZXIgcnVuLlxuICogICBUYXNrcyBsYXVuY2hlZCBvbiBGQVJHQVRFbG9uZyBvbmx5IHN1cHBvcnQgYWRkaW5nIHRoZSBgYFNZU19QVFJBQ0VgYCBrZXJuZWwgY2FwYWJpbGl0eS5cbiAqICAgVmFsaWQgdmFsdWVzOiBgYFwiQUxMXCIgfCBcIkFVRElUX0NPTlRST0xcIiB8IFwiQVVESVRfV1JJVEVcIiB8IFwiQkxPQ0tfU1VTUEVORFwiIHwgXCJDSE9XTlwiIHwgXCJEQUNfT1ZFUlJJREVcIiB8IFwiREFDX1JFQURfU0VBUkNIXCIgfCBcIkZPV05FUlwiIHwgXCJGU0VUSURcIiB8IFwiSVBDX0xPQ0tcIiB8IFwiSVBDX09XTkVSXCIgfCBcIktJTExcIiB8IFwiTEVBU0VcIiB8IFwiTElOVVhfSU1NVVRBQkxFXCIgfCBcIk1BQ19BRE1JTlwiIHwgXCJNQUNfT1ZFUlJJREVcIiB8IFwiTUtOT0RcIiB8IFwiTkVUX0FETUlOXCIgfCBcIk5FVF9CSU5EX1NFUlZJQ0VcIiB8IFwiTkVUX0JST0FEQ0FTVFwiIHwgXCJORVRfUkFXXCIgfCBcIlNFVEZDQVBcIiB8IFwiU0VUR0lEXCIgfCBcIlNFVFBDQVBcIiB8IFwiU0VUVUlEXCIgfCBcIlNZU19BRE1JTlwiIHwgXCJTWVNfQk9PVFwiIHwgXCJTWVNfQ0hST09UXCIgfCBcIlNZU19NT0RVTEVcIiB8IFwiU1lTX05JQ0VcIiB8IFwiU1lTX1BBQ0NUXCIgfCBcIlNZU19QVFJBQ0VcIiB8IFwiU1lTX1JBV0lPXCIgfCBcIlNZU19SRVNPVVJDRVwiIHwgXCJTWVNfVElNRVwiIHwgXCJTWVNfVFRZX0NPTkZJR1wiIHwgXCJTWVNMT0dcIiB8IFwiV0FLRV9BTEFSTVwiYGBcbiAqL1xuQWRkPzogc3RyaW5nW11cbi8qKlxuICogVGhlIExpbnV4IGNhcGFiaWxpdGllcyBmb3IgdGhlIGNvbnRhaW5lciB0aGF0IGhhdmUgYmVlbiByZW1vdmVkIGZyb20gdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiBwcm92aWRlZCBieSBEb2NrZXIuIFRoaXMgcGFyYW1ldGVyIG1hcHMgdG8gYGBDYXBEcm9wYGAgaW4gdGhlIGRvY2tlciBjb250YWluZXIgY3JlYXRlIGNvbW1hbmQgYW5kIHRoZSBgYC0tY2FwLWRyb3BgYCBvcHRpb24gdG8gZG9ja2VyIHJ1bi5cbiAqICBWYWxpZCB2YWx1ZXM6IGBgXCJBTExcIiB8IFwiQVVESVRfQ09OVFJPTFwiIHwgXCJBVURJVF9XUklURVwiIHwgXCJCTE9DS19TVVNQRU5EXCIgfCBcIkNIT1dOXCIgfCBcIkRBQ19PVkVSUklERVwiIHwgXCJEQUNfUkVBRF9TRUFSQ0hcIiB8IFwiRk9XTkVSXCIgfCBcIkZTRVRJRFwiIHwgXCJJUENfTE9DS1wiIHwgXCJJUENfT1dORVJcIiB8IFwiS0lMTFwiIHwgXCJMRUFTRVwiIHwgXCJMSU5VWF9JTU1VVEFCTEVcIiB8IFwiTUFDX0FETUlOXCIgfCBcIk1BQ19PVkVSUklERVwiIHwgXCJNS05PRFwiIHwgXCJORVRfQURNSU5cIiB8IFwiTkVUX0JJTkRfU0VSVklDRVwiIHwgXCJORVRfQlJPQURDQVNUXCIgfCBcIk5FVF9SQVdcIiB8IFwiU0VURkNBUFwiIHwgXCJTRVRHSURcIiB8IFwiU0VUUENBUFwiIHwgXCJTRVRVSURcIiB8IFwiU1lTX0FETUlOXCIgfCBcIlNZU19CT09UXCIgfCBcIlNZU19DSFJPT1RcIiB8IFwiU1lTX01PRFVMRVwiIHwgXCJTWVNfTklDRVwiIHwgXCJTWVNfUEFDQ1RcIiB8IFwiU1lTX1BUUkFDRVwiIHwgXCJTWVNfUkFXSU9cIiB8IFwiU1lTX1JFU09VUkNFXCIgfCBcIlNZU19USU1FXCIgfCBcIlNZU19UVFlfQ09ORklHXCIgfCBcIlNZU0xPR1wiIHwgXCJXQUtFX0FMQVJNXCJgYFxuICovXG5Ecm9wPzogc3RyaW5nW11cbn1cbi8qKlxuICogVGhlIGNvbnRhaW5lciBwYXRoLCBtb3VudCBvcHRpb25zLCBhbmQgc2l6ZSBvZiB0aGUgdG1wZnMgbW91bnQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVG1wZnMge1xuLyoqXG4gKiBUaGUgbWF4aW11bSBzaXplIChpbiBNaUIpIG9mIHRoZSB0bXBmcyB2b2x1bWUuXG4gKi9cblNpemU6IG51bWJlclxuLyoqXG4gKiBUaGUgYWJzb2x1dGUgZmlsZSBwYXRoIHdoZXJlIHRoZSB0bXBmcyB2b2x1bWUgaXMgdG8gYmUgbW91bnRlZC5cbiAqL1xuQ29udGFpbmVyUGF0aD86IHN0cmluZ1xuLyoqXG4gKiBUaGUgbGlzdCBvZiB0bXBmcyB2b2x1bWUgbW91bnQgb3B0aW9ucy5cbiAqICBWYWxpZCB2YWx1ZXM6IGBgXCJkZWZhdWx0c1wiIHwgXCJyb1wiIHwgXCJyd1wiIHwgXCJzdWlkXCIgfCBcIm5vc3VpZFwiIHwgXCJkZXZcIiB8IFwibm9kZXZcIiB8IFwiZXhlY1wiIHwgXCJub2V4ZWNcIiB8IFwic3luY1wiIHwgXCJhc3luY1wiIHwgXCJkaXJzeW5jXCIgfCBcInJlbW91bnRcIiB8IFwibWFuZFwiIHwgXCJub21hbmRcIiB8IFwiYXRpbWVcIiB8IFwibm9hdGltZVwiIHwgXCJkaXJhdGltZVwiIHwgXCJub2RpcmF0aW1lXCIgfCBcImJpbmRcIiB8IFwicmJpbmRcIiB8IFwidW5iaW5kYWJsZVwiIHwgXCJydW5iaW5kYWJsZVwiIHwgXCJwcml2YXRlXCIgfCBcInJwcml2YXRlXCIgfCBcInNoYXJlZFwiIHwgXCJyc2hhcmVkXCIgfCBcInNsYXZlXCIgfCBcInJzbGF2ZVwiIHwgXCJyZWxhdGltZVwiIHwgXCJub3JlbGF0aW1lXCIgfCBcInN0cmljdGF0aW1lXCIgfCBcIm5vc3RyaWN0YXRpbWVcIiB8IFwibW9kZVwiIHwgXCJ1aWRcIiB8IFwiZ2lkXCIgfCBcIm5yX2lub2Rlc1wiIHwgXCJucl9ibG9ja3NcIiB8IFwibXBvbFwiYGBcbiAqL1xuTW91bnRPcHRpb25zPzogc3RyaW5nW11cbn1cbi8qKlxuICogVGhlIGBgRGV2aWNlYGAgcHJvcGVydHkgc3BlY2lmaWVzIGFuIG9iamVjdCByZXByZXNlbnRpbmcgYSBjb250YWluZXIgaW5zdGFuY2UgaG9zdCBkZXZpY2UuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGV2aWNlIHtcbi8qKlxuICogVGhlIHBhdGggZm9yIHRoZSBkZXZpY2Ugb24gdGhlIGhvc3QgY29udGFpbmVyIGluc3RhbmNlLlxuICovXG5Ib3N0UGF0aD86IHN0cmluZ1xuLyoqXG4gKiBUaGUgZXhwbGljaXQgcGVybWlzc2lvbnMgdG8gcHJvdmlkZSB0byB0aGUgY29udGFpbmVyIGZvciB0aGUgZGV2aWNlLiBCeSBkZWZhdWx0LCB0aGUgY29udGFpbmVyIGhhcyBwZXJtaXNzaW9ucyBmb3IgYGByZWFkYGAsIGBgd3JpdGVgYCwgYW5kIGBgbWtub2RgYCBmb3IgdGhlIGRldmljZS5cbiAqL1xuUGVybWlzc2lvbnM/OiBzdHJpbmdbXVxuLyoqXG4gKiBUaGUgcGF0aCBpbnNpZGUgdGhlIGNvbnRhaW5lciBhdCB3aGljaCB0byBleHBvc2UgdGhlIGhvc3QgZGV2aWNlLlxuICovXG5Db250YWluZXJQYXRoPzogc3RyaW5nXG59XG4vKipcbiAqIFRoZSByZXN0YXJ0IHBvbGljeSBmb3IgYSBjb250YWluZXIuIFdoZW4geW91IHNldCB1cCBhIHJlc3RhcnQgcG9saWN5LCBBbWF6b24gRUNTIGNhbiByZXN0YXJ0IHRoZSBjb250YWluZXIgd2l0aG91dCBuZWVkaW5nIHRvIHJlcGxhY2UgdGhlIHRhc2suIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1Jlc3RhcnQgaW5kaXZpZHVhbCBjb250YWluZXJzIGluIEFtYXpvbiBFQ1MgdGFza3Mgd2l0aCBjb250YWluZXIgcmVzdGFydCBwb2xpY2llc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvY29udGFpbmVyLXJlc3RhcnQtcG9saWN5Lmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXN0YXJ0UG9saWN5IHtcbi8qKlxuICogQSBsaXN0IG9mIGV4aXQgY29kZXMgdGhhdCBBbWF6b24gRUNTIHdpbGwgaWdub3JlIGFuZCBub3QgYXR0ZW1wdCBhIHJlc3RhcnQgb24uIFlvdSBjYW4gc3BlY2lmeSBhIG1heGltdW0gb2YgNTAgY29udGFpbmVyIGV4aXQgY29kZXMuIEJ5IGRlZmF1bHQsIEFtYXpvbiBFQ1MgZG9lcyBub3QgaWdub3JlIGFueSBleGl0IGNvZGVzLlxuICovXG5JZ25vcmVkRXhpdENvZGVzPzogbnVtYmVyW11cbi8qKlxuICogQSBwZXJpb2Qgb2YgdGltZSAoaW4gc2Vjb25kcykgdGhhdCB0aGUgY29udGFpbmVyIG11c3QgcnVuIGZvciBiZWZvcmUgYSByZXN0YXJ0IGNhbiBiZSBhdHRlbXB0ZWQuIEEgY29udGFpbmVyIGNhbiBiZSByZXN0YXJ0ZWQgb25seSBvbmNlIGV2ZXJ5IGBgcmVzdGFydEF0dGVtcHRQZXJpb2RgYCBzZWNvbmRzLiBJZiBhIGNvbnRhaW5lciBpc24ndCBhYmxlIHRvIHJ1biBmb3IgdGhpcyB0aW1lIHBlcmlvZCBhbmQgZXhpdHMgZWFybHksIGl0IHdpbGwgbm90IGJlIHJlc3RhcnRlZC4gWW91IGNhbiBzZXQgYSBtaW5pbXVtIGBgcmVzdGFydEF0dGVtcHRQZXJpb2RgYCBvZiA2MCBzZWNvbmRzIGFuZCBhIG1heGltdW0gYGByZXN0YXJ0QXR0ZW1wdFBlcmlvZGBgIG9mIDE4MDAgc2Vjb25kcy4gQnkgZGVmYXVsdCwgYSBjb250YWluZXIgbXVzdCBydW4gZm9yIDMwMCBzZWNvbmRzIGJlZm9yZSBpdCBjYW4gYmUgcmVzdGFydGVkLlxuICovXG5SZXN0YXJ0QXR0ZW1wdFBlcmlvZD86IG51bWJlclxuLyoqXG4gKiBTcGVjaWZpZXMgd2hldGhlciBhIHJlc3RhcnQgcG9saWN5IGlzIGVuYWJsZWQgZm9yIHRoZSBjb250YWluZXIuXG4gKi9cbkVuYWJsZWQ/OiBib29sZWFuXG59XG4vKipcbiAqIFRoZSBkZXRhaWxzIGZvciBhIHZvbHVtZSBtb3VudCBwb2ludCB0aGF0J3MgdXNlZCBpbiBhIGNvbnRhaW5lciBkZWZpbml0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1vdW50UG9pbnQge1xuLyoqXG4gKiBJZiB0aGlzIHZhbHVlIGlzIGBgdHJ1ZWBgLCB0aGUgY29udGFpbmVyIGhhcyByZWFkLW9ubHkgYWNjZXNzIHRvIHRoZSB2b2x1bWUuIElmIHRoaXMgdmFsdWUgaXMgYGBmYWxzZWBgLCB0aGVuIHRoZSBjb250YWluZXIgY2FuIHdyaXRlIHRvIHRoZSB2b2x1bWUuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGBgZmFsc2VgYC5cbiAqL1xuUmVhZE9ubHk/OiBib29sZWFuXG4vKipcbiAqIFRoZSBuYW1lIG9mIHRoZSB2b2x1bWUgdG8gbW91bnQuIE11c3QgYmUgYSB2b2x1bWUgbmFtZSByZWZlcmVuY2VkIGluIHRoZSBgYG5hbWVgYCBwYXJhbWV0ZXIgb2YgdGFzayBkZWZpbml0aW9uIGBgdm9sdW1lYGAuXG4gKi9cblNvdXJjZVZvbHVtZT86IHN0cmluZ1xuLyoqXG4gKiBUaGUgcGF0aCBvbiB0aGUgY29udGFpbmVyIHRvIG1vdW50IHRoZSBob3N0IHZvbHVtZSBhdC5cbiAqL1xuQ29udGFpbmVyUGF0aD86IHN0cmluZ1xufVxuLyoqXG4gKiBUaGUgYGBDb250YWluZXJEZXBlbmRlbmN5YGAgcHJvcGVydHkgc3BlY2lmaWVzIHRoZSBkZXBlbmRlbmNpZXMgZGVmaW5lZCBmb3IgY29udGFpbmVyIHN0YXJ0dXAgYW5kIHNodXRkb3duLiBBIGNvbnRhaW5lciBjYW4gY29udGFpbiBtdWx0aXBsZSBkZXBlbmRlbmNpZXMuIFdoZW4gYSBkZXBlbmRlbmN5IGlzIGRlZmluZWQgZm9yIGNvbnRhaW5lciBzdGFydHVwLCBmb3IgY29udGFpbmVyIHNodXRkb3duIGl0IGlzIHJldmVyc2VkLlxuICogIFlvdXIgQW1hem9uIEVDUyBjb250YWluZXIgaW5zdGFuY2VzIHJlcXVpcmUgYXQgbGVhc3QgdmVyc2lvbiAxLjI2LjAgb2YgdGhlIGNvbnRhaW5lciBhZ2VudCB0byBlbmFibGUgY29udGFpbmVyIGRlcGVuZGVuY2llcy4gSG93ZXZlciwgd2UgcmVjb21tZW5kIHVzaW5nIHRoZSBsYXRlc3QgY29udGFpbmVyIGFnZW50IHZlcnNpb24uIEZvciBpbmZvcm1hdGlvbiBhYm91dCBjaGVja2luZyB5b3VyIGFnZW50IHZlcnNpb24gYW5kIHVwZGF0aW5nIHRvIHRoZSBsYXRlc3QgdmVyc2lvbiwgc2VlIFtVcGRhdGluZyB0aGUgQW1hem9uIEVDUyBDb250YWluZXIgQWdlbnRdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2Vjcy1hZ2VudC11cGRhdGUuaHRtbCkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLiBJZiB5b3UgYXJlIHVzaW5nIGFuIEFtYXpvbiBFQ1Mtb3B0aW1pemVkIExpbnV4IEFNSSwgeW91ciBpbnN0YW5jZSBuZWVkcyBhdCBsZWFzdCB2ZXJzaW9uIDEuMjYuMC0xIG9mIHRoZSBgYGVjcy1pbml0YGAgcGFja2FnZS4gSWYgeW91ciBjb250YWluZXIgaW5zdGFuY2VzIGFyZSBsYXVuY2hlZCBmcm9tIHZlcnNpb24gYGAyMDE5MDMwMWBgIG9yIGxhdGVyLCB0aGVuIHRoZXkgY29udGFpbiB0aGUgcmVxdWlyZWQgdmVyc2lvbnMgb2YgdGhlIGNvbnRhaW5lciBhZ2VudCBhbmQgYGBlY3MtaW5pdGBgLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtBbWF6b24gRUNTLW9wdGltaXplZCBMaW51eCBBTUldKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2Vjcy1vcHRpbWl6ZWRfQU1JLmh0bWwpIGluIHRoZSAqQW1hem9uIEVsYXN0aWMgQ29udGFpbmVyIFNlcnZpY2UgRGV2ZWxvcGVyIEd1aWRlKi5cbiAqICAgRm9yIHRhc2tzIHVzaW5nIHRoZSBGYXJnYXRlIGxhdW5jaCB0eXBlLCB0aGlzIHBhcmFtZXRlciByZXF1aXJlcyB0aGF0IHRoZSB0YXNrIG9yIHNlcnZpY2UgdXNlcyBwbGF0Zm9ybSB2ZXJzaW9uIDEuMy4wIG9yIGxhdGVyLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbnRhaW5lckRlcGVuZGVuY3kge1xuLyoqXG4gKiBUaGUgZGVwZW5kZW5jeSBjb25kaXRpb24gb2YgdGhlIGNvbnRhaW5lci4gVGhlIGZvbGxvd2luZyBhcmUgdGhlIGF2YWlsYWJsZSBjb25kaXRpb25zIGFuZCB0aGVpciBiZWhhdmlvcjpcbiAqICAgKyAgYGBTVEFSVGBgIC0gVGhpcyBjb25kaXRpb24gZW11bGF0ZXMgdGhlIGJlaGF2aW9yIG9mIGxpbmtzIGFuZCB2b2x1bWVzIHRvZGF5LiBJdCB2YWxpZGF0ZXMgdGhhdCBhIGRlcGVuZGVudCBjb250YWluZXIgaXMgc3RhcnRlZCBiZWZvcmUgcGVybWl0dGluZyBvdGhlciBjb250YWluZXJzIHRvIHN0YXJ0LlxuICogICArICBgYENPTVBMRVRFYGAgLSBUaGlzIGNvbmRpdGlvbiB2YWxpZGF0ZXMgdGhhdCBhIGRlcGVuZGVudCBjb250YWluZXIgcnVucyB0byBjb21wbGV0aW9uIChleGl0cykgYmVmb3JlIHBlcm1pdHRpbmcgb3RoZXIgY29udGFpbmVycyB0byBzdGFydC4gVGhpcyBjYW4gYmUgdXNlZnVsIGZvciBub25lc3NlbnRpYWwgY29udGFpbmVycyB0aGF0IHJ1biBhIHNjcmlwdCBhbmQgdGhlbiBleGl0LiBUaGlzIGNvbmRpdGlvbiBjYW4ndCBiZSBzZXQgb24gYW4gZXNzZW50aWFsIGNvbnRhaW5lci5cbiAqICAgKyAgYGBTVUNDRVNTYGAgLSBUaGlzIGNvbmRpdGlvbiBpcyB0aGUgc2FtZSBhcyBgYENPTVBMRVRFYGAsIGJ1dCBpdCBhbHNvIHJlcXVpcmVzIHRoYXQgdGhlIGNvbnRhaW5lciBleGl0cyB3aXRoIGEgYGB6ZXJvYGAgc3RhdHVzLiBUaGlzIGNvbmRpdGlvbiBjYW4ndCBiZSBzZXQgb24gYW4gZXNzZW50aWFsIGNvbnRhaW5lci5cbiAqICAgKyAgYGBIRUFMVEhZYGAgLSBUaGlzIGNvbmRpdGlvbiB2YWxpZGF0ZXMgdGhhdCB0aGUgZGVwZW5kZW50IGNvbnRhaW5lciBwYXNzZXMgaXRzIERvY2tlciBoZWFsdGggY2hlY2sgYmVmb3JlIHBlcm1pdHRpbmcgb3RoZXIgY29udGFpbmVycyB0byBzdGFydC4gVGhpcyByZXF1aXJlcyB0aGF0IHRoZSBkZXBlbmRlbnQgY29udGFpbmVyIGhhcyBoZWFsdGggY2hlY2tzIGNvbmZpZ3VyZWQuIFRoaXMgY29uZGl0aW9uIGlzIGNvbmZpcm1lZCBvbmx5IGF0IHRhc2sgc3RhcnR1cC5cbiAqL1xuQ29uZGl0aW9uPzogc3RyaW5nXG4vKipcbiAqIFRoZSBuYW1lIG9mIGEgY29udGFpbmVyLlxuICovXG5Db250YWluZXJOYW1lPzogc3RyaW5nXG59XG4vKipcbiAqIFRoZSBgYFBvcnRNYXBwaW5nYGAgcHJvcGVydHkgc3BlY2lmaWVzIGEgcG9ydCBtYXBwaW5nLiBQb3J0IG1hcHBpbmdzIGFsbG93IGNvbnRhaW5lcnMgdG8gYWNjZXNzIHBvcnRzIG9uIHRoZSBob3N0IGNvbnRhaW5lciBpbnN0YW5jZSB0byBzZW5kIG9yIHJlY2VpdmUgdHJhZmZpYy4gUG9ydCBtYXBwaW5ncyBhcmUgc3BlY2lmaWVkIGFzIHBhcnQgb2YgdGhlIGNvbnRhaW5lciBkZWZpbml0aW9uLlxuICogIElmIHlvdSBhcmUgdXNpbmcgY29udGFpbmVycyBpbiBhIHRhc2sgd2l0aCB0aGUgYGBhd3N2cGNgYCBvciBgYGhvc3RgYCBuZXR3b3JrIG1vZGUsIGV4cG9zZWQgcG9ydHMgc2hvdWxkIGJlIHNwZWNpZmllZCB1c2luZyBgYGNvbnRhaW5lclBvcnRgYC4gVGhlIGBgaG9zdFBvcnRgYCBjYW4gYmUgbGVmdCBibGFuayBvciBpdCBtdXN0IGJlIHRoZSBzYW1lIHZhbHVlIGFzIHRoZSBgYGNvbnRhaW5lclBvcnRgYC5cbiAqICBBZnRlciBhIHRhc2sgcmVhY2hlcyB0aGUgYGBSVU5OSU5HYGAgc3RhdHVzLCBtYW51YWwgYW5kIGF1dG9tYXRpYyBob3N0IGFuZCBjb250YWluZXIgcG9ydCBhc3NpZ25tZW50cyBhcmUgdmlzaWJsZSBpbiB0aGUgYGBuZXR3b3JrQmluZGluZ3NgYCBzZWN0aW9uIG9mIFtEZXNjcmliZVRhc2tzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0Rlc2NyaWJlVGFza3MuaHRtbCkgQVBJIHJlc3BvbnNlcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQb3J0TWFwcGluZyB7XG4vKipcbiAqIFRoZSBhcHBsaWNhdGlvbiBwcm90b2NvbCB0aGF0J3MgdXNlZCBmb3IgdGhlIHBvcnQgbWFwcGluZy4gVGhpcyBwYXJhbWV0ZXIgb25seSBhcHBsaWVzIHRvIFNlcnZpY2UgQ29ubmVjdC4gV2UgcmVjb21tZW5kIHRoYXQgeW91IHNldCB0aGlzIHBhcmFtZXRlciB0byBiZSBjb25zaXN0ZW50IHdpdGggdGhlIHByb3RvY29sIHRoYXQgeW91ciBhcHBsaWNhdGlvbiB1c2VzLiBJZiB5b3Ugc2V0IHRoaXMgcGFyYW1ldGVyLCBBbWF6b24gRUNTIGFkZHMgcHJvdG9jb2wtc3BlY2lmaWMgY29ubmVjdGlvbiBoYW5kbGluZyB0byB0aGUgU2VydmljZSBDb25uZWN0IHByb3h5LiBJZiB5b3Ugc2V0IHRoaXMgcGFyYW1ldGVyLCBBbWF6b24gRUNTIGFkZHMgcHJvdG9jb2wtc3BlY2lmaWMgdGVsZW1ldHJ5IGluIHRoZSBBbWF6b24gRUNTIGNvbnNvbGUgYW5kIENsb3VkV2F0Y2guXG4gKiAgSWYgeW91IGRvbid0IHNldCBhIHZhbHVlIGZvciB0aGlzIHBhcmFtZXRlciwgdGhlbiBUQ1AgaXMgdXNlZC4gSG93ZXZlciwgQW1hem9uIEVDUyBkb2Vzbid0IGFkZCBwcm90b2NvbC1zcGVjaWZpYyB0ZWxlbWV0cnkgZm9yIFRDUC5cbiAqICBgYGFwcFByb3RvY29sYGAgaXMgaW1tdXRhYmxlIGluIGEgU2VydmljZSBDb25uZWN0IHNlcnZpY2UuIFVwZGF0aW5nIHRoaXMgZmllbGQgcmVxdWlyZXMgYSBzZXJ2aWNlIGRlbGV0aW9uIGFuZCByZWRlcGxveW1lbnQuXG4gKiAgVGFza3MgdGhhdCBydW4gaW4gYSBuYW1lc3BhY2UgY2FuIHVzZSBzaG9ydCBuYW1lcyB0byBjb25uZWN0IHRvIHNlcnZpY2VzIGluIHRoZSBuYW1lc3BhY2UuIFRhc2tzIGNhbiBjb25uZWN0IHRvIHNlcnZpY2VzIGFjcm9zcyBhbGwgb2YgdGhlIGNsdXN0ZXJzIGluIHRoZSBuYW1lc3BhY2UuIFRhc2tzIGNvbm5lY3QgdGhyb3VnaCBhIG1hbmFnZWQgcHJveHkgY29udGFpbmVyIHRoYXQgY29sbGVjdHMgbG9ncyBhbmQgbWV0cmljcyBmb3IgaW5jcmVhc2VkIHZpc2liaWxpdHkuIE9ubHkgdGhlIHRhc2tzIHRoYXQgQW1hem9uIEVDUyBzZXJ2aWNlcyBjcmVhdGUgYXJlIHN1cHBvcnRlZCB3aXRoIFNlcnZpY2UgQ29ubmVjdC4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbU2VydmljZSBDb25uZWN0XShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9zZXJ2aWNlLWNvbm5lY3QuaHRtbCkgaW4gdGhlICpBbWF6b24gRWxhc3RpYyBDb250YWluZXIgU2VydmljZSBEZXZlbG9wZXIgR3VpZGUqLlxuICovXG5BcHBQcm90b2NvbD86IChcImh0dHBcIiB8IFwiaHR0cDJcIiB8IFwiZ3JwY1wiKVxuLyoqXG4gKiBUaGUgcG9ydCBudW1iZXIgcmFuZ2Ugb24gdGhlIGNvbnRhaW5lciB0aGF0J3MgYm91bmQgdG8gdGhlIGR5bmFtaWNhbGx5IG1hcHBlZCBob3N0IHBvcnQgcmFuZ2UuIFxuICogIFRoZSBmb2xsb3dpbmcgcnVsZXMgYXBwbHkgd2hlbiB5b3Ugc3BlY2lmeSBhIGBgY29udGFpbmVyUG9ydFJhbmdlYGA6XG4gKiAgICsgIFlvdSBtdXN0IHVzZSBlaXRoZXIgdGhlIGBgYnJpZGdlYGAgbmV0d29yayBtb2RlIG9yIHRoZSBgYGF3c3ZwY2BgIG5ldHdvcmsgbW9kZS5cbiAqICAgKyAgVGhpcyBwYXJhbWV0ZXIgaXMgYXZhaWxhYmxlIGZvciBib3RoIHRoZSBFQzIgYW5kIEZBUkdBVEVsb25nIGxhdW5jaCB0eXBlcy5cbiAqICAgKyAgVGhpcyBwYXJhbWV0ZXIgaXMgYXZhaWxhYmxlIGZvciBib3RoIHRoZSBMaW51eCBhbmQgV2luZG93cyBvcGVyYXRpbmcgc3lzdGVtcy5cbiAqICAgKyAgVGhlIGNvbnRhaW5lciBpbnN0YW5jZSBtdXN0IGhhdmUgYXQgbGVhc3QgdmVyc2lvbiAxLjY3LjAgb2YgdGhlIGNvbnRhaW5lciBhZ2VudCBhbmQgYXQgbGVhc3QgdmVyc2lvbiAxLjY3LjAtMSBvZiB0aGUgYGBlY3MtaW5pdGBgIHBhY2thZ2UgXG4gKiAgICsgIFlvdSBjYW4gc3BlY2lmeSBhIG1heGltdW0gb2YgMTAwIHBvcnQgcmFuZ2VzIHBlciBjb250YWluZXIuXG4gKiAgICsgIFlvdSBkbyBub3Qgc3BlY2lmeSBhIGBgaG9zdFBvcnRSYW5nZWBgLiBUaGUgdmFsdWUgb2YgdGhlIGBgaG9zdFBvcnRSYW5nZWBgIGlzIHNldCBhcyBmb2xsb3dzOlxuICogICArICBGb3IgY29udGFpbmVycyBpbiBhIHRhc2sgd2l0aCB0aGUgYGBhd3N2cGNgYCBuZXR3b3JrIG1vZGUsIHRoZSBgYGhvc3RQb3J0UmFuZ2VgYCBpcyBzZXQgdG8gdGhlIHNhbWUgdmFsdWUgYXMgdGhlIGBgY29udGFpbmVyUG9ydFJhbmdlYGAuIFRoaXMgaXMgYSBzdGF0aWMgbWFwcGluZyBzdHJhdGVneS5cbiAqICAgKyAgRm9yIGNvbnRhaW5lcnMgaW4gYSB0YXNrIHdpdGggdGhlIGBgYnJpZGdlYGAgbmV0d29yayBtb2RlLCB0aGUgQW1hem9uIEVDUyBhZ2VudCBmaW5kcyBvcGVuIGhvc3QgcG9ydHMgZnJvbSB0aGUgZGVmYXVsdCBlcGhlbWVyYWwgcmFuZ2UgYW5kIHBhc3NlcyBpdCB0byBkb2NrZXIgdG8gYmluZCB0aGVtIHRvIHRoZSBjb250YWluZXIgcG9ydHMuXG4gKiAgIFxuICogICArICBUaGUgYGBjb250YWluZXJQb3J0UmFuZ2VgYCB2YWxpZCB2YWx1ZXMgYXJlIGJldHdlZW4gMSBhbmQgNjU1MzUuXG4gKiAgICsgIEEgcG9ydCBjYW4gb25seSBiZSBpbmNsdWRlZCBpbiBvbmUgcG9ydCBtYXBwaW5nIHBlciBjb250YWluZXIuXG4gKiAgICsgIFlvdSBjYW5ub3Qgc3BlY2lmeSBvdmVybGFwcGluZyBwb3J0IHJhbmdlcy5cbiAqICAgKyAgVGhlIGZpcnN0IHBvcnQgaW4gdGhlIHJhbmdlIG11c3QgYmUgbGVzcyB0aGFuIGxhc3QgcG9ydCBpbiB0aGUgcmFuZ2UuXG4gKiAgICsgIERvY2tlciByZWNvbW1lbmRzIHRoYXQgeW91IHR1cm4gb2ZmIHRoZSBkb2NrZXItcHJveHkgaW4gdGhlIERvY2tlciBkYWVtb24gY29uZmlnIGZpbGUgd2hlbiB5b3UgaGF2ZSBhIGxhcmdlIG51bWJlciBvZiBwb3J0cy5cbiAqICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtJc3N1ZSAjMTExODVdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9odHRwczovL2dpdGh1Yi5jb20vbW9ieS9tb2J5L2lzc3Vlcy8xMTE4NSkgb24gdGhlIEdpdGh1YiB3ZWJzaXRlLlxuICogIEZvciBpbmZvcm1hdGlvbiBhYm91dCBob3cgdG8gdHVybiBvZmYgdGhlIGRvY2tlci1wcm94eSBpbiB0aGUgRG9ja2VyIGRhZW1vbiBjb25maWcgZmlsZSwgc2VlIFtEb2NrZXIgZGFlbW9uXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9ib290c3RyYXBfY29udGFpbmVyX2luc3RhbmNlLmh0bWwjYm9vdHN0cmFwX2RvY2tlcl9kYWVtb24pIGluIHRoZSAqQW1hem9uIEVDUyBEZXZlbG9wZXIgR3VpZGUqLlxuICogICBcbiAqICBZb3UgY2FuIGNhbGwgW0Rlc2NyaWJlVGFza3NdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfRGVzY3JpYmVUYXNrcy5odG1sKSB0byB2aWV3IHRoZSBgYGhvc3RQb3J0UmFuZ2VgYCB3aGljaCBhcmUgdGhlIGhvc3QgcG9ydHMgdGhhdCBhcmUgYm91bmQgdG8gdGhlIGNvbnRhaW5lciBwb3J0cy5cbiAqL1xuQ29udGFpbmVyUG9ydFJhbmdlPzogc3RyaW5nXG4vKipcbiAqIFRoZSBwb3J0IG51bWJlciBvbiB0aGUgY29udGFpbmVyIGluc3RhbmNlIHRvIHJlc2VydmUgZm9yIHlvdXIgY29udGFpbmVyLlxuICogIElmIHlvdSBzcGVjaWZ5IGEgYGBjb250YWluZXJQb3J0UmFuZ2VgYCwgbGVhdmUgdGhpcyBmaWVsZCBlbXB0eSBhbmQgdGhlIHZhbHVlIG9mIHRoZSBgYGhvc3RQb3J0YGAgaXMgc2V0IGFzIGZvbGxvd3M6XG4gKiAgICsgIEZvciBjb250YWluZXJzIGluIGEgdGFzayB3aXRoIHRoZSBgYGF3c3ZwY2BgIG5ldHdvcmsgbW9kZSwgdGhlIGBgaG9zdFBvcnRgYCBpcyBzZXQgdG8gdGhlIHNhbWUgdmFsdWUgYXMgdGhlIGBgY29udGFpbmVyUG9ydGBgLiBUaGlzIGlzIGEgc3RhdGljIG1hcHBpbmcgc3RyYXRlZ3kuXG4gKiAgICsgIEZvciBjb250YWluZXJzIGluIGEgdGFzayB3aXRoIHRoZSBgYGJyaWRnZWBgIG5ldHdvcmsgbW9kZSwgdGhlIEFtYXpvbiBFQ1MgYWdlbnQgZmluZHMgb3BlbiBwb3J0cyBvbiB0aGUgaG9zdCBhbmQgYXV0b21hdGljYWxseSBiaW5kcyB0aGVtIHRvIHRoZSBjb250YWluZXIgcG9ydHMuIFRoaXMgaXMgYSBkeW5hbWljIG1hcHBpbmcgc3RyYXRlZ3kuXG4gKiAgIFxuICogIElmIHlvdSB1c2UgY29udGFpbmVycyBpbiBhIHRhc2sgd2l0aCB0aGUgYGBhd3N2cGNgYCBvciBgYGhvc3RgYCBuZXR3b3JrIG1vZGUsIHRoZSBgYGhvc3RQb3J0YGAgY2FuIGVpdGhlciBiZSBsZWZ0IGJsYW5rIG9yIHNldCB0byB0aGUgc2FtZSB2YWx1ZSBhcyB0aGUgYGBjb250YWluZXJQb3J0YGAuXG4gKiAgSWYgeW91IHVzZSBjb250YWluZXJzIGluIGEgdGFzayB3aXRoIHRoZSBgYGJyaWRnZWBgIG5ldHdvcmsgbW9kZSwgeW91IGNhbiBzcGVjaWZ5IGEgbm9uLXJlc2VydmVkIGhvc3QgcG9ydCBmb3IgeW91ciBjb250YWluZXIgcG9ydCBtYXBwaW5nLCBvciB5b3UgY2FuIG9taXQgdGhlIGBgaG9zdFBvcnRgYCAob3Igc2V0IGl0IHRvIGBgMGBgKSB3aGlsZSBzcGVjaWZ5aW5nIGEgYGBjb250YWluZXJQb3J0YGAgYW5kIHlvdXIgY29udGFpbmVyIGF1dG9tYXRpY2FsbHkgcmVjZWl2ZXMgYSBwb3J0IGluIHRoZSBlcGhlbWVyYWwgcG9ydCByYW5nZSBmb3IgeW91ciBjb250YWluZXIgaW5zdGFuY2Ugb3BlcmF0aW5nIHN5c3RlbSBhbmQgRG9ja2VyIHZlcnNpb24uXG4gKiAgVGhlIGRlZmF1bHQgZXBoZW1lcmFsIHBvcnQgcmFuZ2UgZm9yIERvY2tlciB2ZXJzaW9uIDEuNi4wIGFuZCBsYXRlciBpcyBsaXN0ZWQgb24gdGhlIGluc3RhbmNlIHVuZGVyIGBgL3Byb2Mvc3lzL25ldC9pcHY0L2lwX2xvY2FsX3BvcnRfcmFuZ2VgYC4gSWYgdGhpcyBrZXJuZWwgcGFyYW1ldGVyIGlzIHVuYXZhaWxhYmxlLCB0aGUgZGVmYXVsdCBlcGhlbWVyYWwgcG9ydCByYW5nZSBmcm9tIDQ5MTUzIHRocm91Z2ggNjU1MzUgKExpbnV4KSBvciA0OTE1MiB0aHJvdWdoIDY1NTM1IChXaW5kb3dzKSBpcyB1c2VkLiBEbyBub3QgYXR0ZW1wdCB0byBzcGVjaWZ5IGEgaG9zdCBwb3J0IGluIHRoZSBlcGhlbWVyYWwgcG9ydCByYW5nZSBhcyB0aGVzZSBhcmUgcmVzZXJ2ZWQgZm9yIGF1dG9tYXRpYyBhc3NpZ25tZW50LiBJbiBnZW5lcmFsLCBwb3J0cyBiZWxvdyAzMjc2OCBhcmUgb3V0c2lkZSBvZiB0aGUgZXBoZW1lcmFsIHBvcnQgcmFuZ2UuXG4gKiAgVGhlIGRlZmF1bHQgcmVzZXJ2ZWQgcG9ydHMgYXJlIDIyIGZvciBTU0gsIHRoZSBEb2NrZXIgcG9ydHMgMjM3NSBhbmQgMjM3NiwgYW5kIHRoZSBBbWF6b24gRUNTIGNvbnRhaW5lciBhZ2VudCBwb3J0cyA1MTY3OC01MTY4MC4gQW55IGhvc3QgcG9ydCB0aGF0IHdhcyBwcmV2aW91c2x5IHNwZWNpZmllZCBpbiBhIHJ1bm5pbmcgdGFzayBpcyBhbHNvIHJlc2VydmVkIHdoaWxlIHRoZSB0YXNrIGlzIHJ1bm5pbmcuIFRoYXQgaXMsIGFmdGVyIGEgdGFzayBzdG9wcywgdGhlIGhvc3QgcG9ydCBpcyByZWxlYXNlZC4gVGhlIGN1cnJlbnQgcmVzZXJ2ZWQgcG9ydHMgYXJlIGRpc3BsYXllZCBpbiB0aGUgYGByZW1haW5pbmdSZXNvdXJjZXNgYCBvZiBbRGVzY3JpYmVDb250YWluZXJJbnN0YW5jZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfRGVzY3JpYmVDb250YWluZXJJbnN0YW5jZXMuaHRtbCkgb3V0cHV0LiBBIGNvbnRhaW5lciBpbnN0YW5jZSBjYW4gaGF2ZSB1cCB0byAxMDAgcmVzZXJ2ZWQgcG9ydHMgYXQgYSB0aW1lLiBUaGlzIG51bWJlciBpbmNsdWRlcyB0aGUgZGVmYXVsdCByZXNlcnZlZCBwb3J0cy4gQXV0b21hdGljYWxseSBhc3NpZ25lZCBwb3J0cyBhcmVuJ3QgaW5jbHVkZWQgaW4gdGhlIDEwMCByZXNlcnZlZCBwb3J0cyBxdW90YS5cbiAqL1xuSG9zdFBvcnQ/OiBudW1iZXJcbi8qKlxuICogVGhlIHBvcnQgbnVtYmVyIG9uIHRoZSBjb250YWluZXIgdGhhdCdzIGJvdW5kIHRvIHRoZSB1c2VyLXNwZWNpZmllZCBvciBhdXRvbWF0aWNhbGx5IGFzc2lnbmVkIGhvc3QgcG9ydC5cbiAqICBJZiB5b3UgdXNlIGNvbnRhaW5lcnMgaW4gYSB0YXNrIHdpdGggdGhlIGBgYXdzdnBjYGAgb3IgYGBob3N0YGAgbmV0d29yayBtb2RlLCBzcGVjaWZ5IHRoZSBleHBvc2VkIHBvcnRzIHVzaW5nIGBgY29udGFpbmVyUG9ydGBgLlxuICogIElmIHlvdSB1c2UgY29udGFpbmVycyBpbiBhIHRhc2sgd2l0aCB0aGUgYGBicmlkZ2VgYCBuZXR3b3JrIG1vZGUgYW5kIHlvdSBzcGVjaWZ5IGEgY29udGFpbmVyIHBvcnQgYW5kIG5vdCBhIGhvc3QgcG9ydCwgeW91ciBjb250YWluZXIgYXV0b21hdGljYWxseSByZWNlaXZlcyBhIGhvc3QgcG9ydCBpbiB0aGUgZXBoZW1lcmFsIHBvcnQgcmFuZ2UuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgYGBob3N0UG9ydGBgLiBQb3J0IG1hcHBpbmdzIHRoYXQgYXJlIGF1dG9tYXRpY2FsbHkgYXNzaWduZWQgaW4gdGhpcyB3YXkgZG8gbm90IGNvdW50IHRvd2FyZCB0aGUgMTAwIHJlc2VydmVkIHBvcnRzIGxpbWl0IG9mIGEgY29udGFpbmVyIGluc3RhbmNlLlxuICovXG5Db250YWluZXJQb3J0PzogbnVtYmVyXG4vKipcbiAqIFRoZSBwcm90b2NvbCB1c2VkIGZvciB0aGUgcG9ydCBtYXBwaW5nLiBWYWxpZCB2YWx1ZXMgYXJlIGBgdGNwYGAgYW5kIGBgdWRwYGAuIFRoZSBkZWZhdWx0IGlzIGBgdGNwYGAuIGBgcHJvdG9jb2xgYCBpcyBpbW11dGFibGUgaW4gYSBTZXJ2aWNlIENvbm5lY3Qgc2VydmljZS4gVXBkYXRpbmcgdGhpcyBmaWVsZCByZXF1aXJlcyBhIHNlcnZpY2UgZGVsZXRpb24gYW5kIHJlZGVwbG95bWVudC5cbiAqL1xuUHJvdG9jb2w/OiBzdHJpbmdcbi8qKlxuICogVGhlIG5hbWUgdGhhdCdzIHVzZWQgZm9yIHRoZSBwb3J0IG1hcHBpbmcuIFRoaXMgcGFyYW1ldGVyIGlzIHRoZSBuYW1lIHRoYXQgeW91IHVzZSBpbiB0aGUgYGBzZXJ2aWNlQ29ubmVjdENvbmZpZ3VyYXRpb25gYCBhbmQgdGhlIGBgdnBjTGF0dGljZUNvbmZpZ3VyYXRpb25zYGAgb2YgYSBzZXJ2aWNlLiBUaGUgbmFtZSBjYW4gaW5jbHVkZSB1cCB0byA2NCBjaGFyYWN0ZXJzLiBUaGUgY2hhcmFjdGVycyBjYW4gaW5jbHVkZSBsb3dlcmNhc2UgbGV0dGVycywgbnVtYmVycywgdW5kZXJzY29yZXMgKF8pLCBhbmQgaHlwaGVucyAoLSkuIFRoZSBuYW1lIGNhbid0IHN0YXJ0IHdpdGggYSBoeXBoZW4uXG4gKi9cbk5hbWU/OiBzdHJpbmdcbn1cbi8qKlxuICogVGhlIGVwaGVtZXJhbCBzdG9yYWdlIHNldHRpbmdzIHRvIHVzZSBmb3IgdGFza3MgcnVuIHdpdGggdGhlIHRhc2sgZGVmaW5pdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFcGhlbWVyYWxTdG9yYWdlIHtcbi8qKlxuICogVGhlIHRvdGFsIGFtb3VudCwgaW4gR2lCLCBvZiBlcGhlbWVyYWwgc3RvcmFnZSB0byBzZXQgZm9yIHRoZSB0YXNrLiBUaGUgbWluaW11bSBzdXBwb3J0ZWQgdmFsdWUgaXMgYGAyMWBgIEdpQiBhbmQgdGhlIG1heGltdW0gc3VwcG9ydGVkIHZhbHVlIGlzIGBgMjAwYGAgR2lCLlxuICovXG5TaXplSW5HaUI/OiBudW1iZXJcbn1cbi8qKlxuICogVGhlIG1ldGFkYXRhIHRoYXQgeW91IGFwcGx5IHRvIGEgcmVzb3VyY2UgdG8gaGVscCB5b3UgY2F0ZWdvcml6ZSBhbmQgb3JnYW5pemUgdGhlbS4gRWFjaCB0YWcgY29uc2lzdHMgb2YgYSBrZXkgYW5kIGFuIG9wdGlvbmFsIHZhbHVlLiBZb3UgZGVmaW5lIHRoZW0uXG4gKiAgVGhlIGZvbGxvd2luZyBiYXNpYyByZXN0cmljdGlvbnMgYXBwbHkgdG8gdGFnczpcbiAqICAgKyAgTWF4aW11bSBudW1iZXIgb2YgdGFncyBwZXIgcmVzb3VyY2UgLSA1MFxuICogICArICBGb3IgZWFjaCByZXNvdXJjZSwgZWFjaCB0YWcga2V5IG11c3QgYmUgdW5pcXVlLCBhbmQgZWFjaCB0YWcga2V5IGNhbiBoYXZlIG9ubHkgb25lIHZhbHVlLlxuICogICArICBNYXhpbXVtIGtleSBsZW5ndGggLSAxMjggVW5pY29kZSBjaGFyYWN0ZXJzIGluIFVURi04XG4gKiAgICsgIE1heGltdW0gdmFsdWUgbGVuZ3RoIC0gMjU2IFVuaWNvZGUgY2hhcmFjdGVycyBpbiBVVEYtOFxuICogICArICBJZiB5b3VyIHRhZ2dpbmcgc2NoZW1hIGlzIHVzZWQgYWNyb3NzIG11bHRpcGxlIHNlcnZpY2VzIGFuZCByZXNvdXJjZXMsIHJlbWVtYmVyIHRoYXQgb3RoZXIgc2VydmljZXMgbWF5IGhhdmUgcmVzdHJpY3Rpb25zIG9uIGFsbG93ZWQgY2hhcmFjdGVycy4gR2VuZXJhbGx5IGFsbG93ZWQgY2hhcmFjdGVycyBhcmU6IGxldHRlcnMsIG51bWJlcnMsIGFuZCBzcGFjZXMgcmVwcmVzZW50YWJsZSBpbiBVVEYtOCwgYW5kIHRoZSBmb2xsb3dpbmcgY2hhcmFjdGVyczogKyAtID0gLiBfIDogLyBALlxuICogICArICBUYWcga2V5cyBhbmQgdmFsdWVzIGFyZSBjYXNlLXNlbnNpdGl2ZS5cbiAqICAgKyAgRG8gbm90IHVzZSBgYGF3czpgYCwgYGBBV1M6YGAsIG9yIGFueSB1cHBlciBvciBsb3dlcmNhc2UgY29tYmluYXRpb24gb2Ygc3VjaCBhcyBhIHByZWZpeCBmb3IgZWl0aGVyIGtleXMgb3IgdmFsdWVzIGFzIGl0IGlzIHJlc2VydmVkIGZvciBBV1MgdXNlLiBZb3UgY2Fubm90IGVkaXQgb3IgZGVsZXRlIHRhZyBrZXlzIG9yIHZhbHVlcyB3aXRoIHRoaXMgcHJlZml4LiBUYWdzIHdpdGggdGhpcyBwcmVmaXggZG8gbm90IGNvdW50IGFnYWluc3QgeW91ciB0YWdzIHBlciByZXNvdXJjZSBsaW1pdC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUYWcge1xuLyoqXG4gKiBUaGUgb3B0aW9uYWwgcGFydCBvZiBhIGtleS12YWx1ZSBwYWlyIHRoYXQgbWFrZSB1cCBhIHRhZy4gQSBgYHZhbHVlYGAgYWN0cyBhcyBhIGRlc2NyaXB0b3Igd2l0aGluIGEgdGFnIGNhdGVnb3J5IChrZXkpLlxuICovXG5WYWx1ZT86IHN0cmluZ1xuLyoqXG4gKiBPbmUgcGFydCBvZiBhIGtleS12YWx1ZSBwYWlyIHRoYXQgbWFrZSB1cCBhIHRhZy4gQSBgYGtleWBgIGlzIGEgZ2VuZXJhbCBsYWJlbCB0aGF0IGFjdHMgbGlrZSBhIGNhdGVnb3J5IGZvciBtb3JlIHNwZWNpZmljIHRhZyB2YWx1ZXMuXG4gKi9cbktleT86IHN0cmluZ1xufVxuIl19
|