From 4aafaee5ab0081259c956bd5c9b982f0d2a3009d Mon Sep 17 00:00:00 2001 From: mid-kid Date: Thu, 13 Dec 2018 20:38:27 +0100 Subject: [PATCH] day5p1 --- day5p1/Makefile | 8 +++++ day5p1/input | 1 + day5p1/main | Bin 0 -> 17400 bytes day5p1/main.c | 91 ++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 100 insertions(+) create mode 100644 day5p1/Makefile create mode 100644 day5p1/input create mode 100755 day5p1/main create mode 100644 day5p1/main.c diff --git a/day5p1/Makefile b/day5p1/Makefile new file mode 100644 index 0000000..042aa30 --- /dev/null +++ b/day5p1/Makefile @@ -0,0 +1,8 @@ +CFLAGS := -Wall -Wextra -std=c17 -D_GNU_SOURCE + +.PHONY: all +all: main + +.PHONY: clean +clean: + rm -f main diff --git a/day5p1/input b/day5p1/input new file mode 100644 index 0000000..0cfeeb7 --- /dev/null +++ b/day5p1/input @@ -0,0 +1 @@ +UfHhDmlLMhHdzZFzZuUuUuwWFnjJHhNTtaAfNeEMmOoAanavVsTtUuSnNyYAulLGggGTDXxdtzIoOjJiZJOoYlLnNlLyIijuRrrRrRUgGmXxOHhoTtMHYyhZztTgGQqTtfaMmAFqQrbBxXlFfkoOKYyIiHhYyLeJvxXVWwjJsWwSMmHhgSQvVaAiIqsgqQVvGGYbsSByQqdDjELlQrRaAnJcCjNeETtOcCoZzWwEepxSWwsXPDPpHhQqmMdqQqQXPpxqnQqNygJjGYEesIiSqUuZaAzIifFXxQkKFwWfJQqjoOotTWwGPpUuzZlLYygzZOzZeERTtpPrMmVvawWIiKkAsSguGgUGgGoOhCJjMmcFHRnvVtTtxHhXTOZzoNQBbqIiTtZzCcoOUeEucAaCorRSkKsOAaPUZzuZzhHRrpLoOVvFfqcCQllSsZzLwWXHsSaAqDdQhgGxXRCckIiKuUrVvvVxwXxLlsmMEYiIVGgwWjZzJvqiIQLpZzPDzZqCHhcQdTVlLvUutaAtTfFIiHfXxFOomBbXxMhVUqQQqVvDCcfFlLURruXxJjduvVfWwTnNxqQXtpPgGulLUnNEeUuLlRrCceEOosSSfFsFkCpPcKQqaANnaAVvaAvMmeESsrRAWRrwddDSsmMDqQaolzvVZLOVgGRrGuUyYGXxUuRFfrgZzgHNndeoOETtDhmMoAaSsBbOYrZzRyyYFQqfmMWEJjewlDdsCcSPpVvLRrIyYiMJjKkmlmcdDCXxLKklyYiIcCmMWwbBHHhhsSvUuVLlbBhHeEBbYcBbmMCypPyYYleEIioONnaARmigGsnNSvWnNwVPOoIeEiGgaDdASspILlKkKFfkLlJsSgGjJEejDdfruUuUlLRtTOilLIomMUuHfFGgVNeEiInRrZSsHJjEehzZdDPplLCcGlrcqQeECcCDdRCcIGgPbBpsmtTPpMpPDPpdSKPXxbsKkEZzTteSrRKkbBBpflnyYNDFfdLJjFIilOoLHhsSjcCBnNbxMmDdkKNoDdOnEewWTtBbEDdwiaIZziiINMmnDDddQqAauMmUtTAWCuUcwNCcRrnIAwOoWQqvGgBbVvVwWaoguUjJGJjXxEuUjlLJZMmzeOoOnQqbIiBEeEeCRrQXxqDdcNWOoMeATtUAaAauaEnSsjJNGOobBCcgniIiIiOoILKklIixXhHBbQqByGvIiaxXAVxDjJSRrJjqHhnNlLQNnuUEeogGHhOxpPXRrWenrRNEgGZzgGKAaVRrvLGglkfoOFIitThHSTtssSjfbtIiQqTBsSQqHEMmehQvVqPpbBNnoOFvKkVJpPYyxMmXwmuoOUMrRUuAdmMDbZzBjKkJDdYQIiqbmMBFfieRIigGPpOJjorEbBIyZznNeEmaaAJjMCcYhHyCcgoXxrwqQWsSROGmYynNPpbBhwWHPpAJpPjDdMMmmdDwWtAaBbTXoSsNnOzgQqDdCcGZsdDOmMqQLloVvSGDdrRgxiIlLrzZRbQqGgoOgwWYyGAaWwWbBwwUoOuxXCcsSdDwWrYyFrRfxbeEkKBgeEGdDiaAIXkGgBbKlLlLRdDeGgYyEdAaDPkKgqPWwlpPjnhHZKxhRrHHhLlXkoOznNWwNpDdtTzfFZqtfFXCcxTQqQMmgKkPorRMmOtTpEeQqNnWwGIiozZOlLKkYrRygfFSsGqKkQbBwWPhAaWwHoJjOJFfLoPFfwqQmoDdOMWiIQqpHhtmMRrTkmOGgovVNnlLbBBbUnmMNjdDJjfFJpPNnTtfqrRQuxXUDvVdnNsSsUuSFTZbBEezxVvgGXbBlLQqjJPpnNRiIqQWwrOoiITkKoOqQtTttSQqscCndDMmvVnNNWwnzZbBDdQqaARyYrihHIpPLlwPpWLtTknNKKkbBWwlkKcRrCuUwWJBbZzyeEYMmHQqkKLlOoVvbBiIhvVybBSsYGGggXxjuCihHeEIkHhKMmoOeEcwLaAlXxqQWxcCeENkKnZzXuUnNkKrUYavCcVAUUuDducCEzvVZmcCMeVvyBbpPjJuSsWwsShqQDdnNgIiRrGpPJNBbnmMFfjaGoOhiIHxZzXDOoRrbpPBTtteEZzoOwWzvyOwWrRopiIiIPCNnoOcyVhHvYTtxenNEYOoyfhHFXYZzUxXuBbaAmMdTKktwWrRDzZfZwWIizqJiIoOlKkLRMGgTtmMmztTZrVvzNnOotTZRrGgjDdJjFgDdFfOoKbBwWiIsSkYlwNnDdKkWLCcZzzZynXxNOMlLmXXxhHYyxJmaAbBdDWwMEHhXxeoOEFfmMejFfVvdDpPouUnNaANgGVvMmnGczZsSVvEeCNzrRsSVmnkKNaAqsSMmvVQCcwWMmBLlqQyzJjZfFFGzZgrNnLlsYySKKygGYkxXMmmMkKrRxraAnNRtnNTEeUwbRVvrvVBrRXLlOoxcrRPMmpCvVrRvVvVgGkKiQqBZDdeEzXxbbBgpPGQYyBbTtvVpPcCqAMnNmamLlrRLVvlEeKksMmGzZvOoVxXFoOmMmMfcTtZzCeDYrRHhiVEeWxXwgHhrRWUudDfFnNVvwGdDvUuoahHAAGgaTUqYyuUEeQHhulJjTYytPpUuLuUmMbBpPkRrAaKHLNngtTGhHlcjTtJTtiIkKgxXGCqqTCctQQwyPpYQqWzJtTjZXxPasSyYMmjzZJygGxXYltcCmwcOoCiIQqAahHdtTGgDrDdREyYLleWljpPwWwWYMwWmyaAWwzdLlDhHvVZGgiIpWoOvhHVBbwPCeEyWwQMmqYchHnbGgBNUuWZzcCwdDjJeoOhHEIiWcCwJtTLeEjkKJjHwDdYyVvzSsZYygMmJjXxxXGgIJjiMeCcKkLUulExXQBbYSshlLHSdDggGnmMNxvVfFfFZzZzGVvlFfLdCcDguUnNiIXFTtfnNoOPpRvVIcCiIisSLdFfDZJjzrQqwQqWjJReEBbcJsSjHqQjRrJhUtTrCccSsbBCsSMSoOUtvvVRrVTzTVvtZuHHhAaUUuuqzZATBbYytjUuPpJqQVvGKqpDbEeBdPMmQJjNJjRrDdnkwNnXxRuUjJjBbJhHYypPeJIaAimGSsmXxbBqQrMmREexQCcqXjJMmMvnNhHKkGnLiIlNgcMJjwBbWmiqAWOoerfFkjJKqQgGahHAvtTVdpIiPRrDPPpDoOCcbBdfFgfFLFflBbVjJdDvNVtTVCcWwLhbczZSzZCAamMBqQDNRvVrRrndHJXxlkKLGvVgpPmMxkKXFkKpPEemMNkKnhHwWYSsGgXzGgZrRxxXsSjJRaArUuyXxfWjJaAUuwGgxKknNtTnOZzoRGpPgrRLlurRUPWwpPpWwHhMmSseFPpfHZzhEeaLKklQqAaTtrPWGgwpRKkjdUuyYMmwRrHaZzAOobBImqQMpPauUdDiIyYAiGDjiIJdBJjbjJyYWwWwgGHhxXUubLXfQqlJjhHLgGFHhxYyTtuGgPpjYyJUPpNFfnbbBBOoxNnAasSghHGhgCcGOrRoGVvvNnVpoRrOWwPaKAaxXQqEUueZzkwxXiIWKkEegGUuiEebgUuGCcsqQLlSBbmIiaAYCGggGtTcYynNSsRrvVyNyrRbupPUBYngmMrRGmMQMmKkDdqfFEekRrXsSQqxBbFWwzZWwkKNerQqRQiUuIqtNwWjJRrUutTTvfFVOoiIbtTcWwCqhHYyQBoOtTcPyYWwpKuUkCMIimcjJaAzRrZTOotWuNXxfFXTtAauUxkkKKnuvVUTzZtRrUwirRICvBbXxcCJjYcCyGWwcCrReEVvgyYPpIsSqpERrePHhdmMTtjxbBCcXJgGyYDpIiQqPQFfAaUOorRAgqQgGGlNBlLdDRrsSWwUudXAarQqRszSsaiIALlHhCcXxGMmgYWwybBrwWdDiJjwyYWLtTliuUtBoObCfFcTlgiTgwWGToOtqQeECcgDkKmAaMpiIJQqjfkKcCZzwPpFfXxWwROktTKoZzrhHUuwmMmMqtToOQIiDdFfKkyYhHIiuUOoKksJjzpPPpZbBZzmMHsJjAaDdbqQXxFfgcrylLYdDdamMAgGnNiIAxXxGgAaWpPwZztTuJjeEycCmMRrdzZDYyYKknDdEegHuxXUWwQPpqAmoOMaRraAvVYWwsSuUmMLlPprRRreEOorRtTHtFfTQqQWQqwqsSEpPKxXtTWwkUdwWuUDOoKkMmuhHLlpIkKiYXxXAOFYyfIaAiGgRhDjpPJdkKxIicWwOoCBbDdOBbDdoFfODWwdFKkfouuUUOVvIiBjJvhHVRrbekKpPRrMmBbZcCzbBYyLlbHhBbBpRrIElLmMOoeyrRzZYBeEvEeLlVrRTteErAaqMyYoOQqmQRCcNUunZMmzMtTVsSuEeMBbmoOUxXvOoDdlLGgkrRHhLvNnyYYyGgVlsSwWvlLVKDdZzrrRRlLIibTtyYPpZSsRrVvbBrRTPcdDCpNlxXoOLnLOoNnlOodmAaIijJMrRuwWTtBbUCXxjsSjfimMIFdtEeUDdOoWwrRGguTDzMmZvlLPpiOosSrRIyYoObBOozZeDnNdcGgpZugrRGOLloUVjJvzuQqUwcorQqRxXiJjIjvVxXJYZzHpPqQhaVvAyuUcCOXfFfFYbAaBGgyxoTYyYNnyutoOTTtSsBekKEcCklxXLKNmMnKEedDBbQySshHoEeiijJcCIsSrGgoORfFtTJjTLldDxXXxjJHaqpPQlZzBbLCcAIkKJjkKAMmauYyIiUzZlLWwdkKDOXQjJMmzZlLnNoFfAkKaQqcCRrYyrhHzZnNTtnNvNnNFfAyYaAUuazlLZAGwWgjJQQqjeEzaFfAUuSsBbAaUpWwtQqwWTPuLlnNZNnjJzkKYyZuUFflKkLBbJqabNnSceEMmOjJmMoyfFcCcCYmscCSuUxXaAAtTdDayYMClUuVvTuUtLNzaAZnKkPplLfFfCcFkKOxRLlCcfFiIhHVdDXuMmDdiMmYsSyAaCcIeEMhHmbAaZqQHhzmWwuUjJUCculLDdMbBUuBCciOjoOURruJoDPpwWdvBbCLlRAarEPpqQRgGRrreXmMxcDdHhrRvVkkJPxXpbBpPdDjYwWnNCcswMeXeExnNoOwWPSBbcCmtTMhLOKkoLlPpllLyYUuewMmWAjJakyYgGKCXxYycZUuVvzEPtTrRrDdRpeEpBbvtTSsOoaAVJOkKvVoWwjikIiKnNbBHhJUuMeEfPpFkwWKmiotTOCYkKiIycLyGgeEYltTFfIhAdSscvRrinBVkKvbUOoduUYYyiIkGgKDdyDdYfNnFTXxXxtUuBdDJjbyZzasSgGQYyrRquUAoOnFfNsHhSPpYXxyDlXxnNLlLrRtTxXwWmHnzZNhJoNnOeUuEjRryMSsNnJiKkIjTtQYqFfsRKlLUukVvYytNnTkKDIifFCcYyliILPiQqIkKjjJJSbBoZhHHhzqTtQxfFXRrryWwRrXdhHfFwRrZKfSsXPCcpvVxBbDcCvVdbBJjYRryaPxXpWIkKSZzdpPoZzRrfJgGjwWfFFKTtTuUsWNnLXxWaAVvMmBbWAirRFfxiIyyYCSscVvcCYfFXSqaAQyYVDdvVgGRrvMpPpPdDfFqOoRrEXYrRyPpiBbIxYFfXxirRIiIyWHhSFfAsoOSasVvzZoOwpPbBYynNhTtHeorROnuUKknOoNGgMmNIMmqlLQJbDmMdeESsVvSsTthmaAMHVuGrXxgGYynNFfRHhXpqQPUufrCcRujJUFRrcCUuWwSzlLNnxWYIiyrRwXQvVqIYybBiZbVviITrRsStgGFQqfqmZvNkKBbnAbBaGgsScBAaGgPxXplVvLtMgeqQgjJcCGESshDhhHrsrRpPzZSDdujJUQMmqOonNQqEeRJPpCQqcQqjJjHgGqhzZkBQqbqQTtKEyMmYeklLXxHhKhIisSDdHdkJjFhoOHfFfzEjJeAoOzZafFyYZnNbBkKbLUulTtQqQoOtRXxwWGgrTeEOoQjJqqlsdKkDSLNnxIDditTGjvVKiIcLlGGgZzFfbBgJftTFjCcMliIMmDdBbLsqQSCcmvVnNHhOocFfRrnNCePplGgsPpSOSsSfkJjKSKksSsFxXEOoeBVvbzRrZMdDoVQqvUuHhOmscvVClLQIiqCXxCccHhdDoTQXdDxSsLUPpugjJGlAaWeEyzZqQGgycUTtuCkaAaTteEPpAnNsSnrOoAxwtTWtfFTuEkKPpzZNwbdjJDjQhHxXqOwrRWonSmXxMszeEZzZiTtIaUDdWwzZhpstTSaqQKwWYnNyjihuQqjJfFSsIkKWHhwIVviOjKkjJgGAaJTtYyKGVzZiIvPsvVSpBbgsCcFfoOcKkQqnnNSPpqQCcEBbeFfmQqpsiISSLlsNnSszxlLXkKgGZSpOoPsqvVbMmLlRZzrBrRnukVbvVBvKwgGWjJYyUmlLVvnNlPpfFLMzPpZxXiHbUuBKCcucCmMUmMkjJodDOaAhvSsXxwWQqJMmMmGgjgGOoCmMCcAgGbTtBadDKkcgVvqQJjRtTrTYytTWsBbxJjXSoOmMmoOyYOOaAayLHhlxXWKkwYYoOJMqQmVvhHmMhHGXOoicCUuBVvMeEqQIiUumTtdpPDqQnNpPnNOzYzZyZIgGiojwWxXsSSsuiUXxsNnoOMmGbBKoOkMmZpPPsSFfpzAOoiKtXhHXxbBxXVYaANnlLymKXnNxHzZhHbBHxXhzvitTnXhEekKEiIgPpGeCccvVmMCawWbBARrBbXxiyYoGgIhHyYQzdDZQqYBWFfWJjbXxBSVvQrIVviUuRqHhESswWJjBpPbzaAZrPLlJjOoNHhxXnIiICcijJplTiIhHtwUuWLnNWbhHfFyYTtxXDdBYZzyRrZzCzZrDAvVRrtHhAaAaJcnNCEeEejAakiGgIcCTfBmksSLlKMrMcpoOPOoQqCEeRrXxBbPpmXOwWoXsENnyhMbBmxaAPpXvoOYyVkKRrZzwWsSWjJwulLIvlLViUtTZzlHZiIqiIQlrUbBFgmMGlLWwmMMmgEeiILbPpxcfFsSfFUubYyTtXTKkfFWJjSbBwnNWswrRtxBQquSsUzZmLlGjJpPzZKAapgAmyYoNnoSsOOajJqyYQbBiKijVTgGKktrRrRaAgGMOovVmyYPbjtsSqQTEeEPpaAqIbtTvDKMmkyUOJjouYbsSBeuUBAarRbDkVvxXjswWYyzZOojJsSeiBbYyDdIeDwWdmRgGkKyPyYNnpmQlLlLlGRrEnNelrRLvVoOUudKkDVvTMmMfvVHcChFfWcCFfuHhUwFmPpEeAaOZhHxPiIMwWRrmgGpeEUfFuLlaXJtlLTkLbBVvAaUuOossDdRUTturDzZYRwWxXrFfVswWfSsFiImUOCAauDdUmMDdczZFIIikKgpPGiOofnNmKTtkKkKvVRrxXmMkyYXTNBbLGgWwmMlnqQRtTPYAaypnNGymMYRrOnNvVeGlLrRgfDhHdBUuiIbBnSdNEeiCcpPIEofFdDVvvVclGgNnbBoPHhecnpoOPPptTWwdeRulpgGUgGVNnvYZzdDAaPQqpyMmYjJyuJKkZvXZzHhyYqQqyYMmVvsbBFiIfSYNnyHhBrRwQOoqWuddDJjNncCNntTQUuxXIiqDeoXxacCEetGgTnhIiUxaAXaArZzQCcqsSRufdNnDWwtWwqQBbGgjDdnNyYNnlgGMJjmYyPqUwTtXxRGgrAaogGwJOoYyjqvVrRQuuUVWwUoPKkAaLlgNnHNdCuULnxXxLlXhHYyNldDxXmKkMWeEhHaAkFcCfZzHKkAangGWqsSQqQpKkKoOXrRQiIqgIiGgsSaAdDaAGenNEWwxLlTBbJzZjBbvEBbLlIiGgebGlSrjCcAaAaaARkMmPIitTKkRrHxXiIkNAajJYyjJJHhYOoCJxugGlaqQAjJLGgNVvnGTcxXCtgioOIDbBZuUYyzpcCPtZtTPUEeCcuUbMmKkokKOGxUTPptUHXFfxlLiSBbdeEDrDdZzRakqtTaoCDdcDdOCcScCsWwwNnWwWDdUucuUSsAalLquwWUQCeEbWwCOwjLlYyPpGgRrVvuUPpZuUzhHiIxtMvVVFRrzUusPpbVdDcHhCvjJoOYSsnhHfOomgrRpPxcgGCXEemNcDOJjaAPzZmMYyOoaAsSvVUuRdqQfFwWzfchTQqiIlbBOobEObJjlRrbPpLlvVBLBHbCclMmLlyNnYXrnNRKkYydWKkwBbduUqBVvbVvhZzJjolLOOhHPVvLoOlLlpfkKFTBbQqtxqQjvVHpNnPhvlLVJptFfKlGgHeESuUszZtpPYBDZLtPpxXTQdDqkKRGaAxQqXPpIigbzLJetTfFLlkKRrmQYUueKZNnzcgGYyzZsScCCSIEvVeHNCcnYytTrKkrRREeGbBlLgOoTteEhAaKYyWwkgGtGgNaAKdDgJYyvVCeEVdeEDcgGCvcCmMRsSbBmMeMmEjJLSstvXxVTUutnNnpQqAGgygKTNaAntfLgGluUcvVtTJjJmMjgvVGIiZrRslLSGfLlXxJXxIOoiHhbIiQqrRSJjqWDBbdwRXHRVQsmMtAyYlLaDdwWTUSssMmLYylSaAEeinHhFfaAcgGCcAarRSsHtbdDOxXyYfFRDuUdMmlmbBBbqQMEHSsbBhZIioOosSOyYPKkKDdzZgGOcCAaNnZADdazxXTWwmILnfFNqWwQMlMmdDdDLiImbBSPpDUrRuddtTDkKxOoXoOtBblNnibBBWzvwMmQqsSyIDdiEetTPWJjahvgGDdWmygGYtPyYpnNeETErEwWeRvAaVUCdzWdDwZwWGKJiSRQqfFrsRUqQLluBbbBKrRmuUmMvVMCzVvICcFEeEeVvIijJDddDFffFDddDnzZyYKbBRrkkIipVvhWwGgSsHpPBlnNPpqJjzcrRCdDDskKMmdDepPBblLEYBbJjEesTtSYyBbbBCVvnxXNAQvVlLjJtXxTJjqoOaWwAZzeoOxwLlfAlLMxxqNnQXGgHWYtrRnOoNIitIhAWwaxhHXszZSAKoQmPpMqOHvVhvRrVPdiMTtjxSsNnXxXsSJWwKkAQiIqoizZYyIOQqHhjpPjJJaQaNjJScCOosFnNoOfOoxYQKkqbBryROoMQqbBmNnbBatTZIiYAaTSsXxKkkKnNKOjkKripjFfJPkgGuUxdDYyfmYaAydDzBbbLlBBCMPQdDqKcCRnMOoqBbtTJkKCcHhPpcmDEeiIdGYygnNvVVvFfGQdPpZzDqQmlLMMmKEemkKjFfVFfvrzUuMmarRwWNnGgaVCkKmMcvAAiOdDoEepJjPGDuxUuXJvVOmMeyYPyYxXttThUfFudDMmHEGgFfdDxsSQjpHhPFfKkxdvVKkDOFfoslhJjHcCoOZzyxXJjAeEwWaqQhezZInaANizwnNqrRQWAaSBOoCcsShHGWwgJjAKkXxJjdNKnAaRHEelVvPYyHhpvVTSstBbbBKkPCcpuUdDIiITtiwYygGflIKyusSlLuUydHpXpfFOobBJjNUnwWsemMEVdDyOoJGgjFFfzhDyYdrReEiIXxXxtTeGgHaMfBbFSsEemlLlKuqiIaPpbluwiZIiyYwzjBbrCUlLucRtIiTbBZzHrkKRUuhbfFzZHJjZzCcQFfWwruPpOoCcxXnNyhHENWwcAaCnepAaPsSjJBbAuUaypzZoOeEZzbAaBLltciLlnEeNkSscCZzxkKXVdSudDUkfgGIHCZzMCsScmcCpPckvmJYyhsSHZbXGfFgOohHeoOEJjbXxBbBbQqUuvhCZzzZvbBNmMoVvOlLnTtoOasSAPbQnEtTNOnQqCclLscVfHhFvTtIxXQqrKkRqQNnGADlLdAasSZtTqQzuUpEJrRNnjGgJjHOohRrDWwuUGqEVsSvIieQhNEeVvncOiIjJFYTtCcyfHcCHhqQhFfwWoCeEepPEPpwMmEeMlLmlsKMlLlLmkQqVSsbBQVPjJDdpvVqQYyStxXpPBebBCclLOkuUWsEFDdsSguKrRtTlLfZcCGgkKmMOomIGgizGgkCcHhdDyrRkObBAaNUuTyzZNbBHhnFfvVaAjnNnNowWbBXxVvHFfPpiIhdDdUuDOoOGgJviIFfiqQvVMmMmyYeVCcXvVDQGgQzZzZvIiVmMnnaAvScJjfInrRXxNuxXzZiTtxXKKkkrAaRKkmMtIitTCjJqQoHhYhZzjJJjJilCcLISsvFWwfbBWOoZznTtQTtUurLlRFbUkzUuZpPKAaqQCOofFSsFLlXqtrAaHhwbBWCDdMmlLdxXjaquUQoomMLllItTiaGpPGTlTtusBbLJkDdFfMmONnjJjJqYKxcCxEeLTtlXXbBhnNvVoOHEeOoomMoOaAOgGvCcsSDweECcUYypSaAdqSsQrRDRHhHAGWwYdDEtTeyMKNEenhHZzusSQqUlLKkIiTJXgkKvVGoOxvVXbkKBOXxonNkHHhhcVvCLtTPpfzZFFItKkbBeETAuSOosSujQDlLcCdgjzlLZsSaIiKjJkAMmxSslkKLSFKsGlJjOooOyYJjfDdFbwhHWLlapuNkKnqSiawrWAajJdDLlugGBbPiIpOoPpQqQyYZzvVFfkbBKzeZzDRrSAasSooOUTtxJjZPpwWUuzFNnfBbFsSfiIGgWwXxXxphRrunNUtTHQqNEsSenVCcipPdDTXxfeEzZVHfUqQuqQYyUWFfwabpQqVDdBlLbMJWyYwjMhKkurQWoWwvsLUuuUBLlzZToOGgFfEetzaAZblAarRoOvVruUuYyqbnNQwWqcmjJrFaphPmWwMKkpSZzgLlGsxrRXHzZGzZJjgPFXxFSNnstXxTXhtTHzkKcgaAMqQcCmGJRrkKjbBiIyYMAlUVVvUueENnvHlzZTUqQTXxtqQTwWIlDdLEeioOYRQNnaUAgXxEeGgTDjMoLliyPpYktTKyYDdPFfjUuNnJqQpIZzibeEBOoTtHnNUuLVvrUvVDKnQrdyzTtCeDfFdHhvDdZzNnBbjnNJERwQqWaACcKUuRrHhHWwZzjJlWkKwLhfFkEeYyBDdblVvLXWbDvNPpSSssRrnFLlDxgQqGZRrztTFfXsSrrHhrRrRNbBqoLaAAaoiIiIDdOhIiQNBbMYGQDHhVyctTxeEKkXCURRrrhqLjJeEGqQIGytuUTYneEoRPwHhWAvVadSNzZnMgGQqJFGgbBaAflLFcCGgGZIiYyzCcdXPhHKKkkpRMmrrMmcDdCGrRcDFuUfWwPnNfSecHTtlRrLpPuzZUKbeFEuhHEqQVtTvRrQqnMzZmNQqvRrVxZzXQqFfnNDdgGGdsOoSOouUPpVlbIiIyAaZRrEeiIIizahzZZzjorwDdLhcCHvVlfFbBjJpGgcCPBTttdDPpONnjqobBOQuoaAnNmMtdDFfTzxXZPpfRyDdwWMmYYyjJsxcvVCGhvVyEjfFJeisbBSIsTJvpHwwpYyoTtOhHPHuuUQptTLlYyzZDdsSPpPvTtVJjuUnNNNnnhmMQyPiIpDEGgFTyLlYFfpPhHtndDSvfTtFVvAVvaAjJaxNnhHaAXNVvIibBpPcCtqrRtTcPbBpVvCpPcsStTUrRBbnNVvIBRraNaeNnEdyYBOocyYfFpPCbijzdkKCfZeEecQquUTfFfFFfaxXOoDMmcnwWeEESVWwsETtecohtorwWrtWjvKbBrRbLqrRJjQTtlgEoQqQjyYJkKqiItTfwWFgGQwBbTwdDwWdUuDxYpjJuIRrijbBdUubBwWDcTtCnunNUznEKxXEeVaAaQNMDVvZmMEelLgMmGzRrYJlLlWwBIibLFKkWIEhHecpdKkMLlmAaLlofFOnHmpKivjwYyWCyLxQnNlMmLIiTtFfQrYwZTLMmCDQmMqivpPLlcCPsSsvWteETJnNsSEdDeBbBPBNQdLzTtZSsKnCFTtfurdDUuRUkbBKFlfFhxlLUVqzrRjJMAsSJCclLwvVXzZlQqtTLxfillLTXEeCKwKUEUsSbBiIJjiMQqSdXxoODsBbgGpPCIxakKtfRMAaHNnhKaAkmWwrmDgoxEjJeKEBtDdsemTkKAfLUmhHYkzZRDqymFfYyMoKkckKPpCiGgEXaSzZlPpLcGgCWAawqJquUQjJLljgYZCcQnNZykKYaaeEpPAAlLpmaAxsqJdDjmMUutSswWPpPIATtrThfFwCcWuUkKJjsSHUPEephRrzlLZbKTtkkOoeJjEJtTDdSDdinlLNnYySuOoBbREeOokrRCcUeExXbjnNThSvVORRiIJwWGpPpyYzoZzOLlzZRYyrRZztTrSVlQdSAaEepPsnNFZzmMgoOkKlEMmDdeMIEsSecCBbiPpYyvVwWkbsCkCytTMmLkKIPGoOZKmoOSsrTtcCExBCsQqKkRrSsSNnCQqpHtrRThuHBSstphHVyYkjJKMYymLliKmMWGGTttVvTMkkYyNWwgltVWwveJjETNnTepBbbBPbBqKkhrAXxuUBbDzUepMfOoobgeEROuUWlLWYsMmFfCcDdGXxnNYHhcGgrNnRCylLgQqvVCcDdDyBbCHWAafFqibTmMEjJeEeuNnUuUtRxXAaEvcCFVmDdMeEWxXlpPhvQAaBbBbSdaAyYDsTfjjJdYyDoKPOoDxXtTxmMdPpxXaUcCCzOoyxkKGCcFTYyGsSgtTtyYyHtyjJYuzfFMIAzdUunNDokKOAaLlwWpzZhHlLjeTcCcCUjJTEeYytwxUxXHhuXjJFfJGyDdPpSsjJcfqrOoTtNzZRrLWnSsaAfuKkEnWwEwWhoZzOWgGwzOoPpLleEQQqzKkZRWVvLYykKxXTtRFfyxXwKCEyYecoBbXkKaZzeiIjJfFQqDPpdbizZiIAaiIogoqOozBbZPpVvtTHgcEdxIiyYrnNyYUujSUmMCGgDjjJDdtTJYydiILIqQzoOZOoifFHoOEEeenNqvVrkKCrkDOBbtkKTokmuLlVCcCtoOTcxZqqQDdPhyYFfcDdOCcoCHuQOoqfFvVUQIzwWBbbAAextTXMYcCygxxXXRLlGnNgrZSspqsMUikKjJPpjyTtYLnvzZHbyYEeBvCcRpHhKkPrVPpTzPpZZAWoiIOLrRSsEPLloOpemIirAjJvVGPpuUgVNxnZzNDdDYyTEendqlLKkFnvJuqQhHzUuzUlLSdeVveEEfFIiMdQpPGgrSsRfFeEpwioOGeEnNsScpPCXxKkKkSWwLDdleoOEpmMrjJpPlLRFGzmiOoPzZzZKGgkKIEeCwTtWMgrfUuEbBeupPlYvViOzRruUeEZoSxJJNnjjsSkKbUueEaAdmMDBXtiAKkcCkfFjtTJKCZIlLNIleZzLlENMNYyMJtRriIRXxHhrKCGgrAaRuKkbLCcBbaALRrJjlPcCWsSYyZmNSsnMzSqSfFKbbSbBLlYyNtTnwZkKBtTOEenPpCPpcNqnNOepiOoYqVvFUuLlnAwKektlHhxcCCSsBEeEEvuUreEvVKcCIiIhDddVLlQgZjOokqdTtVvywhHKkLlVldmMgtVFfKkvoOTfFXxgGilOoLtCYyuIiuUTtCCcaAcYiVCOgMmwQqvgGjBbKoOkJjpsSzZxXIiPeaJjxijUaAuJllnNjJxXLwWsJGzZgYeEQaASvIeElIrRerRpTtuUAvVZzLldgmUuRFfrUufFGgQAFfgGHfvVFgkQqDdLCLPpyUuQqYwWXJHhjECcLxJjtSsQqDdmMlWwWwsppqFjHKdDODdoKfFkktTOolFfVvLnPpdDgGNvGKkTtfFhjutlFfLvhtPppPDukKVvrflWPpwLXRWwJXxJeEiIMvXMTtyKkYcqmPpQAHhZhLGglkGgRUIIjJYhnOpaApFlpPNnOoWTtbBnjJWwNaAOoqQxXHKjpTMmjJWwCnNtaATiZCWxTRzFjeYxXyRvfEeeECcFcUdxXSswQSeuKmSsBbsSQDdUuqrJVflLqQFRgvVMmCcTYyyYtNHhxLzhPPgyYWwuUGgrRGtYdLlxXvpPpyIDnNLgCwGLiPpDdmvVqlLQfMmGgMhSFpJaAjrRRrvVFfFJsuUSdDjFAyYPprPceaVQfFREekBYXxyccCbBBgvsSrRsUyqQjYvVRqxNnmMmRGwWBRrbgDCcDddrNhnDdNfFqDfOoqkbnNRmMrNfFQUHhCcYYdDkEfFCcGqQgeQqlfFLfFdjGgpPqBbQCcJlbBQnCjJWxXFfpPJjeDdERrQxahHPpWPmiIMTAaaAiIepgoOGnNKibBIkPhHEJjaHBJyKkYditTVnNOQqyYwWoPpOEeovQqIhkKHXxkhHMmRgGQCcqrYzjmRtTOzZnNYghHdeEvWtTvxpPXYHCchJLlkgGKbBDVvCcPpSwWCsbBnNxryYReEfFcUuaAEejJZvViIwFfexPqNYyQqUunAqQbBazZmdDTcCtMQSSAbBnyUOdvVNnSOosyTtaRcCDdOoFfplLPLlwWmOoMrUcnKVvEelLJvVpPuPpUHhCOoOjfMaAmhHZXxIiYIiyRrIqQXxnWOoVlLiuQuECfFdDvRrfEEebBpPWwHhyqQYetZHjJTnZzZzyYfFJMFDdjRUurJpuDGgNndIwszeEZmMZtTOotdvbBVNnggLdDlPtjJoOMySoOMeEFLliJjnSsVvNkfFKxymMjoOtMkKmTwaudDquNnlLNBbqmlwLytkWRyYKQquURIiPgBEesylLTtZZbzZIizZzHhmVIivVvblqbBvVXXxTtVvmPbjsSLhHkKKKWwfjyYHonNvjRrnKDiIdmTpUuPfoKQdDqsNIinWcigGICiuRibBSgvfgZzHBRrRFfrFfbhlDcuDdIiULlQQqtcCuYoKkqtxXBbZagGhMupPgGGiIWHhsqQzxXhKVKFflLsvsqQuZzYVvCcqQxOoXKkXzmMZxuUMmkKrDdkKAaOoRwWPtKtTeSsOoVZVvYvHhVybdYyQqfbTGcPpWhrRzhHGLBbKaAkLlZwULVvPplfIzhcKkWlHWQnNqOaAMmMmowhLwCgySoOsYgZaArQqiYEQqeiaZzsBFfPXtTGfUuFgKkiDdjOoEylLQkbBKsBbwgvLVIigGdzzpEoyYeECcQqIieEGNxMQrIiIptTPuOQqaAQeIHhQqIiaAkyYgcCGKCciEemKkCcMOBbuWwHdEeDhiHjfFroCcpSZzPAPprJTtjVvJwcqQMmbjSsJYKkvVyIlLfFiZNgGnzALSxXsvEeVlXxXeXnjJRHhrNbBAabBylXxaAeZzrEeRmVnNzZtUuwXxmnNqAauUOozrQqeERNnaLhHLZzcBbCIbCVhHvwObBDdocPygGYpnQVvwSsCRrcRlSwGgLbBlzIAbFyYuUSaUkDdzBoObDBbzASyYNnskKmsAnpzZAuUPeBbEyJjrpXxPvVOoVvyYztTmMZRYYyFTtKkEzZeTYyuUtXxfFlaALQmbBZzJBbjLcJlIiLmNPPppnMcdPpWNnwVvfFYRQqcUVqQvuGgKkdqnRrNjJGtCcjJAQJkKqINnzZHhGMmKqIoOsRBJPpFdStwWTNcCnPVvoOCcTUUHnPpNVveJjSsEJjDiIKdZzDTtOELEsSdPpQjJIiFKXUlLoLLOoFxXMcCmlHOoDrRppPlLPwWMcgtIKYykVKwVvdDBbsSqQeQqWwogGOzHhgGEeYMMohHtnEeOhHoNnNHhNnDdUeEZzZzCJLHoWwxdDXhxMcggUgxXrRmFOolBWwoGlUuLgGYUahHDdwnYytEmavXBGwrUuRTfCXxOoxnAAaaAYHhCMturxXUurfFIfXlLxzZJrpPsbonnNNyYPpmxXKNnrRVydDYqDCcJjBFjKkCcmsTGsSqFZzxejpsSKbtXExXbUEhaTXxjJtSKksXFfhEfFaAXxNuXKkIixFCKswCcjsvwWLlVSYxtSsTvVWwwWPoOpmMtTHxtQSTtDdTtNcqQQpPqAtTGLwWlrRdlxrtTseEmuUIiMohHDzIfFnWwayLlAmlDgoOpaACmMcXxPjJrEpPJjtXxJoaQMtYINcGPGgpmMgADdCcaEKkqQepPxoOQqjJXDyRPplXzxXZzaOoMmAZmMSrmMIiRsTuUfRBbhkKHKkOJJjyYinfFKYdkKDvVEelEeYhHXrzDUAjULlNEAanNeaUuZvmUGgwWfkKAoOgilDOZSuUXxRRNAanfDRrqPvkKkKQbhHKkBLYySeUYytTuriroORXxoVzGIigJjLKkfFlGgBNMmpPngjvGgPpkKkKzJjZUuMHhmfYyRryYJjdDnNrRxAapWdrLliIyBKwQuUeElLlLBkEeXGgwHQRASKaCYkIwWvVRNnvYyuUVriBYhHyvVLMvJsSEejlLyMAaxXzpcRTVpPvQCcvEeZRrTrRmMarHhTmMoOgGTteEptfEeFnNuWwUFUcLlnRvVTtrxXBMeuUtKkjJbBIdKPpcwBYyfalTtmMtwWNGgZwhDdvVDiXxPxXOoPpKbBavVAYgoAvfyYtiIvahzMFsDDfFtTLKYdJjDyfFkKPDdbWwpIiPGgTtQWwqJjBiVvIkKVbBvlwZIRpLlPwfroOzHrRhhxqeWwszZPCWwyGygeOcXipoymSZzsWwiKlkGMGbjJDyEevVWaAKkIiOuCAsbSsBbYfoeZzoOduMIpPgUkFwWPpyYRDdUqhUNnunxXNuUPIjiIJAwmuUgpyVvYcAeIivVEOZVUufFQIizGgHhZqMmmaAvVcpgPJjaAapnSsiAtYYfFUufFXjJxyUuSPpsExdqQzeEZUuAakXxOxglpVTtvfFjJjnNpqQPFqfsNnSFITtsSzZrwDaLlzIhjJhBbyqVIirhHCcRYLHhVnNeEGgvkWWwwKMVMfFeKGgkZzxUDduGVfFSnNjJApCUucDiIdPSsalLEJHLOoWyTfbQqBHhsBbgJmMjIiNzhAatTHZzZnXxxlrvVtTHhJAajOUuUbwZzjJOCceDzhPpItWhOPpcCUQEiMOoXxmJWMdEFFfSsxQUKwEryQTtoOvnNfFCgiHhCQtyVvRrYTocCoOcCYyFfVUuvOiftcbjDdrMHhBbEezdRrxcCEioinNcXlJnbBhZagGAJjArtCPpcPpiFpNLYyQqGCyYtTgGxNHhnIvVrRlbNnvysCcMmGuUBiIDpulMmLUPRrHhKSCrRpRrfFPcsDdkTMIwaEeAYjJpfCTEejXzZZfGrRgTicoiksHhgGKoOlgNnyYCcXzjOywWYJjkCcXxSGgsTXxctQqVvtIiTwwWiHhIKJjHhAQKbTQcCGJjgqtORyfFYawghRAYyziIZbJpcCBbPjBqWSswzdDnNcQakDYEepPdjHYygveqQeqQGWdDksSPJwybhlTwpDSSHhspTMskjeEJKWwdDibBPmiLHvPTRkKPrRproJjFrRQVabUMmHQqtDHhdyYThGcbZzWnAiCCmfFenMmeqVtXmMwYqHhQZAlRSsTDdtSsyYkYkvPpwkCnaIemLjJVXxnNjkZTgkfFHMEWHTIuUmbBZzJjaAgnEevSKbXKkxkKXxBkXxsjegFFfwNmFUIiIiuxXdDtTtweEQqPdkyYfbBqQgGSsAaQgGETgIitTyYwxXWGdDjJqQauHhUWVNnsSfFEmMDdiIdbRrBDevAIxyRrEBbGRLldDphNBPpxedEWwRpPzZuUJIUcEeLlCjJuNnhlRWwStOMmoFJlLjIMmDdmXBJLGglyYLljdecCYyAufxXyYADdamsSToOOotMSsFWoMTtAQHhqaddDqQDioifoAaOFIEeOukKXclnNqQTZzWOhHCNpNOoZzZzFqQxXlIruFkcCKgGxXrBbBJuqQUNnBeEbPpjcWLNZzsLFflTtumMLluUCcUsSAaFuiGgIAaBbUiVvOoKCMECXaEeHhoMGxXNoOkNzhcCPjMVvYybPYPpwCcgcOxuLscJJlZzLWOoqlLHGavVAHhdCOTtFfmMIXuUnYmMyVvNeESsGsXljJeEdXmMDjKjGgkeCcikQOocHhEeUudMhkXEaKNYymMGgHRrJRrgGGBbrwLYyrFffQhPuUmzZzZGuUHhwWlJjJkKseEwlLEIaAgGhnvTJFSLkKRQEeqWwzoOYgBJjwaGgmivwtTIsgGSiUNnuOtSstTuUToCcnoqxfvVFQwWaHqQhAqNaOoAnNZzlBXxAeEbBZsTMmFlFfpWMgGgwWIiCjgvVWwUSdRsSkjUgbBewuAxaxXOVvoeYksSKytTLlEfFzDtPrHhywCMvfFVYyBCcnTohiIfFQoLlxJpfNnlUuPpLGBzWxtiIQqQqwWlLPqxXSsZOHvYsSyVhoGfvVFgVvnDtTbxjJXyXQqBaGgALliIYIilAoOfIiFaDIGAagiDBbduUMmorRSsDvDkfFFCJjiuUrmLlMRYTtCFLlvqQdlJrfXxWYfFyfFhHBsuVsSvBVvDqpPesMoOyYRspPIiSrzkJjQRrqNnKuUaAjJZunNwkVvpLlvVvrZzJOobBLlfvVvVmQqWazZiIANnlLGNLgqppSluUQGRgifQFfXxydDdDFffFnNYDdSVdCqQFfwffFysXxaAWwSCcYyOyVvKkSJjJjSsDTtNjYKkAaLPcCfGXxJMIOGkmMVvEesaWLzXILYjJyLlqmMXxnnNNjQqjJSwFfQqipPVvINEPIHjRagAalLlLercCvkeELlhvBbdCiIqQfFVvHhQqfiNnkbceHhUKSsHzZzVIcmQKnNqiqPpXzZsrRFfaABjJbpPQykKTWGQpPMBNOoJhHwLMmlWjuDiIOodmMtbyPptgbBwWGnNQqIiLlTMXxUeEudDmfEZJPgGlPGLzateETfvVNWKxXypPgGOSuUsHhoFfJjmvAKuUBkipsSvhIiHmcHwWhCMVUrCxhMIYygGxyUPCFUoOubSfluISSpfYyPMmkKpyqQleJaAByYaAbjPpDQagEeiUuekKfFsTjJqqQpsSwFXxXIfLllLxgfYyUQukXxvBHhdDbhHeutVvuKinNJjXAaxnNIwWkUuIirRkZzKeEuCwPpWAarBwWbaGDdKYWwnCcZzVvCczIilIiFNPDdAeEHhQVdDeGOXzZxoppWwzZUuPlZKfglIskKSwWfhzAaZersSBxEDdOJofrRaAFsgZIhdDHXLenAawPdIIiiDxXGzZhRGOHhogzZCheVSWCLrReEVwWXxHhXxwnEszzZSsZKFaAGIBSzZhbxXqQRrTtBVmgGGrTZjmMZwLJjlVOoCbBNrnNaVJjkKvRmrUHhuMKdHykKQtTZzfFZzMXfRIWFfABZzRjJZBjJbfFxGBDEeiqQWjlwMmWbhQqhHyYTjJkAaKtHpApiIPbyYBwqQWMhLlgQcXbBxtBdDdDoiqQIgThoXOCzRrdOohRrHDxXRQTtRrcpvVHVvtTVYByfyMEemPpRXxZuUTnUutgDlswVvLzKPpoOowWunEINCyYlAjJqQNhHIinsSNJjQqZWUuwMgmYycCFtFsSgjJGfcEMuUmxZdIIRuRIiRGeuUuwWuUUTKLNnlPLlpgVRrtgGPpTLFflYypPvGgVkCwWcCqQlfYbSTnxXCirRIczcCgGPOnNiFKkfxDENDEeaAlLCcSuUOkHcCXxhHhHfFfpcRrwPaADdSsdlIfSgNdDqQnlLGItuUVdDnKkDVLjsHbKkBmBbRbzCfFPpDFHhfdCuUxnLFmgfFmIiKyXxEwAIialsSQqQYKkeEAhZzOoOSsdrRcgAUuuUGwnNGekKXoyYIivVOKkMmDYuUytTdVIBLWPpQqTtFfaAsMmkKAcCvFyYGPpNngYygWkNnihLlziIZlHLNnlXIhRrmZzceIEegMsSVvgGjJMmXvppXpZQquHqxwkaggcTzZWjJAOfqdDiIOpPoQoyztThHxXhzZwWHhkoGwclPmMWwdbvbBZEeMmFfgGWAaMZAarRUuKIiPpRrNsmKkRrZzKAMRDdaAcYmMyCHsKIGYgIiUuNnIDdSAtTJjkKSsUJjTtbplgGLdDBOeEGgRraoHngpkKeEjrrPHxKkHhZuuUUAQfFqayjJYcqQCAeEaCQqPDdpyitIiTtTjJupMmPifFCUuepIiWBbSuIljJKkdBUupsGAowsSlLWjmqQNHEADdcaanwsxXrRSDAqQadTRdDpUAiLNvVdDxkKXJqbBpeoDdUuWqqTvVNnZEeiIrbVvjoXxZXUuoOXUkKukKxwWdTtfULlpucglxnTtNCBOobOeEoUfsgkdItjCeadDMPlLpZSsuUIiTtCHvAIjdDdDGOoiJjMokpEXtKiIHdEhfgDdGFburRUzZvZSsSubnItMmiQUJdIjJIiDFTtfggqQGbyNnJGgBXHnoRtDdhBtTPpQqKkFfaRrHXzbxtTFezeEdgxXGlLfKHjJUxAjJdbdhEeHKOoSkKsEOSsHhoVeEwKPpkIFbBPKCZjUwWubBrJBaARQYlwjPpdvVDJZRrzWqQlcyECHfmQIKkTxOoXzlclzdKkZnNKuUimCPwKkWphCXxcQqHXnUyYlhUpPwWwtTjKDArvVHFLlkiKaAOGgobwveETGOogCcjEONXPTtyqRClMmGnHhxXJjXAagcqyYpnNBGglJjyYcwWCLEeVnHKrAgNnlUuPpBbkKYynAKkqSZdDOozzZUuFfIZwWzbeNIUIiPpOMQVvpLAaJZFflqQOAQCGyCkvwjwHhctJISZuUziPkKpxnGHPphABQnVgGsScCwWyXsSoOxYoHhMpVvkLlVSEegBpXRrKkxWGgfXWfUugGkbIJfFmJONnpBbutDEYOeXxNnpPfVvFxiXxFiDdqQEeZzIiKzYjJMlyYolvkYDlLdYygenNwyekHMNncCuXYyORyRrYrWMsvAFfaWeWwEEekzoGeEzZfwceHlKkYydrGNmNUuTtSamMACVvsSeDYyseNngGEevQqNEeEJNnFLpPsjJLEHpKqWwQVhjJfnNFcFfvVfFFEeILPUTtNjovRWoqQFSbSLlwKkJDeEdjkPsGpPCcgGWwBgAawWGBRbtTjqQmMVDWwOcCofxXFJfwPpWCIIMmTtpJVAacdxXJcdaWgGyYYPgGpmnJjnNcyIyYWOoQqyBWwKTqEUcgGCuUbfFZSbBswNgGaqQAjYyJJwRsydDTvzdgKkNkKnRiRixXlAvPUCcGgahlFfSsLsEvVOFJjFPgGpyYixXeGNMRadXxBZGgKZNnVvlpPeELiIMrJQqgwWHdHIYhgfXxsNnSgGVkRteMmLbBXvMZKOfbsSFIifHtTyYrRqQPtLyYvrRWPnNcYkCLIiuQOGghHoyhHAanaZLlzmMfFXxAbtPpWYYnNrRyydEQRcCrqOoeDJBbFHKkEJDdvVmNnMBbBLXtyvLlloTIaAiPrReVGOoLZzDjqTVmMOyPpBIPBOnNlLlwWlMPpPpeEDNXcUuCJQqjVQnNskJuUzJLeElqXrRrRxQqQwjJUfFWwYyrRhCKikKoXrCcVzZiRAacRrbMDdEgCctLlCxYZzsAauUNnbBSmWikaRkaXxlJjlLKzZdsISmUfOoNxawQqIioGgjJgGxUusVvlyzRHDdnbOibBEeLkGeEgFbBgGDYSsvVUSneEeEPpcmMHhHIiRmMYygkKGWaRrADdjdDJstTSSssoJRhKWRSNOmMZSkDKLeEilRSscHweWwhaANJfNDCcAoOEArDdChnKsXxWwpVzncCtvzUDUuCcdJjSsbbmxijfOojpfFOVvoEkKeldDuBDEbBAuUarKkTdOozZsapMmqQPqvVMmLIiaVvAqvgGHhcaXCONnSsWwozZvgGxXdmkAaxXlHOpPgVvmxSlwYrZGgIHhOoycnNCcRrMOmMDdlMiwVvNnwHOckSJJOzSAGwRitQpPqWwMstjTNqFFfoIOMmXxcjoxazfZgRlGuEIiyeRrpPjJxmaAfhhWZzhHcQyVPAFhHfmaApuFtyYsHhSXgGnLXVBrbBKRfLorRnBTWfQqFwENOJjeaQsSTtTcXEexGqQgDdGgEYyNfphHpfOtToliezZGsAaJjUujwWapHciEYBbyefOoouUtvVXxTXBbgySpbZWJWqQoJFFoQqFfXfLeYDdFGGkKKkfEeKtabxjlLJjSbpEePRbUXxEZzeZzuZzmfNIUkKQmLleEBHcEoOmCcUWwdHCBgGbcJjCcdpTRoDeFjOEeosSlfFFfWwgvVtCczxXZequeEhHEeEpPGrRIFfiUjxXyYahdDjJHVUuQAcBkoOHzjNCUuccCnbPOouMRrRXIiIkmSeuDdaACcUJjRtThUKKtkbBlLZzKTKkCLlfFaJwQfXEQqehHWwrDdjJsaAVFwWGIiqPprYygZBJQPpqLlkIfFeXsFfSxtrRhHTnuUNzdZtjBnpndTuLNKkDrGgYjxuUZSUZhDdcGoAoOaODqOSbGGOuBfdDFbkNNnnADdtnUuTtgJQjgTtKWfHhqPphKTiSvwWWrRWwZnNXALusLfwjWwwWlmMLXJFKhDdvxVBbvDdIwWrUZIjJiQqzuqYCdyxXmvoZYgHhwymUqQlzsPCbzZMWwCOCcfpPRrFNNPRrhUVMwdDXpFmzZOojqeEQjJHvVPFmaLJEKkIWxibObBzlDBbdLYuLlfvVJJhHSsjrMHhWwHPrnNnrRNjJDvzLSLlHsRrSQqsCUqQlLrAMmaNhNxcIeEEDtZzlpPLJjrXRrxXcCxRKkZuUHmwMmOPrRhxXIiTHXPAaNpPnLeOoElBrmMzsCcfQqFDtNBFXVvuUXALRKbWwWwDxXtTiIAbOIirMENnjIlggAdLIsvaAVSdhHXbtnNeomlVvsOSQqEtGNfCiICvroAKavYpQqeVYOoTPSSoTUxBbbBvLWWwAgEeGBjJybUusEqCcOoQJYWwYCHRtgUrqFEKwsJcCNhdDfeEBbiTkKEeUuPCeoOpAQqyNiSEevOoVgGvPpVEjvhBAaLuMlqHcqQceECCcEeOAaoaAuiksSZyGGNXxiyFfQAQBmMbmMAEZzeoDdaPVvpgXAzhHZbsRrSQMlEbxXyfSfuQjfzvVZUSoTFJjnNxXGQdUusVsmMSfFeEeQqgGTuiQqHVbuUgbeEvQVvnUoOkhMLlDZzSmMLlGgHGUuYYptcIBAabzHzZjdDtTByXSLiteNnEhnbBldGgDrlLxaAWmtTpffbJzZWrrhHgxyOKPpzZMvVJWwjzjpEWwXEwwxXWtCcsSIHCvPpNntqHhdLCiQkgaAJwFZzJEYguyYUKNnLpfFycDdCFfubmMhIfuUweEsXVvxKnqQIOyKkZHhzYkVEeOowWDdCiIHmdnrZzoOxzvxXShvZzYhoQqwcwMwSBaKoqSKkmMsFQHtTVkIQqiIjwtPUUuJjueEzCcZAklzSsPpZvjRPcOoZRrpxaAujTtvKkEeEuKFgzwJjZzPxDdUaAfgGFLluyYyYOxytRrziDvttTPXdDrEeeGgTtEtmQqLPGLZzDKGvbapPCuUQQOFSkKLEeYylsxXVvSoyYyKdjJjrRHhFinnNRPpBadDMxXlLtukCFhHwZyYradtTlPJHWgleprlLRsSwMgGHeEBbhmsULxLlXTtiIuUIzcozZxyYMxXzmMLlHhTtZQvYyVGrDdgwpPEgnNIgxxXWvgSxyYzqRrHDdhzpQbsSKXxITtiksEFfFQRSzZKjgGxqRheSLfFAfsMCYmlplUFfuCVzmsiInjJNEebCHxHxMmDWwdtTXhMiPfFlsOoSWZAHTtrRhIiwuZnNwWqQzUgwYGjrSPKVxXvdDrzEwWdTtDeZRpDCdaAUjLUUGZzgXnyTtYrCctQuhHbpPiogZAFCxHsoXxOtoCFxwWpxXcCOskoOjuuHNnhlpUuJkYIiBbaUcFZzfCwWnOfQZEoFKkjkoOmnrvpPVDKAakdjJiKaozlyYMmxyfdaAjjJVvJreRrVONeOrRoQhHTFgHhaUlLmqSknMlLccmcOoKkWJVkEGFOofoOGgcxXyAaiyNnYUuLZwSsIAaFiIakgWRXYGvLZzXbBYyjJeOxdvWwjLlLJjXADAGMadDAPpmeEpHhoBlLcFfCoIITJCLDdlHhcbanNAGgmMBrRbWinNIgGylpDdaBqEUjTLXmTtJjgBlLToFfMzaARrsiIfKLlVfFvgzZmfXArDdRVvaAavVvyYtTixyiImoWBbhSGKrRrNDdnmQAFfIsrUuHhRSXlgiHtThmqcBcvVCkocIiCYSOkgEJkwjAaJVbBtQqwITPptAsSSsuHYyhZcWwyEvrzarkIDtTsSRpPGgRaHTtbBWoOwHMmNnnsOyYAbyjJXpgmTQZZqQrRSXEvVNSXUuaAEeakKnghYpzFBuwWUlzmAarjKANYtngyezsEeSiuPpzGTKbBeEgoRrHhHOoVMLlGeQDwWEeBoOqIbBGAagIkEfwkKuUWFPplLeemXQaYyAqxMaCDdqjrTFfMzuXuUNnfvVppUwMaVGUISwAHvgYyFUuoHhpeuJxXhHwWUuQPzZoGgfLvmosEerxkKwXxScEHwpPNxPCcEedBfFfFKtTkhTVvxXkpDdPBJnQvxXprbRmhVrgGRxXjJKFfUuJBmzoOfEeFdLRLPiIyQqUxXWwVbemBbMkyuUGsSlLEVadMmDaBNnZvehHkpvbAcCaCoOBZiRUykbBKfzZFPpzHhmzvkBKIiTqejjHRrKaAtqBbyYyTJtscqARNnrluCUuZPpzZlGgFgppYyPgGSseyNpGccCktXQSJjuBbPpVvGRFGzxUucCXMEoGuCcUBgdDWblTjJHHaUuKQqQYZNsteEkSJjVpTqSpiIniIWwLPXXXZVCckqKkVBQbBdllHohHOYIjJkXKXxZJjoiXxNQiMmUuHPXxIIiiqTtxleECcLXZzFtKkUuTjNYaAxpDdPTXsdrWjzAdDwpqrRQauUzweMmVRrvMFcCfPKWZzweExYyRNnfHhFUuSMmsNJlieEIbcbngIGFgysmMhHQwyYWaeNCEeeEcZiiSpPJjQINHCchPpaNnAniJjqKkiIsCcoOIuUIzrguGgUGRnEALlYyqSYAFfGgaGfRWqQYywrgiGNBCBLjnrXkpmEWnNZAPWtTaZqQJwRDiISxtKkXyjJnFfJfUZSscCzuQphIqnIOzjJkxKinNyoOhLLDqbvdDQKvzxSsHhxxplXxNPJjCcsQtPvsKTSnpPOozyqkAhhtLBwGbWtTwdDNngOrRkKemZgcCfrgUsqxiITKvVCgHhPnYEPGNnfLzcUnNLaQCSTjtYeEQTkRrhGmMgJJEQtkfFgGhHTtbKVKkZMrRZxjJXiIkbBKYLlurIzboOcbxXtTgGBBVPKkPpKEVzbAIiAveBbcCgYrRKEBvuWwYplzZrlDZMTlLtbjkgGaAvHMrQqBCcRpPPVvVqNjbKTHhZzttHbDppPXnxpPZuUzXWheCsWXIhHiRSOMVlFOpWwqZzoOHhjUEPjJOfGXxqQcCVJjhIiVvaWWwsivVqQugvAmWuPPuUFEexUZmteERJKkcCQcAbxXBEOofUuFKiiQwWfFKkKkbUudqEgXxmvhOGktgYyZfFLlyYUIZEYGAqQaNTsSynakJRMdDZLbrRfZPyHGNEeuUgGAxaAsnexsoOkKzzqtMGPxYBaAaoSNhAWwdQqDaHhhArRrrkKdLliKRAZRVeYUuCzHrRhUaYyrRiWTuUmMvWKjeGKpPosyZzwWOKbCQMHhIGLIixNmMniIeEiaqMZjJzrRXxRzCcZkgLlsYSqQsyHwTtOMYXGgWfFwdDIyYVxKkXxFMJjGkFSZmOtJjbGwWMxltJueQbAPLYwDdBbdDBjtiizZObOFfPgadaxNnlJVDXoElLxlVgtTOoyxfIiQqFrwNnGKAeEfiWzsAaSliIIYPpCzZgeKvjwCMCCmNKsQNnEeMeEuAZzGftqEngGovHuUhERjJDFYXsSbBLZIiOAkIDxXdNnHMmCDdpPNnchCqiIQcRNMBVvbKJfOezqvVFzZoNfFiXxxXeETtIunNOfFoAyKZzjPLXxoOUUJKbBRrSoPXqQfeEcOpPJjTSoOhXckrRKMFfmpPzZfazGAaPpkKOIRrIiBUqTkwWGgKXxRNxRWwrhHuulJSsuDcdRrgoOGQqPkYCcypCcsRJgyzZYyWGWIiazwBbLpImXJjhcBLlHhSMpPZMmvRrcLPLVvMynNcmSFalsEHLlrQVLlvIiXJkBbVvsrqfeSBqPGgZQqRrQZXsGVwwWXGiGeWGoODDcCddRgbBqmpVvPXOEeCZVvmMiluSWvVPELGwRrhjpLYyWwDAkKRIizHhWhtTHNnfciIKUTmAFfiIbrNiIIfJDkYOsPpfoBbqqcABXxVgMmkdlgplrRMGgTRUuNnxpTVdIMmZTdwWDYXoXpWZGfkWwUeyYjJsiISVvBbVpPuUJUUuXhHPFfzCpriIJvVVLKapTWiIFeEfiIJhoOHiKvtVBBbYybMmvhHyYThqsSfQOkAbskKWmWCwWVvpoOPWIiJjOvVvAabBVHyXxDdVHGgsVEeoOZXZzfFRNDMhcOozGgdIiDgGtTiIZvKoiWwWGgwNkSsSWayYFfAFdDAaiHBUHhYbBVuvVUvPPpCclkGdDyCceoOjfWjuUDdMmbBGyYKLUulqIcorROlDQTVchiWCcwzZTWexeFfPJZEemkTtBboYXGSsRRwjJjRrBFFPMwXRLNHTIlsxYbJhZiCTPyyIiNngkKhsdmHKuNoOJjKkqVNneEBbBGBvfFhIUPptIiEsLVvlSvSUuDqgrtTRfMmtOszZxXuFJqUFzdWwDZsFYBeLuUrSsRmqOosSBaxfFGAYymMOEeasSPpqsSvVnNakKqYInggYzxXKILlUChQLmUlbHVJeSbBsyYsInYJjaPEcpkKtIPpHhFHnjyOoYSWHhFfkefQRuGTtiIdDTSstTnNrhcyYyyjkKqFfQeSYyQqHhBYbawlVXupPtSsOsspMmtBbyvxXEqQPyLlVHhAkaYyORVcOocFngTesoSFeIiEfLdDMOETBkKxDtbBUuTilDavqBbQVGJjGLiJeMmmhHRAaoBadBBbkzaAvVZrlWwiIRrSsaxiIDdlLxfbnTdSZmMNnRpPbNnQqpxhqQtcCXxHsSpZzoWaAMUuhUuzTdeiCtxXTXnHnRucShRrLlslZQqVmMdqDdQRVJjvphPpmRjFUyAaloOLZyhHYpPoBIXwiYyejlAMsnQFfqJOVaAvojNSfoOpkKQqhMmJcCMfPxWmvuHpnnocmByYcnNpJgGjSZLuMYZzWhHEegGCcAaGyzOVMAaYDxXcyQRsSisSKkXZzVHkfgGjxJsSWFlKkSUlnNaxUuzTtwYRryoOVkKsItDsSeEdkHQFwkoOGJgGqjGNTHhDdaNpPnKUjJoggBsoQdgCxXHxjJksiISKXzGguszXpPJhHyRdnlUttDdVvTYYyzZfFyudPpDUDFUufNPNrNnRbJTzDZzFfoOZtCbBcmMuUTBHhbEiKjbzGNnRQgwWfdDvSyYRhHxFqWjAckkKkZzuHrWwQqEsMKLlixrfFmURiIrpBrRtTTtJZhMmKbCEeaqvAJHhugeOoRXxrtTTtRrRrPpUQEmMTQqjEeUuJTtGTlLtLJfQqEdOrtiIuUPDbBhDuMeChbMqYqQyxXulLRyYrinFMBBbrQqdDBUusdDwWJXBATkFggfyElFxOffjOwXxjwzkKBrRPsYLtTlKkGxKkOFOoIOoChPAhHYyJVrAaWMaAwRvkKSgEXTfFtxSsILFuUPPFkKnelLNnCtqAQqEongGeNdDntbNOlFrkRbmMvxlNRrGgbBxTMmfUfFlLPVvjJMogGOapvNnYqdDfFCPOoIipwHHFMXzZoOXxEYeUgLrGzQqFZAXOEeJCoGgaAiORrfQqQntJOoTSmhHFfdDzZaATIrWgaslJjCcLZxtAaTLlXojGmMgRrjsKCzZohWHhWIkKmLUmMuUuoEemcCCMmYlLizRvVyWZzLIixXsbjJaABXMGoSshLvVCcGgRrKMDRnNrEeVcxACVQcClvVQoOASDqQfFtRejJdbULBbPJFJIXMBBhHRrcCJjuZXxVTNRrZvpPPLlefFErbBRSkNtTHrRzZcRaeaSsPpdnFjIiPpIinEeHxyYXEWhCrLInNlkdKszonCcsrwkKkHBbrjoOgGOSjJAGgfFqQaEejJwrhCNsuxXOooOyBbdNnfLlKlIaAoBNtThrZYnNVvLSoOXjJOLlWAXnFuMsiSDQqcgGylUuLwWYCkZgGzLfFAKrAVvKIwMqQXNnxynNXkKfiIxXFcTGelLmBCAaLlRrrjJIvYyRxOIkcHJjuRrWdDqYyNnQTteEjZcCjKSqndLlXxDNvxndmdDtTGgoOVvLqQFfLlLobpibPpbBYovtQkKJdVyYvkKoOlgvpPzZEcCptLlOxXLVDdYvVTxlbXxiIKkQqwWDiIdjehcCwWfjwTthHTBNYMmqUlLlcKyCAapeEwVlbBgGTphHhBkKFoiFfIkMmziImVddDDxEeEelETBbrKvIiFGHyiZjJCcWwzhDMmhGjRmNnzkGSsgzbDAJHhbBjrmnAawjJxXWmEetTMgiSsIEIeEWwaArRffoeLfXDdxpPPdDpFlqQSHAuDdpVxXaDdOoLIrIrGDZVtMmYSrlLWDzuUZdjgGrbBRnWzBueQtkbYVvwiZzYbrRBgGCJjsLlSNMyuUuUWnNwYnRrNymGWwgMEedDwADCvVjDCRrvjPUuiiNncwnNWFjdnNjJvRrJBrbbgSpPpfFKLlOhHZUuzoWsBsfLlOwbBrVOJnzZuplifCHvkYyPhEBbeelSlfjenVESdKkqXxQEcsToDdVvOtTtnUuxXOXxoMngRoODLhECWFgOMmZKxXQqQqpPwVfFSzhMmHZmwSsaAoSiIsxUuiIUmhKEYyYSGnNrRgsWEGyKVLEBbrReOLmyZkrRIFffIXWwEoyarRAeXxdFfTUPIiojMJpPFfjjxXiBeEKFwxFwPbGsvKCueEUcPmOhYyHvOoNqbadrGgRBbDmMgyYNlLzZXPpIqQstTvVijiITCPppPdjJDWJWVCcKcYgcqSsaouUIiLzAajlPLSslQqqWEqQsSewmoMmnYyNuinAaEBioOsTtQaNCcLGaRmMkhNvcCbPDyYdaAQCGxNgTtzZmMLcrQvVYtTpxnoeNnJtVbgGFnNfBWBSsEekIKfhRaaAdGfFgkJWTtYyMmuHLHhuNxccCMIkzSsDZLCLZtgGiqMHVhHvhFhceqQYJjCLrRLyqrjJbjRJDdtAYMmyaTzcJjkQqFfpSwWswlTtLWfiWyYfFvWbBmMwekEeDBDaXuhkFDZEfXBZxhCcAeEtPpTtoOmMEeTbHTrvVONhbBxbjYBGdiaAaADjuqICaAcNnHhMmTiLkKLllNBcCPpUszVBPFfpHeDhkTxuUePKOmIgJiaXxvYrRyVVPphtTchHLlvUuLlVzmAZgGzEcJTtTiDKdDGbBSFuwWcXLZkqQKWwzGCUPuTtIibuUBFDEpPewTtkxXKWilLItTxwWUuzOZzJzZBRzvVtQQwOhHDdCcEPQRrjvVnlIYyauPrPptqQWNAJjACaehnhHMDnNVvdLlSsJWNnwOmMaBbgSPkKbuUDLiUsGgwPEcIUIYctTCcXxzHhXwWhpRRJPGNhtTOqQgtTGQeEqxXAobPBuRrasifLlFGygtTikShlLrdDiImcCakFfMSnkzmEewzcCYyVBDeJjrRTtkKgGEpLCWgOKHZYOcCUurRFRrcCoazZwtCMmJjGaAGQqAKWXQhrRUZzzPFfxPPDdWwKkVxjJcCyYmtTeENnvVGiTtdDECoOGgTnmApPaXxMNrRCctVvMyYHixhYGgpPyLHIKmmMMwGGgfVZziKkIaSCcwlbiLlvDKsSjJkdxXqUuQonNOxEgBbvVWgapPGhhHHCoOOKkoDaAYYfFyyoMmZzSsHayqCcsSLYyyYWeYUuzZkMgGGMfzZlNXccZuUBrMhSJlvnhxnNXHNdNvUuRrbBMmTisFdDiLDdDNuUnpWVvCPFhIiDdKosdneEpPMmaAedMmXIopZdxXZzDHhlLNtsByFXxLcicCIKNnNnFfvGkbBtEguUkKXxGgrrUfFrTtidDiDzXeCTQqfTtgGeEMGmznzCcZazZLcCIidDcnieNaAUOXxQqkZzZlWSLdGTNtpPnNzrYFzZBbdDYbyiIZaoOAzvyzZXLlVPpvxYhQqPiLlWwIOoCqrZcIGgiDdoxOuUHtLlOsSoNnGRrObTCSsqGHoOmVvaSwWsPBLJsSwIdbbBgXGgzrUubawibfFJjaABrFxbBmWwqYoSsOhDkrRgGmaARURrLluMrApPFfRngGcvWWwzJzQqDdtRgjJhHMvruUAOoavVRHsbigqQfkIiSeHhNWvwWqQlctTwsvEHcrHSsGgNngpLlWNRrEKkNnlxwxXWilLzGpPSOjoeXqQyYbPpREHQqFiRreELGFkzeEbBLPgEvqlPpLwWapPpnfLZNykgAVvwkKWpPRcsSpPmMUFfiIUQqnNTUzZPpgGQqEuUNnVKUFfVvOoqhHIiuFGXCcRrFigGxfWPoOQtSkuUFfWwKEHhlLizJjZIIGAqSsjJdELxXUuYRnIiNrFPDbBqQdssibBvVULtThHZzHhFsEeBSszZvVhHvGgVfcpobBOKkiPpIuYXipPHhmUuHXMmcRuPIKbkaVJjSsMYkwnFEemMAwWFfZlrRgpJjqQLVvgGpjzpPeKLlkFQGNngyksSKYqYBTUSkKswjJWnbmqnNgwxXkKGgtEexbBXgGhHESseYPpOoypPYZYyzKkqFfSxSsQDdIynNYQkqMCaAivpPZhkuECBdDKIFIvVicDVHwWKzUuZTtZzVRhnNHgGEGgGArtTcCJheETtTaAtFfezZEipenWsJBbQlinmMNxWwZlwCcANnSpPvMmVKEegoimjgFplQiIIieEqyCcJndRrswWwPwWpWYRroYgGFWDdSZzVvsDdcDvVvsaAqFIGrgqLsPPQGlSsngnNwMyYFyYjGgDFfdRSswWVNnuWwUjJEePfFxXKWQyYqUNnmYySjJXxEQdOoVVvvboOUXxvVHhuUYyIiSbwKkJjfFFRRrqQgGjLDVfKkyYcLlymMqQfFIpPcfKdVdOPrRprmMRdLmMCcIicFbGgBZzfCybCcQqxYBZzdNTtzxXQpkKTXoPpOwZbBbrUuXxRgFPjNnXOqHTtyYCcOMmtcCNbUujJmcWYQqHhRpTdZfqPpdDQFcCAXaUWEGFfunNDdPpgGMrdDRBbCcnNwWmYyJKUurLlmMDLlsuyYqQGgGJhHpPcGmwLALlqQalMgGMmmLlOoPLfEetKPpkSzaMUumbLnyYJjYyXQGXVUuvxgkKONOoWmMVIMAWbGtTeEyUfFuZzZGvVgrlsmMfjtJjVNHieWaASjLcCgzZMXxpHHhqFRlwWWPPpJjpOoRgbGgBjeEhOonkAexwWKHCcmDxPpIxXiGbBWwgXNCcnEecCUuMmCdDqdDTtKIEDdKJLlkBbJdxDVvLCclLxSgJaAjxWwoOQqRdDrclLDdCiXxocuUxxXXDgyYpPhQEewHhhHjjFaAfCSlUXqJjTtOoQoCGWkHXcCxhKypBYymJpyYHYyZDdDdZzZzRGgrXxnKmMnJjiCcIgmOAEebBCcxcemBqQTtLlbQqcknNIfSCcnlHAaeEhPIipwtfFTsWwSCpPsSbRrwTtWRfURyYTtiLfnPVvUuncowtLVvCxUIxXmOwaAUNnaEDYFfyYybuUxMZzYyiffFTsYMmyrLPpHUVmxXMvYyuijrWqQweDEbBXFfbbBnGgbBHHhPgyYGbCcBrgeYXinNJjaVaAhHcCgGvwWGgwAtnNIieqCcFfFKkKDpWTUuHhfwmMWMPpnWfGETtJVWwNoOGMIiipPtBqQbZzbBFfhHhFfvsShHCWwcVwemhKJjGtzKJvlLlMEiANuUcKWVKyKrLkKazCclLyWxTvQENTtEMkKccLlIhpNnPrRuUyYHaNcCwBQgGqFfCgQquBAsSvqfMWzZmMLlwmOtpKkVhVvlIMpgYcCyGmMFfZzIcCSmtPEesdPWCctLHjJBYcCWjpKwxYycCXYygaJjABbEtTEVGhJcxXCDpPbByKkdKAqCoOLVvCclsSZQTtarHhHGWArIZztTioBkqCcgGarRkWTCtCOocZeEiILlzKGgfFoJZxGLkSOoKgGIOIiCItFYyzxJtvVDdQqcFVMmvPcCyMmnNsKkSoOgqQGWiplyAaYLPmtdyJjYdDrRJjdDbgSYKkSsqEeAaQVBLiDdXQqcglXxnPHhfqQvhHVIlLoOEeTRazQqHuUNjjuUJYyLSQqsxCIOIEeeEezZXDdKksSDZHhmRJzBbZBCoOfFiYGgyIsSTSsvVxXFIWwqyYKSskcjuUuUJIGJjnkKNcNPpnVqYRSseWkuqXSslQqtTLfeDmwRrjGBbgfFvVIIuUieBbquoHwweEWTlLiHZdEDdqQojJlLOvhHVRroHhWgGBuWwRroHhOorRRWwLVvXNnGSDdhLlHFtYwNnlfFhjeIIiiIBbixbBXjEeJzHhqdDCcQZreERzJONnojHhZsvgMKsSkMGgFfmiIGgmbBXkKfFvVEmvdDZzmVvYylxBbRrXyvQYHoOHwWimMBbZAdWXxRhHiRrAaoOpfFPeEQsSfJDdPNiISsuUnHiIhEeLSmSIisMsGXouUKZzDiIXeVJjlLvBbVqQvPpOoyYPpyTaIcCNRrCcpPPAsSZzaAzZpPjJpGPCMvzoJQqjzZauUCaAiIPVvAaGVyxXYvMAaWkKhHaAaHhyYqQipHQubBrfSsTtKSsuEeGnNimdDUDDbBlBbeEzZLdEOsqQSFYmMyeEeEEeyBvVSacaAUZzOoHhtTTtoKksSwYBNnbdBYyJzZjgmgKWwLpEYyeIiPkINnzZiIMIiYOPIGgxWwCoEPpGmMrRYRrgYcpSEQXHZRXGgxFWyjJYQqrizWLcNnCpOouUSstTSsLHhIilFfekKEktTlWBbgGdFfDwyYddQqcCSZzfyYmPWwpZCcHAxXRrKkVTqYyHhQFmMVaOGynQqNkrRAefoOceECFzZEUuaHhpIdOTtoHOCcoBxXFfvVbyYWznnNTRrLlLcCAhHFbWCkDfFqQiEeTEQuUuUqwWmblLNLlCfFufQqTPfFdDtRjJZIiYyzAtzggGGVqlLtTiIeEFftrgGvocCOEeVCAaPZkKmYDdVmlbdDKykKYyUucEeiIeEAksoOYyiIarFfqhWFQqVsSvbFFJjMmfftTBYXxyVvfxJjEeKbcCTtqBbYyqXxQWDdDdkfFbYOoxXOoOoRsSDwQqPzZXFVJIiGbZHwWhyYvFfOpPIiNnIRoCrRctTOEgGCcsoOYylIilLAaqVpAaNnfFTtQdFvVQqcCrrOzZopPszvtRLlrTVodwWLGaFuMVzEeAnusSJakKudZRPUuaApdDxyLbBykNIzZgGEejIioHAahpPbBrFtpaAPxfFLrYddDCrRniyTzZherREHmqANsSffFFnOjTFfeRtTbBwWGdOozZLMWwaYANiZdOSRXLDgnUuNaCcCoPpOnsLlqTXtTWwtTcChtfodRrDObBFlLTXyeEJVvWrTtpoOPpPLjJFfbBXxzZXxlUuRSkfFYySscfkKUMmJjnbBeHxsSNMmnYyiIcCARiIrHesSuNnhHSwWsBexTBkPJzlLOosSfFZEXWwfQKkgtBbdDSMiISslLJZzfbdQvPmMbBpkMOBSTtWwPpRzZjFHhCcFfiOoRAnNaRBbFfUjKkJTmcyaNDdXcFtWgbxVtTAXxMLlaADJjdeTQqsSNDdfCcCcFWAuifcCXxFIygGGgKkMmhHgOAaTtbUuLfMGgGuoOGGCfFEerRMmmXHbBOhvVrRljcbsSPpBujCcJJjzZTOaAmMmmyZsEWkviVFfvTGxXiIEeCbwWQqBoOnOjJoNbBRrYygGmpPdhLfVvllOuxkeAaEdDfqDerRzZleorRYykFfdKkxXhuTtTtKTtkuhHYytCcpsDfPpjoOToOyYtMmbrSHtThvVLliQkEePpnNnNgqQzZiVvwWtTocCMmOoOQjGgqaTgQDYdDdDyNnCryWwDpPsSNVvpPnCjRgGrxXClQqYyZzMqDdfCcUupmMcCaFfGgSsZzPNaSVvMaDdMmmMrFfmMRuUZdnNtTZwWKIiuJHEehjUGggGuNTtnAGgSssIifBaikKZPGgpiIWtTsLrkKSsgGYyMmWdDqNkKCNeEnWcaABrRcVvCfFiDdbBllAkBnvVNbKiVvrfFRIZlLyYbBciQqItTCzkqQKYYyyZxXAaQqQMWVTtvWwTvMxXEtTuUmMviIEeNnVKblLBkjJLJjXMmxYaKkAnuUNxExayYBCBbWqQjRYyOoaJubBUjptTsPxXKkKnzZNkubBjJCcILAarRzWwZliUvVORJhIUBbpPoIjJiEqoUGGggiRqmsSXnRaArXxgBbHhOepPDQqfFdPZejeEJEZDUBbusSilLyYCcIwWvFcCfzZlSoOsVcxXCmMGWeESDxXXxuUdqQqfbBFcCIiYpPMmeJItTxNnnNpJjDdbSRrANnIkKOmMoyIRzGGgiIGHZiiIAIinNaFuWzFEefOorRlgZHeEwSsZaAzCgtWwBfyYFFvVDcCoOBzNnVvvlLEuUrsSRkFfTmMUMmuZzSNUuZqQznspYyeEyYAaUJTtjupFfPqQdWwDScCsyULYylSVSkvgGkHZPmMAapSwvVgUmHAzTQOJjyUXxTUuTtqCdBbvVLrCcRMmGFvVVCcGeEssSfFIrVvUoOIAacCjJZzwYDdyScCQqPpnNkNnCcOGguUoOFWwtMuUDsPpPBbzZoOpnNSdkcCNAamMJItTisSVOhJHhFkklJBpMAvVaXxjJxRrQKkzVvZgGLBMZbvVBbBqQBJjuUMmbBJjzjhHJtTzYhHSbGprkrwKTYlFfmQqWHEehWwWwXxLMQYynUQURrAWFfJYKRziIZrXxkXIBbfmsYFfmhMDdmJjHTFkKvVfWwlpPoOLiAaIsSpGGDTzSbBYtdDTyrRWiUPfmnNjOoNopeEPwWmWweEMKkOtEehzThAaHFyRrYspPdDSFfVceUSsqUIvCccBbynpPRrQqNYCwJjcCNwLlWeEnNiXrRKkxbBzFJZzodDCccgGPpEejkKkDdNuUfFCuAYZzxXDouhCcHYNYynNassviIVRrnNpWwFfXoyYOEWzCOoXUuScsdPyYYypPNnpjnRrNyVwwWVDysSYGyorKkcCMJZdDymMKDjZzbhJjAAarRtpwMmAXqwcNqLjpPJyYDKyGgyhHFfufGgFOorRkKFiIfUkKuqeEnBxXSsKQPpeMmEFmMdQHxXnMRrXQaYybcCBDdArvYyuUVJjXxyTtDdJaoOAYuhDdHSAsSiDZzdIaIZzAkKawWiVGbRrCbKrYqQyqvXxAMmHhFfqQAaECpRafzZfgGhHPwWfsMmHmFvNnhHVMIcCKklgnNWrRQqctTlLRHhrGldhGgHiiIYftTFAdDYyaPppwWPPVDUuyTppJjHZlPpOoXuAaUfFnGrvjRQqUKkuMkbBUIizZwWEbAaTtBSsszZqWDZzpPuCPphHVpPrEaAJfZrtXwkjJKczXxIyYctPJkhwiILDDddfPPoVvNHmOoMxQqXyiiGguylLYHYyimMIiImMhrKBbHNnzpPavVqlLMQCmxVrRmjjPpIiUuYyNwWnrxlLFBbUuRUiIdjJTHteKkETMAamVkKTzZLGglUvRrVvnNVJHgVhVvJfQPeYyEDIidPSzZPpKkLTXldDTdDOoBbtEeexVvwWeEfFlclKeEGhcCaqnNUuMGTtDgGEeaPEpPiQqyYLnNiuUVshXxHqGgyjSLIXAElLYygGJNnVWeEDoOdtTGocjsSJvIAayUcCcTIWEewWdDwkCcKGmMDLgGvhHwWWSsYDQzZKOoJzGBbWFYmMyfZzlLwqvDNnHikwkKWmcSsXxIiCRrMLlsSeERVeeWwgGrRbOoTjJDdtcXLUuTKErAPpatWwtTTRsSkxXWagGNfyYQyYyIVvYyPPQqpEHhoQobGgzWsZUuzBBksQsAawpLllBGgUQqckHWwhxmMXTjHhmnefFoOEmnLixXMmbBFfiIoOmMniGzZgzvVcaAaITtvVSsVvPpTsOovVfFOoIlLNolLOUuhHmMnLlpPyOoLzZUFouUtTORGmVvcikplnNJEejLrdDRIMQqZGggfPsgIeEewqQWEWMmPpDbBpPdPXxqDnNYymRrnNDsuZdDdDZQqUJjjmMVNfQcCcCgGyYDNoOtdCcDHhdXnDdvFfaHhHhRMoOlcCkKPpwJjnNaziIiIcsSpMmPlLCtvVZzheEVqQNlJEegGIucCOomSnNQXxPRrzaoxdDNnVvdvVDXVveEOfFBbAGmXxEaSxXIijdDJMmsdDdDXxOoaBZZzGPpqQgiqOogGOjTtJoAwWaAapPpfFQvVzPpXbBAiIKkavUGgMKNnpPsSAybBYUuaYydKRchHRQhlcAaueECcswWJRXDeCGhyYiIQHhSsOYyGyYVvOIsOoFfSBpPMmMmsSClLcxXEpPSTWqQwtpPIiGLlgpbBPgGsAxAGgajQqGgJOkRrWiIApSsVvPaYrlwrxXGgrRqeEfFZHhHeLRrlLIiEelNOohuUHCceCcUyYAaQqpPFFfrRDddDhHNwlnRQFCYiBbMEvVeEeWwmwWtTIuUgjyYWuAUuatEJPZaimuUZUxGgXThYfEeUutnNTVvIiiIgXYMmlLqQZKbBolLOMmkcuKkAhHfFDjJXdpkkKOMmJFzZtqVHLUuhCcjJHwvuUfWwOQqoKkeEVZzerMTLltmBIipPhHSsIQQqqasdDSAQaAwWwiIJjhcYkKcCdpPSgGGgywworvnNVVvGfFBOxMmXFwWoOoOmPEubBkKgGUuOoZdkKTtaRTtHQEtFIifKktTvVEesSQqLNlLoOnGnKwWVvuUrMkKmRzZKmPpggwdDkIvPTwcCWLlbhAlpPLaUPccbrRJjXeRAPcCpaGgmoOiIMOobBOAaPpoMkzXxgNvAaVnfrRFpPEejJpilYzaAZcmMKcLyYlSBKIiIimLlLHxXhGfVUuzGgvVZvDfFqmMeERrChHhHcLxCcXZzvWYpPeEzZyrFfRMmwQqoOsZPWwBbgwWHhGgkoOKfFnNcCjrryeEYovVvhHVsHQqHhYypPKmMktJBuKAarSgGKkswWUsMqQmrRXxNIsJvVjZzjKBlLZzPNnpRrHuCDdctRaiayYAQjCcJqaAtBbTnHhcCNNnpTQSnNqdDXxQXMSshHjOoJaATUutPzEetTBbqazHhZzZAzyGgdrRDuUGjJMmQBuUBbbpcCPLAXxalsAxeGgIOQqYQmMdrKyMGgElLeqQuVvloOFLNnLllmMatvsSpPVtTMfFjJEEmMeSTbeHmFfSXxsMhIRrXxikXOGdMFZzTAXicHhmIkKuYyeyYVdDvNnhHuBbkWkZzcUuxtkKFfDBbdJSsTnNtjPppPLIFaAMmWjsSamxmMXEXxeZcwQqWdDGsSaaAAgCsSQvDdgpPWwGVvuXHiIZzJjEeYySsLfjJcCcNTtkltTTtDqnxLlXWTtwwVvITtiWbpoOnEerRAaNblLjjJwVSpSsViIiRrIrRmMIKkdqQclbyYBtbBzWyRPXxpCrRAatTcqNoOZznCcIiqXHhlYiInNcLdDlbBPtTpaBbAJVIkPMmXxMhTtqrRQJRrxXjoONzZDPJjsSCgGzZMKkmRrZziwgGfNwWJjnjyRQqrWwbBVaSsIigGASWZzwsPgGpvdmTtzfFZRrdlLwWDsSLlQWwqnVvqAvYtTAaJjyEekDdQmMqKkQqeNfFvFfVZNBbSLlsnNDdLljaAJnNJpPmMxXeEtTDfKkoOBbGgFdUPBjJbfFBbyvVYywbBzZWwWeEdDiIXWeEtxXMmWbZOozNnOoBqRrZOMmEexwWXtTozODdeGLlvVBiPpIkVJwjJTXxRZSGgaAsYywWzROHWwhtIiTTtTHMmmMOCEeSvsvVeNCdOLBblyYoAHhQqAagGtdPpDzvVefFNnAEnIiOoRrNeacCEZCEzFVvcQiIqcRrCDZrRthHUuTAaJJjIPhHRRrgGrnNPpFYDdysSTtaAfReErpxXDhHVvAniUuIxPpXjJUupsSQqPcCAhqQbBFCccCfHZzfFQsSqjJbEgGeiMmuCoaFfAMmeEOMzZwWmKknPpNxXuUQgrRGyYTaAUunZzWQqwcCpPpwWPGoOgVsSyYTtXxAasWwHhNfeduUbBhHYqMmHWwZbBzVvqUhxXmMWWvVVvhqQqVBbvlgGLQOoPHhVSsjfFtmMSrRYtTHgGglLkKXSrAYyRraFOUJoTOobYyWhHROJaAfFFfHAYXxiBLvxJjMmXunNrRiIUiIAWwWwRraDgwWQqjJuUSsgbBGdLBxXbpPJjlDOoIiYhAaHyeTOotNnUuUvVTtevVfSsfeRrEFdDEBbvVBkhCEsRrrDdTzZJRrjtRFmDGgdMpvVdxQqXCgQqzwWZRrRWwLlxDyYmMgfjmYysuUrRJjDpQWwqruUTdDtONgiPtTpgZzKklQHcOoCGbBguYBbQqvdoOqcCgyuHhUoOmiIRrvVLlnfFqHGglObBKZzEekQnqEgGeQkKxAaXVVTtCcvvRNrfFRwVvGgWnpPRdfazZEeAVNndFfBwxRxXYXxyfFyIfJjFkKwWwWPpiYrRzZroknNKeEOoOrApPaWwFeEfVTtveVXAYyawWmMGgGgxrRHhEcZJzZjkKArRaYDRqaADdKkgGgGtTNKkkuUdrBbRRhJjwWGgHaAlLruLEelRRrlfRrAaFLlhGgKpPxXcCYykgGTDdbBVvtIYyOYyhKkjJHmJpPdVvqQXnWwNxtDdoOfIiBbBpnNPbFfOgGoWwvVXxFRAawWrGauAqzZcSsCsSOorRreiIaSsAEpPytuSspPlLtLeEsShcUKkuxXuSsUFfCTtEFfeuLLwWliIamCLlZxgGhIiHUuTtvVxXqQfLMmljvVJfAfteETvVUuzEeGgZRMQxXqkKgGCBRrQNnUYOoyuURZzANnaKkEeBbSoOjJbmMmMBaAVmLlLlMODdwhmMHqRpGgEePdDUHmqcCQHhmvIIiiPwWBATfFfFtWwuFhvFtIvUusScCgGUmMuPlLXdDRaMmoOAPpruYyZzOVvsYrRqQyRrLldEkKlLZqAGgUlLuafFTtUEemMvPpAaVeEqFfHhQrRwYyHhiIRIiWAzZQqIcCRrsQMuKkUtTmKkNnRrUdUuKkQqVvgGDPAhqQHWwrRBLlLgXxSkftTagGAwgvVGIiWsXzYyZmMPpJGDdqJCqQcFfBbUcCsBbUaoOiCcfJjlXxrbzZBRTtaAiIKxksSKUupPhHeEUujaAtaAFfpPvVkmZzNnghHhsSHahrsPMYyrRGgmESPpseVvuWdVkyNnQoKjuUxXRrvVlHcChgGeppPPEScCULtXxgfFgOowWAAaRrLOOiIAJDdDFfcRIiZwWzbBCcTKkVvAajJHhBVvbQxUueEtTIimMHLlhfcRruqrRQWeEwBQqxXfLlqNwVjoPVvpjJOGgHywWQqqQoiIOsSOcaATMmsKkEewWSIUtTAaqQJjGgivVFCsVhEvVerRHvoOVFfNNqqdeExNnIiveMmAaSspPEOKCckNnopfFPEqQIaAVYtvVnlNPpnwWLofFKYKzZZJjMzgGFdwuxXuUUWMmDRrkUGxXfeSwNnwTtWKcCoEAaxZzXbTspPvNnqnNvSkKLWdmMDuUXxJKkjHgdZzYXoOxrRydDednNDiYXxyKkUuIPagiQqCSNontCcHhTMIimeRrNqrRBRrrRpLQqlLRrwWGgVvuUiIGglgGVcHgGMmlLBbVBbBnAaNxBzjMmMlLVhHRkdDKiIrKCcZyweEWYzZzhiDdFPQxXqpKsDQMmqvKzZQhHdDIYOoyiqICTcnTtNCFFffeEPYKkCZzqQcYdmMDCcUKkRqHhhPpByYVvNnjJJKkPpiINnRraAZvVWVpPtlLTvzNnIWfJbBWwjFUKkLBjSsJuUUFfuiIAAaQHdDhsSaAeEOaAnXxNgGRroAasKkSNnuVvUXxUqQJuUjkRrlLLMEGgemAhEXxjXfFxRrJYyHZwMOomKBbkWfnBbtTNeEQRSskKMmrpPqYvgGSDdNoOqQmMNnunYysSPROornNpPxPrqQRFfwWFfEeuUhpPRrlLDYqQUqfdDCcxXFfFKkQrRrRYcCkFfisSLNnFWsSLhiIstTSLlrHhcpPeEDdCuUfFbBFuUJjfbBNAakMmCczZnTtDAacCpBzZbPCLlCchHcKjJkgGabsZEHDTWwtiIuUdhlLHYbBGgDdLUVvulcCLOoSXMmJqiuUIPpXeTJjpuUEmMrRQqtTAaojUdRAlyYLarjJggGMmIpPZRqQJMkNQqnXxsSqgMCjQEbhVvHuUBgGYyemNrkFftTpaAfvVFmcbZMOoiIFXKaAIRJoktqQZzyzTtAJjrYfFRbByhHXIiBbIixXnPpPpMmIiAqnwIiWNQqeEKkmEhHxXefFAaMGggGmIcCYyuAaUDpMmkaHiTjAaJTyYyRrYywheEUuFaAMmdDfXUuAamaFWXAavVaAiWwIEcCQvVrREexgGFbBfXIimMMmqaQOoJjqcgGyrRNnSbATtagGBdZjJmMQKkLbPKNFfkKcClxXLfiZckdDyYKkrIMmjkSsgDXxSsJjcMmUuvVuzZdpPTyYJqQjtoPfFHhpODeoIiOMwtqQoUuUuGJjglLOTVkKHzZPbBZzpnNAwpPyKkCcYYyrRGgPptTlLgZzjJGpYPpWUuhRMmiIrHVZJjxXWwCczAaZgRrGweSsaAEIibZpPJjzbBwWIeEKrRlLkAarRjvVlLJgGCcLTKyYkbvVFfBsqQSsJBbkKnNQqklLKnuUNjBbeEhHRreENnliMtogGmMkpYyzlLfFGgysSKkYsSHIiheSfFscCLCYycHwWhPphHrfFoEexFfXDdtTTtBThcCCuUNFnNfIqQuqQSDdSPpsCcUuKJjaAkHhqEeqpPBRtTrbQvJSsjTtrgGhxhHrQrcmMCRskmMKuUaAtTBPdDpDdoOjFgrrRtTRrRzXxCFkrkKJjuScCszVvAaZYyURGYuUaPpPNTlSsrKjJUueEJjkclLFfHQqgGUuJjhQqtTjTttGCcgVveETTPptGtTcCeEkuUKkFfmMaAWwiInTilLBAabBbswWEaLlAMkKyYmeVvEeRrBbaTtAkEyqdsBbSDNnFlLfPpjJDdMEjlgGqQZQdDqFflgGeELNMmjJnBraAPplzdSsbsPpSyTDdIiAahtTLiIJjkBbTfFXxQqbBjJPzZEeXyEeYoBbtTHQDzNnSPpspPJgGjHhuUGyYgZOuUoDxlLEejZzsSDdhHJGgCcLfqeEQyYFmqcCQIiWGgmMwrRMBbsaAgGlyYLShHmQqMYyhHBhZzimMtFfbBTeERrLhHlZzrRQqIgGMmVEevoaAePpjJByYkKwjJkKAaoObBCcTjJtNnWLwWtHGgeECMmFCcFfZDrBbpozZXTuUtQqhHfFxdwWCatSsTAoObrRpIiPBEeJjTtnkKMJjmMCAacXxGMFNyaAoOCcRrBSPpeEcCZfvmTLlLlVzZBbkKKkvrRAaXaxXRrAmKJQqjZzIikMJWZzeUuEoEenmMKkNcBfFaABbpPBbDtjkKJTBbdokKCcuUOfFAQnNiILlKFfkKIiBbAySsYgWwQUuqGsIhycCvVGgYwWubxXBbBcCuXVvSsgkKtTUhHuhHPRrpBjtTJNnupSgGsiIJRVvrjdsSDzZzKCckOoJjtTviIVtTTdBbDURrkKufFdjJoJjXRRrrxOUHbBlvZzVLhzZXgFfGjcyEeLYyljDdkCwwWWcKGpPghqcCMmQqQHWwPpnEeiIKQqXxGUuCclLPpgBbAafrRFhpKiGgIrJRsLgBTtOgGiIoicCBQqbIVtyYkdDSsPiIwnNUugGmMNIickKChUuDdaAaAKCcaARrvQqIiqAaGgQVwcDqQnhtTzZBbGpdDLlOPpupqQUuPtZzTvrRUTaAtWRrOgGAaDdWbBWwunNQpdDLzZJXlacCAJawhHZzZbBzWAMmoxXmMOTtjLwWxXxYyTycEeFfCYFGnNzZImMKkiaAcCaALljJgHqQNFfbtTNnBnNjJAeEOEUZzKuUDdkUubdeEDCcUuQYyMmfAFfadDEexXFxeEVuUymMYzjPLuUUqQrfFVOoOoaARrvEINnEeGgiDdDWwNbBKeFfEkCENaAnvVpOLFsSiIWoOwfVvWwCowWOOeIinYyPpfTtFRrIiIxjJXNniDwWsoOmMeZhHzENgAWwavVGhHnNMmbVvQqXxFEogkKQqDdMmrtxMxXEecClLTtouMSBbvxmDdMXydpHhPZzcCKkdWwDVrrRRuIiUpPcCvSqQAaQmMkKmMqSRrKkQqQTtYKkyJjmMqGTtgleLCclEXxKjnNkxXKTSstxtTTtAOoMmYyXzogZzkKGtXxyYSMmsKTtkjOobBJWtTxsSqQJjJjzZcCtgUPpuGTfFzZrxXRQpPbBqXwPpgLLlQibKkBvVIaARraVvAEmMeqqFfyAaYMHhaAYjJrpPZzlLMEDkEeKkKdLJjPpTtlHhwWESsSsQqSJKYyQqWwDdNndHhEwPpWuUqvnNuZzURrVdZzDvVQeEoOjJFfnJjNdSsKJjuUknJjqQNVdDBsSiQeucCUJMmZzfFBkKfFpCOwHhWodcqaAQCDcsSvJzZIksChHcSUMmzZuZzIKEezZktTBbAxXehHeEElLTtTAMmatgGwWFfMgGcCascJjrRrRCpPkZzKbBbBSXxGKkDFoOcCsSGgEefdUumMvVPSskqQgTtMyGgiIYGgOoCvVkKCZCcwuUWVvgGzrsSRzpPZatTAgGchgiIGHlFfLXZzzZUmMyYZzulXxaALBVvIilxXGfwWLluZzRjJsSLkKzhAaLuUyYVvxfJjFEWqVvvVQCPpcbyYCcBSXxsbUuzZBCcwWwzCwWcVvyAaYzZhHlFmMfLfFZeXLloDdHbBhOHYuaAUAVpPvanNZiIzerxXREeMbkKBJjDdmIiaASxyYxFfnNDdEKkfFeRyYhHbiSswWWwbBIlLFtjJEeKPpDdTaAaZCczIiZzdRvVcbBlpPLbBJjmpPMwRIOoyYiesUcvVCKknFfEesSLlNuYqCtTcQaAyCEecwggLlGNXxoOnRbaABrgGiIGXxwpPCSXkKxsaAcbmMFfyawWApPpPigGWRrtTwzeENnZeEuUIiIiIieEIqxXRrisSCcOImMTtHxNInNVZkofhHFOnNRryYdDKhkMvxIiTgGkmMIaBHhbIiaAKKksSkOFXxfomMCcLeobBOEfFfFlgNnSuYJjyIgGJjUaGgAtTJfFoeEAaOfFWsSxXwXxXxVqQvYyXxbIGgDdtaIOoiATxCcSsDduUIiRrJjXxBbaAoOgTtjQqhHyZzAaAwFfFfWWwRrAUuaRroOtToLcAaCjJloOQqPeEpZIizoaAcXxgGCSsMwgGuwWVvUtoRrIHZztThikKlNnbiIBLsSAaXyYxOsSoOMmSspPfFuUGpPlLpPVSVvdCcDDdwWbPpNtXxTlLnHhKkBsYyIIjJiNQxXbiIRrbBBrvLHhlsSVRzrRrRjJZkKRrekFfKLlmMWwdRrLlDhucCUUOoxXIiuHmMRwWrZGgzEMhHmsSPUuMkKmNnMsPpDdNoOHhLlWwCqMmQRkIiKrXxDdSkeEoMlLOomRriUkYyKuJOoXxjUyPPppYHTtMuUmIQquYyUJpPTtkvVAcPpCPzZlfiIFXxLhHMmHQquxXoEeOtTjJwWAFCcoOfHhcnNCTtNQPpRXxrLkKlUQdDqmMPCUucnNYypKPpkueEqlLJJUujBcCWSMmlLPpnNfFswWiIRrRrvVhHdaADnCcAaJjAlKkLZzaeUuXxNzLlwLlWZnGgzSsZUsnNSXaRNVvKoOsSRrJjYYwLluUqNntahHizZIQeEqiIUuAaAvVmLlMOoRrLQqEQOsKkSoqQOoqjoOfxXHhFRFfrJjJIHhiUuTtCkxXwHhWJpRrUtmMLlVvTAaDduPnNgXynQqNhbLlBlBbhHLHYcCBULluNnIiKsSDHdbBPpDFfQEjJEeedHeEzZGVZzvCcPYyuUpeEmRrTSsZzbCVXxzMnUsAaIiSgGuNlidDBbzZDdrRIIitTLceECSpPsKkvVQgGmMsSDdBszLlZcCZzjJSsJjdMmLlReEriIwWvVWwDRrcCxgAOoacGyYgCkKUsoMdDmOSKkvBjwWiQmsIiwWvVIarRwGgTtwvqQVvrRVlwXxQMmquMmZzUBbDdrRSLldDEesStKkkLCclOLlfFDYyJjUWwKkjJuxXsiwayYADkeEKdJjAFvVpPZzAaqQkUunPpNSszcCWNnVvDGgxuUoOnNYRLoFfdDOlOcXxnNmSsHQqhVlLvMuUCsporRQqOCcTtYyYydrSQKkyrRODdTtTtOoocCyYzZloOPpLDdWwqkLGgljhHJoOTtMTtmKiImfBbSsFYMahAeEaHAkKwXxtTWOouNdDNPpnhHIVEeoOCoODaHKlLkDJjdaAUVvuUuKkXWwxHhjfFIPSgGsdiIPpjJTNntbBSqQsDlLHsUqQupulLFfIibBUgGtTeEvVEUdDuGBbbBykKYgmcCfFWQqSyltWwTLKKqQTMmJjtDdYyGgzZlJjLVmMcnNCIURrKLlkfpPFzTFftOorRZxRBbrLlWwSsvFfJhPpHjrSjJsXLvVAaDdyYlozeuUELlfFbBdDmKkekKaAEFfzZkKMDdqaAoOzhHZQqjJQBKkbeVvEZsQqaAmMuUeEVyYvBZzMHhmnMmLlNFfbAawWlLFfGNnyJjYgBnFfmMEeBaASscCbfFyeEzHhjJZlLYPpVAaRuwWqQUOqZzNdDuUvVYygGnIpkKPixoSsDWwbBBbDdjMmJtTUudigGIOlLolBQeEJjHhnFJjfnLlFfNNcZzCjJxXHfFDdhgGqDhYyHdNTtnbLFfivVqQgGzZsShxXkKWwiIcCtdDIGQqgGgOYcCqAabBkLlbwWUttTBpSsPkdDLlKTRrtrRKkrRflLZzFbaAOHLRrJjlhCBbwWlLEeWwXxWMmQFfLIiIilWwbBqHSshtTPTorRpPOcCtBbLlXxYyeEAkKJjroOcCRaCNncCLlBbEVJZQqzJcDZzxXJjtnNOEFfeofFzgGVjJvUuDdJjBmblxXzZLlLtTSsisSHhPKrRMmkEMmkMCzZcmKoLlgGcCOoyYVvtTsSwlLWXKkhwWHLyYAarRlvVHrYytToqQUuafFACcaZzxyOoyYJrrRRjPIiJjehwPpmMWmuUMnNUOvVNnoJjHhuFfptTUuPyhxCcBTtxXbUtTuwWXGjJNvVUXPpXxFfoOpPjJKkQqyZzLlYYEeyGgDdOoaDzKYykHhZHQqhOoTtRsSCkKGBNnrRfFnNgGiIjJShoOrEKkePXxpRtTYySbBOohHNnkKQqSskvVPpKWWFPdsJjSVvtTeEGtWwfNnFzRrZIyYNnmMpkKPSsjWwJWwGbvVBXsSPpxLkKXEexXxwWIFJjfxXJjDdaANsSUunGgyYuUvVCcVvISkxXKAaNvxXVsnzZNTtVHhvNnSmMmMjzZJnsRrRZVvgGMmSCDdcxUuDbnOsSxXoeEAvVaLYyDTtlLMmdaubSsBqYyQoTtOjwWJKkPiIpWwiLjMmJlUuYyNnbBVJjgsSgGQLlqGOotOOootTEeGgnTGgAavVNnwWQXxrRPpqQqLuUlJjEcEaIiAeCFOHhfaAFoxXOoXBxXbxJjsSOolLLlfzZnNLlAaeZzxXEGgeEdDlLbBxXnJjbBOouUfKcjJHhCcCdYyDsSMmGgvVMBbmDdCcNTuEfFeOHhTtoUtnMyjJYXxBtTIdDSIWwisFfkKATtgHdDXWwzBbZgGqXxQlAaBMYymNYgGykKoOBMmIiBbbTtiOoInPpwSsWNCeEcVvnbBMmuUPpbBGggKkSshWmPpPpMGgiBsSbIQqtTYyyYDJgNiInBbqQGAaiIsMmSjqQDdCcJApYyPEXxCcEeCchHNBbnqNnQMoOLaAlmfFMNnmXjRrtTJWhHwxzoOhHFHhSsfoOJYyjsSgGXxFfhHTJjtZfFGgEegGENnYycCekKgGmlLMbhHzZBsSdDSsGTtgHhpPrNTtXjlXxWwYyvjJxWwTFqQfvVxmMXPptoONnTSAaqQsGgtXvnGWsSwplnpPNHhLuUVvRdUuXdDxMYymiIuJQqnNjUSsGgDDdyuUHhEedDbhHkKBRrYzARraZnCcRrNfFaAdoODEwFfmBbMcIjJiCECcDOofFsSdxsSMmnNwWXeajEXxeEfUuFVPpvhHeJbOoBQcCZzICYyVgMJjaAjRrAaEzZjJZcuUCzpPrrRkKpPgGeEXfFvVxWwWweEWcaAEeCyYQqQqLlglLaSsQAahsJJIifFiIRmMRrIiXxxXEerjsSEeEUueicCuUbdDnNPpPpBIraAMmRGjJgjWwCzZmMoOcGgrRmxzZTtfqQFXyxXYOocCRZYyuUSsgGzzZidBNnBbbrRBbVbIiBvDYyIBbCFSsUutTfcFfBbkKuBOobQqwuPppPmMrReEUNVaAzZSsuUUuNOonvnlOoLWaACQqlcCreEgGnzzoGnNwWXxgYyOZnNmMZSsnNNGWwsSFfqQIrRUuimDdccCCMsFrRAafttTTyiIsSqQJjhHqmIiWJjpadDqQMFfZzmGgAPdDZzwGWvgGnoOoOmMzZNVQqHhQqBVvOoVvfVvFEebnNDNBbnvVdXxiIhxXJVvoOehAaERrHhKkvVWwPFfpWwejJHEMpPHhWwSbBsTLEeApLlyfFPpiIYSnNsUrMmRuwWgxkKXGqkOVvfFnNmbBNnutTUMoUuKUufBbqvVQWwFjDdoOJQUuxpUulLPjJfQqFOKkLlonNPCcfFsFpPQqfDdfFUuSVvpWwRrXxtoODdGgTsuzeEZUSXHhMmrRjJXTtfFxeCcEohmdDMMIimHOQqhjJDNndVvNFfnrHhRQUbBGguqjVvCvVcJjJAxXaHhbnNVvlLBcCibRrhHBIKbBkZwWzDdSKkKkQqsKktOQqpPtTfFIJjuUaAyzToOAatZPRrpjJVvdOluULoUuAaOFfoxlLaVvAZzRrtTGgUutTMmMmjJlLTtVvuUgGtcCGgTQDLtTiKkIliIdqYyTYyGbBgtXrRefFEnNnNEAagSwWJjMiIVvIWuUeEaAdDuXMSsmkBnNbUKktTZzutTYbAaByRPpqQGgiuRkKrUIYwWmpMmPWwMiIyeEFfAafYbdDNnMvhHjJZnfQIkKTtqlLQipPvPjJpcCisSIIiVzZeElLSsqQCcPpFEeCcfsSiHhIFVImMTtUIiuoOKkRrqQYyifFPpZnNrHmCcMhkKRJjeEnNzlLSsZZnNkKmMEebziIZTtnNVvsSBmMamKkMiqUuQSsdINnicCDVbBvInEeNUuAJjqwcCWxXQzjpPJxXwDvVdJaAjZzyYWeEEWQqxXwyYeKkqQdDErRjJAaOorReTUuGYyQqgQbBqwWzZDddgSsAHqQgpPGLVvOomUuMlRVaAUuapPKkAvngGrJjTthFfHRtdDSsgQqhHFfGCcTRrNAakcChHKvVULpPQqGgFfhHdhHDeElrRWSsgGOxNFfnXowKkKkKbBkNyYuEeXxLlgGxDdyYXgtVvTGOuaUukKAcCNCcnURDdsSeEOGgHhAaGgNnorZyYwWzwWLlxVvYyXbBwKkjJWityYTIoPptTXxMIrqpPQRigiIGPpPpdDZzCcKgGqQOjJTtpQkKvtzZTJhpPHRrjJjIiTtfvVFobBoOOVGdJcCcCcQqMmVvGgCOoRrjyproORSsheEHWwPtTrvVRlLQqGgYZsSkKnNzjJGgDJBbKkYyWiIwjXmMxJjkKccCCcCbPwUuWiIpBOovQqsDdSVtTIicCvVgKSIOoisUgGufKUuktTtTJOoyYjOoFhcCHOoTtwWLSskKlkrREeDdDBbTtdmpoOPFrRkKfPFfpkKLwWlMjkDIidKQqPpJGGfFgpWKVvkTtjJbVAaUuvFfdDXxyAabBvMmVYKkWwlLJBbSsBbaAjBrzZRDfFOoPDdpdSxXyYsQqpPDdYygDxXdEPpeGAaEeBPcPpuUCeEIiAsSvVajJpIZzieEbBVviIEejQEVveDdlHcChLVvqJQqjyYsSJfFAaDduUuUDZEezdzZdXxBbNnTkeERNnrJjekKEnbBNiIKtGKkoOQyYsSqQTtqgDgbBGjgGzZJMaoNnqyYfFQKkOTJjqQeEPpJjNnxXBboOtsduUxXUvVuPpdqXxwWQDeEwRrWXLlgZzAagZnCcNzGtmMTmIisSgGMdDyYhtCcTRdDrkKoOoOHZdDFfuUzXxYbGgIiGTqQtgLlzXxCcZNJjkfAZzaMmFYdDyoWwfFOjJNneEYyKtRrUuqXzZxQEevVDyYPpdgGWwbdDBBbYyTgOUuRrsFfCsScSSPpMmsojoOJWAawMmRrGmeBXxvXDdxVLlbygGnNLbZzBVPpZzvAaBblYlrRLDdnlLNwWiIcaAMmCiLlILliLlImOopPdDgGwDdWMVJjJjTttTNnfytTwWYOoFkEeKHtTaqQAhpPAatTvXJSLlLlBnNbskLGggmMRrzqQnkpQqPlLpPxXJjKFnIiIiNfNdzZeEDeYyEVvkKIlLiqQvYsSAaBrRHZzhbYytTPpyUAauDdXvVxhaAFqQcTHhsStCvUuwWVGlJNntvAaVTqQiIkKfIiWwAaFjLlMmAQqaIiRrtqQHhUwIiWuTeIuUKkiEurUuRULsSgqQAatTCyYcANnzQqZcRbBOlLSsorClLFBbfaSxXOlBbLosMpfAaFwCcuUWPWwrgGLAaRriINndDoYmVvMNMmnOkKoyktrRTTRrtKvVxLlBblLXXxOEEeegGWwfWwFGgsSsSqQMmtTnNyOWwoWwfFeENHhnjJWIJjjJQqiNnQqbBQqwkPpcCKNuHDJjdNnxXlLFfhUnPpPTGgCcLltpCcwKkWMtaAgGbBTDdFfxXOoNHhnipPIqUuCvVcQJjmMUsNnSjJnNhHuXgGpPRLlLlfXxFkKMmrxhBbNnoOQqHyYLgpEsgfFGSYyeUbBqQnNTtYybBuPoOVIiXxQqQqdLlDvzrRZLlXxGXxKqxXNnTtesSEQgyYGkQrRqqYyQtcZzCdDtTTKRrkvVfqQFvlXxjJeEIiyeYysIiScCypPQqkYyKFHfHhVvFhfZzYdDsSHQAaKknyYNqSshqQZFfjJfFlXxLQqzCcBbXxQqgOIoOAaiovVGEegGfjJTtFbBjvVsSrdUuDiIRSTtzZrRsNnJYhHOYyoykKlWUuwvVDdUuvdDVKkFQlLqfLyuUFfsXxSYKkdfFaADtCzZxwWXNnuvVUcTJjapPIiqQeaAEeEFfAljJeOrRjJoNnCcPpEKOoQqkGgNCcnLSWuUrxOoFfVcCveOoEXLlNztTZnoOrRHKkLlffFjxXJFvVYydDhIyYsSmUXxuXxwWMYyidDhHhfWwfIvViqqQfFDdQCcKkDlLdFefFNnAaeEEcCFYxXyRrcWwbBPppPCfpbBPjAautTUvVXmMSsaAcCxJJjXIisHhSQqxeEPpaAnNNiirRITtWwTTZzvaAVttIDddDneEFfAeEcCFkKFffaXxyZpPwWCczJPpWwjfcCIiXZRrzHhxXxayYAFuUNiInEeSsaAYGgOeEowWHdtYyYyDdTqQCRfFrcDuUGggfFGXfjJFNCcnhHlLAaHhxocCVvLlzeEUMWwmnNuZhbBHkKbSsBtTwWHRrNnhORU diff --git a/day5p1/main b/day5p1/main new file mode 100755 index 0000000000000000000000000000000000000000..bb20722e33b45bb24982b67de44eb3c1371a8ee7 GIT binary patch literal 17400 zcmeHPeUMvK6~EbZ+vQ`ErL?$|N<*Pq)TY}{7qF0Qo9$a>3v1~Dew0VLdAl2%O?HwO zXsc*tp<}Eo9mfyUQCCKh@mpk&!5Jn{DCjV{=&04=xL{=xtFkK8wMgUd+yUjcI{LaTc_q_XV-pzZr?~CUnB?3$^nc`vo7 zBPdK+UTrTV#Yl{sPLTo%Q>PudEUl7aQQG9D59xjvHDxXz8r+tan#TpM0jt*x)t)`m9-vuDRPGht<|p=8ds zvOBhIPG!>8j`*$=xf~kFq_s;^sn%3PZs=NSl7D_pXAy;yd>*bLKR&b5?77KgE6q$3 z8e1fJzxcA|^GlLvkmUp5sqj3>^IDreDbso$WW1=qpYD!GGr>6XN3T*i%~3oL5HjV! z(Qvht95{_NF4GR&IX-3___?eM+8$BN0uagrmrz922&Z|7%gTtV5zccfAsrDq3PHI1 z-jbXUoe@Pk2gjXL;7c{syyBtQ4HZYq17@R zQB}eNRaA&k2Of0bdmK1_Cy;o*1J|dPVDSM5PIGvpG&0c0KqCW<3^X#($iRP|fjAbSxdBBww$8iiUi=amQFv-eO6_gdfAf9e@ z%9E1+5%EpL7bX9F;^~&B{7uO}Mm*i>lqV$rF!6MYQ$8g5`-!JpoAQ3if0=l?y(o`L z{vP7#R;GNjxfO>6WG(k^BdVr(3#mhvaW3o^EZ*A<6F}o^EN%ZIaIt zPq#8<0iN=+=J!2?XKpeI&l_XMr~7vFjyIo&c#ZMa&!HQ}_@)EsU1jk{!a}@s2y71= z7~{=dL@t}L7bCT4$SAdERHlN<_QSV0tSR)*m--tP61nuW@#ty4QJ6L!EnQ{!ju_9J zwim%cOgm_)ObrH?ZJD*F`1Wu53B)45uHP8jw4AC&;Wu`xad6XvU@D8-a4Zd=Ge?@g zimGqt;lXfl*&P&yI6OF8r}Inx%0tlYhYt*lkWsj;WEApK#=%(07~e37Oc{kIOAnl` zRE$Dw+8DcSTIA1@QovsW{1EvqPv8J_`e7OhkKiNCc9I!Ta&eJ#@fg@CqtM3aE3Zlo zv?mRgs&;13&Wy+}L%RA9K`G|&^GR69HczaUz7BR62m7Z{oiPf}JWL~#S{qP)Wy?dV zKJ&f9)XVG8%}#XlDRi^=WQyqJ{3_d9CC*VQItPXjJr5pff74DcNrD z&fVx1bsLV=>7+rMFb>XJv62FZ+ciaFoMJnI!LtMtLFpno{nfF1i5jnTgp-mnhEAg2 z@+44*^0btWzd`{(1E*&EYKjFCoT7zB@R1)GKKz>uen$kqQ(PfJLfl!*e;cjck7=m% zi&HXmIHY0!QyPm0D1h-zUnKE&=ZbGqW1cK@*mprwhFN-As;diV6m^MW(99%^b!W>i z+s&m9nh<;;y718T@FQrSpWvKLr zzap?lU-jD;t~sXWncl*w-onW(g%_ihMb8>zhkeFnzs&!Zz8~JPGy2Zx&ge~1(>aGw zd-Tmglzh&9lK^a#Mg|%gXk?&~fkp-z8E9mnk%9kt27GurlI6!y$uu5liR~61I3?3V zp+tVv%7w#Wah;t_j*b$v&&p;L1}!{LUNu|Q~iUM#Tk zL(N8@n$T?|en7@8?~h zd0OL9S)z#G_w;CeMTO-rpRQyiPfvnTc#RU$6?))HWu=zWI+9AW4v^o;Yge#XtSJ+1 zCPYLb^wg1xd@>En>qvT#OyxC-h&~N4enO}_lx5^a2x_Z-pp*NaiaVf#XMde>Uh6%zTk1~#uo@a|8BfR@VIf~ zX9ymTZv4#ZxOL;WN_1Y`_}L;<6K}2V^Kk121Yh@VJg9ycae}D((J1d9aEkom95E4c zBC77ko7ViEuT$z5=T_$rH@-;J8mE5D0{ot@TOX5F#EGc7A6NaMns~dIsEPBeH|vY8 z=Xv6fm03j9XcDM})4RbufNCmduNHnr8C!oenShn5XGF5_}uYh)baCniMNW%LS-+1 zLqv6`j{ZL2Z5W^4arpi^`ilr}ntPpotd9P->fle*!GB%{p8-yBdat8q%$t24iAWd ztevy-c*$%)%AOg3l6^LxZVW@I#F*;XR_=Cz$0 zYb((fnWP!dX5)KJD{W`@Vna-P#4;24k&(SHad0LD<5Hz(7YNBTySGQT#mv|>TTE<# zaqD3#&X%`b6W!Lc*)5SF1Ewm5$)=Ykyp8K zXCRlC5zB2mkqGbG`Dc4{XorzoJ4=sesGE2=qqYpW<))R0+i|_o$RqOXRGO8p*PE4Q z5eiK0TykS`_91!2)VkVJ1p9abolaTiKqhVDBq3nhH{~^PZ$mN@xr{j+PbX-LQqQ&U zl}M(|e9lVn&ML2cHNkYA^}{T;j@*3ZhD>u;E~f*P`>FI!E4P;1^yP-s4lp-nn%G&z z!-%$A)!awr-rD8%kfUd8rh2}HG2_@5HmkQzh;VN2h#lVrYG)N4<{CDeS=mt$PG@W@ z9PR2^Wygm!HOCS+MF6(<8- z8%^0FEb|?tp_(*a9t!Cg0hp=owIm3w( zVay357(z9sntunP^(&@!+#{*N>jb8}e$`^B%XOj`<3npkw&(Q((-36N!rxbn(fY+{ z&+87Rm$0IyUi&S;Pht(p?eqGCDaX(EJ93fg@OcgDw5DczUdJ${?|CY;T%{`8^ZNIC zV3_)=_PpL<%IkKh$fDgbEB9N{8kyVYbrI7yXibiv^_cF4oYvgT^ZJQtMB97g*Ra@! z3gwjTd7Z_ys1><=Z~yPm_FYoZOH_Z1d<&wl{| zr+rAcTXUVk#}WkXH9_78gOCqhb*X@s0R3ZFlQil_wep=*E&uTywmyH}rircc8L zce7P{{@rYP6?vN-FN&Mx*`DsdXzXzNynf>UH(*M~&*O{j_&h!bTT)?rUPm9*H@GVy za~8H|`T~SbdlAvv9f}^(EEBe4`XU5QdtOf*()Jvu*Pi*8Q6XO(|3pMdCbT`bqfpfr z*NL9OhuYWb1j)koOBm3Ubg4Kgk3A(($D($4xBfwquH!f1!}0L^Nxvs@?8;IdZ|qd` a29J>2WnH>VJt|W4jVqLf-(%om#oqzFrzs2o literal 0 HcmV?d00001 diff --git a/day5p1/main.c b/day5p1/main.c new file mode 100644 index 0000000..21320b3 --- /dev/null +++ b/day5p1/main.c @@ -0,0 +1,91 @@ +#include +#include +#include +#include + +void *read_file_contents(const char *fname, size_t *len) +{ + FILE *f = fopen(fname, "r"); + if (!f) { + perror(fname); + return NULL; + } + fseek(f, 0, SEEK_END); + *len = ftell(f); + rewind(f); + void *contents = malloc(*len); + if (!contents) { + perror("malloc"); + fclose(f); + return NULL; + } + fread(contents, *len, 1, f); + fclose(f); + return contents; +} + +void remove_dupes(char *mem, size_t len) +{ + int found; + char last_char; + size_t last_char_pos; + + do { + found = 0; + last_char = '\0'; + last_char_pos = 0; + + for (size_t i = 0; i < len; i++) { + if (!mem[i]) continue; + + if (tolower(mem[i]) == tolower(last_char) && + mem[i] != last_char) { + mem[i] = mem[last_char_pos] = '\0'; + found = 1; + last_char_pos = 0; + last_char = '\0'; + } else { + last_char_pos = i; + last_char = mem[last_char_pos]; + } + } + } while (found); +} + +size_t strip_zeroes(char *mem, size_t len) +{ + size_t new_len = len; + + char *current = mem + len - 1; + while (len) { + while (len && *current) {len--; current--;} + if (!len) break; + + char *start = current; + while (len && !*current) {len--; current--;} + size_t diff = new_len - len - (start - current); + memmove(current + 1, start + 1, diff); + new_len = len + diff; + } + + return new_len; +} + +int main() +{ + size_t string_len; + char *string = read_file_contents("input", &string_len); + if (!string) return 0; + + while (isspace(string[string_len - 1])) string[--string_len] = '\0'; + + puts("Removing dupes..."); + remove_dupes(string, string_len); + + puts("Stripping zeroes..."); + string_len = strip_zeroes(string, string_len); + printf("Remaining polymers: %lu\n", string_len); + + free(string); + return 0; +}