FHIR © HL7.org  |  FHIRsmith 4.0.1  |  Server Home  |  XIG Home  |  XIG Stats  | 

FHIR IG analytics

Packagehl7.fhir.uv.ips.test
Resource TypeBinary
IdBinary-ips-creator-gherkin-script.json
FHIR VersionR6

Resources that use this resource

No resources found


Resources that this resource uses

No resources found


Narrative

No narrative content found in resource


Source1

{
  "resourceType": "Binary",
  "id": "ips-creator-gherkin-script",
  "language": "en",
  "contentType": "text/x-gherkin",
  "data": "IyBHRU5FUkFURUQgYnkgYXBwL3NjcmlwdHMvaXBzLW9ibGlnYXRpb25zLm1qcyBmcm9tIGhsNy5maGlyLnV2LmlwcyAyLjAuMS4gRWRpdCB0aGUgZ2VuZXJhdG9yLCBub3QgdGhpcyBmaWxlLgojCiMgT25lIHNjZW5hcmlvIHBlciBwcm9maWxlIHRoYXQgY2FycmllcyBDcmVhdG9yIG9ibGlnYXRpb25zLiBFYWNoIHNjZW5hcmlvCiMgZGVjbGFyZXMgdGhlIGVsZW1lbnRzIGl0IGNvdmVycyAoQGNvdmVyczopIGFuZCBhc3NlcnRzIGV2ZXJ5IG9uZSBvZiB0aGVtIG9uCiMgdGhlIGRvY3VtZW50IHRoZSBDcmVhdG9yIHByb2R1Y2VkIGZvciB0aGUgcmVmZXJlbmNlIHBhdGllbnQuIFdoaWNoIGZvcm0gdGhlCiMgYXNzZXJ0aW9uIHRha2VzIGZvbGxvd3MgdGhlIG9ibGlnYXRpb24gYW5kIHRoZSByZWZlcmVuY2UgZGF0YToKIyAgIFNIQUxMOnBvcHVsYXRlICAgICAgICAgICAgICAgICAgICAgcHJlc2VudCBpbiBldmVyeSBpbnN0YW5jZQojICAgU0hBTEw6cG9wdWxhdGUtaWYta25vd24gICAgICAgICAgICBwcmVzZW50IHdoZXJldmVyIHRoZSByZWZlcmVuY2UgZGF0YSBoYXMgaXQKIyAgIFNIQUxML1NIT1VMRDphYmxlLXRvLXBvcHVsYXRlICAgICAgcHJlc2VudCwgb3IgYXR0ZXN0ZWQgYnkgdGhlIHRlc3RlciB3aGVuIHRoZQojICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZlcmVuY2UgZGF0YSBjYW5ub3QgZXhlcmNpc2UgaXQKIyAgIE1BWTphYmxlLXRvLXBvcHVsYXRlICAgICAgICAgICAgICAgbG9nZ2VkLCBub3QgYXNzZXJ0ZWQKIyBFdmVyeSB0ZXN0IGNhc2UgYXNrcyBmb3IgdGhlIGRvY3VtZW50IG9uY2Ug4oCUIElUQiBydW5zIGVhY2ggc2NlbmFyaW8gYXMgaXRzIG93bgojIHRlc3QgY2FzZS4gQW4gSVBTIFNlcnZlciBpcyB0ZXN0ZWQgd2l0aG91dCB0aGUgcGFzdGUgYnkgaXBzLXNlcnZlci5mZWF0dXJlLgpAbGFuZzppdGItY29yZS1lbkBeMiBAZGlhbGVjdDpmaGlyLXZhbGlkYXRvckBeMiBAYWN0b3I6Q3JlYXRvciBAc3BlYzpobDcuZmhpci51di5pcHNAMi4wLjEKRmVhdHVyZTogSVBTIENyZWF0b3Ig4oCUIG9ibGlnYXRpb25zIG9mIGhsNy5maGlyLnV2LmlwcyAyLjAuMQogIEFuIElQUyBDcmVhdG9yIGFjdG9yIGlzIGEgc3lzdGVtIHdoaWNoIHByb2R1Y2VzL2Fzc2VtYmxlcy9jcmVhdGVzIGFuIElQUyBkb2N1bWVudC4KICBUaGUgcmVmZXJlbmNlIHBhdGllbnQgaXMgdGhlIElHJ3Mgb3duIGFsbC1zZWN0aW9ucyBleGFtcGxlLCBQYXRyaWNpYSBKT1JEQU5BCiAgKGlkZW50aWZpZXIgQUJDMTIzNCk6IGV2ZXJ5IGVsZW1lbnQgd2l0aCBhIENyZWF0b3Igb2JsaWdhdGlvbiB0aGF0IHRoZQogIGV4YW1wbGUgY2FycmllcyBtdXN0IGFwcGVhciBpbiB0aGUgZG9jdW1lbnQgdGhlIHN5c3RlbSBwcm9kdWNlcyBmb3IgaGVyLgoKICBCYWNrZ3JvdW5kOgogICAgR2l2ZW4gQ3JlYXRvciBpcyB0aGUgc3lzdGVtIHVuZGVyIHRlc3QKICAgIEFuZCBGSElSVmFsaWRhdG9yIGlzIGEgZmhpci12YWxpZGF0b3IgYXQgImh0dHA6Ly9maGlyLXZhbGlkYXRvcjo4MDgwIgogICAgQW5kIEZISVJWYWxpZGF0b3IgaXMgbG9hZGVkIHdpdGggcGFja2FnZSAiaGw3LmZoaXIudXYuaXBzIzIuMC4xIgogICAgQW5kIENyZWF0b3IgaXMgaW5mb3JtZWQgIkxvYWQgdGhlIHJlZmVyZW5jZSBwYXRpZW50IFBhdHJpY2lhIEpPUkRBTkEgKGlkZW50aWZpZXIgQUJDMTIzNCkgaW50byB5b3VyIHN5c3RlbSBmcm9tIGh0dHBzOi8vaGw3Lm9yZy9maGlyL3V2L2lwcy9CdW5kbGUtYnVuZGxlLWlwcy1hbGwtc2VjdGlvbnMuanNvbiwgdGhlbiBleHBvcnQgaGVyIEludGVybmF0aW9uYWwgUGF0aWVudCBTdW1tYXJ5IGFzIGEgRkhJUiBkb2N1bWVudCBCdW5kbGUuIgogICAgQW5kIENyZWF0b3IgaXMgYXNrZWQgZm9yICRpcHMgd2l0aCAiUGFzdGUgdGhlIGV4cG9ydGVkIElQUyBCdW5kbGUgKEpTT04pIgogICAgQW5kICRpcHMgaXMgYSBGSElSIHJlc291cmNlCgogIFJ1bGU6IFRoZSBkb2N1bWVudCBhcyBhIHdob2xlIGNvbmZvcm1zCgogICAgQHByb2ZpbGU6QnVuZGxlLXV2LWlwcwogICAgU2NlbmFyaW86IGlwcy1jcmVhdG9yLTAwMCBUaGUgZXhwb3J0ZWQgZG9jdW1lbnQgaXMgYSB2YWxpZCBJUFMgQnVuZGxlCiAgICAgIFRoZW4gJGlwcyBzaG91bGQgY29uZm9ybSB0byAiaHR0cDovL2hsNy5vcmcvZmhpci91di9pcHMvU3RydWN0dXJlRGVmaW5pdGlvbi9CdW5kbGUtdXYtaXBzIiBpZ25vcmluZyBzbGljaW5nIGVycm9ycwogICAgICBBbmQgJGlwcyBhdCAiQnVuZGxlLnR5cGUiIHNob3VsZCBiZSAiZG9jdW1lbnQiCgogIFJ1bGU6IFRoZSBkb2N1bWVudDogQnVuZGxlIGFuZCBDb21wb3NpdGlvbgoKICAgIEBwcm9maWxlOkJ1bmRsZS11di1pcHMKICAgIEBjb3ZlcnM6QnVuZGxlLmlkZW50aWZpZXIgQGNvdmVyczpCdW5kbGUudGltZXN0YW1wIEBjb3ZlcnM6QnVuZGxlLmVudHJ5OmNvbXBvc2l0aW9uCiAgICBTY2VuYXJpbzogaXBzLWNyZWF0b3ItMDAxIEJ1bmRsZSAoSVBTKSDigJQgdGhlIENyZWF0b3IgcG9wdWxhdGVzIGlkZW50aWZpZXIsIHRpbWVzdGFtcCwgZW50cnk6Y29tcG9zaXRpb24KICAgICAgIyBCdW5kbGUuaWRlbnRpZmllciAoU0hBTEw6cG9wdWxhdGUpCiAgICAgIFRoZW4gJGlwcyBhdCAiQnVuZGxlLmlkZW50aWZpZXIuZXhpc3RzKCkiIHNob3VsZCBiZSB0cnVlCiAgICAgICMgQnVuZGxlLnRpbWVzdGFtcCAoU0hBTEw6cG9wdWxhdGUpCiAgICAgIFRoZW4gJGlwcyBhdCAiQnVuZGxlLnRpbWVzdGFtcC5leGlzdHMoKSIgc2hvdWxkIGJlIHRydWUKICAgICAgIyBCdW5kbGUuZW50cnk6Y29tcG9zaXRpb24gKFNIQUxMOnBvcHVsYXRlKQogICAgICBUaGVuICRpcHMgYXQgIkJ1bmRsZS5lbnRyeS53aGVyZShyZXNvdXJjZS5vZlR5cGUoQ29tcG9zaXRpb24pLmV4aXN0cygpKS5leGlzdHMoKSIgc2hvdWxkIGJlIHRydWUKCiAgICBAcHJvZmlsZTpDb21wb3NpdGlvbi11di1pcHMKICAgIEBjb3ZlcnM6Q29tcG9zaXRpb24ubWV0YS5wcm9maWxlIEBjb3ZlcnM6Q29tcG9zaXRpb24udGV4dCBAY292ZXJzOkNvbXBvc2l0aW9uLmlkZW50aWZpZXIgQGNvdmVyczpDb21wb3NpdGlvbi5zdGF0dXMKICAgIEBjb3ZlcnM6Q29tcG9zaXRpb24udHlwZSBAY292ZXJzOkNvbXBvc2l0aW9uLnN1YmplY3QgQGNvdmVyczpDb21wb3NpdGlvbi5zdWJqZWN0LnJlZmVyZW5jZSBAY292ZXJzOkNvbXBvc2l0aW9uLmRhdGUKICAgIEBjb3ZlcnM6Q29tcG9zaXRpb24uYXV0aG9yIEBjb3ZlcnM6Q29tcG9zaXRpb24udGl0bGUgQGNvdmVyczpDb21wb3NpdGlvbi5hdHRlc3RlciBAY292ZXJzOkNvbXBvc2l0aW9uLmF0dGVzdGVyLm1vZGUKICAgIEBjb3ZlcnM6Q29tcG9zaXRpb24uYXR0ZXN0ZXIudGltZSBAY292ZXJzOkNvbXBvc2l0aW9uLmF0dGVzdGVyLnBhcnR5IEBjb3ZlcnM6Q29tcG9zaXRpb24uY3VzdG9kaWFuIEBjb3ZlcnM6Q29tcG9zaXRpb24uZXZlbnQ6Y2FyZVByb3Zpc2lvbmluZ0V2ZW50CiAgICBAY292ZXJzOkNvbXBvc2l0aW9uLmV2ZW50OmNhcmVQcm92aXNpb25pbmdFdmVudC5jb2RlIEBjb3ZlcnM6Q29tcG9zaXRpb24uZXZlbnQ6Y2FyZVByb3Zpc2lvbmluZ0V2ZW50LnBlcmlvZCBAY292ZXJzOkNvbXBvc2l0aW9uLnNlY3Rpb24udGl0bGUgQGNvdmVyczpDb21wb3NpdGlvbi5zZWN0aW9uLnRleHQKICAgIEBjb3ZlcnM6Q29tcG9zaXRpb24uc2VjdGlvbjpzZWN0aW9uUHJvYmxlbXMgQGNvdmVyczpDb21wb3NpdGlvbi5zZWN0aW9uOnNlY3Rpb25Qcm9ibGVtcy50aXRsZSBAY292ZXJzOkNvbXBvc2l0aW9uLnNlY3Rpb246c2VjdGlvblByb2JsZW1zLnRleHQgQGNvdmVyczpDb21wb3NpdGlvbi5zZWN0aW9uOnNlY3Rpb25Qcm9ibGVtcy5lbnRyeTpwcm9ibGVtCiAgICBAY292ZXJzOkNvbXBvc2l0aW9uLnNlY3Rpb246c2VjdGlvblByb2JsZW1zLmVtcHR5UmVhc29uIEBjb3ZlcnM6Q29tcG9zaXRpb24uc2VjdGlvbjpzZWN0aW9uQWxsZXJnaWVzIEBjb3ZlcnM6Q29tcG9zaXRpb24uc2VjdGlvbjpzZWN0aW9uQWxsZXJnaWVzLnRpdGxlIEBjb3ZlcnM6Q29tcG9zaXRpb24uc2VjdGlvbjpzZWN0aW9uQWxsZXJnaWVzLnRleHQKICAgIEBjb3ZlcnM6Q29tcG9zaXRpb24uc2VjdGlvbjpzZWN0aW9uQWxsZXJnaWVzLmVudHJ5OmFsbGVyZ3lPckludG9sZXJhbmNlIEBjb3ZlcnM6Q29tcG9zaXRpb24uc2VjdGlvbjpzZWN0aW9uQWxsZXJnaWVzLmVtcHR5UmVhc29uIEBjb3ZlcnM6Q29tcG9zaXRpb24uc2VjdGlvbjpzZWN0aW9uTWVkaWNhdGlvbnMgQGNvdmVyczpDb21wb3NpdGlvbi5zZWN0aW9uOnNlY3Rpb25NZWRpY2F0aW9ucy50aXRsZQogICAgQGNvdmVyczpDb21wb3NpdGlvbi5zZWN0aW9uOnNlY3Rpb25NZWRpY2F0aW9ucy50ZXh0IEBjb3ZlcnM6Q29tcG9zaXRpb24uc2VjdGlvbjpzZWN0aW9uTWVkaWNhdGlvbnMuZW50cnk6bWVkaWNhdGlvblN0YXRlbWVudE9yUmVxdWVzdCBAY292ZXJzOkNvbXBvc2l0aW9uLnNlY3Rpb246c2VjdGlvbk1lZGljYXRpb25zLmVtcHR5UmVhc29uIEBjb3ZlcnM6Q29tcG9zaXRpb24uc2VjdGlvbjpzZWN0aW9uSW1tdW5pemF0aW9ucwogICAgQGNvdmVyczpDb21wb3NpdGlvbi5zZWN0aW9uOnNlY3Rpb25JbW11bml6YXRpb25zLnRpdGxlIEBjb3ZlcnM6Q29tcG9zaXRpb24uc2VjdGlvbjpzZWN0aW9uSW1tdW5pemF0aW9ucy50ZXh0IEBjb3ZlcnM6Q29tcG9zaXRpb24uc2VjdGlvbjpzZWN0aW9uSW1tdW5pemF0aW9ucy5lbnRyeTppbW11bml6YXRpb24gQGNvdmVyczpDb21wb3NpdGlvbi5zZWN0aW9uOnNlY3Rpb25SZXN1bHRzCiAgICBAY292ZXJzOkNvbXBvc2l0aW9uLnNlY3Rpb246c2VjdGlvblJlc3VsdHMudGl0bGUgQGNvdmVyczpDb21wb3NpdGlvbi5zZWN0aW9uOnNlY3Rpb25SZXN1bHRzLnRleHQgQGNvdmVyczpDb21wb3NpdGlvbi5zZWN0aW9uOnNlY3Rpb25SZXN1bHRzLmVudHJ5OnJlc3VsdHMtb2JzZXJ2YXRpb24tbGFib3JhdG9yeS1wYXRob2xvZ3kgQGNvdmVyczpDb21wb3NpdGlvbi5zZWN0aW9uOnNlY3Rpb25SZXN1bHRzLmVudHJ5OnJlc3VsdHMtb2JzZXJ2YXRpb24tcmFkaW9sb2d5CiAgICBAY292ZXJzOkNvbXBvc2l0aW9uLnNlY3Rpb246c2VjdGlvblByb2NlZHVyZXNIeCBAY292ZXJzOkNvbXBvc2l0aW9uLnNlY3Rpb246c2VjdGlvblByb2NlZHVyZXNIeC50aXRsZSBAY292ZXJzOkNvbXBvc2l0aW9uLnNlY3Rpb246c2VjdGlvblByb2NlZHVyZXNIeC50ZXh0IEBjb3ZlcnM6Q29tcG9zaXRpb24uc2VjdGlvbjpzZWN0aW9uUHJvY2VkdXJlc0h4LmVudHJ5OnByb2NlZHVyZQogICAgQGNvdmVyczpDb21wb3NpdGlvbi5zZWN0aW9uOnNlY3Rpb25NZWRpY2FsRGV2aWNlcyBAY292ZXJzOkNvbXBvc2l0aW9uLnNlY3Rpb246c2VjdGlvbk1lZGljYWxEZXZpY2VzLnRpdGxlIEBjb3ZlcnM6Q29tcG9zaXRpb24uc2VjdGlvbjpzZWN0aW9uTWVkaWNhbERldmljZXMudGV4dCBAY292ZXJzOkNvbXBvc2l0aW9uLnNlY3Rpb246c2VjdGlvbk1lZGljYWxEZXZpY2VzLmVudHJ5OmRldmljZVN0YXRlbWVudAogICAgQGNvdmVyczpDb21wb3NpdGlvbi5zZWN0aW9uOnNlY3Rpb25BZHZhbmNlRGlyZWN0aXZlcy50aXRsZSBAY292ZXJzOkNvbXBvc2l0aW9uLnNlY3Rpb246c2VjdGlvbkFkdmFuY2VEaXJlY3RpdmVzLnRleHQgQGNvdmVyczpDb21wb3NpdGlvbi5zZWN0aW9uOnNlY3Rpb25BbGVydHMudGl0bGUgQGNvdmVyczpDb21wb3NpdGlvbi5zZWN0aW9uOnNlY3Rpb25BbGVydHMudGV4dAogICAgQGNvdmVyczpDb21wb3NpdGlvbi5zZWN0aW9uOnNlY3Rpb25GdW5jdGlvbmFsU3RhdHVzLnRpdGxlIEBjb3ZlcnM6Q29tcG9zaXRpb24uc2VjdGlvbjpzZWN0aW9uRnVuY3Rpb25hbFN0YXR1cy50ZXh0IEBjb3ZlcnM6Q29tcG9zaXRpb24uc2VjdGlvbjpzZWN0aW9uUGFzdFByb2JsZW1zLnRpdGxlIEBjb3ZlcnM6Q29tcG9zaXRpb24uc2VjdGlvbjpzZWN0aW9uUGFzdFByb2JsZW1zLnRleHQKICAgIEBjb3ZlcnM6Q29tcG9zaXRpb24uc2VjdGlvbjpzZWN0aW9uUHJlZ25hbmN5SHgudGl0bGUgQGNvdmVyczpDb21wb3NpdGlvbi5zZWN0aW9uOnNlY3Rpb25QcmVnbmFuY3lIeC50ZXh0IEBjb3ZlcnM6Q29tcG9zaXRpb24uc2VjdGlvbjpzZWN0aW9uUGF0aWVudFN0b3J5LnRpdGxlIEBjb3ZlcnM6Q29tcG9zaXRpb24uc2VjdGlvbjpzZWN0aW9uUGF0aWVudFN0b3J5LnRleHQKICAgIEBjb3ZlcnM6Q29tcG9zaXRpb24uc2VjdGlvbjpzZWN0aW9uUGxhbk9mQ2FyZS50aXRsZSBAY292ZXJzOkNvbXBvc2l0aW9uLnNlY3Rpb246c2VjdGlvblBsYW5PZkNhcmUudGV4dCBAY292ZXJzOkNvbXBvc2l0aW9uLnNlY3Rpb246c2VjdGlvblNvY2lhbEhpc3RvcnkudGl0bGUgQGNvdmVyczpDb21wb3NpdGlvbi5zZWN0aW9uOnNlY3Rpb25Tb2NpYWxIaXN0b3J5LnRleHQKICAgIEBjb3ZlcnM6Q29tcG9zaXRpb24uc2VjdGlvbjpzZWN0aW9uVml0YWxTaWducy50aXRsZSBAY292ZXJzOkNvbXBvc2l0aW9uLnNlY3Rpb246c2VjdGlvblZpdGFsU2lnbnMudGV4dAogICAgU2NlbmFyaW86IGlwcy1jcmVhdG9yLTAwMiBDb21wb3NpdGlvbiAoSVBTKSDigJQgdGhlIENyZWF0b3IgcG9wdWxhdGVzIHN0YXR1cywgdHlwZSwgc3ViamVjdCwgc3ViamVjdC5yZWZlcmVuY2UgYW5kIG1vcmU7IDIzIGVsZW1lbnRzIHdoZW4ga25vd24KICAgICAgIyBJbnN0YW5jZXM6IEJ1bmRsZS5lbnRyeS5yZXNvdXJjZS5vZlR5cGUoQ29tcG9zaXRpb24pCiAgICAgICMgQ29tcG9zaXRpb24udGV4dCAoU0hBTEw6cG9wdWxhdGUtaWYta25vd24pCiAgICAgIFRoZW4gJGlwcyBhdCAiQnVuZGxlLmVudHJ5LnJlc291cmNlLm9mVHlwZShDb21wb3NpdGlvbikuYWxsKHRleHQuZXhpc3RzKCkpIiBzaG91bGQgYmUgdHJ1ZQogICAgICAjIENvbXBvc2l0aW9uLmlkZW50aWZpZXIgKFNIQUxMOnBvcHVsYXRlLWlmLWtub3duKQogICAgICBUaGVuICRpcHMgYXQgIkJ1bmRsZS5lbnRyeS5yZXNvdXJjZS5vZlR5cGUoQ29tcG9zaXRpb24pLmFsbChpZGVudGlmaWVyLmV4aXN0cygpKSIgc2hvdWxkIGJlIHRydWUKICAgICAgIyBDb21wb3NpdGlvbi5zdGF0dXMgKFNIQUxMOnBvcHVsYXRlKQogICAgICBUaGVuICRpcHMgYXQgIkJ1bmRsZS5lbnRyeS5yZXNvdXJjZS5vZlR5cGUoQ29tcG9zaXRpb24pLmFsbChzdGF0dXMuZXhpc3RzKCkpIiBzaG91bGQgYmUgdHJ1ZQogICAgICAjIENvbXBvc2l0aW9uLnR5cGUgKFNIQUxMOnBvcHVsYXRlKQogICAgICBUaGVuICRpcHMgYXQgIkJ1bmRsZS5lbnRyeS5yZXNvdXJjZS5vZlR5cGUoQ29tcG9zaXRpb24pLmFsbCh0eXBlLmV4aXN0cygpKSIgc2hvdWxkIGJlIHRydWUKICAgICAgIyBDb21wb3NpdGlvbi5zdWJqZWN0IChTSEFMTDpwb3B1bGF0ZSkKICAgICAgVGhlbiAkaXBzIGF0ICJCdW5kbGUuZW50cnkucmVzb3VyY2Uub2ZUeXBlKENvbXBvc2l0aW9uKS5hbGwoc3ViamVjdC5leGlzdHMoKSkiIHNob3VsZCBiZSB0cnVlCiAgICAgICMgQ29tcG9zaXRpb24uc3ViamVjdC5yZWZlcmVuY2UgKFNIQUxMOnBvcHVsYXRlKQogICAgICBUaGVuICRpcHMgYXQgIkJ1bmRsZS5lbnRyeS5yZXNvdXJjZS5vZlR5cGUoQ29tcG9zaXRpb24pLnN1YmplY3QuYWxsKHJlZmVyZW5jZS5leGlzdHMoKSkiIHNob3VsZCBiZSB0cnVlCiAgICAgICMgQ29tcG9zaXRpb24uZGF0ZSAoU0hBTEw6cG9wdWxhdGUpCiAgICAgIFRoZW4gJGlwcyBhdCAiQnVuZGxlLmVudHJ5LnJlc291cmNlLm9mVHlwZShDb21wb3NpdGlvbikuYWxsKGRhdGUuZXhpc3RzKCkpIiBzaG91bGQgYmUgdHJ1ZQogICAgICAjIENvbXBvc2l0aW9uLmF1dGhvciAoU0hBTEw6cG9wdWxhdGUpCiAgICAgIFRoZW4gJGlwcyBhdCAiQnVuZGxlLmVudHJ5LnJlc291cmNlLm9mVHlwZShDb21wb3NpdGlvbikuYWxsKGF1dGhvci5leGlzdHMoKSkiIHNob3VsZCBiZSB0cnVlCiAgICAgICMgQ29tcG9zaXRpb24udGl0bGUgKFNIQUxMOnBvcHVsYXRlKQogICAgICBUaGVuICRpcHMgYXQgIkJ1bmRsZS5lbnRyeS5yZXNvdXJjZS5vZlR5cGUoQ29tcG9zaXRpb24pLmFsbCh0aXRsZS5leGlzdHMoKSkiIHNob3VsZCBiZSB0cnVlCiAgICAgICMgQ29tcG9zaXRpb24uYXR0ZXN0ZXIgKFNIQUxMOnBvcHVsYXRlLWlmLWtub3duKQogICAgICBUaGVuICRpcHMgYXQgIkJ1bmRsZS5lbnRyeS5yZXNvdXJjZS5vZlR5cGUoQ29tcG9zaXRpb24pLmFsbChhdHRlc3Rlci5leGlzdHMoKSkiIHNob3VsZCBiZSB0cnVlCiAgICAgICMgQ29tcG9zaXRpb24uYXR0ZXN0ZXIubW9kZSAoU0hBTEw6cG9wdWxhdGUpCiAgICAgIFRoZW4gJGlwcyBhdCAiQnVuZGxlLmVudHJ5LnJlc291cmNlLm9mVHlwZShDb21wb3NpdGlvbikuYXR0ZXN0ZXIuYWxsKG1vZGUuZXhpc3RzKCkpIiBzaG91bGQgYmUgdHJ1ZQogICAgICAjIENvbXBvc2l0aW9uLmF0dGVzdGVyLnRpbWUgKFNIQUxMOnBvcHVsYXRlLWlmLWtub3duKQogICAgICBUaGVuICRpcHMgYXQgIkJ1bmRsZS5lbnRyeS5yZXNvdXJjZS5vZlR5cGUoQ29tcG9zaXRpb24pLmF0dGVzdGVyLmFsbCh0aW1lLmV4aXN0cygpKSIgc2hvdWxkIGJlIHRydWUKICAgICAgIyBDb21wb3NpdGlvbi5hdHRlc3Rlci5wYXJ0eSAoU0hBTEw6cG9wdWxhdGUtaWYta25vd24pCiAgICAgIFRoZW4gJGlwcyBhdCAiQnVuZGxlLmVudHJ5LnJlc291cmNlLm9mVHlwZShDb21wb3NpdGlvbikuYXR0ZXN0ZXIuYWxsKHBhcnR5LmV4aXN0cygpKSIgc2hvdWxkIGJlIHRydWUKICAgICAgIyBDb21wb3NpdGlvbi5jdXN0b2RpYW4gKFNIQUxMOnBvcHVsYXRlLWlmLWtub3duKQogICAgICBUaGVuICRpcHMgYXQgIkJ1bmRsZS5lbnRyeS5yZXNvdXJjZS5vZlR5cGUoQ29tcG9zaXRpb24pLmFsbChjdXN0b2RpYW4uZXhpc3RzKCkpIiBzaG91bGQgYmUgdHJ1ZQogICAgICAjIENvbXBvc2l0aW9uLmV2ZW50OmNhcmVQcm92aXNpb25pbmdFdmVudCAoU0hBTEw6cG9wdWxhdGUtaWYta25vd24pCiAgICAgIFRoZW4gJGlwcyBhdCAiQnVuZGxlLmVudHJ5LnJlc291cmNlLm9mVHlwZShDb21wb3NpdGlvbikuYWxsKGV2ZW50LndoZXJlKGNvZGUuY29kaW5nLndoZXJlKHN5c3RlbT0naHR0cDovL3Rlcm1pbm9sb2d5LmhsNy5vcmcvQ29kZVN5c3RlbS92My1BY3RDbGFzcycgYW5kIGNvZGU9J1BDUFInKS5leGlzdHMoKSkuZXhpc3RzKCkpIiBzaG91bGQgYmUgdHJ1ZQogICAgICAjIENvbXBvc2l0aW9uLmV2ZW50OmNhcmVQcm92aXNpb25pbmdFdmVudC5jb2RlIChTSEFMTDpwb3B1bGF0ZSkKICAgICAgVGhlbiAkaXBzIGF0ICJCdW5kbGUuZW50cnkucmVzb3VyY2Uub2ZUeXBlKENvbXBvc2l0aW9uKS5ldmVudC53aGVyZShjb2RlLmNvZGluZy53aGVyZShzeXN0ZW09J2h0dHA6Ly90ZXJtaW5vbG9neS5obDcub3JnL0NvZGVTeXN0ZW0vdjMtQWN0Q2xhc3MnIGFuZCBjb2RlPSdQQ1BSJykuZXhpc3RzKCkpLmFsbChjb2RlLmV4aXN0cygpKSIgc2hvdWxkIGJlIHRydWUKICAgICAgIyBDb21wb3NpdGlvbi5ldmVudDpjYXJlUHJvdmlzaW9uaW5nRXZlbnQucGVyaW9kIChTSEFMTDpwb3B1bGF0ZS1pZi1rbm93bikKICAgICAgVGhlbiAkaXBzIGF0ICJCdW5kbGUuZW50cnkucmVzb3VyY2Uub2ZUeXBlKENvbXBvc2l0aW9uKS5ldmVudC53aGVyZShjb2RlLmNvZGluZy53aGVyZShzeXN0ZW09J2h0dHA6Ly90ZXJtaW5vbG9neS5obDcub3JnL0NvZGVTeXN0ZW0vdjMtQWN0Q2xhc3MnIGFuZCBjb2RlPSdQQ1BSJykuZXhpc3RzKCkpLmFsbChwZXJpb2QuZXhpc3RzKCkpIiBzaG91bGQgYmUgdHJ1ZQogICAgICAjIENvbXBvc2l0aW9uLnNlY3Rpb24udGl0bGUgKFNIQUxMOnBvcHVsYXRlKQogICAgICBUaGVuICRpcHMgYXQgIkJ1bmRsZS5lbnRyeS5yZXNvdXJjZS5vZlR5cGUoQ29tcG9zaXRpb24pLnNlY3Rpb24uYWxsKHRpdGxlLmV4aXN0cygpKSIgc2hvdWxkIGJlIHRydWUKICAgICAgIyBDb21wb3NpdGlvbi5zZWN0aW9uLnRleHQgKFNIQUxMOnBvcHVsYXRlKQogICAgICBUaGVuICRpcHMgYXQgIkJ1bmRsZS5lbnRyeS5yZXNvdXJjZS5vZlR5cGUoQ29tcG9zaXRpb24pLnNlY3Rpb24uYWxsKHRleHQuZXhpc3RzKCkpIiBzaG91bGQgYmUgdHJ1ZQogICAgICAjIENvbXBvc2l0aW9uLnNlY3Rpb246c2VjdGlvblByb2JsZW1zIChTSEFMTDpwb3B1bGF0ZSkKICAgICAgVGhlbiAkaXBzIGF0ICJCdW5kbGUuZW50cnkucmVzb3VyY2Uub2ZUeXBlKENvbXBvc2l0aW9uKS5hbGwoc2VjdGlvbi53aGVyZShjb2RlLmNvZGluZy53aGVyZShzeXN0ZW09J2h0dHA6Ly9sb2luYy5vcmcnIGFuZCBjb2RlPScxMTQ1MC00JykuZXhpc3RzKCkpLmV4aXN0cygpKSIgc2hvdWxkIGJlIHRydWUKICAgICAgIyBDb21wb3NpdGlvbi5zZWN0aW9uOnNlY3Rpb25Qcm9ibGVtcy50aXRsZSAoU0hBTEw6cG9wdWxhdGUpCiAgICAgIFRoZW4gJGlwcyBhdCAiQnVuZGxlLmVudHJ5LnJlc291cmNlLm9mVHlwZShDb21wb3NpdGlvbikuc2VjdGlvbi53aGVyZShjb2RlLmNvZGluZy53aGVyZShzeXN0ZW09J2h0dHA6Ly9sb2luYy5vcmcnIGFuZCBjb2RlPScxMTQ1MC00JykuZXhpc3RzKCkpLmFsbCh0aXRsZS5leGlzdHMoKSkiIHNob3VsZCBiZSB0cnVlCiAgICAgICMgQ29tcG9zaXRpb24uc2VjdGlvbjpzZWN0aW9uUHJvYmxlbXMudGV4dCAoU0hBTEw6cG9wdWxhdGUpCiAgICAgIFRoZW4gJGlwcyBhdCAiQnVuZGxlLmVudHJ5LnJlc291cmNlLm9mVHlwZShDb21wb3NpdGlvbikuc2VjdGlvbi53aGVyZShjb2RlLmNvZGluZy53aGVyZShzeXN0ZW09J2h0dHA6Ly9sb2luYy5vcmcnIGFuZCBjb2RlPScxMTQ1MC00JykuZXhpc3RzKCkpLmFsbCh0ZXh0LmV4aXN0cygpKSIgc2hvdWxkIGJlIHRydWUKICAgICAgIyBDb21wb3NpdGlvbi5zZWN0aW9uOnNlY3Rpb25Qcm9ibGVtcy5lbnRyeTpwcm9ibGVtIChTSEFMTDphYmxlLXRvLXBvcHVsYXRlLCBTSE9VTEQ6cG9wdWxhdGUtaWYta25vd24pCiAgICAgIFRoZW4gJGlwcyBhdCAiQnVuZGxlLmVudHJ5LnJlc291cmNlLm9mVHlwZShDb21wb3NpdGlvbikuc2VjdGlvbi53aGVyZShjb2RlLmNvZGluZy53aGVyZShzeXN0ZW09J2h0dHA6Ly9sb2luYy5vcmcnIGFuZCBjb2RlPScxMTQ1MC00JykuZXhpc3RzKCkpLmFsbChlbnRyeS53aGVyZShyZWZlcmVuY2UuY29udGFpbnMoJ0NvbmRpdGlvbicpIG9yIHJlZmVyZW5jZS5leGlzdHMoKSkuZXhpc3RzKCkpIGFuZCBCdW5kbGUuZW50cnkucmVzb3VyY2Uub2ZUeXBlKENvbmRpdGlvbikuZXhpc3RzKCkiIHNob3VsZCBiZSB0cnVlCiAgICAgICMgQ29tcG9zaXRpb24uc2VjdGlvbjpzZWN0aW9uQWxsZXJnaWVzIChTSEFMTDpwb3B1bGF0ZSkKICAgICAgVGhlbiAkaXBzIGF0ICJCdW5kbGUuZW50cnkucmVzb3VyY2Uub2ZUeXBlKENvbXBvc2l0aW9uKS5hbGwoc2VjdGlvbi53aGVyZShjb2RlLmNvZGluZy53aGVyZShzeXN0ZW09J2h0dHA6Ly9sb2luYy5vcmcnIGFuZCBjb2RlPSc0ODc2NS0yJykuZXhpc3RzKCkpLmV4aXN0cygpKSIgc2hvdWxkIGJlIHRydWUKICAgICAgIyBDb21wb3NpdGlvbi5zZWN0aW9uOnNlY3Rpb25BbGxlcmdpZXMudGl0bGUgKFNIQUxMOnBvcHVsYXRlKQogICAgICBUaGVuICRpcHMgYXQgIkJ1bmRsZS5lbnRyeS5yZXNvdXJjZS5vZlR5cGUoQ29tcG9zaXRpb24pLnNlY3Rpb24ud2hlcmUoY29kZS5jb2Rpbmcud2hlcmUoc3lzdGVtPSdodHRwOi8vbG9pbmMub3JnJyBhbmQgY29kZT0nNDg3NjUtMicpLmV4aXN0cygpKS5hbGwodGl0bGUuZXhpc3RzKCkpIiBzaG91bGQgYmUgdHJ1ZQogICAgICAjIENvbXBvc2l0aW9uLnNlY3Rpb246c2VjdGlvbkFsbGVyZ2llcy50ZXh0IChTSEFMTDpwb3B1bGF0ZSkKICAgICAgVGhlbiAkaXBzIGF0ICJCdW5kbGUuZW50cnkucmVzb3VyY2Uub2ZUeXBlKENvbXBvc2l0aW9uKS5zZWN0aW9uLndoZXJlKGNvZGUuY29kaW5nLndoZXJlKHN5c3RlbT0naHR0cDovL2xvaW5jLm9yZycgYW5kIGNvZGU9JzQ4NzY1LTInKS5leGlzdHMoKSkuYWxsKHRleHQuZXhpc3RzKCkpIiBzaG91bGQgYmUgdHJ1ZQogICAgICAjIENvbXBvc2l0aW9uLnNlY3Rpb246c2VjdGlvbkFsbGVyZ2llcy5lbnRyeTphbGxlcmd5T3JJbnRvbGVyYW5jZSAoU0hBTEw6YWJsZS10by1wb3B1bGF0ZSwgU0hPVUxEOnBvcHVsYXRlLWlmLWtub3duKQogICAgICBUaGVuICRpcHMgYXQgIkJ1bmRsZS5lbnRyeS5yZXNvdXJjZS5vZlR5cGUoQ29tcG9zaXRpb24pLnNlY3Rpb24ud2hlcmUoY29kZS5jb2Rpbmcud2hlcmUoc3lzdGVtPSdodHRwOi8vbG9pbmMub3JnJyBhbmQgY29kZT0nNDg3NjUtMicpLmV4aXN0cygpKS5hbGwoZW50cnkud2hlcmUocmVmZXJlbmNlLmNvbnRhaW5zKCdBbGxlcmd5SW50b2xlcmFuY2UnKSBvciByZWZlcmVuY2UuZXhpc3RzKCkpLmV4aXN0cygpKSBhbmQgQnVuZGxlLmVudHJ5LnJlc291cmNlLm9mVHlwZShBbGxlcmd5SW50b2xlcmFuY2UpLmV4aXN0cygpIiBzaG91bGQgYmUgdHJ1ZQogICAgICAjIENvbXBvc2l0aW9uLnNlY3Rpb246c2VjdGlvbk1lZGljYXRpb25zIChTSEFMTDpwb3B1bGF0ZSkKICAgICAgVGhlbiAkaXBzIGF0ICJCdW5kbGUuZW50cnkucmVzb3VyY2Uub2ZUeXBlKENvbXBvc2l0aW9uKS5hbGwoc2VjdGlvbi53aGVyZShjb2RlLmNvZGluZy53aGVyZShzeXN0ZW09J2h0dHA6Ly9sb2luYy5vcmcnIGFuZCBjb2RlPScxMDE2MC0wJykuZXhpc3RzKCkpLmV4aXN0cygpKSIgc2hvdWxkIGJlIHRydWUKICAgICAgIyBDb21wb3NpdGlvbi5zZWN0aW9uOnNlY3Rpb25NZWRpY2F0aW9ucy50aXRsZSAoU0hBTEw6cG9wdWxhdGUpCiAgICAgIFRoZW4gJGlwcyBhdCAiQnVuZGxlLmVudHJ5LnJlc291cmNlLm9mVHlwZShDb21wb3NpdGlvbikuc2VjdGlvbi53aGVyZShjb2RlLmNvZGluZy53aGVyZShzeXN0ZW09J2h0dHA6Ly9sb2luYy5vcmcnIGFuZCBjb2RlPScxMDE2MC0wJykuZXhpc3RzKCkpLmFsbCh0aXRsZS5leGlzdHMoKSkiIHNob3VsZCBiZSB0cnVlCiAgICAgICMgQ29tcG9zaXRpb24uc2VjdGlvbjpzZWN0aW9uTWVkaWNhdGlvbnMudGV4dCAoU0hBTEw6cG9wdWxhdGUpCiAgICAgIFRoZW4gJGlwcyBhdCAiQnVuZGxlLmVudHJ5LnJlc291cmNlLm9mVHlwZShDb21wb3NpdGlvbikuc2VjdGlvbi53aGVyZShjb2RlLmNvZGluZy53aGVyZShzeXN0ZW09J2h0dHA6Ly9sb2luYy5vcmcnIGFuZCBjb2RlPScxMDE2MC0wJykuZXhpc3RzKCkpLmFsbCh0ZXh0LmV4aXN0cygpKSIgc2hvdWxkIGJlIHRydWUKICAgICAgIyBDb21wb3NpdGlvbi5zZWN0aW9uOnNlY3Rpb25NZWRpY2F0aW9ucy5lbnRyeTptZWRpY2F0aW9uU3RhdGVtZW50T3JSZXF1ZXN0IChTSEFMTDphYmxlLXRvLXBvcHVsYXRlLCBTSE9VTEQ6cG9wdWxhdGUtaWYta25vd24pCiAgICAgIFRoZW4gJGlwcyBhdCAiQnVuZGxlLmVudHJ5LnJlc291cmNlLm9mVHlwZShDb21wb3NpdGlvbikuc2VjdGlvbi53aGVyZShjb2RlLmNvZGluZy53aGVyZShzeXN0ZW09J2h0dHA6Ly9sb2luYy5vcmcnIGFuZCBjb2RlPScxMDE2MC0wJykuZXhpc3RzKCkpLmFsbChlbnRyeS53aGVyZShyZWZlcmVuY2UuY29udGFpbnMoJ01lZGljYXRpb25TdGF0ZW1lbnQnKSBvciByZWZlcmVuY2UuZXhpc3RzKCkpLmV4aXN0cygpKSBhbmQgQnVuZGxlLmVudHJ5LnJlc291cmNlLm9mVHlwZShNZWRpY2F0aW9uU3RhdGVtZW50KS5leGlzdHMoKSIgc2hvdWxkIGJlIHRydWUKICAgICAgIyBDb21wb3NpdGlvbi5zZWN0aW9uOnNlY3Rpb25JbW11bml6YXRpb25zIChTSE9VTEQ6cG9wdWxhdGUtaWYta25vd24pCiAgICAgIFRoZW4gJGlwcyBhdCAiQnVuZGxlLmVudHJ5LnJlc291cmNlLm9mVHlwZShDb21wb3NpdGlvbikuYWxsKHNlY3Rpb24ud2hlcmUoY29kZS5jb2Rpbmcud2hlcmUoc3lzdGVtPSdodHRwOi8vbG9pbmMub3JnJyBhbmQgY29kZT0nMTEzNjktNicpLmV4aXN0cygpKS5leGlzdHMoKSkiIHNob3VsZCBiZSB0cnVlCiAgICAgICMgQ29tcG9zaXRpb24uc2VjdGlvbjpzZWN0aW9uSW1tdW5pemF0aW9ucy50aXRsZSAoU0hBTEw6cG9wdWxhdGUpCiAgICAgIFRoZW4gJGlwcyBhdCAiQnVuZGxlLmVudHJ5LnJlc291cmNlLm9mVHlwZShDb21wb3NpdGlvbikuc2VjdGlvbi53aGVyZShjb2RlLmNvZGluZy53aGVyZShzeXN0ZW09J2h0dHA6Ly9sb2luYy5vcmcnIGFuZCBjb2RlPScxMTM2OS02JykuZXhpc3RzKCkpLmFsbCh0aXRsZS5leGlzdHMoKSkiIHNob3VsZCBiZSB0cnVlCiAgICAgICMgQ29tcG9zaXRpb24uc2VjdGlvbjpzZWN0aW9uSW1tdW5pemF0aW9ucy50ZXh0IChTSEFMTDpwb3B1bGF0ZSkKICAgICAgVGhlbiAkaXBzIGF0ICJCdW5kbGUuZW50cnkucmVzb3VyY2Uub2ZUeXBlKENvbXBvc2l0aW9uKS5zZWN0aW9uLndoZXJlKGNvZGUuY29kaW5nLndoZXJlKHN5c3RlbT0naHR0cDovL2xvaW5jLm9yZycgYW5kIGNvZGU9JzExMzY5LTYnKS5leGlzdHMoKSkuYWxsKHRleHQuZXhpc3RzKCkpIiBzaG91bGQgYmUgdHJ1ZQogICAgICAjIENvbXBvc2l0aW9uLnNlY3Rpb246c2VjdGlvbkltbXVuaXphdGlvbnMuZW50cnk6aW1tdW5pemF0aW9uIChTSE9VTEQ6cG9wdWxhdGUtaWYta25vd24pCiAgICAgIFRoZW4gJGlwcyBhdCAiQnVuZGxlLmVudHJ5LnJlc291cmNlLm9mVHlwZShDb21wb3NpdGlvbikuc2VjdGlvbi53aGVyZShjb2RlLmNvZGluZy53aGVyZShzeXN0ZW09J2h0dHA6Ly9sb2luYy5vcmcnIGFuZCBjb2RlPScxMTM2OS02JykuZXhpc3RzKCkpLmFsbChlbnRyeS53aGVyZShyZWZlcmVuY2UuY29udGFpbnMoJ0ltbXVuaXphdGlvbicpIG9yIHJlZmVyZW5jZS5leGlzdHMoKSkuZXhpc3RzKCkpIGFuZCBCdW5kbGUuZW50cnkucmVzb3VyY2Uub2ZUeXBlKEltbXVuaXphdGlvbikuZXhpc3RzKCkiIHNob3VsZCBiZSB0cnVlCiAgICAgICMgQ29tcG9zaXRpb24uc2VjdGlvbjpzZWN0aW9uUmVzdWx0cyAoU0hPVUxEOnBvcHVsYXRlLWlmLWtub3duKQogICAgICBUaGVuICRpcHMgYXQgIkJ1bmRsZS5lbnRyeS5yZXNvdXJjZS5vZlR5cGUoQ29tcG9zaXRpb24pLmFsbChzZWN0aW9uLndoZXJlKGNvZGUuY29kaW5nLndoZXJlKHN5c3RlbT0naHR0cDovL2xvaW5jLm9yZycgYW5kIGNvZGU9JzMwOTU0LTInKS5leGlzdHMoKSkuZXhpc3RzKCkpIiBzaG91bGQgYmUgdHJ1ZQogICAgICAjIENvbXBvc2l0aW9uLnNlY3Rpb246c2VjdGlvblJlc3VsdHMudGl0bGUgKFNIQUxMOnBvcHVsYXRlKQogICAgICBUaGVuICRpcHMgYXQgIkJ1bmRsZS5lbnRyeS5yZXNvdXJjZS5vZlR5cGUoQ29tcG9zaXRpb24pLnNlY3Rpb24ud2hlcmUoY29kZS5jb2Rpbmcud2hlcmUoc3lzdGVtPSdodHRwOi8vbG9pbmMub3JnJyBhbmQgY29kZT0nMzA5NTQtMicpLmV4aXN0cygpKS5hbGwodGl0bGUuZXhpc3RzKCkpIiBzaG91bGQgYmUgdHJ1ZQogICAgICAjIENvbXBvc2l0aW9uLnNlY3Rpb246c2VjdGlvblJlc3VsdHMudGV4dCAoU0hBTEw6cG9wdWxhdGUpCiAgICAgIFRoZW4gJGlwcyBhdCAiQnVuZGxlLmVudHJ5LnJlc291cmNlLm9mVHlwZShDb21wb3NpdGlvbikuc2VjdGlvbi53aGVyZShjb2RlLmNvZGluZy53aGVyZShzeXN0ZW09J2h0dHA6Ly9sb2luYy5vcmcnIGFuZCBjb2RlPSczMDk1NC0yJykuZXhpc3RzKCkpLmFsbCh0ZXh0LmV4aXN0cygpKSIgc2hvdWxkIGJlIHRydWUKICAgICAgIyBDb21wb3NpdGlvbi5zZWN0aW9uOnNlY3Rpb25SZXN1bHRzLmVudHJ5OnJlc3VsdHMtb2JzZXJ2YXRpb24tbGFib3JhdG9yeS1wYXRob2xvZ3kgKFNIT1VMRDpwb3B1bGF0ZS1pZi1rbm93bikKICAgICAgVGhlbiAkaXBzIGF0ICJCdW5kbGUuZW50cnkucmVzb3VyY2Uub2ZUeXBlKENvbXBvc2l0aW9uKS5zZWN0aW9uLndoZXJlKGNvZGUuY29kaW5nLndoZXJlKHN5c3RlbT0naHR0cDovL2xvaW5jLm9yZycgYW5kIGNvZGU9JzMwOTU0LTInKS5leGlzdHMoKSkuYWxsKGVudHJ5LndoZXJlKHJlZmVyZW5jZS5jb250YWlucygnT2JzZXJ2YXRpb24nKSBvciByZWZlcmVuY2UuZXhpc3RzKCkpLmV4aXN0cygpKSBhbmQgQnVuZGxlLmVudHJ5LnJlc291cmNlLm9mVHlwZShPYnNlcnZhdGlvbikuZXhpc3RzKCkiIHNob3VsZCBiZSB0cnVlCiAgICAgICMgQ29tcG9zaXRpb24uc2VjdGlvbjpzZWN0aW9uUmVzdWx0cy5lbnRyeTpyZXN1bHRzLW9ic2VydmF0aW9uLXJhZGlvbG9neSAoU0hPVUxEOnBvcHVsYXRlLWlmLWtub3duKQogICAgICBUaGVuICRpcHMgYXQgIkJ1bmRsZS5lbnRyeS5yZXNvdXJjZS5vZlR5cGUoQ29tcG9zaXRpb24pLnNlY3Rpb24ud2hlcmUoY29kZS5jb2Rpbmcud2hlcmUoc3lzdGVtPSdodHRwOi8vbG9pbmMub3JnJyBhbmQgY29kZT0nMzA5NTQtMicpLmV4aXN0cygpKS5hbGwoZW50cnkud2hlcmUocmVmZXJlbmNlLmNvbnRhaW5zKCdPYnNlcnZhdGlvbicpIG9yIHJlZmVyZW5jZS5leGlzdHMoKSkuZXhpc3RzKCkpIGFuZCBCdW5kbGUuZW50cnkucmVzb3VyY2Uub2ZUeXBlKE9ic2VydmF0aW9uKS5leGlzdHMoKSIgc2hvdWxkIGJlIHRydWUKICAgICAgIyBDb21wb3NpdGlvbi5zZWN0aW9uOnNlY3Rpb25Qcm9jZWR1cmVzSHggKFNIT1VMRDpwb3B1bGF0ZS1pZi1rbm93bikKICAgICAgVGhlbiAkaXBzIGF0ICJCdW5kbGUuZW50cnkucmVzb3VyY2Uub2ZUeXBlKENvbXBvc2l0aW9uKS5hbGwoc2VjdGlvbi53aGVyZShjb2RlLmNvZGluZy53aGVyZShzeXN0ZW09J2h0dHA6Ly9sb2luYy5vcmcnIGFuZCBjb2RlPSc0NzUxOS00JykuZXhpc3RzKCkpLmV4aXN0cygpKSIgc2hvdWxkIGJlIHRydWUKICAgICAgIyBDb21wb3NpdGlvbi5zZWN0aW9uOnNlY3Rpb25Qcm9jZWR1cmVzSHgudGl0bGUgKFNIQUxMOnBvcHVsYXRlKQogICAgICBUaGVuICRpcHMgYXQgIkJ1bmRsZS5lbnRyeS5yZXNvdXJjZS5vZlR5cGUoQ29tcG9zaXRpb24pLnNlY3Rpb24ud2hlcmUoY29kZS5jb2Rpbmcud2hlcmUoc3lzdGVtPSdodHRwOi8vbG9pbmMub3JnJyBhbmQgY29kZT0nNDc1MTktNCcpLmV4aXN0cygpKS5hbGwodGl0bGUuZXhpc3RzKCkpIiBzaG91bGQgYmUgdHJ1ZQogICAgICAjIENvbXBvc2l0aW9uLnNlY3Rpb246c2VjdGlvblByb2NlZHVyZXNIeC50ZXh0IChTSEFMTDpwb3B1bGF0ZSkKICAgICAgVGhlbiAkaXBzIGF0ICJCdW5kbGUuZW50cnkucmVzb3VyY2Uub2ZUeXBlKENvbXBvc2l0aW9uKS5zZWN0aW9uLndoZXJlKGNvZGUuY29kaW5nLndoZXJlKHN5c3RlbT0naHR0cDovL2xvaW5jLm9yZycgYW5kIGNvZGU9JzQ3NTE5LTQnKS5leGlzdHMoKSkuYWxsKHRleHQuZXhpc3RzKCkpIiBzaG91bGQgYmUgdHJ1ZQogICAgICAjIENvbXBvc2l0aW9uLnNlY3Rpb246c2VjdGlvblByb2NlZHVyZXNIeC5lbnRyeTpwcm9jZWR1cmUgKFNIT1VMRDpwb3B1bGF0ZS1pZi1rbm93bikKICAgICAgVGhlbiAkaXBzIGF0ICJCdW5kbGUuZW50cnkucmVzb3VyY2Uub2ZUeXBlKENvbXBvc2l0aW9uKS5zZWN0aW9uLndoZXJlKGNvZGUuY29kaW5nLndoZXJlKHN5c3RlbT0naHR0cDovL2xvaW5jLm9yZycgYW5kIGNvZGU9JzQ3NTE5LTQnKS5leGlzdHMoKSkuYWxsKGVudHJ5LndoZXJlKHJlZmVyZW5jZS5jb250YWlucygnUHJvY2VkdXJlJykgb3IgcmVmZXJlbmNlLmV4aXN0cygpKS5leGlzdHMoKSkgYW5kIEJ1bmRsZS5lbnRyeS5yZXNvdXJjZS5vZlR5cGUoUHJvY2VkdXJlKS5leGlzdHMoKSIgc2hvdWxkIGJlIHRydWUKICAgICAgIyBDb21wb3NpdGlvbi5zZWN0aW9uOnNlY3Rpb25NZWRpY2FsRGV2aWNlcyAoU0hPVUxEOnBvcHVsYXRlLWlmLWtub3duKQogICAgICBUaGVuICRpcHMgYXQgIkJ1bmRsZS5lbnRyeS5yZXNvdXJjZS5vZlR5cGUoQ29tcG9zaXRpb24pLmFsbChzZWN0aW9uLndoZXJlKGNvZGUuY29kaW5nLndoZXJlKHN5c3RlbT0naHR0cDovL2xvaW5jLm9yZycgYW5kIGNvZGU9JzQ2MjY0LTgnKS5leGlzdHMoKSkuZXhpc3RzKCkpIiBzaG91bGQgYmUgdHJ1ZQogICAgICAjIENvbXBvc2l0aW9uLnNlY3Rpb246c2VjdGlvbk1lZGljYWxEZXZpY2VzLnRpdGxlIChTSEFMTDpwb3B1bGF0ZSkKICAgICAgVGhlbiAkaXBzIGF0ICJCdW5kbGUuZW50cnkucmVzb3VyY2Uub2ZUeXBlKENvbXBvc2l0aW9uKS5zZWN0aW9uLndoZXJlKGNvZGUuY29kaW5nLndoZXJlKHN5c3RlbT0naHR0cDovL2xvaW5jLm9yZycgYW5kIGNvZGU9JzQ2MjY0LTgnKS5leGlzdHMoKSkuYWxsKHRpdGxlLmV4aXN0cygpKSIgc2hvdWxkIGJlIHRydWUKICAgICAgIyBDb21wb3NpdGlvbi5zZWN0aW9uOnNlY3Rpb25NZWRpY2FsRGV2aWNlcy50ZXh0IChTSEFMTDpwb3B1bGF0ZSkKICAgICAgVGhlbiAkaXBzIGF0ICJCdW5kbGUuZW50cnkucmVzb3VyY2Uub2ZUeXBlKENvbXBvc2l0aW9uKS5zZWN0aW9uLndoZXJlKGNvZGUuY29kaW5nLndoZXJlKHN5c3RlbT0naHR0cDovL2xvaW5jLm9yZycgYW5kIGNvZGU9JzQ2MjY0LTgnKS5leGlzdHMoKSkuYWxsKHRleHQuZXhpc3RzKCkpIiBzaG91bGQgYmUgdHJ1ZQogICAgICAjIENvbXBvc2l0aW9uLnNlY3Rpb246c2VjdGlvbk1lZGljYWxEZXZpY2VzLmVudHJ5OmRldmljZVN0YXRlbWVudCAoU0hPVUxEOnBvcHVsYXRlLWlmLWtub3duKQogICAgICBUaGVuICRpcHMgYXQgIkJ1bmRsZS5lbnRyeS5yZXNvdXJjZS5vZlR5cGUoQ29tcG9zaXRpb24pLnNlY3Rpb24ud2hlcmUoY29kZS5jb2Rpbmcud2hlcmUoc3lzdGVtPSdodHRwOi8vbG9pbmMub3JnJyBhbmQgY29kZT0nNDYyNjQtOCcpLmV4aXN0cygpKS5hbGwoZW50cnkud2hlcmUocmVmZXJlbmNlLmNvbnRhaW5zKCdEZXZpY2VVc2VTdGF0ZW1lbnQnKSBvciByZWZlcmVuY2UuZXhpc3RzKCkpLmV4aXN0cygpKSBhbmQgQnVuZGxlLmVudHJ5LnJlc291cmNlLm9mVHlwZShEZXZpY2VVc2VTdGF0ZW1lbnQpLmV4aXN0cygpIiBzaG91bGQgYmUgdHJ1ZQogICAgICAjIENvbXBvc2l0aW9uLnNlY3Rpb246c2VjdGlvbkFkdmFuY2VEaXJlY3RpdmVzLnRpdGxlIChTSEFMTDpwb3B1bGF0ZSkKICAgICAgVGhlbiAkaXBzIGF0ICJCdW5kbGUuZW50cnkucmVzb3VyY2Uub2ZUeXBlKENvbXBvc2l0aW9uKS5zZWN0aW9uLndoZXJlKGNvZGUuY29kaW5nLndoZXJlKHN5c3RlbT0naHR0cDovL2xvaW5jLm9yZycgYW5kIGNvZGU9JzQyMzQ4LTMnKS5leGlzdHMoKSkuYWxsKHRpdGxlLmV4aXN0cygpKSIgc2hvdWxkIGJlIHRydWUKICAgICAgIyBDb21wb3NpdGlvbi5zZWN0aW9uOnNlY3Rpb25BZHZhbmNlRGlyZWN0aXZlcy50ZXh0IChTSEFMTDpwb3B1bGF0ZSkKICAgICAgVGhlbiAkaXBzIGF0ICJCdW5kbGUuZW50cnkucmVzb3VyY2Uub2ZUeXBlKENvbXBvc2l0aW9uKS5zZWN0aW9uLndoZXJlKGNvZGUuY29kaW5nLndoZXJlKHN5c3RlbT0naHR0cDovL2xvaW5jLm9yZycgYW5kIGNvZGU9JzQyMzQ4LTMnKS5leGlzdHMoKSkuYWxsKHRleHQuZXhpc3RzKCkpIiBzaG91bGQgYmUgdHJ1ZQogICAgICAjIENvbXBvc2l0aW9uLnNlY3Rpb246c2VjdGlvbkFsZXJ0cy50aXRsZSAoU0hBTEw6cG9wdWxhdGUpCiAgICAgIFRoZW4gJGlwcyBhdCAiQnVuZGxlLmVudHJ5LnJlc291cmNlLm9mVHlwZShDb21wb3NpdGlvbikuc2VjdGlvbi53aGVyZShjb2RlLmNvZGluZy53aGVyZShzeXN0ZW09J2h0dHA6Ly9sb2luYy5vcmcnIGFuZCBjb2RlPScxMDQ2MDUtMScpLmV4aXN0cygpKS5hbGwodGl0bGUuZXhpc3RzKCkpIiBzaG91bGQgYmUgdHJ1ZQogICAgICAjIENvbXBvc2l0aW9uLnNlY3Rpb246c2VjdGlvbkFsZXJ0cy50ZXh0IChTSEFMTDpwb3B1bGF0ZSkKICAgICAgVGhlbiAkaXBzIGF0ICJCdW5kbGUuZW50cnkucmVzb3VyY2Uub2ZUeXBlKENvbXBvc2l0aW9uKS5zZWN0aW9uLndoZXJlKGNvZGUuY29kaW5nLndoZXJlKHN5c3RlbT0naHR0cDovL2xvaW5jLm9yZycgYW5kIGNvZGU9JzEwNDYwNS0xJykuZXhpc3RzKCkpLmFsbCh0ZXh0LmV4aXN0cygpKSIgc2hvdWxkIGJlIHRydWUKICAgICAgIyBDb21wb3NpdGlvbi5zZWN0aW9uOnNlY3Rpb25GdW5jdGlvbmFsU3RhdHVzLnRpdGxlIChTSEFMTDpwb3B1bGF0ZSkKICAgICAgVGhlbiAkaXBzIGF0ICJCdW5kbGUuZW50cnkucmVzb3VyY2Uub2ZUeXBlKENvbXBvc2l0aW9uKS5zZWN0aW9uLndoZXJlKGNvZGUuY29kaW5nLndoZXJlKHN5c3RlbT0naHR0cDovL2xvaW5jLm9yZycgYW5kIGNvZGU9JzQ3NDIwLTUnKS5leGlzdHMoKSkuYWxsKHRpdGxlLmV4aXN0cygpKSIgc2hvdWxkIGJlIHRydWUKICAgICAgIyBDb21wb3NpdGlvbi5zZWN0aW9uOnNlY3Rpb25GdW5jdGlvbmFsU3RhdHVzLnRleHQgKFNIQUxMOnBvcHVsYXRlKQogICAgICBUaGVuICRpcHMgYXQgIkJ1bmRsZS5lbnRyeS5yZXNvdXJjZS5vZlR5cGUoQ29tcG9zaXRpb24pLnNlY3Rpb24ud2hlcmUoY29kZS5jb2Rpbmcud2hlcmUoc3lzdGVtPSdodHRwOi8vbG9pbmMub3JnJyBhbmQgY29kZT0nNDc0MjAtNScpLmV4aXN0cygpKS5hbGwodGV4dC5leGlzdHMoKSkiIHNob3VsZCBiZSB0cnVlCiAgICAgICMgQ29tcG9zaXRpb24uc2VjdGlvbjpzZWN0aW9uUGFzdFByb2JsZW1zLnRpdGxlIChTSEFMTDpwb3B1bGF0ZSkKICAgICAgVGhlbiAkaXBzIGF0ICJCdW5kbGUuZW50cnkucmVzb3VyY2Uub2ZUeXBlKENvbXBvc2l0aW9uKS5zZWN0aW9uLndoZXJlKGNvZGUuY29kaW5nLndoZXJlKHN5c3RlbT0naHR0cDovL2xvaW5jLm9yZycgYW5kIGNvZGU9JzExMzQ4LTAnKS5leGlzdHMoKSkuYWxsKHRpdGxlLmV4aXN0cygpKSIgc2hvdWxkIGJlIHRydWUKICAgICAgIyBDb21wb3NpdGlvbi5zZWN0aW9uOnNlY3Rpb25QYXN0UHJvYmxlbXMudGV4dCAoU0hBTEw6cG9wdWxhdGUpCiAgICAgIFRoZW4gJGlwcyBhdCAiQnVuZGxlLmVudHJ5LnJlc291cmNlLm9mVHlwZShDb21wb3NpdGlvbikuc2VjdGlvbi53aGVyZShjb2RlLmNvZGluZy53aGVyZShzeXN0ZW09J2h0dHA6Ly9sb2luYy5vcmcnIGFuZCBjb2RlPScxMTM0OC0wJykuZXhpc3RzKCkpLmFsbCh0ZXh0LmV4aXN0cygpKSIgc2hvdWxkIGJlIHRydWUKICAgICAgIyBDb21wb3NpdGlvbi5zZWN0aW9uOnNlY3Rpb25QcmVnbmFuY3lIeC50aXRsZSAoU0hBTEw6cG9wdWxhdGUpCiAgICAgIFRoZW4gJGlwcyBhdCAiQnVuZGxlLmVudHJ5LnJlc291cmNlLm9mVHlwZShDb21wb3NpdGlvbikuc2VjdGlvbi53aGVyZShjb2RlLmNvZGluZy53aGVyZShzeXN0ZW09J2h0dHA6Ly9sb2luYy5vcmcnIGFuZCBjb2RlPScxMDE2Mi02JykuZXhpc3RzKCkpLmFsbCh0aXRsZS5leGlzdHMoKSkiIHNob3VsZCBiZSB0cnVlCiAgICAgICMgQ29tcG9zaXRpb24uc2VjdGlvbjpzZWN0aW9uUHJlZ25hbmN5SHgudGV4dCAoU0hBTEw6cG9wdWxhdGUpCiAgICAgIFRoZW4gJGlwcyBhdCAiQnVuZGxlLmVudHJ5LnJlc291cmNlLm9mVHlwZShDb21wb3NpdGlvbikuc2VjdGlvbi53aGVyZShjb2RlLmNvZGluZy53aGVyZShzeXN0ZW09J2h0dHA6Ly9sb2luYy5vcmcnIGFuZCBjb2RlPScxMDE2Mi02JykuZXhpc3RzKCkpLmFsbCh0ZXh0LmV4aXN0cygpKSIgc2hvdWxkIGJlIHRydWUKICAgICAgIyBDb21wb3NpdGlvbi5zZWN0aW9uOnNlY3Rpb25QYXRpZW50U3RvcnkudGl0bGUgKFNIQUxMOnBvcHVsYXRlKQogICAgICBUaGVuICRpcHMgYXQgIkJ1bmRsZS5lbnRyeS5yZXNvdXJjZS5vZlR5cGUoQ29tcG9zaXRpb24pLnNlY3Rpb24ud2hlcmUoY29kZS5jb2Rpbmcud2hlcmUoc3lzdGVtPSdodHRwOi8vbG9pbmMub3JnJyBhbmQgY29kZT0nODEzMzgtNicpLmV4aXN0cygpKS5hbGwodGl0bGUuZXhpc3RzKCkpIiBzaG91bGQgYmUgdHJ1ZQogICAgICAjIENvbXBvc2l0aW9uLnNlY3Rpb246c2VjdGlvblBhdGllbnRTdG9yeS50ZXh0IChTSEFMTDpwb3B1bGF0ZSkKICAgICAgVGhlbiAkaXBzIGF0ICJCdW5kbGUuZW50cnkucmVzb3VyY2Uub2ZUeXBlKENvbXBvc2l0aW9uKS5zZWN0aW9uLndoZXJlKGNvZGUuY29kaW5nLndoZXJlKHN5c3RlbT0naHR0cDovL2xvaW5jLm9yZycgYW5kIGNvZGU9JzgxMzM4LTYnKS5leGlzdHMoKSkuYWxsKHRleHQuZXhpc3RzKCkpIiBzaG91bGQgYmUgdHJ1ZQogICAgICAjIENvbXBvc2l0aW9uLnNlY3Rpb246c2VjdGlvblBsYW5PZkNhcmUudGl0bGUgKFNIQUxMOnBvcHVsYXRlKQogICAgICBUaGVuICRpcHMgYXQgIkJ1bmRsZS5lbnRyeS5yZXNvdXJjZS5vZlR5cGUoQ29tcG9zaXRpb24pLnNlY3Rpb24ud2hlcmUoY29kZS5jb2Rpbmcud2hlcmUoc3lzdGVtPSdodHRwOi8vbG9pbmMub3JnJyBhbmQgY29kZT0nMTg3NzYtNScpLmV4aXN0cygpKS5hbGwodGl0bGUuZXhpc3RzKCkpIiBzaG91bGQgYmUgdHJ1ZQogICAgICAjIENvbXBvc2l0aW9uLnNlY3Rpb246c2VjdGlvblBsYW5PZkNhcmUudGV4dCAoU0hBTEw6cG9wdWxhdGUpCiAgICAgIFRoZW4gJGlwcyBhdCAiQnVuZGxlLmVudHJ5LnJlc291cmNlLm9mVHlwZShDb21wb3NpdGlvbikuc2VjdGlvbi53aGVyZShjb2RlLmNvZGluZy53aGVyZShzeXN0ZW09J2h0dHA6Ly9sb2luYy5vcmcnIGFuZCBjb2RlPScxODc3Ni01JykuZXhpc3RzKCkpLmFsbCh0ZXh0LmV4aXN0cygpKSIgc2hvdWxkIGJlIHRydWUKICAgICAgIyBDb21wb3NpdGlvbi5zZWN0aW9uOnNlY3Rpb25Tb2NpYWxIaXN0b3J5LnRpdGxlIChTSEFMTDpwb3B1bGF0ZSkKICAgICAgVGhlbiAkaXBzIGF0ICJCdW5kbGUuZW50cnkucmVzb3VyY2Uub2ZUeXBlKENvbXBvc2l0aW9uKS5zZWN0aW9uLndoZXJlKGNvZGUuY29kaW5nLndoZXJlKHN5c3RlbT0naHR0cDovL2xvaW5jLm9yZycgYW5kIGNvZGU9JzI5NzYyLTInKS5leGlzdHMoKSkuYWxsKHRpdGxlLmV4aXN0cygpKSIgc2hvdWxkIGJlIHRydWUKICAgICAgIyBDb21wb3NpdGlvbi5zZWN0aW9uOnNlY3Rpb25Tb2NpYWxIaXN0b3J5LnRleHQgKFNIQUxMOnBvcHVsYXRlKQogICAgICBUaGVuICRpcHMgYXQgIkJ1bmRsZS5lbnRyeS5yZXNvdXJjZS5vZlR5cGUoQ29tcG9zaXRpb24pLnNlY3Rpb24ud2hlcmUoY29kZS5jb2Rpbmcud2hlcmUoc3lzdGVtPSdodHRwOi8vbG9pbmMub3JnJyBhbmQgY29kZT0nMjk3NjItMicpLmV4aXN0cygpKS5hbGwodGV4dC5leGlzdHMoKSkiIHNob3VsZCBiZSB0cnVlCiAgICAgICMgQ29tcG9zaXRpb24uc2VjdGlvbjpzZWN0aW9uVml0YWxTaWducy50aXRsZSAoU0hBTEw6cG9wdWxhdGUpCiAgICAgIFRoZW4gJGlwcyBhdCAiQnVuZGxlLmVudHJ5LnJlc291cmNlLm9mVHlwZShDb21wb3NpdGlvbikuc2VjdGlvbi53aGVyZShjb2RlLmNvZGluZy53aGVyZShzeXN0ZW09J2h0dHA6Ly9sb2luYy5vcmcnIGFuZCBjb2RlPSc4NzE2LTMnKS5leGlzdHMoKSkuYWxsKHRpdGxlLmV4aXN0cygpKSIgc2hvdWxkIGJlIHRydWUKICAgICAgIyBDb21wb3NpdGlvbi5zZWN0aW9uOnNlY3Rpb25WaXRhbFNpZ25zLnRleHQgKFNIQUxMOnBvcHVsYXRlKQogICAgICBUaGVuICRpcHMgYXQgIkJ1bmRsZS5lbnRyeS5yZXNvdXJjZS5vZlR5cGUoQ29tcG9zaXRpb24pLnNlY3Rpb24ud2hlcmUoY29kZS5jb2Rpbmcud2hlcmUoc3lzdGVtPSdodHRwOi8vbG9pbmMub3JnJyBhbmQgY29kZT0nODcxNi0zJykuZXhpc3RzKCkpLmFsbCh0ZXh0LmV4aXN0cygpKSIgc2hvdWxkIGJlIHRydWUKICAgICAgIyBUaGUgcmVmZXJlbmNlIGRhdGEgZG9lcyBub3QgZXhlcmNpc2UgdGhlc2U7IHRoZSBDcmVhdG9yIGF0dGVzdHMgdGhlIGNhcGFiaWxpdHkuCiAgICAgIFdoZW4gQ3JlYXRvciBzdWJtaXRzIGV2aWRlbmNlIG9mICJDb21wb3NpdGlvbiBbc2VjdGlvbjpzZWN0aW9uUHJvYmxlbXMuZW1wdHlSZWFzb25dLCBbc2VjdGlvbjpzZWN0aW9uQWxsZXJnaWVzLmVtcHR5UmVhc29uXSwgW3NlY3Rpb246c2VjdGlvbk1lZGljYXRpb25zLmVtcHR5UmVhc29uXSBiZWluZyBlbnRlcmVkIG9yIGV4cG9ydGVkIChzY3JlZW5zaG90IG9yIGEgZG9jdW1lbnQgY2FycnlpbmcgdGhlbSkiIGFzICRjYW5Qb3B1bGF0ZUV2aWRlbmNlCiAgICAgIFRoZW4gQ3JlYXRvciBjb25maXJtcyBlYWNoIG9mIHRoZXNlIGlzIHN1cHBvcnRlZCBmb3IgIkNvbXBvc2l0aW9uLCB3aGVuIHRoZSBpbmZvcm1hdGlvbiBpcyBrbm93biI6CiAgICAgICAgfCBpdGVtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGRldGFpbCAgICAgICAgICAgfAogICAgICAgIHwgc2VjdGlvbjpzZWN0aW9uUHJvYmxlbXMuZW1wdHlSZWFzb24gICAgfCBjYW4gYmUgcG9wdWxhdGVkIHwKICAgICAgICB8IHNlY3Rpb246c2VjdGlvbkFsbGVyZ2llcy5lbXB0eVJlYXNvbiAgIHwgY2FuIGJlIHBvcHVsYXRlZCB8CiAgICAgICAgfCBzZWN0aW9uOnNlY3Rpb25NZWRpY2F0aW9ucy5lbXB0eVJlYXNvbiB8IGNhbiBiZSBwb3B1bGF0ZWQgfAogICAgICBBbmQgbG9nICJDb21wb3NpdGlvbi5tZXRhLnByb2ZpbGUgTUFZIGJlIHBvcHVsYXRlZCDigJQgcmVjb3JkZWQsIG5vdCBhc3NlcnRlZCIKCiAgUnVsZTogVGhlIHBlb3BsZSBhbmQgb3JnYW5pc2F0aW9ucwoKICAgIEBwcm9maWxlOlBhdGllbnQtdXYtaXBzCiAgICBAY292ZXJzOlBhdGllbnQuaWRlbnRpZmllciBAY292ZXJzOlBhdGllbnQubmFtZSBAY292ZXJzOlBhdGllbnQubmFtZS51c2UgQGNvdmVyczpQYXRpZW50Lm5hbWUudGV4dAogICAgQGNvdmVyczpQYXRpZW50Lm5hbWUuZmFtaWx5IEBjb3ZlcnM6UGF0aWVudC5uYW1lLmdpdmVuIEBjb3ZlcnM6UGF0aWVudC50ZWxlY29tIEBjb3ZlcnM6UGF0aWVudC5nZW5kZXIKICAgIEBjb3ZlcnM6UGF0aWVudC5iaXJ0aERhdGUgQGNvdmVyczpQYXRpZW50LmFkZHJlc3MgQGNvdmVyczpQYXRpZW50LmdlbmVyYWxQcmFjdGl0aW9uZXIKICAgIFNjZW5hcmlvOiBpcHMtY3JlYXRvci0wMDMgUGF0aWVudCAoSVBTKSDigJQgdGhlIENyZWF0b3IgcG9wdWxhdGVzIG5hbWU7IDEwIGVsZW1lbnRzIHdoZW4ga25vd24KICAgICAgIyBJbnN0YW5jZXM6IEJ1bmRsZS5lbnRyeS5yZXNvdXJjZS5vZlR5cGUoUGF0aWVudCkKICAgICAgIyBQYXRpZW50LmlkZW50aWZpZXIgKFNIQUxMOnBvcHVsYXRlLWlmLWtub3duKQogICAgICBUaGVuICRpcHMgYXQgIkJ1bmRsZS5lbnRyeS5yZXNvdXJjZS5vZlR5cGUoUGF0aWVudCkuYWxsKGlkZW50aWZpZXIuZXhpc3RzKCkpIiBzaG91bGQgYmUgdHJ1ZQogICAgICAjIFBhdGllbnQubmFtZSAoU0hBTEw6cG9wdWxhdGUpCiAgICAgIFRoZW4gJGlwcyBhdCAiQnVuZGxlLmVudHJ5LnJlc291cmNlLm9mVHlwZShQYXRpZW50KS5hbGwobmFtZS5leGlzdHMoKSkiIHNob3VsZCBiZSB0cnVlCiAgICAgICMgUGF0aWVudC5uYW1lLnVzZSAoU0hBTEw6cG9wdWxhdGUtaWYta25vd24pCiAgICAgIFRoZW4gJGlwcyBhdCAiQnVuZGxlLmVudHJ5LnJlc291cmNlLm9mVHlwZShQYXRpZW50KS5uYW1lLmFsbCh1c2UuZXhpc3RzKCkpIiBzaG91bGQgYmUgdHJ1ZQogICAgICAjIFBhdGllbnQubmFtZS5mYW1pbHkgKFNIQUxMOnBvcHVsYXRlLWlmLWtub3duKQogICAgICBUaGVuICRpcHMgYXQgIkJ1bmRsZS5lbnRyeS5yZXNvdXJjZS5vZlR5cGUoUGF0aWVudCkubmFtZS5hbGwoZmFtaWx5LmV4aXN0cygpKSIgc2hvdWxkIGJlIHRydWUKICAgICAgIyBQYXRpZW50Lm5hbWUuZ2l2ZW4gKFNIQUxMOnBvcHVsYXRlLWlmLWtub3duKQogICAgICBUaGVuICRpcHMgYXQgIkJ1bmRsZS5lbnRyeS5yZXNvdXJjZS5vZlR5cGUoUGF0aWVudCkubmFtZS5hbGwoZ2l2ZW4uZXhpc3RzKCkpIiBzaG91bGQgYmUgdHJ1ZQogICAgICAjIFBhdGllbnQudGVsZWNvbSAoU0hBTEw6cG9wdWxhdGUtaWYta25vd24pCiAgICAgIFRoZW4gJGlwcyBhdCAiQnVuZGxlLmVudHJ5LnJlc291cmNlLm9mVHlwZShQYXRpZW50KS5hbGwodGVsZWNvbS5leGlzdHMoKSkiIHNob3VsZCBiZSB0cnVlCiAgICAgICMgUGF0aWVudC5nZW5kZXIgKFNIQUxMOnBvcHVsYXRlLWlmLWtub3duKQogICAgICBUaGVuICRpcHMgYXQgIkJ1bmRsZS5lbnRyeS5yZXNvdXJjZS5vZlR5cGUoUGF0aWVudCkuYWxsKGdlbmRlci5leGlzdHMoKSkiIHNob3VsZCBiZSB0cnVlCiAgICAgICMgUGF0aWVudC5iaXJ0aERhdGUgKFNIQUxMOnBvcHVsYXRlLWlmLWtub3duKQogICAgICBUaGVuICRpcHMgYXQgIkJ1bmRsZS5lbnRyeS5yZXNvdXJjZS5vZlR5cGUoUGF0aWVudCkuYWxsKGJpcnRoRGF0ZS5leGlzdHMoKSkiIHNob3VsZCBiZSB0cnVlCiAgICAgICMgUGF0aWVudC5hZGRyZXNzIChTSEFMTDpwb3B1bGF0ZS1pZi1rbm93bikKICAgICAgVGhlbiAkaXBzIGF0ICJCdW5kbGUuZW50cnkucmVzb3VyY2Uub2ZUeXBlKFBhdGllbnQpLmFsbChhZGRyZXNzLmV4aXN0cygpKSIgc2hvdWxkIGJlIHRydWUKICAgICAgIyBUaGUgcmVmZXJlbmNlIGRhdGEgZG9lcyBub3QgZXhlcmNpc2UgdGhlc2U7IHRoZSBDcmVhdG9yIGF0dGVzdHMgdGhlIGNhcGFiaWxpdHkuCiAgICAgIFdoZW4gQ3JlYXRvciBzdWJtaXRzIGV2aWRlbmNlIG9mICJQYXRpZW50IFtuYW1lLnRleHRdLCBbZ2VuZXJhbFByYWN0aXRpb25lcl0gYmVpbmcgZW50ZXJlZCBvciBleHBvcnRlZCAoc2NyZWVuc2hvdCBvciBhIGRvY3VtZW50IGNhcnJ5aW5nIHRoZW0pIiBhcyAkY2FuUG9wdWxhdGVFdmlkZW5jZQogICAgICBUaGVuIENyZWF0b3IgY29uZmlybXMgZWFjaCBvZiB0aGVzZSBpcyBzdXBwb3J0ZWQgZm9yICJQYXRpZW50LCB3aGVuIHRoZSBpbmZvcm1hdGlvbiBpcyBrbm93biI6CiAgICAgICAgfCBpdGVtICAgICAgICAgICAgICAgIHwgZGV0YWlsICAgICAgICAgICB8CiAgICAgICAgfCBuYW1lLnRleHQgICAgICAgICAgIHwgY2FuIGJlIHBvcHVsYXRlZCB8CiAgICAgICAgfCBnZW5lcmFsUHJhY3RpdGlvbmVyIHwgY2FuIGJlIHBvcHVsYXRlZCB8CgogICAgQHByb2ZpbGU6UHJhY3RpdGlvbmVyLXV2LWlwcwogICAgQGNvdmVyczpQcmFjdGl0aW9uZXIubmFtZSBAY292ZXJzOlByYWN0aXRpb25lci5uYW1lLmZhbWlseSBAY292ZXJzOlByYWN0aXRpb25lci5uYW1lLmdpdmVuIEBjb3ZlcnM6UHJhY3RpdGlvbmVyLnRlbGVjb20KICAgIEBjb3ZlcnM6UHJhY3RpdGlvbmVyLmFkZHJlc3MKICAgIFNjZW5hcmlvOiBpcHMtY3JlYXRvci0wMDQgUHJhY3RpdGlvbmVyIChJUFMpIOKAlCB0aGUgQ3JlYXRvciBwb3B1bGF0ZXMgNSBlbGVtZW50cyB3aGVuIGtub3duCiAgICAgICMgSW5zdGFuY2VzOiBCdW5kbGUuZW50cnkucmVzb3VyY2Uub2ZUeXBlKFByYWN0aXRpb25lcikKICAgICAgIyBQcmFjdGl0aW9uZXIubmFtZSAoU0hBTEw6cG9wdWxhdGUtaWYta25vd24pCiAgICAgIFRoZW4gJGlwcyBhdCAiQnVuZGxlLmVudHJ5LnJlc291cmNlLm9mVHlwZShQcmFjdGl0aW9uZXIpLmFsbChuYW1lLmV4aXN0cygpKSIgc2hvdWxkIGJlIHRydWUKICAgICAgIyBQcmFjdGl0aW9uZXIubmFtZS5mYW1pbHkgKFNIQUxMOnBvcHVsYXRlLWlmLWtub3duKQogICAgICBUaGVuICRpcHMgYXQgIkJ1bmRsZS5lbnRyeS5yZXNvdXJjZS5vZlR5cGUoUHJhY3RpdGlvbmVyKS5uYW1lLmFsbChmYW1pbHkuZXhpc3RzKCkpIiBzaG91bGQgYmUgdHJ1ZQogICAgICAjIFByYWN0aXRpb25lci5uYW1lLmdpdmVuIChTSEFMTDpwb3B1bGF0ZS1pZi1rbm93bikKICAgICAgVGhlbiAkaXBzIGF0ICJCdW5kbGUuZW50cnkucmVzb3VyY2Uub2ZUeXBlKFByYWN0aXRpb25lcikubmFtZS5hbGwoZ2l2ZW4uZXhpc3RzKCkpIiBzaG91bGQgYmUgdHJ1ZQogICAgICAjIFByYWN0aXRpb25lci50ZWxlY29tIChTSEFMTDpwb3B1bGF0ZS1pZi1rbm93bikKICAgICAgVGhlbiAkaXBzIGF0ICJCdW5kbGUuZW50cnkucmVzb3VyY2Uub2ZUeXBlKFByYWN0aXRpb25lcikuYWxsKHRlbGVjb20uZXhpc3RzKCkpIiBzaG91bGQgYmUgdHJ1ZQogICAgICAjIFRoZSByZWZlcmVuY2UgZGF0YSBkb2VzIG5vdCBleGVyY2lzZSB0aGVzZTsgdGhlIENyZWF0b3IgYXR0ZXN0cyB0aGUgY2FwYWJpbGl0eS4KICAgICAgV2hlbiBDcmVhdG9yIHN1Ym1pdHMgZXZpZGVuY2Ugb2YgIlByYWN0aXRpb25lciBbYWRkcmVzc10gYmVpbmcgZW50ZXJlZCBvciBleHBvcnRlZCAoc2NyZWVuc2hvdCBvciBhIGRvY3VtZW50IGNhcnJ5aW5nIHRoZW0pIiBhcyAkY2FuUG9wdWxhdGVFdmlkZW5jZQogICAgICBUaGVuIENyZWF0b3IgY29uZmlybXMgZWFjaCBvZiB0aGVzZSBpcyBzdXBwb3J0ZWQgZm9yICJQcmFjdGl0aW9uZXIsIHdoZW4gdGhlIGluZm9ybWF0aW9uIGlzIGtub3duIjoKICAgICAgICB8IGl0ZW0gICAgfCBkZXRhaWwgICAgICAgICAgIHwKICAgICAgICB8IGFkZHJlc3MgfCBjYW4gYmUgcG9wdWxhdGVkIHwKCiAgICBAcHJvZmlsZTpQcmFjdGl0aW9uZXJSb2xlLXV2LWlwcwogICAgQGNvdmVyczpQcmFjdGl0aW9uZXJSb2xlLm9yZ2FuaXphdGlvbgogICAgU2NlbmFyaW86IGlwcy1jcmVhdG9yLTAwNSBQcmFjdGl0aW9uZXJSb2xlIChJUFMpIOKAlCB0aGUgQ3JlYXRvciBwb3B1bGF0ZXMgMSBlbGVtZW50IHdoZW4ga25vd24KICAgICAgIyBJbnN0YW5jZXM6IEJ1bmRsZS5lbnRyeS5yZXNvdXJjZS5vZlR5cGUoUHJhY3RpdGlvbmVyUm9sZSkKICAgICAgIyBUaGUgcmVmZXJlbmNlIGRhdGEgZG9lcyBub3QgZXhlcmNpc2UgdGhlc2U7IHRoZSBDcmVhdG9yIGF0dGVzdHMgdGhlIGNhcGFiaWxpdHkuCiAgICAgIFdoZW4gQ3JlYXRvciBzdWJtaXRzIGV2aWRlbmNlIG9mICJQcmFjdGl0aW9uZXJSb2xlIFtvcmdhbml6YXRpb25dIGJlaW5nIGVudGVyZWQgb3IgZXhwb3J0ZWQgKHNjcmVlbnNob3Qgb3IgYSBkb2N1bWVudCBjYXJyeWluZyB0aGVtKSIgYXMgJGNhblBvcHVsYXRlRXZpZGVuY2UKICAgICAgVGhlbiBDcmVhdG9yIGNvbmZpcm1zIGVhY2ggb2YgdGhlc2UgaXMgc3VwcG9ydGVkIGZvciAiUHJhY3RpdGlvbmVyUm9sZSwgd2hlbiB0aGUgaW5mb3JtYXRpb24gaXMga25vd24iOgogICAgICAgIHwgaXRlbSAgICAgICAgIHwgZGV0YWlsICAgICAgICAgICB8CiAgICAgICAgfCBvcmdhbml6YXRpb24gfCBjYW4gYmUgcG9wdWxhdGVkIHwKCiAgICBAcHJvZmlsZTpPcmdhbml6YXRpb24tdXYtaXBzCiAgICBAY292ZXJzOk9yZ2FuaXphdGlvbi5uYW1lIEBjb3ZlcnM6T3JnYW5pemF0aW9uLnRlbGVjb20gQGNvdmVyczpPcmdhbml6YXRpb24uYWRkcmVzcwogICAgU2NlbmFyaW86IGlwcy1jcmVhdG9yLTAwNiBPcmdhbml6YXRpb24gKElQUykg4oCUIHRoZSBDcmVhdG9yIHBvcHVsYXRlcyAzIGVsZW1lbnRzIHdoZW4ga25vd24KICAgICAgIyBJbnN0YW5jZXM6IEJ1bmRsZS5lbnRyeS5yZXNvdXJjZS5vZlR5cGUoT3JnYW5pemF0aW9uKQogICAgICAjIE9yZ2FuaXphdGlvbi5uYW1lIChTSEFMTDpwb3B1bGF0ZS1pZi1rbm93bikKICAgICAgVGhlbiAkaXBzIGF0ICJCdW5kbGUuZW50cnkucmVzb3VyY2Uub2ZUeXBlKE9yZ2FuaXphdGlvbikuYWxsKG5hbWUuZXhpc3RzKCkpIiBzaG91bGQgYmUgdHJ1ZQogICAgICAjIFRoZSByZWZlcmVuY2UgZGF0YSBkb2VzIG5vdCBleGVyY2lzZSB0aGVzZTsgdGhlIENyZWF0b3IgYXR0ZXN0cyB0aGUgY2FwYWJpbGl0eS4KICAgICAgV2hlbiBDcmVhdG9yIHN1Ym1pdHMgZXZpZGVuY2Ugb2YgIk9yZ2FuaXphdGlvbiBbdGVsZWNvbV0sIFthZGRyZXNzXSBiZWluZyBlbnRlcmVkIG9yIGV4cG9ydGVkIChzY3JlZW5zaG90IG9yIGEgZG9jdW1lbnQgY2FycnlpbmcgdGhlbSkiIGFzICRjYW5Qb3B1bGF0ZUV2aWRlbmNlCiAgICAgIFRoZW4gQ3JlYXRvciBjb25maXJtcyBlYWNoIG9mIHRoZXNlIGlzIHN1cHBvcnRlZCBmb3IgIk9yZ2FuaXphdGlvbiwgd2hlbiB0aGUgaW5mb3JtYXRpb24gaXMga25vd24iOgogICAgICAgIHwgaXRlbSAgICB8IGRldGFpbCAgICAgICAgICAgfAogICAgICAgIHwgdGVsZWNvbSB8IGNhbiBiZSBwb3B1bGF0ZWQgfAogICAgICAgIHwgYWRkcmVzcyB8IGNhbiBiZSBwb3B1bGF0ZWQgfAoKICBSdWxlOiBUaGUgcmVxdWlyZWQgc2VjdGlvbnM6IHByb2JsZW1zLCBhbGxlcmdpZXMsIG1lZGljYXRpb25zCgogICAgQHByb2ZpbGU6QWxsZXJneUludG9sZXJhbmNlLXV2LWlwcwogICAgQGNvdmVyczpBbGxlcmd5SW50b2xlcmFuY2UuY2xpbmljYWxTdGF0dXMgQGNvdmVyczpBbGxlcmd5SW50b2xlcmFuY2UudHlwZSBAY292ZXJzOkFsbGVyZ3lJbnRvbGVyYW5jZS5jb2RlIEBjb3ZlcnM6QWxsZXJneUludG9sZXJhbmNlLnBhdGllbnQKICAgIEBjb3ZlcnM6QWxsZXJneUludG9sZXJhbmNlLnBhdGllbnQucmVmZXJlbmNlIEBjb3ZlcnM6QWxsZXJneUludG9sZXJhbmNlLm9uc2V0W3hdIEBjb3ZlcnM6QWxsZXJneUludG9sZXJhbmNlLm9uc2V0W3hdOm9uc2V0RGF0ZVRpbWUgQGNvdmVyczpBbGxlcmd5SW50b2xlcmFuY2UucmVhY3Rpb24KICAgIEBjb3ZlcnM6QWxsZXJneUludG9sZXJhbmNlLnJlYWN0aW9uLm1hbmlmZXN0YXRpb24gQGNvdmVyczpBbGxlcmd5SW50b2xlcmFuY2UucmVhY3Rpb24uc2V2ZXJpdHkKICAgIFNjZW5hcmlvOiBpcHMtY3JlYXRvci0wMDcgQWxsZXJneUludG9sZXJhbmNlIChJUFMpIOKAlCB0aGUgQ3JlYXRvciBwb3B1bGF0ZXMgOSBlbGVtZW50cyB3aGVuIGtub3duCiAgICAgICMgSW5zdGFuY2VzOiBCdW5kbGUuZW50cnkucmVzb3VyY2Uub2ZUeXBlKEFsbGVyZ3lJbnRvbGVyYW5jZSkKICAgICAgIyBBbGxlcmd5SW50b2xlcmFuY2UuY2xpbmljYWxTdGF0dXMgKFNIQUxMOnBvcHVsYXRlLWlmLWtub3duKQogICAgICBUaGVuICRpcHMgYXQgIkJ1bmRsZS5lbnRyeS5yZXNvdXJjZS5vZlR5cGUoQWxsZXJneUludG9sZXJhbmNlKS5hbGwoY2xpbmljYWxTdGF0dXMuZXhpc3RzKCkpIiBzaG91bGQgYmUgdHJ1ZQogICAgICAjIEFsbGVyZ3lJbnRvbGVyYW5jZS5jb2RlIChTSEFMTDpwb3B1bGF0ZS1pZi1rbm93bikKICAgICAgVGhlbiAkaXBzIGF0ICJCdW5kbGUuZW50cnkucmVzb3VyY2Uub2ZUeXBlKEFsbGVyZ3lJbnRvbGVyYW5jZSkuYWxsKGNvZGUuZXhpc3RzKCkpIiBzaG91bGQgYmUgdHJ1ZQogICAgICAjIEFsbGVyZ3lJbnRvbGVyYW5jZS5wYXRpZW50IChTSEFMTDpwb3B1bGF0ZS1pZi1rbm93bikKICAgICAgVGhlbiAkaXBzIGF0ICJCdW5kbGUuZW50cnkucmVzb3VyY2Uub2ZUeXBlKEFsbGVyZ3lJbnRvbGVyYW5jZSkuYWxsKHBhdGllbnQuZXhpc3RzKCkpIiBzaG91bGQgYmUgdHJ1ZQogICAgICAjIEFsbGVyZ3lJbnRvbGVyYW5jZS5wYXRpZW50LnJlZmVyZW5jZSAoU0hBTEw6cG9wdWxhdGUtaWYta25vd24pCiAgICAgIFRoZW4gJGlwcyBhdCAiQnVuZGxlLmVudHJ5LnJlc291cmNlLm9mVHlwZShBbGxlcmd5SW50b2xlcmFuY2UpLnBhdGllbnQuYWxsKHJlZmVyZW5jZS5leGlzdHMoKSkiIHNob3VsZCBiZSB0cnVlCiAgICAgICMgVGhlIHJlZmVyZW5jZSBkYXRhIGRvZXMgbm90IGV4ZXJjaXNlIHRoZXNlOyB0aGUgQ3JlYXRvciBhdHRlc3RzIHRoZSBjYXBhYmlsaXR5LgogICAgICBXaGVuIENyZWF0b3Igc3VibWl0cyBldmlkZW5jZSBvZiAiQWxsZXJneUludG9sZXJhbmNlIFt0eXBlXSwgW29uc2V0W3hdXSwgW29uc2V0W3hdOm9uc2V0RGF0ZVRpbWVdLCBbcmVhY3Rpb25dLCBbcmVhY3Rpb24ubWFuaWZlc3RhdGlvbl0sIFtyZWFjdGlvbi5zZXZlcml0eV0gYmVpbmcgZW50ZXJlZCBvciBleHBvcnRlZCAoc2NyZWVuc2hvdCBvciBhIGRvY3VtZW50IGNhcnJ5aW5nIHRoZW0pIiBhcyAkY2FuUG9wdWxhdGVFdmlkZW5jZQogICAgICBUaGVuIENyZWF0b3IgY29uZmlybXMgZWFjaCBvZiB0aGVzZSBpcyBzdXBwb3J0ZWQgZm9yICJBbGxlcmd5SW50b2xlcmFuY2UsIHdoZW4gdGhlIGluZm9ybWF0aW9uIGlzIGtub3duIjoKICAgICAgICB8IGl0ZW0gICAgICAgICAgICAgICAgICAgfCBkZXRhaWwgICAgICAgICAgIHwKICAgICAgICB8IHR5cGUgICAgICAgICAgICAgICAgICAgfCBjYW4gYmUgcG9wdWxhdGVkIHwKICAgICAgICB8IG9uc2V0W3hdICAgICAgICAgICAgICAgfCBjYW4gYmUgcG9wdWxhdGVkIHwKICAgICAgICB8IG9uc2V0W3hdOm9uc2V0RGF0ZVRpbWUgfCBjYW4gYmUgcG9wdWxhdGVkIHwKICAgICAgICB8IHJlYWN0aW9uICAgICAgICAgICAgICAgfCBjYW4gYmUgcG9wdWxhdGVkIHwKICAgICAgICB8IHJlYWN0aW9uLm1hbmlmZXN0YXRpb24gfCBjYW4gYmUgcG9wdWxhdGVkIHwKICAgICAgICB8IHJlYWN0aW9uLnNldmVyaXR5ICAgICAgfCBjYW4gYmUgcG9wdWxhdGVkIHwKCiAgICBAcHJvZmlsZTpDb25kaXRpb24tdXYtaXBzCiAgICBAY292ZXJzOkNvbmRpdGlvbi5jbGluaWNhbFN0YXR1cyBAY292ZXJzOkNvbmRpdGlvbi5jYXRlZ29yeSBAY292ZXJzOkNvbmRpdGlvbi5zZXZlcml0eSBAY292ZXJzOkNvbmRpdGlvbi5jb2RlCiAgICBAY292ZXJzOkNvbmRpdGlvbi5zdWJqZWN0IEBjb3ZlcnM6Q29uZGl0aW9uLnN1YmplY3QucmVmZXJlbmNlIEBjb3ZlcnM6Q29uZGl0aW9uLm9uc2V0W3hdIEBjb3ZlcnM6Q29uZGl0aW9uLm9uc2V0W3hdOm9uc2V0RGF0ZVRpbWUKICAgIFNjZW5hcmlvOiBpcHMtY3JlYXRvci0wMDggQ29uZGl0aW9uIChJUFMpIOKAlCB0aGUgQ3JlYXRvciBwb3B1bGF0ZXMgNyBlbGVtZW50cyB3aGVuIGtub3duCiAgICAgICMgSW5zdGFuY2VzOiBCdW5kbGUuZW50cnkucmVzb3VyY2Uub2ZUeXBlKENvbmRpdGlvbikKICAgICAgIyBDb25kaXRpb24uY2xpbmljYWxTdGF0dXMgKFNIQUxMOnBvcHVsYXRlLWlmLWtub3duKQogICAgICBUaGVuICRpcHMgYXQgIkJ1bmRsZS5lbnRyeS5yZXNvdXJjZS5vZlR5cGUoQ29uZGl0aW9uKS5hbGwoY2xpbmljYWxTdGF0dXMuZXhpc3RzKCkpIiBzaG91bGQgYmUgdHJ1ZQogICAgICAjIENvbmRpdGlvbi5jb2RlIChTSEFMTDpwb3B1bGF0ZS1pZi1rbm93bikKICAgICAgVGhlbiAkaXBzIGF0ICJCdW5kbGUuZW50cnkucmVzb3VyY2Uub2ZUeXBlKENvbmRpdGlvbikuYWxsKGNvZGUuZXhpc3RzKCkpIiBzaG91bGQgYmUgdHJ1ZQogICAgICAjIENvbmRpdGlvbi5zdWJqZWN0IChTSEFMTDpwb3B1bGF0ZS1pZi1rbm93bikKICAgICAgVGhlbiAkaXBzIGF0ICJCdW5kbGUuZW50cnkucmVzb3VyY2Uub2ZUeXBlKENvbmRpdGlvbikuYWxsKHN1YmplY3QuZXhpc3RzKCkpIiBzaG91bGQgYmUgdHJ1ZQogICAgICAjIENvbmRpdGlvbi5zdWJqZWN0LnJlZmVyZW5jZSAoU0hBTEw6cG9wdWxhdGUtaWYta25vd24pCiAgICAgIFRoZW4gJGlwcyBhdCAiQnVuZGxlLmVudHJ5LnJlc291cmNlLm9mVHlwZShDb25kaXRpb24pLnN1YmplY3QuYWxsKHJlZmVyZW5jZS5leGlzdHMoKSkiIHNob3VsZCBiZSB0cnVlCiAgICAgICMgQ29uZGl0aW9uLm9uc2V0W3hdIChTSEFMTDpwb3B1bGF0ZS1pZi1rbm93bikKICAgICAgVGhlbiAkaXBzIGF0ICJCdW5kbGUuZW50cnkucmVzb3VyY2Uub2ZUeXBlKENvbmRpdGlvbikuYWxsKG9uc2V0LmV4aXN0cygpKSIgc2hvdWxkIGJlIHRydWUKICAgICAgIyBDb25kaXRpb24ub25zZXRbeF06b25zZXREYXRlVGltZSAoU0hPVUxEOmFibGUtdG8tcG9wdWxhdGUpCiAgICAgIFRoZW4gJGlwcyBhdCAiQnVuZGxlLmVudHJ5LnJlc291cmNlLm9mVHlwZShDb25kaXRpb24pLmFsbChvbnNldC5vZlR5cGUoZGF0ZVRpbWUpLmV4aXN0cygpKSIgc2hvdWxkIGJlIHRydWUKICAgICAgIyBUaGUgcmVmZXJlbmNlIGRhdGEgZG9lcyBub3QgZXhlcmNpc2UgdGhlc2U7IHRoZSBDcmVhdG9yIGF0dGVzdHMgdGhlIGNhcGFiaWxpdHkuCiAgICAgIFdoZW4gQ3JlYXRvciBzdWJtaXRzIGV2aWRlbmNlIG9mICJDb25kaXRpb24gW2NhdGVnb3J5XSwgW3NldmVyaXR5XSBiZWluZyBlbnRlcmVkIG9yIGV4cG9ydGVkIChzY3JlZW5zaG90IG9yIGEgZG9jdW1lbnQgY2FycnlpbmcgdGhlbSkiIGFzICRjYW5Qb3B1bGF0ZUV2aWRlbmNlCiAgICAgIFRoZW4gQ3JlYXRvciBjb25maXJtcyBlYWNoIG9mIHRoZXNlIGlzIHN1cHBvcnRlZCBmb3IgIkNvbmRpdGlvbiwgd2hlbiB0aGUgaW5mb3JtYXRpb24gaXMga25vd24iOgogICAgICAgIHwgaXRlbSAgICAgfCBkZXRhaWwgICAgICAgICAgIHwKICAgICAgICB8IGNhdGVnb3J5IHwgY2FuIGJlIHBvcHVsYXRlZCB8CiAgICAgICAgfCBzZXZlcml0eSB8IGNhbiBiZSBwb3B1bGF0ZWQgfAoKICAgIEBwcm9maWxlOk1lZGljYXRpb24tdXYtaXBzCiAgICBAY292ZXJzOk1lZGljYXRpb24uY29kZSBAY292ZXJzOk1lZGljYXRpb24uZm9ybSBAY292ZXJzOk1lZGljYXRpb24uaW5ncmVkaWVudCBAY292ZXJzOk1lZGljYXRpb24uaW5ncmVkaWVudC5pdGVtW3hdCiAgICBAY292ZXJzOk1lZGljYXRpb24uaW5ncmVkaWVudC5zdHJlbmd0aAogICAgU2NlbmFyaW86IGlwcy1jcmVhdG9yLTAwOSBNZWRpY2F0aW9uIChJUFMpIOKAlCB0aGUgQ3JlYXRvciBwb3B1bGF0ZXMgNSBlbGVtZW50cyB3aGVuIGtub3duCiAgICAgICMgSW5zdGFuY2VzOiBCdW5kbGUuZW50cnkucmVzb3VyY2Uub2ZUeXBlKE1lZGljYXRpb24pCiAgICAgICMgVGhlIHJlZmVyZW5jZSBkYXRhIGRvZXMgbm90IGV4ZXJjaXNlIHRoZXNlOyB0aGUgQ3JlYXRvciBhdHRlc3RzIHRoZSBjYXBhYmlsaXR5LgogICAgICBXaGVuIENyZWF0b3Igc3VibWl0cyBldmlkZW5jZSBvZiAiTWVkaWNhdGlvbiBbY29kZV0sIFtmb3JtXSwgW2luZ3JlZGllbnRdLCBbaW5ncmVkaWVudC5pdGVtW3hdXSwgW2luZ3JlZGllbnQuc3RyZW5ndGhdIGJlaW5nIGVudGVyZWQgb3IgZXhwb3J0ZWQgKHNjcmVlbnNob3Qgb3IgYSBkb2N1bWVudCBjYXJyeWluZyB0aGVtKSIgYXMgJGNhblBvcHVsYXRlRXZpZGVuY2UKICAgICAgVGhlbiBDcmVhdG9yIGNvbmZpcm1zIGVhY2ggb2YgdGhlc2UgaXMgc3VwcG9ydGVkIGZvciAiTWVkaWNhdGlvbiwgd2hlbiB0aGUgaW5mb3JtYXRpb24gaXMga25vd24iOgogICAgICAgIHwgaXRlbSAgICAgICAgICAgICAgICB8IGRldGFpbCAgICAgICAgICAgfAogICAgICAgIHwgY29kZSAgICAgICAgICAgICAgICB8IGNhbiBiZSBwb3B1bGF0ZWQgfAogICAgICAgIHwgZm9ybSAgICAgICAgICAgICAgICB8IGNhbiBiZSBwb3B1bGF0ZWQgfAogICAgICAgIHwgaW5ncmVkaWVudCAgICAgICAgICB8IGNhbiBiZSBwb3B1bGF0ZWQgfAogICAgICAgIHwgaW5ncmVkaWVudC5pdGVtW3hdICB8IGNhbiBiZSBwb3B1bGF0ZWQgfAogICAgICAgIHwgaW5ncmVkaWVudC5zdHJlbmd0aCB8IGNhbiBiZSBwb3B1bGF0ZWQgfAoKICAgIEBwcm9maWxlOk1lZGljYXRpb25SZXF1ZXN0LXV2LWlwcwogICAgQGNvdmVyczpNZWRpY2F0aW9uUmVxdWVzdC5tZWRpY2F0aW9uW3hdIEBjb3ZlcnM6TWVkaWNhdGlvblJlcXVlc3Quc3ViamVjdCBAY292ZXJzOk1lZGljYXRpb25SZXF1ZXN0LnN1YmplY3QucmVmZXJlbmNlIEBjb3ZlcnM6TWVkaWNhdGlvblJlcXVlc3QuZG9zYWdlSW5zdHJ1Y3Rpb24KICAgIEBjb3ZlcnM6TWVkaWNhdGlvblJlcXVlc3QuZG9zYWdlSW5zdHJ1Y3Rpb24udGV4dCBAY292ZXJzOk1lZGljYXRpb25SZXF1ZXN0LmRvc2FnZUluc3RydWN0aW9uLnRpbWluZwogICAgU2NlbmFyaW86IGlwcy1jcmVhdG9yLTAxMCBNZWRpY2F0aW9uUmVxdWVzdCAoSVBTKSDigJQgdGhlIENyZWF0b3IgcG9wdWxhdGVzIDYgZWxlbWVudHMgd2hlbiBrbm93bgogICAgICAjIEluc3RhbmNlczogQnVuZGxlLmVudHJ5LnJlc291cmNlLm9mVHlwZShNZWRpY2F0aW9uUmVxdWVzdCkKICAgICAgIyBUaGUgcmVmZXJlbmNlIGRhdGEgZG9lcyBub3QgZXhlcmNpc2UgdGhlc2U7IHRoZSBDcmVhdG9yIGF0dGVzdHMgdGhlIGNhcGFiaWxpdHkuCiAgICAgIFdoZW4gQ3JlYXRvciBzdWJtaXRzIGV2aWRlbmNlIG9mICJNZWRpY2F0aW9uUmVxdWVzdCBbbWVkaWNhdGlvblt4XV0sIFtzdWJqZWN0XSwgW3N1YmplY3QucmVmZXJlbmNlXSwgW2Rvc2FnZUluc3RydWN0aW9uXSwgW2Rvc2FnZUluc3RydWN0aW9uLnRleHRdLCBbZG9zYWdlSW5zdHJ1Y3Rpb24udGltaW5nXSBiZWluZyBlbnRlcmVkIG9yIGV4cG9ydGVkIChzY3JlZW5zaG90IG9yIGEgZG9jdW1lbnQgY2FycnlpbmcgdGhlbSkiIGFzICRjYW5Qb3B1bGF0ZUV2aWRlbmNlCiAgICAgIFRoZW4gQ3JlYXRvciBjb25maXJtcyBlYWNoIG9mIHRoZXNlIGlzIHN1cHBvcnRlZCBmb3IgIk1lZGljYXRpb25SZXF1ZXN0LCB3aGVuIHRoZSBpbmZvcm1hdGlvbiBpcyBrbm93biI6CiAgICAgICAgfCBpdGVtICAgICAgICAgICAgICAgICAgICAgfCBkZXRhaWwgICAgICAgICAgIHwKICAgICAgICB8IG1lZGljYXRpb25beF0gICAgICAgICAgICB8IGNhbiBiZSBwb3B1bGF0ZWQgfAogICAgICAgIHwgc3ViamVjdCAgICAgICAgICAgICAgICAgIHwgY2FuIGJlIHBvcHVsYXRlZCB8CiAgICAgICAgfCBzdWJqZWN0LnJlZmVyZW5jZSAgICAgICAgfCBjYW4gYmUgcG9wdWxhdGVkIHwKICAgICAgICB8IGRvc2FnZUluc3RydWN0aW9uICAgICAgICB8IGNhbiBiZSBwb3B1bGF0ZWQgfAogICAgICAgIHwgZG9zYWdlSW5zdHJ1Y3Rpb24udGV4dCAgIHwgY2FuIGJlIHBvcHVsYXRlZCB8CiAgICAgICAgfCBkb3NhZ2VJbnN0cnVjdGlvbi50aW1pbmcgfCBjYW4gYmUgcG9wdWxhdGVkIHwKCiAgICBAcHJvZmlsZTpNZWRpY2F0aW9uU3RhdGVtZW50LXV2LWlwcwogICAgQGNvdmVyczpNZWRpY2F0aW9uU3RhdGVtZW50Lm1lZGljYXRpb25beF0gQGNvdmVyczpNZWRpY2F0aW9uU3RhdGVtZW50LnN1YmplY3QgQGNvdmVyczpNZWRpY2F0aW9uU3RhdGVtZW50LnN1YmplY3QucmVmZXJlbmNlIEBjb3ZlcnM6TWVkaWNhdGlvblN0YXRlbWVudC5lZmZlY3RpdmVbeF0KICAgIEBjb3ZlcnM6TWVkaWNhdGlvblN0YXRlbWVudC5lZmZlY3RpdmVbeF06ZWZmZWN0aXZlRGF0ZVRpbWUgQGNvdmVyczpNZWRpY2F0aW9uU3RhdGVtZW50LmRvc2FnZSBAY292ZXJzOk1lZGljYXRpb25TdGF0ZW1lbnQuZG9zYWdlLnRleHQgQGNvdmVyczpNZWRpY2F0aW9uU3RhdGVtZW50LmRvc2FnZS50aW1pbmcKICAgIFNjZW5hcmlvOiBpcHMtY3JlYXRvci0wMTEgTWVkaWNhdGlvblN0YXRlbWVudCAoSVBTKSDigJQgdGhlIENyZWF0b3IgcG9wdWxhdGVzIDcgZWxlbWVudHMgd2hlbiBrbm93bgogICAgICAjIEluc3RhbmNlczogQnVuZGxlLmVudHJ5LnJlc291cmNlLm9mVHlwZShNZWRpY2F0aW9uU3RhdGVtZW50KQogICAgICAjIE1lZGljYXRpb25TdGF0ZW1lbnQubWVkaWNhdGlvblt4XSAoU0hBTEw6cG9wdWxhdGUtaWYta25vd24pCiAgICAgIFRoZW4gJGlwcyBhdCAiQnVuZGxlLmVudHJ5LnJlc291cmNlLm9mVHlwZShNZWRpY2F0aW9uU3RhdGVtZW50KS5hbGwobWVkaWNhdGlvbi5leGlzdHMoKSkiIHNob3VsZCBiZSB0cnVlCiAgICAgICMgTWVkaWNhdGlvblN0YXRlbWVudC5zdWJqZWN0IChTSEFMTDpwb3B1bGF0ZS1pZi1rbm93bikKICAgICAgVGhlbiAkaXBzIGF0ICJCdW5kbGUuZW50cnkucmVzb3VyY2Uub2ZUeXBlKE1lZGljYXRpb25TdGF0ZW1lbnQpLmFsbChzdWJqZWN0LmV4aXN0cygpKSIgc2hvdWxkIGJlIHRydWUKICAgICAgIyBNZWRpY2F0aW9uU3RhdGVtZW50LnN1YmplY3QucmVmZXJlbmNlIChTSEFMTDpwb3B1bGF0ZS1pZi1rbm93bikKICAgICAgVGhlbiAkaXBzIGF0ICJCdW5kbGUuZW50cnkucmVzb3VyY2Uub2ZUeXBlKE1lZGljYXRpb25TdGF0ZW1lbnQpLnN1YmplY3QuYWxsKHJlZmVyZW5jZS5leGlzdHMoKSkiIHNob3VsZCBiZSB0cnVlCiAgICAgICMgTWVkaWNhdGlvblN0YXRlbWVudC5lZmZlY3RpdmVbeF0gKFNIQUxMOnBvcHVsYXRlLWlmLWtub3duKQogICAgICBUaGVuICRpcHMgYXQgIkJ1bmRsZS5lbnRyeS5yZXNvdXJjZS5vZlR5cGUoTWVkaWNhdGlvblN0YXRlbWVudCkuYWxsKGVmZmVjdGl2ZS5leGlzdHMoKSkiIHNob3VsZCBiZSB0cnVlCiAgICAgICMgTWVkaWNhdGlvblN0YXRlbWVudC5lZmZlY3RpdmVbeF06ZWZmZWN0aXZlRGF0ZVRpbWUgKFNIT1VMRDphYmxlLXRvLXBvcHVsYXRlKQogICAgICBUaGVuICRpcHMgYXQgIkJ1bmRsZS5lbnRyeS5yZXNvdXJjZS5vZlR5cGUoTWVkaWNhdGlvblN0YXRlbWVudCkuYWxsKGVmZmVjdGl2ZS5vZlR5cGUoZGF0ZVRpbWUpLmV4aXN0cygpKSIgc2hvdWxkIGJlIHRydWUKICAgICAgIyBNZWRpY2F0aW9uU3RhdGVtZW50LmRvc2FnZSAoU0hBTEw6cG9wdWxhdGUtaWYta25vd24pCiAgICAgIFRoZW4gJGlwcyBhdCAiQnVuZGxlLmVudHJ5LnJlc291cmNlLm9mVHlwZShNZWRpY2F0aW9uU3RhdGVtZW50KS5hbGwoZG9zYWdlLmV4aXN0cygpKSIgc2hvdWxkIGJlIHRydWUKICAgICAgIyBNZWRpY2F0aW9uU3RhdGVtZW50LmRvc2FnZS50ZXh0IChTSEFMTDpwb3B1bGF0ZS1pZi1rbm93bikKICAgICAgVGhlbiAkaXBzIGF0ICJCdW5kbGUuZW50cnkucmVzb3VyY2Uub2ZUeXBlKE1lZGljYXRpb25TdGF0ZW1lbnQpLmRvc2FnZS5hbGwodGV4dC5leGlzdHMoKSkiIHNob3VsZCBiZSB0cnVlCiAgICAgICMgTWVkaWNhdGlvblN0YXRlbWVudC5kb3NhZ2UudGltaW5nIChTSEFMTDpwb3B1bGF0ZS1pZi1rbm93bikg4oCUIHRoZSByZWZlcmVuY2UgZGF0YSBjYXJyaWVzIGl0IG9uIHNvbWUgaW5zdGFuY2VzCiAgICAgIFRoZW4gJGlwcyBhdCAiQnVuZGxlLmVudHJ5LnJlc291cmNlLm9mVHlwZShNZWRpY2F0aW9uU3RhdGVtZW50KS5kb3NhZ2Uud2hlcmUodGltaW5nLmV4aXN0cygpKS5leGlzdHMoKSIgc2hvdWxkIGJlIHRydWUKCiAgUnVsZTogVGhlIHJlY29tbWVuZGVkIHNlY3Rpb25zOiBpbW11bml6YXRpb25zLCByZXN1bHRzLCBwcm9jZWR1cmVzLCBkZXZpY2VzCgogICAgQHByb2ZpbGU6SW1tdW5pemF0aW9uLXV2LWlwcwogICAgQGNvdmVyczpJbW11bml6YXRpb24uc3RhdHVzIEBjb3ZlcnM6SW1tdW5pemF0aW9uLnZhY2NpbmVDb2RlIEBjb3ZlcnM6SW1tdW5pemF0aW9uLnBhdGllbnQgQGNvdmVyczpJbW11bml6YXRpb24ucGF0aWVudC5yZWZlcmVuY2UKICAgIEBjb3ZlcnM6SW1tdW5pemF0aW9uLm9jY3VycmVuY2VbeF0gQGNvdmVyczpJbW11bml6YXRpb24ub2NjdXJyZW5jZVt4XTpvY2N1cnJlbmNlRGF0ZVRpbWUKICAgIFNjZW5hcmlvOiBpcHMtY3JlYXRvci0wMTIgSW1tdW5pemF0aW9uIChJUFMpIOKAlCB0aGUgQ3JlYXRvciBwb3B1bGF0ZXMgNSBlbGVtZW50cyB3aGVuIGtub3duCiAgICAgICMgSW5zdGFuY2VzOiBCdW5kbGUuZW50cnkucmVzb3VyY2Uub2ZUeXBlKEltbXVuaXphdGlvbikKICAgICAgIyBJbW11bml6YXRpb24uc3RhdHVzIChTSEFMTDpwb3B1bGF0ZS1pZi1rbm93bikKICAgICAgVGhlbiAkaXBzIGF0ICJCdW5kbGUuZW50cnkucmVzb3VyY2Uub2ZUeXBlKEltbXVuaXphdGlvbikuYWxsKHN0YXR1cy5leGlzdHMoKSkiIHNob3VsZCBiZSB0cnVlCiAgICAgICMgSW1tdW5pemF0aW9uLnZhY2NpbmVDb2RlIChTSEFMTDpwb3B1bGF0ZS1pZi1rbm93bikKICAgICAgVGhlbiAkaXBzIGF0ICJCdW5kbGUuZW50cnkucmVzb3VyY2Uub2ZUeXBlKEltbXVuaXphdGlvbikuYWxsKHZhY2NpbmVDb2RlLmV4aXN0cygpKSIgc2hvdWxkIGJlIHRydWUKICAgICAgIyBJbW11bml6YXRpb24ucGF0aWVudCAoU0hBTEw6cG9wdWxhdGUtaWYta25vd24pCiAgICAgIFRoZW4gJGlwcyBhdCAiQnVuZGxlLmVudHJ5LnJlc291cmNlLm9mVHlwZShJbW11bml6YXRpb24pLmFsbChwYXRpZW50LmV4aXN0cygpKSIgc2hvdWxkIGJlIHRydWUKICAgICAgIyBJbW11bml6YXRpb24ucGF0aWVudC5yZWZlcmVuY2UgKFNIQUxMOnBvcHVsYXRlLWlmLWtub3duKQogICAgICBUaGVuICRpcHMgYXQgIkJ1bmRsZS5lbnRyeS5yZXNvdXJjZS5vZlR5cGUoSW1tdW5pemF0aW9uKS5wYXRpZW50LmFsbChyZWZlcmVuY2UuZXhpc3RzKCkpIiBzaG91bGQgYmUgdHJ1ZQogICAgICAjIEltbXVuaXphdGlvbi5vY2N1cnJlbmNlW3hdIChTSEFMTDpwb3B1bGF0ZS1pZi1rbm93bikKICAgICAgVGhlbiAkaXBzIGF0ICJCdW5kbGUuZW50cnkucmVzb3VyY2Uub2ZUeXBlKEltbXVuaXphdGlvbikuYWxsKG9jY3VycmVuY2UuZXhpc3RzKCkpIiBzaG91bGQgYmUgdHJ1ZQogICAgICAjIEltbXVuaXphdGlvbi5vY2N1cnJlbmNlW3hdOm9jY3VycmVuY2VEYXRlVGltZSAoU0hPVUxEOmFibGUtdG8tcG9wdWxhdGUpCiAgICAgIFRoZW4gJGlwcyBhdCAiQnVuZGxlLmVudHJ5LnJlc291cmNlLm9mVHlwZShJbW11bml6YXRpb24pLmFsbChvY2N1cnJlbmNlLm9mVHlwZShkYXRlVGltZSkuZXhpc3RzKCkpIiBzaG91bGQgYmUgdHJ1ZQoKICAgIEBwcm9maWxlOk9ic2VydmF0aW9uLXJlc3VsdHMtbGFib3JhdG9yeS1wYXRob2xvZ3ktdXYtaXBzCiAgICBAY292ZXJzOk9ic2VydmF0aW9uLmNhdGVnb3J5OmxhYm9yYXRvcnkgQGNvdmVyczpPYnNlcnZhdGlvbi5jb2RlIEBjb3ZlcnM6T2JzZXJ2YXRpb24uc3ViamVjdCBAY292ZXJzOk9ic2VydmF0aW9uLnN1YmplY3QucmVmZXJlbmNlCiAgICBAY292ZXJzOk9ic2VydmF0aW9uLmVmZmVjdGl2ZVt4XSBAY292ZXJzOk9ic2VydmF0aW9uLmVmZmVjdGl2ZVt4XTplZmZlY3RpdmVEYXRlVGltZSBAY292ZXJzOk9ic2VydmF0aW9uLnBlcmZvcm1lciBAY292ZXJzOk9ic2VydmF0aW9uLnZhbHVlW3hdOnZhbHVlU3RyaW5nCiAgICBAY292ZXJzOk9ic2VydmF0aW9uLnZhbHVlW3hdOnZhbHVlUXVhbnRpdHkgQGNvdmVyczpPYnNlcnZhdGlvbi52YWx1ZVt4XTp2YWx1ZUNvZGVhYmxlQ29uY2VwdCBAY292ZXJzOk9ic2VydmF0aW9uLmNvbXBvbmVudAogICAgU2NlbmFyaW86IGlwcy1jcmVhdG9yLTAxMyBPYnNlcnZhdGlvbiBSZXN1bHRzIC0gTGFib3JhdG9yeS9QYXRob2xvZ3kgKElQUykg4oCUIHRoZSBDcmVhdG9yIHBvcHVsYXRlcyAxMCBlbGVtZW50cyB3aGVuIGtub3duCiAgICAgICMgSW5zdGFuY2VzOiBCdW5kbGUuZW50cnkucmVzb3VyY2Uub2ZUeXBlKE9ic2VydmF0aW9uKS53aGVyZShjYXRlZ29yeS5jb2Rpbmcud2hlcmUoY29kZT0nbGFib3JhdG9yeScpLmV4aXN0cygpKQogICAgICAjIE9ic2VydmF0aW9uLmNhdGVnb3J5OmxhYm9yYXRvcnkgKFNIQUxMOnBvcHVsYXRlLWlmLWtub3duKQogICAgICBUaGVuICRpcHMgYXQgIkJ1bmRsZS5lbnRyeS5yZXNvdXJjZS5vZlR5cGUoT2JzZXJ2YXRpb24pLndoZXJlKGNhdGVnb3J5LmNvZGluZy53aGVyZShjb2RlPSdsYWJvcmF0b3J5JykuZXhpc3RzKCkpLmFsbChjYXRlZ29yeS53aGVyZShjb2Rpbmcud2hlcmUoc3lzdGVtPSdodHRwOi8vdGVybWlub2xvZ3kuaGw3Lm9yZy9Db2RlU3lzdGVtL29ic2VydmF0aW9uLWNhdGVnb3J5JyBhbmQgY29kZT0nbGFib3JhdG9yeScpLmV4aXN0cygpKS5leGlzdHMoKSkiIHNob3VsZCBiZSB0cnVlCiAgICAgICMgT2JzZXJ2YXRpb24uY29kZSAoU0hBTEw6cG9wdWxhdGUtaWYta25vd24pCiAgICAgIFRoZW4gJGlwcyBhdCAiQnVuZGxlLmVudHJ5LnJlc291cmNlLm9mVHlwZShPYnNlcnZhdGlvbikud2hlcmUoY2F0ZWdvcnkuY29kaW5nLndoZXJlKGNvZGU9J2xhYm9yYXRvcnknKS5leGlzdHMoKSkuYWxsKGNvZGUuZXhpc3RzKCkpIiBzaG91bGQgYmUgdHJ1ZQogICAgICAjIE9ic2VydmF0aW9uLnN1YmplY3QgKFNIQUxMOnBvcHVsYXRlLWlmLWtub3duKQogICAgICBUaGVuICRpcHMgYXQgIkJ1bmRsZS5lbnRyeS5yZXNvdXJjZS5vZlR5cGUoT2JzZXJ2YXRpb24pLndoZXJlKGNhdGVnb3J5LmNvZGluZy53aGVyZShjb2RlPSdsYWJvcmF0b3J5JykuZXhpc3RzKCkpLmFsbChzdWJqZWN0LmV4aXN0cygpKSIgc2hvdWxkIGJlIHRydWUKICAgICAgIyBPYnNlcnZhdGlvbi5zdWJqZWN0LnJlZmVyZW5jZSAoU0hBTEw6cG9wdWxhdGUtaWYta25vd24pCiAgICAgIFRoZW4gJGlwcyBhdCAiQnVuZGxlLmVudHJ5LnJlc291cmNlLm9mVHlwZShPYnNlcnZhdGlvbikud2hlcmUoY2F0ZWdvcnkuY29kaW5nLndoZXJlKGNvZGU9J2xhYm9yYXRvcnknKS5leGlzdHMoKSkuc3ViamVjdC5hbGwocmVmZXJlbmNlLmV4aXN0cygpKSIgc2hvdWxkIGJlIHRydWUKICAgICAgIyBPYnNlcnZhdGlvbi5lZmZlY3RpdmVbeF0gKFNIQUxMOnBvcHVsYXRlLWlmLWtub3duKQogICAgICBUaGVuICRpcHMgYXQgIkJ1bmRsZS5lbnRyeS5yZXNvdXJjZS5vZlR5cGUoT2JzZXJ2YXRpb24pLndoZXJlKGNhdGVnb3J5LmNvZGluZy53aGVyZShjb2RlPSdsYWJvcmF0b3J5JykuZXhpc3RzKCkpLmFsbChlZmZlY3RpdmUuZXhpc3RzKCkpIiBzaG91bGQgYmUgdHJ1ZQogICAgICAjIE9ic2VydmF0aW9uLmVmZmVjdGl2ZVt4XTplZmZlY3RpdmVEYXRlVGltZSAoU0hPVUxEOmFibGUtdG8tcG9wdWxhdGUpCiAgICAgIFRoZW4gJGlwcyBhdCAiQnVuZGxlLmVudHJ5LnJlc291cmNlLm9mVHlwZShPYnNlcnZhdGlvbikud2hlcmUoY2F0ZWdvcnkuY29kaW5nLndoZXJlKGNvZGU9J2xhYm9yYXRvcnknKS5leGlzdHMoKSkuYWxsKGVmZmVjdGl2ZS5vZlR5cGUoZGF0ZVRpbWUpLmV4aXN0cygpKSIgc2hvdWxkIGJlIHRydWUKICAgICAgIyBPYnNlcnZhdGlvbi5wZXJmb3JtZXIgKFNIQUxMOnBvcHVsYXRlLWlmLWtub3duKQogICAgICBUaGVuICRpcHMgYXQgIkJ1bmRsZS5lbnRyeS5yZXNvdXJjZS5vZlR5cGUoT2JzZXJ2YXRpb24pLndoZXJlKGNhdGVnb3J5LmNvZGluZy53aGVyZShjb2RlPSdsYWJvcmF0b3J5JykuZXhpc3RzKCkpLmFsbChwZXJmb3JtZXIuZXhpc3RzKCkpIiBzaG91bGQgYmUgdHJ1ZQogICAgICAjIE9ic2VydmF0aW9uLnZhbHVlW3hdOnZhbHVlU3RyaW5nIChTSEFMTDpwb3B1bGF0ZS1pZi1rbm93bikg4oCUIHRoZSByZWZlcmVuY2UgZGF0YSBjYXJyaWVzIGl0IG9uIHNvbWUgaW5zdGFuY2VzCiAgICAgIFRoZW4gJGlwcyBhdCAiQnVuZGxlLmVudHJ5LnJlc291cmNlLm9mVHlwZShPYnNlcnZhdGlvbikud2hlcmUoY2F0ZWdvcnkuY29kaW5nLndoZXJlKGNvZGU9J2xhYm9yYXRvcnknKS5leGlzdHMoKSkud2hlcmUodmFsdWUub2ZUeXBlKHN0cmluZykuZXhpc3RzKCkpLmV4aXN0cygpIiBzaG91bGQgYmUgdHJ1ZQogICAgICAjIE9ic2VydmF0aW9uLnZhbHVlW3hdOnZhbHVlUXVhbnRpdHkgKFNIQUxMOnBvcHVsYXRlLWlmLWtub3duKSDigJQgdGhlIHJlZmVyZW5jZSBkYXRhIGNhcnJpZXMgaXQgb24gc29tZSBpbnN0YW5jZXMKICAgICAgVGhlbiAkaXBzIGF0ICJCdW5kbGUuZW50cnkucmVzb3VyY2Uub2ZUeXBlKE9ic2VydmF0aW9uKS53aGVyZShjYXRlZ29yeS5jb2Rpbmcud2hlcmUoY29kZT0nbGFib3JhdG9yeScpLmV4aXN0cygpKS53aGVyZSh2YWx1ZS5vZlR5cGUoUXVhbnRpdHkpLmV4aXN0cygpKS5leGlzdHMoKSIgc2hvdWxkIGJlIHRydWUKICAgICAgIyBUaGUgcmVmZXJlbmNlIGRhdGEgZG9lcyBub3QgZXhlcmNpc2UgdGhlc2U7IHRoZSBDcmVhdG9yIGF0dGVzdHMgdGhlIGNhcGFiaWxpdHkuCiAgICAgIFdoZW4gQ3JlYXRvciBzdWJtaXRzIGV2aWRlbmNlIG9mICJPYnNlcnZhdGlvbiBbdmFsdWVbeF06dmFsdWVDb2RlYWJsZUNvbmNlcHRdLCBbY29tcG9uZW50XSBiZWluZyBlbnRlcmVkIG9yIGV4cG9ydGVkIChzY3JlZW5zaG90IG9yIGEgZG9jdW1lbnQgY2FycnlpbmcgdGhlbSkiIGFzICRjYW5Qb3B1bGF0ZUV2aWRlbmNlCiAgICAgIFRoZW4gQ3JlYXRvciBjb25maXJtcyBlYWNoIG9mIHRoZXNlIGlzIHN1cHBvcnRlZCBmb3IgIk9ic2VydmF0aW9uLCB3aGVuIHRoZSBpbmZvcm1hdGlvbiBpcyBrbm93biI6CiAgICAgICAgfCBpdGVtICAgICAgICAgICAgICAgICAgICAgICAgICB8IGRldGFpbCAgICAgICAgICAgfAogICAgICAgIHwgdmFsdWVbeF06dmFsdWVDb2RlYWJsZUNvbmNlcHQgfCBjYW4gYmUgcG9wdWxhdGVkIHwKICAgICAgICB8IGNvbXBvbmVudCAgICAgICAgICAgICAgICAgICAgIHwgY2FuIGJlIHBvcHVsYXRlZCB8CgogICAgQHByb2ZpbGU6T2JzZXJ2YXRpb24tcmVzdWx0cy1yYWRpb2xvZ3ktdXYtaXBzCiAgICBAY292ZXJzOk9ic2VydmF0aW9uLmNhdGVnb3J5OnJhZGlvbG9neSBAY292ZXJzOk9ic2VydmF0aW9uLmNvZGUgQGNvdmVyczpPYnNlcnZhdGlvbi5zdWJqZWN0IEBjb3ZlcnM6T2JzZXJ2YXRpb24uc3ViamVjdC5yZWZlcmVuY2UKICAgIEBjb3ZlcnM6T2JzZXJ2YXRpb24uZWZmZWN0aXZlW3hdIEBjb3ZlcnM6T2JzZXJ2YXRpb24uZWZmZWN0aXZlW3hdOmVmZmVjdGl2ZURhdGVUaW1lIEBjb3ZlcnM6T2JzZXJ2YXRpb24ucGVyZm9ybWVyIEBjb3ZlcnM6T2JzZXJ2YXRpb24udmFsdWVbeF06dmFsdWVTdHJpbmcKICAgIEBjb3ZlcnM6T2JzZXJ2YXRpb24uY29tcG9uZW50CiAgICBTY2VuYXJpbzogaXBzLWNyZWF0b3ItMDE0IE9ic2VydmF0aW9uIFJlc3VsdHMgLSBSYWRpb2xvZ3kgKElQUykg4oCUIHRoZSBDcmVhdG9yIHBvcHVsYXRlcyA4IGVsZW1lbnRzIHdoZW4ga25vd24KICAgICAgIyBJbnN0YW5jZXM6IEJ1bmRsZS5lbnRyeS5yZXNvdXJjZS5vZlR5cGUoT2JzZXJ2YXRpb24pLndoZXJlKGNhdGVnb3J5LmNvZGluZy53aGVyZShjb2RlPSdpbWFnaW5nJykuZXhpc3RzKCkpCiAgICAgICMgVGhlIHJlZmVyZW5jZSBkYXRhIGRvZXMgbm90IGV4ZXJjaXNlIHRoZXNlOyB0aGUgQ3JlYXRvciBhdHRlc3RzIHRoZSBjYXBhYmlsaXR5LgogICAgICBXaGVuIENyZWF0b3Igc3VibWl0cyBldmlkZW5jZSBvZiAiT2JzZXJ2YXRpb24gW2NhdGVnb3J5OnJhZGlvbG9neV0sIFtjb2RlXSwgW3N1YmplY3RdLCBbc3ViamVjdC5yZWZlcmVuY2VdLCBbZWZmZWN0aXZlW3hdXSwgW2VmZmVjdGl2ZVt4XTplZmZlY3RpdmVEYXRlVGltZV0sIFtwZXJmb3JtZXJdLCBbdmFsdWVbeF06dmFsdWVTdHJpbmddLCBbY29tcG9uZW50XSBiZWluZyBlbnRlcmVkIG9yIGV4cG9ydGVkIChzY3JlZW5zaG90IG9yIGEgZG9jdW1lbnQgY2FycnlpbmcgdGhlbSkiIGFzICRjYW5Qb3B1bGF0ZUV2aWRlbmNlCiAgICAgIFRoZW4gQ3JlYXRvciBjb25maXJtcyBlYWNoIG9mIHRoZXNlIGlzIHN1cHBvcnRlZCBmb3IgIk9ic2VydmF0aW9uLCB3aGVuIHRoZSBpbmZvcm1hdGlvbiBpcyBrbm93biI6CiAgICAgICAgfCBpdGVtICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBkZXRhaWwgICAgICAgICAgIHwKICAgICAgICB8IGNhdGVnb3J5OnJhZGlvbG9neSAgICAgICAgICAgICB8IGNhbiBiZSBwb3B1bGF0ZWQgfAogICAgICAgIHwgY29kZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY2FuIGJlIHBvcHVsYXRlZCB8CiAgICAgICAgfCBzdWJqZWN0ICAgICAgICAgICAgICAgICAgICAgICAgfCBjYW4gYmUgcG9wdWxhdGVkIHwKICAgICAgICB8IHN1YmplY3QucmVmZXJlbmNlICAgICAgICAgICAgICB8IGNhbiBiZSBwb3B1bGF0ZWQgfAogICAgICAgIHwgZWZmZWN0aXZlW3hdICAgICAgICAgICAgICAgICAgIHwgY2FuIGJlIHBvcHVsYXRlZCB8CiAgICAgICAgfCBlZmZlY3RpdmVbeF06ZWZmZWN0aXZlRGF0ZVRpbWUgfCBjYW4gYmUgcG9wdWxhdGVkIHwKICAgICAgICB8IHBlcmZvcm1lciAgICAgICAgICAgICAgICAgICAgICB8IGNhbiBiZSBwb3B1bGF0ZWQgfAogICAgICAgIHwgdmFsdWVbeF06dmFsdWVTdHJpbmcgICAgICAgICAgIHwgY2FuIGJlIHBvcHVsYXRlZCB8CiAgICAgICAgfCBjb21wb25lbnQgICAgICAgICAgICAgICAgICAgICAgfCBjYW4gYmUgcG9wdWxhdGVkIHwKCiAgICBAcHJvZmlsZTpEaWFnbm9zdGljUmVwb3J0LXV2LWlwcwogICAgQGNvdmVyczpEaWFnbm9zdGljUmVwb3J0LmNvZGUgQGNvdmVyczpEaWFnbm9zdGljUmVwb3J0LnN1YmplY3QgQGNvdmVyczpEaWFnbm9zdGljUmVwb3J0LnN1YmplY3QucmVmZXJlbmNlIEBjb3ZlcnM6RGlhZ25vc3RpY1JlcG9ydC5lZmZlY3RpdmVbeF0KICAgIEBjb3ZlcnM6RGlhZ25vc3RpY1JlcG9ydC5lZmZlY3RpdmVbeF06ZWZmZWN0aXZlRGF0ZVRpbWUgQGNvdmVyczpEaWFnbm9zdGljUmVwb3J0LnBlcmZvcm1lciBAY292ZXJzOkRpYWdub3N0aWNSZXBvcnQucmVzdWx0Om9ic2VydmF0aW9uLXJlc3VsdHMKICAgIFNjZW5hcmlvOiBpcHMtY3JlYXRvci0wMTUgRGlhZ25vc3RpY1JlcG9ydCAoSVBTKSDigJQgdGhlIENyZWF0b3IgcG9wdWxhdGVzIDYgZWxlbWVudHMgd2hlbiBrbm93bgogICAgICAjIEluc3RhbmNlczogQnVuZGxlLmVudHJ5LnJlc291cmNlLm9mVHlwZShEaWFnbm9zdGljUmVwb3J0KQogICAgICAjIFRoZSByZWZlcmVuY2UgZGF0YSBkb2VzIG5vdCBleGVyY2lzZSB0aGVzZTsgdGhlIENyZWF0b3IgYXR0ZXN0cyB0aGUgY2FwYWJpbGl0eS4KICAgICAgV2hlbiBDcmVhdG9yIHN1Ym1pdHMgZXZpZGVuY2Ugb2YgIkRpYWdub3N0aWNSZXBvcnQgW2NvZGVdLCBbc3ViamVjdF0sIFtzdWJqZWN0LnJlZmVyZW5jZV0sIFtlZmZlY3RpdmVbeF1dLCBbZWZmZWN0aXZlW3hdOmVmZmVjdGl2ZURhdGVUaW1lXSwgW3BlcmZvcm1lcl0sIFtyZXN1bHQ6b2JzZXJ2YXRpb24tcmVzdWx0c10gYmVpbmcgZW50ZXJlZCBvciBleHBvcnRlZCAoc2NyZWVuc2hvdCBvciBhIGRvY3VtZW50IGNhcnJ5aW5nIHRoZW0pIiBhcyAkY2FuUG9wdWxhdGVFdmlkZW5jZQogICAgICBUaGVuIENyZWF0b3IgY29uZmlybXMgZWFjaCBvZiB0aGVzZSBpcyBzdXBwb3J0ZWQgZm9yICJEaWFnbm9zdGljUmVwb3J0LCB3aGVuIHRoZSBpbmZvcm1hdGlvbiBpcyBrbm93biI6CiAgICAgICAgfCBpdGVtICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBkZXRhaWwgICAgICAgICAgIHwKICAgICAgICB8IGNvZGUgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNhbiBiZSBwb3B1bGF0ZWQgfAogICAgICAgIHwgc3ViamVjdCAgICAgICAgICAgICAgICAgICAgICAgIHwgY2FuIGJlIHBvcHVsYXRlZCB8CiAgICAgICAgfCBzdWJqZWN0LnJlZmVyZW5jZSAgICAgICAgICAgICAgfCBjYW4gYmUgcG9wdWxhdGVkIHwKICAgICAgICB8IGVmZmVjdGl2ZVt4XSAgICAgICAgICAgICAgICAgICB8IGNhbiBiZSBwb3B1bGF0ZWQgfAogICAgICAgIHwgZWZmZWN0aXZlW3hdOmVmZmVjdGl2ZURhdGVUaW1lIHwgY2FuIGJlIHBvcHVsYXRlZCB8CiAgICAgICAgfCBwZXJmb3JtZXIgICAgICAgICAgICAgICAgICAgICAgfCBjYW4gYmUgcG9wdWxhdGVkIHwKICAgICAgICB8IHJlc3VsdDpvYnNlcnZhdGlvbi1yZXN1bHRzICAgICB8IGNhbiBiZSBwb3B1bGF0ZWQgfAoKICAgIEBwcm9maWxlOlNwZWNpbWVuLXV2LWlwcwogICAgQGNvdmVyczpTcGVjaW1lbi50eXBlIEBjb3ZlcnM6U3BlY2ltZW4uc3ViamVjdCBAY292ZXJzOlNwZWNpbWVuLnN1YmplY3QucmVmZXJlbmNlCiAgICBTY2VuYXJpbzogaXBzLWNyZWF0b3ItMDE2IFNwZWNpbWVuIChJUFMpIOKAlCB0aGUgQ3JlYXRvciBwb3B1bGF0ZXMgMyBlbGVtZW50cyB3aGVuIGtub3duCiAgICAgICMgSW5zdGFuY2VzOiBCdW5kbGUuZW50cnkucmVzb3VyY2Uub2ZUeXBlKFNwZWNpbWVuKQogICAgICAjIFRoZSByZWZlcmVuY2UgZGF0YSBkb2VzIG5vdCBleGVyY2lzZSB0aGVzZTsgdGhlIENyZWF0b3IgYXR0ZXN0cyB0aGUgY2FwYWJpbGl0eS4KICAgICAgV2hlbiBDcmVhdG9yIHN1Ym1pdHMgZXZpZGVuY2Ugb2YgIlNwZWNpbWVuIFt0eXBlXSwgW3N1YmplY3RdLCBbc3ViamVjdC5yZWZlcmVuY2VdIGJlaW5nIGVudGVyZWQgb3IgZXhwb3J0ZWQgKHNjcmVlbnNob3Qgb3IgYSBkb2N1bWVudCBjYXJyeWluZyB0aGVtKSIgYXMgJGNhblBvcHVsYXRlRXZpZGVuY2UKICAgICAgVGhlbiBDcmVhdG9yIGNvbmZpcm1zIGVhY2ggb2YgdGhlc2UgaXMgc3VwcG9ydGVkIGZvciAiU3BlY2ltZW4sIHdoZW4gdGhlIGluZm9ybWF0aW9uIGlzIGtub3duIjoKICAgICAgICB8IGl0ZW0gICAgICAgICAgICAgIHwgZGV0YWlsICAgICAgICAgICB8CiAgICAgICAgfCB0eXBlICAgICAgICAgICAgICB8IGNhbiBiZSBwb3B1bGF0ZWQgfAogICAgICAgIHwgc3ViamVjdCAgICAgICAgICAgfCBjYW4gYmUgcG9wdWxhdGVkIHwKICAgICAgICB8IHN1YmplY3QucmVmZXJlbmNlIHwgY2FuIGJlIHBvcHVsYXRlZCB8CgogICAgQHByb2ZpbGU6SW1hZ2luZ1N0dWR5LXV2LWlwcwogICAgQGNvdmVyczpJbWFnaW5nU3R1ZHkuaWRlbnRpZmllciBAY292ZXJzOkltYWdpbmdTdHVkeS5zdWJqZWN0IEBjb3ZlcnM6SW1hZ2luZ1N0dWR5LnN1YmplY3QucmVmZXJlbmNlIEBjb3ZlcnM6SW1hZ2luZ1N0dWR5LnN0YXJ0ZWQKICAgIEBjb3ZlcnM6SW1hZ2luZ1N0dWR5LnByb2NlZHVyZUNvZGUgQGNvdmVyczpJbWFnaW5nU3R1ZHkucmVhc29uQ29kZSBAY292ZXJzOkltYWdpbmdTdHVkeS5zZXJpZXMgQGNvdmVyczpJbWFnaW5nU3R1ZHkuc2VyaWVzLnVpZAogICAgQGNvdmVyczpJbWFnaW5nU3R1ZHkuc2VyaWVzLm1vZGFsaXR5IEBjb3ZlcnM6SW1hZ2luZ1N0dWR5LnNlcmllcy5pbnN0YW5jZSBAY292ZXJzOkltYWdpbmdTdHVkeS5zZXJpZXMuaW5zdGFuY2UudWlkIEBjb3ZlcnM6SW1hZ2luZ1N0dWR5LnNlcmllcy5pbnN0YW5jZS5zb3BDbGFzcwogICAgU2NlbmFyaW86IGlwcy1jcmVhdG9yLTAxNyBJbWFnaW5nU3R1ZHkgKElQUykg4oCUIHRoZSBDcmVhdG9yIHBvcHVsYXRlcyAxMiBlbGVtZW50cyB3aGVuIGtub3duCiAgICAgICMgSW5zdGFuY2VzOiBCdW5kbGUuZW50cnkucmVzb3VyY2Uub2ZUeXBlKEltYWdpbmdTdHVkeSkKICAgICAgIyBUaGUgcmVmZXJlbmNlIGRhdGEgZG9lcyBub3QgZXhlcmNpc2UgdGhlc2U7IHRoZSBDcmVhdG9yIGF0dGVzdHMgdGhlIGNhcGFiaWxpdHkuCiAgICAgIFdoZW4gQ3JlYXRvciBzdWJtaXRzIGV2aWRlbmNlIG9mICJJbWFnaW5nU3R1ZHkgW2lkZW50aWZpZXJdLCBbc3ViamVjdF0sIFtzdWJqZWN0LnJlZmVyZW5jZV0sIFtzdGFydGVkXSwgW3Byb2NlZHVyZUNvZGVdLCBbcmVhc29uQ29kZV0sIFtzZXJpZXNdLCBbc2VyaWVzLnVpZF0sIFtzZXJpZXMubW9kYWxpdHldLCBbc2VyaWVzLmluc3RhbmNlXSwgW3Nlcmllcy5pbnN0YW5jZS51aWRdLCBbc2VyaWVzLmluc3RhbmNlLnNvcENsYXNzXSBiZWluZyBlbnRlcmVkIG9yIGV4cG9ydGVkIChzY3JlZW5zaG90IG9yIGEgZG9jdW1lbnQgY2FycnlpbmcgdGhlbSkiIGFzICRjYW5Qb3B1bGF0ZUV2aWRlbmNlCiAgICAgIFRoZW4gQ3JlYXRvciBjb25maXJtcyBlYWNoIG9mIHRoZXNlIGlzIHN1cHBvcnRlZCBmb3IgIkltYWdpbmdTdHVkeSwgd2hlbiB0aGUgaW5mb3JtYXRpb24gaXMga25vd24iOgogICAgICAgIHwgaXRlbSAgICAgICAgICAgICAgICAgICAgIHwgZGV0YWlsICAgICAgICAgICB8CiAgICAgICAgfCBpZGVudGlmaWVyICAgICAgICAgICAgICAgfCBjYW4gYmUgcG9wdWxhdGVkIHwKICAgICAgICB8IHN1YmplY3QgICAgICAgICAgICAgICAgICB8IGNhbiBiZSBwb3B1bGF0ZWQgfAogICAgICAgIHwgc3ViamVjdC5yZWZlcmVuY2UgICAgICAgIHwgY2FuIGJlIHBvcHVsYXRlZCB8CiAgICAgICAgfCBzdGFydGVkICAgICAgICAgICAgICAgICAgfCBjYW4gYmUgcG9wdWxhdGVkIHwKICAgICAgICB8IHByb2NlZHVyZUNvZGUgICAgICAgICAgICB8IGNhbiBiZSBwb3B1bGF0ZWQgfAogICAgICAgIHwgcmVhc29uQ29kZSAgICAgICAgICAgICAgIHwgY2FuIGJlIHBvcHVsYXRlZCB8CiAgICAgICAgfCBzZXJpZXMgICAgICAgICAgICAgICAgICAgfCBjYW4gYmUgcG9wdWxhdGVkIHwKICAgICAgICB8IHNlcmllcy51aWQgICAgICAgICAgICAgICB8IGNhbiBiZSBwb3B1bGF0ZWQgfAogICAgICAgIHwgc2VyaWVzLm1vZGFsaXR5ICAgICAgICAgIHwgY2FuIGJlIHBvcHVsYXRlZCB8CiAgICAgICAgfCBzZXJpZXMuaW5zdGFuY2UgICAgICAgICAgfCBjYW4gYmUgcG9wdWxhdGVkIHwKICAgICAgICB8IHNlcmllcy5pbnN0YW5jZS51aWQgICAgICB8IGNhbiBiZSBwb3B1bGF0ZWQgfAogICAgICAgIHwgc2VyaWVzLmluc3RhbmNlLnNvcENsYXNzIHwgY2FuIGJlIHBvcHVsYXRlZCB8CgogICAgQHByb2ZpbGU6UHJvY2VkdXJlLXV2LWlwcwogICAgQGNvdmVyczpQcm9jZWR1cmUuY29kZSBAY292ZXJzOlByb2NlZHVyZS5zdWJqZWN0IEBjb3ZlcnM6UHJvY2VkdXJlLnN1YmplY3QucmVmZXJlbmNlIEBjb3ZlcnM6UHJvY2VkdXJlLnBlcmZvcm1lZFt4XQogICAgQGNvdmVyczpQcm9jZWR1cmUucGVyZm9ybWVkW3hdOnBlcmZvcm1lZERhdGVUaW1lCiAgICBTY2VuYXJpbzogaXBzLWNyZWF0b3ItMDE4IFByb2NlZHVyZSAoSVBTKSDigJQgdGhlIENyZWF0b3IgcG9wdWxhdGVzIDQgZWxlbWVudHMgd2hlbiBrbm93bgogICAgICAjIEluc3RhbmNlczogQnVuZGxlLmVudHJ5LnJlc291cmNlLm9mVHlwZShQcm9jZWR1cmUpCiAgICAgICMgUHJvY2VkdXJlLmNvZGUgKFNIQUxMOnBvcHVsYXRlLWlmLWtub3duKQogICAgICBUaGVuICRpcHMgYXQgIkJ1bmRsZS5lbnRyeS5yZXNvdXJjZS5vZlR5cGUoUHJvY2VkdXJlKS5hbGwoY29kZS5leGlzdHMoKSkiIHNob3VsZCBiZSB0cnVlCiAgICAgICMgUHJvY2VkdXJlLnN1YmplY3QgKFNIQUxMOnBvcHVsYXRlLWlmLWtub3duKQogICAgICBUaGVuICRpcHMgYXQgIkJ1bmRsZS5lbnRyeS5yZXNvdXJjZS5vZlR5cGUoUHJvY2VkdXJlKS5hbGwoc3ViamVjdC5leGlzdHMoKSkiIHNob3VsZCBiZSB0cnVlCiAgICAgICMgUHJvY2VkdXJlLnN1YmplY3QucmVmZXJlbmNlIChTSEFMTDpwb3B1bGF0ZS1pZi1rbm93bikKICAgICAgVGhlbiAkaXBzIGF0ICJCdW5kbGUuZW50cnkucmVzb3VyY2Uub2ZUeXBlKFByb2NlZHVyZSkuc3ViamVjdC5hbGwocmVmZXJlbmNlLmV4aXN0cygpKSIgc2hvdWxkIGJlIHRydWUKICAgICAgIyBQcm9jZWR1cmUucGVyZm9ybWVkW3hdIChTSEFMTDpwb3B1bGF0ZS1pZi1rbm93bikKICAgICAgVGhlbiAkaXBzIGF0ICJCdW5kbGUuZW50cnkucmVzb3VyY2Uub2ZUeXBlKFByb2NlZHVyZSkuYWxsKHBlcmZvcm1lZC5leGlzdHMoKSkiIHNob3VsZCBiZSB0cnVlCiAgICAgICMgUHJvY2VkdXJlLnBlcmZvcm1lZFt4XTpwZXJmb3JtZWREYXRlVGltZSAoU0hPVUxEOmFibGUtdG8tcG9wdWxhdGUpCiAgICAgIFRoZW4gJGlwcyBhdCAiQnVuZGxlLmVudHJ5LnJlc291cmNlLm9mVHlwZShQcm9jZWR1cmUpLmFsbChwZXJmb3JtZWQub2ZUeXBlKGRhdGVUaW1lKS5leGlzdHMoKSkiIHNob3VsZCBiZSB0cnVlCgogICAgQHByb2ZpbGU6RGV2aWNlLW9ic2VydmVyLXV2LWlwcwogICAgQGNvdmVyczpEZXZpY2UuaWRlbnRpZmllciBAY292ZXJzOkRldmljZS5tYW51ZmFjdHVyZXIgQGNvdmVyczpEZXZpY2UubW9kZWxOdW1iZXIKICAgIFNjZW5hcmlvOiBpcHMtY3JlYXRvci0wMTkgRGV2aWNlIC0gUGVyZm9ybWVyIG9yIE9ic2VydmVyIChJUFMpIOKAlCB0aGUgQ3JlYXRvciBwb3B1bGF0ZXMgMyBlbGVtZW50cyB3aGVuIGtub3duCiAgICAgICMgSW5zdGFuY2VzOiBCdW5kbGUuZW50cnkucmVzb3VyY2Uub2ZUeXBlKERldmljZSkKICAgICAgIyBUaGUgcmVmZXJlbmNlIGRhdGEgZG9lcyBub3QgZXhlcmNpc2UgdGhlc2U7IHRoZSBDcmVhdG9yIGF0dGVzdHMgdGhlIGNhcGFiaWxpdHkuCiAgICAgIFdoZW4gQ3JlYXRvciBzdWJtaXRzIGV2aWRlbmNlIG9mICJEZXZpY2UgW2lkZW50aWZpZXJdLCBbbWFudWZhY3R1cmVyXSwgW21vZGVsTnVtYmVyXSBiZWluZyBlbnRlcmVkIG9yIGV4cG9ydGVkIChzY3JlZW5zaG90IG9yIGEgZG9jdW1lbnQgY2FycnlpbmcgdGhlbSkiIGFzICRjYW5Qb3B1bGF0ZUV2aWRlbmNlCiAgICAgIFRoZW4gQ3JlYXRvciBjb25maXJtcyBlYWNoIG9mIHRoZXNlIGlzIHN1cHBvcnRlZCBmb3IgIkRldmljZSwgd2hlbiB0aGUgaW5mb3JtYXRpb24gaXMga25vd24iOgogICAgICAgIHwgaXRlbSAgICAgICAgIHwgZGV0YWlsICAgICAgICAgICB8CiAgICAgICAgfCBpZGVudGlmaWVyICAgfCBjYW4gYmUgcG9wdWxhdGVkIHwKICAgICAgICB8IG1hbnVmYWN0dXJlciB8IGNhbiBiZSBwb3B1bGF0ZWQgfAogICAgICAgIHwgbW9kZWxOdW1iZXIgIHwgY2FuIGJlIHBvcHVsYXRlZCB8CgogICAgQHByb2ZpbGU6RGV2aWNlLXV2LWlwcwogICAgQGNvdmVyczpEZXZpY2UudHlwZQogICAgU2NlbmFyaW86IGlwcy1jcmVhdG9yLTAyMCBEZXZpY2UgKElQUykg4oCUIHRoZSBDcmVhdG9yIHBvcHVsYXRlcyAxIGVsZW1lbnQgd2hlbiBrbm93bgogICAgICAjIEluc3RhbmNlczogQnVuZGxlLmVudHJ5LnJlc291cmNlLm9mVHlwZShEZXZpY2UpCiAgICAgICMgRGV2aWNlLnR5cGUgKFNIQUxMOnBvcHVsYXRlLWlmLWtub3duKQogICAgICBUaGVuICRpcHMgYXQgIkJ1bmRsZS5lbnRyeS5yZXNvdXJjZS5vZlR5cGUoRGV2aWNlKS5hbGwodHlwZS5leGlzdHMoKSkiIHNob3VsZCBiZSB0cnVlCgogICAgQHByb2ZpbGU6RGV2aWNlVXNlU3RhdGVtZW50LXV2LWlwcwogICAgQGNvdmVyczpEZXZpY2VVc2VTdGF0ZW1lbnQuc3ViamVjdCBAY292ZXJzOkRldmljZVVzZVN0YXRlbWVudC5zdWJqZWN0LnJlZmVyZW5jZSBAY292ZXJzOkRldmljZVVzZVN0YXRlbWVudC50aW1pbmdbeF0gQGNvdmVyczpEZXZpY2VVc2VTdGF0ZW1lbnQudGltaW5nW3hdOnRpbWluZ0RhdGVUaW1lCiAgICBAY292ZXJzOkRldmljZVVzZVN0YXRlbWVudC5kZXZpY2UKICAgIFNjZW5hcmlvOiBpcHMtY3JlYXRvci0wMjEgRGV2aWNlVXNlU3RhdGVtZW50IChJUFMpIOKAlCB0aGUgQ3JlYXRvciBwb3B1bGF0ZXMgNCBlbGVtZW50cyB3aGVuIGtub3duCiAgICAgICMgSW5zdGFuY2VzOiBCdW5kbGUuZW50cnkucmVzb3VyY2Uub2ZUeXBlKERldmljZVVzZVN0YXRlbWVudCkKICAgICAgIyBEZXZpY2VVc2VTdGF0ZW1lbnQuc3ViamVjdCAoU0hBTEw6cG9wdWxhdGUtaWYta25vd24pCiAgICAgIFRoZW4gJGlwcyBhdCAiQnVuZGxlLmVudHJ5LnJlc291cmNlLm9mVHlwZShEZXZpY2VVc2VTdGF0ZW1lbnQpLmFsbChzdWJqZWN0LmV4aXN0cygpKSIgc2hvdWxkIGJlIHRydWUKICAgICAgIyBEZXZpY2VVc2VTdGF0ZW1lbnQuc3ViamVjdC5yZWZlcmVuY2UgKFNIQUxMOnBvcHVsYXRlLWlmLWtub3duKQogICAgICBUaGVuICRpcHMgYXQgIkJ1bmRsZS5lbnRyeS5yZXNvdXJjZS5vZlR5cGUoRGV2aWNlVXNlU3RhdGVtZW50KS5zdWJqZWN0LmFsbChyZWZlcmVuY2UuZXhpc3RzKCkpIiBzaG91bGQgYmUgdHJ1ZQogICAgICAjIERldmljZVVzZVN0YXRlbWVudC5kZXZpY2UgKFNIQUxMOnBvcHVsYXRlLWlmLWtub3duKQogICAgICBUaGVuICRpcHMgYXQgIkJ1bmRsZS5lbnRyeS5yZXNvdXJjZS5vZlR5cGUoRGV2aWNlVXNlU3RhdGVtZW50KS5hbGwoZGV2aWNlLmV4aXN0cygpKSIgc2hvdWxkIGJlIHRydWUKICAgICAgIyBUaGUgcmVmZXJlbmNlIGRhdGEgZG9lcyBub3QgZXhlcmNpc2UgdGhlc2U7IHRoZSBDcmVhdG9yIGF0dGVzdHMgdGhlIGNhcGFiaWxpdHkuCiAgICAgIFdoZW4gQ3JlYXRvciBzdWJtaXRzIGV2aWRlbmNlIG9mICJEZXZpY2VVc2VTdGF0ZW1lbnQgW3RpbWluZ1t4XV0sIFt0aW1pbmdbeF06dGltaW5nRGF0ZVRpbWVdIGJlaW5nIGVudGVyZWQgb3IgZXhwb3J0ZWQgKHNjcmVlbnNob3Qgb3IgYSBkb2N1bWVudCBjYXJyeWluZyB0aGVtKSIgYXMgJGNhblBvcHVsYXRlRXZpZGVuY2UKICAgICAgVGhlbiBDcmVhdG9yIGNvbmZpcm1zIGVhY2ggb2YgdGhlc2UgaXMgc3VwcG9ydGVkIGZvciAiRGV2aWNlVXNlU3RhdGVtZW50LCB3aGVuIHRoZSBpbmZvcm1hdGlvbiBpcyBrbm93biI6CiAgICAgICAgfCBpdGVtICAgICAgICAgICAgICAgICAgICAgfCBkZXRhaWwgICAgICAgICAgIHwKICAgICAgICB8IHRpbWluZ1t4XSAgICAgICAgICAgICAgICB8IGNhbiBiZSBwb3B1bGF0ZWQgfAogICAgICAgIHwgdGltaW5nW3hdOnRpbWluZ0RhdGVUaW1lIHwgY2FuIGJlIHBvcHVsYXRlZCB8CgogIFJ1bGU6IFRoZSBvcHRpb25hbCBzZWN0aW9uczogYWxlcnRzLCBwcmVnbmFuY3ksIHNvY2lhbCBoaXN0b3J5CgogICAgQHByb2ZpbGU6RmxhZy1hbGVydC11di1pcHMKICAgIEBjb3ZlcnM6RmxhZy5leHRlbnNpb246ZmxhZy1wcmlvcml0eSBAY292ZXJzOkZsYWcuY2F0ZWdvcnkgQGNvdmVyczpGbGFnLmNvZGUgQGNvdmVyczpGbGFnLnN1YmplY3QKICAgIEBjb3ZlcnM6RmxhZy5zdWJqZWN0LnJlZmVyZW5jZQogICAgU2NlbmFyaW86IGlwcy1jcmVhdG9yLTAyMiBGbGFnIC0gQWxlcnQgKElQUykg4oCUIHRoZSBDcmVhdG9yIHBvcHVsYXRlcyA1IGVsZW1lbnRzIHdoZW4ga25vd24KICAgICAgIyBJbnN0YW5jZXM6IEJ1bmRsZS5lbnRyeS5yZXNvdXJjZS5vZlR5cGUoRmxhZykKICAgICAgIyBGbGFnLmNhdGVnb3J5IChTSEFMTDpwb3B1bGF0ZS1pZi1rbm93bikKICAgICAgVGhlbiAkaXBzIGF0ICJCdW5kbGUuZW50cnkucmVzb3VyY2Uub2ZUeXBlKEZsYWcpLmFsbChjYXRlZ29yeS5leGlzdHMoKSkiIHNob3VsZCBiZSB0cnVlCiAgICAgICMgRmxhZy5jb2RlIChTSEFMTDpwb3B1bGF0ZS1pZi1rbm93bikKICAgICAgVGhlbiAkaXBzIGF0ICJCdW5kbGUuZW50cnkucmVzb3VyY2Uub2ZUeXBlKEZsYWcpLmFsbChjb2RlLmV4aXN0cygpKSIgc2hvdWxkIGJlIHRydWUKICAgICAgIyBGbGFnLnN1YmplY3QgKFNIQUxMOnBvcHVsYXRlLWlmLWtub3duKQogICAgICBUaGVuICRpcHMgYXQgIkJ1bmRsZS5lbnRyeS5yZXNvdXJjZS5vZlR5cGUoRmxhZykuYWxsKHN1YmplY3QuZXhpc3RzKCkpIiBzaG91bGQgYmUgdHJ1ZQogICAgICAjIEZsYWcuc3ViamVjdC5yZWZlcmVuY2UgKFNIQUxMOnBvcHVsYXRlLWlmLWtub3duKQogICAgICBUaGVuICRpcHMgYXQgIkJ1bmRsZS5lbnRyeS5yZXNvdXJjZS5vZlR5cGUoRmxhZykuc3ViamVjdC5hbGwocmVmZXJlbmNlLmV4aXN0cygpKSIgc2hvdWxkIGJlIHRydWUKICAgICAgIyBUaGUgcmVmZXJlbmNlIGRhdGEgZG9lcyBub3QgZXhlcmNpc2UgdGhlc2U7IHRoZSBDcmVhdG9yIGF0dGVzdHMgdGhlIGNhcGFiaWxpdHkuCiAgICAgIFdoZW4gQ3JlYXRvciBzdWJtaXRzIGV2aWRlbmNlIG9mICJGbGFnIFtleHRlbnNpb246ZmxhZy1wcmlvcml0eV0gYmVpbmcgZW50ZXJlZCBvciBleHBvcnRlZCAoc2NyZWVuc2hvdCBvciBhIGRvY3VtZW50IGNhcnJ5aW5nIHRoZW0pIiBhcyAkY2FuUG9wdWxhdGVFdmlkZW5jZQogICAgICBUaGVuIENyZWF0b3IgY29uZmlybXMgZWFjaCBvZiB0aGVzZSBpcyBzdXBwb3J0ZWQgZm9yICJGbGFnLCB3aGVuIHRoZSBpbmZvcm1hdGlvbiBpcyBrbm93biI6CiAgICAgICAgfCBpdGVtICAgICAgICAgICAgICAgICAgICB8IGRldGFpbCAgICAgICAgICAgfAogICAgICAgIHwgZXh0ZW5zaW9uOmZsYWctcHJpb3JpdHkgfCBjYW4gYmUgcG9wdWxhdGVkIHwKCiAgICBAcHJvZmlsZTpPYnNlcnZhdGlvbi1wcmVnbmFuY3ktZWRkLXV2LWlwcwogICAgQGNvdmVyczpPYnNlcnZhdGlvbi5jb2RlIEBjb3ZlcnM6T2JzZXJ2YXRpb24uc3ViamVjdCBAY292ZXJzOk9ic2VydmF0aW9uLnN1YmplY3QucmVmZXJlbmNlIEBjb3ZlcnM6T2JzZXJ2YXRpb24uZWZmZWN0aXZlW3hdCiAgICBAY292ZXJzOk9ic2VydmF0aW9uLnZhbHVlW3hdOnZhbHVlRGF0ZVRpbWUKICAgIFNjZW5hcmlvOiBpcHMtY3JlYXRvci0wMjMgT2JzZXJ2YXRpb24gUHJlZ25hbmN5IC0gRXhwZWN0ZWQgRGVsaXZlcnkgRGF0ZSAoSVBTKSDigJQgdGhlIENyZWF0b3IgcG9wdWxhdGVzIDUgZWxlbWVudHMgd2hlbiBrbm93bgogICAgICAjIEluc3RhbmNlczogQnVuZGxlLmVudHJ5LnJlc291cmNlLm9mVHlwZShPYnNlcnZhdGlvbikud2hlcmUoY29kZS5jb2Rpbmcud2hlcmUoY29kZT0nMTE3NzgtOCcgb3IgY29kZT0nMTE3NzktNicgb3IgY29kZT0nMTE3ODAtNCcpLmV4aXN0cygpKQogICAgICAjIFRoZSByZWZlcmVuY2UgZGF0YSBkb2VzIG5vdCBleGVyY2lzZSB0aGVzZTsgdGhlIENyZWF0b3IgYXR0ZXN0cyB0aGUgY2FwYWJpbGl0eS4KICAgICAgV2hlbiBDcmVhdG9yIHN1Ym1pdHMgZXZpZGVuY2Ugb2YgIk9ic2VydmF0aW9uIFtjb2RlXSwgW3N1YmplY3RdLCBbc3ViamVjdC5yZWZlcmVuY2VdLCBbZWZmZWN0aXZlW3hdXSwgW3ZhbHVlW3hdOnZhbHVlRGF0ZVRpbWVdIGJlaW5nIGVudGVyZWQgb3IgZXhwb3J0ZWQgKHNjcmVlbnNob3Qgb3IgYSBkb2N1bWVudCBjYXJyeWluZyB0aGVtKSIgYXMgJGNhblBvcHVsYXRlRXZpZGVuY2UKICAgICAgVGhlbiBDcmVhdG9yIGNvbmZpcm1zIGVhY2ggb2YgdGhlc2UgaXMgc3VwcG9ydGVkIGZvciAiT2JzZXJ2YXRpb24sIHdoZW4gdGhlIGluZm9ybWF0aW9uIGlzIGtub3duIjoKICAgICAgICB8IGl0ZW0gICAgICAgICAgICAgICAgICAgfCBkZXRhaWwgICAgICAgICAgIHwKICAgICAgICB8IGNvZGUgICAgICAgICAgICAgICAgICAgfCBjYW4gYmUgcG9wdWxhdGVkIHwKICAgICAgICB8IHN1YmplY3QgICAgICAgICAgICAgICAgfCBjYW4gYmUgcG9wdWxhdGVkIHwKICAgICAgICB8IHN1YmplY3QucmVmZXJlbmNlICAgICAgfCBjYW4gYmUgcG9wdWxhdGVkIHwKICAgICAgICB8IGVmZmVjdGl2ZVt4XSAgICAgICAgICAgfCBjYW4gYmUgcG9wdWxhdGVkIHwKICAgICAgICB8IHZhbHVlW3hdOnZhbHVlRGF0ZVRpbWUgfCBjYW4gYmUgcG9wdWxhdGVkIHwKCiAgICBAcHJvZmlsZTpPYnNlcnZhdGlvbi1wcmVnbmFuY3ktb3V0Y29tZS11di1pcHMKICAgIEBjb3ZlcnM6T2JzZXJ2YXRpb24uY29kZSBAY292ZXJzOk9ic2VydmF0aW9uLnN1YmplY3QgQGNvdmVyczpPYnNlcnZhdGlvbi5zdWJqZWN0LnJlZmVyZW5jZSBAY292ZXJzOk9ic2VydmF0aW9uLmVmZmVjdGl2ZVt4XQogICAgQGNvdmVyczpPYnNlcnZhdGlvbi52YWx1ZVt4XTp2YWx1ZVF1YW50aXR5CiAgICBTY2VuYXJpbzogaXBzLWNyZWF0b3ItMDI0IE9ic2VydmF0aW9uIFByZWduYW5jeSAtIE91dGNvbWUgKElQUykg4oCUIHRoZSBDcmVhdG9yIHBvcHVsYXRlcyA1IGVsZW1lbnRzIHdoZW4ga25vd24KICAgICAgIyBJbnN0YW5jZXM6IEJ1bmRsZS5lbnRyeS5yZXNvdXJjZS5vZlR5cGUoT2JzZXJ2YXRpb24pLndoZXJlKGNvZGUuY29kaW5nLndoZXJlKGNvZGU9JzExNjM2LTgnIG9yIGNvZGU9JzExNjM3LTYnIG9yIGNvZGU9JzExNjM4LTQnIG9yIGNvZGU9JzExNjM5LTInIG9yIGNvZGU9JzExNjQwLTAnIG9yIGNvZGU9JzExNjEyLTknIG9yIGNvZGU9JzExNjEzLTcnIG9yIGNvZGU9JzExNjE0LTUnIG9yIGNvZGU9JzMzMDY1LTQnKS5leGlzdHMoKSkKICAgICAgIyBUaGUgcmVmZXJlbmNlIGRhdGEgZG9lcyBub3QgZXhlcmNpc2UgdGhlc2U7IHRoZSBDcmVhdG9yIGF0dGVzdHMgdGhlIGNhcGFiaWxpdHkuCiAgICAgIFdoZW4gQ3JlYXRvciBzdWJtaXRzIGV2aWRlbmNlIG9mICJPYnNlcnZhdGlvbiBbY29kZV0sIFtzdWJqZWN0XSwgW3N1YmplY3QucmVmZXJlbmNlXSwgW2VmZmVjdGl2ZVt4XV0sIFt2YWx1ZVt4XTp2YWx1ZVF1YW50aXR5XSBiZWluZyBlbnRlcmVkIG9yIGV4cG9ydGVkIChzY3JlZW5zaG90IG9yIGEgZG9jdW1lbnQgY2FycnlpbmcgdGhlbSkiIGFzICRjYW5Qb3B1bGF0ZUV2aWRlbmNlCiAgICAgIFRoZW4gQ3JlYXRvciBjb25maXJtcyBlYWNoIG9mIHRoZXNlIGlzIHN1cHBvcnRlZCBmb3IgIk9ic2VydmF0aW9uLCB3aGVuIHRoZSBpbmZvcm1hdGlvbiBpcyBrbm93biI6CiAgICAgICAgfCBpdGVtICAgICAgICAgICAgICAgICAgIHwgZGV0YWlsICAgICAgICAgICB8CiAgICAgICAgfCBjb2RlICAgICAgICAgICAgICAgICAgIHwgY2FuIGJlIHBvcHVsYXRlZCB8CiAgICAgICAgfCBzdWJqZWN0ICAgICAgICAgICAgICAgIHwgY2FuIGJlIHBvcHVsYXRlZCB8CiAgICAgICAgfCBzdWJqZWN0LnJlZmVyZW5jZSAgICAgIHwgY2FuIGJlIHBvcHVsYXRlZCB8CiAgICAgICAgfCBlZmZlY3RpdmVbeF0gICAgICAgICAgIHwgY2FuIGJlIHBvcHVsYXRlZCB8CiAgICAgICAgfCB2YWx1ZVt4XTp2YWx1ZVF1YW50aXR5IHwgY2FuIGJlIHBvcHVsYXRlZCB8CgogICAgQHByb2ZpbGU6T2JzZXJ2YXRpb24tcHJlZ25hbmN5LXN0YXR1cy11di1pcHMKICAgIEBjb3ZlcnM6T2JzZXJ2YXRpb24uY29kZSBAY292ZXJzOk9ic2VydmF0aW9uLnN1YmplY3QgQGNvdmVyczpPYnNlcnZhdGlvbi5zdWJqZWN0LnJlZmVyZW5jZSBAY292ZXJzOk9ic2VydmF0aW9uLmVmZmVjdGl2ZVt4XQogICAgQGNvdmVyczpPYnNlcnZhdGlvbi52YWx1ZVt4XTp2YWx1ZUNvZGVhYmxlQ29uY2VwdCBAY292ZXJzOk9ic2VydmF0aW9uLmhhc01lbWJlciBAY292ZXJzOk9ic2VydmF0aW9uLmhhc01lbWJlci5yZWZlcmVuY2UKICAgIFNjZW5hcmlvOiBpcHMtY3JlYXRvci0wMjUgT2JzZXJ2YXRpb24gUHJlZ25hbmN5IC0gU3RhdHVzIChJUFMpIOKAlCB0aGUgQ3JlYXRvciBwb3B1bGF0ZXMgNyBlbGVtZW50cyB3aGVuIGtub3duCiAgICAgICMgSW5zdGFuY2VzOiBCdW5kbGUuZW50cnkucmVzb3VyY2Uub2ZUeXBlKE9ic2VydmF0aW9uKS53aGVyZShjb2RlLmNvZGluZy53aGVyZShjb2RlPSc4MjgxMC0zJykuZXhpc3RzKCkpCiAgICAgICMgT2JzZXJ2YXRpb24uY29kZSAoU0hBTEw6cG9wdWxhdGUtaWYta25vd24pCiAgICAgIFRoZW4gJGlwcyBhdCAiQnVuZGxlLmVudHJ5LnJlc291cmNlLm9mVHlwZShPYnNlcnZhdGlvbikud2hlcmUoY29kZS5jb2Rpbmcud2hlcmUoY29kZT0nODI4MTAtMycpLmV4aXN0cygpKS5hbGwoY29kZS5leGlzdHMoKSkiIHNob3VsZCBiZSB0cnVlCiAgICAgICMgT2JzZXJ2YXRpb24uc3ViamVjdCAoU0hBTEw6cG9wdWxhdGUtaWYta25vd24pCiAgICAgIFRoZW4gJGlwcyBhdCAiQnVuZGxlLmVudHJ5LnJlc291cmNlLm9mVHlwZShPYnNlcnZhdGlvbikud2hlcmUoY29kZS5jb2Rpbmcud2hlcmUoY29kZT0nODI4MTAtMycpLmV4aXN0cygpKS5hbGwoc3ViamVjdC5leGlzdHMoKSkiIHNob3VsZCBiZSB0cnVlCiAgICAgICMgT2JzZXJ2YXRpb24uc3ViamVjdC5yZWZlcmVuY2UgKFNIQUxMOnBvcHVsYXRlLWlmLWtub3duKQogICAgICBUaGVuICRpcHMgYXQgIkJ1bmRsZS5lbnRyeS5yZXNvdXJjZS5vZlR5cGUoT2JzZXJ2YXRpb24pLndoZXJlKGNvZGUuY29kaW5nLndoZXJlKGNvZGU9JzgyODEwLTMnKS5leGlzdHMoKSkuc3ViamVjdC5hbGwocmVmZXJlbmNlLmV4aXN0cygpKSIgc2hvdWxkIGJlIHRydWUKICAgICAgIyBPYnNlcnZhdGlvbi5lZmZlY3RpdmVbeF0gKFNIQUxMOnBvcHVsYXRlLWlmLWtub3duKQogICAgICBUaGVuICRpcHMgYXQgIkJ1bmRsZS5lbnRyeS5yZXNvdXJjZS5vZlR5cGUoT2JzZXJ2YXRpb24pLndoZXJlKGNvZGUuY29kaW5nLndoZXJlKGNvZGU9JzgyODEwLTMnKS5leGlzdHMoKSkuYWxsKGVmZmVjdGl2ZS5leGlzdHMoKSkiIHNob3VsZCBiZSB0cnVlCiAgICAgICMgT2JzZXJ2YXRpb24udmFsdWVbeF06dmFsdWVDb2RlYWJsZUNvbmNlcHQgKFNIQUxMOnBvcHVsYXRlLWlmLWtub3duKQogICAgICBUaGVuICRpcHMgYXQgIkJ1bmRsZS5lbnRyeS5yZXNvdXJjZS5vZlR5cGUoT2JzZXJ2YXRpb24pLndoZXJlKGNvZGUuY29kaW5nLndoZXJlKGNvZGU9JzgyODEwLTMnKS5leGlzdHMoKSkuYWxsKHZhbHVlLm9mVHlwZShDb2RlYWJsZUNvbmNlcHQpLmV4aXN0cygpKSIgc2hvdWxkIGJlIHRydWUKICAgICAgIyBUaGUgcmVmZXJlbmNlIGRhdGEgZG9lcyBub3QgZXhlcmNpc2UgdGhlc2U7IHRoZSBDcmVhdG9yIGF0dGVzdHMgdGhlIGNhcGFiaWxpdHkuCiAgICAgIFdoZW4gQ3JlYXRvciBzdWJtaXRzIGV2aWRlbmNlIG9mICJPYnNlcnZhdGlvbiBbaGFzTWVtYmVyXSwgW2hhc01lbWJlci5yZWZlcmVuY2VdIGJlaW5nIGVudGVyZWQgb3IgZXhwb3J0ZWQgKHNjcmVlbnNob3Qgb3IgYSBkb2N1bWVudCBjYXJyeWluZyB0aGVtKSIgYXMgJGNhblBvcHVsYXRlRXZpZGVuY2UKICAgICAgVGhlbiBDcmVhdG9yIGNvbmZpcm1zIGVhY2ggb2YgdGhlc2UgaXMgc3VwcG9ydGVkIGZvciAiT2JzZXJ2YXRpb24sIHdoZW4gdGhlIGluZm9ybWF0aW9uIGlzIGtub3duIjoKICAgICAgICB8IGl0ZW0gICAgICAgICAgICAgICAgfCBkZXRhaWwgICAgICAgICAgIHwKICAgICAgICB8IGhhc01lbWJlciAgICAgICAgICAgfCBjYW4gYmUgcG9wdWxhdGVkIHwKICAgICAgICB8IGhhc01lbWJlci5yZWZlcmVuY2UgfCBjYW4gYmUgcG9wdWxhdGVkIHwKCiAgUnVsZTogRGF0YSB0eXBlcyB1c2VkIHRocm91Z2hvdXQKCiAgICBAcHJvZmlsZTpPYnNlcnZhdGlvbi10b2JhY2NvdXNlLXV2LWlwcwogICAgQGNvdmVyczpPYnNlcnZhdGlvbi5jb2RlIEBjb3ZlcnM6T2JzZXJ2YXRpb24uc3ViamVjdCBAY292ZXJzOk9ic2VydmF0aW9uLnN1YmplY3QucmVmZXJlbmNlIEBjb3ZlcnM6T2JzZXJ2YXRpb24uZWZmZWN0aXZlW3hdCiAgICBTY2VuYXJpbzogaXBzLWNyZWF0b3ItMDI2IE9ic2VydmF0aW9uIFNvY2lhbCBIaXN0b3J5IC0gVG9iYWNjbyBVc2UgKElQUykg4oCUIHRoZSBDcmVhdG9yIHBvcHVsYXRlcyA0IGVsZW1lbnRzIHdoZW4ga25vd24KICAgICAgIyBJbnN0YW5jZXM6IEJ1bmRsZS5lbnRyeS5yZXNvdXJjZS5vZlR5cGUoT2JzZXJ2YXRpb24pLndoZXJlKGNvZGUuY29kaW5nLndoZXJlKGNvZGU9JzcyMTY2LTInKS5leGlzdHMoKSkKICAgICAgIyBPYnNlcnZhdGlvbi5jb2RlIChTSEFMTDpwb3B1bGF0ZS1pZi1rbm93bikKICAgICAgVGhlbiAkaXBzIGF0ICJCdW5kbGUuZW50cnkucmVzb3VyY2Uub2ZUeXBlKE9ic2VydmF0aW9uKS53aGVyZShjb2RlLmNvZGluZy53aGVyZShjb2RlPSc3MjE2Ni0yJykuZXhpc3RzKCkpLmFsbChjb2RlLmV4aXN0cygpKSIgc2hvdWxkIGJlIHRydWUKICAgICAgIyBPYnNlcnZhdGlvbi5zdWJqZWN0IChTSEFMTDpwb3B1bGF0ZS1pZi1rbm93bikKICAgICAgVGhlbiAkaXBzIGF0ICJCdW5kbGUuZW50cnkucmVzb3VyY2Uub2ZUeXBlKE9ic2VydmF0aW9uKS53aGVyZShjb2RlLmNvZGluZy53aGVyZShjb2RlPSc3MjE2Ni0yJykuZXhpc3RzKCkpLmFsbChzdWJqZWN0LmV4aXN0cygpKSIgc2hvdWxkIGJlIHRydWUKICAgICAgIyBPYnNlcnZhdGlvbi5zdWJqZWN0LnJlZmVyZW5jZSAoU0hBTEw6cG9wdWxhdGUtaWYta25vd24pCiAgICAgIFRoZW4gJGlwcyBhdCAiQnVuZGxlLmVudHJ5LnJlc291cmNlLm9mVHlwZShPYnNlcnZhdGlvbikud2hlcmUoY29kZS5jb2Rpbmcud2hlcmUoY29kZT0nNzIxNjYtMicpLmV4aXN0cygpKS5zdWJqZWN0LmFsbChyZWZlcmVuY2UuZXhpc3RzKCkpIiBzaG91bGQgYmUgdHJ1ZQogICAgICAjIE9ic2VydmF0aW9uLmVmZmVjdGl2ZVt4XSAoU0hBTEw6cG9wdWxhdGUtaWYta25vd24pCiAgICAgIFRoZW4gJGlwcyBhdCAiQnVuZGxlLmVudHJ5LnJlc291cmNlLm9mVHlwZShPYnNlcnZhdGlvbikud2hlcmUoY29kZS5jb2Rpbmcud2hlcmUoY29kZT0nNzIxNjYtMicpLmV4aXN0cygpKS5hbGwoZWZmZWN0aXZlLmV4aXN0cygpKSIgc2hvdWxkIGJlIHRydWUKCiAgICBAcHJvZmlsZTpPYnNlcnZhdGlvbi1hbGNvaG9sdXNlLXV2LWlwcwogICAgQGNvdmVyczpPYnNlcnZhdGlvbi5jb2RlIEBjb3ZlcnM6T2JzZXJ2YXRpb24uc3ViamVjdCBAY292ZXJzOk9ic2VydmF0aW9uLnN1YmplY3QucmVmZXJlbmNlIEBjb3ZlcnM6T2JzZXJ2YXRpb24uZWZmZWN0aXZlW3hdCiAgICBTY2VuYXJpbzogaXBzLWNyZWF0b3ItMDI3IE9ic2VydmF0aW9uIFNvY2lhbCBIaXN0b3J5IC0gQWxjb2hvbCBVc2UgKElQUykg4oCUIHRoZSBDcmVhdG9yIHBvcHVsYXRlcyA0IGVsZW1lbnRzIHdoZW4ga25vd24KICAgICAgIyBJbnN0YW5jZXM6IEJ1bmRsZS5lbnRyeS5yZXNvdXJjZS5vZlR5cGUoT2JzZXJ2YXRpb24pLndoZXJlKGNvZGUuY29kaW5nLndoZXJlKGNvZGU9Jzc0MDEzLTQnKS5leGlzdHMoKSkKICAgICAgIyBPYnNlcnZhdGlvbi5jb2RlIChTSEFMTDpwb3B1bGF0ZS1pZi1rbm93bikKICAgICAgVGhlbiAkaXBzIGF0ICJCdW5kbGUuZW50cnkucmVzb3VyY2Uub2ZUeXBlKE9ic2VydmF0aW9uKS53aGVyZShjb2RlLmNvZGluZy53aGVyZShjb2RlPSc3NDAxMy00JykuZXhpc3RzKCkpLmFsbChjb2RlLmV4aXN0cygpKSIgc2hvdWxkIGJlIHRydWUKICAgICAgIyBPYnNlcnZhdGlvbi5zdWJqZWN0IChTSEFMTDpwb3B1bGF0ZS1pZi1rbm93bikKICAgICAgVGhlbiAkaXBzIGF0ICJCdW5kbGUuZW50cnkucmVzb3VyY2Uub2ZUeXBlKE9ic2VydmF0aW9uKS53aGVyZShjb2RlLmNvZGluZy53aGVyZShjb2RlPSc3NDAxMy00JykuZXhpc3RzKCkpLmFsbChzdWJqZWN0LmV4aXN0cygpKSIgc2hvdWxkIGJlIHRydWUKICAgICAgIyBPYnNlcnZhdGlvbi5zdWJqZWN0LnJlZmVyZW5jZSAoU0hBTEw6cG9wdWxhdGUtaWYta25vd24pCiAgICAgIFRoZW4gJGlwcyBhdCAiQnVuZGxlLmVudHJ5LnJlc291cmNlLm9mVHlwZShPYnNlcnZhdGlvbikud2hlcmUoY29kZS5jb2Rpbmcud2hlcmUoY29kZT0nNzQwMTMtNCcpLmV4aXN0cygpKS5zdWJqZWN0LmFsbChyZWZlcmVuY2UuZXhpc3RzKCkpIiBzaG91bGQgYmUgdHJ1ZQogICAgICAjIE9ic2VydmF0aW9uLmVmZmVjdGl2ZVt4XSAoU0hBTEw6cG9wdWxhdGUtaWYta25vd24pCiAgICAgIFRoZW4gJGlwcyBhdCAiQnVuZGxlLmVudHJ5LnJlc291cmNlLm9mVHlwZShPYnNlcnZhdGlvbikud2hlcmUoY29kZS5jb2Rpbmcud2hlcmUoY29kZT0nNzQwMTMtNCcpLmV4aXN0cygpKS5hbGwoZWZmZWN0aXZlLmV4aXN0cygpKSIgc2hvdWxkIGJlIHRydWUKCiAgICBAcHJvZmlsZTpDb2RlYWJsZUNvbmNlcHQtdXYtaXBzCiAgICBAY292ZXJzOkNvZGVhYmxlQ29uY2VwdC5jb2RpbmcgQGNvdmVyczpDb2RlYWJsZUNvbmNlcHQudGV4dAogICAgU2NlbmFyaW86IGlwcy1jcmVhdG9yLTAyOCBDb2RlYWJsZSBDb25jZXB0IChJUFMpIOKAlCB0aGUgQ3JlYXRvciBwb3B1bGF0ZXMgMiBlbGVtZW50cyB3aGVuIGtub3duCiAgICAgICMgQ29kZWFibGVDb25jZXB0LmNvZGluZyAoU0hBTEw6cG9wdWxhdGUtaWYta25vd24pIOKAlCB0aGUgcmVmZXJlbmNlIGRhdGEgY2FycmllcyBpdCBvbiBzb21lIGluc3RhbmNlcwogICAgICBUaGVuICRpcHMgYXQgIkJ1bmRsZS5lbnRyeS5yZXNvdXJjZS5kZXNjZW5kYW50cygpLm9mVHlwZShDb2RlYWJsZUNvbmNlcHQpLndoZXJlKGNvZGluZy5leGlzdHMoKSkuZXhpc3RzKCkiIHNob3VsZCBiZSB0cnVlCiAgICAgICMgQ29kZWFibGVDb25jZXB0LnRleHQgKFNIQUxMOnBvcHVsYXRlLWlmLWtub3duKSDigJQgdGhlIHJlZmVyZW5jZSBkYXRhIGNhcnJpZXMgaXQgb24gc29tZSBpbnN0YW5jZXMKICAgICAgVGhlbiAkaXBzIGF0ICJCdW5kbGUuZW50cnkucmVzb3VyY2UuZGVzY2VuZGFudHMoKS5vZlR5cGUoQ29kZWFibGVDb25jZXB0KS53aGVyZSh0ZXh0LmV4aXN0cygpKS5leGlzdHMoKSIgc2hvdWxkIGJlIHRydWUKCiAgICBAcHJvZmlsZTpDb2RpbmctdXYtaXBzCiAgICBAY292ZXJzOkNvZGluZy5zeXN0ZW0gQGNvdmVyczpDb2RpbmcuY29kZQogICAgU2NlbmFyaW86IGlwcy1jcmVhdG9yLTAyOSBDb2Rpbmcgd2l0aCB0cmFuc2xhdGlvbnMg4oCUIHRoZSBDcmVhdG9yIHBvcHVsYXRlcyAyIGVsZW1lbnRzIHdoZW4ga25vd24KICAgICAgIyBDb2Rpbmcuc3lzdGVtIChTSEFMTDpwb3B1bGF0ZS1pZi1rbm93bikKICAgICAgVGhlbiAkaXBzIGF0ICJCdW5kbGUuZW50cnkucmVzb3VyY2UuZGVzY2VuZGFudHMoKS5vZlR5cGUoQ29kaW5nKS5hbGwoc3lzdGVtLmV4aXN0cygpKSIgc2hvdWxkIGJlIHRydWUKICAgICAgIyBDb2RpbmcuY29kZSAoU0hBTEw6cG9wdWxhdGUtaWYta25vd24pCiAgICAgIFRoZW4gJGlwcyBhdCAiQnVuZGxlLmVudHJ5LnJlc291cmNlLmRlc2NlbmRhbnRzKCkub2ZUeXBlKENvZGluZykuYWxsKGNvZGUuZXhpc3RzKCkpIiBzaG91bGQgYmUgdHJ1ZQoKICBSdWxlOiBBIHBhdGllbnQgd2l0aCBubyBrbm93biBwcm9ibGVtcywgYWxsZXJnaWVzIG9yIG1lZGljYXRpb25zIHN0aWxsIGdldHMgdGhlIHJlcXVpcmVkIHNlY3Rpb25zCgogICAgQHByb2ZpbGU6Q29tcG9zaXRpb24tdXYtaXBzCiAgICBAY292ZXJzOkNvbXBvc2l0aW9uLnNlY3Rpb246c2VjdGlvblByb2JsZW1zLmVtcHR5UmVhc29uIEBjb3ZlcnM6Q29tcG9zaXRpb24uc2VjdGlvbjpzZWN0aW9uQWxsZXJnaWVzLmVtcHR5UmVhc29uIEBjb3ZlcnM6Q29tcG9zaXRpb24uc2VjdGlvbjpzZWN0aW9uTWVkaWNhdGlvbnMuZW1wdHlSZWFzb24KICAgIFNjZW5hcmlvOiBpcHMtY3JlYXRvci05MDAgUmVxdWlyZWQgc2VjdGlvbnMgY2FycnkgYW4gZXhwbGljaXQgbm8taW5mb3JtYXRpb24gc3RhdGVtZW50CiAgICAgICMgVGhlIElHIHByZWZlcnMgYSAibm8ga25vd24g4oCmIiBlbnRyeSBvdmVyIGVtcHR5UmVhc29uOyBib3RoIGFyZSBhY2NlcHRlZCBoZXJlLgogICAgICBHaXZlbiBDcmVhdG9yIGlzIGluZm9ybWVkICJOb3cgZXhwb3J0IHRoZSBJUFMgb2YgYSBwYXRpZW50IGZvciB3aG9tIG5vIHByb2JsZW1zLCBubyBhbGxlcmdpZXMgYW5kIG5vIG1lZGljYXRpb25zIGFyZSBrbm93biAoYXMgaW4gaHR0cHM6Ly9obDcub3JnL2ZoaXIvdXYvaXBzL0J1bmRsZS1idW5kbGUtbm8taW5mby1yZXF1aXJlZC1zZWN0aW9ucy5qc29uKS4iCiAgICAgIEFuZCBDcmVhdG9yIGlzIGFza2VkIGZvciAkaXBzTm9JbmZvIHdpdGggIlBhc3RlIHRoYXQgSVBTIEJ1bmRsZSAoSlNPTikiCiAgICAgIEFuZCAkaXBzTm9JbmZvIGlzIGEgRkhJUiByZXNvdXJjZQogICAgICBUaGVuICRpcHNOb0luZm8gc2hvdWxkIGNvbmZvcm0gdG8gImh0dHA6Ly9obDcub3JnL2ZoaXIvdXYvaXBzL1N0cnVjdHVyZURlZmluaXRpb24vQnVuZGxlLXV2LWlwcyIgaWdub3Jpbmcgc2xpY2luZyBlcnJvcnMKICAgICAgIyBDb21wb3NpdGlvbi5zZWN0aW9uOnNlY3Rpb25Qcm9ibGVtcy5lbXB0eVJlYXNvbiAoU0hBTEw6cG9wdWxhdGUtaWYta25vd24pIOKAlCBvciBhICJubyBrbm93biIgZW50cnkKICAgICAgQW5kICRpcHNOb0luZm8gYXQgIkJ1bmRsZS5lbnRyeS5yZXNvdXJjZS5vZlR5cGUoQ29tcG9zaXRpb24pLnNlY3Rpb24ud2hlcmUoY29kZS5jb2Rpbmcud2hlcmUoY29kZT0nMTE0NTAtNCcpLmV4aXN0cygpKS5hbGwoZW1wdHlSZWFzb24uZXhpc3RzKCkgb3IgZW50cnkuZXhpc3RzKCkpIiBzaG91bGQgYmUgdHJ1ZQogICAgICAjIENvbXBvc2l0aW9uLnNlY3Rpb246c2VjdGlvbkFsbGVyZ2llcy5lbXB0eVJlYXNvbiAoU0hBTEw6cG9wdWxhdGUtaWYta25vd24pIOKAlCBvciBhICJubyBrbm93biIgZW50cnkKICAgICAgQW5kICRpcHNOb0luZm8gYXQgIkJ1bmRsZS5lbnRyeS5yZXNvdXJjZS5vZlR5cGUoQ29tcG9zaXRpb24pLnNlY3Rpb24ud2hlcmUoY29kZS5jb2Rpbmcud2hlcmUoY29kZT0nNDg3NjUtMicpLmV4aXN0cygpKS5hbGwoZW1wdHlSZWFzb24uZXhpc3RzKCkgb3IgZW50cnkuZXhpc3RzKCkpIiBzaG91bGQgYmUgdHJ1ZQogICAgICAjIENvbXBvc2l0aW9uLnNlY3Rpb246c2VjdGlvbk1lZGljYXRpb25zLmVtcHR5UmVhc29uIChTSEFMTDpwb3B1bGF0ZS1pZi1rbm93bikg4oCUIG9yIGEgIm5vIGtub3duIiBlbnRyeQogICAgICBBbmQgJGlwc05vSW5mbyBhdCAiQnVuZGxlLmVudHJ5LnJlc291cmNlLm9mVHlwZShDb21wb3NpdGlvbikuc2VjdGlvbi53aGVyZShjb2RlLmNvZGluZy53aGVyZShjb2RlPScxMDE2MC0wJykuZXhpc3RzKCkpLmFsbChlbXB0eVJlYXNvbi5leGlzdHMoKSBvciBlbnRyeS5leGlzdHMoKSkiIHNob3VsZCBiZSB0cnVlCg=="
}