VGhlc2UgdW5pdHMgYXJlIGFsbCBhbGlrZSwgc3BoZXJpY2FsIGFuZCBhYnNvbHV0ZWx5IHNpbXBsZSBpbiAKY29uc3RydWN0aW9uLiBUaG91Z2ggdGhleSBhcmUgdGhlIGJhc2lzIG9mIGFsbCBtYXR0ZXIsIHRoZXkgCmFyZSBub3QgdGhlbXNlbHZlcyBtYXR0ZXI7IHRoZXkgYXJlIG5vdCBibG9ja3MgYnV0IGJ1YmJsZXMuIApUaGV5IGRvIG5vdCByZXNlbWJsZSBidWJibGVzIGZsb2F0aW5nIGluIHRoZSBhaXIsIHdoaWNoIGNvbnNpc3QgCm9mIGEgdGhpbiBmaWxtIG9mIHdhdGVyIHNlcGFyYXRpbmcgdGhlIGFpciB3aXRoaW4gdGhlbSBmcm9tIHRoZSAKYWlyIG91dHNpZGUsIHNvIHRoYXQgdGhlIGZpbG0gaGFzIGJvdGggYW4gb3V0ZXIgYW5kIGFuIGlubmVyIApzdXJmYWNlLiBUaGVpciBhbmFsb2d5IGlzIHJhdGhlciB3aXRoIHRoZSBidWJibGVzIHRoYXQgd2Ugc2VlIApyaXNpbmcgaW4gd2F0ZXIsIGJlZm9yZSB0aGV5IHJlYWNoIHRoZSBzdXJmYWNlLCBidWJibGVzIHdoaWNoIG1heSAKCjggCgoKYmUgc2FpZCB0byBoYXZlIG9ubHkgb25lIHN1cmZhY2Ug4oCUIHRoYXQgb2YgdGhlIHdhdGVyIHdoaWNoIGlzIApwdXNoZWQgYmFjayBieSB0aGUgY29udGFpbmVkIGFpci4gSnVzdCBhcyBzdWNoIGJ1YmJsZXMgYXJlIApub3Qgd2F0ZXIsIGJ1dCBhcmUgcHJlY2lzZWx5IHRoZSBzcG90cyBmcm9tIHdoaWNoIHdhdGVyIGlzIGFic2VudCwgCnNvIHRoZXNlIHVuaXRzIGFyZSBub3Qga29pbG9uLCBidXQgdGhlIGFic2VuY2Ugb2Yga29pbG9uIOKAlCB0aGUgCm9ubHkgc3BvdHMgd2hlcmUgaXQgaXMgbm90IOKAlCBzcGVja3Mgb2Ygbm90aGluZ25lc3MgZmxvYXRpbmcgaW4gaXQsIApzbyB0byBzcGVhaywgZm9yIHRoZSBpbnRlcmlvciBvZiB0aGVzZSBzcGFjZS1idWJibGVzIGlzIGFuIGFic29sdXRlIAp2b2lkIHRvIHRoZSBoaWdoZXN0IHBvd2VyIG9mIHZpc2lvbiB0aGF0IHdlIGNhbiB0dXJuIHVwb24gdGhlbS4gCgpUaGF0IGlzIHRoZSBzdGFydGxpbmcsIHdlbGwtbmlnaCBpbmNyZWRpYmxlLCBmYWN0LiBNYXR0ZXIgaXMgCm5vdGhpbmduZXNzLCB0aGUgc3BhY2Ugb2J0YWluZWQgYnkgcHJlc3NpbmcgYmFjayBhbiBpbmZpbml0ZWx5IApkZW5zZSBzdWJzdGFuY2U7IEZvaGF0ICJkaWdzIGhvbGVzIGluIHNwYWNlIiBvZiBhIHZlcml0eSwgYW5kIAp0aGUgaG9sZXMgYXJlIHRoZSBhaXJ5IG5vdGhpbmduZXNzZXMsIHRoZSBidWJibGVzLCBvZiB3aGljaCAKInNvbGlkIiB1bml2ZXJzZXMgYXJlIGJ1aWx0LiAKCldoYXQgYXJlIHRoZXksIHRoZW4sIHRoZXNlIGJ1YmJsZXMsIG9yIHJhdGhlciwgd2hhdCBpcyB0aGVpciAKY29udGVudCwgdGhlIGZvcmNlIHdoaWNoIGNhbiBibG93IGJ1YmJsZXMgaW4gYSBzdWJzdGFuY2Ugb2YgCmluZmluaXRlIGRlbnNpdHkgPyBUaGUgYW5jaWVudHMgY2FsbGVkIHRoYXQgZm9yY2UgIiB0aGUgQnJlYXRoLCIgCmEgZ3JhcGhpYyBzeW1ib2wsIHdoaWNoIHNlZW1zIHRvIGltcGx5IHRoYXQgdGhleSB3aG8gdXNlZCAKaXQgaGFkIHNlZW4gdGhlIGtvc21pYyBwcm9jZXNzLCBoYWQgc2VlbiB0aGUgTG9nb3Mgd2hlbiAKSGUgYnJlYXRoZWQgaW50byB0aGUgIiB3YXRlcnMgb2Ygc3BhY2UsIiBhbmQgbWFkZSB0aGUgYnViYmxlcyAKd2hpY2ggYnVpbGQgdW5pdmVyc2VzLiBTY2llbnRpc3RzIG1heSBjYWxsIHRoaXMgIkZvcmNlIiBieSAKd2hhdCBuYW1lcyB0aGV5IHdpbGwg4oCUIG5hbWVzIGFyZSBub3RoaW5nIDsgdG8gdXMsIFRoZW9zb3BoaXN0cywgCml0IGlzIHRoZSBCcmVhdGggb2YgdGhlIExPR09TLCB3ZSBrbm93IG5vdCB3aGV0aGVyIG9mIHRoZSAKTG9nb3Mgb2YgdGhpcyBzb2xhciBzeXN0ZW0gb3Igb2YgYSB5ZXQgbWlnaHRpZXIgQmVpbmc7IHRoZSAKbGF0dGVyIHdvdWxkIHNlZW0gdGhlIG1vcmUgbGlrZWx5LCBzaW5jZSBpbiB0aGUgYWJvdmUtcXVvdGVkIApvY2N1bHQgdHJlYXRpc2UgYWxsIHZpc2libGUgc3VucyBhcmUgc2FpZCB0byBoYXZlIHRoaXMgYXMgdGhlaXIgCnN1YnN0YW5jZS4gCgpUaGUgQnJlYXRoIG9mIHRoZSBMb2dvcywgdGhlbiwgaXMgdGhlIGZvcmNlIHdoaWNoIGZpbGxzIHRoZXNlIApzcGFjZXMgOyBIaXMgdGhlIGZvcmNlIHdoaWNoIGhvbGRzIHRoZW0gb3BlbiBhZ2FpbnN0IHRoZSAKdHJlbWVuZG91cyBwcmVzc3VyZSBvZiB0aGUga29pbG9uOyB0aGV5IGFyZSBmdWxsIG9mIEhpcyBMaWZlLCAKb2YgSGltc2VsZiwgYW5kIGV2ZXJ5dGhpbmcgd2UgY2FsbCBtYXR0ZXIsIG9uIGhvd2V2ZXIgaGlnaCAKb3IgbG93IGEgcGxhbmUsIGlzIGluc3RpbmN0IHdpdGggZGl2aW5pdHk7IHRoZXNlIHVuaXRzIG9mIGZvcmNlLCAKb2YgbGlmZSwgdGhlIGJyaWNrcyB3aXRoIHdoaWNoIEhlIGJ1aWxkcyBIaXMgdW5pdmVyc2UsIGFyZSBIaXMgCnZlcnkgbGlmZSBzY2F0dGVyZWQgdGhyb3VnaCBzcGFjZSA7IHRydWx5IGlzIGl0IHdyaXR0ZW4gOiAiIEkgCmVzdGFibGlzaGVkIHRoaXMgdW5pdmVyc2Ugd2l0aCBhIHBvcnRpb24gb2YgbXlzZWxmLiIgQW5kIAp3aGVuIEhlIGRyYXdzIGluIEhpcyBicmVhdGgsIHRoZSB3YXRlcnMgb2Ygc3BhY2Ugd2lsbCBjbG9zZSAKaW4gYWdhaW4sIGFuZCB0aGUgdW5pdmVyc2Ugd2lsbCBoYXZlIGRpc2FwcGVhcmVkLiBJdCBpcyBvbmx5IAphIGJyZWF0aC4gCgpUaGUgb3V0YnJlYXRoaW5nIHdoaWNoIG1ha2VzIHRoZXNlIGJ1YmJsZXMgaXMgcXVpdGUgZGlzdGluY3QgCmZyb20sIGFuZCBsb25nIGFudGVjZWRlbnQgdG8sIHRoZSB0aHJlZSBvdXRwb3VyaW5ncywgb3IgTGlmZS0gCldhdmVzLCBzbyBmYW1pbGlhciB0byB0aGUgdGhlb3NvcGhpY2FsIHN0dWRlbnQuIFRoZSBmaXJzdCBMaWZlLSAKCgpWSSAKCgpXYXZlIGNhdGNoZXMgdXAgdGhlc2UgYnViYmxlcywgYW5kIHdoaXJscyB0aGVtIGludG8gdGhlIHZhcmlvdXMgCmFycmFuZ2VtZW50cyB3aGljaCB3ZSBjYWxsIHRoZSBhdG9tcyBvZiB0aGUgc2V2ZXJhbCBwbGFuZXMsIAphbmQgYWdncmVnYXRlcyB0aGVtIGludG8gdGhlIG1vbGVjdWxlcywgYW5kIG9uIHRoZSBwaHlzaWNhbCAKcGxhbmUgaW50byB0aGUgY2hlbWljYWwgZWxlbWVudHMuIFRoZSB3b3JsZHMgYXJlIGJ1aWx0IG91dCBvZiAKdGhlc2Ugdm9pZHMsIHRoZXNlIGVtcHRpbmVzc2VzLCB3aGljaCBzZWVtIHRvIHVzICIgbm90aGluZyIgYnV0IAphcmUgZGl2aW5lIGZvcmNlLiBJdCBpcyBtYXR0ZXIgbWFkZSBmcm9tIHRoZSBwcml2YXRpb24gb2YgbWF0dGVyLiAKSG93IHRydWUgd2VyZSBILlAuQi4ncyBzdGF0ZW1lbnRzIGluICIgVGhlIFNlY3JldCBEb2N0cmluZSAiIDogCiJNYXR0ZXIgaXMgbm90aGluZyBidXQgYW4gYWdncmVnYXRpb24gb2YgYXRvbWljIGZvcmNlcyIgKGlpaSwgMzk4KTsgCkJ1ZGRoYSB0YXVnaHQgdGhhdCB0aGUgcHJpbWl0aXZlIHN1YnN0YW5jZSBpcyBldGVybmFsIGFuZCAKdW5jaGFuZ2VhYmxlLiBJdHMgdmVoaWNsZSBpcyB0aGUgcHVyZSBsdW1pbm91cyBhZXRoZXIsIHRoZSAKYm91bmRsZXNzIGluZmluaXRlIHNwYWNlLCBub3QgYSB2b2lkLCByZXN1bHRpbmcgZnJvbSB0aGUgYWJzZW5jZSAKb2YgYWxsIGZvcm1zLCBidXQgb24gdGhlIGNvbnRyYXJ5LCB0aGUgZm91bmRhdGlvbiBvZiBhbGwgZm9ybXMgIiAKKGlpaSwgNDAyKS4gCgpIb3cgdml2aWRseSwgaG93IHVubWlzdGFrYWJseSB0aGlzIGtub3dsZWRnZSBicmluZ3MgaG9tZSAKdG8gdXMgdGhlIGdyZWF0IGRvY3RyaW5lIG9mIE1eeWEsIHRoZSB0cmFuc2l0b3JpbmVzcyBhbmQgdW5yZWFsaXR5IApvZiBlYXJ0aGx5IHRoaW5ncywgdGhlIHV0dGVybHkgZGVjZXB0aXZlIG5hdHVyZSBvZiBhcHBlYXJhbmNlcyAhIApXaGVuIHRoZSBjYW5kaWRhdGUgZm9yIGluaXRpYXRpb24gc2VlcyAobm90IG1lcmVseSBiZWxpZXZlcywgCnJlbWVtYmVyLCBidXQgYWN0dWFsbHkgc2VlcykgdGhhdCB3aGF0IGhhcyBhbHdheXMgYmVmb3JlIHNlZW1lZCAKdG8gaGltIGVtcHR5IHNwYWNlIGlzIGluIHJlYWxpdHkgYSBzb2xpZCBtYXNzIG9mIGluY29uY2VpdmFibGUgCmRlbnNpdHksIGFuZCB0aGF0IHRoZSBtYXR0ZXIgd2hpY2ggaGFzIGFwcGVhcmVkIHRvIGJlIHRoZSBvbmUgCnRhbmdpYmxlIGFuZCBjZXJ0YWluIGJhc2lzIG9mIHRoaW5ncyBpcyBub3Qgb25seSBieSBjb21wYXJpc29uIAp0ZW51b3VzIGFzIGdvc3NhbWVyICh0aGUgIndlYiIgc3B1biBieSAiRmF0aGVyLU1vdGhlciIpLCAKYnV0IGlzIGFjdHVhbGx5IGNvbXBvc2VkIG9mIGVtcHRpbmVzcyBhbmQgbm90aGluZ25lc3Mg4oCUIGlzIGl0c2VsZiAKdGhlIHZlcnkgbmVnYXRpb24gb2YgbWF0dGVy4oCUIHRoZW4gZm9yIHRoZSBmaXJzdCB0aW1lIGhlIHRob3JvdWdobHkgCmFwcHJlY2lhdGVzIHRoZSB2YWx1ZWxlc3NuZXNzIG9mIHRoZSBwaHlzaWNhbCBzZW5zZXMgYXMgZ3VpZGVzIHRvIAp0aGUgdHJ1dGguIFlldCBldmVuIG1vcmUgY2xlYXJseSBzdGlsbCBzdGFuZHMgb3V0IHRoZSBnbG9yaW91cyAKY2VydGFpbnR5IG9mIHRoZSBpbW1hbmVuY2Ugb2YgdGhlIERpdmluZSA7IG5vdCBvbmx5IGlzIGV2ZXJ5LSAKdGhpbmcgZW5zb3VsZWQgYnkgdGhlIExvZ29zLCBidXQgZXZlbiBpdHMgdmlzaWJsZSBtYW5pZmVzdGF0aW9uIAppcyBsaXRlcmFsbHkgcGFydCBvZiBIaW0sIGlzIGJ1aWx0IG9mIEhpcyB2ZXJ5IHN1YnN0YW5jZSwgc28gdGhhdCAKTWF0dGVyIGFzIHdlbGwgYXMgU3Bpcml0IGJlY29tZXMgc2FjcmVkIHRvIHRoZSBzdHVkZW50IHdobyByZWFsbHkgCnVuZGVyc3RhbmRzLiAKClRoZSBrb2lsb24gaW4gd2hpY2ggYWxsIHRoZXNlIGJ1YmJsZXMgYXJlIGZvcm1lZCB1bmRvdWJ0ZWRseSAKcmVwcmVzZW50cyBhIHBhcnQsIGFuZCBwZXJoYXBzIHRoZSBwcmluY2lwYWwgcGFydCwgb2Ygd2hhdCBzY2llbmNlIApkZXNjcmliZXMgYXMgdGhlIGx1bWluaWZlcm91cyBhZXRoZXIuIFdoZXRoZXIgaXQgaXMgYWN0dWFsbHkgdGhlIApiZWFyZXIgb2YgdGhlIHZpYnJhdGlvbnMgb2YgbGlnaHQgYW5kIGhlYXQgdGhyb3VnaCBpbnRlcnBsYW5ldGFyeSAKc3BhY2UgaXMgYXMgeWV0IHVuZGV0ZXJtaW5lZC4gSXQgaXMgY2VydGFpbiB0aGF0IHRoZXNlIHZpYnJhdGlvbnMgCmltcGluZ2UgdXBvbiBhbmQgYXJlIHBlcmNlcHRpYmxlIHRvIG91ciBib2RpbHkgc2Vuc2VzIG9ubHkgCnRocm91Z2ggdGhlIGV0aGVyaWMgbWF0dGVyIG9mIHRoZSBwaHlzaWNhbCBwbGFuZS4gQnV0IHRoaXMgYnkgbm8gCm1lYW5zIHByb3ZlcyB0aGF0IHRoZXkgYXJlIGNvbnZleWVkIHRocm91Z2ggc3BhY2UgaW4gdGhlIHNhbWUgCgoKVmxsIAoKbWFubmVyLCBmb3Igd2Uga25vdyB2ZXJ5IGxpdHRsZSBvZiB0aGUgZXh0ZW50IHRvIHdoaWNoIHRoZSAKcGh5c2ljYWwgZXRoZXJpYyBtYXR0ZXIgZXhpc3RzIGluIGludGVycGxhbmV0YXJ5IGFuZCBpbnRlcnN0ZWxsYXIgCnNwYWNlLCB0aG91Z2ggdGhlIGV4YW1pbmF0aW9uIG9mIG1ldGVvcmljIG1hdHRlciBhbmQga29zbWljIApkdXN0IHNob3dzIHRoYXQgYXQgbGVhc3Qgc29tZSBvZiBpdCBpcyBzY2F0dGVyZWQgdGhlcmUuIAoKVGhlIHNjaWVudGlmaWMgdGhlb3J5IGlzIHRoYXQgdGhlIGFldGhlciBoYXMgc29tZSBxdWFsaXR5IHdoaWNoIAplbmFibGVzIGl0IHRvIHRyYW5zbWl0IGF0IGEgY2VydGFpbiBkZWZpbml0ZSB2ZWxvY2l0eSB0cmFuc3ZlcnNlIAp3YXZlcyBvZiBhbGwgbGVuZ3RocyBhbmQgaW50ZW5zaXRpZXMg4oCUIHRoYXQgdmVsb2NpdHkgYmVpbmcgd2hhdCBpcyAKY29tbW9ubHkgY2FsbGVkIHRoZSBzcGVlZCBvZiBsaWdodCwgMTkwLDAwMCBtaWxlcyBwZXIgc2Vjb25kLiAKUXVpdGUgcHJvYmFibHkgdGhpcyBtYXkgYmUgdHJ1ZSBvZiBrb2lsb24sIGFuZCBpZiBzbyBpdCBtdXN0IGFsc28gCmJlIGNhcGFibGUgb2YgY29tbXVuaWNhdGluZyB0aG9zZSB3YXZlcyB0byBidWJibGVzIG9yIGFnZ3JlZ2EtIAp0aW9ucyBvZiBidWJibGVzLCBhbmQgYmVmb3JlIHRoZSBsaWdodCBjYW4gcmVhY2ggb3VyIGV5ZXMgdGhlcmUgCm11c3QgYmUgYSBkb3dud2FyZCB0cmFuc2ZlcmVuY2UgZnJvbSBwbGFuZSB0byBwbGFuZSBzaW1pbGFyIHRvIAp0aGF0IHRha2luZyBwbGFjZSB3aGVuIGEgdGhvdWdodCBhd2FrZW5zIGVtb3Rpb24gb3IgY2F1c2VzIAphY3Rpb24uIAoKSW4gYSByZWNlbnQgcGFtcGhsZXQgb24gIlRoZSBEZW5zaXR5IG9mIC5edGhlciwiIFNpciBPbGl2ZXIgCkxvZGdlIHJlbWFya3MgOiDigJQgCgoiSnVzdCBhcyB0aGUgcmF0aW8gb2YgbWFzcyB0byB2b2x1bWUgaXMgc21hbGwgaW4gdGhlIGNhc2Ugb2YgYSAKc29sYXIgc3lzdGVtIG9yIGEgbmVidWxhIG9yIGEgY29id2ViLCBJIGhhdmUgYmVlbiBkcml2ZW4gdG8gCnRoaW5rIHRoYXQgdGhlIG9ic2VydmVkIG1lY2hhbmljYWwgZGVuc2l0eSBvZiBtYXR0ZXIgaXMgcHJvYmFibHkgCmFuIGV4Y2Vzc2l2ZWx5IHNtYWxsIGZyYWN0aW9uIG9mIHRoZSB0b3RhbCBkZW5zaXR5IG9mIHRoZSBzdWJzdGFuY2UgCm9yIGFldGhlciBjb250YWluZWQgaW4gdGhlIHNwYWNlIHdoaWNoIGl0IHRodXMgcGFydGlhbGx5IG9jY3VwaWVzIArigJQgdGhlIHN1YnN0YW5jZSBvZiB3aGljaCBpdCBtYXkgaHlwb3RoZXRpY2FsbHkgYmUgaGVsZCB0byBiZSAKY29tcG9zZWQuIAoKIiBUaHVzLCBmb3IgaW5zdGFuY2UsIGNvbnNpZGVyIGEgbWFzcyBvZiBwbGF0aW51bSwgYW5kIGFzc3VtZSAKdGhhdCBpdHMgYXRvbXMgYXJlIGNvbXBvc2VkIG9mIGVsZWN0cm9ucywgb3Igb2Ygc29tZSBzdHJ1Y3R1cmVzIApub3Qgd2hvbGx5IGRpc3NpbWlsYXIgOiB0aGUgc3BhY2Ugd2hpY2ggdGhlc2UgYm9kaWVzIGFjdHVhbGx5IGZpbGwsIAphcyBjb21wYXJlZCB3aXRoIHRoZSB3aG9sZSBzcGFjZSB3aGljaCBpbiBhIHNlbnNlIHRoZXkgIm9jY3VweSwiIAppcyBjb21wYXJhYmxlIHRvIG9uZSB0ZW4tbWlsbGlvbnRoIG9mIHRoZSB3aG9sZSwgZXZlbiBpbnNpZGUgZWFjaCAKYXRvbSA7IGFuZCB0aGUgZnJhY3Rpb24gaXMgc3RpbGwgc21hbGxlciBpZiBpdCByZWZlcnMgdG8gdGhlIHZpc2libGUgCm1hc3MuIFNvIHRoYXQgYSBraW5kIG9mIG1pbmltdW0gZXN0aW1hdGUgb2YgYWV0aGVyaWFsIGRlbnNpdHksIApvbiB0aGlzIGJhc2lzLCB3b3VsZCBiZSBzb21ldGhpbmcgbGlrZSB0ZW4gdGhvdXNhbmQgbWlsbGlvbiAKdGltZXMgdGhhdCBvZiBwbGF0aW51bS4iIAoKQW5kIGZ1cnRoZXIgb24gaGUgYWRkcyB0aGF0IHRoaXMgZGVuc2l0eSBtYXkgd2VsbCB0dXJuIG91dCB0byAKYmUgZmlmdHkgdGhvdXNhbmQgbWlsbGlvbiB0aW1lcyB0aGF0IG9mIHBsYXRpbnVtLiAiVGhlIGRlbnNlc3QgCm1hdHRlciBrbm93biwiIGhlIHNheXMsICIgaXMgdHJpdmlhbCBhbmQgZ29zc2FtZXItbGlrZSBjb21wYXJlZCAKd2l0aCB0aGUgdW5tb2RpZmllZCBhZXRoZXIgaW4gdGhlIHNhbWUgc3BhY2UuIiAKCkluY3JlZGlibGUgYXMgdGhpcyBzZWVtcyB0byBvdXIgb3JkaW5hcnkgaWRlYXMsIGl0IGlzIHVuZG91YnRlZGx5IAphbiB1bmRlcnN0YXRlbWVudCByYXRoZXIgdGhhbiBhbiBleGFnZ2VyYXRpb24gb2YgdGhlIHRydWUgcHJvLSAKcG9ydGlvbiBhcyBvYnNlcnZlZCBpbiB0aGUgY2FzZSBvZiBrb2lsb24uIFdlIHNoYWxsIHVuZGVyc3RhbmQgCgoKVklsbCAKCmhvdyB0aGlzIGNhbiBiZSBzbyBpZiB3ZSByZW1lbWJlciB0aGF0IGtvaWxvbiBzZWVtcyBhYnNvbHV0ZWx5IApob21vZ2VuZW91cyBhbmQgc29saWQgZXZlbiB3aGVuIGV4YW1pbmVkIGJ5IGEgcG93ZXIgb2YgCm1hZ25pZmljYXRpb24gd2hpY2ggbWFrZXMgcGh5c2ljYWwgYXRvbXMgYXBwZWFyIGluIHNpemUgYW5kIAphcnJhbmdlbWVudCBsaWtlIGNvdHRhZ2VzIHNjYXR0ZXJlZCBvdmVyIGEgbG9uZWx5IG1vb3IsIGFuZCAKd2hlbiB3ZSBmdXJ0aGVyIGFkZCB0byB0aGlzIHRoZSByZWNvbGxlY3Rpb24gdGhhdCB0aGUgYnViYmxlcyBvZiAKd2hpY2ggdGhlc2UgYXRvbXMgaW4gdHVybiBhcmUgY29tcG9zZWQgYXJlIHRoZW1zZWx2ZXMgd2hhdCAKbWF5IGJlIG5vdCBpbmFwdGx5IGNhbGxlZCBmcmFnbWVudHMgb2Ygbm90aGluZ25lc3MuIAoKSW4gdGhlIHNhbWUgcGFtcGhsZXQgU2lyIE9saXZlciBMb2RnZSBtYWtlcyBhIHZlcnkgc3RyaWtpbmcgCmVzdGltYXRlIG9mIHRoZSBpbnRyaW5zaWMgZW5lcmd5IG9mIHRoZSBhZXRoZXIuIEhlIHNheXMgOiAiIFRoZSAKdG90YWwgb3V0cHV0IG9mIGEgbWlsbGlvbi1raWxvd2F0dCBwb3dlciBzdGF0aW9uIGZvciB0aGlydHkgbWlsbGlvbiAKeWVhcnMgZXhpc3RzIHBlcm1hbmVudGx5LCBhbmQgYXQgcHJlc2VudCBpbmFjY2Vzc2libHkgaW4gZXZlcnkgCmN1YmljIG1pbGxpbWV0cmUgb2Ygc3BhY2UuIiBIZXJlIGFnYWluIGhlIGlzIHByb2JhYmx5IHVuZGVyLSAKZXN0aW1hdGluZyB0aGUgc3R1cGVuZG91cyB0cnV0aC4gCgpJdCBtYXkgbmF0dXJhbGx5IGJlIGFza2VkIGhvdywgaWYgYWxsIHRoaXMgYmUgc28sIGl0IGlzIHBvc3NpYmxlIAp0aGF0IHdlIGNhbiBtb3ZlJyBhYm91dCBmcmVlbHkgaW4gYSBzb2xpZCB0ZW4gdGhvdXNhbmQgbWlsbGlvbiAKdGltZXMgZGVuc2VyLCBhcyBTaXIgT2xpdmVyIExvZGdlIHNheXMsIHRoYW4gcGxhdGludW0uIFRoZSAKb2J2aW91cyBhbnN3ZXIgaXMgdGhhdCwgd2hlcmUgZGVuc2l0aWVzIGRpZmZlciBzdWZmaWNpZW50bHksIHRoZXkgCmNhbiBtb3ZlIHRocm91Z2ggZWFjaCBvdGhlciB3aXRoIHBlcmZlY3QgZnJlZWRvbSA7IHdhdGVyIG9yIAphaXIgY2FuIHBhc3MgdGhyb3VnaCBjbG90aCA7IGFpciBjYW4gcGFzcyB0aHJvdWdoIHdhdGVyIDsgYW4gCmFzdHJhbCBmb3JtIHBhc3NlcyB1bmNvbnNjaW91c2x5IHRocm91Z2ggYSBwaHlzaWNhbCB3YWxsLCBvciAKdGhyb3VnaCBhbiBvcmRpbmFyeSBodW1hbiBib2R5IDsgbWFueSBvZiB1cyBoYXZlIHNlZW4gYW4gCmFzdHJhbCBmb3JtIHdhbGsgdGhyb3VnaCBhIHBoeXNpY2FsLCBuZWl0aGVyIGJlaW5nIGNvbnNjaW91cyBvZiAKdGhlIHBhc3NhZ2UgOyBpdCBkb2VzIG5vdCBtYXR0ZXIgd2hldGhlciB3ZSBzYXkgdGhhdCBhIGdob3N0IGhhcyAKcGFzc2VkIHRocm91Z2ggYSB3YWxsLCBvciBhIHdhbGwgaGFzIHBhc3NlZCB0aHJvdWdoIGEgZ2hvc3QuIApBIGdub21lIHBhc3NlcyBmcmVlbHkgdGhyb3VnaCBhIHJvY2ssIGFuZCB3YWxrcyBhYm91dCB3aXRoaW4gCnRoZSBlYXJ0aCwgYXMgY29tZm9ydGFibHkgYXMgd2Ugd2FsayBhYm91dCBpbiB0aGUgYWlyLiBBIGRlZXBlciAKYW5zd2VyIGlzIHRoYXQgY29uc2Npb3VzbmVzcyBjYW4gcmVjb2duaXplIG9ubHkgY29uc2Npb3VzbmVzcywgCnRoYXQgc2luY2Ugd2UgYXJlIG9mIHRoZSBuYXR1cmUgb2YgdGhlIExPR09TIHdlIGNhbiBzZW5zZSBvbmx5IAp0aG9zZSB0aGluZ3Mgd2hpY2ggYXJlIGFsc28gb2YgSGlzIG5hdHVyZS4gVGhlc2UgYnViYmxlcyBhcmUgCkhpcyBlc3NlbmNlLCBIaXMgbGlmZSwgYW5kLCB0aGVyZWZvcmUsIHdlLCB3aG8gYWxzbyBhcmUgcGFydCBvZiAKSGltLCBjYW4gc2VlIHRoZSBtYXR0ZXIgd2hpY2ggaXMgYnVpbHQgb2YgaGlzIHN1YnN0YW5jZSwgZm9yIGFsbCAKZm9ybXMgYXJlIGJ1dCBtYW5pZmVzdGF0aW9ucyBvZiBIaW0uIFRoZSBrb2lsb24gaXMgdG8gdXMgbm9uLSAKbWFuaWZlc3RhdGlvbiwgYmVjYXVzZSB3ZSBoYXZlIG5vdCB1bmZvbGRlZCBwb3dlcnMgd2hpY2ggCmVuYWJsZSB1cyB0byBjb2duaXNlIGl0LCBhbmQgaXQgbWF5IGJlIHRoZSBtYW5pZmVzdGF0aW9uIG9mIGEgCmxvZnRpZXIgb3JkZXIgb2YgTG9HT2ksIHV0dGVybHkgYmV5b25kIG91ciBrZW4uIAoKQXMgbm9uZSBvZiBvdXIgaW52ZXN0aWdhdG9ycyBjYW4gcmFpc2UgaGlzIGNvbnNjaW91c25lc3MgdG8gCnRoZSBoaWdoZXN0IHBsYW5lIG9mIG91ciB1bml2ZXJzZSwgdGhlIGFkaS10YXR0dmEgcGxhbmUsIGl0IG1heSBiZSAKb2YgaW50ZXJlc3QgdG8gZXhwbGFpbiBob3cgaXQgaXMgcG9zc2libGUgZm9yIHRoZW0gdG8gc2VlIHdoYXQgbWF5IAp2ZXJ5IHByb2JhYmx5IGJlIHRoZSBhdG9tIG9mIHRoYXQgcGxhbmUuIFRoYXQgdGhpcyBtYXkgYmUgCgoKSVggCgp1bmRlcnN0b29kIGl0IGlzIGVzc2VudGlhbCB0byByZW1lbWJlciB0aGF0IHRoZSBwb3dlciBvZiBtYWduaWZpLSAKY2F0aW9uIGJ5IG1lYW5zIG9mIHdoaWNoIHRoZXNlIGV4cGVyaW1lbnRzIGFyZSBjb25kdWN0ZWQgaXMgCnF1aXRlIGFwYXJ0IGZyb20gdGhlIGZhY3VsdHkgb2YgZnVuY3Rpb25pbmcgdXBvbiBvbmUgb3Igb3RoZXIgb2YgCnRoZSBwbGFuZXMuIFRoZSBsYXR0ZXIgaXMgdGhlIHJlc3VsdCBvZiBhIHNsb3cgYW5kIGdyYWR1YWwgdW5mb2xkLSAKbWVudCBvZiB0aGUgU2VsZiwgd2hpbGUgdGhlIGZvcm1lciBpcyBtZXJlbHkgYSBzcGVjaWFsIGRldmVsb3BtZW50IApvZiBvbmUgb2YgdGhlIG1hbnkgcG93ZXJzIGxhdGVudCBpbiBtYW4uIEFsbCB0aGUgcGxhbmVzIGFyZSAKcm91bmQgdXMgaGVyZSwganVzdCBhcyBtdWNoIGFzIGFueSBvdGhlciBwb2ludCBpbiBzcGFjZSwgYW5kIGlmIAphIG1hbiBzaGFycGVucyBoaXMgc2lnaHQgdW50aWwgaGUgY2FuIHNlZSB0aGVpciB0aW5pZXN0IGF0b21zIGhlIApjYW4gbWFrZSBhIHN0dWR5IG9mIHRoZW0sIGV2ZW4gdGhvdWdoIGhlIG1heSBhcyB5ZXQgYmUgZmFyIApmcm9tIHRoZSBsZXZlbCBuZWNlc3NhcnkgdG8gZW5hYmxlIGhpbSB0byB1bmRlcnN0YW5kIGFuZCBmdW5jdGlvbiAKdXBvbiB0aGUgaGlnaGVyIHBsYW5lcyBhcyBhIHdob2xlLCBvciB0byBjb21lIGludG8gdG91Y2ggd2l0aCAKdGhlIGdsb3Jpb3VzIEludGVsbGlnZW5jZXMgd2hvIGdhdGhlciB0aG9zZSBhdG9tcyBpbnRvIHZlaGljbGVzIApmb3IgVGhlbXNlbHZlcy4gCgpBIHBhcnRpYWwgYW5hbG9neSBtYXkgYmUgZm91bmQgaW4gdGhlIHBvc2l0aW9uIG9mIHRoZSAKYXN0cm9ub21lciB3aXRoIHJlZ2FyZCB0byB0aGUgc3RlbGxhciB1bml2ZXJzZSwgb3IgbGV0IHVzIHNheSAKdGhlIE1pbGt5IFdheS4gSGUgY2FuIG9ic2VydmUgaXRzIGNvbnN0aXR1ZW50IHBhcnRzIGFuZCBsZWFybiAKYSBnb29kIGRlYWwgYWJvdXQgdGhlbSBhbG9uZyB2YXJpb3VzIGxpbmVzLCBidXQgaXQgaXMgYWJzb2x1dGVseSAKaW1wb3NzaWJsZSBmb3IgaGltIHRvIHNlZSBpdCBhcyBhIHdob2xlIGZyb20gb3V0c2lkZSwgb3IgdG8gCmZvcm0gYW55IGNlcnRhaW4gY29uY2VwdGlvbiBvZiBpdHMgdHJ1ZSBzaGFwZSwgYW5kIHRvIGtub3cgCndoYXQgaXQgcmVhbGx5IGlzLiBTdXBwb3NlIHRoYXQgdGhlIHVuaXZlcnNlIGlzLCBhcyBtYW55IG9mIAp0aGUgYW5jaWVudHMgdGhvdWdodCwgc29tZSBpbmNvbmNlaXZhYmx5IHZhc3QgQmVpbmcsIGl0IGlzIAp1dHRlcmx5IGltcG9zc2libGUgZm9yIHVzLCBoZXJlIGluIHRoZSBtaWRzdCBvZiBpdCwgdG8ga25vdyAKd2hhdCB0aGF0IEJlaW5nIGlzIG9yIGlzIGRvaW5nLCBmb3IgdGhhdCB3b3VsZCBtZWFuIHJhaXNpbmcgCm91cnNlbHZlcyB0byBhIGhlaWdodCBjb21wYXJhYmxlIHdpdGggSGlzOyBidXQgd2UgbWF5IG1ha2UgCmV4dGVuc2l2ZSBhbmQgZGV0YWlsZWQgZXhhbWluYXRpb24gb2Ygc3VjaCBwYXJ0aWNsZXMgb2YgSGlzIApib2R5IGFzIGhhcHBlbiB0byBiZSB3aXRoaW4gb3VyIHJlYWNoLCBmb3IgdGhhdCBtZWFucyBvbmx5IAp0aGUgcGF0aWVudCB1c2Ugb2YgcG93ZXJzIGFuZCBtYWNoaW5lcnkgYWxyZWFkeSBhdCBvdXIgCmNvbW1hbmQuIAoKTGV0IGl0IG5vdCBiZSBzdXBwb3NlZCB0aGF0LCBpbiB0aHVzIHVuZm9sZGluZyBhIGxpdHRsZSBtb3JlIApvZiB0aGUgd29uZGVycyBvZiBEaXZpbmUgVHJ1dGggYnkgcHVzaGluZyBvdXIgaW52ZXN0aWdhdGlvbnMgCnRvIHRoZSB2ZXJ5IGZhcnRoZXN0IHBvaW50IGF0IHByZXNlbnQgcG9zc2libGUgdG8gdXMsIHdlIGluIGFueSAKd2F5IGFsdGVyIG9yIG1vZGlmeSBhbGwgdGhhdCBoYXMgYmVlbiB3cml0dGVuIGluIHRoZW9zb3BoaWNhbCAKYm9va3Mgb2YgdGhlIHNoYXBlIGFuZCBjb25zdGl0dXRpb24gb2YgdGhlIHBoeXNpY2FsIGF0b20sIGFuZCAKb2YgdGhlIHdvbmRlcmZ1bCBhbmQgb3JkZXJseSBhcnJhbmdlbWVudHMgYnkgd2hpY2ggaXQgaXMgCmdyb3VwZWQgaW50byB0aGUgdmFyaW91cyBjaGVtaWNhbCBtb2xlY3VsZXMgOyBhbGwgdGhpcyByZW1haW5zIAplbnRpcmVseSB1bmFmZmVjdGVkLiAKCk5vciBpcyBhbnkgY2hhbmdlIGludHJvZHVjZWQgYXMgcmVnYXJkcyB0aGUgdGhyZWUgb3V0LSAKcG91cmluZ3MgZnJvbSB0aGUgTG9nb3MsIGFuZCB0aGUgbWFydmVsbG91cyBmYWNpbGl0eSB3aXRoIAp3aGljaCB0aGUgbWF0dGVyIG9mIHRoZSB2YXJpb3VzIHBsYW5lcyBpcyBieSB0aGVtIG1vdWxkZWQgaW50byAKCgpmb3JtcyBmb3IgdGhlIHNlcnZpY2Ugb2YgdGhlIGV2b2x2aW5nIEhmZS4gQmF0IGlmIHdlIHdpc2ggdG8gCmhhdmUgYSByaWdodCB2aWV3IG9mIHRoZSByZWFIdGllcyB1bmRlcmx5aW5nIG1hbmlmZXN0YXRpb24gaW4gdGhpcyAKdW5pdmVyc2UsIHdlIG11c3QgdG8gYSBjb25zaWRlcmFibGUgZXh0ZW50IHJldmVyc2UgdGhlIG9yZGluYXJ5IApjb25jZXB0aW9uIGFzIHRvIHdoYXQgdGhpcyBtYXR0ZXIgZXNzZW50aWFsbHkgaXMuIEluc3RlYWQgb2YgCnRoaW5raW5nIG9mIGl0cyB1bHRpbWF0ZSBjb25zdGl0dWVudHMgYXMgc29saWQgc3BlY2tzIGZsb2F0aW5nIGluIAphdm9pZCwgd2UgbXVzdCByZWFsaXNlIHRoYXQgaXQgaXMgdGhlIGFwcGFyZW50IHZvaWQgaXRzZWxmIHdoaWNoIAppcyBzb2xpZCwgYW5kIHRoYXQgdGhlIHNwZWNrcyBhcmUgYnV0IGJ1YmJsZXMgb24gaXQuIFRoYXQgCmZhY3Qgb25jZSBncmFzcGVkLCBhbGwgdGhlIHJlc3QgcmVtYWlucyBhcyBiZWZvcmUuIFRoZSAKcmVsYXRpdmUgcG9zaXRpb24gb2Ygd2hhdCB3ZSBoYXZlIGhpdGhlcnRvIGNhbGxlZCBtYXR0ZXIgYW5kIApmb3JjZSBpcyBzdGlsbCBmb3IgdXMgdGhlIHNhbWUgYXMgZXZlciA7IGl0IGlzIG9ubHkgdGhhdCwgb24gCmNsb3NlciBleGFtaW5hdGlvbiwgYm90aCBvZiB0aGVzZSBjb25jZXB0aW9ucyBwcm92ZSB0byBiZSAKdmFyaWFudHMgb2YgZm9yY2UsIHRoZSBvbmUgZW5zb3VsaW5nIGNvbWJpbmF0aW9ucyBvZiB0aGUgCm90aGVyLCBhbmQgdGhlIHJlYWwgIiBtYXR0ZXIsIiBrb2lsb24sIGlzIHNlZW4gdG8gYmUgc29tZS0gCnRoaW5nIHdoaWNoIGhhcyBoaXRoZXJ0byBiZWVuIGFsdG9nZXRoZXIgb3V0c2lkZSBvdXIgc2NoZW1lIApvZiB0aG91Z2h0LiAKCkluIHZpZXcgb2YgdGhpcyBtYXJ2ZWxsb3VzIGRpc3RyaWJ1dGlvbiBvZiBIaW1zZWxmIGluIAoic3BhY2UsIiB0aGUgZmFtaWxpYXIgY29uY2VwdCBvZiB0aGUgInNhY3JpZmljZSBvZiB0aGUgTG9nb3MiIAp0YWtlcyBvbiBhIG5ldyBkZXB0aCBhbmQgc3BsZW5kb3VyOyB0aGlzIGlzIEhpcyAiZHlpbmcgaW4gCm1hdHRlciwiIEhpcyAicGVycGV0dWFsIHNhY3JpZmljZSwiIGFuZCBpdCBtYXkgYmUgdGhlIHZlcnkgCmdsb3J5IG9mIHRoZSBMT0dPUyB0aGF0IEhlIGNhbiBzYWNyaWZpY2UgSGltc2VsZiB0byB0aGUgCnV0dGVybW9zdCBieSB0aHVzIHBlcm1lYXRpbmcgYW5kIG1ha2luZyBIaW1zZWxmIG9uZSB3aXRoIAp0aGF0IHBvcnRpb24gb2Yga29pbG9uIHdoaWNoIEhlIGNob29zZXMgYXMgdGhlIGZpZWxkIG9mIEhpcyAKdW5pdmVyc2UuIAoKV2hhdCBrb2lsb24gaXMsIHdoYXQgaXRzIG9yaWdpbiwgd2hldGhlciBpdCBpcyBpdHNlbGYgY2hhbmdlZCAKYnkgdGhlIERpdmluZSBCcmVhdGggd2hpY2ggaXMgcG91cmVkIGludG8gaXQg4oCUIGRvZXMgIiBEYXJrIApTcGFjZSIgdGh1cyBiZWNvbWUgIkJyaWdodCBTcGFjZSIgYXQgdGhlIGJlZ2lubmluZyBvZiBhIAptYW5pZmVzdGF0aW9uID8g4oCUIHRoZXNlIGFyZSBxdWVzdGlvbnMgdG8gd2hpY2ggd2UgY2Fubm90IGF0IApwcmVzZW50IGV2ZW4gaW5kaWNhdGUgYW5zd2Vycy4gUGVyY2hhbmNlIGFuIGludGVsbGlnZW50IHN0dWR5IApvZiB0aGUgZ3JlYXQgU2NyaXB0dXJlcyBvZiB0aGUgd29ybGQgbWF5IHlpZWxkIHJlcGxpZXMuIAoKCkxvbmRvbiA6IAoKSm9obiBCYWxlLCBTb25zIGFuZCBEYW5pZWxzc29uLCBMdGQuLiAKCk94Zm9yZCBIb3VzZSwgCgo4My05MSwgR3JlYXQgVGl0Y2hmaWVpLmQgU3RyZWV0LCBPeGZvcmQgU3RyZWV0LCBXLiBpLiAKCgpCT1NUT04gUFVCTElDIExJQlJBUlkgCgoKMyA5OTk5IDA1Njc3IDE1OSAzIAoKCidcID7ilqDCqyAKCgp4XCrCqyrCqy4gCgoKXl4gViAuLiAKCgoqdiJe
Ask Leadbeater
sabato 1 gennaio 2000
[AL CORPUS] Occult Chemistry [2/2]
[AL CORPUS] Occult Chemistry [1/2]
XFwiXiAKCgpzICwgCgoKLl4gCgoKT0NDVUxUIENIRU1JU1RSWSAKCgpDbGFpcnZveWFudCBPYnNlcnZhdGlvbnMgb24gdGhlIApDaGVtaWNhbCBFbGVtZW50cyAKCgpCWSAKCgpBTk5JRSBCRVNBTlQsIHAudC5zLiAKCkFORCAKCkNIQVJMRVMgVy4gTEVBREJFQVRFUiAKCgpsbGV2aXNlZCBFZGl0aW9uIGVkaXRlZCBieSBBLiBQLiBTbE5ORVRUIAoKCkxvbmRvbiAKClRIRU9TT1BISUNBTCBQVUJMSVNISU5HIEhPVVNFIAoKMSwgVXBwZXIgV29idXJuIFBsYWNlLCBXLkMuIDEuIAoKMTkxOSAKCgpyLGYgCgoKYlxcXideIAoKClwgaSBpIDEgMeKAniAKCgpFRElUT1InUyBQUkVGQUNFLiAKCgpXaGVuIHVuZGVydGFraW5nIHRvIHByZXBhcmUgYSBuZXcgZWRpdGlvbiBvZiB0aGlzIGJvb2sgCkkgcmVjZWl2ZWQgcGVybWlzc2lvbiBmcm9tIHRoZSBhdXRob3JzIHRvICIgdGhyb3cgaXQgaW50byB0aGUgCmZvcm0gaW4gd2hpY2ggeW91IHRoaW5rIGl0IHdvdWxkIGJlIG1vc3QgdXNlZnVsIGF0IHRoZSBwcmVzZW50IAp0aW1lLiIgSXQgd2FzIGxlZnQgdG8gbXkgZGlzY3JldGlvbiwgIiBXaGF0IHRvIHVzZSBhbmQgd2hhdCB0byAKb21pdC4iIEkgaGF2ZSBub3QgZm91bmQgaXQgbmVjZXNzYXJ5IHRvIGF2YWlsIG15c2VsZiB0byBhbnkgY29uLSAKc2lkZXJhYmxlIGV4dGVudCBvZiB0aGlzIGxhdHRlciBwZXJtaXNzaW9uLiBCdXQgYXMgdGhlIGNvbnRlbnRzIG9mIAp0aGUgYm9vayB3ZXJlIG9yaWdpbmFsbHkgYXJyYW5nZWQgdGhlIHJlYWRlciB3YXMgaWxsLXByZXBhcmVkIHRvIAphcHByZWNpYXRlIHRoZSBpbXBvcnRhbmNlIG9mIHRoZSBsYXRlciByZXNlYXJjaCBmb3Igd2FudCBvZiBpbnRyby0gCmR1Y3RvcnkgbWF0dGVyIGV4cGxhaW5pbmcgaG93IGl0IGJlZ2FuLCBhbmQgaG93IHRoZSBlYXJseSAKcmVzZWFyY2ggbGVkIHVwIHRvIHRoZSBsYXRlciBpbnZlc3RpZ2F0aW9uLiBJIGhhdmUgdGhlcmVmb3JlIApjb250cmlidXRlZCBhbiBlbnRpcmVseSBuZXcgcHJlbGltaW5hcnkgY2hhcHRlciB3aGljaCB3aWxsLCBJIApob3BlLCBoZWxwIHRoZSByZWFkZXIgdG8gcmVhbGlzZSB0aGUgY3JlZGliaWxpdHkgb2YgdGhlIHJlc3VsdHMgCmF0dGFpbmVkIHdoZW4gdGhlIG1vbGVjdWxhciBmb3JtcyBhbmQgY29uc3RpdHV0aW9uIG9mIHRoZSAKbnVtZXJvdXMgYm9kaWVzIGV4YW1pbmVkIHdlcmUgZGVmaW5pdGVseSBvYnNlcnZlZC4gSSBoYXZlIG5vdCAKYXR0ZW1wdGVkIHRvIHJldmlzZSB0aGUgcmVjb3JkcyBvZiB0aGUgbGF0ZXIgcmVzZWFyY2ggaW4gd2hpY2ggSSAKaGFkIG5vIHBlcnNvbmFsIHNoYXJlLCBzbyBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgQ2hhcHRlciBJSUkgdG8gCnRoZSBlbmQgdGhlIGJvb2sgaW4gaXRzIHByZXNlbnQgZm9ybSBpcyBzaW1wbHkgYSByZXByaW50IG9mIAp0aGUgb3JpZ2luYWwgZWRpdGlvbiBleGNlcHQgZm9yIHRoZSBjb3JyZWN0aW9uIG9mIGEgZmV3IHRyaWZsaW5nIAptaXNwcmludHMuIAoKSSBoYXZlIHRodXMgZW5kZWF2b3VyZWQgdG8gYnJpbmcgaW50byBjbGVhciBwcm9taW5lbmNlIGF0IAp0aGUgb3V0c2V0IHRoZSBzY2llbnRpZmljIHZhbHVlIG9mIHRoZSBsaWdodCB0aGUgYm9vayBzaGVkcyBvbiB0aGUgCmNvbnN0aXR1dGlvbiBvZiBtYXR0ZXIuIFRoZSB3b3JsZCBvd2VzIGEgZGVidCB0byBzY2llbnRpZmljIG1lbiAKb2YgdGhlIG9yZGluYXJ5IHR5cGUgdGhhdCBjYW5ub3QgYmUgb3Zlci1lc3RpbWF0ZWQsIGJ1dCB0aG91Z2ggCnRoZXkgaGF2ZSBoaXRoZXJ0byBwcmVmZXJyZWQgdG8gcHJvZ3Jlc3MgZ3JhZHVhbGx5LCBmcm9tIHBvaW50IHRvIApwb2ludCwgZGlzbGlraW5nIGxlYXBzIGluIHRoZSBkYXJrLCB0aGUgbGVhcCBub3cgbWFkZSBpcyBvbmx5IGluIAp0aGUgZGFyayBmb3IgdGhvc2Ugd2hvIHdpbGwgbm90IHJlYWxpc2UgdGhhdCB0aGUgcHJvZ3Jlc3MgdG8gYmUgCmFjY29tcGxpc2hlZCBieSBtZWFucyBvZiBpbnN0cnVtZW50YWwgcmVzZWFyY2ggbXVzdCBzb29uZXIgb3IgCmxhdGVyIGJlIHN1cHBsZW1lbnRlZCBieSBzdWJ0bGVyIG1ldGhvZHMuIFBoeXNpY2FsIHNjaWVuY2UgaGFzIApyZWFjaGVkIHRoZSBjb25jZXB0aW9uIHRoYXQgdGhlIGF0b21zIG9mIHRoZSBib2RpZXMgaGl0aGVydG8gCmNhbGxlZCB0aGUgY2hlbWljYWwgZWxlbWVudHMgYXJlIGVhY2ggY29tcG9zZWQgb2YgbWlub3IgYXRvbXMuIAoKCklWIAoKSW5zdHJ1bWVudGFsIHJlc2VhcmNoIGNhbm5vdCBkZXRlcm1pbmUgYnkgaG93IG1hbnksIGluIGVhY2ggCmNhc2UuIE9jY3VsdCByZXNlYXJjaCBhc2NlcnRhaW5lZCB0aGUgYWN0dWFsIG51bWJlciBpbiBzb21lIApjYXNlcyBieSBkaXJlY3Qgb2JzZXJ2YXRpb24gYW5kIHRoZW4gZGlzY292ZXJlZCB0aGUgbGF3IApnb3Zlcm5pbmcgdGhlIG51bWJlcnMgaW4gYWxsIGNhc2VzLCBhbmQgdGhlIHJlbGF0aW9uIG9mIHRoZXNlIApudW1iZXJzIHRvIGF0b21pYyB3ZWlnaHRzLiBUaGUgbGF3IHRodXMgdW52ZWlsZWQgaXMgYSAKZGVtb25zdHJhdGlvbiBvZiB0aGUgYWNjdXJhY3kgb2YgdGhlIGZpcnN0IGRpcmVjdCBvYnNlcnZhdGlvbnMsIAphbmQgdGhpcyBwcmluY2lwbGUgb25jZSBlc3RhYmxpc2hlZCB0aGUgY3JlZGliaWxpdHkgb2YgYWNjb3VudHMgCm5vdyBnaXZlbiBhcyB0byB0aGUgYXJyYW5nZW1lbnQgb2YgbWlub3IgYXRvbXMgaW4gdGhlIAptb2xlY3VsZXMgb2YgdGhlIG51bWVyb3VzIGVsZW1lbnRzIGV4YW1pbmVkLCBzZWVtcyB0byBtZSAKYWR2YW5jZWQgdG8gYSBkZWdyZWUgYXBwcm94aW1hdG1nIHRvIHByb29mLiAKCkl0IHJlbWFpbnMgdG8gYmUgc2VlbiDigJQgbm90IGhvdyBmYXIsIGJ1dCByYXRoZXIgaG93IHNvb24gCnRoZSBzY2llbnRpZmljIHdvcmxkIGF0IGxhcmdlIHdpbGwgYWNjZXB0IHRoZSBjb25jbHVzaW9ucyBvZiB0aGlzIAp2b2x1bWUgYXMgYSBkZWZpbml0ZSBjb250cmlidXRpb24gdG8gc2NpZW5jZSwgYmxlbmRpbmcgdGhlIApzY2llbmNlIG9mIHRoZSBsYWJvcmF0b3J5IHdpdGggdGhhdCB2YXJpZXR5IHRoYXQgaGFzIGhpdGhlcnRvIApiZWVuIGNhbGxlZCBvY2N1bHQuIAoKCkNPTlRFTlRTLiAKCgpIQVBURVIgUEFHRSAKCkkuIOKAlCBBIFByZWxpbWluYXJ5IFN1cnZleSBpIAoKSUku4oCUIERldGFpbHMgb2YgdGhlIEVhcmx5IFJlc2VhcmNoIDcgCgpUaGUgUGxhdG9uaWMgU29saWRzIC4uLiAxNSAKCgpJSUkuIOKAlCBUaGUgTGF0ZXIgUmVzZWFyY2hlcyAKCgosLiBpOyAKCgpPQ0NVTFQgQ0hFTUlTVFJZLiAKCgpDSEFQVEVSIEkuIAoKQSBQUkVMSU1JTkFSWSBTVVJWRVkuIAoKVGhlIGRlZXAgaW50ZXJlc3QgYW5kIGltcG9ydGFuY2Ugb2YgdGhlIHJlc2VhcmNoIHdoaWNoIAp0aGlzIGJvb2sgZGVzY3JpYmVzIHdpbGwgYmVzdCBiZSBhcHByZWNpYXRlZCBpZiBpbnRyb2R1Y2VkIGJ5IAphbiBhY2NvdW50IG9mIHRoZSBjaXJjdW1zdGFuY2VzIG91dCBvZiB3aGljaCBpdCBhcm9zZS4gVGhlIApmaXJzdCBlZGl0aW9uLCBjb25zaXN0aW5nIG1haW5seSBvZiBhcnRpY2xlcyByZXByaW50ZWQgZnJvbSB0aGUgClRoZW9zb3BoaXN0LCBkZWFsdCBhdCBvbmNlIHdpdGggdGhlIGxhdGVyIHBoYXNlcyBvZiB0aGUgcmVzZWFyY2ggCmluIGEgd2F5IHdoaWNoLCB0aG91Z2ggaW50ZWxsaWdpYmxlIHRvIHRoZSBvY2N1bHQgc3R1ZGVudCwgbXVzdCAKaGF2ZSBiZWVuIHJhdGhlciBiZXdpbGRlcmluZyB0byB0aGUgb3JkaW5hcnkgcmVhZGVyLiBUaGVzZSAKbGF0ZXIgcGhhc2VzLCBob3dldmVyLCBlbmRvdyB0aGUgZWFybGllciByZXN1bHRzIHdpdGggYSBzaWduaS0gCmZpY2FuY2UgdGhhdCBpbiB0aGUgYmVnaW5uaW5nIGNvdWxkIG9ubHkgYmUgdmFndWVseSBjb25qZWN0dXJlZC4gCkkgYW0gdGhlIGJldHRlciBlbnRpdGxlZCB0byBwZXJmb3JtIHRoZSB0YXNrIHRoYXQgaGFzIGJlZW4gYXNzaWduZWQgCnRvIG1lIOKAlCB0aGF0IG9mIHByZXBhcmluZyB0aGUgcHJlc2VudCBlZGl0aW9uIOKAlCBieSByZWFzb24gb2YgdGhlIApmYWN0IHRoYXQgaXQgd2FzIGluIG15IHByZXNlbmNlIGFuZCBhdCBteSBpbnN0aWdhdGlvbiB0aGF0IHRoZSAKZmlyc3QgZWZmb3J0cyB3ZXJlIG1hZGUgdG8gcGVuZXRyYXRlIHRoZSBteXN0ZXJ5IHByZXZpb3VzbHkgCmVuc2hyb3VkaW5nIHRoZSB1bHRpbWF0ZSBtb2xlY3VsZSBvZiBtYXR0ZXIuIAoKSSByZW1lbWJlciB0aGUgb2NjYXNpb24gdml2aWRseS4gTXIuIExlYWRiZWF0ZXIgd2FzIHRoZW4gCnN0YXlpbmcgYXQgbXkgaG91c2UsIGFuZCBoaXMgY2xhaXJ2b3lhbnQgZmFjdWx0aWVzIHdlcmUgZnJlcXVlbnRseSAKZXhlcmNpc2VkIGZvciB0aGUgYmVuZWZpdCBvZiBteXNlbGYsIG15IHdpZmUgYW5kIHRoZSB0aGVvc29waGljYWwgCmZyaWVuZHMgYXJvdW5kIHVzLiBJIGhhZCBkaXNjb3ZlcmVkIHRoYXQgdGhlc2UgZmFjdWx0aWVzLCBleGVyY2lzZWQgCmluIHRoZSBhcHByb3ByaWF0ZSBkaXJlY3Rpb24sIHdlcmUgdWx0cmEtbWljcm9zY29waWMgaW4gdGhlaXIgcG93ZXIuIApJdCBvY2N1cnJlZCB0byBtZSBvbmNlIHRvIGFzayBNci4gTGVhZGJlYXRlciBpZiBoZSB0aG91Z2h0IGhlIApjb3VsZCBhY3R1YWxseSBzZWUgYSBtb2xlY3VsZSBvZiBwaHlzaWNhbCBtYXR0ZXIuIEhlIHdhcyBxdWl0ZSAKd2lsbGluZyB0byB0cnksIGFuZCBJIHN1Z2dlc3RlZCBhIG1vbGVjdWxlIG9mIGdvbGQgYXMgb25lIHdoaWNoIApoZSBtaWdodCB0cnkgdG8gb2JzZXJ2ZS4gSGUgbWFkZSB0aGUgYXBwcm9wcmlhdGUgZWZmb3J0LCBhbmQgCgoKZW1lcmdlZCBmcm9tIGl0IHNheWluZyB0aGUgbW9sZWN1bGUgaW4gcXVlc3Rpb24gd2FzIGZhciB0b28gCmVsYWJvcmF0ZSBhIHN0cnVjdHVyZSB0byBiZSBkZXNjcmliZWQuIEl0IGV2aWRlbnRseSBjb25zaXN0ZWQgb2YgCmFuIGVub3Jtb3VzIG51bWJlciBvZiBzb21lIHNtYWxsZXIgYXRvbXMsIHF1aXRlIHRvbyBtYW55IHRvIApjb3VudDsgcXVpdGUgdG9vIGNvbXBsaWNhdGVkIGluIHRoZWlyIGFycmFuZ2VtZW50IHRvIGJlIGNvbS0gCnByZWhlbmRlZC4gSXQgc3RydWNrIG1lIGF0IG9uY2UgdGhhdCB0aGlzIG1pZ2h0IGJlIGR1ZSB0byB0aGUgCmZhY3QgdGhhdCBnb2xkIHdhcyBhIGhlYXZ5IG1ldGFsIG9mIGhpZ2ggYXRvbWljIHdlaWdodCwgYW5kIAp0aGF0IG9ic2VydmF0aW9uIG1pZ2h0IGJlIG1vcmUgc3VjY2Vzc2Z1bCBpZiBkaXJlY3RlZCB0byBhIGJvZHkgCm9mIGxvdyBhdG9taWMgd2VpZ2h0LCBzbyBJIHN1Z2dlc3RlZCBhbiBhdG9tIG9mIGh5ZHJvZ2VuIGFzIApwb3NzaWJseSBtb3JlIG1hbmFnZWFibGUsIE1yLiBMZWFkYmVhdGVyIGFjY2VwdGVkIHRoZSBzdWdnZXMtIAp0aW9uIGFuZCB0cmllZCBhZ2Fpbi4gVGhpcyB0aW1lIGhlIGZvdW5kIHRoZSBhdG9tIG9mIGh5ZHJvZ2VuIAp0byBiZSBmYXIgc2ltcGxlciB0aGFuIHRoZSBvdGhlciwgc28gdGhhdCB0aGUgbWlub3IgYXRvbXMgCmNvbnN0aXRpaXRpbmcgdGhlIGh5ZHJvZ2VuIGF0b20gd2VyZSBjb3VudGFibGUuIFRoZXkgd2VyZSAKYXJyYW5nZWQgb24gYSBkZWZpbml0ZSBwbGFuLCB3aGljaCB3aWxsIGJlIHJlbmRlcmVkIGludGVsbGlnaWJsZSAKYnkgZGlhZ3JhbXMgbGF0ZXIgb24sIGFuZCB3ZXJlIGVpZ2h0ZWVuIGluIG51bWJlci4gCgpXZSBsaXR0bGUgcmVhbGl6ZWQgYXQgdGhlIG1vbWVudCB0aGUgZW5vcm1vdXMgc2lnbmlmaWNhbmNlIApvZiB0aGlzIGRpc2NvdmVyeSwgbWFkZSBpbiB0aGUgeWVhciAxODk1LCBsb25nIGJlZm9yZSB0aGUgZGlzY292ZXJ5IApvZiByYWRpdW0gZW5hYmxlZCBwaHlzaWNpc3RzIG9mIHRoZSBvcmRpbmFyeSB0eXBlIHRvIGltcHJvdmUgdGhlaXIgCmFjcXVhbml0YW5jZSB3aXRoIHRoZSAiIGVsZWN0cm9uLiIgV2hhdGV2ZXIgbmFtZSBpcyBnaXZlbiB0byAKdGhhdCBtaW51dGUgYm9keSBpdCBpcyByZWNvZ25pc2VkIG5vdyBieSBvcmRpbmFyeSBzY2llbmNlIGFzIHdlbGwgCmFzIGJ5IG9jY3VsdCBvYnNlcnZhdGlvbiwgYXMgdGhlIGZ1bmRhbWVudGFsIHVuaXQgb2YgcGh5c2ljYWwgCm1hdHRlci4gVG8gdGhhdCBleHRlbnQgb3JkaW5hcnkgc2NpZW5jZSBoYXMgb3ZlcnRha2VuIHRoZSBvY2N1bHQgCnJlc2VhcmNoIEkgYW0gZGVhbGluZyB3aXRoLCBidXQgdGhhdCByZXNlYXJjaCByYXBpZGx5IGNhcnJpZWQgdGhlIApvY2N1bHQgc3R1ZGVudCBpbnRvIHJlZ2lvbnMgb2Yga25vd2xlZGdlIHdoaXRoZXIsIGl0IGlzIHBlcmZlY3RseSAKY2VydGFpbiwgdGhlIG9yZGluYXJ5IHBoeXNpY2lzdCBtdXN0IGZvbGxvdyBoaW0gYXQgbm8gZGlzdGFudCAKZGF0ZS4gCgpUaGUgcmVzZWFyY2ggb25jZSBzdGFydGVkIGluIHRoZSB3YXkgSSBoYXZlIGRlc2NyaWJlZCB3YXMgCnNlZW4gdG8gYmUgaW50ZW5zZWx5IGludGVyZXN0aW5nLiBNcnMuIEJlc2FudCBhbG1vc3QgaW1tZWRpLSAKYXRlbHkgY28tb3BlcmF0ZWQgd2l0aCBNci4gTGVhZGJlYXRlciBpbiBpdHMgZnVydGhlciBwcm9ncmVzcy4gCkVuY291cmFnZWQgYnkgdGhlIHN1Y2Nlc3Mgd2l0aCBoeWRyb2dlbiwgdGhlIHR3byBpbXBvcnRhbnQgCmdhc2VzLCBveHlnZW4gYW5kIG5pdHJvZ2VuLCB3ZXJlIGV4YW1pbmVkLiBUaGV5IHByb3ZlZCB0byAKYmUgcmF0aGVyIG1vcmUgZGlmZmljdWx0IHRvIGRlYWwgd2l0aCB0aGFuIGh5ZHJvZ2VuIGJ1dCB3ZXJlIAptYW5hZ2VhYmxlLiBPeHlnZW4gd2FzIGZvdW5kIHRvIGNvbnNpc3Qgb2YgMjkwIG1pbm9yIGF0b21zIAphbmQgbml0cm9nZW4gb2YgMjYxLiBUaGVpciBncm91cGluZyB3aWxsIGJlIGRlc2NyaWJlZCBsYXRlciBvbi4gClRoZSBpbnRlcmVzdCBhbmQgaW1wb3J0YW5jZSBvZiB0aGUgd2hvbGUgc3ViamVjdCB3aWxsIGJlc3QgYmUgCmFwcHJlY2lhdGVkIGJ5IGEgcm91Z2ggaW5kaWNhdGlvbiBvZiB0aGUgcmVzdWx0cyBmaXJzdCBhdHRhaW5lZC4gClRoZSByZWFkZXIgd2lsbCB0aGVuIGhhdmUgbW9yZSBwYXRpZW5jZSBpbiBmb2xsb3dpbmcgdGhlIAppbnRyaWNhY2llcyBvZiB0aGUgbGF0ZXIgZGlzY292ZXJpZXMuIAoKVGhlIGZpZ3VyZXMganVzdCBxdW90ZWQgd2VyZSBzb29uIHBlcmNlaXZlZCB0byBoYXZlIGEgCnBvc3NpYmxlIHNpZ25pZmljYW5jZS4gVGhlIGF0b21pYyB3ZWlnaHQgb2Ygb3h5Z2VuIGlzIAoKCmNvbW1vbmx5IHRha2VuIGFzIGk2LiBUaGF0IGlzIHRvIHNheSwgYW4gYXRvbSBvZiBveHlnZW4gCmlzIHNpeHRlZW4gdGltZXMgaGVhdmllciB0aGFuIGFuIGF0b20gb2YgaHlkcm9nZW4uIEluIHRoaXMgCndheSwgYWxsIHRocm91Z2ggdGhlIHRhYmxlIG9mIGF0b21pYyB3ZWlnaHRzLCBoeWRyb2dlbiBpcyB0YWtlbiAKYXMgdW5pdHksIHdpdGhvdXQgYW55IGF0dGVtcHQgYmVpbmcgbWFkZSB0byBlc3RpbWF0ZSBpdHMgYWJzb2x1dGUgCndlaWdodC4gQnV0IG5vdyB3aXRoIHRoZSBhdG9tIG9mIGh5ZHJvZ2VuIGRpc3NlY3RlZCwgc28gdG8gCnNwZWFrLCBhbmQgZm91bmQgdG8gY29uc2lzdCBvZiBpOCBzb21ldGhpbmdzLCB3aGlsZSB0aGUgYXRvbSBvZiAKb3h5Z2VuIGNvbnNpc3RlZCBvZiAyOTAgb2YgdGhlIHNhbWUgdGhpbmdzLCB0aGUgc2l4dGVlbiB0byBvbmUgCnJlbGF0aW9uc2hpcCByZWFwcGVhcnMgOiAyOTAgZGl2aWRlZCBieSAxOCBnaXZlcyB1cyAxNiBhbmQgYSAKbWludXRlIGRlY2ltYWwgZnJhY3Rpb24uIEFnYWluIHRoZSBuaXRyb2dlbiBudW1iZXIgZGl2aWRlZCAKYnkgMTggZ2l2ZXMgdXMgMTQgYW5kIGEgbWludXRlIGZyYWN0aW9uIGFzIHRoZSByZXN1bHQsIGFuZCB0aGF0IGlzIAp0aGUgYWNjZXB0ZWQgYXRvbWljIHdlaWdodCBvZiBuaXRyb2dlbi4gVGhpcyBnYXZlIHVzIGEgZ2xpbXBzZSAKb2YgYSBwcmluY2lwbGUgdGhhdCBtaWdodCBydW4gYWxsIHRocm91Z2ggdGhlIHRhYmxlIG9mIGF0b21pYyAKd2VpZ2h0cy4gRm9yIHJlYXNvbnMgaGF2aW5nIHRvIGRvIHdpdGggb3RoZXIgd29yaywgaXQgd2FzIAppbXBvc3NpYmxlIGZvciB0aGUgYXV0aG9ycyBvZiB0aGlzIGJvb2sgdG8gY2Fycnkgb24gdGhlIHJlc2VhcmNoIApmdXJ0aGVyIGF0IHRoZSB0aW1lIGl0IHdhcyBiZWd1bi4gVGhlIHJlc3VsdHMgYWxyZWFkeSBza2V0Y2hlZCAKd2VyZSBwdWJsaXNoZWQgYXMgYW4gYXJ0aWNsZSBpbiB0aGUgbWFnYXppbmUgdGhlbiBjYWxsZWQgTHVjaWZlciwgCmluIE5vdmVtYmVyLCAxODk1LCBhbmQgcmVwcmludGVkIGFzIGEgc2VwYXJhdGUgcGFtcGhsZXQgYmVhcmluZyAKdGhlIHRpdGxlICIgT2NjdWx0IENoZW1pc3RyeSwiIGEgcGFtcGhsZXQgdGhlIHN1cnZpdmluZyBjb3BpZXMgb2YgCndoaWNoIHdpbGwgb25lIGRheSBiZSBhIHJlY29nbmlzZWQgdmluZGljYXRpb24gb2YgdGhlIG1ldGhvZCAKdGhhdCB3aWxsIGF0IHNvbWUgdGltZSBpbiB0aGUgZnV0dXJlIGJlIGdlbmVyYWxseSBhcHBsaWVkIHRvIHRoZSAKaW52ZXN0aWdhdGlvbiBvZiBOYXR1cmUncyBteXN0ZXJpZXMuIEZvciB0aGUgbGF0ZXIgcmVzZWFyY2ggCndoaWNoIHRoaXMgdm9sdW1lIGRlYWxzIHdpdGggZG9lcyBlc3RhYmxpc2ggdGhlIHByaW5jaXBsZSB3aXRoIAphIGZvcmNlIHRoYXQgY2FuIGhhcmRseSBiZSByZXNpc3RlZCBieSBhbnkgZmFpci1taW5kZWQgcmVhZGVyLiAKV2l0aCBwYXRpZW5jZSBhbmQgaW5kdXN0cnkg4oCUIHRoZSBhdXRob3JzIGJlaW5nIGFzc2lzdGVkIGluIHRoZSAKY291bnRpbmcgaW4gYSB3YXkgdGhhdCB3aWxsIGJlIGRlc2NyaWJlZCAoYW5kIHRoZSBtZXRob2QgYWRvcHRlZCAKaW52b2x2ZWQgYSBjaGVjayB1cG9uIHRoZSBhY2N1cmFjeSBvZiB0aGUgY291bnRpbmcpIOKAlCB0aGUgbWlub3IgCmF0b21zIG9mIGFsbW9zdCBhbGwgdGhlIGtub3duIGNoZW1pY2FsIGVsZW1lbnRzLCBhcyB0aGV5IGFyZSAKY29tbW9ubHkgY2FsbGVkLCB3ZXJlIGNvdW50ZWQgYW5kIGZvdW5kIHRvIGJlYXIgdGhlIHNhbWUgcmVsYS0gCnRpb24gdG8gdGhlaXIgYXRvbWljIHdlaWdodHMgYXMgaGFkIGJlZW4gc3VnZ2VzdGVkIGJ5IHRoZSBjYXNlcyBvZiAKb3h5Z2VuIGFuZCBuaXRyb2dlbi4gVGhpcyByZXN1bHQgdGhyb3dzIGJhY2sgY29tcGxldGUgcHJvb2YgCm9uIHRoZSBvcmlnaW5hbCBlc3RpbWF0ZSBvZiB0aGUgbnVtYmVyIG9mIG1pbm9yIGF0b21zIGluIApoeWRyb2dlbiwgYSBmaWd1cmUgd2hpY2ggb3JkaW5hcnkgcmVzZWFyY2ggaGFzIHNvIGZhciBlbnRpcmVseSAKZmFpbGVkIHRvIGRldGVybWluZS4gVGhlIGd1ZXNzZXMgaGF2ZSBiZWVuIHdpZGVseSB2YXJpb3VzLCBmcm9tIAp1bml0eSB0byBtYW55IGh1bmRyZWRzLCBidXQsIHVuYWNxdWFpbnRlZCB3aXRoIHRoZSBjbGFpcnZveWFudCAKbWV0aG9kLCB0aGUgb3JkaW5hcnkgcGh5c2ljaXN0IGhhcyBubyBtZWFucyBvZiByZWFjaGluZyB0aGUgCmFjdHVhbCBzdGF0ZSBvZiB0aGUgZmFjdHMuIAoKQmVmb3JlIGdvaW5nIG9uIHdpdGggdGhlIGRldGFpbHMgb2YgdGhlIGxhdGVyIHJlc2VhcmNoIHNvbWUgCnZlcnkgaW1wb3J0YW50IGRpc2NvdmVyaWVzIGFyaXNpbmcgZnJvbSB0aGUgZWFybHkgd29yayBtdXN0IGZpcnN0IApiZSBleHBsYWluZWQuIEFzIEkgaGF2ZSBhbHJlYWR5IHNhaWQgY2xhaXJ2b3lhbnQgZmFjdWx0eSBvZiB0aGUgCgoKYXBwcm9wcmlhdGUgb3JkZXIgZGlyZWN0ZWQgdG8gdGhlIG1pbnV0ZSBwaGVub21lbmEgb2YgTmF0dXJlIAppcyBwcmFjdGljYWxseSBpbmZpbml0ZSBpbiBpdHMgcmFuZ2UuIE5vdCBjb250ZW50IHdpdGggZXN0aW1hdGluZyAKdGhlIG51bWJlciBvZiBtaW5vciBhdG9tcyBpbiBwaHlzaWNhbCBtb2xlY3VsZXMsIHRoZSBhdXRob3JzIApwcm9jZWVkZWQgdG8gZXhhbWluZSB0aGUgbWlub3IgYXRvbXMgaW5kaXZpZHVhbGx5LiBUaGV5IHdlcmUgCmZvdW5kIHRvIGJlIHRoZW1zZWx2ZXMgZWxhYm9yYXRlbHkgY29tcGxpY2F0ZWQgc3RydWN0dXJlcyB3aGljaCwgCmluIHRoaXMgcHJlbGltaW5hcnkgc3VydmV5IG9mIHRoZSB3aG9sZSBzdWJqZWN0LCBJIHdpbGwgbm90IHN0b3AgCnRvIGV4cGxhaW4gKGZ1bGwgZXhwbGFuYXRpb24gd2lsbCBiZSBmb3VuZCBsYXRlciBvbikgYW5kIHRoZXkgYXJlIApjb21wb3NlZCBvZiBhdG9tcyBiZWxvbmdpbmcgdG8gYW4gdWx0cmEtcGh5c2ljYWwgcmVhbG0gb2YgCk5hdHVyZSB3aXRoIHdoaWNoIHRoZSBvY2N1bHRpc3QgaGFzIGxvbmcgYmVlbiBmYW1pbGlhciBhbmQgCmRlc2NyaWJlcyBhcyAiIHRoZSBBc3RyYWwgUGxhbmUuIiBTb21lIHJhdGhlciBwZWRhbnRpYyBjcml0aWNzIApoYXZlIGZvdW5kIGZhdWx0IHdpdGggdGhlIHRlcm0sIGFzIHRoZSAnJ3BsYW5lIiBpbiBxdWVzdGlvbiAKaXMgb2YgY291cnNlIHJlYWxseSBhIHNwaGVyZSBlbnRpcmVseSBzdXJyb3VuZGluZyB0aGUgcGh5c2ljYWwgCmdsb2JlLCBidXQgYXMgYWxsIG9jY3VsdGlzdHMgdW5kZXJzdGFuZCB0aGUgd29yZCwgIiBwbGFuZSAiIHNpbXBseSAKc2lnbmlmaWVzIGEgY29uZGl0aW9uIG9mIG5hdHVyZS4gRWFjaCBjb25kaXRpb24sIGFuZCB0aGVyZSBhcmUgCm1hbnkgbW9yZSB0aGFuIHRoZSB0d28gdW5kZXIgY29uc2lkZXJhdGlvbiwgYmxlbmRzIHdpdGggaXRzIApuZWlnaGJvdXIsIHZpYSBhdG9taWMgc3RydWN0dXJlLiBUaHVzIHRoZSBhdG9tcyBvZiB0aGUgQXN0cmFsIApwbGFuZSBpbiBjb21ibWF0aW9uIGdpdmUgcmlzZSB0byB0aGUgZmluZXN0IHZhcmlldHkgb2YgcGh5c2ljYWwgCm1hdHRlciwgdGhlIGV0aGVyIG9mIHNwYWNlLCB3aGljaCBpcyBub3QgaG9tb2dlbmVvdXMgYnV0IHJlYWxseSAKYXRvbWljIGluIGl0cyBjaGFyYWN0ZXIsIGFuZCB0aGUgbWludXRlIGF0b21zIG9mIHdoaWNoIHBoeXNpY2FsIAptb2xlY3VsZXMgYXJlIGNvbXBvc2VkIGFyZSBhdG9tcyBvZiBldGhlciwgIiBldGhlcmljIGF0b21zLCIgYXMgCndlIGhhdmUgbm93IGxlYXJuZWQgdG8gY2FsbCB0aGVtLiAKCk1hbnkgcGh5c2ljaXN0cywgdGhvdWdoIG5vdCBhbGwsIHdpbGwgcmVzZW50IHRoZSBpZGVhIG9mIHRyZWF0aW5nIAp0aGUgZXRoZXIgb2Ygc3BhY2UgYXMgYXRvbWljLiBCdXQgYXQgYWxsIGV2ZW50cyB0aGUgb2NjdWx0aXN0IGhhcyAKdGhlIHNhdGlzZmFjdGlvbiBvZiBrbm93aW5nIHRoYXQgdGhlIGdyZWF0IFJ1c3NpYW4gY2hlbWlzdCwgCk1lbmRlbGVlZiwgcHJlZmVycmVkIHRoZSBhdG9taWMgdGhlb3J5LiBJbiBTaXIgV2lsbGlhbSBUaWxkZW4ncyAKcmVjZW50IGJvb2sgZW50aXRsZWQgIiBDaGVtaWNhbCBEaXNjb3ZlcnkgYW5kIEludmVudGlvbiBpbiB0aGUgClR3ZW50aWV0aCBDZW50dXJ5LCIgSSByZWFkIHRoYXQgTWVuZGVsZWVmLCAiIGRpc3JlZ2FyZGluZyBjb24tIAp2ZW50aW9uYWwgdmlld15zLCIgc3VwcG9zZWQgdGhlIGV0aGVyIHRvIGhhdmUgYSBtb2xlY3VsYXIgb3IgCmF0b21pYyBzdHJ1Y3R1cmUsIGFuZCBpbiB0aW1lIGFsbCBwaHlzaWNpc3RzIG11c3QgY29tZSB0byByZWNvZy0gCm5pc2UgdGhhdCB0aGUgRWxlY3Ryb24gaXMgbm90LCBhcyBzbyBtYW55IHN1cHBvc2UgYXQgcHJlc2VudCwgYW4gCmF0b20gb2YgZWxlY3RyaWNpdHksIGJ1dCBhbiBhdG9tIG9mIGV0aGVyIGNhcnJ5aW5nIGEgZGVmaW5pdGUgdW5pdCAKY2hhcmdlIG9mIGVsZWN0cmljaXR5LiAKCkxvbmcgYmVmb3JlIHRoZSBkaXNjb3Zlcnkgb2YgcmFkaXVtIGxlZCB0byB0aGUgcmVjb2duaXRpb24gCm9mIHRoZSBlbGVjdHJvbiBhcyB0aGUgY29tbW9uIGNvbnN0aXR1ZW50IG9mIGFsbCB0aGUgYm9kaWVzIHByZS0gCnZpb3VzbHkgZGVzY3JpYmVkIGFzIGNoZW1pY2FsIGVsZW1lbnRzLCB0aGUgbWludXRlIHBhcnRpY2xlcyBvZiAKbWF0dGVyIGluIHF1ZXN0aW9uIGhhZCBiZWVuIGlkZW50aWZpZWQgd2l0aCB0aGUgY2F0aG9kZSByYXlzIApvYnNlcnZlZCBpbiBTaXIgV2lsbGlhbSBDcm9va2VzJyB2YWN1dW0gdHViZXMuIFdoZW4gYW4gCmVsZWN0cmljIGN1cnJlbnQgaXMgcGFzc2VkIHRocm91Z2ggYSB0dWJlIGZyb20gd2hpY2ggdGhlIGFpciAob3IgCm90aGVyIGdhcyBpdCBtYXkgY29udGFpbikgaGFzIGJlZW4gYWxtb3N0IGVudGlyZWx5IGV4aGF1c3RlZCwgYSAKCgpsdW1pbm91cyBnbG93IHBlcnZhZGVzIHRoZSB0dWJlIG1hbmlmZXN0bHkgZW1hbmF0aW5nIGZyb20gdGhlIApjYXRob2RlIG9yIG5lZ2F0aXZlIHBvbGUgb2YgdGhlIGNpcmN1aXQuIFRoaXMgZWZmZWN0IHdhcyBzdHVkaWVkIApieSBTaXIgV2lsbGlhbSBDcm9va2VzIHZlcnkgcHJvZm91bmRseS4gQW1vbmcgb3RoZXIgY2hhci0gCmFjdGVyaXN0aWNzIGl0IHdhcyBmb3VuZCB0aGF0LCBpZiBhIG1pbnV0ZSB3aW5kbWlsbCB3YXMgc2V0IHVwIGluIAp0aGUgdHViZSBiZWZvcmUgaXQgd2FzIGV4aGF1c3RlZCwgdGhlIGNhdGhvZGUgcmF5IGNhdXNlZCB0aGUgCnZhbmVzIHRvIHJldm9sdmUsIHRodXMgc3VnZ2VzdGluZyB0aGUgaWRlYSB0aGF0IHRoZXkgY29uc2lzdGVkIG9mIAphY3R1YWwgcGFydGljbGVzIGRyaXZlbiBhZ2FpbnN0IHRoZSB2YW5lcyA7IHRoZSByYXkgYmVpbmcgdGh1cyAKZXZpZGVudGx5IHNvbWV0aGluZyBtb3JlIHRoYW4gYSBtZXJlIGx1bWlub3VzIGVmZmVjdC4gSGVyZSAKd2FzIGEgbWVjaGFuaWNhbCBlbmVyZ3kgdG8gYmUgZXhwbGFpbmVkLCBhbmQgYXQgdGhlIGZpcnN0IGdsYW5jZSAKaXQgc2VlbWVkIGRpZmZpY3VsdCB0byByZWNvbmNpbGUgdGhlIGZhY3RzIG9ic2VydmVkIHdpdGggdGhlIGlkZWEgCmNyZWVwaW5nIGludG8gZmF2b3VyLCB0aGF0IHRoZSBwYXJ0aWNsZXMsIGFscmVhZHkgaW52ZXN0ZWQgd2l0aCB0aGUgCm5hbWUgImVsZWN0cm9uLCIgd2VyZSBhdG9tcyBvZiBlbGVjdHJpY2l0eSBwdXJlIGFuZCBzaW1wbGUuIApFbGVjdHJpY2l0eSB3YXMgZm91bmQsIG9yIGNlcnRhaW4gZW1pbmVudCBwaHlzaWNpc3RzIHRob3VnaHQgdGhleSAKbGlhZCBmb3VuZCwgdGhhdCBlbGVjdHJpY2l0eSBwZXIgc2UgaGFkIGluZXJ0aWEuIFNvIHRoZSB3aW5kbWlsbHMgCmluIHRoZSBDcm9va2VzJyB2YWN1dW0gdHViZXMgd2VyZSBzdXBwb3NlZCB0byBiZSBtb3ZlZCBieSAKdGhlIGltcGFjdCBvZiBlbGVjdHJpYyBhdG9tcy4gCgpUaGVuIGluIHRoZSBwcm9ncmVzcyBvZiBvcmRpbmFyeSByZXNlYXJjaCB0aGUgZGlzY292ZXJ5IG9mIApyYWRpdW0gYnkgTWFkYW1lIEN1cmllIGluIHRoZSB5ZWFyIDE5MDIgcHV0IGFuIGVudGlyZWx5IG5ldyAKZmFjZSB1cG9uIHRoZSBzdWJqZWN0IG9mIGVsZWN0cm9ucy4gVGhlIGJldGEgcGFydGljbGVzIGVtYW5hdGluZyAKZnJvbSByYWRpdW0gd2VyZSBzb29uIGlkZW50aWZpZWQgd2l0aCB0aGUgZWxlY3Ryb25zIG9mIHRoZSAKY2F0aG9kZSByYXkuIFRoZW4gZm9sbG93ZWQgdGhlIGRpc2NvdmVyeSB0aGF0IHRoZSBnYXMgaGVsaXVtLCAKcHJldmlvdXNseSB0cmVhdGVkIGFzIGEgc2VwYXJhdGUgZWxlbWVudCwgZXZvbHZlZCBpdHNlbGYgYXMgb25lIApjb25zZXF1ZW5jZSBvZiB0aGUgZGlzaW50ZWdyYXRpb24gb2YgcmFkaXVtLiBUcmFuc211dGF0aW9uLCAKdGlsbCB0aGVuIGxhdWdoZWQgYXQgYXMgYSBzdXBlcnN0aXRpb24gb2YgdGhlIGFsY2hlbWlzdCwgcGFzc2VkIApxdWlldGx5IGludG8gdGhlIHJlZ2lvbiBvZiBhY2NlcHRlZCBuYXR1cmFsIHBoZW5vbWVuYSwgYW5kIHRoaiAKY2hlbWljYWwgZWxlbWVudHMgd2VyZSBzZWVuIHRvIGJlIGJvZGllcyBidWlsdCB1cCBvZiBlbGVjdHJvbnMgCmluIHZhcnlpbmcgbnVtYmVyIGFuZCBwcm9iYWJseSBpbiB2YXJ5aW5nIGFycmFuZ2VtZW50cy4gU28gCmF0IGxhc3Qgb3JkaW5hcnkgc2NpZW5jZSBoYWQgcmVhY2hlZCBvbmUgaW1wb3J0YW50IHJlc3VsdCBvZiB0aGUgCm9jY3VsdCByZXNlYXJjaCBjYXJyaWVkIG9uIHNldmVuIHllYXJzIGVhcmxpZXIuIEl0IGhhcyBub3QgeWV0IApyZWFjaGVkIHRoZSBmaW5lciByZXN1bHRzIG9mIHRoZSBvY2N1bHQgcmVzZWFyY2gg4oCUIHRoZSBzdHJ1Y3R1cmUgb2YgCnRoZSBoeWRyb2dlbiBhdG9tIHdpdGggaXRzIGVpZ2h0ZWVuIGV0aGVyaWMgYXRvbXMgYW5kIHRoZSB3YXkgCmluIHdoaWNoIHRoZSBhdG9taWMgd2VpZ2h0cyBvZiBhbGwgZWxlbWVudHMgYXJlIGV4cGxhaW5lZCBieSB0aGUgCm51bWJlciBvZiBldGhlcmljIGF0b21zIGVudGVyaW5nIGludG8gdGhlaXIgY29uc3RpdHV0aW9uLiAKClRoZSBldGhlciBvZiBzcGFjZSwgdGhvdWdoIGRlZnlpbmcgaW5zdHJ1bWVudGFsIGV4YW1pbmF0aW9uLCAKY29tZXMgd2l0aGluIHNjb3BlIG9mIHRoZSBjbGFpcnZveWFudCBmYWN1bHR5LCBhbmQgcHJvZm91bmRseSAKaW50ZXJlc3RpbmcgZGlzY292ZXJpZXMgd2VyZSBtYWRlIGR1cmluZyB3aGF0IEkgaGF2ZSBjYWxsZWQgdGhlIAplYXJseSByZXNlYXJjaCBpbiBjb25uZXhpb24gd2l0aCB0aGF0IGJyYW5jaCBvZiB0aGUgaW5xdWlyeS4gCkV0aGVyaWMgYXRvbXMgY29tYmluZSB0byBmb3JtIG1vbGVjdWxlcyBpbiBtYW55IGRpZmZlcmVudCAKd2F5cywgYnV0IGNvbWJpbmF0aW9ucyBpbnZvbHZpbmcgZmV3ZXIgYXRvbXMgdGhhbiB0aGUgZWlnaHRlZW4gCgoKd2hpY2ggZ2l2ZSBuc2UgdG8gaHlkcm9nZW4sIG1ha2Ugbm8gaW1wcmVzc2lvbiBvbiB0aGUgcGh5c2ljYWwgCnNlbnNlcyBub3Igb24gcGh5c2ljYWwgaW5zdHJ1bWVudHMgb2YgcmVzZWFyY2guIFRoZXkgZ2l2ZSByaXNlIAp0byB2YXJpZXRpZXMgb2YgbW9sZWN1bGFyIGV0aGVyLCB0aGUgY29tcHJlaGVuc2lvbiBvZiB3aGljaCAKYmVnaW5zIHRvIElsbHVtaW5hdGUgcmVhbG1zIG9mIG5hdHVyYWwgbXlzdGVyeS0gYXMgeWV0IGVudGlyZWx5IAp1bnRyb2RkZW4gYnkgdGhlIG9yZGluYXJ5IHBoeXNpY2lzdC4gQ29tYmluYXRpb25zIGJlbG93IGk4IAppbiBudW1iZXIgZ2l2ZSByaXNlIHRvIHRocmVlIHZhcmlldGllcyBvZiBtb2xlY3VsYXIgZXRoZXIgdGhlIApmdW5jdGlvbnMgb2Ygd2hpY2ggd2hlbiB0aGV5IGNvbWUgdG8gYmUgbW9yZSBmdWxsdiBzdHVkaWVkIHdpbGwgCmNvbnN0aXR1dGUgYSBkZXBhcnRtZW50IG9mIG5hdHVyYWwga25vd2xlZGdlIG9uIHRoZSB0aHJlc2hvbGQgCm9mIHdoaWNoIHdlIGFscmVhZHkgc3RhbmQuIFNvbWUgZGF5IHdlIG1hdiBwZXJoYXBzIGJlIHByZS0gCnNlbnRlZCB3aXRoIGEgdm9sdW1lIG9uIE9jY3VsdCBQaHlzaWNzIGFzIGltcG9ydGFudCBpbiBpdHMgd2F5IAphcyB0aGUgcHJlc2VudCBkaXNzZXJ0YXRpb24gb24gT2NjdWx0IENoZW1pc3RyeS4gCgoKQlNvIAoKCjJCaiAKCgpvIApvIApvIApvIAoKCmVqIAoKCl4gCgoKU29pbCBvIAoKCkFeIAoKCkNIQVBURVIgSUkuIApERVRBSUxTIE9GIFRIRSBFQVJMWSBSRVNFQVJDSC4gCgpUaGUgYXJ0aWNsZSBkZXRhaWxpbmcgdGhlIHJlc3VsdHMgb2YgdGhlIHJlc2VhcmNoIGNhcnJpZWQgb24gaW4gCnRoZSB5ZWFyIDE4OTUgKHNlZSB0aGUgTm92ZW1iZXIgaXNzdWUgZm9yIHRoYXQgeWVhciBvZiB0aGUgCm1hZ2F6aW5lIHRoZW4gY2FsbGVkIEx1Y2lmZXIpLCBiZWdhbiB3aXRoIHNvbWUgZ2VuZXJhbCByZW1hcmtzIAphYm91dCB0aGUgY2xhaXJ2b3lhbnQgZmFjdWx0eSwgYWxyZWFkeSBkaXNjdXNzZWQgaW4gdGhlIHByZWNlZGluZyAKY2hhcHRlci4gVGhlIG9yaWdpbmFsIHJlY29yZCB0aGVuIGdvZXMgb24gYXMgZm9sbG93cyA6IOKAlCAKClRoZSBwaHlzaWNhbCB3b3JsZCBpcyByZWdhcmRlZCBhcyBiZWluZyBjb21wb3NlZCBvZiBiZXR3ZWVuIApzaXh0eSBhbmQgc2V2ZW50eSBjaGVtaWNhbCBlbGVtZW50cywgYWdncmVnYXRlZCBpbnRvIGFuIGluZmluaXRlIAp2YXJpZXR5IG9mIGNvbWJpbmF0aW9ucy4gVGhlc2UgY29tYmluYXRpb25zIGZhbGwgdW5kZXIgdGhlIAp0aHJlZSBtYWluIGhlYWRzIG9mIHNvbGlkcywgbGlxdWlkcyBhbmQgZ2FzZXMsIHRoZSByZWNvZ25pc2VkIApzdWJzdGF0ZXMgb2YgcGh5c2ljYWwgbWF0dGVyLCB3aXRoIHRoZSB0aGVvcmV0aWNhbCBldGhlciBzY2FyY2VseSAKYWRtaXR0ZWQgYXMgbWF0ZXJpYWwuIEV0aGVyLCB0byB0aGUgc2NpZW50aXN0LCBpcyBub3QgYSBzdWJzdGF0ZSAKb3IgZXZlbiBhIHN0YXRlIG9mIG1hdHRlciwgYnV0IGlzIGEgc29tZXRoaW5nIGFwYXJ0IGJ5IGl0c2VsZi4gSXQgCndvdWxkIG5vdCBiZSBhbGxvd2VkIHRoYXQgZ29sZCBjb3VsZCBiZSByYWlzZWQgdG8gdGhlIGV0aGVyaWMgCmNvbmRpdGlvbiBhcyBpdCBtaWdodCBiZSB0byB0aGUgbGlxdWlkIGFuZCBnYXNlb3VzIDsgd2hlcmVhcyB0aGUgCm9jY3VsdGlzdCBrbm93cyB0aGF0IHRoZSBnYXNlb3VzIGlzIHN1Y2NlZWRlZCBieSB0aGUgZXRoZXJpYywgYXMgCnRoZSBzb2xpZCBpcyBzdWNjZWVkZWQgYnkgdGhlIGxpcXVpZCwgYW5kIGhlIGtub3dzIGFsc28gdGhhdCB0aGUgCndvcmQgIiBldGhlciAiIGNvdmVycyBmb3VyIHN1YnN0YXRlcyBhcyBkaXN0aW5jdCBmcm9tIGVhY2ggb3RoZXIgCmFzIGFyZSB0aGUgc29saWRzLCBsaXF1aWRzIGFuZCBnYXNlcywgYW5kIHRoYXQgYWxsIGNoZW1pY2FsIGVsZW1lbnRzIApoYXZlIHRoZWlyIGZvdXIgZXRoZXJpYyBzdWJzdGF0ZXMsIHRoZSBoaWdoZXN0IGJlaW5nIGNvbW1vbiB0byAKYWxsLCBhbmQgY29uc2lzdGluZyBvZiB0aGUgdWx0aW1hdGUgcGh5c2ljYWwgYXRvbXMgdG8gd2hpY2ggYWxsIAplbGVtZW50cyBhcmUgZmluYWxseSByZWR1Y2libGUuIFRoZSBjaGVtaWNhbCBhdG9tIGlzIHJlZ2FyZGVkIAphcyB0aGUgdWx0aW1hdGUgcGFydGljbGUgb2YgYW55IGVsZW1lbnQsIGFuZCBpcyBzdXBwb3NlZCB0byBiZSAKaW5kaXZpc2libGUgYW5kIHVuYWJsZSB0byBleGlzdCBpbiBhIGZyZWUgc3RhdGUuIE1yLiBDcm9va2VzJyAKcmVzZWFyY2hlcyBoYXZlIGxlZCB0aGUgbW9yZSBhZHZhbmNlZCBjaGVtaXN0cyB0byByZWdhcmQgdGhlIAphdG9tcyBhcyBjb21wb3VuZCwgYXMgYSBtb3JlIG9yIGxlc3MgY29tcGxleCBhZ2dyZWdhdGlvbiBvZiAKcHJvdHlsZS4gCgpUbyBhc3RyYWwgdmlzaW9uIGV0aGVyIGlzIGEgdmlzaWJsZSB0aGluZywgYW5kIGlzIHNlZW4gcGVybWVhdGluZyAKYWxsIHN1YnN0YW5jZXMgYW5kIGVuY2lyY2xpbmcgZXZlcnkgcGFydGljbGUuIEEgIiBzb2xpZCAiIGJvZHkgaXMgCmEgYm9keSBjb21wb3NlZCBvZiBhIHZhc3QgbnVtYmVyIG9mIHBhcnRpY2xlcyBzdXNwZW5kZWQgaW4gCmV0aGVyLCBlYWNoIHZpYnJhdGluZyBiYWNrd2FyZHMgYW5kIGZvcndhcmRzIGluIGEgcGFydGljdWxhciBmaWVsZCAKYXQgYSBoaWdoIHJhdGUgb2YgdmVsb2NpdHkgOyB0aGUgcGFydGljbGVzIGFyZSBhdHRyYWN0ZWQgdG93YXJkcyAKZWFjaCBvdGhlciBtb3JlIHN0cm9uZ2x5IHRoYW4gdGhleSBhcmUgYXR0cmFjdGVkIGJ5IGV4dGVybmFsIAoKCjggCgoKaS4gbm50aSzigJ4gIsKwIiciXlBeJyInLSAnXifCsHM8PXIgZXhhbWluYXRpb24gc2hvd3MgdGhhdCB0aGUgZXRoZXIgCmRpZmZlciBuLnJUcsKwIiAiJyAiXiIiXideJ14gwrAnIF4nJyInXideIMKwJyBudW1lcm91cyEgZCAKdGhlbSBhbmQgYSAhID0nZiA3Xl5eJ15eIMKwJyAiJ8KrICInIiIiXiAnLWRpZXMgY29tcG9zaW5nIAoKLmV0TC10OzouO15eLS1eO15eXiAKCmNvbnNpc3RlZCBvZiB0YWtpbmcgd2hhdCBpcyBjYWxsZWQgTCBab1RvVEwgYW5kVHIgCi50dXAgdGltZSBhZnRlciB0aW1lLCB1bnRpbCB3aGF0IHByb3ZlZCB0byBiJyBoZSA/IAoKcGh5c2ljYWwgYXRvbSB3YXMgcmVhY2hlZCwgdGhlIGJyZWFraW5FXlRuICwxIOKEoiciIAoKaW4gdGhlIHByb2R1Y3Rpb24gb2YgYXN0cmEsOyBhbmQgbl50XlheXnJyciInIi0gCgpvZiBzdHVkLCwgYW5kIHRoZSBhY2NvbXBhbnlpbmcgZGlhZ3JhbSBKY1plXiBkdHZuIHRtIApoZSBkZXNjaWlwdGlvbiBnaXZlbiBieSB0aGUgaW52ZXN0aWdhdG9ycy1pcyBvbGZlcmVkIGFzIGEgc3ViciAKInRlLCBob3dldmVyIHBvb3IsIGZvciB0aGUgbGFja2luZyB2aXNpb24gb2YgdGhlIHJlYWRlcnMgVCAKCm1lIGdhcyBsZXZlbCBhcmUgcmVwcmVzZW50ZWQgdGhyZWUgY2hlbWluOi4hIGYgCgpodmRyb3BwbiAvSFwgXiByIGNuZW1pY2FsIGF0b21zLCBvbmUgb2YgCgp1eXVpb2dlbiAoSCksIG9uZSBvZiBveHlnZW4gKG4pIHIuTcKrIF5jIHUgCgrigKIgLCBeXl55Z3QtaWkgXnZeKSBvbmUgT3Igbml0cm9jZnBuIHQiSyFcIGledSAKCnVjY2Vzc2l2ZSBjaGFuZ2VzIHVuZGVyZ29uZSBieSBlYWNoIGNoZW1pY2o7IGF0b20gcmlzaG93bicgCgppbiB0aGUgY29tcGFydG1lbnRzIHZlcnRpY2FsbHkgYWJvdmUgaXQgdGhlIGxlZnQgaC4gLCAKCmFuYSBpcyBkcmF3biBvbiB2IG9uY2UgYUlIaXJeLCxycsK7LCDigKIqIOKAoiAuLCAnXl5paXZjdSBhLCAKClRoXiB1ICcgXl5eJ14wImdoIEl0IElTIHRoZSBzYW1lIHRocm9paWFob25mIAoKCm0gCgoKYm9keSBpcyByYWlzZWQgZnJvbSBvbmUgc2lpYnN0YXRlIHRvIHRoZSBvbmUgaW1tZWRpYXRlbHkgYWJvdmUgCml0LCBpdCBpcyBlbm9ybW91c2x5IG1hZ25pZmllZCBmb3IgdGhlIHB1cnBvc2Ugb2YgaW52ZXN0aWdhdGlvbiwgCmFuZCB0aGUgdWx0aW1hdGUgYXRvbSBvbiBFIGkgaXMgcmVwcmVzZW50ZWQgYnkgdGhlIGRvdCBhIG9uIHRoZSAKZ2FzZW91cyBsZXZlbC4gCgpUaGUgZmlyc3QgY2hlbWljYWwgYXRvbSBzZWxlY3RlZCBmb3IgdGhpcyBleGFtaW5hdGlvbiB3YXMgYW4gCmF0b20gb2YgaHlkcm9nZW4gKEgpLiBPbiBsb29raW5nIGNhcmVmdWxseSBhdCBpdCwgaXQgd2FzIHNlZW4gdG8gCmNvbnNpc3Qgb2Ygc2l4IHNtYWxsIGJvZGllcywgY29udGFpbmVkIGluIGFuIGVnZy1saWtlIGZvcm0uIEl0IApyb3RhdGVkIHdpdGggZ3JlYXQgcmFwaWRpdHkgb24gaXRzIG93amkgYXhpcywgdmlicmF0aW5nIGF0IHRoZSBzYW1lIAp0aW1lLCBhbmQgdGhlIGludGVybmFsIGJvZGllcyBwZXJmb3JtZWQgc2ltaWxhciBneXJhdGlvbnMuIFRoZSAKd2hvbGUgYXRvbSBzcGlucyBhbmQgcXVpdmVycywgYW5kIGhhcyB0byBiZSBzdGVhZGllZCBiZWZvcmUgZXhhY3QgCm9ic2VydmF0aW9uIGlzIHBvc3NpYmxlLiBUaGUgc2l4IGxpdHRsZSBib2RpZXMgYXJlIGFycmFuZ2VkIGluIHR3byAKc2V0cyBvZiB0aHJlZSwgZm9ybWluZyB0d28gdHJpYW5nbGVzIHRoYXQgYXJlIG5vdCBpbnRlcmNoYW5nZWFibGUsIApidXQgYXJlIHJlbGF0ZWQgdG8gZWFjaCBvdGhlciBhcyBvYmplY3QgYW5kIGltYWdlLiAoVGhlIGxpbmVzIGluIAp0aGUgZGlhZ3JhbSBvZiBpdCBvbiB0aGUgZ2FzZW91cyBzdWItcGxhbmUgYXJlIG5vdCBsaW5lcyBvZiBmb3JjZSwgCmJ1dCBzaG93IHRoZSB0d28gdHJpYW5nbGVzIDsgb24gYSBwbGFuZSBzdXJmYWNlIHRoZSBpbnRlcnBlbmV0cmEtIAp0aW9uIG9mIHRoZSB0cmlhbmdsZXMgY2Fubm90IGJlIGNsZWFybHkgaW5kaWNhdGVkLikgRnVydGhlciwgdGhlIApzaXggYm9kaWVzIGFyZSBub3QgYWxsIGFsaWtlIDsgdGhleSBlYWNoIGNvbnRhaW4gdGhyZWUgc21hbGxlciAKYm9kaWVzIOKAlCBlYWNoIG9mIHRoZXNlIGJlaW5nIGFuIHVsdGltYXRlIHBoeXNpY2FsIGF0b20g4oCUIGJ1dCBpbiAKdHdvIG9mIHRoZW0gdGhlIHRocmVlIGF0b21zIGFyZSBhcnJhbmdlZCBpbiBhIGxpbmUsIHdoaWxlIGluIHRoZSAKcmVtYWluaW5nIGZvdXIgdGhleSBhcmUgYXJyYW5nZWQgaW4gYSB0cmlhbmdsZS4gCgpUaGUgd2FsbCBvZiB0aGUgbGltaXRpbmcgc3BoZXJvaWQgaW4gd2hpY2ggdGhlIGJvZGllcyBhcmUgCmVuY2xvc2VkIGJlaW5nIGNvbXBvc2VkIG9mIHRoZSBtYXR0ZXIgb2YgdGhlIHRoaXJkLCBvciBnYXNlb3VzLCAKa2luZCwgZHJvcHMgYXdheSB3aGVuIHRoZSBnYXNlb3VzIGF0b20gaXMgcmFpc2VkIHRvIHRoZSBuZXh0IApsZXZlbCwgYW5kIHRoZSBzaXggYm9kaWVzIGFyZSBzZXQgZnJlZS4gVGhleSBhdCBvbmNlIHJlLWFycmFuZ2UgCnRoZW1zZWx2ZXMgaW4gdHdvIHRyaWFuZ2xlcywgZWFjaCBlbmNsb3NlZCBieSBhIGxpbWl0aW5nIHNwaGVyZSA7IAp0aGUgdHdvIG1hcmtlZCBiIGluIHRoZSBkaWFncmFtIHVuaXRlIHdpdGggb25lIG9mIHRob3NlIG1hcmtlZCAKLy8gdG8gZm9ybSBhIGJvZHkgd2hpY2ggc2hvd3MgYSBwb3NpdGl2ZSBjaGFyYWN0ZXIsIHRoZSByZW1haW5pbmcgCnRocmVlIGZvcm1pbmcgYSBzZWNvbmQgYm9keSBuZWdhdGl2ZSBpbiB0eXBlLiBUaGVzZSBmb3JtIHRoZSAKaHlkcm9nZW4gcGFydGljbGVzIG9mIHRoZSBsb3dlc3QgcGxhbmUgb2YgZXRoZXIsIG1hcmtlZCBFIDQg4oCUIApldGhlciA0IOKAlCBvbiB0aGUgZGlhZ3JhbS4gT24gcmFpc2luZyB0aGVzZSBmdXJ0aGVyLCB0aGV5IHVuZGVyZ28gCmFub3RoZXIgZGlzaW50ZWdyYXRpb24sIGxvc2luZyB0aGVpciBsaW1pdGluZyB3YWxscyA7IHRoZSBwb3NpdGl2ZSAKYm9keSBvZiBFNCwgb24gbG9zaW5nIGl0cyB3YWxsLCBiZWNvbWVzIHR3byBib2RpZXMsIG9uZSBjb24tIApzaXN0aW5nIG9mIHRoZSB0d28gcGFydGljbGVzLCBtYXJrZWQgNiwgZGlzdGluZ3Vpc2hhYmxlIGJ5IHRoZSAKbGluZWFyIGFycmFuZ2VtZW50IG9mIHRoZSBjb250YWluZWQgdWx0aW1hdGUgYXRvbXMsIGVuY2xvc2VkIGluIAphIHdhbGwsIGFuZCB0aGUgb3RoZXIgYmVpbmcgdGhlIHRoaXJkIGJvZHkgZW5jbG9zZWQgaW4gRSA0IGFuZCAKbm93IHNldCBmcmVlLiBUaGUgbmVnYXRpdmUgYm9keSBvZiBFIDQgc2ltaWxpYXJseSwgb24gbG9zaW5nIGl0cyAKd2FsbCwgYmVjb21lcyB0d28gYm9kaWVzLCBvbmUgY29uc2lzdGluZyBvZiB0aGUgdHdvIHBhcnRpY2xlcyAKbWFya2VkIGInICwgYW5kIHRoZSBzZWNvbmQgdGhlIHJlbWFpbmluZyBib2R5LCBiZWluZyBzZXQgZnJlZS4gClRoZXNlIGZyZWUgYm9kaWVzIGRvIG5vdCByZW1haW4gb24gRSAzIGJ1dCBwYXNzIGltbWVkaWF0ZWx5IHRvIAoKCmxPIAoKRSAyLCBsZWF2aW5nIHRoZSBwb3NpdGl2ZSBhbmQgbmVnYXRpdmUgYm9kaWVzLCBlYWNoIGNvbnRhaW5pbmcgCnR3byBwYXJ0aWNsZXMsIGFzIHRoZSByZXByZXNlbnRhdGl2ZXMgb2YgaHlkcm9nZW4gb24gRSAzLiBPbiAKdGFraW5nIHRoZXNlIGJvZGllcyBhIHN0ZXAgaGlnaGVyIHRoZWlyIHdhbGwgZGlzYXBwZWFycywgYW5kIHRoZSAKaW50ZXJuYWwgYm9kaWVzIGFyZSBzZXQgZnJlZSwgdGhvc2UgY29udGFpbmluZyB0aGUgYXRvbXMgYXJyYW5nZWQgCmxpbmVhbGx5IGJlaW5nIHBvc2l0aXZlLCBhbmQgdGhvc2Ugd2l0aCB0aGUgdHJpYW5ndWxhciBhcnJhbmdlbWVudCAKYmVpbmcgbmVnYXRpdmUuIFRoZXNlIHR3byBmb3JtcyByZXByZXNlbnQgaHlkcm9nZW4gb24gRSAyLCBidXQgCnNpbWlsYXIgYm9kaWVzIG9mIHRoaXMgc3RhdGUgb2YgbWF0dGVyIGFyZSBmb3VuZCBlbnRlcmluZyBpbnRvIApvdGhlciBjb21iaW5hdGlvbnMsIGFzIG1heSBiZSBzZWVuIGJ5IHJlZmVycmluZyB0byAvIG9uIEUgMiBvZiAKbml0cm9nZW4gKE4pLiBPbiByYWlzaW5nIHRoZXNlIGJvZGllcyB5ZXQgb25lIHN0ZXAgZnVydGhlciwgdGhlIApmYWxsaW5nIGF3YXkgb2YgdGhlIHdhbGxzIHNldHMgdGhlIGNvbnRhaW5lZCBhdG9tcyBmcmVlLCBhbmQgd2UgCnJlYWNoIHRoZSB1bHRpbWF0ZSBwaHlzaWNhbCBhdG9tLCB0aGUgbWF0dGVyIG9mIEUgaS4gVGhlIGRpc2luLSAKdGVncmF0aW9uIG9mIHRoaXMgc2V0cyBmcmVlIHBhcnRpY2xlcyBvZiBhc3RyYWwgbWF0dGVyLCBzbyB0aGF0IHdlIApoYXZlIHJlYWNoZWQgaW4gdGhpcyB0aGUgbGltaXQgb2YgcGh5c2ljYWwgbWF0dGVyLiBUaGUgVGhlby0gCnNvcGhpY2FsIHJlYWRlciB3aWxsIG5vdGljZSB3aXRoIGludGVyZXN0IHRoYXQgd2UgY2FuIHRodXMgb2JzZXJ2ZSAKc2V2ZW4gZGlzdGluY3Qgc3Vic3RhdGVzIG9mIHBoeXNpY2FsIG1hdHRlciwgYW5kIG5vIG1vcmUuIAoKVGhlIHVsdGltYXRlIGF0b20sIHdoaWNoIGlzIHRoZSBzYW1lIGluIGFsbCB0aGUgb2JzZXJ2ZWQgCmNhc2VzLCBpcyBhbiBleGNlZWRpbmdseSBjb21wbGV4IGJvZHksIGFuZCBvbmx5IGl0cyBtYWluIGNoYXJhYy0gCnRlcmlzdGljcyBhcmUgZ2l2ZW4gaW4gdGhlIGRpYWdyYW0uIEl0IGlzIGNvbXBvc2VkIGVudGlyZWx5IG9mIApzcGlyYWxzLCB0aGUgc3BpcmFsIGJlaW5nIGluIGl0cyB0dXJuIGNvbXBvc2VkIG9mIHNwaXJpbGxhZSwgYW5kIAp0aGVzZSBhZ2FpbiBvZiBtaW51dGVyIHNwaXJpbGxhZS4gQSBmYWlybHkgYWNjdXJhdGUgZHJhd2luZyBpcyAKZ2l2ZW4gaW4gQmFiYml0dCdzICIgUHJpbmNpcGxlcyBvZiBMaWdodCBhbmQgQ29sb3VyLCIgcC4gMTAyLiAKVGhlIGlsbHVzdHJhdGlvbnMgdGhlcmUgZ2l2ZW4gb2YgYXRvbWljIGNvbWJpbmF0aW9ucyBhcmUgZW50aXJlbCknXiAKd3JvbmcgYW5kIG1pc2xlYWRpbmcsIGJ1dCBpZiB0aGUgc3RvdmUtcGlwZSBydW4gdGhyb3VnaCB0aGUgCmNlbnRyZSBvZiB0aGUgc2luZ2xlIGF0b20gYmUgcmVtb3ZlZCwgdGhlIHBpY3R1cmUgbWF5IGJlIHRha2VuIAphcyBjb3JyZWN0LCBhbmQgd2lsbCBnaXZlIHNvbWUgaWRlYSBvZiB0aGUgY29tcGxleGl0eSBvZiB0aGlzIApmdW5kYW1lbnRhbCB1bml0IG9mIHRoZSBwaHlzaWNhbCB1bml2ZXJzZS4gCgpUdXJuaW5nIHRvIHRoZSBmb3JjZSBzaWRlIG9mIHRoZSBhdG9tIGFuZCBpdHMgY29tYmluYXRpb25zLCAKd2Ugb2JzZXJ2ZSB0aGF0IGZvcmNlIHBvdXJzIGluIHRoZSBoZWFydC1zaGFwZWQgZGVwcmVzc2lvbiBhdCAKdGhlIHRvcCBvZiB0aGUgYXRvbSwgYW5kIGlzc3VlcyBmcm9tIHRoZSBwb2ludCwgYW5kIGlzIGNoYW5nZWQgCmluIGNoYXJhY3RlciBieSBpdHMgcGFzc2FnZSA7IGZ1cnRoZXIsIGZvcmNlIHJ1c2hlcyB0aHJvdWdoIGV2ZXJ5IApzcGlyYWwgYW5kIGV2ZXJ5IHNwaXJpbGxhLCBhbmQgdGhlIGNoYW5naW5nIHNoYWRlcyBvZiBjb2xvdXIgdGhhdCAKZmxhc2ggb3V0IGZyb20gdGhlIHJhcGlkbHkgcmV2b2x2aW5nIGFuZCB2aWJyYXRpbmcgYXRvbSBkZXBlbmQgCm9uIHRoZSBzZXZlcmFsIGFjdGl2aXRpZXMgb2YgdGhlIHNwaXJhbHMgOyBzb21ldGltZXMgb25lLCBzb21lLSAKdGltZXMgYW5vdGhlciwgaXMgdGhyb3duIGludG8gbW9yZSBlbmVyZ2V0aWMgYWN0aW9uLCBhbmQgd2l0aCAKdGhlIGNoYW5nZSBvZiBhY3Rpdml0eSBmcm9tIG9uZSBzcGlyYWwgdG8gYW5vdGhlciB0aGUgY29sb3VyIApjaGFuZ2VzLiAKClRoZSBidWlsZGluZyBvZiBhIGdhc2VvdXMgYXRvbSBvZiBoeWRyb2dlbiBtYXkgYmUgdHJhY2VkIApkb3dud2FyZCBmcm9tIEUgaSwgYW5kLCBhcyBzdGF0ZWQgYWJvdmUsIHRoZSBsaW5lcyBnaXZlbiBpbiB0aGUgCmRpYWdyYW0gYXJlIGludGVuZGVkIHRvIGluZGljYXRlIHRoZSBwbGF5IG9mIHRoZSBmb3JjZXMgd2hpY2ggCgoKSUkgCgoKYnJpbmcgYWJvdXQgdGhlIHNldmVyYWwgY29tYmluYXRpb25zLiBTcGVha2luZyBnZW5lcmFsbHksIApwb3NpdGl2ZSBib2RpZXMgYXJlIG1hcmtlZCBieSB0aGVpciBjb250YWluZWQgYXRvbXMgc2V0dGluZyAKdGhlaXIgcG9pbnRzIHRvd2FyZHMgZWFjaCBvdGhlciBhbmQgdGhlIGNlbnRyZSBvZiB0aGVpciBjb20tIApibWF0aW9uLCBhbmQgcmVwZWxsaW5nIGVhY2ggb3RoZXIgb3V0d2FyZHM7IG5lZ2F0aXZlIGJvZGllcyAKYXJlIG1hcmtlZCBieSB0aGUgaGVhcnQtc2hhcGVkIGRlcHJlc3Npb25zIGJlaW5nIHR1cm5lZCBpbi0gCndhcmRzLCBhbmQgYnkgYSB0ZW5kZW5jeSB0byBtb3ZlIHRvd2FyZHMgZWFjaCBvdGhlciBpbnN0ZWFkIG9mIAphd2F5LiBFdmVyeSBjb21iaW5hdGlvbiBiZWdpbnMgYnkgYSB3ZWxsaW5nIHVwIG9mIGZvcmNlIGF0IAphIGNlbnRyZSwgd2hpY2ggaXMgdG8gZm9ybSB0aGUgY2VudHJlIG9mIHRoZSBjb21iaW5hdGlvbiA7IGluIHRoZSAKZmlyc3QgcG9zaXRpdmUgaHlkcm9nZW4gY29tYmluYXRpb24sIEUgMiwgYW4gYXRvbSByZXZvbHZpbmcgYXQgCnJpZ2h0IGFuZ2xlcyB0byB0aGUgcGxhbmUgb2YgdGhlIHBhcGVyIGFuZCBhbHNvIHJldm9sdmluZyBvbiBpdHMgCm93biBheGlzLCBmb3JtcyB0aGUgY2VudHJlLCBhbmQgZm9yY2UsIHJ1c2hpbmcgb3V0IGF0IGl0cyBsb3dlciAKcG9pbnQsIHJ1c2hlcyBpbiBhdCB0aGUgZGVwcmVzc2lvbnMgb2YgdHdvIG90aGVyIGF0b21zLCB3aGljaCAKdGhlbiBzZXQgdGhlbXNlbHZlcyB3aXRoIHRoZWlyIHBvaW50cyB0byB0aGUgY2VudHJlIDsgdGhlIGxpbmVzIGFyZSAKc2hvd24gaW4gKyBiLCByaWdodC1oYW5kIGZpZ3VyZS4gKFRoZSBsZWZ0LWhhbmQgZmlndXJlIGluZGljYXRlcyAKdGhlIHJldm9sdXRpb24gb2YgdGhlIGF0b21zIGVhY2ggYnkgaXRzZWxmLikgQXMgdGhpcyBhdG9taWMgdHJpYWQgCndoaXJscyByb3VuZCwgaXQgY2xlYXJzIGl0c2VsZiBhIHNwYWNlLCBwcmVzc2luZyBiYWNrIHRoZSB1bmRpZmZlci0gCmVudGlhdGVkIG1hdHRlciBvZiB0aGUgcGxhbmUsIGFuZCBtYWtpbmcgdG8gaXRzZWxmIGEgd2hpcmxpbmcgd2FsbCAKb2YgdGhpcyBtYXR0ZXIsIHRodXMgdGFraW5nIHRoZSBmaXJzdCBzdGVwIHRvd2FyZHMgYnVpbGRpbmcgdXAgdGhlIApjaGVtaWNhbCBoeWRyb2dlbiBhdG9tLiBBIG5lZ2F0aXZlIGF0b21pYyB0cmlhZCBpcyBzaW1pbGFybHkgCmZvcm1lZCwgdGhlIHRocmVlIGF0b21zIGJlaW5nIHN5bW1ldHJpY2FsbHkgYXJyYW5nZWQgcm91bmQgdGhlIApjZW50cmUgb2Ygb3V0LXdlbGxpbmcgZm9yY2UuIFRoZXNlIGF0b21pYyB0cmlhZHMgdGhlbiBjb21iaW5lLCAKdHdvIG9mIHRoZSBsaW5lYXIgYXJyYW5nZW1lbnQgYmVpbmcgYXR0cmFjdGVkIHRvIGVhY2ggb3RoZXIsIGFuZCAKdHdvIG9mIHRoZSB0cmlhbmd1bGFyLCBmb3JjZSBhZ2FpbiB3ZWxsaW5nIHVwIGFuZCBmb3JtaW5nIGEgY2VudHJlIAphbmQgYWN0aW5nIG9uIHRoZSB0cmlhZHMgYXMgb24gYSBzaW5nbGUgYXRvbSwgYW5kIGEgbGltaXRpbmcgd2FsbCAKYmVpbmcgYWdhaW4gZm9ybWVkIGFzIHRoZSBjb21iaW5hdGlvbiByZXZvbHZlcyByb3VuZCBpdHMgY2VudHJlLiAKVGhlIG5leHQgc3RhZ2UgaXMgcHJvZHVjZWQgYnkgZWFjaCBvZiB0aGVzZSBjb21iaW5hdGlvbnMgb24gCkUgMyBhdHRyYWN0aW5nIHRvIGl0c2VsZiBhIHRoaXJkIGF0b21pYyB0cmlhZCBvZiB0aGUgdHJpYW5ndWxhciB0eXBlIApmcm9tIEUyLCBieSB0aGUgc2V0dGluZyB1cCBvZiBhIG5ldyBjZW50cmUgb2YgdXAtd2VsbGluZyBmb3JjZSwgCmZvbGxvd2luZyB0aGUgbGluZXMgdHJhY2VkIGluIHRoZSBjb21iaW5hdGlvbnMgb2YgRTQuIFR3byBvZiAKdGhlc2UgdW5pdGluZywgYW5kIHRoZWlyIHRyaWFuZ2xlcyBpbnRlcnBlbmV0cmF0aW5nLCB0aGUgY2hlbWljYWwgCmF0b20gaXMgZm9ybWVkLCBhbmQgd2UgZmluZCBpdCB0byBjb250YWluIGluIGFsbCBlaWdodGVlbiB1bHRpbWF0ZSAKcGh5c2ljYWwgYXRvbXMuIAoKVGhlIG5leHQgc3Vic3RhbmNlIGludmVzdGlnYXRlZCB3YXMgb3h5Z2VuLCBhIGZhciBtb3JlIGNvbS0gCnBsaWNhdGVkIGFuZCBwdXp6bGluZyBib2R5IDsgdGhlIGRpZmZpY3VsdGllcyBvZiBvYnNlcnZhdGlvbiB3ZXJlIAp2ZXJ5IG11Y2ggaW5jcmVhc2VkIGJ5IHRoZSBleHRyYW9yZGluYXJ5IGFjdGl2aXR5IHNob3duIGJ5IHRoaXMgCmVsZW1lbnQgYW5kIHRoZSBkYXp6bGluZyBicmlsbGlhbmN5IG9mIHNvbWUgb2YgaXRzIGNvbnN0aXR1ZW50cy4gClRoZSBnYXNlb3VzIGF0b20gaXMgYW4gb3ZvaWQgYm9keSwgd2l0aGluIHdoaWNoIGEgc3BpcmFsbHktIApjb2lsZWQgc25ha2UtbGlrZSBib2R5IHJldm9sdmVzIGF0IGEgaGlnaCB2ZWxvY2l0eSwgZml2ZSBicmlsbGlhbnQgCnBvaW50cyBvZiBsaWdodCBzaGluaW5nIG9uIHRoZSBjb2lscy4gVGhlIHNuYWtlIGFwcGVhcnMgdG8gYmUgYSAKCgoxMiAKCnNvbGlkIHJvdW5kZWQgYm9keSwgYnV0IG9uIHJhaXNpbmcgdGhlIGF0b20gdG8gRSA0IHRoZSBzbmFrZSAKc3BodHMgbGVuZ3Rod2lzZSBpbnRvIHR3byB3YXZlZCBib2RpZXMsIGFuZCBpdCBpcyBzZWVuIHRoYXQgdGhlIAphcHBlYXJhbmNlIG9mIHNvbGlkaXR5IGlzIGR1ZSB0byB0aGUgZmFjdCB0aGF0IHRoZXNlIHNwaW4gcm91bmQgYSAKY29tbW9uIGF4aXMgaW4gb3Bwb3NpdGUgZGlyZWN0aW9ucywgYW5kIHNvIHByZXNlbnQgYSBjb250aW51b3VzIApzdXJmYWNlLCBhcyBhIHJpbmcgb2YgZmlyZSBjYW4gYmUgbWFkZSBieSB3aGlybGluZyBhIGxpZ2h0ZWQgc3RpY2suIApUaGUgYnJpbGxpYW50IGJvZGllcyBzZWVuIGluIHRoZSBhdG9tIGFyZSBvbiB0aGUgY3Jlc3RzIG9mIHRoZSAKd2F2ZXMgaW4gdGhlIHBvc2l0aXZlIHNuYWtlLCBhbmQgaW4gdGhlIGhvbGxvd3MgaW4gdGhlIG5lZ2F0aXZlIApvbmUgOyB0aGUgc25ha2UgaXRzZWxmIGNvbnNpc3RzIG9mIHNtYWxsIGJlYWQtbGlrZSBib2RpZXMsIGVsZXZlbiBvZiAKd2hpY2ggaW50ZXJwb3NlIGJldHdlZW4gdGhlIGxhcmdlciBicmlsbGlhbnQgc3BvdHMuIE9uIHJhaXNpbmcgCnRoZXNlIGJvZGllcyB0byBFIDMgdGhlIHNuYWtlcyBicmVhayB1cCwgZWFjaCBicmlnaHQgc3BvdCBjYXJyeWluZyAKd2l0aCBpdCBzaXggYmVhZHMgb24gb25lIHNpZGUgYW5kIGZpdmUgb24gdGhlIG90aGVyIDsgdGhlc2UgdHdpc3QgCmFuZCB3cml0aGUgYWJvdXQgc3RpbGwgd2l0aCB0aGUgc2FtZSBleHRyYW9yZGluYXJ5IGFjdGl2aXR5LCAKcmVtaW5kaW5nIG9uZSBvZiBmaXJlLWZsaWVzIHN0aW11bGF0ZWQgdG8gd2lsZCBneXJhdGlvbnMuIEl0IGNhbiAKYmVlbiBzZWVuIHRoYXQgdGhlIGxhcmdlciBicmlsbGlhbnQgYm9kaWVzIGVhY2ggZW5jbG9zZSBzZXZlbiB1bHRpLSAKbWF0ZSBhdG9tcywgd2hpbGUgdGhlIGJlYWRzIGVhY2ggZW5jbG9zZSB0d28uIChFYWNoIGJyaWdodCAKc3BvdCB3aXRoIGl0cyBlbGV2ZW4gYmVhZHMgaXMgZW5jbG9zZWQgaW4gYSB3YWxsLCBhY2NpZGVudGFsbHkgCm9taXR0ZWQgaW4gdGhlIGRpYWdyYW0uKSBPbiB0aGUgbmV4dCBzdGFnZSwgRSAyLCB0aGUgZnJhZ21lbnRzIApvZiB0aGUgc25ha2VzIGJyZWFrIHVwIGludG8gdGhlaXIgY29uc3RpdHVlbnQgcGFydHMgOyB0aGUgcG9zaXRpdmUgCmFuZCBuZWdhdGl2ZSBib2RpZXMsIG1hcmtlZCBkIGFuZCBkXCBzaG93aW5nIGEgZGlmZmVyZW5jZSBvZiAKYXJyYW5nZW1lbnQgb2YgdGhlIGF0b21zIGNvbnRhaW5lZCBpbiB0aGVtLiBUaGVzZSBhZ2FpbiBmaW5hbGx5IApkaXNpbnRlZ2F0ZSwgc2V0dGluZyBmcmVlIHRoZSB1bHRpbWF0ZSBwaHlzaWNhbCBhdG9tcywgaWRlbnRpY2FsIAp3aXRoIHRob3NlIG9idGFpbmVkIGZyb20gaHlkcm9nZW4uIFRoZSBudW1iZXIgb2YgdWx0aW1hdGUgCmF0b21zIGNvbnRhaW5lZCBpbiB0aGUgZ2FzZW91cyBhdG9tIG9mIG9neWdlbiBpcyAyOTAsIG1hZGUgdXAgCmFzIGZvbGxvd3MgOiDigJQgCgoyIGluIGVhY2ggYmVhZCwgb2Ygd2hpY2ggdGhlcmUgYXJlIG5vOyAKCjcgaW4gZWFjaCBicmlnaHQgc3BvdCwgb2Ygd2hpY2ggdGhlcmUgYXJlIDEwIDsgCgoyIHhpaW8gKyA3bz0gMjkwLiAKCldoZW4gdGhlIG9ic2VydmVycyBoYWQgd29ya2VkIG91dCB0aGlzLCB0aGV5IGNvbXBhcmVkIGl0IAp3aXRoIHRoZSBudW1iZXIgb2YgdWx0aW1hdGUgYXRvbXMgaW4gaHlkcm9nZW4gOiDigJQgCgoxOCkgMjkwIAoKCmk2LWlpICsgCgpUaGUgcmVzcGVjdGl2ZSBudW1iZXIgb2YgdWx0aW1hdGUgYXRvbXMgY29udGFpbmVkIGluIGEgCmNoZW1pY2FsIGF0b20gb2YgdGhlc2UgdHdvIGJvZGllcyBhcmUgdGh1cyBzZWVuIHRvIGNsb3NlbHkgCmNvcnJlc3BvbmQgd2l0aCB0aGVpciBhY2NlcHRlZCB3ZWlnaHQtbnVtYmVycy4gCgpJdCBtYXkgYmUgc2FpZCBpbiBwYXNzaW5nIHRoYXQgYSBjaGVtaWNhbCBhdG9tIG9mIG96b25lIAphcHBlYXJzIGFzIGFuIG9ibGF0ZSBzcGhlcm9pZCwgd2l0aCB0aGUgY29udGFpbmVkIHNwaXJhbCBtdWNoIApjb21wcmVzc2VkIGFuZCB3aWRlbmVkIGluIHRoZSBjZW50cmUgOyB0aGUgc3BpcmFsIGNvbnNpc3RzIG9mIAp0aHJlZSBzbmFrZXMsIG9uZSBwb3NpdGl2ZSBhbmQgdHdvIG5lZ2F0aXZlLCBmb3JtZWQgaW4gYSBzaW5nbGUgCgoKMTMgCgpyZXZvbHZpbmcgYm9keS4gT24gcmFpc2luZyB0aGUgY2hlbWljYWwgYXRvbSB0byB0aGUgbmV4dCBwbGFuZSwgCnRoZSBzbmFrZSBkaXZpZGVzIGludG8gdGhyZWUsIGVhY2ggYmVpbmcgZW5jbG9zZWQgaW4gaXRzIG93biBlZ2cuIApUaGUgY2hlbWljYWwgYXRvbSBvZiBuaXRyb2dlbiB3YXMgdGhlIHRoaXJkIHNlbGVjdGVkIGJ5IAp0aGUgc3R1ZGVudHMgZm9yIGV4YW1pbmF0aW9uLCBhcyBpdCBzZWVtZWQgY29tcGFyYXRpdmVseSBxdWlldCBpbiAKY29udHJhc3Qgd2l0aCB0aGUgZXZlci1leGNpdGVkIG94eWdlbi4gSXQgcHJvdmVkLCBob3dldmVyLCB0byBiZSAKdGhlIG1vc3QgY29uaXBsaWNhdGVkIG9mIGFsbCBpbiBpdHMgaW50ZXJuYWwgYXJyYW5nZW1lbnRzLCBhbmQgaXRzIApxdWlldCB3YXMgdGhlcmVmb3JlIGEgbGl0dGxlIGRlY2VwdGl2ZS4gTW9zdCBwcm9taW5lbnQgd2FzIHRoZSAKYmFsbG9vbi1zaGFwZWQgYm9keSBpbiB0aGUgbWlkZGxlLCB3aXRoIHNpeCBzbWFsbGVyIGJvZGllcyBpbiAKdHdvIGhvcml6b250YWwgcm93cyBhbmQgb25lIGxhcmdlIGVnZy1zaGFwZWQgb25lIGluIHRoZSBtaWRzdCwgCmNvbnRhaW5lZCBpbiBpdC4gU29tZSBjaGVtaWNhbCBhdG9tcyB3ZXJlIHNlZW4gaW4gd2hpY2ggdGhlIAppbnRlcm5hbCBhcnJhbmdlbWVudCBvZiB0aGVzZSBjb250YWluZWQgYm9kaWVzIHdhcyBjaGFuZ2VkIGFuZCAKdGhlIHR3byBob3Jpem9udGFsIHJvd3MgYmVjYW1lIHZlcnRpY2FsIDsgdGhpcyBjaGFuZ2Ugc2VlbWVkIAp0byBiZSBjb25uZWN0ZWQgd2l0aCBhIGdyZWF0ZXIgYWN0aXZpdHkgb2YgdGhlIHdob2xlIGJvZHksIGJ1dCB0aGUgCm9ic2VydmF0aW9ucyBvbiB0aGlzIGhlYWQgYXJlIHRvbyBpbmNvbXBsZXRlIHRvIGJlIHJlbGlhYmxlLiBUaGUgCmJhbGxvb24tc2hhcGVkIGJvZHkgaXMgcG9zaXRpdmUsIGFuZCBpcyBhcHBhcmVudGx5IGRyYXduIGRvd24tIAp3YXJkcyB0b3dhcmRzIHRoZSBuZWdhdGl2ZSBlZ2ctc2hhcGVkIGJvZHkgYmVsb3cgaXQsIGNvbnRhaW5pbmcgCnNldmVuIHNtYWxsZXIgcGFydGljbGVzLiBJbiBhZGRpdGlvbiB0byB0aGVzZSBsYXJnZSBib2RpZXMsIGZvdXIgCnNtYWxsIG9uZXMgYXJlIHNlZW4sIHR3byBwb3NpdGl2ZSBhbmQgdHdvIG5lZ2F0aXZlLCB0aGUgcG9zaXRpdmUgCmNvbnRhaW5pbmcgZml2ZSBhbmQgdGhlIG5lZ2F0aXZlIGZvdXIgbWludXRlciBzcG90cy4gT24gcmFpc2luZyAKdGhlIGdhc2VvdXMgYXRvbSB0byBFIDQsIHRoZSBmYWxsaW5nIGF3YXkgb2YgdGhlIHdhbGwgc2V0cyBmcmVlIHRoZSAKc2l4IGNvbnRhaW5lZCBib2RpZXMsIGFuZCBib3RoIHRoZSBiYWxsb29uIGFuZCB0aGUgZWdnIHJvdW5kIAp0aGVtc2VsdmVzLCBhcHBhcmVudGx5IHdpdGggdGhlIHJlbW92YWwgb2YgdGhlaXIgcHJvcGlucXVpdHksIGFzIAp0aG91Z2ggdGhleSBoYWQgZXhlcmNpc2VkIG92ZXIgZWFjaCBvdGhlciBzb21lIGF0dHJhY3RpdmUgCmluZmx1ZW5jZS4gVGhlIHNtYWxsZXIgYm9kaWVzIHdpdGhpbiB0aGUgZWdnIOKAlCBtYXJrZWQgcSBvbiAKRSA0IOKAlCBhcmUgbm90IG9uIG9uZSBwbGFuZSwgYW5kIHRob3NlIHdpdGhpbiBuIGFuZCBvIGZvcm0gCnJlc3BlY3RpdmVseSBzcXVhcmUtYmFzZWQgYW5kIHRyaWFuZ3VsYXItYmFzZWQgcHlyYW1pZHMuIE9uIApyYWlzaW5nIGFsbCB0aGVzZSBib2RpZXMgdG8gRSAzIHdlIGZpbmQgdGhlIHdhbGxzIGZhbGwgYXdheSBhcyAKdXN1YWwsIGFuZCB0aGUgY29udGVudHMgb2YgZWFjaCAiIGNlbGwgIiBhcmUgc2V0IGZyZWUgOiAvPiBvZiBFIDQgCmNvbnRhaW5zIHNpeCBzbWFsbCBib2RpZXMgbWFya2VkIGssIGFuZCB0aGVzZSBhcmUgc2hvd24gaW4gayBvZiAKRSAzLCBhcyBjb250YWluaW5nIGVhY2ggc2V2ZW4gbGl0dGxlIGJvZGllcyDigJQgbWFya2VkIGMg4oCUIGVhY2ggb2YgCndoaWNoIGhhcyB3aXRoaW4gaXQgdHdvIHVsdGltYXRlIGF0b21zIDsgdGhlIGxvbmcgZm9ybSBvZiBeIEUgNCAK4oCUIG1hcmtlZCAvIOKAlCBhcHBlYXJzIGFzIHRoZSBsb25nIGZvcm0gL29uIEUgMywgYW5kIHRoaXMgaGFzIAp0aHJlZSBwYWlycyBvZiBzbWFsbGVyIGJvZGllcyB3aXRoaW4gaXQsLycsIF4gYW5kIC87LCBjb250YWluaW5nIApyZXNwZWN0aXZlbHkgdGhyZWUsIGZvdXIgYW5kIHNpeCB1bHRpbWF0ZSBhdG9tcyA7IF4gb2YgRSA0LCB3aXRoIGl0cyAKc2V2ZW4gY29udGFpbmVkIHBhcnRpY2xlcywgOzsvLCBoYXMgdGhyZWUgcGFydGljbGVzIG0gb24gRSAzLCBlYWNoIApzaG93aW5nIHRocmVlIHVsdGltYXRlIGF0b21zIHdpdGhpbiB0aGVtIDsgZSBmcm9tIG4gb2YgRSA0IApiZWNvbWVzIC8gb2YgRSAzLCB3aXRoIGNvbnRhaW5lZCBib2RpZXMsIGUsIHNob3dpbmcgdHdvIHVsdGltYXRlIAphdG9tcyBpbiBlYWNoIDsgd2hpbGUgZScgZnJvbSAwIG9mIEUgNCBiZWNvbWVzIGogb2YgRSAzLCBlYWNoIApoYXZpbmcgdGhyZWUgc21hbGxlciBib2RpZXMgd2l0aGluIGl0LCBlJywgd2l0aCB0d28gdWx0aW1hdGUgYXRvbXMgCgoKMiArIAoKdHQgCgo+PiAKCjMgCgoyICsgCgo+PiAKCj4+IAoKNCAKCjIgKyAKCj47IAoKPj4gCgo0IAoKMTQgCgppbiBlYWNoLiBPbiBFIDIsIHRoZSBhcnJhbmdlbWVudCBvZiB0aGVzZSB1bHRpbWF0ZSBhdG9tcyBpcyAKc2hvd24sIGFuZCB0aGUgcGFpcnMvJywgZyBhbmQgaCBhcmUgc2VlbiB3aXRoIHRoZSBobmVzIG9mIGZvcmNlIAppbmRpY2F0ZWQgOyB0aGUgdHJpYWRzIGluIC8g4oCUIGZyb20gaW4gb2YgRSAzIOKAlCBhcmUgc2ltaWxhcmx5IHNob3duLCAKYW5kIHRoZSBkdWFkcyBpbiBlIGFuZCBlJyDigJQgZnJvbSBpIGFuZCBqIG9mIEUgMyDigJQgYXJlIGdpdmVuIGluIHRoZSAKc2FtZSB3YXkuIFdoZW4gYWxsIHRoZXNlIGJvZGllcyBhcmUgcmFpc2VkIHRvIEUgaSwgdGhlIHVsdGltYXRlIApwaHlzaWNhbCBhdG9tcyBhcmUgc2V0IGZyZWUsIGlkZW50aWNhbCwgb2YgY291cnNlLCB3aXRoIHRoYXQgcHJlLSAKdmlvdXNseSBkZXNjcmliZWQuIFJlY2tvbmluZyB1cCB0aGUgbnVtYmVyIG9mIHVsdGltYXRlIApwaHlzaWNhbCBhdG9tcyBpbiBhIGNoZW1pY2FsIGF0b20gb2Ygbml0cm9nZW4gd2UgZmluZCB0aGV5IAphbW91bnQgdG8gMjYxLCB0aHVzIGRpdmlkZWQgOiDigJQgCgo2MiArIGJvZGllcyB3aXRoIDIgdWx0aW1hdGUgYXRvbXMsIDYyIHggMiA9IDEyNCAKMjQgLSDigJ4g4oCeIDIg4oCeIOKAniAyNCBYIDIgOj0gNDggCgoyMSAtIOKAniDigJ4gMyAsZiAsZiAyMXgzPSA2MyAKCjJ4Mz02IAoKTSDigJ4gMng0PTggCgrigJ4gMng2PTEyIAoKMjYxIAoKVGhpcyBhZ2FpbiBhcHByb2FjaGVzIGNsb3NlbHkgdGhlIHdlaWdodC1udW1iZXIgYXNzaWduZWQgdG8gCm5pdHJvZ2VuIDog4oCUIAoKMTgpIDI2MSAKCjE0KjQ0ICsgCgpUaGlzIGlzIGludGVyZXN0aW5nIGFzIGNoZWNraW5nIHRoZSBvYnNlcnZhdGlvbnMsIGZvciB3ZWlnaHQtIApudW1iZXJzIGFyZSBhcnJpdmVkIGF0IGluIHNvIHZlcnkgZGlmZmVyZW50IGEgZmFzaGlvbiwgYW5kIAplc3BlY2lhbGx5IGluIHRoZSBjYXNlIG9mIG5pdHJvZ2VuIHRoZSBhcHByb3hpbWF0aW9uIGlzIG5vdGUtIAp3b3J0aHksIGZyb20gdGhlIGNvbXBsZXhpdHkgb2YgdGhlIGJvZGllcyB3aGljaCB5aWVsZCB0aGUgCm51bWJlciBvbiBhbmFseXNpcy4gCgpTb21lIG90aGVyIG9ic2VydmF0aW9ucyB3ZXJlIG1hZGUgd2hpY2ggd2VudCB0byBzaG93IHRoYXQgCmFzIHdlaWdodC1udW1iZXJzIGluY3JlYXNlZCwgdGhlcmUgd2FzIGEgY29ycmVzcG9uZGluZyBpbmNyZWFzZSAKaW4gdGhlIG51bWJlciBvZiBib2RpZXMgZGlzY2VybmVkIHdpdGhpbiB0aGUgY2hlbWljYWwgYXRvbSA7IAp0aHVzLCBnb2xkIHNob3dlZCBmb3J0eS1zZXZlbiBjb250YWluZWQgYm9kaWVzIDsgYnV0IHRoZXNlIApvYnNlcnZhdGlvbnMgbmVlZCByZXBldGl0aW9uIGFuZCBjaGVja2luZy4gSW52ZXN0aWdhdGlvbiBvZiBhIAptb2xlY3VsZSBvZiB3YXRlciByZXZlYWxlZCB0aGUgcHJlc2VuY2Ugb2YgdHdlbHZlIGJvZGllcyBmcm9tIApoeWRyb2dlbiBhbmQgdGhlIGNoYXJhY3RlcmlzdGljIHNuYWtlIG9mIG94eWdlbiwgdGhlIGVuY2lyY2xpbmcgCndhbGxzIG9mIHRoZSBjaGVtaWNhbCBhdG9tcyBiZWluZyBicm9rZW4gYXdheS4gQnV0IGhlcmUgYWdhaW4sIApmdXJ0aGVyIG9ic2VydmF0aW9ucyBhcmUgbmVjZXNzYXJ5IHRvIHN1YnN0YW50aWF0ZSBkZXRhaWxzLiBUaGUgCnByZXNlbnQgcGFwZXIgaXMgb25seSBvZmZlcmVkIGFzIGEgc3VnZ2VzdGlvbiBvZiBhbiBpbnZpdGluZyBsaW5lIApvZiByZXNlYXJjaCwgcHJvbWlzaW5nIGludGVyZXN0aW5nIHJlc3VsdHMgb2YgYSBzY2llbnRpZmljIGNoYXJhY3RlciA7IAp0aGUgb2JzZXJ2YXRpb25zIHJlY29yZGVkIGhhdmUgYmVlbiByZXBlYXRlZCBzZXZlcmFsIHRpbWVzIGFuZCAKYXJlIG5vdCB0aGUgd29yayBvZiBhIHNpbmdsZSBpbnZlc3RpZ2F0b3IsIGFuZCB0aGV5IGFyZSBiZWxpZXZlZCB0byAKYmUgY29ycmVjdCBzbyBmYXIgYXMgdGhleSBnby4gCgoKMTUgCgoKVEhFIFBMQVRPTklDIFNPTElEUy4gCgpTb21lIG9mIG91ciByZWFkZXJzIG1heSBiZSBnbGFkIHRvIGhhdmUgYSBkcmF3aW5nIG9mIHRoZSAKUGxhdG9uaWMgc29saWRzLCBzaW5jZSB0aGV5IHBsYXkgc28gbGFyZ2UgYSBwYXJ0IGluIHRoZSBidWlsZGluZyB1cCAKb2YgZWxlbWVudHMuIFRoZSByZWd1bGFyIHNvbGlkcyBhcmUgZml2ZSwgYW5kIGZpdmUgb25seSA7IGluIGVhY2ggOiAKKGkpIFRoZSBsaW5lcyBhcmUgZXF1YWwuIAoKKDIpIFRoZSBhbmdsZXMgYXJlIGVxdWFsLiAKCigzKSBUaGUgc3VyZmFjZXMgYXJlIGVxdWFsLiAKCgpUWGUgVC1pQS9jICJQdGN4Wm9ybnRjLSBTb2xpb0xzIAoKClR3byB0dC5scnJhangzLmR5bS4g4pagaXJDVV5oeC1jwqNkLiAKCgpITCAwYy5oamxMZS42aXItPHluIArilqByclwuIAoKCuKWoFZKLSAKCgpJdCB3aWxsIGJlIHNlZW4gdGhhdCB0aGUgdGV0cmFoZWRyb24gaXMgdGhlIGZ1bmRhbWVudGFsIGZvcm0sIAp0aGUgdGhyZWUtc2lkZWQgcHlyYW1pZCBvbiBhIHRyaWFuZ3VsYXIgYmFzZSwgaS5lLiwgYSBzb2xpZCBmaWd1cmUgCmZvcm1lZCBmcm9tIGZvdXIgdHJpYW5nbGVzLiBUd28gb2YgdGhlc2UgZ2VuZXJhdGUgdGhlIGN1YmUgYW5kIAp0aGUgb2N0YWhlZHJvbiA7IGZpdmUgb2YgdGhlc2UgZ2VuZXJhdGUgdGhlIGRvZGVjYWhlZHJvbiBhbmQgdGhlIAppY29zYWhlZHJvbi4gCgpUaGUgcmhvbWJpYyBkb2RlY2FoZWRyb24gaXMgbm90IHJlZ3VsYXIsIGZvciB0aG91Z2ggdGhlIApsaW5lcyBhbmQgc3VyZmFjZXMgYXJlIGVxdWFsLCB0aGUgYW5nbGVzIGFyZSBub3QuIAoKCmk2IAoKCk5PVEVTLiAKCk1yLiBDLiBKaW5hcmFqYWRhc2EgKiB3cml0ZXM6IAoKVGhlIGFzdGVyaXNrIHB1dCBiZWZvcmUgbWV0YXJnb24gaW4gdGhlIGxpc3Qgb2YgZWxlbWVudHMgCnNob3VsZCBiZSBvbWl0dGVkLCBmb3IgbWV0YXJnb24gaGFkIGJlZW4gZGlzY292ZXJlZCBieSBTaXIgCldpbGxpYW0gUmFtc2V5IGFuZCBNci4gVHJhdmVycyBhdCB0aGUgc2FtZSB0aW1lIGFzIG5lb24gKHNlZSAKUHJvY2VlZGluZ3Mgb2YgdGhlIFJveWFsIFNvY2lldHksIHZvbC4gSXhpaWksIHAuIDQxMSksIGFuZCB0aGVyZWZvcmUgCmJlZm9yZSBpdCB3YXMgb2JzZXJ2ZWQgY2xhaXJ2b3lhbnRseS4gSXQgaXMgbm90LCBob3dldmVyLCBnaXZlbiAKaW4gdGhlIGxhdGVzdCBsaXN0IG9mIGVsZW1lbnRzIGluIHRoZSBSZXBvcnQgb2YgTm92ZW1iZXIgMTMsIDE5MDcsIApvZiB0aGUgSW50ZXJuYXRpb25hbCBBdG9taWMgV2VpZ2h0cyBDb21taXNzaW9uLCBzbyBpdCB3b3VsZCAKc2VlbSBhcyB0aG91Z2ggaXQgd2VyZSBub3QgeWV0IGZ1bGx5IHJlY29nbmlzZWQuIAoKTmVvbiB3YXMgZGlzY292ZXJlZCBpbiAxODk4IGJ5IFJhbXNleSBhbmQgVHJhdmVycywgYW5kIAp0aGUgd2VpZ2h0IGdpdmVuIHRvIGl0IHdhcyAyMi4gVGhpcyBhbG1vc3QgY29ycmVzcG9uZHMgd2l0aCBvdXIgCndeZWlnaHQgZm9yIG1ldGEtbmVvbiwgMjItMzMgPiBeXl5eIGxhdGVzdCB3ZWlnaHQgZ2l2ZW4gdG8gbmVvbiAKaXMgMjAsIGFuZCB0aGF0IGNvcnJlc3BvbmRzIHdpdGhpbiBvbmUtdGVudGggdG8gb3VyIHdlaWdodCwgaTknOS4gCkZyb20gdGhpcyBpdCB3b3VsZCBzZWVtIHRoYXQgbmVvbiB3XmFzIGV4YW1pbmVkIGluIHRoZSBsYXRlciAKaW52ZXN0aWdhdGlvbnMgYW5kIG1ldGEtbmVvbiBpbiB0aGUgZWFybGllci4gCgpIZSBzYXlzIGZ1cnRoZXIgb24gYSBwcm9iYWJsZSBmb3VydGggSW50ZXJwZXJpb2RpYyBHcm91cCA6IAoKVGhpbmtpbmcgb3ZlciB0aGUgZGlhZ3JhbXMsIGl0IHNlZW1lZCB0byBtZSBsaWtlbHkgdGhhdCBhIApmb3VydGggZ3JvdXAgZXhpc3RzLCBjb21pbmcgb24gdGhlIHBhcmFtYWduZXRpYyBzaWRlLCBkaXJlY3RseSAKdW5kZXIgaXJvbiwgY29iYWx0LCBuaWNrZWwsIGp1c3Qgb25lIGNvbXBsZXRlIHN3aW5nIG9mIHRoZSAKcGVuZHVsdW0gYWZ0ZXIgcmhvZGl1bSwgcnV0aGVuaXVtLCBwYWxsYWRpdW0uIFRoaXMgd291bGQgCm1ha2UgZm91ciBpbnRlcnBlcmlvZGljIGdyb3VwcywgYW5kIHRoZXkgd291bGQgY29tZSBhbHNvIApwZXJpb2RpY2FsbHkgaW4gdGhlIHRhYmxlIHRvby4gCgpJIHRvb2sgdGhlIGRpYWdyYW0gZm9yIE9zbWl1bSwgYW5kIGluIGEgYmFyIHBvc3R1bGF0ZWQgb25seSAKdGhyZWUgY29sdW1ucyBmb3IgdGhlIGZpcnN0IGVsZW1lbnQgb2YgdGhlIG5ldyBncm91cHMsIGkuZS4sIG9uZSAKY29sdW1uIGxlc3MgdGhhbiBpbiBPc21pdW0uIFRoaXMgd291bGQgbWFrZSAxODMgYXRvbXMgaW4gCmEgYmFyIDsgdGhlIG5ldyBncm91cCB0aGVuIHdvdWxkIGZvbGxvdyBpbiBhIGJhciwgMTgzLCAxODUsIDE4Ny4gCkhlcmUgSSBmb3VuZCB0byBteSBzdXJwcmlzZSB0aGF0IHRoZSB0aGlyZCBwb3N0dWxhdGVkIGdyb3VwIAp3b3VsZCBoYXZlIGEgXS1lbWFya2FibGUgcmVsYXRpb24gdG8gT3MsIElyLCBQdC4gCgpUaHVzIAoKT3MuIOKAlCAyNDUgKGluIGEgYmFyKSA7IGxlc3MgNjA9MTg1IAoKSXIuIDI0NyBsZXNzIDYwPSAxODcgCgpQdC4gMjQ5IGxlc3MgNjA9IDE4OSAKCkJ1dCBzdHJhbmdlIHRvIHNheSBhbHNvIAoKUnV0aGVudW5paSAoYmFyKSAxMzIgbGVzcyA2MOKAlDcyIAoKUmhvZGl1bSAxMzQgbGVzcyA2MCDigJQgNzQgCgpQYWxsYWRpdW0gMTM2IGxlc3MgNjAg4oCUIDc2IAoK4oCiIFNlZSBmb290bm90ZSBpbiBuZXh0IENoYXB0ZXIuIAoKCjE3IAoKQnV0IDcyLCA3NCwgNzYsIGFyZSBJcm9uLCBDb2JhbHQgYW5kIE5pY2tlbC4gCl4gU28gdGhlcmUgZG9lcyBwcm9iYWJseSBleGlzdCBhIG5ldyBncm91cCB3aXRoIGJhcnMgKDE4MyksIAppXjU+IDE4NywgMTg5LCB3aXRoIGF0b21pYyB3ZWlnaHRzLiAKClggPSBiYXJpODU7IGF0b21zIDI1OTAsIHd0LiAxNDMtMyAKCl49IF5eNz4gMjYxOCwgd3QuIDE0NS00IAoKXl4gXl45LCAyNjQ2LCB3dC4gMTQ3MC4gCgpUaGV5IGNvbWUgcHJvYmFibHkgYW1vbmcgdGhlIHJhcmUgZWFydGhzLiBQcm9iYWJseSBhbHNvIApOZW9keW1tbSBhbmQgUHJhc2VvZHltaXVtIGFyZSB0d28gb2YgdGhlbSwgZm9yIHRoZWlyIAp3ZWlnaHRzIGFyZSAxNDMtNiwgMTQwLTUuIAoKCkNIQVBURVIgSUlJLiAKVEhFIExBVEVSIFJFU0VBUkNIRVMuIAoKVGhlIGZpcnN0IGRpZmZpY3VsdHkgdGhhdCBmYWNlZCB1cyB3YXMgdGhlIGlkZW50aWZpY2F0aW9uIG9mIHRoZSAKZm9ybXMgc2VlbiBvbiBmb2N1c2luZyB0aGUgc2lnaHQgb24gZ2FzZXMuKiBXZSBjb3VsZCBvbmx5IApwcm9jZWVkIHRlbnRhdGl2ZWx5LiBUaHVzLCBhIHZlcnkgY29tbW9uIGZvcm0gaW4gdGhlIGF1LSBoYWQgCmEgc29ydCBvZiBkdW1iLWJlbGwgc2hhcGUgKHNlZSBQbGF0ZSBJKSA7IHdlIGV4YW1tZWQgdGhpcywgCmNvbXBhcmluZyBvdXIgcm91Z2ggc2tldGNoZXMsIGFuZCBjb3VudGVkIGl0cyBhdG9tcyA7IHRoZXNlLCAKZGl2aWRlZCBieSBpOOKAlCB0aGUgbnVtYmVyIG9mIHVsdGltYXRlIGF0b21zIGluIGh5ZHJvZ2VuLSAKZ2F2ZSB1cyAyMy0yMiBhcyBhdG9taWMgd2VpZ2h0LCBhbmQgdGhpcyBvZmZlcmVkIHRoZSBwcmVzdW1wdGlvbiAKdGhhdCBpdCB3YXMgc29kaXVtLiBXZSB0aGVuIHRvb2sgdmFyaW91cyBzdWJzdGFuY2VzLWNvbW1vbiAKc2FsdCwgZXRjLuKAlCBpbiB3aGljaCB3ZSBrbmV3IHNvZGl1bSB3YXMgcHJlc2VudCwgYW5kIGZvdW5kIHRoZSAKZHVtYi1iZWxsIGZvcm0gaW4gYWxsLiBJbiBvdGhlciBjYXNlcywgd2UgdG9vayBzbWFsbCBmcmFnbWVudHMgCm9mIG1ldGFscywgYXMgaXJvbiwgdGluLCB6aW5jLCBzaWx2ZXIsIGdvbGQgOyBpbiBvdGhlcnMsIGFnYWluLCBwaWVjZXMgCm9mIG9yZSwgbWluZXJhbCB3YXRlcnMsIGV0Yy4sIGV0Yy4sIGFuZCwgZm9yIHRoZSByYXJlc3Qgc3Vic3RhbmNlcywgCk1yLiBMZWFkYmVhdGVyIHZpc2l0ZWQgYSBtaW5lcmFsb2dpY2FsIG11c2V1bS4gSW4gYWxsLCA1NyAKY2hlbWljYWwgZWxlbWVudHMgd2VyZSBleGFtaW5lZCwgb3V0IG9mIHRoZSA3OCByZWNvZ25pemVkIGJ5IAptb2Rlcm4gY2hlbWlzdHJ5LiAKCkluIGFkZGl0aW9uIHRvIHRoZXNlLCB3ZSBmb3VuZCAzIGNoZW1pY2FsIHdhaWZzIDogYW4gdW5yZWNvZy0gCm5pemVkIHN0cmFuZ2VyIGJldHdlZW4gaHlkcm9nZW4gYW5kIGhlbGl1bSB3aGljaCB3ZSBuYW1lZCAKb2NjdWx0dW0sIGZvciBwdXJwb3NlcyBvZiByZWZlcmVuY2UsIGFuZCAyIHZhcmlldGllcyBvZiBvbmUgCmVsZW1lbnQsIHdoaWNoIHdlIG5hbWVkIGthbG9uIGFuZCBtZXRhLWthbG9uLCBiZXR3ZWVuIHhlbm9uIAphbmQgb3NtaXVtIDsgd2UgYWxzbyBmb3VuZCA0IHZhcmlldGllcyBvZiA0IHJlY29nbml6ZWQgZWxlbWVudHMgCmFuZCBwcmVmaXhlZCBtZXRhIHRvIHRoZSBuYW1lIG9mIGVhY2gsIGFuZCBhIHNlY29uZCBmb3JtIG9mIApwbGF0aW51bSwgdGhhdCB3ZSBuYW1lZCBQdC4gQi4gVGh1cyB3ZSBoYXZlIHRhYnVsYXRlZCBtIAphbGwgNjUgY2hlbWljYWwgZWxlbWVudHMsIG9yIGNoZW1pY2FsIGF0b21zLCBjb21wbGV0aW5nIHRocmVlIAoKCuKAolRoZSBkcmF3aW5ncyBvZiB0aGUgZWxlbWVudHMgd2VyZSBkb25lIGJ5IHR3byBUaGVvc29waGljYWwgYXJ0aXN0cywgSGVyciAKSGVja2VyIGFuZCBNcnMuIEtpcmJ5LCB3aG9tIHdlIHNpbmNlcmVseSB0aGFuayA7IHRoZSBkaWFncmFtcywgc2hvd2luZyB0aGUgZGV0YWlscyAKb2YgdGhlIGNvbnN0cnVjdGlvbiBvZiBlYWNoIC4nZWxlbWVudCwiIHdlIG93ZSB0byB0aGUgbW9zdCBwYS5uc3Rhay5uZyBsYWJvdXIgb2YgCk1yIEppbmFyYWphZGFzYS4gd2l0aG91dCB3aG9zZSBhaWQgaXQgd291bGQgaGF2ZSBiZWVuIGltcG9zc2libGUgZm9yIHVzIHRvIGhhdmUgCnByZXNlbnRlZCBkZWFybHkgYW5kIGRlaWxuaS5lbHkgdGhlIGNvbXBsaWNhdGVkIGFycmFuZ2VtZW50cyBieSB3aGljaCB0aGUgY2hlbSBjYWwgCmVsZW1lbnRzIGFyZSBidWlVIHVwLiBXZSBoYXZlIGFsc28gdG8gdGhhbmsgaGltIGZvciBhIG51bWJlciBvZiBtb3N0IHVzZWZ1bCBub3RlcyAKdHBseXQnZyAtLWggY2FyZWZ1bCByZXNlYXJjaCwgd2hpY2ggYXJlIGluY29ycG9yYXRlZCBpbiB0aGUgcHJlc2VudCBzZXJpZXMsIGFuZCAKd2l0aG91dCB3aGljaCB3ZSBjb3VsZCBub3QgaGF2ZSB3cml0dGVuIHRoZXNlIHBhcGVycy4gCgoKUGxhdGUgSS4gCgoKPC5hc14gaUzCuz5eIAoKClNPRElVQUouIAoKCjE5IAoKb2YgU2lyIFdpbGxpYW0gQ3Jvb2tlcywgbGVtbmlzY2F0ZXMsIHN1ZmZpY2llbnQgZm9yIHNvbWUgYW1vdW50IApvZiBnZW5lcmFsaXphdGlvbi4gCgpJbiBjb3VudGluZyB0aGUgbnVtYmVyIG9mIHVsdGltYXRlIGF0b21zIGluIGEgY2hlbWljYWwgCmVsZW1lbnRhbCBhdG9tLCB3ZSBkaWQgbm90IGNvdW50IHRoZW0gdGhyb3VnaG91dCwgb25lIGJ5IApvbmUgOyB3aGVuLCBmb3IgaW5zdGFuY2UsIHdlIGNvdW50ZWQgdXAgdGhlIHVsdGltYXRlIGF0b21zIGluIApzb2RpdW0sIHdlIGRpY3RhdGVkIHRoZSBudW1iZXIgaW4gZWFjaCBjb252ZW5pZW50IGdyb3VwIHRvIApNci4gSmluYXJhamFkYXNhLCBhbmQgaGUgbXVsdGlwbGllZCBvdXQgdGhlIHRvdGFsLCBkaXZpZGVkIGJ5IGk4LCAKYW5kIGFubm91bmNlZCB0aGUgcmVzdWx0LiBUaHVzIDogc29kaXVtIChzZWUgUGxhdGUgSSkgaXMgY29tLSAKcG9zZWQgb2YgYW4gdXBwZXIgcGFydCwgZGl2aXNpYmxlIGludG8gYSBnbG9iZSBhbmQgMTIgZnVubmVsczsgCmEgbG93ZXIgcGFydCwgc2ltaWxhcmx5IGRpdmlkZWQgOyBhbmQgYSBjb25uZWN0aW5nIHJvZC4gV2UgCmNvdW50ZWQgdGhlIG51bWJlciBpbiB0aGUgdXBwZXIgcGFydCA6IGdsb2JlIOKAlCAxMCA7IHRoZSBudW1iZXIgCmluIHR3byBvciB0aHJlZSBvZiB0aGUgZnVubmVscyDigJQgZWFjaCAxNiA7IHRoZSBudW1iZXIgb2YgCmZ1bm5lbHMg4oCUIDEyIDsgdGhlIHNhbWUgZm9yIHRoZSBsb3dlciBwYXJ0IDsgaW4gdGhlIGNvbm5lY3RpbmcgCnJvZCDigJQgMTQuIE1yLiBKaW5hcmFqYWRhc2EgcmVja29uZWQgOyAxMCArICgxNiB4IDEyKSA9IDIwMiA7IApoZW5jZSA6IDIwMiArIDIwMiArIDE0ID0gNDE4IDogZGl2aWRlZCBieSAxOCA9IDIzJzIyIHJlY3VycmluZy4gCkJ5IHRoaXMgbWV0aG9kIHdlIGd1YXJkZWQgb3VyIGNvdW50aW5nIGZyb20gYW55IHByZXBvc3Nlc3Npb24sIAphcyBpdCB3YXMgaW1wb3NzaWJsZSBmb3IgdXMgdG8ga25vdyBob3cgdGhlIHZhcmlvdXMgbnVtYmVycyAKd291bGQgcmVzdWx0IG9uIGFkZGl0aW9uLCBtdWx0aXBsaWNhdGlvbiBhbmQgZGl2aXNpb24sIGFuZCB0aGUgCmV4Y2l0aW5nIG1vbWVudCBjYW1lIHdoZW4gd2Ugd15haXRlZCB0byBzZWUgaWYgb3VyIHJlc3VsdHMgCmVuZG9yc2VkIG9yIGFwcHJvYWNoZWQgYW55IGFjY2VwdGVkIHdlaWdodC4gSW4gdGhlIGhlYXZpZXIgCmVsZW1lbnRzLCBzdWNoIGFzIGdvbGQsIHdpdGggMzU0NiBhdG9tcywgaXQgd291bGQgaGF2ZSBiZWVuIAppbXBvc3NpYmxlIHRvIGNvdW50IGVhY2ggYXRvbSB3aXRob3V0IHF1aXRlIHVubmVjZXNzYXJ5IHdhc3RlIApvZiB0aW1lLCB3aGVuIG1ha2luZyBhIHByZWxpbWluYXJ5IGludmVzdGlnYXRpb24uIExhdGVyLCBpdCBtYXkgCmJlIHdvcnRoIHdoaWxlIHRvIGNvdW50IGVhY2ggZGl2aXNpb24gc2VwYXJhdGVseSwgYXMgaW4gc29tZSB3ZSAKbm90aWNlZCB0aGF0IHR3byBncm91cHMsIGF0IGZpcnN0IHNpZ2h0IGFsaWtlLCBkaWZmZXJlZCBieSBpIG9yIDIgCmF0b21zLCBhbmQgc29tZSB2ZXJ5IHNsaWdodCBlcnJvcnMgbWF5LCBpbiB0aGlzIHdheSwgaGF2ZSBjcmVwdCAKaW50byBvdXIgY2FsY3VsYXRpb25zLiAKCkluIHRoZSBmb2xsb3dpbmcgdGFibGUgaXMgYSBsaXN0IG9mIHRoZSBjaGVtaWNhbCBlbGVtZW50cyAKZXhhbWluZWQgOyB0aGUgZmlyc3QgY29sdW1uIGdpdmVzIHRoZSBuYW1lcywgdGhlIGFzdGVyaXNrIGFmZml4ZWQgCnRvIHNvbWUgaW5kaWNhdGluZyB0aGF0IHRoZXkgaGF2ZSBub3QgeWV0IGJlZW4gZGlzY292ZXJlZCBieSAKb3J0aG9kb3ggY2hlbWlzdHJ5LiBUaGUgc2Vjb25kIGNvbHVtbiBnaXZlcyB0aGUgbnVtYmVyIG9mIAp1bHRpbWF0ZSBwaHlzaWNhbCBhdG9tcyBjb250YWluZWQgaW4gb25lIGNoZW1pY2FsIGF0b20gb2YgdGhlIAplbGVtZW50IGNvbmNlcm5lZC4gVGhlIHRoaXJkIGNvbHVtbiBnaXZlcyB0aGUgd2VpZ2h0IGFzIApjb21wYXJlZCB3aXRoIGh5ZHJvZ2VuLCB0YWtlbiBhcyAxOCwgYW5kIHRoaXMgaXMgb2J0YWluZWQgCmJ5IGRpdmlkaW5nIHRoZSBjYWxjdWxhdGVkIG51bWJlciBvZiB1bHRpbWF0ZSBhdG9tcyBieSAxOC4gClRoZSBmb3VydGggY29sdW1uIGdpdmVzIHRoZSByZWNvZ25pemVkIHdlaWdodC1udW1iZXIsIG1vc3RseSAKYWNjb3JkaW5nIHRvIHRoZSBsYXRlc3QgbGlzdCBvZiBhdG9taWMgd2VpZ2h0cywgdGhlICIgSW50ZXJuYXRpb25hbCAKTGlzdCIgb2YgMTkwNSwgZ2l2ZW4gaW4gRXJkbWFubidzICIgTGVocmJ1Y2ggZGVyIFVub3JnYW5pc2NoZW4gCkNoZW1pZS4iIFRoZXNlIHdlaWdodHMgZGlmZmVyIGZyb20gdGhvc2UgaGl0aGVydG8gYWNjZXB0ZWQuIAoKCjIwIAoKCkh5ZHJvZ2VuIAoKKiBPY2N1bHR1bSAKSGVsaXVtIApMaXRoaXVtIApCYXJ5bGxpdW0gCkJvcm9uIApDYXJib24gCk5pdHJvZ2VuIApPeHlnZW4gCkZsdW9yaW5lIApOZW9uIAoKKiBNZXRhLU5lb24gLi4uIApTb2RpdW0gCk1hZ25lc2l1bSAKQWx1bWluaXVtIApTaWxpY29uIApQaG9zcGhvcnVzIApTdWxwaHVyIApDaGxvcmluZSAKUG90YXNzaXVtIApBcmdvbiAKQ2FsY2l1bSAKCuKWoCogTWV0YXJnb24gCgpTY2FuZGl1bSAKClRpdGFuaXVtIAoKVmFuYWRpdW0gCgpDaHJvbWl1bSAKCk1hbmdhbmVzZSAKCklyb24gLi4uIAoKQ29iYWx0IAoKTmlja2VsIAoKQ29wcGVyIAoKWmluYyAuLi4gCgpHYWxsaXVtIAoKR2VybWFuaXVtIAoKQXJzZW5pYyAKClNlbGVuaXVtIAoKQnJvbWluZSAKCktyeXB0b24gCgoqIE1ldGEtS3J5cHRvbiAKUnViaWRpdW0gClN0cm9udGl1bSAKWXR0cml1bSAKWmlyY29uaXVtIApOaW9iaXVtIApNb2x5YmRlbnVtIC4uLiAKUnV0aGVuaXVtIApSaG9kaXVtIApQYWxsYWRpdW0gClNpbHZlciAKQ2FkbWl1bSAKSW5kaXVtIAoKVGluIC4uLiAKCkFudGltb255IAoKVGVsbHVyaXVtIAoKSW9kaW5lIAoKWGVub24gCgoqIE1ldGEtWGVub24gCuKAokthbG9uIAoKKiBNZXRhLUthbG9uIC4uLiAKT3NtaXVtIApJcmlkaXVtIAoKUGxhdGludW0gQSAuLi4gCuKAolBsYXRpbnVtIEIgLi4uIApHb2xkIAoKCmlTIAoKSSAKCkkgCgo1NCAKCjMgCgrigJQgCgo3MiAKCjQgCgozLTk0IAoKMTI3IAoKNy0wNiAKCjYtOTggCgoxNjQgCgo5JyAxIDEgCgo5MDEgCgoyQ08gCgppaS1paSAKCjEwLTg2IAoKMjE2IAoKMTIgCgoxMS05MSAKCjI2MSAKCjE0LTUwIAoKMTQwMSAKCjI5MCAKCjE2MTEgCgoxNS04NzkgCgozNDAgCgoxODg4IAoKMTgtOTAgCgozNjAgCgoyMCAKCjE5LTkgCgo0MDIgCgoyMi0zMyAKCuKAlCAKCjQxOCAKCjIzMjIgCgoyMi04OCAKCjQzMiAKCjI0IAoKMjQtMTggCgo0ODYgCgoyNyAKCjI2LTkxIAoKNTIwIAoKMjgtODggCgoyOC0xOCAKCjU1OCAKCjMxIAoKMzAtNzcgCgo1NzYgCgozMiAKCjMxLTgyIAoKNjM5IAoKMzUtNTAgCgozNS00NzMgCgo3MDEgCgozODk0NCAKCjM4ODUgCgo3MTQgCgozOS02NiAKCjM5LTYwIAoKNzIwIAoKNDAgCgozOS03NCAKCjc1NiAKCjQyIAoKNzkyIAoKNDQgCgo0Mzc4IAoKODY0IAoKNDggCgo0Ny03NCAKCjkxOCAKCjUxIAoKNTAtODQgCgo5MzYgCgo1MiAKCjUxLTc0IAoKOTkyIAoKNTUtIiAKCjU0LTU3IAoKMTAwOCAKCjU2IAoKNTUtNDcgCgoxMDM2IAoKNTctNTUgCgo1Ny03IAoKMTA2NCAKCjU5JyIgCgo1OC0zMCAKCiIzOSAKCjYzLTI3NyAKCjYzLTEyIAoKMTE3MCAKCjY1IAoKNjQtOTEgCgoxMjYwIAoKNzAgCgo2OS01MCAKCjEzMDAgCgo3Mi0yMiAKCjcxLTkzIAoKMTM1MCAKCjc1IAoKNzQtNDUgCgoxNDIyIAoKNzkgCgo3OC01OCAKCjE0MzkgCgo3OS05NDQgCgo3OS05NTMgCgoxNDY0IAoKODEtMzMgCgo4MS0yMCAKCjE1MDYgCgo4My02NiAKCuKAlCAKCjE1MzAgCgo4NSAKCjg0LTg1IAoKwqs1NlMgCgo4Ny1KaSAKCjg2LTk1IAoKMTYwNiAKCjg5LTIyIAoKODgtMzQgCgoxNjI0IAoKOTAtMjIgCgo4OS04NSAKCjE3MTkgCgo5NS01MCAKCjkzLTI1IAoKMTc0NiAKCjk3IAoKOTUtMjYgCgoxODQ4IAoKSTAyLTY2IAoKMTAwLTkxIAoKMTg3NiAKCjEwNCoyMiAKCjEwMi0yMyAKCjE5MDQgCgoxMDUtNzcgCgoxMDUtNzQgCgoxOTQ1IAoKMTA4LTA1NSAKCjEwNy05MyAKCjIwMTYgCgoxMTIgCgpJSUktNjAgCgoyMDUyIAoKMTE0IAoKMTE0LTA1IAoKMjEyNCAKCjExOCAKCjExOC0xMCAKCjIxNjkgCgoxMjAtNTAgCgoxMTktMzQgCgoyMjIzIAoKMTIzLTUwIAoKMTI2LTY0IAoKMjI4NyAKCjEyNy0wNTUgCgoxMjYtMDEgCgoyMjk4IAoKMTI3LTY2IAoKMTI3LTEwIAoKMjM0MCAKCjEzMCAKCuKAlCAKCjMwNTQgCgoxIDY5IDY2IAoK4oCUIAoKMzA5NiAKCjE3MiAKCuKAlCAKCjM0MzAgCgoxOTAtNTUgCgonODktNTUgCgozNDVeIAoKMTkyLTExIAoKMTkxLTU2IAoKMzQ4NiAKCjE5My02NiAKCjE5My0zNCAKCjM1MTQgCgoxOTUyMiAKCuKAlCAKCjM1NDYgCgoxOTcgCgoxOTUtNzQgCgpQbGF0ZSAxIDEgLiAKCgpNYWxlLiAKCgpQXkVeTEFMRSAKCgoyMSAKCmFuZCBhcmUgZ2VuZXJhbGx5IGxpZ2h0ZXIgdGhhbiB0aG9zZSBnaXZlbiBpbiBlYXJsaWVyIHRleHQtYm9va3MuIApJdCBpcyBpbnRlcmVzdGluZyB0byBub3RlIHRoYXQgb3VyIGNvdW50aW5nIGVuZG9yc2VzIHRoZSBlYXJsaWVyIApudW1iZXJzLCBmb3IgdGhlIG1vc3QgcGFydCwgYW5kIHdlIG11c3Qgd2FpdCB0byBzZWUgaWYgbGF0ZXIgCm9ic2VydmF0aW9ucyB3aWxsIGVuZG9yc2UgdGhlIGxhc3QgcmVzdWx0cyBvZiBvcnRob2RveCBjaGVtaXN0cnksIApvciBjb25maXJtIG91cnMuIAoKQXMgdGhlIHdvcmRzICJ1bHRpbWF0ZSBwaHlzaWNhbCBhdG9tIiBtdXN0IGZyZXF1ZW50bHkgb2NjdXIsIAppdCBpcyBuZWNlc3NhcnkgdG8gc3RhdGUgd2hhdCB3ZSBtZWFuIGJ5IHRoZSBwaHJhc2UuIEFueSBnYXNlb3VzIApjaGVtaWNhbCBhdG9tIG1heSBiZSBkaXNzb2NpYXRlZCBpbnRvIGxlc3MgY29tcGxpY2F0ZWQgYm9kaWVzIDsgCnRoZXNlLCBhZ2FpbiwgaW50byBzdGlsbCBsZXNzIGNvbXBsaWNhdGVkIDsgdGhlc2UsIGFnYWluLCBpbnRvIHlldCBzdGlsbCAKbGVzcyBjb21wbGljYXRlZC4gVGhlc2Ugd2lsbCBiZSBkZWFsdCB3aXRoIHByZXNlbnRseS4gQWZ0ZXIgdGhlIAp0aGlyZCBkaXNzb2NpYXRpb24gYnV0IG9uZSBtb3JlIGlzIHBvc3NpYmxlOyB0aGUgZm91cnRoIGRpc3NvY2lhdGlvbiAKZ2l2ZXMgdGhlIHVsdGltYXRlIHBoeXNpY2FsIGF0b20uKiBUaGlzIG1heSB2YW5pc2ggZnJvbSB0aGUgCnBoeXNpY2FsIHBsYW5lLCBidXQgaXQgY2FuIHVuZGVyZ28gbm8gZnVydGhlciBkaXNzb2NpYXRpb24gb24gaXQuIApJbiB0aGlzIHVsdGltYXRlIHN0YXRlIG9mIHBoeXNpY2FsIG1hdHRlciB0d28gdHlwZXMgb2YgYXRvbXMgaGF2ZSAKYmVlbiBvYnNlcnZlZCA7IHRoZXkgYXJlIGFsaWtlIGluIGV2ZXJ5dGhpbmcgc2F2ZSB0aGUgZGlyZWN0aW9uIG9mIAp0aGVpciB3aG9ybHMgYW5kIG9mIHRoZSBmb3JjZSB3aGljaCBwb3VycyB0aHJvdWdoIHRoZW0uIEluIHRoZSAKb25lIGNhc2UgZm9yY2UgcG91cnMgaW4gZnJvbSB0aGUgIm91dHNpZGUsIiBmcm9tIGZvdXJ0aC1kaW1lbi0gCnNpb25hbCBzcGFjZSwhIGFuZCBwYXNzaW5nIHRocm91Z2ggdGhlIGF0b20sIHBvdXJzIGludG8gdGhlIApwaHlzaWNhbCB3b3JsZC4gSW4gdGhlIHNlY29uZCwgaXQgcG91cnMgaW4gZnJvbSB0aGUgcGh5c2ljYWwgCndvcmxkLCBhbmQgb3V0IHRocm91Z2ggdGhlIGF0b20gaW50byB0aGUgIm91dHNpZGUgIiBhZ2FpbiwgZiBpLmUuLCAKdmFuaXNoZXMgZnJvbSB0aGUgcGh5c2ljYWwgd29ybGQuIFRoZSBvbmUgaXMgbGlrZSBhIHNwcmluZywgZnJvbSAKd2hpY2ggd2F0ZXIgYnViYmxlcyBvdXQgOyB0aGUgb3RoZXIgaXMgbGlrZSBhIGhvbGUsIGludG8gd2hpY2ggCndhdGVyIGRpc2FwcGVhcnMuIFdlIGNhbGwgdGhlIGF0b21zIGZyb20gd2hpY2ggZm9yY2UgY29tZXMgCm91dCBwb3NpdGl2ZSBvciBtYWxlIDsgdGhvc2UgdGhyb3VnaCB3aGljaCBpdCBkaXNhcHBlYXJzLCBuZWdhdGl2ZSAKb3IgZmVtYWxlLiBBbGwgYXRvbXMsIHNvIGZhciBhcyBvYnNlcnZlZCwgYXJlIG9mIG9uZSBvciBvdGhlciBvZiAKdGhlc2UgdHdvIGZvcm1zLiAoUGxhdGUgSUkuKSAKCkl0IHdpbGwgYmUgc2VlbiB0aGF0IHRoZSBhdG9tIGlzIGEgc3BoZXJlLCBzbGlnaHRseSBmbGF0dGVuZWQsIGFuZCAKdGhlcmUgaXMgYSBkZXByZXNzaW9uIGF0IHRoZSBwb2ludCB3aGVyZSB0aGUgZm9yY2UgZmxvd3MgaW4sIGNhdXNpbmcgCmEgaGVhcnQtbGlrZSBmb3JtLiBFYWNoIGF0b20gaXMgc3Vycm91bmRlZCBieSBhIGZpZWxkLCBmb3JtZWQgb2YgCnRoZSBhdG9tcyBvZiB0aGUgZm91ciBoaWdoZXIgcGxhbmVzLCB3aGljaCBzdXJyb3VuZCBhbmQgaW50ZXItIApwZW5ldHJhdGUgaXQuIAoKVGhlIGF0b20gY2FuIHNjYXJjZWx5IGJlIHNhaWQgdG8gYmUgYSAiIHRoaW5nLCIgdGhvdWdoIGl0IGlzIAp0aGUgbWF0ZXJpYWwgb3V0IG9mIHdoaWNoIGFsbCB0aGluZ3MgcGh5c2ljYWwgYXJlIGNvbXBvc2VkIEl0IGlzIApmb3JtZWQgYnkgdGhlIGZsb3cgb2YgdGhlIGxpZmUgLWZvcmNlICUgYW5kIHZhbmlzaGVzIHdpdGggaXRzIGViYi4gCgoKKiBUaGUgYXRvbWljIHN1Yi1wbGFuZS4gCgp0IFRoZSBhc3RyYWwgcGxhbmUuIAoKWCBLbm93biB0byBUaGVvc29waGlzdHMgYXMgRm9oYXQsIHRoZSBmb3JjZSBvZiB3aGljaCBhbGwgdGhlIHBoeXNpY2FsIHBsYW5lIGZvcmNlcyAK4oCUIGVsZWN0cmljaXRpZXMg4oCUIGFyZSBkaWZmZXJlbnRpYXRpb25zLiAKCgoyMiAKCgpXaGVuIHRoaXMgZm9yY2UgYXJpc2VzIGluICcqIHNwYWNlICIqIOKAlCB0aGUgYXBwYXJlbnQgdm9pZCB3aGljaCAKbXVzdCBiZSBmaWxsZWQgd2l0aCBzdWJzdGFuY2Ugb2Ygc29tZSBraW5kLCBvZiBpbmNvbmNlaXZhYmxlIAp0ZW51aXR5IOKAlCBhdG9tcyBhcHBlYXIgOyBpZiB0aGlzIGJlIGFydGlmaWNpYWxseSBzdG9wcGVkIGZvciBhIHNpbmdsZSAKYXRvbSwgdGhlIGF0b3JuIGRpc2FwcGVhcnMgOyB0aGVyZSBpcyBub3RoaW5nIGxlZnQuIFByZXN1bWFibHksIAp3ZXJlIHRoYXQgZmxvdyBjaGVja2VkIGJ1dCBmb3IgYW4gaW5zdGFudCwgdGhlIHdob2xlIHBoeXNpY2FsIAp3b3JsZCB3b3VsZCB2YW5pc2gsIGFzIGEgY2xvdWQgbWVsdHMgYXdheSBpbiB0aGUgZW1weXJlYW4uIEl0IAppcyBvbmx5IHRoZSBwZXJzaXN0ZW5jZSBvZiB0aGF0IGZsb3d0IHdoaWNoIG1haW50YWlucyB0aGUgcGh5c2ljYWwgCmJhc2lzIG9mIHRoZSB1bml2ZXJzZS4gSiAKCkluIG9yZGVyIHRvIGV4YW1pbmUgdGhlIGNvbnN0cnVjdGlvbiBvZiB0aGUgYXRvbSwgYSBzcGFjZSBpcyAKYXJ0aWZpY2lhbGx5IG1hZGXCpyA7IHRoZW4sIGlmIGFuIG9wZW5pbmcgYmUgbWFkZSBpbiB0aGUgd2FsbCB0aHVzIApjb25zdHJ1Y3RlZCwgdGhlIHN1cnJvdW5kaW5nIGZvcmNlIGZsb3dzIGluLCBhbmQgdGhyZWUgd2hvcmxzIAppbW1lZGlhdGVseSBhcHBlYXIsIHN1cnJvdW5kaW5nIHRoZSAiIGhvbGUgIiB3aXRoIHRoZWlyIHRyaXBsZSAKc3BpcmFsIG9mIHR3byBhbmQgYSBoYWxmIGNvaWxzLCBhbmQgcmV0dXJuaW5nIHRvIHRoZWlyIG9yaWdpbiBieSBhIApzcGlyYWwgd2l0aGluIHRoZSBhdG9tIDsgdGhlc2UgYXJlIGF0IG9uY2UgZm9sbG93ZWQgYnkgc2V2ZW4gZmluZXIgCndob3Jscywgd2hpY2ggZm9sbG93aW5nIHRoZSBzcGlyYWwgb2YgdGhlIGZpcnN0IHRocmVlIG9uIHRoZSBvdXRlciAKc3VyZmFjZSwgYW5kIHJldHVybmluZyB0byB0aGVpciBvcmlnaW4gYnkgYSBzcGlyYWwgd2l0aGluIHRoYXQsIApmbG93aW5nIGluIHRoZSBvcHBvc2l0ZSBkaXJlY3Rpb24g4oCUIGZvcm0gYSBjYWR1Y2V1cyB3aXRoIHRoZSBmaXJzdCAKdGhyZWUuIEVhY2ggb2YgdGhlIHRocmVlIGNvYXJzZXIgd2hvcmxzLCBmbGF0dGVuZWQgb3V0LCBtYWtlcyBhIApjbG9zZWQgY2lyY2xlIDsgZWFjaCBvZiB0aGUgc2V2ZW4gZmluZXIgb25lcywgc2ltaWxhcmx5IGZsYXR0ZW5lZCBvdXQsIAptYWtlcyBhIGNsb3NlZCBjaXJjbGUuIFRoZSBmb3JjZXMgd2hpY2ggZmxvdyBpbiB0aGVtLCBhZ2FpbiwgY29tZSAKZnJvbSAiIG91dHNpZGUsIiBmcm9tIGEgZm91cnRoLWRpbWVuc2lvbmFsIHNwYWNlLiBJSSBFYWNoIG9mIHRoZSAKZmluZXIgd2hvcmxzIGlzIGZvcm1lZCBvZiBzZXZlbiB5ZXQgZmluZXIgb25lcywgc2V0IHN1Y2Nlc3NpdmVseSBhdCAKcmlnaHQgYW5nbGVzIHRvIGVhY2ggb3RoZXIsIGVhY2ggZmluZXIgdGhhbiBpdHMgcHJlZGVjZXNzb3IgOyB0aGVzZSAKd2UgY2FsbCBzcGlyaWxsY0MuKiogCgpJdCB3aWxsIGJlIHVuZGVyc3Rvb2QgZnJvbSB0aGUgZm9yZWdvaW5nLCB0aGF0IHRoZSBhdG9tIGNhbm5vdCAKYmUgc2FpZCB0byBoYXZlIGEgd2FsbCBvZiBpdHMgb3duLCB1bmxlc3MgdGhlc2Ugd2hvcmxzIG9mIGZvcmNlIGNhbiAKYmUgc28gZGVzaWduYXRlZCA7IGl0cyAiIHdhbGwgIiBpcyB0aGUgcHJlc3NlZCBiYWNrICIgc3BhY2UuIiBBcyAKc2FpZCBpbiAxODk1LCBvZiB0aGUgY2hlbWljYWwgYXRvbSwgdGhlIGZvcmNlICJjbGVhcnMgaXRzZWxmIGEgc3BhY2UsIApwcmVzc2luZyBiYWNrIHRoZSB1bmRpZmZlcmVudGlhdGVkIG1hdHRlciBvZiB0aGUgcGxhbmUsIGFuZCBtYWtpbmcgCnRvIGl0c2VsZiBhIHdoaXJsaW5nIHdhbGwgb2YgdGhpcyBtYXR0ZXIuIiBUaGUgd2FsbCBiZWxvbmdzIHRvIHNwYWNlLCAKbm90IHRvIHRoZSBhdG9tLiAKCgoqIFdoZW4gRm9oYXQgIiBkaWdzIGhvbGVzIGluIHNwYWNlLiIgCgorIFRoZSBmaXJzdCBsaWZlLXdhdmUsIHRoZSB3b3JrIG9mIHRoZSB0aGlyZCBMb2dvcy4gCgpJIEEgbWF5YSwgdHJ1bHkuIAoKwqcgQnkgYSBjZXJ0YWluIGFjdGlvbiBvZiB0aGUgd2lsbCwga25vd24gdG8gc3R1ZGVudHMsIGl0IGlzIHBvc3NpYmxlIHRvIG1ha2Ugc3VjaCBhIApzcGFjZSBieSBwcmVzc2luZyBiYWNrIGFuZCB3YWxsaW5nIG9mZiB0aGUgbWF0dGVyIG9mIHNwYWNlLiAKCklJIEFnYWluIHRoZSBhc3RyYWwgd29ybGQuIAoKLCAqKiBFYWNoIHNwaXJpbGxhIGlzIGFuaW1hdGVkIGJ5IHRoZSBsaWZlLWZvcmNlIG9mIGEgcGxhbmUsIGFuZCBmb3VyIGFyZSBhdCBwcmVzZW50IApub3JtYWxseSBhY3RpdmUsIG9uZSBmb3IgZWFjaCByb3VuZC4gVGhlaXIgYWN0aXZpdHkgaW4gYW4gaW5kaXZpZHVhbCBtYXliZSBwcmVtYXR1cmVseSAKZm9yY2VkIGJ5IHlvZ2EgcHJhY3RpY2UuIAoKCjIzIAoKSW4gdGhlIHRocmVlIHdob3JscyBmbG93IGN1cnJlbnRzIG9mIGRpZmZlcmVudCBlbGVjdHJpY2l0aWVzIDsgdGhlIApzZXZlbiB2aWJyYXRlIGluIHJlc3BvbnNlIHRvIGV0aGVyaWMgd2F2ZXMgb2YgYWxsIGtpbmRzIOKAlCB0byBzb3VuZCwgCmxpZ2h0LCBoZWF0LCBldGMuOyB0aGV5IHNob3cgdGhlIHNldmVuIGNvbG91cnMgb2YgdGhlIHNwZWN0cnVtOyAKZ2l2ZSBvdXQgdGhlIHNldmVuIHNvdW5kcyBvZiB0aGUgbmF0dXJhbCBzY2FsZSA7IHJlc3BvbmQgaW4gYSB2YXJpZXR5IApvZiB3YXlzIHRvIHBoeXNpY2FsIHZpYnJhdGlvbiDigJQgZmxhc2hpbmcsIHNpbmdpbmcsIHB1bHNpbmcgYm9kaWVzLCAKdGhleSBtb3ZlIGluY2Vzc2FudGx5LCBpbmNvbmNlaXZhYmx5IGJlYXV0aWZ1bCBhbmQgYnJpbGxpYW50LiogCgpUaGUgYXRvbSBoYXMg4oCUIGFzIG9ic2VydmVkIHNvIGZhciDigJQgdGhyZWUgcHJvcGVyIG1vdGlvbnMsIGkuZS4sIAptb3Rpb25zIG9mIGl0cyBvd24sIGluZGVwZW5kZW50IG9mIGFueSBpbXBvc2VkIHVwb24gaXQgZnJvbSAKb3V0c2lkZS4gSXQgdHVybnMgaW5jZXNzYW50bHkgdXBvbiBpdHMgb3duIGF4aXMsIHNwaW5uaW5nIGxpa2UgYSAKdG9wIDsgaXQgZGVzY3JpYmVzIGEgc21hbGwgY2lyY2xlIHdpdGggaXRzIGF4aXMsIGFzIHRob3VnaCB0aGUgYXhpcyBvZiAKdGhlIHNwaW5uaW5nIHRvcCBtb3ZlZCBpbiBhIHNtYWxsIGNpcmNsZSA7IGl0IGhhcyBhIHJlZ3VsYXIgcHVsc2EtIAp0aW9uLCBhIGNvbnRyYWN0aW9uIGFuZCBleHBhbnNpb24sIGxpa2UgdGhlIHB1bHNhdGlvbiBvZiB0aGUgaGVhcnQuIApXaGVuIGEgZm9yY2UgaXMgYnJvdWdodCB0byBiZWFyIHVwb24gaXQsIGl0IGRhbmNlcyB1cCBhbmQgZG93biwgCmZsaW5ncyBpdHNlbGYgd2lsZGx5IGZyb20gc2lkZSB0byBzaWRlLCBwZXJmb3JtcyB0aGUgbW9zdCBhc3RvbmlzaGluZyAKYW5kIHJhcGlkIGd5cmF0aW9ucywgYnV0IHRoZSB0aHJlZSBmdW5kYW1lbnRhbCBtb3Rpb25zIGluY2Vzc2FudGx5IApwZXJzaXN0LiBJZiBpdCBiZSBtYWRlIHRvIHZpYnJhdGUsIGFzIGEgd2hvbGUsIGF0IHRoZSByYXRlIHdoaWNoIApnaXZlcyBhbnkgb25lIG9mIHRoZSBzZXZlbiBjb2xvcnMsIHRoZSB3aG9ybCBiZWxvbmdpbmcgdG8gdGhhdCAKY29sb3IgZ2xvd3Mgb3V0IGJyaWxsaWFudGx5LiAKCkFuIGVsZWN0cmljIGN1cnJlbnQgYnJvdWdodCB0byBiZWFyIHVwb24gdGhlIGF0b21zIGNoZWNrcyAKdGhlaXIgcHJvcGVyIG1vdGlvbnMsIGkuZS4sIHJlbmRlcnMgdGhlbSBzbG93ZXI7IHRoZSBhdG9tcyBleHBvc2VkIAp0byBpdCBhcnJhbmdlIHRoZW1zZWx2ZXMgaW4gcGFyYWxsZWwgbGluZXMsIGFuZCBpbiBlYWNoIGxpbmUgdGhlIApoZWFydC1zaGFwZWQgZGVwcmVzc2lvbiByZWNlaXZlcyB0aGUgZmxvdywgd2hpY2ggcGFzc2VzIG91dCAKdGhyb3VnaCB0aGUgYXBleCBpbnRvIHRoZSBkZXByZXNzaW9uIG9mIHRoZSBuZXh0LCBhbmQgc28gb24uIApUaGUgYXRvbXMgYWx3YXlzIHNldCB0aGVtc2VsdmVzIHRvIHRoZSBjdXJyZW50LiBUaGUgd2VsbC1rbm93biAKZGl2aXNpb24gb2YgZGlhbWFnbmV0aWMgYW5kIHBhcmFtYWduZXRpYyBkZXBlbmRzIGdlbmVyYWxseSBvbiAKdGhpcyBmYWN0LCBvciBvbiBhbiBhbmFsb2dvdXMgYWN0aW9uIG9uIG1vbGVjdWxlcywgYXMgbWF5IGJlIApzZWVuIGluIHRoZSBhY2NvbXBhbnlpbmcgZGlhZ3JhbXMuISAKCgoqICIgVGhlIHRlbiBudW1iZXJzIG9mIHRoZSBzdW4uIFRoZXNlIGFyZSBjYWxsZWQgRGlzIOKAlCBpbiByZWFsaXR5IHNwYWNlIOKAlCB0aGUgZm9yY2VzIApzcHJlYWQgaW4gc3BhY2UsIHRocmVlIG9mIHdoaWNoIGFyZSBjb250YWluZWQgaW4gdGhlIFN1bidzIEF0bWFuLCBvciBzZXZlbnRoIHByaW5jaXBsZSwgCmFuZCBzZXZlbiBhcmUgdGhlIHJheXMgc2hvdCBvdXQgYnkgdGhlIFN1bi4iIFRoZSBhdG9tIGlzIGEgc3VuIGluIG1pbmlhdHVyZSBpbiBpdHMgCm93biB1bml2ZXJzZSBvZiB0aGUgaW5jb25jZWl2YWJseSBtaW51dGUuIEVhY2ggb2YgdGhlIHNldmVuIHdob3JscyBpcyBjb25uZWN0ZWQgCndpdGggb25lIG9mIHRoZSBQbGFuZXRhcnkgTG9nb2ksIHNvIHRoYXQgZWFjaCBQbGFuZXRhcnkgTG9nb3MgaGFzIGEgZGlyZWN0IGluZmx1ZW5jZSAKcGxheWluZyBvbiB0aGUgdmVyeSBtYXR0ZXIgb2Ygd2hpY2ggYWxsIHRoaW5ncyBhcmUgY29uc3RydWN0ZWQuIEl0IG1heSBiZSBzdXBwb3NlZCAKdGhhdCB0aGUgdGhyZWUsIGNvbnZleWluZyBlbGVjdHJpY2l0eSwgYSBkaWZmZXJlbnRpYXRpb24gb2YgRm9oYXQsIGFyZSByZWxhdGVkIHRvIHRoZSAKU29sYXIgTG9nb2kuIAoKZiBUaGUgYWN0aW9uIG9mIGVsZWN0cmljaXR5IG9wZW5zIHVwIGdyb3VuZCBvZiBsYXJnZSBleHRlbnQsIGFuZCBjYW5ub3QgYmUgZGVhbHQgCndpdGggaGVyZS4gRG9lcyBpdCBhY3Qgb24gdGhlIGF0b21zIHRoZW1zZWx2ZXMsIG9yIG9uIG1vbGVjdWxlcywgb3Igc29tZXRpbWVzIG9uIApvbmUgYW5kIHNvbWV0aW1lcyBvbiB0aGUgb3RoZXI/IEluIHNvZnQgaXJvbiwgZm9yIGluc3RhbmNlLCBhcmUgdGhlIGludGVybmFsIGFycmFuZ2UtIAptZW50cyBvZiB0aGUgY2hlbWljYWwgYXRvbSBmb3JjaWJseSBkaXN0b3J0ZWQsIGFuZCBkbyB0aGV5IGVsYXN0aWNhbGx5IHJldHVybiB0byB0aGVpciAKb3JpZ2luYWwgcmVsYXRpb25zIHdoZW4gcmVsZWFzZWQgPyBhbmQgaW4gc3RlZWwgaXMgdGhlIGRpc3RvcnRpb24gcGVybWFuZW50ID8gSW4gYWxsIHRoZSAKZGlhZ3JhbXMgdGhlIGhlYXJ0LXNoYXBlZCBib2R5LCBleGFnZ2VyYXRlZCB0byBzaG93IHRoZSBkZXByZXNzaW9uIGNhdXNlZCBieSB0aGUgCmluZmxvdyBhbmQgdGhlIHBvaW50IGNhdXNlZCBieSB0aGUgb3V0ZmxvdywgaXMgYSBzaW5nbGUgYXRvbS4gCgoKMjQgCgpUd28gYXRvbXMsIHBvc2l0aXZlIGFuZCBuZWdhdGl2ZSwgYnJvdWdodCBuZWFyIHRvIGVhY2ggb3RoZXIsIAphdHRyYWN0IGVhY2ggb3RoZXIsIGFuZCB0aGVuIGNvbW1lbmNlIHRvIHJldm9sdmUgcm91bmQgZWFjaCAKb3RoZXIsIGZvcm1pbmcgYSByZWxhdGl2ZWx5IHN0YWJsZSBkdWFsaXR5IDsgc3VjaCBhIG1vbGVjdWxlIGlzIApuZXV0cmFsLiBDb21iaW5hdGlvbnMgb2YgdGhyZWUgb3IgbW9yZSBhdG9tcyBhcmUgcG9zaXRpdmUsIApuZWdhdGl2ZSBvciBuZXV0cmFsLCBhY2NvcmRpbmcgdG8gdGhlIGludGVybmFsIG1vbGVjdWxhciBhcnJhbmdlLSAKbWVudCA7IHRoZSBuZXV0cmFsIGFyZSByZWxhdGl2ZWx5IHN0YWJsZSwgdGhlIHBvc2l0aXZlIGFuZCBuZWdhdGl2ZSAKYXJlIGNvbnRpbnVhbGx5IGluIHNlYXJjaCBvZiB0aGVpciByZXNwZWN0aXZlIG9wcG9zaXRlcywgd2l0aCBhIAp2aWV3IHRvIGVzdGFibGlzaGluZyBhIHJlbGF0aXZlbHkgcGVybWFuZW50IHVuaW9uLiAKClRocmVlIHN0YXRlcyBvZiBtYXR0ZXIgZXhpc3QgYmV0d2VlbiB0aGUgYXRvbWljIHN0YXRlIAphbmQgdGhlIGdhc2VvdXPigJQgdGhlIHN0YXRlIGluIHdoaWNoIHRoZSBjaGVtaWNhbCBhdG9tcyAKYXJlIGZvdW5kLCB0aGUgcmVjb2duaXplZCBjaGVtaWNhbCBlbGVtZW50cyA7IGZvciBvdXIgcHVycG9zZXMgCndlIG1heSBpZ25vcmUgdGhlIGxpcXVpZCBhbmQgc29saWQgc3RhdGVzLiBGb3IgdGhlIHNha2Ugb2YgCmNsZWFybmVzcyBhbmQgYnJldml0eSBpbiBkZXNjcmlwdGlvbiwgd2UgaGF2ZSBiZWVuIG9ibGlnZWQgdG8gCgoKbmFtZSB0aGVzZSBzdGF0ZXM7IHdlIGNhbGwgdGhlIGF0b21pYyBzdGF0ZSBvZiB0aGUgY2hlbWlzdCAKZWxlbWVudGFsOyB0aGUgc3RhdGUgd2hpY2ggcmVzdWx0cyBmcm9tIGJyZWFraW5nIHVwIGNoZW1pY2FsIAplbGVtZW50cywgcHJvdG8tZWxlaW5lbnRhbCA7IHRoZSBuZXh0IGhpZ2hlciwgbmlldGEtcHJvLWVsZW1lbnRhbCA7IAp0aGUgbmV4dCBoaWdoZXIsIGh5cGVyLW1ldGEtcHJvaW8tZWxlbmllbnRhbCA7IHRoZW4gY29tZXMgdGhlIGF0b21pYyAKc3RhdGUuIFRoZXNlIGFyZSBicmllZmx5IG1hcmtlZCBhcyBFTCwgUHJvdG8uLCBNZXRhLCBhbmQgSHlwZXIuKiAKClRoZSBzaW1wbGVzdCB1bmlvbnMgb2YgYXRvbXMsIG5ldmVyLCBhcHBhcmVudGx5IGNvbnNpc3RpbmcgCm9mIG1vcmUgdGhhbiBzZXZlbiwgZm9ybSB0aGUgZmlyc3QgbW9sZWN1bGFyIHN0YXRlIG9mIHBoeXNpY2FsIAptYXR0ZXIuIAoKSGVyZSBhcmUgc29tZSBjaGFyYWN0ZXJpc3RpYyBjb21iaW5hdGlvbnMgb2YgdGhlIEh5cGVyIHN0YXRlIDsgCnRoZSBhdG9tIGlzIGNvbnZlbnRpb25hbCwgd2l0aCB0aGUgZGVwcmVzc2lvbiBlbXBoYXNpc2VkIDsgdGhlIApsaW5lcywgYWx3YXlzIGVudGVyaW5nIGF0IHRoZSBkZXByZXNzaW9uIGFuZCBjb21pbmcgb3V0IGF0IHRoZSAKYXBleCwgc2hvdyB0aGUgcmVzdWx0YW50cyBvZiBsaW5lcyBvZiBmb3JjZTsgd2hlcmUgbm8gbGluZSBhcHBlYXJzIAoKCiogVGhlc2Ugc3ViLXBsYW5lcyBhcmUgZmFtaWxpYXIgdG8gdGhlIFRoZW9zb3BoaXN0IGFzIGdhc2VvdXMsIGVpaGVyaWMsIHN1cGVyLSAKZXRoZXJpYywgc3ViLWF0b21pYywgYXRvbWljIDsgb3IgYXMgR2FzLCBFdGhlciA0LCBFdGhlciAzLCBFdGhlciAyLCBFdGhlciBpLiAKCgoyNSAKCmVudGVyaW5nIHRoZSBkZXByZXNzaW9uLCB0aGUgZm9yY2Ugd2VsbHMgdXAgZnJvbSBmb3VydGgtZGltZW4tIApzaW9uYWwgc3BhY2UgOyB3aGVyZSBubyBsaW5lIGFwcGVhcnMgbGVhdmluZyB0aGUgYXBleCwgdGhlIGZvcmNlIApkaXNhcHBlYXJzIGludG8gZm91cnRoLWRpbWVuc2lvbmFsIHNwYWNlOyB3aGVyZSB0aGUgcG9pbnQgb2YgCmVudHJ5IGFuZCBkZXBhcnR1cmUgaXMgb3V0c2lkZSB0aGUgYXRvbXMsIGl0IGlzIGluZGljYXRlZCBieSBhIGRvdC8nLSAKClR5cGVzIG9mIEh5cGVyLU1ldGEtUHJvdG8gRWxlbWVudGFsIE1hdHRlci4gCgpUaGUgbW9sZWN1bGVzIHNob3cgYWxsIGtpbmRzIG9mIHBvc3NpYmxlIGNvbWJpbmF0aW9uczsgdGhlIApjb21iaW5hdGlvbnMgc3BpbiwgdHVybiBoZWFkIG92ZXIgaGVlbHMsIGFuZCBneXJhdGUgaW4gZW5kbGVzcyAKd2F5cy4gRWFjaCBhZ2dyZWdhdGlvbiBpcyBzdXJyb3VuZGVkIHdpdGggYW4gYXBwYXJlbnQgY2VsbC0gCndhbGwsIHRoZSBjaXJjbGUgb3Igb3ZhbCwgZHVlIHRvIHRoZSBwcmVzc3VyZSBvbiB0aGUgc3Vycm91bmRpbmcgCm1hdHRlciBjYXVzZWQgYnkgaXRzIHdoaXJsaW5nIG1vdGlvbiA7IHRoZXkgc3RyaWtlIG9uIGVhY2ggb3RoZXJmIAphbmQgcmVib3VuZCwgZGFydCBoaXRoZXIgYW5kIHRoaXRoZXIsIGZvciByZWFzb25zIHdlIGhhdmUgbm90IApkaXN0aW5ndWlzaGVkLiAKCgpUaGUgTWV0YSBzdGF0ZSwgaW4gc29tZSBvZiBpdHMgY29tYmluYXRpb25zLCBhcHBlYXJzIGF0IGZpcnN0IApzaWdodCB0byByZXBlYXQgdGhvc2Ugb2YgdGhlIEh5cGVyIHN0YXRlIDsgdGhlIG9ubHkgb2J2aW91cyB3YXkgCm9mIGRpc3Rpbmd1aXNoaW5nIHRvIHdoaWNoIHNvbWUgb2YgdGhlIG1vbGVjdWxlcyBvZiBsZXNzIGNvbS0gCnBsZXhpdHkgYmVsb25nIGlzIHRvIHB1bGwgdGhlbSBvdXQgb2YgdGhlICJjZWxsLXdhbGwiOyBpZiB0aGV5IAphcmUgSHlwZXIgbW9sZWN1bGVzIHRoZXkgYXQgb25jZSBmbHkgb2ZmIGFzIHNlcGFyYXRlIGF0b21zIDsgCmlmIHRoZXkgYXJlIEh5cGVyLU1ldGEgbW9sZWN1bGVzIHRoZXkgYnJlYWsgdXAgaW50byB0d28gb3IgCm1vcmUgbW9sZWN1bGVzIGNvbnRhaW5pbmcgYSBzbWFsbGVyIG51bWJlciBvZiBhdG9tcy4gVGh1cyAKb25lIG9mIHRoZSBNZXRhIG1vbGVjdWxlcyBvZiBpcm9uLCBjb250YWluaW5nIHNldmVuIGF0b21zLCBpcyAKaWRlbnRpY2FsIGluIGFwcGVhcmFuY2Ugd2l0aCBhIEh5cGVyIGhlcHRhZCwgYnV0IHRoZSBsYXR0ZXIgCmRpc3NvY2lhdGVzIGludG8gc2V2ZW4gYXRvbXMsIHRoZSBmb3JtZXIgaW50byB0d28gdHJpYWRzIGFuZCBhIAoKCiogSXQgbXVzdCBiZSByZW1lbWJlcmVkIHRoYXQgdGhlIGRpYWdyYW1zIHJlcHJlc2VudCB0aHJlZS1kaW1lbnNpb25hbCBvYmplY3RzLCAKYW5kIHRoZSBhdG9tcyBhcmUgbm90IGFsbCBvbiBhIHBsYW5lLCBuZWNlc3NhcmlseS4gCgpmIFRoYXQgaXMsIHRoZSBzdXJyb3VuZGluZyBtYWduZXRpYyBmaWVsZHMgc3RyaWtlIG9uIGVhY2ggb3RoZXIuIAoKCjI2IAoKc2luZ2xlIGF0b20uIExvbmctY29udGludWVkIHJlc2VhcmNoIGludG8gdGhlIGRldGFpbGVkIHBsYXkgb2YgCmZvcmNlcyBhbmQgdGhlaXIgcmVzdWx0cyBpcyBuZWNlc3NhcnkgOyB3ZSBhcmUgaGVyZSBvbmx5IGFibGUgdG8gCmdpdmUgcHJlbGltaW5hcnkgZmFjdHMgYW5kIGRldGFpbHMg4oCUIGFyZSBvcGVuaW5nIHVwIHRoZSB3YXkuIApUaGUgZm9sbG93aW5nIG1heSBzZXJ2ZSBhcyBjaGFyYWN0ZXJpc3RpYyBNZXRhIHR5cGVzIDog4oCUIAoKVHlwZXMgb2YgTWV0YS1Qcm90by1FbGVtZW50YWwgTWF0dGVyLiAKClRoZXNlIGFyZSB0YWtlbiBmcm9tIGNvbnN0aXR1ZW50cyBvZiB0aGUgdmFyaW91cyBlbGVtZW50cyA7IApJIGZyb20gR2wgOyAyIGFuZCAzIGZyb20gRmUgOyA0IGZyb20gQm8gOyA1LDYgYW5kIDcgZnJvbSBDIDsgCjggZnJvbSBIZTsgOSBmcm9tIEZsIDsgMTAsIDExLCAxMiBmcm9tIExpOyAxMyBhbmQgMTQgZnJvbSBOYS4gCk90aGVycyB3aWxsIGJlIHNlZW4gaW4gdGhlIGNvdXJzZSBvZiBicmVha2luZyB1cCB0aGUgZWxlbWVudHMuIAoKClRoZSBQcm90byBzdGF0ZSBwcmVzZXJ2ZXMgbWFueSBvZiB0aGUgZm9ybXMgaW4gdGhlIGVsZW1lbnRzLCAKbW9kaWZpZWQgYnkgcmVsZWFzZSBmcm9tIHRoZSBwcmVzc3VyZSB0byB3aGljaCB0aGV5IGFyZSBzdWJqZWN0ZWQgCmluIHRoZSBjaGVtaWNhbCBhdG9tLiBJbiB0aGlzIHN0YXRlIHZhcmlvdXMgZ3JvdXBzIGFyZSB0aHVzIApyZWNvZ25pemFibGUgd2hpY2ggYXJlIGNoYXJhY3RlcmlzdGljIG9mIGFsbGllZCBtZXRhbHMuIAoKVHlwZXMgb2YgUGtvdG8tRWxlbWVudGFsIE1hdHRlci4gCgpUaGVzZSBhcmUgdGFrZW4gZnJvbSB0aGUgcHJvZHVjdHMgb2YgdGhlIGZpcnN0IGRpc2ludGVncmF0aW9uIApvZiB0aGUgY2hlbWljYWwgYXRvbSwgYnkgZm9yY2libHkgcmVtb3ZpbmcgaXQgZnJvbSBpdHMgaG9sZS4gClRoZSBncm91cHMgZmx5IGFwYXJ0LCBhc3N1bWluZyBhIGdyZWF0IHZhcmlldHkgb2YgZm9ybXMgb2Z0ZW4gCm1vcmUgb3IgbGVzcyBnZW9tZXRyaWNhbCA7IHRoZSBsaW5lcyBiZXR3ZWVuIHRoZSBjb25zdGl0dWVudHMgCm9mIHRoZSBncm91cHMsIHdoZXJlIGluZGljYXRlZCwgbm8gbG9uZ2VyIHJlcHJlc2VudCBsaW5lcyBvZiBmb3JjZSwgCmJ1dCBhcmMgaW50ZW5kZWQgdG8gcmVwcmVzZW50IHRoZSBpbXByZXNzaW9uIG9mIGZvcm0sIGkuZS4sIG9mIHRoZSAKcmVsYXRpdmUgcG9zaXRpb24gYW5kIG1vdGlvbiBvZiB0aGUgY29uc3RpdHVlbnRzLCBtYWRlIG9uIHRoZSAKbWluZCBvZiB0aGUgb2JzZXJ2ZXIuIFRoZXkgYXJlIGVsdXNpdmUsIGZvciB0aGVyZSBhcmUgbm8gbGluZXMsIAoKCjI3IAoKYnV0IHRoZSBhcHBlYXJhbmNlIG9mIGxpbmVzIGlzIGNhdXNlZCBieSB0aGUgcmFwaWQgbW90aW9uIG9mIHRoZSAKY29zdGl0dWVudHMgdXAgYW5kIGRvd24sIG9yIGFsb25nIHRoZW0gYmFja3dhcmRzIGFuZCBmb3J3YXJkcyAKVGhlIGRvdHMgcmVwcmVzZW50IGF0b21zLCBvciBncm91cHMgb2YgYXRvbXMsIHdpdGhpbiB0aGUgcHJvdG8tIAplbGVtZW50cy4gaSBpcyBmb3VuZCBpbiBDOyAyIGFuZCAzIGluIEhlIDsgNCBpbiBGbCA7IDUgaW4gTGkgOyAKNiBpbiBOIDsgNyBpbiBSdSA7IDggaW4gTmEgOyA5IGFuZCAxMCBpbiBDbyA7IDExIGluIEZlIDsgMTIgaW4gU2UuIApXZSBzaGFsbCByZXR1cm4gdG8gdGhlc2Ugd2hlbiBhbmFseXNpbmcgdGhlIGVsZW1lbnRzLCBhbmQgc2hhbGwgCm1lZXQgbWFueSBvdGhlciBwcm90by1lbGVtZW50YWwgZ3JvdXBpbmdzLiAKClRoZSBmaXJzdCB0aGluZyB3aGljaCBpcyBub3RpY2VkIGJ5IHRoZSBvYnNlcnZlciwgd2hlbiBoZSAKdHVybnMgaGlzIGF0dGVudGlvbiB0byB0aGUgY2hlbWljYWwgYXRvbXMsIGlzIHRoYXQgdGhleSBzaG93IApjZXJ0YWluIGRlZmluaXRlIGZvcm1zLCBhbmQgdGhhdCB3aXRoaW4gdGhlc2UgZm9ybXMsIG1vZGlmaWVkIGluIAp2YXJpb3VzIHdheXMsIHN1Yi1ncm91cGluZ3MgYXJlIG9ic2VydmFibGUgd2hpY2ggcmVjdXIgaW4gY29uLSAKbmV4aW9uIHdpdGggdGhlIHNhbWUgbW9kaWZpZWQgZm9ybS4gVGhlIG1haW4gdHlwZXMgYXJlIG5vdCAKCgp2ZXJ5IG51bWVyb3VzLCBhbmQgd2UgZm91bmQgdGhhdCwgd2hlbiB3ZSBhcnJhbmdlZCB0aGUgYXRvbXMgCndlIGhhZCBvYnNlcnZlZCwgYWNjb3JkaW5nIHRvIHRoZWlyIGV4dGVybmFsIGZvcm1zLCB0aGV5IGZlbGwgCmludG8gbmF0dXJhbCBjbGFzc2VzIDsgd2hlbiB0aGVzZSwgaW4gdHVybiwgd2VyZSBjb21wYXJlZCB3aXRoIApTaXIgV2lsbGlhbSBDcm9va2VzJyBjbGFzc2lmaWNhdGlvbiwgdGhleSBwcm92ZWQgdG8gYmUgc2luZ3VsYXJseSAKYWxpa2UuIEhlcmUgaXMgaGlzIGFycmFuZ2VtZW50IG9mIHRoZSBlbGVtZW50cywgYXMgaXQgYXBwZWFyZWQgCmluIHRoZSBQcm9jZWVkaW5ncyBvZiB0aGUgUm95YWwgU29jaWV0eSwgaW4gYSBwYXBlciByZWFkIG9uIApKdW5lIDl0aCwgMTg5OC4gCgpUaGlzIGlzIHRvIGJlIHJlYWQsIGZvbGxvd2luZyB0aGUgbGluZXMgb2YgdGhlICJmaWd1cmVzIG9mIAplaWdodCAiIDogSCwgSGUsIExpLCBHbCwgQiwgQywgTiwgYW5kIHNvIG9uLCBlYWNoIHN1Y2Nlc3NpdmUgCmVsZW1lbnQgYmVpbmcgaGVhdmllciB0aGFuIHRoZSBvbmUgcHJlY2VkaW5nIGl0IGluIG9yZGVyLiBUaGUgCmRpc2tzIHdoaWNoIGZhbGwgaW1tZWRpYXRlbHkgYmVsb3cgZWFjaCBvdGhlciBmb3JtIGEgY2xhc3MgOyAKdGh1cyA6IEgsIENJLCBCciwgSSA7IHRoZXNlIHJlc2VtYmxlIGVhY2ggb3RoZXIgaW4gdmFyaW91cyB3YXlzLiAKCgoyOCAKCgphbmQsIGFzIHdlIHNoYWxsIHByZXNlbnRseSBzZWUsIHRoZSBzYW1lIGZvcm1zIGFuZCBncm91cGluZ3MgCnJlLWFwcGVhci4gCgpBbm90aGVyIGNoYXJ0IOKAlCB0YWtlbiBmcm9tIEVyZG1hbm4ncyBMZWhyYnVjaCDigJQgYXJyYW5nZXMgCnRoZSBlbGVtZW50cyBvbiBhIGN1cnZlZCBsaW5lLCB3aGljaCBjdXJpb3VzbHkgcmVzZW1ibGVzIHRoZSAKY3VydmVzIHdpdGhpbiB0aGUgc2hlbGwgb2YgYSBuYXV0aWx1cy4gVGhlIHJhZGlhdGluZyBsaW5lcyBzaG93IAp0aGUgY2xhc3NlcywgdGhlIHdob2xlIGRpYW1ldGVyIGJ1aWxkaW5nIHVwIGEgZmFtaWx5OyBpdCB3aWxsIGJlIApvYnNlcnZlZCB0aGF0IHRoZXJlIGlzIGFuIGVtcHR5IHJhZGl1cyBiZXR3ZWVuIGh5ZHJvZ2VuIGFuZCAKaGVsaXVtLCBhbmQgd2UgaGF2ZSBwbGFjZWQgb2NjdWx0dW0gdGhlcmUgOyBvbiB0aGUgb3Bwb3NpdGUgCnJhZGl1cywgaXJvbiwgcnViaWRpdW0gYW5kIG9zbWl1bSBhcmUgc2Vlbi4gCgoKPCDigJQgKsKrLSwgCgoKVGhlIGV4dGVybmFsIGZvcm1zIG1heSBiZSBjbGFzc2lmaWVkIGFzIGZvbGxvd3MgOyB0aGUgaW50ZXJuYWwgCmRldGFpbHMgd2lsbCBiZSBkZWFsdCB3aXRoIGxhdGVyIDog4oCUIAoKSS4gVGhlIER1bWItYmVsbC4g4oCUIFRoZSBjaGFyYWN0ZXJpc3RpY3Mgb2YgdGhpcyBhcmUgYSBoaWdoZXIgCmFuZCBsb3dlciBncm91cCwgZWFjaCBzaG93aW5nIDEyIHByb2plY3RpbmcgZnVubmVscywgZ3JvdXBlZCAKcm91bmQgYSBjZW50cmFsIGJvZHksIGFuZCBhIGNvbm5lY3Rpbmcgcm9kLiBJdCBhcHBlYXJzIGluIApzb2RpdW0sIGNvcHBlciwgc2lsdmVyLCBhbmQgZ29sZCwqIGFuZCBnb2xkIGlzIGdpdmVuIChpIG9uIApQbGF0ZSAxMTEpIGFzIHRoZSBtb3N0IGV4dHJlbWVseSBtb2RpZmllZCBleGFtcGxlIG9mIHRoaXMgZm9ybS4gClRoZSAxMiBhbG1vbmQtbGlrZSBwcm9qZWN0aW9ucywgYWJvdmUgYW5kIGJlbG93LCBhcmUgc2V2ZXJhbGx5IApjb250YWluZWQgaW4gc2hhZG93eSBmdW5uZWxzLCBpbXBvc3NpYmxlIHRvIHJlcHJvZHVjZSBpbiB0aGUgCmRyYXdpbmc7IHRoZSBjZW50cmFsIGdsb2JlIGNvbnRhaW5zIHRocmVlIGdsb2JlcywgYW5kIHRoZSBjb24tIApuZWN0aW5nIHBvcnRpb24gaGFzIHN3b2xsZW4gb3V0IGludG8gYW4gZWdnLCB3aXRoIGEgdmVyeSBjb20tIAoKClRoZSBmaWZ0aCBtZW1iZXIgb2YgdGhpcyBncm91cCB3YXMgbm90IHNvdWdodCBmb3IuIAoKClBsYXRlIElJSS4gCgoKfi1pLi5BIAoKCl7ilqAgCgoKVi4gCgoKL14gCgoKaSAKCgpLLzwzIAoKCkEtXj8uIAoKCl46IAoKCiMgCgoKaSkgXideIAoKCjI5IAoKcGxpY2F0ZWQgY2VudHJhbCBhcnJhbmdlbWVudC4gVGhlIGR1bWItYmVsbCBhcHBlYXJzIGFsc28gaW4gCmNobG9yaW5lLCBicm9taW5lIGFuZCBpb2RpbmUsIGJ1dCB0aGVyZSBpcyBubyB0cmFjZSBvZiBpdCBpbiAKaHlkcm9nZW4sIHRoZSBoZWFkIG9mIHRoZSBncm91cC4gV2UgaGF2ZSBub3QgbWV0IGl0IGVsc2V3aGVyZS4gCkl0IG1heSBiZSByZW1hcmtlZCB0aGF0LCBpbiBTaXIgV2lsbGlhbSBDcm9va2VzJyBzY2hlbWUsIGluIAp3aGljaCB0aGV5IGFyZSBhbGwgY2xhc3NlZCBhcyBtb25hZHMsIHRoZXNlIHR3byBncm91cHMgYXJlIHRoZSAKbmVhcmVzdCB0byB0aGUgbmV1dHJhbCBsaW5lLCBvbiB0aGUgaW5nb2luZyBhbmQgb3V0Z29pbmcgc2VyaWVzLCAKYW5kIGFyZSByZXNwZWN0aXZlbHkgcG9zaXRpdmUgYW5kIG5lZ2F0aXZlLiAKCklJIGFuZCBJSSBhLiBUaGUgVGV0cmFsaWVkcm9uLCDigJQgVGhlIGNoYXJhY3RlcmlzdGljcyBvZiB0aGlzIApmb3JtIGFyZSBmb3VyIGZ1bm5lbHMsIGNvbnRhaW5pbmcgb3ZvaWQgYm9kaWVzLCBvcGVuaW5nIG9uIHRoZSAKZmFjZSBvZiBhIHRldHJhaGVkcm9uLiBUaGUgZnVubmVscyBnZW5lcmFsbHksIGJ1dCBub3QgYWx3YXlzLCAKcmFkaWF0ZSBmcm9tIGEgY2VudHJhbCBnbG9iZS4gV2UgZ2l2ZSBiZXJ5bGxpdW0gKGdsdWNpbnVtKSBhcyAKdGhlIHNpbXBsZXN0IGV4YW1wbGUgKDIgb24gUGxhdGUgSUlJKSwgYW5kIHRvIHRoaXMgZ3JvdXAgYmVsb25nIApjYWxjaXVtIGFuZCBzdHJvbnRpdW0uIFRoZSB0ZXRyYWhlZHJvbiBpcyB0aGUgZm9ybSBvZiBjaHJvbWl1bSAKYW5kIG1vbHliZGVudW0sIGJ1dCBub3QgdGhhdCBvZiB0aGUgaGVhZCBvZiB0aGVpciBncm91cCwgCm94eWdlbiwgd2hpY2ggaXMsIGxpa2UgaHlkcm9nZW4sIHN0aWkgZ2VuZXJpcy4gVGhlc2UgdHdvIGdyb3VwcyAKYXJlIG1hcmtlZCBpbiBvcnRob2RveCBjaGVtaXN0cnkgYXMgcmVzcGVjdGl2ZWx5IHBvc2l0aXZlIGFuZCAKbmVnYXRpdmUsIGFuZCBhcmUgY2xvc2VseSBhbGxpZWQuIEFub3RoZXIgcGFpciBvZiBncm91cHMgc2hvdyAKdGhlIHNhbWUgdGV0cmFoZWRyYWwgZm9ybSA6IG1hZ25lc2l1bSwgemluYyBhbmQgY2FkbWl1bSwgCnBvc2l0aXZlOyBzdWxwaHVyLCBzZWxlbml1bSBhbmQgdGVsbHVyaXVtLCBuZWdhdGl2ZS4gU2VsZW5pdW0gCmlzIGEgcGVjdWxpYXJseSBiZWF1dGlmdWwgZWxlbWVudCwgd2l0aCBhIHN0YXIgZmxvYXRpbmcgYWNyb3NzKiB0aGUgCm1vdXRoIG9mIGVhY2ggZnVubmVsIDsgdGhpcyBzdGFyIGlzIGV4dHJlbWVseSBzZW5zaXRpdmUgdG8gbGlnaHQsIAphbmQgaXRzIHJheXMgdHJlbWJsZSB2aW9sZW50bHkgYW5kIGJlbmQgaWYgYSBiZWFtIG9mIGxpZ2h0IGZhbGxzIApvbiBpdC4gQWxsIHRoZXNlIGFyZSBkeWFkcy4gCgpUaGUgdGV0cmFoZWRyb24gaXMgbm90IGNvbmZpbmVkIHRvIHRoZSBleHRlcm5hbCBmb3JtIG9mIHRoZSAKYWJvdmUgYXRvbXMgOyBpdCBzZWVtcyB0byBiZSBvbmUgb2YgdGhlIGZhdm91cml0ZSBmb3JtcyBvZiBuYXR1cmUsIAphbmQgcmVwZWF0ZWRseSBhcHBlYXJzIGluIHRoZSBpbnRlcm5hbCBhcnJhbmdlbWVudHMuIFRoZXJlIGlzIApvbmUgdGV0cmFoZWRyb24gd2l0aGluIHRoZSB1bmtub3duIGVsZW1lbnQgb2NjdWx0dW0gOyB0d28gCmFwcGVhciBpbiBoZWxpdW0gKDMgb24gUGxhdGUgSUlJKTsgeXR0cml1bSBoYXMgYWxzbyB0d28gd2l0aGluIAppdHMgY3ViZSwgYXMgaGFzIGdlcm1hbml1bSA7IGZpdmUsIGludGVyc2VjdGluZywgYXJlIGZvdW5kIGluIG5lb24sIAptZXRhLW5lb24sIGFyZ29uLCBtZXRhcmdvbiwga3J5cHRvbiwgbWV0YS1rcnB5dG9uLCB4ZW5vbiwgCm1ldGEteGVub24sIGthbG9uLCBtZXRhLWthbG9uLCB0aW4sIHRpdGFuaXVtIGFuZCB6aXJjb25pdW0uIApHb2xkIGNvbnRhaW5zIG5vIGxlc3MgdGhhbiB0d2VudHkgdGV0cmFoZWRyYS4gCgpJSUkuIFRoZSBDdWJlLiDigJQgVGhlIGN1YmUgYXBwZWFycyB0byBiZSB0aGUgZm9ybSBvZiB0cmlhZHMuIApJdCBoYXMgc2l4IGZ1bm5lbHMsIGNvbnRhaW5pbmcgb3ZvaWRzLCBhbmQgb3BlbmluZyBvbiB0aGUgZmFjZXMgCm9mIHRoZSBjdWJlLiBCb3JvbiBpcyBjaG9zZW4gYXMgYW4gZXhhbXBsZSAoNCBvbiBQbGF0ZSBJSUkpLiAKSXRzIGdyb3VwIG1lbWJlcnMsIHNjYW5kaXVtIGFuZCB5dHRyaXVtLCBoYXZlIHRoZSBzYW1lIGZvcm0gOyAKd2UgaGF2ZSBub3QgZXhhbWluZWQgdGhlIGZvdXJ0aCA7IHRoZSBncm91cCBpcyBwb3NpdGl2ZS4gSXRzIApuZWdhdGl2ZSBjb21wbGVtZW50IGNvbnNpc3RzIG9mIG5pdHJvZ2VuLCB2YW5hZGl1bSBhbmQgbmlvYml1bSwgCmFuZCB3ZSBoYXZlIGFnYWluIHRvIG5vdGUgdGhhdCBuaXRyb2dlbiwgbGlrZSBoeWRyb2dlbiBhbmQgCgoKMzAgCgpveHlnZW4sIGRlcGFydHMgZnJvbSBpdHMgZ3JvdXAgdHlwZS4gVHdvIG90aGVyIHRyaWFkIGdyb3VwcywgdGhlIApwb3NpdGl2ZSBha2ltaW5pdW0sIGdhbGxpdW0gYW5kIGluZGl1bSAodGhlIGZvdXJ0aCB1bmV4YW1pbmVkKSAKYW5kIHRoZSBuZWdhdGl2ZSBwaG9zcGhvcnVzLCBhcnNlbmljIGFuZCBhbnRpbW9ueSAodGhlIGZvdXJ0aCB1bi0gCmV4YW1pbmVkKSwgaGF2ZSBhbHNvIHNpeCBmdW5uZWxzIG9wZW5pbmcgb24gdGhlIGZhY2VzIG9mIGEgY3ViZS4gCgpJVi4gVGhlIE9jdGFoZWRyb24uIOKAlCBUaGUgc2ltcGxlc3QgZXhhbXBsZSBvZiB0aGlzIGlzIGNhcmJvbiAKKDUgb24gUGxhdGUgSUlJKS4gV2UgaGF2ZSBhZ2FpbiB0aGUgZnVubmVsIHdpdGggaXRzIG92b2lkcywgYnV0IApub3cgdGhlcmUgYXJlIGVpZ2h0IGZ1bm5lbHMgb3BlbmluZyBvbiB0aGUgZWlnaHQgZmFjZXMgb2YgdGhlIApvY3RhaGVkcm9uLiBJbiB0aXRhbml1bSAoNiBvbiBQbGF0ZSBJSUkpIHRoZSBmb3JtIGlzIG1hc2tlZCAKYnkgdGhlIHByb3RydWRpbmcgYXJtcywgd2hpY2ggZ2l2ZSB0aGUgYXBwZWFyYW5jZSBvZiB0aGUgb2xkIApSb3NpY3J1Y2lhbiBDcm9zcyBhbmQgUm9zZSwgYnV0IHdoZW4gd2UgbG9vayBpbnRvIHRoZSBkZXRhaWxzIApsYXRlciwgdGhlIGNhcmJvbiB0eXBlIGNvbWVzIG91dCBjbGVhcmx5LiBaaXJjb25pdW0gaXMgZXhhY3RseSAKbGlrZSB0aXRhbml1bSBpbiBmb3JtLCBidXQgY29udGFpbnMgYSBsYXJnZSBudW1iZXIgb2YgYXRvbXMuIApXZSBkaWQgbm90IGV4YW1pbmUgdGhlIHJlbWFpbmluZyB0d28gbWVtYmVycyBvZiB0aGlzIGdyb3VwLiAKVGhlIGdyb3VwIGlzIHRldHJhdG9taWMgYW5kIHBvc2l0aXZlLiBJdHMgbmVnYXRpdmUgcGVuZGFudCAKc2hvd3MgdGhlIHNhbWUgZm9ybSBpbiBzaWxpY29uLCBnZXJtYW5pdW0gYW5kIHRpbiA7IGFnYWluLCB0aGUgCmZvdXJ0aCB3YXMgdW5leGFtaW5lZC4gCgpWLiBUaGUgQmFycy4g4oCUIFRoZXNlIGNoYXJhY3RlcmlzZSBhIHNldCBvZiBjbG9zZWx5IGFsbGllZCAKZ3JvdXBzLCB0ZXJtZWQgIiBpbnRlci1wZXJpb2RpYy4iIEZvdXJ0ZWVuIGJhcnMgKG9yIHNldmVuIApjcm9zc2VkKSByYWRpYXRlIGZyb20gYSBjZW50cmUsIGFzIGluIGlyb24gKGkgb24gUGxhdGUgSVYpLCBhbmQgCnRoZSBtZW1iZXJzIG9mIGVhY2ggZ3JvdXAg4oCUIGlyb24sIG5pY2tlbCwgY29iYWx0IDsgcnV0aGVuaXVtLCAKcmhvZGl1bSwgcGFsbGFkaXVtIDsgb3NtaXVtLCBpcmlkaXVtLCBwbGF0aW51bSDigJQgZGlmZmVyIGZyb20gCmVhY2ggb3RoZXIgYnkgdGhlIHdlaWdodCBvZiBlYWNoIGJhciwgaW5jcmVhc2luZyBpbiBvcmRlcmx5IApzdWNjZXNzaW9uIDsgdGhlIGRldGFpbHMgd2lsbCBiZSBnaXZlbiBsYXRlci4gTWFuZ2FuZXNlIGlzIG9mdGVuIApncm91cGVkIHdpdGggaXJvbiwgbmlja2VsLCBhbmQgY29iYWx0IHtzZWUgQ3Jvb2tlcycgbGVtbmlzY2F0ZXMpLCAKYnV0IGl0cyBmb3VydGVlbiBwcm90cnVkaW5nIGJvZGllcyByZXBlYXQgdGhlICdNaXRoaXVtIHNwaWtlIiAKKHByb3RvLWVsZW1lbnQgNSkgYW5kIGFyZSBncm91cGVkIHJvdW5kIGEgY2VudHJhbCBvdm9pZC4gVGhpcyAKd291bGQgYXBwZWFyIHRvIGNvbm5lY3QgaXQgd2l0aCBsaXRoaXVtICgyIG9uIFBsYXRlIElWKSByYXRoZXIgCnRoYW4gd2l0aCBmbHVvcmluZSAoMyBpbiBQbGF0ZSBJViksIHdpdGggd2hpY2ggaXQgaXMgb2Z0ZW4gY2xhc3NlZC4gClRoZSAibGl0aGl1bSBzcGlrZSIgcmUtYXBwZWFycyBpbiBwb3Rhc3NpdW0gYW5kIHJ1YmlkaXVtLiAKVGhlc2UgZGV0YWlscywgYWdhaW4sIHdpbGwgY29tZSBvdXQgbW9yZSBjbGVhcmx5IGxhdGVyLiAKClZJLiBUaGUgU3Rhci4g4oCUIEEgZmxhdCBzdGFyLCB3aXRoIGZpdmUgaW50ZXJwZW5ldHJhdGluZyB0ZXRyYS0gCmhlZHJhIGluIHRoZSBjZW50cmUsIGlzIHRoZSBjaGFyYWN0ZXJpc3RpYyBvZiBuZW9uIGFuZCBpdHMgYWxsaWVzIAooNCBvbiBQbGF0ZSBJVikgbGVhdmluZyBhcGFydCBoZWxpdW0sIHdoaWNoLCBhcyBtYXkgYmUgc2VlbiBieSAKcmVmZXJyaW5nIHRvIDMsIFBsYXRlIElWLCBoYXMgYW4gZW50aXJlbHkgZGlmZmVyZW50IGZvcm0uIAoKVGhlcmUgYXJlIHRodXMgc2l4IGNsZWFybHkgZGVmaW5lZCBmb3JtcywgdHlwaWNhbCBvZiBjbGFzc2VzLCAKd2l0aCB0d28g4oCUIGxpdGhpdW0gYW5kIGZsdW9yaW5lIOKAlCBvZiBkb3VidGZ1bCBhZmZpbml0aWVzLiBJdCBpcyAKd29ydGh5IG9mIG5vdGljZSB0aGF0IGluIGRpYXRvbWljIGVsZW1lbnRzIGZvdXIgZnVubmVscyBvcGVuIG9uIAp0aGUgZmFjZXMgb2YgdGV0cmFoZWRyYSA7IGluIHRyaWF0b21pYywgc2l4IGZ1bm5lbHMgb24gdGhlIGZhY2VzIG9mIApjdWJlcyA7IGluIHRldHJhdG9taWMsIGVpZ0ppdCBmdW5uZWxzIG9uIHRoZSBmYWNlcyBvZiBvY3RhaGVkcmEuIAoKClBsYXRlIGxZLiAKCgpoIGgsICdLIAoKCjMxIAoKVGh1cyB3ZSBoYXZlIGEgcmVndWxhciBzZXF1ZW5jZSBvZiB0aGUgcGxhdG9uaWMgc29saWRzLCBhbmQgdGhlIApxdWVzdGlvbiBzdWdnZXN0cyBpdHNlbGYsIHdpbGwgZnVydGhlciBldm9sdXRpb24gZGV2ZWxvcCBlbGVtZW50cyAKc2hhcGVkIHRvIHRoZSBkb2RlY2FoZWRyb24gYW5kIHRoZSBpY29zYWhlZHJvbiA/IAoKSUkuIAoKV2Ugbm93IHBhc3MgZnJvbSB0aGUgY29uc2lkZXJhdGlvbiBvZiB0aGUgb3V0ZXIgZm9ybXMgb2YgCnRoZSBjaGVtaWNhbCBlbGVtZW50cyB0byBhIHN0dWR5IG9mIHRoZWlyIGludGVybmFsIHN0cnVjdHVyZSwgdGhlIAphcnJhbmdlbWVudCB3aXRoaW4gdGhlIGVsZW1lbnQgb2YgbW9yZSBvciBsZXNzIGNvbXBsaWNhdGVkIApncm91cHMg4oCUIHByb3RvLWVsZW1lbnRzIOKAlCBjYXBhYmxlIG9mIHNlcGFyYXRlLCBpbmRlcGVuZGVudCAKZXhpc3RlbmNlIDsgdGhlc2UsIG9uY2UgbW9yZSwgbWF5IGJlIGRpc3NvY2lhdGVkIGludG8geWV0IHNpbXBsZXIgCmdyb3VwcyDigJQgaHlwZXItbWV0YS1wcm90by1lbGVtZW50cyDigJQgZXF1YWxseSBjYXBhYmxlIG9mIHNlcGFyYXRlLCAKaW5kZXBlbmRlbnQgZXhpc3RlbmNlLCBhbmQgcmVzb2x2YWJsZSBpbnRvIHNpbmdsZSB1bHRpbWF0ZSBwaHlzaWNhbCAKYXRvbXMsIHRoZSBpcnJlZHVjaWJsZSBzdWJzdHJhdHVtIG9mIHRoZSBwaHlzaWNhbCB3b3JsZCAoc2VlIApUSmljb3NvcGhpc3QsIDE5MDgsIHBwLiAzNTQtMzU2KS0qIAoKV2Ugc2hhbGwgaGF2ZSB0byBzdHVkeSB0aGUgZ2VuZXJhbCBpbnRlcm5hbCBzdHJ1Y3R1cmUsIGFuZCAKdGhlbiB0aGUgYnJlYWtpbmcgdXAgb2YgZWFjaCBlbGVtZW50LCBhbmQgdGhlIGFkbWlyYWJsZSAKZGlhZ3JhbXMsIHBhdGllbnRseSB3b3JrZWQgb3V0IGJ5IE1yLiBKaW5hcmFqYWRhc2EsIHdpbGwgbWFrZSAKdGhlIHN0dWR5IGNvbXBhcmF0aXZlbHkgZWFzeSB0byBjYXJyeSBvbi4gCgpUaGUgZGlhZ3JhbXMsIG9mIGNvdXJzZSwgY2FuIG9ubHkgZ2l2ZSBhIHZlcnkgZ2VuZXJhbCBpZGVhIG9mIAp0aGUgZmFjdHMgdGhleSByZXByZXNlbnQgOyB0aGV5IGdpdmUgZ3JvdXBpbmdzIGFuZCBzaG93IHJlbGF0aW9ucywgCmJ1dCBtdWNoIGVmZm9ydCBvZiB0aGUgaW1hZ2luYXRpb24gaXMgbmVlZGVkIHRvIHRyYW5zZm9ybSB0aGUgCnR3by1kaW1lbnNpb25hbCBkaWFncmFtIGludG8gdGhlIHRocmVlLWRpbWVuc2lvbmFsIG9iamVjdC4gClRoZSB3aXNlIHN0dWRlbnQgd2lsbCB0cnkgdG8gdmlzdWFsaXplIHRoZSBmaWd1cmUgZnJvbSB0aGUgZGlhZ3JhbS4gClRodXMgdGhlIHR3byB0cmlhbmdsZXMgb2YgaHlkcm9nZW4gYXJlIG5vdCBpbiBvbmUgcGxhbmUgOyB0aGUgCmNpcmNsZXMgYXJlIHNwaGVyZXMsIGFuZCB0aGUgYXRvbXMgd2l0aGluIHRoZW0sIHdoaWxlIHByZXNlcnZpbmcgCnRvIGVhY2ggb3RoZXIgdGhlaXIgcmVsYXRpdmUgcG9zaXRpb25zLCBhcmUgaW4gc3dpZnQgbW92ZW1lbnQgCmluIHRocmVlLWRpbWVuc2lvbmFsIHNwYWNlLiBXaGVyZSBmaXZlIGF0b21zIGFyZSBzZWVuLCBhcyBpbiAKYnJvbWluZSBhbmQgaW9kaW5lLCB0aGV5IGFyZSBnZW5lcmFsbHkgYXJyYW5nZWQgd2l0aCB0aGUgY2VudHJhbCAKYXRvbSBhYm92ZSB0aGUgZm91ciwgYW5kIHRoZWlyIG1vdGlvbiBpbmRpY2F0ZXMgbGluZXMgd2hpY2ggCmVyZWN0IGZvdXIgcGxhbmUgdHJpYW5nbGVzIOKAlCBtZWV0aW5nIGF0IHRoZWlyIGFwaWNlcyDigJQgb24gYSBzcXVhcmUgCmJhc2UsIGZvcm1pbmcgYSBzcXVhcmUtYmFzZWQgZm91ci1zaWRlZCBweXJhbWlkLiBFYWNoIGRvdCAKcmVwcmVzZW50cyBhIHNpbmdsZSB1bHRpbWF0ZSBhdG9tLiBUaGUgZW5jbG9zaW5nIGxpbmVzIGluZGljYXRlIAp0aGUgaW1wcmVzc2lvbiBvZiBmb3JtIG1hZGUgb24gdGhlIG9ic2VydmVyLCBhbmQgdGhlIGdyb3VwaW5ncyAKb2YgdGhlIGF0b21zIDsgdGhlIGdyb3VwcyB3aWxsIGRpdmlkZSBhbG9uZyB0aGVzZSBsaW5lcywgd2hlbiB0aGUgCmVsZW1lbnQgaXMgYnJva2VuIHVwLCBzbyB0aGF0IHRoZSBsaW5lcyBoYXZlIHNpZ25pZmljYW5jZSwgYnV0IAp0aGV5IGRvIG5vdCBleGlzdCBhcyBzdGFibGUgd2FsbHMgb3IgZW5jbG9zaW5nIGZpbG1zLCBidXQgcmF0aGVyIAptYXJrIGxpbWl0cywgbm90IGxpbmVzLCBvZiB2aWJyYXRpb25zLiBJdCBzaG91bGQgYmUgbm90ZWQgdGhhdCBpdCAKCiogVGhpcywgd2l0aCByZWZlcmVuY2VzIHdoaWNoIGFwcGVhciBsYXRlciAocHAuIDMyLCAzMywgNTAsIGV0Yy4pLCByZWxhdGVzIHRvIGFydGljbGVzIAp3aGljaCBhcHBlYXJlZCBpbiB0aGUgVGhlb2lvcGhpc3QsIDE5MFMuIAoKCjMyIAoKaXMgbm90IHBvc3NpYmxlIHRvIHNob3cgZml2ZSBvZiB0aGUgcHJpc21zIGluIHRoZSBmaXZlIGludGVyc2VjdGluZyAKdGV0cmFoZWRyYSBvZiBwcmlzbXMsIGFuZCAzMCBhdG9tcyBtdXN0LCB0aGVyZWZvcmUsIGJlIGFkZGVkIAppbiBjb3VudGluZy4gCgpUaGUgZGlhZ3JhbXMgYXJlIG5vdCBkcmF3biB0byBzY2FsZSwgYXMgc3VjaCBkcmF3aW5nIHdvdWxkIApiZSBpbXBvc3NpYmxlIDsgdGhlIGRvdCByZXByZXNlbnRpbmcgdGhlIGF0b20gaXMgZW5vcm1vdXNseSAKbG9vIGxhcmdlIGNvbXBhcmVkIHdpdGggdGhlIGVuY2xvc3VyZXMsIHdoaWNoIGFyZSBhYnN1cmRseSB0b28gCnNtYWxsIDsgYSBzY2FsZSBkcmF3aW5nIHdvdWxkIG1lYW4gYW4gYWxtb3N0IGludmlzaWJsZSBkb3Qgb24gYSAKc2hlZXQgb2YgbWFueSB5YXJkcyBzcXVhcmUuIAoKVGhlIHVzZSBvZiB0aGUgd29yZHMgIiBwb3NpdGl2ZSAiIGFuZCAiIG5lZ2F0aXZlICIgbmVlZHMgdG8gCmJlIGd1YXJkZWQgYnkgdGhlIGZvbGxvd2luZyBwYXJhZ3JhcGhzIGZyb20gdGhlIGFydGljbGUgb24gCl4nIENoZW1pc3RyeSAiIGluIHRoZSBFbmN5Y2xvcGN2ZGlhIEJybHRhbm5pY2EuIFdlIHVzZSB0aGUgCndvcmRzIGluIHRoZWlyIG9yZGluYXJ5IHRleHQtYm9vayBtZWFuaW5nLCBhbmQgaGF2ZSBub3QsIHNvIApmYXIsIGRldGVjdGVkIGFueSBjaGFyYWN0ZXJpc3RpY3Mgd2hlcmVieSBhbiBlbGVtZW50IGNhbiBiZSAKZGVjbGFyZWQsIGF0IHNpZ2h0LCB0byBiZSBlaXRoZXIgcG9zaXRpdmUgb3IgbmVnYXRpdmUgOiDigJQgCgoiIFdoZW4gYmluYXJ5IGNvbXBvdW5kcywgb3IgY29tcG91bmRzIG9mIHR3byBlbGVtZW50cywgCmFyZSBkZWNvbXBvc2VkIGJ5IGFuIGVsZWN0cmljIGN1cnJlbnQsIHRoZSB0d28gZWxlbWVudHMgbWFrZSAKdGhlaXIgYXBwZWFyYW5jZSBhdCBvcHBvc2l0ZSBwb2xlcy4gVGhlc2UgZWxlbWVudHMgd2hpY2ggYXJlIApkaXNlbmdhZ2VkIGF0IHRoZSBuZWdhdGl2ZSBwb2xlIGFyZSB0ZXJtZWQgZWxlY3Ryby1wb3NpdGl2ZSBvciAKcG9zaXRpdmUgb3IgYmFzeWxvdXMgZWxlbWVudHMsIHdoaWxlIHRob3NlIGRpc2VuZ2FnZWQgYXQgdGhlIApwb3NpdGl2ZSBwb2xlIGFyZSB0ZXJtZWQgZWxlY3Ryby1uZWdhdGl2ZSBvciBuZWdhdGl2ZSBvciBjaGxvcm91cyAKZWxlbWVudHMuIEJ1dCB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZXNlIHR3byBjbGFzc2VzIG9mIAplbGVtZW50cyBpcyBvbmUgb2YgZGVncmVlIG9ubHksIGFuZCB0aGV5IGdyYWR1YWxseSBtZXJnZSBpbnRvIAplYWNoIG90aGVyIDsgbW9yZW92ZXIgdGhlIGVsZWN0cmljIHJlbGF0aW9ucyBvZiBlbGVtZW50cyBhcmUgbm90IAphYnNvbHV0ZSwgYnV0IHZhcnkgYWNjb3JkaW5nIHRvIHRoZSBzdGF0ZSBvZiBjb21iaW5hdGlvbiBpbiAKd2hpY2ggdGhleSBleGlzdCwgc28gdGhhdCBpdCBpcyBqdXN0IGFzIGltcG9zc2libGUgdG8gZGl2aWRlIHRoZSAKZWxlbWVudHMgaW50byB0d28gY2xhc3NlcyBhY2NvcmRpbmcgdG8gdGhpcyBwcm9wZXJ0eSBhcyBpdCBpcyB0byAKc2VwYXJhdGUgdGhlbSBpbnRvIHR3byBkaXN0aW5jdCBjbGFzc2VzIG9mIG1ldGFscyBhbmQgbm9uLSAKbWV0YWxzLiIgCgpXZSBmb2xsb3cgaGVyZSB0aGUgZ3JvdXBpbmcgYWNjb3JkaW5nIHRvIGV4dGVybmFsIGZvcm1zLCAKYW5kIHRoZSBzdHVkZW50IHNob3VsZCBjb21wYXJlIGl0IHdpdGggdGhlIGdyb3VwcyBtYXJrZWQgaW4gCnRoZSBsZW1uaXNjYXRlIGFpcmFuZ2VtZW50IHNob3duIGluIEFydGljbGUgSUkgKHAuIDM3NywgcHJvcGVybHkgCnAuIDQzNywgRmVicnVhcnkpLCByZWFkaW5nIHRoZSBncm91cCBieSB0aGUgZGlza3MgdGhhdCBmYWxsIGJlbG93IAplYWNoIG90aGVyIDsgdGh1cyB0aGUgZmlyc3QgZ3JvdXAgaXMgSCwgQ0ksIEJyLCBJIChoeWRyb2dlbiwgCmNobG9yaW5lLCBicm9taW5lLCBpb2RpbmUpIGFuZCBhIGJsYW5rIGZvciBhbiB1bmRpc2NvdmVyZWQgCmVsZW1lbnQuIFRoZSBlbGVtZW50cyBncm93IGRlbnNlciBpbiBkZXNjZW5kaW5nIG9yZGVyIDsgdGh1cyAKaHlkcm9nZW4gaXMgYW4gaW52aXNpYmxlIGdhcyA7IGNobG9yaW5lIGEgZGVuc2VyIGdhcyB2aXNpYmxlIGJ5IGl0cyAKY29sb3VyIDsgYnJvbWluZSBpcyBhIGxpcXVpZCA7IGlvZGluZSBpcyBhIHNvbGlkIOKAlCBhbGwsIG9mIGNvdXJzZSwgCndoZW4gdGVtcGVyYXR1cmUgYW5kIHByZXNzdXJlIGFyZSBub3JtYWwuIEJ5IHRoZSBsb3dlcmluZyBvZiAKdGVtcGVyYXR1cmUgYW5kIHRoZSBpbmNyZWFzZSBvZiBwcmVzc3VyZSwgYW4gZWxlbWVudCB3aGljaCBpcyAKCgozMyAKCm5vcm1hbGx5IGdhc2VvdXMgYmVjb21lcyBhIGxpcXVpZCwgYW5kIHRoZW4gYSBzb2xpZC4gU29saWQsIApsaXF1aWQsIGdhc2VvdXMsIGFyZSB0aHJlZSBpbnRlcmNoYW5nZWFibGUgc3RhdGVzIG9mIG1hdHRlciwgYW5kIAphbiBlbGVtZW50IGRvZXMgbm90IGFsdGVyIGl0cyBjb25zdGl0dXRpb24gYnkgY2hhbmdpbmcgaXRzIHN0YXRlLiAKU28gZmFyIGFzIGEgY2hlbWljYWwgIiBhdG9tICIgaXMgY29uY2VybmVkLCBpdCBtYXR0ZXJzIG5vdCAKd2hldGhlciBpdCBiZSBkcmF3biBmb3IgaW52ZXN0aWdhdGlvbiBmcm9tIGEgc29saWQsIGEgbGlxdWlkLCBvciBhIApnYXMgOyBidXQgdGhlIGludGVybmFsIGFycmFuZ2VtZW50cyBvZiB0aGUgIiBhdG9tcyAiIGJlY29tZSBtdWNoIAptb3JlIGNvbXBsaWNhdGVkIGFzIHRoZXkgYmVjb21lIGRlbnNlciBhbmQgZGVuc2VyLCBhcyBpcyBzZWVuIApieSB0aGUgY29tcGxleCBhcnJhbmdlbWVudHMgbmVjZXNzaXRhdGVkIGJ5IHRoZSBwcmVzZW5jZSBvZiB0aGUgCjM1NDYgdWx0aW1hdGUgYXRvbXMgY29udGFpbmVkIGluIHRoZSBjaGVtaWNhbCAiIGF0b20gIiBvZiBnb2xkLCAKYXMgY29tcGFyZWQgd2l0aCB0aGUgc2ltcGxlIGFycmFuZ2VtZW50IG9mIHRoZSAxOCB1bHRpbWF0ZSAKYXRvbXMgb2YgaHlkcm9nZW4uIAoKQWNjb3JkaW5nIHRvIHRoZSBsZW1uaXNjYXRlIGFycmFuZ2VtZW50LCB3ZSBzaG91bGQgY29tLSAKbWVuY2Ugd2l0aCBoeWRyb2dlbiBhcyB0aGUgaGVhZCBvZiB0aGUgZmlyc3QgbmVnYXRpdmUgZ3JvdXAsIGJ1dCAKYXMgaXQgZGlmZmVycyB3aG9sbHkgZnJvbSB0aG9zZSBwbGFjZWQgd2l0aCBpdCwgaXQgaXMgYmV0dGVyIHRvIHRha2UgCml0IGJ5IGl0c2VsZi4gSHlkcm9nZW4gaXMgdGhlIGxpZ2h0ZXN0IG9mIHRoZSBrbm93biBlbGVtZW50cywgYW5kIAppcyB0aGVyZWZvcmUgdGFrZW4gYXMgaSBpbiBvcmRpbmFyeSBjaGVtaXN0cnksIGFuZCBhbGwgYXRvbWljIAp3ZWlnaHRzIGFyZSBtdWx0aXBsZXMgb2YgdGhpcy4gV2UgdGFrZSBpdCBhcyAxOCwgYmVjYXVzZSBpdCBjb24tIAp0YWlucyBlaWdodGVlbiB1bHRpbWF0ZSBhdG9tcywgdGhlIHNtYWxsZXN0IG51bWJlciB3ZSBoYXZlIApmb3VuZCBpbiBhIGNoZW1pY2FsIGVsZW1lbnQuIFNvIG91ciAnJ251bWJlci13ZWlnaHRzIiBhcmUgCm9idGFpbmVkIGJ5IGRpdmlkaW5nIHRoZSB0b3RhbCBudW1iZXIgb2YgYXRvbXMgaW4gYW4gZWxlbWVudCBieSAKMTggKHNlZSBwLiAzNDksIEphbnVhcnkpLiAKCkh5ZHJvZ2VuIChQbGF0ZSBWLCBpKS4g4oCUIEh5ZHJvZ2VuIG5vdCBvbmx5IHN0YW5kcyBhcGFydCAKZnJvbSBpdHMgcmVwdXRlZCBncm91cCBieSBub3QgaGF2aW5nIHRoZSBjaGFyYWN0ZXJpc3RpYyBkdW1iLSAKYmVsbCBzaGFwZSwgd2VsbCBzaG93biBpbiBzb2RpdW0gKFBsYXRlIDEsIG9wcG9zaXRlIHAuIDM0OSwgCkphbnVhcnkpLCBidXQgaXQgYWxzbyBzdGFuZHMgYXBhcnQgaW4gYmVpbmcgcG9zaXRpdmUsIHNlcnZpbmcgYXMgYSAKYmFzZSwgbm90IGFzIGEgY2hsb3JvdXMsIG9yIGFjaWQsIHJhZGljYWwsIHRodXMgIiBwbGF5aW5nIHRoZSBwYXJ0IApvZiBhIG1ldGFsLCIgYXMgaW4gaHlkcm9nZW4gY2hsb3JpZGUgKGh5ZHJvY2hsb3JpYyBhY2lkKSwgaHktIApkcm9nZW4gc3VscGhhdGUgKHN1bHBodXJpYyBhY2lkKSwgZXRjLiAKCkl0IGlzIG1vc3QgY3VyaW91cyB0aGF0IGh5ZHJvZ2VuLCBveHlnZW4gYW5kIG5pdHJvZ2VuLCB0aGUgCm1vc3Qgd2lkZWx5IHNwcmVhZCBnYXNlcywgYWxsIGRpZmZlciBmdW5kYW1lbnRhbGx5IGluIGZvcm0gZnJvbSAKdGhlIGdyb3VwcyB0aGV5IHJlcHV0ZWRseSBoZWFkLiogSHlkcm9nZW4gd2FzIHRoZSBmaXJzdCAKCgrigKIgU2luY2Ugd3JpdGluZyB0aGUgYWJvdmUgSSBoYXZlIG5vdGljZWQsIGluIHRoZSBMb25kb24sIEVkaW5idXJnaCBhbmQgRHVibGluIApQaGlsb3NvcGhpY2FsIE1hZ2F6aW5lIGFuZCBKb3VybmFsIG9mIFNjaWVuY2UsIGNvbmR1Y3RlZCBieSBEci4gSm9obiBKb2x5IGFuZCBNci4gCldpbGxpYW0gRnJhbmNpcywgaW4gYW4gYXJ0aWNsZSBlbnRpdGxlZCAiRXZvbHV0aW9uIGFuZCBEZXZvbHV0aW9uIG9mIHRoZSBFbGVtZW50cywiIAp0aGUgc3RhdGVtZW50IHRoYXQgaXQgaXMgcHJvYmFibGUgdGhhdCBpbiAiIHRoZSBuZWJ1bG91cyBzdGF0ZSBvZiBtYXR0ZXIgdGhlcmUgYXJlIGZvdXIgCnN1YnN0YW5jZXMsIHRoZSBmaXRzdCB0d28gYmVpbmcgdW5rbm93biB1cG9uIGVhcnRoLCB0aGUgdGhpcmQgYmVpbmcgaHlkcm9nZW4gYW5kIHRoZSAKZm91cnRoIC4g4oCiIC4gaGVsaXVtLiBJdCBhbHNvIHNlZW1zIHByb2JhYmxlIHRoYXQgLiAuIC4gaHlkcm9nZW4sIHRoZSB0d28gdW5rbm93biAKZWxlbWVudHMsIGFuZCBoZWxpdW0gYXJlIHRoZSBmb3VyIG9yaWdpbmFsIGVsZW1lbnRzIGZyb20gd2hpY2ggYWxsIHRoZSBvdGhlciBlbGVtZW50cyAKZm9ybS4gVG8gZGlzdGluZ3Vpc2ggdGhlbSBmcm9tIHRoZSBvdGhlcnMgd2Ugd2lsbCB0ZXJtIHRoZW0gcHJvdG9ucy4iIFRoaXMgaXMgc3VnLSAKZ2VzdGl2ZSBhcyByZWdhcmRzIGh5ZHJvZ2VuLCBidXQgZG9lcyBub3QgaGVscCB1cyB3aXRoIHJlZ2FyZCB0byBveHlnZW4gYW5kIG5pdHJvZ2VuLiAKCjMgCgoKMzQgCgoKY2hlbWljYWwgZWxlbWVudCBleGFtaW5lZCBieSB1cywgbmVhcmx5IHRoaXJ0ZWVuIHllYXJzIGFnbywgYW5kIApJIHJlcHJvZHVjZSBoZXJlIHRoZSBzdWJzdGFuY2Ugb2Ygd2hhdCBJIHdyb3RlIGluIE5vdmVtYmVyLCAKMTg5NSwgZm9yIHdlIGhhdmUgbm90aGluZyB0byBhZGQgdG8gbm9yIGFtZW5kIGluIGl0LiAKCgpDaFh0cnItaS9uXiAKCgoiQnJueW1rL3J1dF4gCgoKUGxhdGUgVi4gCgoKwqkuOiAKCgomLiAKCgrigKIgViAKCgovTyAKCgooRCAKCgpYb3RaaS9uQSAKCgozIDQgCgpIeWRyb2dlbiBjb25zaXN0cyBvZiBzaXggc21hbGwgYm9kaWVzLCBjb250YWluZWQgaW4gYW4gZWdnLSAKbGlrZSBmb3JtICh0aGUgb3V0ZXIgZm9ybXMgYXJlIG5vdCBnaXZlbiBpbiB0aGUgZGlhZ3JhbXMpLiBUaGUgCnNpeCBsaXR0bGUgYm9kaWVzIGFyZSBhcnJhbmdlZCBpbiB0d28gc2V0cyBvZiB0aHJlZSwgZm9ybWluZyB0d28gCnRyaWFuZ2xlcyB3aGljaCBhcmUgbm90IGludGVyY2hhbmdlYWJsZSwgYnV0IGFyZSByZWxhdGVkIHRvIGVhY2ggCgoKMzUgCgpvdGhlciBhcyBvYmplY3QgYW5kIGltYWdlLiBUaGUgc2l4IGJvZGllcyBhcmUgbm90IGFsbCBhbGlrZTsgCnRoZXkgZWFjaCBjb250YWluIHRocmVlIHVsdGltYXRlIHBoeXNpY2FsIGF0b21zLCBidXQgaW4gZm91ciBvZiAKdGhlIGJvZGllcyB0aGUgdGhyZWUgYXRvbXMgYXJlIGFycmFuZ2VkIGluIGEgdHJpYW5nbGUsIGFuZCBpbiB0aGUgCnJlbWFpbmluZyB0d28gaW4gYSBsaW5lLiAKCkh5ZHJvZ2VuIDogNiBib2RpZXMgb2YgMyAuLi4gLi4uIDE4IAoKQXRvbWljIHdlaWdodCAuLi4gLi4uIGkgCgpOdW1iZXIgd2VpZ2h0IHlmIC4uLiAuLi4gaSAKCkkuIOKAlCBUaGUgRHVtYi1iZWxsIEdyb3VwLiAKCkkgYS4g4oCUIFRoaXMgZ3JvdXAgY29uc2lzdHMgb2YgQ0ksIEJyLCBhbmQgSSAoY2hsb3JpbmUsIGJyb21pbmUgCmFuZCBpb2RpbmUpIDsgdGhleSBhcmUgbW9uYWRzLCBkaWFtYWduZXRpYyBhbmQgbmVnYXRpdmUuIAoKQ2hsb3JpbmUgKFBsYXRlIFYsIDIpLiDigJQgQXMgYWxyZWFkeSBzYWlkLCB0aGUgZ2VuZXJhbCBmb3JtIGlzIAp0aGF0IG9mIHRoZSBkdW1iLWJlbGwsIHRoZSBsb3dlciBhbmQgdXBwZXIgcGFydHMgZWFjaCBjb25zaXN0aW5nIApvZiB0d2VsdmUgZnVubmVscywgc2l4IHNsb3BpbmcgdXB3YXJkcyBhbmQgc2l4IGRvd253YXJkcywgdGhlIApmdW5uZWxzIHJhZGlhdGluZyBvdXR3YXJkcyBmcm9tIGEgY2VudHJhbCBnbG9iZSwgYW5kIHRoZXNlIHR3byAKcGFydHMgYmVpbmcgdW5pdGVkIGJ5IGEgY29ubmVjdGluZyByb2QgKHNlZSwgYWdhaW4sIHNvZGl1bSwgClBsYXRlIEkpLiAKClRoZSBmdW5uZWwgKHNob3duIGZpYXQgYXMgYW4gaXNvc2NlbGVzIHRyaWFuZ2xlLCBzdGFuZGluZyBvbiAKaXRzIGFwZXgpIGlzIGEgc29tZXdoYXQgY29tcGxpY2F0ZWQgc3RydWN0dXJlLCBvZiB0aGUgc2FtZSB0eXBlIAphcyB0aGF0IGluIHNvZGl1bSAoUGxhdGUgVkksIDIpLCB0aGUgZGlmZmVyZW5jZSBjb25zaXN0aW5nIGluIHRoZSAKYWRkaXRpb24gb2Ygb25lIG1vcmUgZ2xvYmUsIGNvbnRhaW5pbmcgbmluZSBhZGRpdGlvbmFsIGF0b21zLiAKVGhlIGNlbnRyYWwgZ2xvYmUgaXMgdGhlIHNhbWUgYXMgaW4gc29kaXVtLCBidXQgdGhlIGNvbm5lY3RpbmcgCnJvZCBkaWZmZXJzLiBXZSBoYXZlIGhlcmUgYSByZWd1bGFyIGFycmFuZ2VtZW50IG9mIGZpdmUgZ2xvYmVzLCAKY29udGFpbmluZyB0aHJlZSwgZm91ciwgZml2ZSwgZm91ciwgdGhyZWUgYXRvbXMgcmVzcGVjdGl2ZWx5LCAKd2hlcmVhcyBzb2RpdW0gaGFzIG9ubHkgdGhyZWUgYm9kaWVzLCBjb250YWluaW5nIGZvdXIsIHNpeCwgZm91ci4gCkJ1dCBjb3BwZXIgYW5kIHNpbHZlciwgaXRzIGNvbmdlbmVycywgaGF2ZSB0aGVpciBjb25uZWN0aW5nIHJvZHMgCm9mIGV4YWN0bHkgdGhlIHNhbWUgcGF0dGVybiBhcyB0aGUgY2hsb3JpbmUgcm9kLCBhbmQgdGhlIGNobG9yaW5lIApyb2QgcmVhcHBlYXJzIGluIGJvdGggYnJvbWluZSBhbmQgaW9kaW5lLiBUaGVzZSBjbG9zZSBzaW1pbGFyaS0gCnRpZXMgcG9pbnQgdG8gc29tZSByZWFsIHJlbGF0aW9uIGJldHdlZW4gdGhlc2UgZ3JvdXBzIG9mIGVsZW1lbnRzLCAKd2hpY2ggYXJlIHBsYWNlZCwgaW4gdGhlIGxlbW5pc2NhdGVzLCBlcXVpLWRpc3RhbnQgZnJvbSB0aGUgY2VudHJhbCAKbGluZSwgdGhvdWdoIG9uZSBpcyBvbiB0aGUgc3dpbmcgd2hpY2ggaXMgZ29pbmcgdG93YXJkcyB0aGF0IApsaW5lIGFuZCB0aGUgb3RoZXIgaXMgb24gdGhlIHN3aW5nIGF3YXkgZnJvbSBpdC4gCgpDSExPUklORSA6IFVwcGVyIHBhcnQgS14gXiIiZiBcXiBaXiBeNSBhdG9tcyAzMDAgCgooQ2VudHJhbCBnbG9iZSAuLi4gMTAgCgpMb3dlciBwYXJ0IHNhbWUgLi4uIC4uLiAzMTAgCgpDb25uZWN0aW5nIHJvZCAuLi4gLi4uIDE5IAoKVG90YWwgLi4uIC4uLiA2MzkgCgpBdG9taWMgd2VpZ2h0IC4uIC4uIC4uLiAzNSo0NzMgCgpOdW1iZXIgd2VpZ2h0IF4zXjkgLi4uIC4uLiAzNSo1MCAKCgozNiAKCihUaGUgQXRvbWljIFdlaWdodHMgYXJlIG1vc3RseSBmcm9tIEVyZG1hbm4sIGFuZCB0aGUgCk51bWJlciBXZWlnaHRzIGFyZSB0aG9zZSBhc2NlcnRhaW5lZCBieSB1cyBieSBjb3VudGluZyB0aGUgCmF0b21zIGFzIGRlc2NyaWJlZCBvbiBwLiAzNDksIEphbnVhcnksIGFuZCBkaXZpZGluZyBieSAxOC4gClByb2YuIFQuIFcuIFJpY2hhcmRzLCBpbiBOYXR1cmUsIEp1bHkgMTgsIDE5MDcsIGdpdmVzIDM1JzQ3My4pIAoKQnJvbWluZSAoUGxhdGUgViwgMykuIOKAlCBJbiBicm9taW5lLCBlYWNoIGZ1bm5lbCBoYXMgdGhyZWUgCmFkZGl0aW9uYWwgYm9kaWVzLCBvdm9pZCBpbiBzaGFwZSwgYW4gYWRkaXRpb24gb2YgMzMgYXRvbXMgYmVpbmcgCnRodXMgbWFkZSB3aXRob3V0IGFueSBkaXN0dXJiYW5jZSBvZiBmb3JtIDsgdHdvIHBhaXJzIG9mIGF0b21zIAphcmUgYWRkZWQgdG8gdGhlIGNlbnRyYWwgZ2xvYmUsIGFuZCBhIHJlYXJyYW5nZW1lbnQgb2YgdGhlIGF0b21zIAppcyBlZmZlY3RlZCBieSBkcmF3aW5nIHRvZ2V0aGVyIGFuZCBsZXNzZW5pbmcgdGhlIHN3aW5nIG9mIHRoZSAKcGFpciBvZiB0cmlwbGV0cywgdGh1cyBtYWtpbmcgc3ltbWV0cmljYWwgcm9vbSBmb3IgdGhlIG5ldy0gCmNvbWVycy4gVGhlIGNvbm5lY3Rpbmcgcm9kIHJlbWFpbnMgdW5jaGFuZ2VkLiBUaGUgdG90YWwgCm51bWJlciBvZiBhdG9tcyBpcyB0aHVzIHJhaXNlZCBmcm9tIHRoZSA2Mzkgb2YgY2hsb3JpbmUgdG8gMTQzOS4gCk92ZXIgYW5kIG92ZXIgYWdhaW4sIGluIHRoZXNlIGludmVzdGlnYXRpb25zLCB3ZXJlIHdlIHJlbWluZGVkIApvZiBUeW5kYWxsJ3MgZmFzY2luYXRpbmcgZGVzY3JpcHRpb24gb2YgY3J5c3RhbCBidWlsZGluZywgYW5kIGhpcyAKZmFuY3kgb2YgdGhlIHRpbnksIGluZ2VuaW91cyBidWlsZGVycyBidXNpZWQgdGhlcmVpbi4gVHJ1bHkgYXJlIAp0aGVyZSBzdWNoIGJ1aWxkZXJzLCBhbmQgdGhlIGluZ2VudWl0eSBhbmQgZWZmZWN0aXZlbmVzcyBvZiB0aGVpciAKZGV2aWNlcyBhcmUgZGVsaWdodGZ1bCB0byBzZWUuJycgCgpyLCAuLF4gVFQgLGYgMTIgZnVubmVscyBvZiBzOCBhdG9tcyA2OTYgCgpCcm9taW5lIFVwcGVyIHBhcnQtXixeIGkgMSAxIHUgCgpeXiAnXiAoQ2VudHJhbCBnbG9iZSAuLi4gMTQgCgpMb3dlciBwYXJ0IHNhbWUgLi4uIC4uLiA3MTAgCgpDb25uZWN0aW5nIHJvZCAuLi4gLi4uIDE5IAoKVG90YWwgLi4uIC4uLiAxNDM5IAoKQXRvbWljIHdlaWdodCAuLi4gNzknOTUzIAoKTnVtYmVyIHdlaWdodCAxQUHCpyA3OSo5NDQgCgpJb2RpbmUgKFBsYXRlIFYsIDQpLiDigJQgV2UgZmluZCBoZXJlaW4gdGhhdCB0aGUgY2VudHJhbCBnbG9iZSAKZ2FpbnMgNCBhdG9tcywgdGhlIHR3byBwYWlycyBiZWNvbWluZyAyIHF1YXJ0ZXRzIDsgdGhlIGNvbm5lY3QtIAppbmcgcm9kIGV4YWN0bHkgcmVwcm9kdWNlcyB0aGUgcm9kcyBvZiBjaGxvcmluZSBhbmQgYnJvbWluZSA7IAp0aGUgZnVubmVsIGlzIGFsc28gdGhhdCBvZiBicm9taW5lLCBleGNlcHQgdGhhdCBmaXZlIGJvZGllcywgY29uLSAKdGFpbmluZyAzNSBhdG9tcywgYXJlIGFkZGVkIHRvIGl0LiBUaGUgMTQzOSBhdG9tcyBvZiBicm9taW5lIAphcmUgdGh1cyByYWlzZWQgdG8gMjg4Ny4gCgosLCAsKCAxMiBmdW5uZWxzIG9mIDkwIGF0b21zIDExMTYgCgpJb2RpbmUgOiBVcHBlciBwYXJ0al5eXl5eXl4uXmogXiwsXl5eXiBfIF5eIAoKTG93ZXIgcGFydCBzYW1lIC4uLiAuLi4gMTEgMzQgCgpDb25uZWN0aW5nIHJvZCAuLi4gLi4uIDE5IAoKVG90YWwgLi4uIC4uLiAyMjg3IAoKQXRvbWljIHdlaWdodCAuLi4gaTI2J29pIAoKTnVtYmVyIHdlaWdodCBeXl5eIC4uLiAnMjcqMDU1IAoK4oCiIFRoZW9zb3BoaXN0cyBjYWxsIHRoZW0gTmF0dXJlLVNwaXJpdHMsIGFuZCBvZnRlbiB1c2UgdGhlIG1lZGlldmFsIHRlcm0gCkVsZW1lbnRhbHMuIEJlaW5ncyBjb25jZXJuZWQgd2l0aCB0aGUgZWxlbWVudHMgdHJ1bHkgYXJlIHRoZXksIGV2ZW4gd2l0aCBjaGVtaWNhbCAKZWxlbWVudHMuIAoKCjM3IAoKClRoZSBwbGFuIHVuZGVybHlpbmcgdGhlIGJ1aWxkaW5nIHVwIG9mIGdyb3VwcyBpcyBoZXJlIGNsZWFybHkgCnNob3duIDsgYSBmaWd1cmUgaXMgYnVpbHQgdXAgb24gYSBjZXJ0YWluIHBsYW4sIGluIHRoaXMgY2FzZSBhIGR1bWItIApiZWxsIDsgaW4gdGhlIHN1Y2NlZWRpbmcgbWVtYmVycyBvZiB0aGUgZ3JvdXAgYWRkaXRpb25hbCBhdG9tcyAKYXJlIHN5bW1ldHJpY2FsbHkgaW50cm9kdWNlZCwgbW9kaWZ5aW5nIHRoZSBhcHBlYXJhbmNlLCBidXQgCmZvbGxvd2luZyB0aGUgZ2VuZXJhbCBpZGVhIDsgaW4gdGhpcyBjYXNlIHRoZSBjb25uZWN0aW5nIHJvZCAKcmVtYWlucyB1bmFsdGVyZWQsIHdoaWxlIHRoZSB0d28gZW5kcyBiZWNvbWUgbGFyZ2VyIGFuZCBsYXJnZXIsIAptb3JlIGFuZCBtb3JlIG92ZXJzaGFkb3dpbmcgaXQsIGFuZCBjYXVzaW5nIGl0IHRvIGJlY29tZSAKc2hvcnRlciBhbmQgdGhpY2tlci4gVGh1cyBhIGdyb3VwIGlzIGdyYWR1YWxseSBmb3JtZWQgYnkgCmFkZGl0aW9uYWwgc3ltbWV0cmljYWwgYWRkaXRpb25zLiBJbiB0aGUgdW5kaXNjb3ZlcmVkIHJlLSAKbWFpbmluZyBtZW1iZXIgb2YgdGhlIGdyb3VwIHdlIG1heSBzdXBwb3NlIHRoYXQgdGhlIHJvZCAKd2lsbCBoYXZlIGJlY29tZSBzdGlsbCBtb3JlIGVnZy1saWtlLCBhcyBpbiB0aGUgY2FzZSBvZiBnb2xkLiAKCkkgYi4g4oCUIFRoZSBjb3JyZXNwb25kaW5nIHBvc2l0aXZlIGdyb3VwIHRvIHRoYXQgd2hpY2ggd2UgCmhhdmUgYmVlbiBjb25zaWRlcmluZyBjb25zaXN0cyBvZiBOYSwgQ3UsIEFnLCBhbmQgQXUgKHNvZGl1bSwgJyAKY29wcGVyLCBzaWx2ZXIgYW5kIGdvbGQpLCB3aXRoIGFuIGVtcHR5IGRpc2sgYmV0d2VlbiBzaWx2ZXIgYW5kIApnb2xkLCBzaG93aW5nIHdoZXJlIGFuIGVsZW1lbnQgb3VnaHQgdG8gYmUuIFRoZXNlIGZvdXIgCmVsZW1lbnRzIGFyZSBtb25hZHMsIGRpYW1hZ25ldGljLCBhbmQgcG9zaXRpdmUsIGFuZCB0aGV5IHNob3cgCnRoZSBkdW1iLWJlbGwgYXJyYW5nZW1lbnQsIGFsdGhvdWdoIGl0IGlzIG11Y2ggbW9kaWZpZWQgaW4gCmdvbGQgOyB3ZSBtYXkgcHJlc3VtZSB0aGF0IHRoZSB1bmRpc2NvdmVyZWQgZWxlbWVudCBiZXR3ZWVuIApzaWx2ZXIgYW5kIGdvbGQgd291bGQgZm9ybSBhIGxpbmsgYmV0d2VlbiB0aGVtLiAKClNvZGl1bSAoUGxhdGUgVkksIDIpIGhhcyBiZWVuIGFscmVhZHkgZGVzY3JpYmVkIChwLiAzNDksIApKYW51YXJ5KSwgYXMgYSB0eXBlIG9mIHRoZSBncm91cCwgc28gd2UgbmVlZCBvbmx5IHJlZmVyIHRvIGl0cyAKaW50ZXJuYWwgYXJyYW5nZW1lbnQgaW4gb3JkZXIgdG8gbm90ZSB0aGF0IGl0IGlzIHRoZSBzaW1wbGVzdCBvZiAKdGhlIGR1bWItYmVsbCBncm91cC4gSXRzIHR3ZWx2ZSBmdW5uZWxzIHNob3cgb25seSBmb3VyIGVuLSAKY2xvc2VkIGJvZGllcywgdGhlIHNhbWUgYXMgd2Ugc2VlIGluIGNobG9yaW5lLCBicm9taW5lLCBpb2RpbmUsIApjb3BwZXIgYW5kIHNpbHZlciwgYW5kIHdoaWNoIGlzIHZlcnkgbGl0dGxlIG1vZGlmaWVkIGluIGdvbGQuIEl0cyAKY2VudHJhbCBnbG9iZSBpcyB0aGUgc2ltcGxlc3Qgb2YgYWxsLCBhcyBpcyBpdHMgY29ubmVjdGluZyByb2QuIApXZSBtYXkgdGhlcmVmb3JlIHRha2UgaXQgdGhhdCBzb2RpdW0gaXMgdGhlIGdyb3VuZC1wbGFuIG9mIHRoZSAKd2hvbGUgZ3JvdXAuIAoKMTIgZnVubmVscyBvZiAxNiBlYWNoIAoKClNvZGl1bSA6IFVwcGVyIHBhcnQgCgoKQ2VudHJhbCBnbG9iZSAKCgpMb3dlciBwYXJ0IHNhbWUgCkNvbm5lY3Rpbmcgcm9kLi4uIAoKClRvdGFsIAoKCkF0b21pYyB3ZWlnaHQgLiAuIC4gCk51bWJlciB3ZWlnaHQgIl4tXl4gCgoKMTkyIAoxMCAKCjIwMiAKMTQgCgo0MTggCgoyMy04OCAKMjMtMjIgCgoKQ29wcGVyIChQbGF0ZSBWSSwgMykgaW50cm9kdWNlcyBhbiBhZGRpdGlvbiBpbiB0aGUgZnVubmVsLCAKdGhhdCB3ZSBzaGFsbCBmaW5kIGVsc2V3aGVyZSwgZS5nLiwgaW4gc2lsdmVyLCBnb2xkLCBpcm9uLCBwbGF0aS0gCgoKMzggCgpudW0sIHppbmMsIHRpbiwgdGhlIHRyaWFuZ3VsYXIgYXJyYW5nZW1lbnQgbmVhciB0aGUgbW91dGggb2YgdGhlIApmdW5uZWwgYW5kIGFkZHMgdG8gdGhlIHRlbiBhdG9tcyBpbiB0aGlzIG5pbmV0ZWVuIG1vcmUgaW4gdGhyZWUgCmFkZGl0aW9uYWwgZW5jbG9zZWQgYm9kaWVzLCB0aHVzIHJhaXNpbmcgdGhlIG51bWJlciBvZiBhdG9tcyBpbiAKYSBmdW5uZWwgZnJvbSB0aGUgc2l4dGVlbiBvZiBzb2RpdW0gdG8gZm9ydHktZml2ZS4gVGhlIG51bWJlciAKaW4gdGhlIGNlbnRyYWwgZ2xvYmUgaXMgZG91YmxlZCwgYW5kIHdlIG1lZXQgZm9yIHRoZSBmaXJzdCB0aW1lIAp0aGUgcGVjdWxpYXIgY2lnYXIgb3IgcHJpc20tc2hhcGVkIHNpeC1hdG9tZWQgYXJyYW5nZW1lbnQsIHRoYXQgCgpQbGF0ZSBWSS4gCgoKL1NvLW9MaXh2cnJ2IAoKCk95ZnlwKi4gCgoKMDxjQUFYWnUvbS8gCgoKU3hJYV5eL3QtIAoKCjM5IAoKSVMgb25lIG9mIHRoZSBtb3N0IGNvbW1vbiBvZiBhdG9taWMgZ3JvdXBzLiBJdCBvdWdodCB0byAKaW1wbHkgc29tZSBkZWZpbml0ZSBxdWFodHksIHdpdGggaXRzIGNvbnRpbnVhbCByZWN1cnJlbmNlLiBUaGUgCmNlbnRyYWwgY29sdW1uIGlzIHRoZSB0aHJlZSwgZm91ciwgZml2ZSwgZm91ciwgdGhyZWUsIGFycmFuZ2VtZW50IAphbHJlYWR5IG5vdGVkLiAKCkNPUFBGUi0gVW5uZXJEYXJ0bF5eIGZ1bm5lbHMgb2YgNDUgYXRvbXMgLi4uIDU0wrAgCkNPUFBFUi4gVXBwZWkgcGFydCBsXl5eXl5eamdqXl5eIF5eIAoKTG93ZXIgcGFydCBzYW1lIC4uLiAuLi4gLi4uIDVewrAgCgpDb25uZWN0aW5nIHJvZCAuLi4gLi4uIC4uLiAxOSAKClRvdGFsIC4uLiAuLi4gMSAxMzkgCgoKQXRvbWljIHdlaWdodCAuLi4gLi4uIDYzJ2kyIAoKTnVtYmVyIHdlaWdodCAzSl4gLi4uIDYzLTI3NyAKClNpbHZlciAoUGxhdGUgVkksIDQpIGZvbGxvd3MgY29wcGVyIGluIHRoZSBjb25zdGl0dXRpb24gb2YgCmxpdmUgb2YgdGhlIGJvZGllcyBlbmNsb3NlZCBpbiB0aGUgZnVubmVscy4gQnV0IHRoZSB0cmlhbmd1bGFyIApncm91cCBjb250YWlucyB0d2VudHktb25lIGF0b21zIGFzIGFnYWluc3QgdGVuLCBhbmQgdGhyZWUgCm92b2lkcywgZWFjaCBjb250YWluaW5nIHRocmVlIGJvZGllcyB3aXRoIGVsZXZlbiBhdG9tcywgcmFpc2UgCnRoZSBudW1iZXIgb2YgYXRvbXMgaW4gYSBmdW5uZWwgdG8gc2V2ZW50eS1uaW5lLiBUaGUgY2VudHJhbCAKZ2xvYmUgaXMgZGVjcmVhc2VkIGJ5IGZpdmUsIGFuZCB0aGUgcHJpc21zIGhhdmUgZGlzYXBwZWFyZWQuIApUaGUgY29ubmVjdGluZyByb2QgaXMgdW5hbHRlcmVkLiAKClNJTFZFUiA6IFVwcGVyIHBhcnR8aTIgZnVubmVscyBvZiA3OSBhdG9tcyAuLi4gOTQ4IAoKXl4gXiAoQ2VudHJhbCBnbG9iZSAuLi4gLi4uIDE1IAoKTG93ZXIgcGFydCBzYW1lIC4uLiAuLi4gLi4uIDk2MyAKCkNvbm5lY3Rpbmcgcm9kIC4uLiAuLi4gLi4uIDE5IAoKVG90YWwgLi4uIC4uLiAxOTQ1IAoKCkF0b21pYyB3ZWlnaHQgLi4uIC4uLiAxIDA3KjkzIAoKTnVtYmVyIHdlaWdodCBpfHxeIC4uLiAxMDgtMDU1IAoKKFRoaXMgYXRvbWljIHdlaWdodCBpcyBnaXZlbiBieSBTdGFzLCBpbiBOYXR1cmUsIEF1Z3VzdCAyOSwgCjE5MDcsIGJ1dCBpdCBoYXMgYmVlbiBhcmd1ZWQgbGF0ZXIgdGhhdCB0aGUgd2VpZ2h0IHNob3VsZCBub3QgYmUgCmFib3ZlIDEwNy04ODMuKSAKCkdvbGQgKFBsYXRlIFZJSSkgaXMgc28gY29tcGxpY2F0ZWQgdGhhdCBpdCBkZW1hbmRzIGEgd2hvbGUgCnBsYXRlIHRvIGl0c2VsZi4gSXQgaXMgZGlmZmljdWx0IHRvIHJlY29nbml6ZSB0aGUgZmFtaWxpYXIgZHVtYi1iZWxsIAppbiB0aGlzIGVsb25nYXRlZCBlZ2csIGJ1dCB3aGVuIHdlIGNvbWUgdG8gZXhhbWluZSBpdCwgdGhlIApjaGFyYWN0ZXJpc3RpYyBncm91cGluZ3MgYXBwZWFyLiBUaGUgZWdnIGlzIHRoZSBlbm9ybW91c2x5IApzd29sbGVuIGNvbm5lY3Rpbmcgcm9kLCBhbmQgdGhlIHVwcGVyIGFuZCBsb3dlciBwYXJ0cyB3aXRoIAp0aGVpciBjZW50cmFsIGdsb2JlcyBhcmUgdGhlIGFsbW9uZC1saWtlIHByb2plY3Rpb25zIGFib3ZlIGFuZCAKYmVsb3csIHdpdGggdGhlIGNlbnRyYWwgb3ZvaWQuIFJvdW5kIGVhY2ggYWxtb25kIGlzIGEgc2hhZG93eSAKZnVubmVsIChub3QgZHJhd24gaW4gdGhlIGRpYWdyYW0pLCBhbmQgd2l0aGluIHRoZSBhbG1vbmQgaXMgdGhlIAoKCjQwIAoKCmNvbGxlY3Rpb24gb2YgYm9kaWVzIHNob3duIGluIGUsIHdoZXJlaW4gdGhlIHR3byBsb3dlc3QgYm9kaWVzIAphcmUgdGhlIHNhbWUgYXMgaW4gZXZlcnkgb3RoZXIgbWVtYmVyIG9mIHRoZSBuZWdhdGl2ZSBhbmQgCnBvc2l0aXZlIGdyb3VwcyA7IHRoZSB0aGlyZCwgYXNjZW5kaW5nLCBpcyBhIHZlcnkgc2xpZ2h0IG1vZGlmaWNhLSAKdGlvbiBvZiB0aGUgb3RoZXIgdGhpcmRzIDsgdGhlIGZvdXJ0aCBpcyBhIHVuaW9uIGFuZCByZS1hcnJhbmdlbWVudCAKb2YgdGhlIGZvdXJ0aCBhbmQgZmlmdGggOyB0aGUgZmlmdGgsIG9mIGZvdXIgb3ZvaWRzLCBhZGRzIG9uZSB0byB0aGUgCgpQbGF0ZSBWSUkuIAoKCuKWoF4g4oCUIF4tLS0tXiBkXiwtIAoKCnRocmVlIG92b2lkcyBvZiBicm9taW5lLCBpb2RpbmUgYW5kIHNpbHZlciA7IHRoZSB0cmlhbmd1bGFyIGdyb3VwIAppcyBsaWtlIHRoYXQgaW4gY29wcGVyIGFuZCBzaWx2ZXIsIHRob3VnaCB3aXRoIDI4IGF0b21zIGluc3RlYWQgb2YgCjEwIG9yIDIxLCBhbmQgaXQgbWF5IGJlIG5vdGVkIHRoYXQgdGhlIGNvbmUgaW4gaXJvbiBoYXMgYWxzbyAyOC4gClRoZSBjZW50cmFsIGJvZHkgaW4gdGhlIG92b2lkIGlzIHZlcnkgY29tcGxpY2F0ZWQsIGFuZCBpcyBzaG93biAKaW4gYywgdGhlIGJvZGllcyBvbiBlYWNoIHNpZGUsIGQsIGFyZSBlYWNoIG1hZGUgdXAgb2YgdHdvIHRldHJhLSAKaGVkcmEsIG9uZSB3aXRoIGZvdXIgc2l4LWF0b21lZCBwcmlzbXMgYXQgaXRzIGFuZ2xlcywgYW5kIHRoZSAKCgo0MSAKCm90aGVyIHdpdGggZm91ciBzcGhlcmVzLCBhIHBhaXIgd2l0aCBmb3VyIGF0b21zIGFuZCBhIHBhaXIgd2l0aCAKdGhyZWUuIFdlIHRoZW4gY29tZSB0byB0aGUgY29ubmVjdGluZyByb2QuIE9uZSBvZiB0aGUgZm91ciAKc2ltaWxhciBncm91cHMgaW4gdGhlIGNlbnRyZSBpcyBlbmxhcmdlZCBpbiBhLCBhbmQgb25lIG9mIHRoZSAKc2l4dGVlbiBjaXJjbGluZyBncm91cHMgaXMgZW5sYXJnZWQgaW4gYi4gVGhlc2UgZ3JvdXBzIGFyZSAKYXJyYW5nZWQgaW4gdHdvIHBsYW5lcyBpbmNsaW5lZCB0byBvbmUgYW5vdGhlci4gCgoxMiBmdW5uZWxzIG9mIDk3IGF0b21zIC4uLiAxMTY0IAoKQ2VudHJhbCBvdm9pZCAoYyAuLi4gMTAxIAoKMTJeLDM4IC4uLiA3NiAKCkxvd2VyIHBhcnQgc2FtZSAuLi4gLi7igKIgMTM0MSAKCkNvbm5lY3Rpbmcgcm9kICggNCBhIDg0IC4uLiAuLi4gMzM2IAoKMTY2MzMgLi4uIC4uLiA1MjggCgoKR29sZDogVXBwZXIgcGFydCAKCgpUb3RhbCAuLi4gIi4uLiAzNTQ2IAoKCkF0b21pYyB3ZWlnaHQgLi4uIC4uLiDigKLigKLigKIxOTUqNzQgCgpOdW1iZXIgd2VpZ2h0IF4tXl5eIC4uLiDigKLigKLigKIgXjk3IAoKSXQgbWF5IGJlIG5vdGVkIHRoYXQgdGhlIGNvbm5lY3Rpbmcgcm9kIGlzIG1hZGUgdXAgb2YgCmV4YWN0bHkgc2l4dGVlbiBhdG9tcyBvZiBvY2N1bHR1bSwgYW5kIHRoYXQgc2l4dGVlbiBzdWNoIGF0b21zIApjb250YWluIDg2NCB1bHRpbWF0ZSBhdG9tcywgdGhlIGV4YWN0IG1lbWJlciBvZiBhdG9tcyBpbiAKdGl0YW5pdW0uIAoKSUlJLiAKCk9jY3VsdHVtIHdhcyBvYnNlcnZlZCBieSB1cyBpbiAxODk1LCBhbmQsIGZpbmRpbmcgdGhhdCBpdCAKd2FzIHNvIGxpZ2h0LCBhbmQgc28gc2ltcGxlIGluIGl0cyBjb21wb3NpdGlvbiwgd2UgdGhvdWdodCAKdGhhdCBpdCBtaWdodCBiZSBoZWxpdW0sIG9mIHdoaWNoIHdlIHdlcmUgdW5hYmxlLCBhdCB0aGUgdGltZSwgCnRvIG9idGFpbiBhIHNhbXBsZS4gV2hlbiwgaG93ZXZlciwgaGVsaXVtIGl0c2VsZiBjYW1lIHVuZGVyIApvYnNlcnZhdGlvbiBpbiAxOTA3LCBpdCBwcm92ZWQgdG8gYmUgcXVpdGUgZGlmZmVyZW50IGZyb20gdGhlIApvYmplY3QgYmVmb3JlIG9ic2VydmVkLCBzbyB3ZSBkdWJiZWQgdGhlIHVucmVjb2duaXNlZCBvYmplY3QgCk9jY3VsdHVtLCB1bnRpbCBvcnRob2RveCBzY2llbmNlIHNoYWxsIGZpbmQgaXQgYW5kIGxhYmVsIGl0IGluIApwcm9wZXIgZmFzaGlvbi4gCgpPY2N1bHR1bSAoUGxhdGUgVkksIGksIHAuIDM4KS4gCgpXZSBoZXJlIG1lZXQgdGhlIHRldHJhaGVkcm9uIGZvciB0aGUgZmlyc3QgdGltZSwgd2l0aCBlYWNoIAphbmdsZSBvY2N1cGllZCBieSBhIHNpeC1hdG9tZWQgZ3JvdXAsIHRoZSBhdG9tcyBhcnJhbmdlZCBhcyBvbiAKdGhlIGVuZCB0cmlhbmdsZXMgb2YgYSBwcmlzbS4gVGhpcyBmb3JtIHJlY3VycyB2ZXJ5IG9mdGVuLCBhbmQgCndhcyBub3RlZCwgbGFzdCBtb250aCwgYXMgc2VlbiBpbiBjb3BwZXIgKFBsYXRlIFZJLCAzKSA7IGl0IApyZXZvbHZlcyB3aXRoIGV4dHJlbWUgcmFwaWRpdHkgYXJvdW5kIGl0cyBsb25naXR1ZGluYWwgYXhpcywgCmFuZCBsb29rcyBsaWtlIGEgcGVuY2lsIHNoYXJwZW5lZCBhdCBib3RoIGVuZHMsIG9yIGEgY2lnYXIgCnRhcGVyaW5nIGF0IGJvdGggZW5kcyA7IHdlIGhhYml0dWFsbHkgc3Bva2Ugb2YgaXQgYXMgInRoZSBjaWdhci4iIApJdCBhcHBlYXJzIHRvIGJlIHN0cm9uZ2x5IGNvaGVyZW50LCBmb3IsIGFzIHdpbGwgYmUgc2VlbiBiZWxvdywgCml0cyBzaXggYXRvbXMgcmVtYWluIGF0dGFjaGVkIHRvIGVhY2ggb3RoZXIgYXMgbWV0YS1jb21wb3VuZHMgCgoKNDIgCgphbmQgZXZlbiB3aGVuIGRpdmlkZWQgaW50byB0d28gdHJpcGxldHMgYXMgaHlwZXItY29tcG9ubmRzLCAKdGhleSByZXZvbHZlIHJvdW5kIGVhY2ggb3RoZXIuIAoKQWJvdmUgdGhlIHRldHJhaGVkcm9uIGlzIGEgYmFsbG9vbi1zaGFwZWQgZmlndXJlLCBhcHBhcmVudGx5IApkcmF3biBpbnRvIHNoYXBlIGJ5IHRoZSBhdHRyYWN0aW9uIG9mIHRoZSB0ZXRyYWhlZHJvbi4gVGhlIGJvZHkgCmJlbG93IHRoZSB0ZXRyYWhlZHJvbiBsb29rcyBsaWtlIGEgY29pbCBvZiByb3BlLCBhbmQgY29udGFpbnMgCmZpZnRlZW4gYXRvbXMgOyB0aGV5IGFyZSBhcnJhbmdlZCBvbiBhIHNsYW50aW5nIGRpc2sgaW4gYSBmbGF0IHJpbmcsIAphbmQgdGhlIGZvcmNlIGdvZXMgaW4gYXQgdGhlIHRvcCBvZiBvbmUgYXRvbSwgYW5kIG91dCBvZiB0aGUgCmJvdHRvbSBvZiBpdCBpbnRvIHRoZSB0b3Agb2YgdGhlIG5leHQsIGFuZCBzbyBvbiwgbWFraW5nIGEgY2xvc2VkIApjaXJjdWl0LiBUaGUgdHdvIGxpdHRsZSBzcGhlcmVzLCBlYWNoIGNvbnRhaW5pbmcgYSB0cmlwbGV0LCBhcmUgbGlrZSAKZmlsbC11cCBwYXJhZ3JhcGhzIHRvIGEgY29tcG9zaXRvciDigJQgdGhleSBzZWVtIHRvIGJlIGtlcHQgc3RhbmRpbmcgCmFuZCBwb3BwZWQgaW4gd2hlcmUgd2FudGVkLiBUaGUgc3BoZXJlIG1hcmtlZCA7diBpcyBhIHByb3RvLSAKY29tcG91bmQsIHRoZSBiYWxsb29uIHdoZW4gc2V0IGZyZWUuIAoKQXMgd2FzIG5vdGVkIHVuZGVyIGdvbGQgKHAuIDQxKSwgc2l4dGVlbiBvY2N1bHR1bSBib2RpZXMsIApyZS1hcnJhbmdlZCwgbWFrZSB1cCB0aGUgY29ubmVjdGluZyByb2QgaW4gZ29sZCA6IOKAlCAKCk9jY3VsdHVtOiBUZXRyYWhlZHJvbiAuLi4gLi4uIDI0IAoKQmFsbG9vbiAuLi4gLi4uIC4uLiA5IAoKVHJpcGxldHMgLi4uIC4uLiAuLi4gNiAKClJvcGUtY2lyY2xlIC4uLiAuLi4gMTUgCgpUb3RhbCAuLi4gNTQgCgpBdG9taWMgd2VpZ2h0IC4uLiBOb3Qga25vd24gCk51bWJlciB3ZWlnaHQgZnwgLi4uIDMgCgpEaXNzb2NpYXRpb24gb2YgQXRvbXMuIAoKQmVmb3JlIHByb2NlZWRpbmcgdG8gdGhlIHN0dWR5IG9mIG90aGVyIGNoZW1pY2FsIGF0b21zLCBhcyB0byAKdGhlaXIgZ2VuZXJhbCBpbnRlcm5hbCBhcnJhbmdlbWVudHMsIGl0IGlzIGRlc2lyYWJsZSB0byBmb2xsb3cgb3V0LCAKaW4gdGhvc2UgYWxyZWFkeSBzaG93biwgdGhlIHdheSBpbiB3aGljaCB0aGVzZSBhdG9tcyBicmVhayB1cCAKaW50byBzaW1wbGVyIGZvcm1zLCB5aWVsZGluZyBzdWNjZXNzaXZlbHkgd2hhdCB3ZSBoYXZlIGNhbGxlZCAKcHJvdG8tLCBtZXRhLSwgYW5kIGh5cGVyLWNvbXBvdW5kcy4gSXQgaXMgbmF0dXJhbGx5IGVhc2llciB0byAKZm9sbG93IHRoZXNlIGluIHRoZSBzaW1wbGVyIGF0b21zIHRoYW4gaW4gdGhlIG1vcmUgY29tcGxleCwgYW5kIAppZiB0aGUgZWFybGllciBkaXNzb2NpYXRpb25zIGFyZSBzaG93biwgdGhlIGxhdHRlciBjYW4gYmUgbW9yZSAKcmVhZGlseSBhbmQgbW9yZSBpbnRlbGxpZ2libHkgZGVzY3JpYmVkLiAKClRoZSBmaXJzdCB0aGluZyB0aGF0IGhhcHBlbnMgb24gcmVtb3ZpbmcgYSBnYXNlb3VzIGF0b20gZnJvbSAKaXRzICJob2xlIiAoc2VlIHBwLiAyMSB0byAyMykgb3IgZW5jaXJjbGluZyAid2FsbCwiIGlzIHRoYXQgdGhlIApjb250YWluZWQgYm9kaWVzIGFyZSBzZXQgZnJlZSwgYW5kLCBldmlkZW50bHkgcmVsZWFzZWQgZnJvbSAKdHJlbWVuZG91cyBwcmVzc3VyZSwgYXNzdW1lIHNwaGVyaWNhbCBvciBvdm9pZCBmb3JtcywgdGhlIAphdG9tcyB3aXRoaW4gZWFjaCByZS1hcnJhbmdpbmcgdGhlbXNlbHZlcywgbW9yZSBvciBsZXNzLCAKd2l0aGluIHRoZSBuZXcgImhvbGUiIG9yICJ3YWxsLiIgVGhlIGZpZ3VyZXMgYXJlLCBvZiBjb3Vyc2UsIAp0aHJlZS1kaW1lbnNpb25hbCwgYW5kIG9mdGVuIHJlbWluZCBvbmUgb2YgY3J5c3RhbHMgOyB0ZXRyYWhlZHJhbC4gCgoKNDMgCgoKb2N0YWdvbmFsLCBhbmQgb3RoZXIgbGlrZSBmb3JtcyBiZWluZyBvZiBjb25zdGFudCBvY2N1cnJlbmNlLiAKSW4gdGhlIGRpYWdyYW1zIG9mIHRoZSBwcm90by1jb21wb3VuZHMsIHRoZSBjb25zdGl0dWVudCBhdG9tcyAKYXJlIHNob3duIGJ5IGRvdHMuIEluIHRoZSBkaWFncmFtcyBvZiB0aGUgbWV0YS1jb21wb3VuZHMgCnRoZSBkb3QgYmVjb21lcyBhIGhlYXJ0LCBpbiBvcmRlciB0byBzaG93IHRoZSByZXN1bHRhbnRzIG9mIHRoZSAKbGluZXMgb2YgZm9yY2UuIEluIHRoZSBkaWFncmFtcyBvZiB0aGUgaHlwZXItY29tcG91bmRzIHRoZSAKc2FtZSBwbGFuIGlzIGZvbGxvd2VkLiBUaGUgbGV0dGVycyBhLCBiLCBjLCAmYy4sIGVuYWJsZSB0aGUgCnN0dWRlbnQgdG8gZm9sbG93IHRoZSBicmVha2luZyB1cCBvZiBlYWNoIGdyb3VwIHRocm91Z2ggaXRzIApzdWNjZXNzaXZlIHN0YWdlcy4gCgpIeWRyb2dlbiAoUGxhdGUgViwgaSwgcC4gMzQpLiAKClRoZSBzaXggYm9kaWVzIGNvbnRhaW5lZCBpbiB0aGUgZ2FzZW91cyBhdG9tIG1zdGFudGFuZW91c2x5IApyZS1hcnJhbmdlIHRoZW1zZWx2ZXMgd2l0aGluIHR3byBzcGhlcmVzIDsgdGhlIHR3byBsaW5lYXIgdHJpcGxldHMgCnVuaXRlIHdpdGggb25lIHRyaWFuZ3VsYXIgdHJpcGxldCwgaG9sZGluZyB0byBlYWNoIG90aGVyIHJlbGF0aXZlIAoKCmEgKiBeIAoKCmEgZSA2IAoKCmEgNiAKCgoywqsgNiAKCgpwb3NpdGlvbnMgd2hpY2gsIGlmIGNvbm5lY3RlZCBieSB0aHJlZSByaWdodCBsaW5lcywgd291bGQgZm9ybSBhIAp0cmlhbmdsZSB3aXRoIGEgdHJpcGxldCBhdCBlYWNoIGFuZ2xlIDsgdGhlIHJlbWFpbmluZyB0aHJlZSAKdHJpYW5ndWxhciB0cmlwbGV0cyBzaW1pbGFybHkgYXJyYW5nZSB0aGVtc2VsdmVzIGluIHRoZSBzZWNvbmQgCnNwaGVyZS4gVGhlc2UgZm9ybSB0aGUgcHJvdG8tY29tcG91bmRzIG9mIGh5ZHJvZ2VuLiAKCkluIHRoZSBkaXNzb2NpYXRpb24gb2YgdGhlc2UsIGVhY2ggZ3JvdXAgYnJlYWtzIHVwIGludG8gdHdvLCAKdGhlIHR3byBsaW5lYXIgdHJpcGxldHMgam9pbmluZyBlYWNoIG90aGVyIGFuZCBzZXR0aW5nIGZyZWUgdGhlaXIgCnRyaWFuZ3VsYXIgY29tcmFkZSwgd2hpbGUgdHdvIG9mIHRoZSB0cmlhbmd1bGFyIHRyaXBsZXRzIHNpbWlsYXJseSAKcmVtYWluIHRvZ2V0aGVyLCBjYXN0aW5nIG91dCB0aGUgdGhpcmQsIHNvIHRoYXQgaHlkcm9nZW4geWllbGRzIApmb3VyIG1ldGEtY29tcG91bmRzLiAKCgo0NCAKCkluIHRoZSBoeXBlci1jb25kaXRpb24sIHRoZSBjb25uZXhpb24gYmV0d2VlbiB0aGUgZG91YmxlIAp0cmlwbGV0cyBpcyBicm9rZW4sIGFuZCB0aGV5IGJlY29tZSBmb3VyIGluZGVwZW5kZW50IGdyb3VwcywgdHdvIApsaWtlIGl4LCBpbiB0aGUgaHlwZXItdHlwZXMgKHAuIDI1KSwgYW5kIHR3byByZW1haW5pbmcgbGluZWFyLCBidXQgCnJlYXJyYW5naW5nIHRoZWlyIGludGVybmFsIHJlbGF0aW9ucyA7IHRoZSB0d28gcmVtYWluaW5nIGdyb3VwcyAKYnJlYWsgdXAgaW50byB0d28gcGFpcnMgYW5kIGEgdW5pdC4gCgpUaGUgZmluYWwgZGlzc29jaWF0aW9uIHNldHMgYWxsIHRoZSBhdG9tcyBmcmVlLiAKCgpPY2N1TFRVTSAoUGxhdGUgVkksIGksIHAuIDM4KS4gCgpPbiB0aGUgZmlyc3QgZGlzc29jaWF0aW9uIG9mIHRoZSBjb21wb25lbnQgcGFydHMgb2Ygb2NjdWx0dW0sIAp0aGUgdGV0cmFoZWRyb24gc2VwYXJhdGVzIGFzIGEgd2hvbGUsIHdpdGggaXRzIGZvdXIgIiBjaWdhcnMsIiAKZmxhdHRlbmluZyBpdHNlbGYgb3V0IHdpdGhpbiBpdHMgaG9sZSwgYTsgdHdvICJjaWdhcnMiIGFyZSBwb3NpdGl2ZSAKCgp7Xl4gCgoKKCheUF4zKSAKCgowIFdpVEhJTSA4IAoKT2UuIAoKU0psLiAKCgphbmQgdHdvIG5lZ2F0aXZlLCBtYXJrZWQgcmVzcGVjdGl2ZWx5IGEgYW5kIGEnLiBUaGUgcm9wZSAKYmVjb21lcyBhIHJpbmcgd2l0aGluIGEgc3BoZXJlLCBiLCBhbmQgdGhlIHR3byBib2RpZXMgZCBkLCAKd2hpY2ggYXJlIGxvb3NlIGluIHRoZSBnYXNlb3VzIGF0b20sIGNvbWUgd2l0aGluIHRoaXMgcmluZy4gClRoZSBiYWxsb29uIGJlY29tZXMgYSBzcGhlcmUuIAoKT24gZnVydGhlciBkaXNzb2NpYXRpb24sIHRoZSAiY2lnYXJzIiBnbyBvZmYgaW5kZXBlbmRlbnRseSwgCnNob3dpbmcgdHdvIHR5cGVzLCBhbmQgdGhlc2UgYWdhaW4gZWFjaCBkaXZpZGUgaW50byB0cmlwbGV0cywgYXMgCm1ldGEtY29tcG91bmRzLiBCLCBvbiB0aGUgbWV0YS1sZXZlbCwgY2FzdHMgb3V0IHRoZSB0d28gZCAKYm9kaWVzLCB3aGljaCBiZWNvbWUgaW5kZXBlbmRlbnQgdHJpcGxldHMsIGFuZCB0aGUgIiByb3BlICIgCmJyZWFrcyBpbnRvIHR3bywgYSBjbG9zZSByaW5nIG9mIHNldmVuIGF0b21zIGFuZCBhIGRvdWJsZSBjcm9zcyAKb2YgZWlnaHQuIFRoZXNlIHN1YmRpdmlkZSBhZ2FpbiB0byBmb3JtIGh5cGVyLWNvbXBvdW5kcywgdGhlIApyaW5nIHlpZWxkaW5nIGEgcXVpbnRldCBhbmQgYSBwYWlyLCBhbmQgdGhlIGRvdWJsZSBjcm9zcyBzZXBhcmF0aW5nIAppbnRvIGl0cyB0d28gcGFydHMuIAoKCjQ1IAoKVGhlIGJhbGxvb24sIGMsIGJlY29tZXMgbXVjaCBkaXZpZGVkLCB0aGUgY29oZXNpb24gb2YgaXRzIApwYXJ0cyBiZWluZyBzbGlnaHQgOyBpdCBmb3JtcyB0d28gdHJpcGxldHMsIGEgcGFpciBhbmQgYSB1bml0LCBhbmQgCnRoZXNlIHNldCBmcmVlLCBvbiBmdXJ0aGVyIGRpc3NvY2lhdGlvbiwgbm8gbGVzcyB0aGFuIGZpdmUgc2VwYXJhdGUgCmF0b21zIGFuZCB0d28gZHVhZHMuIAoKVGhlIHR3byB0cmlwbGV0cyBvZiBkIGVhY2ggY2FzdCBvdXQgYW4gYXRvbSBvbiBkaXNzb2NpYXRpb24sIAphbmQgZm9ybSB0d28gcGFpcnMgYW5kIHR3byB1bml0cy4gCgoKU29kaXVtIChQbGF0ZSBWSSwgMikuIAoKSXQgaXMgY29udmVuaWVudCB0byBjb25zaWRlciBzb2RpdW0gbmV4dCwgYmVjYXVzZSBpdCBpcyB0aGUgCmJhc2ljIHBhdHRlcm4gb24gd2hpY2ggbm90IG9ubHkgY29wcGVyLCBzaWx2ZXIgYW5kIGdvbGQgYXJlIApmb3JtZWQsIGJ1dCBhbHNvIGNobG9yaW5lLCBicm9taW5lIGFuZCBpb2RpbmUuICIgCgoKV2hlbiBzb2RpdW0gaXMgc2V0IGZyZWUgZnJvbSBpdHMgZ2FzZW91cyBjb25kaXRpb24sIGl0IGRpdmlkZXMgCnVwIGludG8gdGhpcnR5LW9uZSBib2RpZXMg4oCUIHR3ZW50eS1mb3VyIHNlcGFyYXRlIGZ1bm5lbHMsIGZvdXIgCmJvZGllcyBkZXJpdmVkIGZyb20gdGhlIHR3byBjZW50cmFsIGdsb2JlcywgYW5kIHRocmVlIGZyb20gdGhlIApjb25uZWN0aW5nIHJvZC4gVGhlIGZ1bm5lbHMgYmVjb21lIHNwaGVyZXMsIGFuZCBlYWNoIGNvbnRhaW5zIApmb3VyIGVuY2xvc2VkIHNwaGVyZXMsIHdpdGggbW9yZSBvciBsZXNzIGNvbXBsaWNhdGVkIGNvbnRlbnRzLiAKRWFjaCBjZW50cmFsIGdsb2JlIHlpZWxkcyBhIHNleHRldCBhbmQgYSBxdWFydGV0LCBhbmQgdGhlIHJvZCBzZXRzIApmcmVlIHR3byBxdWFydGV0cyBhbmQgYSBwZWN1bGlhcmx5IGZvcm1lZCBzZXh0ZXQuIAoKCjQ2IAoKV2hlbiB0aGUgcHJvdG8tY29tcG91bmRzIGFyZSBkaXNzb2NpYXRlZCwgdGhlIGZ1bm5lbC1zcGhlcmUgCnNldHMgZnJlZSA6IChpKSB0aGUgY29udGVudHMgb2YgYSwgcmVhcnJhbmdlZCBpbnRvIHR3byBncm91cHMgb2YgCmZvdXIgd2l0aGluIGEgY29tbW9uIHNwaGVyZSA7IHRoZSBzcGhlcmUgeWllbGRzIGZvdXIgZHVhZHMgYXMgCmh5cGVyLWNvbXBvdW5kcyA7ICgyKSB0aGUgY29udGVudHMgb2YgYiwgd2hpY2ggdW5pdGUgdGhlbXNlbHZlcyAKaW50byBhIHF1YXJ0ZXQsIHlpZWxkaW5nIHR3byBkdWFkcyBhcyBoeXBlci1jb21wb3VuZHM7IGFuZCAKKDMpIHRoZSBjb250ZW50cyBvZiB0aGUgdHdvIHNwaGVyZXMsIGMsIHdoaWNoIG1haW50YWluIHRoZWlyIApzZXBhcmF0aW9uIGFzIG1ldGEtY29tcG91bmRzLCBhbmQgYmVjb21lIGVudGlyZWx5IGluZGVwZW5kZW50LCAKdGhlIGF0b21zIHdpdGhpbiB0aGUgc3BoZXJlIHJldm9sdmluZyByb3VuZCBlYWNoIG90aGVyLCBidXQgdGhlIApzcGhlcmVzIGNlYXNpbmcgdGhlaXIgcmV2b2x1dGlvbiByb3VuZCBhIGNvbW1vbiBheGlzLCBhbmQgZ29pbmcgCm9mZiBpbiBkaWZmZXJlbnQgZGlyZWN0aW9ucy4gVGhlIGF0b21zIGJyZWFrIG9mZiBmcm9tIGVhY2ggb3RoZXIsIAphbmQgZ3lyYXRlIGluIGluZGVwZW5kZW50IHNvbGl0dWRlIGFzIGh5cGVyLSAiIGNvbXBvdW5kcy4iIApUaHVzIGVhY2ggZnVubmVsIHlpZWxkcyBmaW5hbGx5IHRlbiBoeXBlci1ib2RpZXMuIAoKVGhlIHBhcnQgb2YgdGhlIGNlbnRyYWwgZ2xvYmUsIG1hcmtlZCBkLCB3aXRoIGl0cyBzaXggYXRvbXMsIAp3aGlybGluZyByb3VuZCBhIGNvbW1vbiBjZW50cmUsIGJlY29tZXMgdHdvIHRyaXBsZXRzLCBhdCB0aGUgCm1ldGEtc3RhZ2UsIHByZXBhcmluZyBmb3IgdGhlIGNvbXBsZXRlIHNlcGFyYXRpb24gb2YgdGhlc2UgYXMgCmh5cGVyLWJvZGllcy4gVGhlIHNlY29uZCBwYXJ0IG9mIHRoZSBzYW1lIGdsb2JlLCBtYXJrZWQgZSwgCmEgd2hpcmxpbmcgY3Jvc3MsIHdpdGggYW4gYXRvbSBhdCBlYWNoIHBvaW50LCBiZWNvbWVzIGEgcXVhcnRldCAKaW4gdGhlIG1ldGEtc3RhdGUsIGluIHdoaWNoIHRocmVlIGF0b21zIHJldm9sdmUgcm91bmQgYSBmb3VydGgsIAphbmQgaW4gdGhlIGh5cGVyLXN0YXRlIHRoaXMgY2VudHJhbCBhdG9tIGlzIHNldCBmcmVlLCBsZWF2aW5nIGEgCnRyaXBsZXQgYW5kIGEgdW5pdC4gCgpFYWNoIG9mIHRoZSB0d28gYm9kaWVzIG1hcmtlZC8sIGxpYmVyYXRlZCBmcm9tIHRoZSBjb25uZWN0LSAKaW5nIHJvZCwgc2hvd3MgZm91ciBhdG9tcyB3aGlybGluZyByb3VuZCBhIGNvbW1vbiBjZW50cmUsIApleGFjdGx5IHJlc2VtYmxpbmcgZSBpbiBhcHBlYXJhbmNlIDsgYnV0IHRoZXJlIG11c3QgYmUgc29tZSAKZGlmZmVyZW5jZSBvZiBpbm5lciByZWxhdGlvbnMsIGZvciwgaW4gdGhlIG1ldGEtc3RhdGUsIHRoZXkgcmUtYXJyYW5nZSAKdGhlbXNlbHZlcyBhcyB0d15vIHBhaXJzLCBhbmQgZGl2aWRlIGludG8gdHdvIGFzIGh5cGVyLWJvZGllcy4gCgpUaGUgYm9keSBtYXJrZWQgXiBpcyBhIGZvdXItc2lkZWQgcHlyYW1pZCwgd2l0aCB0d28gY2xvc2VseSAKam9pbmVkIGF0b21zIGF0IGl0cyBhcGV4IDsgdGhlc2Ugc3RpbGwgY2xpbmcgdG8gZWFjaCBpbiBtdXR1YWwgCnJldm9sdXRpb24gYXMgYSBtZXRhLWJvZHksIGVuY2lyY2xlZCBieSBhIHJpbmcgb2YgZm91ciwgYW5kIHRoaXMgCmxlYWRzIHRvIGEgZnVydGhlciBkaXNzb2NpYXRpb24gaW50byB0aHJlZSBwYWlycyBvbiB0aGUgaHlwZXItbGV2ZWwuIAoKQ2hsb3JpbmUgKFBsYXRlIFYsIDIsIHAuIDM0KS4gCgpUaGUgZGVzY3JpcHRpb24gb2YgdGlpZSBmdW5uZWwgb2Ygc29kaXVtIGFwcGxpZXMgdG8gdGhhdCBvZiAKY2hsb3JpbmUsIHVudGlsIHdlIGNvbWUgdG8gdGhlIGJvZHkgbmVhcmVzdCB0aGUgbW91dGgsIHRoZSAKc3BoZXJlIGNvbnRhaW5pbmcgdGhyZWUgYWRkaXRpb25hbCBib2RpZXMgOyB0aGlzIHJlbWFpbnMgd2l0aGluIAp0aGUgZnVubmVsIGluIHRoZSBmaXJzdCBkaXNzb2NpYXRpb24sIHNvIHRoYXQgYWdhaW4gd2UgaGF2ZSAKdHdlbnR5LWZvdXIgc2VwYXJhdGUgZnVubmVscyBhcyBwcm90by1jb21wb3VuZHMgOyB0aGUgY2VudHJhbCAKZ2xvYmVzIGFyZSB0aGUgc2FtZSBhcyBpbiBzb2RpdW0sIGFuZCB5aWVsZCB0aGUgc2FtZSBmb3VyIApib2RpZXMgOyB0aGUgY29ubmVjdGluZyByb2Qgc2V0cyBmcmVlIGZpdmUgYm9kaWVzLCBvZiB3aGljaCB0d28gCmFyZSB0aGUgc2FtZSA7IHdlIGhhdmUgdGh1cyB0aGlydHktdGhyZWUgc2VwYXJhdGUgYm9kaWVzIGFzIHRoZSAKCgo0NyAKCnJlc3VsdCBvZiB0aGUgZGlzc29jaWF0aW9uIG9mIGNobG9yaW5lIGludG8gaXRzIHByb3RvLWNvbXBvdW5kcy4gCkFzIGFsbCB0aGUgY29tcG91bmRzIHdoaWNoIGFyZSBpbiBzb2RpdW0gYnJlYWsgdXAgaW4gdGhlIHNhbWUgCndheSBpbnRvIG1ldGEtIGFuZCBoeXBlci1jb21wb3VuZHMsIHdlIG5lZWQgbm90IHJlcGVhdCB0aGUgCnByb2Nlc3MgaGVyZS4gV2UgaGF2ZSBvbmx5IHRvIGNvbnNpZGVyIHRoZSBuZXcgbWV0YS0gYW5kIApoeXBlci1jb21wb3VuZHMgb2YgdGhlIGhpZ2hlc3Qgc3BoZXJlIHdpdGhpbiB0aGUgZnVubmVsLCBhbmQgCnRoZSB0d28gdHJpcGxldHMgYW5kIG9uZSBxdWludGV0IGZyb20gdGhlIGNvbm5lY3Rpbmcgcm9kLiAKClRoZSBhZGRpdGlvbmFsIGJvZHkgd2l0aGluIHRoZSBwcm90by1mdW5uZWwgaXMgb2YgYSB2ZXJ5IApzaW1wbGUgY2hhcmFjdGVyLCB0aHJlZSBjb250YWluZWQgdHJpYW5nbGVzIHdpdGhpbiB0aGUgZmxhdHRlbmVkIApzcGhlcmUuIE9uIHJlbGVhc2UgZnJvbSB0aGUgZnVubmVsLCBvbiB0aGUgbWV0YS1sZXZlbCwgdGhlIGF0b21zIApyZWFycmFuZ2UgdGhlbXNlbHZlcyBpbiBhIHdoaXJsaW5nIHNldCBvZiB0aHJlZSB0cmlwbGV0cywgYW5kIHRoZXNlIApicmVhayBvZmlmIGZyb20gZWFjaCBvdGhlciBhcyBoeXBlci1jb21wb3VuZHMuIFRoZSB0d28gdHJpcGxldHMgCmZyb20gdGhlIGNvbm5lY3Rpbmcgcm9kLCBhbHNvLCBhcmUgb2YgdGhlIHNpbXBsZXN0IGNoYXJhY3RlciBhbmQgCm5lZWQgbm90IGRlbGF5IHVzLiBUaGUgZml2ZS1hdG9tZWQgYm9keSwgYSBmb3VyLXNpZGVkIHB5cmFtaWQgCmFzIGEgcHJvdG8tY29tcG91bmQsIGJlY29tZXMgYSByaW5nIHdoaXJsaW5nIHJvdW5kIGEgY2VudHJlIApvbiB0aGUgbWV0YSwgYW5kIHR3byBwYWlycyB3aXRoIGEgdW5pdCBvbiB0aGUgaHlwZXIuIAoKCnJeVFMgCgoKXixePy8gCgoKY2kuTS5BIAoKCjhrLiA3OS4gOCwgCgoKQnJvbWluZSAoUGxhdGUgViwgMykuIAoKVGhyZWUgYWRkaXRpb25hbCBib2RpZXMgYXBwZWFyIGF0IHRoZSB0b3Agb2YgdGhlIGZ1bm5lbCwgCndoaWNoIG90aGVyd2lzZSByZXBlYXRzIHRoYXQgb2YgY2hsb3JpbmUuIFRoZSBjb25uZWN0aW5nIHJvZCBpcyAKdGhlIHNhbWUgYW5kIG1heSBiZSBkaXNyZWdhcmRlZC4gVGhlIGNlbnRyYWwgZ2xvYmVzIGJlY29tZSAKbW9yZSBjb21wbGV4LiBUaGUgYWRkaXRpb25zIGFyZSwgaG93ZXZlciwgb2YgdmVyeSBlYXN5IHR5cGVzLCAKYW5kIGhlbmNlIGFyZSByZWFkaWx5IGRlYWx0IHdpdGguIEVhY2ggb2YgdGhlIHRocmVlIHNpbWlsYXIgCm92b2lkIGJvZGllcyBjb250YWlucyB0d28gdHJpcGxldHMg4oCUIGVhY2ggYSB0cmlhbmdsZSBhbmQgYSBxdWludGV0IArigJQgYSBmb3VyLXNpZGVkIHB5cmFtaWQuIFRoZXNlIGFyZSB0aGUgc2FtZSwgYXMgbWF5IGJlIHNlZW4gaW4gCgoKNDggCgp0aGUgY29ubmVjdGluZyByb2Qgb2YgY2hsb3JpbmUsIGFuZCB3ZSBuZWVkIG5vdCByZXBlYXQgdGhlbS4gCk9ubHkgdGhlIGdsb2JlIHJlbWFpbnMuIFRoaXMgZG9lcyBub3QgYnJlYWsgdXAgYXMgYSBwcm90by0gCmNvbXBvdW5kIGJ1dCBpcyBtZXJlbHkgc2V0IGZyZWUsIGEgYW5kIHRoZSAyIGhzIHdoaXJsaW5nIGluIGEgCnBsYW5lIHZlcnRpY2FsIHRvIHRoZSBwYXBlciBhbmQgdGhlIHR3byBzbWFsbGVyIGJvZGllcywgY2MsIAp3aGlybGluZyBvbiBhIHBsYW5lIGF0IHJpZ2h0IGFuZ2xlcyB0byB0aGUgb3RoZXIuIFRoZXNlIHR3byAKZGlzZW5nYWdlIHRoZW1zZWx2ZXMsIGZvcm1pbmcgYSBxdWFydGV0IGFzIGEgbWV0YS1jb21wb3VuZCwgCndoaWxlIGEgbWFrZXMgYSB3aGlybGluZyBjcm9zcyBhbmQgYmggYSBzaW5nbGUgc2V4dGV0IDsgdGhlc2UgCmZ1cnRoZXIgZGlzc29jaWF0ZSB0aGVtc2VsdmVzIGludG8gZm91ciBwYWlycyBhbmQgdHdvIHRyaXBsZXRzLiAKCklvZGluZSAoUGxhdGUgViwgNCkuIAoKSW9kaW5lIGhhcyBub3RoaW5nIG5ldyB0byBnaXZlIHVzLCBleGNlcHQgZml2ZSBzaW1pbGFyIG92b2lkIApib2RpZXMgYXQgdGhlIHRvcCBvZiBlYWNoIGZ1bm5lbCwgYW5kIHR3byBxdWFydGV0cyBpbnN0ZWFkIG9mIHR3byAKcGFpcnMgaW4gdGhlIGNlbnRyYWwgZ2xvYmUuIFRoZSBvdm9pZCBib2RpZXMgYmVjb21lIHNwaGVyZXMgCgoKKF5eUyAKCgpTMyAzNyAKCgpDdVMzLWwgCgoKd2hlbiB0aGUgZnVubmVscyBhcmUgdGhyb3duIG9mZiwgYW5kIGEgY3J5c3RhbGxpbmUgZm9ybSBpcyAKaW5kaWNhdGVkIHdpdGhpbiB0aGUgc3BoZXJlLiBUaGUgYXRvbXMgYXJlIGFycmFuZ2VkIGluIHR3byAKdGV0cmFoZWRyYSB3aXRoIGEgY29tbW9uIGFwZXgsIGFuZCB0aGUgcmVsYXRpb25zaGlwIGlzIG1haW4tIAp0YWluZWQgaW4gdGhlIG1ldGEtYm9keSwgYSBzZXB0ZXQuIFRoZSBsYXR0ZXIgYnJlYWtzIHVwIGludG8gdHdvIAp0cmlwbGV0cyBhbmQgYSB1bml0IG9uIHRoZSBoeXBlci1sZXZlbC4gSW4gdGhlIGNlbnRyYWwgZ2xvYmVzLCAKdGhlIGEgb2YgYnJvbWluZSBpcyByZXBlYXRlZCB0d2ljZSBpbnN0ZWFkIG9mIHRoZSBwYWlycyBpbiBjYy4gCgpDb3BwZXIgKFBsYXRlIFZJLCAzKS4gCgpXZSBoYXZlIGFscmVhZHkgZGlzcG9zZWQgb2Ygb2NjdWx0dW0sIG9uIHRoaXMgcGxhdGUsIGFuZCBvZiAKc29kaXVtLCB3aGljaCBsaWVzIGF0IHRoZSByb290IG9mIGJvdGggZ3JvdXBzLiBDb3BwZXIsIHdlIG5vdyAKaG5kLCBpcyBhbHNvIHZlcnkgbGFyZ2VseSBvZmYgb3VyIGhhbmRzLCBhcyB0aGUgZnVubmVsIHByb3ZpZGVzIHVzIAoKCkkgCgoKNDkgCgp3aXRoIG9ubHkgdHdvIG5ldyB0eXBlcyDigJQgdHdvIHNwaGVyZXMg4oCUIGVhY2ggY29udGFpbmluZyBmaXZlIAphdG9tcyBpbiBhIG5ldyBhcnJhbmdlbWVudCwgYW5kIHRoZSB0cmlhbmd1bGFyIGJvZHkgYXQgdGhlIAptb3V0aCB3aXRoIGl0cyB0ZW4gYXRvbXMuIFRoaXMgdHJpYW5ndWxhciBib2R5LCB3aXRoIGFuIAppbmNyZWFzZWQgbnVtYmVyIG9mIGF0b21zLCByZWFwcGVhcnMgaW4gdmFyaW91cyBvdGhlciBjaGVtaWNhbCAKZWxlbWVudHMuIFRoZSBjZW50cmFsIGdsb2JlcyBhcmUgZGlmZmVyZW50IGZyb20gYW55IHdlIGhhdmUgCmhhZCBiZWZvcmUsIGluIHRoZWlyIGludGVybmFsIGFycmFuZ2VtZW50LCBidXQgdGhlIGNvbnN0aXR1ZW50cyAKYXJlIGZhbWlsaWFyIDsgdGhlcmUgYXJlIHR3byBjb250YWluZWQgc3BoZXJlcyB3aXRoIGZvdXIgYXRvbXMgCmVhY2gsIHRoZSBhIGluIHRoZSBnbG9iZSBvZiBicm9taW5lIChzZWUgYWJvdmUpIGFuZCAyICIgY2lnYXJzLiIgClRoZSAiY2lnYXJzIiBtYXkgYmUgZm9sbG93ZWQgdW5kZXIgb2NjdWx0dW0gKHNlZSBhYm92ZSkuIApUaGUgY29ubmVjdGluZyByb2QgaXMgYXMgaW4gY2hsb3JpbmUsIGJyb21pbmUgYW5kIGlvZGluZS4gCgpUaGUgYXRvbXMgaW4gdGhlIGJvZGllcyBhIGFuZCBiIGFyZSBjdXJpb3VzbHkgYXJyYW5nZWQuIApBIGNvbnNpc3RzIG9mIHR3byBzcXVhcmUtYmFzZWQgcHlyYW1pZHMgdHVybmVkIHNvIGFzIHRvIG1lZXQgYXQgCnRoZWlyIGFwaWNlcywgYW5kIGJyZWFrcyB1cCBpbnRvIHR3byBxdWFydGV0IHJpbmdzIGFuZCBhIGR1YWQuIApCIGlzIGFnYWluIHR3byBmb3VyLXNpZGVkIHB5cmFtaWRzLCBidXQgdGhlIGJhc2VzIGFyZSBpbiBjb250YWN0IAphbmQgc2V0IGF0IHJpZ2h0IGFuZ2xlcyB0byBlYWNoIG90aGVyIDsgdGhlIHNlY29uZCBhcGV4IGlzIG5vdCAKc2VlbiwgYXMgaXQgaXMgZGlyZWN0bHkgYmVsb3cgdGhlIGZpcnN0LiBUaGUgcHlyYW1pZHMgc2VwYXJhdGUgYXMgCm1ldGEtYm9kaWVzLCBhbmQgdGhlIGF0b21zIGFzc3VtZSB0aGUgcGVjdWxpYXIgYXJyYW5nZW1lbnQgCmluZGljYXRlZCBhbmQgdGhlbiBicmVhayB1cCBpbnRvIGZvdXIgcGFpcnMgYW5kIHR3byB1bml0cyBvbiB0aGUgCmh5cGVyIGxldmVsLiAKCklWLiAKClNpbHZlciAoUGxhdGUgVkksIDQgYW5kIEFnIGJlbG93KS4gCgpTaWx2ZXIgcHJlc2VudHMgdXMgd2l0aCBvbmx5IHR3byBuZXcgYm9kaWVzLCBhbmQgZXZlbiB0aGVzZSAKYXJlIG9ubHkgbmV3IGJ5IHNsaWdodCBhZGRpdGlvbnMgdG8gb2xkIG1vZGVscy4gVGhlIHRyaWFuZ3VsYXIgCnNoYXBlZCBib2R5IGF0IHRoZSBhcGV4IG9mIHRoZSBmdW5uZWwsIGNvbnRhaW5pbmcgMjEgYXRvbXMsIGlzIAppbnRlcm1lZGlhdGUgYmV0d2VlbiB0aGUgc2ltaWxhciBib2RpZXMgaW4gY29wcGVyIGFuZCBpcm9uLiBBcyAKYSBwcm90by1lbGVtZW50IGl0IGJlY29tZXMgdGhyZWUgdHJpYW5nbGVzLCBqb2luZWQgYXQgdGhlaXIgYXBpY2VzLCAKaW4gZmFjdCBhIHRldHJhaGVkcm9uIGluIHdoaWNoIG5vIGF0b21zIGFyZSBkaXN0cmlidXRlZCBvbiB0aGUgCmZvdXJ0aCBmYWNlLiBUaGUgZmFjZXMgc2VwYXJhdGUgb24gdGhlIG1ldGEgbGV2ZWwgYW5kIGdpdmUgdGhyZWUgCnNldmVuLWF0b21lZCBmaWd1cmVzLCBhbmQgZWFjaCBvZiB0aGVzZSBicmVha3MgdXAgaW50byB0d28gCnRyaXBsZXRzIGFuZCBhIHVuaXQuIFRoZSBjZW50cmFsIGdsb2JlIG9ubHkgZGlmZmVycyBmcm9tIHRoYXQgCm9mIGJyb21pbmUgYnkgdGhlIGFkZGl0aW9uIG9mIG9uZSBhdG9tLCB3aGljaCBnaXZlcyB0aGUgZmFtaWxpYXIgCmZvdXItc2lkZWQgcHlyYW1pZCB3aXRoIGEgc3F1YXJlIGJhc2UgYXMgaW4gY2hsb3JpbmUgKHNlZSBwLiA0NikuIAoKR29sZCAoUGxhdGUgVklJIGFuZCBBdSBiZWxvdykuIAoKVGhlIGRpc2ludGVncmF0aW9uIG9mIGdvbGQgZmlyc3QgeWllbGRzIGZvcnR5LXNldmVuIGJvZGllcyBvbiAKCnRoZSBwcm90by1sZXZlbCA7IHRoZSB0d2VudHktZm91ciBmdW5uZWxzIHNlcGFyYXRlLCBhbmQgdGhlIGNlbnRyYWwgCgpnbG9iZXMgd2hpY2ggaG9sZCBlYWNoIHR3ZWx2ZSB0b2dldGhlciBzZXQgZnJlZSB0aGVpciBzaXggY29udGFpbmVkIAoKZ2xvYmVzIChjLCBkKSwgdGhpcnR5IGJvZGllcyBiZWluZyB0aHVzIGxpYmVyYXRlZC4gVGhlIHNpeHRlZW4gCgo0IAoKCjUwIAoKCmJvZGllcyBvbiB0aGUgY2VudHJhbCBpbmNsaW5lZCBwbGFuZXMsIG1hcmtlZCBiLCBicmVhayBhd2F5LCAKdGhlaXIgY2VudHJhbCBnbG9iZSwgd2l0aCBpdHMgZm91ciBjb250YWluZWQgZ2xvYmVzLCByZW1haW5pbmcgCnVuY2hhbmdlZC4gQnV0IHRoaXMgY29uZGl0aW9uIGRvZXMgbm90IGxhc3QuIFRoZSBtb3Rpb24gb2YgCnRoZSBmdW5uZWxzIGNoYW5nZXMgYW5kIHRodXMgdGhlIGZ1bm5lbHMgY2Vhc2UgdG8gZXhpc3QgYW5kIHRoZWlyIApjb250ZW50cyBhcmUgc2V0IGZyZWUsIGVhY2ggZnVubmVsIHRodXMgbGliZXJhdGluZyBuaW5lIGluZGVwZW5kZW50IApib2RpZXMgOyB0aGUgc2l4dGVlbiBiIHNlcGFyYXRlIGludG8gdHdvIGVhY2ggOyB0aGUgZm91ciBhIGxpYmVyYXRlIApmaXZlIGVhY2ggOyB0aGUgdHdvIGMgc2V0IGZyZWUgdGhpcnRlZW4gZWFjaCA7IHRoZSBmb3VyIGQgZmluYWxseSAKbGliZXJhdGUgdHdvIGVhY2ggOiAzMDIgcHJvdG8gZWxlbWVudHMgaW4gYWxsLiAKClRoZSBmdW5uZWwgaXMgYWxtb3N0IHRoYXQgb2YgaW9kaW5lLCByZS1hcnJhbmdlZC4gRm91ciBvZiB0aGUgCmZpcnN0IHJpbmcgaW4gdGhlIGlvZGluZSBmdW5uZWwgYXJlIHJlcGxhY2VkIGJ5IHRoZSB0cmlhbmd1bGFyIApib2R5LCB3aGljaCBiZWNvbWVzIGEgZm91ci1zaWRlZCBweXJhbWlkIHdpdGggYW4gb2NjdXBpZWQgCgoKYmFzZS4gVGhlIHNlY29uZCByaW5nIG9mIHRocmVlIG92b2lkcyBpbiBpb2RpbmUgYmVjb21lcyBmb3VyIGluIApnb2xkLCBidXQgdGhlIGludGVybmFsIGFycmFuZ2VtZW50IG9mIGVhY2ggb3ZvaWQgaXMgdGhlIHNhbWUuIApUaGUgbmV4dCB0d28gc3BoZXJlcyBpbiB0aGUgaW9kaW5lIGZ1bm5lbCBjb2FsZXNjZSBpbnRvIG9uZSAKc3BoZXJlLCB3aXRoIHNpbWlsYXIgY29udGVudHMsIGluIHRoZSBnb2xkIGZ1bm5lbC4gVGhlIGZpZnRoIGluIAppb2RpbmUgaXMgc2xpZ2h0bHkgcmVhcnJhbmdlZCB0byBmb3JtIHRoZSBmb3VydGggaW4gZGVzY2VudCBpbiAKZ29sZCwgYW5kIHRoZSByZW1haW5pbmcgdHdvIGFyZSB0aGUgc2FtZS4gQiBoYXMgYmVlbiBicm9rZW4gCnVwIHVuZGVyIG9jY3VsdHVtIChwLiA2MjgpIGFuZCBjYW4gYmUgZm9sbG93ZWQgdGhlcmUuIFRoZSAKc2l4dGVlbiByaW5ncyBzZXQgZnJlZSBmcm9tIHRoZSBmb3VyIGEsIGFmdGVyIGd5cmF0aW5nIHJvdW5kIAp0aGUgY2VudHJhbCBib2R5LCBub3cgYmVjb21lIGEgc3BoZXJlLCBicmVhayB1cCwgYXMgaW4gCm9jY3VsdHVtIChzZWUgcC4gNDQpIGludG8gYSBtZXRhIHNldmVuLWF0b21lZCByaW5nIGFuZCBhbiAKZWlnaHQtYXRvbWVkIGRvdWJsZSBjcm9zcywgYW5kIHNvIG9uIHRvIHRoZSBoeXBlciBsZXZlbC4gVGhlIApzcGhlcmUgd2l0aCBpdHMgdHdvIGNvbnRhaW5lZCBib2RpZXMgYnJlYWtzIHVwIGludG8gZWlnaHQgCgoKNTEgCgp0cmlhbmdsZXMgb24gdGhlIG1ldGEgbGV2ZWwsIGFuZCBlYWNoIG9mIHRoZXNlLCBvbiB0aGUgaHlwZXIsIGludG8gCmEgZHVhZCBhbmQgYSB1bml0LiBUaGUgdHdlbHZlIHNlcHRldHMgb2YgYyBhc3N1bWUgdGhlIGZvcm0gb2YgCnByaXNtcyBhcyBpbiBpb2RpbmUgKHNlZSBwLiA0OCkgYW5kIHB1cnN1ZSB0aGUgc2FtZSBjb3Vyc2UsIHdoaWxlIAppdHMgY2VudHJhbCBib2R5LCBhIGZvdXItc2lkZWQgcHlyYW1pZCB3aXRoIGl0cyBzaXggYXR0ZW5kYW50cywgCmRpdmlkZXMgb24gdGhlIG1ldGEgbGV2ZWwgaW50byBzaXggZHVhZHMsIHJldm9sdmluZyByb3VuZCBhIHJpbmcgCndpdGggYSBjZW50cmFsIGF0b20gYXMgaW4gY2hsb3JpbmUgKHAuIDQ3KSwgdGhlIGR1YWRzIGdvaW5nIG9mZiAKaW5kZXBlbmRlbnRseSBvbiB0aGUgaHlwZXItbGV2ZWwgYW5kIHRoZSByaW5nIGJyZWFraW5nIHVwIGFzIGluIApjaGxvcmluZS4gVGhlICIgY2lnYXIgIiB0ZXRyYWhlZHJvbiBvZiBkIGZvbGxvd3MgaXRzIGNvdXJzZSBhcyAKaW4gb2NjdWx0dW0sIGFuZCB0aGUgb3RoZXIgc2V0cyBmcmVlIHR3byBxdWFydGV0cyBhbmQgdHdvIHRyaXBsZXRzIApvbiB0aGUgbWV0YSBsZXZlbCwgeWllbGRpbmcgc2l4IGR1YWRzIGFuZCB0d28gdW5pdHMgYXMgaHlwZXIgCmNvbXBvdW5kcy4gSXQgd2lsbCBiZSBzZWVuIHRoYXQsIGNvbXBsZXggYXMgZ29sZCBpcywgaXQgaXMgCmNvbXBvc2VkIG9mIGNvbnN0aXR1ZW50cyBhbHJlYWR5IGZhbWlsaWFyLCBhbmQgaGFzIGlvZGluZSBhbmQgCm9jY3VsdHVtIGFzIGl0cyBuZWFyZXN0IGFsbGllcy4gCgpJSSBBTkQgXFxhLiDigJQgVGhlIFRldHJhaGVkcmFsIEdyb3Vwcy4gCgpJSS4g4oCUIFRoaXMgZ3JvdXAgY29uc2lzdHMgb2YgYmVyeWxsaXVtIChnbHVjaW51bSksIGNhbGNpdW0sIApzdHJvbnRpdW0gYW5kIGJhcml1bSwgYWxsIGRpYXRvbWljLCBwYXJhbWFnbmV0aWMgYW5kIHBvc2l0aXZlLiAKVGhlIGNvcnJlc3BvbmRpbmcgZ3JvdXAgY29uc2lzdHMgb2Ygb3h5Z2VuLCBjaHJvbWl1bSwgbW9seWItIApkZW51bSwgd29sZnJhbSAodHVuZ3N0ZW4pIGFuZCB1cmFuaXVtLCB3aXRoIGEgYmxhbmsgZGlzayAKYmV0d2VlbiB3b2xmcmFtIGFuZCB1cmFuaXVtIDogdGhlc2UgYXJlIGRpYXRvbWljLCBwYXJhLSAKbWFnbmV0aWMsIGFuZCBuZWdhdGl2ZS4gV2UgaGF2ZSBub3QgZXhhbWluZWQgYmFyaXVtLCAKd29sZnJhbSwgb3IgdXJhbml1bS4gCgpCZXJ5bGxpdW0gKFBsYXRlIElJSSwgMiwgYW5kIFBsYXRlIFZJSUksIGkpLiBJbiB0aGUgdGV0cmEtIApoZWRyb24gZm91ciBmdW5uZWxzIGFyZSBmb3VuZCwgdGhlIG1vdXRoIG9mIGVhY2ggZnVubmVsIG9wZW5pbmcgCm9uIG9uZSBvZiBpdHMgZmFjZXMuIFRoZSBmdW5uZWxzIHJhZGlhdGUgZnJvbSBhIGNlbnRyYWwgZ2xvYmUsIAphbmQgZWFjaCBmdW5uZWwgY29udGFpbnMgZm91ciBvdm9pZHMgZWFjaCB3aXRoIHRlbiBhdG9tcyB3aXRoaW4gCml0IGFycmFuZ2VkIGluIHRocmVlIHNwaGVyZXMuIEluIHRoZSBhY2NvbXBhbnlpbmcgZGlhZ3JhbXMgCm9uZSBmdW5uZWwgd2l0aCBpdHMgZm91ciBvdm9pZHMgaXMgc2hvd24gYW5kIGEgc2luZ2xlIG92b2lkIHdpdGggCml0cyB0aHJlZSBzcGhlcmVzLCBjb250YWluaW5nIHNldmVyYWxseSB0aHJlZSwgZm91ciwgYW5kIHRocmVlIAphdG9tcywgaXMgc2VlbiBhdCB0aGUgbGVmdC1oYW5kIGNvcm5lciBvZiB0aGUgcGxhdGUgKDcgYSkuIFRoZSAKbWVtYmVycyBvZiB0aGlzIGdyb3VwIGFyZSBhbGlrZSBpbiBhcnJhbmdlbWVudCwgZGlmZmVyaW5nIG9ubHkgCmluIHRoZSBpbmNyZWFzZWQgY29tcGxleGl0eSBvZiB0aGUgYm9kaWVzIGNvbnRhaW5lZCBpbiB0aGUgCmZ1bm5lbHMuIEJlcnlsbGl1bSwgaXQgd2lsbCBiZSBvYnNlcnZlZCwgaXMgdmVyeSBzaW1wbGUsIHdoZXJlYXMgCmNhbGNpdW0gYW5kIHN0cm9udGl1bSBhcmUgY29tcGxpY2F0ZWQuIAoKQmVyeWxsaXVtIDogNCBmdW5uZWxzIG9mIDQwIGF0b21zIC4uLiAxNjAgCgpDZW50cmFsIGdsb2JlIC4uLiAuLi4gNCAKClRvdGFsIC4uLiAuLi4gMTY0IAoKCkF0b21pYyB3ZWlnaHQgLi4uIC4uLiA5KjAgMSAKCk51bWJlciB3ZWlnaHQgJ2peLyAuLiA5KjExIAoKCjUyIAoKQ2FsY2l1bSAoUGxhdGUgVklJSSwgMikgc2hvd3MgaW4gZWFjaCBmdW5uZWwgdGhyZWUgY29udGFpbmVkIApzcGhlcmVzLCBvZiB3aGljaCB0aGUgY2VudHJhbCBvbmUgaGFzIHdpdGhpbiBpdCBzZXZlbiBvdm9pZHMgCmlkZW50aWNhbCB3aXRoIHRob3NlIG9mIGJlcnlsbGl1bSwgYW5kIHRoZSBzcGhlcmVzIGFib3ZlIGFuZCAKClBsYXRlIFZJSUkuIAoKCl5ebnJ5bFppdS9tXiAKCgrCriAKCgrCriAKCgrCriDCriAKCgowIAoKCiUgCgoKwqkgwqkgCgrCp2XCqTAgMDDCqTAwwqdnLCAKCgojIAoKCsKpIAoKCsKpIAoKCsKpIAoKCsKpIAoKCsKnPsKpwqnCqTDCqcKpwqlPwqc1KiAKCgrCqSAKCgrCqSAKwqkgCgoKX8KuIAoKCsKpIF7CriAKCsKpbiBHPmZeIAoKOG/CqTDCqcKpb2VvViAKwqkgwqkgCgoKwqkgCgoKwq4gbyBlIFHCqVEgQCDCriAKCgoqwqlXIAoKCl5DYVhjdWkvbnRyIAoKCkNLXlRDbnJ1QUpVXnJpeSAKCgpTdF5ydHlyaUp0THRqeW1eIAoKCnleLW9eeV4taS10J15BIAoKCmJlbG93IGl0IGNvbnRhaW4gZWFjaCBmaXZlIG92b2lkcyAoNyBiKSBpbiB3aGljaCB0aGUgdGhyZWUgY29uLSAKdGFpbmVkIHNwaGVyZXMgaGF2ZSwgcmVzcGVjdGl2ZWx5LCB0d28sIGZpdmUsIGFuZCB0d28gYXRvbXMuIFRoZSAKY2VudHJhbCBnbG9iZSBpcyBkb3VibGUsIGdsb2JlIHdpdGhpbiBnbG9iZSwgYW5kIGlzIGRpdmlkZWQgaW50byAKCgo1MyAKCmVpZ2h0IHNlZ21lbnRzLCByYWRpYXRpbmcgZnJvbSB0aGUgY2VudHJlIEhrZSBhbiBvcmFuZ2UgOyB0aGUgCmludGVybmFsIHBhcnQgb2YgdGhlIHNlZ21lbnQgYmVsb25naW5nIHRvIHRoZSBpbm5lciBnbG9iZSBoYXMgYSAKdHJpYW5ndWxhciBib2R5IHdpdGhpbiBpdCwgY29udGFpbmluZyBmb3VyIGF0b21zICg3IGMpLCBhbmQgdGhlIApleHRlcm5hbCBwYXJ0LCBiZWxvbmdpbmcgdG8gdGhlIGVuY2lyY2xpbmcgZ2xvYmUsIHNob3dzIHRoZSAKZmFtaWxpYXIgImNpZ2FyIiAoNyBkKS4gSW4gdGhpcyB3YXkgNzIwIGF0b21zIGFyZSBwYWNrZWQgaW50byAKdGhlIHNpbXBsZSBiZXJ5bGxpdW0gdHlwZS4gCgpDYWxjaXVtIDogNCBmdW5uZWxzIG9mIDE2MCBhdG9tcyAuLi4gNjQwIAoKQ2VudHJhbCBnbG9iZSAuLi4gLi4uIDgwIAoKVG90YWwgLi4uIC4uLiA3MjAgCgoKQXRvbWljIHdlaWdodCAuLi4gLi4uIDM5NzQgCgpOdW1iZXIgd2VpZ2h0ICdeXsKjIC4uLiAuLi4gNDAtMDAgCgpTdHJvbnRpdW0gKFBsYXRlIFZJSUksIDMpIHNob3dzIGEgc3RpbGwgZnVydGhlciBjb21wbGljYXRpb24gCndpdGhpbiB0aGUgZnVubmVscywgbm8gbGVzcyB0aGFuIGVpZ2h0IHNwaGVyZXMgYmVpbmcgZm91bmQgd2l0aGluIAplYWNoLiBFYWNoIG9mIHRoZSBoaWdoZXN0IHBhaXIgY29udGFpbnMgZm91ciBzdWJzaWRpYXJ5IHNwaGVyZXMsIAp3aXRoIGZpdmUsIHNldmVuLCBzZXZlbiwgZml2ZSBhdG9tcywgcmVzcGVjdGl2ZWx5ICg3IGUsIGcsIC8pLiBUaGUgCmcgZ3JvdXBzIGFyZSBpZGVudGljYWwgd2l0aCB0aG9zZSBpbiBnb2xkLCBidXQgZGlmZmVyZW5jZSBvZiBwcmVzc3VyZSAKbWFrZXMgdGhlIGNvbnRhaW5pbmcgYm9keSBzcGhlcmljYWwgaW5zdGVhZCBvZiBvdm9pZCA7IHNpbWlsYXIgCmdyb3VwcyBhcmUgc2VlbiBpbiB0aGUgdG9wIHJpbmcgb2YgdGhlIGlvZGluZSBmdW5uZWwsIHdoZXJlIGFsc28gCnRoZSAiIGhvbGUgIiBpcyBvdm9pZCBpbiBmb3JtLiBUaGUgc2Vjb25kIHBhaXIgb2Ygc3BoZXJlcyAKY29udGFpbnMgdGVuIG92b2lkcyAoNyBiKSBpZGVudGljYWwgd2l0aCB0aG9zZSBvZiBjYWxjaXVtLiBUaGUgCnRoaXJkIHBhaXIgY29udGFpbnMgZm91cnRlZW4gb3ZvaWRzICg3IGEpIGlkZW50aWNhbCB3aXRoIHRob3NlIG9mIApiZXJ5bGxpdW0sIHdoaWxlIHRoZSBmb3VydGggcGFpciByZXBlYXRzIHRoZSBzZWNvbmQsIHdpdGggdGhlIApvdm9pZHMgcmUtYXJyYW5nZWQuIFRoZSBpbnRlcm5hbCBkaXZpc2lvbnMgb2YgdGhlIGRvdWJsZSBzcGhlcmUgCm9mIHRoZSBjZW50cmFsIGdsb2JlIGFyZSB0aGUgc2FtZSBhcyBpbiBjYWxjaXVtLCBidXQgdGhlIGNvbnRlbnRzIApkaWZmZXIuIFRoZSAiIGNpZ2FycyAiIGluIHRoZSBleHRlcm5hbCBzZWdtZW50cyBhcmUgcmVwbGFjZWQgYnkgCnNldmVuLWF0b21lZCBvdm9pZHMgKDcgLy8pIOKAlCB0aGUgaW9kaW5lIG92b2lkcyDigJQgYW5kIHRoZSBleHRlcm5hbCAKc2VnbWVudHMgY29udGFpbiBmaXZlLWF0b21lZCB0cmlhbmdsZXMgKDcgLykuIFRodXMgMSw1NjggYXRvbXMgCmhhdmUgYmVlbiBwYWNrZWQgaW50byB0aGUgYmVyeWxsaXVtIHR5cGUsIGFuZCBvdXIgd29uZGVyIGlzIAphZ2FpbiBhcm91c2VkIGJ5IHRoZSBpbmdlbnVpdHkgd2l0aCB3aGljaCBhIHR5cGUgaXMgcHJlc2VydmVkIAp3aGlsZSBpdCBpcyBhZGFwdGVkIHRvIG5ldyBjb25kaXRpb25zLiAKClN0cm9udGl1bSA6IDQgZnVubmVscyBvZiAzNjggYXRvbXMgLi4uIDE0NzIgCgpDZW50cmFsIGdsb2JlIC4uLiAuLi4gOTYgCgpUb3RhbCAuLi4gLi4uIDE1NjggCgpBdG9taWMgd2VpZ2h0IC4uLiAuLi4gODYnOTUgCgpOdW1iZXIgd2VpZ2h0IF4tfHxeIC4uLiA4Ny0xMSAKClRoZSBjb3JyZXNwb25kaW5nIGdyb3VwLCBoZWFkZWQgYnkgb3h5Z2VuIOKAlCBveHlnZW4sIApjaHJvbWl1bSwgbW9seWJkZW51bSwgd29sZnJhbSBhbmQgdXJhbml1bSDigJQgb2ZmZXJzIHVzIAphbm90aGVyIHByb2JsZW0gaW4gaXRzIGZpcnN0IG1lbWJlci4gCgoKNTQgCgpPeHlnZW4gKFBsYXRlIFZJSUksIDQpLiBUaGlzIHdhcyBleGFtaW5lZCBieSB1cyBpbiAxODk1LCAKYW5kIHRoZSBkZXNjcmlwdGlvbiBtYXkgYmUgcmVwcm9kdWNlZCBoZXJlIHdpdGggYSBtdWNoIAppbXByb3ZlZCBkaWFncmFtIG9mIGl0cyB2ZXJ5IHBlY3VsaWFyIGNvbnN0aXR1dGlvbi4gVGhlIGdhc2VvdXMgCmF0b20gaXMgYW4gb3ZvaWQgYm9keSwgd2l0aGluIHdoaWNoIGEgc3BpcmFsbHktY29pbGVkIHNuYWtlLWxpa2UgCmJvZHkgcmV2b2x2ZXMgYXQgYSBoaWdoIHZlbG9jaXR5LCBmaXZlIGJyaWxsaWFudCBwb2ludHMgb2YgbGlnaHQgCnNoaW5pbmcgb24gdGhlIGNvaWxzLiBUaGUgYXBwZWFyYW5jZSBnaXZlbiBpbiB0aGUgZm9ybWVyIApkaWFncmFtIHdpbGwgYmUgb2J0YWluZWQgYnkgcGxhY2luZyB0aGUgZml2ZSBzZXB0ZXRzIG9uIG9uZSBzaWRlIApvbiB0aGUgdG9wIG9mIHRob3NlIG9uIHRoZSBvdGhlciwgc28gdGhhdCB0aGUgdGVuIGJlY29tZSBpbiAKYXBwZWFyYW5jZSBmaXZlLCBhbmQgdGh1cyBkb3VibGluZyB0aGUgd2hvbGUsIHRoZSBkb3VibGluZyBwb2ludCAKbGVhdmluZyBlbGV2ZW4gZHVhZHMgb24gZWFjaCBzaWRlLCBUaGUgY29tcG9zaXRpb24gaXMsIGhvdy0gCmV2ZXIsIG11Y2ggYmV0dGVyIHNlZW4gYnkgZmxhdHRlbmluZyBvdXQgdGhlIHdob2xlLiBPbiB0aGUgCnByb3RvIGxldmVsIHRoZSB0d28gc25ha2VzIHNlcGFyYXRlIGFuZCBhcmUgY2xlYXJseSBzZWVuLiAKCgpPeHlnZW46IFBvc2l0aXZlIHNuYWtlIAoKCjU1IHNwaGVyZXMgb2YgMiBhdG9tc3wgCgorIDUgZGlza3Mgb2YgNyBhdG9tcyBeXiAKCk5lZ2F0aXZlIHNuYWtlICwsIC4uLiAxNDUgCgpUb3RhbCAuLi4gLi4uIDI5MCAKCgpBdG9taWMgd2VpZ2h0IC4uLiAuLi4gLi4uIDE1Kjg3IAoKTnVtYmVyIHdlaWdodCBZXm8g4oCi4oCi4oCiIOKAouKAouKAoiBpNippaSAKCkNocm9taXVtIChQbGF0ZSBWSUlJLCA1KSAicmV2ZXJ0cyB0byB0aGUgYW5jZXN0cmFsIHR5cGUsIiAKdGhlIHRldHJhaGVkcm9uIDsgdGhlIGZ1bm5lbCBpcyB3aWRlbmVkIGJ5IHRoZSBhcnJhbmdlbWVudCBvZiAKaXRzIGNvbnRlbnRzLCB0aHJlZSBzcGhlcmVzIGZvcm1pbmcgaXRzIGZpcnN0IHJpbmcsIGFzIGNvbXBhcmVkIAp3aXRoIHRoZSB1bml0cyBpbiBiZXJ5bGxpdW0gYW5kIGNhbGNpdW0sIGFuZCB0aGUgcGFpcnMgaW4gc3Ryb250aXVtIAphbmQgbW9seWJkZW51bS4gVHdvIG9mIHRoZXNlIHNwaGVyZXMgYXJlIGlkZW50aWNhbCBpbiB0aGVpciAKY29udGVudHMg4oCUIHR3byBxdWludGV0cyAoNyAvKSwgYSBxdWludGV0ICg3IDspLCBhbmQgdHdvIHF1aW50ZXRzLSAKKDcgZSksIGUgYW5kIC8gYmVpbmcgdG8gZWFjaCBvdGhlciBhcyBvYmplY3QgYW5kIGltYWdlLiBUaGUgCnJlbWFpbmluZyBzcGhlcmUgKDcgYikgaXMgaWRlbnRpY2FsIHdpdGggdGhlIGhpZ2hlc3QgaW4gdGhlIApjYWxjaXVtIGZ1bm5lbC4gVGhlIHJlbWFpbmluZyB0d28gc3BoZXJlcywgb25lIGJlbG93IHRoZSAKb3RoZXIsIGFyZSBpZGVudGljYWwgd2l0aCB0aGUgY29ycmVzcG9uZGluZyB0d28gc3BoZXJlcyBpbiAKY2FsY2l1bS4gVGhlIGNlbnRyYWwgZ2xvYmUsIGFzIHJlZ2FyZHMgaXRzIGV4dGVybmFsIHNlZ21lbnRzLCAKaXMgYWdhaW4gaWRlbnRpY2FsIHdpdGggdGhhdCBvZiBjYWxjaXVtLCBidXQgaW4gdGhlIGludGVybmFsIApzZWdtZW50cyBhc2l4LWF0b21lZCB0cmlhbmdsZSB7eSBrKSBpcyBzdWJzdGl0dXRlZCBmb3IgdGhlIGNhbGNpdW0gCmZvdXItYXRvbWVkIG9uZSAoNyBjKS4gCgpDaHJvbWl1bTogNCBmdW5uZWxzIG9mIDIxMCBhdG9tcyAuLi4gODQwIAoKQ2VudHJhbCBnbG9iZSAuLi4gLi4uIDk2IAoKVG90YWwgLi4uIC4uLiA5MzYgCgpBdG9taWMgd2VpZ2h0IC4uLiAuLi4gNTE3NCAKCk51bWJlciB3ZWlnaHQgXl5eIC4uLiA1MiowMCAKCgo1NSAKCk1vbHliZGVudW0gKFBsYXRlIFZJSSAxLCA2KSB2ZXJ5IGNsb3NlbHkgcmVzZW1ibGVzIHN0cm9udGl1bSwgCmRpZmZlcmluZyBmcm9tIGl0IG9ubHkgaW4gdGhlIGNvbXBvc2l0aW9uIG9mIHRoZSBoaWdoZXN0IHBhaXIgb2YgCnNwaGVyZXMgaW4gdGhlIGZ1bm5lbHMgYW5kIGluIHRoZSBwcmVzZW5jZSBvZiBhIGxpdHRsZSBzcGhlcmUsIApjb250YWluaW5nIHR3byBhdG9tcyBvbmx5LCBpbiB0aGUgbWlkZGxlIG9mIHRoZSBjZW50cmFsIGdsb2JlLiAKVGhlIHRvcG1vc3Qgc3BoZXJlcyBjb250YWluIG5vIGxlc3MgdGhhbiBlaWdodCBzdWJzaWRpYXJ5IHNwaGVyZXMgCndpdGhpbiBlYWNoIDsgdGhlIGhpZ2hlc3Qgb2YgdGhlc2UgKDcgZSkgaGFzIGZvdXIgYXRvbXMgaW4gaXQgOyB0aGUgCm5leHQgdGhyZWUgaGF2ZSBmb3VyLCBzZXZlbiBhbmQgZm91ciAoNyBlIGcgZSksIHJlc3BlY3RpdmVseTsgdGhlIApuZXh0IHRocmVlIGFyZSBhbGwgc2VwdGV0cyAoNyBnKSwgYW5kIHRoZSBsYXN0IGhhcyBmb3VyIOKAlCBtYWtpbmcgaW4gCmFsbCBmb3IgdGhlc2UgdHdvIHNwaGVyZXMgODggYXRvbXMsIGFzIGFnYWluc3QgdGhlIDQ4IGluIGNvcnJlLSAKc3BvbmRpbmcgc3BoZXJlcyBvZiBzdHJvbnRpdW0sIG1ha2luZyBhIGRpZmZlcmVuY2Ugb2YgMTYwIGluIHRoZSAKZm91ciBmdW5uZWxzLiAKCk1vbHliZGVudW0gOiA0IGZ1bm5lbHMgb2YgNDA4IGF0b21zIC4uLiAxNjMyIApDZW50cmFsIGdsb2JlIOKAoiAuLi4gLi4uIDk4IAoKVG90YWwgLi4uIDE3MzAgCgpBdG9taWMgd2VpZ2h0IC4uLiAuLi4gOTUqMjYgCgpOdW1iZXIgd2VpZ2h0IF5eMV4g4oCi4oCi4oCiIDk2LTExIAoKSUkgYS4g4oCUIFRoaXMgZ3JvdXAgY29udGFpbnMgbWFnbmVzaXVtLCB6aW5jLCBjYWRtaXVtLCBhbmQgCm1lcmN1cnksIHdpdGggYW4gZW1wdHkgZGlzayBiZXR3ZWVuIGNhZG1pdW0gYW5kIG1lcmN1cnkgOyAKd2UgZGlkIG5vdCBleGFtaW5lIG1lcmN1cnkuIEFsbCBhcmUgZGlhdG9taWMsIGRpYW1hZ25ldGljIGFuZCAKcG9zaXRpdmU7IHRoZSBjb3JyZXNwb25kaW5nIGdyb3VwIGNvbnNpc3RzIG9mIHN1bHBodXIsIHNlbGVuaXVtIAphbmQgdGVsbHVyaXVtLCBhbHNvIGFsbCBkaWF0b21pYyBhbmQgZGlhbWFnbmV0aWMsIGJ1dCBuZWdhdGl2ZS4gClRoZSBzYW1lIGNoYXJhY3RlcmlzdGljcyBvZiBmb3VyIGZ1bm5lbHMgb3BlbmluZyBvbiB0aGUgZmFjZXMgb2YgCmEgdGV0cmFoZWRyb24gYXJlIGZvdW5kIGluIGFsbCwgYnV0IG1hZ25lc2l1bSBhbmQgc3VscGh1ciBoYXZlIApubyBjZW50cmFsIGdsb2JlLCBhbmQgaW4gY2FkbWl1bSBhbmQgdGVsbHVyaXVtIHRoZSBnbG9iZSBoYXMgCmJlY29tZSBhIGNyb3NzLiAKCk1hZ25FdlNJVU0gKFBsYXRlIElYLCBpKSBpbnRyb2R1Y2VzIHVzIHRvIGEgbmV3IGFycmFuZ2VtZW50IDogCmVhY2ggZ3JvdXAgb2YgdGhyZWUgb3ZvaWRzIGZvcm1zIGEgcmluZywgYW5kIHRoZSB0aHJlZSByaW5ncyBhcmUgCndpdGhpbiBhIGZ1bm5lbCA7IGF0IGZpcnN0IGdsYW5jZSwgdGhlcmUgYXJlIHRocmVlIGJvZGllcyBpbiB0aGUgCmZ1bm5lbCA7IG9uIGV4YW1pbmF0aW9uIGVhY2ggb2YgdGhlc2UgaXMgc2VlbiB0byBjb25zaXN0IG9mIHRocmVlLCAKd2l0aCBvdGhlciBib2RpZXMsIHNwaGVyZXMsIGFnYWluIHdpdGhpbiB0aGVtLiBBcGFydCBmcm9tIHRoaXMsIAp0aGUgY29tcG9zaXRpb24gaXMgc2ltcGxlIGVub3VnaCwgYWxsIHRoZSBvdm9pZHMgYmVpbmcgYWxpa2UsIGFuZCAKY29tcG9zZWQgb2YgYSB0cmlwbGV0LCBhIHNlcHRldCBhbmQgYSBkdWFkLiAKCk1hZ25lc2l1bTogNCBmdW5uZWxzIG9mIDEwOCBhdG9tcyAuLi4gNDMyIAoKQXRvbWljIHdlaWdodCAuLi4gLi4uIDI0KjE4IAoKTnVtYmVyIHdlaWdodCBeXi1eIC4uLiAuLi4gMjQqMDAgCgpaaW5jIChQbGF0ZSBJWCwgMikgYWxzbyBicmluZ3MgYSBuZXcgZGV2aWNlIDogdGhlIGZ1bm5lbCBpcyBvZiAKdGhlIHNhbWUgdHlwZSBhcyB0aGF0IG9mIG1hZ25lc2l1bSwgd2hpbGUgc2VwdGV0cyBhcmUgc3Vic3RpdHV0ZWQgCgoKNTYgCgpmb3IgdGhlIHRyaXBsZXRzLCBhbmQgMzYgYWRkaXRpb25hbCBhdG9tcyBhcmUgdGh1cyBzbGlwcGVkIGluLiAKVGhlbiB3ZSBzZWUgZm91ciBzcGlrZXMsIGFsdGVybmF0aW5nIHdpdGggdGhlIGZ1bm5lbHMgYW5kIApwb2ludGluZyB0byB0aGUgYW5nbGVzLCBlYWNoIGFkZGluZyAxNDQgYXRvbXMgdG8gdGhlIHRvdGFsLiBUaGUgCgpQbGF0ZSBJWC4gCgoKSWRMLUNMZ3J4ZV5pdS9tXiAKCgpUXlZUVkMgCgoKQ291ZC9UVGlBQUEvcnJ2IAoKCnNwaWtlcyBzaG93IHRoZSB0ZW4tYXRvbWVkIHRyaWFuZ2xlLCBhbHJlYWR5IG1ldCB3aXRoIGluIG90aGVyIAptZXRhbHMsIHRocmVlIHZlcnkgcmVndWxhciBwaWxsYXJzLCBlYWNoIHdpdGggc2l4IHNwaGVyZXMsIGNvbnRhaW5pbmcgCnR3bywgdGhyZWUsIGZvdXIsIGZvdXIsIHRocmVlLCB0d28gYXRvbXMsIHJlc3BlY3RpdmVseS4gVGhlIApzdXBwb3J0aW5nIHNwaGVyZXMgYXJlIG9uIHRoZSBtb2RlbCBvZiB0aGUgY2VudHJhbCBnbG9iZSwgYnV0IAoKCjU3IAoKY29udGFpbiBtb3JlIGF0b21zLiBGdW5uZWxzIGFuZCBzcGlrZXMgYWxpa2UgcmFkaWF0ZSBmcm9tIGEgCnNpbXBsZSBjZW50cmFsIGdsb2JlLCBpbiB3aGljaCBmaXZlIGNvbnRhaW5lZCBzcGhlcmVzIGFyZSBhcnJhbmdlZCAKY3Jvc3N3aXNlLCBwcmVwYXJpbmcgZm9yIHRoZSBmdWxseSBkZXZlbG9wZWQgY3Jvc3Mgb2YgY2FkbWl1bS4gClRoZSBlbmRzIG9mIHRoZSBjcm9zcyB0b3VjaCB0aGUgYm90dG9tcyBvZiB0aGUgZnVubmVscy4gCgpaaW5jIDogNCBmdW5uZWxzIG9mIDE0NCBhdG9tcyAuLi4gLi4uIDU3NiAKCjQgc3Bpa2VzIG9mIDE0NCBhdG9tcyAuLi4gLi4uIDU3NiAKCkNlbnRyYWwgZ2xvYmUgLi4uIC4uLiAuLi4gMTggCgpUb3RhbCAuLi4gMSAxNzAgCgpBdG9taWMgd2VpZ2h0IC4uLiAuLi4gNjQqOSAxIAoKTnVtYmVyIHdlaWdodCBpaXxeIC4uLiAuLi4gNjUqMDAgCgpDYWRtaXVtIChQbGF0ZSBJWCwgMykgaGFzIGFuIGluY3JlYXNlZCBjb21wbGV4aXR5IG9mIGZ1bm5lbHMgOyAKdGhlIGRpYWdyYW0gc2hvd3Mgb25lIG9mIHRoZSB0aHJlZSBzaW1pbGFyIHNlZ21lbnRzIHdoaWNoIGxpZSAKd2l0aGluIHRoZSBmdW5uZWxzIGFzIGN5bGluZGVycyA7IGVhY2ggb2YgdGhlc2UgY29udGFpbnMgZm91ciAKc3BoZXJlcywgdGhyZWUgcGlsbGFycyBhbmQgdGhyZWUgb3ZvaWRzLCBsaWtlIHRoZSBzcGlrZSBvZiB6aW5jIAp0dXJuZWQgdXBzaWRlIGRvd24sIGFuZCB0aGUgemluYyB0ZW4tYXRvbWVkIHRyaWFuZ2xlIGNoYW5nZWQgCmludG8gdGhyZWUgdGVuLWF0b21lZCBvdm9pZHMuIFRoZSBjZW50cmUtcGllY2UgaXMgYSBuZXcgZm9ybSwgCnRob3VnaCBwcmVmaWd1cmVkIGluIHRoZSBjZW50cmFsIGdsb2JlIG9mIHppbmMuIAoKUEFULk1JVFRNIC4gSjMgc2VnbWVudHMgb2YgMTY0IGF0b21zID0gNDkyfCAKXl5eXiciXiDigKIgSTQgZnVubmVscyBvZiA0OTIgYXRvbXMgKSAtICdeXlMgCgpDZW50cmFsIGJvZHkgCgoKVG90YWwgCgoKNDggCjIwMTYgCgoKaWlpJzZvIAoKSUkyKjAwIAoKCkF0b21pYyB3ZWlnaHQgLi4uIApOdW1iZXIgd2VpZ2h0IF4tSmleIAoKVGhlIGNvcnJlc3BvbmRpbmcgbmVnYXRpdmUgZ3JvdXAgaXMgaGVhZGVkIGJ5IApTdWxwaHVyIChQbGF0ZSBYLCBpKSwgd2hpY2gsIGxpa2UgbWFnbmVzaXVtLCBoYXMgbm8gY2VudHJhbCAKZ2xvYmUsIGFuZCBjb25zaXN0cyBzaW1wbHkgb2YgdGhlIHppbmMgZnVubmVscywgbXVjaCBsZXNzIApjb21wcmVzc2VkIHRoYW4gemluYyBidXQgdGhlIHNhbWUgaW4gY29tcG9zaXRpb24uIAoKU3VscGh1ciA6IDQgZnVubmVscyBvZiAxNDQgYXRvbXMuLi4gLi4uIDU3NiAKCkF0b21pYyB3ZWlnaHQgLi4uIC4uLiAzaSI4MiAKCk51bWJlciB3ZWlnaHQgXl4gLi4uIC4uLiAzMi0wMCAKClNlbGVuaXVtIChQbGF0ZSBYLCAyKSBpcyBkaXN0aW5ndWlzaGVkIGJ5IHRoZSBleHF1aXNpdGUgCnBlY3VsaWFyaXR5LCBhbHJlYWR5IG5vdGljZWQsIG9mIGEgcXVpdmVyaW5nIHN0YXIsIGZsb2F0aW5nIGFjcm9zcyAKdGhlIG1vdXRoIG9mIGVhY2ggZnVubmVsLCBhbmQgZGFuY2luZyB2aW9sZW50bHkgd2hlbiBhIHJheSBvZiAKbGlnaHQgZmFsbHMgdXBvbiBpdC4gSXQgaXMga25vd24gdGhhdCB0aGUgY29uZHVjdGl2aXR5IG9mIHNlbGVuaXVtIAp2YXJpZXMgd2l0aCB0aGUgaW50ZW5zaXR5IG9mIHRoZSBsaWdodCBmYWxsaW5nIHVwb24gaXQsIGFuZCBpdCBtYXkgCgoKNTggCgpiZSB0aGF0IHRoZSBzdGFyIGlzIGluIHNvbWUgd2F5IGNvbm5lY3RlZCB3aXRoIGl0cyBjb25kdWN0aXZpdHkuIApJdCB3aWxsIGJlIHNlZW4gdGhhdCB0aGUgc3RhciBpcyBhIHZlcnkgY29tcGxpY2F0ZWQgYm9keSwgYW5kIGluIAplYWNoIG9mIGl0cyBzaXggcG9pbnRzIHRoZSB0d28gZml2ZS1hdG9tZWQgc3BoZXJlcyByZXZvbHZlIHJvdW5kIAoKCnRoZSBzZXZlbi1hdG9tZWQgY29uZS4gVGhlIGJvZGllcyBpbiB0aGUgZnVubmVscyByZXNlbWJsZSAKdGhvc2UgaW4gbWFnbmVzaXVtLCBidXQgYSByZXZlcnNlZCBpbWFnZSBvZiB0aGUgdG9wIG9uZSBpcyAKaW50ZXJwb3NlZCBiZXR3ZWVuIGl0c2VsZiBhbmQgdGhlIHNtYWxsIGR1YWQsIGFuZCBlYWNoIHBhaXIgaGFzIAppdHMgb3duIGVuY2xvc3VyZS4gVGhlIGNlbnRyYWwgZ2xvYmUgaXMgdGhlIHNhbWUgYXMgdGhhdCBvZiB6aW5jLiAKCgo1OSAKClNlbGVuaXVtIDogNCBmdW5uZWxzIG9mIDE5OCBhdG9tcyAuLi4gNzkyIAoKNCBzdGFycyBvZiAxNTMgYXRvbXMgLi4uIC4uLiA2MTIgCgpDZW50cmFsIGdsb2JlIC4uLiAuLi4gMTggCgpUb3RhbCAuLi4gMTQyMiAKCkF0b21pYyB3ZWlnaHQgLi4uIC4uLiA3OCo1OCAKCk51bWJlciB3ZWlnaHQgaV58XiAuLi4gLi4uIDc5KjAwIAoKVGVsbHVyaXVtIChQbGF0ZSBYLCAzKSwgaXQgd2lsbCBiZSBzZWVuLCBjbG9zZWx5IHJlc2VtYmxlcyAKY2FkbWl1bSwgYW5kIGhhcyB0aHJlZSBjeWxpbmRyaWNhbCBzZWdtZW50cyDigJQgb2Ygd2hpY2ggb25lIGlzIApmaWd1cmVkIOKAlCBtYWtpbmcgdXAgdGhlIGZ1bm5lbC4gVGhlIGNvbnRhaW5lZCBib2RpZXMgaW4gdGhlIApwaWxsYXJzIHJ1biB0aHJlZSwgZm91ciwgZml2ZSwgZm91ciwgdGhyZWUsIHR3bywgaW5zdGVhZCBvZiBzdGFydGluZyAKd2l0aCB0d28gOyBhbmQgYSBxdWFydGV0IHJlcGxhY2VzIGEgZHVhZCBpbiB0aGUgZ2xvYmVzIGFib3ZlLiAKVGhlIGNlbnRyYWwgY3Jvc3Mgb25seSBkaWZmZXJzIGZyb20gdGhhdCBvZiBjYWRtaXVtIGluIGhhdmluZyBhIApzZXZlbi1hdG9tZWQgaW5zdGVhZCBvZiBhIGZvdXItYXRvbWVkIGNlbnRyZS4gU28gY2xvc2UgYSAKc2ltaWxhcml0eSBpcyBzdHJpa2luZy4gCgozIHNlZ21lbnRzIG9mIDE4MSBhdG9tcyA9IDU0MykgCgo0IGZ1bm5lbHMgb2YgNTQzIGF0b21zIHwgLSA3LSAKQ2VudHJhbCBib2R5IC4uLiAuLi4gNTEgCgpUb3RhbCAuLi4gMjIyMyAKCgpUZWxsdXJpdW0gCgoKQXRvbWljIHdlaWdodCAuLi4gLi4uIDEyNio2NCAKCk51bWJlciB3ZWlnaHQgXl5eIC4uLiAxMjMqNTAgCgpWLiAKCldlIG11c3Qgbm93IGNvbnNpZGVyIHRoZSB3YXlzIGluIHdoaWNoIHRoZSBtZW1iZXJzIG9mIAp0aGUgdGV0cmFoZWRyYWwgZ3JvdXBzIGJyZWFrIHVwLCBhbmQgYXMgd2UgcHJvY2VlZCB3aXRoIHRoaXMgCnN0dWR5IHdlIHNoYWxsIGZpbmQgaG93IGNvbnRpbnVhbCBhcmUgdGhlIHJlcGV0aXRpb25zLCBhbmQgaG93IApOYXR1cmUsIHdpdGggYSBsaW1pdGVkIG51bWJlciBvZiBmdW5kYW1lbnRhbCBtZXRob2RzLCBjcmVhdGVzIApieSB2YXJpZWQgY29tYmluYXRpb25zIGhlciBpbmZpbml0ZSB2YXJpZXR5IG9mIGZvcm1zLiAKCkJlcnlsbGl1bSAoUGxhdGUgSUlJLCAyLCBhbmQgVklJSSwgaSkuIAoKQmVyeWxsaXVtIG9mZmVycyB1cyBmb3VyIHNpbWlsYXIgZnVubmVscyBhbmQgYSBjZW50cmFsIGdsb2JlLCAKYW5kIHRoZSBwcm90by1lbGVtZW50cyBjb25zaXN0IG9mIHRoZXNlIGZpdmUgYm9kaWVzLCBzZXQgZnJlZS4gVGhlIApmdW5uZWwsIHJlbGVhc2VkIGZyb20gcHJlc3N1cmUsIGFzc3VtZXMgYSBzcGhlcmljYWwgZm9ybSwgd2l0aCBpdHMgCmZvdXIgb3ZvaWRzIHNwaW5uaW5nIHdpdGhpbiBpdCwgYW5kIHRoZSBjZW50cmFsIGdsb2JlIHJlbWFpbnMgYSAKc3BoZXJlLCBjb250YWluaW5nIGEgd2hpcmxpbmcgY3Jvc3MuIE9uIHRoZSBtZXRhIGxldmVsLCB0aGUgCm92b2lkcyBhcmUgc2V0IGZyZWUsIGFuZCB0d28gZnJvbSBlYWNoIGZ1bm5lbCBhcmUgc2VlbiB0byBiZSAKcG9zaXRpdmUsIHR3byBuZWdhdGl2ZSDigJQgc2l4dGVlbiBib2RpZXMgaW4gYWxsLCBwaGlzIHRoZSBjcm9zcywgaW4gCndoaWNoIHRoZSByZXN1bHRhbnQgZm9yY2UtbGluZXMgYXJlIGNoYW5nZWQsIHByZXBhcmF0b3J5IHRvIGl0cyAKCgo2byAKCgpicmVha2luZyBpbnRvIHR3byBkdWFkcyBvbiB0aGUgaHlwZXIgbGV2ZWwuIE9uIHRoYXQgbGV2ZWwsIHRoZSAKZGVjYWRlcyBkaXNpbnRlZ3JhdGUgaW50byB0d28gdHJpcGxldHMgYW5kIGEgcXVhcnRldCwgdGhlIHBvc2l0aXZlIAp3aXRoIHRoZSBkZXByZXNzaW9ucyBpbndhcmQsIHRoZSBuZWdhdGl2ZSB3aXRoIHRoZSBkZXByZXNzaW9ucyAKb3V0d2FyZC4gCgpDYWxjaXVtIChQbGF0ZSBWSUlJLCAyKS4gCgpUaGUgZnVubmVscywgYXMgdXN1YWwsIGFzc3VtZSBhIHNwaGVyaWNhbCBmb3JtIG9uIHRoZSBwcm90byAKbGV2ZWwsIGFuZCBzaG93LCBpbiBlYWNoIGNhc2UsIHRocmVlIHNwaGVyZXMgY29udGFpbmluZyBvdm9pZHMuIApUaGVzZSBzcGhlcmVzLCBzdGlsbCBvbiB0aGUgcHJvdG8gbGV2ZWwsIGJyZWFrIGZyZWUgZnJvbSB0aGVpciAKY29udGFpbmluZyBmdW5uZWwsIGFzIGluIHRoZSBjYXNlIG9mIGdvbGQgKHAuIDQ5KSwgdHdlbHZlIGJvZGllcyAKYmVpbmcgdGh1cyBsaWJlcmF0ZWQsIHdoaWxlIHRoZSBjZW50cmFsIGdsb2JlIGJyZWFrcyB1cCBpbnRvIGVpZ2h0IApzZWdtZW50cywgZWFjaCBvZiB3aGljaCBiZWNvbWVzIGdsb2J1bGFyLCBhbmQgY29udGFpbnMgd2l0aGluIAppdCBhICIgY2lnYXIiIGFuZCBhIHNvbWV3aGF0IGhlYXJ0LXNoYXBlZCBib2R5LiBGb3VyIHNwaGVyZXMsIAplYWNoIGNvbnRhaW5pbmcgc2V2ZW4gdGVuLWF0b21lZCBvdm9pZHMsIGFyZSBpZGVudGljYWwgd2l0aCB0aG9zZSAKaW4gYmVyeWxsaXVtLCBhbmQgY2FuIGJlIGZvbGxvd2VkIGluIGl0cyBkaWFncmFtLiBFaWdodCBzcGhlcmVzLiAKCgooRC0gCgoKXF5sIDReOCAKCgpCZSAKCgplYWNoIGNvbnRhaW5pbmcgZml2ZSBuaW5lLWF0b21lZCBvdm9pZHMgb2YgYSBkaWZmZXJlbnQgdHlwZSwgc2V0IApmcmVlLCBvbiB0aGUgbWV0YSBsZXZlbCwgZWlnaHR5IGR1YWRz4oCUIGZvcnR5IHBvc2l0aXZlIGFuZCBmb3J0eSAKbmVnYXRpdmUg4oCUIGFuZCBmb3J0eSBxdWludGV0cywgd2hpY2ggYXJlIGlkZW50aWNhbCB3aXRoIHRob3NlIGluIApjaGxvcmluZS4gT24gdGhlIGh5cGVyIGxldmVsLCB0aGUgZHVhZHMgYmVjb21lIHNpbmdsZSBhdG9tcywgCndpdGhpbiBhIHNwaGVyZSwgYW5kIHRoZSBjZW50cmFsIGF0b20gZnJvbSB0aGUgcXVpbnRldCBpcyBhbHNvIHNldCAKZnJlZSwgb25lIGh1bmRyZWQgYW5kIHR3ZW50eSBpbiBhbGwuIFRoZSByZW1haW5pbmcgZm91ciBhdG9tcyAKb2YgdGhlIHF1aW50ZXQgZGl2aWRlIGludG8gdHdvIGR1YWRzLiAKClRoZSBjZW50cmFsIGdsb2JlLCBkaXZpZGluZyBpbnRvIGVpZ2h0LCBiZWNvbWVzIGVpZ2h0IHNpeC0gCmF0b21lZCBzcGhlcmVzIG9uIHRoZSBtZXRhLCB0aGUgIiBjaWdhciAiIGJlaGF2aW5nIGFzIHVzdWFsLCAKCgo2aSAKCmZvdXIgIiBjaWdhcnMgIiBiZWluZyBwb3NpdGl2ZSBhbmQgZm91ciBuZWdhdGl2ZSwgYW5kIGJlY29taW5nIApkaXNzb2NpYXRlZCBpbnRvIHRyaXBsZXRzIDsgdGhlIGZvdXIgYXRvbXMgd2l0aGluIHRoZSBoZWFydC1zaGFwZWQgCmJvZHkgYXBwZWFyIGFzIGEgdGV0cmFoZWRyb24sIHJlbWFpbiB0b2dldGhlciBvbiB0aGUgbWV0YSBsZXZlbCwgCmFuZCBicmVhayB1cCBpbnRvIGR1YWRzIG9uIHRoZSBoeXBlci4gCgpTdHJvbnRpdW0gKFBsYXRlIFZJSUksIDMpLiAKClRoZSB0aGlyZCBtZW1iZXIgb2YgdGhpcyBncm91cCByZXBlYXRzIHRoZSBhIGdyb3VwcyBvZiAKYmVyeWxsaXVtIGFuZCB0aGUgaCBncm91cHMgb2YgY2FsY2l1bSwgYW5kIHRoZXkgZGlzc29jaWF0ZSBpbnRvIAp0aGUgYm9kaWVzIGFscmVhZHkgZGVzY3JpYmVkIHVuZGVyIHRoZXNlIHJlc3BlY3RpdmVseS4gVGhlIHR3byAKdXBwZXIgZ2xvYmVzIGluIGVhY2ggZnVubmVsIHJlcGVhdCBlYWNoIG90aGVyLCBidXQgZWFjaCBnbG9iZSAKY29udGFpbnMgZm91ciBzbWFsbGVyIHNwaGVyZXMgc2hvd2luZyB0aHJlZSB2YXJpZXRpZXMgb2YgZm9ybXMuIApUaGUgdHdvIG1hcmtlZCBeLCB3aGljaCBhcmUgcmVwZWF0ZWQgaW4gdGhlIGNlbnRyYWwgZ2xvYmUgYXMgaCwgCmFyZSBzZXZlbi1hdG9tZWQsIGFuZCBhcHBlYXIgYXMgc3BoZXJlcyBvciBvdm9pZHMgYWNjb3JkaW5nIHRvIApwcmVzc3VyZS4gVGhleSBhcmUgZmlndXJlZCBvbiBwLiA0OCwgdW5kZXIgaW9kaW5lIDsgYyBhbmQgL2FyZSAKcmVsYXRlZCBhcyBvYmplY3QgYW5kIGltYWdlLCBhbmQgd2UgaGF2ZSBhbHJlYWR5IHNlZW4gdGhlbSBpbiAKY29wcGVyIChwcC4gMzggYW5kIDQ4KSA7IGluIGVhY2ggY2FzZSwgYXMgaW4gY29wcGVyLCB0aGV5IHVuaXRlIAppbnRvIGEgdGVuLWF0b21lZCBmaWd1cmUgOyBvbiB0aGUgbWV0YSBsZXZlbCB0aGUgcGFpciBvZiBmb3VycyAKZm9ybSBhIHJpbmcsIGFuZCB0aGUgcmVtYWluaW5nIHR3byBhdG9tcyBmb3JtIGEgZHVhZCA7IC8sIAp3aGljaCByZXBlYXRzIC8sIG1ha2VzIGEgcmluZyB3aXRoIHRoZSBmaWZ0aCBpbiB0aGUgY2VudHJlLCBhcyBpbiAKdGhlIGZpdmUtYXRvbWVkIDYgb2YgY2FsY2l1bSwgYXMgc2hvd24gYWJvdmUuIFRoZXJlIGlzLCB0aHVzLCAKbm90aGluZyBuZXcgaW4gc3Ryb250aXVtLCBidXQgb25seSByZXBldGl0aW9ucyBvZiBmb3JtcyBhbHJlYWR5IApzdHVkaWVkLiAKCk94eWdlbiAoUGxhdGUgVklJSSwgNCkuIAoKVGhlIGRpc2ludGVncmF0aW9uIG9mIG94eWdlbiBhcyBnaXZlbiBpbiAxODk1IG1heSBiZSByZXBlYXRlZCAKaGVyZSwgYW5kIHRoZSBiZXR0ZXIgcHJlc2VudGF0aW9uIGdpdmVuIG9uIHAuIDU0IHJlbmRlcnMgaXQgZWFzaWVyIAp0byBmb2xsb3cgdGhlIHByb2Nlc3MuIE9uIHRoZSBwcm90byBsZXZlbCB0aGUgdHdvICJzbmFrZXMiIApkaXZpZGUgOyB0aGUgYnJpbGxpYW50IGRpc2tzIGFyZSBzZXZlbi1hdG9tZWQsIGJ1dCBhcmUgZGlmZmVyZW50bHkgCmFycmFuZ2VkLCB0aGUgcG9zaXRpdmUgc25ha2UgaGF2aW5nIHRoZSBhdG9tcyBhcnJhbmdlZCBhcyBpbiB0aGUgCmlvZGluZSBvdm9pZHMsIHdoZXJlYXMgdGhlIG5lZ2F0aXZlIHNuYWtlIGhhcyB0aGVtIGFycmFuZ2VkIGFzIAppbiBhIGNhcGl0YWwgSC4gVGhlIHNuYWtlcyBzaG93IHRoZSBzYW1lIGV4dHJhb3JkaW5hcnkgYWN0aXZpdHkgCm9uIHRoZSBwcm90byBsZXZlbCBhcyBvbiB0aGUgZ2FzZW91cywgdHdpc3RpbmcgYW5kIHdyaXRoaW5nLCAKZGFydGluZyBhbmQgY29pbGluZy4gVGhlIGJvZHkgb2YgdGhlIHNuYWtlIGlzIG9mIHR3by1hdG9tZWQgCmJlYWRzLCBwb3NpdGl2ZSBhbmQgbmVnYXRpdmUuIE9uIHRoZSBtZXRhIGxldmVsIHRoZSBzbmFrZXMgYnJlYWsgCmludG8gdGVuIGZyYWdtZW50cywgZWFjaCBjb25zaXN0aW5nIG9mIGEgZGlzaywgd2l0aCBzaXggYmVhZHMgb24gCm9uZSBzaWRlIGFuZCBmaXZlIG9uIHRoZSBvdGhlciwgcmVtYWluaW5nIGFzIGxpdmVseSBhcyB0aGUgb3JpZ2luYWwgCnNuYWtlLiBUaGV5IHNoaXZlciBpbnRvIHRoZWlyIGNvbnN0aXR1ZW50IGRpc2tzLCBhbmQgYmVhZHMgb24gCnRoZSBoeXBlciBsZXZlbCwgdGhlcmUgeWllbGRpbmcgdGhlIHRlbiBkaXNrcywgZml2ZSBwb3NpdGl2ZSBhbmQgCmZpdmUgbmVnYXRpdmUsIGFuZCB0aGUgbm8gYmVhZHMsIGZpZnR5LWZpdmUgcG9zaXRpdmUgYW5kIGZpZnR5LWZpdmUgCm5lZ2F0aXZlLiAKCgo2MiAKCgpDaHJvbWl1bSAoUGxhdGUgVklJSSwgNSkuIAoKV2hlbiB3ZSBnbyBvbiB0byBjaHJvbWl1bSBhbmQgbW9seWJkZW51bSwgd2UgcmV0dXJuIAp0byBvdXIgZmFtaUhhciBmdW5uZWxzIGFuZCBjZW50cmFsIGdsb2JlcywgYW5kIHRoZSBzZWNvbmRhcnkgCnNwaGVyZXMgd2l0aGluIHRoZSBmdW5uZWxzIOKAlCBxdWlja2x5IHNldCBmcmVlLCBhcyBiZWZvcmUsIG9uIHRoZSAKcHJvdG8gbGV2ZWwg4oCUIGdpdmUgdXMgbm8gbmV3IGNvbWJpbmF0aW9ucyBpbiB0aGVpciBjb250YWluZWQgCnNwaGVyZXMgYW5kIG92b2lkcy4gVGhlIGEgb2YgYmVyeWxsaXVtLCB0aGUgYiBvZiBjYWxjaXVtIGFuZCAKc3Ryb250aXVtLCBhbmQgZCBvZiBjYWxjaXVtLCB0aGUgZSBhbmQgLyBvZiBzdHJvbnRpdW0sIGFyZSBhbGwgCnRoZXJlIDsgaiBpbiBjaHJvbWl1bSBpcyB0aGUgc2FtZSBhcyB0aGUgY2VudHJhbCBzcGhlcmUgaW4gdGhlIGIgCm92b2lkLiBJbiB0aGUgY2VudHJhbCBnbG9iZSwgaywgaXMgYSBwYWlyIG9mIHRyaWFuZ2xlcyBhcyBpbiBoeWRyb2dlbiwgCmNvbnNpc3Rpbmcgb2Ygb25seSBzaXggYXRvbXMsIHdoaWNoIG9uIHRoZSBtZXRhIGxldmVsIHJldm9sdmUgCnJvdW5kIGVhY2ggb3RoZXIsIGFuZCBicmVhayB1cCBpbnRvIHR3byBkdWFkcyBhbmQgdHdvIHVuaXRzIG9uIAp0aGUgaHlwZXIuIAoKCsKpQMKpQCAoUykgQEBAwqlpIAoKCl4wMF4wICheIDAgMDAgMCcgCgoKTW9seWJkZW51bSAoUGxhdGUgVklJSSwgNikuIAoKTW9seWJkZW51bSBwcmVzZW50cyB1cyB3aXRoIG9ubHkgdHdvIG5ldyBmb3JtcywgYW5kIAp0aGVzZSBhcmUgbWVyZWx5IGZvdXItYXRvbWVkIHRldHJhaGVkcmEsIG9jY3VycmluZyBpbiBwYWlycyBhcyAKb2JqZWN0IGFuZCBpbWFnZS4gQWxsIHRoZSBvdGhlciBib2RpZXMgaGF2ZSBhbHJlYWR5IGJlZW4gCmFuYWx5c2VkLiAKCklJIGEuIOKAlCBXZSBjb21lIG5vdyB0byB0aGUgc2Vjb25kIGdyZWF0IHRldHJhaGVkcmFsIGdyb3VwLCAKd2hpY2ggdGhvdWdoIHZlcnkgbXVjaCBjb21wbGljYXRlZCwgaXMgeWV0LCBmb3IgdGhlIG1vc3QgcGFydCwgYSAKcmVwZXRpdGlvbiBvZiBmYW1pbGlhciBmb3Jtcy4gCgoKNjMgCgpNYWduZXNpdW0gKFBsYXRlIElYLCBpKS4gCgpXZSBhcmUgc3RpbGwgYW1vbmcgdGV0cmFoZWRyYSwgc28gaGF2ZSB0byBkbyB3aXRoIGZvdXIgCmZ1bm5lbHMsIGJ1dCBlYWNoIGZ1bm5lbCBjb250YWlucyB0aHJlZSByaW5ncywgYW5kIGVhY2ggcmluZyAKdGhyZWUgb3ZvaWRzIDsgb24gdGhlIHByb3RvIGxldmVsIGEgdHJpcGxlIGRpc3NvY2lhdGlvbiB0YWtlcyBwbGFjZSwgCmZvciB0aGUgZnVubmVscyBsZXQgZnJlZSB0aGUgcmluZ3MgYXMgbGFyZ2Ugc3BoZXJlcywgaW4gZWFjaCBvZiAKd2hpY2ggcm90YXRlIHRocmVlIHR3ZWx2ZS1hdG9tZWQgb3ZvaWRzLCBhbmQgdGhlbiB0aGUgb3ZvaWRzIApicmVhayBsb29zZSBmcm9tIHRoZSBzcGhlcmVzLCBhbmQgdGhlbXNlbHZlcyBiZWNvbWUgc3BoZXJpY2FsLCAKc28gdGhhdCB3ZSBoYXZlIGZpbmFsbHkgdGhpcnR5LXNpeCBwcm90byBjb21wb3VuZHMgZnJvbSB0aGUgCnRldHJhaGVkcm9uLiBPbiB0aGUgbWV0YSBsZXZlbCB0aGUgY29udGFpbmVkIGJvZGllcywgYSB0cmlwbGV0LCAKTWcgYSwgYSBzZXB0ZXQsIE1nIGIsIGFuZCBhIGR1YWQsIE1nIGMsIGFyZSBzZXQgZnJlZSBmcm9tIGVhY2ggCmdsb2JlLCB0aHVzIHlpZWxkaW5nIG9uZSBodW5kcmVkIGFuZCBlaWdodCBtZXRhIGNvbXBvdW5kcy4gCk9uIHRoZSBoeXBlciBsZXZlbCB0aGUgdHJpcGxldCBiZWNvbWVzIGEgZHVhZCBhbmQgYSB1bml0IDsgdGhlIApkdWFkIGJlY29tZXMgdHdvIHVuaXRzIDsgYW5kIHRoZSBzZXB0ZXQgYSB0cmlwbGV0IGFuZCBhIHF1YXJ0ZXQuIAoKClppbmMgKFBsYXRlIElYLCAyKS4gCgpXZSBjYW4gbGVhdmUgYXNpZGUgdGhlIGZ1bm5lbCwgZm9yIHRoZSBvbmx5IGRpZmZlcmVuY2UgYmV0d2VlbiAKaXQgYW5kIHRoZSBtYWduZXNpdW0gZnVubmVsIGlzIHRoZSBzdWJzdGl0dXRpb24gb2YgYSBzZWNvbmQgCnNlcHRldCBmb3IgdGhlIHRyaXBsZXQsIGFuZCB0aGUgc2VwdGV0IGlzIGFscmVhZHkgc2hvd24gaW4gdGhlIAptYWduZXNpdW0gZGlhZ3JhbS4gV2UgaGF2ZSwgdGhlcmVmb3JlLCBvbmx5IHRvIGNvbnNpZGVyIHRoZSAKc3Bpa2VzLCBwb2ludGluZyB0byB0aGUgYW5nbGVzIG9mIHRoZSBlbmNsb3NpbmcgdGV0cmFoZWRyb24sIGFuZCAKdGhlIGNlbnRyYWwgZ2xvYmUuIFRoZXNlIGFyZSBzZXQgZnJlZSBvbiB0aGUgcHJvdG8gbGV2ZWwgYW5kIHRoZSAKc3Bpa2VzIGltbWVkaWF0ZWx5IHJlbGVhc2UgdGhlaXIgY29udGVudHMsIHlpZWxkaW5nIHRodXMgdGhpcnR5LXR3byAKc2VwYXJhdGUgYm9kaWVzLiAKCgo2NCAKClRoZSB0cmlhbmd1bGFyIGFycmFuZ2VtZW50IGF0IHRoZSB0b3Agb2YgdGhlIHNwaWtlIGlzIHRoZSBzYW1lIAphcyBvY2N1cnMgaW4gY29wcGVyICg2IG9uIHAuIDQ4KSwgYW5kIGNhbiBiZSB0aGVyZSBmb2xsb3dlZC4gT25lIApvZiB0aGUgdGhyZWUgc2ltaWxhciBwaWxsYXJzIGlzIHNob3duIGluIHRoZSBhY2NvbXBhbnlpbmcgCmRpYWdyYW0gdW5kZXIgWm4gYS4gVGhlIGNvbXByZXNzZWQgbG9uZyBvdmFsIGJlY29tZXMgYSAKZ2xvYmUsIHdpdGggc2l4IGJvZGllcyByZXZvbHZpbmcgd2l0aGluIGl0IGluIGEgcmF0aGVyIHBlY3VsaWFyIAp3YXkgOiB0aGUgcXVhcnRldHMgdHVybiByb3VuZCBlYWNoIG90aGVyIGluIHRoZSBtaWRkbGUgOyB0aGUgCnRyaXBsZXRzIHJldm9sdmUgcm91bmQgdGhlbSBpbiBhIHNsYW50aW5nIGVsbGlwc2UgOyB0aGUgZHVhZHMgZG8gCnRoZSBzYW1lIG9uIGFuIGVsbGlwc2Ugc2xhbnRpbmcgYXQgYW4gYW5nbGUgd2l0aCB0aGUgZmlyc3QsIHNvbWUtIAp3aGF0IGFzIGluIGdvbGQgKGEgYW5kIGIsIHAuIDQwKS4gVGhlIHNwaGVyZXMgd2F0aGluIHRoZSAKZ2xvYmVzIGF0IHRoZSBiYXNlIG9mIHRoZSBzcGlrZXMsIFpuIGIsIGJlaGF2ZSBhcyBhIGNyb3NzIOKAlCB0aGUgCmNyb3NzIGlzIGEgZmF2b3VyaXRlIGRldmljZSBpbiB0aGUgSUkgYSBncm91cHMuIEZpbmFsbHksIHRoZSAKY2VudHJhbCBnbG9iZSwgWm4gZSwgZm9sbG93cyB0aGUgc2FtZSBjcnVjaWZvcm0gbGluZSBvZiBkaXMtIAppbnRlZ3JhdGlvbi4gCgoKQ2FkbWl1bSAoUGxhdGUgSVgsIDMpLiAKCkNhZG1pdW0gZm9sbG93cyB2ZXJ5IGNsb3NlbHkgb24gdGhlIGxpbmVzIG9mIHppbmMgOyB0aGUgcGlsbGFycyAKb2YgdGhlIHppbmMgc3Bpa2UgYXJlIHJlcHJvZHVjZWQgaW4gdGhlIHJpbmdzIG9mIHRoZSBjYWRtaXVtIApmdW5uZWwgOyB0aGUgZ2xvYmVzIGFyZSBhbHNvIHRoZSBnbG9iZXMgb2YgY2FkbWl1bSA7IHNvIG5laXRoZXIgCm9mIHRoZXNlIG5lZWRzIGF0dGVudGlvbi4gV2UgaGF2ZSBvbmx5IHRvIGNvbnNpZGVyIHRoZSB0aHJlZSAKdGVuLWF0b21lZCBvdm9pZHMsIHdoaWNoIGFyZSBzdWJzdGl0dXRlZCBmb3IgdGhlIG9uZSB0ZW4tYXRvbWVkIAp0cmlhbmdsZSBvZiB6aW5jLCBhbmQgdGhlIGNlbnRyYWwgY3Jvc3MuIFRoZSBvdm9pZHMgYmVjb21lIApzcGhlcmVzIChDZCBhLCBiKSwgdGhlIGNvbnRhaW5lZCBib2RpZXMgcmV2b2x2aW5nIHdpdGhpbiB0aGVtLCAKYSB3aGlybGluZyBvbiBhIGRpYW1ldGVyIG9mIHRoZSBzcGhlcmUsIGN1dHRpbmcgaXQgaW4gaGFsdmVzLCAKYXMgaXQgd2VyZSwgYW5kIGIgd2hpcmxpbmcgcm91bmQgaXQgYXQgcmlnaHQgYW5nbGVzIDsgdGhlIGNyb3NzIAoKCmFsc28gYmVjb21lcyBhIHNwaGVyZSAoQ2QgYyksIGJ1dCB0aGUgY3J1Y2lmb3JtIHR5cGUgaXMgbWFpbi0gCnRhaW5lZCB3aXRoaW4gaXQgYnkgdGhlIHJlbGF0aXZlIHBvc2l0aW9ucyBvZiB0aGUgY29udGFpbmVkIApzcGhlcmVzIGluIHRoZWlyIHJldm9sdXRpb24uIFRoZSBzdWJzZXF1ZW50IHN0YWdlcyBhcmUgc2hvd24gCmluIHRoZSBkaWFncmFtLiAKClN1bHBodXIgKFBsYXRlIFhJLCBpKS4gCgpTdWxwaHVyIGhhcyBub3RoaW5nIG5ldywgYnV0IHNob3dzIG9ubHkgdGhlIGZ1bm5lbHMgYWxyZWFkeSAKZmlndXJlZCBpbiBtYWduZXNpdW0sIHdpdGggdGhlIHN1YnN0aXR1dGlvbiBvZiBhIHNlY29uZCBzZXB0ZXQgCmZvciB0aGUgdHJpcGxldCwgYXMgaW4gemluYy4gCgpTZWxlbml1bSAoUGxhdGUgWCwgMikuIAoKVGhlIGZ1bm5lbCBvZiBzZWxlbml1bSBpcyBhIHJlLWFycmFuZ2VtZW50IG9mIHRoZSB0d2VsdmUtIAphdG9tZWQgb3ZvaWRzIG9mIG1hZ25lc2l1bSBhbmQgdGhlIHRlbi1hdG9tZWQgb3ZvaWRzIG9mIApjYWRtaXVtLiBUaGUgZnVubmVscywgb24gZGlzaW50ZWdyYXRpbmcsIHNldCBmcmVlIHR3ZWx2ZSAKCgppIE9mIFRLITE4UyBNPC7Cq3QgT1cqIMK7P2dnP0sgCgoKY2lucm50bz8gU1RBYSAKCgplIMK7ZiBJTVTCuyAwwrsgSlQmQiAKCgpncm91cHMsIGVhY2ggY29udGFpbmluZyBuaW5lIHNwaGVyZXMuIE9uIHRoZSBtZXRhIGxldmVsIHRoZSAKdGVuLWF0b21lZCBib2RpZXMgYXJlIHNldCBmcmVlLCBhbmQgdGhlIHR3XmVsdmUtYXRvbWVkIGRpdmlkZSBpbnRvIApkdWFkcyBhbmQgZGVjYWRzLCB0aHVzIHlpZWxkaW5nIHNldmVudHktdHdvIGRlY2FkcyBhbmQgdGhpcnR5LSAKc2l4IGR1YWRzIDsgdGhlIGR1YWRzLCBob3dldmVyLCBhdCBvbmNlIHJlY29tYmluZSBpbnRvIGhleGFkcywgCnRodXMgZ2l2aW5nIG9ubHkgdHdlbHZlIG1ldGEgZWxlbWVudHMsIG9yIGVpZ2h0eS1mb3VyIGluIGFsbCAKZnJvbSB0aGUgZnVubmVscy4gVGhlIGNlbnRyYWwgZ2xvYmUgaG9sZHMgdG9nZXRoZXIgb24gdGhlIApwcm90byBsZXZlbCwgYnV0IHlpZWxkcyBmaXZlIG1ldGEgZWxlbWVudHMuIFRoZSBzdGFyIGFsc28gCmF0IGZpcnN0IHJlbWFpbnMgYSB1bml0IG9uIHRoZSBwcm90byBsZXZlbCwgYW5kIHRoZW4gc2hvb3RzIApvZmYgaW50byBzZXZlbiBib2RpZXMsIHRoZSBjZW50cmUga2VlcGluZyB0b2dldGhlciwgYW5kIHRoZSAKCjUgCgoKc2l4IHBvaW50cyBiZWNvbWluZyBzcGhlcmVzLCB3aXRoaW4gd2hpY2ggdGhlIHR3byBjb25lcywgCmJhc2UgdG8gYmFzZSwgd2hpcmwgaW4gdGhlIGNlbnRyZSwgYW5kIHRoZSBnbG9iZXMgY2lyY2xlIHJvdW5kIAp0aGVtLiBPbiB0aGUgbWV0YSBsZXZlbCBhbGwgdGhlIHRoaXJ0eSBib2RpZXMgY29udGFpbmVkIGluIAp0aGUgc3RhciBzZXBhcmF0ZSBmcm9tIGVhY2ggb3RoZXIsIGFuZCBnbyBvbiB0aGVpciBpbmRlcGVuZGVudCAKd2F5cy4gCgpTZWxlbml1bSBvZmZlcnMgYSBiZWF1dGlmdWwgZXhhbXBsZSBvZiB0aGUgY29tYmluYXRpb24gb2YgCnNpbXBsZSBlbGVtZW50cyBpbnRvIGEgbW9zdCBleHF1aXNpdGUgd2hvbGUuIAoKVGVsbHVyaXVtIChQbGF0ZSBYLCAzKS4gCgpUZWxsdXJpdW0gdmVyeSBjbG9zZWx5IHJlc2VtYmxlcyBjYWRtaXVtLCBhbmQgdGhleSBhcmUsIAp0aGVyZWZvcmUgcGxhY2VkIG9uIHRoZSBzYW1lIGRpYWdyYW0uIFRoZSBwaWxsYXJzIGFyZSB0aGUgc2FtZSAKYXMgaW4gY2hsb3JpbmUgYW5kIGl0cyBjb25nZW5lcnMsIHdpdGggYSBkdWFkIGFkZGVkIGF0IHRoZSBiYXNlLiAKVGhlIHRlbi1hdG9tZWQgb3ZvaWQgaXMgdGhlIHNhbWUgYXMgaW4gY2FkbWl1bSBhbmQgZm9sbG93cyAKdGhlIHNhbWUgY291cnNlIGluIGJyZWFraW5nIHVwLiBJdCB3b3VsZCBiZSBpbnRlcmVzdGluZyB0byAKa25vdyB3aHkgdGhpcyBkdWFkIHJlbWFpbnMgYXMgYSBkdWFkIGluIHNlbGVuaXVtIGFuZCBicmVha3MgCnVwIGludG8gYSBzZXB0YWQgYW5kIHRyaWFkIGluIHRoZSBvdGhlciBtZW1iZXJzIG9mIHRoZSBncm91cC4gCkl0IG1heSBiZSBkdWUgdG8gdGhlIGdyZWF0ZXIgcHJlc3N1cmUgdG8gd2hpY2ggaXQgaXMgc3ViamVjdGVkIGluIApzZWxlbml1bSwgb3IgdGhlcmUgbWF5IGJlIHNvbWUgb3RoZXIgcmVhc29uLiBUaGUgY3Jvc3MgaW4gCnRlbGx1cml1bSBpcyBpZGVudGljYWwgd2l0aCB0aGF0IGluIGNhZG1pdW0sIGV4Y2VwdCB0aGF0IHRoZSAKY2VudHJlIGlzIHNldmVuLWF0b21lZCBpbnN0ZWFkIG9mIGZvdXItYXRvbWVkLiAKClZJLiAKCklsbCBBTkQgSWxpYS4g4oCUIFRoZSBDdWJlIEdyb3Vwcy4gCgpXZSBoYXZlIGhlcmUgZm91ciBncm91cHMgdG8gY29uc2lkZXIsIGFsbCB0aGUgbWVtYmVycyBvZiAKd2hpY2ggYXJlIHRyaWFkcywgYW5kIGhhdmUgc2l4IGZ1bm5lbHMsIG9wZW5pbmcgb24gdGhlIHNpeCBmYWNlcyAKb2YgYSBjdWJlLiAKCklJSS4g4oCUIEJvcm9uLCBzY2FuZGl1bSBhbmQgeXR0cml1bSB3ZXJlIGV4YW1pbmVkIDsgdGhleSBhcmUgCmFsbCB0cmlhdG9taWMsIHBhcmFtYWduZXRpYywgYW5kIHBvc2l0aXZlLiBUaGUgY29ycmVzcG9uZGluZyAKZ3JvdXAgY29uc2lzdHMgb2Ygbml0cm9nZW4sIHZhbmFkaXVtIGFuZCBuaW9iaXVtIDsgdGhleSBhcmUgCnRyaWF0b21pYywgcGFyYW1hZ25ldGljLCBhbmQgbmVnYXRpdmUuIFdlIGhhdmUgbm90IGV4YW1pbmVkIAp0aGUgcmVtYWluaW5nIG1lbWJlcnMgb2YgdGhlc2UgZ3JvdXBzLiBJbiB0aGVzZSB0d28gZ3JvdXBzIApuaXRyb2dlbiBkb21pbmF0ZXMsIGFuZCBpbiBvcmRlciB0byBtYWtlIHRoZSBjb21wYXJpc29uIGVhc3kgCnRoZSBuaXRyb2dlbiBlbGVtZW50cyBhcmUgZmlndXJlZCBvbiBib3RoIFBsYXRlIFhJIGFuZCBQbGF0ZSBYSUkgLiAKSXQgd2lsbCBiZSBzZWVuIHRoYXQgc2NhbmRpdW0gYW5kIHl0dHJpdW0sIG9mIHRoZSBwb3NpdGl2ZSBncm91cCwgCmRpZmZlciBvbmx5IGluIGRldGFpbHMgZnJvbSB2YW5hZGl1bSBhbmQgbmlvYml1bSwgb2YgdGhlIG5lZ2F0aXZlIApncm91cCA7IHRoZSBncm91bmQtcGxhbiBvbiB3aGljaCB0aGV5IGFyZSBidWlsdCBpcyB0aGUgc2FtZS4gCldlIG5vdGVkIGEgc2ltaWxhciBjbG9zZSByZXNlbWJsYW5jZSBiZXR3ZWVuIHRoZSBwb3NpdGl2ZSAKc3Ryb250aXVtIGFuZCB0aGUgbmVnYXRpdmUgbW9seWJkZW51bS4gCgoKNjcgCgpCb3JvbiAoUGxhdGUgSUlJLCA0LCBhbmQgUGxhdGUgWEksIGkpLiBXZSBoYXZlIGhlcmUgdGhlIApzaW1wbGVzdCBmb3JtIG9mIHRoZSBjdWJlIDsgdGhlIGZ1bm5lbHMgY29udGFpbiBvbmx5IGZpdmUgYm9kaWVzIArigJQgZm91ciBzaXgtYXRvbWVkIG92b2lkcyBhbmQgb25lIHNpeC1hdG9tZWQgIiBjaWdhci4iIFRoZSAKY2VudHJhbCBnbG9iZSBoYXMgYnV0IGZvdXIgZml2ZS1hdG9tZWQgc3BoZXJlcy4gSXQgaXMgYXMgc2ltcGxlIAppbiByZWxhdGlvbiB0byBpdHMgY29uZ2VuZXJzIGFzIGlzIGJlcnlsbGl1bSB0byBpdHMgZ3JvdXAtbWVtYmVycy4gCgpCb3JvbiA6IDYgZnVubmVscyBvZiAzMCBhdG9tcyAuLi4gLi4uIDE4MCAKCkNlbnRyYWwgZ2xvYmUgLi4uIC4uLiAuLi4gMjAgCgpUb3RhbCAuLi4gCgoKQXRvbWljIHdlaWdodC4uLiAKTnVtYmVyIHdlaWdodCBeXl4gCgoKMjAwIAoKMTAtODYgCmlpJ2lpIAoKClNjYW5kaXVtIChQbGF0ZSBYSSwgMikuIEZvciB0aGUgZmlyc3QgdGltZSB3ZSBtZWV0IGZ1bm5lbHMgCm9mIGRpZmZlcmVudCB0eXBlcywgQSBhbmQgQiwgdGhyZWUgb2YgZWFjaCBraW5kIDsgQSBhcHBlYXIgCnRvIGJlIHBvc2l0aXZlIGFuZCBCIG5lZ2F0aXZlLCBidXQgdGhpcyBtdXN0IGJlIHN0YXRlZCB3aXRoIApyZXNlcnZlLiAKCkluIEEgdGhlIGJvcm9uIGZ1bm5lbCBpcyByZXByb2R1Y2VkLCB0aGUgImNpZ2FyIiBoYXZpbmcgCnJpc2VuIGFib3ZlIGl0cyBjb21wYW5pb24gb3ZvaWRzIDsgYnV0IHRoZSBtb3N0IGltcG9ydGFudCAKbWF0dGVyIHRvIG5vdGUgaW4gcmVzcGVjdCB0byB0aGlzIGZ1bm5lbCBpcyBvdXIgaW50cm9kdWN0aW9uIHRvIHRoZSAKYm9keSBtYXJrZWQgYSBuby4gVGhpcyBib2R5IHdhcyBvYnNlcnZlZCBieSB1cyBmaXJzdCBpbiAKbml0cm9nZW4sIGluIDE4OTUsIGFuZCB3ZSBnYXZlIGl0IHRoZSBuYW1lIG9mIHRoZSAibml0cm9nZW4gCmJhbGxvb24sIiBmb3IgaW4gbml0cm9nZW4gaXQgdGFrZXMgdGhlIGJhbGxvb24gZm9ybSwgd2hpY2ggaXQgYWxzbyAKb2Z0ZW4gYXNzdW1lcyBpbiBvdGhlciBnYXNlb3VzIGVsZW1lbnRzLiBIZXJlIGl0IGFwcGVhcnMgYXMgYSAKc3BoZXJlIOKAlCB0aGUgZm9ybSBhbHdheXMgYXNzdW1lZCBvbiB0aGUgcHJvdG8gbGV2ZWwg4oCUIGFuZCBpdCB3aWxsIApiZSBzZWVuLCBvbiByZWZlcmVuY2UgdG8gdGhlIGRldGFpbGVkIGRpYWdyYW0gNCBhLCB0byBiZSBhIGNvbS0gCnBsaWNhdGVkIGJvZHksIGNvbnNpc3Rpbmcgb2Ygc2l4IGZvdXJ0ZWVuLWF0b21lZCBnbG9iZXMgYXJyYW5nZWQgCnJvdW5kIGEgbG9uZyBvdm9pZCBjb250YWluaW5nIHNwaGVyZXMgd2l0aCB0aHJlZSwgZm91ciwgc2l4LCBzaXgsIApmb3VyLCB0aHJlZSwgYXRvbXMgcmVzcGVjdGl2ZWx5LiBJdCB3aWxsIGJlIG9ic2VydmVkIHRoYXQgdGhpcyAKYmFsbG9vbiBhcHBlYXJzIGluIGV2ZXJ5IG1lbWJlciBvZiB0aGVzZSB0d28gZ3JvdXBzLCBleGNlcHQgCmJvcm9uLiAKClRoZSBCIGZ1bm5lbCBydW5zIGxhcmdlbHkgdG8gdHJpYWRzLCBjIGFuZCBiLCBiIChzZWUgNCBiKSBoYXZpbmcgCm5vdCBvbmx5IGEgdHJpYWRpYyBhcnJhbmdlbWVudCBvZiBzcGhlcmVzIHdpdGhpbiBpdHMgY29udGFpbmVkIApnbG9iZXMsIGJ1dCBlYWNoIHNwaGVyZSBoYXMgYWxzbyBhIHRyaXBsZXQgb2YgYXRvbXMuIEluIGMgKHNlZSA0IGMpIAp0aGVyZSBpcyBhIHRyaWFkaWMgYXJyYW5nZW1lbnQgb2Ygc3BoZXJlcywgYnV0IGVhY2ggY29udGFpbnMgCmR1YWRzLiBCIGlzIGNvbXBsZXRlZCBieSBhIGZpdmUtYXRvbWVkIHNwaGVyZSBhdCB0aGUgdG9wIG9mIHRoZSAKZnVubmVsLiBJdCBzaG91bGQgYmUgbm90ZWQgdGhhdCBhLCBiIGFuZCBjIGFsbCBhcmUgY29uc3RpdHVlbnRzIG9mIApuaXRyb2dlbi4gCgpUaGUgY2VudHJhbCBnbG9iZSByZXBlYXRzIHRoYXQgb2YgYm9yb24sIHdpdGggYW4gYWRkaXRpb25hbCAKZm91ci1hdG9tZWQgc3BoZXJlIGluIHRoZSBtaWRkbGUuIAoKCjY4IAoKClNjYW5kaXVtIDogMyBmdW5uZWxzIChBKSBvZiAxNDAgYXRvbXMgCjMg4oCeIChCKSBvZiAxMTYg4oCeIApDZW50cmUgZ2xvYmUgCgoKVG90YWwgCgoKQXRvbWljIHdlaWdodCAKTnVtYmVyIHdlaWdodCBcJTIgCgoKNDIwIAoKMzQ4IAoyNCAKCjc5MiAKCjQzNzggCjQ0J29vIAoKClBsYXRlIFhJLiAKCgpTb3JvaWkgCgoKWWNabl5paV55bnggCgoKMyAoJT9sXiAKCgo2OSAKCll0dHJpdW0gKFBsYXRlIFhJLCAzKS4gSGVyZSB3ZSBoYXZlIGEgcXVpdGUgbmV3IGFycmFuZ2UtIAptZW50IG9mIGJvZGllcyB3aXRoaW4gdGhlIGZ1bm5lbCDigJQgdGhlIGZ1bm5lbCBiZWluZyBvZiBvbmUgdHlwZSAKb25seS4gVHdvICJjaWdhcnMiIHdoaXJsIG9uIHRoZWlyIG93biBheGVzIGluIHRoZSBjZW50cmUgbmVhciAKdGhlIHRvcCwgd2hpbGUgZm91ciBlaWdodC1hdG9tZWQgZ2xvYmVzIChzZWUgNCBlKSBjaGFzZSBlYWNoIApvdGhlciBpbiBhIGNpcmNsZSByb3VuZCB0aGVtLCBzcGlubmluZyBtYWRseSBvbiB0aGVpciBvd24gYXhlcyAK4oCUIHRoaXMgYXhpYWwgc3Bpbm5pbmcgc2VlbXMgY29uc3RhbnQgaW4gYWxsIGNvbnRhaW5lZCBib2RpZXMg4oCUIGFsbCAKdGhlIHRpbWUuIExvd2VyIGRvd24gaW4gdGhlIGZ1bm5lbCwgYSBzaW1pbGFyIGFycmFuZ2VtZW50IGlzIApzZWVuLCB3aXRoIGEgZ2xvYmUgKHNlZSA0IGQpIOKAlCBhIG5pdHJvZ2VuIGVsZW1lbnQg4oCUIHJlcGxhY2luZyB0aGUgCiIgY2lnYXJzLCIgYW5kIHNpeC1hdG9tZWQgb3ZvaWRzIHJlcGxhY2luZyB0aGUgZ2xvYmVzLiAKClRoZSAiIG5pdHJvZ2VuIGJhbGxvb24gIiBvY2N1cGllcyB0aGUgdGhpcmQgcGxhY2UgaW4gdGhlIGZ1bm5lbCwgCm5vdyBzaG93aW5nIGl0cyB1c3VhbCBzaGFwZSBpbiBjb21iaW5hdGlvbiwgd2hpbGUgdGhlIGIgZ2xvYmUgCihzZWUgNCBiKSBvZiBzY2FuZGl1bSB0YWtlcyBvbiBhIGxlbmd0aGVuZWQgZm9ybSBiZWxvdyBpdC4gCgpUaGUgY2VudHJhbCBnbG9iZSBwcmVzZW50cyB1cyB3aXRoIHR3byB0ZXRyYWhlZHJhLCByZWNhbGxpbmcgCm9uZSBvZiB0aGUgY29tYmluYXRpb25zIGluIGdvbGQgKHNlZSBQbGF0ZSBWSUkgZCwgcC4gNDApLCBhbmQgCmRpZmZlcmluZyBmcm9tIHRoYXQgb25seSBieSB0aGUgc3Vic3RpdHV0aW9uIG9mIHR3byBxdWFydGV0cyBmb3IgCnRoZSB0d28gdHJpcGxldHMgaW4gZ29sZC4gCgpPbmUgZnVubmVsIG9mIHl0dHJpdW0gY29udGFpbnMgZXhhY3RseSB0aGUgc2FtZSBudW1iZXIgb2YgCmF0b21zIGFzIGlzIGNvbnRhaW5lZCBpbiBhIGdhc2VvdXMgYXRvbSBvZiBuaXRyb2dlbi4gRnVydGhlciwgCmEsIGIsIGFuZCBkIGFyZSBhbGwgbml0cm9nZW4gZWxlbWVudHMuIFdlIHB1dCBvbiByZWNvcmQgdGhlc2UgCmZhY3RzLCB3aXRob3V0IHRyeWluZyB0byBkcmF3IGFueSBjb25jbHVzaW9ucyBmcm9tIHRoZW0uIFNvbWUgCmRheSwgd2Ug4oCUIG9yIG90aGVycyDigJQgbWF5IGZpbmQgb3V0IHRoZWlyIHNpZ25pZmljYW5jZSwgYW5kIHRyYWNlIAp0aHJvdWdoIHRoZW0gb2JzY3VyZSByZWxhdGlvbnMuIAoKWXR0cml1bSA6IDYgZnVubmVscyBvZiAyNjEgYXRvbXMgLi4uIDE1NjYgCgpDZW50cmFsIGdsb2JlIC4uLiAuLi4gNDAgCgpUb3RhbCAuLi4gMTYwNiAKCkF0b21pYyB3ZWlnaHQgLi4uIC4uLiA4OCozNCAKCk51bWJlciB3ZWlnaHQgPy18fF4gLi4uIDg5KjIyIAoKVGhlIGNvcnJlc3BvbmRpbmcgbmVnYXRpdmUgZ3JvdXAsIG9mIG5pdHJvZ2VuLCB2YW5hZGl1bSAKYW5kIG5pb2JpdW0sIGlzIHJlbmRlcmVkIHBhcnRpY3VsYXJseSBpbnRlcmVzdGluZyBieSB0aGUgZmFjdCB0aGF0IAppdCBpcyBoZWFkZWQgYnkgbml0cm9nZW4sIHdoaWNoIOKAlCBsaWtlIHRoZSBhaXIsIG9mIHdoaWNoIGl0IGZvcm1zIApzbyBsYXJnZSBhIHBhcnQg4oCUIHBlcnZhZGVzIHNvIG1hbnkgb2YgdGhlIGJvZGllcyB3ZSBhcmUgc3R1ZHlpbmcuIApXaGF0IGlzIHRoZXJlIGluIG5pdHJvZ2VuIHdoaWNoIHJlbmRlcnMgaXQgc28gaW5lcnQgYXMgdG8gY29uLSAKdmVuaWVudGx5IGRpbHV0ZSB0aGUgZmllcnkgb3h5Z2VuIGFuZCBtYWtlIGl0IGJyZWF0aGFibGUsIHdoaWxlIGl0IAppcyBzbyBleHRyYW9yZGluYXJpbHkgYWN0aXZlIGluIHNvbWUgb2YgaXRzIGNvbXBvdW5kcyB0aGF0IGl0IAplbnRlcnMgaW50byB0aGUgbW9zdCBwb3dlcmZ1bCBleHBsb3NpdmVzID8gU29tZSBjaGVtaXN0IG9mIHRoZSAKZnV0dXJlLCBwZXJoYXBzLCB3aWxsIGZpbmQgdGhlIHNlY3JldCBpbiB0aGUgYXJyYW5nZW1lbnQgb2YgaXRzIApjb25zdGl0dWVudCBwYXJ0cywgd2hpY2ggd2UgYXJlIGFibGUgb25seSB0byBkZXNjcmliZS4gCgoKNzAgCgpOaXRyb2dlbiAoUGxhdGUgWElJLCBpKSBkb2VzIG5vdCBhc3N1bWUgdGhlIGN1YmljYWwgZm9ybSAKb2YgaXRzIHJlbGF0aXZlcywgYnV0IGlzIGluIHNoYXBlIGxpa2UgYW4gZWdnLiBSZWZlcnJpbmcgYWdhaW4gdG8gCm91ciAxODk1IGludmVzdGlnYXRpb25zLCBJIHF1b3RlIGZyb20gdGhlbS4gVGhlIGJhbGxvb24tc2hhcGVkIApib2R5IChzZWUgNCBhKSBmbG9hdHMgaW4gdGhlIG1pZGRsZSBvZiB0aGUgZWdnLCBjb250YWluaW5nIHNpeCAKc21hbGwgc3BoZXJlcyBpbiB0d28gaG9yaXpvbnRhbCByb3dzLCBhbmQgYSBsb25nIG92b2lkIGluIHRoZSAKbWlkc3QgOyB0aGlzIGJhbGxvb24tc2hhcGVkIGJvZHkgaXMgcG9zaXRpdmUsIGFuZCBpcyBkcmF3biBkb3duIAp0b3dhcmRzIHRoZSBuZWdhdGl2ZSBib2R5IGIgKHNlZSA0IDYpIHdpdGggaXRzIHNldmVuLWNvbnRhaW5lZCAKc3BoZXJlcywgZWFjaCBvZiB3aGljaCBoYXMgbmluZSBhdG9tcyB3aXRoaW4gaXQg4oCUIHRocmVlIHRyaWFkcy4gCkZvdXIgc3BoZXJlcyBhcmUgc2VlbiwgaW4gYWRkaXRpb24gdG8gdGhlIHR3byBsYXJnZXIgYm9kaWVzIDsgdHdvIApvZiB0aGVzZSAoc2VlIDQgZCksIGVhY2ggY29udGFpbmluZyBmaXZlIHNtYWxsZXIgZ2xvYmVzLCBhcmUgCnBvc2l0aXZlLCBhbmQgdHdvIChzZWUgNCBjKSBjb250YWluaW5nIGZvdXIgc21hbGxlciBnbG9iZXMsIGFyZSAKbmVnYXRpdmUuIAoKTml0cm9nZW46IEJhbGxvb24gLi4uIC4uLiAuLi4gbm8gCgpPdmFsIC4uLiAuLi4gLi4uIDYzIAoKMiBib2RpZXMgb2YgMjAgYXRvbXMgLi4uIDQwIAoKMiDigJ4g4oCeIDI0IOKAniAuLi4g4oCi4oCi4oCiIDQ4IAoKVG90YWwgLi4uIDI2MSAKCkF0b21pYyB3ZWlnaHQgLi4uIC4uLiBpNCdvaSAKCk51bWJlciB3ZWlnaHQgJ15eXi1eIC4uLiAuLi4gMTQqNTAgCgpWYW5hZGl1bSAoUGxhdGUgWElJLCAyKSBjbG9zZWx5IGZvbGxvd3Mgc2NhbmRpdW0sIGhhdmluZyB0d28gCnR5cGVzIG9mIGZ1bm5lbHMuIEZ1bm5lbCBBIG9ubHkgZGlmZmVycyBmcm9tIHRoYXQgb2Ygc2NhbmRpdW0gYnkgCmhhdmluZyBhIGdsb2JlIChzZWUgNCBkKSBpbnNlcnRlZCBpbiB0aGUgcmluZyBvZiBmb3VyIG92b2lkcyA7IGZ1bm5lbCAKQiBoYXMgYSBzaXgtYXRvbWVkLCBpbnN0ZWFkIG9mIGEgZml2ZS1hdG9tZWQgZ2xvYmUgYXQgdGhlIHRvcCwgYW5kIApzbGlwcyBhIHRoaXJkIGdsb2JlIGNvbnRhaW5pbmcgdHdlbnR5IGF0b21zIChzZWUgNCBkKSBiZXR3ZWVuIHRoZSAKdHdvIGlkZW50aWNhbCB3aXRoIHRob3NlIG9mIHNjYW5kaXVtIChzZWUgNCBjKS4gVGhlIGNlbnRyYWwgCmdsb2JlIGhhcyBzZXZlbiBhdG9tcyBpbiBpdHMgbWlkZGxlIGJvZHkgaW5zdGVhZCBvZiBmb3VyLiAKSW4gdGhpcyB3YXkgZG9lcyB2YW5hZGl1bSBzdWNjZWVkIGluIG92ZXJ0b3BwaW5nIHNjYW5kaXVtIApieSAxMjYgYXRvbXMuIAoKVmFuYWRpdW0gOiAzIGZ1bm5lbHMgKEEpIG9mIDE2MCBhdG9tcyAuLi4gNDgwIAoKMyBuIChCKSDigJ4gMTM3IMK7IOKAouKAouKAoiA0MTEgCkNlbnRyYWwgZ2xvYmUgLi4uIC4uLiAyNyAKCgpUb3RhbCAuLi4gOTE4IAoKCkF0b21pYyB3ZWlnaHQgLi4uIC4uLiA1MCc4NCAKCk51bWJlciB3ZWlnaHQgXl5eIC4uLiA1aSJvbyAKCgo3MSAKCk5pb2JpdW0gKFBsYXRlIFhJSSwgMykgaXMgYXMgY2xvc2VseSByZWxhdGVkIHRvIHl0dHJpdW0gYXMgaXMgCnZhbmFkaXVtIHRvIHNjYW5kaXVtLiBUaGUgbGl0dGxlIGdsb2JlcyB0aGF0IHNjYW1wZXIgcm91bmQgCnRoZSAiY2lnYXJzICIgY29udGFpbiB0d2VsdmUgYXRvbXMgaW5zdGVhZCBvZiBlaWdodCAoc2VlIDQgZSkuIAoKVGhlIHJlc3Qgb2YgdGhlIGZ1bm5lbCBpcyB0aGUgc2FtZS4gSW4gdGhlIGNlbnRyYWwgZ2xvYmUgYm90aCAKdGhlIHRldHJhaGVkcmEgaGF2ZSAiY2lnYXJzLCIgYW5kIGEgY2VudHJhbCBuaW5lLWF0b21lZCBnbG9iZSAKc3BpbnMgcm91bmQgaW4gdGhlIGNlbnRyZSAoc2VlIDQvKSwgc2V2ZW50ZWVuIGF0b21zIGJlaW5nIHRodXMgCmFkZGVkLiAKClBsYXRlIFhJSS4gCgoKLkEuIFZheW4sYWNvaWl5aS1pLi1mN14gJ2ZcIAoKCkpccml0PmwuQWp1eXJuLCAKCgpOaW9iaXVtIDsgNiBmdW5uZWxzIG9mIDI3NyBhdG9tcyAuLi4gMTY2MiAKCkNlbnRyYWwgZ2xvYmUgLi4uIC4uLiA1NyAKCgpUb3RhbCAuLi4gMTcxOSAKCgpBdG9taWMgd2VpZ2h0IC4uLiAuLi4gOTMnIDIgNSAKCk51bWJlciB3ZWlnaHQgbF5eXiAuLi4gOTUqNTAgCgpJSUkgYS4g4oCUIEFsdW1pbml1bSwgZ2FsbGl1bSBhbmQgaW5kaXVtIHdlcmUgZXhhbWluZWQgZnJvbSAKdGhpcyBncm91cC4gVGhleSBhcmUgdHJpYXRvbWljLCBkaWFtYWduZXRpYywgYW5kIHBvc2l0aXZlLiBUaGUgCmNvcnJlc3BvbmRpbmcgZ3JvdXAgY29udGFpbnMgcGhvc3Bob3J1cywgYXJzZW5pYyBhbmQgYW50aW1vbnkgOiAKYmlzbXV0aCBhbHNvIGJlbG9uZ3MgdG8gaXQsIGJ1dCB3YXMgbm90IGV4YW1pbmVkIDsgdGhleSBhcmUgCnRyaWF0b21pYywgZGlhbWFnbmV0aWMgYW5kIG5lZ2F0aXZlLiBUaGV5IGhhdmUgbm8gY2VudHJhbCAKZ2xvYmVzLiAKCkFsdW1pbml1bSAoUGxhdGUgWElJSSwgaSksIHRoZSBoZWFkIG9mIHRoZSBncm91cCwgaXMsIGFzIHVzdWFsLCAKc2ltcGxlLiBUaGVyZSBhcmUgc2l4IHNpbWlsYXIgZnVubmVscywgZWFjaCBjb250YWluaW5nIGVpZ2h0IApvdm9pZHMsIGJlbG93IHdoaWNoIGlzIGEgZ2xvYmUuIAoKQWx1bWluaXVtIDogNiBmdW5uZWxzIG9mIDgxIGF0b21zIC4uLiA0ODYgCgpBdG9taWMgd2VpZ2h0IC4uLiAuLi4gMjYqOTEgCgpOdW1iZXIgd2VpZ2h0IF4tXiAuLi4gMjcqMDAgCgpHYWxsaXVtIChQbGF0ZSBYSUlJLCAyKSBoYXMgdHdvIHNlZ21lbnRzIGluIGV2ZXJ5IGZ1bm5lbCA7IAppbiB0aGUgc2VnbWVudCB0byB0aGUgbGVmdCBhICIgY2lnYXIgIiBiYWxhbmNlcyBhIGdsb2JlLCBlcXVhbGx5IApzaXgtYXRvbWVkLCBpbiB0aGF0IG9mIHRoZSByaWdodCwgYW5kIHRoZSBnbG9iZXMgdG8gcmlnaHQgYW5kIGxlZnQgCmFyZSBmb3VyLWF0b21lZCBhcyBhZ2FpbnN0IHRocmVlLWF0b21lZC4gSW4gdGhlIG5leHQgcm93LCB0aGUgCnNtYWxsZXIgY29udGFpbmVkIGdsb2JlcyBoYXZlIHNpeCBhdG9tcyBhcyBhZ2FpbnN0IGZvdXIsIGFuZCAKdGhlIGNvbmVzIGhhdmUgcmVzcGVjdGl2ZWx5IHNldmVuIGFuZCBmaXZlLiBCeSB0aGVzZSBsaXR0bGUgCmFkZGl0aW9ucyB0aGUgbGVmdC1oYW5kIGZ1bm5lbCBib2FzdHMgb25lIGh1bmRyZWQgYW5kIHR3ZWx2ZSAKYXRvbXMgYXMgYWdhaW5zdCBuaW5ldHktZWlnaHQuIAoKR2FsbGl1bSA6IExlZnQgc2VnbWVudCAxMTIgYXRvbXMgMSAKClJpZ2h0IHNlZ21lbnQgOTgg4oCeIHwgIiBeXsKwIAoKNiBmdW5uZWxzIG9mIDIxMCBhdG9tcyAuLi4gMTI2MCAKCgpBdG9taWMgd2VpZ2h0IC4uLiAuLi4gNjkqNTAgCgpOdW1iZXIgd2VpZ2h0IGleXl4gLi4uIHlvJ29vIAoKwrAgMTggJyAKCkluZGl1bSAoUGxhdGUgWElJSSwgMykgcmVwZWF0cyB0aGUgc2VnbWVudHMgb2YgZ2FsbGl1bSAKZXhhY3RseSwgc2F2ZSBpbiB0aGUgc3Vic3RpdHV0aW9uIG9mIGEgc2l4dGVlbi1hdG9tZWQgYm9keSBmb3IgCnRoZSBzZXZlbi1hdG9tZWQgY29uZSBvZiB0aGUgbGVmdC1oYW5kIHNlZ21lbnQsIGFuZCBhIGZvdXJ0ZWVuLSAKYXRvbWVkIGJvZHkgZm9yIHRoZSBmaXZlLWF0b21lZCBjb3JyZXNwb25kaW5nIG9uZSBpbiBnYWxsaXVtLiAKQnV0IGVhY2ggZnVubmVsIG5vdyBoYXMgdGhyZWUgc2VnbWVudHMgaW5zdGVhZCBvZiB0d28gOyB0aHJlZSAKZnVubmVscyBvdXQgb2YgdGhlIHNpeCBjb250YWluIHR3byBzZWdtZW50cyBvZiB0eXBlIEEgYW5kIG9uZSBvZiAKdHlwZSBCIDsgdGhlIHJlbWFpbmluZyB0aHJlZSBjb250YWluIHR3byBvZiB0eXBlIEIsIGFuZCBvbmUgCm9mIHR5cGUgQS4gCgoKNzMgCgoKSW5kaXVtOiBTZWdtZW50IEEgMTIxIGF0b21zIApTZWdtZW50IEIgMTA3IOKAniAKCjMgZnVubmVscyBvZiAyIEEgYW5kIGkgQiAoWzI0MiArIDEwN10gMykgCjMg4oCeIOKAniAyIEIgYW5kIEkgQSAoWzIxNCArIDEyMV0gMykgCgoKVG90YWwgCgoKQXRvbWljIHdlaWdodCAKTnVtYmVyIHdlaWdodCB0XkE/IAoKwrAgMTggCgoKMTA0NyAKMTAwNSAKCjIwNTIgCgoxIDE0MDUgCjExNCowMCAKCgpQbGF0ZSBYSUlJLiAKCkFodXVtaS9uaUFNJ24sIAoKCl5hSlVKTXlybi4gCgoKVHJ1U2lYQWp5VHJMJyAKCgo3NCAKClRoZSBjb3JyZXNwb25kaW5nIG5lZ2F0aXZlIGdyb3VwLCBwaG9zcGhvcnVzLCBhcnNlbmljLCBhbmQgCmFudGltb255LCBydW4gb24gdmVyeSBzaW1pbGFyIGxpbmVzIHRvIHRob3NlIHdlIGhhdmUganVzdCAKZXhhbWluZWQuIAoKUGhvc3Bob3J1cyAoUGxhdGUgWElWLCBpKSBvZmZlcnMgdXMgYSB2ZXJ5IGN1cmlvdXMgYXJyYW5nZS0gCm1lbnQgb2YgYXRvbXMsIHdoaWNoIHdpbGwgZ2l2ZSBzb21lIG5ldyBmb3JtcyBpbiBicmVha2luZyB1cC4gClR3byBzZWdtZW50cyBhcmUgaW4gZWFjaCBmdW5uZWwsIGluIGZhY3QgdGhlIG9ubHkgdHdvIG9mIApncm91cCBJbGlhIHdoaWNoIGRvIG5vdCBzaG93IHRoaXMgYXJyYW5nZW1lbnQsIG9yIGEgbW9kaWZpY2EtIAp0aW9uIHRoZXJlb2YsIGFyZSBhbHVtaW5pdW0gYW5kIGFyc2VuaWMuIAoKClBsYXRlIFhJVi4gCgoKMCAwIE8gCgoKQXlTcl5ueExjIAoKCjc1IAoKUGhvc3Bob3J1cyA6IExlZnQgc2VnbWVudCA1MCBhdG9tcyBcIAoKUmlnaHQgc2VnbWVudCA0MyDigJ4gaiB+IF5eIAoKNiBmdW5uZWxzIG9mIDkzIGF0b21zIC4uLiA1NTggCgpBdG9taWMgd2VpZ2h0IC4uLiAuLi4gMzAqNzcgCgpOdW1iZXIgd2VpZ2h0IF5eLV4gLi4uIDMxLTAwIAoKQXJzZW5pYyAoUGxhdGUgWElWLCAyKSByZXNlbWJsZXMgYWx1bWluaXVtIGluIGhhdmluZyBlaWdodCAKaW50ZXJuYWwgc3ViLWRpdmlzaW9ucyBpbiBhIGZ1bm5lbCwgYW5kIHRoZSBvdm9pZHMgd2hpY2ggZm9ybSAKdGhlIHRvcCByaW5nIGFyZSBpZGVudGljYWwsIHNhdmUgZm9yIGEgbWludXRlIGRpZmZlcmVuY2UgdGhhdCBpbiAKYWx1bWluaXVtIHRoZSBvdm9pZHMgc3RhbmQgdGhlIHJldmVyc2Ugd2F5IGZyb20gdGhvc2UgaW4gCmFyc2VuaWMuIEl0IHdpbGwgYmUgbm90ZWQgdGhhdCBpbiB0aGUgZm9ybWVyIHRoZSB0b3AgYW5kIGJvdHRvbSAKdHJpYW5nbGVzIG9mIGF0b21zIGhhdmUgdGhlIGFwaWNlcyB1cHdhcmRzLCBhbmQgdGhlIG1pZGRsZSAKb25lIGhhcyBpdHMgYXBleCBkb3dud2FyZHMuIEluIGFyc2VuaWMsIHRoZSB0b3AgYW5kIGJvdHRvbSAKb25lcyBwb2ludCBkb3dud2FyZHMsIGFuZCB0aGUgbWlkZGxlIG9uZSB1cHdhcmRzLiBBcnNlbmljIAppbnNlcnRzIHNpeHRlZW4gc3BoZXJlcyBiZXR3ZWVuIHRoZSBvdm9pZHMgYW5kIGdsb2JlIHNob3duIAppbiBhbHVtaW5pdW0sIGFuZCB0aHVzIGFkZHMgbm8gbGVzcyB0aGFuIG9uZSBodW5kcmVkIGFuZCAKZm9ydHktIGZvdXIgYXRvbXMgdG8gZWFjaCBmdW5uZWwuIAoKQXJzZW5pYyA6IDYgZnVubmVscyBvZiAyMjUgYXRvbXMgLi4uIDEzNTAgCgpBdG9taWMgd2VpZ2h0IC4uLiAuLi4gNzQiNDUgCgpOdW1iZXIgd2VpZ2h0IGxBQVEgNzUnb28gCgpBbnRpbW9ueSAoUGxhdGUgWElWLCAzKSBpcyBhIGNsb3NlIGNvcHkgb2YgaW5kaXVtLCBhbmQgdGhlIAphcnJhbmdlbWVudCBvZiB0eXBlcyBBIGFuZCBCIGluIHRoZSBmdW5uZWxzIGlzIGlkZW50aWNhbC4gSW4gdGhlIAptaWRkbGUgcmluZ3Mgb2YgYm90aCBBIGFuZCBCIGEgdHJpcGxldCBpcyBzdWJzdGl0dXRlZCBmb3IgYSB1bml0IGF0IAp0aGUgY2VudHJlIG9mIHRoZSBsYXJnZXIgZ2xvYmUuIEluIHRoZSBsb3dlc3QgYm9keSBvZiB0eXBlIEEgdGxpZSAKXicgY2lnYXIgIiBoYXMgdmFuaXNoZWQsIGFuZCBpcyByZXByZXNlbnRlZCBieSBhIHNldmVuLWF0b21lZCAKY3J5c3RhbGxpbmUgZm9ybS4gCgpBbnRpbW9ueSA6IFNlZ21lbnQgQSAxMjggYXRvbXMgClNlZ21lbnQgQiAxMTMgYXRvbXMgCjMgZnVubmVscyBvZiAyIEEgYW5kIGkgQiAoWzI1NiArIGlpM10zKSAuLi4gMTEwNyAKMyDigJ4g4oCeIDIgQmFuZCBJIEEgKFsyMjYrIDEyOF0gMykuLi4gMTA1NiAKClRvdGFsIC4uLiAyMTYzIAoKCkF0b21pYyB3ZWlnaHQgLi4uIC4uLiAuLi4gMTE5KjM0IAoKTnVtYmVyIHdlaWdodCAuLi4gLi4uIC4uLiBpMjAiaTYgCgoKNzYgCgoKVklJLiAKCgpCb3JvbiAoUGxhdGUgSUlJLCA0LCBhbmQgUGxhdGUgWEksIGkpLiAKClRoZSBkaXNpbnRlZ3JhdGlvbiBvZiBib3JvbiBpcyB2ZXJ5IHNpbXBsZSA6IHRoZSBmdW5uZWxzIGFyZSAKc2V0IGZyZWUgYW5kIGFzc3VtZSB0aGUgc3BoZXJpY2FsIGZvcm0sIHNob3dpbmcgYSBjZW50cmFsICIgY2lnYXIgJycgCmFuZCBmb3VyIGdsb2JlcyBlYWNoIGNvbnRhaW5pbmcgdHdvIHRyaXBsZXRzLiBUaGUgY2VudHJhbCBnbG9iZSAKaXMgYWxzbyBzZXQgZnJlZSB3aXRoIGl0cyBmb3VyIHF1aW50ZXRzLCBhbmQgYnJlYWtzIGF0IG9uY2UgaW4gdHdvLiAKT24gdGhlIG1ldGEgbGV2ZWwgdGhlICIgY2lnYXIgIiBicmVha3MgdXAgYXMgdXN1YWwsIGFuZCB0aGUgdHJpcGxldHMgCnNlcGFyYXRlLiBPbiB0aGUgaHlwZXIgbGV2ZWwsIHRoZSAiIGNpZ2FyICIgZm9sbG93cyBpdHMgdXN1YWwgCmNvdXJzZSwgYW5kIHRoZSB0cmlwbGV0cyBiZWNvbWUgZHVhZHMgYW5kIHVuaXRzLiBUaGUgZ2xvYmUgCmZvcm1zIHR3byBxdWludGV0cyBvbiB0aGUgbWV0YSBsZXZlbCwgYW5kIHRoZXNlIGFyZSByZXNvbHZlZCBpbnRvIAp0cmlwbGV0cyBhbmQgZHVhZHMuIAoKClNjYW5kaXVtIChQbGF0ZSBYSSwgMikuIAoKSW4gZnVubmVsIEEgdGhlICJjaWdhciAiIGFuZCB0aGUgb3ZvaWRzIGJlaGF2ZSBhcyBpbiBib3JvbiwgCmJ1dCB0aGUgKiogYmFsbG9vbiwiIGEgbm8gKFhJLCA0KSwgZXNjYXBlcyBmcm9tIHRoZSBmdW5uZWwgYXMgaXQgCmNoYW5nZXMgdG8gYSBzcGhlcmUsIGFuZCBob2xkcyB0b2dldGhlciBvbiB0aGUgcHJvdG8gbGV2ZWwgOyAKb24gdGhlIG1ldGEsIGl0IHlpZWxkcyBzaXggZ2xvYmVzIGVhY2ggY29udGFpbmluZyBzZXZlbiBkdWFkcywgCmFuZCB0aGVzZSBhcmUgYWxsIHNldCBmcmVlIGFzIGR1YWRzIG9uIHRoZSBoeXBlciBsZXZlbCA7IHRoZSBvdm9pZCAKaXMgYWxzbyBzZXQgZnJlZSBvbiB0aGUgbWV0YSBsZXZlbCBiZWNvbWluZyBhIHNwaGVyZSwgYW5kIG9uIHRoZSAKaHlwZXIgbGV2ZWwgbGliZXJhdGVzIGl0cyBjb250YWluZWQgYm9kaWVzLCBhcyB0d28gdHJpcGxldHMsIHR3byAKcXVhcnRldHMgYW5kIHR3byBzZXh0ZXRzLiAKCkluIGZ1bm5lbCBCIHRoZXJlIGlzIGEgcXVpbnRldCwgdGhhdCBiZWhhdmVzIGxpa2UgdGhvc2UgaW4gdGhlIApnbG9iZSBvZiBib3Jvbiwgb24gZXNjYXBpbmcgZnJvbSB0aGUgZnVubmVsLCBpbiB3aGljaCB0aGUgYm9kaWVzIApyZW1haW4gb24gdGhlIHByb3RvIGxldmVsLCB3aXRoIHRoZSBleGNlcHRpb24gb2YgYiA2Mywgd2hpY2ggCgoKNzcgCgoKZXNjYXBlcy4gT24gdGhlIG1ldGEgbGV2ZWwsIGMgKFBsYXRlIFhJLCA0KSwgYyBhc3N1bWVzIGEgdGV0cmFoZWRyYWwgCmZvcm0gd2l0aCBzaXggYXRvbXMgYXQgZWFjaCBwb2ludCwgYW5kIHRoZXNlIGhvbGQgdG9nZXRoZXIgYXMgCnNleHRldHMgb24gdGhlIGh5cGVyIGxldmVsLiBBdCB0aGUgbWV0YSBzdGFnZSwgYiAoUGxhdGUgWEksIDQgNikgCnNldHMgZnJlZSBzZXZlbiBuaW5lLWF0b21lZCBib2RpZXMsIHdoaWNoIGJlY29tZSBmcmVlIHRyaXBsZXRzIApvbiB0aGUgaHlwZXIuIFRoZSBjZW50cmFsIGdsb2JlIHNob3dzIGEgY3Jvc3MgYXQgaXRzIGNlbnRyZSwgCndpdGggdGhlIGZvdXIgcXVpbnRldHMgd2hpcmxpbmcgcm91bmQgaXQsIG9uIHRoZSBwcm90byBsZXZlbC4gCk9uIHRoZSBtZXRhLCB0aGUgcXVpbnRldHMgYXJlIHNldCBmcmVlLCBhbmQgZm9sbG93IHRoZSBib3JvbiB0eXBlLCAKd2hpbGUgdGhlIGNyb3NzIGJlY29tZXMgYSBxdWFydGV0IG9uIHRoZSBtZXRhIGxldmVsLCBhbmQgdHdvIApkdWFkcyBvbiB0aGUgaHlwZXIuIAoKCll0dHJpdW0gKFBsYXRlIFhJLCAzKS4gCgpJbiB5dHRyaXVtLCBvbiB0aGUgcHJvdG8gbGV2ZWwsIGEgMTEwIGFuZCBiIDYzIGJvdGggZXNjYXBlIApmcm9tIHRoZSBmdW5uZWwsIGFuZCBiZWhhdmUgYXMgaW4gc2NhbmRpdW0uIFRoZSBvdm9pZHMgYW5kIAoiIGNpZ2FycywiIHNldCBmcmVlIG9uIHRoZSBtZXRhIGxldmVsLCBiZWhhdmUgYXMgaW4gYm9yb24uIFRoZSAKY2VudHJhbCBnbG9iZSBicmVha3MgdXAgYXMgaW4gZ29sZCAocHAuIDQ5IGFuZCA1MCksIGZvdXIgcXVhcnRldHMgCmJlaW5nIHNldCBmcmVlIGluc3RlYWQgb2YgdHdvIHF1YXJ0ZXRzIGFuZCB0d28gdHJpcGxldHMuIFdlIGhhdmUgCm9ubHkgdG8gY29uc2lkZXIgZSA4IGFuZCBkIDIwIChQbGF0ZSBYSSwgNCkuIMKjIDggaXMgYSB0ZXRyYWhlZHJhbCAKYXJyYW5nZW1lbnQgb2YgZHVhZHMgb24gdGhlIG1ldGEgbGV2ZWwsIHNldCBmcmVlIGFzIGR1YWRzIG9uIHRoZSAKaHlwZXIuIEQgMjAgaXMgYW4gYXJyYW5nZW1lbnQgb2YgcGFpcnMgb2YgZHVhZHMgYXQgdGhlIGFuZ2xlcyAKb2YgYSBzcXVhcmUtYmFzZWQgcHlyYW1pZCBvbiB0aGUgbWV0YSwgYW5kIGFnYWluIGZyZWUgZHVhZHMgCm9uIHRoZSBoeXBlci4gCgpOaXRyb2dlbiAoUGxhdGUgWElJLCBpKS4gCgpOaXRyb2dlbiBoYXMgbm90aGluZyBuZXcgdG8gc2hvdyB1cywgYWxsIGl0cyBjb25zdGl0dWVudHMgCmhhdmluZyBhcHBlYXJlZCBpbiBzY2FuZGl1bSBhbmQgeXR0cml1bS4gCgoKNzggCgpWYW5hZGl1bSAoUGxhdGUgWElJLCAyKS4gCgpUaGUgQSBmdW5uZWwgb2YgdmFuYWRpdW0gcmVwZWF0cyB0aGUgQSBmdW5uZWwgb2Ygc2NhbmRpdW1eIAp3aXRoIHRoZSBhZGRpdGlvbiBvZiBkIDIwLCBhbHJlYWR5IHN0dWRpZWQuIEluIHRoZSBCIGZ1bm5lbCAKc2NhbmRpdW0gQiBpcyByZXBlYXRlZCwgd2l0aCBhbiBhZGRpdGlvbiBvZiBkIDIwIGFuZCBhIHNleHRldCAKZm9yIGEgcXVpbnRldCA7IHRoZSBzZXh0ZXQgaXMgdGhlIGMgb2YgdGhlICIgbml0cm9nZW4gYmFsbG9vbi4iIApUaGUgY2VudHJhbCBnbG9iZSBmb2xsb3dzIGJvcm9uLCBzYXZlIHRoYXQgaXQgaGFzIGEgc2VwdGV0IGZvciBpdHMgCmNlbnRyZSA7IHRoaXMgd2FzIGZpZ3VyZWQgaW4gaW9kaW5lIChwLiA0OCkuIAoKTmlvYml1bSAoUGxhdGUgWElJLCAzKS4gCgpOaW9iaXVtIG9ubHkgZGlmZmVycyBmcm9tIHl0dHJpdW0gYnkgdGhlIGludHJvZHVjdGlvbiBvZiAKdHJpcGxldHMgZm9yIGR1YWRzIGluIGUgOyBvbiB0aGUgbWV0YSBsZXZlbCB3ZSBoYXZlIHRoZXJlZm9yZSAKdHJpcGxldHMsIGFuZCBvbiB0aGUgaHlwZXIgZWFjaCB0cmlwbGV0IHlpZWxkcyBhIGR1YWQgYW5kIGEgCnVuaXQuIFRoZSBvbmx5IG90aGVyIGRpZmZlcmVuY2UgaXMgaW4gdGhlIGNlbnRyYWwgZ2xvYmUuIFRoZSAKdGV0cmFoZWRyYSBzZXBhcmF0ZSBhcyB1c3VhbCwgYnV0IGxpYmVyYXRlIGVpZ2h0ICJjaWdhcnMiIGluc3RlYWQgCm9mIGZvdXIgd2l0aCBmb3VyIHF1YXJ0ZXRzIDsgdGhlIGNlbnRyYWwgYm9keSBpcyBzaW1wbGUsIGJlY29taW5nIAp0aHJlZSB0cmlhZHMgYXQgdGhlIGFuZ2xlcyBvZiBhIHRyaWFuZ2xlIG9uIHRoZSBtZXRhIGxldmVsLCBhbmQgCnRocmVlIGR1YWRzIGFuZCB0aHJlZSB1bml0cyBvbiB0aGUgaHlwZXIuIAoKQWx1bWluaXVtIChQbGF0ZSBYSUlJLCBpKS4gCgpUaGUgZnVubmVscyBsZXQgZ28gdGhlIGdsb2JlcywgYnV0IHRoZSBlaWdodCBvdm9pZHMgcmVtYWluIAp3aXRoaW4gdGhlbSwgc28gdGhhdCBzZXZlbiBib2RpZXMgYXJlIGxldCBsb29zZSBvbiB0aGUgcHJvdG8gbGV2ZWwuIApXaGVuIHRoZSBvdm9pZHMgYXJlIHNldCBmcmVlIGF0IHRoZSBtZXRhIHN0YWdlIHRoZXkgYmVjb21lIApzcGhlcmljYWwgYW5kIGEgbmluZS1hdG9tZWQgYm9keSBpcyBwcm9kdWNlZCwgd2hpY2ggYnJlYWtzIHVwIAppbnRvIHRyaWFuZ2xlcyBvbiB0aGUgaHlwZXIgbGV2ZWwuIFRoZSBnbG9iZSBiZWNvbWVzIGEgY3Jvc3MgYXQgCnRoZSBtZXRhIHN0YWdlLCB3aXRoIG9uZSBhdG9tIGZyb20gdGhlIGR1YWRzIGF0IGVhY2ggYXJtIGluIAphZGRpdGlvbiB0byBpdHMgb3duLCBhbmQgdGhlc2UgZm9ybSBmb3VyIGR1YWRzIG9uIHRoZSBoeXBlciwgYW5kIAphIHVuaXQgZnJvbSB0aGUgY2VudHJlLiAKCkdhbGxpdW0gKFBsYXRlIFhJIElJLCAyKS4gCgpJbiBnYWxsaXVtIHRoZSBmdW5uZWwgZGlzYXBwZWFycyBvbiB0aGUgcHJvdG8gbGV2ZWwsIHNldHRpbmcgCmZyZWUgaXRzIHR3byBjb250YWluZWQgc2VnbWVudHMsIGVhY2ggb2Ygd2hpY2ggZm9ybXMgYSBjeWxpbmRlciwgCnRodXMgeWllbGRpbmcgdHdlbHZlIGJvZGllcyBvbiB0aGUgcHJvdG8gbGV2ZWwuIE9uIHRoZSBtZXRhLCB0aGUgCnRocmVlIHVwcGVyIGdsb2JlcyBpbiBlYWNoIGxlZnQtaGFuZCBzZWdtZW50IGFyZSBzZXQgZnJlZSwgYW5kIApzb29uIHZhbmlzaCwgZWFjaCBsaWJlcmF0aW5nIGEgY2lnYXIgYW5kIHR3byBzZXB0ZXRzLCB0aGUgcXVhcnRldCAKYW5kIHRyaWFkIHVuaXRpbmcuIE9uIHRoZSBoeXBlciB0aGUgcXVhcnRldCB5aWVsZHMgdHdvIGR1YWRzIApidXQgdGhlIHRyaWFuZ2xlIHBlcnNpc3RzLiBUaGUgc2Vjb25kIHNldCBvZiBib2RpZXMgZGl2aWRlIG9uIHRsaWUgCm1ldGEgbGV2ZWwsIGZvcm1pbmcgYSBzZXh0ZXQgYW5kIGEgY3Jvc3Mgd2l0aCBhIGR1YWQgYXQgZWFjaCBhcm0gOyAKdGhlc2Ugb24gdGhlIGh5cGVyIGxldmVsIGRpdmlkZSBpbnRvIHR3byB0cmlhbmdsZXMsIGZvdXIgZHVhZHMgYW5kIAphIHVuaXQuIFRoZSBzZXZlbi1hdG9tZWQgY29uZSBiZWNvbWVzIHR3byB0cmlhbmdsZXMgdW5pdGVkIGJ5IAoKCjc5IAoKYSBzaW5nbGUgYXRvbSwgYW5kIG9uIHRoZSBtZXRhIGxldmVsIHRoZXNlIGZvcm0gYSByaW5nIHJvdW5kIAp0aGUgdW5pdCA7IG9uIHRoZSBoeXBlciB0aGV5IGZvcm0gdGhyZWUgZHVhZHMgYW5kIGEgdW5pdC4gCgpJbiB0aGUgcmlnaHQtaGFuZCBzZWdtZW50LCB0aGUgc2FtZSBwb2xpY3kgaXMgZm9sbG93ZWQsIHRoZSAKZm91ciB0cmlhZHMgYmVjb21pbmcgdHdvIHNleHRldHMsIHdoaWxlIHRoZSBjZW50cmFsIGJvZHkgYWRkcyAKYSB0aGlyZCB0byB0aGUgbnVtYmVyLiBUaGUgc2Vjb25kIHJpbmcgaGFzIGEgcXVhcnRldCBpbnN0ZWFkIG9mIAp0aGUgc2V4dGV0LCBidXQgb3RoZXJ3aXNlIGJyZWFrcyB1cCBhcyBkb2VzIHRoYXQgb2YgdGhlIGxlZnQgOyB0aGUgCnF1aW50ZXQgYXQgdGhlIGJhc2UgZm9sbG93cyB0aGF0IG9mIGJvcm9uLiAKCgpJbmRpdW0gKFBsYXRlIFhJSUksIDMpLiAKClRoZSBjb21wbGljYXRpb24gb2YgdGhyZWUgc2VnbWVudHMgb2YgZGl0ZmVyZW50IHR5cGVzIGluIGVhY2ggCmZ1bm5lbCBkb2VzIG5vdCBhZmZlY3QgdGhlIHByb2Nlc3Mgb2YgYnJlYWtpbmcgdXAsIGFuZCBpbmRpdW0gCm5lZWRzIGxpdHRsZSBhdHRlbnRpb24uIEEgaXMgZXhhY3RseSB0aGUgc2FtZSBhcyB0aGUgbGVmdC1oYW5kIApmdW5uZWwgb2YgZ2FsbGl1bSwgc2F2ZSBmb3IgdGhlIHN1YnN0aXR1dGlvbiBvZiBhIGdsb2JlIGNvbnRhaW5pbmcgCnRoZSBmYW1pbGlhciAiIGNpZ2FyICIgYW5kIHR3byBzcXVhcmUtYmFzZWQgcHlyYW1pZHMuIEIgaXMgdGhlIApzYW1lIGFzIHRoZSByaWdodC1oYW5kIGZ1bm5lbCBvZiBnYWxsaXVtLCBleGNlcHQgdGhhdCBpdHMgbG93ZXN0IApib2R5IGNvbnNpc3RzIG9mIHR3byBzcXVhcmUtYmFzZWQgcHlyYW1pZHMgYW5kIGEgdGV0cmFoZWRyb24uIApBbGwgdGhlc2UgYXJlIGZhbWlsaWFyLiAKClBob3NwaG9ydXMgKFBsYXRlIFhJViwgaSkuIAoKVGhlIGF0b21zIGluIHRoZSBzaXggc2ltaWxhciBzcGhlcmVzIGluIHRoZSBzZWdtZW50cyBvZiB0aGUgCnBob3NwaG9ydXMgZnVubmVsIGFyZSBhcnJhbmdlZCBvbiB0aGUgZWlnaHQgYW5nbGVzIG9mIGEgY3ViZSwgCmFuZCB0aGUgY2VudHJhbCBvbmUgaXMgYXR0YWNoZWQgdG8gYWxsIG9mIHRoZW0uIE9uIHRoZSBtZXRhIGxldmVsIApmaXZlIG9mIHRoZSBuaW5lIGF0b21zIGhvbGQgdG9nZXRoZXIgYW5kIHBsYWNlIHRoZW1zZWx2ZXMgb24gdGhlIAphbmdsZXMgb2YgYSBzcXVhcmUtYmFzZWQgcHlyYW1pZCA7IHRoZSByZW1haW5pbmcgZm91ciBzZXQgdGhlbS0gCgoKOG8gCgoKc2VsdmVzIG9uIHRoZSBhbmdsZSBvZiBhIHRldHJhaGVkcm9uLiBUaGV5IHlpZWxkLCBvbiB0aGUgaHlwZXIgCmxldmVsLCB0d28gdHJpYWRzLCBhIGR1YWQsIGFuZCBhIHVuaXQuIFRoZSByZW1haW5pbmcgYm9kaWVzIGFyZSAKc2ltcGxlIGFuZCBmYW1pbGlhci4gCgpBcnNlbmljIChQbGF0ZSBYSVYsIDIpLiAKQXJzZW5pYyBzaG93cyB0aGUgc2FtZSBvdm9pZHMgYW5kIGdsb2JlIGFzIGhhdmUgYWxyZWFkeSAKYmVlbiBicm9rZW4gdXAgaW4gYWx1bWluaXVtIChzZWUgYW50ZSkgOyB0aGUgcmVtYWluaW5nIHNpeHRlZW4gCnNwaGVyZXMgZm9ybSBuaW5lLWF0b21lZCBib2RpZXMgb24gdGhlIG1ldGEgbGV2ZWwsIGFsbCBzaW1pbGFyIHRvIAp0aG9zZSBvZiBhbHVtaW5pdW0sIHRodXMgeWllbGRpbmcgdHdlbHZlIHBvc2l0aXZlIGFuZCB0d2VsdmUgCm5lZ2F0aXZlIDsgdGhlIGdsb2JlIGFsc28geWllbGRzIGEgbmluZS1hdG9tZWQgYm9keSwgdHdlbnR5LWZpdmUgCmJvZGllcyBvZiBuaW5lLiAKCgpBbnRpbW9ueSAoUGxhdGUgWElWLCAzKS4gCkFudGltb255IGZvbGxvd3MgY2xvc2VseSBpbiB0aGUgdHJhY2sgb2YgZ2FsbGl1bSBhbmQgaW5kaXVtLCAKdGhlIHVwcGVyIHJpbmcgb2Ygc3BoZXJlcyBiZWluZyBpZGVudGljYWwuIEluIHRoZSBzZWNvbmQgcmluZywgYSAKdHJpcGxldCBpcyBzdWJzdGl0dXRlZCBmb3IgdGhlIHVuaXQsIGFuZCB0aGlzIGFwcGFyZW50bHkgdGhyb3dzIHRoZSAKY3Jvc3Mgb3V0IG9mIGdlYXIsIGFuZCB3ZSBoYXZlIGEgbmV3IGVsZXZlbi1hdG9tZWQgZmlndXJlLCB3aGljaCAKYnJlYWtzIHVwIGludG8gYSB0cmlwbGV0IGFuZCB0d28gcXVhcnRldHMgb24gdGhlIGh5cGVyIGxldmVsLiBUaGUgCmxvd2VzdCBzZXZlbi1hdG9tZWQgc3BoZXJlIG9mIHRoZSB0aHJlZSBhdCB0aGUgYmFzZSBpcyB0aGUgc2FtZSAKYXMgd2UgbWV0IHdpdGggaW4gY29wcGVyLiAKClZJSUkuIAoKSVYuIOKAlCBUaGUgT2N0YWhlZHJhbCBHcm91cHMuIAoKVGhlc2UgZ3JvdXBzIGFyZSBhdCB0aGUgdHVybnMgb2YgdGhlIHNwaXJhbCBpbiBTaXIgV2lsbGlhbSAKCkNyb29rZXMnIGxlbW5pc2NhdGVzIChzZWUgcC4gMjgpLiBPbiB0aGUgb25lIHNpZGUgaXMgY2FyYm9uLCAKCndpdGggYmVsb3cgaXQgdGl0YW5pdW0gYW5kIHppcmNvbml1bSA7IG9uIHRoZSBvdGhlciBzaWxpY29uLCB3aXRoIAoKCjhpIAoKZ2VybWFuaXVtIGFuZCB0aW4uIFRoZSBjaGFyYWN0ZXJpc3RpYyBmb3JtIGlzIGFuIG9jdGFoZWRyb24sIApyb3VuZGVkIGF0IHRoZSBhbmdsZXMgYW5kIGEgSHR0bGUgZGVwcmVzc2VkIGJldHdlZW4gdGhlIGZhY2VzIAppbiBjb25zZXF1ZW5jZSBvZiB0aGUgcm91bmRpbmcgOyBpbiBmYWN0LCB3ZSBkaWQgbm90LCBhdCBmaXJzdCwgCnJlY29nbml6ZSBpdCBhcyBhbiBvY3RhaGVkcm9uLCBhbmQgd2UgY2FsbGVkIGl0IHRoZSAiY29yZGVkIGJhbGUsIiAKdGhlIG5lYXJlc3QgbGlrZW5lc3MgdGhhdCBzdHJ1Y2sgdXMuIFRoZSBtZW1iZXJzIG9mIHRoZSBncm91cCAKYXJlIGFsbCB0ZXRyYWRzLCBhbmQgaGF2ZSBlaWdodCBmdW5uZWxzLCBvcGVuaW5nIG9uIHRoZSBlaWdodCBmYWNlcyAKb2YgdGhlIG9jdGFoZWRyb24uIFRoZSBmaXJzdCBncm91cCBpcyBwYXJhbWFnbmV0aWMgYW5kIHBvc2l0aXZlOyAKdGhlIGNvcnJlc3BvbmRpbmcgb25lIGlzIGRpYW1hZ25ldGljIGFuZCBuZWdhdGl2ZS4gVGhlIHR3byAKZ3JvdXBzIGFyZSBub3QgY2xvc2VseSBhbGxpZWQgaW4gY29tcG9zaXRpb24sIHRob3VnaCBib3RoIHRpdGFuaXVtIAphbmQgdGluIGhhdmUgaW4gY29tbW9uIHRoZSBmaXZlIGludGVyc2VjdGluZyB0ZXRyYWhlZHJhIGF0IHRoZWlyIApyZXNwZWN0aXZlIGNlbnRyZXMuIAoKQ2FyYm9uIChQbGF0ZSBJSUksIDUsIGFuZCBYViwgaSkgZ2l2ZXMgdXMgdGhlIGZ1bmRhbWVudGFsIApvY3RhaGVkcmFsIGZvcm0sIHdoaWNoIGJlY29tZXMgc28gbWFza2VkIGluIHRpdGFuaXVtIGFuZCAKemlyY29uaXVtLiBBcyBiZWZUKXJlIHNhaWQgKHAuIDMwKSwgdGhlIHByb3RydXNpb24gb2YgdGhlIGFybXMgaW4gCnRoZXNlIHN1Z2dlc3RzIHRoZSBvbGQgUm9zaWNydWNpYW4gc3ltYm9sIG9mIHRoZSBjcm9zcyBhbmQgcm9zZSwgCmJ1dCB0aGV5IHNob3cgYXQgdGhlaXIgZW5kcyB0aGUgZWlnaHQgY2FyYm9uIGZ1bm5lbHMgd2l0aCB0aGVpciAKY2hhcmFjdGVyaXN0aWMgY29udGVudHMsIGFuZCB0aHVzIGp1c3RpZnkgdGhlaXIgcmVsYXRpb25zaGlwLiBUaGUgCmZ1bm5lbHMgYXJlIGluIHBhaXJzLCBvbmUgb2YgZWFjaCBwYWlyIHNob3dpbmcgdGhyZWUgIiBjaWdhcnMsIiAKYW5kIGhhdmluZyBhcyBpdHMgZmVsbG93IGEgZnVubmVsIGluIHdoaWNoIHRoZSBtaWRkbGUgIiBjaWdhciAiIAppcyB0cnVuY2F0ZWQsIHRodXMgbG9vc2luZyBvbmUgYXRvbS4gRWFjaCAiIGNpZ2FyICIgaGFzIGEgbGVhZi0gCmxpa2UgYm9keSBhdCBpdHMgYmFzZSwgYW5kIGluIHRoZSBjZW50cmUgb2YgdGhlIG9jdGFoZWRyb24gaXMgYSAKZ2xvYmUgY29udGFpbmluZyBmb3VyIGF0b21zLCBlYWNoIHdpdGhpbiBpdHMgb3duIHdhbGwgOyB0aGVzZSBsaWUgCm9uIHRoZSBkaXZpZGluZyBsaW5lcyBvZiB0aGUgZmFjZXMsIGFuZCBlYWNoIGhvbGRzIGEgcGFpciBvZiB0aGUgCmZ1bm5lbHMgdG9nZXRoZXIuIEl0IHNlZW1zIGFzIHRob3VnaCB0aGlzIGF0b20gaGFkIGJlZW4gCmVjb25vbWljYWxseSB0YWtlbiBmcm9tIHRoZSAiIGNpZ2FyICIgdG8gZm9ybSBhIGxpbmsuIFRoaXMgd2lsbCAKYmUgbW9yZSBjbGVhcmx5IHNlZW4gd2hlbiB3ZSBjb21lIHRvIHNlcGFyYXRlIHRoZSBwYXJ0cyBmcm9tIAplYWNoIG90aGVyLiBJdCB3aWxsIGJlIG5vdGljZWQgdGhhdCB0aGUgYXRvbXMgaW4gdGhlICIgbGVhdmVzIiBhdCAKdGhlIGJhc2UgdmFyeSBpbiBhcnJhbmdlbWVudCwgYmVpbmcgYWx0ZXJuYXRlbHkgaW4gYSBsaW5lIGFuZCBpbiBhIAoKdHJpYW5nbGUuIAoKKGxlZnQgMjcgCkNhcmJvbiA6IE9uZSBwYWlyIG9mIGZ1bm5lbHMgXSByaWdodCAyMiA9XiA1NCAKCltjZW50cmUgaSAKNCBwYWlycyBvZiBmdW5uZWxzIG9mIDU0IGF0b21zIC4uLiAyMTYgCkF0b21pYyB3ZWlnaHQgLi4uIC4uLiBpaSdxaSAKCk51bWJlciB3ZWlnaHQgXl5eIC4uLiAuLi4gaTInb28gCgpUaXRhbml1bSAoUGxhdGUgSUlJLCA2LCBhbmQgWFYsIDIpIGhhcyBhIGNvbXBsZXRlIGNhcmJvbiAKCmF0b20gZGlzdHJpYnV0ZWQgb3ZlciB0aGUgZW5kcyBvZiBpdHMgZm91ciBhcm1zLCBhIHBhaXIgb2YgZnVubmVscyAKCndpdGggdGhlaXIgbGlua2luZyBhdG9tIGJlaW5nIHNlZW4gaW4gZWFjaC4gVGhlbiwgaW4gZWFjaCBhcm0sIAoKY29tZXMgdGhlIGVsYWJvcmF0ZSBib2R5IHNob3duIGFzIGpjLCB3aXRoIGl0cyBlaWdodHktZWlnaHQgYXRvbXMuIAoKNiAKCgo4MiAKCkEgcmluZyBvZiB0d2VsdmUgb3ZvaWRzICheZCkgZWFjaCBob2xkaW5nIHdpdGhpbiBpdHNlbGYgZm91cnRlZW4gCmF0b21zLCBkaXN0cmlidXRlZCBhbW9uZyB0aHJlZSBjb250YWluZWQgZ2xvYmVzIOKAlCB0d28gcXVhcnRldHMgCmFuZCBhIHNleHRldCDigJQgaXMgYSBuZXcgZGV2aWNlIGZvciBjcm93ZGluZyBpbiBtYXRlcmlhbC4gTGFzdGx5IApjb21lcyB0aGUgY2VudHJhbCBib2R5ICg0Xikgb2YgZml2ZSBpbnRlcnNlY3RpbmcgdGV0cmFoZWRyYSwgd2l0aCBhIAoiIGNpZ2FyICIgYXQgZWFjaCBvZiB0aGVpciB0d2VudHkgcG9pbnRz4oCUIG9mIHdoaWNoIG9ubHkgZmlmdGVlbiAKY2FuIGJlIHNob3duIGluIHRoZSBkaWFncmFtIOKAlCBhbmQgYSByaW5nIG9mIHNldmVuIGF0b21zIHJvdW5kIAphbiBlaWdodGgsIHRoYXQgZm9ybXMgdGhlIG1pbnV0ZSBjZW50cmUgb2YgdGhlIHdob2xlLiBJbnRvIHRoaXMgCmVsYWJvcmF0ZSBib2R5IG9uZSBodW5kcmVkIGFuZCB0d2VudHktZWlnaHQgYXRvbXMgYXJlIGJ1aWx0LiAKClBsYXRlIFhWLiAKCgpDY3VyaF4gCgoKIlR4dGlpL25KVWp1VG4sIAoKClRpdGNpeXJUakEuQWptLCAKCmF1cnVpIAoKCixpeXInXmNybkFNLz9uLyAKCgpcIAoKCjgzIAoKVGl0YW5pdW06IE9uZSBjYXJib24gYXRvbSAuLi4gLi4uIDIxNiAKCjRjIG9mIDg4IGF0b21zIC4uLiAuLi4gMzUyIAoKaTJkIG9mIDE0IOKAniAuLi4gLi4uIDE2OCAKCkNlbnRyYWwgZ2xvYmUgLi4uIC4uLiAxMjggCgpUb3RhbCAuLi4gODY0IAoKQXRvbWljIHdlaWdodCAuLi4gLi4uIDQ3NzQgCgpOdW1iZXIgd2VpZ2h0IF5eXiAuLi4gLi4uIDQ4XjAwIAoKWmlyY29uaXVtIChQbGF0ZSBYViwgMykgaGFzIGV4YWN0bHkgdGhlIHNhbWUgb3V0bGluZSBhcyAKdGl0YW5pdW0sIHRoZSBjYXJib24gYXRvbSBpcyBzaW1pbGFybHkgZGlzdHJpYnV0ZWQsIGFuZCB0aGUgY2VudHJhbCAKYm9keSBpcyBpZGVudGljYWwuIE9ubHkgaW4gNSBjIGFuZCBkIGRvIHdlIGZpbmQgYSBkaWZmZXJlbmNlIG9uIApjb21wYXJpbmcgdGhlbSB3aXRoIDQgYyBhbmQgZC4gVGhlIGMgb3ZvaWQgaW4gemlyY29uaXVtIHNob3dzIApubyBsZXNzIHRoYW4gZmlmdGVlbiBzZWNvbmRhcnkgZ2xvYmVzIHdpdGhpbiB0aGUgZml2ZSBjb250YWluZWQgaW4gCnRoZSBvdm9pZCwgYW5kIHRoZXNlLCBpbiB0dXJuLCBjb250YWluIGFsdG9nZXRoZXIgc2l4dHktbmluZSBzbWFsbGVyIApzcGhlcmVzLCB3aXRoIHR3byBodW5kcmVkIGFuZCB0d2VsdmUgYXRvbXMgd2l0aGluIHRoZW0sIAphcnJhbmdlZCBpbiBwYWlycywgdHJpcGxldHMsIHF1YXJ0ZXRzLCBxdWludGV0cywgYSBzZXh0ZXQgYW5kIHNlcHRldHMuIApGaW5hbGx5LCB0aGUgb3ZvaWRzIG9mIHRoZSByaW5nIGFyZSBhbHNvIG1hZGUgbW9yZSBlbGFib3JhdGUsIApzaG93aW5nIHRoaXJ0eS1zaXggYXRvbXMgaW5zdGVhZCBvZiBmb3VydGVlbi4gSW4gdGhpcyB3YXkgdGhlIApjbGV2ZXIgYnVpbGRlcnMgaGF2ZSBwaWxlZCB1cCBpbiB6aXJjb25pdW0gbm8gbGVzcyB0aGFuIDE2MjQgYXRvbXMuIAoKWmlyY29uaXVtIDogT25lIENhcmJvbiBhdG9tIC4uLiAuLi4gMjE2IAoKNGMgb2YgMjEyIGF0b21zIC4uLiAuLi4gODQ4IAoKaTJjXm9mIDM2IOKAniAuLi4gLi4uIDQzMiAKCkNlbnRyYWwgZ2xvYmUgLi4uIC4uLiAxMjggCgpUb3RhbCAuLi4gMTYyNCAKCkF0b21pYyB3ZWlnaHQgLi4uIC4uLiA4OSo4NSAKCk51bWJlciB3ZWlnaHQgLi4uIC4uLiA5MCoyMiAKClNpbGljb24gKFBsYXRlIFhWSSwgaSkgaXMgYXQgdGhlIGhlYWQgb2YgdGhlIGdyb3VwIHdoaWNoIApjb3JyZXNwb25kcyB0byBjYXJib24gb24gdGhlIG9wcG9zaXRlIHR1cm4gb2YgdGhlIGxlbW5pc2NhdGUuIApJdCBoYXMgdGhlIHVzdWFsIGVpZ2h0IGZ1bm5lbHMsIGNvbnRhaW5pbmcgZm91ciBvdm9pZHMgaW4gYSBjaXJjbGUsIAphbmQgYSB0cnVuY2F0ZWQgIiBjaWdhciAiIGJ1dCBubyBjZW50cmFsIGJvZHkgb2YgYW55IGtpbmQuIEFsbCAKdGhlIGZ1bm5lbHMgYXJlIGFsaWtlLiAKClNpbGljb24gOiA4IGZ1bm5lbHMgb2YgNjUgYXRvbXMgLi4uIDUyMCAKCkF0b21pYyB3ZWlnaHQgLi4uIC4uLiAyOCoxOCAKCk51bWJlciB3ZWlnaHQgNV8yX28gLi4uIC4uLiAyOCo4OCAKCkdlcm1hbml1bSAoUGxhdGUgWFZJLCAyKSBzaG93cyB0aGUgZWlnaHQgZnVubmVscywgY29udGFpbi0gCmluZyBlYWNoIGZvdXIgc2VnbWVudHMgKFhWSSwgNCksIHdpdGhpbiB3aGljaCBhcmUgdGhyZWUgb3ZvaWRzIAphbmQgYSAiIGNpZ2FyLiIgSW4gdGhpcyBjYXNlIHRoZSBmdW5uZWxzIHJhZGlhdGUgZnJvbSBhIGNlbnRyYWwgCgoKODQgCgpnbG9iZSwgZm9ybWVkIG9mIHR3byBpbnRlcnNlY3RpbmcgdGV0cmFoZWRyYSwgd2l0aCAiY2lnYXJzIiBhdCAKZWFjaCBwb2ludCBlbmNsb3NpbmcgYSBmb3VyLWF0b21lZCBnbG9iZS4gCgpHZXJtYW5pdW06IDggZnVubmVscyBvZiAxNTYgYXRvbXMgLi4uIDEyNDggCkNlbnRyYWwgZ2xvYmUgLi4uIC4uLiA1MiAKCgpUb3RhbCAKCkF0b21pYyB3ZWlnaHQgCk51bWJlciB3ZWlnaHQgMy01b28gCgoqwrsgMTggCgpQbGF0ZSBYVkkuIAoKCjEzMDAgCgo3aSc5MyAKCjcyKjIyIAoKCjYiIGleLSduTENpLi1uTCdKQ2pecnYgCgoKODUgCgpUaW4gKFBsYXRlIFhWSSwgMykgcmVwZWF0cyB0aGUgZnVubmVsIG9mIGdlcm1hbml1bSwgYW5kIHRoZSAKY2VudHJhbCBnbG9iZSB3ZSBtZXQgd2l0aCBpbiB0aXRhbml1bSwgb2YgZml2ZSBpbnRlcnNlY3RpbmcgdGV0cmEtIApoZWRyYSwgY2FycnlpbmcgdHdlbnR5ICJjaWdhcnMiIDsgdGhlIGxhdHRlciwgaG93ZXZlciwgb21pdHMgdGhlIAplaWdodC1hdG9tZWQgY2VudHJlIG9mIHRoZSBnbG9iZSB0aGF0IHdhcyBmb3VuZCBpbiB0aXRhbml1bSwgYW5kIApoZW5jZSBoYXMgb25lIGh1bmRyZWQgYW5kIHR3ZW50eSBhdG9tcyB0aGVyZWluIGluc3RlYWQgb2Ygb25lIApodW5kcmVkIGFuZCB0d2VudHktZWlnaHQuIFRpbiwgdG8gbWFrZSByb29tIGZvciB0aGUgbmVjZXNzYXJ5IAppbmNyZWFzZSBvZiBhdG9tcywgYWRvcHRzIHRoZSBzeXN0ZW0gb2Ygc3Bpa2VzLCB3aGljaCB3ZSBtZXQgCndpdGggaW4gemluYyAoc2VlIHAuIDU2LCBQbGF0ZSBJWCwgMikgOyB0aGVzZSBzcGlrZXMsIGxpa2UgdGhlIApmdW5uZWxzLCByYWRpYXRlIGZyb20gdGhlIGNlbnRyYWwgZ2xvYmUsIGJ1dCBhcmUgb25seSBzaXggaW4gbnVtYmVyLiAKVGhlIHR3ZW50eS1vbmUtYXRvbWVkIGNvbmUgYXQgdGhlIGhlYWQgb2YgdGhlIHNwaWtlIHdlIGhhdmUgCmFscmVhZHkgc2VlbiBpbiBzaWx2ZXIsIGFuZCB3ZSBzaGFsbCBhZ2FpbiBmaW5kIGl0IGluIGlyaWRpdW0gYW5kIApwbGF0aW51bTsgdGhlIHBpbGxhcnMgYXJlIG5ldyBpbiBkZXRhaWwgdGhvdWdoIG5vdCBpbiBwcmluY2lwbGUsIAp0aGUgY29udGFpbmVkIGdsb2JlcyB5aWVsZGluZyBhIHNlcmllcyBvZiBhIHRyaXBsZXQsIHF1aW50ZXQsIHNleHRldCwgCnNlcHRldCwgc2V4dGV0LCBxdWludGV0LCB0cmlwbGV0LiAKClRpbiA6IDggZnVubmVscyBvZiAxNTYgYXRvbXMgLi4uIC4uLiAxMjQ4IAoKNiBzcGlrZXMgb2YgMTI2IOKAniAuLi4gLi4uIDc1NiAKCkNlbnRyYWwgZ2xvYmUgLi4uIC4uLiAuLi4gMTIwIAoKVG90YWwgLi4uIC4uLiAyMTI0IAoKQXRvbWljIHdlaWdodCAuLi4gLi4uIC4uLiBpaTgqaW8gCgpOdW1iZXIgd2VpZ2h0IF5eXiogLi4uIC4uLiAxMTgqMDAgCgpvIDE4IAoKVi4g4oCUIFRoZSBCYXJzIEdyb3Vwcy4gCgpIZXJlLCBmb3IgdGhlIGZpcnN0IHRpbWUsIHdlIGZpbmQgb3Vyc2VsdmVzIGEgbGl0dGxlIGF0IGlzc3VlIHdpdGggCnRoZSBhY2NlcHRlZCBzeXN0ZW0gb2YgY2hlbWlzdHJ5LiBGbHVvcmluZSBzdGFuZHMgYXQgdGhlIGhlYWQgCm9mIGEgZ3JvdXAg4oCUIGNhbGxlZCB0aGUgaW50ZXItcGVyaW9kaWMg4oCUIHdoZXJlb2YgdGhlIHJlbWFpbmluZyAKbWVtYmVycyBhcmUgKHNlZSBDcm9va2VzJyB0YWJsZSwgcC4gMjgpLCBtYW5nYW5lc2UsIGlyb24sIGNvYmFsdCwgCm5pY2tlbCA7IHJ1dGhlbml1bSwgcmhvZGl1bSwgcGFsbGFkaXVtIDsgb3NtaXVtLCBpcmlkaXVtLCAKcGxhdGludW0uIElmIHdlIHRha2UgYWxsIHRoZXNlIGFzIGdyb3VwIFYsIHdlIGZpbmQgdGhhdCBmbHVvcmluZSAKYW5kIG1hbmdhbmVzZSBhcmUgdmlvbGVudGx5IGZvcmNlZCBpbnRvIGNvbXBhbnkgd2F0aCB3aGljaCAKdGhleSBoYXZlIGhhcmRseSBhbnkgcG9pbnRzIG9mIHJlbGF0aW9uc2hpcCwgYW5kIHRoYXQgdGhleSBpbnRydWRlIAppbnRvIGFuIG90aGVyd2lzZSB2ZXJ5IGhhcm1vbmlvdXMgZ3JvdXAgb2YgY2xvc2VseSBzaW1pbGFyIGNvbS0gCnBvc2l0aW9uLiBNb3Jlb3ZlciwgbWFuZ2FuZXNlIHJlcHJvZHVjZXMgdGhlIGNoYXJhY3RlcmlzdGljIApsaXRoaXVtICJzcGlrZSAiIGFuZCBub3QgdGhlIGJhcnMgb2YgdGhvc2UgaW50byB3aG9zZSBjb21wYW55IAppdCBpcyB0aHJ1c3QsIGFuZCBpdCBpcyB0aHVzIGFsbGllZCB3aXRoIGxpdGhpdW0sIHdpdGggd2hpY2ggaW5kZWVkIAppdCBpcyBhbG1vc3QgaWRlbnRpY2FsLiBCdXQgbGl0aGl1bSBpcyBwbGFjZWQgYnkgQ3Jvb2tlcyBhdCB0aGUgCmhlYWQgb2YgYSBncm91cCwgdGhlIG90aGVyIG1lbWJlcnMgb2Ygd2hpY2ggYXJlIHBvdGFzc2l1bSwgCnJ1YmlkaXVtIGFuZCBjb2VzaXVtICh0aGUgbGFzdCBub3QgZXhhbWluZWQpLiBGb2xsb3dpbmcgdGhlc2UgCgoKODYgCgppZGVudGl0aWVzIG9mIGNvbXBvc2l0aW9uLCBJIHRoaW5rIGl0IGlzIGJldHRlciB0byByZW1vdmUgbWFuZ2FuZXNlIAphbmQgZmx1b3JpbmUgZnJvbSB0aGVpciBpbmNvbmdydW91cyBjb21wYW5pb25zIGFuZCBwbGFjZSB0aGVtIAp3aXRoIGh0aGl1bSBhbmQgaXRzIGFsSGVzIGFzIFYgYSwgdGhlIFNwaWtlIEdyb3VwcywgbWFya2luZywgYnkgCnRoZSBpZGVudGl0eSBvZiBudW1iZXIsIHNpbWlsYXJpdGllcyBvZiBhcnJhbmdlbWVudCB3aGljaCBleGlzdCwgCgpQbGF0ZSBYVklJLiAKCgpqeWYtYS9uXiAKCgphbmQgYnkgdGhlIHNlcGFyYXRpb24gdGhlIGRpZmZlcmVuY2VzIG9mIGNvbXBvc2l0aW9uLiBJdCBpcyB3b3J0aCAKd2hpbGUgbm90aW5nIHdoYXQgU2lyIFdpbGxpYW0gQ3Jvb2tlcywgaW4gaGlzICJHZW5lc2lzIG9mIHRoZSAKRWxlbWVudHMsIiByZW1hcmtzIG9uIHRoZSByZWxhdGlvbnMgb2YgdGhlIGludGVycGVyaW9kaWMgZ3JvdXAgCgoKODcgCgp3aXRoIGl0cyBuZWlnaGJvdXJzLiBIZSBzYXlzIDogIlRoZXNlIGJvZGllcyBhcmUgaW50ZXJwZXJpb2RpYyAKYmVjYXVzZSB0aGVpciBhdG9taWMgd2VpZ2h0cyBleGNsdWRlIHRoZW0gZnJvbSB0aGUgc21hbGwgcGVyaW9kcyAKaW50byB3aGljaCB0aGUgb3RoZXIgZWxlbWVudHMgZmFsbCwgYW5kIGJlY2F1c2UgdGhlaXIgY2hlbWljYWwgCnJlbGF0aW9ucyB3aXRoIHNvbWUgbWVtYmVycyBvZiB0aGUgbmVpZ2hib3VyaW5nIGdyb3VwcyBzaG93IAp0aGF0IHRoZXkgYXJlIHByb2JhYmx5IGludGVycGVyaW9kaWMgaW4gdGhlIHNlbnNlIG9mIGJlaW5nIGluIAp0cmFuc2l0aW9uIHN0YWdlcy4iIAoKR3JvdXAgViBpbiBldmVyeSBjYXNlIHNob3dzIGZvdXJ0ZWVuIGJhcnMgcmFkaWF0aW5nIGZyb20gYSAKY2VudHJlIGFzIHNob3duIGluIGlyb24sIFBsYXRlIElWLCBpIChvcHBvc2l0ZSBwLiAzMCkuIFdoaWxlIAp0aGUgZm9ybSByZW1haW5zIHVuY2hhbmdlZCB0aHJvdWdob3V0LCB0aGUgaW5jcmVhc2Ugb2Ygd2VpZ2h0IAppcyBnYWluZWQgYnkgYWRkaW5nIHRvIHRoZSBudW1iZXIgb2YgYXRvbXMgY29udGFpbmVkIGluIGEgYmFyLiAKVGhlIGdyb3VwIGlzIG1hZGUgdXAsIG5vdCBvZiBzaW5nbGUgY2hlbWljYWwgZWxlbWVudHMsIGFzIGluIAphbGwgb3RoZXIgY2FzZXMsIGJ1dCBvZiBzdWItZ3JvdXBzLCBlYWNoIGNvbnRhaW5pbmcgdGhyZWUgZWxlbWVudHMsIAphbmQgdGhlIHJlbGF0aW9ucyB3aXRoaW4gZWFjaCBzdWItZ3JvdXAgYXJlIHZlcnkgY2xvc2UgOyBtb3Jlb3ZlciAKdGhlIHdlaWdodHMgb25seSBkaWZmZXIgYnkgdHdvIGF0b21zIHBlciBiYXIsIG1ha2luZyBhIHdlaWdodCAKZGlmZmVyZW5jZSBvZiB0d2VudHktZWlnaHQgaW4gdGhlIHdob2xlLiBUaHVzIHdlIGhhdmUgcGVyIGJhciA6IOKAlCAKCklyb24gLi4uIC4uLiA3MiBQYWxsYWRpdW0gLi4uIDEzNiAKCk5pY2tlbCAuLi4gNzQgT3NtaXVtIC4uLiAyNDUgCgpDb2JhbHQgLi4uIDc2IElyaWRpdW0gLi4uIDI0NyAKClJ1dGhlbml1bSAuLi4gMTMyIFBsYXRtdW0gQSAyNDkgCgpSaG9kaXVtIC4uLiAxMzQgUGxhdGludW0gQiAyNTcgCgpJdCB3aWxsIGJlIG5vdGljZWQgKFBsYXRlIFhWSUksIDMsIDQsIDUsKSB0aGF0IGVhY2ggYmFyIGhhcyB0d28gCnNlY3Rpb25zLCBhbmQgdGhhdCB0aGUgdGhyZWUgbG93ZXIgc2VjdGlvbnMgaW4gaXJvbiwgY29iYWx0IGFuZCAKbmlja2VsIGFyZSBpZGVudGljYWwgOyBpbiB0aGUgdXBwZXIgc2VjdGlvbnMsIGlyb24gaGFzIGEgY29uZSBvZiAKdHdlbnR5LWVpZ2h0IGF0b21zLCB3aGlsZSBjb2JhbHQgYW5kIG5pY2tlbCBoYXZlIGVhY2ggdGhyZWUgCm92b2lkcywgYW5kIG9mIHRoZXNlIHRoZSBtaWRkbGUgb25lcyBhbG9uZSBkaWZmZXIsIGFuZCB0aGF0IG9ubHkgCmluIHRoZWlyIHVwcGVyIGdsb2JlcywgdGhpcyBnbG9iZSBiZWluZyBmb3VyLWF0b21lZCBpbiBjb2JhbHQgYW5kIApzaXgtYXRvbWVkIGluIG5pY2tlbC4gCgpUaGUgbG9uZyBvdm9pZHMgd2l0aGluIGVhY2ggYmFyIHJldm9sdmUgcm91bmQgdGhlIGNlbnRyYWwgCmF4aXMgb2YgdGhlIGJhciwgcmVtYWluaW5nIHBhcmFsbGVsIHdpdGggaXQsIHdoaWxlIGVhY2ggc3BpbnMgb24gCml0cyBvd24gYXhpcyA7IHRoZSBpcm9uIGNvbmUgc3BpbnMgcm91bmQgYXMgdGhvdWdoIGltcGFsZWQgb24gCnRoZSBheGlzLiAKCklyb24gKFBsYXRlIElWLCBpLCBhbmQgWFZJSSwgMykgOiAKCjE0IGJhcnMgb2YgNzIgYXRvbXMgLi4uIC4uLiAxMDA4IAoKQXRvbWljIHdlaWdodCAuLi4gLi4uIDU1JzQ3IAoKTnVtYmVyIHdlaWdodCBeXl5eIC4uLiAuLi4gNTYtMDAgCgpDb2JhbHQgKFBsYXRlIFhWSUksIDQpIDogCgoxNCBiYXJzIG9mIDc0IGF0b21zIC4uLiAuLi4gMTAzNiAKCkF0b21pYyB3ZWlnaHQgLi4uIC4uLiA1Nyc3byAKCk51bWJlciB3ZWlnaHQgXl4gLi4uIC4uLiA1Nyc1NSAKCgo4OCAKCk5pY2tlbCAoUGxhdGUgWFZJSSwgNCkgOiAKCjE0IGJhcnMgb2YgNzYgYXRvbXMgLi4uIC4uLiAxMDY0IAoKQXRvbWljIHdlaWdodCAuLi4gLi4uIDU4JzMwIAoKTnVtYmVyIHdlaWdodCBeXl4gLi4uIC4uLiA1OSogbiAKCihUaGUgd2VpZ2h0IG9mIGNvYmFsdCwgYXMgZ2l2ZW4gaW4gRXJkbWFubidzIExlaHJidGljaCwgaXMgCjU4KjU1LCBidXQgTWVzc3JzLiBQYXJrZXIgYW5kIFNleHRvbiwgaW4gTmF0dXJlLCBBdWd1c3QgaSwgMTkwNywgCmdpdmUgdGhlIHdlaWdodCwgYXMgdGhlIHJlc3VsdCBvZiB0aGVpciBleHBlcmltZW50cywgYXMgNTc3LikgCgpUaGUgbmV4dCBzdWItZ3JvdXAsIHJ1dGhlbml1bSwgcmhvZGl1bSwgYW5kIHBhbGxhZGl1bSwgaGFzIApub3RoaW5nIHRvIGRldGFpbiB1cy4gSXQgd2lsbCBiZSBvYnNlcnZlZCB0aGF0IGVhY2ggYmFyIGNvbnRhaW5zIAplaWdodCBzZWdtZW50cywgaW5zdGVhZCBvZiB0aGUgc2l4IG9mIGNvYmFsdCBhbmQgbmlja2VsIDsgdGhhdCAKcnV0aGVuaXVtIGFuZCBwYWxsYWRpdW0gaGF2ZSB0aGUgc2FtZSBudW1iZXIgb2YgYXRvbXMgaW4gCnRoZWlyIHVwcGVyIG92b2lkcywgYWx0aG91Z2ggaW4gcnV0aGVuaXVtIGEgdHJpcGxldCBhbmQgcXVhcnRldCAKcmVwcmVzZW50IHRoZSBzZXB0ZXQgb2YgcGFsbGFkaXVtIDsgYW5kIHRoYXQgaW4gcnV0aGVuaXVtIGFuZCAKcmhvZGl1bSB0aGUgbG93ZXIgb3ZvaWRzIGFyZSBpZGVudGljYWwsIHRob3VnaCBvbmUgaGFzIHRoZSAKb3JkZXIgOiBzaXh0ZWVuLCBmb3VydGVlbiwgc2l4dGVlbiwgZm91cnRlZW4gOyBhbmQgdGhlIG90aGVyIDogCmZvdXJ0ZWVuLCBzaXh0ZWVuLCBmb3VydGVlbiwgc2l4dGVlbi4gT25lIGNvbnN0YW50bHkgYXNrcyBvbmUtIApzZWxmIDogV2hhdCBpcyB0aGUgc2lnbmlmaWNhbmNlIG9mIHRoZXNlIG1pbnV0ZSBjaGFuZ2VzID8gCkZ1cnRoZXIgaW52ZXN0aWdhdG9ycyB3aWxsIHByb2JhYmx5IGRpc2NvdmVyIHRoZSBhbnN3ZXIuIAoKUnV0aGVuaXVtIChQbGF0ZSBYVklJSSwgaSkgOiAKCjE0IGJhcnMgb2YgMTMyIGF0b21zIC4uLiAuLi4gMTg0OCAKCkF0b21pYyB3ZWlnaHQgLi4uIC4uLiAxMDAqOTEgCgotTnVtYmVyIHdlaWdodCBeLXx8XiAuLi4gLi4uIDEwMio2NiAKClJob2RpdW0gKFBsYXRlIFhWSUksIDIpIDogCgoxNCBiYXJzIG9mIDEzNCBhdG9tcyAuLi4gLi4uIDE4NzYgCgpBdG9taWMgd2VpZ2h0IC4uLiAuLi4gMTAyKjIzIAoKTnVtYmVyIHdlaWdodCBeLXxwIC4uLiAuLi4gMTA0KjIyIAoKUGFsbGFkaXVtIChYVklJSSwgMyk6IAoKMTQgYmFycyBvZiAxMzYgYXRvbXMgLi4uIC4uLiAxOTA0IAoKQXRvbWljIHdlaWdodCAuLi4gLi4uIDEwNTc0IAoKTnVtYmVyIHdlaWdodCA/Ol5eXiAuLi4gLi4uIDEwNTc3IAoKVGhlIHRoaXJkIHN1Yi1ncm91cCwgb3NtaXVtLCBpcmlkaXVtIGFuZCBwbGF0aW51bSwgaXMsIG9mIApjb3Vyc2UsIG1vcmUgY29tcGxpY2F0ZWQgaW4gaXRzIGNvbXBvc2l0aW9uLCBidXQgaXRzIGJ1aWxkZXJzIApzdWNjZWVkIGluIHByZXNlcnZpbmcgdGhlIGJhciBmb3JtLCBnYWluaW5nIHRoZSBuZWNlc3NhcnkgCmluY3JlYXNlIGJ5IGEgbXVsdGlwbGljYXRpb24gb2YgY29udGFpbmVkIHNwaGVyZXMgd2l0aGluIHRoZSBvdm9pZHMuIApPc21pdW0gaGFzIG9uZSBwZWN1bGlhcml0eSA6IHRoZSBvdm9pZCBtYXJrZWQgYSAoUGxhdGUgWFZJSUksIAo0KSB0YWtlcyB0aGUgcGxhY2Ugb2YgYXhpcyBpbiB0aGUgdXBwZXIgaGFsZiBvZiB0aGUgYmFyLCBhbmQgdGhlIAp0aHJlZSBvdm9pZHMsIG1hcmtlZCBiLCByZXZvbHZlIHJvdW5kIGl0LiBJbiB0aGUgbG93ZXIgaGFsZiwgdGhlIAoKCjg5IAoKZm91ciBvdm9pZHMsIGMsIHJldm9sdmUgcm91bmQgdGhlIGNlbnRyYWwgYXhpcy4gSW4gcGxhdGludW0sIHdlIApoYXZlIG1hcmtlZCB0d28gZm9ybXMgYXMgcGxhdGludW0gQSBhbmQgcGxhdGludW0gQiwgdGhlIGxhdHRlciAKaGF2aW5nIHR3byBmb3VyLWF0b21lZCBzcGhlcmVzIChQbGF0ZSBYVkkgSUksIDYgYikgaW4gdGhlIHBsYWNlIG9mIAp0aGUgdHdvIHRyaXBsZXRzIG1hcmtlZCBhLiBJdCBtYXkgd2VsbCBiZSB0aGF0IHdoYXQgd2UgaGF2ZSBjYWxsZWQgCgpQbGF0ZSBYVklJSS4gCgoKZGZycm9paS10J1RmdHkgCgoKVGlNbGhleW5BQVgvbnYgCgoKKF4gCgooUykgCgpmbykgCgp7ZFwgCgrCqSAKClEgCgpRIAoKUSAKCsKpIAoKMCAKCsKpIAoKwqkgCgpJZ0ogCgppIAoKdsKnSiAKCmkgCgpbOF0gCgprIAoKZmEgCgpCIAoKwqkgCgrCqSAKCsKpIAoKwqkgCgojIAoKW8KnIAoKalxoLm9eWHVqci9pPiAKCgonXmZeZl4gCgoKOTAgCgpwbGF0aW51bSBCIGlzIG5vdCBhIHZhcmlldHkgb2YgcGxhdGludW0sIGJ1dCBhIG5ldyBlbGVtZW50LCB0aGUgCmFkZGl0aW9uIG9mIHR3byBhdG9tcyBpbiBhIGJhciBiZWluZyBleGFjdGx5IHRoYXQgd2hpY2ggc2VwYXJhdGVzIAp0aGUgb3RoZXIgZWxlbWVudHMgd2l0aGluIGVhY2ggb2YgdGhlIHN1Yi1ncm91cHMuIEl0IHdpbGwgYmUgCm5vdGljZWQgdGhhdCB0aGUgZm91ciBsb3dlciBzZWN0aW9ucyBvZiB0aGUgYmFycyBhcmUgaWRlbnRpY2FsIGluIAphbGwgdGhlIG1lbWJlcnMgb2YgdGhpcyBzdWItZ3JvdXAsIGVhY2ggb3ZvaWQgY29udGFpbmluZyB0aGlydHkgCmF0b21zLiBUaGUgdXBwZXIgcmluZyBvZiBvdm9pZHMgaW4gaXJpZGl1bSBhbmQgcGxhdGludW0gQSBhcmUgCmFsc28gaWRlbnRpY2FsLCBidXQgZm9yIHRoZSBzdWJzdGl0dXRpb24sIGluIHBsYXRpbnVtIEEsIG9mIGEgCnF1YXJ0ZXQgZm9yIGEgdHJpcGxldCBpbiB0aGUgc2Vjb25kIGFuZCB0aGlyZCBvdm9pZHMgOyB0aGVpciBjb25lcyAKYXJlIGlkZW50aWNhbCwgY29udGFpbmluZyB0d2VudHktb25lIGF0b21zLCBsaWtlIHRob3NlIG9mIHNpbHZlciAKYW5kIHRpbi4gCgoKT3NtaXVtIChQbGF0ZSBYVklJSSwgNCkgOiAKCjE0IGJhcnMgb2YgMjQ1IGF0b21zIC4uLiAKCuKAouKAoiAzNDMwIAoKQXRvbWljIHdlaWdodCAKCi4uLiAxODktNTUgCgpOdW1iZXIgd2VpZ2h0IC1eIAoKLi4uIDE5MC01NSAKCklyaWRpdW0gKFBsYXRlIFhWSUlJLCA1KTogCgoxNCBiYXJzIG9mIDI0NyBhdG9tcyAuLi4gCgotIDM0NTggCgpBdG9taWMgd2VpZ2h0IAoKLi4uIDE5MS0xMSAKCk51bWJlciB3ZWlnaHQgXl4gCgouLi4gMTkyLTExIAoKUGxhdGludW0gQSAoUGxhdGUgWFZJSUksIDYgYSkgOiAKCjE0IGJhcnMgb2YgMjQ5IGF0b21zIAoKLi4uIDM0ODYgCgpBdG9taWMgd2VpZ2h0IAoKLi4uIDE5My02NiAKCk51bWJlciB3ZWlnaHQgXip8XiAuLi4gCgrigKLigKLigKIgaTkzJzM0IAoKUGxhdGludW0gQiAoUGxhdGUgWFZJSUksIDYgNikgOiAKCjE0IGJhcnMgb2YgMjUxIGF0b21zIC4uLiAKCuKAouKAouKAoiAzNTE0IAoKQXRvbWljIHdlaWdodCAKTnVtYmVyIHdlaWdodCBeeVAgCgouLi4gMTk1LTIyIAoKViBhLiDigJQgVGhlIFNwaWtlIEdyb3Vwcy4gCgpJIHBsYWNlIHdpdGhpbiB0aGlzIGdyb3VwIGxpdGhpdW0sIHBvdGFzc2l1bSwgcnViaWRpdW0sIApmbHVvcmluZSwgYW5kIG1hbmdhbmVzZSwgYmVjYXVzZSBvZiB0aGVpciBzaW1pbGFyaXR5IGluIGludGVybmFsIApjb21wb3NpdGlvbi4gTWFuZ2FuZXNlIGhhcyBmb3VydGVlbiBzcGlrZXMsIGFycmFuZ2VkIGFzIGluIAp0aGUgaXJvbiBncm91cCwgYnV0IHJhZGlhdGluZyBmcm9tIGEgY2VudHJhbCBnbG9iZS4gUG90YXNzaXVtIApoYXMgbmluZSwgcnViaWRpdW0gaGFzIHNpLnh0ZWVuLCBpbiBib3RoIGNhc2VzIHJhZGlhdGluZyBmcm9tIGEgCmNlbnRyYWwgZ2xvYmUuIExpdGhpdW0gKFBsYXRlIElWLCAyKSBhbmQgZmx1b3JpbmUgKFBsYXRlIElWLCAzKSAKYXJlIHRoZSB0d28gdHlwZXMgd2hpY2ggZG9taW5hdGUgdGhlIGdyb3VwLCBsaXRoaXVtIHN1cHBseWluZyAKdGhlIHNwaWtlIHdoaWNoIGlzIHJlcHJvZHVjZWQgaW4gYWxsIG9mIHRoZW0sIGFuZCBmbHVvcmluZSB0aGUgCiIgbml0cm9nZW4gYmFsbG9vbiAiIHdoaWNoIGFwcGVhcnMgaW4gYWxsIHNhdmUgbGl0aGl1bS4gSXQgd2lsbCBiZSAKc2VlbiB0aGF0IHRoZSBuYXR1cmFsIGFmZmluaXRpZXMgYXJlIHN0cm9uZ2x5IG1hcmtlZC4gVGhleSBhcmUgYWxsIAptb25hZHMgYW5kIHBhcmFtYWduZXRpYyA7IGxpdGhpdW0sIHBvdGFzc2l1bSBhbmQgcnViaWRpdW0gYXJlIAoKCjkxIAoKcG9zaXRpdmUsIHdoaWxlIGZsdW9yaW5lIGFuZCBtYW5nYW5lc2UgYXJlIG5lZ2F0aXZlLiBXZSBzZWVtIAp0aHVzIHRvIGhhdmUgYSBwYWlyLCBjb3JyZXNwb25kaW5nIHdpdGggZWFjaCBvdGhlciwgYXMgaW4gb3RoZXIgCmNhc2VzLCBhbmQgdGhlIGludGVycGVyaW9kaWMgZ3JvdXAgaXMgbGVmdCBpbnRlcnBlcmlvZGljIGFuZCAKY29uZ3J1b3VzIHdpdGhpbiBpdHNlbGYuIAoKUGxhdGUgWElYLiAKCjIgSSBeIAoKCjkyIAoKTGl0aGl1bSAoUGxhdGUgSVYsIDIgYW5kIFBsYXRlIFhJWCwgaSkgaXMgYSBzdHJpa2luZyBhbmQgCmJlYXV0aWZ1bCBmb3JtLCB3aXRoIGl0cyB1cHJpZ2h0IGNvbmUsIG9yIHNwaWtlLCBpdHMgZWlnaHQgcmFkaWF0aW5nIApwZXRhbHMgKHgpIGF0IHRoZSBiYXNlIG9mIHRoZSBjb25lLCBhbmQgdGhlIHBsYXRlLWxpa2Ugc3VwcG9ydCBpbiAKdGhlIGNlbnRyZSBvZiB3aGljaCBpcyBhIGdsb2JlLCBvbiB3aGljaCB0aGUgc3Bpa2UgcmVzdHMuIFRoZSAKc3Bpa2UgcmV2b2x2ZXMgc3dpZnRseSBvbiBpdHMgYXhpcywgY2FycnlpbmcgdGhlIHBldGFscyB3aXRoIGl0IDsgdGhlIApwbGF0ZSByZXZvbHZlcyBlcXVhbGx5IHN3aWZ0bHkgaW4gdGhlIG9wcG9zaXRlIGRpcmVjdGlvbi4gV2l0aGluIAp0aGUgc3Bpa2UgYXJlIHR3byBnbG9iZXMgYW5kIGEgbG9uZyBvdm9pZCA7IHRoZSBzcGhlcmVzIHdpdGhpbiAKdGhlIGdsb2JlIHJldm9sdmUgYXMgYSBjcm9zcyA7IHdpdGhpbiB0aGUgb3ZvaWQgYXJlIGZvdXIgc3BoZXJlcyAKY29udGFpbmluZyBhdG9tcyBhcnJhbmdlZCBvbiB0ZXRyYWhlZHJhLCBhbmQgYSBjZW50cmFsIHNwaGVyZSAKd2l0aCBhbiBheGlzIG9mIHRocmVlIGF0b21zIHN1cnJvdW5kZWQgYnkgYSBzcGlubmluZyB3aGVlbCBvZiBzaXguIAoKTElUSElVTTogU3Bpa2Ugb2YgNjMgYXRvbXMgLi4uIC4uLiA2MyAKCjggcGV0YWxzIG9mIDYgYXRvbXMgLi4uIC4uLiA0OCAKCkNlbnRyYWwgZ2xvYmUgb2YgMTYgYXRvbXMgLi4uIDE2IAoKVG90YWwgLi4uIDEyNyAKCkF0b21pYyB3ZWlnaHQgLi4uIC4uLiA2Kjk4IAoKTnVtYmVyIHdlaWdodCBcViDigKLigKLigKIg4oCi4oCi4oCiIDcqMDUgCgpQb3Rhc3NpdW0gKFBsYXRlIFhJWCwgMikgY29uc2lzdHMgb2YgbmluZSByYWRpYXRpbmcgbGl0aGl1bSAKc3Bpa2VzLCBidXQgaGFzIG5vdCBwZXRhbHM7IGl0cyBjZW50cmFsIGdsb2JlIGNvbnRhaW5zIG9uZSBodW5kcmVkIAphbmQgdGhpcnR5LWZvdXIgYXRvbXMsIGNvbnNpc3Rpbmcgb2YgdGhlICIgbml0cm9nZW4gYmFsbG9vbiwiIAplbmNpcmNsZWQgYnkgc2l4IGZvdXItYXRvbWVkIHNwaGVyZXMuIAoKUG90YXNzaXVtOiA5IGJhcnMgb2YgNjMgYXRvbXMuLi4gLi4uIDU2NyAKCkNlbnRyYWwgZ2xvYmUgLi4uIC4uLiAxMzQgCgoKVG90YWwgLi4uIDcwMSAKCgpBdG9taWMgd2VpZ2h0IC4uLiAuLi4gMzgqOTQgCgpOdW1iZXIgd2VpZ2h0IFZWIOKAouKAouKAoiAzOCo4NSAKCihUaGUgd2VpZ2h0LCBhcyBkZXRlcm1pbmVkIGJ5IFJpY2hhcmRzIFtOYXR1cmUsIEp1bHkgMTgsIAoxOTA3XSBpcyAzOSdpaTQtKSAKClJ1YmlkaXVtIDogKFBsYXRlIFhJWCwgMykgYWRkcyBhbiBvdm9pZCwgY29udGFpbmluZyB0aHJlZSAKc3BoZXJlcyDigJQgdHdvIHRyaXBsZXRzIGFuZCBhIHNleHRldCDigJQgdG8gdGhlIGxpdGhpdW0gc3Bpa2UsIG9mIHdoaWNoIAppdCBoYXMgc2l4dGVlbiwgYW5kIGl0cyBjZW50cmFsIGdsb2JlIGlzIGNvbXBvc2VkIG9mIHRocmVlIAoiIGJhbGxvb25zLiIgCgpSdWJpZGl1bSA6IDE2IHNwaWtlcyBvZiA3NSBhdG9tcyAuLi4gMTIwMCAKCkNlbnRyYWwgZ2xvYmUgLi4uIC4uLiAzMzAgCgpUb3RhbCAuLi4gMTUzMCAKCkF0b21pYyB3ZWlnaHQgLi4uIC4uLiA4NCo4NSAKCk51bWJlciB3ZWlnaHQgXl4gLi4uIDg1KjAwIAoKCjkzIAoKVGhlIGNvcnJlc3BvbmRpbmcgbmVnYXRpdmUgZ3JvdXAgY29uc2lzdHMgb25seSBvZiBmbHVvcmluZSAKYW5kIG1hbmdhbmVzZSwgc28gZmFyIGFzIG91ciBpbnZlc3RpZ2F0aW9ucyBoYXZlIGdvbmUuIAoKRmx1b3JpbmUgKFBsYXRlIElWLCAzLCBhbmQgUGxhdGUgWFZJSSwgaSkgaXMgYSBtb3N0IHBlY3VsaWFyIApsb29raW5nIG9iamVjdCBsaWtlIGEgcHJvamVjdGlsZSwgYW5kIGdpdmVzIG9uZSB0aGUgaW1wcmVzc2lvbiAKb2YgYmVpbmcgcmVhZHkgdG8gc2hvb3Qgb2ZmIG9uIHRoZSBzbWFsbGVzdCBwcm92b2NhdGlvbi4gVGhlIAplaWdodCBzcGlrZXMsIHJldmVyc2VkIGZ1bm5lbHMsIGNvbWluZyB0byBhIHBvaW50LCBhcmUgcHJvYmFibHkgCnJlc3BvbnNpYmxlIGZvciB0aGlzIHdhcmxpa2UgYXBwZWFyYW5jZS4gVGhlIHJlbWFpbmRlciBvZiB0aGUgCmJvZHkgaXMgb2NjdXBpZWQgYnkgdHdvICIgYmFsbG9vbnMuIiAKCkZsdW9yaW5rIDogOCBzcGlrZXMgb2YgMTUgYXRvbXMgLi4uIDEyMCAKCjIgYmFsbG9vbnMgLi4uIC4uLiAyMjAgCgpUb3RhbCAuLi4gMzQwIAoKQXRvbWljIHdlaWdodCAuLi4gLi4uIGlTJ2dvIAoKTnVtYmVyIHdlaWdodCDCqzNeby4uLiAuLi4gaTgtODggCgpNYW5nYW5lc2UgKFBsYXRlIFhWSUksIDIpIGhhcyBmb3VydGVlbiBzcGlrZXMgcmFkaWF0aW5nIApmcm9tIGEgY2VudHJhbCAiYmFsbG9vbi4iIAoKTWFuZ2FuZXNlOiAxNCBzcGlrZXMgb2YgNjMgYXRvbXMgLi4uIDg4MiAKQ2VudHJhbCBiYWxsb29uIC4uLiAuLi4gbm8gCgoKVG90YWwgLi4uIFE5MiAKCkF0b21pYyB3ZWlnaHQgLi4uIC4uLiA1NCo1NyAKCk51bWJlciB3ZWlnaHQgVy0g4oCi4oCi4oCiIDU1ICd1IAoKSVguIAoKV2UgaGF2ZSBub3cgdG8gY29uc2lkZXIgdGhlIGJyZWFraW5nIHVwIG9mIHRoZSBvY3RhaGVkcmFsIApncm91cHMsIGFuZCBtb3JlIGFuZCBtb3JlLCBhcyB3ZSBwcm9jZWVkLCBkbyB3ZSBmaW5kIHRoYXQgdGhlIAptb3N0IGNvbXBsaWNhdGVkIGFycmFuZ2VtZW50cyBhcmUgcmVkdWNpYmxlIHRvIHNpbXBsZSBlbGVtZW50cyAKd2hpY2ggYXJlIGFscmVhZHkgZmFtaWxpYXIuIAoKQ2FyYm9uIChQbGF0ZSBJSUksIDUsIGFuZCBYViwgaSkuIAoKQ2FyYm9uIGlzIHRoZSB0eXBpY2FsIG9jdGFoZWRyb24sIGFuZCBhIGNsZWFyIHVuZGVyc3RhbmRpbmcgCm9mIHRoaXMgd2lsbCBlbmFibGUgdXMgdG8gZm9sbG93IGVhc2lseSB0aGUgY29uc3RpdHV0aW9uIGFuZCAKZGlzaW50ZWdyYXRpb24gb2YgdGhlIHZhcmlvdXMgbWVtYmVycyBvZiB0aGVzZSBncm91cHMuIEl0cyAKYXBwZWFyYW5jZSBhcyBhIGNoZW1pY2FsIGF0b20gaXMgc2hvd24gb24gUGxhdGUgSUlJIChvcHBvc2l0ZSAKcC4gMjkpLCBhbmQgc2VlIFBsYXRlIFhWLCBpIChwLiA4MikuIE9uIHRoZSBwcm90byBsZXZlbCB0aGUgY2hlbWljYWwgCmF0b20gYnJlYWtzIHVwIGludG8gZm91ciBzZWdtZW50cywgZWFjaCBjb25zaXN0aW5nIG9mIGEgcGFpciBvZiAKZnVubmVscyBjb25uZWN0ZWQgYnkgYSBzaW5nbGUgYXRvbTsgdGhpcyBpcyB0aGUgcHJvdG8gZWxlbWVudCAKd2hpY2ggYXBwZWFycyBhdCB0aGUgZW5kIG9mIGVhY2ggYXJtIG9mIHRoZSBjcm9zcyBpbiB0aXRhbml1bSAKCgo5NCAKCmFuZCB6aXJjb25pdW0uIE9uIC50aGUgbWV0YSBsZXZlbCB0aGUgZml2ZSBzaXgtYXRvbWVkICIgY2lnYXJzICIgCnNob3cgdHdvIG5ldXRyYWwgY29tYmluYXRpb25zLCBhbmQgdGhlIHRydW5jYXRlZCAiY2lnYXIiIG9mIApmaXZlIGF0b21zIGlzIGFsc28gbmV1dHJhbCA7IHRoZSAiIGxlYXZlcyAiIHlpZWxkIHR3byBmb3JtcyBvZiAKdHJpcGxldCwgZml2ZSBkaWZmZXJlbnQgdHlwZXMgYmVpbmcgdGh1cyB5aWVsZGVkIGJ5IGVhY2ggcGFpciAKb2YgZnVubmVscywgZXhjbHVzaXZlIG9mIHRoZSBsaW5raW5nIGF0b20uIFRoZSBoeXBlciBsZXZlbCBoYXMgCnRyaXBsZXRzLCBkdWFkcyBhbmQgdW5pdHMuIAoKCigwKSBeXikgCgrCriBAIAoKClRpdGFuaXVtIChQbGF0ZSBJSUksIDYsIGFuZCBYViwgMiwgMykuIAoKT24gdGhlIHByb3RvIGxldmVsLCB0aGUgY3Jvc3MgYnJlYWtzIHVwIGNvbXBsZXRlbHksIHNldHRpbmcgCmZyZWUgdGhlIHBhaXJzIG9mIGZ1bm5lbHMgd2l0aCB0aGUgbGlua2luZyBhdG9tIHthIGFuZCBiKSwgYXMgaW4gCmNhcmJvbiwgdGhlIGZvdXIgYm9kaWVzIG1hcmtlZCBjLCB0aGUgdHdlbHZlIG1hcmtlZCBkLCBhbmQgdGhlIApjZW50cmFsIGdsb2JlIG1hcmtlZCBlLiBUaGUgbGF0dGVyIGJyZWFrcyB1cCBhZ2Fpbiwgc2V0dGluZyBmcmVlIAppdHMgZml2ZSBpbnRlcnNlY3RpbmcgY2lnYXItYmVhcmluZyB0ZXRyYWhlZHJhLCB3aGljaCBmb2xsb3cgdGhlaXIgCnVzdWFsIGNvdXJzZSAoc2VlIE9jY3VsdHVtLCBwLiA0NCkuIFRoZSBlaWdodC1hdG9tZWQgYm9keSBpbiAKdGhlIGNlbnRyZSBtYWtlcyBhIHJpbmcgb2Ygc2V2ZW4gYXRvbXMgcm91bmQgYSBjZW50cmFsIG9uZSwgbGlrZSAKdGhhdCBpbiBvY2N1bHR1bSAoc2VlIHAuIDQ0LCBkaWFncmFtIEIpLCBmcm9tIHdoaWNoIGl0IG9ubHkgCmRpZmZlcnMgaW4gaGF2aW5nIHRoZSBjZW50cmFsIGF0b20sIGFuZCBicmVha3MgdXAgc2ltaWxhcmx5LCAKc2V0dGluZyB0aGUgY2VudHJhbCBhdG9tIGZyZWUuIFRoZSBvdm9pZCBjIHNldHMgZnJlZSBpdHMgZm91ciAKY29udGFpbmVkIGdsb2JlcywgYW5kIHRoZSBvdm9pZCBkIHNldHMgZnJlZSB0aGUgdGhyZWUgd2l0aGluIGl0LiAKVGh1cyBzaXh0eS1vbmUgcHJvdG8gZWxlbWVudHMgYXJlIHlpZWxkZWQgYnkgdGl0YW5pdW0uIE9uIHRoZSAKbWV0YSBsZXZlbCwgYyAodGl0YW5pdW0gMykgYnJlYWtzIHVwIGludG8gc3Rhci1saWtlIGFuZCBjcnVjaWZvcm0gCmJvZGllcyA7IHRoZSBjb21wb25lbnQgcGFydHMgb2YgdGhlc2UgYXJlIGVhc2lseSBmb2xsb3dlZCA7IG9uIHRoZSAKaHlwZXIgbGV2ZWwsIG9mIHRoZSBmb3VyIGZvcm1zIG9mIHRyaXBsZXRzIG9uZSBiZWhhdmVzIGFzIGluIGNhcmJvbiwgCgoKOTUgCgphbmQgdGhlIG90aGVycyBhcmUgc2hvd24sIGEsIGIgYW5kIC87IHRoZSBjcnVjaWZvcm0gcXVpbnRldCAKeWllbGRzIGEgdHJpcGxldCBhbmQgYSBkdWFkLCBjIGFuZCBkIDsgdGhlIHRldHJhaGVkcmEgeWllbGQgdHdvIAp0cmlwbGV0cyBnIGFuZCBoLCBhbmQgdHdvIHVuaXRzIDsgdGhlIHNlcHRldCwgYSB0cmlwbGV0IGsgYW5kIGEgCnF1YXJ0ZXQgeS4gT24gdGhlIG1ldGEgbGV2ZWwsIHRoZSBib2RpZXMgZnJvbSBkIGJlaGF2ZSBsaWtlIHRoZWlyIAplcXVpdmFsZW50cyBpbiBzb2RpdW0sIGVhY2ggZCBzaG93cyB0d28gcXVhcnRldHMgYW5kIGEgc2V4dGV0LCAKYnJlYWtpbmcgdXAsIG9uIHRoZSBoeXBlciBsZXZlbCwgaW50byBmb3VyIGR1YWRzIGFuZCB0d28gdHJpYWRzLiAKCgpaaXJjb25pdW0gKFBsYXRlIFhWLCAyLCA1KS4gCgpaaXJjb25pdW0gcmVwcm9kdWNlcyBpbiBpdHMgYyB0aGUgZm91ciBmb3JtcyB0aGF0IHdlIGhhdmUtIAphbHJlYWR5IGZvbGxvd2VkIGluIHRoZSBjb3JyZXNwb25kaW5nIGMgb2YgdGl0YW5pdW0sIGFuZCBhcyAKdGhlc2UgYXJlIHNldCBmcmVlIG9uIHRoZSBwcm90byBsZXZlbCwgYW5kIGZvbGxvdyB0aGUgc2FtZSBjb3Vyc2UgCm9uIHRoZSBtZXRhIGFuZCBoeXBlciBsZXZlbHMsIHdlIG5lZWQgbm90IHJlcGVhdCB0aGVtLiBUaGUgCmNlbnRyYWwgZ2xvYmUgb2YgemlyY29uaXVtIGMgc2V0cyBmcmVlIGl0cyBuaW5lIGNvbnRhaW5lZCBib2RpZXMgOyAKZWlnaHQgb2YgdGhlc2UgYXJlIHNpbWlsYXIgYW5kIGFyZSBmaWd1cmVkIGluIHRoZSBkaWFncmFtIDsgaXQgd2lsbCAKYmUgb2JzZXJ2ZWQgdGhhdCB0aGUgY2VudHJhbCBib2R5IGlzIHRoZSB0cnVuY2F0ZWQgImNpZ2FyIiBvZiAKY2FyYm9uIDsgdGhlaXIgYmVoYXZpb3VyIG9uIHRoZSBtZXRhIGFuZCBoeXBlciBsZXZlbHMgaXMgZWFzaWx5IApmb2xsb3dlZCB0aGVyZS4gVGhlIGNlbnRyYWwgc3BoZXJlIGlzIGFsc28gZmlndXJlZCA7IHRoZSBjaWdhciAKZm9sbG93cyBpdHMgdXN1YWwgY291cnNlLCBhbmQgaXRzIGNvbXBhbmlvbnMgdW5pdGUgaW50byBhIHNleHRldCAKYW5kIGFuIG9jdGV0LiBUaGUgZCBvdm9pZCBsaWJlcmF0ZXMgZml2ZSBib2RpZXMsIGZvdXIgb2Ygd2hpY2ggCndlIGhhdmUgYWxyZWFkeSBzZWVuIGluIHRpdGFuaXVtLCBhcyB0aGUgY3Jvc3NlcyBhbmQgc2V4dGV0IG9mIApzb2RpdW0sIGFuZCB3aGljaCBhcmUgZmlndXJlZCB1bmRlciB0aXRhbml1bSA7IHRoZSBmb3VyIHF1YXJ0ZXRzIAp3aXRoaW4gdGhlIGxhcmdlciBnbG9iZSBhbHNvIGZvbGxvdyBhIHNvZGl1bSBtb2RlbCwgYW5kIGFyZSAKZ2l2ZW4gYWdhaW4uIAoKCjk2IAoKU2lsaWNvbiAoUGxhdGUgWFZJLCBpKS4gCgpJbiBzaWxpY29uLCB0aGUgb3ZvaWRzIGFyZSBzZXQgZnJlZSBmcm9tIHRoZSBmdW5uZWxzIG9uIHRoZSAKcHJvdG8gbGV2ZWwsIGFuZCB0aGUgdHJ1bmNhdGVkICIgY2lnYXIsIiBwbGF5aW5nIHRoZSBwYXJ0IG9mIGEgbGVhZiwgCmlzIGFsc28gbGliZXJhdGVkLiBUaGlzLCBhbmQgdGhlIGZvdXIgJycgY2lnYXJzLCIgd2hpY2ggZXNjYXBlIApmcm9tIHRoZWlyIG92b2lkcywgcGFzcyBhbG9uZyB0aGVpciB1c3VhbCBjb3Vyc2UuIFRoZSBxdWludGV0IAphbmQgcXVhcnRldCByZW1haW4gdG9nZXRoZXIsIGFuZCBmb3JtIGEgbmluZS1hdG9tZWQgYm9keSBvbiAKdGhlIG1ldGEgbGV2ZWwsIHlpZWxkaW5nIGEgc2V4dGV0IGFuZCBhIHRyaXBsZXQgb24gdGhlIGh5cGVyLiAKCgpHZXJtYW5pdW0gKFBsYXRlIFhWSSwgMiwgNCkuIAoKVGhlIGNlbnRyYWwgZ2xvYmUsIHdpdGggaXRzIHR3byAiIGNpZ2FyICItYmVhcmluZyB0ZXRyYWhlZHJhLCAKbmVlZCBub3QgZGVsYXkgdXMgOyB0aGUgdGV0cmFoZWRyYSBhcmUgc2V0IGZyZWUgYW5kIGZvbGxvdyB0aGUgCm9jY3VsdHVtIGRpc2ludGVncmF0aW9uLCBhbmQgdGhlIGNlbnRyYWwgZm91ciBhdG9tcyBpcyB0aGUgc29kaXVtIApjcm9zcyB0aGF0IHdlIGhhZCBpbiB0aXRhbml1bS4gVGhlIG92b2lkcyAoWFZJLCA0KSBhcmUgbGliZXJhdGVkIApvbiB0aGUgcHJvdG8gbGV2ZWwsIGFuZCB0aGUgImNpZ2FyLCIgYXMgdXN1YWwsIGJ1cnN0cyBpdHMgd2F5IAp0aHJvdWdoIGFuZCBnb2VzIGFsb25nIGl0cyBhY2N1c3RvbWVkIHBhdGguIFRoZSBvdGhlcnMgcmVtYWluIApsaW5rZWQgb24gdGhlIG1ldGEgbGV2ZWwsIGFuZCBicmVhayB1cCBpbnRvIHR3byB0cmlhbmdsZXMgYW5kIGEgCnF1aW50ZXQgb24gdGhlIGh5cGVyLiAKClRpbiAoUGxhdGUgWFZJLCAzLCA0KS4gCgpIZXJlIHdlIGhhdmUgb25seSB0aGUgc3Bpa2UgdG8gY29uc2lkZXIsIGFzIHRoZSBmdW5uZWxzIGFyZSAKdGhlIHNhbWUgYXMgaW4gZ2VybWFuaXVtLCBhbmQgdGhlIGNlbnRyYWwgZ2xvYmUgaXMgdGhhdCBvZiAKdGl0YW5pdW0sIG9taXR0aW5nIHRoZSBlaWdodCBhdG9tZWQgY2VudHJlLiBUaGUgY29uZSBvZiB0aGUgCnNwaWtlIHdlIGhhdmUgaGFkIGluIHNpbHZlciAoc2VlIHAuIDcyOSwgTWF5KSwgYW5kIGl0IGlzIHNldCBmcmVlIG9uIAoKCjk3IAoKdGhlIHByb3RvIGxldmVsLiBUaGUgc3Bpa2UsIGFzIGluIHppbmMsIGJlY29tZXMgYSBsYXJnZSBzcGhlcmUsIAp3aXRoIHRoZSBzaW5nbGUgc2VwdGV0IGluIHRoZSBjZW50cmUsIHRoZSByZW1haW5pbmcgc2l4IGJvZGllcyAKY2lyY2xpbmcgcm91bmQgaXQgb24gZGlmZmVyaW5nIHBsYW5lcy4gVGhleSBicmVhayB1cCBhcyBzaG93bi4gCihUaW4gaXMgU24uKSAKCklyb24gKFBsYXRlIElWLCBpLCBhbmQgWFZJSSwgMykuIAoKV2UgaGF2ZSBhbHJlYWR5IGRlYWx0IHdpdGggdGhlIGFmZmluaXRpZXMgb2YgdGhpcyBwZWN1bGlhciAKZ3JvdXAsIGFuZCB3ZSBzaGFsbCBzZWUsIGluIHRoZSBkaXNpbnRlZ3JhdGlvbiwgZXZlbiBtb3JlIGNsZWFybHksIAp0aGUgY2xvc2UgcmVsYXRpb25zaGlwcyB3aGljaCBleGlzdCBhY2NvcmRpbmcgdG8gdGhlIGNsYXNzaWZpY2F0aW9uIAp3aGljaCB3ZSBoZXJlIGZvbGxvdy4gCgpUaGUgZm91cnRlZW4gYmFycyBvZiBpcm9uIGJyZWFrIGFzdW5kZXIgb24gdGhlIHByb3RvIGxldmVsLCAKYW5kIGVhY2ggc2V0cyBmcmVlIGl0cyBjb250ZW50cyDigJQgYSBjb25lIGFuZCB0aHJlZSBvdm9pZHMsIHdoaWNoIGFzIAp1c3VhbCwgYmVjb21lIHNwaGVyZXMuIFRoZSB0d2VudHktZWlnaHQtYXRvbWVkIGNvbmUgYmVjb21lcyAKYSBmb3VyLXNpZGVkIGZpZ3VyZSwgYW5kIHRoZSBvdm9pZHMgc2hvdyBjcnlzdGFsbGluZSBjb250ZW50cy4gClRoZXkgYnJlYWsgdXAsIG9uIHRoZSBtZXRhIGxldmVsIGFzIHNob3duIGluIHRoZSBkaWFncmFtLCBhbmQgCmFyZSBhbGwgcmVkdWNlZCB0byB0cmlwbGV0cyBhbmQgZHVhZHMgb24gdGhlIGh5cGVyIGxldmVsLiAKCkNvYmFsdCAoUGxhdGUgWFZJSSwgNCkuIAoKVGhlIG92b2lkcyBpbiBjb2JhbHQgYXJlIGlkZW50aWNhbCB3aXRoIHRob3NlIG9mIGlyb24gOyB0aGUgCmhpZ2hlciBvdm9pZHMsIHdoaWNoIHJlcGxhY2UgdGhlIGNvbmUgb2YgaXJvbiwgc2hvdyBwZXJzaXN0ZW50bHkgCnRoZSBjcnlzdGFsbGluZSBmb3JtcyBzbyBub3RpY2VhYmxlIHRocm91Z2hvdXQgdGhpcyBncm91cC4gCgpOaWNrZWwgKFBsYXRlIFhWSUksIDUpLiAKClRoZSB0d28gYWRkaXRpb25hbCBhdG9tcyBpbiBhIGJhciwgd2hpY2ggYWxvbmUgc2VwYXJhdGUgCm5pY2tlbCBmcm9tIGNvYmFsdCwgYXJlIHNlZW4gaW4gdGhlIHVwcGVyIHNwaGVyZSBvZiB0aGUgY2VudHJhbCAKb3ZvaWQuIAoKUnV0aGVuaXVtIChQbGF0ZSBYVklJSSwgaSkuIAoKVGhlIGxvd2VyIG92b2lkcyBpbiBydXRoZW5pdW0gYXJlIGlkZW50aWNhbCBpbiBjb21wb3NpdGlvbiwgCndpdGggdGhvc2Ugb2YgaXJvbiwgY29iYWx0IGFuZCBuaWNrZWwgYW5kIG1heSBiZSBzdHVkaWVkIHVuZGVyIApJcm9uLiBUaGUgdXBwZXIgb25lcyBvbmx5IGRpZmZlciBieSB0aGUgYWRkaXRpb24gb2YgYSB0cmlwbGV0LiAKClJob2RpdW0gKFBsYXRlIFhWSUlJLCAyKS4gCgpSaG9kaXVtIGhhcyBhIHNlcHRldCwgd2hpY2ggaXMgdG8gYmUgc2VlbiBpbiB0aGUgYyBvZiB0aXRhbml1bSAKKHNlZSBrIGluIHRoZSB0aXRhbml1bSBkaWFncmFtKSBhbmQgZGlmZmVycyBvbmx5IGluIHRoaXMgZnJvbSBpdHMgCmdyb3VwLiAKClBhbGxhZGl1bSAoUGxhdGUgWFZJSUksIDMpLiAKCkluIHBhbGxhZGl1bSB0aGlzIHNlcHRldCBhcHBlYXJzIGFzIHRoZSB1cHBlciBzcGhlcmUgaW4gZXZlcnkgCm92b2lkIG9mIHRoZSB1cHBlciByaW5nLiAKNyAKCgo5OCAnIAoKT3NtaXVtIChQbGF0ZSBYVklJSSwgNCkuIAoKV2UgaGF2ZSBoZXJlIG5vIG5ldyBjb25zdGl0dWVudHMgOyB0aGUgb3ZvaWRzIGFyZSBzZXQgZnJlZSAKb24gdGhlIHByb3RvIGxldmVsIGFuZCB0aGUgY29udGFpbmVkIGdsb2JlcyBvbiB0aGUgbWV0YSwgYWxsIApiZWluZyBvZiBmYW1pbGlhciBmb3Jtcy4gVGhlIGNpZ2FycywgYXMgdXN1YWwsIGJyZWFrIGZyZWUgb24gdGhlIApwcm90byBsZXZlbCwgYW5kIGxlYXZlIHRoZWlyIG92b2lkIHdpdGggb25seSBmb3VyIGNvbnRhaW5lZCAKc3BoZXJlcywgd2hpY2ggdW5pdGUgaW50byB0d28gbmluZS1hdG9tZWQgYm9kaWVzIGFzIGluIHNpbGljb24gCihzZWUgYWJvdmUpLiAKCklyaWRpdW0gKFBsYXRlIFhWSUlJLCA1LikgCgpUaGUgdHdlbnR5LW9uZS1hdG9tZWQgY29uZSBvZiBzaWx2ZXIgaGVyZSByZWFwcGVhcnMsIGFuZCAKaXRzIHByb2NlZWRpbmdzIG1heSBiZSBmb2xsb3dlZCB1bmRlciB0aGF0IG1ldGFsIChzZWUgZGlhZ3JhbSwgCnAuIDcyOSwgTWF5KS4gVGhlIHJlbWFpbmluZyBib2RpZXMgY2FsbCBmb3Igbm8gcmVtYXJrLiAKCgpQbGF0aW51bSAoUGxhdGUgWFZJSUksIDYpLiAKCkFnYWluIHRoZSBzaWx2ZXIgY29uZSBpcyB3aXRoIHVzLiBUaGUgcmVtYWluaW5nIGJvZGllcyBhcmUgCnNldCBmcmVlIG9uIHRoZSBwcm90byBsZXZlbCwgYW5kIHRoZWlyIGNvbnRhaW5lZCBzcGhlcmVzIG9uIHRoZSAKbWV0YS4gCgpMaXRoaXVtIChQbGF0ZSBJViwgMiwgYW5kIFhJWCwgaSkuIAoKSGVyZSB3ZSBoYXZlIHNvbWUgbmV3IGNvbWJpbmF0aW9ucywgd2hpY2ggcmVjdXIgcGVyLSAKc2lzdGVudGx5IGluIGl0cyBhbGxpZXMuIFRoZSBib2RpZXMgYSwgaW4gUGxhdGUgWElYLCBpLCBhcmUgYXQgdGhlIAp0b3AgYW5kIGJvdHRvbSBvZiB0aGUgZWxsaXBzZSA7IHRoZXkgY29tZSB0byByaWdodCBhbmQgbGVmdCBvZiBpdCAKaW4gdGhlIHByb3RvIHN0YXRlLCBhbmQgZWFjaCBtYWtlcyBhIHR3ZWx2ZS1hdG9tZWQgYm9keSBvbiB0aGUgCm1ldGEgbGV2ZWwuIAoKCjk5IAoKVGhlIGZpdmUgYm9kaWVzIHdpdGhpbiB0aGUgZWxIcHNlLCB0aHJlZSBtb25hZHMgYW5kIHR3byAKc2V4dGV0cywgc2hvdyB0d28gd2hpY2ggd2UgaGF2ZSBoYWQgYmVmb3JlIDogZCwgd2hpY2ggYmVoYXZlcyAKSGtlIHRoZSBxdWludGV0IGFuZCBxdWFydGV0IGluIHNpbGljb24sIGFmdGVyIHRoZWlyIGp1bmN0aW9uLCAKYW5kIGIsIHdoaWNoIHdlIGhhdmUgaGFkIGluIGlyb24uIFRoZSB0d28gYm9kaWVzIGMgYXJlIGEgCnZhcmlhbnQgb2YgdGhlIHNxdWFyZS1iYXNlZCBweXJhbWlkLCBvbmUgYXRvbSBhdCB0aGUgYXBleCwgYW5kIAp0d28gYXQgZWFjaCBvZiB0aGUgb3RoZXItIGFuZ2xlcy4gVGhlIGdsb2JlLCBlLCBpcyBhIG5ldyBmb3JtLCAKdGhlIGZvdXIgdGV0cmFoZWRyYSBvZiB0aGUgcHJvdG8gbGV2ZWwgbWFraW5nIGEgc2luZ2xlIHR3ZWx2ZS0gCmF0b21lZCBvbmUgb24gdGhlIG1ldGEuIFRoZSBib2R5IGEgc3BsaXRzIHVwIGludG8gdHJpcGxldHMgb24gCnRoZSBoeXBlciA7IGIgYW5kIGQgZm9sbG93IHRoZWlyIGlyb24gYW5kIHNpbGljb24gbW9kZWxzIDsgZCB5aWVsZHMgCmZvdXIgZHVhZHMgYW5kIGEgdW5pdCA7IGUgYnJlYWtzIGludG8gZm91ciBxdWFydGV0cy4gCgoKUG90YXNzaXVtIChQbGF0ZSBYSVgsIDIpLiAKClBvdGFzc2l1bSByZXBlYXRzIHRoZSBsaXRoaXVtIHNwaWtlIDsgdGhlIGNlbnRyYWwgZ2xvYmUgc2hvd3MgCnRoZSAiIG5pdHJvZ2VuIGJhbGxvb24sIiB3aGljaCB3ZSBhbHJlYWR5IGtub3csIGFuZCB3aGljaCBpcyAKc3Vycm91bmRlZCBvbiB0aGUgcHJvdG8gbGV2ZWwgd2l0aCBzaXggdGV0cmFoZWRyYSwgd2hpY2ggYXJlIHNldCAKZnJlZSBvbiB0aGUgbWV0YSBhbmQgYmVoYXZlIGFzIGluIGNvYmFsdC4gSGVuY2Ugd2UgaGF2ZSAKbm90aGluZyBuZXcuIAoKUnViaWRpdW0gKFBsYXRlIFhJWCwgMykuIAoKQWdhaW4gdGhlIGxpdGhpdW0gc3Bpa2UsIG1vZGlmaWVkIHNsaWdodGx5IGJ5IHRoZSBpbnRyb2R1Y3Rpb24gCm9mIGFuIG92b2lkLCBpbiBwbGFjZSBvZiB0aGUgdG9wIHNwaGVyZTsgdGhlIGZvcm1zIGhlcmUgYXJlIHNvbWUtIAp3aGF0IHVudXN1YWwsIGFuZCB0aGUgdHJpYW5nbGVzIG9mIHRoZSBzZXh0ZXQgcmV2b2x2ZSByb3VuZCBlYWNoIApvdGhlciBvbiB0aGUgbWV0YSBsZXZlbCA7IGFsbCB0aGUgdHJpYWRzIGJyZWFrIHVwIG9uIHRoZSBoeXBlciAKbGV2ZWwgaW50byBkdWFkcyBhbmQgdW5pdHMuIAoKCmxPTyAKCgpGbHVvcmluZSAoUGxhdGUgSVYsIDMsIGFuZCBQbGF0ZSBYVklJLCBpKS4gCgpUaGUgcmV2ZXJzZWQgZnVubmVscyBvZiBmbHVvcmluZSBzcGxpdCBhc3VuZGVyIG9uIHRoZSBwcm90byAKbGV2ZWwsIGFuZCBhcmUgc2V0IGZyZWUsIHRoZSAiYmFsbG9vbnMiIGFsc28gZmxvYXRpbmcgb2ZmIGluLSAKZGVwZW5kZW50bHkuIFRoZSBmdW5uZWxzLCBhcyB1c3VhbCwgYmVjb21lIHNwaGVyZXMsIGFuZCBvbiB0aGUgCm1ldGEgbGV2ZWwgc2V0IGZyZWUgdGhlaXIgY29udGFpbmVkIGJvZGllcywgdGhyZWUgcXVhcnRldHMgYW5kIGEgCnRyaXBsZXQgZnJvbSBlYWNoIG9mIHRoZSBlaWdodC4gVGhlIGJhbGxvb25zIGRpc2ludGVncmF0ZSBpbiB0aGUgCnVzdWFsIHdheS4gCgpNYW5nYW5lc2UgKFBsYXRlIFhWSUksIDIpLiAKCk1hbmdhbmVzZSBvZmZlcnMgdXMgbm90aGluZyBuZXcsIGJlaW5nIGNvbXBvc2VkIG9mIAoibGl0aGl1bSBzcGlrZXMiIGFuZCAibml0cm9nZW4gYmFsbG9vbnMuIiAKClguIAoKVkkuIOKAlCBUaGUgU3RhciBHcm91cHMuIAoKV2UgaGF2ZSBub3cgcmVhY2hlZCB0aGUgbGFzdCBvZiB0aGUgZ3JvdXBzIGFzIGFycmFuZ2VkIG9uIApTaXIgV2lsbGlhbSBDcm9va2VzJyBsZW1uaXNjYXRlcywgdGhhdCBmb3JtaW5nIHRoZSAiIG5ldXRyYWwgCmNvbHVtbiA7IGl0IGlzIGhlYWRlZCBieSBoZWxpdW0sIHdoaWNoIGlzIHN1aSBnZW5lcmlzLiBUaGUgCnJlbWFpbmRlciBhcmUgaW4gdGhlIGZvcm0gb2YgYSBmbGF0IHN0YXIgKHNlZSBQbGF0ZSBJViwgNCksIHdpdGggYSAKY2VudHJlIGZvcm1lZCBvZiBmaXZlIGludGVyc2VjdGluZyBhbmQgImNpZ2FyICItYmVhcmluZyB0ZXRyYWhlZHJhLCAKYW5kIHNpeCByYWRpYXRpbmcgYXJtcy4gVGVuIG9mIHRoZXNlIGhhdmUgYmVlbiBvYnNlcnZlZCwgZml2ZSAKcGFpcnMgaW4gd2hpY2ggdGhlIHNlY29uZCBtZW1iZXIgZGlmZmVycyBidXQgc2xpZ2h0bHkgZnJvbSB0aGUgCmZpcnN0IDsgdGhleSBhcmUgOiBOZW9uLCBNZXRhLW5lb24gOyBBcmdvbiwgTWV0YXJnb24gOyBLcnlwdG9uLCAKTWV0YS1rcnlwdG9uIDsgWGVub24sIE1ldGEteGVub24gOyBLYWxvbiwgTWV0YS1rYWxvbiA7IHRoZSAKbGFzdCBwYWlyIGFuZCB0aGUgbWV0YSBmb3JtcyBhcmUgbm90IHlldCBkaXNjb3ZlcmVkIGJ5IGNoZW1pc3RzLiAKVGhlc2UgYWxsIHNob3cgdGhlIHByZXNlbmNlIG9mIGEgcGVyaW9kaWMgbGF3IDsgdGFraW5nIGFuIGFybSBvZiAKdGhlIHN0YXIgaW4gZWFjaCBvZiB0aGUgZml2ZSBwYWlycywgd2UgZmluZCB0aGUgbnVtYmVyIG9mIGF0b21zIHRvIApiZSBhcyBmb2xsb3dzIDog4oCUIAoKNDAgOTkgMjI0IDM2MyA0ODkgCgo0NyAxMDYgMjMxIDM3MCA0OTYgCgpJdCB3aWxsIGJlIG9ic2VydmVkIHRoYXQgdGhlIG1ldGEgZm9ybSBpbiBlYWNoIGNhc2Ugc2hvd3MgCnNldmVuIG1vcmUgYXRvbXMgdGhhbiBpdHMgZmVsbG93LiAKCkhlbGl1bSAoUGxhdGUgSUlJLCA1LCBhbmQgUGxhdGUgWFgsIGkpIHNob3dzIHR3byAiY2lnYXIiLSAKYmVhcmluZyB0ZXRyYWhlZHJhLCBhbmQgdHdvIGh5ZHJvZ2VuIHRyaWFuZ2xlcywgdGhlIHRldHJhaGVkcmEgCnJldm9sdmluZyByb3VuZCBhbiBlZ2ctc2hhcGVkIGNlbnRyYWwgYm9keSwgYW5kIHRoZSB0cmlhbmdsZXMgCnNwaW5uaW5nIG9uIHRoZWlyIG93biBheGVzIHdoaWxlIHBlcmZvcm1pbmcgYSBzaW1pbGFyIHJldm9sdXRpb24uIApUaGUgd2hvbGUgaGFzIGFuIGF0dHJhY3RpdmVseSBhaXJ5IGFwcGVhcmFuY2UsIGFzIG9mIGEgZmFpcnkgCmVsZW1lbnQuIAoKCmxPSSAKCgpIZWxpdW0gOiBUd28gdGV0cmFoZWRyYSBvZiAyNCBhdG9tcyAKVHdvIHRyaWFuZ2xlcyBvZiA5IGF0b21zIApDZW50cmFsIGVnZyAuLi4gCgoKNDggCgoxOCAKCjYgCgoKVG90YWwgCgoKQXRvbWljIHdlaWdodCAKTnVtYmVyIHdlaWdodCBmZiAKClBsYXRlIFhYLiAKCgo3MiAKCjMqOTQgCjQqb28gCgoKSTAyIAoKTmVvbiAoUGxhdGUgWFgsIDIgYW5kIDYpIGhhcyBzaXggYXJtcyBvZiB0aGUgcGF0dGVybiBzaG93biAKaW4gMiwgcmFkaWF0aW5nIGZyb20gdGhlIGNlbnRyYWwgZ2xvYmUuIAoKTmVvbiA6IFNpeCBhcm1zIG9mIDQwIGF0b21zIC4uLiAuLi4gMjQwIAoKMTIwIAoKCkNlbnRyYWwgdGV0cmFoZWRyYSAKClRvdGFsIAoKQXRvbWljIHdlaWdodCAuLi4gCk51bWJlciB3ZWlnaHQgXiAKCgozNjAgCjE5LTkwIAoKMjAtMDAgCgoKTSBldGEtTmVvbiAoUGxhdGUgWFgsIDMgYW5kIDYpIGRpZmZlcnMgZnJvbSBpdHMgY29tcmFkZSBieSAKdGhlIGluc2VydGlvbiBvZiBhbiBhZGRpdGlvbmFsIGF0b20gaW4gZWFjaCBvZiB0aGUgZ3JvdXBzIGluY2x1ZGVkIAppbiB0aGUgc2Vjb25kIGJvZHkgd2l0aGluIGl0cyBhcm0sIGFuZCBzdWJzdGl0dXRpbmcgYSBzZXZlbi0gCmF0b21lZCBncm91cCBmb3Igb25lIG9mIHRoZSB0cmlwbGV0cyBpbiBuZW9uLiAKCk1ldGEtTmVvbiA6IFNpeCBhcm1zIG9mIDQ3IGF0b21zIC4uLiAyODIgCgpDZW50cmFsIHRldHJhaGVkcmEgLi4gLiAuLi4gMTIwIAoKClRvdGFsIC4uLiAuLi4gNDAyIAoKQXRvbWljIHdlaWdodCAuLi4gLi4uIAoKTnVtYmVyIHdlaWdodCBeXiAuLi4gMjIqMzMgCgpBcmdvbiAoUGxhdGUgWFgsIDQsIDYgYW5kIDcpIHNob3dzIHdpdGhpbiBpdHMgYXJtcyB0aGUgYiA2MyAKd2hpY2ggd2UgbWV0IGluIG5pdHJvZ2VuLCB5dHRyaXVtLCB2YW5hZGl1bSBhbmQgbm9iaXVtLCBidXQgCm5vdCB0aGUgImJhbGxvb24sIiB3aGljaCB3ZSBzaGFsbCBmaW5kIHdpdGggaXQgaW4ga3J5cHRvbiBhbmQgaXRzIApjb25nZW5lcnMuIAoKQXJnb24gOiBTaXggYXJtcyBvZiA5OSBhdG9tcyAuLi4gLi4uIDU5NCAKCkNlbnRyYWwgdGV0cmFoZWRyYSAuLi4gLi4uIDEyMCAKCgpUb3RhbCA3MTQgCgoKQXRvbWljIHdlaWdodCAuLi4gLi4uIDM5KjYwIAoKTnVtYmVyIHdlaWdodCBeXiAuLi4gLi4uIDM5KjY2IAoKTWV0YXJnb24gKFBsYXRlIFhYLCA1LCA2IGFuZCA3KSBhZ2FpbiBzaG93cyBvbmx5IGFuIAphZGRpdGlvbmFsIHNldmVuIGF0b21zIGluIGVhY2ggYXJtLiAKCk1hdCBhcmdvbiA6IFNpeCBhcm1zIG9mIDEwNiBhdG9tcyAuLi4gNjM2IAoKQ2VudHJhbCB0ZXRyYWhlZHJhIC4uLiAuLi4gMTIwIAoKClRvdGFsIC4uLiA3NTYgCgpBdG9taWMgd2VpZ2h0IC4uLiAuLi4gCgpOdW1iZXIgd2VpZ2h0ICdqXicnIC4uLiA0MiAKCgpJMDMgCgpLcnlwdG9uIChQbGF0ZSBYWEksIGkgYW5kIDQsIGFuZCBQbGF0ZSBYWCwgNiBhbmQgNykgCmNvbnRhaW5zIHRoZSBuaXRyb2dlbiAiIGJhbGxvb24sIiBlbG9uZ2F0ZWQgYnkgaXRzIGp1eHRhcG9zaXRpb24gCnRvIGIgNjMuIFRoZSBjZW50cmFsIHRldHJhaGVkcmEgYXBwZWFyIGFzIHVzdWFsLiAKCktyeXB0b24gOiBTaXggYXJtcyBvZiAyMjQgYXRvbXMgLi4uIDEzNDQgCgpDZW50cmFsIHRldHJhaGVkcmEgLi4uIC4uLiAxMjAgCgpUb3RhbCAuLi4gMTQ2NCAKCgpBdG9taWMgd2VpZ2h0IC4uLiAuLi4gODEqMjAgCgpOdW1iZXIgd2VpZ2h0ID8tfHxeIC4uLiA4MS0zMyAKCk0gZXRhLUtyeXB0b24gZGlmZmVycyBvbmx5IGZyb20ga3J5cHRvbiBieSB0aGUgc3Vic3RpdHV0aW9uIApvZiB6IGZvciB5IGluIGVhY2ggYXJtIG9mIHRoZSBzdGFyLiAKCk1ldGEtS3J5cHRvbiA6IFNpeCBhcm1zIG9mIDIzMSBhdG9tcyAuLi4gMTM4NiAKQ2VudHJhbCB0ZXRyYWhlZHJhIC4uLiAxMjAgCgoKVG90YWwgLi4uIDE1MDYgCgoKQXRvbWljIHdlaWdodCAuIC4uLiAKCk51bWJlciB3ZWlnaHQgaXwtfF4gLi4uIDgzKjY2IAoKWmVub24gKFBsYXRlIFhYSSwgMiBhbmQgNCwgYW5kIFBsYXRlIFhYLCA2IGFuZCA3KSBoYXMgYSAKcGVjdWxpYXJpdHkgc2hhcmVkIG9ubHkgYnkga2Fsb24sIHRoYXQgeCBhbmQgeSBhcmUgYXN5bW1ldHJpY2FsLCAKdGhlIGNlbnRyZSBvZiBvbmUgaGF2aW5nIHRocmVlIGF0b21zIGFuZCB0aGUgY2VudHJlIG9mIHRoZSBvdGhlciAKdHdvLiBJcyB0aGlzIGRvbmUgaW4gb3JkZXIgdG8gcHJlc2VydmUgdGhlIGRpZmZlcmVuY2Ugb2Ygc2V2ZW4gCmZyb20gaXRzIGNvbXJhZGUgPyAKClplbm9uIDogU2l4IGFybXMgb2YgMzYzIGF0b21zIC4uLiAuLi4gMjE3OCAKCkNlbnRyYWwgdGV0cmFoZWRyYSAuLi4gLi4uIDEyMCAKCgpUb3RhbCAuLi4gMjI5OCAKCkF0b21pYyB3ZWlnaHQgLi4uIC4uLiBpMjciaW8gCgpOdW1iZXIgd2VpZ2h0IF4xMV4gLi4uIC4uLiAxMjctNjYgCgpNZXRhLVplbm9uIGRpZmZlcnMgZnJvbSB6ZW5vbiBvbmx5IGJ5IHRoZSBzdWJzdGl0dXRpb24gb2YgCnR3byBzJ3MgZm9yIFggYW5kIHkuIAoKTWV0YS1aZW5vbiA6IFNpeCBhcm1zIG9mIDM3MCBhdG9tcyAuLi4gMjIyMCAKCkNlbnRyYWwgdGV0cmFoZWRyYSAuLi4gLi4uIDEyMCAKClRvdGFsIC4gLiAuIDIzNDAgCgoKQXRvbWljIHdlaWdodCAuLi4gLi4uIAoKTnVtYmVyIHdlaWdodCBeXl4gLi4uIDE2OS02NiAKCkthbG9uIChQbGF0ZSBYWEksIDMgYW5kIDQsIGFuZCBQbGF0ZSBYWCwgNiBhbmQgNykgaGFzIGEgCmN1cmlvdXMgY29uZSwgcG9zc2Vzc2luZyBhIGtpbmQgb2YgdGFpbCB3aGljaCB3ZSBoYXZlIG5vdCAKCgpJMDQgCgoKb2JzZXJ2ZWQgZWxzZXdoZXJlIDsgeCBhbmQgeSBzaG93IHRoZSBzYW1lIGFzeW1tZXRyeSBhcyBpbiAKemVub24uIAoKCkthbG9uIDsgU2l4IGFybXMgb2YgNDg5IGF0b21zIApDZW50cmFsIHRldHJhaGVkcmEgCgoKVG90YWwgCgoKQXRvbWljIHdlaWdodCAKTnVtYmVyIHdlaWdodCB+Xl58KiAKClBsYXRlIFhYSS4gCgoKMjkzNCAKMTIwIAoKMzA1NCAKMTY5KjY2IAoKCkkwNSAKCk1ldGEtS2Fsb24gYWdhaW4gc3Vic3RpdHV0ZXMgdHdvIHoncyBmb3IgeCBhbmQgeS4gCgpNZXRhLUthbG9uIDogU2l4IGFybXMgb2YgNDk2IGF0b21zIC4uLiAyOTc2IApDZW50cmFsIHRldHJhaGVkcmEgLi4uIDEyMCAKClRvdGFsIC4uLiAzMDk2IAoKQXRvbWljIHdlaWdodCAuLi4gLi4uIAoKTnVtYmVyIHdlaWdodCBeeUl+IiDigKLigKLigKIgXjctIAoKT25seSBhIGZldyBhdG9tcyBvZiBrYWxvbiBhbmQgbWV0YS1rYWxvbiBoYXZlIGJlZW4gZm91bmQgCmluIHRoZSBhaXIgb2YgYSBmYWlyLXNpemVkIHJvb20uIAoKSXQgZG9lcyBub3Qgc2VlbSB3b3J0aCB3aGlsZSB0byBicmVhayB1cCB0aGVzZSBlbGVtZW50cywgZm9yIAp0aGVpciBjb21wb25lbnQgcGFydHMgYXJlIHNvIGZhbWlsaWFyLiBUaGUgY29tcGxpY2F0ZWQgZ3JvdXBzIArigJQgYSBubywgYiA2MyBhbmQgYyAxMjAg4oCUIGhhdmUgYWxsIGJlZW4gZnVsbHkgZGVhbHQgd2l0aCBpbiAKcHJlY2VkaW5nIHBhZ2VzLiAKCgpUaGVyZSByZW1haW5zIG5vdyBvbmx5IHJhZGl1bSwgb2YgdGhlIGVsZW1lbnRzIHdoaWNoIHdlIApoYXZlLCBzbyBmYXIsIGV4YW1pbmVkLCBhbmQgdGhhdCB3aWxsIGJlIG5vdyBkZXNjcmliZWQgYW5kIHdpbGwgCmJyaW5nIHRvIGFuIGVuZCB0aGlzIHNlcmllcyBvZiBvYnNlcnZhdGlvbnMuIEEgcGllY2Ugb2YgY2xvc2UgCmFuZCBkZXRhaWxlZCB3b3JrIG9mIHRoaXMga2luZCwgYWx0aG91Z2ggbmVjZXNzYXJpbHkgaW1wZXJmZWN0LCAKd2lsbCBoYXZlIGl0cyB2YWx1ZSBpbiB0aGUgZnV0dXJlLCB3aGVuIHNjaWVuY2UgYWxvbmcgaXRzIG93biBsaW5lcyAKc2hhbGwgaGF2ZSBjb25maXJtZWQgdGhlc2UgcmVzZWFyY2hlcy4gCgpJdCB3aWxsIGhhdmUgYmVlbiBvYnNlcnZlZCB0aGF0IG91ciB3ZWlnaHRzLCBvYnRhaW5lZCBieSAKY291bnRpbmcsIGFyZSBhbG1vc3QgaW52YXJpYWJseSBzbGlnaHRseSBpbiBleGNlc3Mgb2YgdGhlIG9ydGhvZG94IApvbmVzIDogaXQgaXMgaW50ZXJlc3RpbmcgdGhhdCBpbiB0aGUgbGF0ZXN0IHJlcG9ydCBvZiB0aGUgSW50ZXJuYXRpb25hbCAKQ29tbWlzc2lvbiAoTm92ZW1iZXIgMTMsIDE5MDcpLCBwcmludGVkIGluIHRoZSBQcm9jZWVkaW5ncyBvZiAKdGhlIENoZW1pY2FsIFNvY2lldHkgb2YgTG9uZG9uLCBWb2wuIFhYSVYsIE5vLiAzMywgYW5kIGlzc3VlZCBvbiAKSmFudWFyeSAyNSwgMTkwOCwgdGhlIHdlaWdodCBvZiBoeWRyb2dlbiBpcyBub3cgdGFrZW4gYXQgMSowMDggCmluc3RlYWQgb2YgYXQgaS4gVGhpcyB3b3VsZCBzbGlnaHRseSByYWlzZSBhbGwgdGhlIG9ydGhvZG94IAp3ZWlnaHRzIDsgdGh1cyBhbHVtaW5pdW0gcmlzZXMgZnJvbSAyNio5MSB0byAyNyoxLCBhbnRpbW9ueSAKZnJvbSAxMTkqMzQgdG8gMTIwKjIsIGFuZCBzbyBvbi4gCgoKWEkuIAoKUmFkaXVtLiAKClJhZGl1bSBoYXMgdGhlIGZvcm0gb2YgYSB0ZXRyYWhlZHJvbiwgYW5kIGl0IGlzIGluIHRoZSB0ZXRyYS0gCmhlZHJhbCBncm91cHMgKHNlZSBhcnRpY2xlIElWKSB0aGF0IHdlIHNoYWxsIGZpbmQgaXRzIG5lYXJlc3QgCmNvbmdlbmVycyA7IGNhbGNpdW0sIHN0cm9udGl1bSwgY2hyb21pdW0sIG1vbHliZGVudW0gcmUtIApzZW1ibGUgaXQgbW9zdCBjbG9zZWx5IGluIGdlbmVyYWwgaW50ZXJuYWwgYXJyYW5nZW1lbnRzLCB3aXRoIAphZGRpdGlvbnMgZnJvbSB6aW5jIGFuZCBjYWRtaXVtLiBSYWRpdW0gaGFzIGEgY29tcGxleCAKCgppbzYgCgpjZW50cmFsIHNwaGVyZSAoUGxhdGUgWFhJSSksIGV4dHJhb3JkaW5hcmlseSB2aXZpZCBhbmQgbGl2aW5nOyAKdGhlIHdoaXJsaW5nIG1vdGlvbiBpcyBzbyByYXBpZCB0aGF0IGNvbnRpbnVlZCBhY2N1cmF0ZSBvYnNlci0gCnZhdGlvbiBpcyB2ZXJ5IGRpZmZpY3VsdDsgdGhlIHNwaGVyZSBpcyBtb3JlIGNsb3NlbHkgY29tcGFjdGVkIHRoYW4gCnRoZSBjZW50cmUtcGllY2UgaW4gb3RoZXIgZWxlbWVudHMsIGFuZCBpcyBtdWNoIGxhcmdlciBpbiBwcm8tIApwb3J0aW9uIHRvIHRoZSBmdW5uZWxzIGFuZCBzcGlrZXMgdGhhbiBpcyB0aGUgY2FzZSB3aXRoIHRoZSAKZWxlbWVudHMgYWJvdmUgbmFtZWQgOyByZWZlcmVuY2UgdG8gUGxhdGUgVklJSSB3aWxsIHNob3cgdGhhdCAKClBsYXRlIFhYSUkuIAoKSUxjdVV4anVtL15DamVBaWlucnQsIFNpZmphbGNUbnMgCgoKaW4gdGhlc2UgdGhlIGZ1bm5lbHMgYXJlIG11Y2ggbGFyZ2VyIHRoYW4gdGhlIGNlbnRyZXMsIHdoZXJlYXMgaW4gCnJhZGl1bSB0aGUgZGlhbWV0ZXIgb2YgdGhlIHNwaGVyZSBhbmQgdGhlIGxlbmd0aCBvZiB0aGUgZnVubmVsIApvciBzcGlrZSBhcmUgYWJvdXQgZXF1YWwuIEl0cyBoZWFydCBjb25zaXN0cyBvZiBhIGdsb2JlIGNvbnRhaW5pbmcgCnNldmVuIGF0b21zLCB3aGljaCBhc3N1bWUgb24gdGhlIHByb3RvIGxldmVsIHRoZSBwcmlzbWF0aWMgZm9ybSAKc2hvd24gaW4gY2FkbWl1bSwgbWFnbmVzaXVtIGFuZCBzZWxlbml1bS4gVGhpcyBnbG9iZSBpcyAKdGhlIGNlbnRyZSBvZiB0d28gY3Jvc3NlcywgdGhlIGFybXMgb2Ygd2hpY2ggc2hvdyByZXNwZWN0aXZlbHkgCgoKdGhyZWUtYXRvbWVkIGFuZCB0d28tYXRvbWVkIGdyb3Vwcy4gUm91bmQgdGhpcyBzcGhlcmUgYXJlIAphcnJhbmdlZCwgYXMgb24gcmFkaWksIHR3ZW50eS1mb3VyIHNlZ21lbnRzLCBlYWNoIGNvbnRhaW5pbmcgZml2ZSAKYm9kaWVz4oCUIGZvdXIgcXVpbnRldHMgYW5kIGEgc2VwdGV04oCUIGFuZCBzaXggbG9vc2UgYXRvbXMsIHdoaWNoIApmbG9hdCBob3Jpem9udGFsbHkgYWNyb3NzIHRoZSBtb3V0aCBvZiB0aGUgc2VnbWVudCA7IHRoZSB3aG9sZSAKc3BoZXJlIGhhcyB0aHVzIGEga2luZCBvZiBzdXJmYWNlIG9mIGF0b21zLiBPbiB0aGUgcHJvdG8gbGV2ZWwgCgpQbGF0ZSBYWElJSS4gCgoKSUxhaWR4V2luIC1e4pagdS4nbidyLmNpIDYvIDggYWRhcm1zIAoKCnRoZXNlIHNpeCBhdG9tcyBpbiBlYWNoIHNlZ21lbnQgZ2F0aGVyIHRvZ2V0aGVyIGFuZCBmb3JtIGEgCiIgY2lnYXIuIiBJbiB0aGUgcnVzaCBvZiB0aGUgc3RyZWFtcyBwcmVzZW50bHkgdG8gYmUgZGVzY3JpYmVkIApvbmUgb2YgdGhlc2UgYXRvbXMgaXMgb2NjYXNpb25hbGx5IHRvcm4gYXdheSwgYnV0IGlzIGdlbmVyYWxseSwgCmlmIG5vdCBhbHdheXMsIHJlcGxhY2VkIGJ5IHRoZSBjYXB0dXJlIG9mIGFub3RoZXIgd2hpY2ggaXMgZmx1bmcgCmludG8gdGhlIHZhY2F0ZWQgc3BhY2UuIAoKCmlvOCAKCkVhY2ggb2YgdGhlIGZvdXIgZnVubmVscyBvcGVucywgYXMgdXN1YWwsIG9uIG9uZSBmYWNlIG9mIHRoZSAKdGV0cmFoZWRyb24sIGFuZCB0aGV5IHJlc2VtYmxlIHRoZSBmdW5uZWxzIG9mIHN0cm9udGl1bSBhbmQgCm1vbHliZGVudW0gYnV0IGNvbnRhaW4gdGhyZWUgcGlsbGFycyBpbnN0ZWFkIG9mIGZvdXIgKFBsYXRlWFhJSUkpLiAKVGhleSBzdGFuZCB3aXRoaW4gdGhlIGZ1bm5lbCBhcyB0aG91Z2ggYXQgdGhlIGFuZ2xlcyBvZiBhIHRyaWFuZ2xlLCAKbm90IHNpZGUgYnkgc2lkZS4gVGhlIGNvbnRhaW5lZCBib2RpZXMsIHRob3VnaCBudW1lcm91cywgCmNvbnRhaW4gZm9ybXMgd2hpY2ggYXJlIGFsbCBmYW1pbGlhci4gCgpUaGUgc3Bpa2VzIGFsdGVybmF0ZSB3aXRoIHRoZSBmdW5uZWxzLCBhbmQgcG9pbnQgdG8gdGhlIGFuZ2xlcyAKb2YgdGhlIHRldHJhaGVkcm9uIGFzIGluIHppbmMgYW5kIGNhZG1pdW0gOyBlYWNoIHNwaWtlIGNvbnRhaW5zIAp0aHJlZSAnKiBsaXRoaXVtIHNwaWtlcyAiIChzZWUgUGxhdGUgWElYKSB3aXRoIGEgdGVuLWF0b21lZCBjb25lIApvciBjYXAgYXQgdGhlIHRvcCwgZmxvYXRpbmcgYWJvdmUgdGhlIHRocmVlIChQbGF0ZSBYWElWKS4gVGhlIAoiIHBldGFscyAiIG9yICIgY2lnYXJzICIgb2YgbGl0aGl1bSBleGlzdCBpbiB0aGUgY2VudHJhbCBnbG9iZSBpbiAKdGhlIGZsb2F0aW5nIGF0b21zLCBhbmQgdGhlIGZvdXItYXRvbWVkIGdyb3VwcyB3aGljaCBmb3JtIHRoZSAKbGl0aGl1bSAiIHBsYXRlICIgbWF5IGJlIHNlZW4gaW4gdGhlIGZ1bm5lbHMsIHNvIHRoYXQgdGhlIHdob2xlIG9mIApsaXRoaXVtIGFwcGVhcnMgaW4gcmFkaXVtLiAKClNvIG11Y2ggZm9yIGl0cyBjb21wb3NpdGlvbi4gQnV0IGEgdmVyeSBwZWN1bGlhciByZXN1bHQsIHNvIApmYXIgdW5vYnNlcnZlZCBlbHNld2hlcmUsIGFyaXNlcyBmcm9tIHRoZSBleHRyYW9yZGluYXJpbHkgcmFwaWQgCndoaXJsaW5nIG9mIHRoZSBjZW50cmFsIHNwaGVyZS4gQSBraW5kIG9mIHZvcnRleCBpcyBmb3JtZWQsIGFuZCAKdGhlcmUgaXMgYSBjb25zdGFudCBhbmQgcG93ZXJmdWwgaW5kcmF1Z2h0IHRocm91Z2ggdGhlIGZ1bm5lbHMuIApCeSB0aGlzLCBwYXJ0aWNsZXMgYXJlIGRyYXduIGluIGZyb20gd2l0aG91dCwgYW5kIHRoZXNlIGFyZSBzd2VwdCAKcm91bmQgd2l0aCB0aGUgc3BoZXJlLCB0aGVpciB0ZW1wZXJhdHVyZSBiZWNvbWluZyBtdWNoIHJhaXNlZCwgCmFuZCB0aGV5IGFyZSB0aGVuIHZpb2xlbnRseSBzaG90IG91dCB0aHJvdWdoIHRoZSBzcGlrZXMuIEl0IGlzIAp0aGVzZSBqZXRzIHdoaWNoIG9jY2FzaW9uYWxseSBzd2VlcCBhd2F5IGFuIGF0b20gZnJvbSB0aGUgCnN1cmZhY2Ugb2YgdGhlIHNwaGVyZS4gVGhlc2UgIiBwYXJ0aWNsZXMgIiBtYXkgYmUgYXRvbXMsIG9yIHRoZXkgCm1heSBiZSBib2RpZXMgZnJvbSBhbnkgb2YgdGhlIGV0aGVyaWMgbGV2ZWxzIDsgaW4gc29tZSBjYXNlcyAKdGhlc2UgYm9kaWVzIGJyZWFrIHVwIGFuZCBmb3JtIG5ldyBjb21iaW5hdGlvbnMuIEluIGZhY3QgCmlpY3VeJ2wgbGl0aGl1bSBzZWVtcyBsaWtlIGEga2luZCBvZiB2b3J0ZXggb2YgY3JlYXRpdmUgYWN0aXZpdHksIGRyYXdpbmcgCmluLCBicmVha2luZyB1cCwgcmVjb21iaW5pbmcsIHNob290aW5nIGZvcnRoIOKAlCBhIG1vc3QgZXh0cmEtIApvcmRpbmFyeSBlbGVtZW50LiAKCkxpdGhpdW0gOiA0IGZ1bm5lbHMgb2YgNmk4IGF0b21zIC4uLiAyNDcyIAoKNCBzcGlrZXMgb2YgMTk5IGF0b21zLi4uIC4uLiA3OTYgCgpDZW50cmFsIHNwaGVyZSAuLi4gLi4uIDgxOSAKClRvdGFsIC4uLiA0MDg3IAoKQXRvbWljIHdlaWdodCAKCk51bWJlciB3ZWlnaHQgKnlGIOKAouKAouKAoiDigKLigKLigKIgMjI3LTA1IAoKCkkwOSAKUGxhdGUgWFhJVi4gCkpFbGN1ZGl5SC9yYSAtcy1waUFlLSBLSkNqb0lvcnJpcyAKCgpBUFBFTkRJWC4gCgoKVEhFIF5USEVSIE9GIFNQQUNFLiAKCk11Y2ggZGlzY3Vzc2lvbiBoYXMgdGFrZW4gcGxhY2UsIGVzcGVjaWFsbHkgYmV0d2VlbiBwaHlzaWNpc3RzIAphbmQgY2hlbWlzdHMsIG92ZXIgdGhlIG5hdHVyZSBvZiB0aGUgc3Vic3RhbmNlcyB3aXRoIHdoaWNoIGFsbCAKc3BhY2UgbXVzdCwgYWNjb3JkaW5nIHRvIHNjaWVudGlmaWMgaHlwb3RoZXNpcywgYmUgZmlsbGVkLiBPbmUgCnNpZGUgY29udGVuZHMgdGhhdCBpdCBpcyBpbmZpbml0ZWx5IHRoaW5uZXIgdGhhbiB0aGUgdGhpbm5lc3QgZ2FzLCAKYWJzb2x1dGVseSBmcmljdGlvbmxlc3MgYW5kIHdpdGhvdXQgd2VpZ2h0IDsgdGhlIG90aGVyIGFzc2VydHMgdGhhdCAKaXQgaXMgZGVuc2VyIHRoYW4gdGhlIGRlbnNlc3Qgc29saWQuIEluIHRoaXMgc3Vic3RhbmNlIHRoZSB1bHRpbWF0ZSAKYXRvbXMgb2YgbWF0dGVyIGFyZSB0aG91Z2h0IHRvIGZsb2F0LCBsaWtlIG1vdGVzIGluIGEgc3VuYmVhbSwgCmFuZCBsaWdodCwgaGVhdCBhbmQgZWxlY3RyaWNpdHkgYXJlIHN1cHBvc2VkIHRvIGJlIGl0cyB2aWJyYXRpb25zLiAKClRoZW9zb3BoaWNhbCBpbnZlc3RpZ2F0b3JzLCB1c2luZyBtZXRob2RzIG5vdCBhdCB0aGUgZGlzcG9zYWwgCm9mIHBoeXNpY2FsIHNjaWVuY2UsIGhhdmUgZm91bmQgdGhhdCB0aGlzIGh5cG90aGVzaXMgaW5jbHVkZXMgCnVuZGVyIG9uZSBoZWFkIHR3byBlbnRpcmVseSBkaWZmZXJlbnQgYW5kIHdpZGVseSBzZXBhcmF0ZWQgc2V0cyAKb2YgcGhlbm9tZW5hLiBUaGV5IGhhdmUgYmVlbiBhYmxlIHRvIGRlYWwgd2l0aCBzdGF0ZXMgb2YgCm1hdHRlciBoaWdoZXIgdGhhbiB0aGUgZ2FzZW91cyBhbmQgaGF2ZSBvYnNlcnZlZCB0aGF0IGl0IGlzIGJ5IAptZWFucyBvZiB2aWJyYXRpb25zIG9mIHRoaXMgZmluZXIgbWF0dGVyIHRoYXQgbGlnaHQsIGhlYXQgYW5kIAplbGVjdHJpY2l0eSBtYW5pZmVzdCB0aGVtc2VsdmVzIHRvIHVzLiBTZWVpbmcgdGhhdCBtYXR0ZXIgaW4gCnRoZXNlIGhpZ2hlciBzdGF0ZXMgdGh1cyBwZXJmb3JtcyB0aGUgZnVuY3Rpb25zIGF0dHJpYnV0ZWQgdG8gdGhlIApldGhlciBvZiBzY2llbmNlLCB0aGV5IGhhdmUgKHBlcmhhcHMgdW5hZHZpc2VkbHkpIGNhbGxlZCB0aGVzZSAKc3RhdGVzIGV0aGVyaWMsIGFuZCBoYXZlIHRodXMgbGVmdCB0aGVtc2VsdmVzIHdpdGhvdXQgYSBjb252ZW5pZW50IApuYW1lIGZvciB0aGF0IHN1YnN0YW5jZSB3aGljaCBmdWxmaWxzIHRoZSBvdGhlciBwYXJ0IG9mIHRoZSAKc2NpZW50aWZpYyByZXF1aXJlbWVudHMuIAoKTGV0IHVzIGZvciB0aGUgbW9tZW50IG5hbWUgdGhpcyBzdWJzdGFuY2Uga29pbG9uLCBzaW5jZSBpdCAKZmlsbHMgd2hhdCB3ZSBhcmUgaW4gdGhlIGhhYml0IG9mIGNhbGxpbmcgZW1wdHkgc3BhY2UuIFdoYXQgCm11bGFwcmFrcnRpLCBvciAiIG1vdGhlci1tYXR0ZXIsIiBpcyB0byB0aGUgaW5jb25jZWl2YWJsZSB0b3RhbGl0eSAKb2YgdW5pdmVyc2VzLCBrb2lsb24gaXMgdG8gb3VyIHBhcnRpY3VsYXIgdW5pdmVyc2Ug4oCUIG5vdCB0byBvdXIgCnNvbGFyIHN5c3RlbSBtZXJlbHkgYnV0IHRvIHRoZSB2YXN0IHVuaXQgd2hpY2ggaW5jbHVkZXMgYWxsIHZpc2libGUgCnN1bnMuIEJldHdlZW4ga29pbG9uIGFuZCBtdWxhcHJha3J0aSB0aGVyZSBtdXN0IGJlIHZhcmlvdXMgCnN0YWdlcywgYnV0IHdlIGhhdmUgYXQgcHJlc2VudCBubyBkaXJlY3QgbWVhbnMgb2YgZXN0aW1hdGluZyB0aGVpciAKbnVtYmVyIG9yIG9mIGtub3dpbmcgYW55dGhpbmcgd2hhdGV2ZXIgYWJvdXQgdGhlbS4gCgpJbiBhbiBhbmNpZW50IG9jY3VsdCB0cmVhdGlzZSwgaG93ZXZlciwgd2UgcmVhZCBvZiBhICJjb2xvci0gCmxlc3Mgc3Bpcml0dWFsIGZsdWlkICIgIiB3aGljaCBleGlzdHMgZXZlcnl3aGVyZSBhbmQgZm9ybXMgdGhlIGZpcnN0IApmb3VuZGF0aW9uIG9uIHdoaWNoIG91ciBzb2xhciBzeXN0ZW0gaXMgYnVpbHQuIE91dHNpZGUgdGhlIAoKCjExIAoKbGF0dGVyLCBpdCBpcyBmb3VuZCBpbiBpdHMgcHJpc3RpbmUgcHVyaXR5IG9ubHkgYmV0d2VlbiB0aGUgc3RhcnMgW3N1bnNdIApvZiB0aGUgdW5pdmVyc2UuIC4uLiBBcyBpdHMgc3Vic3RhbmNlIGlzIG9mIGEgZGlmZmVyZW50IGtpbmQgZnJvbSAKdGhhdCBrbm93biBvbiBlYXJ0aCwgdGhlIGluaGFiaXRhbnRzIG9mIHRoZSBsYXR0ZXIsIHNlZWluZyB0aHJvdWdoIAppdCwgYmVsaWV2ZSwgaW4gdGhlaXIgaWxsdXNpb24gYW5kIGlnbm9yYW5jZSwgdGhhdCBpdCBpcyBlbXB0eSBzcGFjZS4gClRoZXJlIGlzIG5vdCBvbmUgZmluZ2VyJ3MgYnJlYWR0aCBvZiB2b2lkIHNwYWNlIGluIHRoZSB3aG9sZSAKYm91bmRsZXNzIHVuaXZlcnNlLiIqICJUaGUgbW90aGVyLXN1YnN0YW5jZSIgaXMgc2FpZCwgaW4gdGhpcyAKdHJlYXRpc2UsIHRvIHByb2R1Y2UgdGhpcyBhZXRoZXIgb2Ygc3BhY2UgYXMgaXRzIHNldmVudGggZ3JhZGUgb2YgCmRlbnNpdHksIGFuZCBhbGwgb2JqZWN0aXZlIHN1bnMgYXJlIHNhaWQgdG8gaGF2ZSB0aGlzIGZvciB0aGVpciAKIiBzdWJzdGFuY2UuIiAKClRvIGFueSBwb3dlciBvZiBzaWdodCB3aGljaCB3ZSBjYW4gYnJpbmcgdG8gYmVhciB1cG9uIGl0LCAKdGhpcyBrb2lsb24gYXBwZWFycyB0byBiZSBob21vZ2VuZW91cywgdGhvdWdoIGl0IGlzIHByb2JhYmx5IApub3RoaW5nIG9mIHRoZSBraW5kLCBzaW5jZSBob21vZ2VuZWl0eSBjYW4gYmVsb25nIHRvIHRoZSAKbW90aGVyLXN1YnN0YW5jZSBhbG9uZS4gSXQgaXMgb3V0IG9mIGFsbCBwcm9wb3J0aW9uIGRlbnNlciB0aGFuIAphbnkgb3RoZXIgc3Vic3RhbmNlIGtub3duIHRvIHVzLCBpbmZpbml0ZWx5IGRlbnNlciDigJQgaWYgd2UgbWF5IApiZSBwYXJkb25lZCB0aGUgZXhwcmVzc2lvbiA7IHNvIG11Y2ggZGVuc2VyIHRoYXQgaXQgc2VlbXMgdG8gCmJlbG9uZyB0byBhbm90aGVyIHR5cGUsIG9yIG9yZGVyLCBvZiBkZW5zaXR5LiBCdXQgbm93IGNvbWVzIHRoZSAKc3RhcnRsaW5nIHBhcnQgb2YgdGhlIGludmVzdGlnYXRpb24gOiB3ZSBtaWdodCBleHBlY3QgbWF0dGVyIHRvIGJlIAphIGRlbnNpZmljYXRpb24gb2YgdGhpcyBrb2lsb24gOyBpdCBpcyBub3RoaW5nIG9mIHRoZSBraW5kLiBNYXR0ZXIgCmlzIG5vdCBrb2lsb24sIGJ1dCB0aGUgYWJzZW5jZSBvZiBrb2lsb24sIGFuZCBhdCBmaXJzdCBzaWdodCwgbWF0dGVyIAphbmQgc3BhY2UgYXBwZWFyIHRvIGhhdmUgY2hhbmdlZCBwbGFjZXMsIGFuZCBlbXB0aW5lc3MgaGFzIApiZWNvbWUgc29saWRpdHksIHNvbGlkaXR5IGhhcyBiZWNvbWUgZW1wdGluZXNzLiAKClRvIGhlbHAgdXMgdG8gdW5kZXJzdGFuZCB0aGlzIGNsZWFybHkgbGV0IHVzIGV4YW1pbmUgdGhlIHVsdGktIAptYXRlIGF0b20gb2YgdGhlIHBoeXNpY2FsIHBsYW5lIChzZWUgcHAuIDIxLTIzKS4gXl4gaXMgY29tcG9zZWQgCm9mIHRlbiByaW5ncyBvciB3aXJlcywgd2hpY2ggbGllIHNpZGUgYnkgc2lkZSwgYnV0IG5ldmVyIHRvdWNoIG9uZSAKYW5vdGhlci4gSWYgb25lIG9mIHRoZXNlIHdpcmVzIGJlIHRha2VuIGF3YXkgZnJvbSB0aGUgYXRvbSwgCmFuZCBiZSwgYXMgaXQgd2VyZSwgdW50d2lzdGVkIGZyb20gaXRzIHBlY3VsaWFyIHNwaXJhbCBzaGFwZSBhbmQgCmxhaWQgb3V0IG9uIGEgZmxhdCBzdXJmYWNlLCBpdCB3aWxsIGJlIHNlZW4gdGhhdCBpdCBpcyBhIGNvbXBsZXRlIApjaXJjbGUg4oCUIGEgdGlnaHRseSB0d2lzdGVkIGVuZGxlc3MgY29pbC4gVGhpcyBjb2lsIGlzIGl0c2VsZiBhIHNwaXJhbCAKY29udGFpbmluZyAxNjgwIHR1cm5zIDsgaXQgY2FuIGJlIHVud291bmQsIGFuZCBpdCB3aWxsIHRoZW4gbWFrZSAKYSBtdWNoIGxhcmdlciBjaXJjbGUuIFRoaXMgcHJvY2VzcyBvZiB1bndpbmRpbmcgbWF5IGJlIGFnYWluIApwZXJmb3JtZWQsIGFuZCBhIHN0aWxsIGJpZ2dlciBjaXJjbGUgb2J0YWluZWQsIGFuZCB0aGlzIGNhbiBiZSAKcmVwZWF0ZWQgdGlsbCB0aGUgc2V2ZW4gc2V0cyBvZiBzcGlyaWxsY2UgYXJlIGFsbCB1bndvdW5kLCBhbmQgd2UgCmhhdmUgYSBodWdlIGNpcmNsZSBvZiB0aGUgdGluaWVzdCBpbWFnaW5hYmxlIGRvdHMsIGxpa2UgcGVhcmxzIAp0aHJlYWRlZCBvbiBhbiBpbnZpc2libGUgc3RyaW5nLiBUaGVzZSBkb3RzIGFyZSBzbyBpbmNvbmNlaXZhYmx5IApzbWFsbCB0aGF0IG1hbnkgbWlsbGlvbnMgb2YgdGhlbSBhcmUgbmVlZGVkIHRvIG1ha2Ugb25lIAp1bHRpbWF0ZSBwaHlzaWNhbCBhdG9tLCBhbmQgd2hpbGUgdGhlIGV4YWN0IG51bWJlciBpcyBub3QgCnJlYWRpbHkgYXNjZXJ0YWluYWJsZSwgc2V2ZXJhbCBkaWZmZXJlbnQgbGluZXMgb2YgY2FsY3VsYXRpb24gYWdyZWUgCgoqIFF1b3RlZCBpbiAiIFRoZSBTZWNyZXQgRG9jdHJpbmUuIiBILiBQLiBCbGF2YXRza3ksIGksIDMwOS4gCgoKSWxsIAoKaW4gaW5kaWNhdGluZyBpdCBhcyBjbG9zZWx5IGFwcHJveGltYXRlIHRvIHRoZSBhbG1vc3QgaW5jb25jZWl2YWJsZSAKdG90YWwgb2YgZm91cnRlZW4gdGhvdXNhbmQgbWlsbGlvbnMuIFdoZXJlIGZpZ3VyZXMgYXJlIHNvIGh1Z2UsIApkaXJlY3QgY291bnRpbmcgaXMgb2J2aW91c2x5IGltcG9zc2libGUsIGJ1dCBmb3J0dW5hdGVseSB0aGUgCmRpZmZlcmVudCBwYXJ0cyBvZiB0aGUgYXRvbSBhcmUgc3VmZmljaWVudGx5IGFsaWtlIHRvIGVuYWJsZSB1cyB0byAKbWFrZSBhbiBlc3RpbWF0ZSBpbiB3aGljaCB0aGUgbWFyZ2luIG9mIGVycm9yIGlzIG5vdCBsaWtlbHkgdG8gYmUgCnZlcnkgZ3JlYXQuIFRoZSBhdG9tIGNvbnNpc3RzIG9mIHRlbiB3aXJlcywgd2hpY2ggZGl2aWRlIHRoZW0tIApzZWx2ZXMgbmF0dXJhbGx5IGludG8gdHdvIGdyb3VwcyDigJQgdGhlIHRocmVlIHdoaWNoIGFyZSB0aGlja2VyIGFuZCAKbW9yZSBwcm9taW5lbnQsIGFuZCB0aGUgc2V2ZW4gdGhpbm5lciBvbmVzIHdoaWNoIGNvcnJlc3BvbmQgCnRvIHRoZSBjb2xvcnMgYW5kIHBsYW5ldHMuIFRoZXNlIGxhdHRlciBhcHBlYXIgdG8gYmUgaWRlbnRpY2FsIGluIApjb25zdGl0dXRpb24gdGhvdWdoIHRoZSBmb3JjZXMgZmxvd2luZyB0aHJvdWdoIHRoZW0gbXVzdCAKZGlmZmVyLCBzaW5jZSBlYWNoIHJlc3BvbmRzIG1vc3QgcmVhZGlseSB0byBpdHMgb3duIHNwZWNpYWwgc2V0IApvZiB2aWJyYXRpb25zLiBCeSBhY3R1YWwgY291bnRpbmcgaXQgaGFzIGJlZW4gZGlzY292ZXJlZCB0aGF0IAp0aGUgbnVtYmVycyBvZiBjb2lscyBvciBzcGlyaWxsYWUgb2YgdGhlIGZpcnN0IG9yZGVyIGluIGVhY2ggd2lyZSAKaXMgMTY4MCA7IGFuZCB0aGUgcHJvcG9ydGlvbiBvZiB0aGUgZGlmZmVyZW50IG9yZGVycyBvZiBzcGlyaWxsYWUgdG8gCm9uZSBhbm90aGVyIGlzIGVxdWFsIGluIGFsbCBjYXNlcyB0aGF0IGhhdmUgYmVlbiBleGFtaW5lZCwgYW5kIApjb3JyZXNwb25kIHdpdGggdGhlIG51bWJlciBvZiBkb3RzIGluIHRoZSB1bHRpbWF0ZSBzcGlyaWxsYWUgb2YgCnRoZSBsb3dlc3Qgb3JkZXIuIFRoZSBvcmRpbmFyeSBzZXZlbmZvbGQgcnVsZSB3b3JrcyBxdWl0ZSAKYWNjdXJhdGVseSB3aXRoIHRoZSB0aGlubmVyIGNvaWxzLCBidXQgdGhlcmUgaXMgYSB2ZXJ5IGN1cmlvdXMgCnZhcmlhdGlvbiB3aXRoIHJlZ2FyZCB0byB0aGUgc2V0IG9mIHRocmVlLiBBcyBtYXkgYmUgc2VlbiBmcm9tIAp0aGUgZHJhd2luZ3MsIHRoZXNlIGFyZSBvYnZpb3VzbHkgdGhpY2tlciBhbmQgbW9yZSBwcm9taW5lbnQsIAphbmQgdGhpcyBpbmNyZWFzZSBvZiBzaXplIGlzIHByb2R1Y2VkIGJ5IGFuIGF1Z21lbnRhdGlvbiAoc28gCnNsaWdodCBhcyB0byBiZSBiYXJlbHkgcGVyY2VwdGlibGUpIGluIHRoZSBwcm9wb3J0aW9uIHRvIG9uZSAKYW5vdGhlciBvZiB0aGUgZGlmZmVyZW50IG9yZGVycyBvZiBzcGlyaWxsYWUgYW5kIGluIHRoZSBudW1iZXIgb2YgCmRvdHMgaW4gdGhlIGxvd2VzdC4gVGhpcyBhdWdtZW50YXRpb24sIGFtb3VudGluZyBhdCBwcmVzZW50IAp0byBub3QgbW9yZSB0aGFuICcwMDU3MTQyOCBvZiB0aGUgd2hvbGUgb2YgZWFjaCBjYXNlLCBzdWdnZXN0cyAKdGhlIHVuZXhwZWN0ZWQgcG9zc2liaWxpdHkgdGhhdCB0aGlzIHBvcnRpb24gb2YgdGhlIGF0b20gbWF5IApiZSBzb21laG93IGFjdHVhbGx5IHVuZGVyZ29pbmcgYSBjaGFuZ2Ug4oCUIG1heSBpbiBmYWN0IGJlIGluIApwcm9jZXNzIG9mIGdyb3d0aCwgYXMgdGhlcmUgaXMgcmVhc29uIHRvIHN1cHBvc2UgdGhhdCB0aGVzZSB0aHJlZSAKdGhpY2tlciBzcGlyYWxzIG9yaWdpbmFsbHkgcmVzZW1ibGVkIHRoZSBvdGhlcnMuIAoKU2luY2Ugb2JzZXJ2YXRpb24gc2hvd3MgdXMgdGhhdCBlYWNoIHBoeXNpY2FsIGF0b20gaXMgCnJlcHJlc2VudGVkIGJ5IGZvcnR5LW5pbmUgYXN0cmFsIGF0b21zLCBlYWNoIGFzdHJhbCBhdG9tIGJ5IApmb3J0eS1uaW5lIG1lbnRhbCBhdG9tcywgYW5kIGVhY2ggbWVudGFsIGF0b20gYnkgZm9ydHktbmluZSAKb2YgdGhvc2Ugb24gdGhlIGJ1ZGRoaWMgcGxhbmUsIHdlIGhhdmUgaGVyZSBldmlkZW50bHkgc2V2ZXJhbCAKdGVybXMgb2YgYSByZWd1bGFyIHByb2dyZXNzaXZlIHNlcmllcywgYW5kIHRoZSBuYXR1cmFsIHByZXN1bXB0aW9uIAppcyB0aGF0IHRoZSBzZXJpZXMgY29udGludWVzIHdoZXJlIHdlIGFyZSBubyBsb25nZXIgYWJsZSB0byAKb2JzZXJ2ZSBpdC4gRid1cnRoZXIgcHJvYmFiaWxpdHkgaXMgbGVudCB0byB0aGlzIGFzc3VtcHRpb24gYnkgCnRoZSByZW1hcmthYmxlIGZhY3QgdGhhdCDigJQgaWYgd2UgYXNzdW1lIG9uZSBkb3QgdG8gYmUgd2hhdCAKY29ycmVzcG9uZHMgdG8gYW4gYXRvbSBvbiB0aGUgc2V2ZW50aCBvciBoaWdoZXN0IG9mIG91ciAKcGxhbmVzIChhcyBpcyBzdWdnZXN0ZWQgaW4gVGhlIEFuY2llbnQgV2lzZG9tLCBwLiA0MikgYW5kIHRoZW4gCgoKSVYgCgpzdXBwb3NlIHRoZSBsYXcgb2YgbXVsdGlwbGljYXRpb24gdG8gYmVnaW4gaXRzIG9wZXJhdGlvbiwgc28gCnRoYXQgNDkgZG90cyBzaGFsbCBmb3JtIHRoZSBhdG9tIG9mIHRoZSBuZXh0IG9yIHNpeHRoIHBsYW5lLCAKMjQwMSB0aGF0IG9mIHRoZSBmaWZ0aCwgYW5kIHNvIG9uIOKAlCB3ZSBmaW5kIHRoYXQgdGhlIG51bWJlciAKaW5kaWNhdGVkIGZvciB0aGUgcGh5c2ljYWwgYXRvbSAoNDleKSBjb3JyZXNwb25kcyBhbG1vc3QgZXhhY3RseSAKd2l0aCB0aGUgY2FsY3VsYXRpb24gYmFzZWQgdXBvbiB0aGUgYWN0dWFsIGNvdW50aW5nIG9mIHRoZSBjb2lscy4gCkluZGVlZCwgaXQgc2VlbXMgcHJvYmFibGUgdGhhdCBidXQgZm9yIHRoZSBzbGlnaHQgZ3Jvd3RoIG9mIHRoZSAKdGhyZWUgdGhpY2tlciB3aXJlcyBvZiB0aGUgYXRvbSB0aGUgY29ycmVzcG9uZGVuY2Ugd291bGQgaGF2ZSAKYmVlbiBwZXJmZWN0LiAKCkl0IG11c3QgYmUgbm90ZWQgdGhhdCBhIHBoeXNpY2FsIGF0b20gY2Fubm90IGJlIGRpcmVjdGx5IApicm9rZW4gdXAgaW50byBhc3RyYWwgYXRvbXMuIElmIHRoZSB1bml0IG9mIGZvcmNlIHdoaWNoIHdoaXJscyAKdGhvc2UgbWlsbGlvbnMgb2YgZG90cyBpbnRvIHRoZSBjb21wbGljYXRlZCBzaGFwZSBvZiBhIHBoeXNpY2FsIAphdG9tIGJlIHByZXNzZWQgYmFjayBieSBhbiBlZmZvcnQgb2Ygd2lsbCBvdmVyIHRoZSB0aHJlc2hvbGQgb2YgCnRoZSBhc3RyYWwgcGxhbmUsIHRoZSBhdG9tIGRpc2FwcGVhcnMgaW5zdGFudGx5LCBmb3IgdGhlIGRvdHMgYXJlIApyZWxlYXNlZC4gQnV0IHRoZSBzYW1lIHVuaXQgb2YgZm9yY2UsIHdvcmtpbmcgbm93IHVwb24gYSAKaGlnaGVyIGxldmVsLCBleHByZXNzZXMgaXRzZWxmIG5vdCB0aHJvdWdoIG9uZSBhc3RyYWwgYXRvbSwgYnV0IAp0aHJvdWdoIGEgZ3JvdXAgb2YgNDksIElmIHRoZSBwcm9jZXNzIG9mIHByZXNzaW5nIGJhY2sgdGhlIAp1bml0IG9mIGZvcmNlIGlzIHJlcGVhdGVkLCBzbyB0aGF0IGl0IGVuZXJnaXNlcyB1cG9uIHRoZSBtZW50YWwgCnBsYW5lLCB3ZSBmaW5kIHRoZSBncm91cCB0aGVyZSBlbmxhcmdlZCB0byB0aGUgbnVtYmVyIG9mIDI0MDEgb2YgCnRob3NlIGhpZ2hlciBhdG9tcy4gVXBvbiB0aGUgYnVkZGhpYyBwbGFuZSB0aGUgbnVtYmVyIG9mIAphdG9tcyBmb3JtZWQgYnkgdGhlIHNhbWUgYW1vdW50IG9mIGZvcmNlIGlzIHZlcnkgbXVjaCBncmVhdGVyIApzdGlsbCDigJQgcHJvYmFibHkgdGhlIGN1YmUgb2YgNDkgaW5zdGVhZCBvZiB0aGUgc3F1YXJlLCB0aG91Z2ggdGhleSAKaGF2ZSBub3QgYmVlbiBhY3R1YWxseSBjb3VudGVkLiBUaGVyZWZvcmUgb25lIHBoeXNpY2FsIGF0b20gaXMgCm5vdCBjb21wb3NlZCAwLyBmb3J0eS1uaW5lIGFzdHJhbCBvciAyNDAxIG1lbnRhbCBhdG9tcywgYnV0IGNvcnJlLSAKc3BvbmRzIHRvIHRoZW0sIGluIHRoZSBzZW5zZSB0aGF0IHRoZSBmb3JjZSB3aGljaCBtYW5pZmVzdHMgCnRocm91Z2ggaXQgd291bGQgc2hvdyBpdHNlbGYgb24gdGhvc2UgaGlnaGVyIHBsYW5lcyBieSBlbmVyZ2lzaW5nIApyZXNwZWN0aXZlbHkgdGhvc2UgbnVtYmVycyBvZiBhdG9tcy4gCgpUaGUgZG90cywgb3IgYmVhZHMsIHNlZW0gdG8gYmUgdGhlIGNvbnN0aXR1ZW50cyBvZiBhbGwgbWF0dGVyIApvZiB3aGljaCB3ZSwgYXQgcHJlc2VudCwga25vdyBhbnl0aGluZzsgYXN0cmFsLCBtZW50YWwgYW5kIApidWRkaGljIGF0b21zIGFyZSBidWlsdCBvZiB0aGVtLCBzbyB3ZSBtYXkgZmFpcmx5IHJlZ2FyZCAKdGhlbSBhcyBmdW5kYW1lbnRhbCB1bml0cywgdGhlIGJhc2lzIG9mIG1hdHRlci4=
Iscriviti a:
Post (Atom)
[AL CORPUS] Occult Chemistry [2/2]
VGhlc2UgdW5pdHMgYXJlIGFsbCBhbGlrZSwgc3BoZXJpY2FsIGFuZCBhYnNvbHV0ZWx5IHNpbXBsZSBpbiAKY29uc3RydWN0aW9uLiBUaG91Z2ggdGhleSBhcmUgdGhlIGJhc2lzIG9m...
-
VGhlc2UgdW5pdHMgYXJlIGFsbCBhbGlrZSwgc3BoZXJpY2FsIGFuZCBhYnNvbHV0ZWx5IHNpbXBsZSBpbiAKY29uc3RydWN0aW9uLiBUaG91Z2ggdGhleSBhcmUgdGhlIGJhc2lzIG9m...