schreck

📅 2023-04-24T12:18:38.766Z
👁️ 155 katselukertaa
🔓 Julkinen


U0hSRUsKT25jZSB1cG9uIGEgdGltZSB0aGVyZSB3YXMgYSBsb3ZlbHkKcHJpbmNlc3MuIEJ1dCBzaGXigIVoYWTigIVhbiBlbmNoYW50bWVudAp1cG9uIGhlcuKAhW9mIGEgZmVhcmZ1bCBzb3J0IHdoaWNoIGNvdWxkCm9ubHnigIViZSBicm9rZW4gYnkgbG92ZSdzIGZpcnN0IGtpc3MuClNoZSB3YXMgbG9ja2VkIGF3YXkgaW4gYSBjYXN0bGUgZ3VhcmRlZApieSBhIHRlcnJpYmxlIGZpcmUtYnJlYXRoaW5nIGRyYWdvbi4KTWFueSBicmF2ZSBrbmlnaHRzIGhhZCBhdHRlbXB0ZWQgdG8KZnJlZSBoZXIgZnJvbSB0aGlzIGRyZWFkZnVsIHByaXNvbiwKYnV0IG5vbiBwcmV2YWlsZWQuIFNoZSB3YWl0ZWQgaW4gdGhlCmRyYWdvbidzIGtlZXAgaW4gdGhlIGhpZ2hlc3Qgcm9vbSBvZgp0aGUgdGFsbGVzdCB0b3dlciBmb3IgaGVyIHRydWUgbG92ZQphbmQgdHJ1ZSBsb3ZlJ3MgZmlyc3Qga2lzcy4gKGxhdWdocykKTGlrZSB0aGF0J3MgZXZlciBnb25uYSBoYXBwZW4uIFdoYXQKYSBsb2FkIG9mIC0gKHRvaWxldCBmbHVzaCkKQWxsc3RhciAtIGJ5IFNtYXNobW91dGggYmVnaW5zIHRvIHBsYXkuIFNocmVrIGdvZXMgYWJvdXQgaGlzCmRheS4gV2hpbGUgaW4gYSBuZWFyYnkgdG93biwgdGhlIHZpbGxhZ2VycyBnZXQgdG9nZXRoZXIgdG8gZ28KYWZ0ZXIgdGhlIG9ncmUuCgpOSUdIVCAtIE5FQVIgU0hSRUsnUyBIT01FCgpNQU4xClRoaW5rIGl0J3MgaW4gdGhlcmU/CgpNQU4yCkFsbCByaWdodC4gTGV0J3MgZ2V0IGl0IQoKTUFOMQpXaG9hLiBIb2xkIG9uLiBEbyB5b3Uga25vdyB3aGF0IHRoYXQKdGhpbmcgY2FuIGRvIHRvIHlvdT8KCk1BTjMKWWVhaCwgaXQnbGwgZ3JpbmQgeW91ciBib25lcyBmb3IgaXQncwpicmVhZC4KClNocmVrIHNuZWFrcyB1cCBiZWhpbmQgdGhlbSBhbmQgbGF1Z2hzLgoKU0hSRUsKWWVzLCB3ZWxsLCBhY3R1YWxseSwgdGhhdCB3b3VsZCBiZSBhCmdpYW50LiBOb3csIG9ncmVzLCBvaCB0aGV5J3JlIG11Y2ggd29yc2UuClRoZXknbGwgbWFrZSBhIHN1aXQgZnJvbSB5b3VyIGZyZXNobHkKcGVlbGVkIHNraW4uCk1FTgpObyEKClNIUkVLClRoZXknbGwgc2hhdmUgeW91ciBsaXZlci4gU3F1ZWV6ZSB0aGUKamVsbHkgZnJvbSB5b3VyIGV5ZXMhIEFjdHVhbGx5LCBpdCdzCnF1aXRlIGdvb2Qgb24gdG9hc3QuCgpNQU4xCkJhY2shIEJhY2ssIGJlYXN0ISBCYWNrISBJIHdhcm4geWEhCih3YXZlcyB0aGUgdG9yY2ggYXQgU2hyZWsuKQoKU2hyZWsgY2FsbWx5IGxpY2tzIGhpcyBmaW5nZXJzIGFuZCBleHRpbmd1aXNoZXMgdGhlIHRvcmNoLiBUaGUKbWVuIHNocmluayBiYWNrIGF3YXkgZnJvbSBoaW0uIFNocmVrIHJvYXJzIHZlcnkgbG91ZGx5IGFuZCBsb25nCmFuZCBoaXMgYnJlYXRoIGV4dGluZ3Vpc2hlcyBhbGwgdGhlIHJlbWFpbmluZyB0b3JjaGVzIHVudGlsIHRoZQptZW4gYXJlIGluIHRoZSBkYXJrLgoKU0hSRUsKVGhpcyBpcyB0aGUgcGFydCB3aGVyZSB5b3UgcnVuIGF3YXkuCihUaGUgbWVuIHNjcmFtYmxlIHRvIGdldCBhd2F5LiBIZSBsYXVnaHMuKQpBbmQgc3RheSBvdXQhIChsb29rcyBkb3duIGFuZCBwaWNrcwp1cCBhIHBpZWNlIG9mIHBhcGVyLiBSZWFkcy4pICJXYW50ZWQuCkZhaXJ5IHRhbGUgY3JlYXR1cmVzLiIoSGUgc2lnaHMgYW5kCnRocm93cyB0aGUgcGFwZXIgb3ZlciBoaXMgc2hvdWxkZXIuKQoKVEhFIE5FWFQgREFZCgpUaGVyZSBpcyBhIGxpbmUgb2YgZmFpcnkgdGFsZSBjcmVhdHVyZXMuIFRoZSBoZWFkIG9mIHRoZSBndWFyZApzaXRzIGF0IGEgdGFibGUgcGF5aW5nIHBlb3BsZSBmb3IgYnJpbmdpbmcgdGhlIGZhaXJ5IHRhbGUgY3JlYXR1cmVzCnRvIGhpbS4gVGhlcmUgYXJlIGNhZ2VzIGFsbCBhcm91bmQuIFNvbWUgb2YgdGhlIHBlb3BsZSBpbiBsaW5lCmFyZSBQZXRlciBQYW4sIHdobyBpcyBjYXJyeWluZyBUaW5rZXJiZWxsIGluIGEgY2FnZSwgR2lwZXR0bwp3aG8ncyBjYXJyeWluZyBQaW5vY2NoaW8sIGFuZCBhIGZhcm1lciB3aG8gaXMgY2FycnlpbmcgdGhlIHRocmVlCmxpdHRsZSBwaWdzLgoKR1VBUkQKQWxsIHJpZ2h0LiBUaGlzIG9uZSdzIGZ1bGwuIFRha2UgaXQKYXdheSEgTW92ZSBpdCBhbG9uZy4gQ29tZSBvbiEgR2V0IHVwIQoKCkhFQUQgR1VBUkQKTmV4dCEKCkdVQVJECih0YWtpbmcgdGhlIHdpdGNoJ3MgYnJvb20pIEdpdmUgbWUgdGhhdCEKWW91ciBmbHlpbmcgZGF5cyBhcmUgb3Zlci4gKGJyZWFrcyB0aGUKYnJvb20gaW4gaGFsZikKCkhFQUQgR1VBUkQKVGhhdCdzIDIwIHBpZWNlcyBvZiBzaWx2ZXIgZm9yIHRoZSB3aXRjaC4KTmV4dCEKCkdVQVJECkdldCB1cCEgQ29tZSBvbiEKCkhFQUQgR1VBUkQKVHdlbnR5IHBpZWNlcy4KCkxJVFRMRSBCRUFSCihjcnlpbmcpIFRoaXMgY2FnZSBpcyB0b28gc21hbGwuCgpET05LRVkKUGxlYXNlLCBkb24ndCB0dXJuIG1lIGluLiBJJ2xsIG5ldmVyCmJlIHN0dWJib3JuIGFnYWluLiBJIGNhbiBjaGFuZ2UuIFBsZWFzZSEKR2l2ZSBtZSBhbm90aGVyIGNoYW5jZSEKCk9MRCBXT01BTgpPaCwgc2h1dCB1cC4gKGplcmtzIGhpcyByb3BlKQoKRE9OS0VZCk9oIQoKSEVBRCBHVUFSRApOZXh0ISBXaGF0IGhhdmUgeW91IGdvdD8KCkdJUEVUVE8KVGhpcyBsaXR0bGUgd29vZGVuIHB1cHBldC4KClBJTk9DQ0hJTwpJJ20gbm90IGEgcHVwcGV0LiBJJ20gYSByZWFsIGJveS4gKGhpcwpub3NlIGdyb3dzKQoKSEVBRCBHVUFSRApGaXZlIHNoaWxsaW5ncyBmb3IgdGhlIHBvc3Nlc3NlZCB0b3kuClRha2UgaXQgYXdheS4KClBJTk9DQ0hJTwpGYXRoZXIsIHBsZWFzZSEgRG9uJ3QgbGV0IHRoZW0gZG8gdGhpcyEKSGVscCBtZSEKCkdpcGV0dG8gdGFrZXMgdGhlIG1vbmV5IGFuZCB3YWxrcyBvZmYuIFRoZSBvbGQgd29tYW4gc3RlcHMgdXAKdG8gdGhlIHRhYmxlLgoKSEVBRCBHVUFSRApOZXh0ISBXaGF0IGhhdmUgeW91IGdvdD8KCk9MRCBXT01BTgpXZWxsLCBJJ3ZlIGdvdCBhIHRhbGtpbmcgZG9ua2V5LgoKSEVBRCBHVUFSRApSaWdodC4gV2VsbCwgdGhhdCdzIGdvb2QgZm9yIHRlbiBzaGlsbGluZ3MsCmlmIHlvdSBjYW4gcHJvdmUgaXQuCgpPTEQgV09NQU4KT2gsIGdvIGFoZWFkLCBsaXR0bGUgZmVsbGEuCgpEb25rZXkganVzdCBsb29rcyB1cCBhdCBoZXIuCgpIRUFEIEdVQVJECldlbGw/CgpPTEQgV09NQU4KT2gsIG9oLCBoZSdzIGp1c3QuLi5oZSdzIGp1c3QgYSBsaXR0bGUKbmVydm91cy4gSGUncyByZWFsbHkgcXVpdGUgYSBjaGF0dGVyYm94LgpUYWxrLCB5b3UgYm9uZWhlYWRlZCBkb2x0Li4uCgpIRUFEIEdVQVJEClRoYXQncyBpdC4gSSd2ZSBoZWFyZCBlbm91Z2guIEd1YXJkcyEKCgpPTEQgV09NQU4KTm8sIG5vLCBoZSB0YWxrcyEgSGUgZG9lcy4gKHByZXRlbmRzCnRvIGJlIERvbmtleSkgSSBjYW4gdGFsay4gSSBsb3ZlIHRvCnRhbGsuIEknbSB0aGUgdGFsa2luZ2VzdCBkYW1uIHRoaW5nCnlvdSBldmVyIHNhdy4KCkhFQUQgR1VBUkQKR2V0IGhlciBvdXQgb2YgbXkgc2lnaHQuCgpPTEQgV09NQU4KTm8sIG5vISBJIHN3ZWFyISBPaCEgSGUgY2FuIHRhbGshCgpUaGUgZ3VhcmRzIGdyYWIgdGhlIG9sZCB3b21hbiBhbmQgc2hlIHN0cnVnZ2xlcyB3aXRoIHRoZW0uIE9uZQpvZiBoZXIgbGVncyBmbGllcyBvdXQgYW5kIGtpY2tzIFRpbmtlcmJlbGwgb3V0IG9mIFBldGVyIFBhbidzCmhhbmRzLCBhbmQgaGVyIGNhZ2UgZHJvcHMgb24gRG9ua2V5J3MgaGVhZC4gSGUgZ2V0cyBzcHJpbmtsZWQKd2l0aCBmYWlyeSBkdXN0IGFuZCBoZSdzIGFibGUgdG8gZmx5LgoKRE9OS0VZCkhleSEgSSBjYW4gZmx5IQoKUEVURVIgUEFOCkhlIGNhbiBmbHkhCgozIExJVFRMRSBQSUdTCkhlIGNhbiBmbHkhCgpIRUFEIEdVQVJECkhlIGNhbiB0YWxrIQoKRE9OS0VZCkhhLCBoYSEgVGhhdCdzIHJpZ2h0LCBmb29sISBOb3cgSSdtCmEgZmx5aW5nLCB0YWxraW5nIGRvbmtleS4gWW91IG1pZ2h0CmhhdmUgc2VlbiBhIGhvdXNlZmx5LCBtYXliZSBldmVuIGEgc3VwZXJmbHkKYnV0IEkgYmV0IHlvdSBhaW4ndCBuZXZlciBzZWVuIGEgZG9ua2V5CmZseS4gSGEsIGhhISAodGhlIHBpeGllIGR1c3QgYmVnaW5zCnRvIHdlYXIgb2ZmKSBVaC1vaC4gKGhlIGJlZ2lucyB0byBzaW5rCnRvIHRoZSBncm91bmQuKQoKSGUgaGl0cyB0aGUgZ3JvdW5kIHdpdGggYSB0aHVkLgoKSEVBRCBHVUFSRApTZWl6ZSBoaW0hIChEb25rZXkgdGFrZXMgb2YgcnVubmluZy4pCkFmdGVyIGhpbSEKCkdVQVJEUwpIZSdzIGdldHRpbmcgYXdheSEgR2V0IGhpbSEgVGhpcyB3YXkhClR1cm4hCgpEb25rZXkga2VlcHMgcnVubmluZyBhbmQgaGUgZXZlbnR1YWxseSBydW5zIGludG8gU2hyZWsuIExpdGVyYWxseS4KU2hyZWsgdHVybnMgYXJvdW5kIHRvIHNlZSB3aG8gYnVtcGVkIGludG8gaGltLiBEb25rZXkgbG9va3Mgc2NhcmVkCmZvciBhIG1vbWVudCB0aGVuIGhlIHNwb3RzIHRoZSBndWFyZHMgY29taW5nIHVwIHRoZSBwYXRoLiBIZQpxdWlja2x5IGhpZGVzIGJlaGluZCBTaHJlay4KCkhFQUQgR1VBUkQKWW91IHRoZXJlLiBPZ3JlIQoKU0hSRUsKQXllPwoKSEVBRCBHVUFSRApCeSB0aGUgb3JkZXIgb2YgTG9yZCBGYXJxdWFhZCBJIGFtIGF1dGhvcml6ZWQKdG8gcGxhY2UgeW91IGJvdGggdW5kZXIgYXJyZXN0IGFuZCB0cmFuc3BvcnQKeW91IHRvIGEgZGVzaWduYXRlZCByZXNldHRsZW1lbnQgZmFjaWxpdHkuCgoKU0hSRUsKT2gsIHJlYWxseT8gWW91IGFuZCB3aGF0IGFybXk/CgpIZSBsb29rcyBiZWhpbmQgdGhlIGd1YXJkIGFuZCB0aGUgZ3VhcmQgdHVybnMgdG8gbG9vayBhcyB3ZWxsCmFuZCB3ZSBzZWUgdGhhdCB0aGUgb3RoZXIgbWVuIGhhdmUgcnVuIG9mZi4gVGhlIGd1YXJkIHR1Y2tzIHRhaWwKYW5kIHJ1bnMgb2ZmLiBTaHJlayBsYXVnaHMgYW5kIGdvZXMgYmFjayBhYm91dCBoaXMgYnVzaW5lc3MgYW5kCmJlZ2lucyB3YWxraW5nIGJhY2sgdG8gaGlzIGNvdHRhZ2UuCgpET05LRVkKQ2FuIEkgc2F5IHNvbWV0aGluZyB0byB5b3U/IExpc3RlbiwKeW91IHdhcyByZWFsbHksIHJlYWxseSwgcmVhbGx5IHNvbWV0aGluJwpiYWNrIGhlcmUuIEluY3JlZGlibGUhCgpTSFJFSwpBcmUgeW91IHRhbGtpbicgdG8uLi4oaGUgdHVybnMgYXJvdW5kCmFuZCBEb25rZXkgaXMgZ29uZSkgbWU/IChoZSB0dXJucyBiYWNrCmFyb3VuZCBhbmQgRG9ua2V5IGlzIHJpZ2h0IGluIGZyb250Cm9mIGhpbS4pIFdob2EhCgpET05LRVkKWWVzLiBJIHdhcyB0YWxraW4nIHRvIHlvdS4gQ2FuIEkgdGVsbAp5b3UgdGhhdCB5b3UgdGhhdCB5b3Ugd2FzIGdyZWF0IGJhY2sKaGVyZT8gVGhvc2UgZ3VhcmRzISBUaGV5IHRob3VnaHQgdGhleQp3YXMgYWxsIG9mIHRoYXQuIFRoZW4geW91IHNob3dlZCB1cCwKYW5kIGJhbSEgVGhleSB3YXMgdHJpcHBpbicgb3ZlciB0aGVtc2VsdmVzCmxpa2UgYmFiZXMgaW4gdGhlIHdvb2RzLiBUaGF0IHJlYWxseQptYWRlIG1lIGZlZWwgZ29vZCB0byBzZWUgdGhhdC4KClNIUkVLCk9oLCB0aGF0J3MgZ3JlYXQuIFJlYWxseS4KCkRPTktFWQpNYW4sIGl0J3MgZ29vZCB0byBiZSBmcmVlLgoKU0hSRUsKTm93LCB3aHkgZG9uJ3QgeW91IGdvIGNlbGVicmF0ZSB5b3VyCmZyZWVkb20gd2l0aCB5b3VyIG93biBmcmllbmRzPyBIbW0/CgoKRE9OS0VZCkJ1dCwgdWgsIEkgZG9uJ3QgaGF2ZSBhbnkgZnJpZW5kcy4gQW5kCkknbSBub3QgZ29pbicgb3V0IHRoZXJlIGJ5IG15c2VsZi4gSGV5LAp3YWl0IGEgbWludXRlISBJIGdvdCBhIGdyZWF0IGlkZWEhIEknbGwKc3RpY2sgd2l0aCB5b3UuIFlvdSdyZSBtZWFuLCBncmVlbiwKZmlnaHRpbicgbWFjaGluZS4gVG9nZXRoZXIgd2UnbGwgc2NhcmUKdGhlIHNwaXQgb3V0IG9mIGFueWJvZHkgdGhhdCBjcm9zc2VzCnVzLgoKU2hyZWsgdHVybnMgYW5kIHJlZ2FyZHMgRG9ua2V5IGZvciBhIG1vbWVudCBiZWZvcmUgcm9hcmluZyB2ZXJ5CmxvdWRseS4KCkRPTktFWQpPaCwgd293ISBUaGF0IHdhcyByZWFsbHkgc2NhcnkuIElmIHlvdQpkb24ndCBtaW5kIG1lIHNheWluJywgaWYgdGhhdCBkb24ndAp3b3JrLCB5b3VyIGJyZWF0aCBjZXJ0YWlubHkgd2lsbCBnZXQKdGhlIGpvYiBkb25lLCAnY2F1c2UgeW91IGRlZmluaXRlbHkKbmVlZCBzb21lIFRpYyBUYWNzIG9yIHNvbWV0aGluZywgJ2NhdXNlCnlvdSBicmVhdGggc3RpbmtzISBZb3UgYWxtb3N0IGJ1cm5lZAp0aGUgaGFpciBvdXR0YSBteSBub3NlLCBqdXN0IGxpa2UgdGhlCnRpbWUuLi4oU2hyZWsgY292ZXJzIGhpcyBtb3V0aCBidXQgRG9ua2V5CmNvbnRpbnVlcyB0byB0YWxrLCBzbyBTaHJlayByZW1vdmVzCmhpcyBoYW5kLikgLi4udGhlbiBJIGF0ZSBzb21lIHJvdHRlbgpiZXJyaWVzLiBJIGhhZCBzdHJvbmcgZ2FzZXMgbGVha2luZwpvdXQgb2YgbXkgYnV0dCB0aGF0IGRheS4KClNIUkVLCldoeSBhcmUgeW91IGZvbGxvd2luZyBtZT8KCkRPTktFWQpJJ2xsIHRlbGwgeW91IHdoeS4gKHNpbmdpbmcpICdDYXVzZQpJJ20gYWxsIGFsb25lLCBUaGVyZSdzIG5vIG9uZSBoZXJlIGJlc2lkZQptZSwgTXkgcHJvYmxlbXMgaGF2ZSBhbGwgZ29uZSwgVGhlcmUncwpubyBvbmUgdG8gZGVyaWRlIG1lLCBCdXQgeW91IGdvdHRhIGhhdmUKZmFpdGguLi4KClNIUkVLClN0b3Agc2luZ2luZyEgSXQncyBubyB3b25kZXIgeW91IGRvbid0CmhhdmUgYW55IGZyaWVuZHMuCgpET05LRVkKV293LiBPbmx5IGEgdHJ1ZSBmcmllbmQgd291bGQgYmUgdGhhdApjcnVlbGx5IGhvbmVzdC4KClNIUkVLCkxpc3RlbiwgbGl0dGxlIGRvbmtleS4gVGFrZSBhIGxvb2sgYXQKbWUuIFdoYXQgYW0gST8KCkRPTktFWQoobG9va3MgYWxsIHRoZSB3YXkgdXAgYXQgU2hyZWspIFVoIC4uLnJlYWxseQp0YWxsPwoKU0hSRUsKTm8hIEknbSBhbiBvZ3JlISBZb3Uga25vdy4gIkdyYWIgeW91cgp0b3JjaCBhbmQgcGl0Y2hmb3Jrcy4iIERvZXNuJ3QgdGhhdApib3RoZXIgeW91PwoKRE9OS0VZCk5vcGUuCgpTSFJFSwpSZWFsbHk/CgpET05LRVkKUmVhbGx5LCByZWFsbHkuCgpTSFJFSwpPaC4KCkRPTktFWQpNYW4sIEkgbGlrZSB5b3UuIFdoYXQncyB5b3UgbmFtZT8KClNIUkVLClVoLCBTaHJlay4KCkRPTktFWQpTaHJlaz8gV2VsbCwgeW91IGtub3cgd2hhdCBJIGxpa2UgYWJvdXQKeW91LCBTaHJlaz8gWW91IGdvdCB0aGF0IGtpbmQgb2YgSS1kb24ndC1jYXJlLXdoYXQtbm9ib2R5LXRoaW5rcy1vZi1tZQp0aGluZy4gSSBsaWtlIHRoYXQuIEkgcmVzcGVjdCB0aGF0LApTaHJlay4gWW91IGFsbCByaWdodC4gKFRoZXkgY29tZSBvdmVyCmEgaGlsbCBhbmQgeW91IGNhbiBzZWUgU2hyZWsncyBjb3R0YWdlLikKV2hvYSEgTG9vayBhdCB0aGF0LiBXaG8nZCB3YW50IHRvIGxpdmUKaW4gcGxhY2UgbGlrZSB0aGF0PwoKU0hSRUsKVGhhdCB3b3VsZCBiZSBteSBob21lLgoKRE9OS0VZCk9oISBBbmQgaXQgaXMgbG92ZWx5ISBKdXN0IGJlYXV0aWZ1bC4KWW91IGtub3cgeW91IGFyZSBxdWl0ZSBhIGRlY29yYXRvci4KSXQncyBhbWF6aW5nIHdoYXQgeW91J3ZlIGRvbmUgd2l0aCBzdWNoCmEgbW9kZXN0IGJ1ZGdldC4gSSBsaWtlIHRoYXQgYm91bGRlci4KVGhhdCBpcyBhIG5pY2UgYm91bGRlci4gSSBndWVzcyB5b3UKZG9uJ3QgZW50ZXJ0YWluIG11Y2gsIGRvIHlvdT8KClNIUkVLCkkgbGlrZSBteSBwcml2YWN5LgoKRE9OS0VZCllvdSBrbm93LCBJIGRvIHRvby4gVGhhdCdzIGFub3RoZXIgdGhpbmcKd2UgaGF2ZSBpbiBjb21tb24uIExpa2UgSSBoYXRlIGl0IHdoZW4KeW91IGdvdCBzb21lYm9keSBpbiB5b3VyIGZhY2UuIFlvdSd2ZQp0cnlpbmcgdG8gZ2l2ZSB0aGVtIGEgaGludCwgYW5kIHRoZXkKd29uJ3QgbGVhdmUuIFRoZXJlJ3MgdGhhdCBhd2t3YXJkIHNpbGVuY2UuCihhd2t3YXJkIHNpbGVuY2UpIENhbiBJIHN0YXkgd2l0JyB5b3U/CgoKU0hSRUsKVWgsIHdoYXQ/CgpET05LRVkKQ2FuIEkgc3RheSB3aXQnIHlvdSwgcGxlYXNlPwoKU0hSRUsKKHNhcmNhc3RpY2FsbHkpIE9mIGNvdXJzZSEKCkRPTktFWQpSZWFsbHk/CgpTSFJFSwpOby4KCkRPTktFWQpQbGVhc2UhIEkgZG9uJ3Qgd2FubmEgZ28gYmFjayB0aGVyZSEKWW91IGRvbid0IGtub3cgd2hhdCBpdCdzIGxpa2UgdG8gYmUKY29uc2lkZXJlZCBhIGZyZWFrLiAocGF1c2Ugd2hpbGUgaGUKbG9va3MgYXQgU2hyZWspIFdlbGwsIG1heWJlIHlvdSBkby4KQnV0IHRoYXQncyB3aHkgd2UgZ290dGEgc3RpY2sgdG9nZXRoZXIuCllvdSBnb3R0YSBsZXQgbWUgc3RheSEgUGxlYXNlISBQbGVhc2UhCgoKU0hSRUsKT2theSEgT2theSEgQnV0IG9uZSBuaWdodCBvbmx5LgoKRE9OS0VZCkFoISBUaGFuayB5b3UhIChoZSBydW5zIGluc2lkZSB0aGUgY290dGFnZSkKCgpTSFJFSwpXaGF0IGFyZSB5b3UuLi4/IChEb25rZXkgaG9wcyB1cCBvbnRvCmEgY2hhaXIuKSBObyEgTm8hCgpET05LRVkKVGhpcyBpcyBnb25uYSBiZSBmdW4hIFdlIGNhbiBzdGF5IHVwCmxhdGUsIHN3YXBwaW4nIG1hbmx5IHN0b3JpZXMsIGFuZCBpbgp0aGUgbW9ybmluJyBJJ20gbWFraW4nIHdhZmZsZXMuCgpTSFJFSwpPaCEKCkRPTktFWQpXaGVyZSBkbywgdWgsIEkgc2xlZXA/CgpTSFJFSwooaXJyaXRhdGVkKSBPdXRzaWRlIQoKRE9OS0VZCk9oLCB3ZWxsLCBJIGd1ZXNzIHRoYXQncyBjb29sLiBJIG1lYW4sCkkgZG9uJ3Qga25vdyB5b3UsIGFuZCB5b3UgZG9uJ3Qga25vdwptZSwgc28gSSBndWVzcyBvdXRzaWRlIGlzIGJlc3QsIHlvdQprbm93LiBIZXJlIEkgZ28uIEdvb2QgbmlnaHQuIChTaHJlawpzbGFtcyB0aGUgZG9vci4pIChzaWdoKSBJIG1lYW4sIEkgZG8KbGlrZSB0aGUgb3V0ZG9vcnMuIEknbSBhIGRvbmtleS4gSSB3YXMKYm9ybiBvdXRzaWRlLiBJJ2xsIGp1c3QgYmUgc2l0dGluZyBieQpteXNlbGYgb3V0c2lkZSwgSSBndWVzcywgeW91IGtub3cuIEJ5Cm15c2VsZiwgb3V0c2lkZS4gSSdtIGFsbCBhbG9uZS4uLnRoZXJlJ3MKbm8gb25lIGhlcmUgYmVzaWRlIG1lLi4uCgpTSFJFSydTIENPVFRBR0UgLSBOSUdIVAoKU2hyZWsgaXMgZ2V0dGluZyByZWFkeSBmb3IgZGlubmVyLiBIZSBzaXRzIGhpbXNlbGYgZG93biBhbmQgbGlnaHRzCmEgY2FuZGxlIG1hZGUgb3V0IG9mIGVhcndheC4gSGUgYmVnaW5zIHRvIGVhdCB3aGVuIGhlIGhlYXJzIGEKbm9pc2UuIEhlIHN0YW5kcyB1cCB3aXRoIGEgaHVmZi4KClNIUkVLCih0byBEb25rZXkpIEkgdGhvdWdodCBJIHRvbGQgeW91IHRvCnN0YXkgb3V0c2lkZS4KCkRPTktFWQooZnJvbSB0aGUgd2luZG93KSBJIGFtIG91dHNpZGUuCgpUaGVyZSBpcyBhbm90aGVyIG5vaXNlIGFuZCBTaHJlayB0dXJucyB0byBmaW5kIHRoZSBwZXJzb24gdGhhdAptYWRlIHRoZSBub2lzZS4gSGUgc2VlcyBzZXZlcmFsIHNoYWRvd3MgbW92aW5nLiBIZSBmaW5hbGx5IHR1cm5zCmFuZCBzcG90cyAzIGJsaW5kIG1pY2Ugb24gaGlzIHRhYmxlLgoKQkxJTkQgTU9VU0UxCldlbGwsIGdlbnRzLCBpdCdzIGEgZmFyIGNyeSBmcm9tIHRoZQpmYXJtLCBidXQgd2hhdCBjaG9pY2UgZG8gd2UgaGF2ZT8KCgpCTElORCBNT1VTRTIKSXQncyBub3QgaG9tZSwgYnV0IGl0J2xsIGRvIGp1c3QgZmluZS4KCgpHT1JETwooYm91bmNpbmcgb24gYSBzbHVnKSBXaGF0IGEgbG92ZWx5IGJlZC4KCgpTSFJFSwpHb3QgeWEuIChHcmFicyBhIG1vdXNlLCBidXQgaXQgZXNjYXBlcwphbmQgbGFuZHMgb24gaGlzIHNob3VsZGVyLikKCkdPUkRPCkkgZm91bmQgc29tZSBjaGVlc2UuIChiaXRlcyBTaHJlaydzCmVhcikKClNIUkVLCk93IQoKR09SRE8KQmxhaCEgQXdmdWwgc3R1ZmYuCgpCTElORCBNT1VTRTEKSXMgdGhhdCB5b3UsIEdvcmRvPwoKR09SRE8KSG93IGRpZCB5b3Uga25vdz8KClNIUkVLCkVub3VnaCEgKGhlIGdyYWJzIHRoZSAzIG1pY2UpIFdoYXQgYXJlCnlvdSBkb2luZyBpbiBteSBob3VzZT8gKEhlIGdldHMgYnVtcGVkCmZyb20gYmVoaW5kIGFuZCBoZSBkcm9wcyB0aGUgbWljZS4pCkhleSEgKGhlIHR1cm5zIGFuZCBzZWVzIHRoZSBTZXZlbiBEd2FydmVzCndpdGggU25vdyBXaGl0ZSBvbiB0aGUgdGFibGUuKSBPaCwgbm8sCm5vLCBuby4gRGVhZCBicm9hZCBvZmYgdGhlIHRhYmxlLgoKCkRXQVJGCldoZXJlIGFyZSB3ZSBzdXBwb3NlZCB0byBwdXQgaGVyPyBUaGUKYmVkJ3MgdGFrZW4uCgpTSFJFSwpIdWg/CgpTaHJlayBtYXJjaGVzIG92ZXIgdG8gdGhlIGJlZHJvb20gYW5kIHRocm93cyBiYWNrIHRoZSBjdXJ0YWluLgpUaGUgQmlnIEJhZCBXb2xmIGlzIHNpdHRpbmcgaW4gdGhlIGJlZC4gVGhlIHdvbGYganVzdCBsb29rcyBhdApoaW0uCgpCSUcgQkFEIFdPTEYKV2hhdD8KClRJTUUgTEFQU0UKClNocmVrIG5vdyBoYXMgdGhlIEJpZyBCYWQgV29sZiBieSB0aGUgY29sbGFyIGFuZCBpcyBkcmFnZ2luZwpoaW0gdG8gdGhlIGZyb250IGRvb3IuCgpTSFJFSwpJIGxpdmUgaW4gYSBzd2FtcC4gSSBwdXQgdXAgc2lnbnMuIEknbQphIHRlcnJpZnlpbmcgb2dyZSEgV2hhdCBkbyBJIGhhdmUgdG8KZG8gZ2V0IGEgbGl0dGxlIHByaXZhY3k/IChIZSBvcGVucyB0aGUKZnJvbnQgZG9vciB0byB0aHJvdyB0aGUgV29sZiBvdXQgYW5kCmhlIHNlZXMgdGhhdCBhbGwgdGhlIGNvbGxlY3RlZCBGYWlyeQpUYWxlIENyZWF0dXJlcyBhcmUgb24gaGlzIGxhbmQuKSBPaCwKbm8uIE5vISBObyEKClRoZSAzIGJlYXJzIHNpdCBhcm91bmQgdGhlIGZpcmUsIHRoZSBwaWVkIHBpcGVyIGlzIHBsYXlpbmcgaGlzCnBpcGUgYW5kIHRoZSByYXRzIGFyZSBhbGwgcnVubmluZyB0byBoaW0sIHNvbWUgZWx2ZXMgYXJlIGRpcmVjdGluZwpmbGlnaHQgdHJhZmZpYyBzbyB0aGF0IHRoZSBmYWlyaWVzIGFuZCB3aXRjaGVzIGNhbiBsYW5kLi4uZXRjLgoKClNIUkVLCldoYXQgYXJlIHlvdSBkb2luZyBpbiBteSBzd2FtcD8gKHRoaXMKZWNob2VzIGFuZCBldmVyeW9uZSBmYWxscyBzaWxlbnQuKQoKCkdhc3BzIGFyZSBoZWFyZCBhbGwgYXJvdW5kLiBUaGUgMyBnb29kIGZhaXJpZXMgaGlkZSBpbnNpZGUgYQp0ZW50LgoKU0hSRUsKQWxsIHJpZ2h0LCBnZXQgb3V0IG9mIGhlcmUuIEFsbCBvZiB5b3UsCm1vdmUgaXQhIENvbWUgb24hIExldCdzIGdvISBIYXBheWEhCkhhcGF5YSEgSGV5ISBRdWlja2x5LiBDb21lIG9uISAobW9yZQpkd2FydmVzIHJ1biBpbnNpZGUgdGhlIGhvdXNlKSBObywgbm8hCk5vLCBuby4gTm90IHRoZXJlLiBOb3QgdGhlcmUuICh0aGV5CnNodXQgdGhlIGRvb3Igb24gaGltKSBPaCEgKHR1cm5zIHRvCmxvb2sgYXQgRG9ua2V5KQoKRE9OS0VZCkhleSwgZG9uJ3QgbG9vayBhdCBtZS4gSSBkaWRuJ3QgaW52aXRlCnRoZW0uCgpQSU5PQ0NISU8KT2gsIGdvc2gsIG5vIG9uZSBpbnZpdGVkIHVzLgoKU0hSRUsKV2hhdD8KClBJTk9DQ0hJTwpXZSB3ZXJlIGZvcmNlZCB0byBjb21lIGhlcmUuCgpTSFJFSwooZmxhYmJlcmdhc3RlZCkgQnkgd2hvPwoKTElUVExFIFBJRwpMb3JkIEZhcnF1YWFkLiBIZSBodWZmZWQgYW5kIGhlIHB1ZmZlZAphbmQgaGUuLi5zaWduZWQgYW4gZXZpY3Rpb24gbm90aWNlLgoKClNIUkVLCihoZWF2eSBzaWdoKSBBbGwgcmlnaHQuIFdobyBrbm93cyB3aGVyZQp0aGlzIEZhcnF1YWFkIGd1eSBpcz8KCkV2ZXJ5b25lIGxvb2tzIGFyb3VuZCBhdCBlYWNoIG90aGVyIGJ1dCBubyBvbmUgYW5zd2Vycy4KCkRPTktFWQpPaCwgSSBkby4gSSBrbm93IHdoZXJlIGhlIGlzLgoKU0hSRUsKRG9lcyBhbnlvbmUgZWxzZSBrbm93IHdoZXJlIHRvIGZpbmQKaGltPyBBbnlvbmUgYXQgYWxsPwoKRE9OS0VZCk1lISBNZSEKClNIUkVLCkFueW9uZT8KCkRPTktFWQpPaCEgT2gsIHBpY2sgbWUhIE9oLCBJIGtub3chIEkga25vdyEKTWUsIG1lIQoKU0hSRUsKKHNpZ2gpIE9rYXksIGZpbmUuIEF0dGVudGlvbiwgYWxsIGZhaXJ5CnRhbGUgdGhpbmdzLiBEbyBub3QgZ2V0IGNvbWZvcnRhYmxlLgpZb3VyIHdlbGNvbWUgaXMgb2ZmaWNpYWxseSB3b3JuIG91dC4KSW4gZmFjdCwgSSdtIGdvbm5hIHNlZSB0aGlzIGd1eSBGYXJxdWFhZApyaWdodCBub3cgYW5kIGdldCB5b3UgYWxsIG9mZiBteSBsYW5kCmFuZCBiYWNrIHdoZXJlIHlvdSBjYW1lIGZyb20hIChQYXVzZS4KVGhlbiB0aGUgY3Jvd2QgZ29lcyB3aWxkLikgT2ghICh0byBEb25rZXkpCllvdSEgWW91J3JlIGNvbWluJyB3aXRoIG1lLgoKRE9OS0VZCkFsbCByaWdodCwgdGhhdCdzIHdoYXQgSSBsaWtlIHRvIGhlYXIsCm1hbi4gU2hyZWsgYW5kIERvbmtleSwgdHdvIHN0YWx3YXJ0CmZyaWVuZHMsIG9mZiBvbiBhIHdoaXJsd2luZCBiaWctY2l0eQphZHZlbnR1cmUuIEkgbG92ZSBpdCEKCkRPTktFWQooc2luZ2luZykgT24gdGhlIHJvYWQgYWdhaW4uIFNpbmcgaXQKd2l0aCBtZSwgU2hyZWsuIEkgY2FuJ3Qgd2FpdCB0byBnZXQKb24gdGhlIHJvYWQgYWdhaW4uCgpTSFJFSwpXaGF0IGRpZCBJIHNheSBhYm91dCBzaW5naW5nPwoKRE9OS0VZCkNhbiBJIHdoaXN0bGU/CgpTSFJFSwpOby4KCkRPTktFWQpDYW4gSSBodW0gaXQ/CgpTSFJFSwpBbGwgcmlnaHQsIGh1bSBpdC4KCkRvbmtleSBiZWdpbnMgdG8gaHVtICdPbiB0aGUgUm9hZCBBZ2FpbicuCgpEVUxPQyAtIEtJVENIRU4KCkEgbWFza2VkIG1hbiBpcyB0b3J0dXJpbmcgdGhlIEdpbmdlcmJyZWFkIE1hbi4gSGUncyBjb250aW51YWxseQpkdW5raW5nIGhpbSBpbiBhIGdsYXNzIG9mIG1pbGsuIExvcmQgRmFycXVhYWQgd2Fsa3MgaW4uCgpGQVJRVUFBRApUaGF0J3MgZW5vdWdoLiBIZSdzIHJlYWR5IHRvIHRhbGsuCgoKVGhlIEdpbmdlcmJyZWFkIE1hbiBpcyBwdWxsZWQgb3V0IG9mIHRoZSBtaWxrIGFuZCBzbGFtbWVkIGRvd24Kb250byBhIGNvb2tpZSBzaGVldC4gRmFycXVhYWQgbGF1Z2hzIGFzIGhlIHdhbGtzIG92ZXIgdG8gdGhlCnRhYmxlLiBIb3dldmVyIHdoZW4gaGUgcmVhY2hlcyB0aGUgdGFibGUgd2Ugc2VlIHRoYXQgaXQgZ29lcwp1cCB0byBoaXMgZXllcy4gSGUgY2xlYXJzIGhpcyB0aHJvYXQgYW5kIHRoZSB0YWJsZSBpcyBsb3dlcmVkLgoKCkZBUlFVQUFECihoZSBwaWNrcyB1cCB0aGUgR2luZ2VyYnJlYWQgTWFuJ3MgbGVncwphbmQgcGxheXMgd2l0aCB0aGVtKSBSdW4sIHJ1biwgcnVuLAphcyBmYXN0IGFzIHlvdSBjYW4uIFlvdSBjYW4ndCBjYXRjaAptZS4gSSdtIHRoZSBnaW5nZXJicmVhZCBtYW4uCgpHSU5HRVJCUkVBRCBNQU4KWW91IGFyZSBhIG1vbnN0ZXIuCgpGQVJRVUFBRApJJ20gbm90IHRoZSBtb25zdGVyIGhlcmUuIFlvdSBhcmUuIFlvdQphbmQgdGhlIHJlc3Qgb2YgdGhhdCBmYWlyeSB0YWxlIHRyYXNoLApwb2lzb25pbmcgbXkgcGVyZmVjdCB3b3JsZC4gTm93LCB0ZWxsCm1lISBXaGVyZSBhcmUgdGhlIG90aGVycz8KCkdJTkdFUkJSRUFEIE1BTgpFYXQgbWUhIChIZSBzcGl0cyBtaWxrIGludG8gRmFycXVhYWQncwpleWUuKQoKRkFSUVVBQUQKSSd2ZSB0cmllZCB0byBiZSBmYWlyIHRvIHlvdSBjcmVhdHVyZXMuCk5vdyBteSBwYXRpZW5jZSBoYXMgcmVhY2hlZCBpdHMgZW5kIQpUZWxsIG1lIG9yIEknbGwuLi4oaGUgbWFrZXMgYXMgaWYgdG8KcHVsbCBvZmYgdGhlIEdpbmdlcmJyZWFkIE1hbidzIGJ1dHRvbnMpCgoKR0lOR0VSQlJFQUQgTUFOCk5vLCBubywgbm90IHRoZSBidXR0b25zLiBOb3QgbXkgZ3VtZHJvcApidXR0b25zLgoKRkFSUVVBQUQKQWxsIHJpZ2h0IHRoZW4uIFdobydzIGhpZGluZyB0aGVtPwoKCkdJTkdFUkJSRUFEIE1BTgpPa2F5LCBJJ2xsIHRlbGwgeW91LiBEbyB5b3Uga25vdyB0aGUKbXVmZmluIG1hbj8KCkZBUlFVQUFEClRoZSBtdWZmaW4gbWFuPwoKR0lOR0VSQlJFQUQgTUFOClRoZSBtdWZmaW4gbWFuLgoKRkFSUVVBQUQKWWVzLCBJIGtub3cgdGhlIG11ZmZpbiBtYW4sIHdobyBsaXZlcwpvbiBEcnVyeSBMYW5lPwoKR0lOR0VSQlJFQUQgTUFOCldlbGwsIHNoZSdzIG1hcnJpZWQgdG8gdGhlIG11ZmZpbiBtYW4uCgoKRkFSUVVBQUQKVGhlIG11ZmZpbiBtYW4/CgpHSU5HRVJCUkVBRCBNQU4KVGhlIG11ZmZpbiBtYW4hCgpGQVJRVUFBRApTaGUncyBtYXJyaWVkIHRvIHRoZSBtdWZmaW4gbWFuLgoKVGhlIGRvb3Igb3BlbnMgYW5kIHRoZSBIZWFkIEd1YXJkIHdhbGtzIGluLgoKSEVBRCBHVUFSRApNeSBsb3JkISBXZSBmb3VuZCBpdC4KCkZBUlFVQUFEClRoZW4gd2hhdCBhcmUgeW91IHdhaXRpbmcgZm9yPyBCcmluZwppdCBpbi4KCk1vcmUgZ3VhcmRzIGVudGVyIGNhcnJ5aW5nIHNvbWV0aGluZyB0aGF0IGlzIGNvdmVyZWQgYnkgYSBzaGVldC4KVGhleSBoYW5nIHVwIHdoYXRldmVyIGl0IGlzIGFuZCByZW1vdmUgdGhlIHNoZWV0LiBJdCBpcyB0aGUgTWFnaWMKTWlycm9yLgoKR0lOR0VSQlJFQUQgTUFOCihpbiBhd2UpIE9oaGhoLi4uCgpGQVJRVUFBRApNYWdpYyBtaXJyb3IuLi4KCkdJTkdFUkJSRUFEIE1BTgpEb24ndCB0ZWxsIGhpbSBhbnl0aGluZyEgKEZhcnF1YWFkIHBpY2tzCmhpbSB1cCBhbmQgZHVtcHMgaGltIGludG8gYSB0cmFzaCBjYW4Kd2l0aCBhIGxpZC4pIE5vIQoKRkFSUVVBQUQKRXZlbmluZy4gTWlycm9yLCBtaXJyb3Igb24gdGhlIHdhbGwuCklzIHRoaXMgbm90IHRoZSBtb3N0IHBlcmZlY3Qga2luZ2RvbQpvZiB0aGVtIGFsbD8KCk1JUlJPUgpXZWxsLCB0ZWNobmljYWxseSB5b3UncmUgbm90IGEga2luZy4KCgpGQVJRVUFBRApVaCwgVGhlbG9uaXVzLiAoVGhlbG9uaXVzIGhvbGRzIHVwIGEKaGFuZCBtaXJyb3IgYW5kIHNtYXNoZXMgaXQgd2l0aCBoaXMKZmlzdC4pIFlvdSB3ZXJlIHNheWluZz8KCk1JUlJPUgpXaGF0IEkgbWVhbiBpcyB5b3UncmUgbm90IGEga2luZyB5ZXQuCkJ1dCB5b3UgY2FuIGJlY29tZSBvbmUuIEFsbCB5b3UgaGF2ZQp0byBkbyBpcyBtYXJyeSBhIHByaW5jZXNzLgoKRkFSUVVBQUQKR28gb24uCgpNSVJST1IKKGNodWNrbGVzIG5lcnZvdXNseSkgU28sIGp1c3Qgc2l0IGJhY2sKYW5kIHJlbGF4LCBteSBsb3JkLCBiZWNhdXNlIGl0J3MgdGltZQpmb3IgeW91IHRvIG1lZXQgdG9kYXkncyBlbGlnaWJsZSBiYWNoZWxvcmV0dGVzLgpBbmQgaGVyZSB0aGV5IGFyZSEgQmFjaGVsb3JldHRlIG51bWJlcgpvbmUgaXMgYSBtZW50YWxseSBhYnVzZWQgc2h1dC1pbiBmcm9tCmEga2luZ2RvbSBmYXIsIGZhciBhd2F5LiBTaGUgbGlrZXMgc3VzaGkKYW5kIGhvdCB0dWJiaW5nIGFueXRpbWUuIEhlciBob2JiaWVzCmluY2x1ZGUgY29va2luZyBhbmQgY2xlYW5pbmcgZm9yIGhlcgp0d28gZXZpbCBzaXN0ZXJzLiBQbGVhc2Ugd2VsY29tZSBDaW5kZXJlbGxhLgooc2hvd3MgcGljdHVyZSBvZiBDaW5kZXJlbGxhKSBCYWNoZWxvcmV0dGUKbnVtYmVyIHR3byBpcyBhIGNhcGUtd2VhcmluZyBnaXJsIGZyb20KdGhlIGxhbmQgb2YgZmFuY3kuIEFsdGhvdWdoIHNoZSBsaXZlcwp3aXRoIHNldmVuIG90aGVyIG1lbiwgc2hlJ3Mgbm90IGVhc3kuCkp1c3Qga2lzcyBoZXIgZGVhZCwgZnJvemVuIGxpcHMgYW5kCmZpbmQgb3V0IHdoYXQgYSBsaXZlIHdpcmUgc2hlIGlzLiBDb21lCm9uLiBHaXZlIGl0IHVwIGZvciBTbm93IFdoaXRlISAoc2hvd3MKcGljdHVyZSBvZiBTbm93IFdoaXRlKSBBbmQgbGFzdCwgYnV0CmNlcnRhaW5seSBub3QgbGFzdCwgYmFjaGVsb3JldHRlIG51bWJlcgp0aHJlZSBpcyBhIGZpZXJ5IHJlZGhlYWQgZnJvbSBhIGRyYWdvbi1ndWFyZGVkCmNhc3RsZSBzdXJyb3VuZGVkIGJ5IGhvdCBib2lsaW5nIGxhdmEhCkJ1dCBkb24ndCBsZXQgdGhhdCBjb29sIHlvdSBvZmYuIFNoZSdzCmEgbG9hZGVkIHBpc3RvbCB3aG8gbGlrZXMgcGluYSBjb2xhZHMKYW5kIGdldHRpbmcgY2F1Z2h0IGluIHRoZSByYWluLiBZb3Vycwpmb3IgdGhlIHJlc2N1aW5nLCBQcmluY2VzcyBGaW9uYSEgKFNob3dzCnBpY3R1cmUgb2YgUHJpbmNlc3MgRmlvbmEpIFNvIHdpbGwgaXQKYmUgYmFjaGVsb3JldHRlIG51bWJlciBvbmUsIGJhY2hlbG9yZXR0ZQpudW1iZXIgdHdvIG9yIGJhY2hlbG9yZXR0ZSBudW1iZXIgdGhyZWU/CgoKR1VBUkRTClR3byEgVHdvISBUaHJlZSEgVGhyZWUhIFR3byEgVHdvISBUaHJlZSEKCgpGQVJRVUFBRApUaHJlZT8gT25lPyBUaHJlZT8KClRIRUxPTklVUwpUaHJlZSEgKGhvbGRzIHVwIDIgZmluZ2VycykgUGljayBudW1iZXIKdGhyZWUsIG15IGxvcmQhCgpGQVJRVUFBRApPa2F5LCBva2F5LCB1aCwgbnVtYmVyIHRocmVlIQoKTUlSUk9SCkxvcmQgRmFycXVhYWQsIHlvdSd2ZSBjaG9zZW4gUHJpbmNlc3MKRmlvbmEuCgpGQVJRVUFBRApQcmluY2VzcyBGaW9uYS4gU2hlJ3MgcGVyZmVjdC4gQWxsIEkKaGF2ZSB0byBkbyBpcyBqdXN0IGZpbmQgc29tZW9uZSB3aG8KY2FuIGdvLi4uCgpNSVJST1IKQnV0IEkgcHJvYmFibHkgc2hvdWxkIG1lbnRpb24gdGhlIGxpdHRsZQp0aGluZyB0aGF0IGhhcHBlbnMgYXQgbmlnaHQuCgpGQVJRVUFBRApJJ2xsIGRvIGl0LgoKTUlSUk9SClllcywgYnV0IGFmdGVyIHN1bnNldC4uLgoKRkFSUVVBQUQKU2lsZW5jZSEgSSB3aWxsIG1ha2UgdGhpcyBQcmluY2VzcyBGaW9uYQpteSBxdWVlbiwgYW5kIER1TG9jIHdpbGwgZmluYWxseSBoYXZlCnRoZSBwZXJmZWN0IGtpbmchIENhcHRhaW4sIGFzc2VtYmxlCnlvdXIgZmluZXN0IG1lbi4gV2UncmUgZ29pbmcgdG8gaGF2ZQphIHRvdXJuYW1lbnQuIChzbWlsZXMgZXZpbGx5KQoKRHVMb2MgUGFya2luZyBMb3QgLSBMYW5jZWxvdCBTZWN0aW9uCgpTaHJlayBhbmQgRG9ua2V5IGNvbWUgb3V0IG9mIHRoZSBmaWVsZCB0aGF0IGlzIHJpZ2h0IGJ5IHRoZSBwYXJraW5nCmxvdC4gVGhlIGNhc3RsZSBpdHNlbGYgaXMgYWJvdXQgNDAgc3RvcmllcyBoaWdoLgoKRE9OS0VZCkJ1dCB0aGF0J3MgaXQuIFRoYXQncyBpdCByaWdodCB0aGVyZS4KVGhhdCdzIER1TG9jLiBJIHRvbGQgeWEgSSdkIGZpbmQgaXQuCgoKU0hSRUsKU28sIHRoYXQgbXVzdCBiZSBMb3JkIEZhcnF1YWFkJ3MgY2FzdGxlLgoKCkRPTktFWQpVaC1odWguIFRoYXQncyB0aGUgcGxhY2UuCgpTSFJFSwpEbyB5b3UgdGhpbmsgbWF5YmUgaGUncyBjb21wZW5zYXRpbmcKZm9yIHNvbWV0aGluZz8gKEhlIGxhdWdocywgYnV0IHRoZW4KZ3JvYW5zIGFzIERvbmtleSBkb2Vzbid0IGdldCB0aGUgam9rZS4KSGUgY29udGludWVzIHdhbGtpbmcgdGhyb3VnaCB0aGUgcGFya2luZwpsb3QuKQoKRE9OS0VZCkhleSwgd2FpdC4gV2FpdCB1cCwgU2hyZWsuCgpNQU4KSHVycnksIGRhcmxpbmcuIFdlJ3JlIGxhdGUuIEh1cnJ5LgoKClNIUkVLCkhleSwgeW91ISAoVGhlIGF0dGVuZGFudCwgd2hvIGlzIHdlYXJpbmcKYSBnaWFudCBoZWFkIHRoYXQgbG9va3MgbGlrZSBMb3JkIEZhcnF1YWFkLApzY3JlYW1zIGFuZCBiZWdpbnMgcnVubmluZyB0aHJvdWdoIHRoZQpyb3dzIG9mIHJvcGUgdG8gZ2V0IHRvIHRoZSBmcm9udCBnYXRlCnRvIGdldCBhd2F5IGZyb20gU2hyZWsuKSBXYWl0IGEgc2Vjb25kLgpMb29rLCBJJ20gbm90IGdvbm5hIGVhdCB5b3UuIEkganVzdAotIC0gSSBqdXN0IC0gLSAoSGUgc2lnaHMgYW5kIHRoZW4gYmVnaW5zCndhbGtpbmcgc3RyYWlnaHQgdGhyb3VnaCB0aGUgcm93cy4gVGhlCmF0dGVuZGFudCBydW5zIGludG8gYSB3YWxsIGFuZCBmYWxscwpkb3duLiBTaHJlayBhbmQgRG9ua2V5IGxvb2sgYXQgaGltIHRoZW4KY29udGludWUgb24gaW50byBEdUxvYy4pCgpEVUxPQwoKVGhleSBsb29rIGFyb3VuZCBidXQgYWxsIGlzIHF1aWV0LgoKU0hSRUsKSXQncyBxdWlldC4gVG9vIHF1aWV0LiBXaGVyZSBpcyBldmVyeWJvZHk/CgoKRE9OS0VZCkhleSwgbG9vayBhdCB0aGlzIQoKRG9ua2V5IHJ1bnMgb3ZlciBhbmQgcHVsbHMgYSBsZXZlciB0aGF0IGlzIGF0dGFjaGVkIHRvIGEgYm94Cm1hcmtlZCAnSW5mb3JtYXRpb24nLiBUaGUgbXVzaWMgd2luZHMgdXAgYW5kIHRoZW4gdGhlIGJveCBkb29ycwpvcGVuIHVwLiBUaGVyZSBhcmUgbGl0dGxlIHdvb2RlbiBwZW9wbGUgaW5zaWRlIGFuZCB0aGV5IGJlZ2luCnRvIHNpbmcuCgpXT09ERU4gUEVPUExFCldlbGNvbWUgdG8gRHVMb2Mgc3VjaCBhIHBlcmZlY3QgdG93bgoKCkhlcmUgd2UgaGF2ZSBzb21lIHJ1bGVzCgpMZXQgdXMgbGF5IHRoZW0gZG93bgoKRG9uJ3QgbWFrZSB3YXZlcywgc3RheSBpbiBsaW5lCgpBbmQgd2UnbGwgZ2V0IGFsb25nIGZpbmUKCkR1TG9jIGlzIHBlcmZlY3QgcGxhY2UKClBsZWFzZSBrZWVwIG9mZiBvZiB0aGUgZ3Jhc3MKClNoaW5lIHlvdXIgc2hvZXMsIHdpcGUgeW91ci4uLiBmYWNlCgpEdUxvYyBpcywgRHVMb2MgaXMKCkR1TG9jIGlzIHBlcmZlY3QgcGxhY2UuCgpTdWRkZW5seSBhIGNhbWVyYSB0YWtlcyBEb25rZXkgYW5kIFNocmVrJ3MgcGljdHVyZS4KCkRPTktFWQpXb3chIExldCdzIGRvIHRoYXQgYWdhaW4hIChtYWtlcyByZWFkeQp0byBydW4gb3ZlciBhbmQgcHVsbCB0aGUgbGV2ZXIgYWdhaW4pCgoKU0hSRUsKKGdyYWJzIERvbmtleSdzIHRhaWwgYW5kIGhvbGRzIGhpbSBzdGlsbCkKTm8uIE5vLiBObywgbm8sIG5vISBOby4KClRoZXkgaGVhciBhIHRydW1wZXQgZmFuZmFyZSBhbmQgaGVhZCBvdmVyIHRvIHRoZSBhcmVuYS4KCkZBUlFVQUFECkJyYXZlIGtuaWdodHMuIFlvdSBhcmUgdGhlIGJlc3QgYW5kCmJyaWdodGVzdCBpbiBhbGwgdGhlIGxhbmQuIFRvZGF5IG9uZQpvZiB5b3Ugc2hhbGwgcHJvdmUgaGltc2VsZi4uLgoKQXMgU2hyZWsgYW5kIERvbmtleSB3YWxrIGRvd24gdGhlIHR1bm5lbCB0byBnZXQgaW50byB0aGUgYXJlbmEKRG9ua2V5IGlzIGh1bW1pbmcgdGhlIER1TG9jIHRoZW1lIHNvbmcuCgpTSFJFSwpBbGwgcmlnaHQuIFlvdSdyZSBnb2luZyB0aGUgcmlnaHQgd2F5CmZvciBhIHNtYWNrZWQgYm90dG9tLgoKRE9OS0VZClNvcnJ5IGFib3V0IHRoYXQuCgpGQVJRVUFBRApUaGF0IGNoYW1waW9uIHNoYWxsIGhhdmUgdGhlIGhvbm9yIC0KLSBubywgbm8gLSAtIHRoZSBwcml2aWxlZ2UgdG8gZ28gZm9ydGgKYW5kIHJlc2N1ZSB0aGUgbG92ZWx5IFByaW5jZXNzIEZpb25hCmZyb20gdGhlIGZpZXJ5IGtlZXAgb2YgdGhlIGRyYWdvbi4gSWYKZm9yIGFueSByZWFzb24gdGhlIHdpbm5lciBpcyB1bnN1Y2Nlc3NmdWwsCnRoZSBmaXJzdCBydW5uZXItdXAgd2lsbCB0YWtlIGhpcyBwbGFjZQphbmQgc28gb24gYW5kIHNvIGZvcnRoLiBTb21lIG9mIHlvdQptYXkgZGllLCBidXQgaXQncyBhIHNhY3JpZmljZSBJIGFtIHdpbGxpbmcKdG8gbWFrZS4gKGNoZWVycykgTGV0IHRoZSB0b3VybmFtZW50CmJlZ2luISAoSGUgbm90aWNlcyBTaHJlaykgT2ghIFdoYXQgaXMKdGhhdD8gSXQncyBoaWRlb3VzIQoKU0hSRUsKKHR1cm5zIHRvIGxvb2sgYXQgRG9ua2V5IGFuZCB0aGVuIGJhY2sKYXQgRmFycXVhYWQpIEFoLCB0aGF0J3Mgbm90IHZlcnkgbmljZS4KSXQncyBqdXN0IGEgZG9ua2V5LgoKRkFSUVVBQUQKSW5kZWVkLiBLbmlnaHRzLCBuZXcgcGxhbiEgVGhlIG9uZSB3aG8Ka2lsbHMgdGhlIG9ncmUgd2lsbCBiZSBuYW1lZCBjaGFtcGlvbiEKSGF2ZSBpdCBoaW0hCgpNRU4KR2V0IGhpbSEKClNIUkVLCk9oLCBoZXkhIE5vdyBjb21lIG9uISBIYW5nIG9uIG5vdy4gKGJ1bXBzCmludG8gYSB0YWJsZSB3aGVyZSB0aGVyZSBhcmUgbXVncyBvZgpiZWVyKQoKQ1JPV0QKR28gYWhlYWQhIEdldCBoaW0hCgpTSFJFSwooaG9sZHMgdXAgYSBtdWcgb2YgYmVlcikgQ2FuJ3Qgd2UganVzdApzZXR0bGUgdGhpcyBvdmVyIGEgcGludD8KCkNST1dECktpbGwgdGhlIGJlYXN0IQoKU0hSRUsKTm8/IEFsbCByaWdodCB0aGVuLiAoZHJpbmtzIHRoZSBiZWVyKQpDb21lIG9uIQoKSGUgdGFrZXMgdGhlIG11ZyBhbmQgc21hc2hlcyB0aGUgc3BpZ290IG9mZiB0aGUgbGFyZ2UgYmFycmVsCm9mIGJlZXIgYmVoaW5kIGhpbS4gVGhlIGJlZXIgY29tZXMgcnVzaGluZyBvdXQgZHJlbmNoaW5nIHRoZQpvdGhlciBtZW4gYW5kIHdldHRpbmcgdGhlIGdyb3VuZC4gSXQncyBsaWtlIG11ZCBub3cuIFNocmVrIHNsaWRlcwpwYXN0IHRoZSBtZW4gYW5kIHBpY2tzIHVwIGEgc3BlYXIgdGhhdCBvbmUgb2YgdGhlIG1lbiBkcm9wcGVkLgpBcyBTaHJlayBiZWdpbnMgdG8gZmlnaHQgRG9ua2V5IGhvcHMgdXAgb250byBvbmUgb2YgdGhlIGxhcmdlcgpiZWVyIGJhcnJlbHMuIEl0IGJyZWFrcyBmcmVlIG9mIGl0J3Mgcm9wZXMgYW5kIGJlZ2lucyB0byByb2xsLgpEb25rZXkgbWFuYWdlcyB0byBzcXVpc2ggdHdvIG1lbiBpbnRvIHRoZSBtdWQuIFRoZXJlIGlzIHNvIG11Y2gKZmlnaHRpbmcgZ29pbmcgb24gaGVyZSBJJ20gbm90IGdvaW5nIHRvIGdvIGludG8gZGV0YWlsLiBTdWZmaWNlCnRvIHNheSB0aGF0IFNocmVrIGtpY2tzIGJ1dHQuCgpET05LRVkKSGV5LCBTaHJlaywgdGFnIG1lISBUYWcgbWUhCgpTaHJlayBjb21lcyBvdmVyIGFuZCBiYW5ncyBhIG1hbidzIGhlYWQgdXAgYWdhaW5zdCBEb25rZXlzLiBTaHJlawpnZXRzIHVwIG9uIHRoZSByb3BlcyBhbmQgaW50ZXJhY3RzIHdpdGggdGhlIGNyb3dkLgoKU0hSRUsKWWVhaCEKCkEgbWFuIHRyaWVzIHRvIHNuZWFrIHVwIGJlaGluZCBTaHJlaywgYnV0IFNocmVrIHR1cm5zIGluIHRpbWUKYW5kIHNlZXMgaGltLgoKV09NQU4KVGhlIGNoYWlyISBHaXZlIGhpbSB0aGUgY2hhaXIhCgpTaHJlayBzbWFzaGVzIGEgY2hhaXIgb3ZlciB0aGUgZ3V5cyBiYWNrLiBGaW5hbGx5IGFsbCB0aGUgbWVuCmFyZSBkb3duLiBEb25rZXkga2lja3Mgb25lIG9mIHRoZW0gaW4gdGhlIGhlbG1ldCwgYW5kIHRoZSBkaW5nCnNvdW5kcyB0aGUgZW5kIG9mIHRoZSBtYXRjaC4gVGhlIGF1ZGllbmNlIGdvZXMgd2lsZC4KClNIUkVLCk9oLCB5ZWFoISBBaCEgQWghIFRoYW5rIHlvdSEgVGhhbmsgeW91CnZlcnkgbXVjaCEgSSdtIGhlcmUgdGlsbCBUaHVyc2RheS4gVHJ5CnRoZSB2ZWFsISBIYSwgaGEhIChsYXVnaHMpCgpUaGUgbGF1Z2h0ZXIgc3RvcHMgYXMgYWxsIG9mIHRoZSBndWFyZHMgdHVybiB0aGVpciB3ZWFwb25zIG9uClNocmVrLgoKSEVBRCBHVUFSRApTaGFsbCBJIGdpdmUgdGhlIG9yZGVyLCBzaXI/CgpGQVJRVUFBRApObywgSSBoYXZlIGEgYmV0dGVyIGlkZWEuIFBlb3BsZSBvZgpEdUxvYywgSSBnaXZlIHlvdSBvdXIgY2hhbXBpb24hCgpTSFJFSwpXaGF0PwoKRkFSUVVBQUQKQ29uZ3JhdHVsYXRpb25zLCBvZ3JlLiBZb3UncmUgd29uIHRoZQpob25vciBvZiBlbWJhcmtpbmcgb24gYSBncmVhdCBhbmQgbm9ibGUKcXVlc3QuCgpTSFJFSwpRdWVzdD8gSSdtIGFscmVhZHkgaW4gYSBxdWVzdCwgYSBxdWVzdAp0byBnZXQgbXkgc3dhbXAgYmFjay4KCkZBUlFVQUFECllvdXIgc3dhbXA/CgpTSFJFSwpZZWFoLCBteSBzd2FtcCEgV2hlcmUgeW91IGR1bXBlZCB0aG9zZQpmYWlyeSB0YWxlIGNyZWF0dXJlcyEKCkZBUlFVQUFECkluZGVlZC4gQWxsIHJpZ2h0LCBvZ3JlLiBJJ2xsIG1ha2UgeW91CmEgZGVhbC4gR28gb24gdGhpcyBxdWVzdCBmb3IgbWUsIGFuZApJJ2xsIGdpdmUgeW91IHlvdXIgc3dhbXAgYmFjay4KClNIUkVLCkV4YWN0bHkgdGhlIHdheSBpdCB3YXM/CgpGQVJRVUFBRApEb3duIHRvIHRoZSBsYXN0IHNsaW1lLWNvdmVyZWQgdG9hZHN0b29sLgoKClNIUkVLCkFuZCB0aGUgc3F1YXR0ZXJzPwoKRkFSUVVBQUQKQXMgZ29vZCBhcyBnb25lLgoKU0hSRUsKV2hhdCBraW5kIG9mIHF1ZXN0PwoKVGltZSBMYXBzZSAtIERvbmtleSBhbmQgU2hyZWsgYXJlIG5vdyB3YWxraW5nIHRocm91Z2ggdGhlIGZpZWxkCmhlYWRpbmcgYXdheSBmcm9tIER1TG9jLiBTaHJlayBpcyBtdW5jaGluZyBvbiBhbiBvbmlvbi4KCkRPTktFWQpMZXQgbWUgZ2V0IHRoaXMgc3RyYWlnaHQuIFlvdSdyZSBnb25uYQpnbyBmaWdodCBhIGRyYWdvbiBhbmQgcmVzY3VlIGEgcHJpbmNlc3MKanVzdCBzbyBGYXJxdWFhZCB3aWxsIGdpdmUgeW91IGJhY2sKYSBzd2FtcCB3aGljaCB5b3Ugb25seSBkb24ndCBoYXZlIGJlY2F1c2UKaGUgZmlsbGVkIGl0IGZ1bGwgb2YgZnJlYWtzIGluIHRoZSBmaXJzdApwbGFjZS4gSXMgdGhhdCBhYm91dCByaWdodD8KClNIUkVLCllvdSBrbm93LCBtYXliZSB0aGVyZSdzIGEgZ29vZCByZWFzb24KZG9ua2V5cyBzaG91bGRuJ3QgdGFsay4KCkRPTktFWQpJIGRvbid0IGdldCBpdC4gV2h5IGRvbid0IHlvdSBqdXN0IHB1bGwKc29tZSBvZiB0aGF0IG9ncmUgc3R1ZmYgb24gaGltPyBUaHJvdHRsZQpoaW0sIGxheSBzaWVnZSB0byBoaXMgZm9ydHJlc3MsIGdyaW5kcwpoaXMgYm9uZXMgdG8gbWFrZSB5b3VyIGJyZWFkLCB0aGUgd2hvbGUKb2dyZSB0cmlwLgoKU0hSRUsKT2gsIEkga25vdyB3aGF0LiBNYXliZSBJIGNvdWxkIGhhdmUKZGVjYXBpdGF0ZWQgYW4gZW50aXJlIHZpbGxhZ2UgYW5kIHB1dAp0aGVpciBoZWFkcyBvbiBhIHBpa2UsIGdvdHRlbiBhIGtuaWZlLApjdXQgb3BlbiB0aGVpciBzcGxlZW4gYW5kIGRyaW5rIHRoZWlyCmZsdWlkcy4gRG9lcyB0aGF0IHNvdW5kIGdvb2QgdG8geW91PwoKCkRPTktFWQpVaCwgbm8sIG5vdCByZWFsbHksIG5vLgoKU0hSRUsKRm9yIHlvdXIgaW5mb3JtYXRpb24sIHRoZXJlJ3MgYSBsb3QKbW9yZSB0byBvZ3JlcyB0aGFuIHBlb3BsZSB0aGluay4KCkRPTktFWQpFeGFtcGxlPwoKU0hSRUsKRXhhbXBsZT8gT2theSwgdW0sIG9ncmVzIGFyZSBsaWtlIG9uaW9ucy4KKGhlIGhvbGRzIG91dCBoaXMgb25pb24pCgpET05LRVkKKHNuaWZmcyB0aGUgb25pb24pIFRoZXkgc3Rpbms/CgpTSFJFSwpZZXMgLSAtIE5vIQoKRE9OS0VZClRoZXkgbWFrZSB5b3UgY3J5PwoKU0hSRUsKTm8hCgpET05LRVkKWW91IGxlYXZlIHRoZW0gaW4gdGhlIHN1biwgdGhleSBnZXQKYWxsIGJyb3duLCBzdGFydCBzcHJvdXRpbicgbGl0dGxlIHdoaXRlCmhhaXJzLgoKU0hSRUsKTm8hIExheWVycyEgT25pb25zIGhhdmUgbGF5ZXJzLiBPZ3JlcwpoYXZlIGxheWVycyEgT25pb25zIGhhdmUgbGF5ZXJzLiBZb3UKZ2V0IGl0PyBXZSBib3RoIGhhdmUgbGF5ZXJzLiAoaGUgaGVhdmVzCmEgc2lnaCBhbmQgdGhlbiB3YWxrcyBvZmYpCgpET05LRVkKKHRyYWlsaW5nIGFmdGVyIFNocmVrKSBPaCwgeW91IGJvdGgKaGF2ZSBsYXllcnMuIE9oLiB7U25pZmZzfSBZb3Uga25vdywKbm90IGV2ZXJ5Ym9keSBsaWtlcyBvbmlvbnMuIENha2UhIEV2ZXJ5Ym9keQpsb3ZlcyBjYWtlcyEgQ2FrZXMgaGF2ZSBsYXllcnMuCgpTSFJFSwpJIGRvbid0IGNhcmUuLi4gd2hhdCBldmVyeW9uZSBsaWtlcy4KT2dyZXMgYXJlIG5vdCBsaWtlIGNha2VzLgoKRE9OS0VZCllvdSBrbm93IHdoYXQgZWxzZSBldmVyeWJvZHkgbGlrZXM/ClBhcmZhaXRzLiBIYXZlIHlvdSBldmVyIG1ldCBhIHBlcnNvbiwKeW91IHNheSwgIkxldCdzIGdldCBzb21lIHBhcmZhaXQsIiB0aGV5CnNheSwgIkhlbGwgbm8sIEkgZG9uJ3QgbGlrZSBubyBwYXJmYWl0Ij8KUGFyZmFpdHMgYXJlIGRlbGljaW91cy4KClNIUkVLCk5vISBZb3UgZGVuc2UsIGlycml0YXRpbmcsIG1pbmlhdHVyZQpiZWFzdCBvZiBidXJkZW4hIE9ncmVzIGFyZSBsaWtlIG9uaW9ucyEKQW5kIG9mIHN0b3J5LiBCeWUtYnllLiBTZWUgeWEgbGF0ZXIuCgoKRE9OS0VZClBhcmZhaXRzIG1heSBiZSB0aGUgbW9zdCBkZWxpY2lvdXMgdGhpbmcKb24gdGhlIHdob2xlIGRhbW4gcGxhbmV0LgoKU0hSRUsKWW91IGtub3csIEkgdGhpbmsgSSBwcmVmZXJyZWQgeW91ciBodW1taW5nLgoKCkRPTktFWQpEbyB5b3UgaGF2ZSBhIHRpc3N1ZSBvciBzb21ldGhpbmc/IEknbQptYWtpbmcgYSBtZXNzLiBKdXN0IHRoZSB3b3JkIHBhcmZhaXQKbWFrZSBtZSBzdGFydCBzbG9iYmVyaW5nLgoKVGhleSBoZWFkIG9mZi4gVGhlcmUgaXMgYSBtb250YWdlIG9mIHRoZWlyIGpvdXJuZXkuIFdhbGtpbmcgdGhyb3VnaAphIGZpZWxkIGF0IHN1bnNldC4gU2xlZXBpbmcgYmVuZWF0aCBhIGJyaWdodCBtb29uLiBTaHJlayB0cnlpbmcKdG8gcHV0IHRoZSBjYW1wZmlyZSBvdXQgdGhlIG5leHQgZGF5IGFuZCBoYXZpbmcgYSBiaXQgb2YgYSBwcm9ibGVtLApzbyBEb25rZXkgcGVlcyBvbiB0aGUgZmlyZSB0byBwdXQgaXQgb3V0LgoKRFJBR09OJ1MgS0VFUAoKU2hyZWsgYW5kIERvbmtleSBhcmUgd2Fsa2luZyB1cCB0byB0aGUga2VlcCB0aGF0J3Mgc3VwcG9zZWQgdG8KaG91c2UgUHJpbmNlc3MgRmlvbmEuIEl0IGFwcGVhcnMgdG8gbG9vayBsaWtlIGEgZ2lhbnQgdm9sY2Fuby4KCgpET05LRVkKKHNuaWZmcykgT2hoISBTaHJlayEgRGlkIHlvdSBkbyB0aGF0PwpZb3UgZ290dGEgd2FybiBzb21lYm9keSBiZWZvcmUgeW91IGp1c3QKY3JhY2sgb25lIG9mZi4gTXkgbW91dGggd2FzIG9wZW4gYW5kCmV2ZXJ5dGhpbmcuCgpTSFJFSwpCZWxpZXZlIG1lLCBEb25rZXksIGlmIGl0IHdhcyBtZSwgeW91J2QKYmUgZGVhZC4gKHNuaWZmcykgSXQncyBicmltc3RvbmUuIFdlCm11c3QgYmUgZ2V0dGluZyBjbG9zZS4KCkRPTktFWQpZZWFoLCByaWdodCwgYnJpbXN0b25lLiBEb24ndCBiZSB0YWxraW5nCmFib3V0IGl0J3MgdGhlIGJyaW1zdG9uZS4gSSBrbm93IHdoYXQKSSBzbWVsbC4gSXQgd2Fzbid0IG5vIGJyaW1zdG9uZS4gSXQKZGlkbid0IGNvbWUgb2ZmIG5vIHN0b25lIG5laXRoZXIuCgoKVGhleSBjbGltYiB1cCB0aGUgc2lkZSBvZiB0aGUgdm9sY2Fuby9rZWVwIGFuZCBsb29rIGRvd24uIFRoZXJlCmlzIGEgc21hbGwgcGllY2Ugb2Ygcm9jayByaWdodCBpbiB0aGUgY2VudGVyIGFuZCB0aGF0IGlzIHdoZXJlCnRoZSBjYXN0bGUgaXMuIEl0IGlzIHN1cnJvdW5kZWQgYnkgYm9pbGluZyBsYXZhLiBJdCBsb29rcyB2ZXJ5CmZvcmVib2RpbmcuCgpTSFJFSwpTdXJlLCBpdCdzIGJpZyBlbm91Z2gsIGJ1dCBsb29rIGF0IHRoZQpsb2NhdGlvbi4gKGxhdWdocy4uLnRoZW4gdGhlIGxhdWdoIHR1cm5zCmludG8gYSBncm9hbikKCkRPTktFWQpVaCwgU2hyZWs/IFVoLCByZW1lbWJlciB3aGVuIHlvdSBzYWlkCm9ncmVzIGhhdmUgbGF5ZXJzPwoKU0hSRUsKT2gsIGF5ZS4KCkRPTktFWQpXZWxsLCBJIGhhdmUgYSBiaXQgb2YgYSBjb25mZXNzaW9uIHRvCm1ha2UuIERvbmtleXMgZG9uJ3QgaGF2ZSBsYXllcnMuIFdlCndlYXIgb3VyIGZlYXIgcmlnaHQgb3V0IHRoZXJlIG9uIG91cgpzbGVldmVzLgoKU0hSRUsKV2FpdCBhIHNlY29uZC4gRG9ua2V5cyBkb24ndCBoYXZlIHNsZWV2ZXMuCgoKRE9OS0VZCllvdSBrbm93IHdoYXQgSSBtZWFuLgoKU0hSRUsKWW91IGNhbid0IHRlbGwgbWUgeW91J3JlIGFmcmFpZCBvZiBoZWlnaHRzLgoKCkRPTktFWQpObywgSSdtIGp1c3QgYSBsaXR0bGUgdW5jb21mb3J0YWJsZQphYm91dCBiZWluZyBvbiBhIHJpY2tldHkgYnJpZGdlIG92ZXIKYSBib2lsaW5nIGxpa2Ugb2YgbGF2YSEKClNIUkVLCkNvbWUgb24sIERvbmtleS4gSSdtIHJpZ2h0IGhlcmUgYmVzaWRlCnlhLCBva2F5PyBGb3IgZW1vdGlvbmFsIHN1cHBvcnQuLCB3ZSdsbApqdXN0IHRhY2tsZSB0aGlzIHRoaW5nIHRvZ2V0aGVyIG9uZQpsaXR0bGUgYmFieSBzdGVwIGF0IGEgdGltZS4KCkRPTktFWQpSZWFsbHk/CgpTSFJFSwpSZWFsbHksIHJlYWxseS4KCkRPTktFWQpPa2F5LCB0aGF0IG1ha2VzIG1lIGZlZWwgc28gbXVjaCBiZXR0ZXIuCgoKU0hSRUsKSnVzdCBrZWVwIG1vdmluZy4gQW5kIGRvbid0IGxvb2sgZG93bi4KCgpET05LRVkKT2theSwgZG9uJ3QgbG9vayBkb3duLiBEb24ndCBsb29rIGRvd24uCkRvbid0IGxvb2sgZG93bi4gS2VlcCBvbiBtb3ZpbmcuIERvbid0Cmxvb2sgZG93bi4gKGhlIHN0ZXBzIHRocm91Z2ggYSByb3R0aW5nCmJvYXJkIGFuZCBlbmRzIHVwIGxvb2tpbmcgc3RyYWlnaHQgZG93bgppbnRvIHRoZSBsYXZhKSBTaHJlayEgSSdtIGxvb2tpbicgZG93biEKT2gsIEdvZCwgSSBjYW4ndCBkbyB0aGlzISBKdXN0IGxldCBtZQpvZmYsIHBsZWFzZSEKClNIUkVLCkJ1dCB5b3UncmUgYWxyZWFkeSBoYWxmd2F5LgoKRE9OS0VZCkJ1dCBJIGtub3cgdGhhdCBoYWxmIGlzIHNhZmUhCgpTSFJFSwpPa2F5LCBmaW5lLiBJIGRvbid0IGhhdmUgdGltZSBmb3IgdGhpcy4KWW91IGdvIGJhY2suCgpET05LRVkKU2hyZWssIG5vISBXYWl0IQoKU0hSRUsKSnVzdCwgRG9ua2V5IC0gLSBMZXQncyBoYXZlIGEgZGFuY2UKdGhlbiwgc2hhbGwgbWU/IChib3VuY2VzIGFuZCBzd2F5cyB0aGUKYnJpZGdlKQoKRE9OS0VZCkRvbid0IGRvIHRoYXQhCgpTSFJFSwpPaCwgSSdtIHNvcnJ5LiBEbyB3aGF0PyBPaCwgdGhpcz8gKGJvdW5jZXMKdGhlIGJyaWRnZSBhZ2FpbikKCkRPTktFWQpZZXMsIHRoYXQhCgpTSFJFSwpZZXM/IFllcywgZG8gaXQuIE9rYXkuIChjb250aW51ZXMgdG8KYm91bmNlIGFuZCBzd2F5IGFzIGhlIGJhY2tzIERvbmtleSBhY3Jvc3MKdGhlIGJyaWRnZSkKCkRPTktFWQpObywgU2hyZWshIE5vISBTdG9wIGl0IQoKU0hSRUsKWW91IHNhaWQgZG8gaXQhIEknbSBkb2luJyBpdC4KCkRPTktFWQpJJ20gZ29ubmEgZGllLiBJJ20gZ29ubmEgZGllLiBTaHJlaywKSSdtIGdvbm5hIGRpZS4gKHN0ZXBzIG9udG8gc29saWQgZ3JvdW5kKQpPaCEKClNIUkVLClRoYXQnbGwgZG8sIERvbmtleS4gVGhhdCdsbCBkby4gKHdhbGtzCnRvd2FyZHMgdGhlIGNhc3RsZSkKCkRPTktFWQpDb29sLiBTbyB3aGVyZSBpcyB0aGlzIGZpcmUtYnJlYXRoaW5nCnBhaW4taW4tdGhlLW5lY2sgYW55d2F5PwoKU0hSRUsKSW5zaWRlLCB3YWl0aW5nIGZvciB1cyB0byByZXNjdWUgaGVyLgooY2h1Y2tsZXMpCgpET05LRVkKSSB3YXMgdGFsa2luJyBhYm91dCB0aGUgZHJhZ29uLCBTaHJlay4KCgpJTlNJREUgVEhFIENBU1RMRQoKRE9OS0VZCllvdSBhZnJhaWQ/CgpTSFJFSwpOby4KCkRPTktFWQpCdXQuLi4KClNIUkVLClNoaC4KCkRPTktFWQpPaCwgZ29vZC4gTWUgbmVpdGhlci4gKHNlZXMgYSBza2VsZXRvbgphbmQgZ2FzcHMpICdDYXVzZSB0aGVyZSdzIG5vdGhpbicgd3JvbmcKd2l0aCBiZWluJyBhZnJhaWQuIEZlYXIncyBhIHNlbnNpYmxlCnJlc3BvbnNlIHRvIGFuIHVuZmFtaWxpYXIgc2l0dWF0aW9uLgpVbmZhbWlsaWFyIGRhbmdlcm91cyBzaXR1YXRpb24sIEkgbWlnaHQKYWRkLiBXaXRoIGEgZHJhZ29uIHRoYXQgYnJlYXRoZXMgZmlyZQphbmQgZWF0cyBrbmlnaHRzIGFuZCBicmVhdGhlcyBmaXJlLAppdCBzdXJlIGRvZXNuJ3QgbWVhbiB5b3UncmUgYSBjb3dhcmQKaWYgeW91J3JlIGEgbGl0dGxlIHNjYXJlZC4gSSBzdXJlIGFzCmhlY2sgYWluJ3Qgbm8gY293YXJkLiBJIGtub3cgdGhhdC4KCgpTSFJFSwpEb25rZXksIHR3byB0aGluZ3MsIG9rYXk/IFNodXQgLi4uIHVwLgpOb3cgZ28gb3ZlciB0aGVyZSBhbmQgc2VlIGlmIHlvdSBjYW4KZmluZCBhbnkgc3RhaXJzLgoKRE9OS0VZClN0YWlycz8gSSB0aG91Z2h0IHdlIHdhcyBsb29raW4nIGZvcgp0aGUgcHJpbmNlc3MuCgpTSFJFSwoocHV0dGluZyBvbiBhIGhlbG1ldCkgVGhlIHByaW5jZXNzIHdpbGwKYmUgdXAgdGhlIHN0YWlycyBpbiB0aGUgaGlnaGVzdCByb29tCmluIHRoZSB0YWxsZXN0IHRvd2VyLgoKRE9OS0VZCldoYXQgbWFrZXMgeW91IHRoaW5rIHNoZSdsbCBiZSB0aGVyZT8KCgpTSFJFSwpJIHJlYWQgaXQgaW4gYSBib29rIG9uY2UuICh3YWxrcyBvZmYpCgoKRE9OS0VZCkNvb2wuIFlvdSBoYW5kbGUgdGhlIGRyYWdvbi4gSSdsbCBoYW5kbGUKdGhlIHN0YWlycy4gSSdsbCBmaW5kIHRob3NlIHN0YWlycy4KSSdsbCB3aGlwIHRoZWlyIGJ1dHQgdG9vLiBUaG9zZSBzdGFpcnMKd29uJ3Qga25vdyB3aGljaCB3YXkgdGhleSdyZSBnb2luJy4KKHdhbGtzIG9mZikKCkVNUFRZIFJPT00KCkRvbmtleSBpcyBzdGlsbCB0YWxraW5nIHRvIGhpbXNlbGYgYXMgaGUgbG9va3MgYXJvdW5kIHRoZSByb29tLgoKCkRPTktFWQpJJ20gZ29ubmEgdGFrZSBkcmFzdGljIHN0ZXBzLiBLaWNrIGl0CnRvIHRoZSBjdXJiLiBEb24ndCBtZXNzIHdpdGggbWUuIEknbQp0aGUgc3RhaXIgbWFzdGVyLiBJJ3ZlIG1hc3RlcmVkIHRoZQpzdGFpcnMuIEkgd2lzaCBJIGhhZCBhIHN0ZXAgcmlnaHQgaGVyZS4KSSdkIHN0ZXAgYWxsIG92ZXIgaXQuCgpFTFNFV0hFUkUKClNocmVrIHNwb3RzIGEgbGlnaHQgaW4gdGhlIHRhbGxlc3QgdG93ZXIgd2luZG93LgoKU0hSRUsKV2VsbCwgYXQgbGVhc3Qgd2Uga25vdyB3aGVyZSB0aGUgcHJpbmNlc3MKaXMsIGJ1dCB3aGVyZSdzIHRoZS4uLgoKRE9OS0VZCihvcykgRHJhZ29uIQoKRG9ua2V5IGdhc3BzIGFuZCB0YWtlcyBvZmYgcnVubmluZyBhcyB0aGUgZHJhZ29uIHJvYXJzIGFnYWluLgpTaHJlayBtYW5hZ2VzIHRvIGdyYWIgRG9ua2V5IG91dCBvZiB0aGUgd2F5IGp1c3QgYXMgdGhlIGRyYWdvbgpicmVhdGhlcyBmaXJlLgoKU0hSRUsKRG9ua2V5LCBsb29rIG91dCEgKGhlIG1hbmFnZXMgdG8gZ2V0CmEgaG9sZCBvZiB0aGUgZHJhZ29ucyB0YWlsIGFuZCBob2xkcwpvbikgR290IHlhIQoKVGhlIGRyYWdvbiBnZXRzIGlycml0YXRlZCBhdCB0aGlzIGFuZCBmbGlja3MgaXQncyB0YWlsIGFuZCBTaHJlawpnb2VzIGZseWluZyB0aHJvdWdoIHRoZSBhaXIgYW5kIGNyYXNoZXMgdGhyb3VnaCB0aGUgcm9vZiBvZiB0aGUKdGFsbGVzdCB0b3dlci4gRmlvbmEgd2FrZXMgdXAgd2l0aCBhIGplcmsgYW5kIGxvb2tzIGF0IGhpbSBseWluZwpvbiB0aGUgZmxvb3IuCgpET05LRVkKT2ghIEFhaCEgQWFoIQoKRG9ua2V5IGdldCBjb3JuZXJlZCBhcyB0aGUgRHJhZ29uIGtub2NrcyBhd2F5IGFsbCBidXQgYSBzbWFsbApwYXJ0IG9mIHRoZSBicmlkZ2UgaGUncyBvbi4KCkRPTktFWQpOby4gT2gsIG5vLCBObyEgKHRoZSBkcmFnb24gcm9hcnMpIE9oLAp3aGF0IGxhcmdlIHRlZXRoIHlvdSBoYXZlLiAodGhlIGRyYWdvbgpncm93bHMpIEkgbWVhbiB3aGl0ZSwgc3BhcmtsaW5nIHRlZXRoLgpJIGtub3cgeW91IHByb2JhYmx5IGhlYXIgdGhpcyBhbGwgdGltZQpmcm9tIHlvdXIgZm9vZCwgYnV0IHlvdSBtdXN0IGJsZWFjaCwKJ2NhdXNlIHRoYXQgaXMgb25lIGRhenpsaW5nIHNtaWxlIHlvdQpnb3QgdGhlcmUuIERvIEkgZGV0ZWN0IGEgaGludCBvZiBtaW50eQpmcmVzaG5lc3M/IEFuZCB5b3Uga25vdyB3aGF0IGVsc2U/IFlvdSdyZQotIC0gWW91J3JlIGEgZ2lybCBkcmFnb24hIE9oLCBzdXJlIQpJIG1lYW4sIG9mIGNvdXJzZSB5b3UncmUgYSBnaXJsIGRyYWdvbi4KWW91J3JlIGp1c3QgcmVla2luZyBvZiBmZW1pbmluZSBiZWF1dHkuCih0aGUgZHJhZ29uIGJlZ2lucyBmbHV0dGVyaW5nIGhlciBleWVzCmF0IGhpbSkgV2hhdCdzIHRoZSBtYXR0ZXIgd2l0aCB5b3U/CllvdSBnb3Qgc29tZXRoaW5nIGluIHlvdXIgZXllPyBPaGguCk9oLiBPaC4gTWFuLCBJJ2QgcmVhbGx5IGxvdmUgdG8gc3RheSwKYnV0IHlvdSBrbm93LCBJJ20sIHVoLi4uKHRoZSBkcmFnb24KYmxvd3MgYSBzbW9rZSByaW5nIGluIHRoZSBzaGFwZSBvZiBhCmhlYXJ0IHJpZ2h0IGF0IGhpbSwgYW5kIGhlIGNvdWdocykgSSdtCmFuIGFzdGhtYXRpYywgYW5kIEkgZG9uJ3Qga25vdyBpZiBpdCdkCndvcmsgb3V0IGlmIHlvdSdyZSBnb25uYSBibG93IHNtb2tlCnJpbmdzLiBTaHJlayEgKHRoZSBkcmFnb24gcGlja3MgaGltCnVwIHdpdGggaGVyIHRlZXRoIGFuZCBjYXJyaWVzIGhpbSBvZmYpCk5vISBTaHJlayEgU2hyZWshIFNocmVrIQoKRklPTkEnUyBST09NCgpTaHJlayBncm9hbnMgYXMgaGUgZ2V0cyB1cCBvZmYgdGhlIGZsb29yLiBIaXMgYmFjayBpcyB0byBGaW9uYQpzbyBzaGUgc3RyYWlnaHRlbnMgaGVyIGRyZXNzIGFuZCBsYXlzIGJhY2sgZG93biBvbiB0aGUgYmVkLiBTaGUKdGhlbiBxdWlja2x5IHJlYWNoZXMgb3ZlciBhbmQgZ2V0cyB0aGUgYm91cXVldCBvZiBmbG93ZXJzIG9mZgp0aGUgc2lkZSB0YWJsZS4gU2hlIHRoZW4gbGF5cyBiYWNrIGRvd24gYW5kIGFwcGVhcnMgdG8gYmUgYXNsZWVwLgpTaHJlayB0dXJucyBhbmQgZ29lcyBvdmVyIHRvIGhlci4gSGUgbG9va3MgZG93biBhdCBGaW9uYSBmb3IKYSBtb21lbnQgYW5kIHNoZSBwdWNrZXJzIGhlciBsaXBzLiBTaHJlayB0YWtlcyBoZXIgYnkgdGhlIHNob3VsZGVycwphbmQgc2hha2VzIGhlciBhd2F5LgoKRklPTkEKT2ghIE9oIQoKU0hSRUsKV2FrZSB1cCEKCkZJT05BCldoYXQ/CgpTSFJFSwpBcmUgeW91IFByaW5jZXNzIEZpb25hPwoKRklPTkEKSSBhbSwgYXdhaXRpbmcgYSBrbmlnaHQgc28gYm9sZCBhcyB0bwpyZXNjdWUgbWUuCgpTSFJFSwpPaCwgdGhhdCdzIG5pY2UuIE5vdyBsZXQncyBnbyEKCkZJT05BCkJ1dCB3YWl0LCBTaXIgS25pZ2h0LiBUaGlzIGJlLWl0aCBvdXIKZmlyc3QgbWVldGluZy4gU2hvdWxkIGl0IG5vdCBiZSBhIHdvbmRlcmZ1bCwKcm9tYW50aWMgbW9tZW50PwoKU0hSRUsKWWVhaCwgc29ycnksIGxhZHkuIFRoZXJlJ3Mgbm8gdGltZS4KCgpGSU9OQQpIZXksIHdhaXQuIFdoYXQgYXJlIHlvdSBkb2luZz8gWW91IHNob3VsZApzd2VlcCBtZSBvZmYgbXkgZmVldCBvdXQgeW9uZGVyIHdpbmRvdwphbmQgZG93biBhIHJvcGUgb250byB5b3VyIHZhbGlhbnQgc3RlZWQuCgoKU0hSRUsKWW91J3ZlIGhhZCBhIGxvdCBvZiB0aW1lIHRvIHBsYW4gdGhpcywKaGF2ZW4ndCB5b3U/CgpGSU9OQQooc21pbGVzKSBNbS1obW0uCgpTaHJlayBicmVha3MgdGhlIGxvY2sgb24gaGVyIGRvb3IgYW5kIHB1bGxzIGhlciBvdXQgYW5kIGRvd24KdGhlIGhhbGx3YXkuCgpGSU9OQQpCdXQgd2UgaGF2ZSB0byBzYXZvciB0aGlzIG1vbWVudCEgWW91CmNvdWxkIHJlY2l0ZSBhbiBlcGljIHBvZW0gZm9yIG1lLiBBCmJhbGxhZD8gQSBzb25uZXQhIEEgbGltZXJpY2s/IE9yIHNvbWV0aGluZyEKCgpTSFJFSwpJIGRvbid0IHRoaW5rIHNvLgoKRklPTkEKQ2FuIEkgYXQgbGVhc3Qga25vdyB0aGUgbmFtZSBvZiBteSBjaGFtcGlvbj8KCgpTSFJFSwpVaCwgU2hyZWsuCgpGSU9OQQpTaXIgU2hyZWsuIChjbGVhcnMgdGhyb2F0IGFuZCBob2xkcwpvdXQgYSBoYW5ka2VyY2hpZWYpIEkgcHJheSB0aGF0IHlvdQp0YWtlIHRoaXMgZmF2b3IgYXMgYSB0b2tlbiBvZiBteSBncmF0aXR1ZGUuCgoKU0hSRUsKVGhhbmtzIQoKU3VkZGVubHkgdGhleSBoZWFyIHRoZSBkcmFnb24gcm9hci4KCkZJT05BCihzdXJwcmlzZWQpWW91IGRpZG4ndCBzbGF5IHRoZSBkcmFnb24/CgoKU0hSRUsKSXQncyBvbiBteSB0by1kbyBsaXN0LiBOb3cgY29tZSBvbiEKKHRha2VzIG9mZiBydW5uaW5nIGFuZCBkcmFncyBGaW9uYSBiZWhpbmQKaGltLikKCkZJT05BCkJ1dCB0aGlzIGlzbid0IHJpZ2h0ISBZb3Ugd2VyZSBtZWFudAp0byBjaGFyZ2UgaW4sIHN3b3JkIGRyYXduLCBiYW5uZXIgZmx5aW5nLgpUaGF0J3Mgd2hhdCBhbGwgdGhlIG90aGVyIGtuaWdodHMgZGlkLgoKClNIUkVLClllYWgsIHJpZ2h0IGJlZm9yZSB0aGV5IGJ1cnN0IGludG8gZmxhbWUuCgoKRklPTkEKVGhhdCdzIG5vdCB0aGUgcG9pbnQuIChTaHJlayBzdWRkZW5seQpzdG9wcyBhbmQgc2hlIHJ1bnMgaW50byBoaW0uKSBPaCEgKFNocmVrCmlnbm9yZXMgaGVyIGFuZCBoZWFkcyBmb3IgYSB3b29kZW4gZG9vcgpvZmYgdG8gdGhlIHNpZGUuKSBXYWl0LiBXaGVyZSBhcmUgeW91CmdvaW5nPyBUaGUgZXhpdCdzIG92ZXIgdGhlcmUuCgpTSFJFSwpXZWxsLCBJIGhhdmUgdG8gc2F2ZSBteSBhc3MuCgpGSU9OQQpXaGF0IGtpbmQgb2Yga25pZ2h0IGFyZSB5b3U/CgpTSFJFSwpPbmUgb2YgYSBraW5kLiAob3BlbnMgdGhlIGRvb3IgaW50bwp0aGUgdGhyb25lIHJvb20pCgpET05LRVkKKG9zKSBTbG93IGRvd24uIFNsb3cgZG93biwgYmFieSwgcGxlYXNlLgpJIGJlbGlldmUgaXQncyBoZWFsdGh5IHRvIGdldCB0byBrbm93CnNvbWVvbmUgb3ZlciBhIGxvbmcgcGVyaW9kIG9mIHRpbWUuCkp1c3QgY2FsbCBtZSBvbGQtZmFzaGlvbmVkLiAobGF1Z2hzCndvcnJpZWRseSkgKHdlIHNlZSBoaW0gdXAgY2xvc2UgYW5kCmZyb20gYSBkaXN0YW5jZSBhcyBTaHJlayBzbmVha3MgaW50bwp0aGUgcm9vbSkgSSBkb24ndCB3YW50IHRvIHJ1c2ggaW50bwphIHBoeXNpY2FsIHJlbGF0aW9uc2hpcC4gSSdtIG5vdCBlbW90aW9uYWxseQpyZWFkeSBmb3IgYSBjb21taXRtZW50IG9mLCB1aCwgdGhpcwotIC0gTWFnbml0dWRlIHJlYWxseSBpcyB0aGUgd29yZCBJJ20KbG9va2luZyBmb3IuIE1hZ25pdHVkZS0gLSBIZXksIHRoYXQKaXMgdW53YW50ZWQgcGh5c2ljYWwgY29udGFjdC4gSGV5LCB3aGF0CmFyZSB5b3UgZG9pbmc/IE9rYXksIG9rYXkuIExldCdzIGp1c3QKYmFjayB1cCBhIGxpdHRsZSBhbmQgdGFrZSB0aGlzIG9uZSBzdGVwCmF0IGEgdGltZS4gV2UgcmVhbGx5IHNob3VsZCBnZXQgdG8ga25vdwplYWNoIG90aGVyIGZpcnN0IGFzIGZyaWVuZHMgb3IgcGVuIHBhbHMuCkknbSBvbiB0aGUgcm9hZCBhIGxvdCwgYnV0IEkganVzdCBsb3ZlCnJlY2VpdmluZyBjYXJkcyAtIC0gSSdkIHJlYWxseSBsb3ZlCnRvIHN0YXksIGJ1dCAtIC0gRG9uJ3QgZG8gdGhhdCEgVGhhdCdzCm15IHRhaWwhIFRoYXQncyBteSBwZXJzb25hbCB0YWlsLiBZb3UncmUKZ29ubmEgdGVhciBpdCBvZmYuIEkgZG9uJ3QgZ2l2ZSBwZXJtaXNzaW9uCi0gLSBXaGF0IGFyZSB5b3UgZ29ubmEgZG8gd2l0aCB0aGF0PwpIZXksIG5vdy4gTm8gd2F5LiBObyEgTm8hIE5vLCBubyEgTm8uCk5vLCBubywgbm8uIE5vISBPaCEKClNocmVrIGdyYWJzIGEgY2hhaW4gdGhhdCdzIGNvbm5lY3RlZCB0byB0aGUgY2hhbmRlbGllciBhbmQgc3dpbmdzCnRvd2FyZCB0aGUgZHJhZ29uLiBIZSBtaXNzZXMgYW5kIGhlIHN3aW5ncyBiYWNrIGFnYWluLiBIZSBsb29rcwp1cCBhbmQgc3BvdHMgdGhhdCB0aGUgY2hhbmRlbGllciBpcyByaWdodCBhYm92ZSB0aGUgZHJhZ29ucyBoZWFkLgpIZSBwdWxscyBvbiB0aGUgY2hhaW4gYW5kIGl0IHJlbGVhc2VzIGFuZCBoZSBmYWxscyBkb3duIGFuZCBidW1wcwpEb25rZXkgb3V0IG9mIHRoZSB3YXkgcmlnaHQgYXMgdGhlIGRyYWdvbiBpcyBhYm91dCB0byBraXNzIGhpbS4KSW5zdGVhZCB0aGUgZHJhZ29uIGtpc3NlcyBTaHJla3MnIGJ1dHQuIFNoZSBvcGVucyBoZXIgZXllcyBhbmQKcm9hcnMuIFNocmVrIGxldHMgZ28gb2YgdGhlIGNoYWluIGFuZCB0aGUgY2hhbmRlbGllciBmYWxscyBvbnRvCmhlciBoZWFkLCBidXQgaXQncyB0b28gYmlnIGFuZCBpdCBnb2VzIG92ZXIgaGVyIGhlYWQgYW5kIGZvcm1zCmEgc29ydCBvZiBjb2xsYXIgZm9yIGhlci4gU2hlIHJvYXJzIGFnYWluIGFuZCBTaHJlayBhbmQgRG9ua2V5CnRha2Ugb2ZmIHJ1bm5pbmcuIFZlcnkgJ01hdHJpeCcgc3R5bGUuIFNocmVrIGdyYWJzIERvbmtleSBhbmQKdGhlbiBncmFicyBQcmluY2VzcyBGaW9uYSBhcyBoZSBydW5zIHBhc3QgaGVyLgoKRE9OS0VZCkhpLCBQcmluY2VzcyEKCkZJT05BCkl0IHRhbGtzIQoKU0hSRUsKWWVhaCwgaXQncyBnZXR0aW5nIGhpbSB0byBzaHV0IHVwIHRoYXQncwp0aGUgdHJpY2suCgpUaGV5IGFsbCBzdGFydCBzY3JlYW1pbmcgYXMgdGhlIGRyYWdvbiBnYWlucyBvbiB0aGVtLiBTaHJlayBzcG90cwphIGRlc2NlbmRpbmcgc2xpZGUgYW5kIGp1bXBzIG9uLiBCdXQgdW5mb3J0dW5hdGVseSB0aGVyZSBpcyBhCmNyYWNrIGluIHRoZSBzdG9uZSBhbmQgaXQgaGl0cyBTaHJlayByaWdodCBpbiB0aGUgZ3JvaW4uIEhpcwpleWVzIGNyb3NzIGFuZCBhcyBoZSByZWFjaGVzIHRoZSBib3R0b20gb2YgdGhlIHNsaWRlIGhlIHN0dW1ibGVzCm9mZiBhbmQgd2Fsa3MgbGlnaHRseS4KClNIUkVLCk9oIQoKU2hyZWsgZ2V0cyB0aGVtIGNsb3NlIHRvIHRoZSBleGl0IGFuZCBzZXRzIGRvd24gRG9ua2V5IGFuZCBGaW9uYS4KCgpTSFJFSwpPa2F5LCB5b3UgdHdvLCBoZWFyZCBmb3IgdGhlIGV4aXQhIEknbGwKdGFrZSBjYXJlIG9mIHRoZSBkcmFnb24uCgpTaHJlayBncmFicyBhIHN3b3JkIGFuZCBoZWFkcyBiYWNrIHRvd2FyZCB0aGUgaW50ZXJpb3Igb2YgdGhlCmNhc3RsZS4gSGUgdGhyb3dzIHRoZSBzd29yZCBkb3duIGluIGJldHdlZW4gc2V2ZXJhbCBvdmVybGFwcGluZwpjaGFpbiBsaW5rcy4gVGhlIGNoYWluIGxpbmtzIGFyZSBhdHRhY2hlZCB0byB0aGUgY2hhbmRlbGllciB0aGF0CmlzIHN0aWxsIGFyb3VuZCB0aGUgZHJhZ29ucyBuZWNrLgoKU0hSRUsKKGVjaG9pbmcpIFJ1biEKClRoZXkgYWxsIHRha2Ugb2ZmIHJ1bm5pbmcgZm9yIHRoZSBleGl0IHdpdGggdGhlIGRyYWdvbiBpbiBob3QKcHVyc3VpdC4gVGhleSBtYWtlIGl0IHRvIHRoZSBicmlkZ2UgYW5kIGhlYWQgYWNyb3NzLiBUaGUgZHJhZ29ucwpicmVhdGhlcyBmaXJlIGFuZCB0aGUgYnJpZGdlIGJlZ2lucyB0byBidXJuLiBUaGV5IGFsbCBoYW5nIG9uCmZvciBkZWFyIGxpZmUgYXMgdGhlIHJvcGVzIGhvbGRpbmcgdGhlIGJyaWRnZSB1cCBjb2xsYXBzZS4gVGhleQphcmUgc3d1bmcgdG8gdGhlIG90aGVyIHNpZGUuIEFzIHRoZXkgaGFuZyB1cHNpZGUgZG93biB0aGV5IGxvb2sKaW4gaG9ycm9yIGFzIHRoZSBkcmFnb24gbWFrZXMgdG8gZmx5IG92ZXIgdGhlIGJvaWxpbmcgbGF2YSB0bwpnZXQgdGhlbS4gQnV0IHN1ZGRlbmx5IHRoZSBjaGFuZGVsaWVyIHdpdGggdGhlIGNoYWluIGplcmsgdGhlCmRyYWdvbiBiYWNrIGFuZCBzaGUncyB1bmFibGUgdG8gZ2V0IHRvIHRoZW0uIE91ciBnYW5nIGNsaW1icwpxdWlja2x5IHRvIHNhZmV0eSBhcyB0aGUgZHJhZ29uIGxvb2tzIGFuZ3J5IGFuZCB0aGVuIGdpdmVzIGEKc2FkIHdoaW1wZXIgYXMgc2hlIHdhdGNoZXMgRG9ua2V5IHdhbGsgYXdheS4KCkZJT05BCihzbGlkaW5nIGRvd24gdGhlICd2b2xjYW5vJyBoaWxsKSBZb3UKZGlkIGl0ISBZb3UgcmVzY3VlZCBtZSEgWW91J3JlIGFtYXppbmcuCihiZWhpbmQgaGVyIERvbmtleSBmYWxscyBkb3duIHRoZSBoaWxsKQpZb3UncmUgLSAtIFlvdSdyZSB3b25kZXJmdWwuIFlvdSdyZS4uLgoodHVybnMgYW5kIHNlZXMgU2hyZWsgZmFsbCBkb3duIHRoZQpoaWxsIGFuZCBidW1wIGludG8gRG9ua2V5KSBhIGxpdHRsZQp1bm9ydGhvZG94IEknbGwgYWRtaXQuIEJ1dCB0aHkgZGVlZAppcyBncmVhdCwgYW5kIHRoeSBoZWFydCBpcyBwdXJlLiBJIGFtCmV0ZXJuYWxseSBpbiB5b3VyIGRlYnQuIChEb25rZXkgY2xlYXJzCmhpcyB0aHJvYXQuKSBBbmQgd2hlcmUgd291bGQgYSBicmF2ZQprbmlnaHQgYmUgd2l0aG91dCBoaXMgbm9ibGUgc3RlZWQ/CgoKRE9OS0VZCkkgaG9wZSB5b3UgaGVhcmQgdGhhdC4gU2hlIGNhbGxlZCBtZQphIG5vYmxlIHN0ZWVkLiBTaGUgdGhpbmsgSSdtIGEgc3RlZWQuCgoKRklPTkEKVGhlIGJhdHRsZSBpcyB3b24uIFlvdSBtYXkgcmVtb3ZlIHlvdXIKaGVsbWV0LCBnb29kIFNpciBLbmlnaHQuCgpTSFJFSwpVaCwgbm8uCgpGSU9OQQpXaHkgbm90PwoKU0hSRUsKSSBoYXZlIGhlbG1ldCBoYWlyLgoKRklPTkEKUGxlYXNlLiBJIHdvdWxkJ3N0IGxvb2sgdXBvbiB0aGUgZmFjZQpvZiBteSByZXNjdWVyLgoKU0hSRUsKTm8sIG5vLCB5b3Ugd291bGRuJ3QgLSAtICdzdC4KCkZJT05BCkJ1dCBob3cgd2lsbCB5b3Uga2lzcyBtZT8KClNIUkVLCldoYXQ/ICh0byBEb25rZXkpIFRoYXQgd2Fzbid0IGluIHRoZQpqb2IgZGVzY3JpcHRpb24uCgpET05LRVkKTWF5YmUgaXQncyBhIHBlcmsuCgpGSU9OQQpObywgaXQncyBkZXN0aW55LiBPaCwgeW91IG11c3Qga25vdwpob3cgaXQgZ29lcy4gQSBwcmluY2VzcyBsb2NrZWQgaW4gYQp0b3dlciBhbmQgYmVzZXQgYnkgYSBkcmFnb24gaXMgcmVzY3VlZApieSBhIGJyYXZlIGtuaWdodCwgYW5kIHRoZW4gdGhleSBzaGFyZQp0cnVlIGxvdmUncyBmaXJzdCBraXNzLgoKRE9OS0VZCkhtbT8gV2l0aCBTaHJlaz8gWW91IHRoaW5rLSAtIFdhaXQuCldhaXQuIFlvdSB0aGluayB0aGF0IFNocmVrIGlzIHlvdSB0cnVlCmxvdmU/CgpGSU9OQQpXZWxsLCB5ZXMuCgpCb3RoIERvbmtleSBhbmQgU2hyZWsgYnVyc3Qgb3V0IGxhdWdoaW5nLgoKRE9OS0VZCllvdSB0aGluayBTaHJlayBpcyB5b3VyIHRydWUgbG92ZSEKCgpGSU9OQQpXaGF0IGlzIHNvIGZ1bm55PwoKU0hSRUsKTGV0J3MganVzdCBzYXkgSSdtIG5vdCB5b3VyIHR5cGUsIG9rYXk/RmlvbmE6Ck9mIGNvdXJzZSwgeW91IGFyZS4gWW91J3JlIG15IHJlc2N1ZXIuCk5vdyAtIC0gTm93IHJlbW92ZSB5b3VyIGhlbG1ldC4KClNIUkVLCkxvb2suIEkgcmVhbGx5IGRvbid0IHRoaW5rIHRoaXMgaXMgYQpnb29kIGlkZWEuCgpGSU9OQQpKdXN0IHRha2Ugb2ZmIHRoZSBoZWxtZXQuCgpTSFJFSwpJJ20gbm90IGdvaW5nIHRvLgoKRklPTkEKVGFrZSBpdCBvZmYuCgpTSFJFSwpObyEKCkZJT05BCk5vdyEKClNIUkVLCk9rYXkhIEVhc3kuIEFzIHlvdSBjb21tYW5kLiBZb3VyIEhpZ2huZXNzLgoodGFrZXMgb2ZmIGhpcyBoZWxtZXQpCgpGSU9OQQpZb3UtIC0gWW91J3JlIGEtIC0gYW4gb2dyZS4KClNIUkVLCk9oLCB5b3Ugd2VyZSBleHBlY3RpbmcgUHJpbmNlIENoYXJtaW5nLgoKCkZJT05BCldlbGwsIHllcywgYWN0dWFsbHkuIE9oLCBuby4gVGhpcyBpcwphbGwgd3JvbmcuIFlvdSdyZSBub3Qgc3VwcG9zZWQgdG8gYmUKYW4gb2dyZS4KClNIUkVLClByaW5jZXNzLCBJIHdhcyBzZW50IHRvIHJlc2N1ZSB5b3UgYnkKTG9yZCBGYXJxdWFhZCwgb2theT8gSGUgaXMgdGhlIG9uZSB3aG8Kd2FudHMgdG8gbWFycnkgeW91LgoKRklPTkEKVGhlbiB3aHkgZGlkbid0IGhlIGNvbWUgcmVzY3VlIG1lPwoKClNIUkVLCkdvb2QgcXVlc3Rpb24uIFlvdSBzaG91bGQgYXNrIGhpbSB0aGF0CndoZW4gd2UgZ2V0IHRoZXJlLgoKRklPTkEKQnV0IEkgaGF2ZSB0byBiZSByZXNjdWVkIGJ5IG15IHRydWUKbG92ZSwgbm90IGJ5IHNvbWUgb2dyZSBhbmQgaGlzLSAtIGhpcwpwZXQuCgpET05LRVkKV2VsbCwgc28gbXVjaCBmb3Igbm9ibGUgc3RlZWQuCgpTSFJFSwpZb3UncmUgbm90IG1ha2luZyBteSBqb2IgYW55IGVhc2llci4KCgpGSU9OQQpJJ20gc29ycnksIGJ1dCB5b3VyIGpvYiBpcyBub3QgbXkgcHJvYmxlbS4KWW91IGNhbiB0ZWxsIExvcmQgRmFycXVhYWQgdGhhdCBpZiBoZQp3YW50cyB0byByZXNjdWUgbWUgcHJvcGVybHksIEknbGwgYmUKd2FpdGluZyBmb3IgaGltIHJpZ2h0IGhlcmUuCgpTSFJFSwpIZXkhIEknbSBubyBvbmUncyBtZXNzZW5nZXIgYm95LCBhbGwKcmlnaHQ/IChvbWlub3VzKSBJJ20gYSBkZWxpdmVyeSBib3kuCihoZSBzd2lmdGx5IHBpY2tzIGhlciB1cCBhbmQgc3dpbmdzCmhlciBvdmVyIGhpcyBzaG91bGRlciBsaWtlIHNoZSB3YXMgYQpzYWNrIG9mIHBvdGF0b2VzKQoKRklPTkEKWW91IHdvdWxkbid0IGRhcmUuIFB1dCBtZSBkb3duIQoKU0hSRUsKWWEgY29taW4nLCBEb25rZXk/CgpET05LRVkKSSdtIHJpZ2h0IGJlaGluZCB5YS4KCkZJT05BClB1dCBtZSBkb3duLCBvciB5b3Ugd2lsbCBzdWZmZXIgdGhlCmNvbnNlcXVlbmNlcyEgVGhpcyBpcyBub3QgZGlnbmlmaWVkIQpQdXQgbWUgZG93biEKCldPT0RTCgpBIGxpdHRsZSB0aW1lIGhhcyBwYXNzZWQgYW5kIEZpb25hIGhhcyBjYWxtZWQgZG93bi4gU2hlIGp1c3QKaGFuZ3MgdGhlcmUgbGltcGx5IHdoaWxlIFNocmVrIGNhcnJpZXMgaGVyLgoKRE9OS0VZCk9rYXksIHNvIGhlcmUncyBhbm90aGVyIHF1ZXN0aW9uLiBTYXkKdGhlcmUncyBhIHdvbWFuIHRoYXQgZGlncyB5b3UsIHJpZ2h0LApidXQgeW91IGRvbid0IHJlYWxseSBsaWtlIGhlciB0aGF0IHdheS4KSG93IGRvIHlvdSBsZXQgaGVyIGRvd24gcmVhbCBlYXN5IHNvCmhlciBmZWVsaW5ncyBhcmVuJ3QgaHVydCwgYnV0IHlvdSBkb24ndApnZXQgYnVybmVkIHRvIGEgY3Jpc3AgYW5kIGVhdGVuPwoKRklPTkEKWW91IGp1c3QgdGVsbCBoZXIgc2hlJ3Mgbm90IHlvdXIgdHJ1ZQpsb3ZlLiBFdmVyeW9uZSBrbm93cyB3aGF0IGhhcHBlbnMgd2hlbgp5b3UgZmluZCB5b3VyLi4uKFNocmVrIGRyb3BzIGhlciBvbgp0aGUgZ3JvdW5kKSBIZXkhIFRoZSBzb29uZXIgd2UgZ2V0IHRvCkR1TG9jIHRoZSBiZXR0ZXIuCgpET05LRVkKWW91J3JlIGdvbm5hIGxvdmUgaXQgdGhlcmUsIFByaW5jZXNzLgpJdCdzIGJlYXV0aWZ1bCEKCkZJT05BCkFuZCB3aGF0IG9mIG15IGdyb29tLXRvLWJlPyBMb3JkIEZhcnF1YWFkPwpXaGF0J3MgaGUgbGlrZT8KClNIUkVLCkxldCBtZSBwdXQgaXQgdGhpcyB3YXksIFByaW5jZXNzLiBNZW4Kb2YgRmFycXVhYWQncyBzdGF0dXJlIGFyZSBpbiBzaG9ydCBzdXBwbHkuCihoZSBhbmQgRG9ua2V5IGxhdWdoKQoKU2hyZWsgdGhlbiBwcm9jZWVkcyB0byBzcGxhc2ggd2F0ZXIgb250byBoaXMgZmFjZSB0byB3YXNoIG9mZgp0aGUgZHVzdCBhbmQgZ3JpbWUuCgpET05LRVkKSSBkb24ndCBrbm93LiBUaGVyZSBhcmUgdGhvc2Ugd2hvIHRoaW5rCmxpdHRsZSBvZiBoaW0uICh0aGV5IGxhdWdoIGFnYWluKSBGaW9uYToKU3RvcCBpdC4gU3RvcCBpdCwgYm90aCBvZiB5b3UuIFlvdSdyZQpqdXN0IGplYWxvdXMgeW91IGNhbiBuZXZlciBtZWFzdXJlIHVwCnRvIGEgZ3JlYXQgcnVsZXIgbGlrZSBMb3JkIEZhcnF1YWFkLgoKClNIUkVLClllYWgsIHdlbGwsIG1heWJlIHlvdSdyZSByaWdodCwgUHJpbmNlc3MuCkJ1dCBJJ2xsIGxldCB5b3UgZG8gdGhlICJtZWFzdXJpbmciCndoZW4geW91IHNlZSBoaW0gdG9tb3Jyb3cuCgpGSU9OQQoobG9va3MgYXQgdGhlIHNldHRpbmcgc3VuKSBUb21vcnJvdz8KSXQnbGwgdGFrZSB0aGF0IGxvbmc/IFNob3VsZG4ndCB3ZSBzdG9wCnRvIG1ha2UgY2FtcD8KClNIUkVLCk5vLCB0aGF0J2xsIHRha2UgbG9uZ2VyLiBXZSBjYW4ga2VlcApnb2luZy4KCkZJT05BCkJ1dCB0aGVyZSdzIHJvYmJlcnMgaW4gdGhlIHdvb2RzLgoKRE9OS0VZCldob2EhIFRpbWUgb3V0LCBTaHJlayEgQ2FtcCBpcyBzdGFydGluZwp0byBzb3VuZCBnb29kLgoKU0hSRUsKSGV5LCBjb21lIG9uLiBJJ20gc2NhcmllciB0aGFuIGFueXRoaW5nCndlJ3JlIGdvaW5nIHRvIHNlZSBpbiB0aGlzIGZvcmVzdC4KCgpGSU9OQQpJIG5lZWQgdG8gZmluZCBzb21ld2hlcmUgdG8gY2FtcCBub3chCgoKQm90aCBEb25rZXkgYW5kIFNocmVrJ3MgZWFycyBsb3dlciBhcyB0aGV5IHNocmluayBhd2F5IGZyb20gaGVyLgoKCk1PVU5UQUlOIENMSUZGCgpTaHJlayBoYXMgZm91bmQgYSBjYXZlIHRoYXQgYXBwZWFycyB0byBiZSBpbiBnb29kIG9yZGVyLiBIZSBzaG92ZXMKYSBzdG9uZSBib3VsZGVyIG91dCBvZiB0aGUgd2F5IHRvIHJldmVhbCB0aGUgY2F2ZS4KClNIUkVLCkhleSEgT3ZlciBoZXJlLgoKRE9OS0VZClNocmVrLCB3ZSBjYW4gZG8gYmV0dGVyIHRoYW4gdGhhdC4gSQpkb24ndCB0aGluayB0aGlzIGlzIGZpdCBmb3IgYSBwcmluY2Vzcy4KCgpGSU9OQQpObywgbm8sIGl0J3MgcGVyZmVjdC4gSXQganVzdCBuZWVkcwphIGZldyBob21leSB0b3VjaGVzLgoKU0hSRUsKSG9tZXkgdG91Y2hlcz8gTGlrZSB3aGF0PyAoaGUgaGVhcnMKYSB0ZWFyaW5nIG5vaXNlIGFuZCBsb29rcyBvdmVyIGF0IEZpb25hCndobyBoYXMgdG9ybiB0aGUgYmFyayBvZmYgb2YgYSB0cmVlLikKCgpGSU9OQQpBIGRvb3I/IFdlbGwsIGdlbnRsZW1lbiwgSSBiaWQgdGhlZQpnb29kIG5pZ2h0LiAoZ29lcyBpbnRvIHRoZSBjYXZlIGFuZApwdXRzIHRoZSBiYXJrIGRvb3IgdXAgYmVoaW5kIGhlcikKCgpET05LRVkKWW91IHdhbnQgbWUgdG8gcmVhZCB5b3UgYSBiZWR0aW1lIHN0b3J5PwpJIHdpbGwuCgpGSU9OQQoob3MpIEkgc2FpZCBnb29kIG5pZ2h0IQoKU2hyZWsgbG9va3MgYXQgRG9ua2V5IGZvciBhIHNlY29uZCBhbmQgdGhlbiBnb2VzIHRvIG1vdmUgdGhlCmJvdWxkZXIgYmFjayBpbiBmcm9udCBvZiB0aGUgZW50cmFuY2UgdG8gdGhlIGNhdmUgd2l0aCBGaW9uYQpzdGlsbCBpbnNpZGUuCgpET05LRVkKU2hyZWssIFdoYXQgYXJlIHlvdSBkb2luZz8KClNIUkVLCihsYXVnaHMpIEkganVzdC0gLSBZb3Uga25vdyAtIC0gT2gsCmNvbWUgb24uIEkgd2FzIGp1c3Qga2lkZGluZy4KCkxBVEVSIFRIQVQgTklHSFQKClNocmVrIGFuZCBEb25rZXkgYXJlIHNpdHRpbmcgYXJvdW5kIGEgY2FtcGZpcmUuIFRoZXkgYXJlIHN0YXJpbmcKdXAgaW50byB0aGUgc2t5IGFzIFNocmVrIHBvaW50cyBvdXQgY2VydGFpbiBzdGFyIGNvbnN0ZWxsYXRpb25zCnRvIERvbmtleS4KClNIUkVLCkFuZCwgdWgsIHRoYXQgb25lLCB0aGF0J3MgVGhyb3diYWNrLAp0aGUgb25seSBvZ3JlIHRvIGV2ZXIgc3BpdCBvdmVyIHRocmVlCndoZWF0IGZpZWxkcy4KCkRPTktFWQpSaWdodC4gWWVhaC4gSGV5LCBjYW4geW91IHRlbGwgbXkgZnV0dXJlCmZyb20gdGhlc2Ugc3RhcnM/CgpTSFJFSwpUaGUgc3RhcnMgZG9uJ3QgdGVsbCB0aGUgZnV0dXJlLCBEb25rZXkuClRoZXkgdGVsbCBzdG9yaWVzLiBMb29rLCB0aGVyZSdzIEJsb29kbnV0LAp0aGUgRmxhdHVsZW50LiBZb3UgY2FuIGd1ZXNzIHdoYXQgaGUncwpmYW1vdXMgZm9yLgoKRE9OS0VZCkkga25vdyB5b3UncmUgbWFraW5nIHRoaXMgdXAuCgpTSFJFSwpObywgbG9vay4gVGhlcmUgaGUgaXMsIGFuZCB0aGVyZSdzIHRoZQpncm91cCBvZiBodW50ZXJzIHJ1bm5pbmcgYXdheSBmcm9tIGhpcwpzdGVuY2guCgpET05LRVkKVGhhdCBhaW4ndCBub3RoaW4nIGJ1dCBhIGJ1bmNoIG9mIGxpdHRsZQpkb3RzLgoKU0hSRUsKWW91IGtub3csIERvbmtleSwgc29tZXRpbWVzIHRoaW5ncyBhcmUKbW9yZSB0aGFuIHRoZXkgYXBwZWFyLiBIbW0/IEZvcmdldCBpdC4KCgpET05LRVkKKGhlYXZlcyBhIGJpZyBzaWdoKSBIZXksIFNocmVrLCB3aGF0CndlIGdvbm5hIGRvIHdoZW4gd2UgZ2V0IG91ciBzd2FtcCBhbnl3YXk/CgoKU0hSRUsKT3VyIHN3YW1wPwoKRE9OS0VZCllvdSBrbm93LCB3aGVuIHdlJ3JlIHRocm91Z2ggcmVzY3VpbmcKdGhlIHByaW5jZXNzLgoKU0hSRUsKV2U/IERvbmtleSwgdGhlcmUncyBubyAid2UiLiBUaGVyZSdzCm5vICJvdXIiLiBUaGVyZSdzIGp1c3QgbWUgYW5kIG15IHN3YW1wLgpUaGUgZmlyc3QgdGhpbmcgSSdtIGdvbm5hIGRvIGlzIGJ1aWxkCmEgdGVuLWZvb3Qgd2FsbCBhcm91bmQgbXkgbGFuZC4KCkRPTktFWQpZb3UgY3V0IG1lIGRlZXAsIFNocmVrLiBZb3UgY3V0IG1lIHJlYWwKZGVlcCBqdXN0IG5vdy4gWW91IGtub3cgd2hhdCBJIHRoaW5rPwpJIHRoaW5rIHRoaXMgd2hvbGUgd2FsbCB0aGluZyBpcyBqdXN0CmEgd2F5IHRvIGtlZXAgc29tZWJvZHkgb3V0LgoKU0hSRUsKTm8sIGRvIHlhIHRoaW5rPwoKRE9OS0VZCkFyZSB5b3UgaGlkaW4nIHNvbWV0aGluZz8KClNIUkVLCk5ldmVyIG1pbmQsIERvbmtleS4KCkRPTktFWQpPaCwgdGhpcyBpcyBhbm90aGVyIG9uZSBvZiB0aG9zZSBvbmlvbgp0aGluZ3MsIGlzbid0IGl0PwoKU0hSRUsKTm8sIHRoaXMgaXMgb25lIG9mIHRob3NlIGRyb3AtaXQgYW5kCmxlYXZlLWl0IGFsb25lIHRoaW5ncy4KCkRPTktFWQpXaHkgZG9uJ3QgeW91IHdhbnQgdG8gdGFsayBhYm91dCBpdD8KCgpTSFJFSwpXaHkgZG8geW91IHdhbnQgdG8gdGFsayBhYm91dCBpdD8KCkRPTktFWQpXaHkgYXJlIHlvdSBibG9ja2luZz8KClNIUkVLCkknbSBub3QgYmxvY2tpbmcuCgpET05LRVkKT2gsIHllcywgeW91IGFyZS4KClNIUkVLCkRvbmtleSwgSSdtIHdhcm5pbmcgeW91LgoKRE9OS0VZCldobyB5b3UgdHJ5aW5nIHRvIGtlZXAgb3V0PwoKU0hSRUsKRXZlcnlvbmUhIE9rYXk/CgpET05LRVkKKHBhdXNlKSBPaCwgbm93IHdlJ3JlIGdldHRpbicgc29tZXdoZXJlLgooZ3JpbnMpCgpBdCB0aGlzIHBvaW50IEZpb25hIHB1bGxzIHRoZSAnZG9vcicgYXdheSBmcm9tIHRoZSBlbnRyYW5jZSB0bwp0aGUgY2F2ZSBhbmQgcGVha3Mgb3V0LiBOZWl0aGVyIG9mIHRoZSBndXlzIHNlZSBoZXIuCgpTSFJFSwpPaCEgRm9yIHRoZSBsb3ZlIG9mIFBldGUhIChnZXRzIHVwIGFuZAp3YWxrcyBvdmVyIHRvIHRoZSBlZGdlIG9mIHRoZSBjbGlmZgphbmQgc2l0cyBkb3duKQoKRE9OS0VZCldoYXQncyB5b3VyIHByb2JsZW0/IFdoYXQgeW91IGdvdCBhZ2FpbnN0CnRoZSB3aG9sZSB3b3JsZCBhbnl3YXk/CgpTSFJFSwpMb29rLCBJJ20gbm90IHRoZSBvbmUgd2l0aCB0aGUgcHJvYmxlbSwKb2theT8gSXQncyB0aGUgd29ybGQgdGhhdCBzZWVtcyB0byBoYXZlCmEgcHJvYmxlbSB3aXRoIG1lLiBQZW9wbGUgdGFrZSBvbmUgbG9vawphdCBtZSBhbmQgZ28uICJBYWghIEhlbHAhIFJ1biEgQSBiaWcsCnN0dXBpZCwgdWdseSBvZ3JlISIgVGhleSBqdWRnZSBtZSBiZWZvcmUKdGhleSBldmVuIGtub3cgbWUuIFRoYXQncyB3aHkgSSdtIGJldHRlcgpvZmYgYWxvbmUuCgpET05LRVkKWW91IGtub3cgd2hhdD8gV2hlbiB3ZSBtZXQsIEkgZGlkbid0CnRoaW5rIHlvdSB3YXMganVzdCBhIGJpZywgc3R1cGlkLCB1Z2x5Cm9ncmUuCgpTSFJFSwpZZWFoLCBJIGtub3cuCgpET05LRVkKU28sIHVoLCBhcmUgdGhlcmUgYW55IGRvbmtleXMgdXAgdGhlcmU/CgoKU0hSRUsKV2VsbCwgdGhlcmUncywgdW0sIEdhYmJ5LCB0aGUgU21hbGwKYW5kIEFubm95aW5nLgoKRE9OS0VZCk9rYXksIG9rYXksIEkgc2VlIGl0IG5vdy4gVGhlIGJpZyBzaGlueQpvbmUsIHJpZ2h0IHRoZXJlLiBUaGF0IG9uZSB0aGVyZT8KCgpGaW9uYSBwdXRzIHRoZSBkb29yIGJhY2suCgpTSFJFSwpUaGF0J3MgdGhlIG1vb24uCgpET05LRVkKT2gsIG9rYXkuCgpEdUxvYyAtIEZhcnF1YWFkJ3MgQmVkcm9vbQoKVGhlIGNhbWVyYSBwYW5zIG92ZXIgYSBsb3Qgb2Ygd2VkZGluZyBzdHVmZi4gU29mdCBtdXNpYyBwbGF5cwppbiB0aGUgYmFja2dyb3VuZC4gRmFycXVhYWQgaXMgaW4gYmVkLCB3YXRjaGluZyBhcyB0aGUgTWFnaWMKTWlycm9yIHNob3dzIGhpbSBQcmluY2VzcyBGaW9uYS4KCkZBUlFVQUFECkFnYWluLCBzaG93IG1lIGFnYWluLiBNaXJyb3IsIG1pcnJvciwKc2hvdyBoZXIgdG8gbWUuIFNob3cgbWUgdGhlIHByaW5jZXNzLgoKCk1JUlJPUgpIbXBoLgoKVGhlIE1pcnJvciByZXdpbmRzIGFuZCBiZWdpbnMgdG8gcGxheSBhZ2FpbiBmcm9tIHRoZSBiZWdpbm5pbmcuCgoKRkFSUVVBQUQKQWguIFBlcmZlY3QuCgpGYXJxdWFhZCBsb29rcyBkb3duIGF0IGhpcyBiYXJlIGNoZXN0IGFuZCBwdWxscyB0aGUgc2hlZXQgdXAKdG8gY292ZXIgaGltc2VsZiBhcyB0aG91Z2ggRmlvbmEgY291bGQgc2VlIGhpbSBhcyBoZSBnYXplcyBzaGVlcGlzaGx5CmF0IGhlciBpbWFnZSBpbiB0aGUgbWlycm9yLgoKTU9STklORwoKRmlvbmEgd2Fsa3Mgb3V0IG9mIHRoZSBjYXZlLiBTaGUgZ2xhbmNlcyBhdCBTaHJlayBhbmQgRG9ua2V5CndobyBhcmUgc3RpbGwgc2xlZXBpbmcuIFNoZSB3YW5kZXJzIG9mZiBpbnRvIHRoZSB3b29kcyBhbmQgY29tZXMKYWNyb3NzIGEgYmx1ZSBiaXJkLiBTaGUgYmVnaW5zIHRvIHNpbmcuIFRoZSBiaXJkIHNpbmdzIGFsb25nCndpdGggaGVyLiBTaGUgaGl0cyBoaWdoZXIgYW5kIGhpZ2hlciBub3RlcyBhbmQgdGhlIGJpcmQgc3RydWdnbGVzCnRvIGtlZXAgdXAgd2l0aCBoZXIuIFN1ZGRlbmx5IHRoZSBwcmVzc3VyZSBvZiB0aGUgbm90ZSBpcyB0b28KYmlnIGFuZCB0aGUgYmlyZCBleHBsb2Rlcy4gRmlvbmEgbG9va3MgYSBsaXR0bGUgc2hlZXBpc2gsIGJ1dApzaGUgZXllcyB0aGUgZWdncyB0aGF0IHRoZSBiaXJkIGxlZnQgYmVoaW5kLiBUaW1lIGxhcHNlLCBGaW9uYQppcyBub3cgY29va2luZyB0aGUgZWdncyBmb3IgYnJlYWtmYXN0LiBTaHJlayBhbmQgRG9ua2V5IGFyZSBzdGlsbApzbGVlcGluZy4gU2hyZWsgd2FrZXMgdXAgYW5kIGxvb2tzIGF0IEZpb25hLiBEb25rZXkncyB0YWxraW5nCmluIGhpcyBzbGVlcC4KCkRPTktFWQoocXVpZXRseSkgTW1tLCB5ZWFoLCB5b3Uga25vdyBJIGxpa2UKaXQgbGlrZSB0aGF0LiBDb21lIG9uLCBiYWJ5LiBJIHNhaWQKSSBsaWtlIGl0LgoKU0hSRUsKRG9ua2V5LCB3YWtlIHVwLiAoc2hha2VzIGhpbSkKCkRPTktFWQpIdWg/IFdoYXQ/CgpTSFJFSwpXYWtlIHVwLgoKRE9OS0VZCldoYXQ/IChzdHJldGNoZXMgYW5kIHlhd25zKQoKRklPTkEKR29vZCBtb3JuaW5nLiBIbSwgaG93IGRvIHlvdSBsaWtlIHlvdXIKZWdncz8KCkRPTktFWQpPaCwgZ29vZCBtb3JuaW5nLCBQcmluY2VzcyEKCkZpb25hIGdldHMgdXAgYW5kIHNldHMgdGhlIGVnZ3MgZG93biBpbiBmcm9udCBvZiB0aGVtLgoKU0hSRUsKV2hhdCdzIGFsbCB0aGlzIGFib3V0PwoKRklPTkEKWW91IGtub3csIHdlIGtpbmQgb2YgZ290IG9mZiB0byBhIGJhZApzdGFydCB5ZXN0ZXJkYXkuIEkgd2FudGVkIHRvIG1ha2UgaXQKdXAgdG8geW91LiBJIG1lYW4sIGFmdGVyIGFsbCwgeW91IGRpZApyZXNjdWUgbWUuCgpTSFJFSwpVaCwgdGhhbmtzLgoKRG9ua2V5IHNuaWZmcyB0aGUgZWdncyBhbmQgbGlja3MgaGlzIGxpcHMuCgpGSU9OQQpXZWxsLCBlYXQgdXAuIFdlJ3ZlIGdvdCBhIGJpZyBkYXkgYWhlYWQKb2YgdXMuICh3YWxrcyBvZmYpCgpMQVRFUgoKVGhleSBhcmUgb25jZSBhZ2FpbiBvbiB0aGVpciB3YXkuIFRoZXkgYXJlIHdhbGtpbmcgdGhyb3VnaCB0aGUKZm9yZXN0LiBTaHJlayBiZWxjaGVzLgoKRE9OS0VZClNocmVrIQoKU0hSRUsKV2hhdD8gSXQncyBhIGNvbXBsaW1lbnQuIEJldHRlciBvdXQKdGhhbiBpbiwgSSBhbHdheXMgc2F5LiAobGF1Z2hzKQoKRE9OS0VZCldlbGwsIGl0J3Mgbm8gd2F5IHRvIGJlaGF2ZSBpbiBmcm9udApvZiBhIHByaW5jZXNzLgoKRmlvbmEgYmVsY2hlcwoKRklPTkEKVGhhbmtzLgoKRE9OS0VZClNoZSdzIGFzIG5hc3R5IGFzIHlvdSBhcmUuCgpTSFJFSwooY2h1Y2tsZXMpIFlvdSBrbm93LCB5b3UncmUgbm90IGV4YWN0bHkKd2hhdCBJIGV4cGVjdGVkLgoKRklPTkEKV2VsbCwgbWF5YmUgeW91IHNob3VsZG4ndCBqdWRnZSBwZW9wbGUKYmVmb3JlIHlvdSBnZXQgdG8ga25vdyB0aGVtLgoKU2hlIHNtaWxlcyBhbmQgdGhlbiBjb250aW51ZXMgd2Fsa2luZywgc2luZ2luZyBzb2Z0bHkuIFN1ZGRlbmx5CmZyb20gb3V0IG9mIG5vd2hlcmUsIGEgbWFuIHN3aW5ncyBkb3duIGFuZCBzd29vcHMgRmlvbmEgdXAgaW50bwphIHRyZWUuCgpST0JJTiBIT09ECkxhIGxpYmVydGUhIEhleSEKClNIUkVLClByaW5jZXNzIQoKRklPTkEKKHRvIFJvYmluIEhvb2QpIFdoYXQgYXJlIHlvdSBkb2luZz8KCgpST0JJTiBIT09ECkJlIHN0aWxsLCBtb24gY2hlcmllLCBmb3IgSSBhbSB5b3Ugc2F2aW9yIQpBbmQgSSBhbSByZXNjdWluZyB5b3UgZnJvbSB0aGlzIGdyZWVuLi4uKGtpc3Nlcwp1cCBoZXIgYXJtIHdoaWxlIEZpb25hIHB1bGxzIGJhY2sgaW4KZGlzZ3VzdCkuLi5iZWFzdC4KClNIUkVLCkhleSEgVGhhdCdzIG15IHByaW5jZXNzISBHbyBmaW5kIHlvdQpvd24hCgpST0JJTiBIT09EClBsZWFzZSwgbW9uc3RlciEgQ2FuJ3QgeW91IHNlZSBJJ20gYQpsaXR0bGUgYnVzeSBoZXJlPwoKRklPTkEKKGdldHRpbmcgZmVkIHVwKSBMb29rLCBwYWwsIEkgZG9uJ3QKa25vdyB3aG8geW91IHRoaW5rIHlvdSBhcmUhCgpST0JJTiBIT09ECk9oISBPZiBjb3Vyc2UhIE9oLCBob3cgcnVkZS4gUGxlYXNlCmxldCBtZSBpbnRyb2R1Y2UgbXlzZWxmLiBPaCwgTWVycnkgTWVuLgoobGF1Z2hzKQoKU3VkZGVubHkgYW4gYWNjb3JkaW9uIGJlZ2lucyB0byBwbGF5IGFuZCB0aGUgTWVycnkgbWVuIHBvcCBvdXQKZnJvbSB0aGUgYnVzaGVzLiBUaGV5IGJlZ2luIHRvIHNpbmcgUm9iaW4ncyB0aGVtZSBzb25nLgoKTUVSUlkgTUVOClRhLCBkYWgsIGRhaCwgZGFoLCB3aG9vLgoKUk9CSU4gSE9PRApJIHN0ZWFsIGZyb20gdGhlIHJpY2ggYW5kIGdpdmUgdG8gdGhlCm5lZWR5LgoKTUVSUlkgTUVOCkhlIHRha2VzIGEgd2VlIHBlcmNlbnRhZ2UsCgpST0JJTiBIT09ECkJ1dCBJJ20gbm90IGdyZWVkeS4gSSByZXNjdWUgcHJldHR5CmRhbXNlbHMsIG1hbiwgSSdtIGdvb2QuCgpNRVJSWSBNRU4KV2hhdCBhIGd1eSwgTW9uc2lldXIgSG9vZC4KClJPQklOIEhPT0QKQnJlYWsgaXQgZG93bi4gSSBsaWtlIGFuIGhvbmVzdCBmaWdodAphbmQgYSBzYXVjeSBsaXR0bGUgbWFpZC4uLgoKTUVSUlkgTUVOCldoYXQgaGUncyBiYXNpY2FsbHkgc2F5aW5nIGlzIGhlIGxpa2VzCnRvIGdldC4uLgoKUk9CSU4gSE9PRApQYWlkLiBTby4uLldoZW4gYW4gb2dyZSBpbiB0aGUgYnVzaApncmFicyBhIGxhZHkgYnkgdGhlIHR1c2guIFRoYXQncyBiYWQuCgoKTUVSUlkgTUVOClRoYXQncyBiYWQuCgpST0JJTiBIT09ECldoZW4gYSBiZWF1dHkncyB3aXRoIGEgYmVhc3QgaXQgbWFrZXMKbWUgYXdmdWxseSBtYWQuCgpNRVJSWSBNRU4KSGUncyBtYWQsIGhlJ3MgcmVhbGx5LCByZWFsbHkgbWFkLgoKClJPQklOIEhPT0QKSSdsbCB0YWtlIG15IGJsYWRlIGFuZCByYW0gaXQgdGhyb3VnaAp5b3VyIGhlYXJ0LCBrZWVwIHlvdXIgZXllcyBvbiBtZSwgYm95cwonY2F1c2UgSSdtIGFib3V0IHRvIHN0YXJ0Li4uCgpUaGVyZSBpcyBhIGdydW50IGFzIEZpb25hIHN3aW5ncyBkb3duIGZyb20gdGhlIHRyZWUgbGltYiBhbmQKa25vY2tzIFJvYmluIEhvb2QgdW5jb25zY2lvdXMuCgpGSU9OQQpNYW4sIHRoYXQgd2FzIGFubm95aW5nIQoKU2hyZWsgbG9va3MgYXQgaGVyIGluIGFkbWlyYXRpb24uCgpNRVJSWSBNQU4KT2gsIHlvdSBsaXR0bGUtIC0gKHNob290cyBhbiBhcnJvdyBhdApGaW9uYSBidXQgc2hlIGR1Y2tzIG91dCBvZiB0aGUgd2F5KQoKClRoZSBhcnJvdyBmbGllcyB0b3dhcmQgRG9ua2V5IHdobyBqdW1wcyBpbnRvIFNocmVrJ3MgYXJtcyB0bwpnZXQgb3V0IG9mIHRoZSB3YXkuIFRoZSBhcnJvdyBwcm9jZWVkcyB0byBqdXN0IGJvdW5jZSBvZmYgYSB0cmVlLgoKCkFub3RoZXIgZmlnaHQgc2VxdWVuY2UgYmVnaW5zIGFuZCBGaW9uYSBnaXZlcyBhIGthcmF0ZSB5ZWxsIGFuZAp0aGVuIHByb2NlZWRzIHRvIGJlYXQgdGhlIGNyYXAgb3V0IG9mIHRoZSBNZXJyeSBNZW4uIFRoZXJlIGlzCmEgdmVyeSBpbnRlcmVzdGluZyAnTWF0cml4JyBtb21lbnQgaGVyZSB3aGVuIEZpb25hIHBhdXNlcyBpbgptaWQtYWlyIHRvIGZpeCBoZXIgaGFpci4gRmluYWxseSBhbGwgb2YgdGhlIE1lcnJ5IE1lbiBhcmUgZG93biwKYW5kIEZpb25hIGJlZ2lucyB3YWxraW5nIGF3YXkuCgpGSU9OQQpVaCwgc2hhbGwgd2U/CgpTSFJFSwpIb2xkIHRoZSBwaG9uZS4gKGRyb3BzIERvbmtleSBhbmQgYmVnaW5zCndhbGtpbmcgYWZ0ZXIgRmlvbmEpIE9oISBXaG9hLCB3aG9hLAp3aG9hLiBIb2xkIG9uIG5vdy4gV2hlcmUgZGlkIHRoYXQgY29tZQpmcm9tPwoKRklPTkEKV2hhdD8KClNIUkVLClRoYXQhIEJhY2sgdGhlcmUuIFRoYXQgd2FzIGFtYXppbmchCldoZXJlIGRpZCB5b3UgbGVhcm4gdGhhdD8KCkZJT05BCldlbGwuLi4obGF1Z2hzKSB3aGVuIG9uZSBsaXZlcyBhbG9uZSwKdWgsIG9uZSBoYXMgdG8gbGVhcm4gdGhlc2UgdGhpbmdzIGluCmNhc2UgdGhlcmUncyBhLi4uKGdhc3BzIGFuZCBwb2ludHMpCnRoZXJlJ3MgYW4gYXJyb3cgaW4geW91ciBidXR0IQoKU0hSRUsKV2hhdD8gKHR1cm5zIGFuZCBsb29rcykgT2gsIHdvdWxkIHlvdQpsb29rIGF0IHRoYXQ/IChoZSBnb2VzIHRvIHB1bGwgaXQgb3V0CmJ1dCBmbGluY2hlcyBiZWNhdXNlIGl0J3MgdGVuZGVyKQoKCkZJT05BCk9oLCBuby4gVGhpcyBpcyBhbGwgbXkgZmF1bHQuIEknbSBzbwpzb3JyeS4KCkRPTktFWQood2Fsa2luZyB1cCkgV2h5PyBXaGF0J3Mgd3Jvbmc/CgpGSU9OQQpTaHJlaydzIGh1cnQuCgpET05LRVkKU2hyZWsncyBodXJ0LiBTaHJlaydzIGh1cnQ/IE9oLCBubywKU2hyZWsncyBnb25uYSBkaWUuCgpTSFJFSwpEb25rZXksIEknbSBva2F5LgoKRE9OS0VZCllvdSBjYW4ndCBkbyB0aGlzIHRvIG1lLCBTaHJlay4gSSdtCnRvbyB5b3VuZyBmb3IgeW91IHRvIGRpZS4gS2VlcCB5b3UgbGVncwplbGV2YXRlZC4gVHVybiB5b3VyIGhlYWQgYW5kIGNvdWdoLgpEb2VzIGFueW9uZSBrbm93IHRoZSBIZWltbGljaD8KCkZJT05BCkRvbmtleSEgQ2FsbSBkb3duLiBJZiB5b3Ugd2FudCB0byBoZWxwClNocmVrLCBydW4gaW50byB0aGUgd29vZHMgYW5kIGZpbmQgbWUKYSBibHVlIGZsb3dlciB3aXRoIHJlZCB0aG9ybnMuCgpET05LRVkKQmx1ZSBmbG93ZXIsIHJlZCB0aG9ybnMuIE9rYXksIEknbSBvbgppdC4gQmx1ZSBmbG93ZXIsIHJlZCB0aG9ybnMuIERvbid0IGRpZQpTaHJlay4gSWYgeW91IHNlZSBhIGxvbmcgdHVubmVsLCBzdGF5CmF3YXkgZnJvbSB0aGUgbGlnaHQhCgpTSFJFSyAmIEZJT05BCkRvbmtleSEKCkRPTktFWQpPaCwgeWVhaC4gUmlnaHQuIEJsdWUgZmxvd2VyLCByZWQgdGhvcm5zLgoocnVucyBvZmYpCgpTSFJFSwpXaGF0IGFyZSB0aGUgZmxvd2VycyBmb3I/CgpGSU9OQQoobGlrZSBpdCdzIG9idmlvdXMpIEZvciBnZXR0aW5nIHJpZApvZiBEb25rZXkuCgpTSFJFSwpBaC4KCkZJT05BCk5vdyB5b3UgaG9sZCBzdGlsbCwgYW5kIEknbGwgeWFuayB0aGlzCnRoaW5nIG91dC4gKGdpdmVzIHRoZSBhcnJvdyBhIGxpdHRsZQpwdWxsKQoKU0hSRUsKKGp1bXBzIGF3YXkpIE93ISBIZXkhIEVhc3kgd2l0aCB0aGUKeWFua2luJy4KCkFzIHRoZXkgY29udGludWUgdG8gdGFsayBGaW9uYSBrZWVwcyBnb2luZyBhZnRlciB0aGUgYXJyb3cgYW5kClNocmVrIGtlZXBzIGRvZGdpbmcgaGVyIGhhbmRzLgoKRklPTkEKSSdtIHNvcnJ5LCBidXQgaXQgaGFzIHRvIGNvbWUgb3V0LgoKClNIUkVLCk5vLCBpdCdzIHRlbmRlci4KCkZJT05BCk5vdywgaG9sZCBvbi4KClNIUkVLCldoYXQgeW91J3JlIGRvaW5nIGlzIHRoZSBvcHBvc2l0ZSBvZgpoZWxwLgoKRklPTkEKRG9uJ3QgbW92ZS4KClNIUkVLCkxvb2ssIHRpbWUgb3V0LgoKRklPTkEKV291bGQgeW91Li4uKGdydW50cyBhcyBTaHJlayBwdXRzIGhpcwpoYW5kIG92ZXIgaGVyIGZhY2UgdG8gc3RvcCBoZXIgZnJvbQpnZXR0aW5nIGF0IHRoZSBhcnJvdykgT2theS4gV2hhdCBkbwp5b3UgcHJvcG9zZSB3ZSBkbz8KCkVMU0VXSEVSRQoKRG9ua2V5IGlzIHN0aWxsIGxvb2tpbmcgZm9yIHRoZSBzcGVjaWFsIGZsb3dlci4KCkRPTktFWQpCbHVlIGZsb3dlciwgcmVkIHRob3Jucy4gQmx1ZSBmbG93ZXIsCnJlZCB0aG9ybnMuIEJsdWUgZmxvd2VyLCByZWQgdGhvcm5zLgpUaGlzIHdvdWxkIGJlIHNvIG11Y2ggZWFzaWVyIGlmIEkgd2Fzbid0CmNvbG9yLWJsaW5kISBCbHVlIGZsb3dlciwgcmVkIHRob3Jucy4KCgpTSFJFSwoob3MpIE93IQoKRE9OS0VZCkhvbGQgb24sIFNocmVrISBJJ20gY29taW4nISAocmlwcyBhCmZsb3dlciBvZmYgYSBuZWFyYnkgYnVzaCB0aGF0IGp1c3QgaGFwcGVucwp0byBiZSBhIGJsdWUgZmxvd2VyIHdpdGggcmVkIHRob3JucykKCgpUSEUgRk9SRVNUIFBBVEgKClNIUkVLCk93ISBOb3QgZ29vZC4KCkZJT05BCk9rYXkuIE9rYXkuIEkgY2FuIG5lYXJseSBzZWUgdGhlIGhlYWQuCihTaHJlayBncnVudHMgYXMgc2hlIHB1bGxzKSBJdCdzIGp1c3QKYWJvdXQuLi4KClNIUkVLCk93ISBPaGghIChoZSBqZXJrcyBhbmQgbWFuYWdlcyB0byBmYWxsCm92ZXIgd2l0aCBGaW9uYSBvbiB0b3Agb2YgaGltKQoKRE9OS0VZCkFoZW0uCgpTSFJFSwoodGhyb3dpbmcgRmlvbmEgb2ZmIG9mIGhpbSkgTm90aGluZwpoYXBwZW5kLiBXZSB3ZXJlIGp1c3QsIHVoIC0gLQoKRE9OS0VZCkxvb2ssIGlmIHlvdSB3YW50ZWQgdG8gYmUgYWxvbmUsIGFsbAp5b3UgaGFkIHRvIGRvIHdhcyBhc2suIE9rYXk/CgpTSFJFSwpPaCwgY29tZSBvbiEgVGhhdCdzIHRoZSBsYXN0IHRoaW5nIG9uCm15IG1pbmQuIFRoZSBwcmluY2VzcyBoZXJlIHdhcyBqdXN0LQotIChGaW9uYSBwdWxscyB0aGUgYXJyb3cgb3V0KSBVZ2ghIChoZQp0dXJucyB0byBsb29rIGF0IEZpb25hIHdobyBob2xkcyB1cAp0aGUgYXJyb3cgd2l0aCBhIHNtaWxlKSBPdyEKCkRPTktFWQpIZXksIHdoYXQncyB0aGF0PyAobmVydm91cyBjaHVja2xlKQpUaGF0J3MuLi5pcyB0aGF0IGJsb29kPwoKRG9ua2V5IGZhaW50cy4gU2hyZWsgd2Fsa3Mgb3ZlciBhbmQgcGlja3MgaGltIHVwIGFzIHRoZXkgY29udGludWUKb24gdGhlaXIgd2F5LgoKVGhlcmUgaXMgYSBtb250YWdlIG9mIHNjZW5lcyBhcyB0aGUgZ3JvdXAgaGVhZHMgYmFjayB0byBEdUxvYy4KU2hyZWsgY3Jhd2xpbmcgdXAgdG8gdGhlIHRvcCBvZiBhIHRyZWUgdG8gbWFrZSBpdCBmYWxsIG92ZXIgYQpzbWFsbCBicm9vayBzbyB0aGF0IEZpb25hIHdvbid0IGdldCB3ZXQuIFNocmVrIHRoZW4gZ2V0cyB1cCBhcwpEb25rZXkgaXMganVzdCBhYm91dCB0byBjcm9zcyB0aGUgdHJlZSBhbmQgdGhlIHRyZWUgc3dpbmdzIGJhY2sKaW50byBpdCdzIHVwcmlnaHQgcG9zaXRpb24gYW5kIERvbmtleSBmbGllcyBvZmYuIFNocmVrIHN3YXR0aW5nCmFuZCBhIGJ1bmNoIG9mIGZsaWVzIGFuZCBtb3NxdWl0b2VzLiBGaW9uYSBncmFicyBhIG5lYXJieSBzcGlkZXJ3ZWIKdGhhdCdzIG9uIGEgdHJlZSBicmFuY2ggYW5kIHJ1bnMgdGhyb3VnaCB0aGUgZmllbGQgc3dpbmdpbmcgaXQKYXJvdW5kIHRvIGNhdGNoIHRoZSBidWdzLiBTaGUgdGhlbiBoYW5kcyBpdCB0byBTaHJlayB3aG8gYmVnaW5zCmVhdGluZyBsaWtlIGl0J3MgYSB0cmVhdC4gQXMgaGUgd2Fsa3Mgb2ZmIHNoZSBsaWNrcyBoZXIgZmluZ2Vycy4KU2hyZWsgY2F0Y2hpbmcgYSB0b2FkIGFuZCBibG93aW5nIGl0IHVwIGxpa2UgYSBiYWxsb29uIGFuZCBwcmVzZW50aW5nCml0IHRvIEZpb25hLiBGaW9uYSBjYXRjaGluZyBhIHNuYWtlLCBibG93aW5nIGl0IHVwLCBmYXNoaW9uaW5nCml0IGludG8gYSBiYWxsb29uIGFuaW1hbCBhbmQgcHJlc2VudGluZyBpdCB0byBTaHJlay4gVGhlIGdyb3VwCmFycml2aW5nIGF0IGEgd2luZG1pbGwgdGhhdCBpcyBuZWFyIER1TG9jLgoKV0lORE1JTEwKClNIUkVLClRoZXJlIGl0IGlzLCBQcmluY2Vzcy4gWW91ciBmdXR1cmUgYXdhaXRzCnlvdS4KCkZJT05BClRoYXQncyBEdUxvYz8KCkRPTktFWQpZZWFoLCBJIGtub3cuIFlvdSBrbm93LCBTaHJlayB0aGlua3MKTG9yZCBGYXJxdWFhZCdzIGNvbXBlbnNhdGluZyBmb3Igc29tZXRoaW5nLAp3aGljaCBJIHRoaW5rIG1lYW5zIGhlIGhhcyBhIHJlYWxseS4uLihTaHJlawpzdGVwcyBvbiBoaXMgaG9vZikgT3chCgpTSFJFSwpVbSwgSSwgdWgtIC0gSSBndWVzcyB3ZSBiZXR0ZXIgbW92ZQpvbi4KCkZJT05BClN1cmUuIEJ1dCwgU2hyZWs/IEknbSAtIC0gSSdtIHdvcnJpZWQKYWJvdXQgRG9ua2V5LgoKU0hSRUsKV2hhdD8KCkZJT05BCkkgbWVhbiwgbG9vayBhdCBoaW0uIEhlIGRvZXNuJ3QgbG9vawpzbyBnb29kLgoKRE9OS0VZCldoYXQgYXJlIHlvdSB0YWxraW5nIGFib3V0PyBJJ20gZmluZS4KCgpGSU9OQQooa25lZWxzIHRvIGxvb2sgaGltIGluIHRoZSBleWVzKSBUaGF0J3MKd2hhdCB0aGV5IGFsd2F5cyBzYXksIGFuZCB0aGVuIG5leHQKdGhpbmcgeW91IGtub3csIHlvdSdyZSBvbiB5b3VyIGJhY2suCihwYXVzZSkgRGVhZC4KClNIUkVLCllvdSBrbm93LCBzaGUncyByaWdodC4gWW91IGxvb2sgYXdmdWwuCkRvIHlvdSB3YW50IHRvIHNpdCBkb3duPwoKRklPTkEKVWgsIHlvdSBrbm93LCBJJ2xsIG1ha2UgeW91IHNvbWUgdGVhLgoKCkRPTktFWQpJIGRpZG4ndCB3YW50IHRvIHNheSBub3RoaW4nLCBidXQgSQpnb3QgdGhpcyB0d2luZ2UgaW4gbXkgbmVjaywgYW5kIHdoZW4KSSB0dXJuIG15IGhlYWQgbGlrZSB0aGlzLCBsb29rLCAodHVybnMKaGlzIG5lY2sgaW4gYSB2ZXJ5IHNoYXJwIHdheSB1bnRpbCBoaXMKaGVhZCBpcyBjb21wbGV0ZWx5IHNpZGV3YXlzKSBPdyEgU2VlPwoKClNIUkVLCldobydzIGh1bmdyeT8gSSdsbCBmaW5kIHVzIHNvbWUgZGlubmVyLgoKCkZJT05BCkknbGwgZ2V0IHRoZSBmaXJld29vZC4KCkRPTktFWQpIZXksIHdoZXJlIHlvdSBnb2luJz8gT2gsIG1hbiwgSSBjYW4ndApmZWVsIG15IHRvZXMhIChsb29rcyBkb3duIGFuZCB5ZWxwcykKSSBkb24ndCBoYXZlIGFueSB0b2VzISBJIHRoaW5rIEkgbmVlZAphIGh1Zy4KClNVTlNFVAoKU2hyZWsgaGFzIGJ1aWx0IGEgZmlyZSBhbmQgaXMgY29va2luZyB0aGUgcmVzdCBvZiBkaW5uZXIgd2hpbGUKRmlvbmEgZWF0cy4KCkZJT05BCk1tbS4gVGhpcyBpcyBnb29kLiBUaGlzIGlzIHJlYWxseSBnb29kLgpXaGF0IGlzIHRoaXM/CgpTSFJFSwpVaCwgd2VlZCByYXQuIFJvdGlzc2VyaWUgc3R5bGUuCgpGSU9OQQpObyBraWRkaW5nLiBXZWxsLCB0aGlzIGlzIGRlbGljaW91cy4KCgpTSFJFSwpXZWxsLCB0aGV5J3JlIGFsc28gZ3JlYXQgaW4gc3Rld3MuIE5vdywKSSBkb24ndCBtZWFuIHRvIGJyYWcsIGJ1dCBJIG1ha2UgYSBtZWFuCndlZWQgcmF0IHN0ZXcuIChjaHVja2xlcykKCkZpb25hIGxvb2tzIGF0IER1TG9jIGFuZCBzaWdocy4KCkZJT05BCkkgZ3Vlc3MgSSdsbCBiZSBkaW5pbmcgYSBsaXR0bGUgZGlmZmVyZW50bHkKdG9tb3Jyb3cgbmlnaHQuCgpTSFJFSwpNYXliZSB5b3UgY2FuIGNvbWUgdmlzaXQgbWUgaW4gdGhlIHN3YW1wCnNvbWV0aW1lLiBJJ2xsIGNvb2sgYWxsIGtpbmQgb2Ygc3R1ZmYKZm9yIHlvdS4gU3dhbXAgdG9hZCBzb3VwLCBmaXNoIGV5ZSB0YXJ0YXJlCi0gLSB5b3UgbmFtZSBpdC4KCkZJT05BCihzbWlsZXMpIEknZCBsaWtlIHRoYXQuCgpUaGV5IHNtaWxlcyBhdCBlYWNoIG90aGVyLgoKU0hSRUsKVW0sIFByaW5jZXNzPwoKRklPTkEKWWVzLCBTaHJlaz8KClNIUkVLCkksIHVtLCBJIHdhcyB3b25kZXJpbmcuLi5hcmUgeW91Li4uKHNpZ2hzKQpBcmUgeW91IGdvbm5hIGVhdCB0aGF0PwoKRE9OS0VZCihjaHVja2xlcykgTWFuLCBpc24ndCB0aGlzIHJvbWFudGljPwpKdXN0IGxvb2sgYXQgdGhhdCBzdW5zZXQuCgpGSU9OQQooanVtcHMgdXApIFN1bnNldD8gT2gsIG5vISBJIG1lYW4sIGl0J3MKbGF0ZS4gSS1JdCdzIHZlcnkgbGF0ZS4KClNIUkVLCldoYXQ/CgpET05LRVkKV2FpdCBhIG1pbnV0ZS4gSSBzZWUgd2hhdCdzIGdvaW4nIG9uCmhlcmUuIFlvdSdyZSBhZnJhaWQgb2YgdGhlIGRhcmssIGFyZW4ndAp5b3U/CgpGSU9OQQpZZXMhIFllcywgdGhhdCdzIGl0LiBJJ20gdGVycmlmaWVkLgpZb3Uga25vdywgSSdkIGJldHRlciBnbyBpbnNpZGUuCgpET05LRVkKRG9uJ3QgZmVlbCBiYWQsIFByaW5jZXNzLiBJIHVzZWQgdG8KYmUgYWZyYWlkIG9mIHRoZSBkYXJrLCB0b28sIHVudGlsIC0KLSBIZXksIG5vLCB3YWl0LiBJJ20gc3RpbGwgYWZyYWlkIG9mCnRoZSBkYXJrLgoKU2hyZWsgc2lnaHMKCkZJT05BCkdvb2QgbmlnaHQuCgpTSFJFSwpHb29kIG5pZ2h0LgoKRmlvbmEgZ29lcyBpbnNpZGUgdGhlIHdpbmRtaWxsIGFuZCBjbG9zZXMgdGhlIGRvb3IuIERvbmtleSBsb29rcwphdCBTaHJlayB3aXRoIGEgbmV3IGV5ZS4KCkRPTktFWQpPaGghIE5vdyBJIHJlYWxseSBzZWUgd2hhdCdzIGdvaW4nIG9uCmhlcmUuCgpTSFJFSwpPaCwgd2hhdCBhcmUgeW91IHRhbGtpbicgYWJvdXQ/CgpET05LRVkKSSBkb24ndCBldmVuIHdhbm5hIGhlYXIgaXQuIExvb2ssIEknbQphbiBhbmltYWwsIGFuZCBJIGdvdCBpbnN0aW5jdHMuIEFuZApJIGtub3cgeW91IHR3byB3ZXJlIGRpZ2dpbicgb24gZWFjaApvdGhlci4gSSBjb3VsZCBmZWVsIGl0LgoKU0hSRUsKWW91J3JlIGNyYXp5LiBJJ20ganVzdCBicmluZ2luZyBoZXIKYmFjayB0byBGYXJxdWFhZC4KCkRPTktFWQpPaCwgY29tZSBvbiwgU2hyZWsuIFdha2UgdXAgYW5kIHNtZWxsCnRoZSBwaGVyb21vbmVzLiBKdXN0IGdvIG9uIGluIGFuZCB0ZWxsCmhlciBob3cgeW91IGZlZWwuCgpTSFJFSwpJLSAtIFRoZXJlJ3Mgbm90aGluZyB0byB0ZWxsLiBCZXNpZGVzLApldmVuIGlmIEkgZGlkIHRlbGwgaGVyIHRoYXQsIHdlbGwsIHlvdQprbm93IC0gLSBhbmQgSSdtIG5vdCBzYXlpbicgSSBkbyAnY2F1c2UKSSBkb24ndCAtIC0gc2hlJ3MgYSBwcmluY2VzcywgYW5kIEknbQotIC0KCkRPTktFWQpBbiBvZ3JlPwoKU0hSRUsKWWVhaC4gQW4gb2dyZS4KCkRPTktFWQpIZXksIHdoZXJlIHlvdSBnb2luJz8KClNIUkVLClRvIGdldC4uLiBtb3ZlIGZpcmV3b29kLiAoc2lnaHMpCgpEb25rZXkgbG9va3Mgb3ZlciBhdCB0aGUgbGFyZ2UgcGlsZSBvZiBmaXJld29vZCB0aGVyZSBhbHJlYWR5CmlzLgoKVElNRSBMQVBTRQoKRG9ua2V5IG9wZW5zIHRoZSBkb29yIHRvIHRoZSBXaW5kbWlsbCBhbmQgd2Fsa3MgaW4uIEZpb25hIGlzCm5vd2hlcmUgdG8gYmUgc2Vlbi4KCkRPTktFWQpQcmluY2Vzcz8gUHJpbmNlc3MgRmlvbmE/IFByaW5jZXNzLAp3aGVyZSBhcmUgeW91PyBQcmluY2Vzcz8KCkZpb25hIGxvb2tzIGF0IERvbmtleSBmcm9tIHRoZSBzaGFkb3dzLCBidXQgd2UgY2FuJ3Qgc2VlIGhlci4KCgpET05LRVkKSXQncyB2ZXJ5IHNwb29reSBpbiBoZXJlLiBJIGFpbid0IHBsYXlpbmcKbm8gZ2FtZXMuCgpTdWRkZW5seSBGaW9uYSBmYWxscyBmcm9tIHRoZSByYWlsaW5nLiBTaGUgZ2V0cyB1cCBvbmx5IHNoZSBkb2Vzbid0Cmxvb2sgbGlrZSBoZXJzZWxmLiBTaGUgbG9va3MgbGlrZSBhbiBvZ3JlIGFuZCBEb25rZXkgc3RhcnRzIGZyZWFraW5nCm91dC4KCkRPTktFWQpBYWghCgpGSU9OQQpPaCwgbm8hCgpET05LRVkKTm8sIGhlbHAhCgpGSU9OQQpTaGghCgpET05LRVkKU2hyZWshIFNocmVrISBTaHJlayEKCkZJT05BCk5vLCBpdCdzIG9rYXkuIEl0J3Mgb2theS4KCkRPTktFWQpXaGF0IGRpZCB5b3UgZG8gd2l0aCB0aGUgcHJpbmNlc3M/CgoKRklPTkEKRG9ua2V5LCBJJ20gdGhlIHByaW5jZXNzLgoKRE9OS0VZCkFhaCEKCkZJT05BCkl0J3MgbWUsIGluIHRoaXMgYm9keS4KCkRPTktFWQpPaCwgbXkgR29kISBZb3UgYXRlIHRoZSBwcmluY2Vzcy4gKHRvCmhlciBzdG9tYWNoKSBDYW4geW91IGhlYXIgbWU/CgpGSU9OQQpEb25rZXkhCgpET05LRVkKKHN0aWxsIGFpbWVkIGF0IGhlciBzdG9tYWNoKSBMaXN0ZW4sCmtlZXAgYnJlYXRoaW5nISBJJ2xsIGdldCB5b3Ugb3V0IG9mCnRoZXJlIQoKRklPTkEKTm8hCgpET05LRVkKU2hyZWshIFNocmVrISBTaHJlayEKCkZJT05BClNoaC4KCkRPTktFWQpTaHJlayEKCkZJT05BClRoaXMgaXMgbWUuCgpEb25rZXkgbG9va3MgaW50byBoZXIgZXllcyBhcyBzaGUgcGV0cyBoaXMgbXV6emxlLCBhbmQgaGUgcXVpZXRzCmRvd24uCgpET05LRVkKUHJpbmNlc3M/IFdoYXQgaGFwcGVuZWQgdG8geW91PyBZb3UncmUsCnVoLCB1aCwgdWgsIGRpZmZlcmVudC4KCkZJT05BCkknbSB1Z2x5LCBva2F5PwoKRE9OS0VZCldlbGwsIHllYWghIFdhcyBpdCBzb21ldGhpbmcgeW91IGF0ZT8KJ0NhdXNlIEkgdG9sZCBTaHJlayB0aG9zZSByYXRzIHdhcyBhCmJhZCBpZGVhLiBZb3UgYXJlIHdoYXQgeW91IGVhdCwgSSBzYWlkLgpOb3cgLSAtCgpGSU9OQQpOby4gSSAtIC0gSSd2ZSBiZWVuIHRoaXMgd2F5IGFzIGxvbmcKYXMgSSBjYW4gcmVtZW1iZXIuCgpET05LRVkKV2hhdCBkbyB5b3UgbWVhbj8gTG9vaywgSSBhaW4ndCBuZXZlcgpzZWVuIHlvdSBsaWtlIHRoaXMgYmVmb3JlLgoKRklPTkEKSXQgb25seSBoYXBwZW5zIHdoZW4gc3VuIGdvZXMgZG93bi4KIkJ5IG5pZ2h0IG9uZSB3YXksIGJ5IGRheSBhbm90aGVyLiBUaGlzCnNoYWxsIGJlIHRoZSBub3JtLi4uIHVudGlsIHlvdSBmaW5kCnRydWUgbG92ZSdzIGZpcnN0IGtpc3MuLi4gYW5kIHRoZW4gdGFrZQpsb3ZlJ3MgdHJ1ZSBmb3JtLiIKCkRPTktFWQpBaCwgdGhhdCdzIGJlYXV0aWZ1bC4gSSBkaWRuJ3Qga25vdwp5b3Ugd3JvdGUgcG9ldHJ5LgoKRklPTkEKSXQncyBhIHNwZWxsLiAoc2lnaCkgV2hlbiBJIHdhcyBhIGxpdHRsZQpnaXJsLCBhIHdpdGNoIGNhc3QgYSBzcGVsbCBvbiBtZS4gRXZlcnkKbmlnaHQgSSBiZWNvbWUgdGhpcy4gVGhpcyBob3JyaWJsZSwKdWdseSBiZWFzdCEgSSB3YXMgcGxhY2VkIGluIGEgdG93ZXIKdG8gYXdhaXQgdGhlIGRheSBteSB0cnVlIGxvdmUgd291bGQKcmVzY3VlIG1lLiBUaGF0J3Mgd2h5IEkgaGF2ZSB0byBtYXJyeQpMb3JkIEZhcnF1YWFkIHRvbW9ycm93IGJlZm9yZSB0aGUgc3VuCnNldHMgYW5kIGhlIHNlZXMgbWUgbGlrZSB0aGlzLiAoYmVnaW5zCnRvIGNyeSkKCkRPTktFWQpBbGwgcmlnaHQsIGFsbCByaWdodC4gQ2FsbSBkb3duLiBMb29rLAppdCdzIG5vdCB0aGF0IGJhZC4gWW91J3JlIG5vdCB0aGF0IHVnbHkuCldlbGwsIEkgYWluJ3QgZ29ubmEgbGllLiBZb3UgYXJlIHVnbHkuCkJ1dCB5b3Ugb25seSBsb29rIGxpa2UgdGhpcyBhdCBuaWdodC4KU2hyZWsncyB1Z2x5IDI0LTcuCgpGSU9OQQpCdXQgRG9ua2V5LCBJJ20gYSBwcmluY2VzcywgYW5kIHRoaXMKaXMgbm90IGhvdyBhIHByaW5jZXNzIGlzIG1lYW50IHRvIGxvb2suCgoKRE9OS0VZClByaW5jZXNzLCBob3cgJ2JvdXQgaWYgeW91IGRvbid0IG1hcnJ5CkZhcnF1YWFkPwoKRklPTkEKSSBoYXZlIHRvLiBPbmx5IG15IHRydWUgbG92ZSdzIGtpc3MKY2FuIGJyZWFrIHRoZSBzcGVsbC4KCkRPTktFWQpCdXQsIHlvdSBrbm93LCB1bSwgeW91J3JlIGtpbmQgb2YgYW4Kb3JnZSwgYW5kIFNocmVrIC0gLSB3ZWxsLCB5b3UgZ290IGEKbG90IGluIGNvbW1vbi4KCkZJT05BClNocmVrPwoKT1VUU0lERQoKU2hyZWsgaXMgd2Fsa2luZyB0b3dhcmRzIHRoZSB3aW5kbWlsbCB3aXRoIGEgc3VuZmxvd2VyIGluIGhpcwpoYW5kLgoKU0hSRUsKKHRvIGhpbXNlbGYpIFByaW5jZXNzLCBJIC0gLSBVaCwgaG93J3MKaXQgZ29pbmcsIGZpcnN0IG9mIGFsbD8gR29vZD8gVW0sIGdvb2QKZm9yIG1lIHRvby4gSSdtIG9rYXkuIEkgc2F3IHRoaXMgZmxvd2VyCmFuZCB0aG91Z2h0IG9mIHlvdSBiZWNhdXNlIGl0J3MgcHJldHR5CmFuZCAtIC0gd2VsbCwgSSBkb24ndCByZWFsbHkgbGlrZSBpdCwKYnV0IEkgdGhvdWdodCB5b3UgbWlnaHQgbGlrZSBpdCAnY2F1c2UKeW91J3JlIHByZXR0eS4gQnV0IEkgbGlrZSB5b3UgYW55d2F5LgpJJ2QgLSAtIHVoLCB1aC4uLihzaWdocykgSSdtIGluIHRyb3VibGUuCk9rYXksIGhlcmUgd2UgZ28uCgpIZSB3YWxrcyB1cCB0byB0aGUgZG9vciBhbmQgcGF1c2VzIG91dHNpZGUgd2hlbiBoZSBoZWFycyBEb25rZXkKYW5kIEZpb25hIHRhbGtpbmcuCgpGSU9OQQoob3MpIEkgY2FuJ3QganVzdCBtYXJyeSB3aG9ldmVyIEkgd2FudC4KVGFrZSBhIGdvb2QgbG9vayBhdCBtZSwgRG9ua2V5LiBJIG1lYW4sCnJlYWxseSwgd2hvIGNhbiBldmVyIGxvdmUgYSBiZWFzdCBzbwpoaWRlb3VzIGFuZCB1Z2x5PyAiUHJpbmNlc3MiIGFuZCAidWdseSIKZG9uJ3QgZ28gdG9nZXRoZXIuIFRoYXQncyB3aHkgSSBjYW4ndApzdGF5IGhlcmUgd2l0aCBTaHJlay4KClNocmVrIHN0ZXBzIGJhY2sgaW4gc2hvY2suCgpGSU9OQQoob3MpIE15IG9ubHkgY2hhbmNlIHRvIGxpdmUgaGFwcGlseQpldmVyIGFmdGVyIGlzIHRvIG1hcnJ5IG15IHRydWUgbG92ZS4KCgpTaHJlayBoZWF2ZXMgYSBkZWVwIHNpZ2guIEhlIHRocm93cyB0aGUgZmxvd2VyIGRvd24gYW5kIHdhbGtzCmF3YXkuCgpJTlNJREUKCkZJT05BCkRvbid0IHlvdSBzZWUsIERvbmtleT8gVGhhdCdzIGp1c3QgaG93Cml0IGhhcyB0byBiZS4gSXQncyB0aGUgb25seSB3YXkgdG8gYnJlYWsKdGhlIHNwZWxsLgoKRE9OS0VZCllvdSBhdCBsZWFzdCBnb3R0YSB0ZWxsIFNocmVrIHRoZSB0cnV0aC4KCgpGSU9OQQpObyEgWW91IGNhbid0IGJyZWF0aGUgYSB3b3JkLiBObyBvbmUKbXVzdCBldmVyIGtub3cuCgpET05LRVkKV2hhdCdzIHRoZSBwb2ludCBvZiBiZWluZyBhYmxlIHRvIHRhbGsKaWYgeW91IGdvdHRhIGtlZXAgc2VjcmV0cz8KCkZJT05BClByb21pc2UgeW91IHdvbid0IHRlbGwuIFByb21pc2UhCgpET05LRVkKQWxsIHJpZ2h0LCBhbGwgcmlnaHQuIEkgd29uJ3QgdGVsbCBoaW0uCkJ1dCB5b3Ugc2hvdWxkLiAoZ29lcyBvdXRzaWRlKSBJIGp1c3QKa25vdyBiZWZvcmUgdGhpcyBpcyBvdmVyLCBJJ20gZ29ubmEKbmVlZCBhIHdob2xlIGxvdCBvZiBzZXJpb3VzIHRoZXJhcHkuCkxvb2sgYXQgbXkgZXllIHR3aXRjaGluJy4KCkZpb25hIGNvbWVzIG91dCB0aGUgZG9vciBhbmQgd2F0Y2hlcyBoaW0gd2FsayBhd2F5LiBTaGUgbG9va3MKZG93biBhbmQgc3BvdHMgdGhlIHN1bmZsb3dlci4gU2hlIHBpY2tzIGl0IHVwIGJlZm9yZSBnb2luZyBiYWNrCmluc2lkZSB0aGUgd2luZG1pbGwuCgpNT1JOSU5HCgpEb25rZXkgaXMgYXNsZWVwLiBTaHJlayBpcyBub3doZXJlIHRvIGJlIHNlZW4uIEZpb25hIGlzIHN0aWxsCmF3YWtlLiBTaGUgaXMgcGx1Y2tpbmcgcGV0YWxzIGZyb20gdGhlIHN1bmZsb3dlci4KCkZJT05BCkkgdGVsbCBoaW0sIEkgdGVsbCBoaW0gbm90LiBJIHRlbGwgaGltLApJIHRlbGwgaGltIG5vdC4gSSB0ZWxsIGhpbS4gKHNoZSBxdWlja2x5CnJ1bnMgdG8gdGhlIGRvb3IgYW5kIGdvZXMgb3V0c2lkZSkgU2hyZWshClNocmVrLCB0aGVyZSdzIHNvbWV0aGluZyBJIHdhbnQuLi4oc2hlCmxvb2tzIGFuZCBzZWVzIHRoZSByaXNpbmcgc3VuLCBhbmQgYXMKdGhlIHN1biBjcmVzdHMgdGhlIHNreSBzaGUgdHVybnMgYmFjawppbnRvIGEgaHVtYW4uKQoKSnVzdCBhcyBzaGUgbG9va3MgYmFjayBhdCB0aGUgc3VuIHNoZSBzZWVzIFNocmVrIHN0b21waW5nIHRvd2FyZHMKaGVyLgoKRklPTkEKU2hyZWsuIEFyZSB5b3UgYWxsIHJpZ2h0PwoKU0hSRUsKUGVyZmVjdCEgTmV2ZXIgYmVlbiBiZXR0ZXIuCgpGSU9OQQpJIC0gLSBJIGRvbid0IC0gLSBUaGVyZSdzIHNvbWV0aGluZwpJIGhhdmUgdG8gdGVsbCB5b3UuCgpTSFJFSwpZb3UgZG9uJ3QgaGF2ZSB0byB0ZWxsIG1lIGFueXRoaW5nLApQcmluY2Vzcy4gSSBoZWFyZCBlbm91Z2ggbGFzdCBuaWdodC4KCgpGSU9OQQpZb3UgaGVhcmQgd2hhdCBJIHNhaWQ/CgpTSFJFSwpFdmVyeSB3b3JkLgoKRklPTkEKSSB0aG91Z2h0IHlvdSdkIHVuZGVyc3RhbmQuCgpTSFJFSwpPaCwgSSB1bmRlcnN0YW5kLiBMaWtlIHlvdSBzYWlkLCAiV2hvCmNvdWxkIGxvdmUgYSBoaWRlb3VzLCB1Z2x5IGJlYXN0PyIKCgpGSU9OQQpCdXQgSSB0aG91Z2h0IHRoYXQgd291bGRuJ3QgbWF0dGVyIHRvCnlvdS4KClNIUkVLClllYWg/IFdlbGwsIGl0IGRvZXMuIChGaW9uYSBsb29rcyBhdApoaW0gaW4gc2hvY2suIEhlIGxvb2tzIHBhc3QgaGVyIGFuZApzcG90cyBhIGdyb3VwIGFwcHJvYWNoaW5nLikgQWgsIHJpZ2h0Cm9uIHRpbWUuIFByaW5jZXNzLCBJJ3ZlIGJyb3VnaHQgeW91CmEgbGl0dGxlIHNvbWV0aGluZy4KCkZhcnF1YWFkIGhhcyBhcnJpdmVkIHdpdGggYSBncm91cCBvZiBoaXMgbWVuLiBIZSBsb29rcyB2ZXJ5IHJlZ2FsCnNpdHRpbmcgdXAgb24gaGlzIGhvcnNlLiBZb3Ugd291bGQgbmV2ZXIgZ3Vlc3MgdGhhdCBoZSdzIG9ubHkKbGlrZSAzIGZlZXQgdGFsbC4gRG9ua2V5IHdha2VzIHVwIHdpdGggYSB5YXduIGFzIHRoZSBzb2xkaWVycwptYXJjaCBieS4KCkRPTktFWQpXaGF0J2QgSSBtaXNzPyBXaGF0J2QgSSBtaXNzPyAoc3BvdHMKdGhlIHNvbGRpZXJzKSAobXVmZmxlZCkgV2hvIHNhaWQgdGhhdD8KQ291bGRuJ3QgaGF2ZSBiZWVuIHRoZSBkb25rZXkuCgpGQVJRVUFBRApQcmluY2VzcyBGaW9uYS4KClNIUkVLCkFzIHByb21pc2VkLiBOb3cgaGFuZCBpdCBvdmVyLgoKRkFSUVVBQUQKVmVyeSB3ZWxsLCBvZ3JlLiAoaG9sZHMgb3V0IGEgcGllY2UKb2YgcGFwZXIpIFRoZSBkZWVkIHRvIHlvdXIgc3dhbXAsIGNsZWFyZWQKb3V0LCBhcyBhZ3JlZWQuIFRha2UgaXQgYW5kIGdvIGJlZm9yZQpJIGNoYW5nZSBteSBtaW5kLiAoU2hyZWsgdGFrZXMgdGhlIHBhcGVyKQpGb3JnaXZlIG1lLCBQcmluY2VzcywgZm9yIHN0YXJ0bGluZwp5b3UsIGJ1dCB5b3Ugc3RhcnRsZWQgbWUsIGZvciBJIGhhdmUKbmV2ZXIgc2VlbiBzdWNoIGEgcmFkaWFudCBiZWF1dHkgYmVmb3JlLgpJJ20gTG9yZCBGYXJxdWFhZC4KCkZJT05BCkxvcmQgRmFycXVhYWQ/IE9oLCBubywgbm8uIChGYXJxdWFhZApzbmFwcyBoaXMgZmluZ2VycykgRm9yZ2l2ZSBtZSwgbXkgbG9yZCwKZm9yIEkgd2FzIGp1c3Qgc2F5aW5nIGEgc2hvcnQuLi4gKFdhdGNoZXMKYXMgRmFycXVhYWQgaXMgbGlmdGVkIG9mZiBoaXMgaG9yc2UKYW5kIHNldCBkb3duIGluIGZyb250IG9mIGhlci4gSGUgY29tZXMKdG8gaGVyIHdhaXN0LikgZmFyZXdlbGwuCgpGQVJRVUFBRApPaCwgdGhhdCBpcyBzbyBzd2VldC4gWW91IGRvbid0IGhhdmUKdG8gd2FzdGUgZ29vZCBtYW5uZXJzIG9uIHRoZSBvZ3JlLiBJdCdzCm5vdCBsaWtlIGl0IGhhcyBmZWVsaW5ncy4KCkZJT05BCk5vLCB5b3UncmUgcmlnaHQuIEl0IGRvZXNuJ3QuCgpEb25rZXkgd2F0Y2hlcyB0aGlzIGV4Y2hhbmdlIHdpdGggYSBjdXJpb3VzIGxvb2sgb24gaGlzIGZhY2UuCgoKRkFSUVVBQUQKUHJpbmNlc3MgRmlvbmEsIGJlYXV0aWZ1bCwgZmFpciwgZmxhd2xlc3MKRmlvbmEuIEkgYXNrIHlvdXIgaGFuZCBpbiBtYXJyaWFnZS4KV2lsbCB5b3UgYmUgdGhlIHBlcmZlY3QgYnJpZGUgZm9yIHRoZQpwZXJmZWN0IGdyb29tPwoKRklPTkEKTG9yZCBGYXJxdWFhZCwgSSBhY2NlcHQuIE5vdGhpbmcgd291bGQKbWFrZSAtIC0KCkZBUlFVQUFECihpbnRlcnJ1cHRpbmcpIEV4Y2VsbGVudCEgSSdsbCBzdGFydAp0aGUgcGxhbnMsIGZvciB0b21vcnJvdyB3ZSB3ZWQhCgpGSU9OQQpObyEgSSBtZWFuLCB1aCwgd2h5IHdhaXQ/IExldCdzIGdldAptYXJyaWVkIHRvZGF5IGJlZm9yZSB0aGUgc3VuIHNldHMuCgoKRkFSUVVBQUQKT2gsIGFueGlvdXMsIGFyZSB5b3U/IFlvdSdyZSByaWdodC4KVGhlIHNvb25lciwgdGhlIGJldHRlci4gVGhlcmUncyBzbyBtdWNoCnRvIGRvISBUaGVyZSdzIHRoZSBjYXRlcmVyLCB0aGUgY2FrZSwKdGhlIGJhbmQsIHRoZSBndWVzdCBsaXN0LiBDYXB0YWluLCByb3VuZAp1cCBzb21lIGd1ZXN0cyEgKGEgZ3VhcmQgcHV0cyBGaW9uYQpvbiB0aGUgYmFjayBvZiBoaXMgaG9yc2UpCgpGSU9OQQpGYXJlLXRoZWUtd2VsbCwgb2dyZS4KCkZhcnF1YWFkJ3Mgd2hvbGUgcGFydHkgYmVnaW5zIHRvIGhlYWQgYmFjayB0byBEdUxvYy4gRG9ua2V5IHdhdGNoZXMKdGhlbSBnby4KCkRPTktFWQpTaHJlaywgd2hhdCBhcmUgeW91IGRvaW5nPyBZb3UncmUgbGV0dGluZwpoZXIgZ2V0IGF3YXkuCgpTSFJFSwpZZWFoPyBTbyB3aGF0PwoKRE9OS0VZClNocmVrLCB0aGVyZSdzIHNvbWV0aGluZyBhYm91dCBoZXIgeW91CmRvbid0IGtub3cuIExvb2ssIEkgdGFsa2VkIHRvIGhlciBsYXN0Cm5pZ2h0LCBTaGUncyAtIC0KClNIUkVLCkkga25vdyB5b3UgdGFsa2VkIHRvIGhlciBsYXN0IG5pZ2h0LgpZb3UncmUgZ3JlYXQgcGFscywgYXJlbid0IHlhPyBOb3csIGlmCnlvdSB0d28gYXJlIHN1Y2ggZ29vZCBmcmllbmRzLCB3aHkgZG9uJ3QKeW91IGZvbGxvdyBoZXIgaG9tZT8KCkRPTktFWQpTaHJlaywgSSAtIC0gSSB3YW5uYSBnbyB3aXRoIHlvdS4KClNIUkVLCkkgdG9sZCB5b3UsIGRpZG4ndCBJPyBZb3UncmUgbm90IGNvbWluZwpob21lIHdpdGggbWUuIEkgbGl2ZSBhbG9uZSEgTXkgc3dhbXAhCk1lISBOb2JvZHkgZWxzZSEgVW5kZXJzdGFuZD8gTm9ib2R5IQpFc3BlY2lhbGx5IHVzZWxlc3MsIHBhdGhldGljLCBhbm5veWluZywKdGFsa2luZyBkb25rZXlzIQoKRE9OS0VZCkJ1dCBJIHRob3VnaHQgLSAtCgpTSFJFSwpZZWFoLiBZb3Uga25vdyB3aGF0PyBZb3UgdGhvdWdodCB3cm9uZyEKKHN0b21wcyBvZmYpCgpET05LRVkKU2hyZWsuCgpNb250YWdlIG9mIGRpZmZlcmVudCBzY2VuZXMuIFNocmVrIGFycml2aW5nIGJhY2sgaG9tZS4gRmlvbmEKYmVpbmcgZml0dGVkIGZvciB0aGUgd2VkZGluZyBkcmVzcy4gRG9ua2V5IGF0IGEgc3RyZWFtIHJ1bm5pbmcKaW50byB0aGUgZHJhZ29uLiBTaHJlayBjbGVhbmluZyB1cCBoaXMgaG91c2UuIEZpb25hIGVhdGluZyBkaW5uZXIKYWxvbmUuIFNocmVrIGVhdGluZyBkaW5uZXIgYWxvbmUuCgpTSFJFSydTIEhPTUUKClNocmVrIGlzIGVhdGluZyBkaW5uZXIgd2hlbiBoZSBoZWFycyBhIHNvdW5kIG91dHNpZGUuIEhlIGdvZXMKb3V0c2lkZSB0byBpbnZlc3RpZ2F0ZS4KClNIUkVLCkRvbmtleT8gKERvbmtleSBpZ25vcmVzIGhpbSBhbmQgY29udGludWVzCndpdGggd2hhdCBoZSdzIGRvaW5nLikgV2hhdCBhcmUgeW91CmRvaW5nPwoKRE9OS0VZCkkgd291bGQgdGhpbmssIG9mIGFsbCBwZW9wbGUsIHlvdSB3b3VsZApyZWNvZ25pemUgYSB3YWxsIHdoZW4geW91IHNlZSBvbmUuCgoKU0hSRUsKV2VsbCwgeWVhaC4gQnV0IHRoZSB3YWxsJ3Mgc3VwcG9zZWQKdG8gZ28gYXJvdW5kIG15IHN3YW1wLCBub3QgdGhyb3VnaCBpdC4KCgpET05LRVkKSXQgaXMgYXJvdW5kIHlvdXIgaGFsZi4gU2VlIHRoYXQncyB5b3VyCmhhbGYsIGFuZCB0aGlzIGlzIG15IGhhbGYuCgpTSFJFSwpPaCEgWW91ciBoYWxmLiBIbW0uCgpET05LRVkKWWVzLCBteSBoYWxmLiBJIGhlbHBlZCByZXNjdWUgdGhlIHByaW5jZXNzLgpJIGRpZCBoYWxmIHRoZSB3b3JrLiBJIGdldCBoYWxmIHRoZQpib290eS4gTm93IGhhbmQgbWUgdGhhdCBiaWcgb2xkIHJvY2ssCnRoZSBvbmUgdGhhdCBsb29rcyBsaWtlIHlvdXIgaGVhZC4KCgpTSFJFSwpCYWNrIG9mZiEKCkRPTktFWQpObywgeW91IGJhY2sgb2ZmLgoKU0hSRUsKVGhpcyBpcyBteSBzd2FtcCEKCkRPTktFWQpPdXIgc3dhbXAuCgpTSFJFSwooZ3JhYnMgdGhlIHRyZWUgYnJhbmNoIERvbmtleSBpcyB3b3JraW5nCndpdGgpIExldCBnbywgRG9ua2V5IQoKRE9OS0VZCllvdSBsZXQgZ28uCgpTSFJFSwpTdHViYm9ybiBqYWNrYXNzIQoKRE9OS0VZClNtZWxseSBvZ3JlLgoKU0hSRUsKRmluZSEgKGRyb3BzIHRoZSB0cmVlIGJyYW5jaCBhbmQgd2Fsa3MKYXdheSkKCkRPTktFWQpIZXksIGhleSwgY29tZSBiYWNrIGhlcmUuIEknbSBub3QgdGhyb3VnaAp3aXRoIHlvdSB5ZXQuCgpTSFJFSwpXZWxsLCBJJ20gdGhyb3VnaCB3aXRoIHlvdS4KCkRPTktFWQpVaC11aC4gWW91IGtub3csIHdpdGggeW91IGl0J3MgYWx3YXlzLAoiTWUsIG1lLCBtZSEiIFdlbGwsIGd1ZXNzIHdoYXQhIE5vdwppdCdzIG15IHR1cm4hIFNvIHlvdSBqdXN0IHNodXQgdXAgYW5kCnBheSBhdHRlbnRpb24hIFlvdSBhcmUgbWVhbiB0byBtZS4gWW91Cmluc3VsdCBtZSBhbmQgeW91IGRvbid0IGFwcHJlY2lhdGUgYW55dGhpbmcKdGhhdCBJIGRvISBZb3UncmUgYWx3YXlzIHB1c2hpbmcgbWUKYXJvdW5kIG9yIHB1c2hpbmcgbWUgYXdheS4KClNIUkVLCk9oLCB5ZWFoPyBXZWxsLCBpZiBJIHRyZWF0ZWQgeW91IHNvCmJhZCwgaG93IGNvbWUgeW91IGNhbWUgYmFjaz8KCkRPTktFWQpCZWNhdXNlIHRoYXQncyB3aGF0IGZyaWVuZHMgZG8hIFRoZXkKZm9yZ2l2ZSBlYWNoIG90aGVyIQoKU0hSRUsKT2gsIHllYWguIFlvdSdyZSByaWdodCwgRG9ua2V5LiBJIGZvcmdpdmUKeW91Li4uIGZvciBzdGFiYmluJyBtZSBpbiB0aGUgYmFjayEKKGdvZXMgaW50byB0aGUgb3V0aG91c2UgYW5kIHNsYW1zIHRoZQpkb29yKQoKRE9OS0VZCk9oaCEgWW91J3JlIHNvIHdyYXBwZWQgdXAgaW4gbGF5ZXJzLApvbmlvbiBib3ksIHlvdSdyZSBhZnJhaWQgb2YgeW91ciBvd24KZmVlbGluZ3MuCgpTSFJFSwoob3MpIEdvIGF3YXkhCgpET05LRVkKVGhlcmUgeW91IGFyZSAsIGRvaW5nIGl0IGFnYWluIGp1c3QKbGlrZSB5b3UgZGlkIHRvIEZpb25hLiBBbGwgc2hlIGV2ZXIKZG8gd2FzIGxpa2UgeW91LCBtYXliZSBldmVuIGxvdmUgeW91LgoKClNIUkVLCihvcykgTG92ZSBtZT8gU2hlIHNhaWQgSSB3YXMgdWdseSwgYQpoaWRlb3VzIGNyZWF0dXJlLiBJIGhlYXJkIHRoZSB0d28gb2YKeW91IHRhbGtpbmcuCgpET05LRVkKU2hlIHdhc24ndCB0YWxraW4nIGFib3V0IHlvdS4gU2hlIHdhcwp0YWxraW4nIGFib3V0LCB1aCwgc29tZWJvZHkgZWxzZS4KCgpTSFJFSwoob3BlbnMgdGhlIGRvb3IgYW5kIGNvbWVzIG91dCkgU2hlIHdhc24ndAp0YWxraW5nIGFib3V0IG1lPyBXZWxsLCB0aGVuIHdobyB3YXMKc2hlIHRhbGtpbmcgYWJvdXQ/CgpET05LRVkKVWgtdWgsIG5vIHdheS4gSSBhaW4ndCBzYXlpbmcgYW55dGhpbmcuCllvdSBkb24ndCB3YW5uYSBsaXN0ZW4gdG8gbWUuIFJpZ2h0PwpSaWdodD8KClNIUkVLCkRvbmtleSEKCkRPTktFWQpObyEKClNIUkVLCk9rYXksIGxvb2suIEknbSBzb3JyeSwgYWxsIHJpZ2h0PyAoc2lnaCkKSSdtIHNvcnJ5LiBJIGd1ZXNzIEkgYW0ganVzdCBhIGJpZywKc3R1cGlkLCB1Z2x5IG9ncmUuIENhbiB5b3UgZm9yZ2l2ZSBtZT8KCgpET05LRVkKSGV5LCB0aGF0J3Mgd2hhdCBmcmllbmRzIGFyZSBmb3IsIHJpZ2h0PwoKClNIUkVLClJpZ2h0LiBGcmllbmRzPwoKRE9OS0VZCkZyaWVuZHMuCgpTSFJFSwpTbywgdW0sIHdoYXQgZGlkIEZpb25hIHNheSBhYm91dCBtZT8KCgpET05LRVkKV2hhdCBhcmUgeW91IGFza2luZyBtZSBmb3I/IFdoeSBkb24ndAp5b3UganVzdCBnbyBhc2sgaGVyPwoKU0hSRUsKVGhlIHdlZGRpbmchIFdlJ2xsIG5ldmVyIG1ha2UgaXQgaW4KdGltZS4KCkRPTktFWQpIYS1oYS1oYSEgTmV2ZXIgZmVhciwgZm9yIHdoZXJlLCB0aGVyZSdzCmEgd2lsbCwgdGhlcmUncyBhIHdheSBhbmQgSSBoYXZlIGEgd2F5Lgood2hpc3RsZXMpCgpTdWRkZW5seSB0aGUgZHJhZ29uIGFycml2ZXMgb3ZlcmhlYWQgYW5kIGZsaWVzIGxvdyBlbm91Z2ggc28KdGhleSBjYW4gY2xpbWIgb24uCgpTSFJFSwpEb25rZXk/CgpET05LRVkKSSBndWVzcyBpdCdzIGp1c3QgbXkgYW5pbWFsIG1hZ25ldGlzbS4KCgpUaGV5IGJvdGggbGF1Z2guCgpTSFJFSwpBdywgY29tZSBoZXJlLCB5b3UuIChnaXZlcyBEb25rZXkgYQpub29naWUpCgpET05LRVkKQWxsIHJpZ2h0LCBhbGwgcmlnaHQuIERvbid0IGdldCBhbGwKc2xvYmJlcnkuIE5vIG9uZSBsaWtlcyBhIGtpc3MgYXNzLiBBbGwKcmlnaHQsIGhvcCBvbiBhbmQgaG9sZCBvbiB0aWdodC4gSSBoYXZlbid0CmhhZCBhIGNoYW5jZSB0byBpbnN0YWxsIHRoZSBzZWF0IGJlbHRzCnlldC4KClRoZXkgY2xpbWIgYWJvYXJkIHRoZSBkcmFnb24gYW5kIHNoZSB0YWtlcyBvZmYgZm9yIER1TG9jLgoKRFVMT0MgLSBDSFVSQ0gKCkZpb25hIGFuZCBGYXJxdWFhZCBhcmUgZ2V0dGluZyBtYXJyaWVkLiBUaGUgd2hvbGUgdG93biBpcyB0aGVyZS4KVGhlIHByb21wdGVyIGNhcmQgZ3V5IGhvbGRzIHVwIGEgY2FyZCB0aGF0IHNheXMgJ1JldmVyZWQgU2lsZW5jZScuCgoKUFJJRVNUClBlb3BsZSBvZiBEdUxvYywgd2UgZ2F0aGVyIGhlcmUgdG9kYXkKdG8gYmVhciB3aXRuZXNzIHRvIHRoZSB1bmlvbi4uLi4KCkZJT05BCihleWVpbmcgdGhlIHNldHRpbmcgc3VuKSBVbS0KClBSSUVTVAouLi5vZiBvdXIgbmV3IGtpbmcuLi4KCkZJT05BCkV4Y3VzZSBtZS4gQ291bGQgd2UganVzdCBza2lwIGFoZWFkCnRvIHRoZSAiSSBkbydzIj8KCkZBUlFVQUFECihjaHVja2xlcyBhbmQgdGhlbiBtb3Rpb25zIHRvIHRoZSBwcmllc3QKdG8gaW5kdWxnZSBGaW9uYSkgR28gb24uCgpDT1VSVFlBUkQKClNvbWUgZ3VhcmRzIGFyZSBtaWxsaW5nIGFyb3VuZC4gU3VkZGVubHkgdGhlIGRyYWdvbiBsYW5kcyB3aXRoCmEgYm9vbS4gVGhlIGd1YXJkcyBhbGwgdGFrZSBvZmYgcnVubmluZy4KCkRPTktFWQoodG8gRHJhZ29uKSBHbyBhaGVhZCwgSEFWRSBTT01FIEZVTi4KSWYgd2UgbmVlZCB5b3UsIEknbGwgd2hpc3RsZS4gSG93IGFib3V0CnRoYXQ/IChzaGUgbm9kcyBhbmQgZ29lcyBhZnRlciB0aGUgZ3VhcmRzKQpTaHJlaywgd2FpdCwgd2FpdCEgV2FpdCBhIG1pbnV0ZSEgWW91Cndhbm5hIGRvIHRoaXMgcmlnaHQsIGRvbid0IHlvdT8KClNIUkVLCihhdCB0aGUgQ2h1cmNoIGRvb3IpIFdoYXQgYXJlIHlvdSB0YWxraW5nCmFib3V0PwoKRE9OS0VZClRoZXJlJ3MgYSBsaW5lIHlvdSBnb3R0YSB3YWl0IGZvci4gVGhlCnByZWFjaGVyJ3MgZ29ubmEgc2F5LCAiU3BlYWsgbm93IG9yCmZvcmV2ZXIgaG9sZCB5b3VyIHBlYWNlLiIgVGhhdCdzIHdoZW4KeW91IHNheSwgIkkgb2JqZWN0ISIKClNIUkVLCkkgZG9uJ3QgaGF2ZSB0aW1lIGZvciB0aGlzIQoKRE9OS0VZCkhleSwgd2FpdC4gV2hhdCBhcmUgeW91IGRvaW5nPyBMaXN0ZW4KdG8gbWUhIExvb2ssIHlvdSBsb3ZlIHRoaXMgd29tYW4sIGRvbid0CnlvdT8KClNIUkVLClllcy4KCkRPTktFWQpZb3Ugd2FubmEgaG9sZCBoZXI/CgpTSFJFSwpZZXMuCgpET05LRVkKUGxlYXNlIGhlcj8KClNIUkVLClllcyEKCkRPTktFWQooc2luZ2luZyBKYW1lcyBCcm93biBzdHlsZSkgVGhlbiB5b3UKZ290IHRvLCBnb3QgdG8gdHJ5IGEgbGl0dGxlIHRlbmRlcm5lc3MuCihub3JtYWwpIFRoZSBjaGlja3MgbG92ZSB0aGF0IHJvbWFudGljCmNyYXAhCgpTSFJFSwpBbGwgcmlnaHQhIEN1dCBpdCBvdXQuIFdoZW4gZG9lcyB0aGlzCmd1eSBzYXkgdGhlIGxpbmU/CgpET05LRVkKV2UgZ290dGEgY2hlY2sgaXQgb3V0LgoKSU5TSURFIENIVVJDSAoKQXMgdGhlIHByaWVzdCB0YWxrcyB3ZSBzZWUgRG9ua2V5J3Mgc2hhZG93IHRocm91Z2ggb25lIG9mIHRoZQp3aW5kb3dzIFNocmVrIHRvc3NlcyBoaW0gdXAgc28gaGUgY2FuIHNlZS4KClBSSUVTVApBbmQgc28sIGJ5IHRoZSBwb3dlciB2ZXN0ZWQgaW4gbWUuLi4KCgpPdXRzaWRlCgpTSFJFSwpXaGF0IGRvIHlvdSBzZWU/CgpET05LRVkKVGhlIHdob2xlIHRvd24ncyBpbiB0aGVyZS4KCkluc2lkZQoKUFJJRVNUCkkgbm93IHByb25vdW5jZSB5b3UgaHVzYmFuZCBhbmQgd2lmZS4uLgoKCk91dHNpZGUKCkRPTktFWQpUaGV5J3JlIGF0IHRoZSBhbHRhci4KCkluc2lkZQoKUFJJRVNUCi4uLmtpbmcgYW5kIHF1ZWVuLgoKT3V0c2lkZQoKRE9OS0VZCk1vdGhlciBGbGV0Y2hlciEgSGUgYWxyZWFkeSBzYWlkIGl0LgoKClNIUkVLCk9oLCBmb3IgdGhlIGxvdmUgb2YgUGV0ZSEKCkhlIHJ1bnMgaW5zaWRlIHdpdGhvdXQgY2F0Y2hpbmcgRG9ua2V5LCB3aG8gaGl0cyB0aGUgZ3JvdW5kIGhhcmQuCgoKSU5TSURFIENIVVJDSAoKU0hSRUsKKHJ1bm5pbmcgdG93YXJkIHRoZSBhbHRlcikgSSBvYmplY3QhCgoKRklPTkEKU2hyZWs/CgpUaGUgd2hvbGUgY29uZ3JlZ2F0aW9uIGdhc3BzIGFzIHRoZXkgc2VlIFNocmVrLgoKRkFSUVVBQUQKT2gsIG5vdyB3aGF0IGRvZXMgaGUgd2FudD8KClNIUkVLCih0byBjb25ncmVnYXRpb24gYXMgaGUgcmVhY2hlcyB0aGUgZnJvbnQKb2YgdGhlIENodXJjaCkgSGksIGV2ZXJ5b25lLiBIYXZpbicKYSBnb29kIHRpbWUsIGFyZSB5YT8gSSBsb3ZlIER1TG9jLCBmaXJzdApvZiBhbGwuIFZlcnkgY2xlYW4uCgpGSU9OQQpXaGF0IGFyZSB5b3UgZG9pbmcgaGVyZT8KClNIUkVLClJlYWxseSwgaXQncyBydWRlIGVub3VnaCBiZWluZyBhbGl2ZQp3aGVuIG5vIG9uZSB3YW50cyB5b3UsIGJ1dCBzaG93aW5nIHVwCnVuaW52aXRlZCB0byBhIHdlZGRpbmcuLi4KClNIUkVLCkZpb25hISBJIG5lZWQgdG8gdGFsayB0byB5b3UuCgpGSU9OQQpPaCwgbm93IHlvdSB3YW5uYSB0YWxrPyBJdCdzIGEgbGl0dGxlCmxhdGUgZm9yIHRoYXQsIHNvIGlmIHlvdSdsbCBleGN1c2UgbWUKLSAtCgpTSFJFSwpCdXQgeW91IGNhbid0IG1hcnJ5IGhpbS4KCkZJT05BCkFuZCB3aHkgbm90PwoKU0hSRUsKQmVjYXVzZS0gLSBCZWNhdXNlIGhlJ3MganVzdCBtYXJyaW5nCnlvdSBzbyBoZSBjYW4gYmUga2luZy4KCkZBUlFVQUFECk91dHJhZ2VvdXMhIEZpb25hLCBkb24ndCBsaXN0ZW4gdG8gaGltLgoKClNIUkVLCkhlJ3Mgbm90IHlvdXIgdHJ1ZSBsb3ZlLgoKRklPTkEKQW5kIHdoYXQgZG8geW91IGtub3cgYWJvdXQgdHJ1ZSBsb3ZlPwoKClNIUkVLCldlbGwsIEkgLSAtIFVoIC0gLSBJIG1lYW4gLSAtCgpGQVJRVUFBRApPaCwgdGhpcyBpcyBwcmVjaW91cy4gVGhlIG9nZWUgaGFzIGZhbGxlbgppbiBsb3ZlIHdpdGggdGhlIHByaW5jZXNzISBPaCwgZ29vZApMb3JkLiAobGF1Z2hzKQoKVGhlIHByb21wdGVyIGNhcmQgZ3V5IGhvbGRzIHVwIGEgY2FyZCB0aGF0IHNheXMgJ0xhdWdoJy4gVGhlCndob2xlIGNvbmdyZWdhdGlvbiBsYXVnaHMuCgpGQVJRVUFBRApBbiBvZ3JlIGFuZCBhIHByaW5jZXNzIQoKRklPTkEKU2hyZWssIGlzIHRoaXMgdHJ1ZT8KCkZBUlFVQUFECldobyBjYXJlcz8gSXQncyBwcmVwb3N0ZXJvdXMhIEZpb25hLApteSBsb3ZlLCB3ZSdyZSBidXQgYSBraXNzIGF3YXkgZnJvbQpvdXIgImhhcHBpbHkgZXZlciBhZnRlci4iIE5vdyBraXNzIG1lIQoocHVja2VycyBoaXMgbGlwcyBhbmQgbGVhbnMgdG93YXJkIGhlciwKYnV0IHNoZSBwdWxscyBiYWNrLikKCkZJT05BCihsb29raW5nIGF0IHRoZSBzZXR0aW5nIHN1bikgIkJ5IG5pZ2h0Cm9uZSB3YXksIGJ5IGRheSBhbm90aGVyLiIgKHRvIFNocmVrKQpJIHdhbnRlZCB0byBzaG93IHlvdSBiZWZvcmUuCgpTaGUgYmFja3MgdXAgYW5kIGFzIHRoZSBzdW4gc2V0cyBzaGUgY2hhbmdlcyBpbnRvIGhlciBvZ3JlIHNlbGYuClNoZSBnaXZlcyBTaHJlayBhIHNoZWVwaXNoIHNtaWxlLgoKU0hSRUsKV2VsbCwgdWgsIHRoYXQgZXhwbGFpbnMgYSBsb3QuIChGaW9uYQpzbWlsZXMpCgpGQVJRVUFBRApVZ2ghIEl0J3MgZGlzZ3VzdGluZyEgR3VhcmRzISBHdWFyZHMhCkkgb3JkZXIgeW91IHRvIGdldCB0aGF0IG91dCBvZiBteSBzaWdodApub3chIEdldCB0aGVtISBHZXQgdGhlbSBib3RoIQoKVGhlIGd1YXJkcyBydW4gaW4gYW5kIHNlcGFyYXRlIEZpb25hIGFuZCBTaHJlay4gU2hyZWsgZmlnaHRzCnRoZW0uCgpTSFJFSwpObywgbm8hCgpGSU9OQQpTaHJlayEKCkZBUlFVQUFEClRoaXMgaG9jdXMtcG9jdXMgYWx0ZXJzIG5vdGhpbmcuIFRoaXMKbWFycmlhZ2UgaXMgYmluZGluZywgYW5kIHRoYXQgbWFrZXMKbWUga2luZyEgU2VlPyBTZWU/CgpGSU9OQQpObywgbGV0IGdvIG9mIG1lISBTaHJlayEKClNIUkVLCk5vIQoKRkFSUVVBQUQKRG9uJ3QganVzdCBzdGFuZCB0aGVyZSwgeW91IG1vcm9ucy4KCgpTSFJFSwpHZXQgb3V0IG9mIG15IHdheSEgRmlvbmEhIEFycmdoIQoKRkFSUVVBQUQKSSdsbCBtYWtlIHlvdSByZWdyZXQgdGhlIGRheSB3ZSBtZXQuCkknbGwgc2VlIHlvdSBkcmF3biBhbmQgcXVhcnRlcmVkISBZb3UnbGwKYmVnIGZvciBkZWF0aCB0byBzYXZlIHlvdSEKCkZJT05BCk5vLCBTaHJlayEKCkZBUlFVQUFECihob2xkIGEgZGFnZ2VyIHRvIEZpb25hJ3MgdGhyb2F0KSBBbmQKYXMgZm9yIHlvdSwgbXkgd2lmZS4uLgoKU0hSRUsKRmlvbmEhCgpGQVJRVUFBRApJJ2xsIGhhdmUgeW91IGxvY2tlZCBiYWNrIGluIHRoYXQgdG93ZXIKZm9yIHRoZSByZXN0IG9mIHlvdXIgZGF5cyEgSSdtIGtpbmchCgoKU2hyZWsgbWFuYWdlcyB0byBnZXQgYSBoYW5kIGZyZWUgYW5kIGhlIHdoaXN0bGVzLgoKRkFSUVVBQUQKSSB3aWxsIGhhdmUgb3JkZXIhIEkgd2lsbCBoYXZlIHBlcmZlY3Rpb24hCkkgd2lsbCBoYXZlIC0gLSAoRG9ua2V5IGFuZCB0aGUgZHJhZ29uCnNob3cgdXAgYW5kIHRoZSBkcmFnb24gbGVhbnMgZG93biBhbmQKZWF0cyBGYXJxdWFhZCkgQWFhYWghIEFhaCEKCkRPTktFWQpBbGwgcmlnaHQuIE5vYm9keSBtb3ZlLiBJIGdvdCBhIGRyYWdvbgpoZXJlLCBhbmQgSSdtIG5vdCBhZnJhaWQgdG8gdXNlIGl0LgooVGhlIGRyYWdvbiByb2Fycy4pIEknbSBhIGRvbmtleSBvbgp0aGUgZWRnZSEKClRoZSBkcmFnb24gYmVsY2hlcyBhbmQgRmFycXVhYWQncyBjcm93biBmbGllcyBvdXQgb2YgaGVyIG1vdXRoCmFuZCBmYWxscyB0byB0aGUgZ3JvdW5kLgoKRE9OS0VZCkNlbGVicml0eSBtYXJyaWFnZXMuIFRoZXkgbmV2ZXIgbGFzdCwKZG8gdGhleT8KClRoZSBjb25ncmVnYXRpb24gY2hlZXJzLgoKRE9OS0VZCkdvIGFoZWFkLCBTaHJlay4KClNIUkVLClVoLCBGaW9uYT8KCkZJT05BClllcywgU2hyZWs/CgpTSFJFSwpJIC0gLSBJIGxvdmUgeW91LgoKRklPTkEKUmVhbGx5PwoKU0hSRUsKUmVhbGx5LCByZWFsbHkuCgpGSU9OQQooc21pbGVzKSBJIGxvdmUgeW91IHRvby4KClNocmVrIGFuZCBGaW9uYSBraXNzLiBUaGVsb25pdXMgdGFrZXMgb25lIG9mIHRoZSBjYXJkcyBhbmQgd3JpdGVzCidBd3d3dycgb24gdGhlIGJhY2sgYW5kIHRoZW4gc2hvd3MgaXQgdG8gdGhlIGNvbmdyZWdhdGlvbi4KCgpDT05HUkVHQVRJT04KQWF3d3chCgpTdWRkZW5seSB0aGUgbWFnaWMgb2YgdGhlIHNwZWxsIHB1bGxzIEZpb25hIGF3YXkuIFNoZSdzIGxpZnRlZAp1cCBpbnRvIHRoZSBhaXIgYW5kIHNoZSBob3ZlcnMgdGhlcmUgd2hpbGUgdGhlIG1hZ2ljIHdvcmtzIGFyb3VuZApoZXIuCgpXSElTUEVSUwoiVW50aWwgeW91IGZpbmQgdHJ1ZSBsb3ZlJ3MgZmlyc3Qga2lzcwphbmQgdGhlbiB0YWtlIGxvdmUncyB0cnVlIGZvcm0uIFRha2UKbG92ZSdzIHRydWUgZm9ybS4gVGFrZSBsb3ZlJ3MgdHJ1ZSBmb3JtLiIKCgpTdWRkZW5seSBGaW9uYSdzIGV5ZXMgb3BlbiB3aWRlLiBTaGUncyBjb25zdW1lZCBieSB0aGUgc3BlbGwKYW5kIHRoZW4gaXMgc2xvd2x5IGxvd2VyZWQgdG8gdGhlIGdyb3VuZC4KClNIUkVLCihnb2luZyBvdmVyIHRvIGhlcikgRmlvbmE/IEZpb25hLiBBcmUKeW91IGFsbCByaWdodD8KCkZJT05BCihzdGFuZGluZyB1cCwgc2hlJ3Mgc3RpbGwgYW4gb2dyZSkgV2VsbCwKeWVzLiBCdXQgSSBkb24ndCB1bmRlcnN0YW5kLiBJJ20gc3VwcG9zZWQKdG8gYmUgYmVhdXRpZnVsLgoKU0hSRUsKQnV0IHlvdSBBUkUgYmVhdXRpZnVsLgoKVGhleSBzbWlsZSBhdCBlYWNoIG90aGVyLgoKRE9OS0VZCihjaHVja2xlcykgSSB3YXMgaG9waW5nIHRoaXMgd291bGQgYmUKYSBoYXBweSBlbmRpbmcuCgpTaHJlayBhbmQgRmlvbmEga2lzcy4uLmFuZCB0aGUga2lzcyBmYWRlcyBpbnRvLi4uCgpUSEUgU1dBTVAKCi4uLnRoZWlyIHdlZGRpbmcga2lzcy4gU2hyZWsgYW5kIEZpb25hIGFyZSBub3cgbWFycmllZC4gJ0knbQphIEJlbGlldmVyJyBieSBTbWFzaG1vdXRoIGlzIHBsYXllZCBpbiB0aGUgYmFja2dyb3VuZC4gU2hyZWsKYW5kIEZpb25hIGJyZWFrIGFwYXJ0IGFuZCBydW4gdGhyb3VnaCB0aGUgY3Jvd2QgdG8gdGhlaXIgYXdhaXRpbmcKY2FycmlhZ2UuIFdoaWNoIGlzIG1hZGUgb2YgYSBnaWFudCBvbmlvbi4gRmlvbmEgdG9zc2VzIGhlciBib3VxdWV0CndoaWNoIGJvdGggQ2luZGVyZWxsYSBhbmQgU25vdyBXaGl0ZSB0cnkgdG8gY2F0Y2guIEJ1dCB0aGV5IGVuZAp1cCBnZXR0aW5nIGludG8gYSBjYXQgZmlnaHQgYW5kIHNvIHRoZSBkcmFnb24gY2F0Y2hlcyB0aGUgYm91cXVldAppbnN0ZWFkLiBUaGUgR2luZ2VyYnJlYWQgbWFuIGhhcyBiZWVuIG1lbmRlZCBzb21ld2hhdCBhbmQgbm93CmhhcyBvbmUgbGVnIGFuZCB3YWxrcyB3aXRoIGEgY2FuZHkgY2FuZSBjYW5lLiBTaHJlayBhbmQgRmlvbmEKd2FsayBvZmYgYXMgdGhlIHJlc3Qgb2YgdGhlIGd1ZXN0cyBwYXJ0eSBhbmQgRG9ua2V5IHRha2VzIG92ZXIKc2luZ2luZyB0aGUgc29uZy4KCkdJTkdFUkJSRUFEIE1BTgpHb2QgYmxlc3MgdXMsIGV2ZXJ5IG9uZS4KCkRPTktFWQooYXMgaGUncyBkb25lIHNpbmdpbmcgYW5kIHdlIGZhZGUgdG8KYmxhY2spIE9oLCB0aGF0J3MgZnVubnkuIE9oLiBPaC4gSSBjYW4ndApicmVhdGhlLiBJIGNhbid0IGJyZWF0aGUuCgpUSEUgRU5E