A/MNCmP5IVRjAAAAAAAAAAAFAAAAQAAAAHNNAgAAZAAAWgAAZAEAZAIAbAEAbQIAWgIAAWUCAGQDAGQEAGQFAIMBAQFbAgBkBgBaAwBkBwBaBABkCABaBQBlBABlBQAXWgYAZAkAWgcAZQcAZAoAF2QLABdaCABkDABaCQBkDQBaCgB4JABlCwBkDgCDAQBEXRYAWgwAZQoAZQ0AZQwAgwEAF1oKAHFyAFdbDABlDgBaDwBlDgBaEABlDgBaEQBlDgBaEgBkDwCEAABaEwBkEACEAABaFABkEQCEAABaFQBkEgCEAABaFgBkEwCEAABaFwBkFACEAABaGABkLgBkFQBkFgCEAgBaGgBlGgBaGwBkFwBkGACEAQBaHABlHABaHQBlHgBaHwBkGQCEAABaIABkGgCEAABaIQBkGwCEAABaIgBkHACEAABaIwBkHQCEAABaJABlJQBaJgBlJwBaKABlKQBaKgBlKwBkDQCDAQBaLABkHgCEAABaLQBkHwCEAABaLgBkIACEAABaLwBkIQCEAABaMABkIgCEAABaMQBkIwCEAABaMgBkJACEAABaMwBkJQBkJgCEAQBaNABkDQBkJwCEAQBaNQBkKACEAABaNgBkLgBkKQCEAQBaNwBkLgBhOABkKgCEAABaOQBkFQBkKwCEAQBaOgB5CwBkDQBqFAABV24bAARlOwBrCgByBAIBAQFkAQBkLABsPABUbgEAWHkwAGQBAGQtAGw9AG05AFo5AG0EAFoEAG0FAFoFAG0DAFoDAAFlBABlBQAXWgYAV24RAARlPgBrCgBySAIBAQFuAQBYZC4AUygvAAAAczgCAABDb21tb24gc3RyaW5nIG1hbmlwdWxhdGlvbnMuCgpQdWJsaWMgbW9kdWxlIHZhcmlhYmxlczoKCndoaXRlc3BhY2UgLS0gYSBzdHJpbmcgY29udGFpbmluZyBhbGwgY2hhcmFjdGVycyBjb25zaWRlcmVkIHdoaXRlc3BhY2UKbG93ZXJjYXNlIC0tIGEgc3RyaW5nIGNvbnRhaW5pbmcgYWxsIGNoYXJhY3RlcnMgY29uc2lkZXJlZCBsb3dlcmNhc2UgbGV0dGVycwp1cHBlcmNhc2UgLS0gYSBzdHJpbmcgY29udGFpbmluZyBhbGwgY2hhcmFjdGVycyBjb25zaWRlcmVkIHVwcGVyY2FzZSBsZXR0ZXJzCmxldHRlcnMgLS0gYSBzdHJpbmcgY29udGFpbmluZyBhbGwgY2hhcmFjdGVycyBjb25zaWRlcmVkIGxldHRlcnMKZGlnaXRzIC0tIGEgc3RyaW5nIGNvbnRhaW5pbmcgYWxsIGNoYXJhY3RlcnMgY29uc2lkZXJlZCBkZWNpbWFsIGRpZ2l0cwpoZXhkaWdpdHMgLS0gYSBzdHJpbmcgY29udGFpbmluZyBhbGwgY2hhcmFjdGVycyBjb25zaWRlcmVkIGhleGFkZWNpbWFsIGRpZ2l0cwpvY3RkaWdpdHMgLS0gYSBzdHJpbmcgY29udGFpbmluZyBhbGwgY2hhcmFjdGVycyBjb25zaWRlcmVkIG9jdGFsIGRpZ2l0cwoKaf////8oAQAAAHQIAAAAd2FybnB5M2tzMwAAAHRoZSBzdHJpbmdvbGQgbW9kdWxlIGhhcyBiZWVuIHJlbW92ZWQgaW4gUHl0aG9uIDMuMHQKAAAAc3RhY2tsZXZlbGkCAAAAcwYAAAAgCQoNCwx0GgAAAGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6dBoAAABBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWnQKAAAAMDEyMzQ1Njc4OXQGAAAAYWJjZGVmdAYAAABBQkNERUZ0CAAAADAxMjM0NTY3dAAAAABpAAEAAGMBAAAAAQAAAAEAAABDAAAAcwoAAAB8AABqAACDAABTKAEAAABzUwAAAGxvd2VyKHMpIC0+IHN0cmluZwoKICAgIFJldHVybiBhIGNvcHkgb2YgdGhlIHN0cmluZyBzIGNvbnZlcnRlZCB0byBsb3dlcmNhc2UuCgogICAgKAEAAAB0BQAAAGxvd2VyKAEAAAB0AQAAAHMoAAAAACgAAAAAc3QAAAAvaG9tZS92YWdyYW50L3JwbWJ1aWxkL0JVSUxEL2J1aWxkLXRvb2xjaGFpbi9vcHQvdG9vbGNoYWlucy9zdGJnY2MtNC44LTEuMC9weXRob24tcnVudGltZS9saWIvcHl0aG9uMi43L3N0cmluZ29sZC5weVIJAAAALgAAAHMCAAAAAAZjAQAAAAEAAAABAAAAQwAAAHMKAAAAfAAAagAAgwAAUygBAAAAc1MAAAB1cHBlcihzKSAtPiBzdHJpbmcKCiAgICBSZXR1cm4gYSBjb3B5IG9mIHRoZSBzdHJpbmcgcyBjb252ZXJ0ZWQgdG8gdXBwZXJjYXNlLgoKICAgICgBAAAAdAUAAAB1cHBlcigBAAAAUgoAAAAoAAAAACgAAAAAc3QAAAAvaG9tZS92YWdyYW50L3JwbWJ1aWxkL0JVSUxEL2J1aWxkLXRvb2xjaGFpbi9vcHQvdG9vbGNoYWlucy9zdGJnY2MtNC44LTEuMC9weXRob24tcnVudGltZS9saWIvcHl0aG9uMi43L3N0cmluZ29sZC5weVILAAAANwAAAHMCAAAAAAZjAQAAAAEAAAABAAAAQwAAAHMKAAAAfAAAagAAgwAAUygBAAAAc4QAAABzd2FwY2FzZShzKSAtPiBzdHJpbmcKCiAgICBSZXR1cm4gYSBjb3B5IG9mIHRoZSBzdHJpbmcgcyB3aXRoIHVwcGVyIGNhc2UgY2hhcmFjdGVycwogICAgY29udmVydGVkIHRvIGxvd2VyY2FzZSBhbmQgdmljZSB2ZXJzYS4KCiAgICAoAQAAAHQIAAAAc3dhcGNhc2UoAQAAAFIKAAAAKAAAAAAoAAAAAHN0AAAAL2hvbWUvdmFncmFudC9ycG1idWlsZC9CVUlMRC9idWlsZC10b29sY2hhaW4vb3B0L3Rvb2xjaGFpbnMvc3RiZ2NjLTQuOC0xLjAvcHl0aG9uLXJ1bnRpbWUvbGliL3B5dGhvbjIuNy9zdHJpbmdvbGQucHlSDAAAAEAAAABzAgAAAAAHYwEAAAABAAAAAQAAAEMAAABzCgAAAHwAAGoAAIMAAFMoAQAAAHNtAAAAc3RyaXAocykgLT4gc3RyaW5nCgogICAgUmV0dXJuIGEgY29weSBvZiB0aGUgc3RyaW5nIHMgd2l0aCBsZWFkaW5nIGFuZCB0cmFpbGluZwogICAgd2hpdGVzcGFjZSByZW1vdmVkLgoKICAgICgBAAAAdAUAAABzdHJpcCgBAAAAUgoAAAAoAAAAACgAAAAAc3QAAAAvaG9tZS92YWdyYW50L3JwbWJ1aWxkL0JVSUxEL2J1aWxkLXRvb2xjaGFpbi9vcHQvdG9vbGNoYWlucy9zdGJnY2MtNC44LTEuMC9weXRob24tcnVudGltZS9saWIvcHl0aG9uMi43L3N0cmluZ29sZC5weVINAAAASgAAAHMCAAAAAAdjAQAAAAEAAAABAAAAQwAAAHMKAAAAfAAAagAAgwAAUygBAAAAc10AAABsc3RyaXAocykgLT4gc3RyaW5nCgogICAgUmV0dXJuIGEgY29weSBvZiB0aGUgc3RyaW5nIHMgd2l0aCBsZWFkaW5nIHdoaXRlc3BhY2UgcmVtb3ZlZC4KCiAgICAoAQAAAHQGAAAAbHN0cmlwKAEAAABSCgAAACgAAAAAKAAAAABzdAAAAC9ob21lL3ZhZ3JhbnQvcnBtYnVpbGQvQlVJTEQvYnVpbGQtdG9vbGNoYWluL29wdC90b29sY2hhaW5zL3N0YmdjYy00LjgtMS4wL3B5dGhvbi1ydW50aW1lL2xpYi9weXRob24yLjcvc3RyaW5nb2xkLnB5Ug4AAABUAAAAcwIAAAAABmMBAAAAAQAAAAEAAABDAAAAcwoAAAB8AABqAACDAABTKAEAAABzYgAAAHJzdHJpcChzKSAtPiBzdHJpbmcKCiAgICBSZXR1cm4gYSBjb3B5IG9mIHRoZSBzdHJpbmcgcyB3aXRoIHRyYWlsaW5nIHdoaXRlc3BhY2UKICAgIHJlbW92ZWQuCgogICAgKAEAAAB0BgAAAHJzdHJpcCgBAAAAUgoAAAAoAAAAACgAAAAAc3QAAAAvaG9tZS92YWdyYW50L3JwbWJ1aWxkL0JVSUxEL2J1aWxkLXRvb2xjaGFpbi9vcHQvdG9vbGNoYWlucy9zdGJnY2MtNC44LTEuMC9weXRob24tcnVudGltZS9saWIvcHl0aG9uMi43L3N0cmluZ29sZC5weVIPAAAAXQAAAHMCAAAAAAdpAAAAAGMDAAAAAwAAAAMAAABDAAAAcxAAAAB8AABqAAB8AQB8AgCDAgBTKAEAAABzVgEAAHNwbGl0KHN0ciBbLHNlcCBbLG1heHNwbGl0XV0pIC0+IGxpc3Qgb2Ygc3RyaW5ncwoKICAgIFJldHVybiBhIGxpc3Qgb2YgdGhlIHdvcmRzIGluIHRoZSBzdHJpbmcgcywgdXNpbmcgc2VwIGFzIHRoZQogICAgZGVsaW1pdGVyIHN0cmluZy4gIElmIG1heHNwbGl0IGlzIG5vbnplcm8sIHNwbGl0cyBpbnRvIGF0IG1vc3QKICAgIG1heHNwbGl0IHdvcmRzIElmIHNlcCBpcyBub3Qgc3BlY2lmaWVkLCBhbnkgd2hpdGVzcGFjZSBzdHJpbmcKICAgIGlzIGEgc2VwYXJhdG9yLiAgTWF4c3BsaXQgZGVmYXVsdHMgdG8gMC4KCiAgICAoc3BsaXQgYW5kIHNwbGl0ZmllbGRzIGFyZSBzeW5vbnltb3VzKQoKICAgICgBAAAAdAUAAABzcGxpdCgDAAAAUgoAAAB0AwAAAHNlcHQIAAAAbWF4c3BsaXQoAAAAACgAAAAAc3QAAAAvaG9tZS92YWdyYW50L3JwbWJ1aWxkL0JVSUxEL2J1aWxkLXRvb2xjaGFpbi9vcHQvdG9vbGNoYWlucy9zdGJnY2MtNC44LTEuMC9weXRob24tcnVudGltZS9saWIvcHl0aG9uMi43L3N0cmluZ29sZC5weVIQAAAAaAAAAHMCAAAAAAt0AQAAACBjAgAAAAIAAAACAAAAQwAAAHMNAAAAfAEAagAAfAAAgwEAUygBAAAAc9YAAABqb2luKGxpc3QgWyxzZXBdKSAtPiBzdHJpbmcKCiAgICBSZXR1cm4gYSBzdHJpbmcgY29tcG9zZWQgb2YgdGhlIHdvcmRzIGluIGxpc3QsIHdpdGgKICAgIGludGVydmVuaW5nIG9jY3VycmVuY2VzIG9mIHNlcC4gIFRoZSBkZWZhdWx0IHNlcGFyYXRvciBpcyBhCiAgICBzaW5nbGUgc3BhY2UuCgogICAgKGpvaW5maWVsZHMgYW5kIGpvaW4gYXJlIHN5bm9ueW1vdXMpCgogICAgKAEAAAB0BAAAAGpvaW4oAgAAAHQFAAAAd29yZHNSEQAAACgAAAAAKAAAAABzdAAAAC9ob21lL3ZhZ3JhbnQvcnBtYnVpbGQvQlVJTEQvYnVpbGQtdG9vbGNoYWluL29wdC90b29sY2hhaW5zL3N0YmdjYy00LjgtMS4wL3B5dGhvbi1ydW50aW1lL2xpYi9weXRob24yLjcvc3RyaW5nb2xkLnB5UhQAAAB3AAAAcwIAAAAACmMBAAAAAgAAAAMAAABHAAAAcxAAAAB0AAB8AABqAQB8AQCDAgBTKAEAAABzcAAAAGluZGV4KHMsIHN1YiBbLHN0YXJ0IFssZW5kXV0pIC0+IGludAoKICAgIExpa2UgZmluZCBidXQgcmFpc2VzIFZhbHVlRXJyb3Igd2hlbiB0aGUgc3Vic3RyaW5nIGlzIG5vdCBmb3VuZC4KCiAgICAoAgAAAHQGAAAAX2FwcGx5dAUAAABpbmRleCgCAAAAUgoAAAB0BAAAAGFyZ3MoAAAAACgAAAAAc3QAAAAvaG9tZS92YWdyYW50L3JwbWJ1aWxkL0JVSUxEL2J1aWxkLXRvb2xjaGFpbi9vcHQvdG9vbGNoYWlucy9zdGJnY2MtNC44LTEuMC9weXRob24tcnVudGltZS9saWIvcHl0aG9uMi43L3N0cmluZ29sZC5weVIXAAAAiAAAAHMCAAAAAAZjAQAAAAIAAAADAAAARwAAAHMQAAAAdAAAfAAAagEAfAEAgwIAUygBAAAAc3IAAAByaW5kZXgocywgc3ViIFssc3RhcnQgWyxlbmRdXSkgLT4gaW50CgogICAgTGlrZSByZmluZCBidXQgcmFpc2VzIFZhbHVlRXJyb3Igd2hlbiB0aGUgc3Vic3RyaW5nIGlzIG5vdCBmb3VuZC4KCiAgICAoAgAAAFIWAAAAdAYAAAByaW5kZXgoAgAAAFIKAAAAUhgAAAAoAAAAACgAAAAAc3QAAAAvaG9tZS92YWdyYW50L3JwbWJ1aWxkL0JVSUxEL2J1aWxkLXRvb2xjaGFpbi9vcHQvdG9vbGNoYWlucy9zdGJnY2MtNC44LTEuMC9weXRob24tcnVudGltZS9saWIvcHl0aG9uMi43L3N0cmluZ29sZC5weVIZAAAAkQAAAHMCAAAAAAZjAQAAAAIAAAADAAAARwAAAHMQAAAAdAAAfAAAagEAfAEAgwIAUygBAAAAc8gAAABjb3VudChzLCBzdWJbLCBzdGFydFssZW5kXV0pIC0+IGludAoKICAgIFJldHVybiB0aGUgbnVtYmVyIG9mIG9jY3VycmVuY2VzIG9mIHN1YnN0cmluZyBzdWIgaW4gc3RyaW5nCiAgICBzW3N0YXJ0OmVuZF0uICBPcHRpb25hbCBhcmd1bWVudHMgc3RhcnQgYW5kIGVuZCBhcmUKICAgIGludGVycHJldGVkIGFzIGluIHNsaWNlIG5vdGF0aW9uLgoKICAgICgCAAAAUhYAAAB0BQAAAGNvdW50KAIAAABSCgAAAFIYAAAAKAAAAAAoAAAAAHN0AAAAL2hvbWUvdmFncmFudC9ycG1idWlsZC9CVUlMRC9idWlsZC10b29sY2hhaW4vb3B0L3Rvb2xjaGFpbnMvc3RiZ2NjLTQuOC0xLjAvcHl0aG9uLXJ1bnRpbWUvbGliL3B5dGhvbjIuNy9zdHJpbmdvbGQucHlSGgAAAJoAAABzAgAAAAAIYwEAAAACAAAAAwAAAEcAAABzEAAAAHQAAHwAAGoBAHwBAIMCAFMoAQAAAHMDAQAAZmluZChzLCBzdWIgWyxzdGFydCBbLGVuZF1dKSAtPiBpbgoKICAgIFJldHVybiB0aGUgbG93ZXN0IGluZGV4IGluIHMgd2hlcmUgc3Vic3RyaW5nIHN1YiBpcyBmb3VuZCwKICAgIHN1Y2ggdGhhdCBzdWIgaXMgY29udGFpbmVkIHdpdGhpbiBzW3N0YXJ0LGVuZF0uICBPcHRpb25hbAogICAgYXJndW1lbnRzIHN0YXJ0IGFuZCBlbmQgYXJlIGludGVycHJldGVkIGFzIGluIHNsaWNlIG5vdGF0aW9uLgoKICAgIFJldHVybiAtMSBvbiBmYWlsdXJlLgoKICAgICgCAAAAUhYAAAB0BAAAAGZpbmQoAgAAAFIKAAAAUhgAAAAoAAAAACgAAAAAc3QAAAAvaG9tZS92YWdyYW50L3JwbWJ1aWxkL0JVSUxEL2J1aWxkLXRvb2xjaGFpbi9vcHQvdG9vbGNoYWlucy9zdGJnY2MtNC44LTEuMC9weXRob24tcnVudGltZS9saWIvcHl0aG9uMi43L3N0cmluZ29sZC5weVIbAAAApQAAAHMCAAAAAApjAQAAAAIAAAADAAAARwAAAHMQAAAAdAAAfAAAagEAfAEAgwIAUygBAAAAcwYBAAByZmluZChzLCBzdWIgWyxzdGFydCBbLGVuZF1dKSAtPiBpbnQKCiAgICBSZXR1cm4gdGhlIGhpZ2hlc3QgaW5kZXggaW4gcyB3aGVyZSBzdWJzdHJpbmcgc3ViIGlzIGZvdW5kLAogICAgc3VjaCB0aGF0IHN1YiBpcyBjb250YWluZWQgd2l0aGluIHNbc3RhcnQsZW5kXS4gIE9wdGlvbmFsCiAgICBhcmd1bWVudHMgc3RhcnQgYW5kIGVuZCBhcmUgaW50ZXJwcmV0ZWQgYXMgaW4gc2xpY2Ugbm90YXRpb24uCgogICAgUmV0dXJuIC0xIG9uIGZhaWx1cmUuCgogICAgKAIAAABSFgAAAHQFAAAAcmZpbmQoAgAA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cj4AZAMAfAEAdAAAfAMAgwEAfAEAFhgUfQQAbgAAfAMAfAQAF30DAHwEAGQEAGsCAHIRAHwCAHwDABd9AgBkAQB9AwBxEQBxEQBXfAIAfAMAF1MoBQAAAHPXAAAAZXhwYW5kdGFicyhzIFssdGFic2l6ZV0pIC0+IHN0cmluZwoKICAgIFJldHVybiBhIGNvcHkgb2YgdGhlIHN0cmluZyBzIHdpdGggYWxsIHRhYiBjaGFyYWN0ZXJzIHJlcGxhY2VkCiAgICBieSB0aGUgYXBwcm9wcmlhdGUgbnVtYmVyIG9mIHNwYWNlcywgZGVwZW5kaW5nIG9uIHRoZSBjdXJyZW50CiAgICBjb2x1bW4sIGFuZCB0aGUgdGFic2l6ZSAoZGVmYXVsdCA4KS4KCiAgICBSCAAAAHMBAAAACVITAAAAcwEAAAAKKAEAAABSJAAAACgFAAAAUgoAAAB0BwAAAHRhYnNpemV0AwAAAHJlc3QEAAAAbGluZXQBAAAAYygAAAAAKAAAAABzdAAAAC9ob21lL3ZhZ3JhbnQvcnBtYnVpbGQvQlVJTEQvYnVpbGQtdG9vbGNoYWluL29wdC90b29sY2hhaW5zL3N0YmdjYy00LjgtMS4wL3B5dGhvbi1ydW50aW1lL2xpYi9weXRob24yLjcvc3RyaW5nb2xkLnB5dAoAAABleHBhbmR0YWJzSAEAAHMSAAAAAAgKAQ0BDAEbAQoBDAEKAQ0BYwMAAAADAAAAAwAAAEMAAABzEAAAAHwAAGoAAHwBAHwCAIMCAFMoAQAAAHMrAQAAdHJhbnNsYXRlKHMsdGFibGUgWyxkZWxldGVjaGFyc10pIC0+IHN0cmluZwoKICAgIFJldHVybiBhIGNvcHkgb2YgdGhlIHN0cmluZyBzLCB3aGVyZSBhbGwgY2hhcmFjdGVycyBvY2N1cnJpbmcKICAgIGluIHRoZSBvcHRpb25hbCBhcmd1bWVudCBkZWxldGVjaGFycyBhcmUgcmVtb3ZlZCwgYW5kIHRoZQogICAgcmVtYWluaW5nIGNoYXJhY3RlcnMgaGF2ZSBiZWVuIG1hcHBlZCB0aHJvdWdoIHRoZSBnaXZlbgogICAgdHJhbnNsYXRpb24gdGFibGUsIHdoaWNoIG11c3QgYmUgYSBzdHJpbmcgb2YgbGVuZ3RoIDI1Ni4KCiAgICAoAQAAAHQJAAAAdHJhbnNsYXRlKAMAAABSCgAAAHQFAAAAdGFibGV0CQAAAGRlbGV0aW9ucygAAAAAKAAAAABzdAAAAC9ob21lL3ZhZ3JhbnQvcnBtYnVpbGQvQlVJTEQvYnVpbGQtdG9vbGNoYWluL29wdC90b29sY2hhaW5zL3N0YmdjYy00LjgtMS4wL3B5dGhvbi1ydW50aW1lL2xpYi9weXRob24yLjcvc3RyaW5nb2xkLnB5UjsAAABbAQAAcwIAAAAACWMBAAAAAQAAAAEAAABDAAAAcwoAAAB8AABqAACDAABTKAEAAABzbwAAAGNhcGl0YWxpemUocykgLT4gc3RyaW5nCgogICAgUmV0dXJuIGEgY29weSBvZiB0aGUgc3RyaW5nIHMgd2l0aCBvbmx5IGl0cyBmaXJzdCBjaGFyYWN0ZXIKICAgIGNhcGl0YWxpemVkLgoKICAgICgBAAAAdAoAAABjYXBpdGFsaXplKAEAAABSCgAAACgAAAAAKAAAAABzdAAAAC9ob21lL3ZhZ3JhbnQvcnBtYnVpbGQvQlVJTEQvYnVpbGQtdG9vbGNoYWluL29wdC90b29sY2hhaW5zL3N0YmdjYy00LjgtMS4wL3B5dGhvbi1ydW50aW1lL2xpYi9weXRob24yLjcvc3RyaW5nb2xkLnB5Uj4AAABnAQAAcwIAAAAAB2MCAAAAAgAAAAUAAABDAAAAcyUAAAB0AAB0AQB0AgB8AABqAwB8AQCDAQCDAgB8AQBwIQBkAQCDAgBTKAIAAABz+QAAAGNhcHdvcmRzKHMsIFtzZXBdKSAtPiBzdHJpbmcKCiAgICBTcGxpdCB0aGUgYXJndW1lbnQgaW50byB3b3JkcyB1c2luZyBzcGxpdCwgY2FwaXRhbGl6ZSBlYWNoCiAgICB3b3JkIHVzaW5nIGNhcGl0YWxpemUsIGFuZCBqb2luIHRoZSBjYXBpdGFsaXplZCB3b3JkcyB1c2luZwogICAgam9pbi4gTm90ZSB0aGF0IHRoaXMgcmVwbGFjZXMgcnVucyBvZiB3aGl0ZXNwYWNlIGNoYXJhY3RlcnMgYnkKICAgIGEgc2luZ2xlIHNwYWNlLgoKICAgIFITAAAAKAQAAABSFAAAAHQDAAAAbWFwUj4AAABSEAAAACgCAAAAUgoAAABSEQAAACgAAAAAKAAAAABzdAAAAC9ob21lL3ZhZ3JhbnQvcnBtYnVpbGQvQlVJTEQvYnVpbGQtdG9vbGNoYWluL29wdC90b29sY2hhaW5zL3N0YmdjYy00LjgtMS4wL3B5dGhvbi1ydW50aW1lL2xpYi9weXRob24yLjcvc3RyaW5nb2xkLnB5dAgAAABjYXB3b3Jkc3EBAABzAgAAAAAJYwIAAAAEAAAABQAAAEMAAABziwAAAHQAAHwAAIMBAHQAAHwBAIMBAGsDAHIkAHQBAGQBAIICAG4AAHQCAHM5AHQDAHQEAIMBAGECAG4AAHQCAB59AgB0BQB0BgB8AACDAgB9AAB4LAB0BwB0AAB8AACDAQCDAQBEXRgAfQMAfAEAfAMAGXwCAHwAAHwDABk8cWIAV3QIAHwCAGQCAIMCAFMoAwAAAHPBAAAAbWFrZXRyYW5zKGZybSwgdG8pIC0+IHN0cmluZwoKICAgIFJldHVybiBhIHRyYW5zbGF0aW9uIHRhYmxlIChhIHN0cmluZyBvZiAyNTYgYnl0ZXMgbG9uZykKICAgIHN1aXRhYmxlIGZvciB1c2UgaW4gc3RyaW5nLnRyYW5zbGF0ZS4gIFRoZSBzdHJpbmdzIGZybSBhbmQgdG8KICAgIG11c3QgYmUgb2YgdGhlIHNhbWUgbGVuZ3RoLgoKICAgIHMpAAAAbWFrZXRyYW5zIGFyZ3VtZW50cyBtdXN0IGhhdmUgc2FtZSBsZW5ndGhSCAAAACgJAAAAUiQAAAB0CgAAAFZhbHVlRXJyb3J0BwAAAF9pZG1hcEx0BAAAAGxpc3R0BgAAAF9pZG1hcFI/AAAAdAMAAABvcmR0BQAAAHJhbmdlUhQAAAAoBAAAAHQHAAAAZnJvbXN0cnQFAAAAdG9zdHJ0AQAAAEx0AQAAAGkoAAAAACgAAAAAc3QAAAAvaG9tZS92YWdyYW50L3JwbWJ1aWxkL0JVSUxEL2J1aWxkLXRvb2xjaGFpbi9vcHQvdG9vbGNoYWlucy9zdGJnY2MtNC44LTEuMC9weXRob24tcnVudGltZS9saWIvcHl0aG9uMi43L3N0cmluZ29sZC5weXQJAAAAbWFrZXRyYW5zfgEAAHMSAAAAAAgYAQwCBgEPAQcBDwEZARYBYwQAAAAEAAAABAAAAEMAAABzEwAAAHwAAGoAAHwBAHwCAHwDAIMDAFMoAQAAAHPxAAAAcmVwbGFjZSAoc3RyLCBvbGQsIG5ld1ssIG1heHNwbGl0XSkgLT4gc3RyaW5nCgogICAgUmV0dXJuIGEgY29weSBvZiBzdHJpbmcgc3RyIHdpdGggYWxsIG9jY3VycmVuY2VzIG9mIHN1YnN0cmluZwogICAgb2xkIHJlcGxhY2VkIGJ5IG5ldy4gSWYgdGhlIG9wdGlvbmFsIGFyZ3VtZW50IG1heHNwbGl0IGlzCiAgICBnaXZlbiwgb25seSB0aGUgZmlyc3QgbWF4c3BsaXQgb2NjdXJyZW5jZXMgYXJlIHJlcGxhY2VkLgoKICAgICgBAAAAdAcAAAByZXBsYWNlKAQAAABSCgAAAHQDAAAAb2xkdAMAAABuZXdSEgAAACgAAAAAKAAAAABzdAAAAC9ob21lL3ZhZ3JhbnQvcnBtYnVpbGQvQlVJTEQvYnVpbGQtdG9vbGNoYWluL29wdC90b29sY2hhaW5zL3N0YmdjYy00LjgtMS4wL3B5dGhvbi1ydW50aW1lL2xpYi9weXRob24yLjcvc3RyaW5nb2xkLnB5UkwAAACSAQAAcwIAAAAACCgBAAAAdAEAAAAqKAQAAABSSwAAAHQJAAAAbG93ZXJjYXNldAkAAAB1cHBlcmNhc2V0CgAAAHdoaXRlc3BhY2VOKD8AAAB0BwAAAF9fZG9jX190CAAAAHdhcm5pbmdzUgAAAABSUgAAAFJQAAAAUlEAAAB0BwAAAGxldHRlcnN0BgAAAGRpZ2l0c3QJAAAAaGV4ZGlnaXRzdAkAAABvY3RkaWdpdHNSRAAAAFJGAAAAUkoAAAB0AwAAAGNoclJBAAAAdAsAAABpbmRleF9lcnJvcnQKAAAAYXRvaV9lcnJvcnQKAAAAYXRvZl9lcnJvcnQKAAAAYXRvbF9lcnJvclIJAAAAUgsAAABSDAAAAFINAAAAUg4AAABSDwAAAHQEAAAATm9uZVIQAAAAdAsAAABzcGxpdGZpZWxkc1IUAAAAdAoAAABqb2luZmllbGRzdAUAAABhcHBseVIWAAAAUhcAAABSGQAAAFIaAAAAUhsAAABSHAAAAHQFAAAAZmxvYXRSHwAAAHQDAAAAaW50UiUAAAB0BAAAAGxvbmdSJwAAAFIdAAAAUh4AAABSIgAAAFImAAAAUigAAABSKwAAAFIsAAAAUi4AAABSNQAAAFI6AAAAUjsAAABSPgAAAFJAAAAAUkIAAABSSwAAAFJMAAAAdA4AAABBdHRyaWJ1dGVFcnJvcnQJAAAAc3RyaW5nb2xkdAUAAABzdHJvcHQLAAAASW1wb3J0RXJyb3IoAAAAACgAAAAAKAAAAABzdAAAAC9ob21lL3ZhZ3JhbnQvcnBtYnVpbGQvQlVJTEQvYnVpbGQtdG9vbGNoYWluL29wdC90b29sY2hhaW5zL3N0YmdjYy00LjgtMS4wL3B5dGhvbi1ydW50aW1lL2xpYi9weXRob24yLjcvc3RyaW5nb2xkLnB5dAgAAAA8bW9kdWxlPhQAAABzegAAAAYBEAEQAQMDBgEGAQYBCgEGAQ4BBgMGARMAFAEDAwYBBgEGAQYDCQkJCQkKCQoJCQkLDwwGAwwLBgMGAwkJCQkJCwkNCQ0GAQYBBgEMAwkNCRsJHAkNCQ0JEwkSDBMMDAkKDAwGAQkUDBADAQsBDQEOBwMBIgEOAQ0B