PD9waHAgIAkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCXJlcXVpcmVfb25jZSgkX1NFUlZFUlsnRE9DVU1FTlRfUk9PVCddIC4gIi9lY2xpcHNlLm9yZy1jb21tb24vc3lzdGVtL2FwcC5jbGFzcy5waHAiKTsJcmVxdWlyZV9vbmNlKCRfU0VSVkVSWydET0NVTUVOVF9ST09UJ10gLiAiL2VjbGlwc2Uub3JnLWNvbW1vbi9zeXN0ZW0vbmF2LmNsYXNzLnBocCIpOyAJcmVxdWlyZV9vbmNlKCRfU0VSVkVSWydET0NVTUVOVF9ST09UJ10gLiAiL2VjbGlwc2Uub3JnLWNvbW1vbi9zeXN0ZW0vbWVudS5jbGFzcy5waHAiKTsgCSRBcHAgCT0gbmV3IEFwcCgpOwkkTmF2CT0gbmV3IE5hdigpOwkkTWVudSAJPSBuZXcgTWVudSgpOwkJaW5jbHVkZSgkQXBwLT5nZXRQcm9qZWN0Q29tbW9uKCkpOyAgICAjIEFsbCBvbiB0aGUgc2FtZSBsaW5lIHRvIHVuY2x1dHRlciB0aGUgdXNlcidzIGRlc2t0b3AnCgokcGFnZVRpdGxlIAkJPSAiIjsKJHBhZ2VLZXl3b3Jkcwk9ICIiOwokcGFnZUF1dGhvcgkJPSAiIjsKCm9iX3N0YXJ0KCk7Cj8+CiAgICA8ZGl2IGlkPSJtYWluY29udGVudCI+Cgk8ZGl2IGlkPSJtaWRjb2x1bW4iPgoKPD9waHAKaW5jbHVkZV9vbmNlKCRfU0VSVkVSWydET0NVTUVOVF9ST09UJ10gLiAiL3Byb2plY3RzL2ZyYWdtZW50cy9wcm9wb3NhbC1wYWdlLWhlYWRlci5waHAiKTsKZ2VuZXJhdGVfaGVhZGVyKCJIaWdnaW5zLCBUaGUgVHJ1c3QgRnJhbWV3b3JrIik7Cj8+CQoJCiAgCiAgICA8aDE+aGlnZ2lucywgdGhlIHRydXN0IGZyYW1ld29yazwvaDE+PGJyPgogICAgICAgIAogICAgICA8cD5UaGlzIHByb3Bvc2FsIAogICAgaXMgaW4gdGhlIFByb2plY3QgUHJvcG9zYWwgUGhhc2UgKGFzIGRlZmluZWQgaW4gdGhlCiAgICA8YSBocmVmPSIvcHJvamVjdHMvZGV2X3Byb2Nlc3MvIiBzdHlsZT0iY29sb3I6IGJsdWU7IHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOyB0ZXh0LXVuZGVybGluZTogc2luZ2xlIj4KICAgIEVjbGlwc2UgRGV2ZWxvcG1lbnQgUHJvY2VzcyBkb2N1bWVudDwvYT4pIGFuZCBpcyB3cml0dGVuIHRvIGRlY2xhcmUgdGhlIAogICAgaW50ZW50IGFuZCBzY29wZSBvZiBhIHByb3Bvc2VkIFRlY2hub2xvZ3kgUE1DIFByb2plY3QgY2FsbGVkIEhpZ2dpbnMsIHRoZSAKICAgIFRydXN0IEZyYW1ld29yayBQcm9qZWN0LCBvciBIaWdnaW5zLiAoTm90ZSB0aGF0IGl0cyBvcmlnaW5hbCBuYW1lIHdhcyB0aGUKICAgICAgRWNsaXBzZSBUcnVzdCBGcmFtZXdvcmsgb3IgRVRGLCBzbyBzb21lIG9mIHRoZSBtYXRlcmlhbCB3aWxsIHN0aWxsIGhhdmUKICAgICAgdGhlIG9sZCBuYW1lLikgSW4gYWRkaXRpb24sIHRoaXMgcHJvcG9zYWwgaXMgd3JpdHRlbiB0byAKICAgIHNvbGljaXQgYWRkaXRpb25hbCBwYXJ0aWNpcGF0aW9uIGFuZCBpbnB1dHMgZnJvbSB0aGUgRWNsaXBzZSBjb21tdW5pdHkuIFlvdSAKICAgIGFyZSBpbnZpdGVkIHRvIGNvbW1lbnQgb24gYW5kL29yIGpvaW4gdGhlIHByb2plY3QuIFBsZWFzZSBzZW5kIGFsbCBmZWVkYmFjayAKICAgIHRvIHRoZSA8YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL25ld3Nwb3J0YWwvdGhyZWFkLnBocD9ncm91cD1lY2xpcHNlLnRlY2hub2xvZ3kuZXRmIiBzdHlsZT0iY29sb3I6IGJsdWU7IHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOyB0ZXh0LXVuZGVybGluZTogc2luZ2xlIj4KICAgIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbmV3c3BvcnRhbC90aHJlYWQucGhwP2dyb3VwPWVjbGlwc2UudGVjaG5vbG9neS5ldGY8L2E+IG5ld3Nncm91cC48L3A+CiAgCgoKICA8aDI+QmFja2dyb3VuZDwvaDI+CiAgCiAgICAgCiAgICAgIDxwPjxzcGFuIHN0eWxlPSdjb2xvcjpibGFjayc+IDwvc3Bhbj4KICAgICAgCgogVGhlIG5lZWQgdG8gaW1wcm92ZSBpbnRlcm9wZXJhYmlsaXR5LCBzZWN1cml0eSBhbmQgcHJpdmFjeSBpbiBsb29zZWx5IAogICAgICBjb3VwbGVkIGFyY2hpdGVjdHVyZXMsIGVzcGVjaWFsbHkgdGhvc2UgdGhhdCBzcGFuIG9yZ2FuaXphdGlvbmFsIAogICAgICBib3VuZGFyaWVzIGhhcyBpbiByZWNlbnQgeWVhcnMgaW5jcmVhc2VkIHRoZSBwcm9taW5lbmNlIG9mIGlkZW50aXR5IAogICAgICBtYW5hZ2VtZW50IHN5c3RlbXMuIFRoZXNlIHN5c3RlbXMgbWFpbnRhaW4gYSByZWFsIG9yIHZpcnR1YWwgZGlyZWN0b3J5IG9mIAogICAgICBpZGVudGl0aWVzLCBlYWNoIHdpdGggcHJvZmlsZSBhdHRyaWJ1dGVzLCByb2xlcywgYWNjZXNzIHBlcm1pc3Npb25zIGFuZCBzbyAKICAgICAgb24uIFRoZXJlIGlzIG9mdGVuIGEgbmVlZCB0byBtYW5hZ2UgbW9yZSB0aGFuIGp1c3Qgk3BvaW50lCBpZGVudGl0aWVzIAogICAgICAoaS5lLiB0aGUgZGlnaXRhbCBpZGVudGlmaWVycyBhbmQgcHJvZmlsZXMgb2YgcGVvcGxlIGFuZCBzeXN0ZW1zKS4gTWFueSAKICAgICAgYXBwbGljYXRpb25zIG5lZWQgdG8gbWFuYWdlIHJlbGF0aW9uc2hpcHMgPGk+YmV0d2VlbjwvaT4gaWRlbnRpdGllc5d3aGF0IAogICAgICB3ZSBjYWxsIHRoZSA8aT5zb2NpYWwgY29udGV4dDwvaT4uIEV4YW1wbGVzIG9mIHRoZXNlIGFwcGxpY2F0aW9ucyBpbmNsdWRlIAogICAgICBncm91cHdhcmUsIHZpcnR1YWwgZGlyZWN0b3JpZXMsIHNvY2lhbCBuZXR3b3JraW5nIGFuZCBwYXRpZW50IGNlbnRlcmVkIAogICAgICBoZWFsdGhjYXJlLgogICAgICA8cD5XZSB1c2UgdGhlIHRlcm0gPGk+Y29udGV4dDwvaT4gdG8gY292ZXIgYSByYW5nZSBvZiB1bmRlcmx5aW5nIAogICAgICBpbXBsZW1lbnRhdGlvbnMgZnJvbSBkaXJlY3Rvcnkgc3lzdGVtcyBsaWtlIExEQVAgdG8gc29jaWFsIG5ldHdvcmtpbmcgCiAgICAgIHN5c3RlbXMgbGlrZSBGT0FGbmV0IG9yIEZyaWVuZHN0ZXIuIEEgY29udGV4dCBjYW4gYmUgdGhvdWdodCBvZiBhcyBhIAogICAgICBkaXN0cmlidXRlZCBjb250YWluZXItbGlrZSBvYmplY3QgdGhhdCBjb250YWlucyB0aGUgZGlnaXRhbCBpZGVudGl0aWVzIG9mIAogICAgICBtdWx0aXBsZSBwZW9wbGUgb3IgcHJvY2Vzc2VzLiBBIGNvbnRleHQgY2FuIHJlcHJlc2VudCBhIHRlYW0sIGEgCiAgICAgIGRlcGFydG1lbnQsIGFuIGFzc29jaWF0aW9uLCBhIG1haWxpbmcgbGlzdCwgYSB3ZWJzaXRlLCBhIGN1c3RvbWVyIGdyb3VwLCBhIAogICAgICBwZXJzb25hbCBidWRkeSBsaXN0LCBvciBhIGxpc3Qgb2Ygd2ViIHNlcnZpY2VzLjwvcD4KICAgICAgPHA+VGhlIEhpZ2dpbnMgVHJ1c3QgRnJhbWV3b3JrIHBsYXRmb3JtIGludGVuZHMgdG8gYWRkcmVzcyBmb3VyIGNoYWxsZW5nZXM6IHRoZSBsYWNrIG9mIGNvbW1vbiAKICAgICAgaW50ZXJmYWNlcyB0byBpZGVudGl0eS9uZXR3b3JraW5nIHN5c3RlbXMsIHRoZSBuZWVkIGZvciBpbnRlcm9wZXJhYmlsaXR5LCAKICAgICAgdGhlIG5lZWQgdG8gbWFuYWdlIG11bHRpcGxlIGNvbnRleHRzLCBhbmQgdGhlIG5lZWQgdG8gcmVzcG9uZCB0byAKICAgICAgcmVndWxhdG9yeSwgcHVibGljIG9yIGN1c3RvbWVyIHByZXNzdXJlIHRvIGltcGxlbWVudCBzb2x1dGlvbnMgYmFzZWQgb24gCiAgICAgIHRydXN0ZWQgaW5mcmFzdHJ1Y3R1cmUgdGhhdCBvZmZlcnMgc2VjdXJpdHkgYW5kIHByaXZhY3kuPC9wPgogICAgICA8cD48Yj5MYWNrIG9mIGNvbW1vbiBpbnRlcmZhY2VzLjwvYj4gVGhlIGFwcGxpY2F0aW9uIGRldmVsb3BlciB3aG8gbmVlZHMgCiAgICAgIHRvIGludGVncmF0ZSBhbiBpZGVudGl0eS9uZXR3b3JraW5nIHN5c3RlbSBpcyBmb3JjZWQgdG8gbGVhcm4gdGhlIAogICAgICBpbnRyaWNhY2llcyBvZiBlYWNoIGRpZmZlcmVudCBzeXN0ZW0uIFRoZSBsYWNrIG9mIGEgY29tbW9uIEFQSSBtZWFucyB0aGF0IAogICAgICB0aGlzIGxlYXJuaW5nIGludmVzdG1lbnQgaXMgbm90IHRyYW5zZmVyYWJsZS4gVGhpcyBwcm9qZWN0IGludGVuZHMgdG8gCiAgICAgIGRldmVsb3AgYSBjb21tb24gQVBJL2ZyYW1ld29yaywgcHJvdmlkZSBzYW1wbGUgcGx1Zy1pbnMsIGFuZCAKICAgICAgZW5jb3VyYWdlIGRldmVsb3BlcnMgdG8gY3JlYXRlIJNwcm92aWRlcpQgcGx1Zy1pbnMgZm9yIGV4aXN0aW5nIGFuZCBuZXcgCiAgICAgIGlkZW50aXR5L25ldHdvcmtpbmcgc3lzdGVtcy4gPC9wPgogICAgICA8cD48Yj5UaGUgbmVlZCBmb3IgaW50ZXJvcGVyYWJpbGl0eS4gPC9iPkFsdGhvdWdoIHRoZXJlIGhhdmUgYmVlbiBhbmQgd2lsbCAKICAgICAgbGlrZWx5IGNvbnRpbnVlIHRvIGJlIGF0dGVtcHRzIHRvIGNyZWF0ZSBhIHNpbmdsZSB1bml2ZXJzYWwgaWRlbnRpdHkgCiAgICAgIHN5c3RlbSwgdGhlIHJlYWxpdHkgaXMgdGhhdCB3ZZJsbCBsaXZlIGluIGEgaGV0ZXJvZ2VuZW91cyB3b3JsZCBmb3IgYSB2ZXJ5IAogICAgICBsb25nIHRpbWUuIFJhdGhlciB0aGFuIGludHJvZHVjZSB5ZXQgYW5vdGhlciBuZXcgaWRlbnRpdHkgc3lzdGVtLCBpbnN0ZWFkCiAgICAgIEhpZ2dpbnMgaW50cm9kdWNlcyBhIG5ldyCTY29udGV4dJQgYWJzdHJhY3Rpb24gYW5kIGFsbG93cyBkZXZlbG9wZXJzIHRvIGNyZWF0ZSAKICAgICAgYWRhcHRlcnMgdG8gbGVnYWN5IHN5c3RlbXMuIFN5c3RlbXMgb3BlcmF0aW5nIGFib3ZlIHRoZSBhYnN0cmFjdGlvbiBsYXllciAKICAgICAgaGF2ZSB0byBwb3RlbnRpYWwgdG8gbGluayBpZGVudGl0aWVzIGFjcm9zcyBpZGVudGl0eSBzeXN0ZW0gYm91bmRhcmllcy48L3A+CiAgICAgIDxwPjxiPlRoZSBuZWVkIHRvIG1hbmFnZSBtdWx0aXBsZSBjb250ZXh0cy48L2I+IFRoZSBleGlzdGVuY2Ugb2YgY29tbW9uIAogICAgICBpZGVudGl0eS9uZXR3b3JraW5nIGZyYW1ld29yayBhbHNvIG1ha2VzIHBvc3NpYmxlIG5ldyBraW5kcyBvZiAKICAgICAgYXBwbGljYXRpb25zLiBBcHBsaWNhdGlvbnMgdGhhdCBtYW5hZ2UgaWRlbnRpdGllcywgcmVsYXRpb25zaGlwcywgCiAgICAgIHJlcHV0YXRpb24gYW5kIHRydXN0IGFjcm9zcyA8aT5tdWx0aXBsZTwvaT4gY29udGV4dHMuIE9mIHBhcnRpY3VsYXIgCiAgICAgIGludGVyZXN0IGFyZSBhcHBsaWNhdGlvbnMgdGhhdCB3b3JrIG9uIGJlaGFsZiBvZiBhIHVzZXIgdG8gbWFuYWdlIHRoZWlyIAogICAgICBvd24gcHJvZmlsZXMsIHJlbGF0aW9uc2hpcHMsIGFuZCByZXB1dGF0aW9uIGFjcm9zcyB0aGVpciB2YXJpb3VzIHBlcnNvbmFsIAogICAgICBhbmQgcHJvZmVzc2lvbmFsIGdyb3VwcywgdGVhbXMsIGFuZCBvdGhlciBvcmdhbml6YXRpb25hbCBhZmZpbGlhdGlvbnMgCiAgICAgIHdoaWxlIHByZXNlcnZpbmcgdGhlaXIgcHJpdmFjeS4gVGhlc2UgYXBwbGljYXRpb25zIGNvdWxkIHByb3ZpZGUgdXNlcnMgCiAgICAgIHdpdGggdGhlIGFiaWxpdHkgdG86IGRpc2NvdmVyIG5ldyBncm91cHMgdGhyb3VnaCBzaGFyZWQgYWZmaW5pdGllczsgZmluZCAKICAgICAgbmV3IHRlYW0gbWVtYmVycyBiYXNlZCBvbiByZXB1dGF0aW9uIGFuZCBiYWNrZ3JvdW5kOyBzb3J0LCBmaWx0ZXIgYW5kIAogICAgICB2aXN1YWxpemUgdGhlaXIgc29jaWFsIG5ldHdvcmtzLiBBcHBsaWNhdGlvbnMgY291bGQgYmUgdXNlZCBieSAKICAgICAgb3JnYW5pemF0aW9ucyB0byBidWlsZCBhbmQgbWFuYWdlIHRoZWlyIG5ldHdvcmtzIG9mIG5ldHdvcmtzLjwvcD4KICAgICAgPHA+PGI+VGhlIG5lZWQgZm9yIHRydXN0ZWQgaW5mcmFzdHJ1Y3R1cmUuIDwvYj4gV29ya2luZyBpbiBwYXJ0bmVyc2hpcCB3aXRoIG91ciBkZXZlbG9wbWVudCBwYXJ0bmVycyBhbmQgYWNhZGVtaWMgcmVzZWFyY2ggCiAgICAgIGdyb3VwcywgdGhpcyBwcm9qZWN0IHdpbGwgY3JlYXRlIGEga2V5IHBhcnQgb2YgdGhlIG9wZW4gc291cmNlIAogICAgICBpbmZyYXN0cnVjdHVyZSByZXF1aXJlZCBmb3IgYW4gb3BlbiwgYWNjb3VudGFibGUsIHNvY2lhbGx5LXNlYXJjaGFibGUgd2ViIAogICAgICB3aGlsZSBlbnN1cmluZyBwcml2YWN5IGFuZCBwZXJzb25hbCBjb250cm9sIG92ZXIgaWRlbnRpdHkgaW5mb3JtYXRpb24uPC9wPgoKCiAgCgoKICA8aDI+RGVzY3JpcHRpb24gCiAgICAgIChzY29wZSBhbmQgZ29hbHMpPC9oMj4KICAgCiAgICAgCiAgICAgPHA+T3VyIGdvYWxzIGFyZSB0bzo8cD4xLiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0NyZWF0ZSBhIGZyYW1ld29yay9BUEkgliBhbiBhYnN0cmFjdGlvbiBsYXllciBmb3IgCiAgICAgIGlkZW50aXR5IGFuZCBzb2NpYWwgbmV0d29ya2luZyBzZXJ2aWNlczwvcD4KICAgICAgPHA+Mi4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtDcmVhdGUgYSBzZXQgb2YgZXhlbXBsYXJ5IGNvbnRleHQgk3Byb3ZpZGVylCAKICAgICAgaW1wbGVtZW50YXRpb25zIChwbHVnLWlucyk8L3A+CiAgICAgIDxwPjMuJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Q3JlYXRlIGFuIGV4ZW1wbGFyeSBhcHAgdGhhdCBkZW1vbnN0cmF0ZXMgaG93IHRvIHVzZSB0aGUgCiAgICAgIGV4dGVuc2libGUgCiAgICAgIGZyYW1ld29yazwvcD4KICAgICAgPHA+NC4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtFbmFibGUgZGV2ZWxvcGVycyB0byBsZXZlcmFnZSBIaWdnaW5zIGluIHRoZWlyIGFwcGxpY2F0aW9uczwvcD4KICAgICAgCiAgICAgICAgICA8cD48Yj4oMSkgRnJhbWV3b3JrL0FQSTwvYj48L3A+CiAgICAgIDxwPlRoZSBleHRlbnNpYmxlIGZyYW1ld29yayB3aWxsIHN1cHBvcnQgYW4gQVBJIGZvciB1c2UgYnkgRWNsaXBzZSBwbHVnLWlucyBhbmQgCiAgICAgIGFwcGxpY2F0aW9ucy4gVGhlIEFQSSBjb3VsZCBhbHNvIGJlIGFjY2Vzc2libGUgdmlhIGEgd2ViIHNlcnZpY2VzIAogICAgICBpbnRlcmZhY2UuIFRoZSBBUEkgd2lsbCBwcm92aWRlOjwvcD4KICAgICAgPHA+MS4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKICAgICAgSW5pdGlhbGl6YXRpb24gb2YgdGhlIGZyYW1ld29yayBwbGF0Zm9ybSA8L3A+CiAgICAgIDxwPjIuJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7CiAgICAgIFRoZSA8aT5jb250ZXh0PC9pPiBpbnRlcmZhY2UgKGltcGxlbWVudGVkIGJ5IGV4dGVuc2lvbnMgdG8gCiAgICAgIHRoZSBjb250ZXh0IHByb3ZpZGVyIGV4dGVuc2lvbiBwb2ludCk8L3A+CiAgICAgIDxwPjMuJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7CiAgICAgIENvbnRleHQgbWFuYWdlbWVudCBzZXJ2aWNlcyAoZS5nLiBtYW5hZ2luZyB0aGUgcmVnaXN0cnkgb2YgCiAgICAgIGNvbnRleHQgcHJvdmlkZXIgcGx1Zy1pbnM7IHJlc29sdmluZyBhIGNvbnRleHQgcmVmZXJlbmNlIHRvIGEgbmV0d29yayAKICAgICAgbG9jYXRpb24gYW5kIGEgY29udGV4dCBwcm92aWRlciBpbXBsZW1lbnRhdGlvbiBwbHVnLWluOyBsb2FkaW5nIGFuZCAKICAgICAgZGlzY2FyZGluZyBvZiBjb250ZXh0cywgZXRjLik8L3A+CiAgICAgIDxwPlRoZSBjZW50ZXIgb2YgdGhlIGV4dGVuc2libGUgZnJhbWV3b3JrIGRlc2lnbiBpcyB0aGUgcGx1Zy1hYmxlIDxpPmNvbnRleHQ8L2k+IAogICAgICBpbnRlcmZhY2UuIEEgY29udGV4dCBpcyBhIGNvbnRhaW5lciBvZiA8aT5mYWNldHM8L2k+LiBBIGZhY2V0IGEgcGVyc29uIG9yIAogICAgICBwcm9jZXNzIHRoYXQgaGFzIGJlZW4gYXV0aGVudGljYXRlZCB3aXRoaW4gaXRzIGNvbnRhaW5pbmcgY29udGV4dC4gQSBmYWNldCAKICAgICAgaGFzIGEgPGk+cHJvZmlsZTwvaT4gd2hpY2ggaXMgY29tcHJpc2VkIG9mIGEgc2V0IG9mIFJERiBwcm9wZXJ0aWVzIGFuZCAKICAgICAgdmFsdWVzIChlLmcuIG5hbWUsIGFkZHJlc3MsIGV0Yy4pLiBBIGZhY2V0IGFsc28gaGFzIG9uZSBvciBtb3JlIDxpPnJvbGVzPC9pPiAKICAgICAgd2l0aGluIHRoZSBjb250ZXh0LiBUaGUgc2V0IG9mIHByb2ZpbGUgcHJvcGVydGllcyBhbmQgdGhlIHNldCBvZiByb2xlcyBhbmQgCiAgICAgIHRoZSBhY2Nlc3MgcmlnaHRzIGZvciBlYWNoIHJvbGUgYXJlIGRlZmluZWQgYnkgYW5kIGNvbnRyb2xsZWQgYnkgdGhlIAogICAgICBjb250ZXh0IHByb3ZpZGVyIGltcGxlbWVudGF0aW9uLiA8L3A+CiAgICAgIAogICAgICA8cD5Db250ZXh0IHByb3ZpZGVyIGltcGxlbWVudGF0aW9ucyBhcmUgcmVzcG9uc2libGUgZm9yOjwvcD4KICAgICAgPHA+MS4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKICAgICAgQXV0aGVudGljYXRpb24gb2YgY3JlZGVudGlhbHMgZm9yIGFjY2VzczwvcD4KICAgICAgPHA+Mi4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKICAgICAgQXV0aGVudGljYXRpb24gb2YgZWFjaCBmYWNldCB3aXRoaW4gdGhlIGNvbnRleHQ8L3A+CiAgICAgIDxwPjMuJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7CiAgICAgIEF1dGhvcml6YXRpb24gb2YgYWNjZXNzIHRvIGZhY2V0IHByb2ZpbGUgZGF0YSB1c2luZyAKICAgICAgcm9sZS1iYXNlZCBhY2Nlc3MgY29udHJvbCBsaXN0czwvcD4KICAgICAgPHA+NC4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKICAgICAgRmFjZXQgc2VhcmNoIGFuZCBlZGl0aW5nIGZ1bmN0aW9uczwvcD4KICAgICAgPHA+NS4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKICAgICAgU3VwcG9ydCBmb3IgYWRkaW5nIHRhZyBwcm9wZXJ0aWVzIHRvIGZhY2V0cyBhbmQgb24gdGhlIAogICAgICBsaW5rcyBiZXR3ZWVuIGZhY2V0czwvcD4KICAgICAgPHA+Ni4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKICAgICAgUmVwbGljYXRpb24vZGlzdHJpYnV0aW9uIG9mIGNvbnRleHQgZGF0YSB0byBIaWdnaW5zIGNsaWVudHM8L3A+CiAgICAgIDxwPjcuJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7CiAgICAgIFN5bmNocm9uaXphdGlvbiBvZiBjb250ZXh0IGRhdGEgPC9wPgogICAgICA8cD44LiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwogICAgICBQZXJzaXN0ZW5jZSBhbmQgZW5jcnlwdGlvbiBvZiBjb250ZXh0IGRhdGE8L3A+CiAgICAgIDxibG9ja3F1b3RlPgogICAgICA8cD5Ob3RlMTogU29tZSBjb250ZXh0IHByb3ZpZGVycyB3aWxsIHByb3ZpZGUgb25seSBhIHN1YnNldCBvZiB0aGUgCiAgICAgIGZlYXR1cmVzIGxpc3RlZCBhYm92ZS4gPC9wPgogICAgICA8cD5Ob3RlMjogVGhlIGNvbW11bmljYXRpb25zIHByb3RvY29scyBhbmQgdG9wb2xvZ3kgKGUuZy4gY2xpZW50L3NlcnZlciBvciAKICAgICAgUDJQKSBhcmUgaW1wbGVtZW50YXRpb24gZGVwZW5kZW50LjwvcD4KICAgICAgCiAgICAgIDwvYmxvY2txdW90ZT4KICAgICAgPHA+PGI+KDIpICZuYnNwO0V4ZW1wbGFyeSBDb250ZXh0IHBsdWctaW5zPC9iPjwvcD4KICAgICAgPHA+T3VyIHBsYW4gaXMgdG8gY3JlYXRlIHRoZSBmb2xsb3dpbmcgZXhlbXBsYXJ5IHNldCBvZiBjb250ZXh0IJNwcm92aWRlcpQgCiAgICAgIHBsdWctaW5zOjwvcD4KICAgICAgPHA+MS4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKICAgICAgQSBzaW1wbGUgQnVkZHkgTGlzdCBwbHVnLWluLiBXZSB3aWxsIGNyZWF0ZSBhbiBFTUYtYmFzZWQgCiAgICAgIENvbnRleHQgZGF0YSBtb2RlbCBhbmQgdXNlIEVNRiwgU0RPIGFuZCBFY2xpcHNlIEVDRiBmb3IgcmVwbGljYXRpb24gYW5kIAogICAgICBzeW5jaHJvbml6YXRpb248L3A+CiAgICAgIDxwPjIuJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7CiAgICAgIEEgcGx1Zy1pbiB0byBhbiBleGlzdGluZyBlbnRlcnByaXNlIGRpcmVjdG9yeSBzZXJ2ZXI8L3A+CiAgICAgIDxwPjMuJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7CiAgICAgIEEgcGx1Zy1pbiBmb3IgdGhlIElkZW50aXR5IENvbW1vbnMgKE9BU0lTIFhSSS1iYXNlZCkgCiAgICAgIGlkZW50aXR5IHN5c3RlbTwvcD4KICAgICAgPHA+NC4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsKICAgICAgQSBwbHVnLWluIGZvciBhIFdTLVRydXN0L2V0Yy4gYmFzZWQgaWRlbnRpdHkgc3lzdGVtPC9wPgogICAgICA8cD41LiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwogICAgICBBIHBsdWctaW4gZm9yIHRoZSBGT0FGbmV0IG5ldHdvcmtpbmcgc3lzdGVtPC9wPgogICAgICA8cD42LiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwogICAgICBBIHBsdWctaW4gZm9yIE1pY3Jvc29mdJJzIE91dGxvb2sgZW1haWwgY2xpZW50IHRoYXQgCiAgICAgIGNyZWF0ZXMgYSBjb250ZXh0IGNvbnRhaW5pbmcgYSBuZXR3b3JrIG9mIGludGVybGlua2VkIGZhY2V0cyByZXByZXNlbnRpbmcgCiAgICAgIHRoZSB1c2VyknMgc29jaWFsIG5ldHdvcms8L3A+CiAgICAgIAogICAgICA8cD48Yj4mbmJzcDsoMykgRXhlbXBsYXJ5IEFwcGxpY2F0aW9uPC9iPjwvcD4KICAgICAgPHA+VGhlIGV4dGVuc2libGUgSGlnZ2lucyBUcnVzdCBGcmFtZXdvcmsgbWFrZXMgcG9zc2libGUgbmV3IGtpbmRzIG9mIGFwcGxpY2F0aW9ucyB0aGF0IG1hbmFnZSAKICAgICAgdGhlIHVzZXKScyBpZGVudGl0eSBhY3Jvc3MgPGk+bXVsdGlwbGU8L2k+IGNvbnRleHRzLiBXZSBwbGFuIG9uIGNyZWF0aW5nIAogICAgICBhbiBSQ1AgZGVtb25zdHJhdGlvbiBhcHBsaWNhdGlvbiB0aGF0IGNhbiBtYW5hZ2UgY29udGV4dHMgZnJvbSBhbnkgb2YgdGhlIAogICAgICBhYm92ZSBleGVtcGxhcnkgcGx1Zy1pbnMgdGhhdCBpbmNsdWRlczo8L3A+CiAgICAgIDxwPjEuJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7QSBVSSBmb3Igdmlld2luZywgZWRpdGluZyBhbmQgbGlua2luZyBpZGVudGl0aWVzIAogICAgICAgIGluIG11bHRpcGxlIGNvbnRleHRzIDwvcD4KICAgICAgICA8cD4gMi4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtBIFVJIGZvciByYXRpbmcvcmVwdXRhdGlvbiA8L3A+CiAgICAgICAgPHA+My4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtOZXR3b3JrIHZpc3VhbGl6YXRpb246IGFiaWxpdHkgdG8gb3ZlcmxheSB0aGUgCiAgICAgICAgbmV0d29ya3Mgb2YgbXVsdGlwbGUgY29udGV4dHMgdG8gZGV0ZXJtaW5lIGNvbW1vbiByZWxhdGlvbnNoaXBzIGFuZCAKICAgICAgICBjaGFyYWN0ZXJpc3RpY3M8L3A+CiAgICAgICAgPHA+NC4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtTb2NpYWwgbmV0d29yayBzZWFyY2ggZnVuY3Rpb25hbGl0eTwvcD4KICAgICAgCiAgICAgIDxwPjxiPig0KSBFbmFibGUgZGV2ZWxvcGVycyB0byBsZXZlcmFnZSBIaWdnaW5zIDwvYj48L3A+CiAgICAgPHA+T3VyIGhvcGUgCiAgICAgIGlzIHRoYXQgZGV2ZWxvcGVycyBjYW4gdXNlIEhpZ2dpbnMgdG8gbW9yZSBlYXNpbHkgaW1wbGVtZW50IGlkZW50aXR5LSBhbmQgCiAgICAgIG5ldHdvcmtpbmctcmVsYXRlZCBmdW5jdGlvbmFsaXR5IGluIHRoZWlyIGFwcGxpY2F0aW9ucywgaW5zdGVhZCBvZiAKICAgICAgY3JlYXRpbmcgdGhpcyBmdW5jdGlvbmFsaXR5IGZyb20gc2NyYXRjaC4gSGVyZSBhcmUgc29tZSBleGFtcGxlcy4gVGhleSAKICAgICAgY291bGQgdXNlIGFuIGV4aXN0aW5nIEhpZ2dpbnMgY29udGV4dCBwcm92aWRlciB0byBtYW5hZ2UgdGhlIGxpc3Qgb2YgCiAgICAgIGlkZW50aXRpZXMsIG1lbWJlciByZWNvcmRzLCBldGMuIGFzIHdlbGwgYXMgYWxsIGFzc29jaWF0ZWQgYXR0cmlidXRlIGRhdGEgCiAgICAgIHVzZWQgYnkgdGhlaXIgYXBwbGljYXRpb24uIFRoZXkgY291bGQgdXNlIEhpZ2dpbnOSIGNvbnRleHQgYWJzdHJhY3Rpb24gYXMgCiAgICAgIJNnbHVllCB0byBpbnRlZ3JhdGUgbXVsdGlwbGUgZXhpc3RpbmcgZW50ZXJwcmlzZSBkaXJlY3Rvcmllcy4mbmJzcDsgVGhleSBjb3VsZCAKICAgICAgYWRkIJNwZXJpcGhlcmFsIHZpc2lvbpQgb2Ygb3RoZXIgY28td29ya2VyknMgbWVtYmVyknMgb25saW5lIHByZXNlbmNlLCAKICAgICAgY29udGFjdCBpbmZvcm1hdGlvbiwgYW5kIHJlcHV0YXRpb24gdG8gZXhpc3RpbmcgYXBwcy4gCiAgICAKIAogIAoKCiAgPGgyPk9yZ2FuaXphdGlvbjwvaDI+CiAgCiAgICAKICAgICAgPHA+V2UgcHJvcG9zZSB0aGlzIHByb2plY3Qgc2hvdWxkIGJlIHVuZGVydGFrZW4gYXMgYSBUZWNobm9sb2d5IHByb2plY3QgCiAgICAgICAgcmF0aGVyIHRoYW4gYXMgcGFydCBvZiB0aGUgRWNsaXBzZSBQbGF0Zm9ybS4gQmVpbmcgYSBUZWNobm9sb2d5IHByb2plY3QgCiAgICAgICAgZ2l2ZXMgaXQgcm9vbSB0byBleHBlcmltZW50IHdpdGhvdXQgZGlzcnVwdGlvbiB0byBvdGhlciBFY2xpcHNlIFBsYXRmb3JtIAogICAgICAgIGRldmVsb3BtZW50IHdvcmsuPC9wPgo8cD5UaGUgbGlmZSBjeWNsZSBvZiB0aGlzIHByb2plY3QgbWF5IGJlIHNpbWlsYXIgdG8gdGhlIEVxdWlub3ggcHJvamVjdC6gIFRoYXQgCiAgaXMsIG9uY2UgdGhpcyB3b3JrIG1hdHVyZXMsIGl0IG1heSBiZSBpbmNvcnBvcmF0ZWQgaW50byB0aGUgRWNsaXBzZSBQbGF0Zm9ybSAKICB0byBwcm92aWRlIGEgY29tbW9uIG9wZW4gc291cmNlIHN1YnN0cmF0ZSB0aGF0IGluZHVzdHJpYWwvY29tbWVyY2lhbCB1c2VycyBjb3VsZCAKICB1c2UgdG8gYnVpbGQgc29sdXRpb25zLiBBbHRlcm5hdGl2ZWx5LCBpdCBtYXkgY29udGludWUgYXMgYSB0ZWNobm9sb2d5IHN1YnByb2plY3QuIAo8L3A+CiAgICAgIDxwPjxiPlN1Z2dlc3RlZCBQcm9qZWN0IExlYWQgYW5kIENvbW1pdHRlcnM8L2I+PC9wPgogICAgICA8cD5UaGlzIHNlY3Rpb24gY2FwdHVyZXMgdGhlIGxpc3Qgb2Ygb3JnYW5pemF0aW9ucyB0aGF0IGhhdmUgZXhwcmVzc2VkIGludGVyZXN0IAogIGluIHRoZSBwcm9qZWN0IGFuZC9vciBpdHMgY29tcG9uZW50cywgYW5kIGFzIHN1Y2ggd2lsbCBiZSB1cGRhdGVkIHBlcmlvZGljYWxseSAKICB0byByZWZsZWN0IHRoZSBncm93aW5nIGludGVyZXN0IGluIHRoaXMgcHJvamVjdC48YnI+CiAgPGJyPgogIFJhdGhlciB0aGFuIGNhbnZhcyB0aGUgRWNsaXBzZSBjb21tdW5pdHkgYXQgbGFyZ2UsIHRoZSBzdWJtaXR0ZXJzIG9mIHRoaXMgcHJvcG9zYWwgCiAgd2VsY29tZSBpbnRlcmVzdGVkIHBhcnRpZXMgdG8gcG9zdCB0byB0aGUgPGEKaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9uZXdzcG9ydGFsL3RocmVhZC5waHA/Z3JvdXA9ZWNsaXBzZS50ZWNobm9sb2d5LmV0ZiI+ZWNsaXBzZS50ZWNobm9sb2d5LmV0ZiBuZXdzZ3JvdXA8L2E+IAogIGFuZCBhc2sgdG8gYmUgYWRkZWQgdG8gdGhlIGxpc3QgYXMgaW50ZXJlc3RlZCBwYXJ0aWVzIG9yIHRvIHN1Z2dlc3QgY2hhbmdlcyAKICB0byB0aGlzIGRvY3VtZW50LjwvcD4KICAgICAgPGI+SW5pdGlhbCBTZXQgb2YgQ29tbWl0dGVycyA8L2I+IAogICAgICA8cD5QYXVsIFRyZXZpdGhpY2sgCiAgKFByb2plY3QgTGVhZCk8YnI+CiAgU29jaWFsUGh5c2ljcy5vcmc7IHBhdWwgYXQgU29jaWFsUGh5c2ljcy5vcmc8L3A+CiAgICAgIDxwPkRtaXRyeSBCYWt1bnRzZXYgPGJyPgogICAgICBJbnRlcm5hdGlvbmFsIFRlY2hub2xvZ3kgR3JvdXAgKElURyk8L3A+CiAgICAgIDxwPkpvaG4gQmVhdHR5PC9wPgogICAgICA8cD5BbmR5IERhbGUgPGJyPgogICAgICBvb1RhbzwvcD4KICAgICAgPHA+S2VuIEdpbG1lcjwvcD4KICAgICAgPHA+U2NvdHQgTGV3aXMgPGJyPgogICAgICAgIENvbXBvc2VudCwgSW5jLjwvcD4KICAgICAgPHA+UGV0ZXIgTmVocmVyIDxicj4KICBTMSBDb3Jwb3JhdGlvbjwvcD4KICAgICAgPHA+TWFyeSBSdWRkeTxicj4KICBTb2NpYWxQaHlzaWNzLm9yZzsgbWFyeSBhdCBTb2NpYWxQaHlzaWNzLm9yZzwvcD4KICAgICAgPHA+UGF1bCBXZWl0ejwvcD4KICAgICAgCiAgCgoKICAKICAgIDxzdHJvbmc+SW50ZXJlc3RlZCBQYXJ0aWVzPC9zdHJvbmc+CiAgICAmbmJzcDsKICAKICAKICAgIAogICAgCiAgCiAgCiAgICBTb2NpYWxQaHlzaWNzLm9yZ6AgCiAgICA8YSBocmVmPSJodHRwOi8vd3d3LnNvY2lhbHBoeXNpY3Mub3JnLyI+aHR0cDovL3d3dy5zb2NpYWxwaHlzaWNzLm9yZzwvYT4KICAKICAKICAKICAgIElCTSZuYnNwOwogICAgIDxhIGhyZWY9Imh0dHA6Ly93d3cuaWJtLmNvbS8iPmh0dHA6Ly93d3cuaWJtLmNvbS88L2E+CiAgCiAgCiAgCiAgICBJbnByaXZhJm5ic3A7CiAgICAgPGEgaHJlZj0iaHR0cDovL3d3dy5pbnByaXZhLmNvbS8iPmh0dHA6Ly93d3cuaW5wcml2YS5jb20vPC9hPgogIAogIAogCiAgICBJVEcmbmJzcDsKICAgICA8YSBocmVmPSJodHRwOi8vd3d3LmludGVydGVjaG5vZ3JvdXAuY29tLyI+aHR0cDovL3d3dy5pbnRlcnRlY2hub2dyb3VwLmNvbS88L2E+CiAgCiAgCiAgICBvb1RhbyZuYnNwOwogICAgIDxhIGhyZWY9Imh0dHA6Ly93d3cub290YW8uY29tLyI+aHR0cDovL3d3dy5vb3Rhby5jb20vPC9hPgogIAogIAogICAgQmVya21hbiBDZW50ZXIgZm9yIEludGVybmV0ICZhbXA7IFNvY2lldHkgYXQgCiAgICAgIEhhcnZhcmQgTGF3CiAgICAgPGEgaHJlZj0iaHR0cDovL2N5YmVyLmxhdy5oYXJ2YXJkLmVkdS9ob21lLyI+aHR0cDovL2N5YmVyLmxhdy5oYXJ2YXJkLmVkdS9ob21lLzwvYT4KICAKCjwvZGl2Pgo8L2Rpdj4KPD9waHAKCSMgUGFzdGUgeW91ciBIVE1MIGNvbnRlbnQgYmV0d2VlbiB0aGUgRU9IVE1MIG1hcmtlcnMhCQoJJGh0bWwgPSBvYl9nZXRfY29udGVudHMoKTsKCW9iX2VuZF9jbGVhbigpOwoKCSMgR2VuZXJhdGUgdGhlIHdlYiBwYWdlCgkkQXBwLT5nZW5lcmF0ZVBhZ2UoJHRoZW1lLCAkTWVudSwgJE5hdiwgJHBhZ2VBdXRob3IsICRwYWdlS2V5d29yZHMsICRwYWdlVGl0bGUsICRodG1sKTsKPz4K