QGMgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgpAYyBUaGlzIGlzIHBhcnQgb2YgdGhlIEdDQyBtYW51YWwuCkBjIEZvciBjb3B5aW5nIGNvbmRpdGlvbnMsIHNlZSB0aGUgZmlsZSBnY2MudGV4aS4KCkBub2RlIE9wdGlvbnMKQGNoYXB0ZXIgT3B0aW9uIHNwZWNpZmljYXRpb24gZmlsZXMKQGNpbmRleCBvcHRpb24gc3BlY2lmaWNhdGlvbiBmaWxlcwpAY2luZGV4IEBzYW1we29wdHMuc2h9CgpNb3N0IEdDQyBjb21tYW5kLWxpbmUgb3B0aW9ucyBhcmUgZGVzY3JpYmVkIGJ5IHNwZWNpYWwgb3B0aW9uCmRlZmluaXRpb24gZmlsZXMsIHRoZSBuYW1lcyBvZiB3aGljaCBjb252ZW50aW9uYWxseSBlbmQgaW4KQGNvZGV7Lm9wdH0uICBUaGlzIGNoYXB0ZXIgZGVzY3JpYmVzIHRoZSBmb3JtYXQgb2YgdGhlc2UgZmlsZXMuCgpAbWVudQoqIE9wdGlvbiBmaWxlIGZvcm1hdDo6ICAgVGhlIGdlbmVyYWwgbGF5b3V0IG9mIHRoZSBmaWxlcwoqIE9wdGlvbiBwcm9wZXJ0aWVzOjogICAgU3VwcG9ydGVkIG9wdGlvbiBwcm9wZXJ0aWVzCkBlbmQgbWVudQoKQG5vZGUgT3B0aW9uIGZpbGUgZm9ybWF0CkBzZWN0aW9uIE9wdGlvbiBmaWxlIGZvcm1hdAoKT3B0aW9uIGZpbGVzIGFyZSBhIHNpbXBsZSBsaXN0IG9mIHJlY29yZHMgaW4gd2hpY2ggZWFjaCBmaWVsZCBvY2N1cGllcwppdHMgb3duIGxpbmUgYW5kIGluIHdoaWNoIHRoZSByZWNvcmRzIHRoZW1zZWx2ZXMgYXJlIHNlcGFyYXRlZCBieQpibGFuayBsaW5lcy4gIENvbW1lbnRzIG1heSBhcHBlYXIgb24gdGhlaXIgb3duIGxpbmUgYW55d2hlcmUgd2l0aGluCnRoZSBmaWxlIGFuZCBhcmUgcHJlY2VkZWQgYnkgc2VtaWNvbG9ucy4gIFdoaXRlc3BhY2UgaXMgYWxsb3dlZCBiZWZvcmUKdGhlIHNlbWljb2xvbi4KClRoZSBmaWxlcyBjYW4gY29udGFpbiB0aGUgZm9sbG93aW5nIHR5cGVzIG9mIHJlY29yZDoKCkBpdGVtaXplIEBidWxsZXQKQGl0ZW0KQSBsYW5ndWFnZSBkZWZpbml0aW9uIHJlY29yZC4goFRoZXNlIHJlY29yZHMgaGF2ZSB0d28gZmllbGRzOiB0aGUKc3RyaW5nIEBzYW1we0xhbmd1YWdlfSBhbmQgdGhlIG5hbWUgb2YgdGhlIGxhbmd1YWdlLiCgT25jZSBhIGxhbmd1YWdlCmhhcyBiZWVuIGRlY2xhcmVkIGluIHRoaXMgd2F5LCBpdCBjYW4gYmUgdXNlZCBhcyBhbiBvcHRpb24gcHJvcGVydHkuCkB4cmVme09wdGlvbiBwcm9wZXJ0aWVzfS4KCkBpdGVtCkFuIG9wdGlvbiBkZWZpbml0aW9uIHJlY29yZC4goFRoZXNlIHJlY29yZHMgaGF2ZSB0aGUgZm9sbG93aW5nIGZpZWxkczoKCkBlbnVtZXJhdGUKQGl0ZW0KdGhlIG5hbWUgb2YgdGhlIG9wdGlvbiwgd2l0aCB0aGUgbGVhZGluZyBgYC0nJyByZW1vdmVkCkBpdGVtCmEgc3BhY2Utc2VwYXJhdGVkIGxpc3Qgb2Ygb3B0aW9uIHByb3BlcnRpZXMgKEBweHJlZntPcHRpb24gcHJvcGVydGllc30pCkBpdGVtCnRoZSBoZWxwIHRleHQgdG8gdXNlIGZvciBAb3B0aW9uey0taGVscH0gKG9taXR0ZWQgaWYgdGhlIHNlY29uZCBmaWVsZApjb250YWlucyB0aGUgQGNvZGV7VW5kb2N1bWVudGVkfSBwcm9wZXJ0eSkuCkBlbmQgZW51bWVyYXRlCgpCeSBkZWZhdWx0LCBhbGwgb3B0aW9ucyBiZWdpbm5pbmcgd2l0aCBgYGYnJywgYGBXJycgb3IgYGBtJycgYXJlCmltcGxpY2l0bHkgYXNzdW1lZCB0byB0YWtlIGEgYGBuby0nJyBmb3JtLiAgVGhpcyBmb3JtIHNob3VsZCBub3QgYmUKbGlzdGVkIHNlcGFyYXRlbHkuICBJZiBhbiBvcHRpb24gYmVnaW5uaW5nIHdpdGggb25lIG9mIHRoZXNlIGxldHRlcnMKZG9lcyBub3QgaGF2ZSBhIGBgbm8tJycgZm9ybSwgeW91IGNhbiB1c2UgdGhlIEBjb2Rle1JlamVjdE5lZ2F0aXZlfQpwcm9wZXJ0eSB0byByZWplY3QgaXQuCgpUaGUgaGVscCB0ZXh0IGlzIGF1dG9tYXRpY2FsbHkgbGluZS13cmFwcGVkIGJlZm9yZSBiZWluZyBkaXNwbGF5ZWQuCk5vcm1hbGx5IHRoZSBuYW1lIG9mIHRoZSBvcHRpb24gaXMgcHJpbnRlZCBvbiB0aGUgbGVmdC1oYW5kIHNpZGUgb2YKdGhlIG91dHB1dCBhbmQgdGhlIGhlbHAgdGV4dCBpcyBwcmludGVkIG9uIHRoZSByaWdodC4gIEhvd2V2ZXIsIGlmIHRoZQpoZWxwIHRleHQgY29udGFpbnMgYSB0YWIgY2hhcmFjdGVyLCB0aGUgdGV4dCB0byB0aGUgbGVmdCBvZiB0aGUgdGFiIGlzCnVzZWQgaW5zdGVhZCBvZiB0aGUgb3B0aW9uJ3MgbmFtZSBhbmQgdGhlIHRleHQgdG8gdGhlIHJpZ2h0IG9mIHRoZQp0YWIgZm9ybXMgdGhlIGhlbHAgdGV4dC4gIFRoaXMgYWxsb3dzIHlvdSB0byBlbGFib3JhdGUgb24gd2hhdCB0eXBlCm9mIGFyZ3VtZW50IHRoZSBvcHRpb24gdGFrZXMuCgpAaXRlbQpBIHRhcmdldCBtYXNrIHJlY29yZC4goFRoZXNlIHJlY29yZHMgaGF2ZSBvbmUgZmllbGQgb2YgdGhlIGZvcm0KQHNhbXB7TWFzayhAdmFye3h9KX0uIKBUaGUgb3B0aW9ucy1wcm9jZXNzaW5nIHNjcmlwdCB3aWxsIGF1dG9tYXRpY2FsbHkKYWxsb2NhdGUgYSBiaXQgaW4gQGNvZGV7dGFyZ2V0X2ZsYWdzfSAoQHB4cmVme1J1bi10aW1lIFRhcmdldH0pIGZvcgplYWNoIG1hc2sgbmFtZSBAdmFye3h9IGFuZCBzZXQgdGhlIG1hY3JvIEBjb2Rle01BU0tfQHZhcnt4fX0gdG8gdGhlCmFwcHJvcHJpYXRlIGJpdG1hc2suIKBJdCB3aWxsIGFsc28gZGVjbGFyZSBhIEBjb2Rle1RBUkdFVF9AdmFye3h9fQptYWNybyB0aGF0IGhhcyB0aGUgdmFsdWUgMSB3aGVuIGJpdCBAY29kZXtNQVNLX0B2YXJ7eH19IGlzIHNldCBhbmQKMCBvdGhlcndpc2UuCgpUaGV5IGFyZSBwcmltYXJpbHkgaW50ZW5kZWQgdG8gZGVjbGFyZSB0YXJnZXQgbWFza3MgdGhhdCBhcmUgbm90CmFzc29jaWF0ZWQgd2l0aCB1c2VyIG9wdGlvbnMsIGVpdGhlciBiZWNhdXNlIHRoZXNlIG1hc2tzIHJlcHJlc2VudAppbnRlcm5hbCBzd2l0Y2hlcyBvciBiZWNhdXNlIHRoZSBvcHRpb25zIGFyZSBub3QgYXZhaWxhYmxlIG9uIGFsbApjb25maWd1cmF0aW9ucyBhbmQgeWV0IHRoZSBtYXNrcyBhbHdheXMgbmVlZCB0byBiZSBkZWZpbmVkLgpAZW5kIGl0ZW1pemUKCkBub2RlIE9wdGlvbiBwcm9wZXJ0aWVzCkBzZWN0aW9uIE9wdGlvbiBwcm9wZXJ0aWVzCgpUaGUgc2Vjb25kIGZpZWxkIG9mIGFuIG9wdGlvbiByZWNvcmQgY2FuIHNwZWNpZnkgdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOgoKQHRhYmxlIEBjb2RlCkBpdGVtIENvbW1vbgpUaGUgb3B0aW9uIGlzIGF2YWlsYWJsZSBmb3IgYWxsIGxhbmd1YWdlcyBhbmQgdGFyZ2V0cy4KCkBpdGVtIFRhcmdldApUaGUgb3B0aW9uIGlzIGF2YWlsYWJsZSBmb3IgYWxsIGxhbmd1YWdlcyBidXQgaXMgdGFyZ2V0LXNwZWNpZmljLgoKQGl0ZW0gQHZhcntsYW5ndWFnZX0KVGhlIG9wdGlvbiBpcyBhdmFpbGFibGUgd2hlbiBjb21waWxpbmcgZm9yIHRoZSBnaXZlbiBsYW5ndWFnZS4KCkl0IGlzIHBvc3NpYmxlIHRvIHNwZWNpZnkgc2V2ZXJhbCBkaWZmZXJlbnQgbGFuZ3VhZ2VzIGZvciB0aGUgc2FtZQpvcHRpb24uICBFYWNoIEB2YXJ7bGFuZ3VhZ2V9IG11c3QgaGF2ZSBiZWVuIGRlY2xhcmVkIGJ5IGFuIGVhcmxpZXIKQGNvZGV7TGFuZ3VhZ2V9IHJlY29yZC4gIEB4cmVme09wdGlvbiBmaWxlIGZvcm1hdH0uCgpAaXRlbSBSZWplY3ROZWdhdGl2ZQpUaGUgb3B0aW9uIGRvZXMgbm90IGhhdmUgYSBgYG5vLScnIGZvcm0uICBBbGwgb3B0aW9ucyBiZWdpbm5pbmcgd2l0aApgYGYnJywgYGBXJycgb3IgYGBtJycgYXJlIGFzc3VtZWQgdG8gaGF2ZSBhIGBgbm8tJycgZm9ybSB1bmxlc3MgdGhpcwpwcm9wZXJ0eSBpcyB1c2VkLgoKQGl0ZW0gTmVnYXRpdmUoQHZhcntvdGhlcm5hbWV9KQpUaGUgb3B0aW9uIHdpbGwgdHVybiBvZmYgYW5vdGhlciBvcHRpb24gQHZhcntvdGhlcm5hbWV9LCB3aGljaCBpcyB0aGUKdGhlIG9wdGlvbiBuYW1lIHdpdGggdGhlIGxlYWRpbmcgYGAtJycgcmVtb3ZlZC4gIFRoaXMgY2hhaW4gYWN0aW9uIHdpbGwKcHJvcGFnYXRlIHRocm91Z2ggdGhlIEBjb2Rle05lZ2F0aXZlfSBwcm9wZXJ0eSBvZiB0aGUgb3B0aW9uIHRvIGJlCnR1cm5lZCBvZmYuCgpAaXRlbSBKb2luZWQKQGl0ZW14IFNlcGFyYXRlClRoZSBvcHRpb24gdGFrZXMgYSBtYW5kYXRvcnkgYXJndW1lbnQuICBAY29kZXtKb2luZWR9IGluZGljYXRlcwp0aGF0IHRoZSBvcHRpb24gYW5kIGFyZ3VtZW50IGNhbiBiZSBpbmNsdWRlZCBpbiB0aGUgc2FtZSBAY29kZXthcmd2fQplbnRyeSAoYXMgd2l0aCBAY29kZXstbWZsdXNoLWZ1bmM9QHZhcntuYW1lfX0sIGZvciBleGFtcGxlKS4KQGNvZGV7U2VwYXJhdGV9IGluZGljYXRlcyB0aGF0IHRoZSBvcHRpb24gYW5kIGFyZ3VtZW50IGNhbiBiZQpzZXBhcmF0ZSBAY29kZXthcmd2fSBlbnRyaWVzIChhcyB3aXRoIEBjb2Rley1vfSkuICBBbiBvcHRpb24gaXMKYWxsb3dlZCB0byBoYXZlIGJvdGggb2YgdGhlc2UgcHJvcGVydGllcy4KCkBpdGVtIEpvaW5lZE9yTWlzc2luZwpUaGUgb3B0aW9uIHRha2VzIGFuIG9wdGlvbmFsIGFyZ3VtZW50LiAgSWYgdGhlIGFyZ3VtZW50IGlzIGdpdmVuLAppdCB3aWxsIGJlIHBhcnQgb2YgdGhlIHNhbWUgQGNvZGV7YXJndn0gZW50cnkgYXMgdGhlIG9wdGlvbiBpdHNlbGYuCgpUaGlzIHByb3BlcnR5IGNhbm5vdCBiZSB1c2VkIGFsb25nc2lkZSBAY29kZXtKb2luZWR9IG9yIEBjb2Rle1NlcGFyYXRlfS4KCkBpdGVtIFVJbnRlZ2VyClRoZSBvcHRpb24ncyBhcmd1bWVudCBpcyBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyLiAgVGhlIG9wdGlvbiBwYXJzZXIKd2lsbCBjaGVjayBhbmQgY29udmVydCB0aGUgYXJndW1lbnQgYmVmb3JlIHBhc3NpbmcgaXQgdG8gdGhlIHJlbGV2YW50Cm9wdGlvbiBoYW5kbGVyLgoKQGl0ZW0gVmFyKEB2YXJ7dmFyfSkKVGhlIHN0YXRlIG9mIHRoaXMgb3B0aW9uIHNob3VsZCBiZSBzdG9yZWQgaW4gdmFyaWFibGUgQHZhcnt2YXJ9LgpUaGUgd2F5IHRoYXQgdGhlIHN0YXRlIGlzIHN0b3JlZCBkZXBlbmRzIG9uIHRoZSB0eXBlIG9mIG9wdGlvbjoKCkBpdGVtaXplIEBidWxsZXQKQGl0ZW0KSWYgdGhlIG9wdGlvbiB1c2VzIHRoZSBAY29kZXtNYXNrfSBvciBAY29kZXtJbnZlcnNlTWFza30gcHJvcGVydGllcywKQHZhcnt2YXJ9IGlzIHRoZSBpbnRlZ2VyIHZhcmlhYmxlIHRoYXQgY29udGFpbnMgdGhlIG1hc2suCgpAaXRlbQpJZiB0aGUgb3B0aW9uIGlzIGEgbm9ybWFsIG9uL29mZiBzd2l0Y2gsIEB2YXJ7dmFyfSBpcyBhbiBpbnRlZ2VyCnZhcmlhYmxlIHRoYXQgaXMgbm9uemVybyB3aGVuIHRoZSBvcHRpb24gaXMgZW5hYmxlZC4gIFRoZSBvcHRpb25zCnBhcnNlciB3aWxsIHNldCB0aGUgdmFyaWFibGUgdG8gMSB3aGVuIHRoZSBwb3NpdGl2ZSBmb3JtIG9mIHRoZQpvcHRpb24gaXMgdXNlZCBhbmQgMCB3aGVuIHRoZSBgYG5vLScnIGZvcm0gaXMgdXNlZC4KCkBpdGVtCklmIHRoZSBvcHRpb24gdGFrZXMgYW4gYXJndW1lbnQgYW5kIGhhcyB0aGUgQGNvZGV7VUludGVnZXJ9IHByb3BlcnR5LApAdmFye3Zhcn0gaXMgYW4gaW50ZWdlciB2YXJpYWJsZSB0aGF0IHN0b3JlcyB0aGUgdmFsdWUgb2YgdGhlIGFyZ3VtZW50LgoKQGl0ZW0KT3RoZXJ3aXNlLCBpZiB0aGUgb3B0aW9uIHRha2VzIGFuIGFyZ3VtZW50LCBAdmFye3Zhcn0gaXMgYSBwb2ludGVyIHRvCnRoZSBhcmd1bWVudCBzdHJpbmcuICBUaGUgcG9pbnRlciB3aWxsIGJlIG51bGwgaWYgdGhlIGFyZ3VtZW50IGlzIG9wdGlvbmFsCmFuZCB3YXNuJ3QgZ2l2ZW4uCkBlbmQgaXRlbWl6ZQoKVGhlIG9wdGlvbi1wcm9jZXNzaW5nIHNjcmlwdCB3aWxsIHVzdWFsbHkgZGVjbGFyZSBAdmFye3Zhcn0gaW4KQGZpbGV7b3B0aW9ucy5jfSBhbmQgbGVhdmUgaXQgdG8gYmUgemVyby1pbml0aWFsaXplZCBhdCBzdGFydC11cCB0aW1lLgpZb3UgY2FuIG1vZGlmeSB0aGlzIGJlaGF2aW9yIHVzaW5nIEBjb2Rle1ZhckV4aXN0c30gYW5kIEBjb2Rle0luaXR9LgoKQGl0ZW0gVmFyKEB2YXJ7dmFyfSwgQHZhcntzZXR9KQpUaGUgb3B0aW9uIGNvbnRyb2xzIGFuIGludGVnZXIgdmFyaWFibGUgQHZhcnt2YXJ9IGFuZCBpcyBhY3RpdmUgd2hlbgpAdmFye3Zhcn0gZXF1YWxzIEB2YXJ7c2V0fS4gIFRoZSBvcHRpb24gcGFyc2VyIHdpbGwgc2V0IEB2YXJ7dmFyfSB0bwpAdmFye3NldH0gd2hlbiB0aGUgcG9zaXRpdmUgZm9ybSBvZiB0aGUgb3B0aW9uIGlzIHVzZWQgYW5kIEBjb2RleyFAdmFye3NldH19CndoZW4gdGhlIGBgbm8tJycgZm9ybSBpcyB1c2VkLgoKQHZhcnt2YXJ9IGlzIGRlY2xhcmVkIGluIHRoZSBzYW1lIHdheSBhcyBmb3IgdGhlIHNpbmdsZS1hcmd1bWVudCBmb3JtCmRlc2NyaWJlZCBhYm92ZS4KCkBpdGVtIFZhckV4aXN0cwpUaGUgdmFyaWFibGUgc3BlY2lmaWVkIGJ5IHRoZSBAY29kZXtWYXJ9IHByb3BlcnR5IGFscmVhZHkgZXhpc3RzLgpObyBkZWZpbml0aW9uIHNob3VsZCBiZSBhZGRlZCB0byBAZmlsZXtvcHRpb25zLmN9IGluIHJlc3BvbnNlIHRvCnRoaXMgb3B0aW9uIHJlY29yZC4KCllvdSBzaG91bGQgdXNlIHRoaXMgcHJvcGVydHkgb25seSBpZiB0aGUgdmFyaWFibGUgaXMgZGVjbGFyZWQgb3V0c2lkZQpAZmlsZXtvcHRpb25zLmN9LgoKQGl0ZW0gSW5pdChAdmFye3ZhbHVlfSkKVGhlIHZhcmlhYmxlIHNwZWNpZmllZCBieSB0aGUgQGNvZGV7VmFyfSBwcm9wZXJ0eSBzaG91bGQgYmUgc3RhdGljYWxseQppbml0aWFsaXplZCB0byBAdmFye3ZhbHVlfS4KCkBpdGVtIE1hc2soQHZhcntuYW1lfSkKVGhlIG9wdGlvbiBpcyBhc3NvY2lhdGVkIHdpdGggYSBiaXQgaW4gdGhlIEBjb2Rle3RhcmdldF9mbGFnc30KdmFyaWFibGUgKEBweHJlZntSdW4tdGltZSBUYXJnZXR9KSBhbmQgaXMgYWN0aXZlIHdoZW4gdGhhdCBiaXQgaXMgc2V0LgpZb3UgbWF5IGFsc28gc3BlY2lmeSBAY29kZXtWYXJ9IHRvIHNlbGVjdCBhIHZhcmlhYmxlIG90aGVyIHRoYW4KQGNvZGV7dGFyZ2V0X2ZsYWdzfS4KClRoZSBvcHRpb25zLXByb2Nlc3Npbmcgc2NyaXB0IHdpbGwgYXV0b21hdGljYWxseSBhbGxvY2F0ZSBhIHVuaXF1ZSBiaXQKZm9yIHRoZSBvcHRpb24uICBJZiB0aGUgb3B0aW9uIGlzIGF0dGFjaGVkIHRvIEBzYW1we3RhcmdldF9mbGFnc30sCnRoZSBzY3JpcHQgd2lsbCBzZXQgdGhlIG1hY3JvIEBjb2Rle01BU0tfQHZhcntuYW1lfX0gdG8gdGhlIGFwcHJvcHJpYXRlCmJpdG1hc2suICBJdCB3aWxsIGFsc28gZGVjbGFyZSBhIEBjb2Rle1RBUkdFVF9AdmFye25hbWV9fSBtYWNybyB0aGF0IGhhcwp0aGUgdmFsdWUgMSB3aGVuIHRoZSBvcHRpb24gaXMgYWN0aXZlIGFuZCAwIG90aGVyd2lzZS4gIElmIHlvdSB1c2UgQGNvZGV7VmFyfQp0byBhdHRhY2ggdGhlIG9wdGlvbiB0byBhIGRpZmZlcmVudCB2YXJpYWJsZSwgdGhlIGFzc29jaWF0ZWQgbWFjcm9zIGFyZQpjYWxsZWQgQGNvZGV7T1BUSU9OX01BU0tfQHZhcntuYW1lfX0gYW5kIEBjb2Rle09QVElPTl9AdmFye25hbWV9fSByZXNwZWN0aXZlbHkuCgpZb3UgY2FuIGRpc2FibGUgYXV0b21hdGljIGJpdCBhbGxvY2F0aW9uIHVzaW5nIEBjb2Rle01hc2tFeGlzdHN9LgoKQGl0ZW0gSW52ZXJzZU1hc2soQHZhcntvdGhlcm5hbWV9KQpAaXRlbXggSW52ZXJzZU1hc2soQHZhcntvdGhlcm5hbWV9LCBAdmFye3RoaXNuYW1lfSkKVGhlIG9wdGlvbiBpcyB0aGUgaW52ZXJzZSBvZiBhbm90aGVyIG9wdGlvbiB0aGF0IGhhcyB0aGUKQGNvZGV7TWFzayhAdmFye290aGVybmFtZX0pfSBwcm9wZXJ0eS4gIElmIEB2YXJ7dGhpc25hbWV9IGlzIGdpdmVuLAp0aGUgb3B0aW9ucy1wcm9jZXNzaW5nIHNjcmlwdCB3aWxsIGRlY2xhcmUgYSBAY29kZXtUQVJHRVRfQHZhcnt0aGlzbmFtZX19Cm1hY3JvIHRoYXQgaXMgMSB3aGVuIHRoZSBvcHRpb24gaXMgYWN0aXZlIGFuZCAwIG90aGVyd2lzZS4KCkBpdGVtIE1hc2tFeGlzdHMKVGhlIG1hc2sgc3BlY2lmaWVkIGJ5IHRoZSBAY29kZXtNYXNrfSBwcm9wZXJ0eSBhbHJlYWR5IGV4aXN0cy4KTm8gQGNvZGV7TUFTS30gb3IgQGNvZGV7VEFSR0VUfSBkZWZpbml0aW9ucyBzaG91bGQgYmUgYWRkZWQgdG8KQGZpbGV7b3B0aW9ucy5ofSBpbiByZXNwb25zZSB0byB0aGlzIG9wdGlvbiByZWNvcmQuCgpUaGUgbWFpbiBwdXJwb3NlIG9mIHRoaXMgcHJvcGVydHkgaXMgdG8gc3VwcG9ydCBzeW5vbnltb3VzIG9wdGlvbnMuClRoZSBmaXJzdCBvcHRpb24gc2hvdWxkIHVzZSBAc2FtcHtNYXNrKEB2YXJ7bmFtZX0pfSBhbmQgdGhlIG90aGVycwpzaG91bGQgdXNlIEBzYW1we01hc2soQHZhcntuYW1lfSkgTWFza0V4aXN0c30uCgpAaXRlbSBSZXBvcnQKVGhlIHN0YXRlIG9mIHRoZSBvcHRpb24gc2hvdWxkIGJlIHByaW50ZWQgYnkgQG9wdGlvbnstZnZlcmJvc2UtYXNtfS4KCkBpdGVtIFVuZG9jdW1lbnRlZApUaGUgb3B0aW9uIGlzIGRlbGliZXJhdGVseSBtaXNzaW5nIGRvY3VtZW50YXRpb24gYW5kIHNob3VsZCBub3QKYmUgaW5jbHVkZWQgaW4gdGhlIEBvcHRpb257LS1oZWxwfSBvdXRwdXQuCgpAaXRlbSBDb25kaXRpb24oQHZhcntjb25kfSkKVGhlIG9wdGlvbiBzaG91bGQgb25seSBiZSBhY2NlcHRlZCBpZiBwcmVwcm9jZXNzb3IgY29uZGl0aW9uCkB2YXJ7Y29uZH0gaXMgdHJ1ZS4gIE5vdGUgdGhhdCBhbnkgQyBkZWNsYXJhdGlvbnMgYXNzb2NpYXRlZCB3aXRoIHRoZQpvcHRpb24gd2lsbCBiZSBwcmVzZW50IGV2ZW4gaWYgQHZhcntjb25kfSBpcyBmYWxzZTsgQHZhcntjb25kfSBzaW1wbHkKY29udHJvbHMgd2hldGhlciB0aGUgb3B0aW9uIGlzIGFjY2VwdGVkIGFuZCB3aGV0aGVyIGl0IGlzIHByaW50ZWQgaW4KdGhlIEBvcHRpb257LS1oZWxwfSBvdXRwdXQuCkBlbmQgdGFibGUK