diff --git a/hw3/aes-gpl.bin b/hw3/aes-gpl.bin new file mode 100644 index 0000000..37664ae Binary files /dev/null and b/hw3/aes-gpl.bin differ diff --git a/hw3/base64-gpl.bin b/hw3/base64-gpl.bin new file mode 100644 index 0000000..d5d3cdd --- /dev/null +++ b/hw3/base64-gpl.bin @@ -0,0 +1,733 @@ +ICAgICAgICAgICAgICAgICAgICBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQog +ICAgICAgICAgICAgICAgICAgICAgIFZlcnNpb24gMywgMjkgSnVuZSAyMDA3Cgog +Q29weXJpZ2h0IChDKSAyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j +LiA8aHR0cHM6Ly9mc2Yub3JnLz4KIEV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBj +b3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcwogb2YgdGhpcyBsaWNl +bnNlIGRvY3VtZW50LCBidXQgY2hhbmdpbmcgaXQgaXMgbm90IGFsbG93ZWQuCgog +ICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJlYW1ibGUKCiAgVGhlIEdOVSBH +ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGEgZnJlZSwgY29weWxlZnQgbGljZW5z +ZSBmb3IKc29mdHdhcmUgYW5kIG90aGVyIGtpbmRzIG9mIHdvcmtzLgoKICBUaGUg +bGljZW5zZXMgZm9yIG1vc3Qgc29mdHdhcmUgYW5kIG90aGVyIHByYWN0aWNhbCB3 +b3JrcyBhcmUgZGVzaWduZWQKdG8gdGFrZSBhd2F5IHlvdXIgZnJlZWRvbSB0byBz +aGFyZSBhbmQgY2hhbmdlIHRoZSB3b3Jrcy4gIEJ5IGNvbnRyYXN0LAp0aGUgR05V +IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gZ3VhcmFudGVl +IHlvdXIgZnJlZWRvbSB0bwpzaGFyZSBhbmQgY2hhbmdlIGFsbCB2ZXJzaW9ucyBv +ZiBhIHByb2dyYW0tLXRvIG1ha2Ugc3VyZSBpdCByZW1haW5zIGZyZWUKc29mdHdh +cmUgZm9yIGFsbCBpdHMgdXNlcnMuICBXZSwgdGhlIEZyZWUgU29mdHdhcmUgRm91 +bmRhdGlvbiwgdXNlIHRoZQpHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig +bW9zdCBvZiBvdXIgc29mdHdhcmU7IGl0IGFwcGxpZXMgYWxzbyB0bwphbnkgb3Ro +ZXIgd29yayByZWxlYXNlZCB0aGlzIHdheSBieSBpdHMgYXV0aG9ycy4gIFlvdSBj +YW4gYXBwbHkgaXQgdG8KeW91ciBwcm9ncmFtcywgdG9vLgoKICBXaGVuIHdlIHNw +ZWFrIG9mIGZyZWUgc29mdHdhcmUsIHdlIGFyZSByZWZlcnJpbmcgdG8gZnJlZWRv +bSwgbm90CnByaWNlLiAgT3VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2VzIGFyZSBk +ZXNpZ25lZCB0byBtYWtlIHN1cmUgdGhhdCB5b3UKaGF2ZSB0aGUgZnJlZWRvbSB0 +byBkaXN0cmlidXRlIGNvcGllcyBvZiBmcmVlIHNvZnR3YXJlIChhbmQgY2hhcmdl +IGZvcgp0aGVtIGlmIHlvdSB3aXNoKSwgdGhhdCB5b3UgcmVjZWl2ZSBzb3VyY2Ug +Y29kZSBvciBjYW4gZ2V0IGl0IGlmIHlvdQp3YW50IGl0LCB0aGF0IHlvdSBjYW4g +Y2hhbmdlIHRoZSBzb2Z0d2FyZSBvciB1c2UgcGllY2VzIG9mIGl0IGluIG5ldwpm +cmVlIHByb2dyYW1zLCBhbmQgdGhhdCB5b3Uga25vdyB5b3UgY2FuIGRvIHRoZXNl +IHRoaW5ncy4KCiAgVG8gcHJvdGVjdCB5b3VyIHJpZ2h0cywgd2UgbmVlZCB0byBw +cmV2ZW50IG90aGVycyBmcm9tIGRlbnlpbmcgeW91CnRoZXNlIHJpZ2h0cyBvciBh +c2tpbmcgeW91IHRvIHN1cnJlbmRlciB0aGUgcmlnaHRzLiAgVGhlcmVmb3JlLCB5 +b3UgaGF2ZQpjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgaWYgeW91IGRpc3RyaWJ1 +dGUgY29waWVzIG9mIHRoZSBzb2Z0d2FyZSwgb3IgaWYKeW91IG1vZGlmeSBpdDog +cmVzcG9uc2liaWxpdGllcyB0byByZXNwZWN0IHRoZSBmcmVlZG9tIG9mIG90aGVy +cy4KCiAgRm9yIGV4YW1wbGUsIGlmIHlvdSBkaXN0cmlidXRlIGNvcGllcyBvZiBz +dWNoIGEgcHJvZ3JhbSwgd2hldGhlcgpncmF0aXMgb3IgZm9yIGEgZmVlLCB5b3Ug +bXVzdCBwYXNzIG9uIHRvIHRoZSByZWNpcGllbnRzIHRoZSBzYW1lCmZyZWVkb21z +IHRoYXQgeW91IHJlY2VpdmVkLiAgWW91IG11c3QgbWFrZSBzdXJlIHRoYXQgdGhl +eSwgdG9vLCByZWNlaXZlCm9yIGNhbiBnZXQgdGhlIHNvdXJjZSBjb2RlLiAgQW5k +IHlvdSBtdXN0IHNob3cgdGhlbSB0aGVzZSB0ZXJtcyBzbyB0aGV5Cmtub3cgdGhl +aXIgcmlnaHRzLgoKICBEZXZlbG9wZXJzIHRoYXQgdXNlIHRoZSBHTlUgR1BMIHBy +b3RlY3QgeW91ciByaWdodHMgd2l0aCB0d28gc3RlcHM6CigxKSBhc3NlcnQgY29w +eXJpZ2h0IG9uIHRoZSBzb2Z0d2FyZSwgYW5kICgyKSBvZmZlciB5b3UgdGhpcyBM +aWNlbnNlCmdpdmluZyB5b3UgbGVnYWwgcGVybWlzc2lvbiB0byBjb3B5LCBkaXN0 +cmlidXRlIGFuZC9vciBtb2RpZnkgaXQuCgogIEZvciB0aGUgZGV2ZWxvcGVycycg +YW5kIGF1dGhvcnMnIHByb3RlY3Rpb24sIHRoZSBHUEwgY2xlYXJseSBleHBsYWlu +cwp0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IGZvciB0aGlzIGZyZWUgc29mdHdh +cmUuICBGb3IgYm90aCB1c2VycycgYW5kCmF1dGhvcnMnIHNha2UsIHRoZSBHUEwg +cmVxdWlyZXMgdGhhdCBtb2RpZmllZCB2ZXJzaW9ucyBiZSBtYXJrZWQgYXMKY2hh +bmdlZCwgc28gdGhhdCB0aGVpciBwcm9ibGVtcyB3aWxsIG5vdCBiZSBhdHRyaWJ1 +dGVkIGVycm9uZW91c2x5IHRvCmF1dGhvcnMgb2YgcHJldmlvdXMgdmVyc2lvbnMu +CgogIFNvbWUgZGV2aWNlcyBhcmUgZGVzaWduZWQgdG8gZGVueSB1c2VycyBhY2Nl +c3MgdG8gaW5zdGFsbCBvciBydW4KbW9kaWZpZWQgdmVyc2lvbnMgb2YgdGhlIHNv +ZnR3YXJlIGluc2lkZSB0aGVtLCBhbHRob3VnaCB0aGUgbWFudWZhY3R1cmVyCmNh +biBkbyBzby4gIFRoaXMgaXMgZnVuZGFtZW50YWxseSBpbmNvbXBhdGlibGUgd2l0 +aCB0aGUgYWltIG9mCnByb3RlY3RpbmcgdXNlcnMnIGZyZWVkb20gdG8gY2hhbmdl +IHRoZSBzb2Z0d2FyZS4gIFRoZSBzeXN0ZW1hdGljCnBhdHRlcm4gb2Ygc3VjaCBh +YnVzZSBvY2N1cnMgaW4gdGhlIGFyZWEgb2YgcHJvZHVjdHMgZm9yIGluZGl2aWR1 +YWxzIHRvCnVzZSwgd2hpY2ggaXMgcHJlY2lzZWx5IHdoZXJlIGl0IGlzIG1vc3Qg +dW5hY2NlcHRhYmxlLiAgVGhlcmVmb3JlLCB3ZQpoYXZlIGRlc2lnbmVkIHRoaXMg +dmVyc2lvbiBvZiB0aGUgR1BMIHRvIHByb2hpYml0IHRoZSBwcmFjdGljZSBmb3Ig +dGhvc2UKcHJvZHVjdHMuICBJZiBzdWNoIHByb2JsZW1zIGFyaXNlIHN1YnN0YW50 +aWFsbHkgaW4gb3RoZXIgZG9tYWlucywgd2UKc3RhbmQgcmVhZHkgdG8gZXh0ZW5k +IHRoaXMgcHJvdmlzaW9uIHRvIHRob3NlIGRvbWFpbnMgaW4gZnV0dXJlIHZlcnNp +b25zCm9mIHRoZSBHUEwsIGFzIG5lZWRlZCB0byBwcm90ZWN0IHRoZSBmcmVlZG9t +IG9mIHVzZXJzLgoKICBGaW5hbGx5LCBldmVyeSBwcm9ncmFtIGlzIHRocmVhdGVu +ZWQgY29uc3RhbnRseSBieSBzb2Z0d2FyZSBwYXRlbnRzLgpTdGF0ZXMgc2hvdWxk +IG5vdCBhbGxvdyBwYXRlbnRzIHRvIHJlc3RyaWN0IGRldmVsb3BtZW50IGFuZCB1 +c2Ugb2YKc29mdHdhcmUgb24gZ2VuZXJhbC1wdXJwb3NlIGNvbXB1dGVycywgYnV0 +IGluIHRob3NlIHRoYXQgZG8sIHdlIHdpc2ggdG8KYXZvaWQgdGhlIHNwZWNpYWwg +ZGFuZ2VyIHRoYXQgcGF0ZW50cyBhcHBsaWVkIHRvIGEgZnJlZSBwcm9ncmFtIGNv +dWxkCm1ha2UgaXQgZWZmZWN0aXZlbHkgcHJvcHJpZXRhcnkuICBUbyBwcmV2ZW50 +IHRoaXMsIHRoZSBHUEwgYXNzdXJlcyB0aGF0CnBhdGVudHMgY2Fubm90IGJlIHVz +ZWQgdG8gcmVuZGVyIHRoZSBwcm9ncmFtIG5vbi1mcmVlLgoKICBUaGUgcHJlY2lz +ZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW9u +IGFuZAptb2RpZmljYXRpb24gZm9sbG93LgoKICAgICAgICAgICAgICAgICAgICAg +ICBURVJNUyBBTkQgQ09ORElUSU9OUwoKICAwLiBEZWZpbml0aW9ucy4KCiAgIlRo +aXMgTGljZW5zZSIgcmVmZXJzIHRvIHZlcnNpb24gMyBvZiB0aGUgR05VIEdlbmVy +YWwgUHVibGljIExpY2Vuc2UuCgogICJDb3B5cmlnaHQiIGFsc28gbWVhbnMgY29w +eXJpZ2h0LWxpa2UgbGF3cyB0aGF0IGFwcGx5IHRvIG90aGVyIGtpbmRzIG9mCndv +cmtzLCBzdWNoIGFzIHNlbWljb25kdWN0b3IgbWFza3MuCgogICJUaGUgUHJvZ3Jh +bSIgcmVmZXJzIHRvIGFueSBjb3B5cmlnaHRhYmxlIHdvcmsgbGljZW5zZWQgdW5k +ZXIgdGhpcwpMaWNlbnNlLiAgRWFjaCBsaWNlbnNlZSBpcyBhZGRyZXNzZWQgYXMg +InlvdSIuICAiTGljZW5zZWVzIiBhbmQKInJlY2lwaWVudHMiIG1heSBiZSBpbmRp +dmlkdWFscyBvciBvcmdhbml6YXRpb25zLgoKICBUbyAibW9kaWZ5IiBhIHdvcmsg +bWVhbnMgdG8gY29weSBmcm9tIG9yIGFkYXB0IGFsbCBvciBwYXJ0IG9mIHRoZSB3 +b3JrCmluIGEgZmFzaGlvbiByZXF1aXJpbmcgY29weXJpZ2h0IHBlcm1pc3Npb24s +IG90aGVyIHRoYW4gdGhlIG1ha2luZyBvZiBhbgpleGFjdCBjb3B5LiAgVGhlIHJl +c3VsdGluZyB3b3JrIGlzIGNhbGxlZCBhICJtb2RpZmllZCB2ZXJzaW9uIiBvZiB0 +aGUKZWFybGllciB3b3JrIG9yIGEgd29yayAiYmFzZWQgb24iIHRoZSBlYXJsaWVy +IHdvcmsuCgogIEEgImNvdmVyZWQgd29yayIgbWVhbnMgZWl0aGVyIHRoZSB1bm1v +ZGlmaWVkIFByb2dyYW0gb3IgYSB3b3JrIGJhc2VkCm9uIHRoZSBQcm9ncmFtLgoK +ICBUbyAicHJvcGFnYXRlIiBhIHdvcmsgbWVhbnMgdG8gZG8gYW55dGhpbmcgd2l0 +aCBpdCB0aGF0LCB3aXRob3V0CnBlcm1pc3Npb24sIHdvdWxkIG1ha2UgeW91IGRp +cmVjdGx5IG9yIHNlY29uZGFyaWx5IGxpYWJsZSBmb3IKaW5mcmluZ2VtZW50IHVu +ZGVyIGFwcGxpY2FibGUgY29weXJpZ2h0IGxhdywgZXhjZXB0IGV4ZWN1dGluZyBp +dCBvbiBhCmNvbXB1dGVyIG9yIG1vZGlmeWluZyBhIHByaXZhdGUgY29weS4gIFBy +b3BhZ2F0aW9uIGluY2x1ZGVzIGNvcHlpbmcsCmRpc3RyaWJ1dGlvbiAod2l0aCBv +ciB3aXRob3V0IG1vZGlmaWNhdGlvbiksIG1ha2luZyBhdmFpbGFibGUgdG8gdGhl +CnB1YmxpYywgYW5kIGluIHNvbWUgY291bnRyaWVzIG90aGVyIGFjdGl2aXRpZXMg +YXMgd2VsbC4KCiAgVG8gImNvbnZleSIgYSB3b3JrIG1lYW5zIGFueSBraW5kIG9m +IHByb3BhZ2F0aW9uIHRoYXQgZW5hYmxlcyBvdGhlcgpwYXJ0aWVzIHRvIG1ha2Ug +b3IgcmVjZWl2ZSBjb3BpZXMuICBNZXJlIGludGVyYWN0aW9uIHdpdGggYSB1c2Vy +IHRocm91Z2gKYSBjb21wdXRlciBuZXR3b3JrLCB3aXRoIG5vIHRyYW5zZmVyIG9m +IGEgY29weSwgaXMgbm90IGNvbnZleWluZy4KCiAgQW4gaW50ZXJhY3RpdmUgdXNl +ciBpbnRlcmZhY2UgZGlzcGxheXMgIkFwcHJvcHJpYXRlIExlZ2FsIE5vdGljZXMi +CnRvIHRoZSBleHRlbnQgdGhhdCBpdCBpbmNsdWRlcyBhIGNvbnZlbmllbnQgYW5k +IHByb21pbmVudGx5IHZpc2libGUKZmVhdHVyZSB0aGF0ICgxKSBkaXNwbGF5cyBh +biBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlLCBhbmQgKDIpCnRlbGxzIHRo +ZSB1c2VyIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoZSB3b3JrIChl +eGNlcHQgdG8gdGhlCmV4dGVudCB0aGF0IHdhcnJhbnRpZXMgYXJlIHByb3ZpZGVk +KSwgdGhhdCBsaWNlbnNlZXMgbWF5IGNvbnZleSB0aGUKd29yayB1bmRlciB0aGlz +IExpY2Vuc2UsIGFuZCBob3cgdG8gdmlldyBhIGNvcHkgb2YgdGhpcyBMaWNlbnNl +LiAgSWYKdGhlIGludGVyZmFjZSBwcmVzZW50cyBhIGxpc3Qgb2YgdXNlciBjb21t +YW5kcyBvciBvcHRpb25zLCBzdWNoIGFzIGEKbWVudSwgYSBwcm9taW5lbnQgaXRl +bSBpbiB0aGUgbGlzdCBtZWV0cyB0aGlzIGNyaXRlcmlvbi4KCiAgMS4gU291cmNl +IENvZGUuCgogIFRoZSAic291cmNlIGNvZGUiIGZvciBhIHdvcmsgbWVhbnMgdGhl +IHByZWZlcnJlZCBmb3JtIG9mIHRoZSB3b3JrCmZvciBtYWtpbmcgbW9kaWZpY2F0 +aW9ucyB0byBpdC4gICJPYmplY3QgY29kZSIgbWVhbnMgYW55IG5vbi1zb3VyY2UK +Zm9ybSBvZiBhIHdvcmsuCgogIEEgIlN0YW5kYXJkIEludGVyZmFjZSIgbWVhbnMg +YW4gaW50ZXJmYWNlIHRoYXQgZWl0aGVyIGlzIGFuIG9mZmljaWFsCnN0YW5kYXJk +IGRlZmluZWQgYnkgYSByZWNvZ25pemVkIHN0YW5kYXJkcyBib2R5LCBvciwgaW4g +dGhlIGNhc2Ugb2YKaW50ZXJmYWNlcyBzcGVjaWZpZWQgZm9yIGEgcGFydGljdWxh +ciBwcm9ncmFtbWluZyBsYW5ndWFnZSwgb25lIHRoYXQKaXMgd2lkZWx5IHVzZWQg +YW1vbmcgZGV2ZWxvcGVycyB3b3JraW5nIGluIHRoYXQgbGFuZ3VhZ2UuCgogIFRo +ZSAiU3lzdGVtIExpYnJhcmllcyIgb2YgYW4gZXhlY3V0YWJsZSB3b3JrIGluY2x1 +ZGUgYW55dGhpbmcsIG90aGVyCnRoYW4gdGhlIHdvcmsgYXMgYSB3aG9sZSwgdGhh +dCAoYSkgaXMgaW5jbHVkZWQgaW4gdGhlIG5vcm1hbCBmb3JtIG9mCnBhY2thZ2lu +ZyBhIE1ham9yIENvbXBvbmVudCwgYnV0IHdoaWNoIGlzIG5vdCBwYXJ0IG9mIHRo +YXQgTWFqb3IKQ29tcG9uZW50LCBhbmQgKGIpIHNlcnZlcyBvbmx5IHRvIGVuYWJs +ZSB1c2Ugb2YgdGhlIHdvcmsgd2l0aCB0aGF0Ck1ham9yIENvbXBvbmVudCwgb3Ig +dG8gaW1wbGVtZW50IGEgU3RhbmRhcmQgSW50ZXJmYWNlIGZvciB3aGljaCBhbgpp +bXBsZW1lbnRhdGlvbiBpcyBhdmFpbGFibGUgdG8gdGhlIHB1YmxpYyBpbiBzb3Vy +Y2UgY29kZSBmb3JtLiAgQQoiTWFqb3IgQ29tcG9uZW50IiwgaW4gdGhpcyBjb250 +ZXh0LCBtZWFucyBhIG1ham9yIGVzc2VudGlhbCBjb21wb25lbnQKKGtlcm5lbCwg +d2luZG93IHN5c3RlbSwgYW5kIHNvIG9uKSBvZiB0aGUgc3BlY2lmaWMgb3BlcmF0 +aW5nIHN5c3RlbQooaWYgYW55KSBvbiB3aGljaCB0aGUgZXhlY3V0YWJsZSB3b3Jr +IHJ1bnMsIG9yIGEgY29tcGlsZXIgdXNlZCB0bwpwcm9kdWNlIHRoZSB3b3JrLCBv +ciBhbiBvYmplY3QgY29kZSBpbnRlcnByZXRlciB1c2VkIHRvIHJ1biBpdC4KCiAg +VGhlICJDb3JyZXNwb25kaW5nIFNvdXJjZSIgZm9yIGEgd29yayBpbiBvYmplY3Qg +Y29kZSBmb3JtIG1lYW5zIGFsbAp0aGUgc291cmNlIGNvZGUgbmVlZGVkIHRvIGdl +bmVyYXRlLCBpbnN0YWxsLCBhbmQgKGZvciBhbiBleGVjdXRhYmxlCndvcmspIHJ1 +biB0aGUgb2JqZWN0IGNvZGUgYW5kIHRvIG1vZGlmeSB0aGUgd29yaywgaW5jbHVk +aW5nIHNjcmlwdHMgdG8KY29udHJvbCB0aG9zZSBhY3Rpdml0aWVzLiAgSG93ZXZl +ciwgaXQgZG9lcyBub3QgaW5jbHVkZSB0aGUgd29yaydzClN5c3RlbSBMaWJyYXJp +ZXMsIG9yIGdlbmVyYWwtcHVycG9zZSB0b29scyBvciBnZW5lcmFsbHkgYXZhaWxh +YmxlIGZyZWUKcHJvZ3JhbXMgd2hpY2ggYXJlIHVzZWQgdW5tb2RpZmllZCBpbiBw +ZXJmb3JtaW5nIHRob3NlIGFjdGl2aXRpZXMgYnV0CndoaWNoIGFyZSBub3QgcGFy +dCBvZiB0aGUgd29yay4gIEZvciBleGFtcGxlLCBDb3JyZXNwb25kaW5nIFNvdXJj +ZQppbmNsdWRlcyBpbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxlcyBhc3NvY2lhdGVk +IHdpdGggc291cmNlIGZpbGVzIGZvcgp0aGUgd29yaywgYW5kIHRoZSBzb3VyY2Ug +Y29kZSBmb3Igc2hhcmVkIGxpYnJhcmllcyBhbmQgZHluYW1pY2FsbHkKbGlua2Vk +IHN1YnByb2dyYW1zIHRoYXQgdGhlIHdvcmsgaXMgc3BlY2lmaWNhbGx5IGRlc2ln +bmVkIHRvIHJlcXVpcmUsCnN1Y2ggYXMgYnkgaW50aW1hdGUgZGF0YSBjb21tdW5p +Y2F0aW9uIG9yIGNvbnRyb2wgZmxvdyBiZXR3ZWVuIHRob3NlCnN1YnByb2dyYW1z +IGFuZCBvdGhlciBwYXJ0cyBvZiB0aGUgd29yay4KCiAgVGhlIENvcnJlc3BvbmRp +bmcgU291cmNlIG5lZWQgbm90IGluY2x1ZGUgYW55dGhpbmcgdGhhdCB1c2Vycwpj +YW4gcmVnZW5lcmF0ZSBhdXRvbWF0aWNhbGx5IGZyb20gb3RoZXIgcGFydHMgb2Yg +dGhlIENvcnJlc3BvbmRpbmcKU291cmNlLgoKICBUaGUgQ29ycmVzcG9uZGluZyBT +b3VyY2UgZm9yIGEgd29yayBpbiBzb3VyY2UgY29kZSBmb3JtIGlzIHRoYXQKc2Ft +ZSB3b3JrLgoKICAyLiBCYXNpYyBQZXJtaXNzaW9ucy4KCiAgQWxsIHJpZ2h0cyBn +cmFudGVkIHVuZGVyIHRoaXMgTGljZW5zZSBhcmUgZ3JhbnRlZCBmb3IgdGhlIHRl +cm0gb2YKY29weXJpZ2h0IG9uIHRoZSBQcm9ncmFtLCBhbmQgYXJlIGlycmV2b2Nh +YmxlIHByb3ZpZGVkIHRoZSBzdGF0ZWQKY29uZGl0aW9ucyBhcmUgbWV0LiAgVGhp +cyBMaWNlbnNlIGV4cGxpY2l0bHkgYWZmaXJtcyB5b3VyIHVubGltaXRlZApwZXJt +aXNzaW9uIHRvIHJ1biB0aGUgdW5tb2RpZmllZCBQcm9ncmFtLiAgVGhlIG91dHB1 +dCBmcm9tIHJ1bm5pbmcgYQpjb3ZlcmVkIHdvcmsgaXMgY292ZXJlZCBieSB0aGlz +IExpY2Vuc2Ugb25seSBpZiB0aGUgb3V0cHV0LCBnaXZlbiBpdHMKY29udGVudCwg +Y29uc3RpdHV0ZXMgYSBjb3ZlcmVkIHdvcmsuICBUaGlzIExpY2Vuc2UgYWNrbm93 +bGVkZ2VzIHlvdXIKcmlnaHRzIG9mIGZhaXIgdXNlIG9yIG90aGVyIGVxdWl2YWxl +bnQsIGFzIHByb3ZpZGVkIGJ5IGNvcHlyaWdodCBsYXcuCgogIFlvdSBtYXkgbWFr +ZSwgcnVuIGFuZCBwcm9wYWdhdGUgY292ZXJlZCB3b3JrcyB0aGF0IHlvdSBkbyBu +b3QKY29udmV5LCB3aXRob3V0IGNvbmRpdGlvbnMgc28gbG9uZyBhcyB5b3VyIGxp +Y2Vuc2Ugb3RoZXJ3aXNlIHJlbWFpbnMKaW4gZm9yY2UuICBZb3UgbWF5IGNvbnZl +eSBjb3ZlcmVkIHdvcmtzIHRvIG90aGVycyBmb3IgdGhlIHNvbGUgcHVycG9zZQpv +ZiBoYXZpbmcgdGhlbSBtYWtlIG1vZGlmaWNhdGlvbnMgZXhjbHVzaXZlbHkgZm9y +IHlvdSwgb3IgcHJvdmlkZSB5b3UKd2l0aCBmYWNpbGl0aWVzIGZvciBydW5uaW5n +IHRob3NlIHdvcmtzLCBwcm92aWRlZCB0aGF0IHlvdSBjb21wbHkgd2l0aAp0aGUg +dGVybXMgb2YgdGhpcyBMaWNlbnNlIGluIGNvbnZleWluZyBhbGwgbWF0ZXJpYWwg +Zm9yIHdoaWNoIHlvdSBkbwpub3QgY29udHJvbCBjb3B5cmlnaHQuICBUaG9zZSB0 +aHVzIG1ha2luZyBvciBydW5uaW5nIHRoZSBjb3ZlcmVkIHdvcmtzCmZvciB5b3Ug +bXVzdCBkbyBzbyBleGNsdXNpdmVseSBvbiB5b3VyIGJlaGFsZiwgdW5kZXIgeW91 +ciBkaXJlY3Rpb24KYW5kIGNvbnRyb2wsIG9uIHRlcm1zIHRoYXQgcHJvaGliaXQg +dGhlbSBmcm9tIG1ha2luZyBhbnkgY29waWVzIG9mCnlvdXIgY29weXJpZ2h0ZWQg +bWF0ZXJpYWwgb3V0c2lkZSB0aGVpciByZWxhdGlvbnNoaXAgd2l0aCB5b3UuCgog +IENvbnZleWluZyB1bmRlciBhbnkgb3RoZXIgY2lyY3Vtc3RhbmNlcyBpcyBwZXJt +aXR0ZWQgc29sZWx5IHVuZGVyCnRoZSBjb25kaXRpb25zIHN0YXRlZCBiZWxvdy4g +IFN1YmxpY2Vuc2luZyBpcyBub3QgYWxsb3dlZDsgc2VjdGlvbiAxMAptYWtlcyBp +dCB1bm5lY2Vzc2FyeS4KCiAgMy4gUHJvdGVjdGluZyBVc2VycycgTGVnYWwgUmln +aHRzIEZyb20gQW50aS1DaXJjdW12ZW50aW9uIExhdy4KCiAgTm8gY292ZXJlZCB3 +b3JrIHNoYWxsIGJlIGRlZW1lZCBwYXJ0IG9mIGFuIGVmZmVjdGl2ZSB0ZWNobm9s +b2dpY2FsCm1lYXN1cmUgdW5kZXIgYW55IGFwcGxpY2FibGUgbGF3IGZ1bGZpbGxp +bmcgb2JsaWdhdGlvbnMgdW5kZXIgYXJ0aWNsZQoxMSBvZiB0aGUgV0lQTyBjb3B5 +cmlnaHQgdHJlYXR5IGFkb3B0ZWQgb24gMjAgRGVjZW1iZXIgMTk5Niwgb3IKc2lt +aWxhciBsYXdzIHByb2hpYml0aW5nIG9yIHJlc3RyaWN0aW5nIGNpcmN1bXZlbnRp +b24gb2Ygc3VjaAptZWFzdXJlcy4KCiAgV2hlbiB5b3UgY29udmV5IGEgY292ZXJl +ZCB3b3JrLCB5b3Ugd2FpdmUgYW55IGxlZ2FsIHBvd2VyIHRvIGZvcmJpZApjaXJj +dW12ZW50aW9uIG9mIHRlY2hub2xvZ2ljYWwgbWVhc3VyZXMgdG8gdGhlIGV4dGVu +dCBzdWNoIGNpcmN1bXZlbnRpb24KaXMgZWZmZWN0ZWQgYnkgZXhlcmNpc2luZyBy +aWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIHdpdGggcmVzcGVjdCB0bwp0aGUgY292 +ZXJlZCB3b3JrLCBhbmQgeW91IGRpc2NsYWltIGFueSBpbnRlbnRpb24gdG8gbGlt +aXQgb3BlcmF0aW9uIG9yCm1vZGlmaWNhdGlvbiBvZiB0aGUgd29yayBhcyBhIG1l +YW5zIG9mIGVuZm9yY2luZywgYWdhaW5zdCB0aGUgd29yaydzCnVzZXJzLCB5b3Vy +IG9yIHRoaXJkIHBhcnRpZXMnIGxlZ2FsIHJpZ2h0cyB0byBmb3JiaWQgY2lyY3Vt +dmVudGlvbiBvZgp0ZWNobm9sb2dpY2FsIG1lYXN1cmVzLgoKICA0LiBDb252ZXlp +bmcgVmVyYmF0aW0gQ29waWVzLgoKICBZb3UgbWF5IGNvbnZleSB2ZXJiYXRpbSBj +b3BpZXMgb2YgdGhlIFByb2dyYW0ncyBzb3VyY2UgY29kZSBhcyB5b3UKcmVjZWl2 +ZSBpdCwgaW4gYW55IG1lZGl1bSwgcHJvdmlkZWQgdGhhdCB5b3UgY29uc3BpY3Vv +dXNseSBhbmQKYXBwcm9wcmlhdGVseSBwdWJsaXNoIG9uIGVhY2ggY29weSBhbiBh +cHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlOwprZWVwIGludGFjdCBhbGwgbm90 +aWNlcyBzdGF0aW5nIHRoYXQgdGhpcyBMaWNlbnNlIGFuZCBhbnkKbm9uLXBlcm1p +c3NpdmUgdGVybXMgYWRkZWQgaW4gYWNjb3JkIHdpdGggc2VjdGlvbiA3IGFwcGx5 +IHRvIHRoZSBjb2RlOwprZWVwIGludGFjdCBhbGwgbm90aWNlcyBvZiB0aGUgYWJz +ZW5jZSBvZiBhbnkgd2FycmFudHk7IGFuZCBnaXZlIGFsbApyZWNpcGllbnRzIGEg +Y29weSBvZiB0aGlzIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgUHJvZ3JhbS4KCiAg +WW91IG1heSBjaGFyZ2UgYW55IHByaWNlIG9yIG5vIHByaWNlIGZvciBlYWNoIGNv +cHkgdGhhdCB5b3UgY29udmV5LAphbmQgeW91IG1heSBvZmZlciBzdXBwb3J0IG9y +IHdhcnJhbnR5IHByb3RlY3Rpb24gZm9yIGEgZmVlLgoKICA1LiBDb252ZXlpbmcg +TW9kaWZpZWQgU291cmNlIFZlcnNpb25zLgoKICBZb3UgbWF5IGNvbnZleSBhIHdv +cmsgYmFzZWQgb24gdGhlIFByb2dyYW0sIG9yIHRoZSBtb2RpZmljYXRpb25zIHRv +CnByb2R1Y2UgaXQgZnJvbSB0aGUgUHJvZ3JhbSwgaW4gdGhlIGZvcm0gb2Ygc291 +cmNlIGNvZGUgdW5kZXIgdGhlCnRlcm1zIG9mIHNlY3Rpb24gNCwgcHJvdmlkZWQg +dGhhdCB5b3UgYWxzbyBtZWV0IGFsbCBvZiB0aGVzZSBjb25kaXRpb25zOgoKICAg +IGEpIFRoZSB3b3JrIG11c3QgY2FycnkgcHJvbWluZW50IG5vdGljZXMgc3RhdGlu +ZyB0aGF0IHlvdSBtb2RpZmllZAogICAgaXQsIGFuZCBnaXZpbmcgYSByZWxldmFu +dCBkYXRlLgoKICAgIGIpIFRoZSB3b3JrIG11c3QgY2FycnkgcHJvbWluZW50IG5v +dGljZXMgc3RhdGluZyB0aGF0IGl0IGlzCiAgICByZWxlYXNlZCB1bmRlciB0aGlz +IExpY2Vuc2UgYW5kIGFueSBjb25kaXRpb25zIGFkZGVkIHVuZGVyIHNlY3Rpb24K +ICAgIDcuICBUaGlzIHJlcXVpcmVtZW50IG1vZGlmaWVzIHRoZSByZXF1aXJlbWVu +dCBpbiBzZWN0aW9uIDQgdG8KICAgICJrZWVwIGludGFjdCBhbGwgbm90aWNlcyIu +CgogICAgYykgWW91IG11c3QgbGljZW5zZSB0aGUgZW50aXJlIHdvcmssIGFzIGEg +d2hvbGUsIHVuZGVyIHRoaXMKICAgIExpY2Vuc2UgdG8gYW55b25lIHdobyBjb21l +cyBpbnRvIHBvc3Nlc3Npb24gb2YgYSBjb3B5LiAgVGhpcwogICAgTGljZW5zZSB3 +aWxsIHRoZXJlZm9yZSBhcHBseSwgYWxvbmcgd2l0aCBhbnkgYXBwbGljYWJsZSBz +ZWN0aW9uIDcKICAgIGFkZGl0aW9uYWwgdGVybXMsIHRvIHRoZSB3aG9sZSBvZiB0 +aGUgd29yaywgYW5kIGFsbCBpdHMgcGFydHMsCiAgICByZWdhcmRsZXNzIG9mIGhv +dyB0aGV5IGFyZSBwYWNrYWdlZC4gIFRoaXMgTGljZW5zZSBnaXZlcyBubwogICAg +cGVybWlzc2lvbiB0byBsaWNlbnNlIHRoZSB3b3JrIGluIGFueSBvdGhlciB3YXks +IGJ1dCBpdCBkb2VzIG5vdAogICAgaW52YWxpZGF0ZSBzdWNoIHBlcm1pc3Npb24g +aWYgeW91IGhhdmUgc2VwYXJhdGVseSByZWNlaXZlZCBpdC4KCiAgICBkKSBJZiB0 +aGUgd29yayBoYXMgaW50ZXJhY3RpdmUgdXNlciBpbnRlcmZhY2VzLCBlYWNoIG11 +c3QgZGlzcGxheQogICAgQXBwcm9wcmlhdGUgTGVnYWwgTm90aWNlczsgaG93ZXZl +ciwgaWYgdGhlIFByb2dyYW0gaGFzIGludGVyYWN0aXZlCiAgICBpbnRlcmZhY2Vz +IHRoYXQgZG8gbm90IGRpc3BsYXkgQXBwcm9wcmlhdGUgTGVnYWwgTm90aWNlcywg +eW91cgogICAgd29yayBuZWVkIG5vdCBtYWtlIHRoZW0gZG8gc28uCgogIEEgY29t +cGlsYXRpb24gb2YgYSBjb3ZlcmVkIHdvcmsgd2l0aCBvdGhlciBzZXBhcmF0ZSBh +bmQgaW5kZXBlbmRlbnQKd29ya3MsIHdoaWNoIGFyZSBub3QgYnkgdGhlaXIgbmF0 +dXJlIGV4dGVuc2lvbnMgb2YgdGhlIGNvdmVyZWQgd29yaywKYW5kIHdoaWNoIGFy +ZSBub3QgY29tYmluZWQgd2l0aCBpdCBzdWNoIGFzIHRvIGZvcm0gYSBsYXJnZXIg +cHJvZ3JhbSwKaW4gb3Igb24gYSB2b2x1bWUgb2YgYSBzdG9yYWdlIG9yIGRpc3Ry +aWJ1dGlvbiBtZWRpdW0sIGlzIGNhbGxlZCBhbgoiYWdncmVnYXRlIiBpZiB0aGUg +Y29tcGlsYXRpb24gYW5kIGl0cyByZXN1bHRpbmcgY29weXJpZ2h0IGFyZSBub3QK +dXNlZCB0byBsaW1pdCB0aGUgYWNjZXNzIG9yIGxlZ2FsIHJpZ2h0cyBvZiB0aGUg +Y29tcGlsYXRpb24ncyB1c2VycwpiZXlvbmQgd2hhdCB0aGUgaW5kaXZpZHVhbCB3 +b3JrcyBwZXJtaXQuICBJbmNsdXNpb24gb2YgYSBjb3ZlcmVkIHdvcmsKaW4gYW4g +YWdncmVnYXRlIGRvZXMgbm90IGNhdXNlIHRoaXMgTGljZW5zZSB0byBhcHBseSB0 +byB0aGUgb3RoZXIKcGFydHMgb2YgdGhlIGFnZ3JlZ2F0ZS4KCiAgNi4gQ29udmV5 +aW5nIE5vbi1Tb3VyY2UgRm9ybXMuCgogIFlvdSBtYXkgY29udmV5IGEgY292ZXJl +ZCB3b3JrIGluIG9iamVjdCBjb2RlIGZvcm0gdW5kZXIgdGhlIHRlcm1zCm9mIHNl +Y3Rpb25zIDQgYW5kIDUsIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gY29udmV5IHRo +ZQptYWNoaW5lLXJlYWRhYmxlIENvcnJlc3BvbmRpbmcgU291cmNlIHVuZGVyIHRo +ZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsCmluIG9uZSBvZiB0aGVzZSB3YXlzOgoK +ICAgIGEpIENvbnZleSB0aGUgb2JqZWN0IGNvZGUgaW4sIG9yIGVtYm9kaWVkIGlu +LCBhIHBoeXNpY2FsIHByb2R1Y3QKICAgIChpbmNsdWRpbmcgYSBwaHlzaWNhbCBk +aXN0cmlidXRpb24gbWVkaXVtKSwgYWNjb21wYW5pZWQgYnkgdGhlCiAgICBDb3Jy +ZXNwb25kaW5nIFNvdXJjZSBmaXhlZCBvbiBhIGR1cmFibGUgcGh5c2ljYWwgbWVk +aXVtCiAgICBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5n +ZS4KCiAgICBiKSBDb252ZXkgdGhlIG9iamVjdCBjb2RlIGluLCBvciBlbWJvZGll +ZCBpbiwgYSBwaHlzaWNhbCBwcm9kdWN0CiAgICAoaW5jbHVkaW5nIGEgcGh5c2lj +YWwgZGlzdHJpYnV0aW9uIG1lZGl1bSksIGFjY29tcGFuaWVkIGJ5IGEKICAgIHdy +aXR0ZW4gb2ZmZXIsIHZhbGlkIGZvciBhdCBsZWFzdCB0aHJlZSB5ZWFycyBhbmQg +dmFsaWQgZm9yIGFzCiAgICBsb25nIGFzIHlvdSBvZmZlciBzcGFyZSBwYXJ0cyBv +ciBjdXN0b21lciBzdXBwb3J0IGZvciB0aGF0IHByb2R1Y3QKICAgIG1vZGVsLCB0 +byBnaXZlIGFueW9uZSB3aG8gcG9zc2Vzc2VzIHRoZSBvYmplY3QgY29kZSBlaXRo +ZXIgKDEpIGEKICAgIGNvcHkgb2YgdGhlIENvcnJlc3BvbmRpbmcgU291cmNlIGZv +ciBhbGwgdGhlIHNvZnR3YXJlIGluIHRoZQogICAgcHJvZHVjdCB0aGF0IGlzIGNv +dmVyZWQgYnkgdGhpcyBMaWNlbnNlLCBvbiBhIGR1cmFibGUgcGh5c2ljYWwKICAg +IG1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5n +ZSwgZm9yIGEgcHJpY2Ugbm8KICAgIG1vcmUgdGhhbiB5b3VyIHJlYXNvbmFibGUg +Y29zdCBvZiBwaHlzaWNhbGx5IHBlcmZvcm1pbmcgdGhpcwogICAgY29udmV5aW5n +IG9mIHNvdXJjZSwgb3IgKDIpIGFjY2VzcyB0byBjb3B5IHRoZQogICAgQ29ycmVz +cG9uZGluZyBTb3VyY2UgZnJvbSBhIG5ldHdvcmsgc2VydmVyIGF0IG5vIGNoYXJn +ZS4KCiAgICBjKSBDb252ZXkgaW5kaXZpZHVhbCBjb3BpZXMgb2YgdGhlIG9iamVj +dCBjb2RlIHdpdGggYSBjb3B5IG9mIHRoZQogICAgd3JpdHRlbiBvZmZlciB0byBw +cm92aWRlIHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZS4gIFRoaXMKICAgIGFsdGVy +bmF0aXZlIGlzIGFsbG93ZWQgb25seSBvY2Nhc2lvbmFsbHkgYW5kIG5vbmNvbW1l +cmNpYWxseSwgYW5kCiAgICBvbmx5IGlmIHlvdSByZWNlaXZlZCB0aGUgb2JqZWN0 +IGNvZGUgd2l0aCBzdWNoIGFuIG9mZmVyLCBpbiBhY2NvcmQKICAgIHdpdGggc3Vi +c2VjdGlvbiA2Yi4KCiAgICBkKSBDb252ZXkgdGhlIG9iamVjdCBjb2RlIGJ5IG9m +ZmVyaW5nIGFjY2VzcyBmcm9tIGEgZGVzaWduYXRlZAogICAgcGxhY2UgKGdyYXRp +cyBvciBmb3IgYSBjaGFyZ2UpLCBhbmQgb2ZmZXIgZXF1aXZhbGVudCBhY2Nlc3Mg +dG8gdGhlCiAgICBDb3JyZXNwb25kaW5nIFNvdXJjZSBpbiB0aGUgc2FtZSB3YXkg +dGhyb3VnaCB0aGUgc2FtZSBwbGFjZSBhdCBubwogICAgZnVydGhlciBjaGFyZ2Uu +ICBZb3UgbmVlZCBub3QgcmVxdWlyZSByZWNpcGllbnRzIHRvIGNvcHkgdGhlCiAg +ICBDb3JyZXNwb25kaW5nIFNvdXJjZSBhbG9uZyB3aXRoIHRoZSBvYmplY3QgY29k +ZS4gIElmIHRoZSBwbGFjZSB0bwogICAgY29weSB0aGUgb2JqZWN0IGNvZGUgaXMg +YSBuZXR3b3JrIHNlcnZlciwgdGhlIENvcnJlc3BvbmRpbmcgU291cmNlCiAgICBt +YXkgYmUgb24gYSBkaWZmZXJlbnQgc2VydmVyIChvcGVyYXRlZCBieSB5b3Ugb3Ig +YSB0aGlyZCBwYXJ0eSkKICAgIHRoYXQgc3VwcG9ydHMgZXF1aXZhbGVudCBjb3B5 +aW5nIGZhY2lsaXRpZXMsIHByb3ZpZGVkIHlvdSBtYWludGFpbgogICAgY2xlYXIg +ZGlyZWN0aW9ucyBuZXh0IHRvIHRoZSBvYmplY3QgY29kZSBzYXlpbmcgd2hlcmUg +dG8gZmluZCB0aGUKICAgIENvcnJlc3BvbmRpbmcgU291cmNlLiAgUmVnYXJkbGVz +cyBvZiB3aGF0IHNlcnZlciBob3N0cyB0aGUKICAgIENvcnJlc3BvbmRpbmcgU291 +cmNlLCB5b3UgcmVtYWluIG9ibGlnYXRlZCB0byBlbnN1cmUgdGhhdCBpdCBpcwog +ICAgYXZhaWxhYmxlIGZvciBhcyBsb25nIGFzIG5lZWRlZCB0byBzYXRpc2Z5IHRo +ZXNlIHJlcXVpcmVtZW50cy4KCiAgICBlKSBDb252ZXkgdGhlIG9iamVjdCBjb2Rl +IHVzaW5nIHBlZXItdG8tcGVlciB0cmFuc21pc3Npb24sIHByb3ZpZGVkCiAgICB5 +b3UgaW5mb3JtIG90aGVyIHBlZXJzIHdoZXJlIHRoZSBvYmplY3QgY29kZSBhbmQg +Q29ycmVzcG9uZGluZwogICAgU291cmNlIG9mIHRoZSB3b3JrIGFyZSBiZWluZyBv +ZmZlcmVkIHRvIHRoZSBnZW5lcmFsIHB1YmxpYyBhdCBubwogICAgY2hhcmdlIHVu +ZGVyIHN1YnNlY3Rpb24gNmQuCgogIEEgc2VwYXJhYmxlIHBvcnRpb24gb2YgdGhl +IG9iamVjdCBjb2RlLCB3aG9zZSBzb3VyY2UgY29kZSBpcyBleGNsdWRlZApmcm9t +IHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSBhcyBhIFN5c3RlbSBMaWJyYXJ5LCBu +ZWVkIG5vdCBiZQppbmNsdWRlZCBpbiBjb252ZXlpbmcgdGhlIG9iamVjdCBjb2Rl +IHdvcmsuCgogIEEgIlVzZXIgUHJvZHVjdCIgaXMgZWl0aGVyICgxKSBhICJjb25z +dW1lciBwcm9kdWN0Iiwgd2hpY2ggbWVhbnMgYW55CnRhbmdpYmxlIHBlcnNvbmFs +IHByb3BlcnR5IHdoaWNoIGlzIG5vcm1hbGx5IHVzZWQgZm9yIHBlcnNvbmFsLCBm +YW1pbHksCm9yIGhvdXNlaG9sZCBwdXJwb3Nlcywgb3IgKDIpIGFueXRoaW5nIGRl +c2lnbmVkIG9yIHNvbGQgZm9yIGluY29ycG9yYXRpb24KaW50byBhIGR3ZWxsaW5n +LiAgSW4gZGV0ZXJtaW5pbmcgd2hldGhlciBhIHByb2R1Y3QgaXMgYSBjb25zdW1l +ciBwcm9kdWN0LApkb3VidGZ1bCBjYXNlcyBzaGFsbCBiZSByZXNvbHZlZCBpbiBm +YXZvciBvZiBjb3ZlcmFnZS4gIEZvciBhIHBhcnRpY3VsYXIKcHJvZHVjdCByZWNl +aXZlZCBieSBhIHBhcnRpY3VsYXIgdXNlciwgIm5vcm1hbGx5IHVzZWQiIHJlZmVy +cyB0byBhCnR5cGljYWwgb3IgY29tbW9uIHVzZSBvZiB0aGF0IGNsYXNzIG9mIHBy +b2R1Y3QsIHJlZ2FyZGxlc3Mgb2YgdGhlIHN0YXR1cwpvZiB0aGUgcGFydGljdWxh +ciB1c2VyIG9yIG9mIHRoZSB3YXkgaW4gd2hpY2ggdGhlIHBhcnRpY3VsYXIgdXNl +cgphY3R1YWxseSB1c2VzLCBvciBleHBlY3RzIG9yIGlzIGV4cGVjdGVkIHRvIHVz +ZSwgdGhlIHByb2R1Y3QuICBBIHByb2R1Y3QKaXMgYSBjb25zdW1lciBwcm9kdWN0 +IHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGUgcHJvZHVjdCBoYXMgc3Vic3RhbnRp +YWwKY29tbWVyY2lhbCwgaW5kdXN0cmlhbCBvciBub24tY29uc3VtZXIgdXNlcywg +dW5sZXNzIHN1Y2ggdXNlcyByZXByZXNlbnQKdGhlIG9ubHkgc2lnbmlmaWNhbnQg +bW9kZSBvZiB1c2Ugb2YgdGhlIHByb2R1Y3QuCgogICJJbnN0YWxsYXRpb24gSW5m +b3JtYXRpb24iIGZvciBhIFVzZXIgUHJvZHVjdCBtZWFucyBhbnkgbWV0aG9kcywK +cHJvY2VkdXJlcywgYXV0aG9yaXphdGlvbiBrZXlzLCBvciBvdGhlciBpbmZvcm1h +dGlvbiByZXF1aXJlZCB0byBpbnN0YWxsCmFuZCBleGVjdXRlIG1vZGlmaWVkIHZl +cnNpb25zIG9mIGEgY292ZXJlZCB3b3JrIGluIHRoYXQgVXNlciBQcm9kdWN0IGZy +b20KYSBtb2RpZmllZCB2ZXJzaW9uIG9mIGl0cyBDb3JyZXNwb25kaW5nIFNvdXJj +ZS4gIFRoZSBpbmZvcm1hdGlvbiBtdXN0CnN1ZmZpY2UgdG8gZW5zdXJlIHRoYXQg +dGhlIGNvbnRpbnVlZCBmdW5jdGlvbmluZyBvZiB0aGUgbW9kaWZpZWQgb2JqZWN0 +CmNvZGUgaXMgaW4gbm8gY2FzZSBwcmV2ZW50ZWQgb3IgaW50ZXJmZXJlZCB3aXRo +IHNvbGVseSBiZWNhdXNlCm1vZGlmaWNhdGlvbiBoYXMgYmVlbiBtYWRlLgoKICBJ +ZiB5b3UgY29udmV5IGFuIG9iamVjdCBjb2RlIHdvcmsgdW5kZXIgdGhpcyBzZWN0 +aW9uIGluLCBvciB3aXRoLCBvcgpzcGVjaWZpY2FsbHkgZm9yIHVzZSBpbiwgYSBV +c2VyIFByb2R1Y3QsIGFuZCB0aGUgY29udmV5aW5nIG9jY3VycyBhcwpwYXJ0IG9m +IGEgdHJhbnNhY3Rpb24gaW4gd2hpY2ggdGhlIHJpZ2h0IG9mIHBvc3Nlc3Npb24g +YW5kIHVzZSBvZiB0aGUKVXNlciBQcm9kdWN0IGlzIHRyYW5zZmVycmVkIHRvIHRo +ZSByZWNpcGllbnQgaW4gcGVycGV0dWl0eSBvciBmb3IgYQpmaXhlZCB0ZXJtIChy +ZWdhcmRsZXNzIG9mIGhvdyB0aGUgdHJhbnNhY3Rpb24gaXMgY2hhcmFjdGVyaXpl +ZCksIHRoZQpDb3JyZXNwb25kaW5nIFNvdXJjZSBjb252ZXllZCB1bmRlciB0aGlz +IHNlY3Rpb24gbXVzdCBiZSBhY2NvbXBhbmllZApieSB0aGUgSW5zdGFsbGF0aW9u +IEluZm9ybWF0aW9uLiAgQnV0IHRoaXMgcmVxdWlyZW1lbnQgZG9lcyBub3QgYXBw +bHkKaWYgbmVpdGhlciB5b3Ugbm9yIGFueSB0aGlyZCBwYXJ0eSByZXRhaW5zIHRo +ZSBhYmlsaXR5IHRvIGluc3RhbGwKbW9kaWZpZWQgb2JqZWN0IGNvZGUgb24gdGhl +IFVzZXIgUHJvZHVjdCAoZm9yIGV4YW1wbGUsIHRoZSB3b3JrIGhhcwpiZWVuIGlu +c3RhbGxlZCBpbiBST00pLgoKICBUaGUgcmVxdWlyZW1lbnQgdG8gcHJvdmlkZSBJ +bnN0YWxsYXRpb24gSW5mb3JtYXRpb24gZG9lcyBub3QgaW5jbHVkZSBhCnJlcXVp +cmVtZW50IHRvIGNvbnRpbnVlIHRvIHByb3ZpZGUgc3VwcG9ydCBzZXJ2aWNlLCB3 +YXJyYW50eSwgb3IgdXBkYXRlcwpmb3IgYSB3b3JrIHRoYXQgaGFzIGJlZW4gbW9k +aWZpZWQgb3IgaW5zdGFsbGVkIGJ5IHRoZSByZWNpcGllbnQsIG9yIGZvcgp0aGUg +VXNlciBQcm9kdWN0IGluIHdoaWNoIGl0IGhhcyBiZWVuIG1vZGlmaWVkIG9yIGlu +c3RhbGxlZC4gIEFjY2VzcyB0byBhCm5ldHdvcmsgbWF5IGJlIGRlbmllZCB3aGVu +IHRoZSBtb2RpZmljYXRpb24gaXRzZWxmIG1hdGVyaWFsbHkgYW5kCmFkdmVyc2Vs +eSBhZmZlY3RzIHRoZSBvcGVyYXRpb24gb2YgdGhlIG5ldHdvcmsgb3IgdmlvbGF0 +ZXMgdGhlIHJ1bGVzIGFuZApwcm90b2NvbHMgZm9yIGNvbW11bmljYXRpb24gYWNy +b3NzIHRoZSBuZXR3b3JrLgoKICBDb3JyZXNwb25kaW5nIFNvdXJjZSBjb252ZXll +ZCwgYW5kIEluc3RhbGxhdGlvbiBJbmZvcm1hdGlvbiBwcm92aWRlZCwKaW4gYWNj +b3JkIHdpdGggdGhpcyBzZWN0aW9uIG11c3QgYmUgaW4gYSBmb3JtYXQgdGhhdCBp +cyBwdWJsaWNseQpkb2N1bWVudGVkIChhbmQgd2l0aCBhbiBpbXBsZW1lbnRhdGlv +biBhdmFpbGFibGUgdG8gdGhlIHB1YmxpYyBpbgpzb3VyY2UgY29kZSBmb3JtKSwg +YW5kIG11c3QgcmVxdWlyZSBubyBzcGVjaWFsIHBhc3N3b3JkIG9yIGtleSBmb3IK +dW5wYWNraW5nLCByZWFkaW5nIG9yIGNvcHlpbmcuCgogIDcuIEFkZGl0aW9uYWwg +VGVybXMuCgogICJBZGRpdGlvbmFsIHBlcm1pc3Npb25zIiBhcmUgdGVybXMgdGhh +dCBzdXBwbGVtZW50IHRoZSB0ZXJtcyBvZiB0aGlzCkxpY2Vuc2UgYnkgbWFraW5n +IGV4Y2VwdGlvbnMgZnJvbSBvbmUgb3IgbW9yZSBvZiBpdHMgY29uZGl0aW9ucy4K +QWRkaXRpb25hbCBwZXJtaXNzaW9ucyB0aGF0IGFyZSBhcHBsaWNhYmxlIHRvIHRo +ZSBlbnRpcmUgUHJvZ3JhbSBzaGFsbApiZSB0cmVhdGVkIGFzIHRob3VnaCB0aGV5 +IHdlcmUgaW5jbHVkZWQgaW4gdGhpcyBMaWNlbnNlLCB0byB0aGUgZXh0ZW50CnRo +YXQgdGhleSBhcmUgdmFsaWQgdW5kZXIgYXBwbGljYWJsZSBsYXcuICBJZiBhZGRp +dGlvbmFsIHBlcm1pc3Npb25zCmFwcGx5IG9ubHkgdG8gcGFydCBvZiB0aGUgUHJv +Z3JhbSwgdGhhdCBwYXJ0IG1heSBiZSB1c2VkIHNlcGFyYXRlbHkKdW5kZXIgdGhv +c2UgcGVybWlzc2lvbnMsIGJ1dCB0aGUgZW50aXJlIFByb2dyYW0gcmVtYWlucyBn +b3Zlcm5lZCBieQp0aGlzIExpY2Vuc2Ugd2l0aG91dCByZWdhcmQgdG8gdGhlIGFk +ZGl0aW9uYWwgcGVybWlzc2lvbnMuCgogIFdoZW4geW91IGNvbnZleSBhIGNvcHkg +b2YgYSBjb3ZlcmVkIHdvcmssIHlvdSBtYXkgYXQgeW91ciBvcHRpb24KcmVtb3Zl +IGFueSBhZGRpdGlvbmFsIHBlcm1pc3Npb25zIGZyb20gdGhhdCBjb3B5LCBvciBm +cm9tIGFueSBwYXJ0IG9mCml0LiAgKEFkZGl0aW9uYWwgcGVybWlzc2lvbnMgbWF5 +IGJlIHdyaXR0ZW4gdG8gcmVxdWlyZSB0aGVpciBvd24KcmVtb3ZhbCBpbiBjZXJ0 +YWluIGNhc2VzIHdoZW4geW91IG1vZGlmeSB0aGUgd29yay4pICBZb3UgbWF5IHBs +YWNlCmFkZGl0aW9uYWwgcGVybWlzc2lvbnMgb24gbWF0ZXJpYWwsIGFkZGVkIGJ5 +IHlvdSB0byBhIGNvdmVyZWQgd29yaywKZm9yIHdoaWNoIHlvdSBoYXZlIG9yIGNh +biBnaXZlIGFwcHJvcHJpYXRlIGNvcHlyaWdodCBwZXJtaXNzaW9uLgoKICBOb3R3 +aXRoc3RhbmRpbmcgYW55IG90aGVyIHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2Us +IGZvciBtYXRlcmlhbCB5b3UKYWRkIHRvIGEgY292ZXJlZCB3b3JrLCB5b3UgbWF5 +IChpZiBhdXRob3JpemVkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVycyBvZgp0aGF0 +IG1hdGVyaWFsKSBzdXBwbGVtZW50IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ug +d2l0aCB0ZXJtczoKCiAgICBhKSBEaXNjbGFpbWluZyB3YXJyYW50eSBvciBsaW1p +dGluZyBsaWFiaWxpdHkgZGlmZmVyZW50bHkgZnJvbSB0aGUKICAgIHRlcm1zIG9m +IHNlY3Rpb25zIDE1IGFuZCAxNiBvZiB0aGlzIExpY2Vuc2U7IG9yCgogICAgYikg +UmVxdWlyaW5nIHByZXNlcnZhdGlvbiBvZiBzcGVjaWZpZWQgcmVhc29uYWJsZSBs +ZWdhbCBub3RpY2VzIG9yCiAgICBhdXRob3IgYXR0cmlidXRpb25zIGluIHRoYXQg +bWF0ZXJpYWwgb3IgaW4gdGhlIEFwcHJvcHJpYXRlIExlZ2FsCiAgICBOb3RpY2Vz +IGRpc3BsYXllZCBieSB3b3JrcyBjb250YWluaW5nIGl0OyBvcgoKICAgIGMpIFBy +b2hpYml0aW5nIG1pc3JlcHJlc2VudGF0aW9uIG9mIHRoZSBvcmlnaW4gb2YgdGhh +dCBtYXRlcmlhbCwgb3IKICAgIHJlcXVpcmluZyB0aGF0IG1vZGlmaWVkIHZlcnNp +b25zIG9mIHN1Y2ggbWF0ZXJpYWwgYmUgbWFya2VkIGluCiAgICByZWFzb25hYmxl +IHdheXMgYXMgZGlmZmVyZW50IGZyb20gdGhlIG9yaWdpbmFsIHZlcnNpb247IG9y +CgogICAgZCkgTGltaXRpbmcgdGhlIHVzZSBmb3IgcHVibGljaXR5IHB1cnBvc2Vz +IG9mIG5hbWVzIG9mIGxpY2Vuc29ycyBvcgogICAgYXV0aG9ycyBvZiB0aGUgbWF0 +ZXJpYWw7IG9yCgogICAgZSkgRGVjbGluaW5nIHRvIGdyYW50IHJpZ2h0cyB1bmRl +ciB0cmFkZW1hcmsgbGF3IGZvciB1c2Ugb2Ygc29tZQogICAgdHJhZGUgbmFtZXMs +IHRyYWRlbWFya3MsIG9yIHNlcnZpY2UgbWFya3M7IG9yCgogICAgZikgUmVxdWly +aW5nIGluZGVtbmlmaWNhdGlvbiBvZiBsaWNlbnNvcnMgYW5kIGF1dGhvcnMgb2Yg +dGhhdAogICAgbWF0ZXJpYWwgYnkgYW55b25lIHdobyBjb252ZXlzIHRoZSBtYXRl +cmlhbCAob3IgbW9kaWZpZWQgdmVyc2lvbnMgb2YKICAgIGl0KSB3aXRoIGNvbnRy +YWN0dWFsIGFzc3VtcHRpb25zIG9mIGxpYWJpbGl0eSB0byB0aGUgcmVjaXBpZW50 +LCBmb3IKICAgIGFueSBsaWFiaWxpdHkgdGhhdCB0aGVzZSBjb250cmFjdHVhbCBh +c3N1bXB0aW9ucyBkaXJlY3RseSBpbXBvc2Ugb24KICAgIHRob3NlIGxpY2Vuc29y +cyBhbmQgYXV0aG9ycy4KCiAgQWxsIG90aGVyIG5vbi1wZXJtaXNzaXZlIGFkZGl0 +aW9uYWwgdGVybXMgYXJlIGNvbnNpZGVyZWQgImZ1cnRoZXIKcmVzdHJpY3Rpb25z +IiB3aXRoaW4gdGhlIG1lYW5pbmcgb2Ygc2VjdGlvbiAxMC4gIElmIHRoZSBQcm9n +cmFtIGFzIHlvdQpyZWNlaXZlZCBpdCwgb3IgYW55IHBhcnQgb2YgaXQsIGNvbnRh +aW5zIGEgbm90aWNlIHN0YXRpbmcgdGhhdCBpdCBpcwpnb3Zlcm5lZCBieSB0aGlz +IExpY2Vuc2UgYWxvbmcgd2l0aCBhIHRlcm0gdGhhdCBpcyBhIGZ1cnRoZXIKcmVz +dHJpY3Rpb24sIHlvdSBtYXkgcmVtb3ZlIHRoYXQgdGVybS4gIElmIGEgbGljZW5z +ZSBkb2N1bWVudCBjb250YWlucwphIGZ1cnRoZXIgcmVzdHJpY3Rpb24gYnV0IHBl +cm1pdHMgcmVsaWNlbnNpbmcgb3IgY29udmV5aW5nIHVuZGVyIHRoaXMKTGljZW5z +ZSwgeW91IG1heSBhZGQgdG8gYSBjb3ZlcmVkIHdvcmsgbWF0ZXJpYWwgZ292ZXJu +ZWQgYnkgdGhlIHRlcm1zCm9mIHRoYXQgbGljZW5zZSBkb2N1bWVudCwgcHJvdmlk +ZWQgdGhhdCB0aGUgZnVydGhlciByZXN0cmljdGlvbiBkb2VzCm5vdCBzdXJ2aXZl +IHN1Y2ggcmVsaWNlbnNpbmcgb3IgY29udmV5aW5nLgoKICBJZiB5b3UgYWRkIHRl +cm1zIHRvIGEgY292ZXJlZCB3b3JrIGluIGFjY29yZCB3aXRoIHRoaXMgc2VjdGlv +biwgeW91Cm11c3QgcGxhY2UsIGluIHRoZSByZWxldmFudCBzb3VyY2UgZmlsZXMs +IGEgc3RhdGVtZW50IG9mIHRoZQphZGRpdGlvbmFsIHRlcm1zIHRoYXQgYXBwbHkg +dG8gdGhvc2UgZmlsZXMsIG9yIGEgbm90aWNlIGluZGljYXRpbmcKd2hlcmUgdG8g +ZmluZCB0aGUgYXBwbGljYWJsZSB0ZXJtcy4KCiAgQWRkaXRpb25hbCB0ZXJtcywg +cGVybWlzc2l2ZSBvciBub24tcGVybWlzc2l2ZSwgbWF5IGJlIHN0YXRlZCBpbiB0 +aGUKZm9ybSBvZiBhIHNlcGFyYXRlbHkgd3JpdHRlbiBsaWNlbnNlLCBvciBzdGF0 +ZWQgYXMgZXhjZXB0aW9uczsKdGhlIGFib3ZlIHJlcXVpcmVtZW50cyBhcHBseSBl +aXRoZXIgd2F5LgoKICA4LiBUZXJtaW5hdGlvbi4KCiAgWW91IG1heSBub3QgcHJv +cGFnYXRlIG9yIG1vZGlmeSBhIGNvdmVyZWQgd29yayBleGNlcHQgYXMgZXhwcmVz +c2x5CnByb3ZpZGVkIHVuZGVyIHRoaXMgTGljZW5zZS4gIEFueSBhdHRlbXB0IG90 +aGVyd2lzZSB0byBwcm9wYWdhdGUgb3IKbW9kaWZ5IGl0IGlzIHZvaWQsIGFuZCB3 +aWxsIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIHlvdXIgcmlnaHRzIHVuZGVyCnRo +aXMgTGljZW5zZSAoaW5jbHVkaW5nIGFueSBwYXRlbnQgbGljZW5zZXMgZ3JhbnRl +ZCB1bmRlciB0aGUgdGhpcmQKcGFyYWdyYXBoIG9mIHNlY3Rpb24gMTEpLgoKICBI +b3dldmVyLCBpZiB5b3UgY2Vhc2UgYWxsIHZpb2xhdGlvbiBvZiB0aGlzIExpY2Vu +c2UsIHRoZW4geW91cgpsaWNlbnNlIGZyb20gYSBwYXJ0aWN1bGFyIGNvcHlyaWdo +dCBob2xkZXIgaXMgcmVpbnN0YXRlZCAoYSkKcHJvdmlzaW9uYWxseSwgdW5sZXNz +IGFuZCB1bnRpbCB0aGUgY29weXJpZ2h0IGhvbGRlciBleHBsaWNpdGx5IGFuZApm +aW5hbGx5IHRlcm1pbmF0ZXMgeW91ciBsaWNlbnNlLCBhbmQgKGIpIHBlcm1hbmVu +dGx5LCBpZiB0aGUgY29weXJpZ2h0CmhvbGRlciBmYWlscyB0byBub3RpZnkgeW91 +IG9mIHRoZSB2aW9sYXRpb24gYnkgc29tZSByZWFzb25hYmxlIG1lYW5zCnByaW9y +IHRvIDYwIGRheXMgYWZ0ZXIgdGhlIGNlc3NhdGlvbi4KCiAgTW9yZW92ZXIsIHlv +dXIgbGljZW5zZSBmcm9tIGEgcGFydGljdWxhciBjb3B5cmlnaHQgaG9sZGVyIGlz +CnJlaW5zdGF0ZWQgcGVybWFuZW50bHkgaWYgdGhlIGNvcHlyaWdodCBob2xkZXIg +bm90aWZpZXMgeW91IG9mIHRoZQp2aW9sYXRpb24gYnkgc29tZSByZWFzb25hYmxl +IG1lYW5zLCB0aGlzIGlzIHRoZSBmaXJzdCB0aW1lIHlvdSBoYXZlCnJlY2VpdmVk +IG5vdGljZSBvZiB2aW9sYXRpb24gb2YgdGhpcyBMaWNlbnNlIChmb3IgYW55IHdv +cmspIGZyb20gdGhhdApjb3B5cmlnaHQgaG9sZGVyLCBhbmQgeW91IGN1cmUgdGhl +IHZpb2xhdGlvbiBwcmlvciB0byAzMCBkYXlzIGFmdGVyCnlvdXIgcmVjZWlwdCBv +ZiB0aGUgbm90aWNlLgoKICBUZXJtaW5hdGlvbiBvZiB5b3VyIHJpZ2h0cyB1bmRl +ciB0aGlzIHNlY3Rpb24gZG9lcyBub3QgdGVybWluYXRlIHRoZQpsaWNlbnNlcyBv +ZiBwYXJ0aWVzIHdobyBoYXZlIHJlY2VpdmVkIGNvcGllcyBvciByaWdodHMgZnJv +bSB5b3UgdW5kZXIKdGhpcyBMaWNlbnNlLiAgSWYgeW91ciByaWdodHMgaGF2ZSBi +ZWVuIHRlcm1pbmF0ZWQgYW5kIG5vdCBwZXJtYW5lbnRseQpyZWluc3RhdGVkLCB5 +b3UgZG8gbm90IHF1YWxpZnkgdG8gcmVjZWl2ZSBuZXcgbGljZW5zZXMgZm9yIHRo +ZSBzYW1lCm1hdGVyaWFsIHVuZGVyIHNlY3Rpb24gMTAuCgogIDkuIEFjY2VwdGFu +Y2UgTm90IFJlcXVpcmVkIGZvciBIYXZpbmcgQ29waWVzLgoKICBZb3UgYXJlIG5v +dCByZXF1aXJlZCB0byBhY2NlcHQgdGhpcyBMaWNlbnNlIGluIG9yZGVyIHRvIHJl +Y2VpdmUgb3IKcnVuIGEgY29weSBvZiB0aGUgUHJvZ3JhbS4gIEFuY2lsbGFyeSBw +cm9wYWdhdGlvbiBvZiBhIGNvdmVyZWQgd29yawpvY2N1cnJpbmcgc29sZWx5IGFz +IGEgY29uc2VxdWVuY2Ugb2YgdXNpbmcgcGVlci10by1wZWVyIHRyYW5zbWlzc2lv +bgp0byByZWNlaXZlIGEgY29weSBsaWtld2lzZSBkb2VzIG5vdCByZXF1aXJlIGFj +Y2VwdGFuY2UuICBIb3dldmVyLApub3RoaW5nIG90aGVyIHRoYW4gdGhpcyBMaWNl +bnNlIGdyYW50cyB5b3UgcGVybWlzc2lvbiB0byBwcm9wYWdhdGUgb3IKbW9kaWZ5 +IGFueSBjb3ZlcmVkIHdvcmsuICBUaGVzZSBhY3Rpb25zIGluZnJpbmdlIGNvcHly +aWdodCBpZiB5b3UgZG8Kbm90IGFjY2VwdCB0aGlzIExpY2Vuc2UuICBUaGVyZWZv +cmUsIGJ5IG1vZGlmeWluZyBvciBwcm9wYWdhdGluZyBhCmNvdmVyZWQgd29yaywg +eW91IGluZGljYXRlIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGlzIExpY2Vuc2UgdG8g +ZG8gc28uCgogIDEwLiBBdXRvbWF0aWMgTGljZW5zaW5nIG9mIERvd25zdHJlYW0g +UmVjaXBpZW50cy4KCiAgRWFjaCB0aW1lIHlvdSBjb252ZXkgYSBjb3ZlcmVkIHdv +cmssIHRoZSByZWNpcGllbnQgYXV0b21hdGljYWxseQpyZWNlaXZlcyBhIGxpY2Vu +c2UgZnJvbSB0aGUgb3JpZ2luYWwgbGljZW5zb3JzLCB0byBydW4sIG1vZGlmeSBh +bmQKcHJvcGFnYXRlIHRoYXQgd29yaywgc3ViamVjdCB0byB0aGlzIExpY2Vuc2Uu +ICBZb3UgYXJlIG5vdCByZXNwb25zaWJsZQpmb3IgZW5mb3JjaW5nIGNvbXBsaWFu +Y2UgYnkgdGhpcmQgcGFydGllcyB3aXRoIHRoaXMgTGljZW5zZS4KCiAgQW4gImVu +dGl0eSB0cmFuc2FjdGlvbiIgaXMgYSB0cmFuc2FjdGlvbiB0cmFuc2ZlcnJpbmcg +Y29udHJvbCBvZiBhbgpvcmdhbml6YXRpb24sIG9yIHN1YnN0YW50aWFsbHkgYWxs +IGFzc2V0cyBvZiBvbmUsIG9yIHN1YmRpdmlkaW5nIGFuCm9yZ2FuaXphdGlvbiwg +b3IgbWVyZ2luZyBvcmdhbml6YXRpb25zLiAgSWYgcHJvcGFnYXRpb24gb2YgYSBj +b3ZlcmVkCndvcmsgcmVzdWx0cyBmcm9tIGFuIGVudGl0eSB0cmFuc2FjdGlvbiwg +ZWFjaCBwYXJ0eSB0byB0aGF0CnRyYW5zYWN0aW9uIHdobyByZWNlaXZlcyBhIGNv +cHkgb2YgdGhlIHdvcmsgYWxzbyByZWNlaXZlcyB3aGF0ZXZlcgpsaWNlbnNlcyB0 +byB0aGUgd29yayB0aGUgcGFydHkncyBwcmVkZWNlc3NvciBpbiBpbnRlcmVzdCBo +YWQgb3IgY291bGQKZ2l2ZSB1bmRlciB0aGUgcHJldmlvdXMgcGFyYWdyYXBoLCBw +bHVzIGEgcmlnaHQgdG8gcG9zc2Vzc2lvbiBvZiB0aGUKQ29ycmVzcG9uZGluZyBT +b3VyY2Ugb2YgdGhlIHdvcmsgZnJvbSB0aGUgcHJlZGVjZXNzb3IgaW4gaW50ZXJl +c3QsIGlmCnRoZSBwcmVkZWNlc3NvciBoYXMgaXQgb3IgY2FuIGdldCBpdCB3aXRo +IHJlYXNvbmFibGUgZWZmb3J0cy4KCiAgWW91IG1heSBub3QgaW1wb3NlIGFueSBm +dXJ0aGVyIHJlc3RyaWN0aW9ucyBvbiB0aGUgZXhlcmNpc2Ugb2YgdGhlCnJpZ2h0 +cyBncmFudGVkIG9yIGFmZmlybWVkIHVuZGVyIHRoaXMgTGljZW5zZS4gIEZvciBl +eGFtcGxlLCB5b3UgbWF5Cm5vdCBpbXBvc2UgYSBsaWNlbnNlIGZlZSwgcm95YWx0 +eSwgb3Igb3RoZXIgY2hhcmdlIGZvciBleGVyY2lzZSBvZgpyaWdodHMgZ3JhbnRl +ZCB1bmRlciB0aGlzIExpY2Vuc2UsIGFuZCB5b3UgbWF5IG5vdCBpbml0aWF0ZSBs +aXRpZ2F0aW9uCihpbmNsdWRpbmcgYSBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xh +aW0gaW4gYSBsYXdzdWl0KSBhbGxlZ2luZyB0aGF0CmFueSBwYXRlbnQgY2xhaW0g +aXMgaW5mcmluZ2VkIGJ5IG1ha2luZywgdXNpbmcsIHNlbGxpbmcsIG9mZmVyaW5n +IGZvcgpzYWxlLCBvciBpbXBvcnRpbmcgdGhlIFByb2dyYW0gb3IgYW55IHBvcnRp +b24gb2YgaXQuCgogIDExLiBQYXRlbnRzLgoKICBBICJjb250cmlidXRvciIgaXMg +YSBjb3B5cmlnaHQgaG9sZGVyIHdobyBhdXRob3JpemVzIHVzZSB1bmRlciB0aGlz +CkxpY2Vuc2Ugb2YgdGhlIFByb2dyYW0gb3IgYSB3b3JrIG9uIHdoaWNoIHRoZSBQ +cm9ncmFtIGlzIGJhc2VkLiAgVGhlCndvcmsgdGh1cyBsaWNlbnNlZCBpcyBjYWxs +ZWQgdGhlIGNvbnRyaWJ1dG9yJ3MgImNvbnRyaWJ1dG9yIHZlcnNpb24iLgoKICBB +IGNvbnRyaWJ1dG9yJ3MgImVzc2VudGlhbCBwYXRlbnQgY2xhaW1zIiBhcmUgYWxs +IHBhdGVudCBjbGFpbXMKb3duZWQgb3IgY29udHJvbGxlZCBieSB0aGUgY29udHJp +YnV0b3IsIHdoZXRoZXIgYWxyZWFkeSBhY3F1aXJlZCBvcgpoZXJlYWZ0ZXIgYWNx +dWlyZWQsIHRoYXQgd291bGQgYmUgaW5mcmluZ2VkIGJ5IHNvbWUgbWFubmVyLCBw +ZXJtaXR0ZWQKYnkgdGhpcyBMaWNlbnNlLCBvZiBtYWtpbmcsIHVzaW5nLCBvciBz +ZWxsaW5nIGl0cyBjb250cmlidXRvciB2ZXJzaW9uLApidXQgZG8gbm90IGluY2x1 +ZGUgY2xhaW1zIHRoYXQgd291bGQgYmUgaW5mcmluZ2VkIG9ubHkgYXMgYQpjb25z +ZXF1ZW5jZSBvZiBmdXJ0aGVyIG1vZGlmaWNhdGlvbiBvZiB0aGUgY29udHJpYnV0 +b3IgdmVyc2lvbi4gIEZvcgpwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sICJj +b250cm9sIiBpbmNsdWRlcyB0aGUgcmlnaHQgdG8gZ3JhbnQKcGF0ZW50IHN1Ymxp +Y2Vuc2VzIGluIGEgbWFubmVyIGNvbnNpc3RlbnQgd2l0aCB0aGUgcmVxdWlyZW1l +bnRzIG9mCnRoaXMgTGljZW5zZS4KCiAgRWFjaCBjb250cmlidXRvciBncmFudHMg +eW91IGEgbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUKcGF0 +ZW50IGxpY2Vuc2UgdW5kZXIgdGhlIGNvbnRyaWJ1dG9yJ3MgZXNzZW50aWFsIHBh +dGVudCBjbGFpbXMsIHRvCm1ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUs +IGltcG9ydCBhbmQgb3RoZXJ3aXNlIHJ1biwgbW9kaWZ5IGFuZApwcm9wYWdhdGUg +dGhlIGNvbnRlbnRzIG9mIGl0cyBjb250cmlidXRvciB2ZXJzaW9uLgoKICBJbiB0 +aGUgZm9sbG93aW5nIHRocmVlIHBhcmFncmFwaHMsIGEgInBhdGVudCBsaWNlbnNl +IiBpcyBhbnkgZXhwcmVzcwphZ3JlZW1lbnQgb3IgY29tbWl0bWVudCwgaG93ZXZl +ciBkZW5vbWluYXRlZCwgbm90IHRvIGVuZm9yY2UgYSBwYXRlbnQKKHN1Y2ggYXMg +YW4gZXhwcmVzcyBwZXJtaXNzaW9uIHRvIHByYWN0aWNlIGEgcGF0ZW50IG9yIGNv +dmVuYW50IG5vdCB0bwpzdWUgZm9yIHBhdGVudCBpbmZyaW5nZW1lbnQpLiAgVG8g +ImdyYW50IiBzdWNoIGEgcGF0ZW50IGxpY2Vuc2UgdG8gYQpwYXJ0eSBtZWFucyB0 +byBtYWtlIHN1Y2ggYW4gYWdyZWVtZW50IG9yIGNvbW1pdG1lbnQgbm90IHRvIGVu +Zm9yY2UgYQpwYXRlbnQgYWdhaW5zdCB0aGUgcGFydHkuCgogIElmIHlvdSBjb252 +ZXkgYSBjb3ZlcmVkIHdvcmssIGtub3dpbmdseSByZWx5aW5nIG9uIGEgcGF0ZW50 +IGxpY2Vuc2UsCmFuZCB0aGUgQ29ycmVzcG9uZGluZyBTb3VyY2Ugb2YgdGhlIHdv +cmsgaXMgbm90IGF2YWlsYWJsZSBmb3IgYW55b25lCnRvIGNvcHksIGZyZWUgb2Yg +Y2hhcmdlIGFuZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCB0aHJv +dWdoIGEKcHVibGljbHkgYXZhaWxhYmxlIG5ldHdvcmsgc2VydmVyIG9yIG90aGVy +IHJlYWRpbHkgYWNjZXNzaWJsZSBtZWFucywKdGhlbiB5b3UgbXVzdCBlaXRoZXIg +KDEpIGNhdXNlIHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSB0byBiZSBzbwphdmFp +bGFibGUsIG9yICgyKSBhcnJhbmdlIHRvIGRlcHJpdmUgeW91cnNlbGYgb2YgdGhl +IGJlbmVmaXQgb2YgdGhlCnBhdGVudCBsaWNlbnNlIGZvciB0aGlzIHBhcnRpY3Vs +YXIgd29yaywgb3IgKDMpIGFycmFuZ2UsIGluIGEgbWFubmVyCmNvbnNpc3RlbnQg +d2l0aCB0aGUgcmVxdWlyZW1lbnRzIG9mIHRoaXMgTGljZW5zZSwgdG8gZXh0ZW5k +IHRoZSBwYXRlbnQKbGljZW5zZSB0byBkb3duc3RyZWFtIHJlY2lwaWVudHMuICAi +S25vd2luZ2x5IHJlbHlpbmciIG1lYW5zIHlvdSBoYXZlCmFjdHVhbCBrbm93bGVk +Z2UgdGhhdCwgYnV0IGZvciB0aGUgcGF0ZW50IGxpY2Vuc2UsIHlvdXIgY29udmV5 +aW5nIHRoZQpjb3ZlcmVkIHdvcmsgaW4gYSBjb3VudHJ5LCBvciB5b3VyIHJlY2lw +aWVudCdzIHVzZSBvZiB0aGUgY292ZXJlZCB3b3JrCmluIGEgY291bnRyeSwgd291 +bGQgaW5mcmluZ2Ugb25lIG9yIG1vcmUgaWRlbnRpZmlhYmxlIHBhdGVudHMgaW4g +dGhhdApjb3VudHJ5IHRoYXQgeW91IGhhdmUgcmVhc29uIHRvIGJlbGlldmUgYXJl +IHZhbGlkLgoKICBJZiwgcHVyc3VhbnQgdG8gb3IgaW4gY29ubmVjdGlvbiB3aXRo +IGEgc2luZ2xlIHRyYW5zYWN0aW9uIG9yCmFycmFuZ2VtZW50LCB5b3UgY29udmV5 +LCBvciBwcm9wYWdhdGUgYnkgcHJvY3VyaW5nIGNvbnZleWFuY2Ugb2YsIGEKY292 +ZXJlZCB3b3JrLCBhbmQgZ3JhbnQgYSBwYXRlbnQgbGljZW5zZSB0byBzb21lIG9m +IHRoZSBwYXJ0aWVzCnJlY2VpdmluZyB0aGUgY292ZXJlZCB3b3JrIGF1dGhvcml6 +aW5nIHRoZW0gdG8gdXNlLCBwcm9wYWdhdGUsIG1vZGlmeQpvciBjb252ZXkgYSBz +cGVjaWZpYyBjb3B5IG9mIHRoZSBjb3ZlcmVkIHdvcmssIHRoZW4gdGhlIHBhdGVu +dCBsaWNlbnNlCnlvdSBncmFudCBpcyBhdXRvbWF0aWNhbGx5IGV4dGVuZGVkIHRv +IGFsbCByZWNpcGllbnRzIG9mIHRoZSBjb3ZlcmVkCndvcmsgYW5kIHdvcmtzIGJh +c2VkIG9uIGl0LgoKICBBIHBhdGVudCBsaWNlbnNlIGlzICJkaXNjcmltaW5hdG9y +eSIgaWYgaXQgZG9lcyBub3QgaW5jbHVkZSB3aXRoaW4KdGhlIHNjb3BlIG9mIGl0 +cyBjb3ZlcmFnZSwgcHJvaGliaXRzIHRoZSBleGVyY2lzZSBvZiwgb3IgaXMKY29u +ZGl0aW9uZWQgb24gdGhlIG5vbi1leGVyY2lzZSBvZiBvbmUgb3IgbW9yZSBvZiB0 +aGUgcmlnaHRzIHRoYXQgYXJlCnNwZWNpZmljYWxseSBncmFudGVkIHVuZGVyIHRo +aXMgTGljZW5zZS4gIFlvdSBtYXkgbm90IGNvbnZleSBhIGNvdmVyZWQKd29yayBp +ZiB5b3UgYXJlIGEgcGFydHkgdG8gYW4gYXJyYW5nZW1lbnQgd2l0aCBhIHRoaXJk +IHBhcnR5IHRoYXQgaXMKaW4gdGhlIGJ1c2luZXNzIG9mIGRpc3RyaWJ1dGluZyBz +b2Z0d2FyZSwgdW5kZXIgd2hpY2ggeW91IG1ha2UgcGF5bWVudAp0byB0aGUgdGhp +cmQgcGFydHkgYmFzZWQgb24gdGhlIGV4dGVudCBvZiB5b3VyIGFjdGl2aXR5IG9m +IGNvbnZleWluZwp0aGUgd29yaywgYW5kIHVuZGVyIHdoaWNoIHRoZSB0aGlyZCBw +YXJ0eSBncmFudHMsIHRvIGFueSBvZiB0aGUKcGFydGllcyB3aG8gd291bGQgcmVj +ZWl2ZSB0aGUgY292ZXJlZCB3b3JrIGZyb20geW91LCBhIGRpc2NyaW1pbmF0b3J5 +CnBhdGVudCBsaWNlbnNlIChhKSBpbiBjb25uZWN0aW9uIHdpdGggY29waWVzIG9m +IHRoZSBjb3ZlcmVkIHdvcmsKY29udmV5ZWQgYnkgeW91IChvciBjb3BpZXMgbWFk +ZSBmcm9tIHRob3NlIGNvcGllcyksIG9yIChiKSBwcmltYXJpbHkKZm9yIGFuZCBp +biBjb25uZWN0aW9uIHdpdGggc3BlY2lmaWMgcHJvZHVjdHMgb3IgY29tcGlsYXRp +b25zIHRoYXQKY29udGFpbiB0aGUgY292ZXJlZCB3b3JrLCB1bmxlc3MgeW91IGVu +dGVyZWQgaW50byB0aGF0IGFycmFuZ2VtZW50LApvciB0aGF0IHBhdGVudCBsaWNl +bnNlIHdhcyBncmFudGVkLCBwcmlvciB0byAyOCBNYXJjaCAyMDA3LgoKICBOb3Ro +aW5nIGluIHRoaXMgTGljZW5zZSBzaGFsbCBiZSBjb25zdHJ1ZWQgYXMgZXhjbHVk +aW5nIG9yIGxpbWl0aW5nCmFueSBpbXBsaWVkIGxpY2Vuc2Ugb3Igb3RoZXIgZGVm +ZW5zZXMgdG8gaW5mcmluZ2VtZW50IHRoYXQgbWF5Cm90aGVyd2lzZSBiZSBhdmFp +bGFibGUgdG8geW91IHVuZGVyIGFwcGxpY2FibGUgcGF0ZW50IGxhdy4KCiAgMTIu +IE5vIFN1cnJlbmRlciBvZiBPdGhlcnMnIEZyZWVkb20uCgogIElmIGNvbmRpdGlv +bnMgYXJlIGltcG9zZWQgb24geW91ICh3aGV0aGVyIGJ5IGNvdXJ0IG9yZGVyLCBh +Z3JlZW1lbnQgb3IKb3RoZXJ3aXNlKSB0aGF0IGNvbnRyYWRpY3QgdGhlIGNvbmRp +dGlvbnMgb2YgdGhpcyBMaWNlbnNlLCB0aGV5IGRvIG5vdApleGN1c2UgeW91IGZy +b20gdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLiAgSWYgeW91IGNhbm5v +dCBjb252ZXkgYQpjb3ZlcmVkIHdvcmsgc28gYXMgdG8gc2F0aXNmeSBzaW11bHRh +bmVvdXNseSB5b3VyIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMKTGljZW5zZSBhbmQg +YW55IG90aGVyIHBlcnRpbmVudCBvYmxpZ2F0aW9ucywgdGhlbiBhcyBhIGNvbnNl +cXVlbmNlIHlvdSBtYXkKbm90IGNvbnZleSBpdCBhdCBhbGwuICBGb3IgZXhhbXBs +ZSwgaWYgeW91IGFncmVlIHRvIHRlcm1zIHRoYXQgb2JsaWdhdGUgeW91CnRvIGNv +bGxlY3QgYSByb3lhbHR5IGZvciBmdXJ0aGVyIGNvbnZleWluZyBmcm9tIHRob3Nl +IHRvIHdob20geW91IGNvbnZleQp0aGUgUHJvZ3JhbSwgdGhlIG9ubHkgd2F5IHlv +dSBjb3VsZCBzYXRpc2Z5IGJvdGggdGhvc2UgdGVybXMgYW5kIHRoaXMKTGljZW5z +ZSB3b3VsZCBiZSB0byByZWZyYWluIGVudGlyZWx5IGZyb20gY29udmV5aW5nIHRo +ZSBQcm9ncmFtLgoKICAxMy4gVXNlIHdpdGggdGhlIEdOVSBBZmZlcm8gR2VuZXJh +bCBQdWJsaWMgTGljZW5zZS4KCiAgTm90d2l0aHN0YW5kaW5nIGFueSBvdGhlciBw +cm92aXNpb24gb2YgdGhpcyBMaWNlbnNlLCB5b3UgaGF2ZQpwZXJtaXNzaW9uIHRv +IGxpbmsgb3IgY29tYmluZSBhbnkgY292ZXJlZCB3b3JrIHdpdGggYSB3b3JrIGxp +Y2Vuc2VkCnVuZGVyIHZlcnNpb24gMyBvZiB0aGUgR05VIEFmZmVybyBHZW5lcmFs +IFB1YmxpYyBMaWNlbnNlIGludG8gYSBzaW5nbGUKY29tYmluZWQgd29yaywgYW5k +IHRvIGNvbnZleSB0aGUgcmVzdWx0aW5nIHdvcmsuICBUaGUgdGVybXMgb2YgdGhp +cwpMaWNlbnNlIHdpbGwgY29udGludWUgdG8gYXBwbHkgdG8gdGhlIHBhcnQgd2hp +Y2ggaXMgdGhlIGNvdmVyZWQgd29yaywKYnV0IHRoZSBzcGVjaWFsIHJlcXVpcmVt +ZW50cyBvZiB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLApz +ZWN0aW9uIDEzLCBjb25jZXJuaW5nIGludGVyYWN0aW9uIHRocm91Z2ggYSBuZXR3 +b3JrIHdpbGwgYXBwbHkgdG8gdGhlCmNvbWJpbmF0aW9uIGFzIHN1Y2guCgogIDE0 +LiBSZXZpc2VkIFZlcnNpb25zIG9mIHRoaXMgTGljZW5zZS4KCiAgVGhlIEZyZWUg +U29mdHdhcmUgRm91bmRhdGlvbiBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBu +ZXcgdmVyc2lvbnMgb2YKdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZy +b20gdGltZSB0byB0aW1lLiAgU3VjaCBuZXcgdmVyc2lvbnMgd2lsbApiZSBzaW1p +bGFyIGluIHNwaXJpdCB0byB0aGUgcHJlc2VudCB2ZXJzaW9uLCBidXQgbWF5IGRp +ZmZlciBpbiBkZXRhaWwgdG8KYWRkcmVzcyBuZXcgcHJvYmxlbXMgb3IgY29uY2Vy +bnMuCgogIEVhY2ggdmVyc2lvbiBpcyBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZl +cnNpb24gbnVtYmVyLiAgSWYgdGhlClByb2dyYW0gc3BlY2lmaWVzIHRoYXQgYSBj +ZXJ0YWluIG51bWJlcmVkIHZlcnNpb24gb2YgdGhlIEdOVSBHZW5lcmFsClB1Ymxp +YyBMaWNlbnNlICJvciBhbnkgbGF0ZXIgdmVyc2lvbiIgYXBwbGllcyB0byBpdCwg +eW91IGhhdmUgdGhlCm9wdGlvbiBvZiBmb2xsb3dpbmcgdGhlIHRlcm1zIGFuZCBj +b25kaXRpb25zIGVpdGhlciBvZiB0aGF0IG51bWJlcmVkCnZlcnNpb24gb3Igb2Yg +YW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl +CkZvdW5kYXRpb24uICBJZiB0aGUgUHJvZ3JhbSBkb2VzIG5vdCBzcGVjaWZ5IGEg +dmVyc2lvbiBudW1iZXIgb2YgdGhlCkdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl +LCB5b3UgbWF5IGNob29zZSBhbnkgdmVyc2lvbiBldmVyIHB1Ymxpc2hlZApieSB0 +aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgoKICBJZiB0aGUgUHJvZ3JhbSBz +cGVjaWZpZXMgdGhhdCBhIHByb3h5IGNhbiBkZWNpZGUgd2hpY2ggZnV0dXJlCnZl +cnNpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBjYW4gYmUg +dXNlZCwgdGhhdCBwcm94eSdzCnB1YmxpYyBzdGF0ZW1lbnQgb2YgYWNjZXB0YW5j +ZSBvZiBhIHZlcnNpb24gcGVybWFuZW50bHkgYXV0aG9yaXplcyB5b3UKdG8gY2hv +b3NlIHRoYXQgdmVyc2lvbiBmb3IgdGhlIFByb2dyYW0uCgogIExhdGVyIGxpY2Vu +c2UgdmVyc2lvbnMgbWF5IGdpdmUgeW91IGFkZGl0aW9uYWwgb3IgZGlmZmVyZW50 +CnBlcm1pc3Npb25zLiAgSG93ZXZlciwgbm8gYWRkaXRpb25hbCBvYmxpZ2F0aW9u +cyBhcmUgaW1wb3NlZCBvbiBhbnkKYXV0aG9yIG9yIGNvcHlyaWdodCBob2xkZXIg +YXMgYSByZXN1bHQgb2YgeW91ciBjaG9vc2luZyB0byBmb2xsb3cgYQpsYXRlciB2 +ZXJzaW9uLgoKICAxNS4gRGlzY2xhaW1lciBvZiBXYXJyYW50eS4KCiAgVEhFUkUg +SVMgTk8gV0FSUkFOVFkgRk9SIFRIRSBQUk9HUkFNLCBUTyBUSEUgRVhURU5UIFBF +Uk1JVFRFRCBCWQpBUFBMSUNBQkxFIExBVy4gIEVYQ0VQVCBXSEVOIE9USEVSV0lT +RSBTVEFURUQgSU4gV1JJVElORyBUSEUgQ09QWVJJR0hUCkhPTERFUlMgQU5EL09S +IE9USEVSIFBBUlRJRVMgUFJPVklERSBUSEUgUFJPR1JBTSAiQVMgSVMiIFdJVEhP +VVQgV0FSUkFOVFkKT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTRUQgT1IgSU1Q +TElFRCwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sClRIRSBJTVBMSUVE +IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB +IFBBUlRJQ1VMQVIKUFVSUE9TRS4gIFRIRSBFTlRJUkUgUklTSyBBUyBUTyBUSEUg +UVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFIFBST0dSQU0KSVMgV0lUSCBZ +T1UuICBTSE9VTEQgVEhFIFBST0dSQU0gUFJPVkUgREVGRUNUSVZFLCBZT1UgQVNT +VU1FIFRIRSBDT1NUIE9GCkFMTCBORUNFU1NBUlkgU0VSVklDSU5HLCBSRVBBSVIg +T1IgQ09SUkVDVElPTi4KCiAgMTYuIExpbWl0YXRpb24gb2YgTGlhYmlsaXR5LgoK +ICBJTiBOTyBFVkVOVCBVTkxFU1MgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcg +T1IgQUdSRUVEIFRPIElOIFdSSVRJTkcKV0lMTCBBTlkgQ09QWVJJR0hUIEhPTERF +UiwgT1IgQU5ZIE9USEVSIFBBUlRZIFdITyBNT0RJRklFUyBBTkQvT1IgQ09OVkVZ +UwpUSEUgUFJPR1JBTSBBUyBQRVJNSVRURUQgQUJPVkUsIEJFIExJQUJMRSBUTyBZ +T1UgRk9SIERBTUFHRVMsIElOQ0xVRElORyBBTlkKR0VORVJBTCwgU1BFQ0lBTCwg +SU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgQVJJU0lORyBPVVQg +T0YgVEhFClVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRSBQUk9HUkFNIChJTkNM +VURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIExPU1MgT0YKREFUQSBPUiBEQVRBIEJF +SU5HIFJFTkRFUkVEIElOQUNDVVJBVEUgT1IgTE9TU0VTIFNVU1RBSU5FRCBCWSBZ +T1UgT1IgVEhJUkQKUEFSVElFUyBPUiBBIEZBSUxVUkUgT0YgVEhFIFBST0dSQU0g +VE8gT1BFUkFURSBXSVRIIEFOWSBPVEhFUiBQUk9HUkFNUyksCkVWRU4gSUYgU1VD +SCBIT0xERVIgT1IgT1RIRVIgUEFSVFkgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUg +UE9TU0lCSUxJVFkgT0YKU1VDSCBEQU1BR0VTLgoKICAxNy4gSW50ZXJwcmV0YXRp +b24gb2YgU2VjdGlvbnMgMTUgYW5kIDE2LgoKICBJZiB0aGUgZGlzY2xhaW1lciBv +ZiB3YXJyYW50eSBhbmQgbGltaXRhdGlvbiBvZiBsaWFiaWxpdHkgcHJvdmlkZWQK +YWJvdmUgY2Fubm90IGJlIGdpdmVuIGxvY2FsIGxlZ2FsIGVmZmVjdCBhY2NvcmRp +bmcgdG8gdGhlaXIgdGVybXMsCnJldmlld2luZyBjb3VydHMgc2hhbGwgYXBwbHkg +bG9jYWwgbGF3IHRoYXQgbW9zdCBjbG9zZWx5IGFwcHJveGltYXRlcwphbiBhYnNv +bHV0ZSB3YWl2ZXIgb2YgYWxsIGNpdmlsIGxpYWJpbGl0eSBpbiBjb25uZWN0aW9u +IHdpdGggdGhlClByb2dyYW0sIHVubGVzcyBhIHdhcnJhbnR5IG9yIGFzc3VtcHRp +b24gb2YgbGlhYmlsaXR5IGFjY29tcGFuaWVzIGEKY29weSBvZiB0aGUgUHJvZ3Jh +bSBpbiByZXR1cm4gZm9yIGEgZmVlLgoKICAgICAgICAgICAgICAgICAgICAgRU5E +IE9GIFRFUk1TIEFORCBDT05ESVRJT05TCgogICAgICAgICAgICBIb3cgdG8gQXBw +bHkgVGhlc2UgVGVybXMgdG8gWW91ciBOZXcgUHJvZ3JhbXMKCiAgSWYgeW91IGRl +dmVsb3AgYSBuZXcgcHJvZ3JhbSwgYW5kIHlvdSB3YW50IGl0IHRvIGJlIG9mIHRo +ZSBncmVhdGVzdApwb3NzaWJsZSB1c2UgdG8gdGhlIHB1YmxpYywgdGhlIGJlc3Qg +d2F5IHRvIGFjaGlldmUgdGhpcyBpcyB0byBtYWtlIGl0CmZyZWUgc29mdHdhcmUg +d2hpY2ggZXZlcnlvbmUgY2FuIHJlZGlzdHJpYnV0ZSBhbmQgY2hhbmdlIHVuZGVy +IHRoZXNlIHRlcm1zLgoKICBUbyBkbyBzbywgYXR0YWNoIHRoZSBmb2xsb3dpbmcg +bm90aWNlcyB0byB0aGUgcHJvZ3JhbS4gIEl0IGlzIHNhZmVzdAp0byBhdHRhY2gg +dGhlbSB0byB0aGUgc3RhcnQgb2YgZWFjaCBzb3VyY2UgZmlsZSB0byBtb3N0IGVm +ZmVjdGl2ZWx5CnN0YXRlIHRoZSBleGNsdXNpb24gb2Ygd2FycmFudHk7IGFuZCBl +YWNoIGZpbGUgc2hvdWxkIGhhdmUgYXQgbGVhc3QKdGhlICJjb3B5cmlnaHQiIGxp +bmUgYW5kIGEgcG9pbnRlciB0byB3aGVyZSB0aGUgZnVsbCBub3RpY2UgaXMgZm91 +bmQuCgogICAgPG9uZSBsaW5lIHRvIGdpdmUgdGhlIHByb2dyYW0ncyBuYW1lIGFu +ZCBhIGJyaWVmIGlkZWEgb2Ygd2hhdCBpdCBkb2VzLj4KICAgIENvcHlyaWdodCAo +QykgPHllYXI+ICA8bmFtZSBvZiBhdXRob3I+CgogICAgVGhpcyBwcm9ncmFtIGlz +IGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBt +b2RpZnkKICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwg +UHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiAgICB0aGUgRnJlZSBTb2Z0 +d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNl +LCBvcgogICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KCiAg +ICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp +dCB3aWxsIGJlIHVzZWZ1bCwKICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg +d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgICBNRVJDSEFO +VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT +ZWUgdGhlCiAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk +ZXRhaWxzLgoKICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg +dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiAgICBhbG9uZyB3aXRoIHRo +aXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xp +Y2Vuc2VzLz4uCgpBbHNvIGFkZCBpbmZvcm1hdGlvbiBvbiBob3cgdG8gY29udGFj +dCB5b3UgYnkgZWxlY3Ryb25pYyBhbmQgcGFwZXIgbWFpbC4KCiAgSWYgdGhlIHBy +b2dyYW0gZG9lcyB0ZXJtaW5hbCBpbnRlcmFjdGlvbiwgbWFrZSBpdCBvdXRwdXQg +YSBzaG9ydApub3RpY2UgbGlrZSB0aGlzIHdoZW4gaXQgc3RhcnRzIGluIGFuIGlu +dGVyYWN0aXZlIG1vZGU6CgogICAgPHByb2dyYW0+ICBDb3B5cmlnaHQgKEMpIDx5 +ZWFyPiAgPG5hbWUgb2YgYXV0aG9yPgogICAgVGhpcyBwcm9ncmFtIGNvbWVzIHdp +dGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWTsgZm9yIGRldGFpbHMgdHlwZSBgc2hv +dyB3Jy4KICAgIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgYW5kIHlvdSBhcmUgd2Vs +Y29tZSB0byByZWRpc3RyaWJ1dGUgaXQKICAgIHVuZGVyIGNlcnRhaW4gY29uZGl0 +aW9uczsgdHlwZSBgc2hvdyBjJyBmb3IgZGV0YWlscy4KClRoZSBoeXBvdGhldGlj +YWwgY29tbWFuZHMgYHNob3cgdycgYW5kIGBzaG93IGMnIHNob3VsZCBzaG93IHRo +ZSBhcHByb3ByaWF0ZQpwYXJ0cyBvZiB0aGUgR2VuZXJhbCBQdWJsaWMgTGljZW5z +ZS4gIE9mIGNvdXJzZSwgeW91ciBwcm9ncmFtJ3MgY29tbWFuZHMKbWlnaHQgYmUg +ZGlmZmVyZW50OyBmb3IgYSBHVUkgaW50ZXJmYWNlLCB5b3Ugd291bGQgdXNlIGFu +ICJhYm91dCBib3giLgoKICBZb3Ugc2hvdWxkIGFsc28gZ2V0IHlvdXIgZW1wbG95 +ZXIgKGlmIHlvdSB3b3JrIGFzIGEgcHJvZ3JhbW1lcikgb3Igc2Nob29sLAppZiBh +bnksIHRvIHNpZ24gYSAiY29weXJpZ2h0IGRpc2NsYWltZXIiIGZvciB0aGUgcHJv +Z3JhbSwgaWYgbmVjZXNzYXJ5LgpGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGlz +LCBhbmQgaG93IHRvIGFwcGx5IGFuZCBmb2xsb3cgdGhlIEdOVSBHUEwsIHNlZQo8 +aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgoKICBUaGUgR05VIEdlbmVy +YWwgUHVibGljIExpY2Vuc2UgZG9lcyBub3QgcGVybWl0IGluY29ycG9yYXRpbmcg +eW91ciBwcm9ncmFtCmludG8gcHJvcHJpZXRhcnkgcHJvZ3JhbXMuICBJZiB5b3Vy +IHByb2dyYW0gaXMgYSBzdWJyb3V0aW5lIGxpYnJhcnksIHlvdQptYXkgY29uc2lk +ZXIgaXQgbW9yZSB1c2VmdWwgdG8gcGVybWl0IGxpbmtpbmcgcHJvcHJpZXRhcnkg +YXBwbGljYXRpb25zIHdpdGgKdGhlIGxpYnJhcnkuICBJZiB0aGlzIGlzIHdoYXQg +eW91IHdhbnQgdG8gZG8sIHVzZSB0aGUgR05VIExlc3NlciBHZW5lcmFsClB1Ymxp +YyBMaWNlbnNlIGluc3RlYWQgb2YgdGhpcyBMaWNlbnNlLiAgQnV0IGZpcnN0LCBw +bGVhc2UgcmVhZAo8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy93aHktbm90 +LWxncGwuaHRtbD4uCg== diff --git a/hw3/des-gpl.bin b/hw3/des-gpl.bin new file mode 100644 index 0000000..a7a8c3e Binary files /dev/null and b/hw3/des-gpl.bin differ diff --git a/hw3/pic_cbc.bmp b/hw3/pic_cbc.bmp new file mode 100644 index 0000000..58e3467 Binary files /dev/null and b/hw3/pic_cbc.bmp differ diff --git a/hw3/pic_cbc_edited.bmp b/hw3/pic_cbc_edited.bmp new file mode 100644 index 0000000..f5bd21e Binary files /dev/null and b/hw3/pic_cbc_edited.bmp differ diff --git a/hw3/pic_ecb.bmp b/hw3/pic_ecb.bmp new file mode 100644 index 0000000..fe90a24 Binary files /dev/null and b/hw3/pic_ecb.bmp differ diff --git a/hw3/pic_ecb_edited.bmp b/hw3/pic_ecb_edited.bmp new file mode 100644 index 0000000..ab526f3 Binary files /dev/null and b/hw3/pic_ecb_edited.bmp differ diff --git a/hw3/pic_original.bmp b/hw3/pic_original.bmp new file mode 100644 index 0000000..6383203 Binary files /dev/null and b/hw3/pic_original.bmp differ diff --git a/hw3/sample.txt b/hw3/sample.txt new file mode 100644 index 0000000..8bd3fc8 --- /dev/null +++ b/hw3/sample.txt @@ -0,0 +1 @@ +there are about 112 bytes in this file of plain text that is going to be used for testing encrpytion corruption diff --git a/hw3/sample_aes_cbc.txt b/hw3/sample_aes_cbc.txt new file mode 100644 index 0000000..353eef6 Binary files /dev/null and b/hw3/sample_aes_cbc.txt differ diff --git a/hw3/sample_aes_cbc_altered.txt b/hw3/sample_aes_cbc_altered.txt new file mode 100644 index 0000000..07637e6 Binary files /dev/null and b/hw3/sample_aes_cbc_altered.txt differ diff --git a/hw3/sample_aes_cbc_decrypt.txt b/hw3/sample_aes_cbc_decrypt.txt new file mode 100644 index 0000000..8d4d107 --- /dev/null +++ b/hw3/sample_aes_cbc_decrypt.txt @@ -0,0 +1 @@ +F~e112 bytes in ths file of plain text that is going to be used for testing encrpytion corruption diff --git a/hw3/sample_aes_cfb.txt b/hw3/sample_aes_cfb.txt new file mode 100644 index 0000000..790a77d --- /dev/null +++ b/hw3/sample_aes_cfb.txt @@ -0,0 +1,2 @@ +Salted__\v@2D?WH]A ]ޏGƴw=MJ"MzYI:󵥠7bI+Q +0;}oCDzOMjm+LA \ No newline at end of file diff --git a/hw3/sample_aes_cfb_altered.txt b/hw3/sample_aes_cfb_altered.txt new file mode 100644 index 0000000..fd7eaa8 --- /dev/null +++ b/hw3/sample_aes_cfb_altered.txt @@ -0,0 +1,2 @@ +Salted__\v@2D?WH]A ]ޏGƴw=MJ"MzYI:󵥠7bI+Q +0;}oCDzOMjm+LA \ No newline at end of file diff --git a/hw3/sample_aes_cfb_decrypt.txt b/hw3/sample_aes_cfb_decrypt.txt new file mode 100644 index 0000000..cb7606e --- /dev/null +++ b/hw3/sample_aes_cfb_decrypt.txt @@ -0,0 +1 @@ +there are about_i7mwas file of plain text that is going to be used for testing encrpytion corruption diff --git a/hw3/sample_aes_ecb.txt b/hw3/sample_aes_ecb.txt new file mode 100644 index 0000000..433bcb5 Binary files /dev/null and b/hw3/sample_aes_ecb.txt differ diff --git a/hw3/sample_aes_ecb_altered.txt b/hw3/sample_aes_ecb_altered.txt new file mode 100644 index 0000000..5f414d2 Binary files /dev/null and b/hw3/sample_aes_ecb_altered.txt differ diff --git a/hw3/sample_aes_ecb_decrypt.txt b/hw3/sample_aes_ecb_decrypt.txt new file mode 100644 index 0000000..f0850f1 --- /dev/null +++ b/hw3/sample_aes_ecb_decrypt.txt @@ -0,0 +1 @@ +#cH*dߙ}>112 bytes in this file of plain text that is going to be used for testing encrpytion corruption diff --git a/hw3/sample_aes_ofb.txt b/hw3/sample_aes_ofb.txt new file mode 100644 index 0000000..21ac9c2 Binary files /dev/null and b/hw3/sample_aes_ofb.txt differ diff --git a/hw3/sample_aes_ofb_altered.txt b/hw3/sample_aes_ofb_altered.txt new file mode 100644 index 0000000..aae589f Binary files /dev/null and b/hw3/sample_aes_ofb_altered.txt differ diff --git a/hw3/sample_aes_ofb_decrypt.txt b/hw3/sample_aes_ofb_decrypt.txt new file mode 100644 index 0000000..b3dbbd0 --- /dev/null +++ b/hw3/sample_aes_ofb_decrypt.txt @@ -0,0 +1 @@ +there are about112 bytes in this file of plain text that is going to be used for testing encrpytion corruption