VFJBTlNMQVRJTkcgVklNIE1FU1NBR0VTCgpUaGlzIGZpbGUgZXhwbGFpbnMgaG93IHRvIGNyZWF0ZSBhbmQgbWFpbnRhaW4gcG8gZmlsZXMgdXNpbmcKZ251LWdldHRleHQud2luMzIsIGEgTUlOR1czMiBXaW5kb3dzIHBvcnQgb2YgZ2V0dGV4dCBieSBGcmFuY28gQmV6CjxmcmFuY28uYmV6QGdteC5kZT4uICBZb3UgY2FuIGZpbmQgaXQgYXQ6CgoJaHR0cDovL2hvbWUuYS1jaXR5LmRlL2ZyYW5jby5iZXovZ2V0dGV4dC9nZXR0ZXh0X3dpbjMyX2VuLmh0bWwKCkZpcnN0IHJlYWQgdGhlIFJFQURNRS50eHQgZmlsZSBmb3IgdGhlIGdlbmVyYWwgcmVtYXJrcwoKClRoZSBmaWxlIHRoYXQgZG9lcyB0aGUgd29yayBpcyBNYWtlX21pbmcubWFrIGluIHRoZSBwbyBkaXJlY3RvcnkuIEl0IGlzIGFuCmFkYXB0YXRpb24gb2YgdGhlIFVuaXggTWFrZWZpbGUsIGJ1dCBpdCBkb2VzIE5PVCB0ZXN0IHRoZSBwcmVzZW5jZSBvZiBhbnkgcG8sCnBvdCwgb3IgbW8gZmlsZXMsIHNvIHVzZSBpdCBhdCB5b3VyIG93biByaXNrIGJ1dCB3aXRoIGNhcmU6IGl0IGNvdWxkIGV2ZW4ga2lsbAp5b3VyIGNhbmFyeS4gSXQgaGFzIGJlZW4gdGVzdGVkIGJ5IG1lIHNldmVyYWwgdGltZXMgKGFuZCB3aXRoIGRpZmZlcmVudApsYW5ndWFnZXMpIHdpdGggc3VjY2Vzcy4KClRoZSBtYWtlIHV0aWxpdHkgbXVzdCBiZSBydW4gZnJvbSB0aGUgcG8gZGlyZWN0b3J5LgoKRmlyc3Qgb2YgYWxsIHlvdSBtdXN0IHNldCB0aGUgZW52aXJvbWVudCB2YXJpYWJsZSBMQU5HVUFHRSB0byB4eCwgd2hlcmUgeHggaXMKdGhlIG5hbWUgb2YgeW91ciBsYW5ndWFnZS4gWW91IGNhbiBkbyBpdCBmcm9tIHRoZSBjb21tYW5kIGxpbmUgb3IgYWRkaW5nIGEKbGluZSB0byB5b3VyIGF1dG9leGVjLmJhdCBmaWxlOiBzZXQgTEFOR1VBR0U9eHguIFlvdSBtdXN0IGFsc28gYWRkIHlvdXIKbGFuZ3VhZ2UgdG8gdGhlIE1ha2VfbWluZy5tYWsgZmlsZSBpbiB0aGUgbGluZXMgTEFOR1VBR0VTLCBNT0ZJTEVTLCBBTkQKUE9GSUxFUy4KCklmIHlvdSBkb24ndCBoYXZlIGEgeHgucG8gZmlsZSwgeW91IG11c3QgY3JlYXRlIGl0IHdpdGggdGhlIGNvbW1hbmQ6CgoJbWFrZSAtZiBNYWtlX21pbmcubWFrIGZpcnN0X3RpbWUKClRoaXMgd2lsbCBwcm9kdWNlIGEgbmV3IGJyYW5kIHh4LnBvIGZpbGUgd2l0aCBhbGwgdGhlIG1lc3NhZ2VzIGluIFZpbSByZWFkeQpmb3IgdHJhbnNsYXRpb24uIFRoZW4geW91IG11c3Qgc291cmNlIHRoZSBjbGVhbnVwLnZpbSBzY3JpcHQgZnJvbSBpbnNpZGUgVmltOwppdCB3aWxsIGNvbW1lbnQgdGhlIHVudHJhbnNsYXRlZCBtZXNzYWdlcyAobm93LCBhbGwpLiBJIHJlY29tbWVuZCB0byB1c2UKc3ludGF4IGhpZ2hsaWdodGluZyBzbyB5b3UgY2FuIGlkZW50aWZ5IHRoZSB1bnRyYW5zbGF0ZWQgbWVzc2FnZXMgZWFzaWx5LgpZb3UgYWxzbyBtdXN0IHJlbW92ZSB0aGUgJy4uXCcgdGhhdCBwcmVwZW5kcyB0aGUgbmFtZSBvZiB0aGUgc291cmNlIGZpbGVzLgooSSBkb24ndCBubyB3aHksIGJ1dCBtYWtlIGlzIHVuYWJsZSB0byBjaGFuZ2UgdGhlIGRpcmVjdG9yeSBmcm9tIHBvIHRvIHNyYyBhbmQKYmFjayB0byBwbywgc28gYWxsIHRoZSB3b3JrIG11c3QgYmUgZG9uZSBmcm9tIHRoZSBwbyBkaXIsIGhlbmNlIHRoZSAnLi5cJykKClRoZW4geW91IG11c3QgZ28gc3RlcCAoMikgYmVsb3cuCgpJZiB5b3UgYXJlIHVwZGF0aW5nIGEgcG8gZmlsZSB5b3UgbXVzdCBmb2xsb3cgdGhlIG5leHQgc3RlcHMgKHRoZXkgYXJlIG5lYXJseQp0aGUgc2FtZSBhcyBpbiB0aGUgVW5peCBjYXNlLCBvbmx5IHRoZSBjb21tYW5kcyBjaGFuZ2UpOgoKKDEpIEFkZCBuZXcgYW5kIGNoYW5nZWQgbWVzc2FnZXMgZnJvbSB0aGUgVmltIHNvdXJjZXM6CgoJbWFrZSAtZiBNYWtlX21pbmcubWFrIHh4CgogICAgVGhpcyB3aWxsIGV4dHJhY3QgYWxsIHRoZSBzdHJpbmdzIGZyb20gVmltIGFuZCBtZXJnZSB0aGVtIGluIHdpdGggdGhlCiAgICBleGlzdGluZyB0cmFuc2xhdGlvbnMuICBSZXF1aXJlcyB0aGUgR05VIGdldHRleHQgdXRpbGl0aWVzLiAgQWxzbyByZXF1aXJlcwogICAgdW5wYWNraW5nIHRoZSBleHRyYSBhcmNoaXZlLgogICAgWW91ciBvcmlnaW5hbCB4eC5wbyBmaWxlIHdpbGwgYmUgY29waWVkIHRvIHh4LnBvLm9yaWcKCiAgICAtLSBBZnRlciB5b3UgZG8gdGhpcywgeW91IE1VU1QgZG8gdGhlIG5leHQgdGhyZWUgc3RlcHMhIC0tCgooMikgVHJhbnNsYXRlCiAgICBTZWUgdGhlIGdldHRleHQgZG9jdW1lbnRhdGlvbiBvbiBob3cgdG8gZG8gdGhpcy4gIFlvdSBjYW4gYWxzbyBmaW5kCiAgICBleGFtcGxlcyBpbiB0aGUgb3RoZXIgcG8gZmlsZXMuCiAgICBTZWFyY2ggdGhlIHBvIGZpbGUgZm9yIGl0ZW1zIHRoYXQgcmVxdWlyZSB0cmFuc2xhdGlvbjoKCS9cI1x+ICAgYW5kIGFsc28gdGhlIGZ1enp5IHRyYW5zbGF0aW9ucywgL1wjLCBmdXp6eQogICAgUmVtb3ZlICIjfiIgYW5kICIjLCBmdXp6eSIgYWZ0ZXIgYWRkaW5nIHRoZSB0cmFuc2xhdGlvbi4KCiAgICBUaGVyZSBpcyBvbmUgc3BlY2lhbCBtZXNzYWdlOgoJbXNnaWQgIk1lc3NhZ2VzIG1haW50YWluZXI6IEJyYW0gTW9vbGVuYWFyIDxCcmFtQHZpbS5vcmc+IgogICAgWW91IHNob3VsZCBpbmNsdWRlIHlvdXIgbmFtZSBhbmQgRS1tYWlsIGFkZHJlc3MgaW5zdGVhZCwgZm9yIGV4YW1wbGU6Cgltc2dzdHIgIkJlcmljaHRlbiD8YmVyc2V0enQgYmVpOiBKb2huIERvZSA8am9obkBkb2Uub3JnPiIKCigzKSBDbGVhbiB1cAogICAgVGhpcyBpcyB2ZXJ5IGltcG9ydGFudCB0byBtYWtlIHN1cmUgdGhlIHRyYW5zbGF0aW9uIHdvcmtzIG9uIGFsbCBzeXN0ZW1zLgogICAgQ29tbWVudC1vdXQgYWxsIG5vbi10cmFuc2xhdGVkIHN0cmluZ3MuICBUaGVyZSBhcmUgdHdvIHR5cGVzOgogICAgLSBpdGVtcyBtYXJrZWQgd2l0aCAiIywgZnV6enkiCiAgICAtIGl0ZW1zIHdpdGggYW4gZW1wdHkgbXNnc3RyCiAgICBZb3UgY2FuIGRvIHRoaXMgd2l0aCB0aGUgY2xlYW51cC52aW0gc2NyaXB0OgoKCTpzb3VyY2UgY2xlYW51cC52aW0KCig0KSBDaGVjazoKCgl2aW0gLVMgY2hlY2sudmltIHh4LnBvCgltYWtlIC1mIE1ha2VfbWluZy5tYWsgeHgubW8KCiAgICBMb29rIG91dCBmb3Igc3ludGF4IGVycm9ycyBhbmQgZml4IHRoZW0uCgooNSkgVGhpcyBpcyBhbiBleHRyYSBzdGVwLCA7LSkuIElmIHlvdSB3YW50IHRoZSB2aW0ubW8gZmlsZSBpbnN0YWxsZWQgaW4geW91cgogICAgc3lzdGVtIHlvdSBtdXN0IHJ1bjoKCgltYWtlIC1mIE1ha2VfbWluZy5tYWsgaW5zdGFsbAoKICAgIFRoaXMgd2lsbCBjcmVhdGUgdGhlIHh4XExDX01FU1NBR0VTIGRpcmVjdG9yeSAoaWYgaXQgZG9lcyBub3QgZXhpc3QpIGFuZAogICAgd2lsbCBjb3B5IHZpbS5wbyB0byBpdC4KCig2KSBBbm90aGVyIGV4dHJhIHN0ZXAgOy0pKS4gVGhlIGNvbW1hbmQ6CgoJbWFrZSAtZiBNYWtlX21pbmcubWFrIGNsZWFuCgogICAgd2lsbCBkZWxldGUgdGhlIHRlbXAgZmlsZXMgY3JlYXRlZCBkdXJpbmcgdGhlIHByb2Nlc3MuCgpTdWdnZXN0aW9ucyB3aWxsIGJlIHdlbGNvbWVkLgoKRWR1YXJkbyBGLiBBbWF0cmlhIDxlZmVybmExQHBsYXRlYS5wbnRpYy5tZWMuZXM+CgpIYXBweSBWaW1taW5nIHdpdGggTkxTISEKCnZpbTp0dz03ODoK