PGh0bWw+CgogIDxoZWFkPgogICAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIgoJIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD13aW5kb3dzLTEyNTIiLz4KCiAgICA8dGl0bGU+UGx1Z2dpbmcgaW50byBTb3VyY2VGb3JnZS5uZXQ8L3RpdGxlPgoKICAgIDxsaW5rIGhyZWY9Ii4uL2RlZmF1bHRfc3R5bGUuY3NzIiByZWw9InN0eWxlc2hlZXQiLz4KCiAgICA8bWV0YSBjb250ZW50PSJEYXZpZCBKLiBCaWVzYWNrIChkYXZpZF9iaWVzYWNrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldCkiCiAgICAgbmFtZT0iYXV0aG9yIi8+CgogICAgPG1ldGEgY29udGVudD0icG9tYnJlZGFubmVAbmV4Yi5jb20iCiAgICAgbmFtZT0iZWRpdG9yIi8+CgogICAgPG1ldGEgY29udGVudD0iRGVzY3JpYmVzIGhvdyB5b3UgY2FuIHB1Ymxpc2ggeW91ciBvcGVuIHNvdXJjZSBFY2xpcHNlIFBsdWctSW4gb24gU291cmNlRm9yZ2UubmV0IgogICAgIG5hbWU9ImRlc2NyaXB0aW9uIi8+CgogICAgPG1ldGEgY29udGVudD0iaHR0cHM6Ly9idWdzLmVjbGlwc2Uub3JnL2J1Z3Mvc2hvd19idWcuY2dpP2lkPTk0OTQwIgogICAgIG5hbWU9ImJ1Z3ppbGxhIi8+CgogIDwvaGVhZD4KCiAgPGJvZHk+CgogICAgPGRpdiBhbGlnbj0icmlnaHQiPgoKICAgICAgQ29weXJpZ2h0ICZjb3B5OyAyMDA1IGJ5IERhdmlkIEouIEJpZXNhY2sKIAogICAgPC9kaXY+CgogICAgPGRpdiBhbGlnbj0ibGVmdCI+CgogICAgICA8aDE+PGltZyBhbGlnbj0ibWlkZGxlIiBhbHQ9IiIgaGVpZ2h0PSI4NiIgc3JjPSIuLi9pbWFnZXMvSWRlYS5qcGciCiAgICAgICB3aWR0aD0iMTIwIi8+PC9oMT4KCiAgICA8L2Rpdj4KCiAgICA8aDEgc3R5bGU9ImFsaWduOiBjZW50ZXI7Ij5QbHVnZ2luZyBpbnRvIFNvdXJjZUZvcmdlLm5ldDwvaDE+CgogICAgPGJsb2NrcXVvdGU+CgogICAgICA8cD48Yj5TdW1tYXJ5PC9iPjwvcD4KCiAgICAgIDxwPkNvbmdyYXR1bGF0aW9ucyBvbiB0YWtpbmcgdGhlIHBsdW5nZSBhbmQgd3JpdGluZyBhbiBvcGVuIHNvdXJjZQogICAgICBwbHVnLWluIGZvciB0aGUgRWNsaXBzZSBwbGF0Zm9ybS4KICAgICAgU291cmNlRm9yZ2UubmV0IGNhbiBwcm92aWRlIGEgZ29vZCBob21lIHlvdXIgcGx1Zy1pbiwgYnV0CiAgICAgIGluZm9ybWF0aW9uIG9uIGhvdyBiZXN0IHRvIHNldCB1cCBhbiBFY2xpcHNlIHByb2plY3QgdGhlcmUgaXMgc3BhcnNlLgogICAgICBUaGlzIGFydGljbGUgaXMgYW4gaW50cm9kdWN0aW9uIHRvIFNvdXJjZUZvcmdlIGZvciB0aGUgRWNsaXBzZQogICAgICBkZXZlbG9wZXIuIFlvdSB3aWxsIGxlYXJuIHRoZSBmZWF0dXJlcyBhdmFpbGFibGUgdG8gdGhlCiAgICAgIFNvdXJjZUZvcmdlLm5ldCBvcGVuIHNvdXJjZSBkZXZlbG9wZXIgY29tbXVuaXR5IGFuZCBiZSBndWlkZWQKICAgICAgdGhyb3VnaCB0aGUgcHJvY2VzcywgZnJvbSBjcmVhdGluZyBhIFNvdXJjZUZvcmdlIHByb2plY3QgdG8KICAgICAgaG9zdGluZyB5b3VyIEVjbGlwc2UgVXBkYXRlIHNpdGUuPC9wPgoKICAgICAgPHA+PGI+QnkgRGF2aWQgQmllc2FjaywgU0FTPC9iPjwvcD4KCiAgICAgIDxwPk9jdG9iZXIgMTUsIDIwMDU8L3A+CgogICAgPC9ibG9ja3F1b3RlPgoKICAgIDxociAvPgoKICAgIDxoMz5Tb3VyY2VGb3JnZTogQSBzaXRlIGZvciBldmVyeXRoaW5nIG9wZW4gc291cmNlIGFuZCBub3RoaW5nIGluCiAgICBwYXJ0aWN1bGFyPC9oMz4KCiAgICA8ZGl2PjxpbWcgYWxpZ249InJpZ2h0IiBhbHQ9IlNvdXJjZUZvcmdlLm5ldCBsb2dvIgogICAgIHNyYz0iaW1hZ2VzL1NvdXJjZUZvcmdlLm5ldC5wbmciCiAgICAgc3R5bGU9Im1hcmdpbjo1cHg7IHdpZHRoOiAyMTBweDsgaGVpZ2h0OiA2MnB4OyIgdGl0bGU9IlNvdXJjZUZvcmdlLm5ldCIvPjwvZGl2PgoKICAgIDxwPjxhIGhyZWY9Imh0dHA6Ly93d3cuc291cmNlZm9yZ2UubmV0LyI+U291cmNlRm9yZ2UubmV0PC9hPiAob3IKICAgIHNpbXBseSBTb3VyY2VGb3JnZSkgaXMgdGhlIHdvcmxkJ3MgbGFyZ2VzdCBvcGVuIHNvdXJjZQogICAgc29mdHdhcmUgcmVwb3NpdG9yeSBhbmQgZGV2ZWxvcGVyIHJlc291cmNlLiBKdXN0IGFzIEVjbGlwc2UgaXMgYW4KICAgICZxdW90OzxhIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvYXJ0aWNsZXMvQXJ0aWNsZS1VSS1HdWlkZWxpbmVzL3YyMDAyMDIvQ29udGVudHMuaHRtbCIKICAgID5JREUgZm9yIGV2ZXJ5dGhpbmcgYW5kIG5vdGhpbmcgaW4gcGFydGljdWxhcjwvYT4mcXVvdDssCiAgICBTb3VyY2VGb3JnZSBpcyBhIGRldmVsb3BlciBzaXRlIGZvciBldmVyeXRoaW5nIG9wZW4gc291cmNlIGFuZAogICAgbm90aGluZyBpbiBwYXJ0aWN1bGFyLiBTaW1pbGFyIHRvIGhvdyBhbiBFY2xpcHNlIHBsdWctaW4gcGx1Z3MgaW50bwogICAgdGhlIEVjbGlwc2UgZnJhbWV3b3JrIHRocm91Z2ggZXh0ZW5zaW9ucyBvZiB3ZWxsLWtub3duIGV4dGVuc2lvbgogICAgcG9pbnRzLCBvcGVuIHNvdXJjZSBwcm9qZWN0cyAmcXVvdDtwbHVnIGludG8mcXVvdDsgdGhlIHJpY2gKICAgIGNvbGxhYm9yYXRpb24gY29tbXVuaXR5IGhvc3RlZCBieSBTb3VyY2VGb3JnZS48L3A+CgogICAgPHA+U291cmNlRm9yZ2UgaXMgbGFuZ3VhZ2UgYW5kIHBsYXRmb3JtIGFnbm9zdGljICZtZGFzaDsKICAgIGl0IG1heSBiZSBKYXZhLCAuTmV0LCBQZXJsLAogICAgUnVieSwgUEhQLCBvciBhbnkgb3RoZXIgc29mdHdhcmUgcHJvamVjdC4gRm9yIGVhY2ggcHJvamVjdCwgcmVnYXJkbGVzcyBvZgogICAgbGFuZ3VhZ2Ugb3IgcGxhdGZvcm0sIGEgd2lkZSBhcnJheSBvZiBzZXJ2aWNlcyBpcyBmcmVlbHkKICAgIGF2YWlsYWJsZS4gVGhlIHByb2plY3QgJ2V4dGVuc2lvbiBwb2ludHMnIGluY2x1ZGUgc2VydmVyCiAgICBzcGFjZSBmb3IgYSBwcm9qZWN0IHdlYiBzaXRlLCB5b3VyIG93biBwcm9qZWN0IHN1Yi1kb21haW4sIGEgQ1ZTCiAgICBzZXJ2ZXIsIGZpbGUgcmVsZWFzZSBtYW5hZ2VtZW50LCBHTlUgTWFpbG1hbiBtYWlsaW5nIGxpc3RzLCBwcm9qZWN0CiAgICBjYXRlZ29yaXphdGlvbiwgb24tbGluZSBkaXNjdXNzaW9uIGZvcnVtcywgYnVnIHRyYWNraW5nLCBzZWN1cmUKICAgIGxvZ2luIHNoZWxsIGFuZCBGVFAsIGEgY29tcGlsZSBmYXJtLCB0YXNrIGxpc3RzIGFuZCBldmVuIGFuIG9uLWxpbmUKICAgIGZpbmFuY2lhbCBkb25hdGlvbiBtYW5hZ2VtZW50LjwvcD4KCiAgICA8ZGl2PjxpbWcgYWxpZ249InJpZ2h0IgogICAgIGFsdD0iU0ZQREUgLSBTb3VyY2VGb3JnZSBQbHVnLUluIERldmVsb3BtZW50IEVudmlyb25tZW50IgogICAgIHNyYz0iaW1hZ2VzL3NmcGRlLW1lZC5wbmciIHN0eWxlPSJtYXJnaW46IDVweDt3aWR0aDogMzYwcHg7IGhlaWdodDogMjY1cHg7IgogICAgIHRpdGxlPSJTRlBERSAtIFNvdXJjZUZvcmdlIFBsdWctSW4gRGV2ZWxvcG1lbnQgRW52aXJvbm1lbnQiLz48L2Rpdj4KCiAgICA8cD5UaGVyZSBhcmUgdG9vIG1hbnkgc2VydmljZXMgYXZhaWxhYmxlIHRvIGNvdmVyIGluIHRoaXMgYXJ0aWNsZSwKICAgIHNvIEkgcHJlc2VudCBvbmUgY29tbW9uIHNjZW5hcmlvICZtZGFzaDsgdGhlIGNyZWF0aW9uIG9mIGEgbmV3IHByb2plY3QKICAgICZtZGFzaDsgYW5kIEkgaW50cm9kdWNlIGZlYXR1cmVzIGFzIHRoZXkgY29tZSBpbnRvIHBsYXkgaW4gdGhlIGxpZmUKICAgIGN5Y2xlIG9mIGRldmVsb3BpbmcsIHB1Ymxpc2hpbmcsIGFuZCBzdXBwb3J0aW5nIGFuIG9wZW4gc291cmNlCiAgICBwbHVnLWluIGZvciBFY2xpcHNlLjwvcD4KCiAgICA8cD5Zb3Ugd2lsbCBzZWUgaG93IFNvdXJjZUZvcmdlIGV4dGVuZHMgdGhlIEVjbGlwc2UgUGx1Zy1pbgogICAgRGV2ZWxvcG1lbnQgRW52aXJvbm1lbnQgKFBERSkgdG8gY3JlYXRlIHdoYXQgSSByZWZlciB0byBhcyB0aGUKICAgIFNvdXJjZUZvcmdlIDxzdHJvbmc+UGx1Zy1pbiBEZXZlbG9wbWVudCBFbnZpcm9ubWVudDwvc3Ryb25nPgogICAgKFNGUERFKS4gRWNsaXBzZSBwcm92aWRlcyB0aGUgY29kaW5nLCB0ZXN0aW5nLCBkZWJ1Z2dpbmcsIGFuZAogICAgcGFja2FnaW5nIGFzcGVjdHMgb2YgUGx1Zy1pbiBkZXZlbG9wbWVudC4gVGhlIFNGUERFIGFkZHMgdGhlIHNvdXJjZQogICAgbWFuYWdlbWVudCwgZGlzdHJpYnV0aW9uLCBjb2xsYWJvcmF0aW9uLCBkaXNjb3ZlcnksIHdlYiBob3N0aW5nLAogICAgYW5kIHN1cHBvcnQgY2FwYWJpbGl0aWVzLiBUaGUgY29tYmluZWQgU0ZQREUgc2VydmljZXMgb2ZmZXIgYQogICAgY29tcHJlaGVuc2l2ZSBlbnZpcm9ubWVudCBmb3IgRWNsaXBzZSBwbHVnLWlucwogICAgZGV2ZWxvcG1lbnQuPC9wPgoKICAgIDxwPkkgd2lsbCB1c2UgYSBodW1ibGUgcGx1Zy1pbiB0aGF0IEkgd3JvdGUgYW5kIHJlbGVhc2VkIG9uCiAgICBTb3VyY2VGb3JnZSBhcyBhbiBleGFtcGxlICh0aGUKICAgIDxhIGhyZWY9Imh0dHA6Ly9lY2xpcHNlZXhlZGl0b3Iuc291cmNlZm9yZ2UubmV0LyI+RWNsaXBzZSBUZXh0CiAgICBFZGl0b3IgRXh0ZW5zaW9uczwvYT4gKSwgc28geW91IGNhbiByZWZlciB0byBhIGNvbmNyZXRlIHBsdWctaW4KICAgIHByb2plY3QuPC9wPgoKICAgIDxwPkZvciB0aGlzIGFydGljbGUsIEkgYXNzdW1lIHRoYXQgeW91IGFyZSBhbHJlYWR5IGZhbWlsaWFyIHdpdGgKICAgIHdyaXRpbmcgRWNsaXBzZSBwbHVnLWlucywgYW5kIHlvdSBoYXZlIGFuIGlkZWEgdGhhdCB3aWxsCiAgICByZXZvbHV0aW9uaXplIHRoZSBFY2xpcHNlIGNvbW11bml0eTogaWYgb25seSB5b3UgaGFkIGEgd2F5IHRvIHNoYXJlCiAgICBpdCBhcyBhbiBvcGVuIHNvdXJjZSBwcm9qZWN0ISBZb3UgaGF2ZSBzb21lIGNvZGUgdG8gY29tbWl0IHRvIENWUwogICAgYW5kIHdvdWxkIGxpa2UgdG8gYXR0cmFjdCBvbmUgb3IgdHdvIG9wZW4gc291cmNlIGNvbnRyaWJ1dG9ycwogICAgdG8gaGVscCB5b3UgcG9saXNoIGl0IG9mZi4gSSBhbHNvIGFzc3VtZSB5b3UgYXJlIGZhbWlsaWFyIHdpdGgKICAgIG1vc3Qgb2YgdGhlIGNvbmNlcHRzIG9mIG9wZW4gc291cmNlIHByb2plY3RzLCBpbmNsdWRpbmcgbGljZW5zZQogICAgbW9kZWxzLCBjb21tdW5pdHkgaW52b2x2ZW1lbnQsIHBhdGNoZXMgYW5kIGNvbnRyaWJ1dGlvbnMsIGV0Yy4gSWYKICAgIG5vdCwgdGhlcmUgYXJlIHJlc291cmNlcyBhdmFpbGFibGUgYXQgdGhlCiAgICA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnLyI+b3BlbiBzb3VyY2UgSW5pdGlhdGl2ZTwvYT4KICAgIChPU0kpLjwvcD4KCiAgICA8aDM+UGxhbm5pbmc8L2gzPgoKICAgIDxwPkFzIHdpdGggYW55IHNvZnR3YXJlIGVuZGVhdm9yLCBhIGxpdHRsZSBiaXQgb2YgcGxhbm5pbmcgd2lsbAogICAgcmVkdWNlIHlvdXIgbG9uZy10ZXJtIGZydXN0cmF0aW9uLiBXaXRoIGFuIG9wZW4gc291cmNlIHByb2plY3QsCiAgICB5b3UgcHJvYmFibHkgZG8gbm90IGhhdmUgYSBzb2Z0d2FyZSBtYW5hZ2VyIGFuZCBtYXJrZXRpbmcKICAgIGRlcGFydG1lbnQgcHVzaGluZyB5b3UgdG8gcmVsZWFzZSB0aGUgbmV3IHByb2R1Y3QsIHNvIHlvdSBtYXkKICAgIGFjdHVhbGx5IGhhdmUgdGltZSBmb3IgcGxhbm5pbmchPC9wPgoKICAgIDxwPlRoaXMgaXMgYW4gb3V0bGluZSBvZiBhbiBvcGVuIHNvdXJjZSBwcm9qZWN0J3MgbGlmZWN5Y2xlCiAgICB3aXRoaW4gdGhlIFNGUERFOjwvcD4KCiAgICA8b2w+CgogICAgICA8bGk+VW5kZXJzdGFuZGluZyB0aGUgU291cmNlRm9yZ2Ugb3BlbiBzb3VyY2UgU29mdHdhcmUgbW9kZWw8L2xpPgoKICAgICAgPGxpPkhvdyB0byBzdHJ1Y3R1cmUgYSBTb3VyY2VGb3JnZSBwcm9qZWN0PC9saT4KCiAgICAgIDxsaT5OYW1pbmcgdGhlIHByb2plY3Q8L2xpPgoKICAgICAgPGxpPk5hbWluZyB0aGUgSmF2YSBwYWNrYWdlPC9saT4KCiAgICAgIDxsaT5DaG9vc2luZyBhIGxpY2Vuc2U8L2xpPgoKICAgICAgPGxpPlJlZ2lzdGVyaW5nIG9uIFNvdXJjZUZvcmdlPC9saT4KCiAgICAgIDxsaT5Ucm92ZSBjbGFzc2lmaWNhdGlvbjwvbGk+CgogICAgICA8bGk+VXNpbmcgU291cmNlRm9yZ2UncyBDVlMgc2VydmVyIGZvciBFY2xpcHNlIHByb2plY3RzPC9saT4KCiAgICAgIDxsaT5TZWN1cmUgc2VydmljZXM6IHByaXZhdGUgYW5kIHB1YmxpYyBrZXlzIGFuZCBTU0g8L2xpPgoKICAgICAgPGxpPk1ha2luZyBhIHNvZnR3YXJlIHJlbGVhc2U8L2xpPgoKICAgICAgPGxpPkJ1aWxkaW5nIGEgd2ViIHNpdGU8L2xpPgoKICAgICAgPGxpPkhvc3RpbmcgYW4gdXBkYXRlIHNpdGU8L2xpPgoKICAgICAgPGxpPlJlZ2lzdGVyaW5nIHdpdGggYSBwbHVnLWluIHByb21vdGlvbiBzaXRlPC9saT4KCiAgICA8L29sPgoKICAgIDxoMz5QbHVnZ2luZyBJbjwvaDM+CgogICAgPGg0PlVuZGVyc3RhbmRpbmcgdGhlIFNvdXJjZUZvcmdlIG9wZW4gc291cmNlIFNvZnR3YXJlIG1vZGVsPC9oND4KCiAgICA8cD5CZWZvcmUgeW91IGJlZ2luIGFuIG9wZW4gc291cmNlIHByb2plY3Qgb24gU291cmNlRm9yZ2UsIGJlIHN1cmUKICAgIHlvdSB1bmRlcnN0YW5kIHRoZSBTb3VyY2VGb3JnZSBkZWZpbml0aW9uIG9mIG9wZW4gc291cmNlIGFuZCBpdHMKICAgIHJlcXVpcmVtZW50cyBmb3IgaG9zdGVkIHByb2plY3RzLiBZb3Ugc2hvdWxkIHJlYWQgYW5kIGdyb2sgdGhlCiAgICBTb3VyY2VGb3JnZQogICAgPGEgaHJlZj0iaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9kb2NtYW4vZGlzcGxheV9kb2MucGhwP2RvY2lkPTYwNDgmYW1wO2dyb3VwX2lkPTEiCiAgICA+VGVybXMgb2YgVXNlPC9hPiAsIGFuZCBiZSBmdWxseSBjb21mb3J0YWJsZSB3aXRoIHRoZSByZXF1aXJlbWVudHMKICAgIG91dGxpbmVkIHRoZXJlLiBTb3VyY2VGb3JnZSB1c2VycyBhc3N1bWUgY2VydGFpbiBhc3BlY3RzCiAgIG9mIG9wZW4gc291cmNlIHByb2plY3RzLCBzbyBiZSBzdXJlIHlvdSBrbm93IHdoYXQgdGhlIG9wZW4gc291cmNlIGFuZAogICBTb3VyY2VGb3JnZSBjb21tdW5pdGllcyB3aWxsIGV4cGVjdCBvZiB5b3UuPC9wPgoKICAgIDxoND5Ib3cgdG8gc3RydWN0dXJlIGEgU291cmNlRm9yZ2UgcHJvamVjdDwvaDQ+CgogICAgPHA+VGhlIG5leHQgc3RlcCBpbiB0aGUgcGxhbm5pbmcgcHJvY2VzcyBpcyB0byBnZXQgeW91ciBwcm9qZWN0IGluCiAgICBvcmRlciBiZWZvcmUgc2hpcHBpbmcgaXQgdXAgdG8gU291cmNlRm9yZ2UuIEkgaGF2ZSBmb3VuZCB0aGF0IGl0CiAgICBpcyBjb252ZW5pZW50IHRvIGNyZWF0ZSBmb3VyIHNlcGFyYXRlIEVjbGlwc2UgcHJvamVjdHMuIEJlbG93IGlzCiAgICB0aGUgbGF5b3V0IG9mIG15IHByb2plY3RzIGZvciBteSBzYW1wbGUgcGx1Zy1pbi4gSSBuYW1lZCB0aGUKICAgIHByb2plY3QgYmFzZWQgb24gdGhlIHJvb3QgSmF2YSBwYWNrYWdlLCBuZXQuc2YuZWNsaXBzZWV4ZWRpdG9yCiAgICAoZGVzY3JpYmVkIGJlbG93KS48L3A+CgogICAgPHRhYmxlIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIiBzdHlsZT0idGV4dC1hbGlnbjogbGVmdDsgd2lkdGg6IDYwMHB4OyI+CgogICAgICA8dGJvZHk+CgogICAgICAgIDx0cj4KCiAgICAgICAgICA8dGg+RWNsaXBzZSBQcm9qZWN0IERlc2NyaXB0aW9uPC90aD4KCiAgICAgICAgICA8dGg+RXhhbXBsZTwvdGg+CgogICAgICAgIDwvdHI+CgogICAgICAgIDx0cj4KCiAgICAgICAgICA8dGQ+WW91ciBwbHVnLWluLCBhcyBhbiBFY2xpcHNlIFBERSBwcm9qZWN0LjwvdGQ+CgogICAgICAgICAgPHRkPm5ldC5zZi5lY2xpcHNlZXhlZGl0b3I8L3RkPgoKICAgICAgICA8L3RyPgoKICAgICAgICA8dHI+CgogICAgICAgICAgPHRkPllvdXIgUGx1Zy1JbiBGZWF0dXJlLCBjcmVhdGVkIGZyb20gdGhlIEVjbGlwc2UgZmVhdHVyZQogICAgICAgICAgd2l6YXJkLjwvdGQ+CgogICAgICAgICAgPHRkPm5ldC5zZi5lY2xpcHNlZXhlZGl0b3ItZmVhdHVyZTwvdGQ+CgogICAgICAgIDwvdHI+CgogICAgICAgIDx0cj4KCiAgICAgICAgICA8dGQ+WW91ciB1cGRhdGUgc2l0ZSwgY3JlYXRlZCBmcm9tIHRoZSBFY2xpcHNlIHVwZGF0ZSBzaXRlCiAgICAgICAgICB3aXphcmQuPC90ZD4KCiAgICAgICAgICA8dGQ+bmV0LnNmLmVjbGlwc2VleGVkaXRvci11cGRhdGUtc2l0ZTwvdGQ+CgogICAgICAgIDwvdHI+CgogICAgICAgIDx0cj4KCiAgICAgICAgICA8dGQ+WW91ciB3ZWIgc2l0ZSwgeW91ciBwdWJsaWMgZG9jdW1lbnRhdGlvbi48L3RkPgoKICAgICAgICAgIDx0ZD5uZXQuc2YuZWNsaXBzZWV4ZWRpdG9yLXdlYi1zaXRlPC90ZD4KCiAgICAgICAgPC90cj4KCiAgICAgIDwvdGJvZHk+CgogICAgPC90YWJsZT4KCiAgICA8cD5Tb21lIHByb2plY3RzIG1heSBoYXZlIHNldmVyYWwgcGx1Zy1pbnMsIGVhY2ggd2l0aCBpdHMgb3duIFBERQogICAgcHJvamVjdC4gRm9yIGV4YW1wbGUsIHNvbGFyZWNsaXBzZSBoYXMgdGhlIGZvbGxvd2luZyBwcm9qZWN0L2ZpbGUKICAgIHN0cnVjdHVyZTo8L3A+CgogICAgPHVsPgoKICAgICAgPGxpPm5ldC5zZi5zb2xhcmVjbGlwc2UtZmVhdHVyZTwvbGk+CgogICAgICA8bGk+bmV0LnNmLnNvbGFyZWNsaXBzZS1ob21lPC9saT4KCiAgICAgIDxsaT5uZXQuc2Yuc29sYXJlY2xpcHNlLmpzcC51aTwvbGk+CgogICAgICA8bGk+bmV0LnNmLnNvbGFyZWNsaXBzZS51aTwvbGk+CgogICAgICA8bGk+bmV0LnNmLnNvbGFyZWNsaXBzZS54bWwuY29yZTwvbGk+CgogICAgICA8bGk+bmV0LnNmLnNvbGFyZWNsaXBzZS54bWwudWk8L2xpPgoKICAgICAgPGxpPm5ldC5zZi5zb2xhcmVjbGlwc2UueHNsdC5kZWJ1Zy5jb3JlPC9saT4KCiAgICAgIDxsaT5uZXQuc2Yuc29sYXJlY2xpcHNlLnhzbHQuZGVidWcudWk8L2xpPgoKICAgICAgPGxpPm5ldC5zb3VyY2Vmb3JnZS5zb2xhcmVjbGlwc2Uud2ViLnVpPC9saT4KCiAgICAgIDxsaT5uZXQuc291cmNlZm9yZ2Uuc29sYXJlY2xpcHNlLnhtbC5jb3JlPC9saT4KCiAgICA8L3VsPgoKICAgIDxwPkJlIHN1cmUgdG8gcmV2aWV3IHlvdXIgcHJvamVjdCdzIG5hbWVzIGJlZm9yZSBjb21taXR0aW5nIHRvCiAgICBDVlM6IHRoZSBwcm9qZWN0IG5hbWUgd2lsbCBiZWNvbWUgdGhlIENWUyBtb2R1bGUgbmFtZS4gVGhlCiAgICBzb2xhcmVjbGlwc2UgcHJvamVjdCdzCiAgICA8YSBocmVmPSJodHRwOi8vY3ZzLnNvdXJjZWZvcmdlLm5ldC92aWV3Y3ZzLnB5L3NvbGFyZWNsaXBzZS8iPgogICAgQ1ZTPC9hPiB0cmVlIGhhcyBhcHBhcmVudGx5IG9ic29sZXRlIG1vZHVsZXMgbmFtZWQKICAgIDxjb2RlPm9yZy5zb3VyY2Vmb3JnZS5zb2xhcmVjbGlwc2Uud2ViLnVpPC9jb2RlPiBhbmQgYSBtaXNzcGVsbGVkCiAgICA8Y29kZT5uZXQuY291cmNlZm9yZ2Uuc29sYXJlY2xpcHNlLndlYi51aTwvY29kZT4gbW9kdWxlLjwvcD4KCiAgICA8cD5Zb3UgbWF5IGFsc28gZmluZCBpdCBjb252ZW5pZW50IHRvIGRlZmluZQogICAgPGEgaHJlZj0iaW1hZ2VzL3dvcmtpbmctc2V0LnBuZyI+YW4gRWNsaXBzZSBXb3JraW5nIFNldDwvYT4gdGhhdAogICAgY29udGFpbnMgYWxsIHlvdXIgcHJvamVjdHMuIFRoaXMgY2FuIGhlbHAgd2l0aCByZXN0cmljdGVkIGZpbGUKICAgIHNlYXJjaGVzIGluIEVjbGlwc2UsIGkuZS4gdGV4dC9maWxlIHNlYXJjaGVzIGZvciBjbGFzc2VzIG9yIHBhY2thZ2UKICAgIG5hbWVzIGluIHBsdWdpbi54bWwgb3Igd2ViIHNpdGUgY29udGVudCwgaW4gY2FzZSB5b3UgbmVlZCB0byByZW5hbWUKICAgIGNsYXNzZXMgb3IgcGFja2FnZXMuIE5vdGUgdGhhdCB5b3UgY2FuIGhvc3QgPHN0cm9uZz5hbGw8L3N0cm9uZz4KICAgIHlvdXIgcmVsYXRlZCBFY2xpcHNlIFBERSBwcm9qZWN0cyB3aXRoaW4gYSBzaW5nbGUgU0ZQREUgcHJvamVjdAogICAgc3BhY2UuPC9wPgoKICAgIDxoND5OYW1pbmcgdGhlIHByb2plY3Q8L2g0PgoKICAgIDxwPlBhdHRlcm5zLCBwYWNrYWdlcywgcHJvamVjdHMgaGF2ZSBtb3JlIGluIGNvbW1vbiB0aGFuIHRoZWlyCiAgICBmaXJzdCBsZXR0ZXIuIEluIGFsbCBjYXNlcywgYSBnb29kIG5hbWUgY2Fubm90IGJlIGJlYXQuIFNhZGx5LAogICAgbXkgcHJvamVjdCBuYW1lIChlY2xpcHNlZXhlZGl0b3IpIGlzIG5vdCBhIGdvb2QgZXhhbXBsZS4gSXQgd2FzCiAgICBvbmx5IGFmdGVyIEkgaGFkIGNyZWF0ZWQgbXkgU291cmNlRm9yZ2UgcHJvamVjdCBhbmQgd29ya2VkIG9uIGl0CiAgICBzaWduaWZpY2FudGx5IHRoYXQgSSByZWFsaXplZCB0aGF0IEVURUUgJm1kYXNoOyBhbiBhY3JvbnltIGZvcgogICAgRWNsaXBzZSBUZXh0IEVkaXRvciBFeHRlbnNpb25zICZtZGFzaDsgd291bGQgaGF2ZSBiZWVuIGEgYmV0dGVyCiAgICBjaG9pY2UuPC9wPgoKICAgIDxwPllvdXIgU291cmNlRm9yZ2UgcHJvamVjdCBuYW1lIHdpbGwgYmUgdXNlZCBldmVyeXdoZXJlIGluCiAgICBTb3VyY2VGb3JnZTogaW4gdGhlIFVuaXggZmlsZSBzeXN0ZW0gYXMgdGhlIGRpcmVjdG9yeSBuYW1lLCBhcyBhCiAgICBDVlMgcm9vdCwgYXMgYSBjb21wb25lbnQgb2YgYSBkb21haW4gbmFtZS9VUkwgJm1kYXNoOwogICAgPGEgaHJlZj0iaHR0cDovL2VjbGlwc2VleGVkaXRvci5zZi5uZXQiPgogICAgaHR0cDovL2VjbGlwc2VleGVkaXRvci5zZi5uZXQ8L2E+LCBpbiB5b3VyIHByb2plY3QncyBzdW1tYXJ5CiAgICBwYWdlIHVybCAmbWRhc2g7IDxhIGhyZWY9Imh0dHA6Ly9zZi5uZXQvcHJvamVjdHMvZWNsaXBzZWV4ZWRpdG9yIj4KICAgIGh0dHA6Ly9zZi5uZXQvcHJvamVjdHMvZWNsaXBzZWV4ZWRpdG9yPC9hPiAsIGluIE1haWxtYW4gbWFpbGluZwogICAgbGlzdHMgbmFtZXMsIGV0Yy4gSW4gb3RoZXIgd29yZHMsIGNob29zZSBhIG5hbWUgdGhhdCBpcyBlYXN5IGZvcgogICAgeW91ciB1c2VycyB0byB1c2UgYW5kIHJlbWVtYmVyIGFuZCB0aGF0IHN0aWxsIGNvbnZleXMgdGhlIHB1cnBvc2UKICAgIG9mIHlvdXIgcHJvamVjdC4gU291cmNlRm9yZ2UgZG9lcyBub3Qgc3VwcG9ydCByZW5hbWluZyBwcm9qZWN0cwogICAgYWZ0ZXIgdGhlaXIgY3JlYXRpb24uPC9wPgoKICAgIDxwPkhlcmUgYXJlIHRoZSBTb3VyY2VGb3JnZSBydWxlcyBmb3IgYSBwcm9qZWN0IG5hbWU6PC9wPgoKICAgIDx1bD4KCiAgICAgIDxsaT5JdCBtdXN0IGJlZ2luIHdpdGggYSBsZXR0ZXI8L2xpPgoKICAgICAgPGxpPkl0IG11c3QgYmUgYmV0d2VlbiAzIGFuZCAxNSBjaGFyYWN0ZXJzIGluIGxlbmd0aDwvbGk+CgogICAgICA8bGk+SXQgY2FuIG9ubHkgY29udGFpbiBvbmx5IGxvd2VyY2FzZSBsZXR0ZXJzIChhLXopLCBudW1iZXJzCiAgICAgICgwLTkpLCBhbmQgZGFzaGVzICgmcXVvdDstJnF1b3Q7KSBvciB1bmRlcnNjb3JlcwogICAgICAoJnF1b3Q7XyZxdW90Oyk8L2xpPgoKICAgICAgPGxpPkl0IGNhbm5vdCBtYXRjaCB0aGUgbmFtZSBvZiBhbnkgb3RoZXIgcHJvamVjdCBvciBvbmUgb2YKICAgICAgU291cmNlRm9yZ2UncyByZXNlcnZlZCBuYW1lczwvbGk+CgogICAgPC91bD4KCiAgICA8cD5PbmNlIGFnYWluLCByZW1lbWJlciB0aGF0IHlvdSBjYW5ub3QgY2hhbmdlIHRoZSBwcm9qZWN0IG5hbWUgYWZ0ZXIgaXRzIGNyZWF0aW9uLi4uIHNvCiAgICAgYmUgc3VyZSB5b3UgYXJlIGhhcHB5IHdpdGggdGhlIG5hbWUhPC9wPgoKICAgIDxoND5OYW1pbmcgdGhlIEphdmEgcGFja2FnZTwvaDQ+CgogICAgPHA+U2luY2Ugd2UgYXJlIHRhbGtpbmcgbmFtaW5nLCBpdCBpcyBhIGdvb2QgaWRlYSB0bwogICAgY29uc2lkZXIgY2FyZWZ1bGx5IHRoZSBKYXZhIHBhY2thZ2VzIG5hbWVzIGZvciB5b3VyIHBsdWctaW5zLiCgIElmIHlvdSBhcmUKICAgIHBhcnQgb2YgYSBjb21tZXJjaWFsIG9yZ2FuaXphdGlvbiBvciBvcmcgc2l0ZSB0aGF0IGlzIHNwb25zb3JpbmcKICAgIHRoZSBwbHVnLWluIGRldmVsb3BtZW50LCB5b3UgbWF5IHdpc2ggdG8gcmVsZWFzZSB0aGUgcGx1Zy1pbiBhcyBhCiAgICBzcGVjaWZpYyBwYWNrYWdlIHdpdGhpbiB0aGF0IG5hbWUgc3BhY2UsIHN1Y2ggYXMgdGhlIHZlbG9lZGl0CiAgICBWZWxvY2l0eSBlZGl0b3I6IDxhIGhyZWY9Imh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvdmVsb2VkaXQvIgogICAgPjxjb2RlPm9yZy52YXVsdHRlYy52ZWxvY2l0eS51aTwvY29kZT48L2E+IC4gUHJlc3VtYWJseSwgb25lIHNob3VsZAogICAgbm90IHVzZSA8Y29kZT5vcmcuZWNsaXBzZTwvY29kZT4gYXMgYSBiYXNlIHBhY2thZ2UgbmFtZSwgYXMgdGhhdAogICAgbmFtZSBzcGFjZSBpcyByZXNlcnZlZCBmb3Igb2ZmaWNpYWwgRWNsaXBzZSBwcm9qZWN0cyBhdAogICAgd3d3LmVjbGlwc2Uub3JnLiBJIGNob3NlIHRoZSBwYXR0ZXJuIG9mIDxjb2RlPm5ldC5zZi48L2NvZGU+ICsKICAgIDxpPjxjb2RlPnByb2plY3RuYW1lPC9jb2RlPjwvaT4gKGkuZS4KICAgIDxjb2RlPm5ldC5zZi5lY2xpcHNlZXhlZGl0b3I8L2NvZGU+ICkgb3ZlciBzb21ldGhpbmcgbGlrZQogICAgPGNvZGU+b3JnLmJpZXNhY2s8L2NvZGU+IHNvIHRoYXQgdGhlIGNvZGUgYmFzZSB3aWxsIGZlZWwgbW9yZQogICAgJnF1b3Q7b3BlbiZxdW90OyB0byBvdGhlciBjb250cmlidXRvcnMuIEFmdGVyIGFsbCwgYSBrZXkgYXNwZWN0IG9mCiAgICBhbiBvcGVuIHNvdXJjZSBwcm9qZWN0IGlzIHRoYXQgcG90ZW50aWFsIGNvbGxhYm9yYXRvcnMgZmVlbAogICAgd2VsY29tZS48L3A+CgogICAgPHA+T3RoZXIgcHJvamVjdHMgb24gU291cmNlRm9yZ2UgaGF2ZSBmb2xsb3dlZCB0aGlzIGV4YW1wbGUsIHN1Y2gKICAgIGFzIDxhIGhyZWY9Imh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvc29sYXJlY2xpcHNlLyI+CiAgICBuZXQuc2Yuc29sYXJlY2xpcHNlPC9hPiBhbmQKICAgIDxhIGhyZWY9Imh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvbHVuYXItZWNsaXBzZS8iPgogICAgbmV0LnNmLmx1bmFyX2VjbGlwc2U8L2E+IC4gTm90ZSB0aGF0IGlmIHlvdSB3aXNoIHRvIGZvbGxvdyB0aGlzCiAgICBwYXR0ZXJuLCB5b3Ugc2hvdWxkIGF2b2lkIHVzaW5nIGEgZGFzaCBpbiB5b3VyIHByb2plY3QgbmFtZSwgd2hpY2gKICAgIGlzIGlsbGVnYWwgaW4gSmF2YS4gVGhlIGJpZ2dlc3QgcmVhc29uIHRvIHVzZSB0aGlzIGZvcm1hdCBpcyB0aGF0CiAgICBpdCBmb2xsb3dzCiAgICA8YSBocmVmPSJodHRwOi8vamF2YS5zdW4uY29tL2RvY3MvYm9va3MvamxzL3NlY29uZF9lZGl0aW9uL2h0bWwvcGFja2FnZXMuZG9jLmh0bWwjNDAxNjkiCiAgICA+U3VuJ3MgcmVjb21tZW5kZWQgcGFja2FnZSBuYW1pbmcgY29udmVudGlvbjwvYT4gb2YgcmV2ZXJzaW5nCiAgICB0aGUgZG9tYWluIG5hbWUuIFNpbmNlIHlvdXIgZG9tYWluIG5hbWUgd2lsbCBiZQogICAgPGNvZGU+PGk+cHJvamVjdG5hbWU8L2k+LnNvdXJjZWZvcmdlLm5ldDwvY29kZT4gb3IKICAgIDxjb2RlPjxpPnByb2plY3RuYW1lPC9pPi5zZi5uZXQ8L2NvZGU+ICwgdGhpcyBsZWFkcyB0byBhIEphdmEKICAgIHBhY2thZ2UgbmFtZSBzcGFjZSBvZiA8Y29kZT5uZXQuc2YuPGk+cHJvamVjdG5hbWU8L2k+PC9jb2RlPi4gT3RoZXIKICAgIHByb2plY3RzIGRvIG5vdCBmb2xsb3cgU3VuJ3MgcmVjb21tZW5kYXRpb25zLiBGb3IKICAgIGV4YW1wbGUsIDxhIGhyZWY9Imh0dHA6Ly9zZnV0aWxzLnNvdXJjZWZvcmdlLm5ldC8iPnNmdXRpbHM8L2E+IGhhcwogICAgcGFja2FnZXMgbGlrZSA8Y29kZT5zZnV0aWxzLmZyczwvY29kZT4gd2l0aCBubyA8Y29kZT5uZXQ8L2NvZGU+CiAgICBvciA8Y29kZT5vcmc8L2NvZGU+IG9yIDxjb2RlPmNvbTwvY29kZT4gcHJlZml4LjwvcD4KCiAgICA8aDQ+Q2hvb3NpbmcgYSBsaWNlbnNlPC9oND4KCiAgICA8cD5Tb3VyY2VGb3JnZSBoYXMgYSB3ZWxsLWRlZmluZWQgc3BlY2lmaWNhdGlvbgogICAgZm9yIG9wZW4gc291cmNlIHByb2plY3RzLCBpbmNsdWRpbmcgYSBsaWNlbnNlLiBTb3VyY2VGb3JnZSByZXF1aXJlcwogICAgdGhhdCB5b3UgdXNlIGVpdGhlciBhbiBhcHByb3ZlZCBhbiBhcHByb3ZlZCBvcGVuIHNvdXJjZSBpbml0aWF0aXZlCiAgICBsaWNlbnNlLCBvciBhIGxpY2Vuc2UgdGhhdCBjb21wbGllcyB3aXRoIHRoZQogICAgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9kb2NzL2RlZmluaXRpb24ucGhwIj5vcGVuIHNvdXJjZSBkZWZpbml0aW9uPC9hPi4gU2VlIHRoZQogICAgPGEgaHJlZj0iaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9kb2NtYW4vZGlzcGxheV9kb2MucGhwP2RvY2lkPTc3OCZhbXA7Z3JvdXBfaWQ9MSIKICAgID5CNi4gb3BlbiBzb3VyY2UgbGljZW5zZSBvdmVydmlldzwvYT4gZm9yIG1vcmUgZGV0YWlsczogJnF1b3Q7PGNpdGU+SXQgaXMgdml0YWwgdGhhdCB5b3UgcmVhZCBhbmQKICAgIHVuZGVyc3RhbmQgYWxsIG9mIHRoZSB0ZXJtcyBvZiBhIGxpY2Vuc2UsIGFuZCB2ZXJpZnkgdGhhdCBpdCBtZWV0cwogICAgdGhlIG5lZWRzIG9mIHlvdXIgcHJvamVjdCwgYmVmb3JlIGRlY2lkaW5nIHRvIHVzZSB0aGF0IGxpY2Vuc2U7CiAgICB0aGlzIHNob3VsZCBub3QgYmUgYSBkZWNpc2lvbiB0YWtlbiBsaWdodGx5LjwvY2l0ZT4gJnF1b3Q7PC9wPgoKICAgIDxwPlRoZSBsaWNlbnNlIHlvdSBzZWxlY3QgY2FuIGFsc28gaW5mbHVlbmNlCiAgICB5b3VyIGFiaWxpdHkgdG8gZHJhdyBjb250cmlidXRvcnMgdG8geW91ciBwbHVnLWluLiBJbiBhZGRpdGlvbiwgY2hhbmdpbmcgYSBsaWNlbnNlIGxhdGVyIG9mdGVuCiAgICBhbGllbmF0ZXMgeW91ciB1c2VyIGFuZCBjb250cmlidXRpbmcgZGV2ZWxvcGVycycgY29tbXVuaXR5LgogICAgRWNsaXBzZSBwbHVnLWluIGRldmVsb3BlcnMgbWF5IHdhbnQKICAgIHRvIGNvbnNpZGVyIHRoZQogICAgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9lY2xpcHNlLTEuMC5waHAiPgogICAgRWNsaXBzZSBQdWJsaWMgTGljZW5zZTwvYT4gKEVQTCksIGFuIDxhIGhyZWY9Imh0dHA6Ly9vcGVuc291cmNlLm9yZyIKICAgID5PU0kgYXBwcm92ZWQ8L2E+IGFuZCBTb3VyY2VGb3JnZSBhY2NlcHRhYmxlIGxpY2Vuc2UuIEJ5IGNob29zaW5nCiAgICBFUEwsIHlvdSB3aWxsIGJlIHVzaW5nIHRoZSBzYW1lIGxpY2Vuc2UgYXMgdGhlIEVjbGlwc2Uub3JnCiAgICBwcm9qZWN0cywgYW5kIHlvdXIgcGx1Zy1pbiBsaWNlbnNlIHdpbGwgYmUgY29tcGF0aWJsZSB3aXRoIGZ1dHVyZQogICAgRWNsaXBzZSBkZXZlbG9wbWVudHMuPC9wPgoKICAgIDxoND5SZWdpc3RlcmluZyBvbiBTb3VyY2VGb3JnZTwvaDQ+CgogICAgPHA+Tm93IHRoYXQgeW91IGhhdmUgc29tZSBvZiB0aGUgcGxhbm5pbmcgZG9uZSBhbmQgeW91ciBwbHVnLWluIGlzCiAgICBjb21wbGV0ZSBlbm91Z2ggZm9yIGFuIGluaXRpYWwgY29kZSBjb250cmlidXRpb24sIGl0IGlzIHRpbWUgdG8KICAgIHN0YXJ0IHlvdXIgcmVnaXN0cmF0aW9uIHByb2Nlc3MuIE5hdHVyYWxseSwgU291cmNlRm9yZ2UgaGFzIGFuCiAgICBvbi1saW5lIHdlYiBiYXNlZCByZWdpc3RyYXRpb24gcHJvY2VzcyB0aGF0IGd1aWRlcyB5b3UgdGhyb3VnaCB0aGUKICAgIGZvbGxvd2luZyBzdGVwczo8L3A+CgogICAgPG9sPgoKICAgICAgPGxpPkhvc3RpbmcgaW5mb3JtYXRpb248L2xpPgoKICAgICAgPGxpPlJlZ2lzdGVyaW5nIGEgcHJvamVjdDwvbGk+CgogICAgICA8bGk+VGVybXMgb2YgVXNlIEFncmVlbWVudDwvbGk+CgogICAgICA8bGk+SG9zdGluZyByZXF1aXJlbWVudHM8L2xpPgoKICAgICAgPGxpPlByb2plY3QgbGljZW5zZSBkZXRhaWxzPC9saT4KCiAgICAgIDxsaT5Qcm9qZWN0IGRlc2NyaXB0aW9uIGRldGFpbHM8L2xpPgoKICAgICAgPGxpPlByb2plY3QgbmFtZSBkZXRhaWxzPC9saT4KCiAgICAgIDxsaT5GaW5hbCByZXZpZXc8L2xpPgoKICAgICAgPGxpPlN1Ym1pc3Npb24gY29tcGxldGVkPC9saT4KCiAgICA8L29sPgoKICAgIDxwPlRoZXJlIGlzIHBsZW50eSBvZiBkb2N1bWVudGF0aW9uIGFuZCBoZWxwIGFsb25nIHRoZSB3YXkuIElmCiAgICB5b3UgaGF2ZSBkb25lIHRoZSBzdWdnZXN0ZWQgcGxhbm5pbmcsIHRoaXMgc2hvdWxkIG9ubHkgdGFrZSAxMCB0bwogICAgMTUgbWludXRlcy4gT25jZSB5b3VyIG5ldyBwcm9qZWN0IHN1Ym1pc3Npb24gaXMgY29tcGxldGUsIGl0IHdpbGwKICAgIHRha2UgYSBmZXcgZGF5cyBmb3IgdGhlIFNvdXJjZUZvcmdlIHN0YWZmIHRvIHByb2Nlc3MgdGhlIHJlcXVlc3QKICAgIGFuZCBjcmVhdGUgeW91ciBwcm9qZWN0LjwvcD4KCiAgICA8cD5Zb3Ugc3RhcnQgYnkgbG9nZ2luZyBpbnRvIFNvdXJjZUZvcmdlLiBJZiB5b3UgZG8gbm90IGFscmVhZHkKICAgIGhhdmUgYW4gYWNjb3VudCwgc2ltcGx5IGNsaWNrIG9uIHRoZSA8c3Ryb25nPgogICAgPGEgaHJlZj0iaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9hY2NvdW50L25ld3VzZXJfZW1haWx2ZXJpZnkucGhwIgogICAgPk5ldyBVc2VyIHZpYSBTU0w8L2E+PC9zdHJvbmc+IGxpbmsgb24gdGhlIGZyb250IHBhZ2UgYW5kIGVudGVyCiAgICB5b3VyIGVtYWlsIGFkZHJlc3MgYW5kIGEgY3JlYXRlIGEgcGFzc3dvcmQuIFNvdXJjZUZvcmdlIHdpbGwgc2VuZAogICAgYW4gZW1haWwgdG8gdGhlIGFkZHJlc3MgeW91IHN1cHBseSB0byBjb25maXJtIGl0IGlzIGEgdmFsaWQKICAgIGFkZHJlc3MuIChJZiB5b3UgaGF2ZSBzb21lIHNwYW0gZmlsdGVyaW5nIGVuYWJsZWQsIGNvbmZpZ3VyZSBpdCB0bwogICAgYWxsb3cgbWFpbCBmcm9tIHRoZSBkb21haW4gJnF1b3Q7c291cmNlZm9yZ2UubmV0JnF1b3Q7IGFuZCBhbnkKICAgIHN1YiBkb21haW5zKS4gWW91IG11c3QgdmlzaXQgdGhlIGNvbmZpcm1hdGlvbiBVUkwgaW4gdGhhdCBlbWFpbAogICAgbWVzc2FnZS4gQXQgdGhpcyBwb2ludCwgeW91IHdpbGwgYmUgYWJsZSB0byBjaG9vc2UgYW4gYWNjb3VudCB1c2VyCiAgICBuYW1lLjwvcD4KCiAgICA8cD5OZXh0LCBsb2cgaW4gdXNpbmcgeW91ciB1c2VyaWQgYW5kIHBhc3N3b3JkLCBhbmQgdGhlbiBjbGljayB0aGUKICAgIDxzdHJvbmc+PGEgaHJlZj0iaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9yZWdpc3Rlci8iPlJlZ2lzdGVyIE5ldwogICAgUHJvamVjdDwvYT48L3N0cm9uZz4gbGluayB0byBiZWdpbiB0aGUgcmVnaXN0cmF0aW9uIHByb2Nlc3MuIFJldmlldwogICAgdGhlIEhvc3RpbmcgaW5mb3JtYXRpb24gYW5kIHRoZSBUZXJtcyBvZiBVc2UgQWdyZWVtZW50IHRoYXQgeW91CiAgICBtdXN0IGFjY2VwdCBiZWZvcmUgcHJvY2VlZGluZy4gWW91IHdpbGwgbmVlZCB0byBzdXBwbHkgc29tZSBvZiB0aGUKICAgIGltcG9ydGFudCBpbmZvcm1hdGlvbiBkaXNjdXNzZWQgYWJvdmU6IHlvdXIgcHJvamVjdCBuYW1lLAogICAgbGljZW5zZSwgYSBzaG9ydCBwdWJsaWMgcHJvamVjdCBkZXNjcmlwdGlvbiwgYW5kIGEgbG9uZ2VyIHByb2plY3QKICAgIGp1c3RpZmljYXRpb24gdG8gaGVscCB0aGUgU291cmNlRm9yZ2UgYWRtaW5pc3RyYXRvcnMgdW5kZXJzdGFuZCBob3cKICAgIHlvdXIgcHJvamVjdCBhZGRzIHZhbHVlIG9yIGlzIGRpZmZlcmVudCBmcm9tIGV4aXN0aW5nIHNvbHV0aW9ucy48L3A+CgogICAgPHA+T25jZSB5b3UgY29tcGxldGUgeW91ciByZWdpc3RyYXRpb24sIHlvdSBtdXN0IHdhaXQgYSBmZXcgZGF5cwogICAgZm9yIHRoZSBTb3VyY2VGb3JnZSBhZG1pbmlzdHJhdG9ycyB0byByZXZpZXcgeW91ciByZXF1ZXN0IGFuZCBzZXQKICAgIHVwIHRoZSBpbmZyYXN0cnVjdHVyZS4gWW91IHNob3VsZCByZWNlaXZlIGFuIGVtYWlsIHJlc3BvbnNlCiAgICBpbmZvcm1pbmcgeW91IG9mIHRoZSBwcm9qZWN0J3MgY3JlYXRpb24gd2hlbiBpdCBpcyByZWFkeS4gWW91CiAgICBjYW4gY2hlY2sgdGhlIHN0YXR1cyBvZiBhbnkgb2YgeW91ciBwcm9qZWN0IHJlcXVlc3RzIGJ5IHZpc2l0aW5nCiAgICB5b3VyIFNvdXJjZUZvcmdlIGhvbWUgcGFnZToKICAgIDxjb2RlPmh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvdXNlcnMvPGk+eW91ci11c2VyaWQ8L2k+LzwvY29kZT4gLgogICAgVGhlcmUsIHlvdSBjYW4gdmlldyBhbGwgb2YgeW91ciBTb3VyY2VGb3JnZSBwcm9qZWN0cy4gQWxzbywgb24gdGhlCiAgICAnPGEgaHJlZj0iaHR0cHM6Ly9zb3VyY2Vmb3JnZS5uZXQvbXkvbXlwcm9qZWN0cy5waHAiPm15CiAgICBwcm9qZWN0czwvYT4nIHBhZ2UgeW91IGNhbiBzZWUgYWxsIHlvdXIgcHJvamVjdHMgcmVnYXJkbGVzcyBvZgogICAgdGhlaXIgYXBwcm92YWwgc3RhdHVzLjwvcD4KCiAgICA8cD5XaGVuIGFjY2VwdGVkLCB5b3VyIHByb2plY3Qgd2lsbCBhbHNvIHJlY2VpdmUgYSB1bmlxdWUgbnVtZXJpYwogICAgaWRlbnRpZmllciwgY2FsbGVkIGEgPGk+Z3JvdXAgaWQ8L2k+LCB1c2VkIHRvIGFjY2VzcyBzb21lIHByb2plY3QKICAgIHJlc291cmNlcyBvbiBTb3VyY2VGb3JnZSBpbnN0ZWFkIG9mIHRoZSBVbml4IHByb2plY3QKICAgIG5hbWUuPC9wPgoKICAgIDxwPk9uY2UgeW91ciBwcm9qZWN0IGlzIGNyZWF0ZWQsIHRoZSBuZXh0IHN0ZXAgaXMgdG8gdmVyaWZ5IHlvdXIKICAgIHByb2plY3QncyBwdWJsaWMgaW5mb3JtYXRpb24gaW4gdGhlIFB1YmxpYyBJbmZvIHNlY3Rpb24sIGFuZAogICAgdG8gY2xhc3NpZnkgeW91ciBwcm9qZWN0IGluIHRoZSA8YT5Ucm92ZSBTb2Z0d2FyZSBNYXA8L2E+LjwvcD4KCiAgICA8aDQ+VW5kZXJzdGFuZGluZyB0aGUgVHJvdmUgQ2xhc3NpZmljYXRpb248L2g0PgoKICAgIDxwPlRoZSBUcm92ZSAmbWRhc2g7IG9yIDxhIGhyZWY9Imh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvc29mdHdhcmVtYXAvIj4KICAgIHNvZnR3YXJlIG1hcDwvYT4gJm1kYXNoOyBpcyBhIHNvZnR3YXJlIGNhdGVnb3JpemF0aW9uIGFuZCBjbGFzc2lmaWNhdGlvbgogICAgc3lzdGVtIHRvIG9yZ2FuaXplIGFsbCBTb3VyY2VGb3JnZSBwcm9qZWN0cy4gVGhlIHNvZnR3YXJlIG1hcCBpcwogICAgb25lIG9mIHRoZSBrZXkgbGlua3Mgb24gdGhlIFNvdXJjZUZvcmdlIGZyb250IHBhZ2UuIFRvZ2V0aGVyIHdpdGgKICAgIHlvdXIga2V5d29yZHMgYW5kIGRlc2NyaXB0aW9uLCB0aGUgVHJvdmUgbWFrZXMgeW91cgogICAgcGx1Zy1pbiBlYXNpZXIgdG8gZmluZC48L3A+CgogICAgPHA+VW5mb3J0dW5hdGVseSwgdGhlIFRyb3ZlIG9yZ2FuaXphdGlvbiBkb2VzIG5vdCBhbHdheXMgZml0CiAgICBldmVyeW9uZSdzIG1vZGVsLiBGb3IgZXhhbXBsZSwgYWx0aG91Z2ggdGhlcmUgaXMgYSB0b3AtbGV2ZWwKICAgIGNhdGVnb3J5IGZvcgogICAgPGEgaHJlZj0iaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9zb2Z0d2FyZW1hcC90cm92ZV9saXN0LnBocD9mb3JtX2NhdD00NSIKICAgID5Tb2Z0d2FyZSBEZXZlbG9wbWVudDwvYT4gLCB0aGUgdG9waWMKICAgIDxhIGhyZWY9Imh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvc29mdHdhcmVtYXAvdHJvdmVfbGlzdC5waHA/Zm9ybV9jYXQ9NjUiCiAgICA+SW50ZWdyYXRlZCBEZXZlbG9wbWVudCBFbnZpcm9ubWVudHMgKElERSk8L2E+ICZtZGFzaDsgYSBnb29kIGxvY2F0aW9uCiAgICBmb3IgbWFueSBFY2xpcHNlIHBsdWctaW5zICZtZGFzaDsgaXMgaW5zdGVhZCB1bmRlciB0aGUgbWFpbiB0b3BpYwogICAgPGEgaHJlZj0iaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9zb2Z0d2FyZW1hcC90cm92ZV9saXN0LnBocD9mb3JtX2NhdD02MyIKICAgID5UZXh0IEVkaXRvcnM8L2E+LiCgIEkgcmVjb21tZW5kIHBsYWNpbmcgRWNsaXBzZSBwbHVnLWlucyB0aGF0CiAgICBhcmUgdW4tcmVsYXRlZCB0byBTb2Z0d2FyZSBEZXZlbG9wbWVudCAmbWRhc2g7IHN1Y2ggYXMgdGhlCiAgICA8YSBocmVmPSJodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL21vcnBoaW5lLyI+RWNsaXBzZSBSU1MKICAgIFJlYWRlcjwvYT4gJm1kYXNoOyBpbiBUcm92ZSBjYXRlZ29yaWVzIHRoYXQgcmVmbGVjdAogICAgdGhlaXIgdXNlLCBub3QgdGhlaXIgaW1wbGVtZW50YXRpb24gdGVjaG5vbG9neS48L3A+CgogICAgPHA+VXNpbmcgdGhlIHNvZnR3YXJlIG1hcCwgeW91IHdpbGwgaGF2ZSB0aGUgb3Bwb3J0dW5pdHkgdG8gc2VsZWN0CiAgICBvbmUgdG8gc2l4LCBhbmQgc29tZXRpbWVzIG1vcmUsIHByb2plY3QgdmFsdWVzIGluIGVhY2ggb2Ygc2V2ZXJhbAogICAgY2F0ZWdvcmllczogVG9waWMsIE9wZXJhdGluZyBTeXN0ZW0sIFByb2dyYW1taW5nIExhbmd1YWdlLCBMaWNlbnNlLAogICAgSW50ZW5kZWQgQXVkaWVuY2UsIFVzZXIgSW50ZXJmYWNlLCBUcmFuc2xhdGlvbnMsIERhdGFiYXNlCiAgICBFbnZpcm9ubWVudCwgYW5kIERldmVsb3BtZW50IFN0YXR1cyAuIEVjbGlwc2UgcGx1Zy1pbiB3cml0ZXJzCiAgICBzaG91bGQgaW5jbHVkZQogICAgPGEgaHJlZj0iaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9zb2Z0d2FyZW1hcC90cm92ZV9saXN0LnBocD9mb3JtX2NhdD01ODMiCiAgICA+PHN0cm9uZz5Vc2VyIEludGVyZmFjZSA6OiBQbHVnaW5zIDo6IEVjbGlwc2U8L3N0cm9uZz48L2E+IGluIHRoZQogICAgc2V0IG9mIFVzZXIgSW50ZXJmYWNlIHZhbHVlcywgYW5kIHVuZGVyIE9wZXJhdGluZyBTeXN0ZW1zLCB5b3UgbWF5CiAgICB3YW50IHRvIGNob29zZQogICAgPGEgaHJlZj0iaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9zb2Z0d2FyZW1hcC90cm92ZV9saXN0LnBocD9mb3JtX2NhdD0yMzUiCiAgICA+PHN0cm9uZz5TeXN0ZW0gOjogR3JvdXBpbmcgYW5kIERlc2NyaXB0aXZlIENhdGVnb3JpZXMgOjogT1MKICAgIFBvcnRhYmxlIChTb3VyY2UgY29kZSB0byB3b3JrIHdpdGggbWFueSBPUyBwbGF0Zm9ybXMpPC9zdHJvbmc+PC9hPgogICAgLiBZb3UgY2FuIGFsc28gdXNlIHRoZQogICAgPGEgaHJlZj0iaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9zb2Z0d2FyZW1hcC90cm92ZV9saXN0LnBocD9mb3JtX2NhdD00NzIiCiAgICA+PHN0cm9uZz5Vc2VyIEludGVyZmFjZSA6OiBHcmFwaGljYWwgOjogSmF2YSBTV1Q8L3N0cm9uZz48L2E+CiAgICBjYXRlZ29yeS48L3A+CgogICAgPHA+UmV2aWV3IGNhcmVmdWxseSBhbGwgdGhlIG9wdGlvbnMgdG8gaGVscCB5b3VyIHVzZXJzIGxvY2F0ZQogICAgeW91ciBwbHVnLWluIHdoaWxlIGJyb3dzaW5nIHByb2plY3RzIGNhdGVnb3JpZXMuIFNlZQogICAgPGEgaHJlZj0iaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9kb2NtYW4vZGlzcGxheV9kb2MucGhwP2RvY2lkPTEyOTczJmFtcDtncm91cF9pZD0xIgogICAgPlNvZnR3YXJlIFNlYXJjaCBhbmQgdGhlIFNvdXJjZUZvcmdlLm5ldCBTb2Z0d2FyZSBNYXA8L2E+IGZvcgogICAgZGV0YWlscy48L3A+CgogICAgPHA+Tm90ZSBhbHNvIHRoYXQgeW91IG11c3QgYWRkIGVhY2ggY2xhc3NpZmljYXRpb24gb25lIGJ5IG9uZSBieQogICAgc2VsZWN0aW5nIHRoZSB2YWx1ZSBpbiBhIGRyb3AgZG93biBsaXN0IHRoZW4gY2xpY2tpbmcgdGhlIEFkZAogICAgYnV0dG9uIHRvIGl0cyByaWdodC4gWW91IGNhbm5vdCBzZWxlY3QgdmFsdWVzIGZvciBzZXZlcmFsCiAgICBjYXRlZ29yaWVzIGFuZCBhZGQgdGhlbSBhbGwgYXQgb25jZS48L3A+CgogICAgPGg0PlVzaW5nIFNvdXJjZUZvcmdlJ3MgQ1ZTIHNlcnZlciBmb3IgRWNsaXBzZSBwcm9qZWN0czwvaDQ+CgogICAgPHA+Tm93IHRoYXQgeW91IGhhdmUgYSBwcm9qZWN0IHRoYXQgb3RoZXIncyBjYW4gZmluZCwKICAgIGl0IGlzIHRpbWUgdG8gcHV0IHNvbWUgY29udGVudCB0aGVyZS4gVGhlIG1vc3QgaW1wb3J0YW50CiAgICBjb250ZW50IGlzIHRoZSBzb3VyY2UgY29kZSwgbWFuYWdlZCBpbiBhCiAgICA8YSBocmVmPSJodHRwOi8vd3d3LmN2c2hvbWUub3JnLyI+Q29uY3VycmVudCBWZXJzaW9ucyBTeXN0ZW08L2E+CiAgICAoQ1ZTKSByZXBvc2l0b3J5LiBTaW5jZSBFY2xpcHNlIGhhcyBidWlsdC1pbiBzdXBwb3J0IGZvciBDVlMKICAgIHJlcG9zaXRvcmllcyBpbiB0aGUgVGVhbSBkZXZlbG9wbWVudCBwbHVnLWlucywgaXQgaXMKICAgIHN0cmFpZ2h0Zm9yd2FyZCB0byB1c2Ugd2l0aGluIHRoZSBTRlBERS48L3A+CgogICAgPHA+T25jZSBhcHByb3ZlZCwgeW91ciBwcm9qZWN0IHdpbGwgaGF2ZSBhIENWUyByZXBvc2l0b3J5IGRlZGljYXRlZAogICAgZm9yIGl0IGF0CiAgICA8Y29kZT5jdnMuc291cmNlZm9yZ2UubmV0L2N2c3Jvb3QvPGk+eW91cnByb2plY3RuYW1lPC9pPjwvY29kZT4gLgogICAgRm9yIGV4YW1wbGUsIHRoZSBuZXQuc2YuZWNsaXBzZWV4ZWRpdG9yIHByb2plY3QgaXMgYXQKICAgIDxjb2RlPmN2cy5zb3VyY2Vmb3JnZS5uZXQvY3Zzcm9vdC9lY2xpcHNlZXhlZGl0b3I8L2NvZGU+LgogICAgSGVyZSBpcyBteSBwcm9qZWN0J3MgQ1ZTIHZpZXc6PC9wPgoKICAgIDxwPjxpbWcgYWx0PSJTYW1wbGUgQ1ZTIHByb2plY3QgdmlldyIgc3JjPSJpbWFnZXMvY3ZzLXZpZXcucG5nIgogICAgIHN0eWxlPSJ3aWR0aDogNDA3cHg7IGhlaWdodDogMjIycHg7IgogICAgIHRpdGxlPSJTYW1wbGUgQ1ZTIHByb2plY3QgdmlldyIvPjwvcD4KCiAgICA8cD5Zb3UgY2FuIHZpc3VhbGl6ZSB0aGUgcHJvamVjdCBwYXJ0aXRpb25pbmcgaGVyZTogSSB1c2Ugb25lIGRpcmVjdG9yeQogICAgZm9yIHRoZSBQREUgcHJvamVjdCBzb3VyY2UsIG9uZSBmb3IgdGhlIHBsdWctaW4gZmVhdHVyZSBwcm9qZWN0LAogICAgb25lIGZvciB0aGUgdXBkYXRlIHNpdGUgcHJvamVjdCwgYW5kIG9uZSBmb3IgdGhlIHdlYiBzaXRlLjwvcD4KCiAgICA8cD5Gb3IgZWFjaCBvZiB5b3VyIEVjbGlwc2UgcHJvamVjdHMsIGludm9rZSB0aGUgcHJvamVjdCdzCiAgICBjb250ZXh0IG1lbnUgZnJvbSB0aGUgUGFja2FnZSBFeHBsb3JlciB2aWV3IGFuZCBzZWxlY3QgdGhlIG1lbnUKICAgIFRlYW0gLSZndDtTaGFyZSBQcm9qZWN0LiBDaG9zZSBDVlMgYW5kIGNvbXBsZXRlIHRoZSBTaGFyZSBQcm9qZWN0CiAgICB3aXphcmQgKHNlZSB0aGUKICAgIDxhIGhyZWY9Imh0dHA6Ly9oZWxwLmVjbGlwc2Uub3JnL2hlbHAzMS9pbmRleC5qc3A/dG9waWM9L29yZy5lY2xpcHNlLnBsYXRmb3JtLmRvYy51c2VyL2dldHRpbmdTdGFydGVkL3FzLTYxZl9zeW5jcHJvamVjdC5odG0iCiAgICA+RWNsaXBzZSBoZWxwPC9hPiBmb3IgbW9yZSBkZXRhaWxzKSB0byBhdHRhY2ggaXQgdG8gdGhlIFNvdXJjZUZvcmdlCiAgICBDVlMgcmVwb3NpdG9yeS4gSWYgaW5zdGVhZCB5b3UgYXJlIGdvaW5nIHRvIGJlIGpvaW5pbmcgYSBwcm9qZWN0CiAgICB0aGF0IGFscmVhZHkgcmVzaWRlcyBpbiBDVlMsIHlvdSBjYW4gc2ltcGx5IGNoZWNrIHRoZSBwcm9qZWN0IG91dAogICAgb2YgQ1ZTIHVzaW5nIHRoZSBzdGFuZGFyZCBFY2xpcHNlIFRlYW0gb3BlcmF0aW9ucy4goCBPbmNlIHlvdXIgQ1ZTCiAgICByZXBvc2l0b3J5IGlzIGRlZmluZWQgaW4gRWNsaXBzZSwgeW91IGNhbiB1c2UgdGhlIG5vcm1hbCBUZWFtCiAgICBvcGVyYXRpb25zIHRvIGNvbW1pdCB5b3VyIHNvdXJjZSB0byBDVlMgYnkgaW52b2tpbmcgVGVhbS0mZ3Q7Q29tbWl0CiAgICBmcm9tIGVhY2ggb2YgdGhlIHByb2plY3QgZm9sZGVycy4gSSByZWNvbW1lbmQga2VlcGluZyBFY2xpcHNlCiAgICBtZXRhZGF0YSBmaWxlcyAmbWRhc2g7IDxjb2RlPi5wcm9qZWN0PC9jb2RlPiBhbmQgPGNvZGU+LmNsYXNzcGF0aDwvY29kZT4KICAgICZtZGFzaDsgdW5kZXIgdmVyc2lvbiBjb250cm9sICBzbyB0aGF0IG90aGVycyBjYW4gc2ltcGx5IGNoZWNrb3V0CiAgICB0aGUgcHJvamVjdHMgZnJvbSBFY2xpcHNlJ3MgQ1ZTIGNsaWVudC4gRWNsaXBzZSB3aWxsCiAgICBhdXRvbWF0aWNhbGx5IGRldGVjdCB0aGUgcHJvamVjdCdzIEphdmEgbmF0dXJlLCBhbmQgYnVpbGQgcGF0aAogICAgY29uZmlndXJhdGlvbi48L3A+CgogICAgPGg0PlNlY3VyZSBTZXJ2aWNlczwvaDQ+CgogICAgPHA+VG8gY29tbWl0IGZpbGVzIHRvIFNvdXJjZUZvcmdlJ3MgQ1ZTIHNlcnZlcnMgYW5kIGFjY2VzcyB0aGUKICAgIHNoZWxsLCB5b3UgbXVzdCB1c2UgU1NILjwvcD4KCiAgICA8cD5UaGlzIG1lYW5zIHVzaW5nIHRoZSA8Y29kZT5leHRTU0g8L2NvZGU+IGNvbm5lY3Rpb24gbWV0aG9kIGlmCiAgICB5b3Ugd2FudCB0byB1c2UgRWNsaXBzZSdzIGJ1aWx0LWluIENWUyBhbmQgU1NIIGNsaWVudCwgb3IKICAgIHVzaW5nIGEgcHJvcGVybHkgY29uZmlndXJlZCA8Y29kZT5leHQ8L2NvZGU+IG1ldGhvZCB0byByZWx5IG9uIHlvdXIKICAgIGZhdm9yaXRlIFNTSCBjbGllbnQuIFNTSCBwcm92aWRlcyBzZWN1cmUgY29tbXVuaWNhdGlvbiB3aXRoIHRoZQogICAgc2VydmVyIHRocm91Z2ggZW5jcnlwdGlvbi48L3A+CgogICAgPHA+SWYgeW91ciBzeXN0ZW0gYWxyZWFkeSBoYXMgYSBTU0ggaW1wbGVtZW50YXRpb24sIHlvdSBzaG91bGQgYmUKICAgIGFibGUgdG8gdXNlIGl0LiBTU0ggaW1wbGVtZW50YXRpb25zIGFyZSBhdmFpbGFibGUgb24gTWFjcyBhbmQgbW9zdCBVbml4CiAgICB2YXJpYW50cywgaW5jbHVkaW5nIExpbnV4LiBXaW5kb3dzIHVzZXJzIG9mIHRoZSBDeWd3aW4gdG9vbAogICAgc2V0IGNhbiB1c2UgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuU1NILm9yZy8iPk9wZW5TU0g8L2E+ICwgb3IKICAgIHVzZXJzIHdpdGhvdXQgQ3lnd2luIGFuZCBPcGVuU1NIIGNhbiB0cnkgPGEgaHJlZj0iaHR0cDovL3d3dy5wdXR0eS5ubC8iPgogICAgUFVUVFk8L2E+IG9yIGFub3RoZXIgc2VjdXJlIHNoZWxsIHRvb2wgc2V0LjwvcD4KCiAgICA8cD5JZiBhdmFpbGFibGUsIFNvdXJjZUZvcmdlIHJlY29tbWVuZHMgdXNpbmcgYSB0b29sIHNldCB0aGF0IHVzZXMKICAgIHRoZSBTU0gyIHByb3RvY29sIGZvciBncmVhdGVyIHNlY3VyaXR5LCB3aGljaCBpcyB0aGUgdmVyc2lvbgogICAgc3VwcG9ydGVkIGJ5IEVjbGlwc2UncyBidWlsdC1pbiBDVlMgU1NIIGNsaWVudC48L3A+CgogICAgPHA+WW91IHdpbGwgYWxzbyBuZWVkIFNTSCB0byBjb3B5IGZpbGVzIHRvIHlvdXIgcHJvamVjdCdzCiAgICBzaGVsbCBhbmQgd2ViIHNwYWNlLiBUaGUgU291cmNlRm9yZ2Ugc2l0ZSBoZWxwCiAgICBwcm92aWRlcyBjb21wbGV0ZSBkb2N1bWVudGF0aW9uIHRvCiAgICA8YSBocmVmPSJodHRwOi8vc291cmNlZm9yZ2UubmV0L2RvY21hbi9kaXNwbGF5X2RvYy5waHA/ZG9jaWQ9Njg0MSZhbXA7Z3JvdXBfaWQ9MSIKICAgID5jb25maWd1cmUgU1NIPC9hPi4goCBXaW5kb3dzIHVzZXJzIG1heSBhbHNvIGNvbnNpZGVyCiAgICA8YSBocmVmPSJodHRwOi8vd3d3LndpbnNjcC5uZXQiPldpblNDUDwvYT4gLCBhIFNvdXJjZUZvcmdlCiAgICA8YSBocmVmPSJodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL3dpbnNjcCI+cHJvamVjdDwvYT4gdGhhdAogICAgcHJvdmlkZXMgZHJhZyBhbmQgZHJvcCBpbnRlZ3JhdGlvbiB3aXRoIFdpbmRvd3MuIEZvciBleGFtcGxlLCBhZnRlcgogICAgeW91IHVwZGF0ZSB5b3VyIHdlYiBzaXRlIGluIEVjbGlwc2UsIHlvdSBjYW4gb3BlbiBXaW5TQ1AsIGF1dGhlbnRpY2F0ZSwgdGhlbiBqdW1wIHZpYSBhIFdpblNDUCBmYXZvcml0ZSB0byB5b3VyIFNvdXJjZUZvcmdlCiAgICBwcm9qZWN0IHdlYiBzcGFjZSBhbmQgPGEgaHJlZj0iaW1hZ2VzL1dpblNDUC5wbmciPmRyYWcgZmlsZXMKICAgIGZyb20gdGhlIEVjbGlwc2UgUGFja2FnZSBFeHBsb3JlcjwvYT4gdG8gdGhlIFdpblNDUCB2aWV3LjwvcD4KCiAgICA8aDQ+TWFraW5nIGEgc29mdHdhcmUgcmVsZWFzZTwvaDQ+CgogICAgPHA+U29mdHdhcmUgcmVsZWFzZXMgYXJlIHRoZSBwcmltYXJ5IG1lY2hhbmlzbSB0aGF0IFNvdXJjZUZvcmdlCiAgICB1c2VycyBlbXBsb3kgdG8gbWFrZSBkb3dubG9hZHMgYXZhaWxhYmxlIHNvZnR3YXJlIHRvIHRoZWlyIHVzZXJzLgogICAgU291cmNlRm9yZ2Ugc3VwcG9ydHMgYSByb2J1c3Qgc3lzdGVtIGZvciByZWxlYXNpbmcgeW91ciBzb2Z0d2FyZS4KICAgIFJlbGVhc2VkIGZpbGVzIGFyZSBwcmVzZXJ2ZWQgZm9yIHRoZSBsaWZldGltZSBvZiB0aGUgcHJvamVjdCwgYWxsb3dpbmcKICAgIGFueW9uZSB0byBkb3dubG9hZCBwcmV2aW91cyByZWxlYXNlcyAmbWRhc2g7IGFsdGhvdWdoIHlvdSBjYW4gaGlkZQogICAgcmVsZWFzZXMgaWYgbmVlZGVkLiBNYWtpbmcgYSBzb2Z0d2FyZSByZWxlYXNlIG9uIFNvdXJjZUZvcmdlIGlzCiAgICB3ZWxsIGRvY3VtZW50ZWQgaW4gdGhlCiAgICA8YSBocmVmPSJodHRwOi8vc291cmNlZm9yZ2UubmV0L2RvY21hbi9kaXNwbGF5X2RvYy5waHA/ZG9jaWQ9NjQ0NSZhbXA7Z3JvdXBfaWQ9MSIKICAgID5HdWlkZSB0byB0aGUgRmlsZSBSZWxlYXNlIFN5c3RlbSAoRlJTKTwvYT4uPC9wPgoKICAgIDxwPlNGUERFIHVzZXJzIGNhbiB1c2UgdGhlIEZSUyB0byBwdWJsaXNoIHBsdWctaW4gamFyIGZpbGVzLiBZb3UKICAgIHNob3VsZCBhbHNvIHJlbGVhc2UgeW91ciBwbHVnLWluIHNvdXJjZSBhcyBwYXJ0IG9mIGVhY2ggcmVsZWFzZS4KICAgIFRoZXJlIGFyZSBzZXZlcmFsIHdheXMgdG8gZG8gdGhpczogeW91IGNhbiBpbmNsdWRlIHNvdXJjZSBpbiB5b3VyCiAgICBqYXIgZmlsZSAodG8gZmFjaWxpdGF0ZSBkZWJ1Z2dpbmcgaW4gRWNsaXBzZSkgb3IgeW91IGNhbiB1c2UgYW4KICAgIEFudCB0YXNrIHRvIGNyZWF0ZSBhIHppcCBmaWxlIG9mIHlvdXIgc291cmNlLiBUaGUgZmV3ZXIgdGhlIG51bWJlcgogICAgb2YgZmlsZXMgaW4gYSByZWxlYXNlLCB0aGUgZWFzaWVyIGl0IGlzIHRvIG1hbmFnZSwgc28gaXQgaXMgYmVzdCB0bwogICAgbWluaW1pemUgZmlsZXMgYnkgdXNpbmcgYXJjaGl2ZSBmaWxlcyAoamFyIGZpbGVzLCB6aXAgZmlsZXMsIHRhci5negogICAgZmlsZXMsIGV0Yy4pIHRvIGNvbGxlY3QgdGhlIGZpbGVzIGZvciBhIHJlbGVhc2UuIE5vdGUgdGhhdCB3aXRoIG9wZW4gc291cmNlIHByb2plY3RzLCB1c2VycyBvZnRlbiBleHBlY3QgcmVsZWFzZXMgdG8KICAgIGNvbnRhaW4gdGhlIHNvdXJjZS4gSXQgaXMgY29uc2lkZXJlZCBpbXBvbGl0ZSB0byBmb3JjZSB1c2VycyB0byBmZXRjaCB0aGUKICAgIHNvdXJjZSBmcm9tIENWUy4gRG8gbm90IGZvcmdldCB0byBpbmNsdWRlIHlvdXIgbGljZW5zZSBmaWxlIGluCiAgICB5b3VyIHJlbGVhc2UuPC9wPgoKICAgIDxwPlRvIGNyZWF0ZSBhIHJlbGVhc2UsIGZvbGxvdyB0aGVzZSBzdGVwczo8L3A+CgogICAgPG9sPgoKICAgICAgPGxpPkxvZ2luIHRvIFNvdXJjZUZvcmdlPC9saT4KCiAgICAgIDxsaT5TZWxlY3QgeW91ciBwcm9qZWN0PC9saT4KCiAgICAgIDxsaT5HbyB0byB0aGUgQWRtaW4gcGFuZWwgZm9yIHlvdXIgcHJvamVjdCBhbmQgc2VsZWN0IHRoZSBGaWxlCiAgICAgIFJlbGVhc2VzIGxpbmsgZnJvbSB0aGUgbmF2aWdhdGlvbiBtZW51IHRvIGVudGVyIHRoZSBGUlMuPC9saT4KCiAgICAgIDxsaT5EZWZpbmUgYSA8ZW0+RlJTIHBhY2thZ2U8L2VtPiBpZiBub25lIGlzIGRlZmluZWQuCiAgICAgIEEgRlJTIHBhY2thZ2UgYSBjb2xsZWN0aW9uIG9mIGZpbGVzIGFzc29jaWF0ZWQgd2l0aCBhCiAgICAgIHByb2plY3Q7IGVhY2ggcGx1Zy1pbiBjYW4gbWFwIHRvIGEgRlJTIHBhY2thZ2UuCiAgICAgIEZvciBteSBlY2xpcHNlZXhlZGl0b3IgcHJvamVjdCwgdGhlIEZSUyBjb250YWlucyBvbmUgcGFja2FnZSAmbWRhc2g7CiAgICAgIGVjbGlwc2VleGVkaXRvciAmbWRhc2g7IGFzIHNob3duIGluIHRoZQogICAgICA8YSBocmVmPSJodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3Qvc2hvd2ZpbGVzLnBocD9ncm91cF9pZD0xMzc4NjEiCiAgICAgID5GaWxlczwvYT4gcGFnZSAuPC9saT4KCiAgICAgIDxsaT5Vc2UgYW5vbnltb3VzIEZUUCB0byB1cGxvYWQgZmlsZXMgdG8gdXBsb2FkLnNvdXJjZWZvcmdlLm5ldC4KICAgICAgWW91IG1heSB1c2UgeW91ciBmYXZvcml0ZSBGVFAgY2xpZW50IGZvciB0aGlzLiBTb3VyY2VGb3JnZSBkb2VzCiAgICAgIG5vdCBwcm92aWRlIGFub255bW91cyB3ZWIgdXBsb2FkLjwvbGk+CgogICAgICA8bGk+RGVmaW5lIGEgbmV3IHJlbGVhc2UgJm1kYXNoOyB0eXBpY2FsbHkgbmFtZWQgYWZ0ZXIgdGhlIHZlcnNpb24KICAgICAgbnVtYmVyLCBzdWNoIGFzIDAuMSwgMS4wQmV0YTIsIDEuMCwgMi4wLCBldGMuICZtZGFzaDsgZm9yIHlvdXIgcGFja2FnZQogICAgICBieSB1c2luZyB0aGUgU291cmNlRm9yZ2Ugd2ViIGludGVyZmFjZS48L2xpPgoKICAgICAgPGxpPkFkZCBmaWxlcyBmcm9tIHRoZSBhbm9ueW1vdXMgRlRQIHNpdGUgdG8gdGhlIHJlbGVhc2UuIFRoZQogICAgICBTb3VyY2VGb3JnZSB3ZWIgaW50ZXJmYWNlIHByb3ZpZGVzIGFsbCB5b3UgbmVlZCBmb3IgdGhpcyAmbWRhc2g7IHlvdQogICAgICBhZGQgYSBuZXcgZmlsZSB0byB0aGUgcmVsZWFzZSwgc2VsZWN0IHRoYXQgZmlsZSBmcm9tIHRoZSBzZXQgb2YgYWxsCiAgICAgIGZpbGVzIGluIHRoZSB1cGxvYWQgYXJlYSBhbmQgc2VsZWN0IGEgZmlsZSB0eXBlLiBSZW1lbWJlciB0aGF0IG90aGVyIFNvdXJjZUZvcmdlIHVzZXJzIGFyZQogICAgICBidWlsZGluZyByZWxlYXNlcyBhdCB0aGUgc2FtZSB0aW1lLCBzbyB5b3Ugd2lsbCBzZWUgb3RoZXIgZmlsZXMKICAgICAgdGhlcmUuPC9saT4KCiAgICAgIDxsaT5WZXJpZnkgdGhlIHJlbGVhc2UgY29udGVudHMgYnkgZG93bmxvYWRpbmcgYW5kIGluc3RhbGxpbmcgdGhlCiAgICAgIHBsdWctaW4gaW4gYSBjbGVhbiBFY2xpcHNlIGluc3RhbGxhdGlvbi48L2xpPgoKICAgIDwvb2w+CgogICAgPHA+VG8gY3JlYXRlIGEgbmV3IHJlbGVhc2UsIHNpbXBseSBjbGljayB0aGUKICAgIEFkZCBSZWxlYXNlIGJ1dHRvbiBhbmQgc3VibWl0IHRoZSB3ZWIgZm9ybSB0byBjcmVhdGUgYSBuZXcgcmVsZWFzZS4KICAgIFlvdSBjYW4gdGhlbiBhZGQgdGhlIGZpbGVzIGZyb20gdGhlIGFub255bW91cyB1cGxvYWQgc2l0ZSB0byB0aGUKICAgIHJlbGVhc2UuPC9wPgoKICAgIDxkaXYgc3R5bGU9InRleHQtYWxpZ246IGNlbnRlcjsiPgoKICAgICAgPHA+PGltZyBhbHQ9IkZpbGUgUmVsZWFzZSBTeXN0ZW0gLSBBZGQgYSBSZWxlYXNlIgogICAgICAgc3JjPSJpbWFnZXMvZnJzLnBuZyIKICAgICAgIHRpdGxlPSJGaWxlIFJlbGVhc2UgU3lzdGVtIC0gQWRkIGEgUmVsZWFzZSIvPjwvcD4KCiAgICA8L2Rpdj4KCiAgICA8cD5Tb3VyY2VGb3JnZSBvZmZlcnMgZG93bmxvYWQgc3RhdGlzdGljcyBmb3IgZWFjaCByZWxlYXNlZCBmaWxlLgogICAgWW91IGNhbiBtb25pdG9yIGhvdyBtYW55IHBlb3BsZSBoYXZlIGRvd25sb2FkZWQgeW91ciBzb3VyY2UgemlwIG9yCiAgICBFY2xpcHNlIHBsdWctaW4uIDwvcD4KCiAgICA8cD5Zb3UgbWF5IGFsc28gd2FudCB0byBoYXZlIGEgbG9vayBhdCB0aGUgIDxhIGhyZWY9Imh0dHA6Ly9zZnV0aWxzLnNvdXJjZWZvcmdlLm5ldCI+c2Z1dGlsczwvYT4gcGFja2FnZS4KICAgICBJdCBwcm92aWRlcyBhbiBBbnQgdGFzayBhbmQKICAgIEphdmEgQVBJIHRvIGF1dG9tYXRlIHNvZnR3YXJlIHJlbGVhc2VzIG9uIFNvdXJjZUZvcmdlLiBXaXRoCiAgICBzZnV0aWxzLCB5b3UgY2FuIG1ha2UgYSByZWxlYXNlIGRpcmVjdGx5IGZyb20gRWNsaXBzZSBieSBydW5uaW5nCiAgICBBbnQuPC9wPgoKICAgIDxoND5CdWlsZGluZyBhIHdlYiBzaXRlPC9oND4KCiAgICA8cD5Tb3VyY2VGb3JnZSBwcm92aWRlcyBlbmhhbmNlZCB3ZWIgaG9zdGluZyBmb3IgcHJvamVjdHMuIEluCiAgICBhZGRpdGlvbiB0byBiYXNpYyBIVE1MIHNlcnZpY2VzLCB5b3UgZ2V0OjwvcD4KCiAgICA8b2w+CgogICAgICA8bGk+RE5TIHJlZ2lzdHJhdGlvbi4gVGhlIFVSTAogICAgICA8Y29kZT5odHRwOi8veW91cnByb2plY3RuYW1lLnNvdXJjZWZvcmdlLm5ldDwvY29kZT4gaXMgcmVzZXJ2ZWQKICAgICAgZm9yIHlvdXIgcHJvamVjdCB3ZWIgc2l0ZS4gRm9yIGV4YW1wbGUsIG15IEVURUUgcHJvamVjdCBpcwogICAgICBob3N0ZWQgYXQgPGEgaHJlZj0iaHR0cDovL2VjbGlwc2VleGVkaXRvci5zb3VyY2Vmb3JnZS5uZXQiPgogICAgICBodHRwOi8vZWNsaXBzZWV4ZWRpdG9yLnNvdXJjZWZvcmdlLm5ldDwvYT4uIEkgZW1waGFzaXplIGFnYWluCiAgICAgIHRoZSBpbXBvcnRhbmNlIG9mIGNob29zaW5nIGEgZ29vZCBwcm9qZWN0IG5hbWUgZnJvbSB0aGUKICAgICAgYmVnaW5uaW5nLjwvbGk+CgogICAgICA8bGk+PGEgaHJlZj0iaHR0cDovL3BocC5uZXQvIj5QSFA8L2E+LAogICAgICA8YSBocmVmPSJodHRwOi8vcGVybC5jb20vIj5QZXJsPC9hPiwKICAgICAgPGEgaHJlZj0iaHR0cDovL3B5dGhvbi5vcmcvIj5QeXRob248L2E+IHNjcmlwdGluZy48L2xpPgoKICAgICAgPGxpPk15U1FMIGRhdGFiYXNlLjwvbGk+CgogICAgPC9vbD4KCiAgICA8cD5Zb3UgY2FuIG9mIGNvdXJzZSB1c2UgRWNsaXBzZSB0byBkZXZlbG9wIHRoaXMgY29udGVudC4gRm9yCiAgICBleGFtcGxlLCB5b3UgbWF5IHVzZSB0aGUgRWNsaXBzZSBXZWIgVG9vbHMgcHJvamVjdCB0byBjcmVhdGUgeW91cgogICAgSFRNTCBjb250ZW50LiBUaGVyZSBhcmUgYWxzbyBQSFAgYXV0aG9yaW5nIHBsdWctaW5zLjwvcD4KCiAgICA8cD5UbyBwdWJsaXNoIHlvdXIgY29udGVudCwgeW91IG11c3QgdXNlIFNTSCBzZWN1cmUgY29weS4KICAgIFlvdSBtdXN0IGxvZ2luIHVuZGVyIGEKICAgIHByb2plY3QncyBhZG1pbmlzdHJhdG9yIGlkLCB3aGljaCBnaXZlcyB5b3Ugd3JpdGUgYWNjZXNzIHRvCiAgICB0aGUgd2ViIHBhZ2Ugc3BhY2UuIER1ZSB0byB0aGUgbGFyZ2UgbnVtYmVyIG9mIGhvc3RlZCBwcm9qZWN0cywKICAgIFNvdXJjZUZvcmdlIHVzZXMgYSBicmFuY2hpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZSB0byBtYWtlIGl0CiAgICBlYXNpZXIgdG8gbmF2aWdhdGUgYW5kIHNvIHRoYXQgY2xpZW50cyBkbyBub3QgaGF2ZSB0byBkb3dubG9hZAogICAgZXh0cmVtZWx5IGxhcmdlIGRpcmVjdG9yeSBsaXN0aW5ncy4gRm9yIGV4YW1wbGUsIG15IGVjbGlwc2VleGVkaXRvcgogICAgcHJvamVjdCBpcyBzdG9yZWQgYXQKICAgIDxjb2RlPi9ob21lL2dyb3Vwcy9lL2VjL2VjbGlwc2VleGVkaXRvcjwvY29kZT4uIEkgdXNlIFdpblNDUCB0bwogICAgY29weSBmaWxlcyBmcm9tIG15IGhvbWUgY29tcHV0ZXIgdG8gdGhlIFNvdXJjZUZvcmdlIHNlcnZlci4gSW4gdGhpcwogICAgPGEgaHJlZj0iaW1hZ2VzL1dpblNDUC5wbmciPnNjcmVlbnNob3Q8L2E+LCBJIGRyYWcgYSBmaWxlCiAgICBmcm9tIHRoZSBFY2xpcHNlIHBhY2thZ2UgZXhwbG9yZXIgdG8gV2luU0NQJ3MgZm9sZGVyCiAgICByZXByZXNlbnRpbmcgbXkgU291cmNlRm9yZ2UtaG9zdGVkIHByb2plY3Qgd2ViIHNwYWNlLjwvcD4KCiAgICA8cD5FYWNoIHByb2plY3QgaXMgcmVxdWlyZWQgdG8KICAgIDxhIGhyZWY9Imh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvZG9jcy9FMDcvZW4vI3RvcCI+ZGlzcGxheSB0aGUKICAgIFNvdXJjZUZvcmdlIGxvZ288L2E+IG9uIHRoZWlyIHdlYiBwYWdlcyBob3N0ZWQgb24gdGhlIHByb2plY3Qgd2ViCiAgICBzZXJ2aWNlLiBUaGVyZSBhcmUgc2V2ZXJhbCBsb2dvcyBhdmFpbGFibGUuIFlvdSBnZXQgdGhlIGxvZ28KICAgIGltYWdlIGZyb20gYSBzcGVjaWFsIFNvdXJjZUZvcmdlIFVSTCB0aGF0IGluY2x1ZGVzIHlvdXIgcHJvamVjdAogICAgZ3JvdXAgaWQuIFRoZSBTb3VyY2VGb3JnZSBzZXJ2ZXIgcmVjb3JkcyBhIHBhZ2UgaGl0IGZvciB5b3VyIHByb2plY3QKICAgIHdoZW4gYSB3ZWIgYnJvd3NlciBkaXNwbGF5cyB0aGUgaW1hZ2UuIEZvciBleGFtcGxlLCB0aGUgaW1hZ2UgVVJMCiAgICA8Y29kZT5odHRwOi8vc291cmNlZm9yZ2UubmV0L3NmbG9nby5waHA/Z3JvdXBfaWQ9MTM3ODYxJmFtcDt0eXBlPTE8L2NvZGU+CiAgICBjb3VudHMgYXMgYSB3ZWIgaGl0IGZvciBteSBFVEVFIHByb2plY3Qgd2l0aCB0aGUgZ3JvdXAgaWQgMTM3ODYxLgogICAgQmUgc3VyZSB0byB1c2UgdGhlIGNvcnJlY3QgbG9nbyBpbWFnZSBVUkwgc28geW91ciBwcm9qZWN0IGdldHMKICAgIGFjY3VyYXRlIHdlYiBzdGF0aXN0aWNzLjwvcD4KCiAgICA8aDQ+SG9zdGluZyBhbiB1cGRhdGUgc2l0ZTwvaDQ+CgogICAgPHA+WW91IG1heSB3b25kZXIgaWYgeW91IGNhbiB1c2UgdGhlIFNvdXJjZUZvcmdlIHdlYiBob3N0aW5nCiAgICBzZXJ2aWNlIHRvIGhvc3QgYW4gRWNsaXBzZSBQbHVnLWluIHVwZGF0ZSBzaXRlLiBUaGVyZSBpcyBsaXR0bGUKICAgIGd1aWRhbmNlIG9uIHRoaXMgdGhhdCBJIGtub3cgb2YuIFNvbWUgcGVvcGxlIHJlcG9ydCB0aGF0IHRoaXMgaXMKICAgIGZyb3duZWQgdXBvbiBiZWNhdXNlIFNvdXJjZUZvcmdlIGVuY291cmFnZXMgdGhlIHVzZSBvZiB0aGUgRmlsZQogICAgUmVsZWFzZSBTeXN0ZW0gKEZSUykgZm9yIGhvc3RpbmcgYmluYXJpZXMuIFRoZSBGUlMgdXNlcyBtaXJyb3IKICAgIHNpdGVzIGFyb3VuZCB0aGUgd29ybGQgdG8gc3VwcG9ydCBzY2FsYWJsZSBkb3dubG9hZCBzZXJ2aWNlcyBmb3IKICAgIFNvdXJjZUZvcmdlIHByb2plY3RzLiBJbiBhZGRpdGlvbiwgaWYgeW91IHVzZSB0aGUgRlJTLCB5b3UgZ2V0IHRoZQogICAgYmVuZWZpdHMgb2YgZG93bmxvYWQgc3RhdGlzdGljcyB0aGF0IHNob3cgZG93bmxvYWQgY291bnRzLiBTdWNoCiAgICBkb3dubG9hZCBjb3VudHMgY2FuIHJhaXNlIHlvdXIgcHJvamVjdCdzIGFjdGl2aXR5IHJhdGluZyBhbmQKICAgIGFkZCBzb21lIG1vbWVudHVtIHRvIHlvdXIgcHJvamVjdC4gTmV2ZXJ0aGVsZXNzLCB5b3UgaGF2ZSB0aGUgZm9sbG93aW5nCiAgICBhbHRlcm5hdGl2ZSBmb3IgeW91ciB1cGRhdGUgc2l0ZTo8L3A+CgogICAgPHVsPgoKICAgICAgPGxpPklmIHlvdSB3YW50IHRvIGhvc3QgYW4gdXBkYXRlIHNpdGUgb24geW91ciBwcm9qZWN0IHdlYiBzaXRlCiAgICAgIGluc3RlYWQgb2YgdXNpbmcgdGhlIEZSUywgeW91IHNob3VsZCBhc2sgdGhlIFNvdXJjZUZvcmdlCiAgICAgIGFkbWluaXN0cmF0b3JzIGZpcnN0LiBJdCBtYXkgYmUgYmFkIGV0aXF1ZXR0ZSB0bwogICAgICBwbGFjZSBiaW5hcnkgZmlsZXMgb24gdGhlIHByb2plY3Qgd2ViIHNpdGUgJm1kYXNoOyBpZiBvdmVydXNlZCwgYmluYXJ5CiAgICAgIGZpbGUgZG93bmxvYWRzIGNvdWxkIGFmZmVjdCB3ZWIgcGFnZSBob3N0aW5nIHBlcmZvcm1hbmNlIGZvciBhbGwKICAgICAgU291cmNlRm9yZ2UgcHJvamVjdHMuIFRvIGRlcGxveSB5b3VyIHVwZGF0ZSwgeW91IHdpbGwganVzdCBuZWVkCiAgICAgIHRvIGNvcHkgdGhlIHNpdGUgdG8geW91ciBwcm9qZWN0IHdlYiBzcGFjZS48L2xpPgoKICAgICAgPGxpPklmIHlvdSB3YW50IHRvIGhvc3QgYW4gdXBkYXRlIHNpdGUgdXNpbmcgdGhlIEZSUywgdGhlCiAgICAgIHByb2NlZHVyZSBpcyBhIGJpdCBtb3JlIGNvbXBsZXguIFRoZSBGUlMgdXNlcyBtaXJyb3Igc2l0ZXMsIHNvCiAgICAgIHlvdSB3aWxsIG5lZWQgdG8gZGVzaWduIHlvdXIgdXBkYXRlIHNpdGUgc28gdGhhdCBpdCBvYnRhaW5zIGZpbGVzCiAgICAgIGZyb20gb25lIG1pcnJvciBvbmx5LiBJbiBhZGRpdGlvbiwgdGhlIEZSUyBpcyBhIGZsYXQgc3RydWN0dXJlCiAgICAgIHdpdGggYSBzaW5nbGUgZGlyZWN0b3J5IHBlciBwcm9qZWN0LiBUaGVyZWZvcmUgYW55IHBsdWctaW4gYW5kIGZlYXR1cmUKICAgICAgeW91IHJlbGVhc2UgbXVzdCBoYXZlIGEgdW5pcXVlIG5hbWUgJm1kYXNoOyB5b3UgY2Fubm90IGhhdmUgYSBmZWF0dXJlIGphcgogICAgICB0aGF0IGhhcyB0aGUgc2FtZSBuYW1lIGFzIGEgcGx1Zy1pbiBqYXIuCiAgICAgIFlvdSB0aGVuIG5lZWQgdG8gbWFrZSBhIHJlbGVhc2UgZm9yIGVhY2ggZmVhdHVyZQogICAgICBhbmQgcGx1Zy1pbiBqYXJzIHRvIHRoZSBGUlMuIFRoZW4geW91IG5lZWQgdG8gY3JlYXRlIGFuIGVuaGFuY2VkCiAgICAgIHNpdGUueG1sIGZpbGUgbWFudWFsbHkuIFlvdSBjYW4gZmluZCBhIGdvb2QgZXhhbXBsZQogICAgICA8YSBocmVmPSJodHRwOi8vZXBsdWcuc291cmNlZm9yZ2UubmV0L3NpdGUueG1sIj5oZXJlPC9hPiB3aXRoCiAgICAgIHNvbWUgZXhwbGFuYXRpb25zIGF0IHRoZSBib3R0b20gb2YgdGhlCiAgICAgIDxhIGhyZWY9Imh0dHA6Ly9lcGx1Zy5zb3VyY2Vmb3JnZS5uZXQvIj5lcGx1ZyBwcm9qZWN0IGhvbWUgcGFnZTwvYT4sIHdoaWNoIHVzZXMgdGhhdCBhcHByb2FjaC4KICAgICAgV2l0aCBhIGJpdCBtb3JlCiAgICAgIHdvcmssIGl0IHNob3VsZCBldmVuIGJlIHBvc3NpYmxlIHRvIHRha2UgYWR2YW50YWdlIG9mIHRoZSBTb3VyY2Vmb3JnZSBtaXJyb3JzLjwvbGk+CiAgICA8L3VsPgoKICAgIDxwPk9uZSBhZGRpdGlvbmFsIG9wdGlvbiB0byBjb25zaWRlciBpcyB0byBidW5kbGUgYSBmdWxsIHVwZGF0ZQogICAgc2l0ZSAodGhlIDxjb2RlPnNpdGUueG1sPC9jb2RlPiBhbmQgamFyIGZpbGVzIGV0Yy4pIGludG8gYW4KICAgIGFyY2hpdmUsIGFuZCBtYWtlIHRoYXQgZmlsZSBwYXJ0IG9mIHlvdXIgcmVsZWFzZS4gVGhlbiwgdXNlcnMgY2FuCiAgICBkb3dubG9hZCB0aGUgdXBkYXRlIHNpdGUgYW5kIGhvc3QgaXQgbG9jYWxseSwgZm9yIGV4YW1wbGUgb24gYQogICAgbG9jYWwgRWNsaXBzZSB1cGRhdGUgc2l0ZSBvbiBhIGNvcnBvcmF0ZSBpbnRyYW5ldC4gU2luY2UgcGVvcGxlCiAgICB3aWxsIHNoYXJlIGJpbmFyaWVzIGFueXdheSwgeW91IGNhbiBtYWtlIGl0IGVhc2llciBhbmQgaGVscCB3aXRoCiAgICB3aWRlciBhZG9wdGlvbiBvZiB5b3VyIHBsdWctaW4uPC9wPgoKICAgIDxwPlNpbmNlIGFuIHVwZGF0ZSBzaXRlIGNhbiBtYW5hZ2UgbXVsdGlwbGUgcGx1Zy1pbnMgdmVyc2lvbnMsIHlvdQogICAgc2hvdWxkIGNvbnNpZGVyIGRlZmluaW5nIGEgc2VwYXJhdGUgU291cmNlRm9yZ2UgRlJTCiAgICAncGFja2FnZScgZm9yIHlvdXIgdXBkYXRlIHNpdGUgYXJjaGl2ZS4gSWYgeW91IHNpbXBseQogICAgaW5jbHVkZSB0aGUgdXBkYXRlIHNpdGUgKGNhbGwgaXQgPGNvZGU+dXBkYXRlLXNpdGUuemlwPC9jb2RlPiApIGluCiAgICB0aGUgbm9ybWFsIHBsdWctaW4gcGFja2FnZSwgdmVyc2lvbiAxLjAgb2YKICAgIDxjb2RlPnVwZGF0ZS1zaXRlLnppcDwvY29kZT4gd2lsbCBjb250YWluIHZlcnNpb24gMS4wIG9mIHlvdXIKICAgIHBsdWctaW4uIFZlcnNpb24gMS4xIG9mIDxjb2RlPnVwZGF0ZS1zaXRlLnppcDwvY29kZT4gd2lsbCBjb250YWluCiAgICBib3RoIDEuMCBhbmQgMS4xIG9mIHlvdXIgcGx1Zy1pbi4gU2luY2UgU291cmNlRm9yZ2UgbmV2ZXIgZGVsZXRlcwogICAgcHJldmlvdXMgcmVsZWFzZXMsIHRoaXMgcHJhY3RpY2UgbGVhZHMgdG8gYSBsb3Qgb2YgdW5uZWNlc3Nhcnkgd2FzdGVkCiAgICBzZXJ2ZXIgc3BhY2UgYW5kIHBvdGVudGlhbCBjb25mdXNpb24uIEkgZmluZCBlYXNpZXIgdG8gbWFpbnRhaW4KICAgIG9ubHkgb25lIHJlbGVhc2Ugb2YgYW4gdXBkYXRlIHNpdGUgcGFja2FnZSAod2l0aCBhIHJlbGVhc2UgbmFtZSBvZgogICAgJnF1b3Q7dXBkYXRlcyZxdW90OyBpbnN0ZWFkIG9mIGEgbnVtYmVyZWQgcmVsZWFzZSBuYW1lKS4gVGhlbiwgZWFjaAogICAgdGltZSB5b3UgcmVsZWFzZSBhIG5ldyB2ZXJzaW9uIG9mIHRoZSBwbHVnLWluLCBzaW1wbHkgcmVwbGFjZSB0aGUKICAgIGN1cnJlbnQgPGNvZGU+dXBkYXRlLXNpdGUuemlwPC9jb2RlPiAmbWRhc2g7IHdoaWNoIGNvbnRhaW5zIHdoYXRldmVyCiAgICBwbHVnLWluIHZlcnNpb25zIHlvdSB3aXNoICZtZGFzaDsgd2l0aGluIHRoYXQgdXBkYXRlZCBwYWNrYWdlJ3MKICAgIHJlbGVhc2UuPC9wPgoKICAgIDxoND5SZWdpc3RlcmluZyB3aXRoIGEgcGx1Zy1pbiBwcm9tb3Rpb24gc2l0ZTwvaDQ+CgogICAgPHA+T25jZSB5b3UgaGF2ZSB5b3VyIHBsdWctaW4gZGVwbG95ZWQgdmlhIFNGUERFLCB5b3UgbmVlZCB0byB0ZWxsCiAgICB0aGUgRWNsaXBzZSBjb21tdW5pdHkgYWJvdXQgaXQuIEluIGFkZGl0aW9uIHRvIHRoZSBTb3VyY2VGb3JnZQogICAgVHJvdmUsIHlvdSBtYXkgd2lzaCB0byBjb25zaWRlciByZWdpc3RlcmluZyB5b3VyIFBsdWctaW4gb24gb25lIG9mCiAgICBzZXZlcmFsIHBsdWctaW4gbGlzdGluZyBzaXRlcyB0aGF0IHlvdSBjYW4gZmluZCBvbiB0aGUgRWNsaXBzZS5vcmcKICAgIDxhIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvY29tbXVuaXR5L3BsdWdpbnNpdGVzLnBocCI+Y29tbXVuaXR5CiAgICBwYWdlPC9hPi48L3A+CgogICAgPHA+SWYgb25lIG9mIHRoZXNlIHNpdGVzIGRvZXMgbm90IGRyaXZlIGVub3VnaCB0cmFmZmljIHRvIHlvdXIKICAgIHBsdWctaW4sIHlvdSBjYW4gYWx3YXlzIHdyaXRlIGFuZCBwdWJsaXNoIGFuIGFydGljbGUgYWJvdXQgRWNsaXBzZQogICAgYW5kIGZpZ3VyZSBvdXQgYW4gaW50ZXJlc3Rpbmcgd2F5IHRvIHBsdWcgeW91ciBwbHVnLWluIGluIHlvdXIKICAgIGFydGljbGUhPC9wPgoKICAgIDxoMz5QYXJ0aW5nIFRob3VnaHRzPC9oMz4KCiAgICA8cD5FeHBsb3JlIGFsbCB0aGUgc2VydmljZXMgdGhlICc8c3Ryb25nPlNvdXJjZUZvcmdlIFBsdWctaW4KICAgIERldmVsb3BtZW50IEVudmlyb25tZW50PC9zdHJvbmc+JyBoYXMgdG8gb2ZmZXIuIE9uY2UgeW91IGhhdmUgY3JlYXRlZCwKICAgIGNvbmZpZ3VyZWQsIGFuZCBwb3B1bGF0ZWQgeW91ciBwcm9qZWN0IHNpdGUsIHJlZmVyIHRvIHlvdXIKICAgIHByb2plY3QncyBBZG1pbiBsaW5rIGFuZCB0aGUgb24tbGluZSBTb3VyY2VGb3JnZSBkb2N1bWVudGF0aW9uCiAgICB0byBsZWFybiBob3cgdG86PC9wPgoKICAgIDx1bD4KCiAgICAgIDxsaT5CYWNrdXAgdXAgeW91ciBjb25maWd1cmF0aW9uPC9saT4KCiAgICAgIDxsaT5Vc2UgdGhlIGNvbXBpbGUgZmFybTwvbGk+CgogICAgICA8bGk+Q2hvb3NpbmcgeW91ciBzdXBwb3J0IG9wdGlvbnM8L2xpPgoKICAgICAgPGxpPkNyZWF0aW5nIE1haWxtYW4gbWFpbGluZyBsaXN0cyBhbmQgaG9zdGluZyB3ZWIgZGlzY3Vzc2lvbgogICAgICBmb3J1bXM8L2xpPgoKICAgIDwvdWw+CgogICAgPHA+WW91IHdpbGwgZmluZCB0aGF0IFNvdXJjZUZvcmdlIGlzIGEgdHJlbWVuZG91cyByZXNvdXJjZSBmb3Igb3BlbgogICAgc291cmNlIGRldmVsb3BtZW50IGFuZCB0aGUgcHJvamVjdCBtYW5hZ2VtZW50IG9mIEVjbGlwc2UgcGx1Zy1pbnMKICAgIGRldmVsb3BtZW50IHByb2plY3RzICZtZGFzaDsgYSB3ZWIgaG9zdGluZyBlcXVpdmFsZW50IG9mIHRoZSBFY2xpcHNlCiAgICBkZXNrdG9wIGV4cGVyaWVuY2UuCiAgICBQbHVnIGludG8gU291cmNlRm9yZ2UgdG9kYXkgYW5kIHNlZSB5b3VyIHBsdWctaW4gcmVhcCB0aGUgbXlyaWFkCiAgICBiZW5lZml0cyBTRlBERSAmbWRhc2g7IFNvdXJjZUZvcmdlICsgRWNsaXBzZSBQREUgJm1kYXNoOyBoYXMgdG8gb2ZmZXIuPC9wPgoKICAgIDxoMz5SZXNvdXJjZXM8L2gzPgoKICAgIDx1bD4KCiAgICAgIDxsaT48YSBocmVmPSJodHRwOi8vc291cmNlZm9yZ2UubmV0LyI+U291cmNlRm9yZ2UubmV0PC9hPjwvbGk+CgogICAgICA8bGk+U291cmNlRm9yZ2UubmV0CiAgICAgIDxhIGhyZWY9Imh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvZG9jbWFuL2Rpc3BsYXlfZG9jLnBocD9kb2NpZD02MDQ4JmFtcDtncm91cF9pZD0xIgogICAgICA+VGVybXMgb2YgVXNlPC9hPjwvbGk+CgogICAgICA8bGk+PGEgaHJlZj0iaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9kb2NzLyI+U291cmNlRm9yZ2UgRW5kIFVzZXIKICAgICAgZG9jdW1lbnRhdGlvbjwvYT48L2xpPgoKICAgICAgPGxpPjxhIGhyZWY9Imh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvIj5vcGVuc291cmNlLm9yZzwvYT4gKE9TSSk8L2xpPgoKICAgICAgPGxpPjxhIGhyZWY9Imh0dHA6Ly93d3cuamF2YWZvcmdlLmNvbS8iPkphdmFGb3JnZSAoYSBTb3VyY2VGb3JnZSBhbHRlcm5hdGl2ZSk8L2E+PC9saT4KCiAgICA8L3VsPgoKICAgIDxociBzdHlsZT0id2lkdGg6IDEwMCU7IGhlaWdodDogMnB4OyIvPgoKICAgIDxoMz5SZXZpc2lvbiBIaXN0b3J5PC9oMz4KCiAgICA8dGFibGUgYm9yZGVyPSIxIiBjZWxscGFkZGluZz0iMiIgY2VsbHNwYWNpbmc9IjIiIHN0eWxlPSJ3aWR0aDogMTAwJTsgdGV4dC1hbGlnbjogbGVmdDsiPgoKICAgICAgPHRib2R5PgoKICAgICAgICA8dHI+CgogICAgICAgICAgPHRoIHN0eWxlPSJ2ZXJ0aWNhbC1hbGlnbjogdG9wOyI+RGF0ZTwvdGg+CgogICAgICAgICAgPHRoIHN0eWxlPSJ2ZXJ0aWNhbC1hbGlnbjogdG9wOyI+Q29tbWVudDwvdGg+CgogICAgICAgIDwvdHI+CgogICAgICAgIDx0cj4KCiAgICAgICAgICA8dGQKICAgICAgICAgICBzdHlsZT0idmVydGljYWwtYWxpZ246IHRvcDsgYmFja2dyb3VuZC1jb2xvcjogcmdiKDIzOCwgMjM4LCAyMzgpOyI+CiAgICAgICAgICBPY3RvYmVyIDE0LCAyMDA1PC90ZD4KCiAgICAgICAgICA8dGQKICAgICAgICAgICBzdHlsZT0idmVydGljYWwtYWxpZ246IHRvcDsgYmFja2dyb3VuZC1jb2xvcjogcmdiKDIzOCwgMjM4LCAyMzgpOyI+CiAgICAgICAgICBDcmVhdGVkOyBEYXZpZCBKLiBCaWVzYWNrLAogICAgICAgICAgZGF2aWRfYmllc2Fja0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ8L3RkPgoKICAgICAgICA8L3RyPgoKICAgICAgPC90Ym9keT4KCiAgICA8L3RhYmxlPgogICAgPHA+Q29weXJpZ2h0ICZjb3B5OyAyMDA1IGJ5IERhdmlkIEouIEJpZXNhY2s8L3A+CiAgICA8cD5UbyBkaXNjdXNzIG9yIHJlcG9ydCBwcm9ibGVtcyBpbiB0aGlzIGFydGljbGUgc2VlIDxhCglocmVmPSJodHRwczovL2J1Z3MuZWNsaXBzZS5vcmcvYnVncy9zaG93X2J1Zy5jZ2k/aWQ9OTQ5NDAiPmJ1ZyA5NDk0MDwvYT4uPC9wPgoKICAgIDxwPjxzbWFsbD5WQSBTb2Z0d2FyZSBhbmQgT1NURyBhcmUgdHJhZGVtYXJrcyBvZiBWQSBTb2Z0d2FyZQogICAgQ29ycG9yYXRpb24uIFNvdXJjZUZvcmdlIGlzIGEgcmVnaXN0ZXJlZCB0cmFkZW1hcmsgb2YgVkEgU29mdHdhcmUKICAgIENvcnBvcmF0aW9uIGluIHRoZSBVbml0ZWQgU3RhdGVzIGFuZCBvdGhlciBjb3VudHJpZXMuPC9zbWFsbD48L3A+CgogICAgPHA+PHNtYWxsPkphdmEgYW5kIGFsbCBKYXZhLWJhc2VkIHRyYWRlbWFya3MgYW5kIGxvZ29zIGFyZQogICAgdHJhZGVtYXJrcyBvciByZWdpc3RlcmVkIHRyYWRlbWFya3Mgb2YgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBpbgogICAgdGhlIFVuaXRlZCBTdGF0ZXMsIG90aGVyIGNvdW50cmllcywgb3IgYm90aC48L3NtYWxsPjwvcD4KCiAgICA8cCAvPgoKICA8L2JvZHk+Cgo8L2h0bWw+Cgo=