diff --git a/ted_sws/notice_packager/services/metadata_transformer.py b/ted_sws/notice_packager/services/metadata_transformer.py index eeb7de887..cf08db01f 100644 --- a/ted_sws/notice_packager/services/metadata_transformer.py +++ b/ted_sws/notice_packager/services/metadata_transformer.py @@ -13,6 +13,7 @@ import datetime +from ted_sws.core.model.metadata import NormalisedMetadata from ted_sws.notice_metadata_processor.model.metadata import ExtractedMetadata from ted_sws.notice_packager.model.metadata import PackagerMetadata, METS_TYPE_CREATE, LANGUAGE, REVISION, BASE_WORK, \ BASE_TITLE, METS_DMD_HREF, METS_DMD_ID, METS_TMD_ID, METS_TMD_HREF, METS_FILE_ID, METS_NOTICE_FILE_HREF @@ -28,7 +29,7 @@ class MetadataTransformer: - def __init__(self, notice_metadata: ExtractedMetadata): + def __init__(self, notice_metadata: NormalisedMetadata): self.notice_metadata = notice_metadata def template_metadata(self, action: str = METS_TYPE_CREATE) -> PackagerMetadata: @@ -50,12 +51,11 @@ def normalize_value(cls, value: str) -> str: return value.replace(DENORMALIZED_SEPARATOR, NORMALIZED_SEPARATOR) @classmethod - def from_notice_metadata(cls, notice_metadata: ExtractedMetadata) -> PackagerMetadata: + def from_notice_metadata(cls, notice_metadata: NormalisedMetadata) -> PackagerMetadata: _date = datetime.datetime.now() _revision = REVISION metadata = PackagerMetadata() - # NOTICE metadata.notice.id = cls.normalize_value(notice_metadata.notice_publication_number) metadata.notice.public_number_document = publication_notice_number(metadata.notice.id) @@ -63,19 +63,20 @@ def from_notice_metadata(cls, notice_metadata: ExtractedMetadata) -> PackagerMet notice_metadata) + filled_ojs_issue_number(notice_metadata.ojs_issue_number) # WORK - publication_date = datetime.datetime.strptime(notice_metadata.publication_date, '%Y%m%d').strftime('%Y-%m-%d') + publication_date = datetime.datetime.fromisoformat(notice_metadata.publication_date).strftime('%Y-%m-%d') metadata.work.identifier = publication_work_identifier(metadata.notice.id, notice_metadata) metadata.work.oj_identifier = publication_work_oj_identifier(metadata.notice.id, notice_metadata) metadata.work.cdm_rdf_type = PROCUREMENT_PUBLIC metadata.work.resource_type = PROCUREMENT_NOTICE metadata.work.date_document = publication_date metadata.work.uri = publication_notice_uri(metadata.notice.id, notice_metadata) - title_search = [t.title.text for t in notice_metadata.title if t.title.language == LANGUAGE.upper()] + # TODO: If no title found in english get a random one + title_search = [title.text for title in notice_metadata.title if title.language == LANGUAGE.upper()] if len(title_search) > 0: metadata.work.title = {LANGUAGE: title_search[0]} metadata.work.dataset_version = _date.strftime('%Y%m%d') + '-' + _revision metadata.work.procurement_public_issued_by_country = notice_metadata.country_of_buyer - metadata.work.procurement_public_url_etendering = notice_metadata.uri_list + # metadata.work.procurement_public_url_etendering = notice_metadata.uri_list # EXPRESSION metadata.expression.identifier = f"{metadata.work.identifier}.MUL" @@ -118,7 +119,7 @@ def from_notice_metadata(cls, notice_metadata: ExtractedMetadata) -> PackagerMet def publication_notice_year(notice_metadata): - return datetime.datetime.strptime(notice_metadata.publication_date, '%Y%m%d').strftime('%Y') + return str(datetime.datetime.fromisoformat(notice_metadata.publication_date).year) def publication_notice_number(notice_id): diff --git a/tests/test_data/notices/eform-622690-2023.json b/tests/test_data/notices/eform-622690-2023.json new file mode 100644 index 000000000..75cf1325e --- /dev/null +++ b/tests/test_data/notices/eform-622690-2023.json @@ -0,0 +1,50 @@ +{ + "AA": [ + "la" + ], + "CY": [ + "FIN" + ], + "DD": "2023-10-26", + "DI": "32014L0024", + "DS": "2023-10-12", + "DT": [ + "2023-11-14" + ], + "MA": [ + "gen-pub" + ], + "NC": [ + "services" + ], + "ND": "622690-2023", + "OC": [ + "92000000", + "92600000", + "92610000" + ], + "OJ": "198/2023", + "OL": "fi", + "OY": [ + "FI1", + "FI1C", + "FI1C1", + "FIN", + "spcy" + ], + "PC": [ + "92000000", + "92600000", + "92610000" + ], + "PD": "2023-10-13", + "PR": "open", + "RC": [ + "FI1", + "FI1C", + "FI1C1", + "FIN", + "spcy" + ], + "content": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+PENvbnRyYWN0Tm90aWNlIHhtbG5zPSJ1cm46b2FzaXM6bmFtZXM6c3BlY2lmaWNhdGlvbjp1Ymw6c2NoZW1hOnhzZDpDb250cmFjdE5vdGljZS0yIiB4bWxuczpjYWM9InVybjpvYXNpczpuYW1lczpzcGVjaWZpY2F0aW9uOnVibDpzY2hlbWE6eHNkOkNvbW1vbkFnZ3JlZ2F0ZUNvbXBvbmVudHMtMiIgeG1sbnM6Y2JjPSJ1cm46b2FzaXM6bmFtZXM6c3BlY2lmaWNhdGlvbjp1Ymw6c2NoZW1hOnhzZDpDb21tb25CYXNpY0NvbXBvbmVudHMtMiIgeG1sbnM6ZWZhYz0iaHR0cDovL2RhdGEuZXVyb3BhLmV1L3AyNy9lZm9ybXMtdWJsLWV4dGVuc2lvbi1hZ2dyZWdhdGUtY29tcG9uZW50cy8xIiB4bWxuczplZmJjPSJodHRwOi8vZGF0YS5ldXJvcGEuZXUvcDI3L2Vmb3Jtcy11YmwtZXh0ZW5zaW9uLWJhc2ljLWNvbXBvbmVudHMvMSIgeG1sbnM6ZWZleHQ9Imh0dHA6Ly9kYXRhLmV1cm9wYS5ldS9wMjcvZWZvcm1zLXVibC1leHRlbnNpb25zLzEiIHhtbG5zOmV4dD0idXJuOm9hc2lzOm5hbWVzOnNwZWNpZmljYXRpb246dWJsOnNjaGVtYTp4c2Q6Q29tbW9uRXh0ZW5zaW9uQ29tcG9uZW50cy0yIj4KICA8ZXh0OlVCTEV4dGVuc2lvbnM+CiAgICA8ZXh0OlVCTEV4dGVuc2lvbj4KICAgICAgPGV4dDpFeHRlbnNpb25Db250ZW50PgogICAgICAgIDxlZmV4dDpFZm9ybXNFeHRlbnNpb24+CiAgICAgICAgICA8ZWZiYzpUcmFuc21pc3Npb25EYXRlPjIwMjMtMTAtMTIrMDA6MDA8L2VmYmM6VHJhbnNtaXNzaW9uRGF0ZT4KICAgICAgICAgIDxlZmJjOlRyYW5zbWlzc2lvblRpbWU+MTI6NDI6MTgrMDA6MDA8L2VmYmM6VHJhbnNtaXNzaW9uVGltZT4KICAgICAgICAgIDxlZmFjOk5vdGljZVN1YlR5cGU+CiAgICAgICAgICAgIDxjYmM6U3ViVHlwZUNvZGUgbGlzdE5hbWU9Im5vdGljZS1zdWJ0eXBlIj4xNjwvY2JjOlN1YlR5cGVDb2RlPgogICAgICAgICAgPC9lZmFjOk5vdGljZVN1YlR5cGU+CiAgICAgICAgICA8ZWZhYzpPcmdhbml6YXRpb25zPgogICAgICAgICAgICA8ZWZhYzpPcmdhbml6YXRpb24+CiAgICAgICAgICAgICAgPGVmYmM6QWNxdWlyaW5nQ1BCSW5kaWNhdG9yPmZhbHNlPC9lZmJjOkFjcXVpcmluZ0NQQkluZGljYXRvcj4KICAgICAgICAgICAgICA8ZWZiYzpBd2FyZGluZ0NQQkluZGljYXRvcj5mYWxzZTwvZWZiYzpBd2FyZGluZ0NQQkluZGljYXRvcj4KICAgICAgICAgICAgICA8ZWZhYzpDb21wYW55PgogICAgICAgICAgICAgICAgPGNiYzpXZWJzaXRlVVJJPmh0dHA6Ly93d3cuc2Fsby5maTwvY2JjOldlYnNpdGVVUkk+CiAgICAgICAgICAgICAgICA8Y2FjOlBhcnR5SWRlbnRpZmljYXRpb24+CiAgICAgICAgICAgICAgICAgIDxjYmM6SUQgc2NoZW1lTmFtZT0ib3JnYW5pemF0aW9uIj5PUkctMDAwMTwvY2JjOklEPgogICAgICAgICAgICAgICAgPC9jYWM6UGFydHlJZGVudGlmaWNhdGlvbj4KICAgICAgICAgICAgICAgIDxjYWM6UGFydHlOYW1lPgogICAgICAgICAgICAgICAgICA8Y2JjOk5hbWUgbGFuZ3VhZ2VJRD0iRklOIj5TYWxvbiBrYXVwdW5raTwvY2JjOk5hbWU+CiAgICAgICAgICAgICAgICA8L2NhYzpQYXJ0eU5hbWU+CiAgICAgICAgICAgICAgICA8Y2FjOlBvc3RhbEFkZHJlc3M+CiAgICAgICAgICAgICAgICAgIDxjYmM6U3RyZWV0TmFtZT5QTCA3NzwvY2JjOlN0cmVldE5hbWU+CiAgICAgICAgICAgICAgICAgIDxjYmM6Q2l0eU5hbWU+U2FsbzwvY2JjOkNpdHlOYW1lPgogICAgICAgICAgICAgICAgICA8Y2JjOlBvc3RhbFpvbmU+MjQxMDE8L2NiYzpQb3N0YWxab25lPgogICAgICAgICAgICAgICAgICA8Y2JjOkNvdW50cnlTdWJlbnRpdHlDb2RlIGxpc3ROYW1lPSJudXRzIj5GSTFDMTwvY2JjOkNvdW50cnlTdWJlbnRpdHlDb2RlPgogICAgICAgICAgICAgICAgICA8Y2FjOkNvdW50cnk+CiAgICAgICAgICAgICAgICAgICAgPGNiYzpJZGVudGlmaWNhdGlvbkNvZGUgbGlzdE5hbWU9ImNvdW50cnkiPkZJTjwvY2JjOklkZW50aWZpY2F0aW9uQ29kZT4KICAgICAgICAgICAgICAgICAgPC9jYWM6Q291bnRyeT4KICAgICAgICAgICAgICAgIDwvY2FjOlBvc3RhbEFkZHJlc3M+CiAgICAgICAgICAgICAgICA8Y2FjOlBhcnR5TGVnYWxFbnRpdHk+CiAgICAgICAgICAgICAgICAgIDxjYmM6Q29tcGFueUlEIHNjaGVtZUlEPSIwMDIiPjAxMzk1MzMtMTwvY2JjOkNvbXBhbnlJRD4KICAgICAgICAgICAgICAgIDwvY2FjOlBhcnR5TGVnYWxFbnRpdHk+CiAgICAgICAgICAgICAgICA8Y2FjOkNvbnRhY3Q+CiAgICAgICAgICAgICAgICAgIDxjYmM6TmFtZT5MaWlrdW50YXBhbHZlbHV0PC9jYmM6TmFtZT4KICAgICAgICAgICAgICAgICAgPGNiYzpUZWxlcGhvbmU+KzM1OCAyNzc4MTwvY2JjOlRlbGVwaG9uZT4KICAgICAgICAgICAgICAgICAgPGNiYzpFbGVjdHJvbmljTWFpbD5raXJqYWFtb0BzYWxvLmZpPC9jYmM6RWxlY3Ryb25pY01haWw+CiAgICAgICAgICAgICAgICA8L2NhYzpDb250YWN0PgogICAgICAgICAgICAgIDwvZWZhYzpDb21wYW55PgogICAgICAgICAgICA8L2VmYWM6T3JnYW5pemF0aW9uPgogICAgICAgICAgICA8ZWZhYzpPcmdhbml6YXRpb24+CiAgICAgICAgICAgICAgPGVmYWM6Q29tcGFueT4KICAgICAgICAgICAgICAgIDxjYmM6V2Vic2l0ZVVSST5odHRwOi8vd3d3Lm9pa2V1cy5maS9tYXJra2luYW9pa2V1czwvY2JjOldlYnNpdGVVUkk+CiAgICAgICAgICAgICAgICA8Y2FjOlBhcnR5SWRlbnRpZmljYXRpb24+CiAgICAgICAgICAgICAgICAgIDxjYmM6SUQgc2NoZW1lTmFtZT0ib3JnYW5pemF0aW9uIj5PUkctMDAwMjwvY2JjOklEPgogICAgICAgICAgICAgICAgPC9jYWM6UGFydHlJZGVudGlmaWNhdGlvbj4KICAgICAgICAgICAgICAgIDxjYWM6UGFydHlOYW1lPgogICAgICAgICAgICAgICAgICA8Y2JjOk5hbWUgbGFuZ3VhZ2VJRD0iRklOIj5NYXJra2luYW9pa2V1czwvY2JjOk5hbWU+CiAgICAgICAgICAgICAgICA8L2NhYzpQYXJ0eU5hbWU+CiAgICAgICAgICAgICAgICA8Y2FjOlBvc3RhbEFkZHJlc3M+CiAgICAgICAgICAgICAgICAgIDxjYmM6U3RyZWV0TmFtZT5SYWRhbnJha2VudGFqYW50aWUgNTwvY2JjOlN0cmVldE5hbWU+CiAgICAgICAgICAgICAgICAgIDxjYmM6Q2l0eU5hbWU+SGVsc2lua2k8L2NiYzpDaXR5TmFtZT4KICAgICAgICAgICAgICAgICAgPGNiYzpQb3N0YWxab25lPjAwNTIwPC9jYmM6UG9zdGFsWm9uZT4KICAgICAgICAgICAgICAgICAgPGNiYzpDb3VudHJ5U3ViZW50aXR5Q29kZSBsaXN0TmFtZT0ibnV0cyI+RkkxQjE8L2NiYzpDb3VudHJ5U3ViZW50aXR5Q29kZT4KICAgICAgICAgICAgICAgICAgPGNhYzpDb3VudHJ5PgogICAgICAgICAgICAgICAgICAgIDxjYmM6SWRlbnRpZmljYXRpb25Db2RlIGxpc3ROYW1lPSJjb3VudHJ5Ij5GSU48L2NiYzpJZGVudGlmaWNhdGlvbkNvZGU+CiAgICAgICAgICAgICAgICAgIDwvY2FjOkNvdW50cnk+CiAgICAgICAgICAgICAgICA8L2NhYzpQb3N0YWxBZGRyZXNzPgogICAgICAgICAgICAgICAgPGNhYzpQYXJ0eUxlZ2FsRW50aXR5PgogICAgICAgICAgICAgICAgICA8Y2JjOkNvbXBhbnlJRCBzY2hlbWVJRD0iMDAyIj4zMDA2MTU3LTY8L2NiYzpDb21wYW55SUQ+CiAgICAgICAgICAgICAgICA8L2NhYzpQYXJ0eUxlZ2FsRW50aXR5PgogICAgICAgICAgICAgICAgPGNhYzpDb250YWN0PgogICAgICAgICAgICAgICAgICA8Y2JjOlRlbGVwaG9uZT4rMzU4IDI5NTY0MzMwMDwvY2JjOlRlbGVwaG9uZT4KICAgICAgICAgICAgICAgICAgPGNiYzpFbGVjdHJvbmljTWFpbD5tYXJra2luYW9pa2V1c0BvaWtldXMuZmk8L2NiYzpFbGVjdHJvbmljTWFpbD4KICAgICAgICAgICAgICAgIDwvY2FjOkNvbnRhY3Q+CiAgICAgICAgICAgICAgPC9lZmFjOkNvbXBhbnk+CiAgICAgICAgICAgIDwvZWZhYzpPcmdhbml6YXRpb24+CiAgICAgICAgICAgIDxlZmFjOk9yZ2FuaXphdGlvbj4KICAgICAgICAgICAgICA8ZWZhYzpDb21wYW55PgogICAgICAgICAgICAgICAgPGNiYzpXZWJzaXRlVVJJPmh0dHA6Ly9oYW5raW50YWlsbW9pdHVrc2V0LmZpPC9jYmM6V2Vic2l0ZVVSST4KICAgICAgICAgICAgICAgIDxjYWM6UGFydHlJZGVudGlmaWNhdGlvbj4KICAgICAgICAgICAgICAgICAgPGNiYzpJRCBzY2hlbWVOYW1lPSJvcmdhbml6YXRpb24iPk9SRy0wMDAzPC9jYmM6SUQ+CiAgICAgICAgICAgICAgICA8L2NhYzpQYXJ0eUlkZW50aWZpY2F0aW9uPgogICAgICAgICAgICAgICAgPGNhYzpQYXJ0eU5hbWU+CiAgICAgICAgICAgICAgICAgIDxjYmM6TmFtZSBsYW5ndWFnZUlEPSJGSU4iPkhhbnNlbCBPeSAoSGlsbWEpPC9jYmM6TmFtZT4KICAgICAgICAgICAgICAgIDwvY2FjOlBhcnR5TmFtZT4KICAgICAgICAgICAgICAgIDxjYWM6UG9zdGFsQWRkcmVzcz4KICAgICAgICAgICAgICAgICAgPGNiYzpTdHJlZXROYW1lPk1hbm5lcmhlaW1pbmF1a2lvIDFhPC9jYmM6U3RyZWV0TmFtZT4KICAgICAgICAgICAgICAgICAgPGNiYzpDaXR5TmFtZT5IZWxzaW5raTwvY2JjOkNpdHlOYW1lPgogICAgICAgICAgICAgICAgICA8Y2JjOlBvc3RhbFpvbmU+MDAxMDA8L2NiYzpQb3N0YWxab25lPgogICAgICAgICAgICAgICAgICA8Y2JjOkNvdW50cnlTdWJlbnRpdHlDb2RlIGxpc3ROYW1lPSJudXRzIj5GSTFCMTwvY2JjOkNvdW50cnlTdWJlbnRpdHlDb2RlPgogICAgICAgICAgICAgICAgICA8Y2FjOkNvdW50cnk+CiAgICAgICAgICAgICAgICAgICAgPGNiYzpJZGVudGlmaWNhdGlvbkNvZGUgbGlzdE5hbWU9ImNvdW50cnkiPkZJTjwvY2JjOklkZW50aWZpY2F0aW9uQ29kZT4KICAgICAgICAgICAgICAgICAgPC9jYWM6Q291bnRyeT4KICAgICAgICAgICAgICAgIDwvY2FjOlBvc3RhbEFkZHJlc3M+CiAgICAgICAgICAgICAgICA8Y2FjOlBhcnR5TGVnYWxFbnRpdHk+CiAgICAgICAgICAgICAgICAgIDxjYmM6Q29tcGFueUlEIHNjaGVtZUlEPSIwMDIiPjA5ODgwODQtMTwvY2JjOkNvbXBhbnlJRD4KICAgICAgICAgICAgICAgIDwvY2FjOlBhcnR5TGVnYWxFbnRpdHk+CiAgICAgICAgICAgICAgICA8Y2FjOkNvbnRhY3Q+CiAgICAgICAgICAgICAgICAgIDxjYmM6TmFtZT5lU2VuZGVyPC9jYmM6TmFtZT4KICAgICAgICAgICAgICAgICAgPGNiYzpUZWxlcGhvbmU+MDI5IDU1IDYzNiAzMDwvY2JjOlRlbGVwaG9uZT4KICAgICAgICAgICAgICAgICAgPGNiYzpFbGVjdHJvbmljTWFpbD50ZWtuaW5lbkBoYW5raW50YWlsbW9pdHVrc2V0LmZpPC9jYmM6RWxlY3Ryb25pY01haWw+CiAgICAgICAgICAgICAgICA8L2NhYzpDb250YWN0PgogICAgICAgICAgICAgIDwvZWZhYzpDb21wYW55PgogICAgICAgICAgICA8L2VmYWM6T3JnYW5pemF0aW9uPgogICAgICAgICAgPC9lZmFjOk9yZ2FuaXphdGlvbnM+CiAgICAgICAgPGVmYWM6UHVibGljYXRpb24+PGVmYmM6Tm90aWNlUHVibGljYXRpb25JRCBzY2hlbWVOYW1lPSJvanMtbm90aWNlLWlkIj4wMDYyMjY5MC0yMDIzPC9lZmJjOk5vdGljZVB1YmxpY2F0aW9uSUQ+PGVmYmM6R2F6ZXR0ZUlEIHNjaGVtZU5hbWU9Im9qcy1pZCI+MTk4LzIwMjM8L2VmYmM6R2F6ZXR0ZUlEPjxlZmJjOlB1YmxpY2F0aW9uRGF0ZT4yMDIzLTEwLTEzWjwvZWZiYzpQdWJsaWNhdGlvbkRhdGU+PC9lZmFjOlB1YmxpY2F0aW9uPjwvZWZleHQ6RWZvcm1zRXh0ZW5zaW9uPgogICAgICA8L2V4dDpFeHRlbnNpb25Db250ZW50PgogICAgPC9leHQ6VUJMRXh0ZW5zaW9uPgogIDwvZXh0OlVCTEV4dGVuc2lvbnM+CiAgPGNiYzpVQkxWZXJzaW9uSUQ+Mi4zPC9jYmM6VUJMVmVyc2lvbklEPgogIDxjYmM6Q3VzdG9taXphdGlvbklEPmVmb3Jtcy1zZGstMS43PC9jYmM6Q3VzdG9taXphdGlvbklEPgogIDxjYmM6SUQgc2NoZW1lTmFtZT0ibm90aWNlLWlkIj5lN2Q0MDZmMy0wYmEyLTRjYzgtODE1Mi1lMWJkMGUwZDBhYTM8L2NiYzpJRD4KICA8Y2JjOkNvbnRyYWN0Rm9sZGVySUQ+NzQ1MGEzMWQtN2UyMS00NGJiLWFjOTUtMDMyZDM3MjQxNjM4PC9jYmM6Q29udHJhY3RGb2xkZXJJRD4KICA8Y2JjOklzc3VlRGF0ZT4yMDIzLTEwLTEyKzAwOjAwPC9jYmM6SXNzdWVEYXRlPgogIDxjYmM6SXNzdWVUaW1lPjEyOjQxOjUwKzAwOjAwPC9jYmM6SXNzdWVUaW1lPgogIDxjYmM6VmVyc2lvbklEPjAxPC9jYmM6VmVyc2lvbklEPgogIDxjYmM6UmVndWxhdG9yeURvbWFpbj4zMjAxNEwwMDI0PC9jYmM6UmVndWxhdG9yeURvbWFpbj4KICA8Y2JjOk5vdGljZVR5cGVDb2RlIGxpc3ROYW1lPSJjb21wZXRpdGlvbiI+Y24tc3RhbmRhcmQ8L2NiYzpOb3RpY2VUeXBlQ29kZT4KICA8Y2JjOk5vdGljZUxhbmd1YWdlQ29kZT5GSU48L2NiYzpOb3RpY2VMYW5ndWFnZUNvZGU+CiAgPGNhYzpDb250cmFjdGluZ1BhcnR5PgogICAgPGNhYzpDb250cmFjdGluZ1BhcnR5VHlwZT4KICAgICAgPGNiYzpQYXJ0eVR5cGVDb2RlIGxpc3ROYW1lPSJidXllci1sZWdhbC10eXBlIj5sYTwvY2JjOlBhcnR5VHlwZUNvZGU+CiAgICA8L2NhYzpDb250cmFjdGluZ1BhcnR5VHlwZT4KICAgIDxjYWM6Q29udHJhY3RpbmdBY3Rpdml0eT4KICAgICAgPGNiYzpBY3Rpdml0eVR5cGVDb2RlIGxpc3ROYW1lPSJhdXRob3JpdHktYWN0aXZpdHkiPmdlbi1wdWI8L2NiYzpBY3Rpdml0eVR5cGVDb2RlPgogICAgPC9jYWM6Q29udHJhY3RpbmdBY3Rpdml0eT4KICAgIDxjYWM6UGFydHk+CiAgICAgIDxjYWM6UGFydHlJZGVudGlmaWNhdGlvbj4KICAgICAgICA8Y2JjOklEIHNjaGVtZU5hbWU9Im9yZ2FuaXphdGlvbiI+T1JHLTAwMDE8L2NiYzpJRD4KICAgICAgPC9jYWM6UGFydHlJZGVudGlmaWNhdGlvbj4KICAgICAgPGNhYzpTZXJ2aWNlUHJvdmlkZXJQYXJ0eT4KICAgICAgICA8Y2JjOlNlcnZpY2VUeXBlQ29kZSBsaXN0TmFtZT0ib3JnYW5pc2F0aW9uLXJvbGUiPnRlZC1lc2VuPC9jYmM6U2VydmljZVR5cGVDb2RlPgogICAgICAgIDxjYWM6UGFydHk+CiAgICAgICAgICA8Y2FjOlBhcnR5SWRlbnRpZmljYXRpb24+CiAgICAgICAgICAgIDxjYmM6SUQgc2NoZW1lTmFtZT0ib3JnYW5pemF0aW9uIj5PUkctMDAwMzwvY2JjOklEPgogICAgICAgICAgPC9jYWM6UGFydHlJZGVudGlmaWNhdGlvbj4KICAgICAgICA8L2NhYzpQYXJ0eT4KICAgICAgPC9jYWM6U2VydmljZVByb3ZpZGVyUGFydHk+CiAgICA8L2NhYzpQYXJ0eT4KICA8L2NhYzpDb250cmFjdGluZ1BhcnR5PgogIDxjYWM6VGVuZGVyaW5nVGVybXM+CiAgICA8Y2FjOlRlbmRlcmVyUXVhbGlmaWNhdGlvblJlcXVlc3Q+CiAgICAgIDxjYWM6U3BlY2lmaWNUZW5kZXJlclJlcXVpcmVtZW50PgogICAgICAgIDxjYmM6VGVuZGVyZXJSZXF1aXJlbWVudFR5cGVDb2RlIGxpc3ROYW1lPSJleGNsdXNpb24tZ3JvdW5kIj5iYW5rci1uYXQ8L2NiYzpUZW5kZXJlclJlcXVpcmVtZW50VHlwZUNvZGU+CiAgICAgICAgPGNiYzpEZXNjcmlwdGlvbiBsYW5ndWFnZUlEPSJGSU4iPlRhcmpvYWphIG9uIGthbnNhbGxpc2VlbiBsYWluc8Okw6Rkw6RudMO2w7ZuIGphIGthbnNhbGxpc2lpbiBtw6TDpHLDpHlrc2lpbiBwZXJ1c3R1ZW4geWxsw6RtYWluaXR0dWphIHRpbGFudGVpdGEgdmFzdGFhdmFzc2Egc2FtYW5rYWx0YWlzZXNzYSBtZW5ldHRlbHlzc8OkLiBIYW5raW50YXlrc2lra8O2IHZvaSBzdWxrZWEgcG9pcyB0YXJqb2FqYW4sIGpvdGEga29za2VlIGpva2luIGhhbmtpbnRhbGFpbiA4MSDCpzpzc8OkIG1haW5pdHVpc3RhIGFzaW9pc3RhLjwvY2JjOkRlc2NyaXB0aW9uPgogICAgICA8L2NhYzpTcGVjaWZpY1RlbmRlcmVyUmVxdWlyZW1lbnQ+CiAgICAgIDxjYWM6U3BlY2lmaWNUZW5kZXJlclJlcXVpcmVtZW50PgogICAgICAgIDxjYmM6VGVuZGVyZXJSZXF1aXJlbWVudFR5cGVDb2RlIGxpc3ROYW1lPSJleGNsdXNpb24tZ3JvdW5kIj5iYW5rcnVwdGN5PC9jYmM6VGVuZGVyZXJSZXF1aXJlbWVudFR5cGVDb2RlPgogICAgICAgIDxjYmM6RGVzY3JpcHRpb24gbGFuZ3VhZ2VJRD0iRklOIj5UYXJqb2FqYSBvbiBrb25rdXJzc2lzc2EuIEhhbmtpbnRheWtzaWtrw7Ygdm9pIHN1bGtlYSBwb2lzIHRhcmpvYWphbiwgam90YSBrb3NrZWUgam9raW4gaGFua2ludGFsYWluIDgxIMKnOnNzw6QgbWFpbml0dWlzdGEgYXNpb2lzdGEuPC9jYmM6RGVzY3JpcHRpb24+CiAgICAgIDwvY2FjOlNwZWNpZmljVGVuZGVyZXJSZXF1aXJlbWVudD4KICAgICAgPGNhYzpTcGVjaWZpY1RlbmRlcmVyUmVxdWlyZW1lbnQ+CiAgICAgICAgPGNiYzpUZW5kZXJlclJlcXVpcmVtZW50VHlwZUNvZGUgbGlzdE5hbWU9ImV4Y2x1c2lvbi1ncm91bmQiPmNvcnJ1cHRpb248L2NiYzpUZW5kZXJlclJlcXVpcmVtZW50VHlwZUNvZGU+CiAgICAgICAgPGNiYzpEZXNjcmlwdGlvbiBsYW5ndWFnZUlEPSJGSU4iPlRhcmpvYWphbGxlIHRhaSBtaWxsZSB0YWhhbnNhIGhlbmtpbMO2bGxlLCBqb2thIG9uIHNlbiBoYWxsaW50by0sIGpvaHRvLSB0YWkgdmFsdm9udGFlbGltZW4gasOkc2VuIHRhaSBqb2xsYSBvbiBzaWluw6QgcMOkw6R0w7ZzLSwgZWR1c3R1cy0gdGFpIHZhbHZvbnRhdmFsdGFhLCBhbm5ldHR1IGxhaGpvbm5hc3RhIGxhaW52b2ltYWluZW4gdHVvbWlvLCBqb2thIG9uIGFubmV0dHUgZW5pbnTDpMOkbiB2aWlzaSB2dW90dGEgc2l0dGVuIHRhaSBqb2xsYSBzdW9yYWFuIHZhaHZpc3RldHR1IHBvaXNzdWxrZW1pbmVuIG9uIGVkZWxsZWVuIHZvaW1hc3NhLiBIYW5raW50YXlrc2lrw7ZsbMOkIG9uIHZlbHZvbGxpc3V1cyBzdWxrZWEgdGFyam91c2tpbHBhaWx1c3RhIHRhcmpvYWphLCBqb2thIG9uIHN5eWxsaXN0eW55dCBoYW5raW50YWxhaW4gKDEzOTcvMjAxNikgODAgwqc6biBtdWthaXNpaW4gcmlrb2tzaWluLjwvY2JjOkRlc2NyaXB0aW9uPgogICAgICA8L2NhYzpTcGVjaWZpY1RlbmRlcmVyUmVxdWlyZW1lbnQ+CiAgICAgIDxjYWM6U3BlY2lmaWNUZW5kZXJlclJlcXVpcmVtZW50PgogICAgICAgIDxjYmM6VGVuZGVyZXJSZXF1aXJlbWVudFR5cGVDb2RlIGxpc3ROYW1lPSJleGNsdXNpb24tZ3JvdW5kIj5jcmVkLWFycmFuPC9jYmM6VGVuZGVyZXJSZXF1aXJlbWVudFR5cGVDb2RlPgogICAgICAgIDxjYmM6RGVzY3JpcHRpb24gbGFuZ3VhZ2VJRD0iRklOIj5UYXJqb2FqYWxsYSBvbiBqw6RyamVzdGVseWrDpCB2ZWxrb2ppZW4ga2Fuc3NhLiBIYW5raW50YXlrc2lra8O2IHZvaSBzdWxrZWEgcG9pcyB0YXJqb2FqYW4sIGpvdGEga29za2VlIGpva2luIGhhbmtpbnRhbGFpbiA4MSDCpzpzc8OkIG1haW5pdHVpc3RhIGFzaW9pc3RhLjwvY2JjOkRlc2NyaXB0aW9uPgogICAgICA8L2NhYzpTcGVjaWZpY1RlbmRlcmVyUmVxdWlyZW1lbnQ+CiAgICAgIDxjYWM6U3BlY2lmaWNUZW5kZXJlclJlcXVpcmVtZW50PgogICAgICAgIDxjYmM6VGVuZGVyZXJSZXF1aXJlbWVudFR5cGVDb2RlIGxpc3ROYW1lPSJleGNsdXNpb24tZ3JvdW5kIj5jcmltZS1vcmc8L2NiYzpUZW5kZXJlclJlcXVpcmVtZW50VHlwZUNvZGU+CiAgICAgICAgPGNiYzpEZXNjcmlwdGlvbiBsYW5ndWFnZUlEPSJGSU4iPlRhcmpvYWphbGxlIHRhaSBoZW5raWzDtmxsZSwgam9rYSBvbiBzZW4gaGFsbGludG8tLCBqb2h0by0gdGFpIHZhbHZvbnRhZWxpbWVuIGrDpHNlbiB0YWkgam9sbGEgb24gc2lpbsOkIHDDpMOkdMO2cy0sIGVkdXN0dXMtIHRhaSB2YWx2b250YXZhbHRhYSwgb24gYW5uZXR0dSByaWtvbGxpc2rDpHJqZXN0w7ZuIHRvaW1pbnRhYW4gb3NhbGxpc3R1bWlzZXN0YSBsYWludm9pbWFpbmVuIHR1b21pbywgam9rYSBvbiBhbm5ldHR1IGVuaW50w6TDpG4gdmlpc2kgdnVvdHRhIHNpdHRlbiB0YWkgam9sbGEgc3VvcmFhbiB2YWh2aXN0ZXR0dSBwb2lzc3Vsa2VtaW5lbiBvbiBlZGVsbGVlbiB2b2ltYXNzYS4gSGFua2ludGF5a3Npa8O2bGzDpCBvbiB2ZWx2b2xsaXN1dXMgc3Vsa2VhIHRhcmpvdXNraWxwYWlsdXN0YSB0YXJqb2FqYSwgam9rYSBvbiBzeXlsbGlzdHlueXQgaGFua2ludGFsYWluICgxMzk3LzIwMTYpIDgwIMKnOm4gbXVrYWlzaWluIHJpa29rc2lpbi48L2NiYzpEZXNjcmlwdGlvbj4KICAgICAgPC9jYWM6U3BlY2lmaWNUZW5kZXJlclJlcXVpcmVtZW50PgogICAgICA8Y2FjOlNwZWNpZmljVGVuZGVyZXJSZXF1aXJlbWVudD4KICAgICAgICA8Y2JjOlRlbmRlcmVyUmVxdWlyZW1lbnRUeXBlQ29kZSBsaXN0TmFtZT0iZXhjbHVzaW9uLWdyb3VuZCI+ZGlzdG9yc2lvbjwvY2JjOlRlbmRlcmVyUmVxdWlyZW1lbnRUeXBlQ29kZT4KICAgICAgICA8Y2JjOkRlc2NyaXB0aW9uIGxhbmd1YWdlSUQ9IkZJTiI+VGFyam9hamEgb24gdGVobnl0IG11aWRlbiBrYW5zc2Egc29waW11a3NpYSwgam9pbGxhIHB5cml0w6TDpG4gdsOkw6RyaXN0w6Rtw6TDpG4ga2lscGFpbHVhLiBIYW5raW50YXlrc2lra8O2IHZvaSBzdWxrZWEgcG9pcyB0YXJqb2FqYW4sIGpvdGEga29za2VlIGpva2luIGhhbmtpbnRhbGFpbiA4MSDCpzpzc8OkIG1haW5pdHVpc3RhIGFzaW9pc3RhLjwvY2JjOkRlc2NyaXB0aW9uPgogICAgICA8L2NhYzpTcGVjaWZpY1RlbmRlcmVyUmVxdWlyZW1lbnQ+CiAgICAgIDxjYWM6U3BlY2lmaWNUZW5kZXJlclJlcXVpcmVtZW50PgogICAgICAgIDxjYmM6VGVuZGVyZXJSZXF1aXJlbWVudFR5cGVDb2RlIGxpc3ROYW1lPSJleGNsdXNpb24tZ3JvdW5kIj5lbnZpci1sYXc8L2NiYzpUZW5kZXJlclJlcXVpcmVtZW50VHlwZUNvZGU+CiAgICAgICAgPGNiYzpEZXNjcmlwdGlvbiBsYW5ndWFnZUlEPSJGSU4iPlRhcmpvYWphIG9uIHJpa2tvbnV0IHltcMOkcmlzdMO2bGFpbnPDpMOkZMOkbm7Dtm4gbXVrYWlzaWEgdmVsdm9pdHRlaXRhYW4uIEhhbmtpbnRheWtzaWtrw7Ygdm9pIHN1bGtlYSBwb2lzIHRhcmpvYWphbiwgam90YSBrb3NrZWUgam9raW4gaGFua2ludGFsYWluIDgxIMKnOnNzw6QgbWFpbml0dWlzdGEgYXNpb2lzdGEuPC9jYmM6RGVzY3JpcHRpb24+CiAgICAgIDwvY2FjOlNwZWNpZmljVGVuZGVyZXJSZXF1aXJlbWVudD4KICAgICAgPGNhYzpTcGVjaWZpY1RlbmRlcmVyUmVxdWlyZW1lbnQ+CiAgICAgICAgPGNiYzpUZW5kZXJlclJlcXVpcmVtZW50VHlwZUNvZGUgbGlzdE5hbWU9ImV4Y2x1c2lvbi1ncm91bmQiPmZpbmFuLWxhdW5kPC9jYmM6VGVuZGVyZXJSZXF1aXJlbWVudFR5cGVDb2RlPgogICAgICAgIDxjYmM6RGVzY3JpcHRpb24gbGFuZ3VhZ2VJRD0iRklOIj5UYXJqb2FqYWxsZSBpdHNlbGxlZW4gdGFpIG1pbGxlIHRhaGFuc2EgaGVua2lsw7ZsbGUsIGpva2Egb24gc2VuIGhhbGxpbnRvLSwgam9odG8tIHRhaSB2YWx2b250YWVsaW1lbiBqw6RzZW4gdGFpIGpvbGxhIG9uIHNpaW7DpCBww6TDpHTDtnMtLCBlZHVzdHVzLSB0YWkgdmFsdm9udGF2YWx0YWEsIG9uIGFubmV0dHUgcmFoYW5wZXN1c3RhIHRhaSB0ZXJyb3Jpc21pbiByYWhvaXR1a3Nlc3RhIGxhaW52b2ltYWluZW4gdHVvbWlvLCBqb2thIG9uIGFubmV0dHUgZW5pbnTDpMOkbiB2aWlzaSB2dW90dGEgc2l0dGVuIHRhaSBqb2xsYSBzdW9yYWFuIHZhaHZpc3RldHR1IHBvaXNzdWxrZW1pbmVuIG9uIGVkZWxsZWVuIHZvaW1hc3NhLiBIYW5raW50YXlrc2lrw7ZsbMOkIG9uIHZlbHZvbGxpc3V1cyBzdWxrZWEgdGFyam91c2tpbHBhaWx1c3RhIHRhcmpvYWphLCBqb2thIG9uIHN5eWxsaXN0eW55dCBoYW5raW50YWxhaW4gKDEzOTcvMjAxNikgODAgwqc6biBtdWthaXNpaW4gcmlrb2tzaWluLjwvY2JjOkRlc2NyaXB0aW9uPgogICAgICA8L2NhYzpTcGVjaWZpY1RlbmRlcmVyUmVxdWlyZW1lbnQ+CiAgICAgIDxjYWM6U3BlY2lmaWNUZW5kZXJlclJlcXVpcmVtZW50PgogICAgICAgIDxjYmM6VGVuZGVyZXJSZXF1aXJlbWVudFR5cGVDb2RlIGxpc3ROYW1lPSJleGNsdXNpb24tZ3JvdW5kIj5mcmF1ZDwvY2JjOlRlbmRlcmVyUmVxdWlyZW1lbnRUeXBlQ29kZT4KICAgICAgICA8Y2JjOkRlc2NyaXB0aW9uIGxhbmd1YWdlSUQ9IkZJTiI+VGFyam9hamFsbGUgdGFpIG1pbGxlIHRhaGFuc2EgaGVua2lsw7ZsbGUsIGpva2Egb24gc2VuIGhhbGxpbnRvLSwgam9odG8tIHRhaSB2YWx2b250YWVsaW1lbiBqw6RzZW4sIG9uIGFubmV0dHUgcGV0b2tzZXN0YSBsYWludm9pbWFpbmVuIHR1b21pbywgam9rYSBvbiBhbm5ldHR1IGVuaW50w6TDpG4gdmlpc2kgdnVvdHRhIHNpdHRlbiB0YWkgam9sbGEgc3VvcmFhbiB2YWh2aXN0ZXR0dSBwb2lzc3Vsa2VtaW5lbiBvbiBlZGVsbGVlbiB2b2ltYXNzYS4gSGFua2ludGF5a3Npa8O2bGzDpCBvbiB2ZWx2b2xsaXN1dXMgc3Vsa2VhIHRhcmpvdXNraWxwYWlsdXN0YSB0YXJqb2FqYSwgam9rYSBvbiBzeXlsbGlzdHlueXQgaGFua2ludGFsYWluICgxMzk3LzIwMTYpIDgwIMKnOm4gbXVrYWlzaWluIHJpa29rc2lpbi48L2NiYzpEZXNjcmlwdGlvbj4KICAgICAgPC9jYWM6U3BlY2lmaWNUZW5kZXJlclJlcXVpcmVtZW50PgogICAgICA8Y2FjOlNwZWNpZmljVGVuZGVyZXJSZXF1aXJlbWVudD4KICAgICAgICA8Y2JjOlRlbmRlcmVyUmVxdWlyZW1lbnRUeXBlQ29kZSBsaXN0TmFtZT0iZXhjbHVzaW9uLWdyb3VuZCI+aHVtYW4tdHJhZmZpYzwvY2JjOlRlbmRlcmVyUmVxdWlyZW1lbnRUeXBlQ29kZT4KICAgICAgICA8Y2JjOkRlc2NyaXB0aW9uIGxhbmd1YWdlSUQ9IkZJTiI+VGFyam9hamFsbGUgaXRzZWxsZWVuIHRhaSBtaWxsZSB0YWhhbnNhIGhlbmtpbMO2bGxlLCBqb2thIG9uIHNlbiBoYWxsaW50by0sIGpvaHRvLSB0YWkgdmFsdm9udGFlbGltZW4gasOkc2VuIHRhaSBqb2xsYSBvbiBzaWluw6QgcMOkw6R0w7ZzLSwgZWR1c3R1cy0gdGFpIHZhbHZvbnRhdmFsdGFhLCBvbiBhbm5ldHR1IGxhcHNpdHnDtnZvaW1hbiBrw6R5dMO2c3TDpCB0YWkgbXVpc3RhIGlobWlza2F1cGFuIG11b2RvaXN0YSBsYWludm9pbWFpbmVuIHR1b21pbywgam9rYSBvbiBhbm5ldHR1IGVuaW50w6TDpG4gdmlpc2kgdnVvdHRhIHNpdHRlbiB0YWkgam9sbGEgc3VvcmFhbiB2YWh2aXN0ZXR0dSBwb2lzc3Vsa2VtaW5lbiBvbiBlZGVsbGVlbiB2b2ltYXNzYS4gSGFua2ludGF5a3Npa8O2bGzDpCBvbiB2ZWx2b2xsaXN1dXMgc3Vsa2VhIHRhcmpvdXNraWxwYWlsdXN0YSB0YXJqb2FqYSwgam9rYSBvbiBzeXlsbGlzdHlueXQgaGFua2ludGFsYWluICgxMzk3LzIwMTYpIDgwIMKnOm4gbXVrYWlzaWluIHJpa29rc2lpbi48L2NiYzpEZXNjcmlwdGlvbj4KICAgICAgPC9jYWM6U3BlY2lmaWNUZW5kZXJlclJlcXVpcmVtZW50PgogICAgICA8Y2FjOlNwZWNpZmljVGVuZGVyZXJSZXF1aXJlbWVudD4KICAgICAgICA8Y2JjOlRlbmRlcmVyUmVxdWlyZW1lbnRUeXBlQ29kZSBsaXN0TmFtZT0iZXhjbHVzaW9uLWdyb3VuZCI+aW5zb2x2ZW5jeTwvY2JjOlRlbmRlcmVyUmVxdWlyZW1lbnRUeXBlQ29kZT4KICAgICAgICA8Y2JjOkRlc2NyaXB0aW9uIGxhbmd1YWdlSUQ9IkZJTiI+VGFyam9hamFuIG9zYWx0YSBvbiBrw6R5bm5pc3RldHR5IG1ha3N1a3l2eXR0w7ZteXlzLSB0YWkgbGlrdmlkYWF0aW9tZW5ldHRlbHkuIEhhbmtpbnRheWtzaWtrw7Ygdm9pIHN1bGtlYSBwb2lzIHRhcmpvYWphbiwgam90YSBrb3NrZWUgam9raW4gaGFua2ludGFsYWluIDgxIMKnOnNzw6QgbWFpbml0dWlzdGEgYXNpb2lzdGEuPC9jYmM6RGVzY3JpcHRpb24+CiAgICAgIDwvY2FjOlNwZWNpZmljVGVuZGVyZXJSZXF1aXJlbWVudD4KICAgICAgPGNhYzpTcGVjaWZpY1RlbmRlcmVyUmVxdWlyZW1lbnQ+CiAgICAgICAgPGNiYzpUZW5kZXJlclJlcXVpcmVtZW50VHlwZUNvZGUgbGlzdE5hbWU9ImV4Y2x1c2lvbi1ncm91bmQiPmxhYm91ci1sYXc8L2NiYzpUZW5kZXJlclJlcXVpcmVtZW50VHlwZUNvZGU+CiAgICAgICAgPGNiYzpEZXNjcmlwdGlvbiBsYW5ndWFnZUlEPSJGSU4iPlRhcmpvYWphIG9uIHJpa2tvbnV0IHR5w7ZsYWluc8Okw6Rkw6RubsO2biBtdWthaXNpYSB2ZWx2b2l0dGVpdGFhbi4gSGFua2ludGF5a3Npa8O2bGzDpCBvbiB2ZWx2b2xsaXN1dXMgc3Vsa2VhIHRhcmpvdXNraWxwYWlsdXN0YSB0YXJqb2FqYSwgam9rYSBvbiBzeXlsbGlzdHlueXQgaGFua2ludGFsYWluICgxMzk3LzIwMTYpIDgwIMKnOm4gbXVrYWlzaWluIHJpa29rc2lpbi48L2NiYzpEZXNjcmlwdGlvbj4KICAgICAgPC9jYWM6U3BlY2lmaWNUZW5kZXJlclJlcXVpcmVtZW50PgogICAgICA8Y2FjOlNwZWNpZmljVGVuZGVyZXJSZXF1aXJlbWVudD4KICAgICAgICA8Y2JjOlRlbmRlcmVyUmVxdWlyZW1lbnRUeXBlQ29kZSBsaXN0TmFtZT0iZXhjbHVzaW9uLWdyb3VuZCI+bGlxLWFkbWluPC9jYmM6VGVuZGVyZXJSZXF1aXJlbWVudFR5cGVDb2RlPgogICAgICAgIDxjYmM6RGVzY3JpcHRpb24gbGFuZ3VhZ2VJRD0iRklOIj5UYXJqb2FqYW4gdmFyYXQgb3ZhdCBzZWx2aXR5c21pZWhlbiB0YWkgdHVvbWlvaXN0dWltZW4gaGFsbGlubmFzc2EuIEhhbmtpbnRheWtzaWtrw7Ygdm9pIHN1bGtlYSBwb2lzIHRhcmpvYWphbiwgam90YSBrb3NrZWUgam9raW4gaGFua2ludGFsYWluIDgxIMKnOnNzw6QgbWFpbml0dWlzdGEgYXNpb2lzdGEuPC9jYmM6RGVzY3JpcHRpb24+CiAgICAgIDwvY2FjOlNwZWNpZmljVGVuZGVyZXJSZXF1aXJlbWVudD4KICAgICAgPGNhYzpTcGVjaWZpY1RlbmRlcmVyUmVxdWlyZW1lbnQ+CiAgICAgICAgPGNiYzpUZW5kZXJlclJlcXVpcmVtZW50VHlwZUNvZGUgbGlzdE5hbWU9ImV4Y2x1c2lvbi1ncm91bmQiPm1pc3JlcHJlc2VudDwvY2JjOlRlbmRlcmVyUmVxdWlyZW1lbnRUeXBlQ29kZT4KICAgICAgICA8Y2JjOkRlc2NyaXB0aW9uIGxhbmd1YWdlSUQ9IkZJTiI+VGFyam9hamFuIGFpa2Fpc2VtcGlhIGhhbmtpbnRhc29waW11a3NpYSB0YWkga8OkeXR0w7ZvaWtldXNzb3BpbXVrc2lhIG9uIGlydGlzYW5vdHR1IGVubmVuYWlrYWlzZXN0aSB0YWkga3lzZWlzZW4gYWlrYWlzZW1tYW4gc29waW11a3NlbiB5aHRleWRlc3PDpCBvbiB2YWFkaXR0dSB2YWhpbmdvbmtvcnZhdWtzaWEgdGFpIG3DpMOkcsOkdHR5IG11aXRhIHZhc3RhYXZpYSBzZXVyYWFtdWtzaWEuIEhhbmtpbnRheWtzaWtrw7Ygdm9pIHN1bGtlYSBwb2lzIHRhcmpvYWphbiwgam90YSBrb3NrZWUgam9raW4gaGFua2ludGFsYWluIDgxIMKnOnNzw6QgbWFpbml0dWlzdGEgYXNpb2lzdGEuPC9jYmM6RGVzY3JpcHRpb24+CiAgICAgIDwvY2FjOlNwZWNpZmljVGVuZGVyZXJSZXF1aXJlbWVudD4KICAgICAgPGNhYzpTcGVjaWZpY1RlbmRlcmVyUmVxdWlyZW1lbnQ+CiAgICAgICAgPGNiYzpUZW5kZXJlclJlcXVpcmVtZW50VHlwZUNvZGUgbGlzdE5hbWU9ImV4Y2x1c2lvbi1ncm91bmQiPm5hdGktZ3JvdW5kPC9jYmM6VGVuZGVyZXJSZXF1aXJlbWVudFR5cGVDb2RlPgogICAgICAgIDxjYmM6RGVzY3JpcHRpb24gbGFuZ3VhZ2VJRD0iRklOIj5UYXJqb2FqYW4gaGFsbGludG8tLCBqb2h0by0gdGFpIHZhbHZvbnRhZWxpbWVuIGrDpHNlbiB0YWkgZWR1c3R1cy0scMOkw6R0w7ZzLSB0YWkgdmFsdm9udGF2YWx0YWEga8OkeXR0w6R2w6QgaGVua2lsw7Ygb24gcmlrb3NyZWtpc3RlcmlzdMOkIGlsbWVuZXbDpGxsw6QgbGFpbnZvaW1haXNlbGxhIHR1b21pb2xsYSB0dW9taXR0dSB0ecO2dHVydmFsbGlzdXVzcmlrb2tzZXN0YSwgdHnDtmFpa2FzdW9qZWx1cmlrb2tzZXN0YSwgdHnDtnN5cmppbm7DpHN0w6QsIGtpc2tvbm5hbnRhcGFpc2VzdGEgdHnDtnN5cmppbm7DpHN0w6QsIHR5w7ZudGVraWrDtmlkZW4gasOkcmplc3TDpHl0eW1pc3ZhcGF1ZGVuIGxvdWtrYWFtaXNlc3RhIHRhaSBsdXZhdHRvbWFuIHVsa29tYWlzZW4gdHnDtnZvaW1hbiBrw6R5dMO2c3TDpC4gSGFua2ludGF5a3Npa8O2bGzDpCBvbiB2ZWx2b2xsaXN1dXMgc3Vsa2VhIHRhcmpvdXNraWxwYWlsdXN0YSB0YXJqb2FqYSwgam9rYSBvbiBzeXlsbGlzdHlueXQgaGFua2ludGFsYWluICgxMzk3LzIwMTYpIDgwIMKnOm4gbXVrYWlzaWluIHJpa29rc2lpbi48L2NiYzpEZXNjcmlwdGlvbj4KICAgICAgPC9jYWM6U3BlY2lmaWNUZW5kZXJlclJlcXVpcmVtZW50PgogICAgICA8Y2FjOlNwZWNpZmljVGVuZGVyZXJSZXF1aXJlbWVudD4KICAgICAgICA8Y2JjOlRlbmRlcmVyUmVxdWlyZW1lbnRUeXBlQ29kZSBsaXN0TmFtZT0iZXhjbHVzaW9uLWdyb3VuZCI+cGFydGljLWNvbmZsPC9jYmM6VGVuZGVyZXJSZXF1aXJlbWVudFR5cGVDb2RlPgogICAgICAgIDxjYmM6RGVzY3JpcHRpb24gbGFuZ3VhZ2VJRD0iRklOIj5UYXJqb2FqYW4gb3NhbGxpc3R1bWlzZXN0YSBoYW5raW50YW1lbmV0dGVseXluIGFpaGV1dHV1IGV0dXJpc3RpcmlpdG9qYS4gSGFua2ludGF5a3Npa2vDtiB2b2kgc3Vsa2VhIHBvaXMgdGFyam9hamFuLCBqb3RhIGtvc2tlZSBqb2tpbiBoYW5raW50YWxhaW4gODEgwqc6c3PDpCBtYWluaXR1aXN0YSBhc2lvaXN0YS48L2NiYzpEZXNjcmlwdGlvbj4KICAgICAgPC9jYWM6U3BlY2lmaWNUZW5kZXJlclJlcXVpcmVtZW50PgogICAgICA8Y2FjOlNwZWNpZmljVGVuZGVyZXJSZXF1aXJlbWVudD4KICAgICAgICA8Y2JjOlRlbmRlcmVyUmVxdWlyZW1lbnRUeXBlQ29kZSBsaXN0TmFtZT0iZXhjbHVzaW9uLWdyb3VuZCI+cHJlcC1jb25mbDwvY2JjOlRlbmRlcmVyUmVxdWlyZW1lbnRUeXBlQ29kZT4KICAgICAgICA8Y2JjOkRlc2NyaXB0aW9uIGxhbmd1YWdlSUQ9IkZJTiI+VGFyam9hamEgdGFpIHRhcmpvYWphYW4gbGlpdHR5dsOkIHlyaXR5cyBvbiBhbnRhbnV0IG9zdGFqYWxsZSBuZXV2b2phIHRhaSBtdXVsbGEgdGF2b2luIG9zYWxsaXN0dW51dCBoYW5raW50YW1lbmV0dGVseW4gdmFsbWlzdGVsdXVuLiBIYW5raW50YXlrc2lra8O2IHZvaSBzdWxrZWEgcG9pcyB0YXJqb2FqYW4sIGpvdGEga29za2VlIGpva2luIGhhbmtpbnRhbGFpbiA4MSDCpzpzc8OkIG1haW5pdHVpc3RhIGFzaW9pc3RhLjwvY2JjOkRlc2NyaXB0aW9uPgogICAgICA8L2NhYzpTcGVjaWZpY1RlbmRlcmVyUmVxdWlyZW1lbnQ+CiAgICAgIDxjYWM6U3BlY2lmaWNUZW5kZXJlclJlcXVpcmVtZW50PgogICAgICAgIDxjYmM6VGVuZGVyZXJSZXF1aXJlbWVudFR5cGVDb2RlIGxpc3ROYW1lPSJleGNsdXNpb24tZ3JvdW5kIj5wcm9mLW1pc2NvbmR1Y3Q8L2NiYzpUZW5kZXJlclJlcXVpcmVtZW50VHlwZUNvZGU+CiAgICAgICAgPGNiYzpEZXNjcmlwdGlvbiBsYW5ndWFnZUlEPSJGSU4iPlRhcmpvYWphIG9uIHN5eWxsaXN0eW55dCBhbW1hdGluIGhhcmpvaXR0YW1pc2VlbiBsaWl0dHl2w6TDpG4gdmFrYXZhYW4gdmlyaGVlc2Vlbi4gSGFua2ludGF5a3Npa2vDtiB2b2kgc3Vsa2VhIHBvaXMgdGFyam9hamFuLCBqb3RhIGtvc2tlZSBqb2tpbiBoYW5raW50YWxhaW4gODEgwqc6c3PDpCBtYWluaXR1aXN0YSBhc2lvaXN0YS48L2NiYzpEZXNjcmlwdGlvbj4KICAgICAgPC9jYWM6U3BlY2lmaWNUZW5kZXJlclJlcXVpcmVtZW50PgogICAgICA8Y2FjOlNwZWNpZmljVGVuZGVyZXJSZXF1aXJlbWVudD4KICAgICAgICA8Y2JjOlRlbmRlcmVyUmVxdWlyZW1lbnRUeXBlQ29kZSBsaXN0TmFtZT0iZXhjbHVzaW9uLWdyb3VuZCI+c2FuY3Rpb248L2NiYzpUZW5kZXJlclJlcXVpcmVtZW50VHlwZUNvZGU+CiAgICAgICAgPGNiYzpEZXNjcmlwdGlvbiBsYW5ndWFnZUlEPSJGSU4iPlRhcmpvYWphbiBhaWthaXNlbXBpYSBoYW5raW50YXNvcGltdWtzaWEgdGFpIGvDpHl0dMO2b2lrZXVzc29waW11a3NpYSBvbiBpcnRpc2Fub3R0dSBlbm5lbmFpa2Fpc2VzdGkgdGFpIGt5c2Vpc2VuIGFpa2Fpc2VtbWFuIHNvcGltdWtzZW4geWh0ZXlkZXNzw6Qgb24gdmFhZGl0dHUgdmFoaW5nb25rb3J2YXVrc2lhIHRhaSBtw6TDpHLDpHR0eSBtdWl0YSB2YXN0YWF2aWEgc2V1cmFhbXVrc2lhLiBIYW5raW50YXlrc2lra8O2IHZvaSBzdWxrZWEgcG9pcyB0YXJqb2FqYW4sIGpvdGEga29za2VlIGpva2luIGhhbmtpbnRhbGFpbiA4MSDCpzpzc8OkIG1haW5pdHVpc3RhIGFzaW9pc3RhLjwvY2JjOkRlc2NyaXB0aW9uPgogICAgICA8L2NhYzpTcGVjaWZpY1RlbmRlcmVyUmVxdWlyZW1lbnQ+CiAgICAgIDxjYWM6U3BlY2lmaWNUZW5kZXJlclJlcXVpcmVtZW50PgogICAgICAgIDxjYmM6VGVuZGVyZXJSZXF1aXJlbWVudFR5cGVDb2RlIGxpc3ROYW1lPSJleGNsdXNpb24tZ3JvdW5kIj5zb2NzZWMtbGF3PC9jYmM6VGVuZGVyZXJSZXF1aXJlbWVudFR5cGVDb2RlPgogICAgICAgIDxjYmM6RGVzY3JpcHRpb24gbGFuZ3VhZ2VJRD0iRklOIj5UYXJqb2FqYSBvbiByaWtrb251dCBzb3NpYWFsaWxhaW5zw6TDpGTDpG5uw7ZuIG11a2Fpc2lhIHZlbHZvaXR0ZWl0YWFuLiBIYW5raW50YXlrc2lra8O2IHZvaSBzdWxrZWEgcG9pcyB0YXJqb2FqYW4sIGpvdGEga29za2VlIGpva2luIGhhbmtpbnRhbGFpbiA4MSDCpzpzc8OkIG1haW5pdHVpc3RhIGFzaW9pc3RhLjwvY2JjOkRlc2NyaXB0aW9uPgogICAgICA8L2NhYzpTcGVjaWZpY1RlbmRlcmVyUmVxdWlyZW1lbnQ+CiAgICAgIDxjYWM6U3BlY2lmaWNUZW5kZXJlclJlcXVpcmVtZW50PgogICAgICAgIDxjYmM6VGVuZGVyZXJSZXF1aXJlbWVudFR5cGVDb2RlIGxpc3ROYW1lPSJleGNsdXNpb24tZ3JvdW5kIj5zb2NzZWMtcGF5PC9jYmM6VGVuZGVyZXJSZXF1aXJlbWVudFR5cGVDb2RlPgogICAgICAgIDxjYmM6RGVzY3JpcHRpb24gbGFuZ3VhZ2VJRD0iRklOIj5UYXJqb2FqYSBvbiByaWtrb251dCBzb3NpYWFsaXR1cnZhbWFrc3VqZW4gbWFrc2FtaXNlZW4gbGlpdHR5dmnDpCB2ZWx2b2l0dGVpdGFhbiBzaWpvaXR0dW1pc21hYXNzYWFuIHRhaSBvc3RhamFuIG1hYXNzYS4gSGFua2ludGF5a3Npa8O2biBvbiBzdWxqZXR0YXZhIHRhcmpvdXNraWxwYWlsdXN0YSBlaGRva2FzIHRhaSB0YXJqb2FqYSwgam9rYSBvbiBsYWludm9pbWFpc2VsbGEgcMOkw6R0w7Zrc2VsbMOkIHRhaSB0dW9taW9sbGEgdG9kZXR0dSBsYWltaW5secO2bmVlbiB2ZWx2b2xsaXN1dXRlbnNhIG1ha3NhYSBTdW9tZW4gdGFpIHNpam9pdHRhdXR1bWlzbWFhbnNhIHZlcm9qYSB0YWkgc29zaWFhbGl0dXJ2YW1ha3N1amEuIEVkZWxsw6Qgc8Okw6RkZXR0ecOkIGVpIGt1aXRlbmthYW4gc292ZWxsZXRhLCBqb3MgZWhkb2thcyB0YWkgdGFyam9hamEgb24gbWFrc2FudXQgdmVyb3QgdGFpIHNvc2lhYWxpdHVydmFtYWtzdXQgdGFpa2thIHNvcGludXQgc2l0b3Zhc3RhIGrDpHJqZXN0ZWx5c3TDpCBuaWlkZW4gbWFrc2FtaXN0YSB2YXJ0ZW4gKGhhbmtpbnRhbGFpbiA4MCDCpykuPC9jYmM6RGVzY3JpcHRpb24+CiAgICAgIDwvY2FjOlNwZWNpZmljVGVuZGVyZXJSZXF1aXJlbWVudD4KICAgICAgPGNhYzpTcGVjaWZpY1RlbmRlcmVyUmVxdWlyZW1lbnQ+CiAgICAgICAgPGNiYzpUZW5kZXJlclJlcXVpcmVtZW50VHlwZUNvZGUgbGlzdE5hbWU9ImV4Y2x1c2lvbi1ncm91bmQiPnN1c3AtYWN0PC9jYmM6VGVuZGVyZXJSZXF1aXJlbWVudFR5cGVDb2RlPgogICAgICAgIDxjYmM6RGVzY3JpcHRpb24gbGFuZ3VhZ2VJRD0iRklOIj5UYXJqb2FqYW4gbGlpa2V0b2ltaW50YSBvbiBrZXNrZXl0ZXR0eS4gSGFua2ludGF5a3Npa2vDtiB2b2kgc3Vsa2VhIHBvaXMgdGFyam9hamFuLCBqb3RhIGtvc2tlZSBqb2tpbiBoYW5raW50YWxhaW4gODEgwqc6c3PDpCBtYWluaXR1aXN0YSBhc2lvaXN0YS48L2NiYzpEZXNjcmlwdGlvbj4KICAgICAgPC9jYWM6U3BlY2lmaWNUZW5kZXJlclJlcXVpcmVtZW50PgogICAgICA8Y2FjOlNwZWNpZmljVGVuZGVyZXJSZXF1aXJlbWVudD4KICAgICAgICA8Y2JjOlRlbmRlcmVyUmVxdWlyZW1lbnRUeXBlQ29kZSBsaXN0TmFtZT0iZXhjbHVzaW9uLWdyb3VuZCI+dGF4LXBheTwvY2JjOlRlbmRlcmVyUmVxdWlyZW1lbnRUeXBlQ29kZT4KICAgICAgICA8Y2JjOkRlc2NyaXB0aW9uIGxhbmd1YWdlSUQ9IkZJTiI+VGFyam9hamEgb24gcmlra29udXQgdmVyb2plbiBtYWtzYW1pc2VlbiBsaWl0dHl2acOkIHZlbHZvaXR0ZWl0YWFuIHNpam9pdHR1bWlzbWFhc3NhYW4gdGFpIG9zdGFqYW4gbWFhc3NhLiBIYW5raW50YXlrc2lrw7ZuIG9uIHN1bGpldHRhdmEgdGFyam91c2tpbHBhaWx1c3RhIGVoZG9rYXMgdGFpIHRhcmpvYWphLCBqb2thIG9uIGxhaW52b2ltYWlzZWxsYSBww6TDpHTDtmtzZWxsw6QgdGFpIHR1b21pb2xsYSB0b2RldHR1IGxhaW1pbmx5w7ZuZWVuIHZlbHZvbGxpc3V1dGVuc2EgbWFrc2FhIFN1b21lbiB0YWkgc2lqb2l0dGF1dHVtaXNtYWFuc2EgdmVyb2phIHRhaSBzb3NpYWFsaXR1cnZhbWFrc3VqYS4gRWRlbGzDpCBzw6TDpGRldHR5w6QgZWkga3VpdGVua2FhbiBzb3ZlbGxldGEsIGpvcyBlaGRva2FzIHRhaSB0YXJqb2FqYSBvbiBtYWtzYW51dCB2ZXJvdCB0YWkgc29zaWFhbGl0dXJ2YW1ha3N1dCB0YWlra2Egc29waW51dCBzaXRvdmFzdGEgasOkcmplc3RlbHlzdMOkIG5paWRlbiBtYWtzYW1pc3RhIHZhcnRlbiAoaGFua2ludGFsYWluIDgwIMKnKS48L2NiYzpEZXNjcmlwdGlvbj4KICAgICAgPC9jYWM6U3BlY2lmaWNUZW5kZXJlclJlcXVpcmVtZW50PgogICAgICA8Y2FjOlNwZWNpZmljVGVuZGVyZXJSZXF1aXJlbWVudD4KICAgICAgICA8Y2JjOlRlbmRlcmVyUmVxdWlyZW1lbnRUeXBlQ29kZSBsaXN0TmFtZT0iZXhjbHVzaW9uLWdyb3VuZCI+dGVyci1vZmZlbmNlPC9jYmM6VGVuZGVyZXJSZXF1aXJlbWVudFR5cGVDb2RlPgogICAgICAgIDxjYmM6RGVzY3JpcHRpb24gbGFuZ3VhZ2VJRD0iRklOIj5UYXJqb2FqYWxsZSBpdHNlbGxlZW4gdGFpIG1pbGxlIHRhaGFuc2EgaGVua2lsw7ZsbGUsIGpva2Egb24gc2VuIGhhbGxpbnRvLSwgam9odG8tIHRhaSB2YWx2b250YWVsaW1lbiBqw6RzZW4gdGFpIGpvbGxhIG9uIHNpaW7DpCBww6TDpHTDtnMtLCBlZHVzdHVzLSB0YWkgdmFsdm9udGF2YWx0YWEsIGFubmV0dHUgdGVycm9yaXNtaXJpa29rc2VzdGEgdGFpIHRlcnJvcml0b2ltaW50YWFuIGxpaXR0eXbDpHN0w6Qgcmlrb2tzZXN0YSBsYWludm9pbWFpbmVuIHR1b21pbywgam9rYSBvbiBhbm5ldHR1IGVuaW50w6TDpG4gdmlpc2kgdnVvdHRhIHNpdHRlbiB0YWkgam9sbGEgc3VvcmFhbiB2YWh2aXN0ZXR0dSBwb2lzc3Vsa2VtaW5lbiBvbiBlZGVsbGVlbiB2b2ltYXNzYS4gSGFua2ludGF5a3Npa8O2bGzDpCBvbiB2ZWx2b2xsaXN1dXMgc3Vsa2VhIHRhcmpvdXNraWxwYWlsdXN0YSB0YXJqb2FqYSwgam9rYSBvbiBzeXlsbGlzdHlueXQgaGFua2ludGFsYWluICgxMzk3LzIwMTYpIDgwIMKnOm4gbXVrYWlzaWluIHJpa29rc2lpbi48L2NiYzpEZXNjcmlwdGlvbj4KICAgICAgPC9jYWM6U3BlY2lmaWNUZW5kZXJlclJlcXVpcmVtZW50PgogICAgPC9jYWM6VGVuZGVyZXJRdWFsaWZpY2F0aW9uUmVxdWVzdD4KICA8L2NhYzpUZW5kZXJpbmdUZXJtcz4KICA8Y2FjOlRlbmRlcmluZ1Byb2Nlc3M+CiAgICA8Y2JjOlByb2NlZHVyZUNvZGUgbGlzdE5hbWU9InByb2N1cmVtZW50LXByb2NlZHVyZS10eXBlIj5vcGVuPC9jYmM6UHJvY2VkdXJlQ29kZT4KICA8L2NhYzpUZW5kZXJpbmdQcm9jZXNzPgogIDxjYWM6UHJvY3VyZW1lbnRQcm9qZWN0PgogICAgPGNiYzpJRCBzY2hlbWVOYW1lPSJJbnRlcm5hbElEIj40NzEwLzAyLjA4LjAwLjA1LzIwMjMgKDQ3ODc1NSk8L2NiYzpJRD4KICAgIDxjYmM6TmFtZSBsYW5ndWFnZUlEPSJGSU4iPkV0ZWzDpGlzZW4gU2Fsb24gbGlpa3VudGFwYWlra29qZW4gaG9pZG9uIGhhbmtpbnRhPC9jYmM6TmFtZT4KICAgIDxjYmM6RGVzY3JpcHRpb24gbGFuZ3VhZ2VJRD0iRklOIj5TYWxvbiBrYXVwdW5naW4gbGlpa3VudGFwYWx2ZWx1dCAoasOkbGplbXDDpG7DpCBIYW5raW50YXlrc2lra8O2IHRhaSBUaWxhYWphKSBweXl0w6TDpCB0YXJqb3Vrc2lhIGthdXB1bmdpbiBldGVsw6Rpc2VuIG9zYW4gbGlpa3VudGFwYWlra29qZW4ga2Vzw6QtIGphIHRhbHZpaG9pZG9zdGEgdnVvc2lsbGUgMjAyNC0yMDI1IHTDpG3DpG4gdGFyam91c3B5eW5uw7ZuIGphIHNlbiBsaWl0dGVpZGVuIG11a2Fpc2VzdGkuIExpc8Oka3NpIHRpbGFhamEgdmFyYWEgbWFoZG9sbGlzdXVkZW4ga2FodGVlbiBvcHRpb3Z1b3RlZW4gMjAyNiBqYSAyMDI3LiBPcHRpb2xsYSB0YXJrb2l0ZXRhYW4gbWFoZG9sbGlzdXV0dGEgc29waW11a3NlbiBqYXRrYW1pc2VlbiBhbGt1cGVyw6Rpc2luIGVoZG9pbi4gT3B0aW9pZGVuIGvDpHl0w7ZzdMOkIGphIGtlc3Rvc3RhIHDDpMOkdGV0w6TDpG4gZXJpa3NlZW4uIAoKTGlpa3VudGFwYWlra29qZW4gaG9pZG9sbGEgdGFya29pdGV0YWFuIFNhbG9uIGthdXB1bmdpbiBsaWlrdW50YXBhaWtrb2plbiBob2l0b2EsIGt1bm5vc3NhcGl0b2Egc2Vrw6QgZXJpbGFpc2lhIGxpaWt1bnRhcGFpa2tvamVuIHlsbMOkcGl0b29uIGxpaXR0eXZpw6QgdGVodMOkdmnDpCwgam90a2Egb24gbcOkw6RyaXRlbHR5IHlrc2l0eWlza29odGFpc2VzdGkga29odGVpdHRhaW4gbGlpdHRlZXNzw6QgMS4gSGFua2lubmFuIHZhYXRpbXVrc2V0IGphIHBhbHZlbHVrdXZhdXMuIEtvaHRlZXQgc2lqYWl0c2V2YXQgUGVybmnDtnNzw6QsIEtpc2tvc3NhIGphIE11dXJsYXNzYS4gPC9jYmM6RGVzY3JpcHRpb24+CiAgICA8Y2JjOlByb2N1cmVtZW50VHlwZUNvZGUgbGlzdE5hbWU9ImNvbnRyYWN0LW5hdHVyZSI+c2VydmljZXM8L2NiYzpQcm9jdXJlbWVudFR5cGVDb2RlPgogICAgPGNiYzpOb3RlIGxhbmd1YWdlSUQ9IkZJTiI+U29waW11a3NlbiBhbGthbWlzYWlrYSBvbiBhcnZpbywgam9rYSB2b2kgbXV1dHR1YS4gCgpJbG1vaXRldHR1IHRhcmpvdXN0ZW4gYXZhdXNhamFua29odGEgZWkgb2xlIGhhbmtpbnRheWtzaWtrw7bDpCBzaXRvdmEuIFRhcmpvdWtzZXQgdm9pZGFhbiBhdmF0YSBtecO2cyBtdXVuYSBhamFua29odGFuYSB0YXJqb3VzdGVuIHZhc3RhYW5vdHRhbWlzZWxsZSBhc2V0ZXR1biBtw6TDpHLDpGFqYW4gdW1wZXVkdXR0dWEuIEF2YXVzdGlsYWlzdXVzIGVpIG9sZSBqdWxraW5lbi48L2NiYzpOb3RlPgogICAgPGNhYzpNYWluQ29tbW9kaXR5Q2xhc3NpZmljYXRpb24+CiAgICAgIDxjYmM6SXRlbUNsYXNzaWZpY2F0aW9uQ29kZSBsaXN0TmFtZT0iY3B2Ij45MjYxMDAwMDwvY2JjOkl0ZW1DbGFzc2lmaWNhdGlvbkNvZGU+CiAgICA8L2NhYzpNYWluQ29tbW9kaXR5Q2xhc3NpZmljYXRpb24+CiAgICA8Y2FjOlJlYWxpemVkTG9jYXRpb24+CiAgICAgIDxjYWM6QWRkcmVzcz4KICAgICAgICA8Y2JjOkNvdW50cnlTdWJlbnRpdHlDb2RlIGxpc3ROYW1lPSJudXRzIj5GSTFDMTwvY2JjOkNvdW50cnlTdWJlbnRpdHlDb2RlPgogICAgICAgIDxjYWM6Q291bnRyeT4KICAgICAgICAgIDxjYmM6SWRlbnRpZmljYXRpb25Db2RlIGxpc3ROYW1lPSJjb3VudHJ5Ij5GSU48L2NiYzpJZGVudGlmaWNhdGlvbkNvZGU+CiAgICAgICAgPC9jYWM6Q291bnRyeT4KICAgICAgPC9jYWM6QWRkcmVzcz4KICAgIDwvY2FjOlJlYWxpemVkTG9jYXRpb24+CiAgPC9jYWM6UHJvY3VyZW1lbnRQcm9qZWN0PgogIDxjYWM6UHJvY3VyZW1lbnRQcm9qZWN0TG90PgogICAgPGNiYzpJRCBzY2hlbWVOYW1lPSJMb3QiPkxPVC0wMDAxPC9jYmM6SUQ+CiAgICA8Y2FjOlRlbmRlcmluZ1Rlcm1zPgogICAgICA8ZXh0OlVCTEV4dGVuc2lvbnM+CiAgICAgICAgPGV4dDpVQkxFeHRlbnNpb24+CiAgICAgICAgICA8ZXh0OkV4dGVuc2lvbkNvbnRlbnQ+CiAgICAgICAgICAgIDxlZmV4dDpFZm9ybXNFeHRlbnNpb24+CiAgICAgICAgICAgICAgPGVmYWM6U2VsZWN0aW9uQ3JpdGVyaWE+CiAgICAgICAgICAgICAgICA8Y2JjOkNyaXRlcmlvblR5cGVDb2RlIGxpc3ROYW1lPSJzZWxlY3Rpb24tY3JpdGVyaW9uIj5lZi1zdGFuZDwvY2JjOkNyaXRlcmlvblR5cGVDb2RlPgogICAgICAgICAgICAgICAgPGNiYzpDYWxjdWxhdGlvbkV4cHJlc3Npb25Db2RlIGxpc3ROYW1lPSJ1c2FnZSI+bi11c2VkPC9jYmM6Q2FsY3VsYXRpb25FeHByZXNzaW9uQ29kZT4KICAgICAgICAgICAgICA8L2VmYWM6U2VsZWN0aW9uQ3JpdGVyaWE+CiAgICAgICAgICAgICAgPGVmYWM6U2VsZWN0aW9uQ3JpdGVyaWE+CiAgICAgICAgICAgICAgICA8Y2JjOkNyaXRlcmlvblR5cGVDb2RlIGxpc3ROYW1lPSJzZWxlY3Rpb24tY3JpdGVyaW9uIj5zdWktYWN0PC9jYmM6Q3JpdGVyaW9uVHlwZUNvZGU+CiAgICAgICAgICAgICAgICA8Y2JjOkNhbGN1bGF0aW9uRXhwcmVzc2lvbkNvZGUgbGlzdE5hbWU9InVzYWdlIj5uLXVzZWQ8L2NiYzpDYWxjdWxhdGlvbkV4cHJlc3Npb25Db2RlPgogICAgICAgICAgICAgIDwvZWZhYzpTZWxlY3Rpb25Dcml0ZXJpYT4KICAgICAgICAgICAgICA8ZWZhYzpTZWxlY3Rpb25Dcml0ZXJpYT4KICAgICAgICAgICAgICAgIDxjYmM6Q3JpdGVyaW9uVHlwZUNvZGUgbGlzdE5hbWU9InNlbGVjdGlvbi1jcml0ZXJpb24iPnRwLWFiaWw8L2NiYzpDcml0ZXJpb25UeXBlQ29kZT4KICAgICAgICAgICAgICAgIDxjYmM6Q2FsY3VsYXRpb25FeHByZXNzaW9uQ29kZSBsaXN0TmFtZT0idXNhZ2UiPm4tdXNlZDwvY2JjOkNhbGN1bGF0aW9uRXhwcmVzc2lvbkNvZGU+CiAgICAgICAgICAgICAgPC9lZmFjOlNlbGVjdGlvbkNyaXRlcmlhPgogICAgICAgICAgICA8L2VmZXh0OkVmb3Jtc0V4dGVuc2lvbj4KICAgICAgICAgIDwvZXh0OkV4dGVuc2lvbkNvbnRlbnQ+CiAgICAgICAgPC9leHQ6VUJMRXh0ZW5zaW9uPgogICAgICA8L2V4dDpVQkxFeHRlbnNpb25zPgogICAgICA8Y2JjOkZ1bmRpbmdQcm9ncmFtQ29kZSBsaXN0TmFtZT0iZXUtZnVuZGVkIj5uby1ldS1mdW5kczwvY2JjOkZ1bmRpbmdQcm9ncmFtQ29kZT4KICAgICAgPGNiYzpSZWN1cnJpbmdQcm9jdXJlbWVudEluZGljYXRvcj50cnVlPC9jYmM6UmVjdXJyaW5nUHJvY3VyZW1lbnRJbmRpY2F0b3I+CiAgICAgIDxjYmM6TXVsdGlwbGVUZW5kZXJzQ29kZSBsaXN0TmFtZT0icGVybWlzc2lvbiI+YWxsb3dlZDwvY2JjOk11bHRpcGxlVGVuZGVyc0NvZGU+CiAgICAgIDxjYWM6Q2FsbEZvclRlbmRlcnNEb2N1bWVudFJlZmVyZW5jZT4KICAgICAgICA8Y2JjOklEPkxpbmtraSBoYW5raW50YS1hc2lha2lyam9paGluPC9jYmM6SUQ+CiAgICAgICAgPGNiYzpEb2N1bWVudFR5cGU+bm9uLXJlc3RyaWN0ZWQtZG9jdW1lbnQ8L2NiYzpEb2N1bWVudFR5cGU+CiAgICAgICAgPGNhYzpBdHRhY2htZW50PgogICAgICAgICAgPGNhYzpFeHRlcm5hbFJlZmVyZW5jZT4KICAgICAgICAgICAgPGNiYzpVUkk+aHR0cHM6Ly90YXJqb3VzcGFsdmVsdS5maS9zYWxvP2lkPTQ3ODc1NSZhbXA7dHBrPTMyYzA1YjY4LTEwZjQtNGNjZS1hNmQ4LWY2YWUyYjE0MTU0YjwvY2JjOlVSST4KICAgICAgICAgIDwvY2FjOkV4dGVybmFsUmVmZXJlbmNlPgogICAgICAgIDwvY2FjOkF0dGFjaG1lbnQ+CiAgICAgIDwvY2FjOkNhbGxGb3JUZW5kZXJzRG9jdW1lbnRSZWZlcmVuY2U+CiAgICAgIDxjYWM6VGVuZGVyZXJRdWFsaWZpY2F0aW9uUmVxdWVzdD4KICAgICAgICA8Y2FjOlNwZWNpZmljVGVuZGVyZXJSZXF1aXJlbWVudD4KICAgICAgICAgIDxjYmM6VGVuZGVyZXJSZXF1aXJlbWVudFR5cGVDb2RlIGxpc3ROYW1lPSJyZXNlcnZlZC1wcm9jdXJlbWVudCI+bm9uZTwvY2JjOlRlbmRlcmVyUmVxdWlyZW1lbnRUeXBlQ29kZT4KICAgICAgICA8L2NhYzpTcGVjaWZpY1RlbmRlcmVyUmVxdWlyZW1lbnQ+CiAgICAgIDwvY2FjOlRlbmRlcmVyUXVhbGlmaWNhdGlvblJlcXVlc3Q+CiAgICAgIDxjYWM6Q29udHJhY3RFeGVjdXRpb25SZXF1aXJlbWVudD4KICAgICAgICA8Y2JjOkV4ZWN1dGlvblJlcXVpcmVtZW50Q29kZSBsaXN0TmFtZT0iZWludm9pY2luZyI+cmVxdWlyZWQ8L2NiYzpFeGVjdXRpb25SZXF1aXJlbWVudENvZGU+CiAgICAgIDwvY2FjOkNvbnRyYWN0RXhlY3V0aW9uUmVxdWlyZW1lbnQ+CiAgICAgIDxjYWM6Q29udHJhY3RFeGVjdXRpb25SZXF1aXJlbWVudD4KICAgICAgICA8Y2JjOkV4ZWN1dGlvblJlcXVpcmVtZW50Q29kZSBsaXN0TmFtZT0icmVzZXJ2ZWQtZXhlY3V0aW9uIj5ubzwvY2JjOkV4ZWN1dGlvblJlcXVpcmVtZW50Q29kZT4KICAgICAgPC9jYWM6Q29udHJhY3RFeGVjdXRpb25SZXF1aXJlbWVudD4KICAgICAgPGNhYzpDb250cmFjdEV4ZWN1dGlvblJlcXVpcmVtZW50PgogICAgICAgIDxjYmM6RXhlY3V0aW9uUmVxdWlyZW1lbnRDb2RlIGxpc3ROYW1lPSJlY2F0YWxvZy1zdWJtaXNzaW9uIj5ub3QtYWxsb3dlZDwvY2JjOkV4ZWN1dGlvblJlcXVpcmVtZW50Q29kZT4KICAgICAgPC9jYWM6Q29udHJhY3RFeGVjdXRpb25SZXF1aXJlbWVudD4KICAgICAgPGNhYzpBd2FyZGluZ1Rlcm1zPgogICAgICAgIDxjYWM6QXdhcmRpbmdDcml0ZXJpb24+CiAgICAgICAgICA8Y2FjOlN1Ym9yZGluYXRlQXdhcmRpbmdDcml0ZXJpb24+CiAgICAgICAgICAgIDxleHQ6VUJMRXh0ZW5zaW9ucz4KICAgICAgICAgICAgICA8ZXh0OlVCTEV4dGVuc2lvbj4KICAgICAgICAgICAgICAgIDxleHQ6RXh0ZW5zaW9uQ29udGVudD4KICAgICAgICAgICAgICAgICAgPGVmZXh0OkVmb3Jtc0V4dGVuc2lvbj4KICAgICAgICAgICAgICAgICAgICA8ZWZhYzpBd2FyZENyaXRlcmlvblBhcmFtZXRlcj4KICAgICAgICAgICAgICAgICAgICAgIDxlZmJjOlBhcmFtZXRlckNvZGUgbGlzdE5hbWU9Im51bWJlci13ZWlnaHQiPnBvaS1leGE8L2VmYmM6UGFyYW1ldGVyQ29kZT4KICAgICAgICAgICAgICAgICAgICAgIDxlZmJjOlBhcmFtZXRlck51bWVyaWM+NjA8L2VmYmM6UGFyYW1ldGVyTnVtZXJpYz4KICAgICAgICAgICAgICAgICAgICA8L2VmYWM6QXdhcmRDcml0ZXJpb25QYXJhbWV0ZXI+CiAgICAgICAgICAgICAgICAgIDwvZWZleHQ6RWZvcm1zRXh0ZW5zaW9uPgogICAgICAgICAgICAgICAgPC9leHQ6RXh0ZW5zaW9uQ29udGVudD4KICAgICAgICAgICAgICA8L2V4dDpVQkxFeHRlbnNpb24+CiAgICAgICAgICAgIDwvZXh0OlVCTEV4dGVuc2lvbnM+CiAgICAgICAgICAgIDxjYmM6QXdhcmRpbmdDcml0ZXJpb25UeXBlQ29kZSBsaXN0TmFtZT0iYXdhcmQtY3JpdGVyaW9uLXR5cGUiPnByaWNlPC9jYmM6QXdhcmRpbmdDcml0ZXJpb25UeXBlQ29kZT4KICAgICAgICAgICAgPGNiYzpOYW1lIGxhbmd1YWdlSUQ9IkZJTiI+S29rb25haXN2ZXJ0YWlsdWhpbnRhPC9jYmM6TmFtZT4KICAgICAgICAgICAgPGNiYzpEZXNjcmlwdGlvbiBsYW5ndWFnZUlEPSJGSU4iPkhhbHZpbiB0YXJqb3R0dSB0YXJqb3VzcHl5bm7Dtm4gbXVrYWluZW4ga29rb25haXNoaW50YSBzYWEgdmVydGFpbHVzc2EgZW5pbW3DpGlzcGlzdGVldCA2MC4gTXVpZGVuIHRhcmpvYWppZW4gcGlzdGVtw6TDpHLDpCBtdW9kb3N0dXUgc3VvcmFzc2Egc3VodGVlc3NhIGhhbHZpbXBhYW4gKGhhbHZpbiAvIHZlcnRhaWx0YXZhIGhpbnRhIHggZW5pbW3DpGlzcGlzdGVldCkuPC9jYmM6RGVzY3JpcHRpb24+CiAgICAgICAgICA8L2NhYzpTdWJvcmRpbmF0ZUF3YXJkaW5nQ3JpdGVyaW9uPgogICAgICAgICAgPGNhYzpTdWJvcmRpbmF0ZUF3YXJkaW5nQ3JpdGVyaW9uPgogICAgICAgICAgICA8ZXh0OlVCTEV4dGVuc2lvbnM+CiAgICAgICAgICAgICAgPGV4dDpVQkxFeHRlbnNpb24+CiAgICAgICAgICAgICAgICA8ZXh0OkV4dGVuc2lvbkNvbnRlbnQ+CiAgICAgICAgICAgICAgICAgIDxlZmV4dDpFZm9ybXNFeHRlbnNpb24+CiAgICAgICAgICAgICAgICAgICAgPGVmYWM6QXdhcmRDcml0ZXJpb25QYXJhbWV0ZXI+CiAgICAgICAgICAgICAgICAgICAgICA8ZWZiYzpQYXJhbWV0ZXJDb2RlIGxpc3ROYW1lPSJudW1iZXItd2VpZ2h0Ij5wb2ktZXhhPC9lZmJjOlBhcmFtZXRlckNvZGU+CiAgICAgICAgICAgICAgICAgICAgICA8ZWZiYzpQYXJhbWV0ZXJOdW1lcmljPjQwPC9lZmJjOlBhcmFtZXRlck51bWVyaWM+CiAgICAgICAgICAgICAgICAgICAgPC9lZmFjOkF3YXJkQ3JpdGVyaW9uUGFyYW1ldGVyPgogICAgICAgICAgICAgICAgICA8L2VmZXh0OkVmb3Jtc0V4dGVuc2lvbj4KICAgICAgICAgICAgICAgIDwvZXh0OkV4dGVuc2lvbkNvbnRlbnQ+CiAgICAgICAgICAgICAgPC9leHQ6VUJMRXh0ZW5zaW9uPgogICAgICAgICAgICA8L2V4dDpVQkxFeHRlbnNpb25zPgogICAgICAgICAgICA8Y2JjOkF3YXJkaW5nQ3JpdGVyaW9uVHlwZUNvZGUgbGlzdE5hbWU9ImF3YXJkLWNyaXRlcmlvbi10eXBlIj5xdWFsaXR5PC9jYmM6QXdhcmRpbmdDcml0ZXJpb25UeXBlQ29kZT4KICAgICAgICAgICAgPGNiYzpOYW1lIGxhbmd1YWdlSUQ9IkZJTiI+TGFhdHVwaXN0ZWV0PC9jYmM6TmFtZT4KICAgICAgICAgICAgPGNiYzpEZXNjcmlwdGlvbiBsYW5ndWFnZUlEPSJGSU4iPkxhYXR1cGlzdGV5dHlzIGphIC1rcml0ZWVyaSBvdmF0IHNldXJhYXZhdDoKMS4gVGFyam9hamFuIGhlbmtpbMO2c3TDtm4gKGlsbWFuIHZhc3RhYXZhYSB0ecO2bmpvaHRhamFhKSBrb2tlbXVzIHZhc3RhYXZpc3RhIHVsa29saWlrdW50YXBhaWtrb2plbiBrZXPDpGhvaWRvbiBwYWx2ZWx1dGVodMOkdmlzdMOkLCAxMCAlIGVsaSBlbmludMOkw6RuIDEwIHBpc3RldHTDpC4gCjIuIFRhcmpvYWphbiB0w6Rtw6RuIG9zYS1hbHVlZW4gbGlpa3VudGFwYWlra29qZW4gaG9pdG9vbiBrw6R5dGV0dMOkdmlzc8OkIG9sZXZhbiBoZW5raWzDtnN0w7ZuIGtvdWx1dHVzLCAxNSAlIGVsaSAxNSBwaXN0ZXR0w6QuCjMuIFZhc3RhYXZhbiB0ecO2bmpvaHRhamFuIGtva2VtdXMgdWxrb2xpaWt1bnRhcGFpa2tvamVuIGtlc8OkaG9pZG9uIHBhbHZlbHV0ZWh0w6R2aXN0w6QgMTUgJSBlbGkgMTUgcGlzdGV0dMOkLjwvY2JjOkRlc2NyaXB0aW9uPgogICAgICAgICAgPC9jYWM6U3Vib3JkaW5hdGVBd2FyZGluZ0NyaXRlcmlvbj4KICAgICAgICA8L2NhYzpBd2FyZGluZ0NyaXRlcmlvbj4KICAgICAgPC9jYWM6QXdhcmRpbmdUZXJtcz4KICAgICAgPGNhYzpUZW5kZXJSZWNpcGllbnRQYXJ0eT4KICAgICAgICA8Y2JjOkVuZHBvaW50SUQ+aHR0cHM6Ly90YXJqb3VzcGFsdmVsdS5maS9zYWxvP2lkPTQ3ODc1NSZhbXA7dHBrPTMyYzA1YjY4LTEwZjQtNGNjZS1hNmQ4LWY2YWUyYjE0MTU0YjwvY2JjOkVuZHBvaW50SUQ+CiAgICAgIDwvY2FjOlRlbmRlclJlY2lwaWVudFBhcnR5PgogICAgICA8Y2FjOlRlbmRlclZhbGlkaXR5UGVyaW9kPgogICAgICAgIDxjYmM6RHVyYXRpb25NZWFzdXJlIHVuaXRDb2RlPSJEQVkiPjEyMDwvY2JjOkR1cmF0aW9uTWVhc3VyZT4KICAgICAgPC9jYWM6VGVuZGVyVmFsaWRpdHlQZXJpb2Q+CiAgICAgIDxjYWM6QXBwZWFsVGVybXM+CiAgICAgICAgPGNhYzpBcHBlYWxSZWNlaXZlclBhcnR5PgogICAgICAgICAgPGNhYzpQYXJ0eUlkZW50aWZpY2F0aW9uPgogICAgICAgICAgICA8Y2JjOklEIHNjaGVtZU5hbWU9Im9yZ2FuaXphdGlvbiI+T1JHLTAwMDI8L2NiYzpJRD4KICAgICAgICAgIDwvY2FjOlBhcnR5SWRlbnRpZmljYXRpb24+CiAgICAgICAgPC9jYWM6QXBwZWFsUmVjZWl2ZXJQYXJ0eT4KICAgICAgPC9jYWM6QXBwZWFsVGVybXM+CiAgICAgIDxjYWM6TGFuZ3VhZ2U+CiAgICAgICAgPGNiYzpJRD5GSU48L2NiYzpJRD4KICAgICAgPC9jYWM6TGFuZ3VhZ2U+CiAgICAgIDxjYWM6UG9zdEF3YXJkUHJvY2Vzcz4KICAgICAgICA8Y2JjOkVsZWN0cm9uaWNPcmRlclVzYWdlSW5kaWNhdG9yPmZhbHNlPC9jYmM6RWxlY3Ryb25pY09yZGVyVXNhZ2VJbmRpY2F0b3I+CiAgICAgICAgPGNiYzpFbGVjdHJvbmljUGF5bWVudFVzYWdlSW5kaWNhdG9yPnRydWU8L2NiYzpFbGVjdHJvbmljUGF5bWVudFVzYWdlSW5kaWNhdG9yPgogICAgICA8L2NhYzpQb3N0QXdhcmRQcm9jZXNzPgogICAgPC9jYWM6VGVuZGVyaW5nVGVybXM+CiAgICA8Y2FjOlRlbmRlcmluZ1Byb2Nlc3M+CiAgICAgIDxjYmM6U3VibWlzc2lvbk1ldGhvZENvZGUgbGlzdE5hbWU9ImVzdWJtaXNzaW9uIj5yZXF1aXJlZDwvY2JjOlN1Ym1pc3Npb25NZXRob2RDb2RlPgogICAgICA8Y2JjOkdvdmVybm1lbnRBZ3JlZW1lbnRDb25zdHJhaW50SW5kaWNhdG9yPnRydWU8L2NiYzpHb3Zlcm5tZW50QWdyZWVtZW50Q29uc3RyYWludEluZGljYXRvcj4KICAgICAgPGNhYzpUZW5kZXJTdWJtaXNzaW9uRGVhZGxpbmVQZXJpb2Q+CiAgICAgICAgPGNiYzpFbmREYXRlPjIwMjMtMTEtMTUrMDI6MDA8L2NiYzpFbmREYXRlPgogICAgICAgIDxjYmM6RW5kVGltZT4xMjowMDowMCswMjowMDwvY2JjOkVuZFRpbWU+CiAgICAgIDwvY2FjOlRlbmRlclN1Ym1pc3Npb25EZWFkbGluZVBlcmlvZD4KICAgICAgPGNhYzpBZGRpdGlvbmFsSW5mb3JtYXRpb25SZXF1ZXN0UGVyaW9kPgogICAgICAgIDxjYmM6RW5kRGF0ZT4yMDIzLTEwLTI2KzAzOjAwPC9jYmM6RW5kRGF0ZT4KICAgICAgICA8Y2JjOkVuZFRpbWU+MTY6MDA6MDArMDM6MDA8L2NiYzpFbmRUaW1lPgogICAgICA8L2NhYzpBZGRpdGlvbmFsSW5mb3JtYXRpb25SZXF1ZXN0UGVyaW9kPgogICAgICA8Y2FjOk9wZW5UZW5kZXJFdmVudD4KICAgICAgICA8Y2JjOk9jY3VycmVuY2VEYXRlPjIwMjMtMTEtMTUrMDI6MDA8L2NiYzpPY2N1cnJlbmNlRGF0ZT4KICAgICAgICA8Y2JjOk9jY3VycmVuY2VUaW1lPjEyOjMwOjAwKzAyOjAwPC9jYmM6T2NjdXJyZW5jZVRpbWU+CiAgICAgIDwvY2FjOk9wZW5UZW5kZXJFdmVudD4KICAgICAgPGNhYzpBdWN0aW9uVGVybXM+CiAgICAgICAgPGNiYzpBdWN0aW9uQ29uc3RyYWludEluZGljYXRvcj5mYWxzZTwvY2JjOkF1Y3Rpb25Db25zdHJhaW50SW5kaWNhdG9yPgogICAgICA8L2NhYzpBdWN0aW9uVGVybXM+CiAgICAgIDxjYWM6Q29udHJhY3RpbmdTeXN0ZW0+CiAgICAgICAgPGNiYzpDb250cmFjdGluZ1N5c3RlbVR5cGVDb2RlIGxpc3ROYW1lPSJkcHMtdXNhZ2UiPm5vbmU8L2NiYzpDb250cmFjdGluZ1N5c3RlbVR5cGVDb2RlPgogICAgICA8L2NhYzpDb250cmFjdGluZ1N5c3RlbT4KICAgICAgPGNhYzpDb250cmFjdGluZ1N5c3RlbT4KICAgICAgICA8Y2JjOkNvbnRyYWN0aW5nU3lzdGVtVHlwZUNvZGUgbGlzdE5hbWU9ImZyYW1ld29yay1hZ3JlZW1lbnQiPm5vbmU8L2NiYzpDb250cmFjdGluZ1N5c3RlbVR5cGVDb2RlPgogICAgICA8L2NhYzpDb250cmFjdGluZ1N5c3RlbT4KICAgIDwvY2FjOlRlbmRlcmluZ1Byb2Nlc3M+CiAgICA8Y2FjOlByb2N1cmVtZW50UHJvamVjdD4KICAgICAgPGNiYzpJRCBzY2hlbWVOYW1lPSJJbnRlcm5hbElEIj4xLjwvY2JjOklEPgogICAgICA8Y2JjOk5hbWUgbGFuZ3VhZ2VJRD0iRklOIj4xLiBQZXJuacO2biBrYXVwdW5naW5vc2EsIGtlc8OkaG9pdG88L2NiYzpOYW1lPgogICAgICA8Y2JjOkRlc2NyaXB0aW9uIGxhbmd1YWdlSUQ9IkZJTiI+SGFua2lubmFuIGtvaHRlZW5hIG9uIFBlcm5pw7ZuIGthdXB1bmdpbm9zYW4gbGlpa3VudGFwYWlra29qZW4ga2Vzw6Rob2l0byB0YXJqb3VzcHl5bm7Dtm4gamEgbGlpdHRlZW4gMS4gSGFua2lubmFuIHZhYXRpbXVrc2V0IGphIHBhbHZlbHVrdXZhdXMgbXVrYWlzZXN0aS4gTGlzw6Rrc2kgdGlsYWFqYSB2YXJhYSBtYWhkb2xsaXN1dWRlbiBrYWh0ZWVuIG9wdGlvdnVvdGVlbiAyMDI2IGphIDIwMjcuIE9wdGlvbGxhIHRhcmtvaXRldGFhbiBtYWhkb2xsaXN1dXR0YSBzb3BpbXVrc2VuIGphdGthbWlzZWVuIGFsa3VwZXLDpGlzaW4gZWhkb2luLiBPcHRpb2lkZW4ga8OkeXTDtnN0w6QgamEga2VzdG9zdGEgcMOkw6R0ZXTDpMOkbiBlcmlrc2Vlbi4gPC9jYmM6RGVzY3JpcHRpb24+CiAgICAgIDxjYmM6UHJvY3VyZW1lbnRUeXBlQ29kZSBsaXN0TmFtZT0iY29udHJhY3QtbmF0dXJlIj5zZXJ2aWNlczwvY2JjOlByb2N1cmVtZW50VHlwZUNvZGU+CiAgICAgIDxjYmM6U01FU3VpdGFibGVJbmRpY2F0b3I+dHJ1ZTwvY2JjOlNNRVN1aXRhYmxlSW5kaWNhdG9yPgogICAgICA8Y2FjOk1haW5Db21tb2RpdHlDbGFzc2lmaWNhdGlvbj4KICAgICAgICA8Y2JjOkl0ZW1DbGFzc2lmaWNhdGlvbkNvZGUgbGlzdE5hbWU9ImNwdiI+OTI2MTAwMDA8L2NiYzpJdGVtQ2xhc3NpZmljYXRpb25Db2RlPgogICAgICA8L2NhYzpNYWluQ29tbW9kaXR5Q2xhc3NpZmljYXRpb24+CiAgICAgIDxjYWM6UmVhbGl6ZWRMb2NhdGlvbj4KICAgICAgICA8Y2FjOkFkZHJlc3M+CiAgICAgICAgICA8Y2JjOkNvdW50cnlTdWJlbnRpdHlDb2RlIGxpc3ROYW1lPSJudXRzIj5GSTFDMTwvY2JjOkNvdW50cnlTdWJlbnRpdHlDb2RlPgogICAgICAgICAgPGNhYzpDb3VudHJ5PgogICAgICAgICAgICA8Y2JjOklkZW50aWZpY2F0aW9uQ29kZSBsaXN0TmFtZT0iY291bnRyeSI+RklOPC9jYmM6SWRlbnRpZmljYXRpb25Db2RlPgogICAgICAgICAgPC9jYWM6Q291bnRyeT4KICAgICAgICA8L2NhYzpBZGRyZXNzPgogICAgICA8L2NhYzpSZWFsaXplZExvY2F0aW9uPgogICAgICA8Y2FjOlBsYW5uZWRQZXJpb2Q+CiAgICAgICAgPGNiYzpTdGFydERhdGU+MjAyNC0wMS0wMSswMjowMDwvY2JjOlN0YXJ0RGF0ZT4KICAgICAgICA8Y2JjOkVuZERhdGU+MjAyNS0xMi0zMSswMjowMDwvY2JjOkVuZERhdGU+CiAgICAgIDwvY2FjOlBsYW5uZWRQZXJpb2Q+CiAgICAgIDxjYWM6Q29udHJhY3RFeHRlbnNpb24+CiAgICAgICAgPGNiYzpNYXhpbXVtTnVtYmVyTnVtZXJpYz4yPC9jYmM6TWF4aW11bU51bWJlck51bWVyaWM+CiAgICAgICAgPGNhYzpSZW5ld2FsPgogICAgICAgICAgPGNhYzpQZXJpb2Q+CiAgICAgICAgICAgIDxjYmM6RGVzY3JpcHRpb24gbGFuZ3VhZ2VJRD0iRklOIj5UaWxhYWphIHZhcmFhIG1haGRvbGxpc3V1ZGVuIGthaHRlZW4gb3B0aW92dW90ZWVuIDIwMjYgamEgMjAyNy4gT3B0aW9sbGEgdGFya29pdGV0YWFuIG1haGRvbGxpc3V1dHRhIHNvcGltdWtzZW4gamF0a2FtaXNlZW4gYWxrdXBlcsOkaXNpbiBlaGRvaW4uIE9wdGlvaWRlbiBrw6R5dMO2c3TDpCBqYSBrZXN0b3N0YSBww6TDpHRldMOkw6RuIGVyaWtzZWVuLiA8L2NiYzpEZXNjcmlwdGlvbj4KICAgICAgICAgIDwvY2FjOlBlcmlvZD4KICAgICAgICA8L2NhYzpSZW5ld2FsPgogICAgICA8L2NhYzpDb250cmFjdEV4dGVuc2lvbj4KICAgIDwvY2FjOlByb2N1cmVtZW50UHJvamVjdD4KICA8L2NhYzpQcm9jdXJlbWVudFByb2plY3RMb3Q+CiAgPGNhYzpQcm9jdXJlbWVudFByb2plY3RMb3Q+CiAgICA8Y2JjOklEIHNjaGVtZU5hbWU9IkxvdCI+TE9ULTAwMDI8L2NiYzpJRD4KICAgIDxjYWM6VGVuZGVyaW5nVGVybXM+CiAgICAgIDxleHQ6VUJMRXh0ZW5zaW9ucz4KICAgICAgICA8ZXh0OlVCTEV4dGVuc2lvbj4KICAgICAgICAgIDxleHQ6RXh0ZW5zaW9uQ29udGVudD4KICAgICAgICAgICAgPGVmZXh0OkVmb3Jtc0V4dGVuc2lvbj4KICAgICAgICAgICAgICA8ZWZhYzpTZWxlY3Rpb25Dcml0ZXJpYT4KICAgICAgICAgICAgICAgIDxjYmM6Q3JpdGVyaW9uVHlwZUNvZGUgbGlzdE5hbWU9InNlbGVjdGlvbi1jcml0ZXJpb24iPmVmLXN0YW5kPC9jYmM6Q3JpdGVyaW9uVHlwZUNvZGU+CiAgICAgICAgICAgICAgICA8Y2JjOkNhbGN1bGF0aW9uRXhwcmVzc2lvbkNvZGUgbGlzdE5hbWU9InVzYWdlIj5uLXVzZWQ8L2NiYzpDYWxjdWxhdGlvbkV4cHJlc3Npb25Db2RlPgogICAgICAgICAgICAgIDwvZWZhYzpTZWxlY3Rpb25Dcml0ZXJpYT4KICAgICAgICAgICAgICA8ZWZhYzpTZWxlY3Rpb25Dcml0ZXJpYT4KICAgICAgICAgICAgICAgIDxjYmM6Q3JpdGVyaW9uVHlwZUNvZGUgbGlzdE5hbWU9InNlbGVjdGlvbi1jcml0ZXJpb24iPnN1aS1hY3Q8L2NiYzpDcml0ZXJpb25UeXBlQ29kZT4KICAgICAgICAgICAgICAgIDxjYmM6Q2FsY3VsYXRpb25FeHByZXNzaW9uQ29kZSBsaXN0TmFtZT0idXNhZ2UiPm4tdXNlZDwvY2JjOkNhbGN1bGF0aW9uRXhwcmVzc2lvbkNvZGU+CiAgICAgICAgICAgICAgPC9lZmFjOlNlbGVjdGlvbkNyaXRlcmlhPgogICAgICAgICAgICAgIDxlZmFjOlNlbGVjdGlvbkNyaXRlcmlhPgogICAgICAgICAgICAgICAgPGNiYzpDcml0ZXJpb25UeXBlQ29kZSBsaXN0TmFtZT0ic2VsZWN0aW9uLWNyaXRlcmlvbiI+dHAtYWJpbDwvY2JjOkNyaXRlcmlvblR5cGVDb2RlPgogICAgICAgICAgICAgICAgPGNiYzpDYWxjdWxhdGlvbkV4cHJlc3Npb25Db2RlIGxpc3ROYW1lPSJ1c2FnZSI+bi11c2VkPC9jYmM6Q2FsY3VsYXRpb25FeHByZXNzaW9uQ29kZT4KICAgICAgICAgICAgICA8L2VmYWM6U2VsZWN0aW9uQ3JpdGVyaWE+CiAgICAgICAgICAgIDwvZWZleHQ6RWZvcm1zRXh0ZW5zaW9uPgogICAgICAgICAgPC9leHQ6RXh0ZW5zaW9uQ29udGVudD4KICAgICAgICA8L2V4dDpVQkxFeHRlbnNpb24+CiAgICAgIDwvZXh0OlVCTEV4dGVuc2lvbnM+CiAgICAgIDxjYmM6RnVuZGluZ1Byb2dyYW1Db2RlIGxpc3ROYW1lPSJldS1mdW5kZWQiPm5vLWV1LWZ1bmRzPC9jYmM6RnVuZGluZ1Byb2dyYW1Db2RlPgogICAgICA8Y2JjOlJlY3VycmluZ1Byb2N1cmVtZW50SW5kaWNhdG9yPnRydWU8L2NiYzpSZWN1cnJpbmdQcm9jdXJlbWVudEluZGljYXRvcj4KICAgICAgPGNiYzpNdWx0aXBsZVRlbmRlcnNDb2RlIGxpc3ROYW1lPSJwZXJtaXNzaW9uIj5hbGxvd2VkPC9jYmM6TXVsdGlwbGVUZW5kZXJzQ29kZT4KICAgICAgPGNhYzpDYWxsRm9yVGVuZGVyc0RvY3VtZW50UmVmZXJlbmNlPgogICAgICAgIDxjYmM6SUQ+TGlua2tpIGhhbmtpbnRhLWFzaWFraXJqb2loaW48L2NiYzpJRD4KICAgICAgICA8Y2JjOkRvY3VtZW50VHlwZT5ub24tcmVzdHJpY3RlZC1kb2N1bWVudDwvY2JjOkRvY3VtZW50VHlwZT4KICAgICAgICA8Y2FjOkF0dGFjaG1lbnQ+CiAgICAgICAgICA8Y2FjOkV4dGVybmFsUmVmZXJlbmNlPgogICAgICAgICAgICA8Y2JjOlVSST5odHRwczovL3RhcmpvdXNwYWx2ZWx1LmZpL3NhbG8/aWQ9NDc4NzU1JmFtcDt0cGs9MzJjMDViNjgtMTBmNC00Y2NlLWE2ZDgtZjZhZTJiMTQxNTRiPC9jYmM6VVJJPgogICAgICAgICAgPC9jYWM6RXh0ZXJuYWxSZWZlcmVuY2U+CiAgICAgICAgPC9jYWM6QXR0YWNobWVudD4KICAgICAgPC9jYWM6Q2FsbEZvclRlbmRlcnNEb2N1bWVudFJlZmVyZW5jZT4KICAgICAgPGNhYzpUZW5kZXJlclF1YWxpZmljYXRpb25SZXF1ZXN0PgogICAgICAgIDxjYWM6U3BlY2lmaWNUZW5kZXJlclJlcXVpcmVtZW50PgogICAgICAgICAgPGNiYzpUZW5kZXJlclJlcXVpcmVtZW50VHlwZUNvZGUgbGlzdE5hbWU9InJlc2VydmVkLXByb2N1cmVtZW50Ij5ub25lPC9jYmM6VGVuZGVyZXJSZXF1aXJlbWVudFR5cGVDb2RlPgogICAgICAgIDwvY2FjOlNwZWNpZmljVGVuZGVyZXJSZXF1aXJlbWVudD4KICAgICAgPC9jYWM6VGVuZGVyZXJRdWFsaWZpY2F0aW9uUmVxdWVzdD4KICAgICAgPGNhYzpDb250cmFjdEV4ZWN1dGlvblJlcXVpcmVtZW50PgogICAgICAgIDxjYmM6RXhlY3V0aW9uUmVxdWlyZW1lbnRDb2RlIGxpc3ROYW1lPSJlaW52b2ljaW5nIj5yZXF1aXJlZDwvY2JjOkV4ZWN1dGlvblJlcXVpcmVtZW50Q29kZT4KICAgICAgPC9jYWM6Q29udHJhY3RFeGVjdXRpb25SZXF1aXJlbWVudD4KICAgICAgPGNhYzpDb250cmFjdEV4ZWN1dGlvblJlcXVpcmVtZW50PgogICAgICAgIDxjYmM6RXhlY3V0aW9uUmVxdWlyZW1lbnRDb2RlIGxpc3ROYW1lPSJyZXNlcnZlZC1leGVjdXRpb24iPm5vPC9jYmM6RXhlY3V0aW9uUmVxdWlyZW1lbnRDb2RlPgogICAgICA8L2NhYzpDb250cmFjdEV4ZWN1dGlvblJlcXVpcmVtZW50PgogICAgICA8Y2FjOkNvbnRyYWN0RXhlY3V0aW9uUmVxdWlyZW1lbnQ+CiAgICAgICAgPGNiYzpFeGVjdXRpb25SZXF1aXJlbWVudENvZGUgbGlzdE5hbWU9ImVjYXRhbG9nLXN1Ym1pc3Npb24iPm5vdC1hbGxvd2VkPC9jYmM6RXhlY3V0aW9uUmVxdWlyZW1lbnRDb2RlPgogICAgICA8L2NhYzpDb250cmFjdEV4ZWN1dGlvblJlcXVpcmVtZW50PgogICAgICA8Y2FjOkF3YXJkaW5nVGVybXM+CiAgICAgICAgPGNhYzpBd2FyZGluZ0NyaXRlcmlvbj4KICAgICAgICAgIDxjYWM6U3Vib3JkaW5hdGVBd2FyZGluZ0NyaXRlcmlvbj4KICAgICAgICAgICAgPGV4dDpVQkxFeHRlbnNpb25zPgogICAgICAgICAgICAgIDxleHQ6VUJMRXh0ZW5zaW9uPgogICAgICAgICAgICAgICAgPGV4dDpFeHRlbnNpb25Db250ZW50PgogICAgICAgICAgICAgICAgICA8ZWZleHQ6RWZvcm1zRXh0ZW5zaW9uPgogICAgICAgICAgICAgICAgICAgIDxlZmFjOkF3YXJkQ3JpdGVyaW9uUGFyYW1ldGVyPgogICAgICAgICAgICAgICAgICAgICAgPGVmYmM6UGFyYW1ldGVyQ29kZSBsaXN0TmFtZT0ibnVtYmVyLXdlaWdodCI+cG9pLWV4YTwvZWZiYzpQYXJhbWV0ZXJDb2RlPgogICAgICAgICAgICAgICAgICAgICAgPGVmYmM6UGFyYW1ldGVyTnVtZXJpYz42MDwvZWZiYzpQYXJhbWV0ZXJOdW1lcmljPgogICAgICAgICAgICAgICAgICAgIDwvZWZhYzpBd2FyZENyaXRlcmlvblBhcmFtZXRlcj4KICAgICAgICAgICAgICAgICAgPC9lZmV4dDpFZm9ybXNFeHRlbnNpb24+CiAgICAgICAgICAgICAgICA8L2V4dDpFeHRlbnNpb25Db250ZW50PgogICAgICAgICAgICAgIDwvZXh0OlVCTEV4dGVuc2lvbj4KICAgICAgICAgICAgPC9leHQ6VUJMRXh0ZW5zaW9ucz4KICAgICAgICAgICAgPGNiYzpBd2FyZGluZ0NyaXRlcmlvblR5cGVDb2RlIGxpc3ROYW1lPSJhd2FyZC1jcml0ZXJpb24tdHlwZSI+cHJpY2U8L2NiYzpBd2FyZGluZ0NyaXRlcmlvblR5cGVDb2RlPgogICAgICAgICAgICA8Y2JjOk5hbWUgbGFuZ3VhZ2VJRD0iRklOIj5Lb2tvbmFpc3ZlcnRhaWx1aGludGE8L2NiYzpOYW1lPgogICAgICAgICAgICA8Y2JjOkRlc2NyaXB0aW9uIGxhbmd1YWdlSUQ9IkZJTiI+SGFsdmluIHRhcmpvdHR1IHRhcmpvdXNweXlubsO2biBtdWthaW5lbiBrb2tvbmFpc2hpbnRhIHNhYSB2ZXJ0YWlsdXNzYSBlbmltbcOkaXNwaXN0ZWV0IDYwLiBNdWlkZW4gdGFyam9hamllbiBwaXN0ZW3DpMOkcsOkIG11b2Rvc3R1dSBzdW9yYXNzYSBzdWh0ZWVzc2EgaGFsdmltcGFhbiAoaGFsdmluIC8gdmVydGFpbHRhdmEgaGludGEgeCBlbmltbcOkaXNwaXN0ZWV0KS48L2NiYzpEZXNjcmlwdGlvbj4KICAgICAgICAgIDwvY2FjOlN1Ym9yZGluYXRlQXdhcmRpbmdDcml0ZXJpb24+CiAgICAgICAgICA8Y2FjOlN1Ym9yZGluYXRlQXdhcmRpbmdDcml0ZXJpb24+CiAgICAgICAgICAgIDxleHQ6VUJMRXh0ZW5zaW9ucz4KICAgICAgICAgICAgICA8ZXh0OlVCTEV4dGVuc2lvbj4KICAgICAgICAgICAgICAgIDxleHQ6RXh0ZW5zaW9uQ29udGVudD4KICAgICAgICAgICAgICAgICAgPGVmZXh0OkVmb3Jtc0V4dGVuc2lvbj4KICAgICAgICAgICAgICAgICAgICA8ZWZhYzpBd2FyZENyaXRlcmlvblBhcmFtZXRlcj4KICAgICAgICAgICAgICAgICAgICAgIDxlZmJjOlBhcmFtZXRlckNvZGUgbGlzdE5hbWU9Im51bWJlci13ZWlnaHQiPnBvaS1leGE8L2VmYmM6UGFyYW1ldGVyQ29kZT4KICAgICAgICAgICAgICAgICAgICAgIDxlZmJjOlBhcmFtZXRlck51bWVyaWM+NDA8L2VmYmM6UGFyYW1ldGVyTnVtZXJpYz4KICAgICAgICAgICAgICAgICAgICA8L2VmYWM6QXdhcmRDcml0ZXJpb25QYXJhbWV0ZXI+CiAgICAgICAgICAgICAgICAgIDwvZWZleHQ6RWZvcm1zRXh0ZW5zaW9uPgogICAgICAgICAgICAgICAgPC9leHQ6RXh0ZW5zaW9uQ29udGVudD4KICAgICAgICAgICAgICA8L2V4dDpVQkxFeHRlbnNpb24+CiAgICAgICAgICAgIDwvZXh0OlVCTEV4dGVuc2lvbnM+CiAgICAgICAgICAgIDxjYmM6QXdhcmRpbmdDcml0ZXJpb25UeXBlQ29kZSBsaXN0TmFtZT0iYXdhcmQtY3JpdGVyaW9uLXR5cGUiPnF1YWxpdHk8L2NiYzpBd2FyZGluZ0NyaXRlcmlvblR5cGVDb2RlPgogICAgICAgICAgICA8Y2JjOk5hbWUgbGFuZ3VhZ2VJRD0iRklOIj5MYWF0dXBpc3RlZXQ8L2NiYzpOYW1lPgogICAgICAgICAgICA8Y2JjOkRlc2NyaXB0aW9uIGxhbmd1YWdlSUQ9IkZJTiI+TGFhdHVwaXN0ZXl0eXMgamEgLWtyaXRlZXJpIG92YXQgc2V1cmFhdmF0OgoxLiBUYXJqb2FqYW4gaGVua2lsw7ZzdMO2biAoaWxtYW4gdmFzdGFhdmFhIHR5w7Zuam9odGFqYWEpIGtva2VtdXMgdmFzdGFhdmlzdGEgdWxrb2xpaWt1bnRhcGFpa2tvamVuIHRhbHZpaG9pZG9uIHBhbHZlbHV0ZWh0w6R2aXN0w6QsIDEwICUgZWxpIGVuaW50w6TDpG4gMTAgcGlzdGV0dMOkLiAKMi4gVGFyam9hamFuIHTDpG3DpG4gb3NhLWFsdWVlbiBsaWlrdW50YXBhaWtrb2plbiBob2l0b29uIGvDpHl0ZXR0w6R2aXNzw6Qgb2xldmFuIGhlbmtpbMO2c3TDtm4ga291bHV0dXMsIDE1ICUgZWxpIDE1IHBpc3RldHTDpC4KMy4gVmFzdGFhdmFuIHR5w7Zuam9odGFqYW4ga29rZW11cyB1bGtvbGlpa3VudGFwYWlra29qZW4gdGFsdmlob2lkb24gcGFsdmVsdXRlaHTDpHZpc3TDpCAxNSAlIGVsaSAxNSBwaXN0ZXR0w6QuPC9jYmM6RGVzY3JpcHRpb24+CiAgICAgICAgICA8L2NhYzpTdWJvcmRpbmF0ZUF3YXJkaW5nQ3JpdGVyaW9uPgogICAgICAgIDwvY2FjOkF3YXJkaW5nQ3JpdGVyaW9uPgogICAgICA8L2NhYzpBd2FyZGluZ1Rlcm1zPgogICAgICA8Y2FjOlRlbmRlclJlY2lwaWVudFBhcnR5PgogICAgICAgIDxjYmM6RW5kcG9pbnRJRD5odHRwczovL3RhcmpvdXNwYWx2ZWx1LmZpL3NhbG8/aWQ9NDc4NzU1JmFtcDt0cGs9MzJjMDViNjgtMTBmNC00Y2NlLWE2ZDgtZjZhZTJiMTQxNTRiPC9jYmM6RW5kcG9pbnRJRD4KICAgICAgPC9jYWM6VGVuZGVyUmVjaXBpZW50UGFydHk+CiAgICAgIDxjYWM6VGVuZGVyVmFsaWRpdHlQZXJpb2Q+CiAgICAgICAgPGNiYzpEdXJhdGlvbk1lYXN1cmUgdW5pdENvZGU9IkRBWSI+MTIwPC9jYmM6RHVyYXRpb25NZWFzdXJlPgogICAgICA8L2NhYzpUZW5kZXJWYWxpZGl0eVBlcmlvZD4KICAgICAgPGNhYzpBcHBlYWxUZXJtcz4KICAgICAgICA8Y2FjOkFwcGVhbFJlY2VpdmVyUGFydHk+CiAgICAgICAgICA8Y2FjOlBhcnR5SWRlbnRpZmljYXRpb24+CiAgICAgICAgICAgIDxjYmM6SUQgc2NoZW1lTmFtZT0ib3JnYW5pemF0aW9uIj5PUkctMDAwMjwvY2JjOklEPgogICAgICAgICAgPC9jYWM6UGFydHlJZGVudGlmaWNhdGlvbj4KICAgICAgICA8L2NhYzpBcHBlYWxSZWNlaXZlclBhcnR5PgogICAgICA8L2NhYzpBcHBlYWxUZXJtcz4KICAgICAgPGNhYzpMYW5ndWFnZT4KICAgICAgICA8Y2JjOklEPkZJTjwvY2JjOklEPgogICAgICA8L2NhYzpMYW5ndWFnZT4KICAgICAgPGNhYzpQb3N0QXdhcmRQcm9jZXNzPgogICAgICAgIDxjYmM6RWxlY3Ryb25pY09yZGVyVXNhZ2VJbmRpY2F0b3I+dHJ1ZTwvY2JjOkVsZWN0cm9uaWNPcmRlclVzYWdlSW5kaWNhdG9yPgogICAgICAgIDxjYmM6RWxlY3Ryb25pY1BheW1lbnRVc2FnZUluZGljYXRvcj50cnVlPC9jYmM6RWxlY3Ryb25pY1BheW1lbnRVc2FnZUluZGljYXRvcj4KICAgICAgPC9jYWM6UG9zdEF3YXJkUHJvY2Vzcz4KICAgIDwvY2FjOlRlbmRlcmluZ1Rlcm1zPgogICAgPGNhYzpUZW5kZXJpbmdQcm9jZXNzPgogICAgICA8Y2JjOlN1Ym1pc3Npb25NZXRob2RDb2RlIGxpc3ROYW1lPSJlc3VibWlzc2lvbiI+cmVxdWlyZWQ8L2NiYzpTdWJtaXNzaW9uTWV0aG9kQ29kZT4KICAgICAgPGNiYzpHb3Zlcm5tZW50QWdyZWVtZW50Q29uc3RyYWludEluZGljYXRvcj50cnVlPC9jYmM6R292ZXJubWVudEFncmVlbWVudENvbnN0cmFpbnRJbmRpY2F0b3I+CiAgICAgIDxjYWM6VGVuZGVyU3VibWlzc2lvbkRlYWRsaW5lUGVyaW9kPgogICAgICAgIDxjYmM6RW5kRGF0ZT4yMDIzLTExLTE1KzAyOjAwPC9jYmM6RW5kRGF0ZT4KICAgICAgICA8Y2JjOkVuZFRpbWU+MTI6MDA6MDArMDI6MDA8L2NiYzpFbmRUaW1lPgogICAgICA8L2NhYzpUZW5kZXJTdWJtaXNzaW9uRGVhZGxpbmVQZXJpb2Q+CiAgICAgIDxjYWM6QWRkaXRpb25hbEluZm9ybWF0aW9uUmVxdWVzdFBlcmlvZD4KICAgICAgICA8Y2JjOkVuZERhdGU+MjAyMy0xMC0yNiswMzowMDwvY2JjOkVuZERhdGU+CiAgICAgICAgPGNiYzpFbmRUaW1lPjE2OjAwOjAwKzAzOjAwPC9jYmM6RW5kVGltZT4KICAgICAgPC9jYWM6QWRkaXRpb25hbEluZm9ybWF0aW9uUmVxdWVzdFBlcmlvZD4KICAgICAgPGNhYzpPcGVuVGVuZGVyRXZlbnQ+CiAgICAgICAgPGNiYzpPY2N1cnJlbmNlRGF0ZT4yMDIzLTExLTE1KzAyOjAwPC9jYmM6T2NjdXJyZW5jZURhdGU+CiAgICAgICAgPGNiYzpPY2N1cnJlbmNlVGltZT4xMjozMDowMCswMjowMDwvY2JjOk9jY3VycmVuY2VUaW1lPgogICAgICA8L2NhYzpPcGVuVGVuZGVyRXZlbnQ+CiAgICAgIDxjYWM6QXVjdGlvblRlcm1zPgogICAgICAgIDxjYmM6QXVjdGlvbkNvbnN0cmFpbnRJbmRpY2F0b3I+ZmFsc2U8L2NiYzpBdWN0aW9uQ29uc3RyYWludEluZGljYXRvcj4KICAgICAgPC9jYWM6QXVjdGlvblRlcm1zPgogICAgICA8Y2FjOkNvbnRyYWN0aW5nU3lzdGVtPgogICAgICAgIDxjYmM6Q29udHJhY3RpbmdTeXN0ZW1UeXBlQ29kZSBsaXN0TmFtZT0iZHBzLXVzYWdlIj5ub25lPC9jYmM6Q29udHJhY3RpbmdTeXN0ZW1UeXBlQ29kZT4KICAgICAgPC9jYWM6Q29udHJhY3RpbmdTeXN0ZW0+CiAgICAgIDxjYWM6Q29udHJhY3RpbmdTeXN0ZW0+CiAgICAgICAgPGNiYzpDb250cmFjdGluZ1N5c3RlbVR5cGVDb2RlIGxpc3ROYW1lPSJmcmFtZXdvcmstYWdyZWVtZW50Ij5ub25lPC9jYmM6Q29udHJhY3RpbmdTeXN0ZW1UeXBlQ29kZT4KICAgICAgPC9jYWM6Q29udHJhY3RpbmdTeXN0ZW0+CiAgICA8L2NhYzpUZW5kZXJpbmdQcm9jZXNzPgogICAgPGNhYzpQcm9jdXJlbWVudFByb2plY3Q+CiAgICAgIDxjYmM6SUQgc2NoZW1lTmFtZT0iSW50ZXJuYWxJRCI+Mi48L2NiYzpJRD4KICAgICAgPGNiYzpOYW1lIGxhbmd1YWdlSUQ9IkZJTiI+Mi4gUGVybmnDtm4ga2F1cHVuZ2lub3NhLCB0YWx2aWhvaXRvPC9jYmM6TmFtZT4KICAgICAgPGNiYzpEZXNjcmlwdGlvbiBsYW5ndWFnZUlEPSJGSU4iPkhhbmtpbm5hbiBrb2h0ZWVuYSBvbiBQZXJuacO2biBrYXVwdW5naW5vc2FuIGxpaWt1bnRhcGFpa2tvamVuIHRhbHZpaG9pdG8gdGFyam91c3B5eW5uw7ZuIGphIGxpaXR0ZWVuIDEuIEhhbmtpbm5hbiB2YWF0aW11a3NldCBqYSBwYWx2ZWx1a3V2YXVzIG11a2Fpc2VzdGkuIExpc8Oka3NpIHRpbGFhamEgdmFyYWEgbWFoZG9sbGlzdXVkZW4ga2FodGVlbiBvcHRpb3Z1b3RlZW4gMjAyNiBqYSAyMDI3LiBPcHRpb2xsYSB0YXJrb2l0ZXRhYW4gbWFoZG9sbGlzdXV0dGEgc29waW11a3NlbiBqYXRrYW1pc2VlbiBhbGt1cGVyw6Rpc2luIGVoZG9pbi4gT3B0aW9pZGVuIGvDpHl0w7ZzdMOkIGphIGtlc3Rvc3RhIHDDpMOkdGV0w6TDpG4gZXJpa3NlZW4uIDwvY2JjOkRlc2NyaXB0aW9uPgogICAgICA8Y2JjOlByb2N1cmVtZW50VHlwZUNvZGUgbGlzdE5hbWU9ImNvbnRyYWN0LW5hdHVyZSI+c2VydmljZXM8L2NiYzpQcm9jdXJlbWVudFR5cGVDb2RlPgogICAgICA8Y2JjOlNNRVN1aXRhYmxlSW5kaWNhdG9yPnRydWU8L2NiYzpTTUVTdWl0YWJsZUluZGljYXRvcj4KICAgICAgPGNhYzpNYWluQ29tbW9kaXR5Q2xhc3NpZmljYXRpb24+CiAgICAgICAgPGNiYzpJdGVtQ2xhc3NpZmljYXRpb25Db2RlIGxpc3ROYW1lPSJjcHYiPjkyNjEwMDAwPC9jYmM6SXRlbUNsYXNzaWZpY2F0aW9uQ29kZT4KICAgICAgPC9jYWM6TWFpbkNvbW1vZGl0eUNsYXNzaWZpY2F0aW9uPgogICAgICA8Y2FjOlJlYWxpemVkTG9jYXRpb24+CiAgICAgICAgPGNhYzpBZGRyZXNzPgogICAgICAgICAgPGNiYzpDb3VudHJ5U3ViZW50aXR5Q29kZSBsaXN0TmFtZT0ibnV0cyI+RkkxQzE8L2NiYzpDb3VudHJ5U3ViZW50aXR5Q29kZT4KICAgICAgICAgIDxjYWM6Q291bnRyeT4KICAgICAgICAgICAgPGNiYzpJZGVudGlmaWNhdGlvbkNvZGUgbGlzdE5hbWU9ImNvdW50cnkiPkZJTjwvY2JjOklkZW50aWZpY2F0aW9uQ29kZT4KICAgICAgICAgIDwvY2FjOkNvdW50cnk+CiAgICAgICAgPC9jYWM6QWRkcmVzcz4KICAgICAgPC9jYWM6UmVhbGl6ZWRMb2NhdGlvbj4KICAgICAgPGNhYzpQbGFubmVkUGVyaW9kPgogICAgICAgIDxjYmM6U3RhcnREYXRlPjIwMjQtMDEtMDErMDI6MDA8L2NiYzpTdGFydERhdGU+CiAgICAgICAgPGNiYzpFbmREYXRlPjIwMjUtMTItMzErMDI6MDA8L2NiYzpFbmREYXRlPgogICAgICA8L2NhYzpQbGFubmVkUGVyaW9kPgogICAgICA8Y2FjOkNvbnRyYWN0RXh0ZW5zaW9uPgogICAgICAgIDxjYmM6TWF4aW11bU51bWJlck51bWVyaWM+MjwvY2JjOk1heGltdW1OdW1iZXJOdW1lcmljPgogICAgICAgIDxjYWM6UmVuZXdhbD4KICAgICAgICAgIDxjYWM6UGVyaW9kPgogICAgICAgICAgICA8Y2JjOkRlc2NyaXB0aW9uIGxhbmd1YWdlSUQ9IkZJTiI+VGlsYWFqYSB2YXJhYSBtYWhkb2xsaXN1dWRlbiBrYWh0ZWVuIG9wdGlvdnVvdGVlbiAyMDI2IGphIDIwMjcuIE9wdGlvbGxhIHRhcmtvaXRldGFhbiBtYWhkb2xsaXN1dXR0YSBzb3BpbXVrc2VuIGphdGthbWlzZWVuIGFsa3VwZXLDpGlzaW4gZWhkb2luLiBPcHRpb2lkZW4ga8OkeXTDtnN0w6QgamEga2VzdG9zdGEgcMOkw6R0ZXTDpMOkbiBlcmlrc2Vlbi4gPC9jYmM6RGVzY3JpcHRpb24+CiAgICAgICAgICA8L2NhYzpQZXJpb2Q+CiAgICAgICAgPC9jYWM6UmVuZXdhbD4KICAgICAgPC9jYWM6Q29udHJhY3RFeHRlbnNpb24+CiAgICA8L2NhYzpQcm9jdXJlbWVudFByb2plY3Q+CiAgPC9jYWM6UHJvY3VyZW1lbnRQcm9qZWN0TG90PgogIDxjYWM6UHJvY3VyZW1lbnRQcm9qZWN0TG90PgogICAgPGNiYzpJRCBzY2hlbWVOYW1lPSJMb3QiPkxPVC0wMDAzPC9jYmM6SUQ+CiAgICA8Y2FjOlRlbmRlcmluZ1Rlcm1zPgogICAgICA8ZXh0OlVCTEV4dGVuc2lvbnM+CiAgICAgICAgPGV4dDpVQkxFeHRlbnNpb24+CiAgICAgICAgICA8ZXh0OkV4dGVuc2lvbkNvbnRlbnQ+CiAgICAgICAgICAgIDxlZmV4dDpFZm9ybXNFeHRlbnNpb24+CiAgICAgICAgICAgICAgPGVmYWM6U2VsZWN0aW9uQ3JpdGVyaWE+CiAgICAgICAgICAgICAgICA8Y2JjOkNyaXRlcmlvblR5cGVDb2RlIGxpc3ROYW1lPSJzZWxlY3Rpb24tY3JpdGVyaW9uIj5lZi1zdGFuZDwvY2JjOkNyaXRlcmlvblR5cGVDb2RlPgogICAgICAgICAgICAgICAgPGNiYzpDYWxjdWxhdGlvbkV4cHJlc3Npb25Db2RlIGxpc3ROYW1lPSJ1c2FnZSI+bi11c2VkPC9jYmM6Q2FsY3VsYXRpb25FeHByZXNzaW9uQ29kZT4KICAgICAgICAgICAgICA8L2VmYWM6U2VsZWN0aW9uQ3JpdGVyaWE+CiAgICAgICAgICAgICAgPGVmYWM6U2VsZWN0aW9uQ3JpdGVyaWE+CiAgICAgICAgICAgICAgICA8Y2JjOkNyaXRlcmlvblR5cGVDb2RlIGxpc3ROYW1lPSJzZWxlY3Rpb24tY3JpdGVyaW9uIj5zdWktYWN0PC9jYmM6Q3JpdGVyaW9uVHlwZUNvZGU+CiAgICAgICAgICAgICAgICA8Y2JjOkNhbGN1bGF0aW9uRXhwcmVzc2lvbkNvZGUgbGlzdE5hbWU9InVzYWdlIj5uLXVzZWQ8L2NiYzpDYWxjdWxhdGlvbkV4cHJlc3Npb25Db2RlPgogICAgICAgICAgICAgIDwvZWZhYzpTZWxlY3Rpb25Dcml0ZXJpYT4KICAgICAgICAgICAgICA8ZWZhYzpTZWxlY3Rpb25Dcml0ZXJpYT4KICAgICAgICAgICAgICAgIDxjYmM6Q3JpdGVyaW9uVHlwZUNvZGUgbGlzdE5hbWU9InNlbGVjdGlvbi1jcml0ZXJpb24iPnRwLWFiaWw8L2NiYzpDcml0ZXJpb25UeXBlQ29kZT4KICAgICAgICAgICAgICAgIDxjYmM6Q2FsY3VsYXRpb25FeHByZXNzaW9uQ29kZSBsaXN0TmFtZT0idXNhZ2UiPm4tdXNlZDwvY2JjOkNhbGN1bGF0aW9uRXhwcmVzc2lvbkNvZGU+CiAgICAgICAgICAgICAgPC9lZmFjOlNlbGVjdGlvbkNyaXRlcmlhPgogICAgICAgICAgICA8L2VmZXh0OkVmb3Jtc0V4dGVuc2lvbj4KICAgICAgICAgIDwvZXh0OkV4dGVuc2lvbkNvbnRlbnQ+CiAgICAgICAgPC9leHQ6VUJMRXh0ZW5zaW9uPgogICAgICA8L2V4dDpVQkxFeHRlbnNpb25zPgogICAgICA8Y2JjOkZ1bmRpbmdQcm9ncmFtQ29kZSBsaXN0TmFtZT0iZXUtZnVuZGVkIj5uby1ldS1mdW5kczwvY2JjOkZ1bmRpbmdQcm9ncmFtQ29kZT4KICAgICAgPGNiYzpSZWN1cnJpbmdQcm9jdXJlbWVudEluZGljYXRvcj50cnVlPC9jYmM6UmVjdXJyaW5nUHJvY3VyZW1lbnRJbmRpY2F0b3I+CiAgICAgIDxjYmM6TXVsdGlwbGVUZW5kZXJzQ29kZSBsaXN0TmFtZT0icGVybWlzc2lvbiI+YWxsb3dlZDwvY2JjOk11bHRpcGxlVGVuZGVyc0NvZGU+CiAgICAgIDxjYWM6Q2FsbEZvclRlbmRlcnNEb2N1bWVudFJlZmVyZW5jZT4KICAgICAgICA8Y2JjOklEPkxpbmtraSBoYW5raW50YS1hc2lha2lyam9paGluPC9jYmM6SUQ+CiAgICAgICAgPGNiYzpEb2N1bWVudFR5cGU+bm9uLXJlc3RyaWN0ZWQtZG9jdW1lbnQ8L2NiYzpEb2N1bWVudFR5cGU+CiAgICAgICAgPGNhYzpBdHRhY2htZW50PgogICAgICAgICAgPGNhYzpFeHRlcm5hbFJlZmVyZW5jZT4KICAgICAgICAgICAgPGNiYzpVUkk+aHR0cHM6Ly90YXJqb3VzcGFsdmVsdS5maS9zYWxvP2lkPTQ3ODc1NSZhbXA7dHBrPTMyYzA1YjY4LTEwZjQtNGNjZS1hNmQ4LWY2YWUyYjE0MTU0YjwvY2JjOlVSST4KICAgICAgICAgIDwvY2FjOkV4dGVybmFsUmVmZXJlbmNlPgogICAgICAgIDwvY2FjOkF0dGFjaG1lbnQ+CiAgICAgIDwvY2FjOkNhbGxGb3JUZW5kZXJzRG9jdW1lbnRSZWZlcmVuY2U+CiAgICAgIDxjYWM6VGVuZGVyZXJRdWFsaWZpY2F0aW9uUmVxdWVzdD4KICAgICAgICA8Y2FjOlNwZWNpZmljVGVuZGVyZXJSZXF1aXJlbWVudD4KICAgICAgICAgIDxjYmM6VGVuZGVyZXJSZXF1aXJlbWVudFR5cGVDb2RlIGxpc3ROYW1lPSJyZXNlcnZlZC1wcm9jdXJlbWVudCI+bm9uZTwvY2JjOlRlbmRlcmVyUmVxdWlyZW1lbnRUeXBlQ29kZT4KICAgICAgICA8L2NhYzpTcGVjaWZpY1RlbmRlcmVyUmVxdWlyZW1lbnQ+CiAgICAgIDwvY2FjOlRlbmRlcmVyUXVhbGlmaWNhdGlvblJlcXVlc3Q+CiAgICAgIDxjYWM6Q29udHJhY3RFeGVjdXRpb25SZXF1aXJlbWVudD4KICAgICAgICA8Y2JjOkV4ZWN1dGlvblJlcXVpcmVtZW50Q29kZSBsaXN0TmFtZT0iZWludm9pY2luZyI+cmVxdWlyZWQ8L2NiYzpFeGVjdXRpb25SZXF1aXJlbWVudENvZGU+CiAgICAgIDwvY2FjOkNvbnRyYWN0RXhlY3V0aW9uUmVxdWlyZW1lbnQ+CiAgICAgIDxjYWM6Q29udHJhY3RFeGVjdXRpb25SZXF1aXJlbWVudD4KICAgICAgICA8Y2JjOkV4ZWN1dGlvblJlcXVpcmVtZW50Q29kZSBsaXN0TmFtZT0icmVzZXJ2ZWQtZXhlY3V0aW9uIj5ubzwvY2JjOkV4ZWN1dGlvblJlcXVpcmVtZW50Q29kZT4KICAgICAgPC9jYWM6Q29udHJhY3RFeGVjdXRpb25SZXF1aXJlbWVudD4KICAgICAgPGNhYzpDb250cmFjdEV4ZWN1dGlvblJlcXVpcmVtZW50PgogICAgICAgIDxjYmM6RXhlY3V0aW9uUmVxdWlyZW1lbnRDb2RlIGxpc3ROYW1lPSJlY2F0YWxvZy1zdWJtaXNzaW9uIj5ub3QtYWxsb3dlZDwvY2JjOkV4ZWN1dGlvblJlcXVpcmVtZW50Q29kZT4KICAgICAgPC9jYWM6Q29udHJhY3RFeGVjdXRpb25SZXF1aXJlbWVudD4KICAgICAgPGNhYzpBd2FyZGluZ1Rlcm1zPgogICAgICAgIDxjYWM6QXdhcmRpbmdDcml0ZXJpb24+CiAgICAgICAgICA8Y2FjOlN1Ym9yZGluYXRlQXdhcmRpbmdDcml0ZXJpb24+CiAgICAgICAgICAgIDxleHQ6VUJMRXh0ZW5zaW9ucz4KICAgICAgICAgICAgICA8ZXh0OlVCTEV4dGVuc2lvbj4KICAgICAgICAgICAgICAgIDxleHQ6RXh0ZW5zaW9uQ29udGVudD4KICAgICAgICAgICAgICAgICAgPGVmZXh0OkVmb3Jtc0V4dGVuc2lvbj4KICAgICAgICAgICAgICAgICAgICA8ZWZhYzpBd2FyZENyaXRlcmlvblBhcmFtZXRlcj4KICAgICAgICAgICAgICAgICAgICAgIDxlZmJjOlBhcmFtZXRlckNvZGUgbGlzdE5hbWU9Im51bWJlci13ZWlnaHQiPnBvaS1leGE8L2VmYmM6UGFyYW1ldGVyQ29kZT4KICAgICAgICAgICAgICAgICAgICAgIDxlZmJjOlBhcmFtZXRlck51bWVyaWM+NjA8L2VmYmM6UGFyYW1ldGVyTnVtZXJpYz4KICAgICAgICAgICAgICAgICAgICA8L2VmYWM6QXdhcmRDcml0ZXJpb25QYXJhbWV0ZXI+CiAgICAgICAgICAgICAgICAgIDwvZWZleHQ6RWZvcm1zRXh0ZW5zaW9uPgogICAgICAgICAgICAgICAgPC9leHQ6RXh0ZW5zaW9uQ29udGVudD4KICAgICAgICAgICAgICA8L2V4dDpVQkxFeHRlbnNpb24+CiAgICAgICAgICAgIDwvZXh0OlVCTEV4dGVuc2lvbnM+CiAgICAgICAgICAgIDxjYmM6QXdhcmRpbmdDcml0ZXJpb25UeXBlQ29kZSBsaXN0TmFtZT0iYXdhcmQtY3JpdGVyaW9uLXR5cGUiPnByaWNlPC9jYmM6QXdhcmRpbmdDcml0ZXJpb25UeXBlQ29kZT4KICAgICAgICAgICAgPGNiYzpOYW1lIGxhbmd1YWdlSUQ9IkZJTiI+S29rb25haXN2ZXJ0YWlsdWhpbnRhPC9jYmM6TmFtZT4KICAgICAgICAgICAgPGNiYzpEZXNjcmlwdGlvbiBsYW5ndWFnZUlEPSJGSU4iPkhhbHZpbiB0YXJqb3R0dSB0YXJqb3VzcHl5bm7Dtm4gbXVrYWluZW4ga29rb25haXNoaW50YSBzYWEgdmVydGFpbHVzc2EgZW5pbW3DpGlzcGlzdGVldCA2MC4gTXVpZGVuIHRhcmpvYWppZW4gcGlzdGVtw6TDpHLDpCBtdW9kb3N0dXUgc3VvcmFzc2Egc3VodGVlc3NhIGhhbHZpbXBhYW4gKGhhbHZpbiAvIHZlcnRhaWx0YXZhIGhpbnRhIHggZW5pbW3DpGlzcGlzdGVldCkuPC9jYmM6RGVzY3JpcHRpb24+CiAgICAgICAgICA8L2NhYzpTdWJvcmRpbmF0ZUF3YXJkaW5nQ3JpdGVyaW9uPgogICAgICAgICAgPGNhYzpTdWJvcmRpbmF0ZUF3YXJkaW5nQ3JpdGVyaW9uPgogICAgICAgICAgICA8ZXh0OlVCTEV4dGVuc2lvbnM+CiAgICAgICAgICAgICAgPGV4dDpVQkxFeHRlbnNpb24+CiAgICAgICAgICAgICAgICA8ZXh0OkV4dGVuc2lvbkNvbnRlbnQ+CiAgICAgICAgICAgICAgICAgIDxlZmV4dDpFZm9ybXNFeHRlbnNpb24+CiAgICAgICAgICAgICAgICAgICAgPGVmYWM6QXdhcmRDcml0ZXJpb25QYXJhbWV0ZXI+CiAgICAgICAgICAgICAgICAgICAgICA8ZWZiYzpQYXJhbWV0ZXJDb2RlIGxpc3ROYW1lPSJudW1iZXItd2VpZ2h0Ij5wb2ktZXhhPC9lZmJjOlBhcmFtZXRlckNvZGU+CiAgICAgICAgICAgICAgICAgICAgICA8ZWZiYzpQYXJhbWV0ZXJOdW1lcmljPjQwPC9lZmJjOlBhcmFtZXRlck51bWVyaWM+CiAgICAgICAgICAgICAgICAgICAgPC9lZmFjOkF3YXJkQ3JpdGVyaW9uUGFyYW1ldGVyPgogICAgICAgICAgICAgICAgICA8L2VmZXh0OkVmb3Jtc0V4dGVuc2lvbj4KICAgICAgICAgICAgICAgIDwvZXh0OkV4dGVuc2lvbkNvbnRlbnQ+CiAgICAgICAgICAgICAgPC9leHQ6VUJMRXh0ZW5zaW9uPgogICAgICAgICAgICA8L2V4dDpVQkxFeHRlbnNpb25zPgogICAgICAgICAgICA8Y2JjOkF3YXJkaW5nQ3JpdGVyaW9uVHlwZUNvZGUgbGlzdE5hbWU9ImF3YXJkLWNyaXRlcmlvbi10eXBlIj5xdWFsaXR5PC9jYmM6QXdhcmRpbmdDcml0ZXJpb25UeXBlQ29kZT4KICAgICAgICAgICAgPGNiYzpOYW1lIGxhbmd1YWdlSUQ9IkZJTiI+TGFhdHVwaXN0ZWV0PC9jYmM6TmFtZT4KICAgICAgICAgICAgPGNiYzpEZXNjcmlwdGlvbiBsYW5ndWFnZUlEPSJGSU4iPkxhYXR1cGlzdGV5dHlzIGphIC1rcml0ZWVyaSBvdmF0IHNldXJhYXZhdDoKMS4gVGFyam9hamFuIGhlbmtpbMO2c3TDtm4gKGlsbWFuIHZhc3RhYXZhYSB0ecO2bmpvaHRhamFhKSBrb2tlbXVzIHZhc3RhYXZpc3RhIHVsa29saWlrdW50YXBhaWtrb2plbiBrZXPDpGhvaWRvbiBwYWx2ZWx1dGVodMOkdmlzdMOkLCAxMCAlIGVsaSBlbmludMOkw6RuIDEwIHBpc3RldHTDpC4gCjIuIFRhcmpvYWphbiB0w6Rtw6RuIG9zYS1hbHVlZW4gbGlpa3VudGFwYWlra29qZW4gaG9pdG9vbiBrw6R5dGV0dMOkdmlzc8OkIG9sZXZhbiBoZW5raWzDtnN0w7ZuIGtvdWx1dHVzLCAxNSAlIGVsaSAxNSBwaXN0ZXR0w6QuCjMuIFZhc3RhYXZhbiB0ecO2bmpvaHRhamFuIGtva2VtdXMgdWxrb2xpaWt1bnRhcGFpa2tvamVuIGtlc8OkaG9pZG9uIHBhbHZlbHV0ZWh0w6R2aXN0w6QgMTUgJSBlbGkgMTUgcGlzdGV0dMOkLjwvY2JjOkRlc2NyaXB0aW9uPgogICAgICAgICAgPC9jYWM6U3Vib3JkaW5hdGVBd2FyZGluZ0NyaXRlcmlvbj4KICAgICAgICA8L2NhYzpBd2FyZGluZ0NyaXRlcmlvbj4KICAgICAgPC9jYWM6QXdhcmRpbmdUZXJtcz4KICAgICAgPGNhYzpUZW5kZXJSZWNpcGllbnRQYXJ0eT4KICAgICAgICA8Y2JjOkVuZHBvaW50SUQ+aHR0cHM6Ly90YXJqb3VzcGFsdmVsdS5maS9zYWxvP2lkPTQ3ODc1NSZhbXA7dHBrPTMyYzA1YjY4LTEwZjQtNGNjZS1hNmQ4LWY2YWUyYjE0MTU0YjwvY2JjOkVuZHBvaW50SUQ+CiAgICAgIDwvY2FjOlRlbmRlclJlY2lwaWVudFBhcnR5PgogICAgICA8Y2FjOlRlbmRlclZhbGlkaXR5UGVyaW9kPgogICAgICAgIDxjYmM6RHVyYXRpb25NZWFzdXJlIHVuaXRDb2RlPSJEQVkiPjEyMDwvY2JjOkR1cmF0aW9uTWVhc3VyZT4KICAgICAgPC9jYWM6VGVuZGVyVmFsaWRpdHlQZXJpb2Q+CiAgICAgIDxjYWM6QXBwZWFsVGVybXM+CiAgICAgICAgPGNhYzpBcHBlYWxSZWNlaXZlclBhcnR5PgogICAgICAgICAgPGNhYzpQYXJ0eUlkZW50aWZpY2F0aW9uPgogICAgICAgICAgICA8Y2JjOklEIHNjaGVtZU5hbWU9Im9yZ2FuaXphdGlvbiI+T1JHLTAwMDI8L2NiYzpJRD4KICAgICAgICAgIDwvY2FjOlBhcnR5SWRlbnRpZmljYXRpb24+CiAgICAgICAgPC9jYWM6QXBwZWFsUmVjZWl2ZXJQYXJ0eT4KICAgICAgPC9jYWM6QXBwZWFsVGVybXM+CiAgICAgIDxjYWM6TGFuZ3VhZ2U+CiAgICAgICAgPGNiYzpJRD5GSU48L2NiYzpJRD4KICAgICAgPC9jYWM6TGFuZ3VhZ2U+CiAgICAgIDxjYWM6UG9zdEF3YXJkUHJvY2Vzcz4KICAgICAgICA8Y2JjOkVsZWN0cm9uaWNPcmRlclVzYWdlSW5kaWNhdG9yPnRydWU8L2NiYzpFbGVjdHJvbmljT3JkZXJVc2FnZUluZGljYXRvcj4KICAgICAgICA8Y2JjOkVsZWN0cm9uaWNQYXltZW50VXNhZ2VJbmRpY2F0b3I+dHJ1ZTwvY2JjOkVsZWN0cm9uaWNQYXltZW50VXNhZ2VJbmRpY2F0b3I+CiAgICAgIDwvY2FjOlBvc3RBd2FyZFByb2Nlc3M+CiAgICA8L2NhYzpUZW5kZXJpbmdUZXJtcz4KICAgIDxjYWM6VGVuZGVyaW5nUHJvY2Vzcz4KICAgICAgPGNiYzpTdWJtaXNzaW9uTWV0aG9kQ29kZSBsaXN0TmFtZT0iZXN1Ym1pc3Npb24iPnJlcXVpcmVkPC9jYmM6U3VibWlzc2lvbk1ldGhvZENvZGU+CiAgICAgIDxjYmM6R292ZXJubWVudEFncmVlbWVudENvbnN0cmFpbnRJbmRpY2F0b3I+dHJ1ZTwvY2JjOkdvdmVybm1lbnRBZ3JlZW1lbnRDb25zdHJhaW50SW5kaWNhdG9yPgogICAgICA8Y2FjOlRlbmRlclN1Ym1pc3Npb25EZWFkbGluZVBlcmlvZD4KICAgICAgICA8Y2JjOkVuZERhdGU+MjAyMy0xMS0xNSswMjowMDwvY2JjOkVuZERhdGU+CiAgICAgICAgPGNiYzpFbmRUaW1lPjEyOjAwOjAwKzAyOjAwPC9jYmM6RW5kVGltZT4KICAgICAgPC9jYWM6VGVuZGVyU3VibWlzc2lvbkRlYWRsaW5lUGVyaW9kPgogICAgICA8Y2FjOkFkZGl0aW9uYWxJbmZvcm1hdGlvblJlcXVlc3RQZXJpb2Q+CiAgICAgICAgPGNiYzpFbmREYXRlPjIwMjMtMTAtMjYrMDM6MDA8L2NiYzpFbmREYXRlPgogICAgICAgIDxjYmM6RW5kVGltZT4xNjowMDowMCswMzowMDwvY2JjOkVuZFRpbWU+CiAgICAgIDwvY2FjOkFkZGl0aW9uYWxJbmZvcm1hdGlvblJlcXVlc3RQZXJpb2Q+CiAgICAgIDxjYWM6T3BlblRlbmRlckV2ZW50PgogICAgICAgIDxjYmM6T2NjdXJyZW5jZURhdGU+MjAyMy0xMS0xNSswMjowMDwvY2JjOk9jY3VycmVuY2VEYXRlPgogICAgICAgIDxjYmM6T2NjdXJyZW5jZVRpbWU+MTI6MzA6MDArMDI6MDA8L2NiYzpPY2N1cnJlbmNlVGltZT4KICAgICAgPC9jYWM6T3BlblRlbmRlckV2ZW50PgogICAgICA8Y2FjOkF1Y3Rpb25UZXJtcz4KICAgICAgICA8Y2JjOkF1Y3Rpb25Db25zdHJhaW50SW5kaWNhdG9yPmZhbHNlPC9jYmM6QXVjdGlvbkNvbnN0cmFpbnRJbmRpY2F0b3I+CiAgICAgIDwvY2FjOkF1Y3Rpb25UZXJtcz4KICAgICAgPGNhYzpDb250cmFjdGluZ1N5c3RlbT4KICAgICAgICA8Y2JjOkNvbnRyYWN0aW5nU3lzdGVtVHlwZUNvZGUgbGlzdE5hbWU9ImRwcy11c2FnZSI+bm9uZTwvY2JjOkNvbnRyYWN0aW5nU3lzdGVtVHlwZUNvZGU+CiAgICAgIDwvY2FjOkNvbnRyYWN0aW5nU3lzdGVtPgogICAgICA8Y2FjOkNvbnRyYWN0aW5nU3lzdGVtPgogICAgICAgIDxjYmM6Q29udHJhY3RpbmdTeXN0ZW1UeXBlQ29kZSBsaXN0TmFtZT0iZnJhbWV3b3JrLWFncmVlbWVudCI+bm9uZTwvY2JjOkNvbnRyYWN0aW5nU3lzdGVtVHlwZUNvZGU+CiAgICAgIDwvY2FjOkNvbnRyYWN0aW5nU3lzdGVtPgogICAgPC9jYWM6VGVuZGVyaW5nUHJvY2Vzcz4KICAgIDxjYWM6UHJvY3VyZW1lbnRQcm9qZWN0PgogICAgICA8Y2JjOklEIHNjaGVtZU5hbWU9IkludGVybmFsSUQiPjMuPC9jYmM6SUQ+CiAgICAgIDxjYmM6TmFtZSBsYW5ndWFnZUlEPSJGSU4iPjMuIEtpc2tvbiBqYSBNdXVybGFuIGthdXB1bmdpbm9zYSwga2Vzw6Rob2l0bzwvY2JjOk5hbWU+CiAgICAgIDxjYmM6RGVzY3JpcHRpb24gbGFuZ3VhZ2VJRD0iRklOIj5IYW5raW5uYW4ga29odGVlbmEgb24gS2lza29uIGphIE11dXJsYW4ga2F1cHVuZ2lub3NhbiBsaWlrdW50YXBhaWtrb2plbiBrZXPDpGhvaXRvIHRhcmpvdXNweXlubsO2biBqYSBsaWl0dGVlbiAxLiBIYW5raW5uYW4gdmFhdGltdWtzZXQgamEgcGFsdmVsdWt1dmF1cyBtdWthaXNlc3RpLiBMaXPDpGtzaSB0aWxhYWphIHZhcmFhIG1haGRvbGxpc3V1ZGVuIGthaHRlZW4gb3B0aW92dW90ZWVuIDIwMjYgamEgMjAyNy4gT3B0aW9sbGEgdGFya29pdGV0YWFuIG1haGRvbGxpc3V1dHRhIHNvcGltdWtzZW4gamF0a2FtaXNlZW4gYWxrdXBlcsOkaXNpbiBlaGRvaW4uIE9wdGlvaWRlbiBrw6R5dMO2c3TDpCBqYSBrZXN0b3N0YSBww6TDpHRldMOkw6RuIGVyaWtzZWVuLiA8L2NiYzpEZXNjcmlwdGlvbj4KICAgICAgPGNiYzpQcm9jdXJlbWVudFR5cGVDb2RlIGxpc3ROYW1lPSJjb250cmFjdC1uYXR1cmUiPnNlcnZpY2VzPC9jYmM6UHJvY3VyZW1lbnRUeXBlQ29kZT4KICAgICAgPGNiYzpTTUVTdWl0YWJsZUluZGljYXRvcj50cnVlPC9jYmM6U01FU3VpdGFibGVJbmRpY2F0b3I+CiAgICAgIDxjYWM6TWFpbkNvbW1vZGl0eUNsYXNzaWZpY2F0aW9uPgogICAgICAgIDxjYmM6SXRlbUNsYXNzaWZpY2F0aW9uQ29kZSBsaXN0TmFtZT0iY3B2Ij45MjYxMDAwMDwvY2JjOkl0ZW1DbGFzc2lmaWNhdGlvbkNvZGU+CiAgICAgIDwvY2FjOk1haW5Db21tb2RpdHlDbGFzc2lmaWNhdGlvbj4KICAgICAgPGNhYzpSZWFsaXplZExvY2F0aW9uPgogICAgICAgIDxjYWM6QWRkcmVzcz4KICAgICAgICAgIDxjYmM6Q291bnRyeVN1YmVudGl0eUNvZGUgbGlzdE5hbWU9Im51dHMiPkZJMUMxPC9jYmM6Q291bnRyeVN1YmVudGl0eUNvZGU+CiAgICAgICAgICA8Y2FjOkNvdW50cnk+CiAgICAgICAgICAgIDxjYmM6SWRlbnRpZmljYXRpb25Db2RlIGxpc3ROYW1lPSJjb3VudHJ5Ij5GSU48L2NiYzpJZGVudGlmaWNhdGlvbkNvZGU+CiAgICAgICAgICA8L2NhYzpDb3VudHJ5PgogICAgICAgIDwvY2FjOkFkZHJlc3M+CiAgICAgIDwvY2FjOlJlYWxpemVkTG9jYXRpb24+CiAgICAgIDxjYWM6UGxhbm5lZFBlcmlvZD4KICAgICAgICA8Y2JjOlN0YXJ0RGF0ZT4yMDI0LTAxLTAxKzAyOjAwPC9jYmM6U3RhcnREYXRlPgogICAgICAgIDxjYmM6RW5kRGF0ZT4yMDI1LTEyLTMxKzAyOjAwPC9jYmM6RW5kRGF0ZT4KICAgICAgPC9jYWM6UGxhbm5lZFBlcmlvZD4KICAgICAgPGNhYzpDb250cmFjdEV4dGVuc2lvbj4KICAgICAgICA8Y2JjOk1heGltdW1OdW1iZXJOdW1lcmljPjI8L2NiYzpNYXhpbXVtTnVtYmVyTnVtZXJpYz4KICAgICAgICA8Y2FjOlJlbmV3YWw+CiAgICAgICAgICA8Y2FjOlBlcmlvZD4KICAgICAgICAgICAgPGNiYzpEZXNjcmlwdGlvbiBsYW5ndWFnZUlEPSJGSU4iPlRpbGFhamEgdmFyYWEgbWFoZG9sbGlzdXVkZW4ga2FodGVlbiBvcHRpb3Z1b3RlZW4gMjAyNiBqYSAyMDI3LiBPcHRpb2xsYSB0YXJrb2l0ZXRhYW4gbWFoZG9sbGlzdXV0dGEgc29waW11a3NlbiBqYXRrYW1pc2VlbiBhbGt1cGVyw6Rpc2luIGVoZG9pbi4gT3B0aW9pZGVuIGvDpHl0w7ZzdMOkIGphIGtlc3Rvc3RhIHDDpMOkdGV0w6TDpG4gZXJpa3NlZW4uIDwvY2JjOkRlc2NyaXB0aW9uPgogICAgICAgICAgPC9jYWM6UGVyaW9kPgogICAgICAgIDwvY2FjOlJlbmV3YWw+CiAgICAgIDwvY2FjOkNvbnRyYWN0RXh0ZW5zaW9uPgogICAgPC9jYWM6UHJvY3VyZW1lbnRQcm9qZWN0PgogIDwvY2FjOlByb2N1cmVtZW50UHJvamVjdExvdD4KICA8Y2FjOlByb2N1cmVtZW50UHJvamVjdExvdD4KICAgIDxjYmM6SUQgc2NoZW1lTmFtZT0iTG90Ij5MT1QtMDAwNDwvY2JjOklEPgogICAgPGNhYzpUZW5kZXJpbmdUZXJtcz4KICAgICAgPGV4dDpVQkxFeHRlbnNpb25zPgogICAgICAgIDxleHQ6VUJMRXh0ZW5zaW9uPgogICAgICAgICAgPGV4dDpFeHRlbnNpb25Db250ZW50PgogICAgICAgICAgICA8ZWZleHQ6RWZvcm1zRXh0ZW5zaW9uPgogICAgICAgICAgICAgIDxlZmFjOlNlbGVjdGlvbkNyaXRlcmlhPgogICAgICAgICAgICAgICAgPGNiYzpDcml0ZXJpb25UeXBlQ29kZSBsaXN0TmFtZT0ic2VsZWN0aW9uLWNyaXRlcmlvbiI+ZWYtc3RhbmQ8L2NiYzpDcml0ZXJpb25UeXBlQ29kZT4KICAgICAgICAgICAgICAgIDxjYmM6Q2FsY3VsYXRpb25FeHByZXNzaW9uQ29kZSBsaXN0TmFtZT0idXNhZ2UiPm4tdXNlZDwvY2JjOkNhbGN1bGF0aW9uRXhwcmVzc2lvbkNvZGU+CiAgICAgICAgICAgICAgPC9lZmFjOlNlbGVjdGlvbkNyaXRlcmlhPgogICAgICAgICAgICAgIDxlZmFjOlNlbGVjdGlvbkNyaXRlcmlhPgogICAgICAgICAgICAgICAgPGNiYzpDcml0ZXJpb25UeXBlQ29kZSBsaXN0TmFtZT0ic2VsZWN0aW9uLWNyaXRlcmlvbiI+c3VpLWFjdDwvY2JjOkNyaXRlcmlvblR5cGVDb2RlPgogICAgICAgICAgICAgICAgPGNiYzpDYWxjdWxhdGlvbkV4cHJlc3Npb25Db2RlIGxpc3ROYW1lPSJ1c2FnZSI+bi11c2VkPC9jYmM6Q2FsY3VsYXRpb25FeHByZXNzaW9uQ29kZT4KICAgICAgICAgICAgICA8L2VmYWM6U2VsZWN0aW9uQ3JpdGVyaWE+CiAgICAgICAgICAgICAgPGVmYWM6U2VsZWN0aW9uQ3JpdGVyaWE+CiAgICAgICAgICAgICAgICA8Y2JjOkNyaXRlcmlvblR5cGVDb2RlIGxpc3ROYW1lPSJzZWxlY3Rpb24tY3JpdGVyaW9uIj50cC1hYmlsPC9jYmM6Q3JpdGVyaW9uVHlwZUNvZGU+CiAgICAgICAgICAgICAgICA8Y2JjOkNhbGN1bGF0aW9uRXhwcmVzc2lvbkNvZGUgbGlzdE5hbWU9InVzYWdlIj5uLXVzZWQ8L2NiYzpDYWxjdWxhdGlvbkV4cHJlc3Npb25Db2RlPgogICAgICAgICAgICAgIDwvZWZhYzpTZWxlY3Rpb25Dcml0ZXJpYT4KICAgICAgICAgICAgPC9lZmV4dDpFZm9ybXNFeHRlbnNpb24+CiAgICAgICAgICA8L2V4dDpFeHRlbnNpb25Db250ZW50PgogICAgICAgIDwvZXh0OlVCTEV4dGVuc2lvbj4KICAgICAgPC9leHQ6VUJMRXh0ZW5zaW9ucz4KICAgICAgPGNiYzpGdW5kaW5nUHJvZ3JhbUNvZGUgbGlzdE5hbWU9ImV1LWZ1bmRlZCI+bm8tZXUtZnVuZHM8L2NiYzpGdW5kaW5nUHJvZ3JhbUNvZGU+CiAgICAgIDxjYmM6UmVjdXJyaW5nUHJvY3VyZW1lbnRJbmRpY2F0b3I+dHJ1ZTwvY2JjOlJlY3VycmluZ1Byb2N1cmVtZW50SW5kaWNhdG9yPgogICAgICA8Y2JjOk11bHRpcGxlVGVuZGVyc0NvZGUgbGlzdE5hbWU9InBlcm1pc3Npb24iPmFsbG93ZWQ8L2NiYzpNdWx0aXBsZVRlbmRlcnNDb2RlPgogICAgICA8Y2FjOkNhbGxGb3JUZW5kZXJzRG9jdW1lbnRSZWZlcmVuY2U+CiAgICAgICAgPGNiYzpJRD5MaW5ra2kgaGFua2ludGEtYXNpYWtpcmpvaWhpbjwvY2JjOklEPgogICAgICAgIDxjYmM6RG9jdW1lbnRUeXBlPm5vbi1yZXN0cmljdGVkLWRvY3VtZW50PC9jYmM6RG9jdW1lbnRUeXBlPgogICAgICAgIDxjYWM6QXR0YWNobWVudD4KICAgICAgICAgIDxjYWM6RXh0ZXJuYWxSZWZlcmVuY2U+CiAgICAgICAgICAgIDxjYmM6VVJJPmh0dHBzOi8vdGFyam91c3BhbHZlbHUuZmkvc2Fsbz9pZD00Nzg3NTUmYW1wO3Rwaz0zMmMwNWI2OC0xMGY0LTRjY2UtYTZkOC1mNmFlMmIxNDE1NGI8L2NiYzpVUkk+CiAgICAgICAgICA8L2NhYzpFeHRlcm5hbFJlZmVyZW5jZT4KICAgICAgICA8L2NhYzpBdHRhY2htZW50PgogICAgICA8L2NhYzpDYWxsRm9yVGVuZGVyc0RvY3VtZW50UmVmZXJlbmNlPgogICAgICA8Y2FjOlRlbmRlcmVyUXVhbGlmaWNhdGlvblJlcXVlc3Q+CiAgICAgICAgPGNhYzpTcGVjaWZpY1RlbmRlcmVyUmVxdWlyZW1lbnQ+CiAgICAgICAgICA8Y2JjOlRlbmRlcmVyUmVxdWlyZW1lbnRUeXBlQ29kZSBsaXN0TmFtZT0icmVzZXJ2ZWQtcHJvY3VyZW1lbnQiPm5vbmU8L2NiYzpUZW5kZXJlclJlcXVpcmVtZW50VHlwZUNvZGU+CiAgICAgICAgPC9jYWM6U3BlY2lmaWNUZW5kZXJlclJlcXVpcmVtZW50PgogICAgICA8L2NhYzpUZW5kZXJlclF1YWxpZmljYXRpb25SZXF1ZXN0PgogICAgICA8Y2FjOkNvbnRyYWN0RXhlY3V0aW9uUmVxdWlyZW1lbnQ+CiAgICAgICAgPGNiYzpFeGVjdXRpb25SZXF1aXJlbWVudENvZGUgbGlzdE5hbWU9ImVpbnZvaWNpbmciPnJlcXVpcmVkPC9jYmM6RXhlY3V0aW9uUmVxdWlyZW1lbnRDb2RlPgogICAgICA8L2NhYzpDb250cmFjdEV4ZWN1dGlvblJlcXVpcmVtZW50PgogICAgICA8Y2FjOkNvbnRyYWN0RXhlY3V0aW9uUmVxdWlyZW1lbnQ+CiAgICAgICAgPGNiYzpFeGVjdXRpb25SZXF1aXJlbWVudENvZGUgbGlzdE5hbWU9InJlc2VydmVkLWV4ZWN1dGlvbiI+bm88L2NiYzpFeGVjdXRpb25SZXF1aXJlbWVudENvZGU+CiAgICAgIDwvY2FjOkNvbnRyYWN0RXhlY3V0aW9uUmVxdWlyZW1lbnQ+CiAgICAgIDxjYWM6Q29udHJhY3RFeGVjdXRpb25SZXF1aXJlbWVudD4KICAgICAgICA8Y2JjOkV4ZWN1dGlvblJlcXVpcmVtZW50Q29kZSBsaXN0TmFtZT0iZWNhdGFsb2ctc3VibWlzc2lvbiI+bm90LWFsbG93ZWQ8L2NiYzpFeGVjdXRpb25SZXF1aXJlbWVudENvZGU+CiAgICAgIDwvY2FjOkNvbnRyYWN0RXhlY3V0aW9uUmVxdWlyZW1lbnQ+CiAgICAgIDxjYWM6QXdhcmRpbmdUZXJtcz4KICAgICAgICA8Y2FjOkF3YXJkaW5nQ3JpdGVyaW9uPgogICAgICAgICAgPGNhYzpTdWJvcmRpbmF0ZUF3YXJkaW5nQ3JpdGVyaW9uPgogICAgICAgICAgICA8ZXh0OlVCTEV4dGVuc2lvbnM+CiAgICAgICAgICAgICAgPGV4dDpVQkxFeHRlbnNpb24+CiAgICAgICAgICAgICAgICA8ZXh0OkV4dGVuc2lvbkNvbnRlbnQ+CiAgICAgICAgICAgICAgICAgIDxlZmV4dDpFZm9ybXNFeHRlbnNpb24+CiAgICAgICAgICAgICAgICAgICAgPGVmYWM6QXdhcmRDcml0ZXJpb25QYXJhbWV0ZXI+CiAgICAgICAgICAgICAgICAgICAgICA8ZWZiYzpQYXJhbWV0ZXJDb2RlIGxpc3ROYW1lPSJudW1iZXItd2VpZ2h0Ij5wb2ktZXhhPC9lZmJjOlBhcmFtZXRlckNvZGU+CiAgICAgICAgICAgICAgICAgICAgICA8ZWZiYzpQYXJhbWV0ZXJOdW1lcmljPjYwPC9lZmJjOlBhcmFtZXRlck51bWVyaWM+CiAgICAgICAgICAgICAgICAgICAgPC9lZmFjOkF3YXJkQ3JpdGVyaW9uUGFyYW1ldGVyPgogICAgICAgICAgICAgICAgICA8L2VmZXh0OkVmb3Jtc0V4dGVuc2lvbj4KICAgICAgICAgICAgICAgIDwvZXh0OkV4dGVuc2lvbkNvbnRlbnQ+CiAgICAgICAgICAgICAgPC9leHQ6VUJMRXh0ZW5zaW9uPgogICAgICAgICAgICA8L2V4dDpVQkxFeHRlbnNpb25zPgogICAgICAgICAgICA8Y2JjOkF3YXJkaW5nQ3JpdGVyaW9uVHlwZUNvZGUgbGlzdE5hbWU9ImF3YXJkLWNyaXRlcmlvbi10eXBlIj5wcmljZTwvY2JjOkF3YXJkaW5nQ3JpdGVyaW9uVHlwZUNvZGU+CiAgICAgICAgICAgIDxjYmM6TmFtZSBsYW5ndWFnZUlEPSJGSU4iPktva29uYWlzdmVydGFpbHVoaW50YTwvY2JjOk5hbWU+CiAgICAgICAgICAgIDxjYmM6RGVzY3JpcHRpb24gbGFuZ3VhZ2VJRD0iRklOIj5IYWx2aW4gdGFyam90dHUgdGFyam91c3B5eW5uw7ZuIG11a2FpbmVuIGtva29uYWlzaGludGEgc2FhIHZlcnRhaWx1c3NhIGVuaW1tw6Rpc3Bpc3RlZXQgNjAuIE11aWRlbiB0YXJqb2FqaWVuIHBpc3RlbcOkw6Ryw6QgbXVvZG9zdHV1IHN1b3Jhc3NhIHN1aHRlZXNzYSBoYWx2aW1wYWFuIChoYWx2aW4gLyB2ZXJ0YWlsdGF2YSBoaW50YSB4IGVuaW1tw6Rpc3Bpc3RlZXQpLjwvY2JjOkRlc2NyaXB0aW9uPgogICAgICAgICAgPC9jYWM6U3Vib3JkaW5hdGVBd2FyZGluZ0NyaXRlcmlvbj4KICAgICAgICAgIDxjYWM6U3Vib3JkaW5hdGVBd2FyZGluZ0NyaXRlcmlvbj4KICAgICAgICAgICAgPGV4dDpVQkxFeHRlbnNpb25zPgogICAgICAgICAgICAgIDxleHQ6VUJMRXh0ZW5zaW9uPgogICAgICAgICAgICAgICAgPGV4dDpFeHRlbnNpb25Db250ZW50PgogICAgICAgICAgICAgICAgICA8ZWZleHQ6RWZvcm1zRXh0ZW5zaW9uPgogICAgICAgICAgICAgICAgICAgIDxlZmFjOkF3YXJkQ3JpdGVyaW9uUGFyYW1ldGVyPgogICAgICAgICAgICAgICAgICAgICAgPGVmYmM6UGFyYW1ldGVyQ29kZSBsaXN0TmFtZT0ibnVtYmVyLXdlaWdodCI+cG9pLWV4YTwvZWZiYzpQYXJhbWV0ZXJDb2RlPgogICAgICAgICAgICAgICAgICAgICAgPGVmYmM6UGFyYW1ldGVyTnVtZXJpYz40MDwvZWZiYzpQYXJhbWV0ZXJOdW1lcmljPgogICAgICAgICAgICAgICAgICAgIDwvZWZhYzpBd2FyZENyaXRlcmlvblBhcmFtZXRlcj4KICAgICAgICAgICAgICAgICAgPC9lZmV4dDpFZm9ybXNFeHRlbnNpb24+CiAgICAgICAgICAgICAgICA8L2V4dDpFeHRlbnNpb25Db250ZW50PgogICAgICAgICAgICAgIDwvZXh0OlVCTEV4dGVuc2lvbj4KICAgICAgICAgICAgPC9leHQ6VUJMRXh0ZW5zaW9ucz4KICAgICAgICAgICAgPGNiYzpBd2FyZGluZ0NyaXRlcmlvblR5cGVDb2RlIGxpc3ROYW1lPSJhd2FyZC1jcml0ZXJpb24tdHlwZSI+cXVhbGl0eTwvY2JjOkF3YXJkaW5nQ3JpdGVyaW9uVHlwZUNvZGU+CiAgICAgICAgICAgIDxjYmM6TmFtZSBsYW5ndWFnZUlEPSJGSU4iPkxhYXR1cGlzdGVldDwvY2JjOk5hbWU+CiAgICAgICAgICAgIDxjYmM6RGVzY3JpcHRpb24gbGFuZ3VhZ2VJRD0iRklOIj5MYWF0dXBpc3RleXR5cyBqYSAta3JpdGVlcmkgb3ZhdCBzZXVyYWF2YXQ6CjEuIFRhcmpvYWphbiBoZW5raWzDtnN0w7ZuIChpbG1hbiB2YXN0YWF2YWEgdHnDtm5qb2h0YWphYSkga29rZW11cyB2YXN0YWF2aXN0YSB1bGtvbGlpa3VudGFwYWlra29qZW4gdGFsdmlob2lkb24gcGFsdmVsdXRlaHTDpHZpc3TDpCwgMTAgJSBlbGkgZW5pbnTDpMOkbiAxMCBwaXN0ZXR0w6QuIAoyLiBUYXJqb2FqYW4gdMOkbcOkbiBvc2EtYWx1ZWVuIGxpaWt1bnRhcGFpa2tvamVuIGhvaXRvb24ga8OkeXRldHTDpHZpc3PDpCBvbGV2YW4gaGVua2lsw7ZzdMO2biBrb3VsdXR1cywgMTUgJSBlbGkgMTUgcGlzdGV0dMOkLgozLiBWYXN0YWF2YW4gdHnDtm5qb2h0YWphbiBrb2tlbXVzIHVsa29saWlrdW50YXBhaWtrb2plbiB0YWx2aWhvaWRvbiBwYWx2ZWx1dGVodMOkdmlzdMOkIDE1ICUgZWxpIDE1IHBpc3RldHTDpC48L2NiYzpEZXNjcmlwdGlvbj4KICAgICAgICAgIDwvY2FjOlN1Ym9yZGluYXRlQXdhcmRpbmdDcml0ZXJpb24+CiAgICAgICAgPC9jYWM6QXdhcmRpbmdDcml0ZXJpb24+CiAgICAgIDwvY2FjOkF3YXJkaW5nVGVybXM+CiAgICAgIDxjYWM6VGVuZGVyUmVjaXBpZW50UGFydHk+CiAgICAgICAgPGNiYzpFbmRwb2ludElEPmh0dHBzOi8vdGFyam91c3BhbHZlbHUuZmkvc2Fsbz9pZD00Nzg3NTUmYW1wO3Rwaz0zMmMwNWI2OC0xMGY0LTRjY2UtYTZkOC1mNmFlMmIxNDE1NGI8L2NiYzpFbmRwb2ludElEPgogICAgICA8L2NhYzpUZW5kZXJSZWNpcGllbnRQYXJ0eT4KICAgICAgPGNhYzpUZW5kZXJWYWxpZGl0eVBlcmlvZD4KICAgICAgICA8Y2JjOkR1cmF0aW9uTWVhc3VyZSB1bml0Q29kZT0iREFZIj4xMjA8L2NiYzpEdXJhdGlvbk1lYXN1cmU+CiAgICAgIDwvY2FjOlRlbmRlclZhbGlkaXR5UGVyaW9kPgogICAgICA8Y2FjOkFwcGVhbFRlcm1zPgogICAgICAgIDxjYWM6QXBwZWFsUmVjZWl2ZXJQYXJ0eT4KICAgICAgICAgIDxjYWM6UGFydHlJZGVudGlmaWNhdGlvbj4KICAgICAgICAgICAgPGNiYzpJRCBzY2hlbWVOYW1lPSJvcmdhbml6YXRpb24iPk9SRy0wMDAyPC9jYmM6SUQ+CiAgICAgICAgICA8L2NhYzpQYXJ0eUlkZW50aWZpY2F0aW9uPgogICAgICAgIDwvY2FjOkFwcGVhbFJlY2VpdmVyUGFydHk+CiAgICAgIDwvY2FjOkFwcGVhbFRlcm1zPgogICAgICA8Y2FjOkxhbmd1YWdlPgogICAgICAgIDxjYmM6SUQ+RklOPC9jYmM6SUQ+CiAgICAgIDwvY2FjOkxhbmd1YWdlPgogICAgICA8Y2FjOlBvc3RBd2FyZFByb2Nlc3M+CiAgICAgICAgPGNiYzpFbGVjdHJvbmljT3JkZXJVc2FnZUluZGljYXRvcj50cnVlPC9jYmM6RWxlY3Ryb25pY09yZGVyVXNhZ2VJbmRpY2F0b3I+CiAgICAgICAgPGNiYzpFbGVjdHJvbmljUGF5bWVudFVzYWdlSW5kaWNhdG9yPnRydWU8L2NiYzpFbGVjdHJvbmljUGF5bWVudFVzYWdlSW5kaWNhdG9yPgogICAgICA8L2NhYzpQb3N0QXdhcmRQcm9jZXNzPgogICAgPC9jYWM6VGVuZGVyaW5nVGVybXM+CiAgICA8Y2FjOlRlbmRlcmluZ1Byb2Nlc3M+CiAgICAgIDxjYmM6U3VibWlzc2lvbk1ldGhvZENvZGUgbGlzdE5hbWU9ImVzdWJtaXNzaW9uIj5yZXF1aXJlZDwvY2JjOlN1Ym1pc3Npb25NZXRob2RDb2RlPgogICAgICA8Y2JjOkdvdmVybm1lbnRBZ3JlZW1lbnRDb25zdHJhaW50SW5kaWNhdG9yPnRydWU8L2NiYzpHb3Zlcm5tZW50QWdyZWVtZW50Q29uc3RyYWludEluZGljYXRvcj4KICAgICAgPGNhYzpUZW5kZXJTdWJtaXNzaW9uRGVhZGxpbmVQZXJpb2Q+CiAgICAgICAgPGNiYzpFbmREYXRlPjIwMjMtMTEtMTUrMDI6MDA8L2NiYzpFbmREYXRlPgogICAgICAgIDxjYmM6RW5kVGltZT4xMjowMDowMCswMjowMDwvY2JjOkVuZFRpbWU+CiAgICAgIDwvY2FjOlRlbmRlclN1Ym1pc3Npb25EZWFkbGluZVBlcmlvZD4KICAgICAgPGNhYzpBZGRpdGlvbmFsSW5mb3JtYXRpb25SZXF1ZXN0UGVyaW9kPgogICAgICAgIDxjYmM6RW5kRGF0ZT4yMDIzLTEwLTI2KzAzOjAwPC9jYmM6RW5kRGF0ZT4KICAgICAgICA8Y2JjOkVuZFRpbWU+MTY6MDA6MDArMDM6MDA8L2NiYzpFbmRUaW1lPgogICAgICA8L2NhYzpBZGRpdGlvbmFsSW5mb3JtYXRpb25SZXF1ZXN0UGVyaW9kPgogICAgICA8Y2FjOk9wZW5UZW5kZXJFdmVudD4KICAgICAgICA8Y2JjOk9jY3VycmVuY2VEYXRlPjIwMjMtMTEtMTUrMDI6MDA8L2NiYzpPY2N1cnJlbmNlRGF0ZT4KICAgICAgICA8Y2JjOk9jY3VycmVuY2VUaW1lPjEyOjMwOjAwKzAyOjAwPC9jYmM6T2NjdXJyZW5jZVRpbWU+CiAgICAgIDwvY2FjOk9wZW5UZW5kZXJFdmVudD4KICAgICAgPGNhYzpBdWN0aW9uVGVybXM+CiAgICAgICAgPGNiYzpBdWN0aW9uQ29uc3RyYWludEluZGljYXRvcj5mYWxzZTwvY2JjOkF1Y3Rpb25Db25zdHJhaW50SW5kaWNhdG9yPgogICAgICA8L2NhYzpBdWN0aW9uVGVybXM+CiAgICAgIDxjYWM6Q29udHJhY3RpbmdTeXN0ZW0+CiAgICAgICAgPGNiYzpDb250cmFjdGluZ1N5c3RlbVR5cGVDb2RlIGxpc3ROYW1lPSJkcHMtdXNhZ2UiPm5vbmU8L2NiYzpDb250cmFjdGluZ1N5c3RlbVR5cGVDb2RlPgogICAgICA8L2NhYzpDb250cmFjdGluZ1N5c3RlbT4KICAgICAgPGNhYzpDb250cmFjdGluZ1N5c3RlbT4KICAgICAgICA8Y2JjOkNvbnRyYWN0aW5nU3lzdGVtVHlwZUNvZGUgbGlzdE5hbWU9ImZyYW1ld29yay1hZ3JlZW1lbnQiPm5vbmU8L2NiYzpDb250cmFjdGluZ1N5c3RlbVR5cGVDb2RlPgogICAgICA8L2NhYzpDb250cmFjdGluZ1N5c3RlbT4KICAgIDwvY2FjOlRlbmRlcmluZ1Byb2Nlc3M+CiAgICA8Y2FjOlByb2N1cmVtZW50UHJvamVjdD4KICAgICAgPGNiYzpJRCBzY2hlbWVOYW1lPSJJbnRlcm5hbElEIj40LjwvY2JjOklEPgogICAgICA8Y2JjOk5hbWUgbGFuZ3VhZ2VJRD0iRklOIj40LiBLaXNrb24ga2F1cHVuZ2lub3NhLCB0YWx2aWhvaXRvPC9jYmM6TmFtZT4KICAgICAgPGNiYzpEZXNjcmlwdGlvbiBsYW5ndWFnZUlEPSJGSU4iPkhhbmtpbm5hbiBrb2h0ZWVuYSBvbiBLaXNrb24ga2F1cHVuZ2lub3NhbiBsaWlrdW50YXBhaWtrb2plbiB0YWx2aWhvaXRvIHRhcmpvdXNweXlubsO2biBqYSBsaWl0dGVlbiAxLiBIYW5raW5uYW4gdmFhdGltdWtzZXQgamEgcGFsdmVsdWt1dmF1cyBtdWthaXNlc3RpLiBMaXPDpGtzaSB0aWxhYWphIHZhcmFhIG1haGRvbGxpc3V1ZGVuIGthaHRlZW4gb3B0aW92dW90ZWVuIDIwMjYgamEgMjAyNy4gT3B0aW9sbGEgdGFya29pdGV0YWFuIG1haGRvbGxpc3V1dHRhIHNvcGltdWtzZW4gamF0a2FtaXNlZW4gYWxrdXBlcsOkaXNpbiBlaGRvaW4uIE9wdGlvaWRlbiBrw6R5dMO2c3TDpCBqYSBrZXN0b3N0YSBww6TDpHRldMOkw6RuIGVyaWtzZWVuLiA8L2NiYzpEZXNjcmlwdGlvbj4KICAgICAgPGNiYzpQcm9jdXJlbWVudFR5cGVDb2RlIGxpc3ROYW1lPSJjb250cmFjdC1uYXR1cmUiPnNlcnZpY2VzPC9jYmM6UHJvY3VyZW1lbnRUeXBlQ29kZT4KICAgICAgPGNiYzpTTUVTdWl0YWJsZUluZGljYXRvcj50cnVlPC9jYmM6U01FU3VpdGFibGVJbmRpY2F0b3I+CiAgICAgIDxjYWM6TWFpbkNvbW1vZGl0eUNsYXNzaWZpY2F0aW9uPgogICAgICAgIDxjYmM6SXRlbUNsYXNzaWZpY2F0aW9uQ29kZSBsaXN0TmFtZT0iY3B2Ij45MjYxMDAwMDwvY2JjOkl0ZW1DbGFzc2lmaWNhdGlvbkNvZGU+CiAgICAgIDwvY2FjOk1haW5Db21tb2RpdHlDbGFzc2lmaWNhdGlvbj4KICAgICAgPGNhYzpSZWFsaXplZExvY2F0aW9uPgogICAgICAgIDxjYWM6QWRkcmVzcz4KICAgICAgICAgIDxjYmM6Q291bnRyeVN1YmVudGl0eUNvZGUgbGlzdE5hbWU9Im51dHMiPkZJMUMxPC9jYmM6Q291bnRyeVN1YmVudGl0eUNvZGU+CiAgICAgICAgICA8Y2FjOkNvdW50cnk+CiAgICAgICAgICAgIDxjYmM6SWRlbnRpZmljYXRpb25Db2RlIGxpc3ROYW1lPSJjb3VudHJ5Ij5GSU48L2NiYzpJZGVudGlmaWNhdGlvbkNvZGU+CiAgICAgICAgICA8L2NhYzpDb3VudHJ5PgogICAgICAgIDwvY2FjOkFkZHJlc3M+CiAgICAgIDwvY2FjOlJlYWxpemVkTG9jYXRpb24+CiAgICAgIDxjYWM6UGxhbm5lZFBlcmlvZD4KICAgICAgICA8Y2JjOlN0YXJ0RGF0ZT4yMDI0LTAxLTAxKzAyOjAwPC9jYmM6U3RhcnREYXRlPgogICAgICAgIDxjYmM6RW5kRGF0ZT4yMDI1LTEyLTMxKzAyOjAwPC9jYmM6RW5kRGF0ZT4KICAgICAgPC9jYWM6UGxhbm5lZFBlcmlvZD4KICAgICAgPGNhYzpDb250cmFjdEV4dGVuc2lvbj4KICAgICAgICA8Y2JjOk1heGltdW1OdW1iZXJOdW1lcmljPjI8L2NiYzpNYXhpbXVtTnVtYmVyTnVtZXJpYz4KICAgICAgICA8Y2FjOlJlbmV3YWw+CiAgICAgICAgICA8Y2FjOlBlcmlvZD4KICAgICAgICAgICAgPGNiYzpEZXNjcmlwdGlvbiBsYW5ndWFnZUlEPSJGSU4iPlRpbGFhamEgdmFyYWEgbWFoZG9sbGlzdXVkZW4ga2FodGVlbiBvcHRpb3Z1b3RlZW4gMjAyNiBqYSAyMDI3LiBPcHRpb2xsYSB0YXJrb2l0ZXRhYW4gbWFoZG9sbGlzdXV0dGEgc29waW11a3NlbiBqYXRrYW1pc2VlbiBhbGt1cGVyw6Rpc2luIGVoZG9pbi4gT3B0aW9pZGVuIGvDpHl0w7ZzdMOkIGphIGtlc3Rvc3RhIHDDpMOkdGV0w6TDpG4gZXJpa3NlZW4uIDwvY2JjOkRlc2NyaXB0aW9uPgogICAgICAgICAgPC9jYWM6UGVyaW9kPgogICAgICAgIDwvY2FjOlJlbmV3YWw+CiAgICAgIDwvY2FjOkNvbnRyYWN0RXh0ZW5zaW9uPgogICAgPC9jYWM6UHJvY3VyZW1lbnRQcm9qZWN0PgogIDwvY2FjOlByb2N1cmVtZW50UHJvamVjdExvdD4KPC9Db250cmFjdE5vdGljZT4=" +} diff --git a/tests/unit/notice_metadata_processor/test_eligibility.py b/tests/unit/notice_metadata_processor/test_eligibility.py index 328af67a8..db094e48b 100644 --- a/tests/unit/notice_metadata_processor/test_eligibility.py +++ b/tests/unit/notice_metadata_processor/test_eligibility.py @@ -1,20 +1,20 @@ from ted_sws.core.model.notice import NoticeStatus from ted_sws.data_manager.adapters.mapping_suite_repository import MappingSuiteRepositoryInFileSystem -from ted_sws.notice_metadata_processor.services.metadata_normalizer import MetadataNormaliser +from ted_sws.notice_metadata_processor.services.metadata_normalizer import normalise_notice from ted_sws.notice_metadata_processor.services.notice_eligibility import check_package, \ notice_eligibility_checker, notice_eligibility_checker_by_id def test_non_eligibility_by_notice(notice_eligibility_repository_path, indexed_notice): mapping_suite_repository = MappingSuiteRepositoryInFileSystem(repository_path=notice_eligibility_repository_path) - MetadataNormaliser(notice=indexed_notice).normalise_metadata() + normalise_notice(notice=indexed_notice) notice_eligibility_checker(notice=indexed_notice, mapping_suite_repository=mapping_suite_repository) assert indexed_notice.status == NoticeStatus.INELIGIBLE_FOR_TRANSFORMATION def test_eligibility_by_notice(notice_eligibility_repository_path, notice_2020): mapping_suite_repository = MappingSuiteRepositoryInFileSystem(repository_path=notice_eligibility_repository_path) - MetadataNormaliser(notice=notice_2020).normalise_metadata() + normalise_notice(notice=notice_2020) notice_checker = notice_eligibility_checker(notice=notice_2020, mapping_suite_repository=mapping_suite_repository) notice_id, mapping_suite_identifier = notice_checker assert notice_id == "408313-2020" @@ -23,7 +23,7 @@ def test_eligibility_by_notice(notice_eligibility_repository_path, notice_2020): def test_eligibility_by_notice_id(notice_eligibility_repository_path, notice_2020, notice_repository): - MetadataNormaliser(notice=notice_2020).normalise_metadata() + normalise_notice(notice=notice_2020) notice_repository.add(notice_2020) mapping_suite_repository = MappingSuiteRepositoryInFileSystem(repository_path=notice_eligibility_repository_path) notice_checker = notice_eligibility_checker_by_id(notice_id="408313-2020", @@ -52,5 +52,4 @@ def test_check_mapping_suite(notice_eligibility_repository_path, normalised_meta normalised_metadata_object.eforms_subtype = "88" is_valid = check_package(mapping_suite=mapping_suite_repository.get("test_package"), notice_metadata=normalised_metadata_object) - print(is_valid) - assert not is_valid + assert not is_valid \ No newline at end of file diff --git a/tests/unit/notice_metadata_processor/test_metadata_extractor.py b/tests/unit/notice_metadata_processor/test_metadata_extractor.py index 1b9ed7635..92b321a87 100644 --- a/tests/unit/notice_metadata_processor/test_metadata_extractor.py +++ b/tests/unit/notice_metadata_processor/test_metadata_extractor.py @@ -10,10 +10,10 @@ def test_metadata_extractor(indexed_notice): metadata_extractor = DefaultNoticeMetadataExtractor( xml_manifestation=indexed_notice.xml_manifestation).extract_metadata() - extracted_metadata_dict = metadata_extractor.model_dump() + extracted_metadata_dict = metadata_extractor.dict() assert isinstance(metadata_extractor, ExtractedMetadata) - assert extracted_metadata_dict.keys() == ExtractedMetadata.model_fields.keys() + assert extracted_metadata_dict.keys() == ExtractedMetadata.__fields__.keys() assert "extracted_form_number", "xml_schema" in extracted_metadata_dict.keys() assert "067623-2022" in extracted_metadata_dict["notice_publication_number"] assert "http://publications.europa.eu/resource/schema/ted/R2.0.8/publication TED_EXPORT.xsd" in \ @@ -25,9 +25,9 @@ def test_metadata_extractor_2016(notice_2016): metadata_extractor = DefaultNoticeMetadataExtractor( xml_manifestation=notice_2016.xml_manifestation).extract_metadata() - extracted_metadata_dict = metadata_extractor.model_dump() + extracted_metadata_dict = metadata_extractor.dict() assert isinstance(metadata_extractor, ExtractedMetadata) - assert extracted_metadata_dict.keys() == ExtractedMetadata.model_fields.keys() + assert extracted_metadata_dict.keys() == ExtractedMetadata.__fields__.keys() assert notice_2016.ted_id in extracted_metadata_dict["notice_publication_number"] @@ -35,9 +35,9 @@ def test_metadata_extractor_2015(notice_2015): metadata_extractor = DefaultNoticeMetadataExtractor( xml_manifestation=notice_2015.xml_manifestation).extract_metadata() - extracted_metadata_dict = metadata_extractor.model_dump() + extracted_metadata_dict = metadata_extractor.dict() assert isinstance(metadata_extractor, ExtractedMetadata) - assert extracted_metadata_dict.keys() == ExtractedMetadata.model_fields.keys() + assert extracted_metadata_dict.keys() == ExtractedMetadata.__fields__.keys() assert notice_2015.ted_id in extracted_metadata_dict["notice_publication_number"] @@ -45,9 +45,9 @@ def test_metadata_extractor_2018(notice_2018): metadata_extractor = DefaultNoticeMetadataExtractor( xml_manifestation=notice_2018.xml_manifestation).extract_metadata() - extracted_metadata_dict = metadata_extractor.model_dump() + extracted_metadata_dict = metadata_extractor.dict() assert isinstance(metadata_extractor, ExtractedMetadata) - assert extracted_metadata_dict.keys() == ExtractedMetadata.model_fields.keys() + assert extracted_metadata_dict.keys() == ExtractedMetadata.__fields__.keys() assert notice_2018.ted_id in extracted_metadata_dict["notice_publication_number"] @@ -108,10 +108,10 @@ def test_get_normalised_namespaces(indexed_notice): def test_metadata_eform_extractor(eform_notice_622690): metadata_extractor = EformsNoticeMetadataExtractor( xml_manifestation=eform_notice_622690.xml_manifestation).extract_metadata() - extracted_metadata_dict = metadata_extractor.model_dump() + extracted_metadata_dict = metadata_extractor.dict() print(extracted_metadata_dict) assert isinstance(metadata_extractor, ExtractedMetadata) - assert extracted_metadata_dict.keys() == ExtractedMetadata.model_fields.keys() + assert extracted_metadata_dict.keys() == ExtractedMetadata.__fields__.keys() assert "extracted_form_number", "xml_schema" in extracted_metadata_dict.keys() assert "00622690-2023" in extracted_metadata_dict["notice_publication_number"] assert "competition" in extracted_metadata_dict["extracted_eform_type"] diff --git a/tests/unit/notice_packager/test_metadata_transformer.py b/tests/unit/notice_packager/test_metadata_transformer.py index 68e30aba4..768b8b33e 100644 --- a/tests/unit/notice_packager/test_metadata_transformer.py +++ b/tests/unit/notice_packager/test_metadata_transformer.py @@ -6,17 +6,17 @@ # Email: kalean.bl@gmail.com """ """ - +from ted_sws.core.model.metadata import NormalisedMetadata from ted_sws.notice_metadata_processor.model.metadata import ExtractedMetadata from ted_sws.notice_packager.services.metadata_transformer import MetadataTransformer, publication_notice_uri, \ publication_notice_year, publication_work_identifier, publication_notice_number, NORMALIZED_SEPARATOR -def test_notice_metadata(notice_sample_metadata: ExtractedMetadata): - assert isinstance(notice_sample_metadata, ExtractedMetadata) +def test_notice_metadata(notice_sample_metadata: NormalisedMetadata): + assert isinstance(notice_sample_metadata, NormalisedMetadata) -def test_metadata_transformer(notice_sample_metadata: ExtractedMetadata): +def test_metadata_transformer(notice_sample_metadata: NormalisedMetadata): metadata_transformer = MetadataTransformer(notice_sample_metadata) template_metadata = metadata_transformer.template_metadata() diff --git a/tests/unit/notice_packager/test_notice_packager.py b/tests/unit/notice_packager/test_notice_packager.py index a3725b859..11241af47 100644 --- a/tests/unit/notice_packager/test_notice_packager.py +++ b/tests/unit/notice_packager/test_notice_packager.py @@ -9,11 +9,14 @@ from ted_sws.core.model.manifestation import RDFManifestation from ted_sws.core.model.notice import NoticeStatus +from ted_sws.notice_metadata_processor.services.metadata_normalizer import normalise_notice from ted_sws.notice_packager.model.metadata import METS_TYPE_CREATE from ted_sws.notice_packager.services.notice_packager import package_notice, NoticePackager def test_notice_packager_with_notice(notice_2018, rdf_content): + notice_2018._status = NoticeStatus.INDEXED + normalise_notice(notice=notice_2018) rdf_manifestation = RDFManifestation(object_data=rdf_content) notice_2018._status = NoticeStatus.ELIGIBLE_FOR_PACKAGING notice_2018._rdf_manifestation = rdf_manifestation