ICAgICAgICAgICAgICAgICAgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIQVByb3h5IGhvdy10bwogICAgICAgICAgICAgICAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlcnNpb24gMS42LWRldgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbGx5IHRhcnJlYXUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwMTQvMDYvMTkKCgoxKSBIb3cgdG8gYnVpbGQgaXQKLS0tLS0tLS0tLS0tLS0tLS0tCgpGaXJzdCwgcGxlYXNlIG5vdGUgdGhhdCB0aGlzIHZlcnNpb24gaXMgYSBkZXZlbG9wbWVudCB2ZXJzaW9uLCBzbyBpbiBnZW5lcmFsIGlmCnlvdSBhcmUgbm90IHVzZWQgdG8gYnVpbGQgZnJvbSBzb3VyY2VzIG9yIGlmIHlvdSBkb24ndCBoYXZlIHRoZSB0aW1lIHRvIHRyYWNrCnZlcnkgZnJlcXVlbnQgdXBkYXRlcywgaXQgaXMgcmVjb21tZW5kZWQgdGhhdCBpbnN0ZWFkIHlvdSBzd2l0Y2ggdG8gdGhlIHN0YWJsZQp2ZXJzaW9uICgxLjUpIG9yIGZvbGxvdyB0aGUgcGFja2FnZWQgdXBkYXRlcyBwcm92aWRlZCBieSB5b3VyIHNvZnR3YXJlIHZlbmRvcgpvciBMaW51eCBkaXN0cmlidXRpb24uIE1vc3Qgb2YgdGhlbSBhcmUgdGFraW5nIHRoaXMgdGFzayBzZXJpb3VzbHkgYW5kIGFyZQpkb2luZyBhIGdvb2Qgam9iLiBJZiBmb3IgYW55IHJlYXNvbiB5b3UnZCBwcmVmZXIgYSBkaWZmZXJlbnQgdmVyc2lvbiB0aGFuIHRoZQpvbmUgcGFja2FnZWQgZm9yIHlvdXIgc3lzdGVtLCBvciB0byBnZXQgc29tZSBjb21tZXJjaWFsIHN1cHBvcnQsIG90aGVyIGNob2ljZXMKYXJlIGF2YWlsYWJsZSBhdCA6CgogICAgICAgICAgICAgICAgICAgICAgICBodHRwOi8vd3d3LmhhcHJveHkuY29tLwoKVG8gYnVpbGQgaGFwcm94eSwgeW91IHdpbGwgbmVlZCA6CiAgLSBHTlUgbWFrZS4gTmVpdGhlciBTb2xhcmlzIG5vciBPcGVuQlNEJ3MgbWFrZSB3b3JrIHdpdGggdGhlIEdOVSBNYWtlZmlsZS4KICAgIElmIHlvdSBnZXQgbWFueSBzeW50YXggZXJyb3JzIHdoZW4gcnVubmluZyAibWFrZSIsIHlvdSBtYXkgd2FudCB0byByZXRyeQogICAgd2l0aCAiZ21ha2UiIHdoaWNoIGlzIHRoZSBuYW1lIGNvbW1vbmx5IHVzZWQgZm9yIEdOVSBtYWtlIG9uIEJTRCBzeXN0ZW1zLgogIC0gR0NDIGJldHdlZW4gMi45NSBhbmQgNC44LiBPdGhlcnMgbWF5IHdvcmssIGJ1dCBub3QgdGVzdGVkLgogIC0gR05VIGxkCgpBbHNvLCB5b3UgbWlnaHQgd2FudCB0byBidWlsZCB3aXRoIGxpYnBjcmUgc3VwcG9ydCwgd2hpY2ggd2lsbCBwcm92aWRlIGEgdmVyeQplZmZpY2llbnQgcmVnZXggaW1wbGVtZW50YXRpb24gYW5kIHdpbGwgYWxzbyBmaXggc29tZSBiYWRuZXNzIG9uIFNvbGFyaXMnIG9uZS4KClRvIGJ1aWxkIGhhcHJveHksIHlvdSBoYXZlIHRvIGNob29zZSB5b3VyIHRhcmdldCBPUyBhbW9uZ3N0IHRoZSBmb2xsb3dpbmcgb25lcwphbmQgYXNzaWduIGl0IHRvIHRoZSBUQVJHRVQgdmFyaWFibGUgOgoKICAtIGxpbnV4MjIgICAgIGZvciBMaW51eCAyLjIKICAtIGxpbnV4MjQgICAgIGZvciBMaW51eCAyLjQgYW5kIGFib3ZlIChkZWZhdWx0KQogIC0gbGludXgyNGUgICAgZm9yIExpbnV4IDIuNCB3aXRoIHN1cHBvcnQgZm9yIGEgd29ya2luZyBlcG9sbCAoPiAwLjIxKQogIC0gbGludXgyNiAgICAgZm9yIExpbnV4IDIuNiBhbmQgYWJvdmUKICAtIGxpbnV4MjYyOCAgIGZvciBMaW51eCAyLjYuMjgsIDMueCwgYW5kIGFib3ZlIChlbmFibGVzIHNwbGljZSBhbmQgdHByb3h5KQogIC0gc29sYXJpcyAgICAgZm9yIFNvbGFyaXMgOCBvciAxMCAob3RoZXJzIHVudGVzdGVkKQogIC0gZnJlZWJzZCAgICAgZm9yIEZyZWVCU0QgNSB0byAxMCAob3RoZXJzIHVudGVzdGVkKQogIC0gb3N4ICAgICAgICAgZm9yIE1hYyBPUy9YCiAgLSBvcGVuYnNkICAgICBmb3IgT3BlbkJTRCAzLjEgdG8gNS4yIChvdGhlcnMgdW50ZXN0ZWQpCiAgLSBhaXg1MSAgICAgICBmb3IgQUlYIDUuMQogIC0gYWl4NTIgICAgICAgZm9yIEFJWCA1LjIKICAtIGN5Z3dpbiAgICAgIGZvciBDeWd3aW4KICAtIGdlbmVyaWMgICAgIGZvciBhbnkgb3RoZXIgT1Mgb3IgdmVyc2lvbi4KICAtIGN1c3RvbSAgICAgIHRvIG1hbnVhbGx5IGFkanVzdCBldmVyeSBzZXR0aW5nCgpZb3UgbWF5IGFsc28gY2hvb3NlIHlvdXIgQ1BVIHRvIGJlbmVmaXQgZnJvbSBzb21lIG9wdGltaXphdGlvbnMuIFRoaXMgaXMKcGFydGljdWxhcmx5IGltcG9ydGFudCBvbiBVbHRyYVNwYXJjIG1hY2hpbmVzLiBGb3IgdGhpcywgeW91IGNhbiBhc3NpZ24Kb25lIG9mIHRoZSBmb2xsb3dpbmcgY2hvaWNlcyB0byB0aGUgQ1BVIHZhcmlhYmxlIDoKCiAgLSBpNjg2IGZvciBpbnRlbCBQZW50aXVtUHJvLCBQZW50aXVtIDIgYW5kIGFib3ZlLCBBTUQgQXRobG9uCiAgLSBpNTg2IGZvciBpbnRlbCBQZW50aXVtLCBBTUQgSzYsIFZJQSBDMy4KICAtIHVsdHJhc3BhcmMgOiBTdW4gVWx0cmFTcGFyYyBJL0lJL0lJSS9JViBwcm9jZXNzb3IKICAtIG5hdGl2ZSA6IHVzZSB0aGUgYnVpbGQgbWFjaGluZSdzIHNwZWNpZmljIHByb2Nlc3NvciBvcHRpbWl6YXRpb25zCiAgLSBnZW5lcmljIDogYW55IG90aGVyIHByb2Nlc3NvciBvciBubyBzcGVjaWZpYyBvcHRpbWl6YXRpb24uIChkZWZhdWx0KQoKQWx0ZXJuYXRpdmVseSwgeW91IG1heSBqdXN0IHNldCB0aGUgQ1BVX0NGTEFHUyB2YWx1ZSB0byB0aGUgb3B0aW1hbCBHQ0Mgb3B0aW9ucwpmb3IgeW91ciBwbGF0Zm9ybS4KCllvdSBtYXkgd2FudCB0byBidWlsZCBzcGVjaWZpYyB0YXJnZXQgYmluYXJpZXMgd2hpY2ggZG8gbm90IG1hdGNoIHlvdXIgbmF0aXZlCmNvbXBpbGVyJ3MgdGFyZ2V0LiBUaGlzIGlzIHBhcnRpY3VsYXJseSB0cnVlIG9uIDY0LWJpdCBzeXN0ZW1zIHdoZW4geW91IHdhbnQKdG8gYnVpbGQgYSAzMi1iaXQgYmluYXJ5LiBVc2UgdGhlIEFSQ0ggdmFyaWFibGUgZm9yIHRoaXMgcHVycG9zZS4gUmlnaHQgbm93Cml0IG9ubHkga25vd3MgYWJvdXQgYSBmZXcgeDg2IHZhcmlhbnRzIChpMzg2LGk0ODYsaTU4NixpNjg2LHg4Nl82NCksIHR3bwpnZW5lcmljIG9uZXMgKDMyLDY0KSBhbmQgc2V0cyAtbTMyLy1tNjQgYXMgd2VsbCBhcyAtbWFyY2g9PGFyY2g+IGFjY29yZGluZ2x5LgoKSWYgeW91ciBzeXN0ZW0gc3VwcG9ydHMgUENSRSAoUGVybCBDb21wYXRpYmxlIFJlZ3VsYXIgRXhwcmVzc2lvbnMpLCB0aGVuIHlvdQpyZWFsbHkgc2hvdWxkIGJ1aWxkIHdpdGggbGlicGNyZSB3aGljaCBpcyBiZXR3ZWVuIDIgYW5kIDEwIHRpbWVzIGZhc3RlciB0aGFuCm90aGVyIGxpYmMgaW1wbGVtZW50YXRpb25zLiBSZWdleCBhcmUgdXNlZCBmb3IgaGVhZGVyIHByb2Nlc3NpbmcgKGRlbGV0aW9uLApyZXdyaXRpbmcsIGFsbG93LCBkZW55KS4gVGhlIG9ubHkgaW5jb252ZW5pZW50IG9mIGxpYnBjcmUgaXMgdGhhdCBpdCBpcyBub3QKeWV0IHdpZGVseSBzcHJlYWQsIHNvIGlmIHlvdSBidWlsZCBmb3Igb3RoZXIgc3lzdGVtcywgeW91IG1pZ2h0IGdldCBpbnRvCnRyb3VibGUgaWYgdGhleSBkb24ndCBoYXZlIHRoZSBkeW5hbWljIGxpYnJhcnkuIEluIHRoaXMgc2l0dWF0aW9uLCB5b3Ugc2hvdWxkCnN0YXRpY2FsbHkgbGluayBsaWJwY3JlIGludG8gaGFwcm94eSBzbyB0aGF0IGl0IHdpbGwgbm90IGJlIG5lY2Vzc2FyeSB0bwppbnN0YWxsIGl0IG9uIHRhcmdldCBzeXN0ZW1zLiBBdmFpbGFibGUgYnVpbGQgb3B0aW9ucyBmb3IgUENSRSBhcmUgOgoKICAtIFVTRV9QQ1JFPTEgdG8gdXNlIGxpYnBjcmUsIGluIHdoYXRldmVyIGZvcm0gaXMgYXZhaWxhYmxlIG9uIHlvdXIgc3lzdGVtCiAgICAoc2hhcmVkIG9yIHN0YXRpYykKCiAgLSBVU0VfU1RBVElDX1BDUkU9MSB0byB1c2UgYSBzdGF0aWMgdmVyc2lvbiBvZiBsaWJwY3JlIGV2ZW4gaWYgdGhlIGR5bmFtaWMKICAgIG9uZSBpcyBhdmFpbGFibGUuIFRoaXMgd2lsbCBlbmhhbmNlIHBvcnRhYmlsaXR5LgoKICAtIHdpdGggbm8gb3B0aW9uLCB1c2UgeW91ciBPUyBsaWJjJ3Mgc3RhbmRhcmQgcmVnZXggaW1wbGVtZW50YXRpb24gKGRlZmF1bHQpLgogICAgV2FybmluZyEgZ3JvdXAgcmVmZXJlbmNlcyBvbiBTb2xhcmlzIHNlZW0gYnJva2VuLiBVc2Ugc3RhdGljLXBjcmUgd2hlbmV2ZXIKICAgIHBvc3NpYmxlLgoKUmVjZW50IHN5c3RlbXMgY2FuIHJlc29sdmUgSVB2NiBob3N0IG5hbWVzIHVzaW5nIGdldGFkZHJpbmZvKCkuIFRoaXMgcHJpbWl0aXZlCmlzIG5vdCBwcmVzZW50IGluIGFsbCBsaWJjcyBhbmQgZG9lcyBub3Qgd29yayBpbiBhbGwgb2YgdGhlbSBlaXRoZXIuIFN1cHBvcnQgaW4KZ2xpYmMgd2FzIGJyb2tlbiBiZWZvcmUgMi4zLiBTb21lIGVtYmVkZGVkIGxpYnMgbWF5IG5vdCBwcm9wZXJseSB3b3JrIGVpdGhlciwKdGh1cywgc3VwcG9ydCBpcyBkaXNhYmxlZCBieSBkZWZhdWx0LCBtZWFuaW5nIHRoYXQgc29tZSBob3N0IG5hbWVzIHdoaWNoIG9ubHkKcmVzb2x2ZSBhcyBJUHY2IGFkZHJlc3NlcyB3aWxsIG5vdCByZXNvbHZlIGFuZCBjb25maWdzIG1pZ2h0IGVtaXQgYW4gZXJyb3IKZHVyaW5nIHBhcnNpbmcuIElmIHlvdSBrbm93IHRoYXQgeW91ciBPUyBsaWJjIGhhcyByZWxpYWJsZSBzdXBwb3J0IGZvcgpnZXRhZGRyaW5mbygpLCB5b3UgY2FuIGFkZCBVU0VfR0VUQUREUklORk89MSBvbiB0aGUgbWFrZSBjb21tYW5kIGxpbmUgdG8gZW5hYmxlCml0LiBUaGlzIGlzIHRoZSByZWNvbW1lbmRlZCBvcHRpb24gZm9yIG1vc3QgTGludXggZGlzdHJvIHBhY2thZ2VycyBzaW5jZSBpdCdzCndvcmtpbmcgZmluZSBvbiBhbGwgcmVjZW50IG1haW5zdHJlYW0gZGlzdHJvcy4gSXQgaXMgYXV0b21hdGljYWxseSBlbmFibGVkIG9uClNvbGFyaXMgOCBhbmQgYWJvdmUsIGFzIGl0J3Mga25vd24gdG8gd29yay4KCkl0IGlzIHBvc3NpYmxlIHRvIGFkZCBuYXRpdmUgc3VwcG9ydCBmb3IgU1NMIHVzaW5nIHRoZSBHTlUgbWFrZWZpbGUsIGJ5IHBhc3NpbmcKIlVTRV9PUEVOU1NMPTEiIG9uIHRoZSBtYWtlIGNvbW1hbmQgbGluZS4gVGhlIGxpYnNzbCBhbmQgbGliY3J5cHRvIHdpbGwKYXV0b21hdGljYWxseSBiZSBsaW5rZWQgd2l0aCBoYXByb3h5LiBTb21lIHN5c3RlbXMgYWxzbyByZXF1aXJlIGxpYnosIHNvIGlmIHRoZQpidWlsZCBmYWlscyBkdWUgdG8gbWlzc2luZyBzeW1ib2xzIHN1Y2ggYXMgZGVmbGF0ZUluaXQoKSwgdGhlbiB0cnkgYWdhaW4gd2l0aAoiQURETElCPS1seiIuCgpUbyBsaW5rIE9wZW5TU0wgc3RhdGljYWxseSBhZ2FpbnN0IGhhcHJveHksIGJ1aWxkIE9wZW5TU0wgd2l0aCB0aGUgbm8tc2hhcmVkCmtleXdvcmQgYW5kIGluc3RhbGwgaXQgdG8gYSBsb2NhbCBkaXJlY3RvcnksIHNvIHlvdXIgc3lzdGVtIGlzIG5vdCBhZmZlY3RlZCA6CgogICAgJCBleHBvcnQgU1RBVElDTElCU1NMPS90bXAvc3RhdGljbGlic3NsCiAgICAkIC4vY29uZmlnIC0tcHJlZml4PSRTVEFUSUNMSUJTU0wgbm8tc2hhcmVkCiAgICAkIG1ha2UgJiYgbWFrZSBpbnN0YWxsX3N3CgpXaGVuIGJ1aWxkaW5nIGhhcHJveHksIHBhc3MgdGhhdCBwYXRoIHZpYSBTU0xfSU5DIGFuZCBTU0xfTElCIHRvIG1ha2UgYW5kCmluY2x1ZGUgYWRkaXRpb25hbCBsaWJzIHdpdGggQURETElCIGlmIG5lZWRlZCAoaW4gdGhpcyBjYXNlIGZvciBleGFtcGxlIGxpYmRsKToKCiAgICAkIG1ha2UgVEFSR0VUPWxpbnV4MjYgVVNFX09QRU5TU0w9MSBTU0xfSU5DPSRTVEFUSUNMSUJTU0wvaW5jbHVkZSBTU0xfTElCPSRTVEFUSUNMSUJTU0wvbGliIEFERExJQj0tbGRsCgpJdCBpcyBhbHNvIHBvc3NpYmxlIHRvIGluY2x1ZGUgbmF0aXZlIHN1cHBvcnQgZm9yIFpMSUIgdG8gYmVuZWZpdCBmcm9tIEhUVFAKY29tcHJlc3Npb24uIEZvciB0aGlzLCBwYXNzICJVU0VfWkxJQj0xIiBvbiB0aGUgIm1ha2UiIGNvbW1hbmQgbGluZSBhbmQgZW5zdXJlCnRoYXQgemxpYiBpcyBwcmVzZW50IG9uIHRoZSBzeXN0ZW0uCgpCeSBkZWZhdWx0LCB0aGUgREVCVUcgdmFyaWFibGUgaXMgc2V0IHRvICctZycgdG8gZW5hYmxlIGRlYnVnIHN5bWJvbHMuIEl0IGlzCm5vdCB3aXNlIHRvIGRpc2FibGUgaXQgb24gdW5jb21tb24gc3lzdGVtcywgYmVjYXVzZSBpdCdzIG9mdGVuIHRoZSBvbmx5IHdheSB0bwpnZXQgYSBjb21wbGV0ZSBjb3JlIHdoZW4geW91IG5lZWQgb25lLiBPdGhlcndpc2UsIHlvdSBjYW4gc2V0IERFQlVHIHRvICctcycgdG8Kc3RyaXAgdGhlIGJpbmFyeS4KCkZvciBleGFtcGxlLCBJIHVzZSB0aGlzIHRvIGJ1aWxkIGZvciBTb2xhcmlzIDggOgoKICAgICQgbWFrZSBUQVJHRVQ9c29sYXJpcyBDUFU9dWx0cmFzcGFyYyBVU0VfU1RBVElDX1BDUkU9MQoKQW5kIEkgYnVpbGQgaXQgdGhpcyB3YXkgb24gT3BlbkJTRCBvciBGcmVlQlNEIDoKCiAgICAkIGdtYWtlIFRBUkdFVD1mcmVlYnNkIFVTRV9QQ1JFPTEgVVNFX09QRU5TU0w9MSBVU0VfWkxJQj0xCgpBbmQgb24gYSBjbGFzc2ljIExpbnV4IHdpdGggU1NMIGFuZCBaTElCIHN1cHBvcnQgKGVnOiBSZWQgSGF0IDUueCkgOgoKICAgICQgbWFrZSBUQVJHRVQ9bGludXgyNiBDUFU9bmF0aXZlIFVTRV9QQ1JFPTEgVVNFX09QRU5TU0w9MSBVU0VfWkxJQj0xCgpBbmQgb24gYSByZWNlbnQgTGludXggPj0gMi42LjI4IHdpdGggU1NMIGFuZCBaTElCIHN1cHBvcnQgOgoKICAgICQgbWFrZSBUQVJHRVQ9bGludXgyNjI4IENQVT1uYXRpdmUgVVNFX1BDUkU9MSBVU0VfT1BFTlNTTD0xIFVTRV9aTElCPTEKCkluIG9yZGVyIHRvIGJ1aWxkIGEgMzItYml0IGJpbmFyeSBvbiBhbiB4ODZfNjQgTGludXggc3lzdGVtIHdpdGggU1NMIHN1cHBvcnQKd2l0aG91dCBzdXBwb3J0IGZvciBjb21wcmVzc2lvbiBidXQgd2hlbiBPcGVuU1NMIHJlcXVpcmVzIFpMSUIgYW55d2F5IDoKCiAgICAkIG1ha2UgVEFSR0VUPWxpbnV4MjYgQVJDSD1pMzg2IFVTRV9PUEVOU1NMPTEgQURETElCPS1segoKVGhlIFNTTCBzdGFjayBzdXBwb3J0cyBzZXNzaW9uIGNhY2hlIHN5bmNocm9uaXphdGlvbiBiZXR3ZWVuIGFsbCBydW5uaW5nCnByb2Nlc3Nlcy4gVGhpcyBpbnZvbHZlcyBzb21lIGF0b21pYyBvcGVyYXRpb25zIGFuZCBzeW5jaHJvbml6YXRpb24gb3BlcmF0aW9ucwp3aGljaCBjb21lIGluIG11bHRpcGxlIGZsYXZvcnMgZGVwZW5kaW5nIG9uIHRoZSBzeXN0ZW0gYW5kIGFyY2hpdGVjdHVyZSA6CgogIEF0b21pYyBvcGVyYXRpb25zIDoKICAgIC0gaW50ZXJuYWwgYXNzZW1ibGVyIHZlcnNpb25zIGZvciB4ODYveDg2XzY0IGFyY2hpdGVjdHVyZXMKCiAgICAtIGdjYyBidWlsdGlucyBmb3Igb3RoZXIgYXJjaGl0ZWN0dXJlcy4gU29tZSBhcmNoaXRlY3R1cmVzIG1pZ2h0IG5vdAogICAgICBiZSBmdWxseSBzdXBwb3J0ZWQgb3IgbWlnaHQgcmVxdWlyZSBhIG1vcmUgcmVjZW50IHZlcnNpb24gb2YgZ2NjLgogICAgICBJZiB5b3VyIGFyY2hpdGVjdHVyZSBpcyBub3Qgc3VwcG9ydGVkLCB5b3Ugd2lsbHkgaGF2ZSB0byBlaXRoZXIgdXNlCiAgICAgIHB0aHJlYWQgaWYgc3VwcG9ydGVkLCBvciB0byBkaXNhYmxlIHRoZSBzaGFyZWQgY2FjaGUuCgogICAgLSBwdGhyZWFkIChwb3NpeCB0aHJlYWRzKS4gUHRocmVhZHMgYXJlIHZlcnkgY29tbW9uIGJ1dCBpbnRlci1wcm9jZXNzCiAgICAgIHN1cHBvcnQgaXMgbm90IHRoYXQgY29tbW9uLCBhbmQgc29tZSBvbGRlciBvcGVyYXRpbmcgc3lzdGVtcyBkaWQgbm90CiAgICAgIHJlcG9ydCBhbiBlcnJvciB3aGVuIGVuYWJsaW5nIG11bHRpLXByb2Nlc3MgbW9kZSwgc28gdGhleSB1c2VkIHRvCiAgICAgIHNpbGVudGx5IGZhaWwsIHBvc3NpYmx5IGNhdXNpbmcgY3Jhc2hlcy4gTGludXgncyBpbXBsZW1lbnRhdGlvbiBpcwogICAgICBmaW5lLiBPcGVuQlNEIGRvZXNuJ3Qgc3VwcG9ydCB0aGVtIGFuZCBkb2Vzbid0IGJ1aWxkLiBGcmVlQlNEIDkgYnVpbGRzCiAgICAgIGFuZCByZXBvcnRzIGFuIGVycm9yIGF0IHJ1bnRpbWUsIHdoaWxlIGNlcnRhaW4gb2xkZXIgdmVyc2lvbnMgbWlnaHQKICAgICAgc2lsZW50bHkgZmFpbC4gUHRocmVhZHMgYXJlIGVuYWJsZWQgdXNpbmcgVVNFX1BUSFJFQURfUFNIQVJFRD0xLgoKICBTeW5jaHJvbml6YXRpb24gb3BlcmF0aW9ucyA6CiAgICAtIGludGVybmFsIHNwaW5sb2NrIDogdGhpcyBtb2RlIGlzIE9TLWluZGVwZW5kYW50LCBsaWdodCBidXQgd2lsbCBub3QKICAgICAgc2NhbGUgd2VsbCB0byBtYW55IHByb2Nlc3Nlcy4gSG93ZXZlciwgYWNjZXNzZXMgdG8gdGhlIHNlc3Npb24gY2FjaGUKICAgICAgYXJlIHJhcmUgZW5vdWdoIHRoYXQgdGhpcyBtb2RlIGNvdWxkIGNlcnRhaW5seSBhbHdheXMgYmUgdXNlZC4gVGhpcwogICAgICBpcyB0aGUgZGVmYXVsdCBtb2RlLgoKICAgIC0gRnV0ZXhlcywgd2hpY2ggYXJlIExpbnV4LXNwZWNpZmljIGhpZ2hseSBzY2FsYWJsZSBsaWdodCB3ZWlnaHQgbXV0ZXhlcwogICAgICBpbXBsZW1lbnRlZCBpbiB1c2VyLXNwYWNlIHdpdGggc29tZSBsaW1pdGVkIGFzc2lzdGFuY2UgZnJvbSB0aGUga2VybmVsLgogICAgICBUaGlzIGlzIHRoZSBkZWZhdWx0IG9uIExpbnV4IDIuNiBhbmQgYWJvdmUgYW5kIGlzIGVuYWJsZWQgYnkgcGFzc2luZwogICAgICBVU0VfRlVURVg9MQoKICAgIC0gcHRocmVhZCAocG9zaXggdGhyZWFkcykuIFNlZSBhYm92ZS4KCklmIG5vbmUgb2YgdGhlc2UgbWVjaGFuaXNtcyBpcyBzdXBwb3J0ZWQgYnkgeW91ciBwbGF0Zm9ybSwgeW91IG1heSBuZWVkIHRvCmJ1aWxkIHdpdGggVVNFX1BSSVZBVEVfQ0FDSEU9MSB0byB0b3RhbGx5IGRpc2FibGUgU1NMIGNhY2hlIHNoYXJpbmcuIFRoZW4KaXQgaXMgYmV0dGVyIG5vdCB0byBydW4gU1NMIG9uIG11bHRpcGxlIHByb2Nlc3Nlcy4KCklmIHlvdSBuZWVkIHRvIHBhc3Mgb3RoZXIgZGVmaW5lcywgaW5jbHVkZXMsIGxpYnJhcmllcywgZXRjLi4uIHRoZW4gcGxlYXNlCmNoZWNrIHRoZSBNYWtlZmlsZSB0byBzZWUgd2hpY2ggb25lcyB3aWxsIGJlIGF2YWlsYWJsZSBpbiB5b3VyIGNhc2UsIGFuZAp1c2UgdGhlIFVTRV8qIHZhcmlhYmxlcyBpbiB0aGUgTWFrZWZpbGUuCgpBSVggNS4zIGlzIGtub3duIHRvIHdvcmsgd2l0aCB0aGUgZ2VuZXJpYyB0YXJnZXQuIEhvd2V2ZXIsIGZvciB0aGUgYmluYXJ5IHRvCmFsc28gcnVuIG9uIDUuMiBvciBlYXJsaWVyLCB5b3UgbmVlZCB0byBidWlsZCB3aXRoIERFRklORT0iLURfTVNHUVNVUFBPUlQiLApvdGhlcndpc2UgX19mZF9zZWxlY3QoKSB3aWxsIGJlIHVzZWQgd2hpbGUgbm90IGJlaW5nIHByZXNlbnQgaW4gdGhlIGxpYmMsIGJ1dAp0aGlzIGlzIGVhc2lseSBhZGRyZXNzZWQgdXNpbmcgdGhlICJhaXg1MiIgdGFyZ2V0LiBJZiB5b3UgZ2V0IGJ1aWxkIGVycm9ycwpiZWNhdXNlIG9mIHN0cmFuZ2Ugc3ltYm9scyBvciBzZWN0aW9uIG1pc21hdGNoZXMsIHNpbXBseSByZW1vdmUgLWcgZnJvbQpERUJVR19DRkxBR1MuCgpZb3UgY2FuIGVhc2lseSBkZWZpbmUgeW91ciBvd24gdGFyZ2V0IHdpdGggdGhlIEdOVSBNYWtlZmlsZS4gVW5rbm93biB0YXJnZXRzCmFyZSBwcm9jZXNzZWQgd2l0aCBubyBkZWZhdWx0IG9wdGlvbiBleGNlcHQgVVNFX1BPTEw9ZGVmYXVsdC4gU28geW91IGNhbiB2ZXJ5CndlbGwgdXNlIHRoYXQgcHJvcGVydHkgdG8gZGVmaW5lIHlvdXIgb3duIHNldCBvZiBvcHRpb25zLiBVU0VfUE9MTCBjYW4gZXZlbiBiZQpkaXNhYmxlZCBieSBzZXR0aW5nIFVTRV9QT0xMPSIiLiBGb3IgZXhhbXBsZSA6CgogICAgJCBnbWFrZSBUQVJHRVQ9dGlueSBVU0VfUE9MTD0iIiBUQVJHRVRfQ0ZMQUdTPS1mb21pdC1mcmFtZS1wb2ludGVyCgoKMikgSG93IHRvIGluc3RhbGwgaXQKLS0tLS0tLS0tLS0tLS0tLS0tLS0KClRvIGluc3RhbGwgaGFwcm94eSwgeW91IGNhbiBlaXRoZXIgY29weSB0aGUgc2luZ2xlIHJlc3VsdGluZyBiaW5hcnkgdG8gdGhlCnBsYWNlIHlvdSB3YW50LCBvciBydW4gOgoKICAgICQgc3VkbyBtYWtlIGluc3RhbGwKCklmIHlvdSdyZSBwYWNrYWdpbmcgaXQgZm9yIGFub3RoZXIgc3lzdGVtLCB5b3UgY2FuIHNwZWNpZnkgaXRzIHJvb3QgZGlyZWN0b3J5CmluIHRoZSB1c3VhbCBERVNURElSIHZhcmlhYmxlLgoKCjMpIEhvdyB0byBzZXQgaXQgdXAKLS0tLS0tLS0tLS0tLS0tLS0tLQoKVGhlcmUgaXMgc29tZSBkb2N1bWVudGF0aW9uIGluIHRoZSBkb2MvIGRpcmVjdG9yeSA6CgogICAgLSBhcmNoaXRlY3R1cmUudHh0IDogdGhpcyBpcyB0aGUgYXJjaGl0ZWN0dXJlIG1hbnVhbC4gSXQgaXMgcXVpdGUgb2xkIGFuZAogICAgICBkb2VzIG5vdCB0ZWxsIGFib3V0IHRoZSBuaWNlIG5ldyBmZWF0dXJlcywgYnV0IGl0J3Mgc3RpbGwgYSBnb29kIHN0YXJ0aW5nCiAgICAgIHBvaW50IHdoZW4geW91IGtub3cgd2hhdCB5b3Ugd2FudCBidXQgZG9uJ3Qga25vdyBob3cgdG8gZG8gaXQuCgogICAgLSBjb25maWd1cmF0aW9uLnR4dCA6IHRoaXMgaXMgdGhlIGNvbmZpZ3VyYXRpb24gbWFudWFsLiBJdCByZWNhbGxzIGEgZmV3CiAgICAgIGVzc2VudGlhbCBIVFRQIGJhc2ljIGNvbmNlcHRzLCBhbmQgZGV0YWlscyBhbGwgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZQogICAgICBzeW50YXggKGtleXdvcmRzLCB1bml0cykuIEl0IGFsc28gZGVzY3JpYmVzIHRoZSBsb2cgYW5kIHN0YXRzIGZvcm1hdC4gSXQKICAgICAgaXMgbm9ybWFsbHkgYWx3YXlzIHVwIHRvIGRhdGUuIElmIHlvdSBzZWUgdGhhdCBzb21ldGhpbmcgaXMgbWlzc2luZyBmcm9tCiAgICAgIGl0LCBwbGVhc2UgcmVwb3J0IGl0IGFzIHRoaXMgaXMgYSBidWcuIFBsZWFzZSBub3RlIHRoYXQgdGhpcyBmaWxlIGlzCiAgICAgIGh1Z2UgYW5kIHRoYXQgaXQncyBnZW5lcmFsbHkgbW9yZSBjb252ZW5pZW50IHRvIHJldmlldyBDeXJpbCBCb2506SdzCiAgICAgIEhUTUwgdHJhbnNsYXRpb24gb25saW5lIGhlcmUgOgoKICAgICAgICAgICBodHRwOi8vY2JvbnRlLmdpdGh1Yi5pby9oYXByb3h5LWRjb252L2NvbmZpZ3VyYXRpb24tMS41Lmh0bWwKCiAgICAtIGhhcHJveHktZW4udHh0IC8gaGFwcm94eS1mci50eHQgOiB0aGVzZSBhcmUgdGhlIG9sZCBvdXRkYXRlZCBkb2NzLiBZb3UKICAgICAgc2hvdWxkIG5ldmVyIG5lZWQgdGhlbS4gSWYgeW91IGRvLCB0aGVuIHBsZWFzZSByZXBvcnQgd2hhdCB5b3UgZGlkbid0CiAgICAgIGZpbmQgaW4gdGhlIG90aGVyIG9uZXMuCgogICAgLSBncGwudHh0IC8gbGdwbC50eHQgOiB0aGUgY29weSBvZiB0aGUgbGljZW5zZXMgY292ZXJpbmcgdGhlIHNvZnR3YXJlLiBTZWUKICAgICAgdGhlICdMSUNFTlNFJyBmaWxlIGF0IHRoZSB0b3AgZm9yIG1vcmUgaW5mb3JtYXRpb24uCgogICAgLSB0aGUgcmVzdCBpcyBtYWlubHkgZm9yIGRldmVsb3BlcnMuCgpUaGVyZSBhcmUgYWxzbyBhIG51bWJlciBvZiBuaWNlIGNvbmZpZ3VyYXRpb24gZXhhbXBsZXMgaW4gdGhlICJleGFtcGxlcyIKZGlyZWN0b3J5IGFzIHdlbGwgYXMgb24gc2V2ZXJhbCBzaXRlcyBhbmQgYXJ0aWNsZXMgb24gdGhlIG5ldCB3aGljaCBhcmUgbGlua2VkCnRvIGZyb20gdGhlIGhhcHJveHkgd2ViIHNpdGUuCgoKNCkgSG93IHRvIHJlcG9ydCBhIGJ1ZwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpJdCBpcyBwb3NzaWJsZSB0aGF0IGZyb20gdGltZSB0byB0aW1lIHlvdSdsbCBmaW5kIGEgYnVnLiBBIGJ1ZyBpcyBhIGNhc2Ugd2hlcmUKd2hhdCB5b3Ugc2VlIGlzIG5vdCB3aGF0IGlzIGRvY3VtZW50ZWQuIE90aGVyd2lzZSBpdCBjYW4gYmUgYSBtaXNkZXNpZ24uIElmIHlvdQpmaW5kIHRoYXQgc29tZXRoaW5nIGlzIHN0dXBpZGx5IGRlc2lnbiwgcGxlYXNlIGRpc2N1c3MgaXQgb24gdGhlIGxpc3QgKHNlZSB0aGUKImhvdyB0byBjb250cmlidXRlIiBzZWN0aW9uIGJlbG93KS4gSWYgeW91IGZlZWwgbGlrZSB5b3UncmUgcHJvY2VlZGluZyByaWdodAphbmQgaGFwcm94eSBkb2Vzbid0IG9iZXksIHRoZW4gZmlyc3QgYXNrIHlvdXJzZWxmIGlmIGl0IGlzIHBvc3NpYmxlIHRoYXQgbm9ib2R5CmJlZm9yZSB5b3UgaGFzIGV2ZW4gZW5jb3VudGVyZWQgdGhpcyBpc3N1ZS4gSWYgaXQncyB1bmxpa2VseSwgdGhlIHlvdSBwcm9iYWJseQpoYXZlIGFuIGlzc3VlIGluIHlvdXIgc2V0dXAuIEp1c3QgaW4gY2FzZSBvZiBkb3VidCwgcGxlYXNlIGNvbnN1bHQgdGhlIG1haWxpbmcKbGlzdCBhcmNoaXZlcyA6CgogICAgICAgICAgICAgICAgICAgICAgICBodHRwOi8vbWFyYy5pbmZvLz9sPWhhcHJveHkKCk90aGVyd2lzZSwgcGxlYXNlIHRyeSB0byBnYXRoZXIgdGhlIG1heGltdW0gYW1vdW50IG9mIGluZm9ybWF0aW9uIHRvIGhlbHAKcmVwcm9kdWNlIHRoZSBpc3N1ZSBhbmQgc2VuZCB0aGF0IHRvIHRoZSBtYWlsaW5nIGxpc3QgOgoKICAgICAgICAgICAgICAgICAgICAgICAgaGFwcm94eUBmb3JtaWx1eC5vcmcKClBsZWFzZSBpbmNsdWRlIHlvdXIgY29uZmlndXJhdGlvbiBhbmQgbG9ncy4gWW91IGNhbiBtYXNrIHlvdXIgSVAgYWRkcmVzc2VzIGFuZApwYXNzd29yZHMsIHdlIGRvbid0IG5lZWQgdGhlbS4gQnV0IGl0J3MgZXNzZW50aWFsIHRoYXQgeW91IHBvc3QgeW91ciBjb25maWcgaWYKeW91IHdhbnQgcGVvcGxlIHRvIGd1ZXNzIHdoYXQgaXMgaGFwcGVuaW5nLgoKQWxzbywga2VlcCBpbiBtaW5kIHRoYXQgaGFwcm94eSBpcyBkZXNpZ25lZCB0byBORVZFUiBDUkFTSC4gSWYgeW91IHNlZSBpdCBkaWUKd2l0aG91dCBhbnkgcmVhc29uLCB0aGVuIGl0IGRlZmluaXRlbHkgaXMgYSBjcml0aWNhbCBidWcgdGhhdCBtdXN0IGJlIHJlcG9ydGVkCmFuZCB1cmdlbnRseSBmaXhlZC4gSXQgaGFzIGhhcHBlbmVkIGEgY291cGxlIG9mIHRpbWVzIGluIHRoZSBwYXN0LCBlc3NlbnRpYWxseQpvbiBkZXZlbG9wbWVudCB2ZXJzaW9ucyBydW5uaW5nIG9uIG5ldyBhcmNoaXRlY3R1cmVzLiBJZiB5b3UgdGhpbmsgeW91ciBzZXR1cAppcyBmYWlybHkgY29tbW9uLCB0aGVuIGl0IGlzIHBvc3NpYmxlIHRoYXQgdGhlIGlzc3VlIGlzIHRvdGFsbHkgdW5yZWxhdGVkLgpBbnl3YXksIGlmIHRoYXQgaGFwcGVucywgZmVlbCBmcmVlIHRvIGNvbnRhY3QgbWUgZGlyZWN0bHksIGFzIEkgd2lsbCBnaXZlIHlvdQppbnN0cnVjdGlvbnMgb24gaG93IHRvIGNvbGxlY3QgYSB1c2FibGUgY29yZSBmaWxlLCBhbmQgd2lsbCBwcm9iYWJseSBhc2sgZm9yCm90aGVyIGNhcHR1cmVzIHRoYXQgeW91J2xsIG5vdCB3YW50IHRvIHNoYXJlIHdpdGggdGhlIGxpc3QuCgoKNSkgSG93IHRvIGNvbnRyaWJ1dGUKLS0tLS0tLS0tLS0tLS0tLS0tLS0KCkl0IGlzIHBvc3NpYmxlIHRoYXQgeW91J2xsIHdhbnQgdG8gYWRkIGEgc3BlY2lmaWMgZmVhdHVyZSB0byBzYXRpc2Z5IHlvdXIgbmVlZHMKb3Igb25lIG9mIHlvdXIgY3VzdG9tZXJzJy4gQ29udHJpYnV0aW9ucyBhcmUgd2VsY29tZSwgaG93ZXZlciBJJ20gb2Z0ZW4gdmVyeQpwaWNreSBhYm91dCBjaGFuZ2VzLiBJIHdpbGwgZ2VuZXJhbGx5IHJlamVjdCBwYXRjaGVzIHRoYXQgY2hhbmdlIG1hc3NpdmUgcGFydHMKb2YgdGhlIGNvZGUsIG9yIHRoYXQgdG91Y2ggdGhlIGNvcmUgcGFydHMgd2l0aG91dCBhbnkgZ29vZCByZWFzb24gaWYgdGhvc2UKY2hhbmdlcyBoYXZlIG5vdCBiZWVuIGRpc2N1c3NlZCBmaXJzdC4KClRoZSBwcm9wZXIgcGxhY2UgdG8gZGlzY3VzcyB5b3VyIGNoYW5nZXMgaXMgdGhlIEhBUHJveHkgTWFpbGluZyBMaXN0LiBUaGVyZSBhcmUKZW5vdWdoIHNraWxsZWQgcmVhZGVycyB0byBjYXRjaCBoYXphcmRvdXMgbWlzdGFrZXMgYW5kIHRvIHN1Z2dlc3QgaW1wcm92ZW1lbnRzLgpJIHRydXN0IGEgbnVtYmVyIG9mIHRoZW0gZW5vdWdoIHRvIG1lcmdlIGEgcGF0Y2ggaWYgdGhleSBzYXkgaXQncyBPSywgc28gdXNpbmcKdGhlIGxpc3QgaXMgdGhlIGZhc3Rlc3Qgd2F5IHRvIGdldCB5b3VyIGNvZGUgcmV2aWV3ZWQgYW5kIG1lcmdlZC4gWW91IGNhbgpzdWJzY3JpYmUgdG8gaXQgYnkgc2VuZGluZyBhbiBlbXB0eSBlLW1haWwgYXQgdGhlIGZvbGxvd2luZyBhZGRyZXNzIDoKCiAgICAgICAgICAgICAgICAgICAgICAgIGhhcHJveHkrc3Vic2NyaWJlQGZvcm1pbHV4Lm9yZwoKSWYgeW91IGhhdmUgYW4gaWRlYSBhYm91dCBzb21ldGhpbmcgdG8gaW1wbGVtZW50LCAqcGxlYXNlKiBkaXNjdXNzIGl0IG9uIHRoZQpsaXN0IGZpcnN0LiBJdCBoYXMgYWxyZWFkeSBoYXBwZW5lZCBzZXZlcmFsIHRpbWVzIHRoYXQgdHdvIHBlcnNvbnMgZGlkIHRoZSBzYW1lCnRoaW5nIHNpbXVsdGFuZW91c2x5LiBUaGlzIGlzIGEgd2FzdGUgb2YgdGltZSBmb3IgYm90aCBvZiB0aGVtLiBJdCdzIGFsc28gdmVyeQpjb21tb24gdG8gc2VlIHNvbWUgY2hhbmdlcyByZWplY3RlZCBiZWNhdXNlIHRoZXkncmUgZG9uZSBpbiBhIHdheSB0aGF0IHdpbGwKY29uZmxpY3Qgd2l0aCBmdXR1cmUgZXZvbHV0aW9ucywgb3IgdGhhdCBkb2VzIG5vdCBsZWF2ZSBhIGdvb2QgZmVlbGluZy4gSXQncwphbHdheXMgdW5wbGVhc2FudCBmb3IgdGhlIHBlcnNvbiB3aG8gZGlkIHRoZSB3b3JrLCBhbmQgaXQgaXMgdW5wbGVhc2FudCBmb3IgbWUKdG9vIGJlY2F1c2UgSSB2YWx1ZSBwZW9wbGUncyB0aW1lIGFuZCBlZmZvcnRzLiBUaGF0IHdvdWxkIG5vdCBoYXBwZW4gaWYgdGhlc2UKd2VyZSBkaXNjdXNzZWQgZmlyc3QuIFRoZXJlIGlzIG5vIHByb2JsZW0gcG9zdGluZyB3b3JrIGluIHByb2dyZXNzIHRvIHRoZSBsaXN0LAppdCBoYXBwZW5zIHF1aXRlIG9mdGVuIGluIGZhY3QuIEFsc28sIGRvbid0IHdhc3RlIHlvdXIgdGltZSB3aXRoIHRoZSBkb2Mgd2hlbgpzdWJtaXR0aW5nIHBhdGNoZXMgZm9yIHJldmlldywgb25seSBhZGQgdGhlIGRvYyB3aXRoIHRoZSBwYXRjaCB5b3UgY29uc2lkZXIKcmVhZHkgdG8gbWVyZ2UuCgpBbm90aGVyIGltcG9ydGFudCBwb2ludCBjb25jZXJucyBjb2RlIHBvcnRhYmlsaXR5LiBIYXByb3h5IHJlcXVpcmVzIGdjYyBhcyB0aGUKQyBjb21waWxlciwgYW5kIG1heSBvciBtYXkgbm90IHdvcmsgd2l0aCBvdGhlciBjb21waWxlcnMuIEhvd2V2ZXIgaXQncyBrbm93bgp0byBidWlsZCB1c2luZyBnY2MgMi45NSBvciBhbnkgbGF0ZXIgdmVyc2lvbi4gQXMgc3VjaCwgaXQgaXMgaW1wb3J0YW50IHRvIGtlZXAKaW4gbWluZCB0aGF0IGNlcnRhaW4gZmFjaWxpdGllcyBvZmZlcmVkIGJ5IHJlY2VudCB2ZXJzaW9ucyBtdXN0IG5vdCBiZSB1c2VkIGluCnRoZSBjb2RlIDoKCiAgLSBkZWNsYXJhdGlvbnMgbWl4ZWQgaW4gdGhlIGNvZGUgKHJlcXVpcmVzIGdjYyA+PSAzLngpCiAgLSBHQ0MgYnVpbHRpbnMgd2l0aG91dCBjaGVja2luZyBmb3IgdGhlaXIgYXZhaWxhYmlsaXR5IGJhc2VkIG9uIHZlcnNpb24gYW5kCiAgICBhcmNoaXRlY3R1cmUgOwogIC0gYXNzZW1ibHkgY29kZSB3aXRob3V0IGFueSBhbHRlcm5hdGUgcG9ydGFibGUgZm9ybSBmb3Igb3RoZXIgcGxhdGZvcm1zCiAgLSB1c2Ugb2Ygc3RkYm9vbC5oLCAiYm9vbCIsICJmYWxzZSIsICJ0cnVlIiA6IHNpbXBseSB1c2UgImludCIsICIwIiwgIjEiCiAgLSBpbiBnZW5lcmFsLCBhbnl0aGluZyB3aGljaCByZXF1aXJlcyBDOTkgKHN1Y2ggYXMgZGVjbGFyaW5nIHZhcmlhYmxlcyBpbgogICAgImZvciIgc3RhdGVtZW50cykKClNpbmNlIG1vc3Qgb2YgdGhlc2UgcmVzdHJpY3Rpb25zIGFyZSBqdXN0IGEgbWF0dGVyIG9mIGNvZGluZyBzdHlsZSwgaXQgaXMKbm9ybWFsbHkgbm90IGEgcHJvYmxlbSB0byBjb21wbHkuCgpJZiB5b3VyIHdvcmsgaXMgdmVyeSBjb25maWRlbnRpYWwgYW5kIHlvdSBjYW4ndCBwdWJsaWNseSBkaXNjdXNzIGl0LCB5b3UgY2FuCmFsc28gbWFpbCBtZSBkaXJlY3RseSBhYm91dCBpdCwgYnV0IHlvdXIgbWFpbCBtYXkgYmUgd2FpdGluZyBzZXZlcmFsIGRheXMgaW4KdGhlIHF1ZXVlIGJlZm9yZSB5b3UgZ2V0IGEgcmVzcG9uc2UuCgpJZiB5b3UnZCBsaWtlIGEgZmVhdHVyZSB0byBiZSBhZGRlZCBidXQgeW91IHRoaW5rIHlvdSBkb24ndCBoYXZlIHRoZSBza2lsbHMgdG8KaW1wbGVtZW50IGl0IHlvdXJzZWxmLCB5b3Ugc2hvdWxkIGZvbGxvdyB0aGVzZSBzdGVwcyA6CgogICAgMS4gZGlzY3VzcyB0aGUgZmVhdHVyZSBvbiB0aGUgbWFpbGluZyBsaXN0LiBJdCBpcyBwb3NzaWJsZSB0aGF0IHNvbWVvbmUKICAgICAgIGVsc2UgaGFzIGFscmVhZHkgaW1wbGVtZW50ZWQgaXQsIG9yIHRoYXQgc29tZW9uZSB3aWxsIHRlbGwgeW91IGhvdyB0bwogICAgICAgcHJvY2VlZCB3aXRob3V0IGl0LCBvciBldmVuIHdoeSBub3QgdG8gZG8gaXQuIEl0IGlzIGFsc28gcG9zc2libGUgdGhhdAogICAgICAgaW4gZmFjdCBpdCdzIHF1aXRlIGVhc3kgdG8gaW1wbGVtZW50IGFuZCBwZW9wbGUgd2lsbCBndWlkZSB5b3UgdGhyb3VnaAogICAgICAgdGhlIHByb2Nlc3MuIFRoYXQgd2F5IHlvdSdsbCBmaW5hbGx5IGhhdmUgWU9VUiBwYXRjaCBtZXJnZWQsIHByb3ZpZGluZwogICAgICAgdGhlIGZlYXR1cmUgWU9VIG5lZWQuCgogICAgMi4gaWYgeW91IHJlYWxseSBjYW4ndCBjb2RlIGl0IHlvdXJzZWxmIGFmdGVyIGRpc2N1c3NpbmcgaXQsIHRoZW4geW91IG1heQogICAgICAgY29uc2lkZXIgY29udGFjdGluZyBzb21lb25lIHRvIGRvIHRoZSBqb2IgZm9yIHlvdS4gU29tZSBwZW9wbGUgb24gdGhlCiAgICAgICBsaXN0IG1pZ2h0IHNvbWV0aW1lcyBiZSBPSyB3aXRoIHRyeWluZyB0byBkbyBpdC4KCk5vdGUgdG8gY29udHJpYnV0b3JzOiBpdCdzIHZlcnkgaGFuZHkgd2hlbiBwYXRjaGVzIGNvbWVzIHdpdGggYSBwcm9wZXJseQpmb3JtYXRlZCBzdWJqZWN0LiBUaGVyZSBhcmUgMyBjcml0ZXJpYSBvZiBwYXJ0aWN1bGFyIGltcG9ydGFuY2UgaW4gYW55IHBhdGNoIDoKCiAgLSBpdHMgbmF0dXJlIChpcyBpdCBhIGZpeCBmb3IgYSBidWcsIGEgbmV3IGZlYXR1cmUsIGFuIG9wdGltaXphdGlvbiwgLi4uKQogIC0gaXRzIGltcG9ydGFuY2UsIHdoaWNoIGdlbmVyYWxseSByZWZsZWN0cyB0aGUgcmlzayBvZiBtZXJnaW5nL25vdCBtZXJnaW5nIGl0CiAgLSB3aGF0IGFyZWEgaXQgYXBwbGllcyB0byAoZWc6IGh0dHAsIHN0YXRzLCBzdGFydHVwLCBjb25maWcsIGRvYywgLi4uKQoKSXQncyBpbXBvcnRhbnQgdG8gbWFrZSB0aGVzZSAzIGNyaXRlcmlhIGVhc3kgdG8gc3BvdCBpbiB0aGUgcGF0Y2gncyBzdWJqZWN0LApiZWNhdXNlIGl0J3MgdGhlIGZpcnN0IChhbmQgc29tZXRpbWVzIHRoZSBvbmx5KSB0aGluZyB3aGljaCBpcyByZWFkIHdoZW4KcmV2aWV3aW5nIHBhdGNoZXMgdG8gZmluZCB3aGljaCBvbmVzIG5lZWQgdG8gYmUgYmFja3BvcnRlZCB0byBvbGRlciB2ZXJzaW9ucy4KClNwZWNpZmljYWxseSwgYnVncyBtdXN0IGJlIGNsZWFybHkgZWFzeSB0byBzcG90IHNvIHRoYXQgdGhleSdyZSBuZXZlciBtaXNzZWQuCkFueSBwYXRjaCBmaXhpbmcgYSBidWcgbXVzdCBoYXZlIHRoZSAiQlVHIiB0YWcgaW4gaXRzIHN1YmplY3QuIE1vc3QgY29tbW9uCnBhdGNoIHR5cGVzIGluY2x1ZGUgOgoKICAtIEJVRyAgICAgIGZpeCBmb3IgYSBidWcuIFRoZSBzZXZlcml0eSBvZiB0aGUgYnVnIHNob3VsZCBhbHNvIGJlIGluZGljYXRlZAogICAgICAgICAgICAgd2hlbiBrbm93bi4gU2ltaWxhcmx5LCBpZiBhIGJhY2twb3J0IGlzIG5lZWRlZCB0byBvbGRlciB2ZXJzaW9ucywKICAgICAgICAgICAgIGl0IHNob3VsZCBiZSBpbmRpY2F0ZWQgb24gdGhlIGxhc3QgbGluZSBvZiB0aGUgY29tbWl0IG1lc3NhZ2UuIElmCiAgICAgICAgICAgICB0aGUgYnVnIGhhcyBiZWVuIGlkZW50aWZpZWQgYXMgYSByZWdyZXNzaW9uIGJyb3VnaHQgYnkgYSBzcGVjaWZpYwogICAgICAgICAgICAgcGF0Y2ggb3IgdmVyc2lvbiwgdGhpcyBpbmRpY2F0aW9uIHdpbGwgYmUgYXBwcmVjaWF0ZWQgdG9vLiBOZXcKICAgICAgICAgICAgIG1haW50ZW5hbmNlIHJlbGVhc2VzIGFyZSBnZW5lcmFsbHkgZW1pdHRlZCB3aGVuIGEgZmV3IG9mIHRoZXNlCiAgICAgICAgICAgICBwYXRjaGVzIGFyZSBtZXJnZWQuCgogIC0gQ0xFQU5VUCAgY29kZSBjbGVhbnVwLCBzaWxlbmNlIG9mIHdhcm5pbmdzLCBldGMuLi4gdGhlb3JpY2FsbHkgbm8gaW1wYWN0LgogICAgICAgICAgICAgVGhlc2UgcGF0Y2hlcyB3aWxsIHJhcmVseSBiZSBzZWVuIGluIHN0YWJsZSBicmFuY2hlcywgdGhvdWdoIHRoZXkKICAgICAgICAgICAgIG1heSBhcHBlYXIgd2hlbiB0aGV5IHJlbW92ZSBzb21lIGFubm95YW5jZSBvciB3aGVuIHRoZXkgbWFrZQogICAgICAgICAgICAgYmFja3BvcnRpbmcgZWFzaWVyLiBCeSBuYXR1cmUsIGEgY2xlYW51cCBpcyBhbHdheXMgbWlub3IuCgogIC0gUkVPUkcgICAgY29kZSByZW9yZ2FuaXphdGlvbi4gU29tZSBibG9ja3MgbWF5IGJlIG1vdmVkIHRvIG90aGVyIHBsYWNlcywKICAgICAgICAgICAgIHNvbWUgaW1wb3J0YW50IGNoZWNrcyBtaWdodCBiZSBzd2FwcGVkLCBldGMuLi4gVGhlc2UgY2hhbmdlcwogICAgICAgICAgICAgYWx3YXlzIHByZXNlbnQgYSByaXNrIG9mIHJlZ3Jlc3Npb24uIEZvciB0aGlzIHJlYXNvbiwgdGhleSBzaG91bGQKICAgICAgICAgICAgIG5ldmVyIGJlIG1peGVkIHdpdGggYW55IGJ1ZyBmaXggbm9yIGZ1bmN0aW9uYWwgY2hhbmdlLiBDb2RlIGlzCiAgICAgICAgICAgICBvbmx5IG1vdmVkIGFzLWlzLiBJbmRpY2F0aW5nIHRoZSByaXNrIG9mIGJyZWFrYWdlIGlzIGhpZ2hseQogICAgICAgICAgICAgcmVjb21tZW5kZWQuCgogIC0gQlVJTEQgICAgdXBkYXRlcyBvciBmaXhlcyBmb3IgYnVpbGQgaXNzdWVzLiBDaGFuZ2VzIHRvIG1ha2VmaWxlcyBhbHNvIGZhbGwKICAgICAgICAgICAgIGludG8gdGhpcyBjYXRlZ29yeS4gVGhlIHJpc2sgb2YgYnJlYWthZ2Ugc2hvdWxkIGJlIGluZGljYXRlZCBpZgogICAgICAgICAgICAga25vd24uIEl0IGlzIGFsc28gYXBwcmVjaWF0ZWQgdG8gaW5kaWNhdGUgd2hhdCBwbGF0Zm9ybXMgYW5kL29yCiAgICAgICAgICAgICBjb25maWd1cmF0aW9ucyB3ZXJlIHRlc3RlZCBhZnRlciB0aGUgY2hhbmdlLgoKICAtIE9QVElNICAgIHNvbWUgY29kZSB3YXMgb3B0aW1pc2VkLiBTb21ldGltZXMgaWYgdGhlIHJlZ3Jlc3Npb24gcmlzayBpcyB2ZXJ5CiAgICAgICAgICAgICBsb3cgYW5kIHRoZSBnYWlucyBzaWduaWZpY2FudCwgc3VjaCBwYXRjaGVzIG1heSBiZSBtZXJnZWQgaW4gdGhlCiAgICAgICAgICAgICBzdGFibGUgYnJhbmNoLiBEZXBlbmRpbmcgb24gdGhlIGFtb3VudCBvZiBjb2RlIGNoYW5nZWQgb3IgcmVwbGFjZWQKICAgICAgICAgICAgIGFuZCB0aGUgbGV2ZWwgb2YgdHJ1c3QgdGhlIGF1dGhvciBoYXMgaW4gdGhlIGNoYW5nZSwgdGhlIHJpc2sgb2YKICAgICAgICAgICAgIHJlZ3Jlc3Npb24gc2hvdWxkIGJlIGluZGljYXRlZC4KCiAgLSBSRUxFQVNFICByZWxlYXNlIG9mIGEgbmV3IHZlcnNpb24gKGRldmVsb3BtZW50IG9yIHN0YWJsZSkuCgogIC0gTElDRU5TRSAgbGljZW5zaW5nIHVwZGF0ZXMgKG1heSBpbXBhY3QgZGlzdHJvIHBhY2thZ2VycykuCgoKV2hlbiB0aGUgcGF0Y2ggY2Fubm90IGJlIGNhdGVnb3JpemVkLCBpdCdzIGJlc3Qgbm90IHRvIHB1dCBhbnkgdGFnLiBUaGlzIGlzCmNvbW1vbmx5IHRoZSBjYXNlIGZvciBuZXcgZmVhdHVyZXMsIHdoaWNoIGRldmVsb3BtZW50IHZlcnNpb25zIGFyZSBtb3N0bHkgbWFkZQpvZi4KCkFkZGl0aW9uYWxseSwgdGhlIGltcG9ydGFuY2Ugb2YgdGhlIHBhdGNoIHNob3VsZCBiZSBpbmRpY2F0ZWQgd2hlbiBrbm93bi4gQQpzaW5nbGUgdXBwZXItY2FzZSB3b3JkIGlzIHByZWZlcnJlZCwgYW1vbmcgOgoKICAtIE1JTk9SICAgIG1pbm9yIGNoYW5nZSwgdmVyeSBsb3cgcmlzayBvZiBpbXBhY3QuIEl0IGlzIG9mdGVuIHRoZSBjYXNlIGZvcgogICAgICAgICAgICAgY29kZSBhZGRpdGlvbnMgdGhhdCBkb24ndCB0b3VjaCBsaXZlIGNvZGUuIEZvciBhIGJ1ZywgaXQgZ2VuZXJhbGx5CiAgICAgICAgICAgICBpbmRpY2F0ZXMgYW4gYW5ub3lhbmNlLCBub3RoaW5nIG1vcmUuCgogIC0gTUVESVVNICAgbWVkaXVtIHJpc2ssIG1heSBjYXVzZSB1bmV4cGVjdGVkIHJlZ3Jlc3Npb25zIG9mIGxvdyBpbXBvcnRhbmNlIG9yCiAgICAgICAgICAgICB3aGljaCBtYXkgcXVpY2tseSBiZSBkaXNjb3ZlcmVkLiBGb3IgYSBidWcsIGl0IGdlbmVyYWxseSBpbmRpY2F0ZXMKICAgICAgICAgICAgIHNvbWV0aGluZyBvZGQgd2hpY2ggcmVxdWlyZXMgY2hhbmdpbmcgdGhlIGNvbmZpZ3VyYXRpb24gaW4gYW4KICAgICAgICAgICAgIHVuZGVzaXJlZCB3YXkgdG8gd29yayBhcm91bmQgdGhlIGlzc3VlLgoKICAtIE1BSk9SICAgIG1ham9yIHJpc2sgb2YgaGlkZGVuIHJlZ3Jlc3Npb24uIFRoaXMgaGFwcGVucyB3aGVuIEkgcmVhcnJhbmdlCiAgICAgICAgICAgICBsYXJnZSBwYXJ0cyBvZiBjb2RlLCB3aGVuIEkgcGxheSB3aXRoIHRpbWVvdXRzLCB3aXRoIHZhcmlhYmxlCiAgICAgICAgICAgICBpbml0aWFsaXphdGlvbnMsIGV0Yy4uLiBXZSBzaG91bGQgb25seSBleGNlcHRpb25hbGx5IGZpbmQgc3VjaAogICAgICAgICAgICAgcGF0Y2hlcyBpbiBzdGFibGUgYnJhbmNoZXMuIEZvciBhIGJ1ZywgaXQgaW5kaWNhdGVzIHNldmVyZQogICAgICAgICAgICAgcmVsaWFiaWxpdHkgaXNzdWVzIGZvciB3aGljaCB3b3JrYXJvdW5kcyBhcmUgaWRlbnRpZmllZCB3aXRoIG9yCiAgICAgICAgICAgICB3aXRob3V0IHBlcmZvcm1hbmNlIGltcGFjdHMuCgogIC0gQ1JJVElDQUwgbWVkaXVtLXRlcm0gcmVsaWFiaWxpdHkgb3Igc2VjdXJpdHkgaXMgYXQgcmlzayBhbmQgd29ya2Fyb3VuZHMsCiAgICAgICAgICAgICBpZiB0aGV5IGV4aXN0LCBtaWdodCBub3QgYWx3YXlzIGJlIGFjY2VwdGFibGUuIEFuIHVwZ3JhZGUgaXMKICAgICAgICAgICAgIGFic29sdXRlbHkgcmVxdWlyZWQuIEEgbWFpbnRlbmFuY2UgcmVsZWFzZSBtYXkgYmUgZW1pdHRlZCBldmVuIGlmCiAgICAgICAgICAgICBvbmx5IG9uZSBvZiB0aGVzZSBidWdzIGFyZSBmaXhlZC4gTm90ZSB0aGF0IHRoaXMgdGFnIGlzIG9ubHkgdXNlZAogICAgICAgICAgICAgd2l0aCBidWdzLiBTdWNoIHBhdGNoZXMgbXVzdCBpbmRpY2F0ZSB3aGF0IGlzIHRoZSBmaXJzdCB2ZXJzaW9uCiAgICAgICAgICAgICBhZmZlY3RlZCwgYW5kIGlmIGtub3duLCB0aGUgY29tbWl0IElEIHdoaWNoIGludHJvZHVjZWQgdGhlIGlzc3VlLgoKSWYgdGhpcyBjcml0ZXJpb24gZG9lc24ndCBhcHBseSwgaXQncyBiZXN0IG5vdCB0byBwdXQgaXQuIEZvciBpbnN0YW5jZSwgbW9zdApkb2MgdXBkYXRlcyBhbmQgbW9zdCBleGFtcGxlcyBvciB0ZXN0IGZpbGVzIGFyZSBqdXN0IGFkZGVkIG9yIHVwZGF0ZWQgd2l0aG91dAphbnkgbmVlZCB0byBxdWFsaWZ5IGEgbGV2ZWwgb2YgaW1wb3J0YW5jZS4KClRoZSBhcmVhIHRoZSBwYXRjaCBhcHBsaWVzIHRvIGlzIHF1aXRlIGltcG9ydGFudCwgYmVjYXVzZSBzb21lIGFyZWFzIGFyZSBrbm93bgp0byBiZSBzaW1pbGFyIGluIG9sZGVyIHZlcnNpb25zLCBzdWdnZXN0aW5nIGEgYmFja3BvcnQgbWlnaHQgYmUgZGVzaXJhYmxlLCBhbmQKY29udmVyc2VseSwgc29tZSBhcmVhcyBhcmUga25vd24gdG8gYmUgc3BlY2lmaWMgdG8gb25lIHZlcnNpb24uIFdoZW4gdGhlIHRhZyBpcwp1c2VkIGFsb25lLCB1cHBlcmNhc2UgaXMgcHJlZmVycmVkIGZvciByZWFkYWJpbGl0eSwgb3RoZXJ3aXNlIGxvd2VyY2FzZSBpcyBmaW5lCnRvby4gVGhlIGZvbGxvd2luZyB0YWdzIGFyZSBzdWdnZXN0ZWQgYnV0IG5vdCBsaW1pdGF0aXZlIDoKCiAtIGRvYyAgICAgICBkb2N1bWVudGF0aW9uIHVwZGF0ZXMgb3IgZml4ZXMuIE5vIGNvZGUgaXMgYWZmZWN0ZWQsIG5vIG5lZWQgdG8KICAgICAgICAgICAgIHVwZ3JhZGUuIFRoZXNlIHBhdGNoZXMgY2FuIGFsc28gYmUgc2VudCByaWdodCBhZnRlciBhIG5ldyBmZWF0dXJlLAogICAgICAgICAgICAgdG8gZG9jdW1lbnQgaXQuCgogLSBleGFtcGxlcyAgZXhhbXBsZSBmaWxlcy4gQmUgY2FyZWZ1bCwgc29tZXRpbWVzIHRoZXNlIGZpbGVzIGFyZSBwYWNrYWdlZC4KCiAtIHRlc3RzICAgICByZWdyZXNzaW9uIHRlc3QgZmlsZXMuIE5vIGNvZGUgaXMgYWZmZWN0ZWQsIG5vIG5lZWQgdG8gdXBncmFkZS4KCiAtIGluaXQgICAgICBpbml0aWFsaXphdGlvbiBjb2RlLCBhcmd1bWVudHMgcGFyc2luZywgZXRjLi4uCgogLSBjb25maWcgICAgY29uZmlndXJhdGlvbiBwYXJzZXIsIG1vc3RseSB1c2VkIHdoZW4gYWRkaW5nIG5ldyBjb25maWcga2V5d29yZHMKCiAtIGh0dHAgICAgICB0aGUgSFRUUCBlbmdpbmUKCiAtIHN0YXRzICAgICB0aGUgc3RhdHMgcmVwb3J0aW5nIGVuZ2luZSBhcyB3ZWxsIGFzIHRoZSBzdGF0cyBzb2NrZXQgQ0xJCgogLSBjaGVja3MgICAgdGhlIGhlYWx0aCBjaGVja3MgZW5naW5lIChlZzogd2hlbiBhZGRpbmcgbmV3IGNoZWNrcykKCiAtIGFjbCAgICAgICB0aGUgQUNMIHByb2Nlc3NpbmcgY29yZSBvciBzb21lIEFDTHMgZnJvbSBvdGhlciBhcmVhcwoKIC0gcGVlcnMgICAgIHRoZSBwZWVyIHN5bmNocm9uaXphdGlvbiBlbmdpbmUKCiAtIGxpc3RlbmVycyBldmVyeXRoaW5nIHJlbGF0ZWQgdG8gaW5jb21pbmcgY29ubmVjdGlvbiBzZXR0aW5ncwoKIC0gZnJvbnRlbmQgIGV2ZXJ5dGhpbmcgcmVsYXRlZCB0byBpbmNvbWluZyBjb25uZWN0aW9uIHByb2Nlc3NpbmcKCiAtIGJhY2tlbmQgICBldmVyeXRoaW5nIHJlbGF0ZWQgdG8gTEIgYWxnb3JpdGhtcyBhbmQgc2VydmVyIGZhcm0KCiAtIHNlc3Npb24gICBzZXNzaW9uIHByb2Nlc3NpbmcgYW5kIGZsYWdzICh2ZXJ5IHNlbnNpYmxlLCBiZSBjYXJlZnVsKQoKIC0gc2VydmVyICAgIHNlcnZlciBjb25uZWN0aW9uIG1hbmFnZW1lbnQsIHF1ZXVlaW5nCgogLSBwcm94eSAgICAgcHJveHkgbWFpbnRlbmFuY2UgKHN0YXJ0L3N0b3ApCgogLSBsb2cgICAgICAgbG9nIG1hbmFnZW1lbnQKCiAtIHBvbGwgICAgICBhbnkgb2YgdGhlIHBvbGxlcnMKCiAtIGhhbG9nICAgICB0aGUgaGFsb2cgc3ViLWNvbXBvbmVudCBpbiB0aGUgY29udHJpYiBkaXJlY3RvcnkKCiAtIGNvbnRyaWIgICBhbnkgYWRkaXRpb24gdG8gdGhlIGNvbnRyaWIgZGlyZWN0b3J5CgpPdGhlciBuYW1lcyBtYXkgYmUgaW52ZW50ZWQgd2hlbiBtb3JlIHByZWNpc2UgaW5kaWNhdGlvbnMgYXJlIG1lYW5pbmdmdWwsIGZvcgppbnN0YW5jZSA6ICJjb29raWUiIHdoaWNoIGluZGljYXRlcyBjb29raWUgcHJvY2Vzc2luZyBpbiB0aGUgSFRUUCBjb3JlLiBMYXN0LAppbmRpY2F0aW5nIHRoZSBuYW1lIG9mIHRoZSBhZmZlY3RlZCBmaWxlIGlzIGFsc28gYSBnb29kIHdheSB0byBxdWlja2x5IHNwb3QKY2hhbmdlcy4gTWFueSBjb21taXRzIHdlcmUgYWxyZWFkeSB0YWdnZWQgd2l0aCAic3RyZWFtX3NvY2siIG9yICJjZmdwYXJzZSIgZm9yCmluc3RhbmNlLgoKSXQgaXMgZGVzaXJlZCB0aGF0IEFUIExFQVNUIG9uZSBvZiB0aGUgMyBjcml0ZXJpYSB0YWdzIGlzIHJlcG9ydGVkIGluIHRoZSBwYXRjaApzdWJqZWN0LiBJZGVhbGx5LCB3ZSB3b3VsZCBoYXZlIHRoZSAzIG1vc3Qgb2Z0ZW4uIFRoZSB0d28gZmlyc3QgY3JpdGVyaWEgc2hvdWxkCmJlIHByZXNlbnQgYmVmb3JlIGEgZmlyc3QgY29sb24gKCc6JykuIElmIGJvdGggYXJlIHByZXNlbnQsIHRoZW4gdGhleSBzaG91bGQgYmUKZGVsaW1pdGVkIHdpdGggYSBzbGFzaCAoJy8nKS4gVGhlIDNyZCBjcml0ZXJpb24gKGFyZWEpIHNob3VsZCBhcHBlYXIgbmV4dCwgYWxzbwpmb2xsb3dlZCBieSBhIGNvbG9uLiBUaHVzLCBhbGwgb2YgdGhlIGZvbGxvd2luZyBtZXNzYWdlcyBhcmUgdmFsaWQgOgoKRXhhbXBsZXMgb2YgbWVzc2FnZXMgOgogIC0gRE9DOiBkb2N1bWVudCBvcHRpb25zIGZvcndhcmRmb3IgdG8gbG9nYXNhcAogIC0gRE9DL01BSk9SOiByZW9yZ2FuaXplIHRoZSB3aG9sZSBkb2N1bWVudCBhbmQgY2hhbmdlIGluZGVudGluZwogIC0gQlVHOiBzdGF0czogY29ubmVjdGlvbiByZXNldCBjb3VudGVycyBtdXN0IGJlIHBsYWluIGFzY2lpLCBub3QgSFRNTAogIC0gQlVHL01JTk9SOiBzdGF0czogY29ubmVjdGlvbiByZXNldCBjb3VudGVycyBtdXN0IGJlIHBsYWluIGFzY2lpLCBub3QgSFRNTAogIC0gTUVESVVNOiBjaGVja3M6IHN1cHBvcnQgbXVsdGktcGFja2V0IGhlYWx0aCBjaGVjayByZXNwb25zZXMKICAtIFJFTEVBU0U6IFJlbGVhc2VkIHZlcnNpb24gMS40LjIKICAtIEJVSUxEOiBzdGF0czogc3RkaW50IGlzIG5vdCBwcmVzZW50IG9uIHNvbGFyaXMKICAtIE9QVElNL01JTk9SOiBoYWxvZzogbWFrZSBmZ2V0cyBwYXJzZSBtb3JlIGJ5dGVzIGJ5IGJsb2NrcwogIC0gUkVPUkcvTUVESVVNOiBtb3ZlIHN5c2NhbGwgcmVkZWZpbml0aW9uIHRvIHNwZWNpZmljIHBsYWNlcwoKUGxlYXNlIGRvIG5vdCB1c2Ugc3F1YXJlIGJyYWNrZXRzIGFueW1vcmUgYXJvdW5kIHRoZSB0YWdzLCBiZWNhdXNlIHRoZXkgZ2l2ZSBtZQptb3JlIHdvcmsgd2hlbiBtZXJnaW5nIHBhdGNoZXMuIEJ5IGRlZmF1bHQgSSdtIGFza2luZyBHaXQgdG8ga2VlcCB0aGVtIGJ1dCB0aGlzCmNhdXNlcyB0cm91YmxlIHdoZW4gcGF0Y2hlcyBhcmUgcHJlZml4ZWQgd2l0aCB0aGUgW1BBVENIXSB0YWcgYmVjYXVzZSBpbiBvcmRlcgpub3QgdG8gc3RvcmUgaXQsIEkgaGF2ZSB0byBoYW5kLWVkaXQgdGhlIHBhdGNoZXMuIFNvIGFzIG9mIG5vdywgSSB3aWxsIGFzayBHaXQKdG8gcmVtb3ZlIHdoYXRldmVyIGlzIGxvY2F0ZWQgYmV0d2VlbiBzcXVhcmUgYnJhY2tldHMsIHdoaWNoIGltcGxpZXMgdGhhdCBhbnkKc3ViamVjdCBmb3JtYXR0ZWQgdGhlIG9sZCB3YXkgd2lsbCBoYXZlIGl0cyB0YWcgc3RyaXBwZWQgb3V0LgoKSW4gZmFjdCwgb25lIG9mIHRoZSBvbmx5IHNxdWFyZSBicmFja2V0IHRhZ3MgdGhhdCBzdGlsbCBtYWtlcyBzZW5zZSBpcyAnW1JGQ10nCmF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHN1YmplY3QsIHdoZW4geW91J3JlIGFza2luZyBmb3Igc29tZW9uZSB0byByZXZpZXcgeW91cgpjaGFuZ2UgYmVmb3JlIGdldHRpbmcgaXQgbWVyZ2VkLiBJZiB0aGUgcGF0Y2ggaXMgT0sgdG8gYmUgbWVyZ2VkLCB0aGVuIEkgY2FuCm1lcmdlIGl0IGFzLWlzIGFuZCB0aGUgJ1tSRkNdJyB0YWcgd2lsbCBhdXRvbWF0aWNhbGx5IGJlIHJlbW92ZWQuIElmIHlvdSBkb24ndAp3YW50IGl0IHRvIGJlIG1lcmdlZCBhdCBhbGwsIHlvdSBjYW4gc2ltcGx5IHN0YXRlIGl0IGluIHRoZSBtZXNzYWdlLCBvciB1c2UgYW4KYWx0ZXJuYXRlICdbV0lQXScgdGFnICgid29yayBpbiBwcm9ncmVzcyIpLgoKVGhlIHRhZ3MgYXJlIG5vdCByaWdpZCwgZm9sbG93IHlvdXIgaW50dWl0aW9uIGZpcnN0LCBhbnl3YXkgSSByZXNlcnZlIHRoZSByaWdodAp0byBjaGFuZ2UgdGhlbSB3aGVuIG1lcmdpbmcgdGhlIHBhdGNoLiBJdCBtYXkgaGFwcGVuIHRoYXQgYSBzYW1lIHBhdGNoIGhhcyBhCmRpZmZlcmVudCB0YWcgaW4gdHdvIGRpc3RpbmN0IGJyYW5jaGVzLiBUaGUgcmVhc29uIGlzIHRoYXQgYSBidWcgaW4gb25lIGJyYW5jaAptYXkganVzdCBiZSBhIGNsZWFudXAgaW4gdGhlIG90aGVyIG9uZSBiZWNhdXNlIHRoZSBjb2RlIGNhbm5vdCBiZSB0cmlnZ2VyZWQuCgoKRm9yIGEgbW9yZSBlZmZpY2llbnQgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGUgbWFpbmxpbmUgY29kZSBhbmQgeW91ciBjb2RlLCBJIGNhbgpvbmx5IHN0cm9uZ2x5IGVuY291cmFnZSB5b3UgdG8gdHJ5IHRoZSBHaXQgdmVyc2lvbiBjb250cm9sIHN5c3RlbSA6CgogICAgICAgICAgICAgICAgICAgICAgICBodHRwOi8vZ2l0LXNjbS5jb20vCgpJdCdzIHZlcnkgZmFzdCwgbGlnaHR3ZWlnaHQgYW5kIGxldHMgeW91IHVuZG8vcmVkbyB5b3VyIHdvcmsgYXMgb2Z0ZW4gYXMgeW91CndhbnQsIHdpdGhvdXQgbWFraW5nIHlvdXIgbWlzdGFrZXMgdmlzaWJsZSB0byB0aGUgcmVzdCBvZiB0aGUgd29ybGQuIEl0IHdpbGwKZGVmaW5pdGVseSBoZWxwIHlvdSBjb250cmlidXRlIHF1YWxpdHkgY29kZSBhbmQgdGFrZSBvdGhlciBwZW9wbGUncyBmZWVkYmFjawppbiBjb25zaWRlcmF0aW9uLiBJbiBvcmRlciB0byBjbG9uZSB0aGUgSEFQcm94eSBHaXQgcmVwb3NpdG9yeSA6CgogICAgJCBnaXQgY2xvbmUgaHR0cDovL2dpdC5oYXByb3h5Lm9yZy9naXQvaGFwcm94eS0xLjUuZ2l0ICAgIChzdGFibGUgMS41KQogICAgJCBnaXQgY2xvbmUgaHR0cDovL2dpdC5oYXByb3h5Lm9yZy9naXQvaGFwcm94eS5naXQvICAgICAgIChkZXZlbG9wbWVudCkKCklmIHlvdSBkZWNpZGUgdG8gdXNlIEdpdCBmb3IgeW91ciBkZXZlbG9wbWVudHMsIHRoZW4geW91ciBjb21taXQgbWVzc2FnZXMgd2lsbApoYXZlIHRoZSBzdWJqZWN0IGxpbmUgaW4gdGhlIGZvcm1hdCBkZXNjcmliZWQgYWJvdmUsIHRoZW4gdGhlIHdob2xlIGRlc2NyaXB0aW9uCm9mIHlvdXIgd29yayAobWFpbmx5IHdoeSB5b3UgZGlkIGl0KSB3aWxsIGJlIGluIHRoZSBib2R5LiBZb3UgY2FuIGRpcmVjdGx5IHNlbmQKeW91ciBjb21taXRzIHRvIHRoZSBtYWlsaW5nIGxpc3QsIHRoZSBmb3JtYXQgaXMgY29udmVuaWVudCB0byByZWFkIGFuZCBwcm9jZXNzLgoKLS0gZW5kCg==