Km1sYW5nLnR4dCogICAgIEZvciBWaW0gdmVyc2lvbiA3LjAuICBMYXN0IGNoYW5nZTogMjAwNCBGZWIgMjQKCgoJCSAgVklNIFJFRkVSRU5DRSBNQU5VQUwgICAgYnkgQnJhbSBNb29sZW5hYXIKCgpNdWx0aS1sYW5ndWFnZSBmZWF0dXJlcwkJCQkqbXVsdGlsYW5nKiAqbXVsdGktbGFuZyoKClRoaXMgaXMgYWJvdXQgdXNpbmcgbWVzc2FnZXMgYW5kIG1lbnVzIGluIHZhcmlvdXMgbGFuZ3VhZ2VzLiAgRm9yIGVkaXRpbmcKbXVsdGktYnl0ZSB0ZXh0IHNlZSB8bXVsdGlieXRlfC4KClRoZSBiYXNpY3MgYXJlIGV4cGxhaW5lZCBpbiB0aGUgdXNlciBtYW51YWw6IHx1c3JfNDUudHh0fC4KCjEuIE1lc3NhZ2VzCQkJfG11bHRpbGFuZy1tZXNzYWdlc3wKMi4gTWVudXMJCQl8bXVsdGlsYW5nLW1lbnVzfAozLiBTY3JpcHRzCQkJfG11bHRpbGFuZy1zY3JpcHRzfAoKQWxzbyBzZWUgfGhlbHAtdHJhbnNsYXRlZHwgZm9yIG11bHRpLWxhbmd1YWdlIGhlbHAuCgp7VmkgZG9lcyBub3QgaGF2ZSBhbnkgb2YgdGhlc2UgZmVhdHVyZXN9Cntub3QgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aG91dCB0aGUgfCttdWx0aV9sYW5nfCBmZWF0dXJlfQoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIE1lc3NhZ2VzCQkJCQkJKm11bHRpbGFuZy1tZXNzYWdlcyoKClZpbSBwaWNrcyB1cCB0aGUgbG9jYWxlIGZyb20gdGhlIGVudmlyb25tZW50LiAgSW4gbW9zdCBjYXNlcyB0aGlzIG1lYW5zIFZpbQp3aWxsIHVzZSB0aGUgbGFuZ3VhZ2UgdGhhdCB5b3UgcHJlZmVyLCB1bmxlc3MgaXQncyBub3QgYXZhaWxhYmxlLgoKVG8gc2VlIGEgbGlzdCBvZiBzdXBwb3J0ZWQgbG9jYWxlIG5hbWVzIG9uIHlvdXIgc3lzdGVtLCBsb29rIGluIG9uZSBvZiB0aGVzZQpkaXJlY3RvcmllcyAoZm9yIFVuaXgpOgoJL3Vzci9saWIvbG9jYWxlIH4KCS91c3Ivc2hhcmUvbG9jYWxlIH4KVW5mb3J0dW5hdGVseSwgdXBwZXIvbG93ZXJjYXNlIGRpZmZlcmVuY2VzIG1hdHRlci4gIEFsc28gd2F0Y2ggb3V0IGZvciB0aGUKdXNlIG9mICItIiBhbmQgIl8iLgoKCQkJCQkgICAgKjpsYW4qICo6bGFuZyogKjpsYW5ndWFnZSogKkUxOTcqCjpsYW5bZ3VhZ2VdCjpsYW5bZ3VhZ2VdIG1lc1tzYWdlc10KOmxhbltndWFnZV0gY3R5W3BlXQo6bGFuW2d1YWdlXSB0aW1bZV0KCQkJUHJpbnQgdGhlIGN1cnJlbnQgbGFuZ3VhZ2UgKGFrYSBsb2NhbGUpLgoJCQlXaXRoIHRoZSAibWVzc2FnZXMiIGFyZ3VtZW50IHRoZSBsYW5ndWFnZSB1c2VkIGZvcgoJCQltZXNzYWdlcyBpcyBwcmludGVkLiAgVGVjaG5pY2FsOiBMQ19NRVNTQUdFUy4KCQkJV2l0aCB0aGUgImN0eXBlIiBhcmd1bWVudCB0aGUgbGFuZ3VhZ2UgdXNlZCBmb3IKCQkJY2hhcmFjdGVyIGVuY29kaW5nIGlzIHByaW50ZWQuICBUZWNobmljYWw6IExDX0NUWVBFLgoJCQlXaXRoIHRoZSAidGltZSIgYXJndW1lbnQgdGhlIGxhbmd1YWdlIHVzZWQgZm9yCgkJCXN0cmZ0aW1lKCkgaXMgcHJpbnRlZC4gIFRlY2huaWNhbDogTENfVElNRS4KCQkJV2l0aG91dCBhcmd1bWVudCBhbGwgcGFydHMgb2YgdGhlIGxvY2FsZSBhcmUgcHJpbnRlZAoJCQkodGhpcyBpcyBzeXN0ZW0gZGVwZW5kZW50KS4KCQkJVGhlIGN1cnJlbnQgbGFuZ3VhZ2UgY2FuIGFsc28gYmUgb2J0YWluZWQgd2l0aCB0aGUKCQkJfHY6bGFuZ3wsIHx2OmN0eXBlfCBhbmQgfHY6bGNfdGltZXwgdmFyaWFibGVzLgoKOmxhbltndWFnZV0ge25hbWV9CjpsYW5bZ3VhZ2VdIG1lc1tzYWdlc10ge25hbWV9CjpsYW5bZ3VhZ2VdIGN0eVtwZV0ge25hbWV9CjpsYW5bZ3VhZ2VdIHRpbVtlXSB7bmFtZX0KCQkJU2V0IHRoZSBjdXJyZW50IGxhbmd1YWdlIChha2EgbG9jYWxlKSB0byB7bmFtZX0uCgkJCVRoZSBsb2NhbGUge25hbWV9IG11c3QgYmUgYSB2YWxpZCBsb2NhbGUgb24geW91cgoJCQlzeXN0ZW0uICBTb21lIHN5c3RlbXMgYWNjZXB0IGFsaWFzZXMgbGlrZSAiZW4iIG9yCgkJCSJlbl9VUyIsIGJ1dCBzb21lIG9ubHkgYWNjZXB0IHRoZSBmdWxsIHNwZWNpZmljYXRpb24KCQkJbGlrZSAiZW5fVVMuSVNPXzg4NTktMSIuCgkJCVdpdGggdGhlICJtZXNzYWdlcyIgYXJndW1lbnQgdGhlIGxhbmd1YWdlIHVzZWQgZm9yCgkJCW1lc3NhZ2VzIGlzIHNldC4gIFRoaXMgY2FuIGJlIGRpZmZlcmVudCB3aGVuIHlvdSB3YW50LAoJCQlmb3IgZXhhbXBsZSwgRW5nbGlzaCBtZXNzYWdlcyB3aGlsZSBlZGl0aW5nIEphcGFuZXNlCgkJCXRleHQuICBUaGlzIHNldHMgJExDX01FU1NBR0VTLgoJCQlXaXRoIHRoZSAiY3R5cGUiIGFyZ3VtZW50IHRoZSBsYW5ndWFnZSB1c2VkIGZvcgoJCQljaGFyYWN0ZXIgZW5jb2RpbmcgaXMgc2V0LiAgVGhpcyBhZmZlY3RzIHRoZSBsaWJyYXJpZXMKCQkJdGhhdCBWaW0gd2FzIGxpbmtlZCB3aXRoLiAgSXQncyB1bnVzdWFsIHRvIHNldCB0aGlzIHRvCgkJCWEgZGlmZmVyZW50IHZhbHVlIGZyb20gJ2VuY29kaW5nJy4gIFRoaXMgc2V0cwoJCQkkTENfQ1RZUEUuCgkJCVdpdGggdGhlICJ0aW1lIiBhcmd1bWVudCB0aGUgbGFuZ3VhZ2UgdXNlZCBmb3IgdGltZQoJCQlhbmQgZGF0ZSBtZXNzYWdlcyBpcyBzZXQuICBUaGlzIGFmZmVjdHMgc3RyZnRpbWUoKS4KCQkJVGhpcyBzZXRzICRMQ19USU1FLgoJCQlXaXRob3V0IGFuIGFyZ3VtZW50IGJvdGggYXJlIHNldCwgYW5kIGFkZGl0aW9uYWxseQoJCQkkTEFORyBpcyBzZXQuCgkJCVRoaXMgd2lsbCBtYWtlIGEgZGlmZmVyZW5jZSBmb3IgaXRlbXMgdGhhdCBkZXBlbmQgb24KCQkJdGhlIGxhbmd1YWdlIChzb21lIG1lc3NhZ2VzLCB0aW1lIGFuZCBkYXRlIGZvcm1hdCkuCgkJCU5vdCBmdWxseSBzdXBwb3J0ZWQgb24gYWxsIHN5c3RlbXMKCQkJSWYgdGhpcyBmYWlscyB0aGVyZSB3aWxsIGJlIGFuIGVycm9yIG1lc3NhZ2UuICBJZiBpdAoJCQlzdWNjZWVkcyB0aGVyZSBpcyBubyBtZXNzYWdlLiAgRXhhbXBsZTogPgoJCQkJOmxhbmd1YWdlCgkJCQlDdXJyZW50IGxhbmd1YWdlOiBDCgkJCQk6bGFuZ3VhZ2UgZGVfREUuSVNPXzg4NTktMQoJCQkJOmxhbmd1YWdlIG1lcwoJCQkJQ3VycmVudCBtZXNzYWdlcyBsYW5ndWFnZTogZGVfREUuSVNPXzg4NTktMQoJCQkJOmxhbmcgbWVzIGVuCjwKCk1TLVdJTkRPV1MgTUVTU0FHRSBUUkFOU0xBVElPTlMJCQkJKndpbjMyLWdldHRleHQqCgpJZiB5b3UgdXNlZCB0aGUgc2VsZi1pbnN0YWxsaW5nIC5leGUgZmlsZSwgbWVzc2FnZSB0cmFuc2xhdGlvbnMgc2hvdWxkIHdvcmsKYWxyZWFkeS4gIE90aGVyd2lzZSBnZXQgdGhlIGxpYmludGwuZGxsIGZpbGUgaWYgeW91IGRvbid0IGhhdmUgaXQgeWV0OgoKCWh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvZ2V0dGV4dAoKVGhpcyBhbHNvIGNvbnRhaW5zIHRvb2xzIHhnZXR0ZXh0LCBtc2dmb3JtYXQgYW5kIG90aGVycy4KCmxpYmludGwuZGxsIHNob3VsZCBiZSBwbGFjZWQgaW4gc2FtZSBkaXJlY3Rvcnkgd2l0aCAoZyl2aW0uZXhlLCBvciBzb21lCnBsYWNlIHdoZXJlIFBBVEggZW52aXJvbm1lbnQgdmFsdWUgZGVzY3JpYmUuICBNZXNzYWdlIGZpbGVzICh2aW0ubW8pCmhhdmUgdG8gYmUgcGxhY2VkIGluICIkVklNUlVOVElNRS9sYW5nL3h4L0xDX01FU1NBR0VTIiwgd2hlcmUgInh4IiBpcyB0aGUKYWJicmV2aWF0aW9uIG9mIHRoZSBsYW5ndWFnZSAobW9zdGx5IHR3byBsZXR0ZXJzKS4KCklmIHlvdSB3cml0ZSB5b3VyIG93biB0cmFuc2xhdGlvbnMgeW91IG5lZWQgdG8gZ2VuZXJhdGUgdGhlIC5wbyBmaWxlIGFuZApjb252ZXJ0IGl0IHRvIGEgLm1vIGZpbGUuICBZb3UgbmVlZCB0byBnZXQgdGhlIHNvdXJjZSBkaXN0cmlidXRpb24gYW5kIHJlYWQKdGhlIGZpbGUgInNyYy9wby9SRUFETUUudHh0Ii4KClRvIG92ZXJydWxlIHRoZSBhdXRvbWF0aWMgY2hvaWNlIG9mIHRoZSBsYW5ndWFnZSwgc2V0IHRoZSAkTEFORyB2YXJpYWJsZSB0bwp0aGUgbGFuZ3VhZ2Ugb2YgeW91ciBjaG9pY2UuICB1c2UgImVuIiB0byBkaXNhYmxlIHRyYW5zbGF0aW9ucy4gPgoKICA6bGV0ICRMQU5HID0gJ2phJwoKKHRleHQgZm9yIFdpbmRvd3MgYnkgTXVyYW9rYSBUYXJvKQoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIE1lbnVzCQkJCQkJKm11bHRpbGFuZy1tZW51cyoKClNlZSB8NDUuMnwgZm9yIHRoZSBiYXNpY3MuCgpOb3RlIHRoYXQgaWYgY2hhbmdlcyBoYXZlIGJlZW4gbWFkZSB0byB0aGUgbWVudXMgYWZ0ZXIgdGhlIHRyYW5zbGF0aW9uIHdhcwpkb25lLCBzb21lIG9mIHRoZSBtZW51cyBtYXkgYmUgc2hvd24gaW4gRW5nbGlzaC4gIFBsZWFzZSB0cnkgY29udGFjdGluZyB0aGUKbWFpbnRhaW5lciBvZiB0aGUgdHJhbnNsYXRpb24gYW5kIGFzayBoaW0gdG8gdXBkYXRlIGl0LiAgWW91IGNhbiBmaW5kIHRoZQpuYW1lIGFuZCBlLW1haWwgYWRkcmVzcyBvZiB0aGUgdHJhbnNsYXRvciBpbgoiJFZJTVJVTlRJTUUvbGFuZy9tZW51XzxsYW5nPi52aW0iLgoKVG8gc2V0IHRoZSBmb250IChvciBmb250c2V0KSB0byB1c2UgZm9yIHRoZSBtZW51cywgdXNlIHRoZSB8OmhpZ2hsaWdodHwKY29tbWFuZC4gIEV4YW1wbGU6ID4KCgk6aGlnaGxpZ2h0IE1lbnUgZm9udD1rMTIscjEyCgoKQUxJQVMgTE9DQUxFIE5BTUVTCgpVbmZvcnR1bmF0ZWx5LCB0aGUgbG9jYWxlIG5hbWVzIGFyZSBkaWZmZXJlbnQgb24gdmFyaW91cyBzeXN0ZW1zLCBldmVuIHRob3VnaAp0aGV5IGFyZSBmb3IgdGhlIHNhbWUgbGFuZ3VhZ2UgYW5kIGVuY29kaW5nLiAgSWYgeW91IGRvIG5vdCBnZXQgdGhlIG1lbnUKdHJhbnNsYXRpb25zIHlvdSBleHBlY3RlZCwgY2hlY2sgdGhlIG91dHB1dCBvZiB0aGlzIGNvbW1hbmQ6ID4KCgllY2hvIHY6bGFuZwoKTm93IGNoZWNrIHRoZSAiJFZJTVJVTlRJTUUvbGFuZyIgZGlyZWN0b3J5IGZvciBtZW51IHRyYW5zbGF0aW9uIGZpbGVzIHRoYXQgdXNlCmEgc2ltaWxhciBsYW5ndWFnZS4gIEEgZGlmZmVyZW5jZSBpbiBhICItIiBiZWluZyBhICJfIiBhbHJlYWR5IGNhdXNlcyBhIGZpbGUKbm90IHRvIGJlIGZvdW5kISAgQW5vdGhlciBjb21tb24gZGlmZmVyZW5jZSB0byB3YXRjaCBvdXQgZm9yIGlzICJpc284ODU5LTEiCnZlcnN1cyAiaXNvXzg4NTktMSIuICBGb3J0dW5hdGVseSBWaW0gbWFrZXMgYWxsIG5hbWVzIGxvd2VyY2FzZSwgdGh1cyB5b3UKZG9uJ3QgaGF2ZSB0byB3b3JyeSBhYm91dCBjYXNlIGRpZmZlcmVuY2VzLiAgU3BhY2VzIGFyZSBjaGFuZ2VkIHRvCnVuZGVyc2NvcmVzLCB0byBhdm9pZCBoYXZpbmcgdG8gZXNjYXBlIHRoZW0uCgpJZiB5b3UgZmluZCBhIG1lbnUgdHJhbnNsYXRpb24gZmlsZSBmb3IgeW91ciBsYW5ndWFnZSB3aXRoIGEgZGlmZmVyZW50IG5hbWUsCmNyZWF0ZSBhIGZpbGUgaW4geW91ciBvd24gcnVudGltZSBkaXJlY3RvcnkgdG8gbG9hZCB0aGF0IG9uZS4gIFRoZSBuYW1lIG9mCnRoYXQgZmlsZSBjb3VsZCBiZTogPgoKCX4vLnZpbS9sYW5nL21lbnVfPHY6bGFuZz4udmltCgpDaGVjayB0aGUgJ3J1bnRpbWVwYXRoJyBvcHRpb24gZm9yIGRpcmVjdG9yaWVzIHdoaWNoIGFyZSBzZWFyY2hlZC4gIEluIHRoYXQKZmlsZSBwdXQgYSBjb21tYW5kIHRvIGxvYWQgdGhlIG1lbnUgZmlsZSB3aXRoIHRoZSBvdGhlciBuYW1lOiA+CgoJcnVudGltZSBsYW5nL21lbnVfPG90aGVyX2xhbmc+LnZpbQoKClRSQU5TTEFUSU5HIE1FTlVTCgpJZiB5b3Ugd2FudCB0byBkbyB5b3VyIG93biB0cmFuc2xhdGlvbnMsIHlvdSBjYW4gdXNlIHRoZSB8Om1lbnV0cmFuc3wgY29tbWFuZCwKZXhwbGFpbmVkIGJlbG93LiAgSXQgaXMgcmVjb21tZW5kZWQgdG8gcHV0IHRoZSB0cmFuc2xhdGlvbnMgZm9yIG9uZSBsYW5ndWFnZQppbiBhIFZpbSBzY3JpcHQuICBGb3IgYSBsYW5ndWFnZSB0aGF0IGhhcyBubyB0cmFuc2xhdGlvbiB5ZXQsIHBsZWFzZSBjb25zaWRlcgpiZWNvbWluZyB0aGUgbWFpbnRhaW5lciBhbmQgbWFrZSB5b3VyIHRyYW5zbGF0aW9ucyBhdmFpbGFibGUgdG8gYWxsIFZpbSB1c2Vycy4KU2VuZCBhbiBlLW1haWwgdG8gdGhlIFZpbSBtYWludGFpbmVyIDxtYWludGFpbmVyQHZpbS5vcmc+LgoKCQkJCQkqOm1lbnV0KiAqOm1lbnV0cmFucyogKjptZW51dHJhbnNsYXRlKgo6bWVudXRbcmFuc2xhdGVdIGNsZWFyCgkJCUNsZWFyIGFsbCBtZW51IHRyYW5zbGF0aW9ucy4KCjptZW51dFtyYW5zbGF0ZV0ge2VuZ2xpc2h9IHtteWxhbmd9CgkJCVRyYW5zbGF0ZSBtZW51IG5hbWUge2VuZ2xpc2h9IHRvIHtteWxhbmd9LiAgQWxsCgkJCXNwZWNpYWwgY2hhcmFjdGVycyBsaWtlICImIiBhbmQgIjxUYWI+IiBuZWVkIHRvIGJlCgkJCWluY2x1ZGVkLiAgU3BhY2VzIGFuZCBkb3RzIG5lZWQgdG8gYmUgZXNjYXBlZCB3aXRoIGEKCQkJYmFja3NsYXNoLCBqdXN0IGxpa2UgaW4gb3RoZXIgfDptZW51fCBjb21tYW5kcy4KClNlZSB0aGUgJFZJTVJVTlRJTUUvbGFuZyBkaXJlY3RvcnkgZm9yIGV4YW1wbGVzLgoKVG8gdHJ5IG91dCB5b3VyIHRyYW5zbGF0aW9ucyB5b3UgZmlyc3QgaGF2ZSB0byByZW1vdmUgYWxsIG1lbnVzLiAgVGhpcyBpcyBob3cKeW91IGNhbiBkbyBpdCB3aXRob3V0IHJlc3RhcnRpbmcgVmltOiA+Cgk6c291cmNlICRWSU1SVU5USU1FL2RlbG1lbnUudmltCgk6c291cmNlIDx5b3VyLW5ldy1tZW51LWZpbGU+Cgk6c291cmNlICRWSU1SVU5USU1FL21lbnUudmltCgpFYWNoIHBhcnQgb2YgYSBtZW51IHBhdGggaXMgdHJhbnNsYXRlZCBzZXBhcmF0ZWx5LiAgVGhlIHJlc3VsdCBpcyB0aGF0IHdoZW4KIkhlbHAiIGlzIHRyYW5zbGF0ZWQgdG8gIkhpbGZlIiBhbmQgIk92ZXJ2aWV3IiB0byAi3GJlcmJsaWNrIiB0aGVuCiJIZWxwLk92ZXJ2aWV3IiB3aWxsIGJlIHRyYW5zbGF0ZWQgdG8gIkhpbGZlLtxiZXJibGljayIuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gU2NyaXB0cwkJCQkJCSptdWx0aWxhbmctc2NyaXB0cyoKCkluIFZpbSBzY3JpcHRzIHlvdSBjYW4gdXNlIHRoZSB8djpsYW5nfCB2YXJpYWJsZSB0byBnZXQgdGhlIGN1cnJlbnQgbGFuZ3VhZ2UKKGxvY2FsZSkuICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAiQyIgb3IgY29tZXMgZnJvbSB0aGUgJExBTkcgZW52aXJvbm1lbnQKdmFyaWFibGUuCgpUaGUgZm9sbG93aW5nIGV4YW1wbGUgc2hvd3MgaG93IHRoaXMgdmFyaWFibGUgaXMgdXNlZCBpbiBhIHNpbXBsZSB3YXksIHRvIG1ha2UKYSBtZXNzYWdlIGFkYXB0IHRvIGxhbmd1YWdlIHByZWZlcmVuY2VzIG9mIHRoZSB1c2VyLCA+CgoJOmlmIHY6bGFuZyA9fiAiZGVfREUiCgk6ICBlY2hvICJHdXRlbiBNb3JnZW4iCgk6ZWxzZQoJOiAgZWNobyAiR29vZCBtb3JuaW5nIgoJOmVuZGlmCjwKCiB2aW06dHc9Nzg6c3c9NDp0cz04OmZ0PWhlbHA6bm9ybDoK