From nobody Sun May 12 22:27:24 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) client-ip=66.175.222.108; envelope-from=bounce+27952+93031+1787277+3901457@groups.io; helo=mail02.groups.io; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce+27952+93031+1787277+3901457@groups.io; dmarc=fail(p=none dis=none) header.from=intel.com ARC-Seal: i=1; a=rsa-sha256; t=1662025863; cv=none; d=zohomail.com; s=zohoarc; b=mhrh9+jSwoETld6XkWv1uRpSCMP1cjfxxTTKWEXvGPMf+raWaH4yHDz9mu1VuRTCBuMaTpM80B7ChNC3MKAt4PhQApCLmwv5j4/WHKdhKgRz/RTJiyRVqkqEDgqyp7l2VLSWOuee+VYFYdm2FdkqsyTqf9TbkhfrrGvsxRYDs3M= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1662025863; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:List-Subscribe:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:Sender:Subject:To; bh=eWPXzRMziT2whB18Y1UN2Rqroq8Nnay/iLo5kCLWeX0=; b=Luu8nwapz4urbe35axNsQd6vAzOt5dO/DLSZXEm97l8DvYx5/C9qv7+xsZid87rbB5fYChtkd88F6sDOpni2DCrJkPpyL8BalXghC1RoVk2KUjFB1Qq2yPmV4dCI/iG5N8OcnCvsmJPCkQkX11OthYtQWAohSKDm5XhmOzxz4dI= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce+27952+93031+1787277+3901457@groups.io; dmarc=fail header.from= (p=none dis=none) Received: from mail02.groups.io (mail02.groups.io [66.175.222.108]) by mx.zohomail.com with SMTPS id 1662025863112701.1462282618986; Thu, 1 Sep 2022 02:51:03 -0700 (PDT) Return-Path: X-Received: by 127.0.0.2 with SMTP id EEcwYY1788612xm2sK4yePwM; Thu, 01 Sep 2022 02:51:02 -0700 X-Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by mx.groups.io with SMTP id smtpd.web09.9244.1662015460600899185 for ; Wed, 31 Aug 2022 23:57:40 -0700 X-IronPort-AV: E=McAfee;i="6500,9779,10456"; a="296417986" X-IronPort-AV: E=Sophos;i="5.93,280,1654585200"; d="scan'208";a="296417986" X-Received: from orsmga003.jf.intel.com ([10.7.209.27]) by orsmga102.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 31 Aug 2022 23:57:15 -0700 X-IronPort-AV: E=Sophos;i="5.93,280,1654585200"; d="scan'208";a="563335968" X-Received: from liwenzha-mobl.ccr.corp.intel.com ([10.238.1.245]) by orsmga003-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 31 Aug 2022 23:57:14 -0700 From: liwenzha To: devel@edk2.groups.io Cc: Bob Feng , Liming Gao , Yuwei Chen Subject: [edk2-devel] [PATCH] [edk2-basetools]GenCrc32:Convert the C tool of calculating the crc32 into a python tool Date: Thu, 1 Sep 2022 14:57:02 +0800 Message-Id: <20220901065702.2412-1-wenzhao1.li@intel.com> MIME-Version: 1.0 Precedence: Bulk List-Unsubscribe: List-Subscribe: List-Help: Sender: devel@edk2.groups.io List-Id: Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Reply-To: devel@edk2.groups.io,wenzhao1.li@intel.com X-Gm-Message-State: XjiLBhNlSTtJiu2yuIC8WpFMx1787277AA= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1662025862; bh=AOQO2wHhmCdv4TafPYBKq1bt2HAVUE6HgwyEoPuO8w4=; h=Cc:Content-Type:Date:From:Reply-To:Subject:To; b=o8TNAk7EnDA9Wvx+O1bm/Hia/Uhr8z70knauSaCjkqGBVyoU08fYd6daayfdnjSq5+8 vgZvm1nIqoCfGdkO2Ycrpi8151vOmVL62cNpyQbROjpBLzdPRZayUea4JLQGepZE+o8B2 EcxsOEVm9EBhJexEA6DJ28vlHdQCbenKGUU= X-ZohoMail-DKIM: pass (identity @groups.io) X-ZM-MESSAGEID: 1662025865341100016 description This patch converts the C tool of calculating the crc32 value of file into a python file. To realize this,after reading the data into the file in binary form from an original file,a lookup table is listed to do XOR and shifting calculation for each bit in the file.The 32-bit result is placed at the beginning of the file as the header.The verification part will recalculate the crc32 value of the data behind the header again.When header is equal to the recalculating result,which means the crc32 value of this fi= le is correct and the file is valid.In the unit testing part,some files which have been preprocessed by C tool are placed in a folder.The file after proc= essing by python tool will be compared with these files to check whether the resul= t is correct. Cc: Bob Feng Cc: Liming Gao Signed-off-by: Yuwei Chen --- edk2basetools/GenCrc32/GenCrc32.py | 373 ++++++++++++++++++ edk2basetools/GenCrc32/__init__.py | 10 + edk2basetools/tests/GenCrc32/decode/PcdPeim | Bin 0 -> 18912 bytes .../tests/GenCrc32/decode/PcdPeim_crc32 | Bin 0 -> 18916 bytes .../tests/GenCrc32/decode/S3Resume2Pei | Bin 0 -> 18272 bytes .../tests/GenCrc32/decode/S3Resume2Pei_crc32 | Bin 0 -> 18276 bytes edk2basetools/tests/GenCrc32/decode/demo | 1 + edk2basetools/tests/GenCrc32/decode/demo_crc | 1 + .../tests/GenCrc32/encode/PcdPeim.efi | Bin 0 -> 18912 bytes .../tests/GenCrc32/encode/PcdPeim_crc32 | Bin 0 -> 18916 bytes .../tests/GenCrc32/encode/S3Resume2Pei.efi | Bin 0 -> 18272 bytes .../tests/GenCrc32/encode/S3Resume2Pei_crc32 | Bin 0 -> 18276 bytes edk2basetools/tests/GenCrc32/encode/demo.bin | 1 + edk2basetools/tests/GenCrc32/encode/demo_crc | 1 + edk2basetools/tests/GenCrc32/test_gencrc32.py | 124 ++++++ 15 files changed, 511 insertions(+) create mode 100644 edk2basetools/GenCrc32/GenCrc32.py create mode 100644 edk2basetools/GenCrc32/__init__.py create mode 100644 edk2basetools/tests/GenCrc32/decode/PcdPeim create mode 100644 edk2basetools/tests/GenCrc32/decode/PcdPeim_crc32 create mode 100644 edk2basetools/tests/GenCrc32/decode/S3Resume2Pei create mode 100644 edk2basetools/tests/GenCrc32/decode/S3Resume2Pei_crc32 create mode 100644 edk2basetools/tests/GenCrc32/decode/demo create mode 100644 edk2basetools/tests/GenCrc32/decode/demo_crc create mode 100644 edk2basetools/tests/GenCrc32/encode/PcdPeim.efi create mode 100644 edk2basetools/tests/GenCrc32/encode/PcdPeim_crc32 create mode 100644 edk2basetools/tests/GenCrc32/encode/S3Resume2Pei.efi create mode 100644 edk2basetools/tests/GenCrc32/encode/S3Resume2Pei_crc32 create mode 100644 edk2basetools/tests/GenCrc32/encode/demo.bin create mode 100644 edk2basetools/tests/GenCrc32/encode/demo_crc create mode 100644 edk2basetools/tests/GenCrc32/test_gencrc32.py diff --git a/edk2basetools/GenCrc32/GenCrc32.py b/edk2basetools/GenCrc32/Ge= nCrc32.py new file mode 100644 index 0000000..e27e4b0 --- /dev/null +++ b/edk2basetools/GenCrc32/GenCrc32.py @@ -0,0 +1,373 @@ +#@file +#Calculate Crc32 value and Verify Crc32 value for input data. +# +#Copyright (c) 2007 - 2018, Intel Corporation. All rights reserved.
+#SPDX-License-Identifier: BSD-2-Clause-Patent +# +## + +# +#Import Modules +# +import io +import logging +import argparse +import os +import sys + +mCrcTable=3D[0x00000000, + 0x77073096, + 0xEE0E612C, + 0x990951BA, + 0x076DC419, + 0x706AF48F, + 0xE963A535, + 0x9E6495A3, + 0x0EDB8832, + 0x79DCB8A4, + 0xE0D5E91E, + 0x97D2D988, + 0x09B64C2B, + 0x7EB17CBD, + 0xE7B82D07, + 0x90BF1D91, + 0x1DB71064, + 0x6AB020F2, + 0xF3B97148, + 0x84BE41DE, + 0x1ADAD47D, + 0x6DDDE4EB, + 0xF4D4B551, + 0x83D385C7, + 0x136C9856, + 0x646BA8C0, + 0xFD62F97A, + 0x8A65C9EC, + 0x14015C4F, + 0x63066CD9, + 0xFA0F3D63, + 0x8D080DF5, + 0x3B6E20C8, + 0x4C69105E, + 0xD56041E4, + 0xA2677172, + 0x3C03E4D1, + 0x4B04D447, + 0xD20D85FD, + 0xA50AB56B, + 0x35B5A8FA, + 0x42B2986C, + 0xDBBBC9D6, + 0xACBCF940, + 0x32D86CE3, + 0x45DF5C75, + 0xDCD60DCF, + 0xABD13D59, + 0x26D930AC, + 0x51DE003A, + 0xC8D75180, + 0xBFD06116, + 0x21B4F4B5, + 0x56B3C423, + 0xCFBA9599, + 0xB8BDA50F, + 0x2802B89E, + 0x5F058808, + 0xC60CD9B2, + 0xB10BE924, + 0x2F6F7C87, + 0x58684C11, + 0xC1611DAB, + 0xB6662D3D, + 0x76DC4190, + 0x01DB7106, + 0x98D220BC, + 0xEFD5102A, + 0x71B18589, + 0x06B6B51F, + 0x9FBFE4A5, + 0xE8B8D433, + 0x7807C9A2, + 0x0F00F934, + 0x9609A88E, + 0xE10E9818, + 0x7F6A0DBB, + 0x086D3D2D, + 0x91646C97, + 0xE6635C01, + 0x6B6B51F4, + 0x1C6C6162, + 0x856530D8, + 0xF262004E, + 0x6C0695ED, + 0x1B01A57B, + 0x8208F4C1, + 0xF50FC457, + 0x65B0D9C6, + 0x12B7E950, + 0x8BBEB8EA, + 0xFCB9887C, + 0x62DD1DDF, + 0x15DA2D49, + 0x8CD37CF3, + 0xFBD44C65, + 0x4DB26158, + 0x3AB551CE, + 0xA3BC0074, + 0xD4BB30E2, + 0x4ADFA541, + 0x3DD895D7, + 0xA4D1C46D, + 0xD3D6F4FB, + 0x4369E96A, + 0x346ED9FC, + 0xAD678846, + 0xDA60B8D0, + 0x44042D73, + 0x33031DE5, + 0xAA0A4C5F, + 0xDD0D7CC9, + 0x5005713C, + 0x270241AA, + 0xBE0B1010, + 0xC90C2086, + 0x5768B525, + 0x206F85B3, + 0xB966D409, + 0xCE61E49F, + 0x5EDEF90E, + 0x29D9C998, + 0xB0D09822, + 0xC7D7A8B4, + 0x59B33D17, + 0x2EB40D81, + 0xB7BD5C3B, + 0xC0BA6CAD, + 0xEDB88320, + 0x9ABFB3B6, + 0x03B6E20C, + 0x74B1D29A, + 0xEAD54739, + 0x9DD277AF, + 0x04DB2615, + 0x73DC1683, + 0xE3630B12, + 0x94643B84, + 0x0D6D6A3E, + 0x7A6A5AA8, + 0xE40ECF0B, + 0x9309FF9D, + 0x0A00AE27, + 0x7D079EB1, + 0xF00F9344, + 0x8708A3D2, + 0x1E01F268, + 0x6906C2FE, + 0xF762575D, + 0x806567CB, + 0x196C3671, + 0x6E6B06E7, + 0xFED41B76, + 0x89D32BE0, + 0x10DA7A5A, + 0x67DD4ACC, + 0xF9B9DF6F, + 0x8EBEEFF9, + 0x17B7BE43, + 0x60B08ED5, + 0xD6D6A3E8, + 0xA1D1937E, + 0x38D8C2C4, + 0x4FDFF252, + 0xD1BB67F1, + 0xA6BC5767, + 0x3FB506DD, + 0x48B2364B, + 0xD80D2BDA, + 0xAF0A1B4C, + 0x36034AF6, + 0x41047A60, + 0xDF60EFC3, + 0xA867DF55, + 0x316E8EEF, + 0x4669BE79, + 0xCB61B38C, + 0xBC66831A, + 0x256FD2A0, + 0x5268E236, + 0xCC0C7795, + 0xBB0B4703, + 0x220216B9, + 0x5505262F, + 0xC5BA3BBE, + 0xB2BD0B28, + 0x2BB45A92, + 0x5CB36A04, + 0xC2D7FFA7, + 0xB5D0CF31, + 0x2CD99E8B, + 0x5BDEAE1D, + 0x9B64C2B0, + 0xEC63F226, + 0x756AA39C, + 0x026D930A, + 0x9C0906A9, + 0xEB0E363F, + 0x72076785, + 0x05005713, + 0x95BF4A82, + 0xE2B87A14, + 0x7BB12BAE, + 0x0CB61B38, + 0x92D28E9B, + 0xE5D5BE0D, + 0x7CDCEFB7, + 0x0BDBDF21, + 0x86D3D2D4, + 0xF1D4E242, + 0x68DDB3F8, + 0x1FDA836E, + 0x81BE16CD, + 0xF6B9265B, + 0x6FB077E1, + 0x18B74777, + 0x88085AE6, + 0xFF0F6A70, + 0x66063BCA, + 0x11010B5C, + 0x8F659EFF, + 0xF862AE69, + 0x616BFFD3, + 0x166CCF45, + 0xA00AE278, + 0xD70DD2EE, + 0x4E048354, + 0x3903B3C2, + 0xA7672661, + 0xD06016F7, + 0x4969474D, + 0x3E6E77DB, + 0xAED16A4A, + 0xD9D65ADC, + 0x40DF0B66, + 0x37D83BF0, + 0xA9BCAE53, + 0xDEBB9EC5, + 0x47B2CF7F, + 0x30B5FFE9, + 0xBDBDF21C, + 0xCABAC28A, + 0x53B39330, + 0x24B4A3A6, + 0xBAD03605, + 0xCDD70693, + 0x54DE5729, + 0x23D967BF, + 0xB3667A2E, + 0xC4614AB8, + 0x5D681B02, + 0x2A6F2B94, + 0xB40BBE37, + 0xC30C8EA1, + 0x5A05DF1B, + 0x2D02EF8D] + + +parser=3Dargparse.ArgumentParser(description=3D''' +Calculate Crc32 value and Verify Crc32 value for input data. +''') +parser.add_argument("-e","--encode",dest=3D"inputfilename1", + help=3D"Calculate andverify CRC32 value for the input = file.") +parser.add_argument("-d","--decode",dest=3D"inputfilename2", + help=3D"Verify CRC32 value for the input file.") +parser.add_argument("-o","--output",dest=3D"outputfilename", + help=3D"Output file name.") +parser.add_argument("-s","--silent",help=3D"Returns only the exit code;inf= ormational and error messages are not displayed.") =20 +parser.add_argument("--version", action=3D"version", version=3D'%(prog)s V= ersion 2.0', + help=3D"Show program's version number and exit.") + +group=3Dparser.add_mutually_exclusive_group() +group.add_argument("-v","--verbose",action=3D"store_true", + help=3D"Print information statements") +group.add_argument("-q","--quiet",action=3D"store_true", + help=3D"Disable all messages except fatal errors") + + + +#Calculate the Crc32 and store it in the file +def CalculateCrc32(inputfile:str, outputfile:str, filebytes=3Db''): + logger=3Dlogging.getLogger('GenCrC32') + status=3D0 + try: + Crc=3D0xffffffff + if filebytes !=3D b'': + temp =3D filebytes + status=3D1 + else: + with open(inputfile,'rb') as fin: =20 + temp=3Dfin.read() + =20 + DataSize =3D len(temp) + for Index in range(DataSize): =20 + Crc=3D(Crc>>8)^mCrcTable[(Crc&0xff)^temp[Index]] + CrcOut=3DCrc^0xffffffff + CrcOut=3DCrcOut.to_bytes(4,byteorder=3D"little") + with open(outputfile,'wb') as fout: =20 + if status=3D=3D0: + fout.write(CrcOut) + fout.write(temp) + except Exception as e: + logger.error("Calculation failed!") + raise(e) + return CrcOut + + +#Verify the CRC and checkout if the file is correct +def VerifyCrc32(inputfile1:str,outputfile1:str): + logger=3Dlogging.getLogger('GenCrC32') + try: + with open(inputfile1,'rb') as fin3: + head=3Dfin3.read() + header=3Dhead[0:4] + calres=3DCalculateCrc32('', outputfile1, head[4:]) + + if calres=3D=3Dheader: + return calres + else: + logger.error("Invalid file!") + raise(e) + =20 + except Exception as e: + logger.error("Verification failed!") + raise(e) + + +def main(): + args=3Dparser.parse_args() + + logger=3Dlogging.getLogger('GenCrc32') + if args.quiet: + logger.setLevel(logging.CRITICAL) + if args.verbose: + logger.setLevel(logging.DEBUG) + lh =3D logging.StreamHandler(sys.stdout) + lf =3D logging.Formatter("%(levelname)-8s: %(message)s") + lh.setFormatter(lf) + logger.addHandler(lh) + + try: + if len(sys.argv)=3D=3D1: + parser.print_help() + logger.error("Missing options") + raise(e) + if args.inputfilename1: + CalculateCrc32(args.inputfilename1,args.outputfilename) + elif args.inputfilename2: + VerifyCrc32(args.inputfilename2,args.outputfilename) + except Exception as e: + return 1 + return 0 + + +if __name__=3D=3D"__main__": + exit(main()) \ No newline at end of file diff --git a/edk2basetools/GenCrc32/__init__.py b/edk2basetools/GenCrc32/__= init__.py new file mode 100644 index 0000000..b35de32 --- /dev/null +++ b/edk2basetools/GenCrc32/__init__.py @@ -0,0 +1,10 @@ +# @file +# Calculate the crc32 value of file. +# +# Copyright (c) 2021, Intel Corporation. All rights reserved.
+# +# SPDX-License-Identifier: BSD-2-Clause-Patent +# +## + +# Import Modules diff --git a/edk2basetools/tests/GenCrc32/decode/PcdPeim b/edk2basetools/te= sts/GenCrc32/decode/PcdPeim new file mode 100644 index 0000000000000000000000000000000000000000..db03070a222507e0d035754fb46= 973ac92b32931 GIT binary patch literal 18912 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

?Ub5;NY7Z0S5YO)Je8p0 zAxsVlJEgY$;>|Lh2>{hNmdV&QOW3qH1W-p}&+bUWRp^rvK}*JM3$egIWk(0mJ+&jf zr+Wkq#bD$7YZq?19+tj|i&NTA{^w3)1_VDJqha~y*oKRe+#5*lo0sq2L2^@<4ef$; zw5b}>92BR<`7<4*LfW5$Ao2_e=3DCq!Jo2U6TTaBz-Yd_R9IdG>g=3DH79FhVAVXHTP!6 zsETz3cE4uJ$tu>lN`Ci!N{2WBCs-NG?+e~}u{(}(&jio!Dc#OkzB>%fi!Z`cX!FhT zwbs{r&p7bjruPgh?mHP99Jibme_jyG*Nom9EZ1%i?gae3WBt!kc8uyfa7rje7Q{)l zlVS<0*-;SOc9JtvrW0mR^VoL4|1Hmls7@V=3D5zxDjlk~+zcfc=3D^xF+E69e}*2G82HM z0F1nap*>VRAI}n|*e`9=3DdYWmjlIC{r!y8T9a1nzvW1yMUH1kWEfwj5clFfxI@iA;t z?A;qDdcp+L2pE}#m#|BK=3DvuK&0^sji4~t;2fzaZLtq#x?c2IL6J|ZJAcpM9W#6N(f zO+g|1RrdFCP_!MDh zVn!pQ3oYyiXc7O%Zq;7s*n;zULkzo9>qi$GiRbq$jp_VA!|#dbp9zodoCdZ5l*+eC zXOh^7Vgt^OpeY)KU%^=3DTKmqn$)&tga+fHUp#cSarQ(i%Er3NmaaBq=3Dm3_fG=3D;W2K) zCq2+Nif{cT`maFW7@YP?H`CEo38vI-2RTFn9hhN#&(oMf{xYy$6kQy9sg-_G5fF`n zHz1C}4{^j8zKxE!0taJzUL+`F-QF$^`v!j^n1MyW27>LPotqG94H zumO_bB!ajk!zA`842)NFC7AMv_+k(z>-Xdk7d55?4u>{(YT1!U0#0<#*YNkeAnQ7T z^n)3`H5;l9^uRIhh6CU{J#oLVGSFk-TmOMr2=3DvV1TP=3Dnw{K!j2hLL?80$@pz2`>|u+^Cr>}>`0@mYdX0UWtXYs%Ts~%N@SOD4K?2;Aw018 zdiL736Y!b4LOK0`KI5jD>-J6z?K}y7BVz;SM{JtB?#$$E-M8Zz+)In>r}?($q0eQW zqNr3gBvmSHNlPM&!?MsD2?r zzZH}tR)d(Ph}BRev*wFzL*Mo{T283LCsg;AnZ}&!iWNq5=3Db6SNvaY~!4gWx%X)I{w z*N<9`ee~$S$-g5NC%~R4On2S11s!YCWCR76@sC4Np_Q|H-wzz&djB3VLzz0vWJuFf zB9kyXmaEq-hn*=3DXT zru8a}nxSq(Rb*Pd%KAFAU&%UEXR3O8$q2~u=3D}7n*wl9$qeR|6lkQBxtcaI5W_oF)Z zs^}*zCXA2agpt{JO-R4QG(n+weF6sg7}f<}m_8LbKEnv@^KCakT&Oyag11LU4`1(H z@T^gLK7>#8{1|#-aiOi0HnXI@fm-f?UtfgIL14Z;KD3ou?ZPVo8YF;c3V3*a!C3kl zLtk3@8ckoL=3DxZc>X%HpxbT-|9$fx$l6KXY4A@H0AC-rDn9O6khbKr&asKZ7UQc{3^ z4Lu(t4Cq0MdpS*zGXHI=3D7$d0A)=3DO$ntz(~J%HlY z9US0+iV>6Fh67E524`V9x!y>j7aNbT45c z@(QM@z;pvZEwE50(C8iYG2(`ym$5*K%2?H$BLy=3D7UX^4f3`jp5vC zhtiOJ{gxh@$Jut$cVEa1T+6Y7+TZY^Gqf_Kv^C|I%|6z ztTi50ng3oFhEfZV?mKY9KeL38>4unyh@xRBB=3Dv%@bgCpNgtTgaHdYU%3243QY?c(X zL{?YjKGuM1+h;SnQqrcjw4Oe%lsP8950&XqMlK$-G3^hV0TkoOx%|DISgDlWnl?q;;yU@Ej5C5RTI5op)HgELS)fjJ{ zNdRl+SGsG~B~=3D#JxQo3t{sy;W-P+3X#=3D4DeUsH8Mr6V`5(&4VFbgZeFvj*+$6Zy6At>FjeE{j;Wt%-id!HeGEdbFK6iD^=3D2^x%K|$8&6%-zaKs9bQu7?We zkZfji&eEkt`PopsB_m_*OsIH}mMkx1srC9BYm9Y`iUx%0)eUZvVkj&aiHfSo6XokN zc^5TqtZsn0>KZrr1sUHgqW~q;xNEEZ4H%M@v8k@1L1JB?8-J6#Mj}||UFU9G;$Oeo z?K37C=3DfW$@Mcy^l4bpfn*c51ZCb!TJ8pEA~W`&v-^M!FS@Ovxe_i5k z9yUR?H4h)VrUtK}D@(H?ZmKLT{=3DL&xb!ur=3Dv@{4uHbLB8!GA$rgS)W0v8LfFQbQ1k zowqutuCdy;`HH2Sd7)bsaK!xsv0<6}TdI<66N3r>a^DyHyp`HM?uFg&cofLroP1imRLJ*8A6I zH?66wlhMcv{+%49)wS+HKJwg60{nrrJX{*`ar&EHZJu5;(>T3)zOgjBARpzVWYLm^ zRk=3D%-;4T|_tjaCS&s}VuUOm%TTMY-SnPW7TxCOtj5qWneQU08NC~}}=3DtC08 zTQFkI^=3D{YAlk_b z<%^Wuq}wK8xY;<2qtg4XoB)2zT>($UKk94II7vl}G$9vwYmH{A=3DY>misuq?n%Bw1K zIr5<;v$9||3WV`m(KW=3DkWOH5CQw)zWIlv)fiF*V5vywakV->#Y4IA7(ikWXhQ&xPG z+(4Wu?t%gpm5P$m>`am!5|9`JarZSbJe)^7gJD7i{)X#N$~M=3D?HBniHFmyAaaR|Q4 zxcLuwS?>0EFVk0n*SEg(bn!8S^xl+=3Dhw?;|Cvgb(22MR;i>}$kO zDY_}jCv$B`C^B7Sn6KsfYFMSrBgN=3D{yi^j4Ge?t_!qhioCAtV@QW5VPGIHfYu#w*A zN9)=3DoRb9NIP@dN!Vluhumel6i(=3DEvZUrEi=3DElKnw-weN!Ps;d&y7g{apHy>;@|9d; zG}7&S`T`tq-$w9b(4pf8hSFcDf6W>+ILgzIOGUM>k-CEN#&wO}O^wEd4VyR6YiKSy zk>_r33vOcpilpD?9x_qktGjG`V1<&m%Di4<>H6x1hJguWc=3DULbz6Ka5@>bUv^L;+A zZ(s-~%E}(WQSC!3jQFCt^2R3rh7AaAH_52{DO6ij4 zrmlM!eOWGt&nvjs3=3Dmt2%?j#DiMvVa3uHw)y$yb}>bYK@&%Z%X5G#WPu>ByZC0=3D8( zyQXeXZkm!tqMN-aEb&=3DD+pXvTU9%D-@JnIY^rHuJJZp2EC|p zjd%S9v~WnGMkhAs=3D;gRlH+GP9!e*nh&WpTGLmZb|l6%=3DoiTiwPM`4c3bqZ}@8-;zd zIVnxf0)QPHv{Jt>|0&C9;}IPi^tvK!zWvo}<(XV?>GQ6y!~XL!$FpN^dy4F#P3DzEil(6+E=3D#+draT zgbmaysdKNSs%uTMC0FL<=3Daet3a+W4p=3DB8CH%C>%!gBE!a9l4-BuAj4^W;O8t|MoY% z_-xFH;y+AVaMm_&!P#kNzG&Qa^V6r2v!8aRmc4Y-2T!@yX&-ZaxH9L#y3sE`_~$#f zt(eG)UE%K+1!u&4l{@#?_C=3D@v_^ZfQH|PDuIN^6i?TODh9$R&LW%ma;9W6h2^yX&_ z-9KDE^PhF2({t`KTc0}q+wq?C$#+G!_fTnvPE)UGZ;SHi7nb=3D`@Jr zh>x$M^-Xb-@6x}DFT!syaNiQf{c{Bzok+Hv#{H)wWdEjr&Yy)3!90xd{kX3M4?}s1 z`q~cM+>!jt7*PJVRW6Z69Jj?DYpJgqI!X0b8b4%?q>U)V0#G%0l{{*=3D2?T2tCn zE~TWV-j%vLl}pP^yF2X%X+KYUIPE}MUz%zD%=3D!Ok{%iA3%>Qb>#y;M@+Wr@NxBZ|! zVmGCyq^GCvOy8IORr-hwb4F4|S;nf2pJeC_9Uo6@$WWzH|0zh{2e ze8Ile{-FIa`#JlU_V)Ax>2IXZ%&=3Dw%8Lb)L%NUb6Dbtdp;SAoHWlPcv69Si9gm z3pOrzXu)q5gcrQH;Qa+B7o1;kX#pw!5%7Gy#c0X5+-fPaxGWD@p0Mn(ylMH|a?$eO z+{fnbnY(Z92Xkj9%}XjwawN4RZBKeA>G7oJllCROpCl$}tO-`Tb%oVu-D2&szGD5@ zdeQ1iUY-0u$uB0ql5CyVJde%0f8PH>?ic6f+7{dHuW*-qFl*$gS^DFrFpQdr6~ z`)vC!?0>cE(!J?-r9Y5flX*vGAoIb@N5J{@3pfkM!R5K%B|V+QW#NY{xX-fX*$Qn% zHixaucAKrzcDt>{=3DCL){HrNDPvuz7B+iJVlb{{<8e%nuN5858KJz{&@_Iuk-+f%k( zw&!eN+kV^2w!^kJZAYQ~ECr6ngC|dV-!(TGztQj}$S3=3D8oGP8;3T_1OFODr2P1{7^ z7D7kTi*%*?_>aJG=3DH=3DF^3bBIYmfo)Dp6b1ihfC$S?Bxm=3DR|Z+R4AAo4C&3+AZZ*|e zDixhbH;#DIecUIN@@@%MBc z-I6VZYjMfZs&FmPYH+R6hGjbrpYfc$GEUzAY+1%}?OozL5ac`0+-{o#=3Ds+ny>@t7% zk;R9cC%R?-%lxn8^`+~jxso+d`nF1{RZE*Sp3R{|rWoRpI!xos|BW{l)6>VIm@L6y zpf15VGu{|>7Q8WXcF;Kt$cgyBybj-(mw$j<$p4h@{BWM_KFZM+{--JPaN7}nfNnH( z#?QugMEUu_6pk|ij$uF1KdP&=3D#y~`dna=3DFf}IydFQ?x|U4 zua!@RdQ5?uGIF`P-mN}2z50`C=3DTt|Z|JlLoK+8r6*1M;lQ++~kfoGvv(HLVmT#gxq zYaqsZrhJ-t_S(kDP$6TCEsU`=3DrTQ~RFBo43dhRQqCKh5WO#vJjZ|o_QE;!B)7ZuAr zw{hG-GS?r^qgb?eZJ%c_Q`snze~rv9?)(yS9U8b_o)1XJVa)+v8>yrG-mSiT+NNq*t3SAh`^Z%99sXQlik-E+^WBjP{d(pq-5Y`A>KU z?Q&h$M(LvsOu7pZ$bzfI<~H!IO_diAgy{n3%KeMObP>R6=3D~SP7Bn;xoccXT>^uva{ zj#TiIUkl+l#%{L3{2Z{&q@H}1Cl+dVl1o2gaOwYIkbvRQNEb2KKDd2Wk@@ve*!>D@ zQL#A?(t-O6Y(P`KvEOSs$At_dXM?jc-end9RC9A4Vdg1h`VP)ZP~>K|R> z{lcD=3DviyUyriim07u1~rnt*@~l#*20GK&c%YXEFch55!AE5cwVV=3D2;W6^T0g5a!He zW^$M8VodZZDYAW#Z@U+htt&IrRvY>DJMpZ0KVhTVu9h;xf-}SUHWh~CpTjujGZWo1 zfm0^{V3N*{CUROpoXl;CIlc>+j=3Df~-d<0mYuD^2%R7#Vdo5^wD26Ql#9-b@is!c5~ zc4cS_4CWsJ)%+qZ#d0yw9fw0(b_xFW6@!_f{$kW%rq)kf;%N#qpJpI23`7l7gVA8b z$I}#!S$Q*D?KmvBR}pB~{X}ir7$_hK=3Dxqk1anJQMsm&Pxf(OsdU}|Ar?KxFaLT(83 zx}imuS!k=3D}9cqp%-}oSfpyR?)V_}i>?(PCDUo3s$+@Xz;pPLR+K^}vqgx{Z|owX2g z)s<&#J?ruC9D*Ri+{k!23$zikjq%e+ms@){gsz+i(zR2h6D9J`@ud3%)ih{Ns>&T* zm{;g3&d0VIwdBu+%hIo+8aNK2k{ zOgcmZ!AD#B8HudG)<01XV!E4JEXEFL*-ls&%@5wABawcxN_uISpw!c9S z-CG@8x|)+egRSL9c-ZI!2Jrk>3?Nc9C_vOr$ZOy$#6u_*p>0Lx6AH}=3DMpOENmiFQz z`7XQ~JVk+UC>4+_l*f-)RrliQcUeQ9Y zh}M@mJ$VXjw=3Du-IaZasfeYJB6?5cL08F6OLbY)Vd4V_SF4OD4&6DcOFp9;KDjfi`i zJX7IpZd7=3DDh&+(8gn+CtBWgdqZ7lXQ26`gpkf~&s2zeJ0&zt?q^60oApavA14=3D@6{ z_sfeBwGsF(#Wxb)82ND!g@{5QzCh;;$mOLS0vYo*g+0l9kP7*$w9>)L^9@BxO*a6S z{P8+0BOOx;`YRYKF(T3oMB+FC3;1EQc8;Rm;YB++4y~Qg5Lg22Kht~!@^-$%rsb_P z0|~<*Vc3|28X|8QM}Fb>)n-2cNwU9=3DV{wm9vPMFUxf$wryr>_IL;V$Q%|$g*+86(iHIZG^))@+0ZhDnx`qy6K76kLvt}iMZ8I6u3`hz*g&YK zNn_s428Q8JPt#IQQ-t|$CmE2|(HP<5qI08#@p!M*}S^*+BikOqOl#?Fs@{0kbFNPSqf?I7h_rzXic^+b!=3DC2c9oPC z7MvC?-tE25Y1xitP&1f@WpMgn8kWJp=3D(pVdzwwjSYUHM?9*^8bgk-9wBUqE+%Wz+z zIfI-lDbab{vx_}&zT6K;12Q4Pqk$Q-lyupCPTGkwTmASEPjjGS%Sz6(!m%Zjb8K0Q zZxLtS0d=3DdLS@9IcwW-LpzO2LOq>fR=3DiiBg`3WAeRlqc$y>4b!>pr zpMNL(23tr<>2SfvId@t*7|`vl{iOP#%O`Jk3R( z=3D6rJu8~6wVOqh+H=3D2CMR8+(%q7XPX-H`gd-p$u!1j`8h3L=3DLCu%5~B9xl&eGK$gZ( z%YlwcZY4MKfC6mNF}oc=3DaWVFWam6ugTygy3lE;G;IGig{sv|aCh#$>DEISWVLc>R4 z*nvq|5o2$srFCHe>p(wzR#vDXPuFEI7{HoLDsROC=3D{PJHi{!P4h>{X&lsB+G1(hl< zPd*Wdz$hHauZ@sY22WlNybpeXx~~2nNk7uxlSg$-x+Yy}_tB(b@ZG)_J$HArOnGZ+Z+lcof;SOEpG)4FB&Ct;9J`>UCNIX~``? zYZXeZ)ulg>9Ip~7hz8anM(J%uqWy#;O<}gl48%dV6W|B??eIo8o&@`hq~-Q$NgD(0f&2X2{?T1ZixAplBxz4T z+TuT=3D2jN(eCE;uDFO`nUDx&6ANxeg-llpAP5SodknNJZkC0Og#7n##GKGnLC0I<$szdq&yJ_i>7Kl26^C9kH<`% zOs$?M1}X*}YajBUm*Z-xb(T4sXv{C|C?FbtA$RP_9np13g{r}B!5$fmhdZk_Pq2;K>&pheO#eKCeioT%+V?d&kIw zBjCe4zF@q^&jAQ=3DA{|%Uy|h%$BT-;i)=3D)*nL&#<1$3zTcv;9Xa%?SB-tr7)e=3Dv~a5DSjO;bW%* z3M*G2l0j9=3D<>#5h6Od;_#vuO%1rxy15gEr)#AGJm40#Hr3!kuTmM?z^OJEn;l9Hnb zlzr~rPU3W7Z}LEI5Doe9Pj&q?7Y{wpu`4U^aziMso?R)$=3Dvnx-?*lVs#Y~P9^HRDN zK$JD9$MD5HTz#K}*Ee0c3NF`@w^$Ej)+LQNv-0ef43O;I}QV zU4ib~52o(Ji4RTS{^}~4@N?}-MJDuvVOx*=3DcEqbjdK&@tB7`d0a}rZ=3Dvk+RxKs;g52zd;@{X&4;xxzAAQ2_Gzb6_C8c@*X7s=3Dg_ z6!A0l0LPvA%DuefPN<86J<|xbA*d_AM$aP^4v*&82+Oh7zj3I=3D0Te2XwLBe8!AYQ< zm!AhcSGFKOavR6>_uy>FpZd|<5kA_>Gn7tzu1W98?|>6<`1XItLo4L~*EHLF1?KDg z4#;)vBSU@;7nY2+2l^{=3D2Ixx{U5{#DTImR4S`Gszr+&D#m!qNMvI_72MW+S!&$~Yk zlTJxHM_{#C7?n<9dOAHEm(K#g3kCfE@Hqxrc3$DA)kwJJj-$%z+<8$kz{ODmTww;# z^#`90e$BbzqBHl3RCqp_7~NT;Q(=3D}67l!S?FhhH z&b%)J#etJlMMm^f>!l-(!(puhVEWw9yLa|4=3D*Ci>S0u&KDJaT`dyZq5z@epo2ky8F z8)L-fZI0fhNwIV!YCTKQUP5(nm<1g>IaEoX<9Nwv7GP9!BwcVIi2MV4RdwF zJz~fKux(-P!Q1C(D;}XpI??`?SRp+iV1rQ#$i-5+)^Wx!xEBclZ?(9OyB_lBx&o}4 zS?Qq&Hv659uRP6jB&!BQ?vSQB`J^LFAqRp8^k<6hKLRzJ>E|KF3Tbn%>vB5}U=3D!Qo zek4ztL7E``Q%L2ctF|gfpGGRyK!{Q)D-@g^M>tWh>vBEd3E*ep@TaRe%Npdk>S<1u zR!GP5rDB!r83ffLSJp*?IeVhkdOCPuETFriZz*7sx~)G^?50Tf50>|#x-MiUPAt$n z=3Dr20;SCBsl3-k`GgYdQtYHtT|QRyH;$2tgjf3U|7D|;0LsNGfCu^V?e6YNW1azWQG zbyp_@i+7}?rt_R_T55HIdbR!Y2YU{r;r+oLT^D^}^00V6F;oFkrM4uikg^I)5B-ur z3lP?yz*-#Jh}uvr8jX+`u}uM6q#HyTNwBMS30V1)-mu-_*s1Z`eVeF~4t2|_-D!RS zxth!*yK2X|a;aPCm(YzVJtHuBr*QcOSD_lAHXn7qq(sV9XYO(COXaxTA<~iH*X(D? z5$j5yb$-}!K{TSLz;8T7O0T1mPJ@5zIZi4ki zvzcaoLNiEBlrdbzRJj`2o79UM+C?x8fKf#F)i6W=3D3t7(q_{ZuI`9KaMvbf{-5|CTT zN*3_L%!Xv(+eh&meE8X3{AFHzV$Se!hh{V3G!2^V(|2|)IDykcja%LB;oCe^RA@%j zF4et1A7?)J=3DFk}s!d~Ob@&Gi4f2lX%5G)%>8-G9iB47{H_2aPh;5xtV4^{j@9J_V} zcQ1gj0E*|^OxRjW8|cR-jdTi;G(9Ot8_7E|F|6y?4Yr<3osU%^N1Ku9+@PY<%H28I z8Tf|a%VS)NZ?a=3D}I^XsatjUhy8GM_QJuDRGxI}Gy>roB`8Hl04ANW0{XtOB|1q?fP zqSE<6ythcaV!!UQig*Z_1vwBeM;q_B8qGg81J>c&ehbq$t}f*tdlCi+KybSO5j+avp6VT!Qb#Ci2jU6zXrOzG>jt5^ z)^RnGf8<#brc4`#1MjN|{9}*db!+eRfG=3DDRod~$-_`=3DU#21}HCMeTDO6(FbkI7CMM zB- zTE$bDI2=3D0gpJeNE{RsHhqb)FU+xy$5InI3vMN^gRm5w?-)YyfaX5udK_m|{L>lQ5b)I3PA^5T z7wkCq0ZMT=3D{E6l0;dwi73T3+kNdaNdL>=3D`f%wSHau<5z(IhYOM zYBiRS zQv=3D_Hounz)gaI`b$6~YCaULB~u*1CX;N%fo^Qo>~bbOY5JwPb~*q_NG@-su|GJ`H^ zx&+f@I$fsGMTIPxO6SRS$b9N#%&s;qEd=3DI^kffHQpgMVMD`kR=3D`L(5Dh8W;PcY~y%GRBqiPm|SC(u}~jj@HyIS zaT-=3D=3DZCb!J_isRv{wPI@RvQ13P9ly&=3D0PJ9H?t}u%`kcW65i*Vd&;xq80}y z@!%q0@?Hec0$6Y*orM zmh&J8Vsi;vUiT~5w_xkx(ud)AmUcDlY*+pv1JSTeHJ!1}HV>zw0iT6>*3pG0`I8Hv zy|-FA`N>{vn6df7zIz;C>L}o0AE4Cx+1`yf7-AbWqL`cpiqw*JsPH5|Lx57iBx(#O zc@(ILfSfw)f_z6z%0V+0iCN|o*xb}ED(x^3xg180j-b^r(k1*btQxwcoJ8MN>igZ~ z>QEoYa~H8|Yy(cM73aZ(t07$Fgy+>^{85M2PdbJW(#W6EzTuSgM)%(XTR$8@5VxMi z0U3^^g5Q*mwZ4Xd7Wp&4>~(w`;QHPOP%rE`y%&cE$K=3Dx(MyP7oVUFK59Fpznfev)M zCtccetr*8GB*|yCj;94Z(i_28{G}7}c|wKrA=3DJC{2(pu;!bxcfRYl)t zdYaLw&o3y?*B2D#uPxW-=3Dda5bB8*~%XtxO|!b0of>D>H?h=3D?_73)U`<@Io02(h3TV zi@jir7YoTkBu<6tQ<+$1s@fV|mTs@9t14U9R9~%&j*BVF(5Dw>l@}SKBcl?^)}-m8 z%L+}^HLDx#hOJx53L9#gOjcV(U0GUXV@;V+mv6G!>rK%H)1((hr7X=3DZTCz+H%PSR* zIKQdc(oj(+EZl;Pq<|k`g=3DK=3DiK{Q#>BXK#F$_mjW80+hW)t35tdqWL-H#F7=3D)fF{$ zrYa!9|wuRf4dPj^k z-}a6$TNGF;8f?`jE15JdW;3)|XB3(%w$?Ok5t>YuqQwd;FWg4I?sE|l>Fd_z=3D+h7& zktr!rizyVw>M%~&bo1tQhsi0zWohhxV%4)LNm?$v!HUuj^2J?0s z++63KO|KDcLUM`_8;v=3DiP4wGLm3GlYrZHApYZ}D}1$T9w#by#J>go_k`DwXu`4&Wi zP1tOzw!q~khDJu%3{1hsP>CtxZ0o;(=3D8IjU4#Bskp+?NGG|;gQhuHUtO37&QSzF&g zdJF60VuXr@DnazQsnXIQS}k=3Df14PVJ)Payd>IsT|f}*j-%3Q{=3D1QCon!JuE0iy_K9 zqi!{*;P2yw`6)s~M3beaO1N*alG^&}nlW4XNEKCBYnV9K!%w7#Lb7c-SFD6jkrF=3D2 z*aWy`E9o_}qSD5^OZ5k66J=3DYra!r+JHCQdx$X*}Bbuc#$lN-}B>M~55?OW3A)rfar zM0r6c^B%JS%Ogsoo60Z=3DmJ)0X_LlZswsH*DXKOgjy1mg-(;$u#p;8AAvh+t`G6|DD zJ{^2;qnZEDz%g+r0#2f*RB0-;*6o6UNv6P0f?J&*IgyUu^~sxKYS<#0sRTwuZp-w3P*5TY*{beETOvfEaQoJw+$s|-%{eujtrgbo zWfbVSrh1EYJ4W(NjYiR0R%)_ZFjj1>XlyiDu@Xgi87%{)n{vxA*~FTL3K3ORVZ8X8 z@LX+a-2TmZ8ZCBfrOC(cX8cfc4V6{UuWa;5=3D`mPjC;^T_7kM*$vJqjgkB?KTG?po> z6mc;`Wv!`MaWtcVgGm&z>pgW#`+I5Un<}aZTaoP+{_?^XTWdtqD8fWtCKmaxp=3DE5Y z5i8A13x)T1ohDMEoe zN%W?PLSe(!21|2;kZpmX(ycXBTTDWRiS!rNWUy{EGKTtro5@7YgO4_=3DSmOs2w~peD z>$4%rXpLK+)>u=3DyKANr=3DW<(|q5gD3YQ$-ana$9w^^3DpR&AObL&E@*FPi+N7XEfe3FvPl`phgUhICs+d8rpOr;mAf_ z9;}O?g{OQAYHN9B%{Eh2n#eYXBCDN6|3LU0i`4oW8HH=3D>UX zW~HUdYk=3D__ASc*1V91DucXf7JepDPQt))Z!w1w(tt| z&xztgLU?%9`zHmt9uZHdsDp>+GUnsRjib>wy$Q7Fp_WzJdc0tJU5pdI@_6 zGvWI&R%^H9VaYQ{s7IE^U&UcHGp z7}cYXgh$7*qGB#s>^=3D#V88V2Cmdr7VU{q%%8%>-@+dRqYL}1P8T*GyaE66Okevm9_ zsl=3DXoyqVWDR9fmA(Z13yya=3DaO=3Dwmq}&JxgNZ5N7aELaz52pvuS>Is-kdYsXaJ0{u` z*1$4PM^VuUN)-U?*r3jLw#H%C&d@Wl^=3D0JP#TRus@P{2IBWw`IR*hCmeT@xd#|Lg? zRJ1N8Hf}|HLR$Lj41MM;>iZfCiaTmL$~=3Dx!%GhhJtx{P?BWStDQl#^)K;MuKBNE}; zY>$x{U7v5Vj$wI1>dB*uTZUMFgE}JimfFe*Ncu zjK6w)0pH)u!7(zv4G0<=3DzTd<5$N17;=3DzfInWA|~~Q~1tW!f}i6U5xKCe4Frn7+?P& zj{EJs2sLAd@rP%QeM@-utIXg3;rS)E72mtoAAEfF`hR$q>pSD3v)<*6Rhz-}|F6$~ z>7HD4?Dd1$yKjFqD6wbxJCC<+kNk6{?SWriK6k$E(x>ll`SK?(X)f%^es-kpj~mY} zT|VVx|88#D@7F%EY2~tm@6B_Dul$c+WxXE1_Q{a5gLf?o`XJGDHAJ`a+iRZpYd*O0 z<#q83v!8u(=3Dk}58wujmb3%4&HJiPws_PiJG&v@z7_s{QK{sWca=3DNmVb^?sP%+465M z+_yihw|? z`*`e&vG2zIJ$6pqeR0Kc<#FGQ`$gOz;||AhD`u`(ykhx^gcbS~;)?Anezc-*#f25? z<9p(d#m`MFO>9W~LE_=3DWw-YZU1|+GHW+f#iZBN>jv?uAAr0%5tq)(IXPu`ULP;yi9 z)5$+eem(hvWdD>oDfg$Oq~xX4rtD1FoAR@i{V9DZr&9(}zDx;OdH2f1mBy7lD`%{l zzbbiE?y8Netg9TWo?7+%sspR~SG~8&y~?u+3P90)xD`iwBBw>&6?Jb^a#Uv2hNvx3 zk3~Hb)fx3()TO8|qGF>nqBll=3DH~PoXzmD#R{#*1=3D^fXTPz^TdU$n6siV zzC3 zPk1xo{e&+Qf)W!F(-M0Uk0t(3(#uJa$%*(A4=3Dxh_$pdbW#^935aVTHhiI~$d=3DVLC$ NT#2E7r*z}b{{lGaaHjwO literal 0 HcmV?d00001 diff --git a/edk2basetools/tests/GenCrc32/decode/S3Resume2Pei_crc32 b/edk2b= asetools/tests/GenCrc32/decode/S3Resume2Pei_crc32 new file mode 100644 index 0000000000000000000000000000000000000000..d18f172842a5579fe15b9ac8c9b= b90ba06b96644 GIT binary patch literal 18276 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 RoR7H}b0voUozjgz{|nl9a@7C; literal 0 HcmV?d00001 diff --git a/edk2basetools/tests/GenCrc32/decode/demo b/edk2basetools/tests= /GenCrc32/decode/demo new file mode 100644 index 0000000..9f9601c --- /dev/null +++ b/edk2basetools/tests/GenCrc32/decode/demo @@ -0,0 +1 @@ +This is a test file for the GenCrc32 python tool~ \ No newline at end of file diff --git a/edk2basetools/tests/GenCrc32/decode/demo_crc b/edk2basetools/t= ests/GenCrc32/decode/demo_crc new file mode 100644 index 0000000..546f91f --- /dev/null +++ b/edk2basetools/tests/GenCrc32/decode/demo_crc @@ -0,0 +1 @@ +U@"=EF=BF=BDThis is a test file for the GenCrc32 python tool~ \ No newline at end of file diff --git a/edk2basetools/tests/GenCrc32/encode/PcdPeim.efi b/edk2basetool= s/tests/GenCrc32/encode/PcdPeim.efi new file mode 100644 index 0000000000000000000000000000000000000000..db03070a222507e0d035754fb46= 973ac92b32931 GIT binary patch literal 18912 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

?Ub5;NY7Z0S5YO)Je8p0 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 NT#2E7r*z}b{{lGaaHjwO literal 0 HcmV?d00001 diff --git a/edk2basetools/tests/GenCrc32/encode/S3Resume2Pei_crc32 b/edk2b= asetools/tests/GenCrc32/encode/S3Resume2Pei_crc32 new file mode 100644 index 0000000000000000000000000000000000000000..d18f172842a5579fe15b9ac8c9b= b90ba06b96644 GIT binary patch literal 18276 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 RoR7H}b0voUozjgz{|nl9a@7C; literal 0 HcmV?d00001 diff --git a/edk2basetools/tests/GenCrc32/encode/demo.bin b/edk2basetools/t= ests/GenCrc32/encode/demo.bin new file mode 100644 index 0000000..9f9601c --- /dev/null +++ b/edk2basetools/tests/GenCrc32/encode/demo.bin @@ -0,0 +1 @@ +This is a test file for the GenCrc32 python tool~ \ No newline at end of file diff --git a/edk2basetools/tests/GenCrc32/encode/demo_crc b/edk2basetools/t= ests/GenCrc32/encode/demo_crc new file mode 100644 index 0000000..546f91f --- /dev/null +++ b/edk2basetools/tests/GenCrc32/encode/demo_crc @@ -0,0 +1 @@ +U@"=EF=BF=BDThis is a test file for the GenCrc32 python tool~ \ No newline at end of file diff --git a/edk2basetools/tests/GenCrc32/test_gencrc32.py b/edk2basetools/= tests/GenCrc32/test_gencrc32.py new file mode 100644 index 0000000..4d8e3b8 --- /dev/null +++ b/edk2basetools/tests/GenCrc32/test_gencrc32.py @@ -0,0 +1,124 @@ +#@file +#Calculate Crc32 value and Verify Crc32 value for input data. +# +#Copyright (c) 2007 - 2018, Intel Corporation. All rights reserved.
+#SPDX-License-Identifier: BSD-2-Clause-Patent +# +## + +#Import Modules +import shutil +import unittest +import tempfile +import os +import GenCrc32.GenCrc32 as Gen +import filecmp +import struct as st + + + +class TestGenCrc32(unittest.TestCase): + def setUp(self): + self.tmpdir=3Dtempfile.mkdtemp() + self.binary_file=3Dos.path.join(self.tmpdir,"Binary.bin") + self.create_inputfile() + + + def tearDown(self): + if os.path.exists(self.tmpdir): + shutil.rmtree(self.tmpdir) + + + def create_inputfile(self): + with open(self.binary_file,"wb") as fout: + for i in range(512): + fout.write(st.pack("