pax_global_header00006660000000000000000000000064145723217130014517gustar00rootroot0000000000000052 comment=ec1eab1717c65ea36ca7160c96fe0e10e071fb66 python-uefivars-1.2/000077500000000000000000000000001457232171300145245ustar00rootroot00000000000000python-uefivars-1.2/.github/000077500000000000000000000000001457232171300160645ustar00rootroot00000000000000python-uefivars-1.2/.github/workflows/000077500000000000000000000000001457232171300201215ustar00rootroot00000000000000python-uefivars-1.2/.github/workflows/release.yml000066400000000000000000000007221457232171300222650ustar00rootroot00000000000000on: push: tags: - 'v*' jobs: pypi-publish: name: upload release to PyPI runs-on: ubuntu-latest environment: release permissions: id-token: write steps: - name: Checkout uses: actions/checkout@v3 with: fetch-depth: 0 - run: python3 -m pip install --upgrade build && python3 -m build - name: Publish package distributions to PyPI uses: pypa/gh-action-pypi-publish@release/v1 python-uefivars-1.2/.github/workflows/uefivars.yml000066400000000000000000000016321457232171300224720ustar00rootroot00000000000000# This workflow will install Python dependencies, run tests and lint with a single version of Python # For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-python name: Uefivars python application on: [push, pull_request] permissions: contents: read jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Set up Python 3.10 uses: actions/setup-python@v3 with: python-version: "3.10" - name: Install dependencies run: | python -m pip install --upgrade pip pip install flake8 pytest if [ -f requirements.txt ]; then pip install -r requirements.txt; fi - name: Lint with flake8 run: | # stop the build if there are any new flake8 issues flake8 . --count --show-source --statistics - name: Test with pytest run: | pytest python-uefivars-1.2/.gitignore000066400000000000000000000002321457232171300165110ustar00rootroot00000000000000*~ *# *.swp *.DS_Store __pycache__/ *.py[cod] *$py.class *.egg-info/ /.coverage /.coverage.* /.cache /.pytest_cache /.mypy_cache /doc/_apidoc/ /build python-uefivars-1.2/LICENSE000066400000000000000000000021201457232171300155240ustar00rootroot00000000000000MIT License Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. python-uefivars-1.2/README.md000066400000000000000000000061351457232171300160100ustar00rootroot00000000000000# uefivars This is a set of Python modules and a helper application "uefivars" to introspect and modify UEFI variable stores. ## Why do I need this? UEFI variable stores are typically opaque to users. You access them using UEFI runtime services as function calls. However, the data is then stored in a binary data format. When running virtual machines or extracting UEFI variable stores directly from Flash storage, you can receive and write that binary data and thus modify variables directly. This is useful in situations where you have incorrect UEFI variable data and need to modify variables without runtime service access. It can also be useful to analyze and introspect the variable store and check what data is stored inside. ## How do I use it? You can convert a variable store into human readable format by setting the output type to json. This will show you all variables that are currently present in the variable store. ```console $ uefivars -i edk2 -o json -I OVMF_VARS.secboot.fd [ { "name": "SecureBootEnable", "data": "AQ==", "guid": "f0a30bc7-af08-4556-99c4-001009c93a44", "attr": 3 }, [...] ] ``` In addition, you can convert from the human readable json representation back into edk2 format: ```console $ uefivars -i json -o edk2 -I vars.json -O OVMF_VARS.fd ``` Given any variable store (including an empty one) the `--PK` , `--KEK` , `--db` and `--dbx` switches can be used to (over-)write the four SecureBoot variables from input files. (Usually .esl files). For a general rundown of the key generation process the [ArchLinux](https://wiki.archlinux.org/title/Unified_Extensible_Firmware_Interface/Secure_Boot#Creating_keys) wiki has proven itself as a first point of guidance. You can also use the tool to convert between the AWS EC2 uefi-data format and edk2 to import and export UEFI variable stores between an EC2 instance and QEMU: ```console $ uefivars -i edk2 -o aws -I OVMF_VARS.fd -O uefi-data.aws ``` ```console $ uefivars -i aws -o edk2 -I uefi-data.aws -O OVMF_VARS.fd ``` ## How can I take a snapshot of my current UEFI variable store? If you are running on a live UEFI system, the variable store that gets exposed to the Operating System is incomplete: It does not contain UEFI variables that are only present at boot time and it does not get access to variable authentication data. If you don't need either - for example because you're only interested in saving the boot order - you can use the efivarfs backend to convert the local variable store into a file: ```console $ uefivars -i efivarfs -o aws -I /sys/firmware/efi/efivars -O uefi-data.aws ``` ## What formats are supported? This package currently supports the following formats: **aws** - File format used in [AWS EC2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/uefi-secure-boot.html) \ **edk2** - File format used for flash storage in [OVMF](https://github.com/tianocore/edk2/blob/918288ab5a7c3abe9c58d576ccc0ae32e2c7dea0/OvmfPkg/README#L123) \ **efivarfs** - Ingests all non-authenticated variables from an [efivarfs](https://docs.kernel.org/filesystems/efivarfs.html) mount point (read only) python-uefivars-1.2/pyuefivars/000077500000000000000000000000001457232171300167215ustar00rootroot00000000000000python-uefivars-1.2/pyuefivars/__init__.py000066400000000000000000000123201457232171300210300ustar00rootroot00000000000000#!/usr/bin/env python3 # # Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. # SPDX-License-Identifier: MIT import argparse import sys from .varstore import UEFIVar, UEFIVarStore from .aws import AWSUEFIVarStore from .edk2 import EDK2UEFIVarStore from .json import JSONUEFIVarStore from .efivarfs import EFIVARFSUEFIVarStore MIN_PYTHON = (3, 0) if sys.version_info < MIN_PYTHON: sys.exit("Python %s.%s or later is required.\n" % MIN_PYTHON) globalEfiGUID = bytes.fromhex("61 df e4 8b ca 93 d2 11 aa 0d 00 e0 98 03 2b 8c") secureDatabaseGUID = bytes.fromhex("cb b2 19 d7 3a 3d 96 45 a3 bc da d0 0e 67 65 6f") def Str2UEFIVarStore(s): formats = { "aws": AWSUEFIVarStore, "edk2": EDK2UEFIVarStore, "json": JSONUEFIVarStore, "efivarfs": EFIVARFSUEFIVarStore, "none": UEFIVarStore, } if s in formats: return formats[s] fmt = '", "'.join(formats) raise SystemExit(f'Unknown Input type "{s}", choose from ("{fmt}")') def ReadVar(arg, name, guid): EFI_VARIABLE_NON_VOLATILE = 0x00000001 EFI_VARIABLE_BOOTSERVICE_ACCESS = 0x00000002 EFI_VARIABLE_RUNTIME_ACCESS = 0x00000004 EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS = 0x00000020 attr = EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS | \ EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS varfile = open(arg, "rb") vardata = varfile.read() if (len(vardata) == 0): print('Read empty variable "{}". Aborting'.format(name), file=sys.stderr) sys.exit() return UEFIVar(name, vardata, guid, attr) def _parser(): parser = argparse.ArgumentParser() parser.add_argument("-i", "--input", help='Input type ("aws", "json", "edk2", "efivarfs", "none")', required=True) parser.add_argument("-o", "--output", help='Output type ("aws", "json", "edk2[,filesize=512]")', required=True) parser.add_argument("-I", "--inputfile", help='Input file (stdin if not given)') parser.add_argument("-O", "--outputfile", help='Output file (stdout if not given)') parser.add_argument("-P", "--PK", help='Insert PK from given file (usually PK.esl)') parser.add_argument("-K", "--KEK", help='Insert KEK from given file (usually KEK.esl)') parser.add_argument("-b", "--db", help='Insert db from given file (usually db.esl)') parser.add_argument("-x", "--dbx", help='Insert dbx from given file (usually dbx.esl)') args = parser.parse_args() return args def main(): pk_found = -1 kek_found = -1 db_found = -1 dbx_found = -1 args = _parser() inclass = Str2UEFIVarStore(args.input) args.output = [s.strip() for s in args.output.split(",")] output_options = args.output[1:] args.output = args.output[0] outclass = Str2UEFIVarStore(args.output) if args.input == 'none': indata = '' elif args.input == 'efivarfs': indata = args.inputfile else: if args.inputfile: infile = open(args.inputfile, "rb") else: infile = sys.stdin.buffer print("Reading uefivars from stdin", file=sys.stderr) indata = infile.read() varstore = inclass(indata) print("Read {} variables".format(varstore.vars.__len__()), file=sys.stderr) for i, s in enumerate(varstore.vars): var = varstore.vars[i] if (var.name == 'PK' and var.guid == globalEfiGUID): pk_found = i if (var.name == 'KEK' and var.guid == globalEfiGUID): kek_found = i if (var.name == 'db' and var.guid == secureDatabaseGUID): db_found = i if (var.name == 'dbx' and var.guid == secureDatabaseGUID): dbx_found = i if (args.PK): var = ReadVar(args.PK, 'PK', globalEfiGUID) if (pk_found != -1): print('Replacing PK', file=sys.stderr) varstore.vars[pk_found] = var else: varstore.vars.append(var) elif (pk_found == -1): print('No PK (PlatformKey) was set; SecureBoot will not be enabled without a PK', file=sys.stderr) if (args.KEK): var = ReadVar(args.KEK, 'KEK', globalEfiGUID) if (kek_found != -1): print('Replacing KEK', file=sys.stderr) varstore.vars[kek_found] = var else: varstore.vars.append(var) if (args.db): var = ReadVar(args.db, 'db', secureDatabaseGUID) if (db_found != -1): print('Replacing db', file=sys.stderr) varstore.vars[db_found] = var else: varstore.vars.append(var) if (args.dbx): var = ReadVar(args.dbx, 'dbx', secureDatabaseGUID) if (dbx_found != -1): print('Replacing dbx', file=sys.stderr) varstore.vars[dbx_found] = var else: varstore.vars.append(var) # convert the format by changing the output class varstore.__class__ = outclass if output_options: varstore.set_output_options(output_options) if args.outputfile: outfile = open(args.outputfile, "wb") else: outfile = sys.stdout.buffer outfile.write(bytes(varstore)) print("Writen {} variables".format(varstore.vars.__len__()), file=sys.stderr) if __name__ == '__main__': main() python-uefivars-1.2/pyuefivars/aws.py000066400000000000000000000074451457232171300200770ustar00rootroot00000000000000#!/usr/bin/env python3 # # Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. # SPDX-License-Identifier: MIT import os import zlib import base64 import tempfile import google_crc32c as crc32c from .varstore import UEFIVar, UEFIVarStore from .aws_v0 import UEFIVarStoreV0 from .aws_file import AWSVarStoreFile class AWSUEFIVarStore(UEFIVarStore): EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS = 0x20 AMZNUEFI = 0x494645554e5a4d41 def __init__(self, b64data: bytes): super().__init__() # Convert base64 to binary file = tempfile.SpooledTemporaryFile() file.write(base64.b64decode(b64data)) file.seek(0, os.SEEK_SET) # Then wrap the binary file with our reader and start parsing file = AWSVarStoreFile(file) magic = file.read64() if magic != self.AMZNUEFI: raise Exception("Invalid magic. Expected AMZNUEFI. Found 0x%x" % magic) crc32 = file.read32() # Validate crc32c location = file.file.tell() comp_crc32 = crc32c.value(file.readall()) if (comp_crc32 != crc32): raise Exception("Invalid checksum, please check you copied all data") file.file.seek(location, os.SEEK_SET) version = file.read32() if version != 0: raise Exception("Invalid version. Expected 0. Found 0x%x" % version) # Grab the zlib data that's embedded and parse it dec = zlib.decompressobj(0, zdict=UEFIVarStoreV0.dict) raw_data = dec.decompress(file.readall()) raw_file = tempfile.SpooledTemporaryFile() raw_file.write(raw_data) raw_file.seek(0, os.SEEK_SET) raw = AWSVarStoreFile(raw_file) nr_entries = raw.read64() for i in range(nr_entries): name = raw.readstr() data = raw.readdata() guid = raw.readguid() attr = raw.read32() if attr & self.EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS: timestamp = raw.readtimestamp() if timestamp == self.EMPTY_TIMESTAMP: timestamp = None digest = raw.readdata() if digest == self.EMPTY_DIGEST: digest = None self.vars.append(UEFIVar(name, data, guid, attr, timestamp, digest)) else: self.vars.append(UEFIVar(name, data, guid, attr)) def __bytes__(self) -> bytes: # Assemble the zlib compressed wrapped file raw = AWSVarStoreFile(tempfile.SpooledTemporaryFile()) raw.write64(len(self.vars)) for var in self.vars: raw.writestr(var.name) raw.writedata(var.data) raw.writeguid(var.guid) raw.write32(var.attr) if var.attr & self.EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS: timestamp = var.timestamp if timestamp is None: timestamp = self.EMPTY_TIMESTAMP digest = var.digest if digest is None: digest = self.EMPTY_DIGEST raw.writetimestamp(timestamp) raw.writedata(digest) raw.file.seek(0, os.SEEK_SET) enc = zlib.compressobj(9, zdict=UEFIVarStoreV0.dict) zdata = enc.compress(raw.file.read()) + enc.flush() # Create a full file with header + zdata f = tempfile.SpooledTemporaryFile() f = AWSVarStoreFile(f) f.write64(self.AMZNUEFI) f.write32(crc32c.value(int(0).to_bytes(4, byteorder='little') + zdata)) f.write32(0) # Version 0 f.write(zdata) f.file.seek(0, os.SEEK_SET) # Then write it out as base64 data return base64.b64encode(f.file.read()) def __str__(self) -> str: return self.__bytes__().decode('utf-8') python-uefivars-1.2/pyuefivars/aws_file.py000066400000000000000000000035021457232171300210640ustar00rootroot00000000000000#!/usr/bin/env python3 # # Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. # SPDX-License-Identifier: MIT class AWSVarStoreFile(object): def __init__(self, file): self.file = file def read(self, size): value = self.file.read(size) if len(value) != size: raise Exception("Unexpected end of %s at 0x%x" % (self.file, self.file.tell())) return value def read64(self): return int.from_bytes(self.read(8), byteorder='little', signed=False) def read32(self): return int.from_bytes(self.read(4), byteorder='little', signed=False) def read16(self): return int.from_bytes(self.read(2), byteorder='little', signed=False) def read8(self): return int.from_bytes(self.read(1), byteorder='little', signed=False) def readdata(self): size = self.read64() return self.read(size) def readstr(self): return self.readdata().decode('utf-8') def readguid(self): return self.read(16) def readtimestamp(self): return self.read(16) def readall(self): return self.file.read() def write(self, data): self.file.write(data) def write64(self, data): self.write(data.to_bytes(8, byteorder='little')) def write32(self, data): self.write(data.to_bytes(4, byteorder='little')) def write16(self, data): self.write(data.to_bytes(2, byteorder='little')) def write8(self, data): self.write(data.to_bytes(1, byteorder='little')) def writedata(self, data): self.write64(len(data)) self.write(data) def writestr(self, data): return self.writedata(data.encode('utf-8')) def writeguid(self, data): return self.write(data) def writetimestamp(self, data): return self.write(data) python-uefivars-1.2/pyuefivars/aws_v0.py000066400000000000000000002244261457232171300205040ustar00rootroot00000000000000#!/usr/bin/env python3 # # Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. # SPDX-License-Identifier: MIT class UEFIVarStoreV0(object): dict = bytes([ 0x37, 0xa4, 0x30, 0xec, 0x12, 0x44, 0xfc, 0x0a, 0x1d, 0x10, 0x28, 0x9d, 0x00, 0x00, 0x87, 0xae, 0xe3, 0x9e, 0xd0, 0x73, 0x2d, 0x2b, 0x4b, 0xca, 0x1e, 0xac, 0x1c, 0xfb, 0x79, 0xc8, 0x7c, 0x05, 0xfb, 0xf4, 0xf4, 0xf5, 0xf7, 0x01, 0x43, 0x05, 0x28, 0x00, 0x06, 0x03, 0x84, 0xe2, 0xd1, 0x60, 0x28, 0x4b, 0x06, 0x77, 0x00, 0x04, 0x80, 0xc0, 0x04, 0x0a, 0x1c, 0x0e, 0x06, 0x10, 0x08, 0x0a, 0x09, 0x05, 0x07, 0x34, 0x07, 0x04, 0x0a, 0x0f, 0x03, 0x07, 0x09, 0x0c, 0x07, 0x04, 0x05, 0x06, 0x08, 0x85, 0xc1, 0x60, 0x61, 0x68, 0x48, 0x20, 0x09, 0x07, 0x03, 0x71, 0xa1, 0x3c, 0xd5, 0x87, 0x98, 0x01, 0xd8, 0x00, 0x24, 0x51, 0x0f, 0x22, 0x11, 0x4c, 0x51, 0x0c, 0x02, 0x01, 0x00, 0x00, 0x82, 0x00, 0x21, 0xc8, 0xb8, 0x60, 0x68, 0x68, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x02, 0x1f, 0x03, 0x12, 0x0a, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0xb0, 0x00, 0x00, 0x00, 0x61, 0xdf, 0xe4, 0x8b, 0xca, 0x93, 0xd2, 0x11, 0xaa, 0x0d, 0x00, 0xe0, 0x98, 0x03, 0x2b, 0x8c, 0x43, 0x00, 0x6f, 0x00, 0x6e, 0x00, 0x4f, 0x00, 0x75, 0x00, 0x74, 0x00, 0x00, 0x00, 0x02, 0x01, 0x0c, 0x00, 0xd0, 0x41, 0x03, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x06, 0x00, 0x00, 0x1f, 0x02, 0x01, 0x0c, 0x00, 0xd0, 0x41, 0x01, 0x05, 0x00, 0x01, 0x03, 0x0d, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x87, 0x00, 0x00, 0x00, 0x61, 0xdf, 0xe4, 0x8b, 0xca, 0x93, 0xd2, 0x11, 0xaa, 0x0d, 0x00, 0xe0, 0x98, 0x03, 0x2b, 0x8c, 0x43, 0x00, 0x6f, 0x00, 0x6e, 0x00, 0x4f, 0x00, 0x75, 0x00, 0x74, 0x00, 0x00, 0x00, 0x02, 0x01, 0x0c, 0x00, 0xd0, 0x41, 0x03, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x06, 0x00, 0x00, 0x1f, 0x02, 0x01, 0x0c, 0x00, 0xd0, 0x41, 0x01, 0x05, 0x00, 0x0f, 0x01, 0x00, 0x00, 0x61, 0xdf, 0xe4, 0x8b, 0xca, 0x93, 0xd2, 0x11, 0xaa, 0x0d, 0x00, 0xe0, 0x98, 0x03, 0x2b, 0x8c, 0x43, 0x00, 0x6f, 0x00, 0x6e, 0x00, 0x4f, 0x00, 0x75, 0x00, 0x74, 0x00, 0x00, 0x00, 0x02, 0x01, 0x0c, 0x00, 0xd0, 0x41, 0x03, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x06, 0x00, 0x00, 0x1f, 0x02, 0x01, 0x0c, 0x00, 0xd0, 0x41, 0x01, 0x05, 0x00, 0xef, 0x00, 0x00, 0x00, 0x61, 0xdf, 0xe4, 0x8b, 0xca, 0x93, 0xd2, 0x11, 0xaa, 0x0d, 0x00, 0xe0, 0x98, 0x03, 0x2b, 0x8c, 0x43, 0x00, 0x6f, 0x00, 0x6e, 0x00, 0x4f, 0x00, 0x75, 0x00, 0x74, 0x00, 0x00, 0x00, 0x02, 0x01, 0x0c, 0x00, 0xd0, 0x41, 0x03, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x06, 0x00, 0x00, 0x1f, 0x02, 0x01, 0x0c, 0x00, 0xd0, 0x41, 0x01, 0x05, 0x00, 0x2b, 0x29, 0x58, 0x9e, 0x68, 0x7c, 0x7d, 0x49, 0xa0, 0xce, 0x65, 0x00, 0xfd, 0x9f, 0x1b, 0x95, 0x2c, 0xaf, 0x2c, 0x64, 0xfe, 0xff, 0xff, 0xff, 0xe0, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x2e, 0x30, 0x2c, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x25, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20, 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x73, 0x20, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x50, 0x43, 0x41, 0x20, 0x32, 0x30, 0x31, 0x31, 0x30, 0x82, 0x01, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x0a, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x61, 0xdf, 0xe4, 0x8b, 0xca, 0x93, 0xd2, 0x11, 0xaa, 0x0d, 0x00, 0xe0, 0x98, 0x03, 0x2b, 0x8c, 0x4c, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x00, 0x00, 0x65, 0x6e, 0x67, 0x00, 0xff, 0xff, 0xaa, 0x55, 0x3f, 0x00, 0x07, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x61, 0xdf, 0xe4, 0x8b, 0xca, 0x93, 0xd2, 0x11, 0xaa, 0x0d, 0x00, 0xe0, 0x98, 0x03, 0x2b, 0x8c, 0x50, 0x00, 0x6c, 0x00, 0x61, 0x00, 0x74, 0x00, 0x66, 0x00, 0x6f, 0x00, 0x72, 0x00, 0x6d, 0x00, 0x4c, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x00, 0x00, 0x65, 0x6e, 0x00, 0xff, 0xff, 0xff, 0xaa, 0x55, 0x3f, 0x00, 0x07, 0x00, 0x28, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x16, 0xd6, 0x47, 0x4b, 0xd6, 0xa8, 0x52, 0x45, 0x9d, 0x44, 0xcc, 0xad, 0x2e, 0x0f, 0x4c, 0xf9, 0x49, 0x00, 0x6e, 0x00, 0x69, 0x00, 0x74, 0x00, 0x69, 0x00, 0x61, 0x00, 0x6c, 0x00, 0x41, 0x00, 0x74, 0x00, 0x74, 0x00, 0x65, 0x00, 0x6d, 0x00, 0x70, 0x00, 0x74, 0x00, 0x4f, 0x00, 0x72, 0x00, 0x64, 0x00, 0x65, 0x00, 0x72, 0x00, 0x28, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x16, 0xd6, 0x47, 0x4b, 0xd6, 0xa8, 0x52, 0x45, 0x9d, 0x44, 0xcc, 0xad, 0x2e, 0x0f, 0x4c, 0xf9, 0x49, 0x00, 0x6e, 0x00, 0x69, 0x00, 0x74, 0x00, 0x69, 0x00, 0x61, 0x00, 0x6c, 0x00, 0x41, 0x00, 0x74, 0x00, 0x74, 0x00, 0x65, 0x00, 0x6d, 0x00, 0x70, 0x00, 0x74, 0x00, 0x4f, 0x00, 0x72, 0x00, 0x64, 0x00, 0x65, 0x00, 0x72, 0x00, 0x28, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x16, 0xd6, 0x47, 0x4b, 0xd6, 0xa8, 0x52, 0x45, 0x9d, 0x44, 0xcc, 0xad, 0x2e, 0x0f, 0x4c, 0xf9, 0x49, 0x00, 0x6e, 0x00, 0x69, 0x00, 0x74, 0x00, 0x69, 0x00, 0x61, 0x00, 0x6c, 0x00, 0x41, 0x00, 0x74, 0x00, 0x74, 0x00, 0x65, 0x00, 0x6d, 0x00, 0x70, 0x00, 0x74, 0x00, 0x4f, 0x00, 0x72, 0x00, 0x64, 0x00, 0x65, 0x00, 0x72, 0x00, 0x28, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x16, 0xd6, 0x47, 0x4b, 0xd6, 0xa8, 0x52, 0x45, 0x9d, 0x44, 0xcc, 0xad, 0x2e, 0x0f, 0x4c, 0xf9, 0x49, 0x00, 0x6e, 0x00, 0x69, 0x00, 0x74, 0x00, 0x69, 0x00, 0x61, 0x00, 0x6c, 0x00, 0x41, 0x00, 0x74, 0x00, 0x74, 0x00, 0x65, 0x00, 0x6d, 0x00, 0x70, 0x00, 0x74, 0x00, 0x4f, 0x00, 0x72, 0x00, 0x64, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x00, 0x21, 0xe5, 0x7f, 0x93, 0xae, 0x95, 0x1a, 0x4d, 0x89, 0x29, 0x48, 0xbc, 0xd9, 0x0a, 0xd3, 0x1a, 0x35, 0x00, 0x32, 0x00, 0x35, 0x00, 0x34, 0x00, 0x30, 0x00, 0x30, 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x34, 0x00, 0x35, 0x00, 0x36, 0x00, 0xe8, 0x7f, 0xb3, 0x04, 0xae, 0xf6, 0x0b, 0x48, 0xbd, 0xd5, 0x37, 0xd9, 0x8c, 0x5e, 0x89, 0xaa, 0x56, 0x00, 0x61, 0x00, 0x72, 0x00, 0x45, 0x00, 0x72, 0x00, 0x72, 0x00, 0x6f, 0x00, 0x72, 0x00, 0x46, 0x00, 0x6c, 0x00, 0x61, 0x00, 0x67, 0x00, 0x00, 0x00, 0xff, 0xff, 0xaa, 0x55, 0x3c, 0x00, 0x07, 0x00, 0x88, 0x9c, 0xd0, 0xf7, 0xb6, 0xc4, 0x7a, 0xd5, 0x00, 0x6c, 0x00, 0x69, 0x00, 0x65, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x6e, 0xe5, 0xbe, 0xd9, 0xdc, 0x75, 0xd9, 0x49, 0xb4, 0xd7, 0xb5, 0x34, 0x21, 0x0f, 0x63, 0x7a, 0x63, 0x00, 0x65, 0x00, 0x72, 0x00, 0x74, 0x00, 0x64, 0x00, 0x62, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0xff, 0xff, 0xaa, 0x55, 0x3c, 0x00, 0x23, 0x00, 0x00, 0x04, 0x01, 0x2a, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0xd8, 0xbc, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6f, 0xbd, 0x26, 0x17, 0x0a, 0xae, 0xeb, 0x11, 0xaf, 0xcc, 0xb2, 0x6f, 0x04, 0x02, 0x45, 0xc6, 0x02, 0x28, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x16, 0xd6, 0x47, 0x4b, 0xd6, 0xa8, 0x52, 0x45, 0x9d, 0x44, 0xcc, 0xad, 0x2e, 0x0f, 0x4c, 0xf9, 0x49, 0x00, 0x6e, 0x00, 0x69, 0x00, 0x74, 0x00, 0x69, 0x00, 0x61, 0x00, 0x6c, 0x00, 0x41, 0x00, 0x74, 0x00, 0x74, 0x00, 0x65, 0x00, 0x6d, 0x00, 0x70, 0x00, 0x74, 0x00, 0x4f, 0x00, 0x72, 0x00, 0x64, 0x00, 0x65, 0x00, 0x72, 0x00, 0x12, 0x34, 0x56, 0xff, 0xff, 0xaa, 0x55, 0x50, 0x00, 0x58, 0x00, 0x45, 0x00, 0x76, 0x00, 0x43, 0x00, 0x75, 0x00, 0x72, 0x00, 0x72, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x00, 0x57, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x64, 0x00, 0x6f, 0x00, 0x77, 0x00, 0x73, 0x00, 0x11, 0xd4, 0x9a, 0x46, 0x00, 0x90, 0x27, 0x3f, 0xc1, 0x4d, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00, 0x61, 0xdf, 0xe4, 0x8b, 0xca, 0x93, 0xd2, 0x11, 0xaa, 0x0d, 0x00, 0xe0, 0x98, 0x03, 0x2b, 0x8c, 0x45, 0x00, 0x72, 0x00, 0x72, 0x00, 0x4f, 0x00, 0x75, 0x00, 0x74, 0x00, 0x00, 0x00, 0x02, 0x01, 0x0c, 0x00, 0xd0, 0x41, 0x03, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x06, 0x00, 0x00, 0x1f, 0x02, 0x01, 0x0c, 0x00, 0xd0, 0x41, 0x01, 0x05, 0x00, 0x02, 0xbd, 0x9a, 0xfa, 0x77, 0x59, 0x03, 0x32, 0x4d, 0xbd, 0x60, 0x28, 0xf4, 0xe7, 0x8f, 0x78, 0x4b, 0x06, 0x0b, 0x2b, 0x06, 0x01, 0x04, 0x01, 0x82, 0x37, 0x3d, 0x03, 0x0e, 0x00, 0x00, 0x00, 0x67, 0x00, 0x00, 0x00, 0x61, 0xdf, 0xe4, 0x8b, 0xca, 0x93, 0xd2, 0x11, 0xaa, 0x0d, 0x00, 0xe0, 0x98, 0x03, 0x2b, 0x8c, 0x43, 0x00, 0x6f, 0x00, 0x6e, 0x00, 0x4f, 0x00, 0x75, 0x00, 0x74, 0x00, 0x00, 0x00, 0x02, 0x01, 0x0c, 0x00, 0xd0, 0x41, 0x03, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x06, 0x00, 0x00, 0x1f, 0x02, 0x01, 0x0c, 0x00, 0xd0, 0x41, 0x01, 0x05, 0x00, 0x11, 0xd4, 0x9a, 0x38, 0x00, 0x90, 0x27, 0x3f, 0xc1, 0x4d, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xbd, 0x9a, 0xfa, 0x77, 0x59, 0x03, 0x32, 0x4d, 0xbd, 0x60, 0x28, 0xf4, 0xe7, 0x8f, 0x78, 0x4b, 0x00, 0x50, 0x00, 0x6f, 0x00, 0x6c, 0x00, 0x69, 0x00, 0x63, 0x00, 0x79, 0x00, 0x2d, 0x88, 0x11, 0xd3, 0x9a, 0x16, 0x00, 0x90, 0x27, 0x3f, 0xc1, 0x4d, 0x00, 0xaf, 0xaf, 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x6f, 0x22, 0xec, 0xea, 0xa3, 0xc9, 0x7a, 0x47, 0xa8, 0x26, 0xdd, 0xc7, 0x16, 0xcd, 0xc0, 0xe3, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x6f, 0x22, 0xec, 0xea, 0xa3, 0xc9, 0x7a, 0x47, 0xa8, 0x26, 0xdd, 0xc7, 0x16, 0xcd, 0xc0, 0xe3, 0x00, 0x07, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02, 0x00, 0x03, 0x00, 0x04, 0x00, 0x05, 0x00, 0x06, 0x00, 0x11, 0xd2, 0x8e, 0x39, 0x00, 0xa0, 0xc9, 0x69, 0x72, 0x3b, 0xbd, 0xbd, 0x9a, 0xfa, 0x77, 0x59, 0x03, 0x32, 0x4d, 0xbd, 0x60, 0x28, 0xf4, 0xe7, 0x8f, 0x78, 0x4b, 0x03, 0x18, 0x04, 0x00, 0x7f, 0xff, 0x04, 0x00, 0x4e, 0xac, 0x08, 0x81, 0x11, 0x9f, 0x59, 0x4d, 0x85, 0x0e, 0xe2, 0x1a, 0x52, 0x2c, 0x59, 0xb2, 0x00, 0x20, 0x00, 0x51, 0x00, 0x4d, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00, 0x61, 0xdf, 0xe4, 0x8b, 0xca, 0x93, 0xd2, 0x11, 0xaa, 0x0d, 0x00, 0xe0, 0x98, 0x03, 0x2b, 0x8c, 0x45, 0x00, 0x72, 0x00, 0x72, 0x00, 0x4f, 0x00, 0x75, 0x00, 0x74, 0x00, 0x00, 0x00, 0x02, 0x01, 0x0c, 0x00, 0xd0, 0x41, 0x03, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x06, 0x00, 0x00, 0x1f, 0x02, 0x01, 0x0c, 0x00, 0xd0, 0x41, 0x01, 0x05, 0x00, 0x30, 0x00, 0x00, 0x00, 0xbd, 0x9a, 0xfa, 0x77, 0x59, 0x03, 0x32, 0x4d, 0xbd, 0x60, 0x28, 0xf4, 0xe7, 0x8f, 0x78, 0x4b, 0x80, 0xb4, 0xd9, 0x69, 0x31, 0xbf, 0x0d, 0x02, 0xfd, 0x91, 0xa6, 0x1e, 0x19, 0xd1, 0x4f, 0x1d, 0xa4, 0x52, 0xe6, 0x6d, 0xb2, 0x40, 0x8c, 0xa8, 0x60, 0x4d, 0x41, 0x1f, 0x92, 0x65, 0x9f, 0x0a, 0xbd, 0x9a, 0xfa, 0x77, 0x59, 0x03, 0x32, 0x4d, 0xbd, 0x60, 0x28, 0x07, 0x00, 0xaa, 0x55, 0x3d, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00, 0x61, 0xdf, 0xe4, 0x8b, 0xca, 0x93, 0xd2, 0x11, 0xaa, 0x0d, 0x00, 0xe0, 0x98, 0x03, 0x2b, 0x8c, 0x42, 0x17, 0x00, 0x00, 0x00, 0xff, 0xff, 0xaa, 0x55, 0x3c, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0xb2, 0x00, 0x00, 0x00, 0x61, 0xdf, 0xe4, 0x8b, 0xca, 0x93, 0xd2, 0x11, 0xaa, 0x0d, 0x00, 0xe0, 0x98, 0x6b, 0x00, 0x00, 0x00, 0x61, 0xdf, 0xe4, 0x8b, 0xca, 0x93, 0xd2, 0x11, 0xaa, 0x0d, 0x00, 0xe0, 0x98, 0x03, 0x2b, 0x8c, 0x43, 0x00, 0x6f, 0x00, 0x6e, 0x00, 0x49, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x02, 0x01, 0x0c, 0x00, 0xd0, 0x41, 0x03, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x06, 0x00, 0x00, 0x1f, 0x02, 0x01, 0x0c, 0x00, 0xd0, 0x41, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x2a, 0x30, 0x28, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x21, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20, 0x43, 0x6f, 0x72, 0x70, 0x6f, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x4b, 0x45, 0x4b, 0x20, 0x43, 0x41, 0x20, 0x32, 0x30, 0x31, 0x31, 0x30, 0x82, 0x01, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0xf3, 0x00, 0x00, 0x00, 0x61, 0xdf, 0xe4, 0x8b, 0xca, 0x93, 0xd2, 0x11, 0xaa, 0x0d, 0x00, 0xe0, 0x98, 0x03, 0x2b, 0x8c, 0x43, 0x00, 0x6f, 0x00, 0x6e, 0x00, 0x49, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x02, 0x01, 0x0c, 0x00, 0xd0, 0x41, 0x03, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x06, 0x00, 0x00, 0x1f, 0x02, 0x01, 0x0c, 0x00, 0xd0, 0x41, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0xbd, 0x9a, 0xfa, 0x77, 0x59, 0x03, 0x32, 0x4d, 0xbd, 0x60, 0x28, 0xf4, 0xe7, 0x8f, 0x78, 0x4b, 0x4b, 0x00, 0x65, 0x00, 0x72, 0x00, 0x6e, 0x00, 0x65, 0x00, 0x6c, 0x00, 0x5f, 0x00, 0x00, 0x37, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x45, 0x00, 0x46, 0x00, 0x49, 0x00, 0x20, 0x00, 0x49, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x65, 0x00, 0x72, 0x00, 0x6e, 0x00, 0x61, 0x00, 0x6c, 0x00, 0x20, 0x00, 0x53, 0x00, 0x68, 0x00, 0x65, 0x00, 0x6c, 0x00, 0x6c, 0x00, 0x00, 0x00, 0x04, 0x07, 0x14, 0x00, 0xc9, 0xbd, 0xb8, 0x7c, 0xeb, 0xf8, 0x34, 0x4f, 0xaa, 0xea, 0x3e, 0x0e, 0x00, 0x00, 0x00, 0x61, 0xdf, 0xe4, 0x8b, 0xca, 0x93, 0xd2, 0x11, 0xaa, 0x0d, 0x00, 0xe0, 0x98, 0x03, 0x2b, 0x8c, 0x4b, 0x00, 0x65, 0x00, 0x79, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x51, 0xd7, 0x97, 0x9f, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0xff, 0xff, 0xaa, 0x55, 0x3f, 0x00, 0x07, 0x00, 0x00, 0x76, 0x00, 0x34, 0x00, 0x20, 0x00, 0x28, 0x00, 0x4d, 0x00, 0x41, 0x00, 0x43, 0x00, 0x3a, 0x00, 0x35, 0x00, 0x32, 0x00, 0x35, 0x00, 0x34, 0x00, 0x30, 0x00, 0x30, 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x34, 0x00, 0x35, 0x00, 0x36, 0x00, 0x29, 0x00, 0x00, 0x00, 0x02, 0x01, 0x0c, 0x00, 0xd0, 0x41, 0x03, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x06, 0x00, 0x00, 0x02, 0x03, 0x0b, 0x25, 0x00, 0x52, 0x54, 0x00, 0x12, 0x34, 0x56, 0x00, 0x00, 0x53, 0x00, 0x69, 0x00, 0x53, 0x00, 0x74, 0x00, 0x61, 0x00, 0x74, 0x00, 0x75, 0x00, 0x73, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xff, 0xff, 0xaa, 0x55, 0x3f, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0xbd, 0x9a, 0xfa, 0x77, 0x59, 0x03, 0x32, 0x4d, 0xbd, 0x60, 0x28, 0xf4, 0xe7, 0x8f, 0x78, 0x4b, 0x4b, 0x00, 0x65, 0x00, 0x72, 0x00, 0x6e, 0x00, 0x65, 0x00, 0x6c, 0x00, 0x5f, 0x00, 0x50, 0x00, 0x4b, 0x00, 0x00, 0x00, 0xa1, 0x59, 0xc0, 0xa5, 0xe4, 0x94, 0xa7, 0x4a, 0x87, 0xb5, 0xab, 0x15, 0x5c, 0x2b, 0xf0, 0x72, 0xd0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb4, 0x03, 0x00, 0x00, 0x61, 0xdf, 0xe4, 0x8b, 0xca, 0x93, 0xd2, 0x11, 0xaa, 0x0d, 0x00, 0xe0, 0x98, 0x03, 0x2b, 0x8c, 0x30, 0x82, 0x03, 0xa0, 0x30, 0x82, 0x02, 0x88, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x09, 0x00, 0xfe, 0xf5, 0x88, 0xe8, 0xf3, 0x96, 0xc0, 0xf1, 0x30, 0x0d, 0x06, 0xb9, 0x00, 0x00, 0x00, 0x61, 0xdf, 0xe4, 0x8b, 0xca, 0x93, 0xd2, 0x11, 0xaa, 0x0d, 0x00, 0xe0, 0x98, 0x03, 0x2b, 0x8c, 0x43, 0x00, 0x6f, 0x00, 0x6e, 0x00, 0x49, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x02, 0x01, 0x0c, 0x00, 0xd0, 0x41, 0x03, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x06, 0x00, 0x00, 0x1f, 0x02, 0x01, 0x0c, 0x00, 0xd0, 0x41, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x7a, 0x00, 0x00, 0x00, 0x61, 0xdf, 0xe4, 0x8b, 0xca, 0x93, 0xd2, 0x11, 0xaa, 0x0d, 0x00, 0xe0, 0x98, 0x03, 0x2b, 0x8c, 0x43, 0x00, 0x6f, 0x00, 0x6e, 0x00, 0x49, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x02, 0x01, 0x0c, 0x00, 0xd0, 0x41, 0x03, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x06, 0x00, 0x00, 0x1f, 0x02, 0x01, 0x0c, 0x00, 0xd0, 0x41, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x37, 0x32, 0x31, 0x32, 0x32, 0x34, 0x35, 0x5a, 0x17, 0x0d, 0x32, 0x36, 0x30, 0x36, 0x32, 0x37, 0x32, 0x31, 0x33, 0x32, 0x34, 0x35, 0x5a, 0x30, 0x81, 0x81, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x13, 0x30, 0x11, 0x06, 0x03, 0x55, 0x04, 0x08, 0x13, 0x0a, 0x57, 0x61, 0x73, 0x68, 0x69, 0x6e, 0x67, 0x74, 0x6f, 0x6e, 0x31, 0x10, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x04, 0x07, 0x13, 0x07, 0x52, 0x65, 0x64, 0x6d, 0x6f, 0x6e, 0x64, 0x31, 0x1e, 0x30, 0x1c, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x00, 0x76, 0x00, 0x36, 0x00, 0x20, 0x00, 0x28, 0x00, 0x4d, 0x00, 0x41, 0x00, 0x43, 0x00, 0x3a, 0x00, 0x35, 0x00, 0x32, 0x00, 0x35, 0x00, 0x34, 0x00, 0x30, 0x00, 0x30, 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x34, 0x00, 0x35, 0x00, 0x36, 0x00, 0x29, 0x00, 0x00, 0x00, 0x02, 0x01, 0x0c, 0x00, 0xd0, 0x41, 0x03, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x06, 0x00, 0x00, 0x02, 0x03, 0x0b, 0x25, 0x32, 0x30, 0x30, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x29, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x20, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x20, 0x32, 0x30, 0x31, 0x30, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x31, 0x31, 0x30, 0x31, 0x39, 0x31, 0x38, 0x34, 0x31, 0x34, 0x32, 0x5a, 0x17, 0x0d, 0x32, 0x36, 0x31, 0x30, 0x31, 0x39, 0x31, 0x38, 0x35, 0x31, 0x34, 0x32, 0x5a, 0x30, 0x81, 0x84, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x74, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x03, 0x82, 0x02, 0x01, 0x00, 0x14, 0xfc, 0x7c, 0x71, 0x51, 0xa5, 0x79, 0xc2, 0x6e, 0xb2, 0xef, 0x39, 0x3e, 0xbc, 0x3c, 0x52, 0x0f, 0x6e, 0x2b, 0x3f, 0x10, 0x13, 0x73, 0xfe, 0xa8, 0x68, 0xd0, 0x48, 0xa6, 0x34, 0x4d, 0x8a, 0x96, 0x05, 0x26, 0xee, 0x31, 0x46, 0x90, 0x61, 0x79, 0xd6, 0x7f, 0xff, 0x04, 0x00, 0xaa, 0x55, 0x3f, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x61, 0xdf, 0xe4, 0x8b, 0xca, 0x93, 0xd2, 0x11, 0xaa, 0x0d, 0x00, 0xe0, 0x98, 0x03, 0x2b, 0xc3, 0x00, 0x00, 0x00, 0x61, 0xdf, 0xe4, 0x8b, 0xca, 0x93, 0xd2, 0x11, 0xaa, 0x0d, 0x00, 0xe0, 0x98, 0x03, 0x2b, 0x8c, 0x43, 0x00, 0x6f, 0x00, 0x6e, 0x00, 0x49, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x02, 0x01, 0x0c, 0x00, 0xd0, 0x41, 0x03, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x06, 0x00, 0x00, 0x1f, 0x02, 0x01, 0x0c, 0x00, 0xd0, 0x41, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x14, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x61, 0xdf, 0xe4, 0x8b, 0xca, 0x93, 0xd2, 0x11, 0xaa, 0x0d, 0x00, 0xe0, 0x98, 0x03, 0x2b, 0x8c, 0x42, 0x00, 0x6f, 0x00, 0x6f, 0x00, 0x74, 0x00, 0x4f, 0x00, 0x72, 0x00, 0x64, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0xaa, 0x55, 0x3f, 0x00, 0x07, 0x00, 0x16, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0c, 0xec, 0x76, 0xc0, 0x28, 0x70, 0x99, 0x43, 0xa0, 0x72, 0x71, 0xee, 0x5c, 0x44, 0x8b, 0x9f, 0x43, 0x00, 0x75, 0x00, 0x73, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6d, 0x00, 0x4d, 0x00, 0x6f, 0x00, 0x64, 0x00, 0x65, 0x00, 0x00, 0x00, 0x00, 0xff, 0xaa, 0x55, 0x3c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xaa, 0x55, 0x3f, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x9f, 0x04, 0x19, 0x4c, 0x37, 0x41, 0xd3, 0x4d, 0x9c, 0x10, 0x8b, 0x97, 0xa8, 0x3f, 0xfd, 0xfa, 0x4d, 0x00, 0x65, 0x00, 0x6d, 0x00, 0x6f, 0x00, 0x72, 0x00, 0x79, 0x00, 0x54, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x49, 0x00, 0x6e, 0x00, 0x66, 0x00, 0x6f, 0x00, 0x72, 0x00, 0x6d, 0x00, 0x61, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6f, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0x55, 0x3c, 0x00, 0x03, 0x00, 0xd5, 0xf6, 0x56, 0xcb, 0x8f, 0xe8, 0xa2, 0x5c, 0x62, 0x68, 0xd1, 0x3d, 0x94, 0x90, 0x5b, 0xd7, 0xce, 0x9a, 0x18, 0xc4, 0x30, 0x56, 0x06, 0x03, 0x55, 0x1d, 0x1f, 0x04, 0x4f, 0x30, 0x4d, 0x30, 0x4b, 0xa0, 0x49, 0xa0, 0x47, 0x86, 0x45, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x63, 0x72, 0x6c, 0x2e, 0x6d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x6b, 0x69, 0x2f, 0x63, 0x72, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x73, 0x2f, 0x4d, 0x69, 0x63, 0x52, 0x6f, 0x6f, 0x43, 0x65, 0x72, 0x41, 0x75, 0x74, 0x5f, 0x32, 0x30, 0x31, 0x30, 0x2d, 0x30, 0x36, 0x2d, 0x32, 0x33, 0x2e, 0x63, 0x72, 0x6c, 0x30, 0x5a, 0x06, 0x08, 0x2b, 0x06, 0x01, 0x05, 0x05, 0x07, 0x01, 0x01, 0x04, 0x4e, 0x30, 0x4c, 0x30, 0x4a, 0x06, 0x08, 0x2b, 0x06, 0x01, 0x05, 0x05, 0x07, 0x30, 0x02, 0x86, 0x3e, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x6d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x2e, 0x63, 0x6f, 0x0c, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x61, 0xdf, 0xe4, 0x8b, 0xca, 0x93, 0xd2, 0x11, 0xaa, 0x0d, 0x00, 0xe0, 0x98, 0x03, 0x2b, 0x8c, 0x43, 0x00, 0x6f, 0x00, 0x6e, 0x00, 0x49, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x02, 0x01, 0x0c, 0x00, 0xd0, 0x41, 0x03, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x06, 0x00, 0x00, 0x1f, 0x02, 0x01, 0x0c, 0x00, 0xd0, 0x41, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xff, 0x04, 0x00, 0xff, 0xff, 0xaa, 0x55, 0x3c, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00, 0x61, 0xdf, 0xe4, 0x8b, 0xca, 0x93, 0xd2, 0x11, 0xaa, 0x0d, 0x00, 0xe0, 0x98, 0x03, 0x03, 0x0f, 0x0b, 0x00, 0xff, 0xff, 0xff, 0xff, 0x03, 0x01, 0x01, 0x7f, 0x01, 0x04, 0x00, 0x01, 0x04, 0x14, 0x00, 0x9b, 0x5a, 0x5a, 0x86, 0x5d, 0xb8, 0x4c, 0x47, 0x84, 0x55, 0x65, 0xd1, 0xbe, 0x84, 0x4b, 0xe2, 0x03, 0x0e, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x0a, 0x14, 0x00, 0x53, 0x47, 0xc1, 0xe0, 0xbe, 0x8d, 0x2b, 0xf1, 0xff, 0x96, 0x76, 0x8b, 0x4c, 0xa9, 0x85, 0x27, 0x47, 0x07, 0x5b, 0x4f, 0x50, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5f, 0x46, 0x56, 0x48, 0xff, 0xfe, 0x04, 0x00, 0x48, 0x00, 0x19, 0xf9, 0x00, 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x2c, 0xf3, 0xaa, 0x7b, 0x94, 0x9a, 0x43, 0xa1, 0x80, 0x2e, 0x14, 0x4e, 0xc3, 0x77, 0x92, 0xb8, 0xdf, 0x00, 0x00, 0x5a, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0x55, 0x3c, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0c, 0xec, 0x76, 0xc0, 0x28, 0x70, 0x99, 0x43, 0xa0, 0x72, 0x71, 0xee, 0x5c, 0x44, 0x8b, 0x9f, 0xf1, 0x00, 0x00, 0x00, 0x61, 0xdf, 0xe4, 0x8b, 0xca, 0x93, 0xd2, 0x11, 0xaa, 0x0d, 0x00, 0xe0, 0x98, 0x03, 0x2b, 0x8c, 0x43, 0x00, 0x6f, 0x00, 0x6e, 0x00, 0x4f, 0x00, 0x75, 0x00, 0x74, 0x00, 0x00, 0x00, 0x02, 0x01, 0x0c, 0x00, 0xd0, 0x41, 0x03, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x06, 0x00, 0x00, 0x1f, 0x02, 0x01, 0x0c, 0x00, 0xd0, 0x41, 0x01, 0x05, 0x00, 0x00, 0x00, 0x00, 0x03, 0x0e, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc2, 0x01, 0x00, 0xff, 0xff, 0xaa, 0x55, 0x3f, 0x00, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xe0, 0xe4, 0x73, 0x90, 0xec, 0x60, 0x6e, 0x4b, 0x99, 0x03, 0x4c, 0x22, 0x3c, 0x26, 0x0f, 0x3c, 0x56, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x64, 0x00, 0x6f, 0x00, 0x72, 0x00, 0x4b, 0x00, 0x65, 0x00, 0x79, 0x00, 0x73, 0x00, 0x4e, 0x00, 0x76, 0x00, 0x00, 0x00, 0x00, 0xff, 0xaa, 0x55, 0x3f, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xc7, 0x0b, 0xa3, 0xf0, 0x08, 0xaf, 0x56, 0x45, 0x99, 0xc4, 0x00, 0x10, 0x09, 0xc9, 0x3a, 0x44, 0x53, 0x00, 0x65, 0x00, 0x63, 0x00, 0x75, 0x00, 0x72, 0x00, 0x65, 0x00, 0x42, 0x00, 0x6f, 0x00, 0x6f, 0x00, 0x74, 0x00, 0x45, 0x00, 0x6e, 0x00, 0x61, 0x00, 0x62, 0x00, 0x6c, 0x00, 0x65, 0x00, 0x00, 0x00, 0x01, 0xff, 0xaa, 0x55, 0x3f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xaa, 0x55, 0x3c, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x16, 0xd6, 0x47, 0x4b, 0xd6, 0xa8, 0x52, 0x45, 0x9d, 0x44, 0xcc, 0xad, 0x2e, 0x0f, 0x4c, 0xf9, 0x49, 0x00, 0x6e, 0x00, 0x69, 0x00, 0x74, 0x00, 0x69, 0x00, 0x61, 0x00, 0x6c, 0x00, 0x41, 0x00, 0x74, 0x00, 0x74, 0x00, 0x65, 0x00, 0x6d, 0x00, 0x70, 0x00, 0x74, 0x00, 0x4f, 0x00, 0x72, 0x00, 0x64, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0xcb, 0xb2, 0x19, 0xd7, 0x3a, 0x3d, 0x96, 0x45, 0xa3, 0xbc, 0xda, 0xd0, 0x0e, 0x67, 0x65, 0x6f, 0x64, 0x00, 0x62, 0x00, 0x78, 0x00, 0x00, 0x00, 0x26, 0x16, 0xc4, 0xc1, 0x4c, 0x50, 0x92, 0x40, 0xac, 0xa9, 0x41, 0xf9, 0x36, 0x93, 0x43, 0x28, 0x4c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0xa3, 0xa8, 0xba, 0xa0, 0x1d, 0x04, 0xa8, 0x48, 0xbc, 0x87, 0xc3, 0x6d, 0x12, 0x1b, 0x5e, 0x3d, 0xe3, 0xb0, 0xc4, 0x42, 0x98, 0xfc, 0x1c, 0x14, 0x9a, 0xfb, 0xf4, 0xc8, 0x99, 0x6f, 0xb9, 0x24, 0x27, 0xae, 0x41, 0xe4, 0x64, 0x9b, 0x93, 0x4c, 0xa4, 0x95, 0x99, 0x1b, 0x78, 0x52, 0xb8, 0x55, 0x26, 0x16, 0xc4, 0xc1, 0x4c, 0x50, 0x92, 0x40, 0xac, 0xa9, 0x41, 0xf9, 0x36, 0x93, 0x43, 0x28, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x11, 0x40, 0x70, 0xeb, 0x02, 0x14, 0xd3, 0x11, 0x8e, 0x77, 0x00, 0xa0, 0xc9, 0x69, 0x72, 0x3b, 0x4d, 0x00, 0x54, 0x00, 0x43, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xaa, 0x55, 0x3c, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x16, 0xd6, 0x47, 0x4b, 0xd6, 0xa8, 0x52, 0x45, 0x9d, 0x44, 0xcc, 0xad, 0x2e, 0x0f, 0x4c, 0xf9, 0x49, 0x00, 0x6e, 0x00, 0x69, 0x00, 0x74, 0x00, 0x69, 0x00, 0x61, 0x00, 0x6c, 0x00, 0x41, 0x00, 0x74, 0x00, 0x74, 0x00, 0x65, 0x00, 0x6d, 0x00, 0x70, 0x00, 0x74, 0x00, 0x4f, 0x00, 0x72, 0x00, 0x64, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x01, 0xff, 0xff, 0xff, 0xaa, 0x55, 0x3f, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x19, 0x04, 0x00, 0x00, 0x45, 0x49, 0x32, 0x59, 0x44, 0xec, 0x0d, 0x4c, 0xb1, 0xcd, 0x9d, 0xb1, 0x39, 0xdf, 0x07, 0x0c, 0x41, 0x00, 0x74, 0x00, 0x74, 0x00, 0x65, 0x00, 0x6d, 0x00, 0x70, 0x00, 0x74, 0x00, 0x20, 0x00, 0x31, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x74, 0x74, 0x65, 0x6d, 0x70, 0x74, 0x20, 0x31, 0x00, 0xf5, 0x2f, 0x83, 0xa3, 0xfa, 0x9c, 0xfb, 0xd6, 0x92, 0x0f, 0x72, 0x28, 0x24, 0xdb, 0xe4, 0x03, 0x45, 0x34, 0xd2, 0x5b, 0x85, 0x07, 0x24, 0x6b, 0x3b, 0x95, 0x7d, 0xac, 0x6e, 0x1b, 0xce, 0x7a, 0xbd, 0x9a, 0xfa, 0x77, 0x59, 0x03, 0x32, 0x4d, 0xbd, 0x60, 0x28, 0xf4, 0xe7, 0x8f, 0x78, 0x4b, 0xc5, 0xd9, 0xd8, 0xa1, 0x86, 0xe2, 0xc8, 0x2d, 0x09, 0xaf, 0xaa, 0x2a, 0x6f, 0x7f, 0x2e, 0x73, 0x87, 0x0d, 0x3e, 0x64, 0xf7, 0x2c, 0x4e, 0x08, 0xef, 0x67, 0x79, 0x6a, 0x84, 0x0f, 0x0f, 0xbd, 0xbd, 0x9a, 0xfa, 0x77, 0x59, 0x03, 0x32, 0x4d, 0xbd, 0x60, 0x28, 0xf4, 0xe7, 0x8f, 0x78, 0x4b, 0x1a, 0xec, 0x84, 0xb8, 0x4b, 0x6c, 0x65, 0xa5, 0x12, 0x20, 0xa9, 0xbe, 0x71, 0x81, 0x96, 0x52, 0x30, 0x21, 0x0d, 0x62, 0xd6, 0xd3, 0x3c, 0x48, 0x99, 0x9c, 0x6b, 0x29, 0x5a, 0x2b, 0x0a, 0x06, 0xbd, 0x9a, 0xfa, 0x77, 0x59, 0x03, 0x32, 0x4d, 0xbd, 0x60, 0x28, 0xf4, 0xe7, 0x8f, 0x78, 0x4b, 0xc3, 0xa9, 0x9a, 0x46, 0x0d, 0xa4, 0x64, 0xa0, 0x57, 0xc3, 0x58, 0x6d, 0x83, 0xce, 0xf5, 0xf4, 0xae, 0x08, 0xb7, 0x10, 0x39, 0x79, 0xed, 0x89, 0x32, 0x74, 0x2d, 0xf0, 0xed, 0x53, 0x0c, 0x66, 0xbd, 0x9a, 0xfa, 0x77, 0x59, 0x03, 0x32, 0x4d, 0xbd, 0x60, 0x28, 0xf4, 0xe7, 0x8f, 0x78, 0x4b, 0x58, 0xfb, 0x94, 0x1a, 0xef, 0x95, 0xa2, 0x59, 0x43, 0xb3, 0xfb, 0x5f, 0x25, 0x10, 0xa0, 0xdf, 0x3f, 0xe4, 0x4c, 0x58, 0xc9, 0x5e, 0x0a, 0xb8, 0x04, 0x87, 0x29, 0x75, 0x68, 0xab, 0x97, 0x71, 0xbd, 0x9a, 0xfa, 0x77, 0x59, 0x03, 0x32, 0x4d, 0xbd, 0x60, 0x28, 0xf4, 0xe7, 0x8f, 0x78, 0x4b, 0x53, 0x91, 0xc3, 0xa2, 0xfb, 0x11, 0x21, 0x02, 0xa6, 0xaa, 0x1e, 0xdc, 0x25, 0xae, 0x77, 0xe1, 0x9f, 0x5d, 0x6f, 0x09, 0xcd, 0x09, 0xee, 0xb2, 0x50, 0x99, 0x22, 0xbf, 0xcd, 0x59, 0x92, 0xea, 0xbd, 0x9a, 0xfa, 0x77, 0x59, 0x03, 0x32, 0x4d, 0xbd, 0x60, 0x28, 0xf4, 0xe7, 0x8f, 0x78, 0x4b, 0xd6, 0x26, 0x15, 0x7e, 0x1d, 0x6a, 0x71, 0x8b, 0xc1, 0x24, 0xab, 0x8d, 0xa2, 0x7c, 0xbb, 0x65, 0x07, 0x2c, 0xa0, 0x3a, 0x7b, 0x6b, 0x25, 0x7d, 0xbd, 0xcb, 0xbd, 0x60, 0xf6, 0x5e, 0xf3, 0xd1, 0xbd, 0x9a, 0xfa, 0x77, 0x59, 0x03, 0x32, 0x4d, 0xbd, 0x60, 0x28, 0xf4, 0xe7, 0xff, 0x04, 0x00, 0xff, 0xff, 0xff, 0xaa, 0x55, 0x3c, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0xc6, 0x00, 0x00, 0x00, 0x61, 0xdf, 0xe4, 0x8b, 0xca, 0x93, 0xd2, 0x11, 0xaa, 0x0d, 0x00, 0xe0, 0x98, 0xff, 0x04, 0x00, 0xaa, 0x55, 0x3c, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x00, 0x00, 0x61, 0xdf, 0xe4, 0x8b, 0xca, 0x93, 0xd2, 0x11, 0xaa, 0x0d, 0x00, 0xe0, 0x98, 0x03, 0x2b, 0x8c, 0x28, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x16, 0xd6, 0x47, 0x4b, 0xd6, 0xa8, 0x52, 0x45, 0x9d, 0x44, 0xcc, 0xad, 0x2e, 0x0f, 0x4c, 0xf9, 0x49, 0x00, 0x6e, 0x00, 0x69, 0x00, 0x74, 0x00, 0x69, 0x00, 0x61, 0x00, 0x6c, 0x00, 0x41, 0x00, 0x74, 0x00, 0x74, 0x00, 0x65, 0x00, 0x6d, 0x00, 0x70, 0x00, 0x74, 0x00, 0x4f, 0x00, 0x72, 0x00, 0x64, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0xaa, 0x55, 0x3f, 0x00, 0x03, 0x00, 0xdd, 0x0c, 0xbb, 0xa2, 0xe4, 0x2e, 0x09, 0xe3, 0xe7, 0xc5, 0xf7, 0x96, 0x69, 0xbc, 0x00, 0x21, 0xbd, 0x69, 0x33, 0x33, 0xef, 0xad, 0x04, 0xcb, 0x54, 0x80, 0xee, 0x06, 0x83, 0xbb, 0xc5, 0x20, 0x84, 0xd9, 0xf7, 0xd2, 0x8b, 0xf3, 0x38, 0xb0, 0xab, 0xa4, 0xad, 0x2d, 0x7c, 0x62, 0x79, 0x05, 0xff, 0xe3, 0x4a, 0x3f, 0x04, 0x35, 0x20, 0x70, 0xe3, 0xc4, 0xe7, 0x6b, 0xe0, 0x9c, 0xc0, 0x36, 0x75, 0xe9, 0x8a, 0x31, 0xdd, 0x8d, 0x70, 0xe5, 0xdc, 0x37, 0xb5, 0x74, 0x46, 0x96, 0x28, 0x5b, 0x87, 0x60, 0x23, 0x2c, 0xbf, 0xdc, 0x47, 0xa5, 0x67, 0xf7, 0x51, 0x27, 0x9e, 0x72, 0xeb, 0x07, 0xa6, 0xc9, 0xb9, 0x1e, 0x3b, 0x53, 0x35, 0x7c, 0xe5, 0xd3, 0xec, 0x27, 0xb9, 0x87, 0x1c, 0xfe, 0xb9, 0xc9, 0x23, 0x09, 0x6f, 0xa8, 0x46, 0x91, 0xc1, 0x6e, 0x96, 0x3c, 0x41, 0xd3, 0xcb, 0xa3, 0x3f, 0x5d, 0x02, 0x6a, 0x4d, 0xec, 0x69, 0x1f, 0x25, 0x28, 0x5c, 0x36, 0xff, 0xfd, 0x43, 0x15, 0x0a, 0x94, 0xe0, 0x19, 0xb4, 0xcf, 0xdf, 0xc2, 0x12, 0xe2, 0xc2, 0x5b, 0x27, 0xee, 0x27, 0x78, 0x30, 0x8b, 0x5b, 0x2a, 0x09, 0x6b, 0x22, 0x89, 0x53, 0x60, 0x16, 0x2c, 0xc0, 0x68, 0x1d, 0x53, 0xba, 0xec, 0x49, 0xf3, 0x9d, 0x61, 0x8c, 0x85, 0x68, 0x09, 0x73, 0x44, 0x5d, 0x7d, 0xa2, 0x54, 0x2b, 0xdd, 0x79, 0xf7, 0x15, 0xcf, 0x35, 0x5d, 0x6c, 0x1c, 0x2b, 0x5c, 0xce, 0xbc, 0x9c, 0x23, 0x8b, 0x6f, 0x6e, 0xb5, 0x26, 0xd9, 0x36, 0x13, 0xc3, 0x4f, 0xd6, 0x27, 0xae, 0xb9, 0x32, 0x3b, 0x41, 0x92, 0x2c, 0xe1, 0xc7, 0xcd, 0x77, 0xe8, 0xaa, 0x54, 0x4e, 0xf7, 0x5c, 0x0b, 0x04, 0x87, 0x65, 0xb4, 0x43, 0x18, 0xa8, 0xb2, 0xe0, 0x6d, 0x19, 0x77, 0xec, 0x5a, 0x24, 0xfa, 0x48, 0x03, 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x82, 0x01, 0x43, 0x30, 0x82, 0x01, 0x3f, 0x30, 0x10, 0x06, 0x09, 0x2b, 0x06, 0x01, 0x04, 0x01, 0x82, 0x37, 0x15, 0x01, 0x04, 0x03, 0x02, 0x01, 0x00, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0xa9, 0x29, 0x02, 0x39, 0x8e, 0x16, 0xc4, 0x97, 0x78, 0xcd, 0x90, 0xf9, 0x9e, 0x4f, 0x9a, 0xe1, 0x7c, 0x55, 0xaf, 0x53, 0x30, 0x19, 0x06, 0x09, 0x2b, 0x06, 0x01, 0x04, 0x01, 0x82, 0x37, 0x14, 0x02, 0x04, 0x0c, 0x1e, 0x0a, 0x00, 0x53, 0x00, 0x75, 0x00, 0x62, 0x00, 0x43, 0x00, 0x41, 0x30, 0x0b, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x04, 0x04, 0x03, 0x02, 0x01, 0x86, 0x30, 0x0f, 0xc4, 0xe8, 0xb5, 0x8a, 0xbf, 0xad, 0x57, 0x26, 0xb0, 0x26, 0xc3, 0xea, 0xe7, 0xfb, 0x57, 0x7a, 0x44, 0x02, 0x5d, 0x07, 0x0d, 0xda, 0x4a, 0xe5, 0x74, 0x2a, 0xe6, 0xb0, 0x0f, 0xec, 0x6d, 0xeb, 0xec, 0x7f, 0xb9, 0xe3, 0x5a, 0x63, 0x32, 0x7c, 0x11, 0x17, 0x4f, 0x0e, 0xe3, 0x0b, 0xa7, 0x38, 0x15, 0x93, 0x8e, 0xc6, 0xf5, 0xe0, 0x84, 0xb1, 0x9a, 0x9b, 0x2c, 0xe7, 0xf5, 0xb7, 0x91, 0xd6, 0x09, 0xe1, 0xe2, 0xc0, 0x04, 0xa8, 0xac, 0x30, 0x1c, 0xdf, 0x48, 0xf3, 0x06, 0x50, 0x9a, 0x64, 0xa7, 0x51, 0x7f, 0xc8, 0x85, 0x4f, 0x8f, 0x20, 0x86, 0xce, 0xfe, 0x2f, 0xe1, 0x9f, 0xff, 0x82, 0xc0, 0xed, 0xe9, 0xcd, 0xce, 0xf4, 0x53, 0x6a, 0x62, 0x3a, 0x0b, 0x43, 0xb9, 0xe2, 0x25, 0xfd, 0xfe, 0x05, 0xf9, 0xd4, 0xc4, 0x14, 0xab, 0x11, 0xe2, 0x23, 0x89, 0x8d, 0x70, 0xb7, 0xa4, 0x1d, 0x4d, 0xec, 0xae, 0xe5, 0x9c, 0xfa, 0x16, 0xc2, 0xd7, 0xc1, 0xcb, 0xd4, 0xe8, 0xc4, 0x2f, 0xe5, 0x99, 0xee, 0x24, 0x8b, 0x03, 0xec, 0x8d, 0xf2, 0x8b, 0xea, 0xc3, 0x4a, 0xfb, 0x43, 0x11, 0x12, 0x0b, 0x7e, 0xb5, 0x47, 0x92, 0x6c, 0xdc, 0xe6, 0x04, 0x89, 0xeb, 0xf5, 0x33, 0x04, 0xeb, 0x10, 0x01, 0x2a, 0x71, 0xe5, 0xf9, 0x83, 0x13, 0x3c, 0xff, 0x25, 0x09, 0x2f, 0x68, 0x76, 0x46, 0xff, 0xba, 0x4f, 0xbe, 0xdc, 0xad, 0x71, 0x2a, 0x58, 0xaa, 0xfb, 0x0e, 0xd2, 0x79, 0x3d, 0xe4, 0x9b, 0x65, 0x3b, 0xcc, 0x29, 0x2a, 0x9f, 0xfc, 0x72, 0x59, 0xa2, 0xeb, 0xae, 0x92, 0xef, 0xf6, 0x35, 0x13, 0x80, 0xc6, 0x02, 0xec, 0xe4, 0x5f, 0xcc, 0x9d, 0x76, 0xcd, 0xef, 0x63, 0x92, 0xc1, 0xaf, 0x79, 0x40, 0x84, 0x79, 0x87, 0x7f, 0xe3, 0x52, 0xa8, 0xe8, 0x9d, 0x7b, 0x07, 0x69, 0x8f, 0x15, 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x82, 0x01, 0x4f, 0x30, 0x82, 0x01, 0x4b, 0x30, 0x10, 0x06, 0x09, 0x2b, 0x06, 0x01, 0x04, 0x01, 0x82, 0x37, 0x15, 0x01, 0x04, 0x03, 0x02, 0x01, 0x00, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0x62, 0xfc, 0x43, 0xcd, 0xa0, 0x3e, 0xa4, 0xcb, 0x67, 0x12, 0xd2, 0x5b, 0xd9, 0x55, 0xac, 0x7b, 0xcc, 0xb6, 0x8a, 0x5f, 0x30, 0x19, 0x06, 0x09, 0x2b, 0x06, 0x01, 0x04, 0x01, 0x82, 0x37, 0x14, 0x02, 0x04, 0x0c, 0x1e, 0x0a, 0x00, 0x53, 0x00, 0x75, 0x00, 0x62, 0x00, 0x43, 0x00, 0x41, 0x30, 0x0b, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x04, 0x04, 0x03, 0x02, 0x01, 0x86, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x1f, 0x06, 0xff, 0x04, 0x00, 0xff, 0xaa, 0x55, 0x3c, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x92, 0x00, 0x00, 0x00, 0x61, 0xdf, 0xe4, 0x8b, 0xca, 0x93, 0xd2, 0x11, 0xaa, 0x0d, 0x00, 0xe0, 0x98, 0x03, 0x2b, 0x35, 0x08, 0x42, 0xff, 0x30, 0xcc, 0xce, 0xf7, 0x76, 0x0c, 0xad, 0x10, 0x68, 0x58, 0x35, 0x29, 0x46, 0x32, 0x76, 0x27, 0x7c, 0xef, 0x12, 0x41, 0x27, 0x42, 0x1b, 0x4a, 0xaa, 0x6d, 0x81, 0x38, 0x48, 0x59, 0x13, 0x55, 0xf3, 0xe9, 0x58, 0x34, 0xa6, 0x16, 0x0b, 0x82, 0xaa, 0x5d, 0xad, 0x82, 0xda, 0x80, 0x83, 0x41, 0x06, 0x8f, 0xb4, 0x1d, 0xf2, 0x03, 0xb9, 0xf3, 0x1a, 0x5d, 0x1b, 0xf1, 0x50, 0x90, 0xf9, 0xb3, 0x55, 0x84, 0x42, 0x28, 0x1c, 0x20, 0xbd, 0xb2, 0xae, 0x51, 0x14, 0xc5, 0xc0, 0xac, 0x97, 0x95, 0x21, 0x1c, 0x90, 0xdb, 0x0f, 0xfc, 0x77, 0x9e, 0x95, 0x73, 0x91, 0x88, 0xca, 0xbd, 0xbd, 0x52, 0xb9, 0x05, 0x50, 0x0d, 0xdf, 0x57, 0x9e, 0xa0, 0x61, 0xed, 0x0d, 0xe5, 0x6d, 0x25, 0xd9, 0x40, 0x0f, 0x17, 0x40, 0xc8, 0xce, 0xa3, 0x4a, 0xc2, 0x4d, 0xaf, 0x9a, 0x12, 0x1d, 0x08, 0x54, 0x8f, 0xbd, 0xc7, 0xbc, 0xb9, 0x2b, 0x3d, 0x49, 0x2b, 0x1f, 0x32, 0xfc, 0x6a, 0x21, 0x69, 0x4f, 0x9b, 0xc8, 0x7e, 0x42, 0x34, 0xfc, 0x36, 0x06, 0x17, 0x8b, 0x8f, 0x20, 0x40, 0xc0, 0xb3, 0x9a, 0x25, 0x75, 0x27, 0xcd, 0xc9, 0x03, 0xa3, 0xf6, 0x5d, 0xd1, 0xe7, 0x36, 0x54, 0x7a, 0xb9, 0x50, 0xb5, 0xd3, 0x12, 0xd1, 0x07, 0xbf, 0xbb, 0x74, 0xdf, 0xdc, 0x1e, 0x8f, 0x80, 0xd5, 0xed, 0x18, 0xf4, 0x2f, 0x14, 0x16, 0x6b, 0x2f, 0xde, 0x66, 0x8c, 0xb0, 0x23, 0xe5, 0xc7, 0x84, 0xd8, 0xed, 0xea, 0xc1, 0x33, 0x82, 0xad, 0x56, 0x4b, 0x18, 0x2d, 0xf1, 0x68, 0x95, 0x07, 0xcd, 0xcf, 0xf0, 0x72, 0xf0, 0xae, 0xbb, 0xdd, 0x86, 0x85, 0x98, 0x2c, 0x21, 0x4c, 0x33, 0x2b, 0xf0, 0x0f, 0x4a, 0xf0, 0x68, 0x87, 0xb5, 0x92, 0x55, 0x32, 0x75, 0xa1, 0x6a, 0x82, 0x6a, 0x3c, 0xa3, 0x25, 0x11, 0xa4, 0xed, 0xad, 0xd7, 0x04, 0xae, 0xcb, 0xd8, 0x40, 0x59, 0xa0, 0x84, 0xd1, 0x95, 0x4c, 0x62, 0x91, 0x22, 0x1a, 0x74, 0x1d, 0x8c, 0x3d, 0x47, 0x0e, 0x44, 0xa6, 0xe4, 0xb0, 0x9b, 0x34, 0x35, 0xb1, 0xfa, 0xb6, 0x53, 0xa8, 0x2c, 0x81, 0xec, 0xa4, 0x05, 0x71, 0xc8, 0x9d, 0xb8, 0xba, 0xe8, 0x1b, 0x44, 0x66, 0xe4, 0x47, 0x54, 0x0e, 0x8e, 0x56, 0x7f, 0xb3, 0x9f, 0x16, 0x98, 0xb2, 0x86, 0xd0, 0x68, 0x3e, 0x90, 0x23, 0xb5, 0x2f, 0x5e, 0x8f, 0x50, 0x85, 0x8d, 0xc6, 0x8d, 0x82, 0x5f, 0x41, 0xa1, 0xf4, 0x2e, 0x0d, 0xe0, 0x99, 0xd2, 0x6c, 0x75, 0xe4, 0xb6, 0x69, 0xb5, 0x21, 0x86, 0xfa, 0x07, 0xd1, 0xf6, 0xe2, 0x4d, 0xd1, 0xda, 0xad, 0x2c, 0x77, 0x53, 0x1e, 0x25, 0x32, 0x37, 0xc7, 0x6c, 0x52, 0x72, 0x95, 0x86, 0xb0, 0xf1, 0x35, 0x61, 0x6a, 0x19, 0xf5, 0xb2, 0x3b, 0x81, 0x50, 0x56, 0xa6, 0x32, 0x2d, 0xfe, 0xa2, 0x89, 0xf9, 0x42, 0x86, 0x27, 0x18, 0x55, 0xa1, 0x82, 0xca, 0x5a, 0x9b, 0xf8, 0x30, 0x98, 0x54, 0x14, 0xa6, 0x47, 0x96, 0x25, 0x2f, 0xc8, 0x26, 0xe4, 0x41, 0x94, 0x1a, 0x5c, 0x02, 0x3f, 0xe5, 0x96, 0xe3, 0x85, 0x5b, 0x3c, 0x3e, 0x3f, 0xbb, 0x47, 0x16, 0x72, 0x55, 0xe2, 0x25, 0x22, 0xb1, 0xd9, 0x7b, 0xe7, 0x03, 0x06, 0x2a, 0xa3, 0xf7, 0x1e, 0x90, 0x46, 0xc3, 0x00, 0x0d, 0xd6, 0x19, 0x89, 0xe3, 0x0e, 0x35, 0x27, 0x62, 0x03, 0x71, 0x15, 0xa6, 0xef, 0xd0, 0x27, 0xa0, 0xa0, 0x59, 0x37, 0x60, 0xf8, 0x38, 0x94, 0xb8, 0xe0, 0x78, 0x70, 0xf8, 0xba, 0x4c, 0x86, 0x87, 0x94, 0xf6, 0xe0, 0xae, 0x02, 0x45, 0xee, 0x65, 0xc2, 0xb6, 0xa3, 0x7e, 0x69, 0x16, 0x75, 0x07, 0x92, 0x9b, 0xf5, 0xa6, 0xbc, 0x59, 0x83, 0x58, 0xff, 0xff, 0xff, 0xaa, 0x55, 0x3c, 0x00, 0x27, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe4, 0x07, 0x09, 0x10, 0x10, 0x36, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x02, 0x02, 0x09, 0x00, 0xfe, 0xf5, 0x88, 0xe8, 0xf3, 0x96, 0xc0, 0xf1, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x30, 0x51, 0x31, 0x2b, 0x30, 0x29, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x22, 0x52, 0x65, 0x64, 0x20, 0x48, 0x61, 0x74, 0x20, 0x53, 0x65, 0x63, 0x75, 0x72, 0x65, 0x20, 0x42, 0x6f, 0x6f, 0x74, 0x20, 0x28, 0x50, 0x4b, 0x2f, 0x4b, 0x45, 0x4b, 0x20, 0x6b, 0x65, 0x79, 0x20, 0x31, 0x29, 0x31, 0x22, 0x30, 0x20, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x09, 0x01, 0x16, 0x13, 0x73, 0x65, 0x63, 0x61, 0x6c, 0x65, 0x72, 0x74, 0x40, 0x72, 0x65, 0x64, 0x68, 0x61, 0x74, 0x2e, 0x63, 0x6f, 0x6d, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x34, 0x31, 0x30, 0x33, 0x31, 0x31, 0x31, 0x31, 0x35, 0x33, 0x37, 0x5a, 0x17, 0x0d, 0x33, 0x37, 0x31, 0x30, 0x32, 0x35, 0x31, 0x31, 0x31, 0x35, 0x33, 0x37, 0x5a, 0x30, 0x51, 0x31, 0x2b, 0x30, 0x29, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x22, 0x52, 0xff, 0xff, 0xaa, 0x55, 0x3f, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x61, 0xdf, 0xe4, 0x8b, 0xca, 0x93, 0xd2, 0x11, 0xaa, 0x0d, 0x00, 0xe0, 0x98, 0x03, 0x2b, 0x8c, 0x42, 0x00, 0x6f, 0x00, 0x6f, 0x00, 0x74, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x00, 0x00, 0x09, 0x01, 0x00, 0x00, 0x2c, 0x00, 0x55, 0x00, 0x69, 0x00, 0x41, 0x00, 0x70, 0x00, 0x70, 0x00, 0x00, 0x00, 0x04, 0x07, 0x14, 0xd4, 0x84, 0x88, 0xf5, 0x14, 0x94, 0x18, 0x02, 0xca, 0x2a, 0x3c, 0xfb, 0x2a, 0x92, 0x1c, 0x0c, 0xd7, 0xa0, 0xd1, 0xf1, 0xe8, 0x52, 0x66, 0xa8, 0xee, 0xa2, 0xb5, 0x75, 0x7a, 0x90, 0x00, 0xaa, 0x2d, 0xa4, 0x76, 0x5a, 0xea, 0x79, 0xb7, 0xb9, 0x37, 0x6a, 0x51, 0x7b, 0x10, 0x64, 0xf6, 0xe1, 0x64, 0xf2, 0x02, 0x67, 0xbe, 0xf7, 0xa8, 0x1b, 0x78, 0xbd, 0xba, 0xce, 0x88, 0x58, 0x64, 0x0c, 0xd6, 0x57, 0xc8, 0x19, 0xa3, 0x5f, 0x05, 0xd6, 0xdb, 0xc6, 0xd0, 0x69, 0xce, 0x48, 0x4b, 0x32, 0xb7, 0xeb, 0x5d, 0xd2, 0x30, 0xf5, 0xc0, 0xf5, 0xb8, 0xba, 0x78, 0x07, 0xa3, 0x2b, 0xfe, 0x9b, 0xdb, 0x34, 0x56, 0x84, 0xec, 0x82, 0xca, 0xae, 0x41, 0x25, 0x70, 0x9c, 0x6b, 0xe9, 0xfe, 0x90, 0x0f, 0xd7, 0x96, 0x1f, 0xe5, 0xe7, 0x94, 0x1f, 0xb2, 0x2a, 0x0c, 0x8d, 0x4b, 0xff, 0x28, 0x29, 0x10, 0x7b, 0xf7, 0xd7, 0x7c, 0xa5, 0xd1, 0x76, 0xb9, 0x05, 0xc8, 0x79, 0xed, 0x0f, 0x90, 0x92, 0x9c, 0xc2, 0xfe, 0xdf, 0x6f, 0x7e, 0x6c, 0x0f, 0x7b, 0xd4, 0xc1, 0x45, 0xdd, 0x34, 0x51, 0x96, 0x39, 0x0f, 0xe5, 0x5e, 0x56, 0xd8, 0x18, 0x05, 0x96, 0xf4, 0x07, 0xa6, 0x42, 0xb3, 0xa0, 0x77, 0xfd, 0x08, 0x19, 0xf2, 0x71, 0x56, 0xcc, 0x9f, 0x86, 0x23, 0xa4, 0x87, 0xcb, 0xa6, 0xfd, 0x58, 0x7e, 0xd4, 0x69, 0x67, 0x15, 0x91, 0x7e, 0x81, 0xf2, 0x7f, 0x13, 0xe5, 0x0d, 0x8b, 0x8a, 0x3c, 0x87, 0x84, 0xeb, 0xe3, 0xce, 0xbd, 0x43, 0xe5, 0xad, 0x2d, 0x84, 0x93, 0x8e, 0x6a, 0x2b, 0x5a, 0x7c, 0x44, 0xfa, 0x52, 0xaa, 0x81, 0xc8, 0x2d, 0x1c, 0xbb, 0xe0, 0x52, 0xdf, 0x00, 0x11, 0xf8, 0x9a, 0x3d, 0xc1, 0x60, 0xb0, 0xe1, 0x33, 0xb5, 0xa3, 0x88, 0xd1, 0x65, 0x19, 0x0a, 0x1a, 0xe7, 0xac, 0x7c, 0xa4, 0xc1, 0x82, 0x87, 0x4e, 0x38, 0xb1, 0x2f, 0x0d, 0xc5, 0x14, 0x87, 0x6f, 0xfd, 0x8d, 0x2e, 0xbc, 0x39, 0xb6, 0xe7, 0xe6, 0xc3, 0xe0, 0xe4, 0xcd, 0x27, 0x84, 0xef, 0x94, 0x42, 0xef, 0x29, 0x8b, 0x90, 0x46, 0x41, 0x3b, 0x81, 0x1b, 0x67, 0xd8, 0xf9, 0x43, 0x59, 0x65, 0xcb, 0x0d, 0xbc, 0xfd, 0x00, 0x92, 0x4f, 0xf4, 0x75, 0x3b, 0xa7, 0xa9, 0x24, 0xfc, 0x50, 0x41, 0x40, 0x79, 0xe0, 0x2d, 0x4f, 0x0a, 0x6a, 0x27, 0x76, 0x6e, 0x52, 0xed, 0x96, 0x69, 0x7b, 0xaf, 0x0f, 0xf7, 0x87, 0x05, 0xd0, 0x45, 0xc2, 0xad, 0x53, 0x14, 0x81, 0x1f, 0xfb, 0x30, 0x04, 0xaa, 0x37, 0x36, 0x61, 0xda, 0x4a, 0x69, 0x1b, 0x34, 0xd8, 0x68, 0xed, 0xd6, 0x02, 0xcf, 0x6c, 0x94, 0x0c, 0xd3, 0xcf, 0x6c, 0x22, 0x79, 0xad, 0xb1, 0xf0, 0xbc, 0x03, 0xa2, 0x46, 0x60, 0xa9, 0xc4, 0x07, 0xc2, 0x21, 0x82, 0xf1, 0xfd, 0xf2, 0xe8, 0x79, 0x32, 0x60, 0xbf, 0xd8, 0xac, 0xa5, 0x22, 0x14, 0x4b, 0xca, 0xc1, 0xd8, 0x4b, 0xeb, 0x7d, 0x3f, 0x57, 0x35, 0xb2, 0xe6, 0x4f, 0x75, 0xb4, 0xb0, 0x60, 0x03, 0x22, 0x53, 0xae, 0x91, 0x79, 0x1d, 0xd6, 0x9b, 0x41, 0x1f, 0x15, 0x86, 0x54, 0x70, 0xb2, 0xde, 0x0d, 0x35, 0x0f, 0x7c, 0xb0, 0x34, 0x72, 0xba, 0x97, 0x60, 0x3b, 0xf0, 0x79, 0xeb, 0xa2, 0xb2, 0x1c, 0x5d, 0xa2, 0x16, 0xb8, 0x87, 0xc5, 0xe9, 0x1b, 0xf6, 0xb5, 0x97, 0x25, 0x6f, 0x38, 0x9f, 0xe3, 0x91, 0xfa, 0x8a, 0x79, 0x98, 0xc3, 0x69, 0x0e, 0xb7, 0xa3, 0x1c, 0x20, 0x05, 0x97, 0xf8, 0xca, 0x14, 0xae, 0x00, 0xd7, 0xc4, 0xf3, 0xc0, 0x14, 0x10, 0x75, 0x6b, 0x34, 0xa0, 0x1b, 0xb5, 0x99, 0x60, 0xf3, 0x5c, 0xb0, 0xc5, 0x57, 0x4e, 0x36, 0xd2, 0x32, 0x84, 0xbf, 0x9e, 0xaa, 0x55, 0x3f, 0x00, 0x27, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe4, 0x07, 0x09, 0x10, 0x10, 0x36, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0xd0, 0x03, 0x00, 0x00, 0x61, 0xdf, 0xe4, 0x8b, 0xca, 0x93, 0xd2, 0x11, 0xaa, 0x0d, 0x00, 0xd0, 0x63, 0xec, 0x28, 0xf6, 0x7e, 0xba, 0x53, 0xf1, 0x64, 0x2d, 0xbf, 0x7d, 0xff, 0x33, 0xc6, 0xa3, 0x2a, 0xdd, 0x86, 0x9f, 0x60, 0x13, 0xfe, 0x16, 0x2e, 0x2c, 0x32, 0xf1, 0xcb, 0xe5, 0x6d, 0xbd, 0x9a, 0xfa, 0x77, 0x59, 0x03, 0x32, 0x4d, 0xbd, 0x60, 0x28, 0xf4, 0xe7, 0x8f, 0x78, 0x4b, 0x29, 0xc6, 0xeb, 0x52, 0xb4, 0x3c, 0x3a, 0xa1, 0x8b, 0x2c, 0xd8, 0xed, 0x6e, 0xa8, 0x60, 0x7c, 0xef, 0x3c, 0xfa, 0xe1, 0xba, 0xfe, 0x11, 0x65, 0x75, 0x5c, 0xf2, 0xe6, 0x14, 0x84, 0x4a, 0x44, 0xbd, 0x9a, 0xfa, 0x77, 0x59, 0x03, 0x32, 0x4d, 0xbd, 0x60, 0x28, 0xf4, 0xe7, 0x8f, 0x78, 0x4b, 0x90, 0xfb, 0xe7, 0x0e, 0x69, 0xd6, 0x33, 0x40, 0x8d, 0x3e, 0x17, 0x0c, 0x68, 0x32, 0xdb, 0xb2, 0xd2, 0x09, 0xe0, 0x27, 0x25, 0x27, 0xdf, 0xb6, 0x3d, 0x49, 0xd2, 0x95, 0x72, 0xa6, 0xf4, 0x4c, 0xbd, 0x9a, 0xfa, 0x77, 0x59, 0x03, 0x32, 0x4d, 0xbd, 0x60, 0x28, 0xf4, 0xe7, 0x8f, 0x78, 0x4b, 0x10, 0x6f, 0xac, 0xea, 0xcf, 0xec, 0xfd, 0x4e, 0x30, 0x3b, 0x74, 0xf4, 0x80, 0xa0, 0x80, 0x98, 0xe2, 0xd0, 0x80, 0x2b, 0x93, 0x6f, 0x8e, 0xc7, 0x74, 0xce, 0x21, 0xf3, 0x16, 0x86, 0x68, 0x9c, 0xbd, 0x9a, 0xfa, 0x77, 0x59, 0x03, 0x32, 0x4d, 0xbd, 0x60, 0x28, 0xf4, 0xe7, 0x8f, 0x78, 0x4b, 0x17, 0x4e, 0x3a, 0x0b, 0x5b, 0x43, 0xc6, 0xa6, 0x07, 0xbb, 0xd3, 0x40, 0x4f, 0x05, 0x34, 0x1e, 0x3d, 0xcf, 0x39, 0x62, 0x67, 0xce, 0x94, 0xf8, 0xb5, 0x0e, 0x2e, 0x23, 0xa9, 0xda, 0x92, 0x0c, 0xbd, 0x9a, 0xfa, 0x77, 0x59, 0x03, 0x32, 0x4d, 0xbd, 0x60, 0x28, 0xf4, 0xe7, 0x8f, 0x78, 0x4b, 0x2b, 0x99, 0xcf, 0x26, 0x42, 0x2e, 0x92, 0xfe, 0x36, 0x5f, 0xbf, 0x4b, 0xc3, 0x0d, 0x27, 0x08, 0x6c, 0x9e, 0xe1, 0x4b, 0x7a, 0x6f, 0xff, 0x44, 0xfb, 0x2f, 0x6b, 0x90, 0x01, 0x69, 0x99, 0x39, 0xbd, 0x9a, 0xfa, 0x77, 0x59, 0x03, 0x32, 0x4d, 0xbd, 0x60, 0x28, 0xf4, 0xe7, 0x8f, 0x78, 0x4b, 0x2e, 0x70, 0x91, 0x67, 0x86, 0xa6, 0xf7, 0x73, 0x51, 0x1f, 0xa7, 0x18, 0x1f, 0xab, 0x0f, 0x1d, 0x70, 0xb5, 0x57, 0xc6, 0x32, 0x2e, 0xa9, 0x23, 0xb2, 0xa8, 0xd3, 0xb9, 0x2b, 0x51, 0xaf, 0x7d, 0xbd, 0x9a, 0xfa, 0x77, 0x59, 0x03, 0x32, 0x4d, 0xbd, 0x60, 0x28, 0xf4, 0xe7, 0x8f, 0x78, 0x4b, 0x3f, 0xce, 0x9b, 0x9f, 0xdf, 0x3e, 0xf0, 0x9d, 0x54, 0x52, 0xb0, 0xf9, 0x5e, 0xe4, 0x81, 0xc2, 0xb7, 0xf0, 0x6d, 0x74, 0x3a, 0x73, 0x79, 0x71, 0x55, 0x8e, 0x70, 0x13, 0x6a, 0xce, 0x3e, 0x73, 0xbd, 0x9a, 0xfa, 0x77, 0x59, 0x03, 0x32, 0x4d, 0xbd, 0x60, 0x28, 0xf4, 0xe7, 0x8f, 0x78, 0x4b, 0x47, 0xcc, 0x08, 0x61, 0x27, 0xe2, 0x06, 0x9a, 0x86, 0xe0, 0x3a, 0x6b, 0xef, 0x2c, 0xd4, 0x10, 0xf8, 0xc5, 0x5a, 0x6d, 0x6b, 0xdb, 0x36, 0x21, 0x68, 0xc3, 0x1b, 0x2c, 0xe3, 0x2a, 0x5a, 0xdf, 0xbd, 0x9a, 0xfa, 0x77, 0x59, 0x03, 0x32, 0x4d, 0xbd, 0x60, 0x28, 0xf4, 0xe7, 0x8f, 0x78, 0x4b, 0x71, 0xf2, 0x90, 0x6f, 0xd2, 0x22, 0x49, 0x7e, 0x54, 0xa3, 0x46, 0x62, 0xab, 0x24, 0x97, 0xfc, 0xc8, 0x10, 0x20, 0x77, 0x0f, 0xf5, 0x13, 0x68, 0xe9, 0xe3, 0xd9, 0xbf, 0xcb, 0xfd, 0x63, 0x75, 0xbd, 0x9a, 0xfa, 0x77, 0x59, 0x03, 0x32, 0x4d, 0xbd, 0x60, 0x28, 0xf4, 0xe7, 0x8f, 0x78, 0x4b, 0x82, 0xdb, 0x3b, 0xce, 0xb4, 0xf6, 0x08, 0x43, 0xce, 0x9d, 0x97, 0xc3, 0xd1, 0x87, 0xcd, 0x9b, 0x59, 0x41, 0xcd, 0x3d, 0xe8, 0x10, 0x0e, 0x58, 0x6f, 0x2b, 0xda, 0x56, 0x37, 0x57, 0x5f, 0x67, 0xbd, 0x9a, 0xfa, 0x77, 0x59, 0x03, 0x32, 0x4d, 0xbd, 0x60, 0x28, 0xf4, 0xe7, 0x8f, 0x78, 0x4b, 0x8a, 0xd6, 0x48, 0x59, 0xf1, 0x95, 0xb5, 0xf5, 0x8d, 0xaf, 0xaa, 0x94, 0x0b, 0x6a, 0x61, 0x67, 0xac, 0xd6, 0x7a, 0x88, 0x6e, 0x8f, 0x46, 0x93, 0x64, 0x17, 0x72, 0x21, 0xc5, 0x59, 0x45, 0xb9, 0xbd, 0x9a, 0xfa, 0x77, 0x59, 0x03, 0x32, 0x4d, 0xbd, 0x60, 0x28, 0xf4, 0xe7, 0x8f, 0x78, 0x4b, 0x8d, 0x8e, 0xa2, 0x89, 0xcf, 0xe7, 0x0a, 0x1c, 0x07, 0xab, 0x73, 0x65, 0xcb, 0x28, 0xee, 0x51, 0xed, 0xd3, 0x3c, 0xf2, 0x50, 0x6d, 0xe8, 0x88, 0xfb, 0xad, 0xd6, 0x0e, 0xbf, 0x80, 0x48, 0x1c, 0xbd, 0x9a, 0xfa, 0x77, 0x59, 0x03, 0x32, 0x4d, 0xbd, 0x60, 0x28, 0xf4, 0xe7, 0x8f, 0x78, 0x4b, 0xae, 0xeb, 0xae, 0x31, 0x51, 0x27, 0x12, 0x73, 0xed, 0x95, 0xaa, 0x2e, 0x67, 0x11, 0x39, 0xed, 0x31, 0xa9, 0x85, 0x67, 0x30, 0x3a, 0x33, 0x22, 0x98, 0xf8, 0x37, 0x09, 0xa9, 0xd5, 0x5a, 0xa1, 0xbd, 0x9a, 0xfa, 0x77, 0x59, 0x03, 0x32, 0x4d, 0xbd, 0x60, 0x28, 0xf4, 0xe7, 0x8f, 0x78, 0x4b, 0xc4, 0x09, 0xbd, 0xac, 0x47, 0x75, 0xad, 0xd8, 0xdb, 0x92, 0xaa, 0x22, 0xb5, 0xb7, 0x18, 0xfb, 0x8c, 0x94, 0xa1, 0x46, 0x2c, 0x1f, 0xe9, 0xa4, 0x16, 0xb9, 0x5d, 0x8a, 0x33, 0x88, 0xc2, 0xfc, 0xbd, 0x9a, 0xfa, 0x77, 0x59, 0x03, 0x32, 0x4d, 0xbd, 0x60, 0x28, 0xf4, 0xe7, 0x8f, 0x78, 0x4b, 0xc6, 0x17, 0xc1, 0xa8, 0xb1, 0xee, 0x2a, 0x81, 0x1c, 0x28, 0xb5, 0xa8, 0x1b, 0x4c, 0x83, 0xd7, 0xc9, 0x8b, 0x5b, 0x0c, 0x27, 0x28, 0x1d, 0x61, 0x02, 0x07, 0xeb, 0xe6, 0x92, 0xc2, 0x96, 0x7f, 0xbd, 0x9a, 0xfa, 0x77, 0x59, 0x03, 0x32, 0x4d, 0xbd, 0x60, 0x28, 0xf4, 0xe7, 0x8f, 0x78, 0x4b, 0xc9, 0x0f, 0x33, 0x66, 0x17, 0xb8, 0xe7, 0xf9, 0x83, 0x97, 0x54, 0x13, 0xc9, 0x97, 0xf1, 0x0b, 0x73, 0xeb, 0x26, 0x7f, 0xd8, 0xa1, 0x0c, 0xb9, 0xe3, 0xbd, 0xbf, 0xc6, 0x67, 0xab, 0xdb, 0x8b, 0xbd, 0x9a, 0xfa, 0x77, 0x59, 0x03, 0x32, 0x4d, 0xbd, 0x60, 0x28, 0xf4, 0xe7, 0x8f, 0x78, 0x4b, 0x64, 0x57, 0x5b, 0xd9, 0x12, 0x78, 0x9a, 0x2e, 0x14, 0xad, 0x56, 0xf6, 0x34, 0x1f, 0x52, 0xaf, 0x6b, 0xf8, 0x0c, 0xf9, 0x44, 0x00, 0x78, 0x59, 0x75, 0xe9, 0xf0, 0x4e, 0x2d, 0x64, 0xd7, 0x45, 0xbd, 0x9a, 0xfa, 0x77, 0x59, 0x03, 0x32, 0x4d, 0xbd, 0x60, 0x28, 0xf4, 0xe7, 0x8f, 0x78, 0x4b, 0x45, 0xc7, 0xc8, 0xae, 0x75, 0x0a, 0xcf, 0xbb, 0x48, 0xfc, 0x37, 0x52, 0x7d, 0x64, 0x12, 0xdd, 0x64, 0x4d, 0xae, 0xd8, 0x91, 0x3c, 0xcd, 0x8a, 0x24, 0xc9, 0x4d, 0x85, 0x69, 0x67, 0xdf, 0x8e, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x61, 0xdf, 0xe4, 0x8b, 0xca, 0x93, 0xd2, 0x11, 0xaa, 0x0d, 0x00, 0xe0, 0x98, 0x03, 0x2b, 0x8c, 0x43, 0x00, 0x6f, 0x00, 0x6e, 0x00, 0x49, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x02, 0x01, 0x0c, 0x00, 0xd0, 0x41, 0x03, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x06, 0x00, 0x00, 0x1f, 0x02, 0x01, 0x0c, 0x00, 0xd0, 0x41, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x01, 0x04, 0x00, 0x02, 0x01, 0x0c, 0x00, 0xd0, 0x41, 0x03, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x06, 0x00, 0x00, 0x1f, 0x02, 0x01, 0x0c, 0x00, 0xd0, 0x6c, 0x00, 0x00, 0x00, 0x61, 0xdf, 0xe4, 0x8b, 0xca, 0x93, 0xd2, 0x11, 0xaa, 0x0d, 0x00, 0xe0, 0x98, 0x03, 0x2b, 0x8c, 0x42, 0x00, 0x6f, 0x00, 0x6f, 0x00, 0x74, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x31, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x55, 0x00, 0x45, 0x00, 0x46, 0x00, 0x49, 0x00, 0x20, 0x00, 0x51, 0x00, 0x45, 0x00, 0x4d, 0x00, 0x55, 0x00, 0x20, 0x00, 0x44, 0x00, 0x56, 0x00, 0x44, 0x00, 0x2d, 0x00, 0x52, 0x00, 0x4f, 0x00, 0x4d, 0x00, 0x20, 0x00, 0x51, 0x00, 0x4d, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x31, 0x00, 0x31, 0x00, 0x20, 0x00, 0x00, 0x00, 0x02, 0x01, 0x0c, 0x00, 0xd0, 0x41, 0x03, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x06, 0x00, 0x02, 0x1f, 0x03, 0x12, 0x0a, 0x00, 0x05, 0x00, 0xff, 0xff, 0x00, 0x00, 0x7f, 0xff, 0x04, 0x00, 0x4e, 0xac, 0x08, 0x81, 0x11, 0x9f, 0x59, 0x4d, 0x85, 0x0e, 0xe2, 0x1a, 0x52, 0x2c, 0x59, 0xb2, 0xff, 0xff, 0xaa, 0x55, 0x3c, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x61, 0xdf, 0xe4, 0x8b, 0xca, 0x93, 0xd2, 0x11, 0xaa, 0x0d, 0x00, 0xe0, 0x98, 0x03, 0x2b, 0x8c, 0x42, 0x00, 0x6f, 0x00, 0x6f, 0x00, 0x74, 0x00, 0x4f, 0x00, 0x72, 0x00, 0x64, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02, 0x00, 0xff, 0xff, 0xaa, 0x55, 0x3d, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00, 0x61, 0xdf, 0xe4, 0x8b, 0xca, 0x93, 0xd2, 0x11, 0xaa, 0x0d, 0x00, 0xe0, 0x98, 0x03, 0x2b, 0x8c, 0x42, 0x00, 0x6f, 0x00, 0x6f, 0x00, 0x74, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x32, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x45, 0x00, 0x46, 0x00, 0x49, 0x00, 0x20, 0x00, 0x49, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x65, 0x00, 0x72, 0x00, 0x6e, 0x00, 0x61, 0x00, 0x6c, 0x00, 0x20, 0x00, 0x53, 0x00, 0x68, 0x00, 0x65, 0x00, 0x6c, 0x00, 0x6c, 0x00, 0x00, 0x00, 0x04, 0x07, 0x14, 0x00, 0xc9, 0xbd, 0xb8, 0x7c, 0xeb, 0xf8, 0x34, 0x4f, 0xaa, 0xea, 0x3e, 0xe4, 0xaf, 0x65, 0x16, 0xa1, 0x04, 0x06, 0x14, 0x00, 0x83, 0xa5, 0x04, 0x7c, 0x3e, 0x9e, 0x1c, 0x4f, 0xad, 0x65, 0xe0, 0x52, 0x68, 0xd0, 0xb4, 0xd1, 0x7f, 0xff, 0x04, 0x00, 0xff, 0xff, 0xaa, 0x55, 0x3c, 0x00, 0x07, 0x00, 0x01, 0xff, 0xaa, 0x55, 0x3f, 0x00, 0x27, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe4, 0x07, 0x09, 0x10, 0x10, 0x36, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x47, 0x0c, 0x00, 0x00, 0xcb, 0xb2, 0x19, 0xd7, 0x3a, 0x3d, 0x96, 0x45, 0xa3, 0xbc, 0xda, 0xd0, 0x0e, 0x67, 0x65, 0x6f, 0x64, 0x00, 0x62, 0x00, 0x00, 0x00, 0xa1, 0x59, 0xc0, 0xa5, 0xe4, 0x94, 0xa7, 0x4a, 0x87, 0xb5, 0xab, 0x15, 0x5c, 0x2b, 0xf0, 0x72, 0x07, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xeb, 0x05, 0x00, 0x00, 0xbd, 0x9a, 0xfa, 0x77, 0x59, 0x03, 0x32, 0x4d, 0xbd, 0x60, 0x28, 0xf4, 0xe7, 0x8f, 0x78, 0x4b, 0x30, 0x82, 0x05, 0xd7, 0x30, 0x82, 0x03, 0xbf, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x0a, 0x61, 0x07, 0x76, 0x56, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x30, 0x81, 0x88, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x13, 0x30, 0x11, 0x06, 0x03, 0x55, 0x04, 0x08, 0x13, 0x0a, 0x57, 0x61, 0x73, 0x68, 0x69, 0x6e, 0x67, 0x74, 0x6f, 0x6e, 0x31, 0x10, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x04, 0x07, 0x13, 0x07, 0x52, 0x65, 0x64, 0x6d, 0x6f, 0x6e, 0x64, 0x31, 0x1e, 0x30, 0x1c, 0x06, 0x03, 0x55, 0x04, 0x6c, 0x00, 0x00, 0x00, 0x61, 0xdf, 0xe4, 0x8b, 0xca, 0x93, 0xd2, 0x11, 0xaa, 0x0d, 0x00, 0xe0, 0x98, 0x03, 0x2b, 0x8c, 0x42, 0x00, 0x6f, 0x00, 0x6f, 0x00, 0x74, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x31, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x55, 0x00, 0x45, 0x00, 0x46, 0x00, 0x49, 0x00, 0x20, 0x00, 0x51, 0x00, 0x45, 0x00, 0x4d, 0x00, 0x55, 0x00, 0x20, 0x00, 0x44, 0x00, 0x56, 0x00, 0x44, 0x00, 0x2d, 0x00, 0x52, 0x00, 0x4f, 0x00, 0x4d, 0x00, 0x20, 0x00, 0x51, 0x00, 0x4d, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x31, 0x00, 0x31, 0x00, 0x20, 0x00, 0x00, 0x00, 0x02, 0x01, 0x0c, 0x00, 0xd0, 0x41, 0x03, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x06, 0x00, 0x02, 0x1f, 0x03, 0x12, 0x0a, 0x00, 0x05, 0x00, 0xff, 0xff, 0x00, 0x00, 0x7f, 0xff, 0x04, 0x00, 0x4e, 0xac, 0x08, 0x81, 0x11, 0x9f, 0x59, 0x4d, 0x85, 0x0e, 0xe2, 0x1a, 0x52, 0x2c, 0x59, 0xb2, 0xff, 0xff, 0xaa, 0x55, 0x3c, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x61, 0xdf, 0xe4, 0x8b, 0xca, 0x93, 0xd2, 0x11, 0xaa, 0x0d, 0x00, 0xe0, 0x98, 0x03, 0x2b, 0x8c, 0x42, 0x00, 0x6f, 0x00, 0x6f, 0x00, 0x74, 0x00, 0x4f, 0x00, 0x72, 0x00, 0x64, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02, 0x00, 0xff, 0xff, 0xaa, 0x55, 0x3d, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00, 0x61, 0xdf, 0xe4, 0x8b, 0xca, 0x93, 0xd2, 0x11, 0xaa, 0x0d, 0x00, 0xe0, 0x98, 0x03, 0x2b, 0x8c, 0x42, 0x00, 0x6f, 0x00, 0x6f, 0x00, 0x74, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x32, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x45, 0x00, 0x46, 0x00, 0x49, 0x00, 0x20, 0x00, 0x49, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x65, 0x00, 0x72, 0x00, 0x6e, 0x00, 0x61, 0x00, 0x6c, 0x00, 0x20, 0x00, 0x53, 0x00, 0x68, 0x00, 0x65, 0x00, 0x6c, 0x00, 0x6c, 0x00, 0x00, 0x00, 0x04, 0x07, 0x14, 0x00, 0xc9, 0xbd, 0xb8, 0x7c, 0xeb, 0xf8, 0x34, 0x4f, 0xaa, 0xea, 0x3e, 0xe4, 0xaf, 0x65, 0x16, 0xa1, 0x04, 0x06, 0x14, 0x00, 0x83, 0xa5, 0x04, 0x7c, 0x3e, 0x9e, 0x1c, 0x4f, 0xad, 0x65, 0xe0, 0x52, 0x68, 0xd0, 0xb4, 0xd1, 0x7f, 0xff, 0x04, 0x00, 0xff, 0xff, 0xaa, 0x55, 0x3c, 0x00, 0x07, 0x00, 0x30, 0x81, 0x91, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x13, 0x30, 0x11, 0x06, 0x03, 0x55, 0x04, 0x08, 0x13, 0x0a, 0x57, 0x61, 0x73, 0x68, 0x69, 0x6e, 0x67, 0x74, 0x6f, 0x6e, 0x31, 0x10, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x04, 0x07, 0x13, 0x07, 0x52, 0x65, 0x64, 0x6d, 0x6f, 0x6e, 0x64, 0x31, 0x1e, 0x30, 0x1c, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x15, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20, 0x43, 0x6f, 0x72, 0x70, 0x6f, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x31, 0x3b, 0x30, 0x39, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x32, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20, 0x43, 0x6f, 0x72, 0x70, 0x6f, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x54, 0x68, 0x69, 0x72, 0x64, 0x20, 0x50, 0x61, 0x72, 0x74, 0x79, 0x20, 0x4d, 0x61, 0x72, 0x6b, 0x65, 0x74, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x31, 0x30, 0x36, 0x32, 0x34, 0x32, 0x30, 0x34, 0x31, 0x32, 0x39, 0x5a, 0x17, 0x0d, 0x32, 0x36, 0x30, 0x36, 0x32, 0x34, 0x32, 0x30, 0x35, 0x31, 0x32, 0x39, 0x5a, 0x30, 0x81, 0x80, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x13, 0x30, 0x11, 0x06, 0x03, 0x55, 0x04, 0x08, 0x13, 0x0a, 0x57, 0x61, 0x73, 0x68, 0x69, 0x6e, 0x67, 0x74, 0x6f, 0x6e, 0x31, 0x10, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x04, 0x07, 0x13, 0x07, 0x52, 0x65, 0x64, 0x6d, 0x6f, 0x6e, 0x64, 0x31, 0x1e, 0x30, 0x1c, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x01, 0x04, 0x14, 0x00, 0x9b, 0x5a, 0x5a, 0x86, 0x5d, 0xb8, 0x4c, 0x47, 0x84, 0x55, 0x65, 0xd1, 0xbe, 0x84, 0x4b, 0xe2, 0x03, 0x0e, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x0a, 0x14, 0x00, 0x53, 0x47, 0xc1, 0xe0, 0xbe, 0xf9, 0xd2, 0x11, 0x9a, 0x0c, 0x00, 0x90, 0x27, 0x3f, 0xc1, 0x4d, 0x7f, 0xff, 0x04, 0x00, 0xff, 0xff, 0xaa, 0x55, 0x3c, 0x00, 0x07, 0x00, 0x20, 0x55, 0x45, 0x46, 0x49, 0x20, 0x43, 0x41, 0x20, 0x32, 0x30, 0x31, 0x31, 0x30, 0x82, 0x01, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x01, 0x0f, 0x00, 0x30, 0x82, 0x01, 0x0a, 0x02, 0x82, 0x01, 0x01, 0x00, 0xa5, 0x08, 0x6c, 0x4c, 0xc7, 0x45, 0x09, 0x6a, 0x4b, 0x0c, 0xa4, 0xc0, 0x87, 0x7f, 0x06, 0x75, 0x0c, 0x43, 0x01, 0x54, 0x64, 0xe0, 0x16, 0x7f, 0x07, 0xed, 0x92, 0x7d, 0x0b, 0xb2, 0x73, 0xbf, 0x0c, 0x0a, 0xc6, 0x4a, 0x45, 0x61, 0xa0, 0xc5, 0x16, 0x2d, 0x96, 0xd3, 0xf5, 0x2b, 0xa0, 0xfb, 0x4d, 0x49, 0x9b, 0x41, 0x80, 0x90, 0x3c, 0xb9, 0x54, 0xfd, 0xe6, 0xbc, 0xd1, 0x9d, 0xc4, 0xa4, 0x18, 0x8a, 0x7f, 0x41, 0x8a, 0x5c, 0x59, 0x83, 0x68, 0x32, 0xbb, 0x8c, 0x47, 0xc9, 0xee, 0x71, 0xbc, 0x21, 0x4f, 0x9a, 0x8a, 0x7c, 0xff, 0x44, 0x3f, 0x8d, 0x8f, 0x32, 0xb2, 0x26, 0x48, 0xae, 0x75, 0xb5, 0xee, 0xc9, 0x4c, 0x1e, 0x4a, 0x19, 0x7e, 0xe4, 0x82, 0x9a, 0x1d, 0x78, 0x77, 0x4d, 0x0c, 0xb0, 0xbd, 0xf6, 0x0f, 0xd3, 0x16, 0xd3, 0xbc, 0xfa, 0x2b, 0xa5, 0x51, 0x38, 0x5d, 0xf5, 0xfb, 0xba, 0xdb, 0x78, 0x02, 0xdb, 0xff, 0xec, 0x0a, 0x1b, 0x96, 0xd5, 0x83, 0xb8, 0x19, 0x13, 0xe9, 0xb6, 0xc0, 0x7b, 0x40, 0x7b, 0xe1, 0x1f, 0x28, 0x27, 0xc9, 0xfa, 0xef, 0x56, 0x5e, 0x1c, 0xe6, 0x7e, 0x94, 0x7e, 0xc0, 0xf0, 0x44, 0xb2, 0x79, 0x39, 0xe5, 0xda, 0xb2, 0x62, 0x8b, 0x4d, 0xbf, 0x38, 0x70, 0xe2, 0x68, 0x24, 0x14, 0xc9, 0x33, 0xa4, 0x08, 0x37, 0xd5, 0x58, 0x69, 0x5e, 0xd3, 0x7c, 0xed, 0xc1, 0x04, 0x53, 0x08, 0xe7, 0x4e, 0xb0, 0x2a, 0x87, 0x63, 0x08, 0x61, 0x6f, 0x63, 0x15, 0x59, 0xea, 0xb2, 0x2b, 0x79, 0xd7, 0x0c, 0x61, 0x67, 0x8a, 0x5b, 0xfd, 0x5e, 0xad, 0x87, 0x7f, 0xba, 0x86, 0x67, 0x4f, 0x71, 0x58, 0x12, 0x22, 0x04, 0x22, 0x22, 0xce, 0x8b, 0xef, 0x54, 0x71, 0x00, 0xce, 0x50, 0x35, 0x58, 0x76, 0x95, 0x08, 0xee, 0x6a, 0xb1, 0xa2, 0x01, 0xd5, 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x82, 0x01, 0x76, 0x30, 0x82, 0x01, 0x72, 0x30, 0x12, 0x06, 0x09, 0x2b, 0x06, 0x01, 0x04, 0x01, 0x82, 0x37, 0x15, 0x01, 0x04, 0x05, 0x02, 0x03, 0x01, 0x00, 0x01, 0x30, 0x23, 0x06, 0x09, 0x2b, 0x06, 0x01, 0x04, 0x01, 0x82, 0x37, 0x15, 0x02, 0x04, 0x16, 0x04, 0x14, 0xf8, 0xc1, 0x6b, 0xb7, 0x7f, 0x77, 0x53, 0x4a, 0xf3, 0x25, 0x37, 0x1d, 0x4e, 0xa1, 0x26, 0x7b, 0x0f, 0x20, 0x70, 0x80, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0x13, 0xad, 0xbf, 0x43, 0x09, 0xbd, 0x82, 0x70, 0x9c, 0x8c, 0xd5, 0x4f, 0x31, 0x6e, 0xd5, 0x22, 0x98, 0x8a, 0x1b, 0xd4, 0x30, 0x19, 0x06, 0x09, 0x2b, 0x06, 0x01, 0x04, 0x01, 0x82, 0x37, 0x14, 0x02, 0x04, 0x0c, 0x1e, 0x0a, 0x00, 0x53, 0x00, 0x75, 0x00, 0x62, 0x00, 0x43, 0x00, 0x41, 0x30, 0x0b, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x04, 0x04, 0x03, 0x02, 0x01, 0x86, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x1f, 0x06, 0x03, 0x55, 0x1d, 0x23, 0x04, 0x18, 0x30, 0x16, 0x80, 0x14, 0x45, 0x66, 0x52, 0x43, 0xe1, 0x7e, 0x58, 0x11, 0xbf, 0xd6, 0x4e, 0x9e, 0x23, 0x55, 0x08, 0x3b, 0x3a, 0x22, 0x6a, 0xa8, 0x30, 0x5c, 0x06, 0x03, 0x55, 0x1d, 0x1f, 0x04, 0x55, 0x30, 0x53, 0x30, 0x51, 0xa0, 0x4f, 0xa0, 0x4d, 0x86, 0x4b, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x63, 0x72, 0x6c, 0x2e, 0x6d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x6b, 0x69, 0x2f, 0x63, 0x72, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x73, 0x2f, 0x4d, 0x69, 0x63, 0x43, 0x6f, 0x72, 0x54, 0x68, 0x69, 0x50, 0x61, 0x72, 0x4d, 0x61, 0x72, 0x52, 0x6f, 0x6f, 0x5f, 0x32, 0x30, 0x31, 0x30, 0x2d, 0x31, 0x30, 0x2d, 0x30, 0x35, 0x2e, 0x63, 0x72, 0x6c, 0x30, 0x60, 0x06, 0x08, 0x2b, 0x06, 0x01, 0x05, 0x05, 0x07, 0x01, 0x01, 0x04, 0x54, 0x30, 0x52, 0x30, 0x50, 0x06, 0x08, 0x2b, 0x06, 0x01, 0x05, 0x05, 0x07, 0x30, 0x02, 0x86, 0x44, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x6d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x6b, 0x69, 0x2f, 0x63, 0x65, 0x72, 0x74, 0x73, 0x2f, 0x4d, 0x69, 0x63, 0x43, 0x6f, 0x72, 0x54, 0x68, 0x69, 0x50, 0x61, 0x72, 0x4d, 0x61, 0x72, 0x52, 0x6f, 0x6f, 0x5f, 0x32, 0x30, 0x31, 0x30, 0x2d, 0x31, 0x30, 0x2d, 0x30, 0x35, 0x2e, 0x63, 0x72, 0x74, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x03, 0x82, 0x02, 0xaa, 0x55, 0x3c, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x92, 0x00, 0x00, 0x00, 0x61, 0xdf, 0xe4, 0x8b, 0xca, 0x93, 0xd2, 0x11, 0xaa, 0x0d, 0x00, 0xe0, 0x98, 0x03, 0x2b, 0x8c, 0x45, 0x00, 0x72, 0x00, 0x72, 0x00, 0x4f, 0x00, 0x75, 0x00, 0x74, 0x00, 0x00, 0x00, 0x02, 0x01, 0x0c, 0x00, 0xd0, 0x41, 0x03, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x06, 0x00, 0x00, 0x1f, 0x02, 0x01, 0x0c, 0x00, 0xd0, 0x41, 0x01, 0x00, 0x00, 0x00, 0x61, 0xdf, 0xe4, 0x8b, 0xca, 0x93, 0xd2, 0x11, 0xaa, 0x0d, 0x00, 0xe0, 0x98, 0x03, 0x2b, 0x8c, 0x42, 0x00, 0x6f, 0x00, 0x6f, 0x00, 0x74, 0x00, 0x4f, 0x00, 0x72, 0x00, 0x64, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02, 0x00, 0x03, 0x00, 0x04, 0x00, 0x05, 0x00, 0x06, 0x00, 0xff, 0xff, 0xaa, 0x55, 0x3f, 0x00, 0x07, 0x00, 0x82, 0x01, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x01, 0x0f, 0x00, 0x30, 0x82, 0x01, 0x0a, 0x02, 0x82, 0x01, 0x01, 0x00, 0x90, 0x1f, 0x84, 0x7b, 0x8d, 0xbc, 0xeb, 0x97, 0x26, 0x82, 0x6d, 0x88, 0xab, 0x8a, 0xc9, 0x8c, 0x68, 0x70, 0xf9, 0xdf, 0x4b, 0x07, 0xb2, 0x37, 0x83, 0x0b, 0x02, 0xc8, 0x67, 0x68, 0x30, 0x9e, 0xe3, 0xf0, 0xf0, 0x99, 0x4a, 0xb8, 0x59, 0x57, 0xc6, 0x41, 0xf6, 0x38, 0x8b, 0xfe, 0x66, 0x4c, 0x49, 0xe9, 0x37, 0x37, 0x92, 0x2e, 0x98, 0x01, 0x1e, 0x5b, 0x14, 0x50, 0xe6, 0xa8, 0x8d, 0x25, 0x0d, 0xf5, 0x86, 0xe6, 0xab, 0x30, 0xcb, 0x40, 0x16, 0xea, 0x8d, 0x8b, 0x16, 0x86, 0x70, 0x43, 0x37, 0xf2, 0xce, 0xc0, 0x91, 0xdf, 0x71, 0x14, 0x8e, 0x99, 0x0e, 0x89, 0xb6, 0x4c, 0x6d, 0x24, 0x1e, 0x8c, 0xe4, 0x2f, 0x4f, 0x25, 0xd0, 0xba, 0x06, 0xf8, 0xc6, 0xe8, 0x19, 0x18, 0x76, 0x73, 0x1d, 0x81, 0x6d, 0xa8, 0xd8, 0x05, 0xcf, 0x3a, 0xc8, 0x7b, 0x28, 0xc8, 0x36, 0xa3, 0x16, 0x0d, 0x29, 0x8c, 0x99, 0x9a, 0x68, 0xdc, 0xab, 0xc0, 0x4d, 0x8d, 0xbf, 0x5a, 0xbb, 0x2b, 0xa9, 0x39, 0x4b, 0x04, 0x97, 0x1c, 0xf9, 0x36, 0xbb, 0xc5, 0x3a, 0x86, 0x04, 0xae, 0xaf, 0xd4, 0x82, 0x7b, 0xe0, 0xab, 0xde, 0x49, 0x05, 0x68, 0xfc, 0xf6, 0xae, 0x68, 0x1a, 0x6c, 0x90, 0x4d, 0x57, 0x19, 0x3c, 0x64, 0x66, 0x03, 0xf6, 0xc7, 0x52, 0x9b, 0xf7, 0x94, 0xcf, 0x93, 0x6a, 0xa1, 0x68, 0xc9, 0xaa, 0xcf, 0x99, 0x6b, 0xbc, 0xaa, 0x5e, 0x08, 0xe7, 0x39, 0x1c, 0xf7, 0xf8, 0x0f, 0xba, 0x06, 0x7e, 0xf1, 0xcb, 0xe8, 0x76, 0xdd, 0xfe, 0x22, 0xda, 0xad, 0x3a, 0x5e, 0x5b, 0x34, 0xea, 0xb3, 0xc9, 0xe0, 0x4d, 0x04, 0x29, 0x7e, 0xb8, 0x60, 0xb9, 0x05, 0xef, 0xb5, 0xd9, 0x17, 0x58, 0x56, 0x16, 0x60, 0xb9, 0x30, 0x32, 0xf0, 0x36, 0x4a, 0xc3, 0xf2, 0x79, 0x8d, 0x12, 0x40, 0x70, 0xf3, 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x7b, 0x30, 0x79, 0x30, 0x09, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x04, 0x02, 0x30, 0x00, 0x30, 0x2c, 0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x86, 0xf8, 0x42, 0x01, 0x0d, 0x04, 0x1f, 0x16, 0x1d, 0x4f, 0x70, 0x65, 0x6e, 0x53, 0x53, 0x4c, 0x20, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x20, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0x3c, 0xe9, 0x60, 0xe3, 0xff, 0x19, 0xa1, 0x0a, 0x7b, 0xa3, 0x42, 0xf4, 0x8d, 0x42, 0x2e, 0xb4, 0xd5, 0x9c, 0x72, 0xec, 0x30, 0x1f, 0x06, 0x03, 0x55, 0x1d, 0x23, 0x04, 0x18, 0x30, 0x16, 0x80, 0x14, 0x3c, 0xe9, 0x60, 0xe3, 0xff, 0x19, 0xa1, 0x0a, 0x7b, 0xa3, 0x42, 0xf4, 0x8d, 0x42, 0x2e, 0xb4, 0xd5, 0x9c, 0x72, 0xec, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x03, 0x82, 0x01, 0x01, 0x00, 0x5c, 0x4d, 0x92, 0x88, 0xb4, 0x82, 0x5f, 0x1d, 0xad, 0x8b, 0x11, 0xec, 0xdf, 0x06, 0xa6, 0x7a, 0xa5, 0x2b, 0x9f, 0x37, 0x55, 0x0c, 0x8d, 0x6e, 0x05, 0x00, 0xad, 0xb7, 0x0c, 0x41, 0x89, 0x69, 0xcf, 0xd6, 0x65, 0x06, 0x9b, 0x51, 0x78, 0xd2, 0xad, 0xc7, 0xbf, 0x9c, 0xdc, 0x05, 0x73, 0x7f, 0xe7, 0x1e, 0x39, 0x13, 0xb4, 0xea, 0xb6, 0x30, 0x7d, 0x40, 0x75, 0xab, 0x9c, 0x43, 0x0b, 0xdf, 0xb0, 0xc2, 0x1b, 0xbf, 0x30, 0xe0, 0xf4, 0xfe, 0xc0, 0xdb, 0x62, 0x21, 0x98, 0xf6, 0xc5, 0xaf, 0xde, 0x3b, 0x4f, 0x49, 0x0a, 0xe6, 0x1e, 0xf9, 0x86, 0xb0, 0x3f, 0x0d, 0xd6, 0xd4, 0x46, 0x37, 0xdb, 0x54, 0x74, 0x5e, 0xff, 0x11, 0xc2, 0x60, 0xc6, 0x70, 0x58, 0xc5, 0x1c, 0x6f, 0xec, 0xb2, 0xd8, 0x6e, 0x6f, 0xc3, 0xbc, 0x33, 0x87, 0x38, 0xa4, 0xf3, 0x44, 0x64, 0x9c, 0x34, 0x3b, 0x28, 0x94, 0x26, 0x78, 0x27, 0x9f, 0x16, 0x17, 0xe8, 0x3b, 0x69, 0x0a, 0x25, 0xa9, 0x73, 0x36, 0x7e, 0x9e, 0x37, 0x5c, 0xec, 0xe8, 0x3f, 0xdb, 0x91, 0xf9, 0x12, 0xb3, 0x3d, 0xce, 0xe7, 0xdd, 0x15, 0xc3, 0xae, 0x8c, 0x05, 0x20, 0x61, 0x9b, 0x95, 0xde, 0x9b, 0xaf, 0xfa, 0xb1, 0x5c, 0x1c, 0xe5, 0x97, 0xe7, 0xc3, 0x34, 0x11, 0x85, 0xf5, 0x8a, 0x27, 0x26, 0xa4, 0x70, 0x36, 0xec, 0x0c, 0xf6, 0x83, 0x3d, 0x90, 0xf7, 0x36, 0xf3, 0xf9, 0xf3, 0x15, 0xd4, 0x90, 0x62, 0xbe, 0x53, 0xb4, 0xaf, 0xd3, 0x49, 0xaf, 0xef, 0xf4, 0x73, 0xe8, 0x7b, 0x76, 0xe4, 0x44, 0x2a, 0x37, 0xba, 0x81, 0xa4, 0x99, 0x0c, 0x3a, 0x31, 0x24, 0x71, 0xa0, 0xe4, 0xe4, 0xb7, 0x1a, 0xcb, 0x47, 0xe4, 0xaa, 0x22, 0xcf, 0xef, 0x75, 0x61, 0x80, 0xe3, 0x43, 0xb7, 0x48, 0x57, 0x73, 0x11, 0x3d, 0x78, 0x9b, 0x69, 0xa1, 0x59, 0xc0, 0xa5, 0xe4, 0x94, 0xa7, 0x4a, 0x87, 0xb5, 0xab, 0x15, 0x5c, 0x2b, 0xf0, 0x72, 0x18, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x05, 0x00, 0x00, 0xbd, 0x9a, 0xfa, 0x77, 0x59, 0x03, 0x32, 0x4d, 0xbd, 0x60, 0x28, 0xf4, 0xe7, 0x8f, 0x78, 0x4b, 0x30, 0x82, 0x05, 0xe8, 0x30, 0x82, 0x03, 0xd0, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x0a, 0x61, 0x0a, 0xd1, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x08, 0x01, 0x01, 0x03, 0x0a, 0x14, 0x00, 0x53, 0x47, 0xc1, 0xe0, 0xbe, 0xf9, 0xd2, 0x11, 0x9a, 0x0c, 0x00, 0x90, 0x27, 0x3f, 0xc1, 0x4d, 0x7f, 0x01, 0x04, 0x00, 0x02, 0x01, 0x0c, 0x00, 0xd0, 0x41, 0x03, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x06, 0x00, 0x00, 0x1f, 0x02, 0x01, 0x0c, 0x00, 0xd0, 0x41, 0x01, 0x05, 0x01, 0x00, 0x00, 0x00, 0x03, 0x0e, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc2, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x01, 0x01, 0x03, 0x0a, 0x14, 0x00, 0x53, 0x47, 0xc1, 0xe0, 0xbe, 0xf9, 0xff, 0xaa, 0x55, 0x3c, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0xd1, 0x00, 0x00, 0x00, 0x61, 0xdf, 0xe4, 0x8b, 0xca, 0x93, 0xd2, 0x11, 0xaa, 0x0d, 0x00, 0xe0, 0x98, 0x03, 0x2b, 0x8c, 0x45, 0x00, 0x72, 0x00, 0x72, 0x00, 0x4f, 0x00, 0x75, 0x00, 0x74, 0x00, 0x00, 0x00, 0x02, 0x01, 0x0c, 0x00, 0xd0, 0x41, 0x03, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x06, 0x00, 0x00, 0x1f, 0x02, 0x01, 0x0c, 0x00, 0xd0, 0x41, 0x01, 0x05, 0x00, 0x00, 0x00, 0x00, 0x03, 0x0e, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc2, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x01, 0x01, 0x03, 0x0a, 0x14, 0x00, 0x53, 0x47, 0xc1, 0xe0, 0xbe, 0xf9, 0xd2]) python-uefivars-1.2/pyuefivars/edk2.py000066400000000000000000000330041457232171300201200ustar00rootroot00000000000000#!/usr/bin/env python3 # # Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. # SPDX-License-Identifier: MIT import struct import tempfile import os from .aws_file import AWSVarStoreFile from .varstore import UEFIVar, UEFIVarStore class EDK2Cert(object): def __init__(self, name: str, guid: bytes, digest: bytes): self.name = name self.guid = guid self.digest = digest class EDK2CertDB(object): GUID_CERTDB = b'\x6e\xe5\xbe\xd9\xdc\x75\xd9\x49\xb4\xd7\xb5\x34\x21\x0f\x63\x7a' def __init__(self, uefivar: UEFIVar = None): self.certs = [] if uefivar is not None: self.init_from_var(uefivar) def init_from_var(self, uefivar: UEFIVar): file = tempfile.SpooledTemporaryFile() file.write(uefivar.data) file.seek(0, os.SEEK_SET) file = AWSVarStoreFile(file) size = file.read32() if size != len(uefivar.data): raise Exception("Invalid certdb length") size = size - 4 while size != 0: guid = file.readguid() cert_node_size = file.read32() cert_node_size # Unused, silence F841 name_size = file.read32() * 2 digest_size = file.read32() name = file.read(name_size).decode('utf-16le').rstrip('\0') digest = file.read(digest_size) self.certs.append(EDK2Cert(name, guid, digest)) size = size - (16 + 4 + 4 + 4 + name_size + digest_size) def to_var(self, vars: UEFIVar): file = tempfile.SpooledTemporaryFile() file = AWSVarStoreFile(file) file.write32(0) # file size, gets patched in later pubkeyidx = 0 for var in vars: if not var.digest: continue name_size = len(var.name) + 1 digest_size = len(var.digest) file.writeguid(var.guid) file.write32(16 + 4 + 4 + 4 + name_size + digest_size) file.write32(name_size) file.write32(digest_size) file.write(var.name.encode('utf-16le') + b'\0\0') file.write(var.digest) var.pubkeyidx = pubkeyidx pubkeyidx = pubkeyidx + 1 filesize = file.file.tell() file.file.seek(0, os.SEEK_SET) file.write32(filesize) file.file.seek(0, os.SEEK_SET) data = file.file.read() return UEFIVar("certdb", data, self.GUID_CERTDB, 0x7) class EDK2UEFIVarStore(UEFIVarStore): GUID_CERTDB = b'\x6e\xe5\xbe\xd9\xdc\x75\xd9\x49\xb4\xd7\xb5\x34\x21\x0f\x63\x7a' GUID_NVFS = b'\x8d\x2b\xf1\xff\x96\x76\x8b\x4c\xa9\x85\x27\x47\x07\x5b\x4f\x50' GUID_VARSTORE = b'\x78\x2c\xf3\xaa\x7b\x94\x9a\x43\xa1\x80\x2e\x14\x4e\xc3\x77\x92' STATE_SETTLED = 0x3f VARSTORE_STATUS = b'\x5a\xfe\x00\x00\x00\x00\x00\x00' DEFAULT_LENGTH = 540672 EFI_FVB2_READ_DISABLED_CAP = 0x00000001 EFI_FVB2_READ_ENABLED_CAP = 0x00000002 EFI_FVB2_READ_STATUS = 0x00000004 EFI_FVB2_WRITE_DISABLED_CAP = 0x00000008 EFI_FVB2_WRITE_ENABLED_CAP = 0x00000010 EFI_FVB2_WRITE_STATUS = 0x00000020 EFI_FVB2_LOCK_CAP = 0x00000040 EFI_FVB2_LOCK_STATUS = 0x00000080 EFI_FVB2_STICKY_WRITE = 0x00000200 EFI_FVB2_MEMORY_MAPPED = 0x00000400 EFI_FVB2_ERASE_POLARITY = 0x00000800 EFI_FVB2_READ_LOCK_CAP = 0x00001000 EFI_FVB2_READ_LOCK_STATUS = 0x00002000 EFI_FVB2_WRITE_LOCK_CAP = 0x00004000 EFI_FVB2_WRITE_LOCK_STATUS = 0x00008000 EFI_FVB2_ALIGNMENT = 0x001F0000 EFI_FVB2_WEAK_ALIGNMENT = 0x80000000 EFI_FVB2_ALIGNMENT_1 = 0x00000000 EFI_FVB2_ALIGNMENT_2 = 0x00010000 EFI_FVB2_ALIGNMENT_4 = 0x00020000 EFI_FVB2_ALIGNMENT_8 = 0x00030000 EFI_FVB2_ALIGNMENT_16 = 0x00040000 EFI_FVB2_ALIGNMENT_32 = 0x00050000 EFI_FVB2_ALIGNMENT_64 = 0x00060000 EFI_FVB2_ALIGNMENT_128 = 0x00070000 EFI_FVB2_ALIGNMENT_256 = 0x00080000 EFI_FVB2_ALIGNMENT_512 = 0x00090000 EFI_FVB2_ALIGNMENT_1K = 0x000A0000 EFI_FVB2_ALIGNMENT_2K = 0x000B0000 EFI_FVB2_ALIGNMENT_4K = 0x000C0000 EFI_FVB2_ALIGNMENT_8K = 0x000D0000 EFI_FVB2_ALIGNMENT_16K = 0x000E0000 EFI_FVB2_ALIGNMENT_32K = 0x000F0000 EFI_FVB2_ALIGNMENT_64K = 0x00100000 EFI_FVB2_ALIGNMENT_128K = 0x00110000 EFI_FVB2_ALIGNMENT_256K = 0x00120000 EFI_FVB2_ALIGNMENT_512K = 0x00130000 EFI_FVB2_ALIGNMENT_1M = 0x00140000 EFI_FVB2_ALIGNMENT_2M = 0x00150000 EFI_FVB2_ALIGNMENT_4M = 0x00160000 EFI_FVB2_ALIGNMENT_8M = 0x00170000 EFI_FVB2_ALIGNMENT_16M = 0x00180000 EFI_FVB2_ALIGNMENT_32M = 0x00190000 EFI_FVB2_ALIGNMENT_64M = 0x001A0000 EFI_FVB2_ALIGNMENT_128M = 0x001B0000 EFI_FVB2_ALIGNMENT_256M = 0x001C0000 EFI_FVB2_ALIGNMENT_512M = 0x001D0000 EFI_FVB2_ALIGNMENT_1G = 0x001E0000 EFI_FVB2_ALIGNMENT_2G = 0x001F0000 AAVMF_BLOCK_SIZE = 0x00040000 OVMF_BLOCK_SIZE = 0x00001000 def __init__(self, data): super().__init__() self.certdb = EDK2CertDB() # Get a streaming file object file = tempfile.SpooledTemporaryFile() file.write(data) file.seek(0, os.SEEK_SET) file = AWSVarStoreFile(file) # Parse FV header zerovector = file.read(0x10) if zerovector != b'\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0': raise Exception("Invalid Zero Vector: %s" % zerovector) fsguid = file.readguid() if fsguid != self.GUID_NVFS: raise Exception("Invalid GUID: %s" % fsguid) self.length = file.read64() if self.length > len(data): raise Exception("Invalid length: %s" % self.length) sig = file.read(4) if sig != b'_FVH': raise Exception('Invalid FVH signature: %s' % sig) self.attrs = file.read32() hlength = file.read16() csum_hdr = file.read16() if (self.csum16(data[:hlength]) != 0): raise Exception("Invalid header checksum: 0x%x" % csum_hdr) # Ensure there isn't an extension header we don't understand ext_hdr_offset = file.read16() if ext_hdr_offset != 0: raise Exception('FVH with extension header not supported') # Reserved field (should always be 0) reserved = file.read8() if reserved != 0: raise Exception('Wrong value for FVH.Reserved: %s' % reserved) # Read revision rev = file.read8() if rev != 0x2: raise Exception('Invalid FVH Revision: 0x%x' % rev) # Read blockmap self.blockmap = [] total_bytes = 0 while True: block_cnt, block_bytes = file.read32(), file.read32() if block_cnt == 0 and block_bytes == 0: break self.blockmap.append((block_cnt, block_bytes)) total_bytes += block_cnt * block_bytes if self.length != total_bytes: raise Exception('Invalid blockmap: %s' % self.blockmap) # Verify header length (ext headers not supported so must match current pos) if hlength != file.file.tell(): raise Exception('Invalid header length: %s' % hlength) # Parse varstore header vsguid = file.readguid() if vsguid != self.GUID_VARSTORE: raise Exception('Invalid Varstore GUID: %s' % vsguid) self.varsize = file.read32() status = file.read(8) if status != self.VARSTORE_STATUS: raise Exception('Invalid Varstore Status: %s' % status) # Extract all variables while file.read16() == 0x55aa: state = file.read8() file.read8() attr = file.read32() monotoniccount = file.read64() monotoniccount # Unused, silence F841 timestamp = file.readtimestamp() pubkeyidx = file.read32() pubkeyidx # Unused, silence F841 namelen = file.read32() datalen = file.read32() guid = file.readguid() name = file.read(namelen).decode('utf-16le').rstrip('\0') data = file.read(datalen) if state == self.STATE_SETTLED: if timestamp == self.EMPTY_TIMESTAMP: timestamp = None var = UEFIVar(name, data, guid, attr, timestamp, None) if name == "certdb" and guid == self.GUID_CERTDB: self.certdb = EDK2CertDB(var) else: self.vars.append(var) file.file.seek((file.file.tell() + 0x3) & ~0x3, os.SEEK_SET) # Extract all certdb entries into digest fields for cert in self.certdb.certs: for var in self.vars: if var.name == cert.name and var.guid == cert.guid: var.digest = cert.digest def csum16(self, var: bytes): u16 = struct.unpack("<" + str(int(len(var) / 2)) + "H", var) csum = 0 for b in u16: # print("0x%x + 0x%x = 0x%x" % (csum, b, csum + b)) csum = csum + b return (csum & 0xffff) def write_var(self, raw: AWSVarStoreFile, var: UEFIVar): raw.write16(0x55aa) raw.write8(self.STATE_SETTLED) raw.write8(0) raw.write32(var.attr) raw.write64(0) # monotonic count if var.timestamp: raw.write(var.timestamp) else: raw.write(b'\0' * 16) if hasattr(var, 'pubkeyidx'): raw.write32(var.pubkeyidx) else: raw.write32(0) raw.write32(len(var.name + '\0') * 2) raw.write32(len(var.data)) raw.write(var.guid) raw.write((var.name + '\0').encode('utf-16le')) raw.write(var.data) raw.file.seek((raw.file.tell() + 0x3) & ~0x3, os.SEEK_SET) def __bytes__(self) -> bytes: if not hasattr(self, 'certdb'): self.certdb = EDK2CertDB() if not hasattr(self, 'length'): self.length = self.DEFAULT_LENGTH if not hasattr(self, 'attrs'): self.attrs = self.EFI_FVB2_READ_DISABLED_CAP | \ self.EFI_FVB2_READ_ENABLED_CAP | \ self.EFI_FVB2_READ_STATUS | \ self.EFI_FVB2_WRITE_DISABLED_CAP | \ self.EFI_FVB2_WRITE_ENABLED_CAP | \ self.EFI_FVB2_WRITE_STATUS | \ self.EFI_FVB2_LOCK_CAP | \ self.EFI_FVB2_LOCK_STATUS | \ self.EFI_FVB2_STICKY_WRITE | \ self.EFI_FVB2_MEMORY_MAPPED | \ self.EFI_FVB2_ERASE_POLARITY | \ self.EFI_FVB2_READ_LOCK_CAP | \ self.EFI_FVB2_READ_LOCK_STATUS | \ self.EFI_FVB2_WRITE_LOCK_CAP | \ self.EFI_FVB2_WRITE_LOCK_STATUS | \ self.EFI_FVB2_ALIGNMENT_16 if not hasattr(self, 'varsize'): self.varsize = int(self.length / 2) - 8264 if not hasattr(self, 'blockmap'): # What is a sensible default here? Examples: # - AAVMF uses 256K blocks (virtual NOR) # - OVMF uses 4K blocks (page size) self.blockmap = [(self.length // self.OVMF_BLOCK_SIZE, self.OVMF_BLOCK_SIZE)] # Assemble the flash file raw = AWSVarStoreFile(tempfile.SpooledTemporaryFile()) # Write FV header raw.write(b'\0' * 16) raw.write(self.GUID_NVFS) raw.write64(self.length) raw.write(b'_FVH') raw.write32(self.attrs) # Leave room for header length hlength_pos = raw.file.tell() raw.write16(0) # Skip checksum - need to fill in later csum_pos = raw.file.tell() raw.write16(0) # No ext header offset + set reversed byte to 0 raw.write(b'\0' * 3) # Revision raw.write8(0x2) # Blockmap for block_cnt, block_bytes in self.blockmap: raw.write32(block_cnt) raw.write32(block_bytes) raw.write32(0) raw.write32(0) # Write header length hlength = raw.file.tell() raw.file.seek(hlength_pos, os.SEEK_SET) raw.write16(hlength) # Checksum raw.file.seek(0, os.SEEK_SET) fvh = raw.file.read(hlength) raw.file.seek(csum_pos, os.SEEK_SET) raw.write16((0x10000 - self.csum16(fvh) & 0xffff)) # Go to end of FV header raw.file.seek(hlength, os.SEEK_SET) # Write varstore header raw.write(self.GUID_VARSTORE) raw.write32(self.varsize) raw.write(self.VARSTORE_STATUS) # Write variables self.write_var(raw, self.certdb.to_var(self.vars)) for var in self.vars: self.write_var(raw, var) # Make sure it all fits if raw.file.tell() > self.length: raise Exception("Can not fit variables into store") # Expand to maximum file size raw.file.seek(self.length - 1, os.SEEK_SET) raw.write8(0) raw.file.seek(0, os.SEEK_SET) return raw.file.read() def set_output_options(self, options): for option in [option.strip().split("=") for option in options]: if option[0] == 'filesize': if (len(option) != 2 or not option[1]): raise SystemExit( 'option "filesize" requires a second argument' ) self.length = int(option[1]) * 1024 else: raise SystemExit( 'Unknown Option type "{}"'.format(option) ) python-uefivars-1.2/pyuefivars/efivarfs.py000066400000000000000000000043321457232171300211020ustar00rootroot00000000000000#!/usr/bin/env python3 # # Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. # SPDX-License-Identifier: MIT import os from .varstore import UEFIVar, UEFIVarStore import uuid import sys EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS = 0x20 class EFIVARFSUEFIVarStore(UEFIVarStore): """ Varstore class to ingest an efivarfs directory as UEFI variables. Please beware that efivarfs only exposes UEFI variables that execute at runtime, so any boot time variables are unavailable. Also, additional metadata such as secure variable details are not readable through efivarfs. """ def __init__(self, path): super().__init__() self.is_empty = False if not path: path = '/sys/firmware/efi/efivars' if not os.path.isdir(path): raise Exception(f'"{path}" is not a valid efivarfs path') var_names = os.listdir(path) # example: 'X-Nitro-BootServicesExited-8be4df61-93ca-11d2-aa0d-00e098032b8c' for var_name in var_names: # efivarfs file name are f'{name}-{guid}' s = var_name.split('-') try: # The last 5 elements make up the GUID guid = uuid.UUID('-'.join(s[-5:])).bytes_le except ValueError: raise Exception(f'Invalid efivarfs file "{var_name}"') # Anything before that is the name of the variable name = '-'.join(s[:-5]) # efivarfs file contents are f'{attr.le32}{data}' content = open(os.path.join(path, var_name), 'rb').read() data = content[4:] attr = int.from_bytes(content[:4], "little") # UEFI Secure Boot variables are special; they contain hidden # key material that we can not extract from efivarfs. Skip them. if attr & EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS: print(f'Skipping authenticated variable "{var_name}"', file=sys.stderr) continue # Now that we reassembled everything, remember the variable self.vars.append(UEFIVar(name, data, guid, attr)) def __str__(self) -> str: raise Exception('Unable to serialize efivarfs into a file') python-uefivars-1.2/pyuefivars/json.py000066400000000000000000000043121457232171300202440ustar00rootroot00000000000000#!/usr/bin/env python3 # # Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. # SPDX-License-Identifier: MIT import json import uuid from .varstore import UEFIVar, UEFIVarStore class JSONVar(UEFIVar): def __init__(self, jvar): name = jvar['name'] data = bytes.fromhex(jvar['data']) guid = uuid.UUID(jvar['guid']).bytes_le attr = int(jvar['attr']) timestamp = None digest = None if 'timestamp' in jvar: timestamp = bytes.fromhex(jvar['timestamp']) if 'digest' in jvar: digest = bytes.fromhex(jvar['digest']) super().__init__(name, data, guid, attr, timestamp, digest) def __dict__(self): super().__dict__() class JSONUEFIVarStore(UEFIVarStore): current_version = 2 def __init__(self, data): super().__init__() # Read the JSON file jdata = json.loads(data.decode('utf-8')) vardata = [] if isinstance(jdata, list): self.version = 1 vardata = jdata else: self.version = jdata.get('version', self.current_version) vardata = jdata.get('variables', []) if self.version > self.current_version: raise SystemExit( 'Unknown Version "{}", this tool only supports up to version "{}"'.format( self.version, self.current_version) ) # Copy all JSON elements to the UEFIVars for the store for jvar in vardata: new_var = JSONVar(jvar) new_var.__class__ = UEFIVar self.vars.append(new_var) def __bytes__(self): return self.__str__().encode('utf-8') def prepare(self, var): new_var = var.__dict__() if 'guid' in new_var: new_var["guid"] = str(uuid.UUID(bytes_le=var.guid)) for key in new_var: if isinstance(new_var[key], bytes): new_var[key] = new_var[key].hex() return new_var def __str__(self): encoded_vars = list(map(self.prepare, self.vars)) store = { "version": self.current_version, "variables": encoded_vars, } return json.dumps(store, indent=4) python-uefivars-1.2/pyuefivars/varstore.py000066400000000000000000000024401457232171300211400ustar00rootroot00000000000000#!/usr/bin/env python3 # # Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. # SPDX-License-Identifier: MIT import sys class UEFIVar(object): def __init__(self, name: str, data: bytes, guid: bytes, attr: int, timestamp: bytes = None, digest: bytes = None): self.name = name self.data = data self.guid = guid self.attr = attr self.timestamp = timestamp self.digest = digest def __dict__(self): var = {} var['name'] = self.name var['data'] = self.data var['guid'] = self.guid var['attr'] = self.attr if self.timestamp is not None: var['timestamp'] = self.timestamp if self.digest is not None: var['digest'] = self.digest return var class UEFIVarStore(object): EMPTY_TIMESTAMP = b'\0' * 16 EMPTY_DIGEST = b'\0' * 32 def __init__(self, data=''): self.vars = [] def __dict__(self): return self.vars def __bytes__(self): print("This output backend does not implement writing the variable store", file=sys.stderr) sys.exit() def set_output_options(self, options): print("This output backend does not implement output options: {}".format(options), file=sys.stderr) sys.exit() python-uefivars-1.2/requirements.txt000066400000000000000000000000271457232171300200070ustar00rootroot00000000000000google_crc32c deepdiff python-uefivars-1.2/setup.cfg000066400000000000000000000001361457232171300163450ustar00rootroot00000000000000[pep8] max-line-length = 120 ignore = E221 [flake8] max-line-length=120 extend-ignore = E221 python-uefivars-1.2/setup.py000066400000000000000000000016061457232171300162410ustar00rootroot00000000000000#!/usr/bin/env python3 # # Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. # SPDX-License-Identifier: MIT import setuptools with open("README.md", "r") as fh: long_description = fh.read() setuptools.setup( name="uefivars", version="1.2", author="Amazon Web Services", author_email="graf@amazon.com", description="UEFI variable store tools", long_description=long_description, long_description_content_type='text/markdown', url="https://github.com/awslabs/python-uefivars", packages=setuptools.find_packages(), install_requires=['google-crc32c', 'deepdiff'], entry_points={ 'console_scripts': [ 'uefivars = pyuefivars:main', ], }, classifiers=[ "Programming Language :: Python :: 3", "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", ], ) python-uefivars-1.2/snap/000077500000000000000000000000001457232171300154655ustar00rootroot00000000000000python-uefivars-1.2/snap/snapcraft.yaml000066400000000000000000000006761457232171300203430ustar00rootroot00000000000000name: uefivars version: git summary: Create a binary blob containing a pre-filled variable store description: | Create a binary blob containing a pre-filled variable store base: core22 confinement: strict source-code: https://github.com/awslabs/python-uefivars issues: https://github.com/awslabs/python-uefivars/issues parts: uefivars: plugin: python source: . apps: uefivars: command: bin/uefivars.py plugs: - home python-uefivars-1.2/test_uefivars.py000066400000000000000000000060451457232171300177660ustar00rootroot00000000000000#!/usr/bin/env python3 # # Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. # SPDX-License-Identifier: MIT from deepdiff import DeepDiff import json import subprocess def run_uefivars(input_type: str = None, input_file: str = None, output_type: str = None, output_file: str = None, extra_args: list = None, input_data: str = None): args = ['./uefivars'] if input_type: args += ['-i', input_type] if input_file: args += ['-I', input_file] if output_type: args += ['-o', output_type] if output_file: args += ['-O', output_file] if extra_args: args += extra_args return subprocess.run(args, input=input_data, stdout=subprocess.PIPE, stderr=subprocess.PIPE) def run_convert(input_type: str = None, input_file: str = None, output_type: str = None, output_file: str = None, extra_args: list = None, input_data: str = None) -> bytes: result = run_uefivars(input_type, input_file, output_type, output_file, extra_args, input_data) assert result.returncode == 0 return result.stdout def check_json(out: str, check: str): # Order can vary; we only care that contents match out_dict = json.loads(out.decode('utf-8')) check_dict = json.loads(check.decode('utf-8')) assert DeepDiff(out_dict, check_dict, ignore_order=True) == {} def check_convert(input_type: str, input_file: str, output_type: str, check_file: str) -> None: out = run_convert(input_type=input_type, input_file=input_file, output_type=output_type) if check_file: check = open(check_file, 'rb').read() if output_type == 'json': check_json(out, check) else: assert out == check # T01: Check basic functionality: Convert between json and efivarfs def test_t01_json_to_json(): check_convert('json', 'testdata/t01.json', 'json', 'testdata/t01.json') def test_t01_efivarfs_to_json(): check_convert('efivarfs', 'testdata/t01.efivarfs', 'json', 'testdata/t01.json') # T02: Check extended attributes: Convert authenticated variables between json, edk2 and aws def test_t02_aws_to_json(): check_convert('aws', 'testdata/t02.aws', 'json', 'testdata/t02.json') def test_t02_aws_to_edk2(): check_convert('aws', 'testdata/t02.aws', 'edk2', 'testdata/t02.edk2') def test_t02_aws_to_edk2_json_aws_json(): # We test through all formats here, ending with JSON. That way we can ignore file format # specifics like compression differences or sparse entries. edk2 = run_convert(input_type='aws', input_file='testdata/t02.aws', output_type='edk2') json = run_convert(input_type='edk2', input_data=edk2, output_type='json') aws = run_convert(input_type='json', input_data=json, output_type='aws') json = run_convert(input_type='aws', input_data=aws, output_type='json') check_json(json, open('testdata/t02.json', 'rb').read()) python-uefivars-1.2/testdata/000077500000000000000000000000001457232171300163355ustar00rootroot00000000000000python-uefivars-1.2/testdata/t01.efivarfs/000077500000000000000000000000001457232171300205455ustar00rootroot00000000000000python-uefivars-1.2/testdata/t01.efivarfs/Boot0000-8be4df61-93ca-11d2-aa0d-00e098032b8c000066400000000000000000000001021457232171300265570ustar00rootroot00000000000000 ,UiAppþJd 4æK”º‘µ´Ð÷!ª,FvEƒnжôf#1ÿpython-uefivars-1.2/testdata/t01.efivarfs/Boot0001-8be4df61-93ca-11d2-aa0d-00e098032b8c000066400000000000000000000002561457232171300265720ustar00rootroot00000000000000&UEFI Amazon Elastic Block Store vol0fdec91942625f07d 1 ÐA ÿN¬ŸYM…âR,Y²python-uefivars-1.2/testdata/t01.efivarfs/BootCurrent-8be4df61-93ca-11d2-aa0d-00e098032b8c000066400000000000000000000000061457232171300276250ustar00rootroot00000000000000python-uefivars-1.2/testdata/t01.efivarfs/BootOptionSupport-8be4df61-93ca-11d2-aa0d-00e098032b8c000066400000000000000000000000101457232171300310430ustar00rootroot00000000000000python-uefivars-1.2/testdata/t01.efivarfs/BootOrder-8be4df61-93ca-11d2-aa0d-00e098032b8c000066400000000000000000000000101457232171300272510ustar00rootroot00000000000000python-uefivars-1.2/testdata/t01.efivarfs/ConIn-8be4df61-93ca-11d2-aa0d-00e098032b8c000066400000000000000000000001221457232171300263640ustar00rootroot00000000000000 ÿÿÿÿK}˜Ó—_CŒ¯IgëbrA e`¦ß´Óš-'?ÁMÿpython-uefivars-1.2/testdata/t01.efivarfs/ConInDev-8be4df61-93ca-11d2-aa0d-00e098032b8c000066400000000000000000000004771457232171300270400ustar00rootroot00000000000000K}˜Ó—_CŒ¯IgëbrA SGÁà¾ùÒš '?ÁMK}˜Ó—_CŒ¯IgëbrA e`¦ß´Óš-'?ÁMK}˜Ó—_CŒ¯IgëbrA  Ç®{àWvLއ/ž(ƒCK}˜Ó—_CŒ¯IgëbrA ֠­ì‹ÏJ sÐç~-ˆK}˜Ó—_CŒ¯IgëbrA €m‘}±[ŒE¤â_ÝQï”ÿpython-uefivars-1.2/testdata/t01.efivarfs/ConOut-8be4df61-93ca-11d2-aa0d-00e098032b8c000066400000000000000000000001031457232171300265640ustar00rootroot00000000000000K}˜Ó—_CŒ¯IgëbrA e`¦ß´Óš-'?ÁMÿpython-uefivars-1.2/testdata/t01.efivarfs/ConOutDev-8be4df61-93ca-11d2-aa0d-00e098032b8c000066400000000000000000000004771457232171300272410ustar00rootroot00000000000000K}˜Ó—_CŒ¯IgëbrA SGÁà¾ùÒš '?ÁMK}˜Ó—_CŒ¯IgëbrA e`¦ß´Óš-'?ÁMK}˜Ó—_CŒ¯IgëbrA  Ç®{àWvLއ/ž(ƒCK}˜Ó—_CŒ¯IgëbrA ֠­ì‹ÏJ sÐç~-ˆK}˜Ó—_CŒ¯IgëbrA €m‘}±[ŒE¤â_ÝQï”ÿpython-uefivars-1.2/testdata/t01.efivarfs/ErrOut-8be4df61-93ca-11d2-aa0d-00e098032b8c000066400000000000000000000001031457232171300265750ustar00rootroot00000000000000K}˜Ó—_CŒ¯IgëbrA e`¦ß´Óš-'?ÁMÿpython-uefivars-1.2/testdata/t01.efivarfs/ErrOutDev-8be4df61-93ca-11d2-aa0d-00e098032b8c000066400000000000000000000004771457232171300272520ustar00rootroot00000000000000K}˜Ó—_CŒ¯IgëbrA SGÁà¾ùÒš '?ÁMK}˜Ó—_CŒ¯IgëbrA e`¦ß´Óš-'?ÁMK}˜Ó—_CŒ¯IgëbrA  Ç®{àWvLއ/ž(ƒCK}˜Ó—_CŒ¯IgëbrA ֠­ì‹ÏJ sÐç~-ˆK}˜Ó—_CŒ¯IgëbrA €m‘}±[ŒE¤â_ÝQï”ÿpython-uefivars-1.2/testdata/t01.efivarfs/Key0000-8be4df61-93ca-11d2-aa0d-00e098032b8c000066400000000000000000000000221457232171300264050ustar00rootroot00000000000000@]M€Ý python-uefivars-1.2/testdata/t01.efivarfs/Key0001-8be4df61-93ca-11d2-aa0d-00e098032b8c000066400000000000000000000000221457232171300264060ustar00rootroot00000000000000@]M€Ýpython-uefivars-1.2/testdata/t01.efivarfs/Lang-8be4df61-93ca-11d2-aa0d-00e098032b8c000066400000000000000000000000101457232171300262330ustar00rootroot00000000000000engpython-uefivars-1.2/testdata/t01.efivarfs/LangCodes-8be4df61-93ca-11d2-aa0d-00e098032b8c000066400000000000000000000000211457232171300272130ustar00rootroot00000000000000engfraengfrapython-uefivars-1.2/testdata/t01.efivarfs/MTC-eb704011-1402-11d3-8e77-00a0c969723b000066400000000000000000000000101457232171300253340ustar00rootroot00000000000000OsIndicationsSupported-8be4df61-93ca-11d2-aa0d-00e098032b8c000066400000000000000000000000141457232171300317530ustar00rootroot00000000000000python-uefivars-1.2/testdata/t01.efivarfsApython-uefivars-1.2/testdata/t01.efivarfs/PlatformLang-8be4df61-93ca-11d2-aa0d-00e098032b8c000066400000000000000000000000071457232171300277460ustar00rootroot00000000000000enpython-uefivars-1.2/testdata/t01.efivarfs/PlatformLangCodes-8be4df61-93ca-11d2-aa0d-00e098032b8c000066400000000000000000000000261457232171300307250ustar00rootroot00000000000000en;fr;en-US;fr-FRpython-uefivars-1.2/testdata/t01.efivarfs/PlatformRecovery0000-8be4df61-93ca-11d2-aa0d-00e098032b8c000066400000000000000000000001621457232171300311650ustar00rootroot000000000000006Default PlatformRecovery2\EFI\BOOT\BOOTAA64.EFIÿpython-uefivars-1.2/testdata/t01.efivarfs/Timeout-8be4df61-93ca-11d2-aa0d-00e098032b8c000066400000000000000000000000061457232171300270050ustar00rootroot00000000000000X-Nitro-SecurebootStatus-8be4df61-93ca-11d2-aa0d-00e098032b8c000066400000000000000000000000141457232171300321130ustar00rootroot00000000000000python-uefivars-1.2/testdata/t01.efivarfspython-uefivars-1.2/testdata/t01.json000066400000000000000000000151651457232171300176440ustar00rootroot00000000000000{ "version": 2, "variables": [ { "name": "X-Nitro-SecurebootStatus", "data": "0000000000000000", "guid": "8be4df61-93ca-11d2-aa0d-00e098032b8c", "attr": 6 }, { "name": "Boot0001", "data": "0100000026005500450046004900200041006d0061007a006f006e00200045006c0061007300740069006300200042006c006f0063006b002000530074006f0072006500200076006f006c003000660064006500630039003100390034003200360032003500660030003700640020003100000002010c00d041030a00000000010106000004031710000100000000000000000000007fff04004eac0881119f594d850ee21a522c59b2", "guid": "8be4df61-93ca-11d2-aa0d-00e098032b8c", "attr": 7 }, { "name": "Boot0000", "data": "090100002c0055006900410070007000000004071400fe4a07640a34e64b94ba91b5b4d0f71e0406140021aa2c4614760345836e8ab6f46623317fff0400", "guid": "8be4df61-93ca-11d2-aa0d-00e098032b8c", "attr": 7 }, { "name": "BootOrder", "data": "00000100", "guid": "8be4df61-93ca-11d2-aa0d-00e098032b8c", "attr": 7 }, { "name": "LangCodes", "data": "656e67667261656e6766726100", "guid": "8be4df61-93ca-11d2-aa0d-00e098032b8c", "attr": 6 }, { "name": "ConOutDev", "data": "010414004b7d98d31a975f438caf4967eb627241030e13000000000000c2010000000000080101030a14005347c1e0bef9d2119a0c0090273fc14d7f010400010414004b7d98d31a975f438caf4967eb627241030e13000000000000c2010000000000080101030a14006560a6df19b4d3119a2d0090273fc14d7f010400010414004b7d98d31a975f438caf4967eb627241030e13000000000000c2010000000000080101030a14000bc7ae7be057764c8e872f9e280883437f010400010414004b7d98d31a975f438caf4967eb627241030e13000000000000c2010000000000080101030a1400d6a015adec8bcf4aa073d01de77e2d887f010400010414004b7d98d31a975f438caf4967eb627241030e13000000000000c2010000000000080101030a1400806d917db15b8c45a48fe25fdd51ef947fff0400", "guid": "8be4df61-93ca-11d2-aa0d-00e098032b8c", "attr": 6 }, { "name": "ConInDev", "data": "010414004b7d98d31a975f438caf4967eb627241030e13000000000000c2010000000000080101030a14005347c1e0bef9d2119a0c0090273fc14d7f010400010414004b7d98d31a975f438caf4967eb627241030e13000000000000c2010000000000080101030a14006560a6df19b4d3119a2d0090273fc14d7f010400010414004b7d98d31a975f438caf4967eb627241030e13000000000000c2010000000000080101030a14000bc7ae7be057764c8e872f9e280883437f010400010414004b7d98d31a975f438caf4967eb627241030e13000000000000c2010000000000080101030a1400d6a015adec8bcf4aa073d01de77e2d887f010400010414004b7d98d31a975f438caf4967eb627241030e13000000000000c2010000000000080101030a1400806d917db15b8c45a48fe25fdd51ef947fff0400", "guid": "8be4df61-93ca-11d2-aa0d-00e098032b8c", "attr": 6 }, { "name": "Lang", "data": "656e6700", "guid": "8be4df61-93ca-11d2-aa0d-00e098032b8c", "attr": 7 }, { "name": "ErrOut", "data": "010414004b7d98d31a975f438caf4967eb627241030e13000000000000c2010000000000080101030a14006560a6df19b4d3119a2d0090273fc14d7fff0400", "guid": "8be4df61-93ca-11d2-aa0d-00e098032b8c", "attr": 7 }, { "name": "PlatformLangCodes", "data": "656e3b66723b656e2d55533b66722d465200", "guid": "8be4df61-93ca-11d2-aa0d-00e098032b8c", "attr": 6 }, { "name": "BootCurrent", "data": "0100", "guid": "8be4df61-93ca-11d2-aa0d-00e098032b8c", "attr": 6 }, { "name": "ErrOutDev", "data": "010414004b7d98d31a975f438caf4967eb627241030e13000000000000c2010000000000080101030a14005347c1e0bef9d2119a0c0090273fc14d7f010400010414004b7d98d31a975f438caf4967eb627241030e13000000000000c2010000000000080101030a14006560a6df19b4d3119a2d0090273fc14d7f010400010414004b7d98d31a975f438caf4967eb627241030e13000000000000c2010000000000080101030a14000bc7ae7be057764c8e872f9e280883437f010400010414004b7d98d31a975f438caf4967eb627241030e13000000000000c2010000000000080101030a1400d6a015adec8bcf4aa073d01de77e2d887f010400010414004b7d98d31a975f438caf4967eb627241030e13000000000000c2010000000000080101030a1400806d917db15b8c45a48fe25fdd51ef947fff0400", "guid": "8be4df61-93ca-11d2-aa0d-00e098032b8c", "attr": 6 }, { "name": "MTC", "data": "01000000", "guid": "eb704011-1402-11d3-8e77-00a0c969723b", "attr": 7 }, { "name": "PlatformRecovery0000", "data": "010000003600440065006600610075006c007400200050006c006100740066006f0072006d005200650063006f0076006500720079000000040432005c004500460049005c0042004f004f0054005c0042004f004f00540041004100360034002e0045004600490000007fff0400", "guid": "8be4df61-93ca-11d2-aa0d-00e098032b8c", "attr": 6 }, { "name": "Key0000", "data": "000000405d4d80dd00000c000000", "guid": "8be4df61-93ca-11d2-aa0d-00e098032b8c", "attr": 7 }, { "name": "PlatformLang", "data": "656e00", "guid": "8be4df61-93ca-11d2-aa0d-00e098032b8c", "attr": 7 }, { "name": "BootOptionSupport", "data": "13030000", "guid": "8be4df61-93ca-11d2-aa0d-00e098032b8c", "attr": 6 }, { "name": "Timeout", "data": "0000", "guid": "8be4df61-93ca-11d2-aa0d-00e098032b8c", "attr": 7 }, { "name": "ConIn", "data": "030f0b00ffffffff0301017f010400010414004b7d98d31a975f438caf4967eb627241030e13000000000000c2010000000000080101030a14006560a6df19b4d3119a2d0090273fc14d7fff0400", "guid": "8be4df61-93ca-11d2-aa0d-00e098032b8c", "attr": 7 }, { "name": "Key0001", "data": "000000405d4d80dd000017000000", "guid": "8be4df61-93ca-11d2-aa0d-00e098032b8c", "attr": 7 }, { "name": "ConOut", "data": "010414004b7d98d31a975f438caf4967eb627241030e13000000000000c2010000000000080101030a14006560a6df19b4d3119a2d0090273fc14d7fff0400", "guid": "8be4df61-93ca-11d2-aa0d-00e098032b8c", "attr": 7 }, { "name": "OsIndicationsSupported", "data": "4100000000000000", "guid": "8be4df61-93ca-11d2-aa0d-00e098032b8c", "attr": 6 } ] }python-uefivars-1.2/testdata/t02.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 python-uefivars-1.2/testdata/t02.edk2000066400000000000000000020400001457232171300175050ustar00rootroot00000000000000+ñÿ–v‹L©…'G[OP@_FVHÿþH¯¸„x,óª{”šC¡€.NÃw’¸ÿZþªU?nå¾ÙÜuÙI´×µ4!czcertdbªU?,:ŸL7AÓMœ‹—¨?ýúMemoryTypeInformation  PMæ•)ªU? Jáé·úÝ9+O„âl¶ÞHDDP ÐA *½æk–<&’O¤V¶õ`©›‡ÿªU?aßä‹Ê“Òª à˜+ŒBootOrderªU?DÏ<˜»á@ {J¾‚’MemoryOverwriteRequestControlLockªU?<¾9 âÔ2¾A¡P‰…Ô˜)MemoryOverwriteRequestControlªU? 3aßä‹Ê“Òª à˜+ŒConIn ÐA  ÐA ÿÿÿÿÿªU?aßä‹Ê“Òª à˜+ŒConOut ÐA ÿªU?@pëÓŽw Éir;MTC ªU?xaßä‹Ê“Òª à˜+ŒBoot0006bubuntu*½æk–<&’O¤V¶õ`©›‡4\EFI\ubuntu\shimx64.efiÿªU?ˆaßä‹Ê“Òª à˜+ŒBoot0005@0EFI Internal Shell (Unsupported option) ಠÿ¯ù ·ÖzŨ@!UR…N7ÿªU?aaßä‹Ê“Òª à˜+ŒBoot0004@AEFI Network ÐA  %PV·ÿªU?‚aßä‹Ê“Òª à˜+ŒBoot0003@&EFI VMware Virtual SATA CDROM Drive (1.0) ÐA  ÿªU?‚aßä‹Ê“Òª à˜+ŒBoot0002@&EFI VMware Virtual SATA CDROM Drive (0.0) ÐA  ÿªU?Taßä‹Ê“Òª à˜+ŒBoot0001@EFI Virtual disk (1.0) ÐA ÿªU?Taßä‹Ê“Òª à˜+ŒBoot0000@EFI Virtual disk (0.0) ÐA ÿªU? †—=yÜD Gµ…¸èý¿ÒConsoleOutModePªU?aßä‹Ê“Òª à˜+ŒPlatformLangen-USªU? aßä‹Ê“Òª à˜+ŒLangengªU?'†—=yÜD Gµ…¸èý¿ÒSbConfigStateªU?'Ž˲×:=–E£¼ÚÐgeodbx&ÄÁLP’@¬©Aù6“C(Œ0½šúwY2M½`(ôçxK€´Ùi1¿ ý‘¦ÑO¤Ræm²@Œ¨`MA’eŸ ½šúwY2M½`(ôçxKõ/ƒ£úœûÖ’r($ÛäE4Ò[…$k;•}¬nÎz½šúwY2M½`(ôçxKÅÙØ¡†âÈ- ¯ª*o.s‡ >d÷,Nïgyj„½½šúwY2M½`(ôçxK63„ÑM. xbd„ÄY­W£ïC–&`HÐXÅ¡›¿v½šúwY2M½`(ôçxK세Kle¥ ©¾q–R0! bÖÓ h2Û²Ò à'%'ß¶=IÒ•r¦ôL½šúwY2M½`(ôçxK^ê‰T‹ `²þíÚ< Çþ›Ík”覃¸R8½šúwY2M½`(ôçxKæÆ¨Xdo±ïÆyþ(±#gþ’æ¾+6™žÿ9О½šúwY2M½`(ôçxK ß_NQìx¹mÐ%ý¶†ãŸor’xRY›eœ&½šúwY2M½`(ôçxK »C’Ú¬z¸›0¤¬eu1¹{ú«ù ¯åù¶ë ct½šúwY2M½`(ôçxK “9v-ó6«=ФcßqZ9ϰô’F\`lk×½‰Œ½šúwY2M½`(ôçxK ¾Êo)ì o3}räˆK ³H˜:* ×?O½šúwY2M½`(ôçxK Éóû™–!HÃʃ62u>Ôü ¹[1æR*Í[ü½šúwY2M½`(ôçxKo¬êÏìýN0;tô€ €˜âЀ+“oŽÇtÎ!ó†hœ½šúwY2M½`(ôçxKN: [CƦ»Ó@O4=Ï9bgΔøµ.#©Ú’ ½šúwY2M½`(ôçxK34)ÿbퟗ>HÜîå-¾.ImTµÏÖÈdÒѽšúwY2M½`(ôçxK+™Ï&B.’þ6_¿Kà 'lžáKzoÿDû/ki™9½šúwY2M½`(ôçxK+¿,§¸ñÙ'îR¶û*]ÐI¸Z+›Rœ]fb°Uø½šúwY2M½`(ôçxK,sÙ3%ºmËå‰Ô¤Æ<[“UYï’ûðPíPÄâRñ}½šúwY2M½`(ôçxK.p‘g†¦÷sQ§«pµWÆ2.©#²¨Ó¹+Q¯}½šúwY2M½`(ôçxK0f(úTw0W(ºJF}çÐ8zTõiÓvŸÎ^uì‰Ò“½šúwY2M½`(ôçxK6íºõ­A¤¡wz¿/¯^g4g^Ù^i5‚ž ªÒ½šúwY2M½`(ôçxK8AÒ!6ƒ×\ æ!`9MlN g`¶ö¹b¼…[½šúwY2M½`(ôçxK?ΛŸß>ðTR°ù^ä·ðmt:syqUŽpjÎ>s½šúwY2M½`(ôçxKC—Úʃžc|µ ’ßC¼-/²¨õŸ&üzKÔÙu’½šúwY2M½`(ôçxKGÌa'⚆à:kï,ÔøÅZmkÛ6!hÃ,ã*Zß½šúwY2M½`(ôçxKQˆ1þs‚µÐ>Æ!"‹Š¶Ty½ ¿£ÅÁÐôœ0a5½šúwY2M½`(ôçxKZéIêˆUë“ä9ÛÆ[Ú.B…,/ßg‰úg6ãÃA+\½šúwY2M½`(ôçxKk€xäAЦë{³^`’ÏGžëŒäÍçÐrÌ´/f½šúwY2M½`(ôçxKlˆTGÕYâ“Q¸&Àl¸¿ï+”­585‡rÑ“ø.ÑʽšúwY2M½`(ôçxKo(ÿqÉÛÕ¯.{¿Ë«d|ÂeÝõ²“Ͷ&õ :x^½šúwY2M½`(ôçxKqòoÒ"I~T£Fb«$—üÈ wõhéãÙ¿Ëýcu½šúwY2M½`(ôçxKrk>¶Tj0óø=›–Îöpé¨ÑpŠqæ-Ä,#Á½šúwY2M½`(ôçxKrà½gÏ]V«Šß;ݼ‚¿2¨ØªŒ^/mò”(ÖØ½šúwY2M½`(ôçxKx'¯™6,úðq}­ä±¿àCŠÑqÁZÝÂH·[øÊ¤K²Å½šúwY2M½`(ôçxK¨¹e»„Ó‡k”)©TÌ•SϪØÈ£;ý3ÿð佚úwY2M½`(ôçxK‚Û;δöCΗÃч͛YAÍ=èXo+ÚV7W_g½šúwY2M½`(ôçxK‰Z—…öÊ~ÔOÁ¡G qóñ"8bÙÿÌ:âß’=¯½šúwY2M½`(ôçxKŠÖHYñ•µõ¯ª” jag¬ÖzˆnF“dr!ÅYE¹½šúwY2M½`(ôçxK‹ô4´žÌ÷¢ÍeËì;= <5¾P_ß{Õcõ!½šúwY2M½`(ôçxKŽ¢‰Ïç «seË(îQíÓ<òPmèˆû­Ö¿€H½šúwY2M½`(ôçxK™˜ÓcÄ‘¾½tº¹M’‘soܦC£fd¼1ZB½šúwY2M½`(ôçxKžJi1ah.Uýèþõ`ëˆìþܯfÀÊ÷²·4½šúwY2M½`(ôçxK¦µ6UÓ¢¯ G'Yykä¤ T•§ØiuLHH…t§½šúwY2M½`(ôçxK§ó/PN°þ­š~ùNѺ ì]æ÷ïoð¦+“¾ß]E½šúwY2M½`(ôçxK­h&á”m&Óêóh\ˆÙ}…Þ;MË=â®Ç`ÑùÂ$Q?¼eYW×5ú)õ@νšúwY2M½`(ôçxKØËë—5õg+6~O–ÍÇIia]JélrMBÎøóú½šúwY2M½`(ôçxKé,"ë;VBÖ\ÂÊòGÒYG8„D•oYâ°Ñú½šúwY2M½`(ôçxKýÝn=)ê„Çt=­JÛǵþÁ³‘ù2@†¬ÇÖÛØ½šúwY2M½`(ôçxKþc¨Ox,ÉÓüòÌùüûÐ7`‡‡XÒb…íf›Ünm½šúwY2M½`(ôçxKþϲ2Ñ.™KmH],qgrŠ¥RY„­\¦u"š6½šúwY2M½`(ôçxKÊaJ~“”ŒÐþUÓ™ùÑ©nE AR'ÂÆ[½šúwY2M½`(ôçxKU¹› å=¼þHZ©Ç7Ï?¶ï=‘úµ™ª|«í§cµº½šúwY2M½`(ôçxKwÝ£ ˆÿ^; æb x  S^ˇæðˆŠ k/½šúwY2M½`(ôçxKÈ<±9"­™õ`tFuÝ7̔ܭZ˦G/î4qÙ9脽šúwY2M½`(ôçxK;‡S> ÃÐì¨#Ëð©AªØryÑÄ™€-Ñæ6¸©½šúwY2M½`(ôçxK“šîôõúQâ3@ÃòäHΈrRjý÷Rçó£ò¼Ÿ`I½šúwY2M½`(ôçxKdW[Ùxš.­Vö4R¯kø ùDxYuéðN-d×E½šúwY2M½`(ôçxKEÇÈ®u Ï»Hü7R}dÝdM®Ø‘<ÍŠ$ÉM…igߎªU?'+˲×:=–E£¼ÚÐgeodb¡YÀ¥ä”§J‡µ«\+ðrûß[éÕ£ SG‡5DZûpb0‚Ë0‚³  éÙÿiæóçä0  *†H†÷  0M1 0 UUS10U California10U Palo Alto10U  VMware, Inc.0 081016171605Z 191231171605Z0M1 0 UUS10U California10U Palo Alto10U  VMware, Inc.0‚ 0  *†H†÷ ‚ 0‚‚Åe§EÏgó.yS»Ìv'–·jú“²¬„tYÜ?WmåMþå¹¼«€ ¤¿üdÈþTFK]“ÿï0ˆ¿û$ ºðð]^°_>ö×0U#0€Y>û$ ºðð]^°_>ö×0 U0ÿ0  *†H†÷  ‚½¶¦»U£ëØLL`/ï&Ù7zH*³”!!>Úv{ì7êÿæÏˆ…N´¬… b³ùZ„Z"æùÄÐ0ž9<‘xõâ R ma1•SFÿ o”™J² M‚­Û0ò}&!*\Áyš8Ä)ã'Š¡àAj»¢:ì„‚³ª­/XÜí¼¡‹nÚÞkI|×çÄF æT3 ÍIJwñÎÈ· çŒÃ;|œÙò…ȼü@ð| Ùóz‘· • .xö#,>î隟mKðîi€f>èý·ýôm¢çxƒD„â­Q›QÌæñÏ}I×ÅuŽÉRG ¡YÀ¥ä”§J‡µ«\+ðr@$½šúwY2M½`(ôçxK0‚0‚ø  aÓÄ0  *†H†÷  0‘1 0 UUS10U Washington10URedmond10U Microsoft Corporation1;09U2Microsoft Corporation Third Party Marketplace Root0 110627212245Z 260627213245Z01 0 UUS10U Washington10URedmond10U Microsoft Corporation1+0)U"Microsoft Corporation UEFI CA 20110‚"0  *†H†÷ ‚0‚ ‚¥lLÇE jK ¤À‡u CTdàí’} ²s¿ ÆJEa Å-–Óõ+ ûMI›A€<¹Týæ¼ÑĤŠAŠ\Yƒh2»ŒGÉîq¼!OšŠ|ÿD?2²&H®uµîÉLJ~䂚xwM °½öÓÓ¼ú+¥Q8]õûºÛxÛÿì –Õƒ¸é¶À{@{á('ÉúïV^æ~”~ÀðD²y9åÚ²b‹M¿8pâh$É3¤7ÕXi^Ó|íÁSçN°*‡caocYê²+y× agŠ[ý^­‡º†gOqX"""΋ïTqÎP5Xv•îj±¢Õ£‚v0‚r0 +‚70# +‚7øÁk·wSJó%7N¡&{ p€0U­¿C ½‚pœŒÕO1nÕ"˜ŠÔ0 +‚7  SubCA0 U†0Uÿ0ÿ0U#0€EfRCá~X¿ÖNž#U;:"j¨0\UU0S0Q O M†Khttp://crl.microsoft.com/pki/crl/products/MicCorThiParMarRoo_2010-10-05.crl0`+T0R0P+0†Dhttp://www.microsoft.com/pki/certs/MicCorThiParMarRoo_2010-10-05.crt0  *†H†÷  ‚5Bÿ0ÌÎ÷v ­hX5)F2v'|ïA'BJªm8HYUóéX4¦ ‚ª]­‚Ú€ƒA´ò¹ó]ñPù³U„B( ½²®QÅÀ¬—•!Ûüwž•s‘ˆÊ½½R¹P ßWž aí åm%Ù@@ÈΣJÂM¯šT½Ç¼¹+=I+2üj!iO›È~B4ü6‹ @À³š%u'ÍÉ£ö]Ñç6Tz¹PµÓÑ¿»tßÜ€Õíô/k/ÞfŒ°#åÇ„ØíêÁ3‚­VK-ñh•ÍÏðrð®»Ý†…˜,!L3+ðJðh‡µ’U2u¡j‚j<£%¤í­×®ËØ@Y „Ñ•Lb‘"tŒ=GD¦ä°›45±ú¶S¨,ì¤qȸºèDfäGTŽV³Ÿ˜²†Ðh>#µ/^P…Æ‚_A¡ô. à™Òluä¶iµ!†úÑöâMÑÚ­,wS%27ÇlRr•†°ñ5ajõ²;PV¦2-þ¢‰ùB†'U¡‚ÊZ›ø0˜T¦G–%/È&äA”\?å–ã…[<>?»GrUâ%"±Ù{ç*£÷Fà Ö‰ã5'bq¦ïÐ'  Y7`ø8”¸àxpøºL†‡”öà®Eîe¶£~iu’›õ¦¼YƒX¡YÀ¥ä”§J‡µ«\+ðr뽚úwY2M½`(ôçxK0‚×0‚¿  avV0  *†H†÷  0ˆ1 0 UUS10U Washington10URedmond10U Microsoft Corporation1200U)Microsoft Root Certificate Authority 20100 111019184142Z 261019185142Z0„1 0 UUS10U Washington10URedmond10U Microsoft Corporation1.0,U%Microsoft Windows Production PCA 20110‚"0  *†H†÷ ‚0‚ ‚Ý »¢ä. ãçÅ÷–i¼!½i33ï­ËT€îƒ»Å „Ù÷Ò‹ó8°«¤­-|byÿãJ?5 pãÄçkàœÀ6uéŠ1ÝpåÜ7µtF–([‡`#,¿ÜG¥g÷Q'žrë¦É¹;S5|åÓì'¹‡þ¹É# o¨F‘Án–http://www.microsoft.com/pki/certs/MicRooCerAut_2010-06-23.crt0  *†H†÷  ‚ü|qQ¥yÂn²ï9>¼«\`ìß¨Ó éôö–…¶QˆfG¢°=*hw»‘Lb{¶ÁǺz‡4Kbz™éÊüÎJ7É-¤W|þ=ܸZúÖij…:ê³Ùnäi!7ÞÑöugÓ“W^)9Èî-áÍäEs[ÐÒÎz«‚FXÐ^³g¯l5ò¼å?$â5¢ uöV™Ôx,ÑëЈªñߺ~,c·›#!ÄùxlâX6+‘̤Ùò-ºù”@íEñΊ\k>«Óp* jà_GÑÕc 2ò¯×6*pZåBYqKWº~ƒð!<ôÁŹ“ˆE“†é± ™¾˜ËÅ•¤]bÖ c ½uw}=óE¹Ÿ—ŸËW€o3©Ïw¤bY~ªU?'aßä‹Ê“Òª à˜+ŒKEK¡YÀ¥ä”§J‡µ«\+ðrü½šúwY2M½`(ôçxK0‚è0‚Р a ш0  *†H†÷  0‘1 0 UUS10U Washington10URedmond10U Microsoft Corporation1;09U2Microsoft Corporation Third Party Marketplace Root0 110624204129Z 260624205129Z0€1 0 UUS10U Washington10URedmond10U Microsoft Corporation1*0(U!Microsoft Corporation KEK CA 20110‚"0  *†H†÷ ‚0‚ ‚Ä赊¿­W&°&ÃêçûWzD] ÚJåt*æ°ìmëì¹ãZc2|Oã §8“ŽÆõà„±š›,çõ·‘Ö áâÀ¨¬0ßHóPšd§QÈ…O †Îþ/áŸÿ‚ÀíéÍÎôSjb: C¹â%ýþùÔÄ«â#‰p·¤Mì®åœúÂ×ÁËÔèÄ/å™î$‹ìò‹êÃJûC ~µG’lÜæ‰ëõ3ë*qåùƒ<ÿ% /hvFÿºO¾Ü­q*XªûÒy=ä›e;Ì)*ŸürY¢ë®’ïö5€Æìä_ÌvÍïc’Á¯y@„y‡ãR¨è{i£‚O0‚K0 +‚70UbüCÍ >¤ËgÒ[ÙU¬{̶Š_0 +‚7  SubCA0 U†0Uÿ0ÿ0U#0€EfRCá~X¿ÖNž#U;:"j¨0\UU0S0Q O M†Khttp://crl.microsoft.com/pki/crl/products/MicCorThiParMarRoo_2010-10-05.crl0`+T0R0P+0†Dhttp://www.microsoft.com/pki/certs/MicCorThiParMarRoo_2010-10-05.crt0  *†H†÷  ‚Ô„ˆõ”Ê*<û*’ × ÑñèRf¨î¢µuzª-¤vZêy·¹7jQ{döádòg¾÷¨x½ºÎˆXd ÖWÈ£_ÖÛÆÐiÎHK2·ë]Ò0õÀõ¸ºx£+þ›Û4V„ì‚Ê®A%pœkéþ×–å甲* Kÿ(){÷×|¥Ñv¹Èyí’œÂþßo~l{ÔÁEÝ4Q–9å^VØ–ô¦B³ wýòqVÌŸ†#¤‡Ë¦ýX~Ôig‘~òå ‹Š<‡„ëãνCå­-„“Žj+Z|DúRªÈ-»àRßøš=Á`°á3µ£ˆÑe ç¬|¤Á‚‡N8±/ Ňoý.¼9¶çæÃàäÍ'„ï”Bï)‹FA;gØùCYeË ¼ý’Oôu;§©$üPA@yà-O j'vnRí–i{¯÷‡ÐE­Sû0ª76aÚJi4ØhíÖÏl” ÓÏl"y­±ð¼¢F`©ÄÂ!‚ñýòèy2`¿Ø¬¥"KÊÁØKë}?W5²æOu´°`"S®‘yÖ›A†Tp²Þ 5|°4rº—`;ðy뢲]¢¸‡Åéöµ—%o8Ÿã‘úŠy˜Ãi·£ —øÊ®×ÄóÀuk4 µ™`ó\°ÅWN6Ò2„¿žªU?'/aßä‹Ê“Òª à˜+ŒPKíŒ.EÿߌK®Q†.h,-[éÕ£ SG‡5DZûpbpython-uefivars-1.2/testdata/t02.json000066400000000000000000000643101457232171300176410ustar00rootroot00000000000000{ "version": 2, "variables": [ { "name": "MemoryTypeInformation", "data": "00000a00000004000000090000001c0000000600000050000000050000004d00000003000000e603000004000000952900000f00000000000000", "guid": "4c19049f-4137-4dd3-9c10-8b97a83ffdfa", "attr": 7 }, { "name": "HDDP", "data": "000002010c00d041030a00000000010106000010030208000000000004012a000100000000080000000000000000100000000000bde66b963c26924fa456b6f560a99b8702027fff0400", "guid": "fab7e9e1-39dd-4f2b-8408-e20e906cb6de", "attr": 7 }, { "name": "BootOrder", "data": "00000600000001000200030004000500", "guid": "8be4df61-93ca-11d2-aa0d-00e098032b8c", "attr": 7 }, { "name": "MemoryOverwriteRequestControlLock", "data": "000000", "guid": "bb983ccf-151d-40e1-a07b-4a17be168292", "attr": 7 }, { "name": "MemoryOverwriteRequestControl", "data": "000000", "guid": "e20939be-32d4-41be-a150-897f85d49829", "attr": 7 }, { "name": "ConIn", "data": "000002010c00d041030a0000000001010600000702010c00d0410303000000007f010400030f0b00ffffffff0301017fff0400", "guid": "8be4df61-93ca-11d2-aa0d-00e098032b8c", "attr": 7 }, { "name": "ConOut", "data": "000002010c00d041030a0000000001010600000f7fff0400", "guid": "8be4df61-93ca-11d2-aa0d-00e098032b8c", "attr": 7 }, { "name": "MTC", "data": "00000a000000", "guid": "eb704011-1402-11d3-8e77-00a0c969723b", "attr": 7 }, { "name": "Boot0006", "data": "00000100000062007500620075006e0074007500000004012a000100000000080000000000000000100000000000bde66b963c26924fa456b6f560a99b870202040434005c004500460049005c007500620075006e00740075005c007300680069006d007800360034002e0065006600690000007fff0400", "guid": "8be4df61-93ca-11d2-aa0d-00e098032b8c", "attr": 7 }, { "name": "Boot0005", "data": "0000010000403000450046004900200049006e007400650072006e0061006c0020005300680065006c006c002000280055006e0073007500700070006f00720074006500640020006f007000740069006f006e0029000000010318000b00000000e0b20c00000000ffaff90c0000000004061400b7d67ac51505a8409d21551652854e377fff0400", "guid": "8be4df61-93ca-11d2-aa0d-00e098032b8c", "attr": 7 }, { "name": "Boot0004", "data": "000001000040410045004600490020004e006500740077006f0072006b00000002010c00d041030a00000000010106000015010106000000030b25000050568d8db70000000000000000000000000000000000000000000000000000017fff0400", "guid": "8be4df61-93ca-11d2-aa0d-00e098032b8c", "attr": 7 }, { "name": "Boot0003", "data": "0000010000402600450046004900200056004d00770061007200650020005600690072007400750061006c002000530041005400410020004300440052004f004d002000440072006900760065002000280031002e0030002900000002010c00d041030a0000000001010600001101010600000103120a000100000000007fff0400", "guid": "8be4df61-93ca-11d2-aa0d-00e098032b8c", "attr": 7 }, { "name": "Boot0002", "data": "0000010000402600450046004900200056004d00770061007200650020005600690072007400750061006c002000530041005400410020004300440052004f004d002000440072006900760065002000280030002e0030002900000002010c00d041030a0000000001010600001101010600000103120a000000000000007fff0400", "guid": "8be4df61-93ca-11d2-aa0d-00e098032b8c", "attr": 7 }, { "name": "Boot0001", "data": "0000010000401e0045004600490020005600690072007400750061006c0020006400690073006b002000280031002e0030002900000002010c00d041030a0000000001010600001003020800010000007fff0400", "guid": "8be4df61-93ca-11d2-aa0d-00e098032b8c", "attr": 7 }, { "name": "Boot0000", "data": "0000010000401e0045004600490020005600690072007400750061006c0020006400690073006b002000280030002e0030002900000002010c00d041030a0000000001010600001003020800000000007fff0400", "guid": "8be4df61-93ca-11d2-aa0d-00e098032b8c", "attr": 7 }, { "name": "ConsoleOutMode", "data": "00005000000019000000", "guid": "793d9786-44dc-4709-b57f-85b8e8fdbfd2", "attr": 7 }, { "name": "PlatformLang", "data": "0000656e2d555300", "guid": "8be4df61-93ca-11d2-aa0d-00e098032b8c", "attr": 7 }, { "name": "Lang", "data": "0000656e6700", "guid": "8be4df61-93ca-11d2-aa0d-00e098032b8c", "attr": 7 }, { "name": "SbConfigState", "data": "000001", "guid": "793d9786-44dc-4709-b57f-85b8e8fdbfd2", "attr": 39 }, { "name": "dbx", "data": "00002616c4c14c509240aca941f9369343288c0e00000000000030000000bd9afa775903324dbd6028f4e78f784b80b4d96931bf0d02fd91a61e19d14f1da452e66db2408ca8604d411f92659f0abd9afa775903324dbd6028f4e78f784bf52f83a3fa9cfbd6920f722824dbe4034534d25b8507246b3b957dac6e1bce7abd9afa775903324dbd6028f4e78f784bc5d9d8a186e2c82d09afaa2a6f7f2e73870d3e64f72c4e08ef67796a840f0fbdbd9afa775903324dbd6028f4e78f784b363384d14d1f2e0b7815626484c459ad57a318ef4396266048d058c5a19bbf76bd9afa775903324dbd6028f4e78f784b1aec84b84b6c65a51220a9be7181965230210d62d6d33c48999c6b295a2b0a06bd9afa775903324dbd6028f4e78f784be6ca68e94146629af03f69c2f86e6bef62f930b37c6fbcc878b78df98c0334e5bd9afa775903324dbd6028f4e78f784bc3a99a460da464a057c3586d83cef5f4ae08b7103979ed8932742df0ed530c66bd9afa775903324dbd6028f4e78f784b58fb941aef95a25943b3fb5f2510a0df3fe44c58c95e0ab80487297568ab9771bd9afa775903324dbd6028f4e78f784b5391c3a2fb112102a6aa1edc25ae77e19f5d6f09cd09eeb2509922bfcd5992eabd9afa775903324dbd6028f4e78f784bd626157e1d6a718bc124ab8da27cbb65072ca03a7b6b257dbdcbbd60f65ef3d1bd9afa775903324dbd6028f4e78f784bd063ec28f67eba53f1642dbf7dff33c6a32add869f6013fe162e2c32f1cbe56dbd9afa775903324dbd6028f4e78f784b29c6eb52b43c3aa18b2cd8ed6ea8607cef3cfae1bafe1165755cf2e614844a44bd9afa775903324dbd6028f4e78f784b90fbe70e69d633408d3e170c6832dbb2d209e0272527dfb63d49d29572a6f44cbd9afa775903324dbd6028f4e78f784b075eea060589548ba060b2feed10da3c20c7fe9b17cd026b94e8a683b8115238bd9afa775903324dbd6028f4e78f784b07e6c6a858646fb1efc67903fe28b116011f2367fe92e6be2b36999eff39d09ebd9afa775903324dbd6028f4e78f784b09df5f4e511208ec78b96d12d08125fdb603868de39f6f72927852599b659c26bd9afa775903324dbd6028f4e78f784b0bbb4392daac7ab89b30a4ac657531b97bfaab04f90b0dafe5f9b6eb90a06374bd9afa775903324dbd6028f4e78f784b0c189339762df336ab3dd006a463df715a39cfb0f492465c600e6c6bd7bd898cbd9afa775903324dbd6028f4e78f784b0d0dbeca6f29eca06f331a7d72e4884b12097fb348983a2a14a0d73f4f10140fbd9afa775903324dbd6028f4e78f784b0dc9f3fb99962148c3ca833632758d3ed4fc8d0b0007b95b31e6528f2acd5bfcbd9afa775903324dbd6028f4e78f784b106faceacfecfd4e303b74f480a08098e2d0802b936f8ec774ce21f31686689cbd9afa775903324dbd6028f4e78f784b174e3a0b5b43c6a607bbd3404f05341e3dcf396267ce94f8b50e2e23a9da920cbd9afa775903324dbd6028f4e78f784b18333429ff0562ed9f97033e1148dceee52dbe2e496d5410b5cfd6c864d2d10fbd9afa775903324dbd6028f4e78f784b2b99cf26422e92fe365fbf4bc30d27086c9ee14b7a6fff44fb2f6b9001699939bd9afa775903324dbd6028f4e78f784b2bbf2ca7b8f1d91f27ee52b6fb2a5dd049b85a2b9b529c5d6662068104b055f8bd9afa775903324dbd6028f4e78f784b2c73d93325ba6dcbe589d4a4c63c5b935559ef92fbf050ed50c4e2085206f17dbd9afa775903324dbd6028f4e78f784b2e70916786a6f773511fa7181fab0f1d70b557c6322ea923b2a8d3b92b51af7dbd9afa775903324dbd6028f4e78f784b306628fa5477305728ba4a467de7d0387a54f569d3769fce5e75ec89d28d1593bd9afa775903324dbd6028f4e78f784b3608edbaf5ad0f41a414a1777abf2faf5e670334675ec3995e6935829e0caad2bd9afa775903324dbd6028f4e78f784b3841d221368d1583d75c0a02e62160394d6c4e0a6760b6f607b90362bc855b02bd9afa775903324dbd6028f4e78f784b3fce9b9fdf3ef09d5452b0f95ee481c2b7f06d743a737971558e70136ace3e73bd9afa775903324dbd6028f4e78f784b4397daca839e7f63077cb50c92df43bc2d2fb2a8f59f26fc7a0e4bd4d9751692bd9afa775903324dbd6028f4e78f784b47cc086127e2069a86e03a6bef2cd410f8c55a6d6bdb362168c31b2ce32a5adfbd9afa775903324dbd6028f4e78f784b518831fe7382b514d03e15c621228b8ab65479bd0cbfa3c5c1d0f48d9c306135bd9afa775903324dbd6028f4e78f784b5ae949ea8855eb93e439dbc65bda2e42852c2fdf6789fa146736e3c3410f2b5cbd9afa775903324dbd6028f4e78f784b6b1d138078e4418aa68deb7bb35e066092cf479eeb8ce4cd12e7d072ccb42f66bd9afa775903324dbd6028f4e78f784b6c8854478dd559e29351b826c06cb8bfef2b94ad3538358772d193f82ed1ca11bd9afa775903324dbd6028f4e78f784b6f1428ff71c9db0ed5af1f2e7bbfcbab647cc265ddf5b293cdb626f50a3a785ebd9afa775903324dbd6028f4e78f784b71f2906fd222497e54a34662ab2497fcc81020770ff51368e9e3d9bfcbfd6375bd9afa775903324dbd6028f4e78f784b726b3eb654046a30f3f83d9b96ce03f670e9a806d1708a0371e62dc49d2c23c1bd9afa775903324dbd6028f4e78f784b72e0bd1867cf5d9d56ab158adf3bddbc82bf32a8d8aa1d8c5e2f6df29428d6d8bd9afa775903324dbd6028f4e78f784b7827af99362cfaf0717dade4b1bfe0438ad171c15addc248b75bf8caa44bb2c5bd9afa775903324dbd6028f4e78f784b81a8b965bb84d3876b9429a95481cc955318cfaa1412d808c8a33bfd33fff0e4bd9afa775903324dbd6028f4e78f784b82db3bceb4f60843ce9d97c3d187cd9b5941cd3de8100e586f2bda5637575f67bd9afa775903324dbd6028f4e78f784b895a9785f617ca1d7ed44fc1a1470b71f3f1223862d9ff9dcc3ae2df92163dafbd9afa775903324dbd6028f4e78f784b8ad64859f195b5f58dafaa940b6a6167acd67a886e8f469364177221c55945b9bd9afa775903324dbd6028f4e78f784b8bf434b49e00ccf71502a2cd900865cb01ec3b3da03c35be505fdf7bd563f521bd9afa775903324dbd6028f4e78f784b8d8ea289cfe70a1c07ab7365cb28ee51edd33cf2506de888fbadd60ebf80481cbd9afa775903324dbd6028f4e78f784b9998d363c491be16bd74ba10b94d9291001611736fdca643a36664bc0f315a42bd9afa775903324dbd6028f4e78f784b9e4a69173161682e55fde8fef560eb88ec1ffedcaf04001f66c0caf707b2b734bd9afa775903324dbd6028f4e78f784ba6b5151f3655d3a2af0d472759796be4a4200e5495a7d869754c4848857408a7bd9afa775903324dbd6028f4e78f784ba7f32f508d4eb0fead9a087ef94ed1ba0aec5de6f7ef6ff0a62b93bedf5d458dbd9afa775903324dbd6028f4e78f784bad6826e1946d26d3eaf3685c88d97d85de3b4dcb3d0ee2ae81c70560d13c5720bd9afa775903324dbd6028f4e78f784baeebae3151271273ed95aa2e671139ed31a98567303a332298f83709a9d55aa1bd9afa775903324dbd6028f4e78f784bafe2030afb7d2cda13f9fa333a02e34f6751afec11b010dbcd441fdf4c4002b3bd9afa775903324dbd6028f4e78f784bb54f1ee636631fad68058d3b0937031ac1b90ccb17062a391cca68afdbe40d55bd9afa775903324dbd6028f4e78f784bb8f078d983a24ac433216393883514cd932c33af18e7dd70884c8235f4275736bd9afa775903324dbd6028f4e78f784bb97a0889059c035ff1d54b6db53b11b9766668d9f955247c028b2837d7a04cd9bd9afa775903324dbd6028f4e78f784bbc87a668e81966489cb508ee805183c19e6acd24cf17799ca062d2e384da0ea7bd9afa775903324dbd6028f4e78f784bc409bdac4775add8db92aa22b5b718fb8c94a1462c1fe9a416b95d8a3388c2fcbd9afa775903324dbd6028f4e78f784bc617c1a8b1ee2a811c28b5a81b4c83d7c98b5b0c27281d610207ebe692c2967fbd9afa775903324dbd6028f4e78f784bc90f336617b8e7f983975413c997f10b73eb267fd8a10cb9e3bdbfc667abdb8bbd9afa775903324dbd6028f4e78f784bcb6b858b40d3a098765815b592c1514a49604fafd60819da88d7a76e9778fef7bd9afa775903324dbd6028f4e78f784bce3bfabe59d67ce8ac8dfd4a16f7c43ef9c224513fbc655957d735fa29f540cebd9afa775903324dbd6028f4e78f784bd8cbeb9735f5672b367e4f96cdc74969615d17074ae96c724d42ce0216f8f3fabd9afa775903324dbd6028f4e78f784be92c22eb3b5642d65c1ec2caf247d2594738eebb7fb3841a44956f59e2b0d1fabd9afa775903324dbd6028f4e78f784bfddd6e3d29ea84c7743dad4a1bdbc700b5fec1b391f932409086acc71dd6dbd8bd9afa775903324dbd6028f4e78f784bfe63a84f782cc9d3fcf2ccf9fc11fbd03760878758d26285ed12669bdc6e6d01bd9afa775903324dbd6028f4e78f784bfecfb232d12e994b6d485d2c7167728aa5525984ad5ca61e7516221f079a1436bd9afa775903324dbd6028f4e78f784bca171d614a8d7e121c93948cd0fe55d39981f9d11aa96e03450a415227c2c65bbd9afa775903324dbd6028f4e78f784b55b99b0de53dbcfe485aa9c737cf3fb616ef3d91fab599aa7cab19eda763b5babd9afa775903324dbd6028f4e78f784b77dd190fa30d88ff5e3b011a0ae61e6209780c130b535ecb87e6f0888a0b6b2fbd9afa775903324dbd6028f4e78f784bc83cb13922ad99f560744675dd37cc94dcad5a1fcba6472fee341171d939e884bd9afa775903324dbd6028f4e78f784b3b0287533e0cc3d0ec1aa823cbf0a941aad8721579d1c499802dd1c3a636b8a9bd9afa775903324dbd6028f4e78f784b939aeef4f5fa51e23340c3f2e49048ce8872526afdf752c3a7f3a3f2bc9f6049bd9afa775903324dbd6028f4e78f784b64575bd912789a2e14ad56f6341f52af6bf80cf94400785975e9f04e2d64d745bd9afa775903324dbd6028f4e78f784b45c7c8ae750acfbb48fc37527d6412dd644daed8913ccd8a24c94d856967df8e", "guid": "d719b2cb-3d3a-4596-a3bc-dad00e67656f", "attr": 39 }, { "name": "db", "data": "0000a159c0a5e494a74a87b5ab155c2bf072fb03000000000000df0300005be9d5a38f0a53478735445afb708f62308203cb308202b3a003020102020900e9d9ff69e6f3e7e4300d06092a864886f70d01010b0500304d310b3009060355040613025553311330110603550408130a43616c69666f726e6961311230100603550407130950616c6f20416c746f31153013060355040a130c564d776172652c20496e632e301e170d3038313031363137313630355a170d3139313233313137313630355a304d310b3009060355040613025553311330110603550408130a43616c69666f726e6961311230100603550407130950616c6f20416c746f31153013060355040a130c564d776172652c20496e632e30820120300d06092a864886f70d01010105000382010d00308201080282010100c565a745cf677ff3152e790e7f53bbcc762796b76afa0893b2ac847459dc3f17576de5054dfee5b9bc1d0fab80810ba4bffc64c8fe54464b5d93ffef3088bf3c6c250aef126f46b6dc2ee6a3da71f080e5a32122fa48358b5f6629cfb91b73a28afe2952cda5e1d4d7f6f0b6178419438f8c963af44d674b48b431139cc64c8fe48344a2500aa475b39fc9b0b90c9febbcc7c78b342d9a25e98198a23cda2aa58fd17ff6e511143f0689141f048a1ced057f3db9e7dd118405b03b90b89fd418050c5e5451b4de4ea5ad04f43b8b0b8546885da1941286d4f1531cabc9e4dfa26dafe09c953c75c6211879f62cb0f6badca8b35db8b47a407fe6c402b05a137f020103a381af3081ac301d0603551d0e041604144ad8ba0472073d28127706ddc6ccb9050441bbc7307d0603551d230476307480144ad8ba0472073d28127706ddc6ccb9050441bbc7a151a44f304d310b3009060355040613025553311330110603550408130a43616c69666f726e6961311230100603550407130950616c6f20416c746f31153013060355040a130c564d776172652c20496e632e820900e9d9ff69e6f3e7e4300c0603551d13040530030101ff300d06092a864886f70d01010b0500038201010070efb42ec4c4ae66d81820271c0c8d0d4f9e93b3e7f4e5956f6c094579162720c39d943fb0dbc0e7b74592a74b49a7438b940b59c7de186531847553c035bc160b2b939bd5fb5252a059083c37a4f50151f83fbd627b3525ecc6bbb5219da2175d808a0dfc1b4c87538363b40bd549930d69f67233ecdaeec8398dac8f6abe8033b8e168e3440a66037545caca2ae010ee52064532ca1b67b7d024bc9bbea291590c0a7e342a264fa58015b9d34723cd0bc34bc994f843d16f874839badeef168213cb4d0a3f05c1a1be647fb254d473967d85a67ac5eed3514c4e3c77bcdf401b49626070f8080bdd3228ebd15b57082e00a8c05b2135712836433a97e96ca3a159c0a5e494a74a87b5ab155c2bf072e703000000000000cb0300005be9d5a38f0a53478735445afb708f62308203b73082029fa003020102020900e34ca75a0a615853300d06092a864886f70d01010b05003072310b30090603550406130255533113301106035504080c0a43616c69666f726e69613112301006035504070c0950616c6f20416c746f31153013060355040a0c0c564d776172652c20496e632e3123302106035504030c1a564d776172652053656375726520426f6f74205369676e696e67301e170d3137313032343036343735395a170d3337313031393036343735395a3072310b30090603550406130255533113301106035504080c0a43616c69666f726e69613112301006035504070c0950616c6f20416c746f31153013060355040a0c0c564d776172652c20496e632e3123302106035504030c1a564d776172652053656375726520426f6f74205369676e696e6730820122300d06092a864886f70d01010105000382010f003082010a0282010100e371a456721092974979525f916f71409d19f9fb780429bbabe3c0af865d16a149d5aeebf1dc6b078eded6b998226ebb018f805d7cf527efef7b9e4c24806a6acb0ed4fe74621f6734af8a252261f953dc0304ed9908a0be78b6a886e9f302eb8e9ec66a154392e2a1daeaed4610d3c830c0a92d6f415a7775f84b3d6a6773dce7190e468baffab1ecb64f3d99ad9e59e8da390626138272bbd7165845dac03b78d45df404463091fe710dfbd3b783884f8102ce5cb50bbdcce9e901121bf16881376014ed5b6b5859a0228733864965569edacd16451f9a34d905004204175ac227fa106f72650b0c717e755e6c90100473ece0a52b6cc61cc2cf193686c11f0203010001a350304e301d0603551d0e0416041404597f3e1ffb240bba0ff0f05d5eb05f3e15f6d7301f0603551d2304183016801404597f3e1ffb240bba0ff0f05d5eb05f3e15f6d7300c0603551d13040530030101ff300d06092a864886f70d01010b0500038201010008bdb6a6bb55a3ebd84c4c602fef26d97f377a482a9db39421213e07da767bec3701eaff051ee6cf881a854eb41aac85c20c1e62088fb3f95a845a22e6f91dc4d0309e393c911578f5e2201b520a6d146131955346ff20196f9404994ab2094d82addb30f27d26212a135cc1799a38c429e310278a05a1e0416abba23aec8482b3aaad2f58dcedbc03a18b6edade6b497cd71be7c40846130ae6543320cdc4b277f1cec8b70be78cc33b7c9cd9f285c8bcfc4017f07c7f0f0ad9f37a91b7099509072e78f603232c3eeee99a9f6d4b0e0306f0c3ae69190e809d663ee8fdb7fdf46da2e778834484e2ad519b51cce6f1cf0f107d490fd71c02c5758ec9524709a159c0a5e494a74a87b5ab155c2bf072400600000000000024060000bd9afa775903324dbd6028f4e78f784b30820610308203f8a003020102020a6108d3c4000000000004300d06092a864886f70d01010b0500308191310b3009060355040613025553311330110603550408130a57617368696e67746f6e3110300e060355040713075265646d6f6e64311e301c060355040a13154d6963726f736f667420436f72706f726174696f6e313b3039060355040313324d6963726f736f667420436f72706f726174696f6e205468697264205061727479204d61726b6574706c61636520526f6f74301e170d3131303632373231323234355a170d3236303632373231333234355a308181310b3009060355040613025553311330110603550408130a57617368696e67746f6e3110300e060355040713075265646d6f6e64311e301c060355040a13154d6963726f736f667420436f72706f726174696f6e312b3029060355040313224d6963726f736f667420436f72706f726174696f6e2055454649204341203230313130820122300d06092a864886f70d01010105000382010f003082010a0282010100a5086c4cc745096a4b0ca4c0877f06750c43015464e0167f07ed927d0bb273bf0c0ac64a4561a0c5162d96d3f52ba0fb4d499b4180903cb954fde6bcd19dc4a4188a7f418a5c59836832bb8c47c9ee71bc214f9a8a7cff443f8d8f32b22648ae75b5eec94c1e4a197ee4829a1d78774d0cb0bdf60fd316d3bcfa2ba551385df5fbbadb7802dbffec0a1b96d583b81913e9b6c07b407be11f2827c9faef565e1ce67e947ec0f044b27939e5dab2628b4dbf3870e2682414c933a40837d558695ed37cedc1045308e74eb02a876308616f631559eab22b79d70c61678a5bfd5ead877fba86674f71581222042222ce8bef547100ce503558769508ee6ab1a201d50203010001a382017630820172301206092b060104018237150104050203010001302306092b060104018237150204160414f8c16bb77f77534af325371d4ea1267b0f207080301d0603551d0e0416041413adbf4309bd82709c8cd54f316ed522988a1bd4301906092b0601040182371402040c1e0a00530075006200430041300b0603551d0f040403020186300f0603551d130101ff040530030101ff301f0603551d2304183016801445665243e17e5811bfd64e9e2355083b3a226aa8305c0603551d1f045530533051a04fa04d864b687474703a2f2f63726c2e6d6963726f736f66742e636f6d2f706b692f63726c2f70726f64756374732f4d6963436f725468695061724d6172526f6f5f323031302d31302d30352e63726c306006082b0601050507010104543052305006082b060105050730028644687474703a2f2f7777772e6d6963726f736f66742e636f6d2f706b692f63657274732f4d6963436f725468695061724d6172526f6f5f323031302d31302d30352e637274300d06092a864886f70d01010b05000382020100350842ff30cccef7760cad1068583529463276277cef124127421b4aaa6d813848591355f3e95834a6160b82aa5dad82da808341068fb41df203b9f31a5d1bf15090f9b3558442281c20bdb2ae5114c5c0ac9795211c90db0ffc779e95739188cabdbd52b905500ddf579ea061ed0de56d25d9400f1740c8cea34ac24daf9a121d08548fbdc7bcb92b3d492b1f32fc6a21694f9bc87e4234fc3606178b8f2040c0b39a257527cdc903a3f65dd1e736547ab950b5d312d107bfbb74dfdc1e8f80d5ed18f42f14166b2fde668cb023e5c784d8edeac13382ad564b182df1689507cdcff072f0aebbdd8685982c214c332bf00f4af06887b592553275a16a826a3ca32511a4edadd704aecbd84059a084d1954c6291221a741d8c3d470e44a6e4b09b3435b1fab653a82c81eca40571c89db8bae81b4466e447540e8e567fb39f1698b286d0683e9023b52f5e8f50858dc68d825f41a1f42e0de099d26c75e4b669b52186fa07d1f6e24dd1daad2c77531e253237c76c52729586b0f135616a19f5b23b815056a6322dfea289f94286271855a182ca5a9bf830985414a64796252fc826e441941a5c023fe596e3855b3c3e3fbb47167255e22522b1d97be703062aa3f71e9046c3000dd61989e30e352762037115a6efd027a0a0593760f83894b8e07870f8ba4c868794f6e0ae0245ee65c2b6a37e69167507929bf5a6bc598358a159c0a5e494a74a87b5ab155c2bf0720706000000000000eb050000bd9afa775903324dbd6028f4e78f784b308205d7308203bfa003020102020a61077656000000000008300d06092a864886f70d01010b0500308188310b3009060355040613025553311330110603550408130a57617368696e67746f6e3110300e060355040713075265646d6f6e64311e301c060355040a13154d6963726f736f667420436f72706f726174696f6e31323030060355040313294d6963726f736f667420526f6f7420436572746966696361746520417574686f726974792032303130301e170d3131313031393138343134325a170d3236313031393138353134325a308184310b3009060355040613025553311330110603550408130a57617368696e67746f6e3110300e060355040713075265646d6f6e64311e301c060355040a13154d6963726f736f667420436f72706f726174696f6e312e302c060355040313254d6963726f736f66742057696e646f77732050726f64756374696f6e20504341203230313130820122300d06092a864886f70d01010105000382010f003082010a0282010100dd0cbba2e42e09e3e7c5f79669bc0021bd693333efad04cb5480ee0683bbc52084d9f7d28bf338b0aba4ad2d7c627905ffe34a3f04352070e3c4e76be09cc03675e98a31dd8d70e5dc37b5744696285b8760232cbfdc47a567f751279e72eb07a6c9b91e3b53357ce5d3ec27b9871cfeb9c923096fa84691c16e963c41d3cba33f5d026a4dec691f25285c36fffd43150a94e019b4cfdfc212e2c25b27ee2778308b5b2a096b22895360162cc0681d53baec49f39d618c85680973445d7da2542bdd79f715cf355d6c1c2b5ccebc9c238b6f6eb526d93613c34fd627aeb9323b41922ce1c7cd77e8aa544ef75c0b048765b44318a8b2e06d1977ec5a24fa48030203010001a38201433082013f301006092b06010401823715010403020100301d0603551d0e04160414a92902398e16c49778cd90f99e4f9ae17c55af53301906092b0601040182371402040c1e0a00530075006200430041300b0603551d0f040403020186300f0603551d130101ff040530030101ff301f0603551d23041830168014d5f656cb8fe8a25c6268d13d94905bd7ce9a18c430560603551d1f044f304d304ba049a0478645687474703a2f2f63726c2e6d6963726f736f66742e636f6d2f706b692f63726c2f70726f64756374732f4d6963526f6f4365724175745f323031302d30362d32332e63726c305a06082b06010505070101044e304c304a06082b06010505073002863e687474703a2f2f7777772e6d6963726f736f66742e636f6d2f706b692f63657274732f4d6963526f6f4365724175745f323031302d30362d32332e637274300d06092a864886f70d01010b0500038202010014fc7c7151a579c26eb2ef393ebc3c520f6e2b3f101373fea868d048a6344d8a960526ee3146906179d6ff382e456bf4c0e528b8da1d8f8adb09d71ac74c0a36666a8cec1bd70490a81817a49bb9e240323676c4c15ac6bfe404c0ea16d3acc368ef62acdd546c503058a6eb7cfe94a74e8ef4ec7c867357c2522173345af3a38a56c804da0709edf88be3cef47e8eaef0f60b8a08fb3fc91d727f53b8ebbe63e0e33d3165b081e5f2accd16a49f3da8b19bc242d090845f541dff89eaba1d47906fb0734e419f409f5fe5a12ab21191738a2128f0cede73395f3eab5c60ecdf0310a8d309e9f4f69685b67f51886647198da2b0123d812a680577bb914c627bb6c107c7ba7a8734030e4b627a99e9cafcce4a37c92da4577c1cfe3ddcb80f5afad6c4b30285023aeab3d96ee4692137de81d1f675190567d393575e291b39c8ee2de1cde445735bd0d2ce7aab1619824658d05e9d81b367af6c35f2bce53f24e235a20a7506f6185699d4782cd1051bebd088019daa10f105dfba7e2c63b7069b2321c4f9786ce2581706362b911203cca4d9f22dbaf9949d40ed1845f1ce8a5c6b3eab03d370182a0a6ae05f47d1d5630a32f2afd7361f2a705ae5425908714b57ba7e8381f0213cf41cc1c5b990930e88459386e9b12099be98cbc595a45d62d6a0630820bd7510777d3df345b99f979fcb57806f33a904cf77a4621c597e", "guid": "d719b2cb-3d3a-4596-a3bc-dad00e67656f", "attr": 39 }, { "name": "KEK", "data": "0000a159c0a5e494a74a87b5ab155c2bf0721806000000000000fc050000bd9afa775903324dbd6028f4e78f784b308205e8308203d0a003020102020a610ad188000000000003300d06092a864886f70d01010b0500308191310b3009060355040613025553311330110603550408130a57617368696e67746f6e3110300e060355040713075265646d6f6e64311e301c060355040a13154d6963726f736f667420436f72706f726174696f6e313b3039060355040313324d6963726f736f667420436f72706f726174696f6e205468697264205061727479204d61726b6574706c61636520526f6f74301e170d3131303632343230343132395a170d3236303632343230353132395a308180310b3009060355040613025553311330110603550408130a57617368696e67746f6e3110300e060355040713075265646d6f6e64311e301c060355040a13154d6963726f736f667420436f72706f726174696f6e312a3028060355040313214d6963726f736f667420436f72706f726174696f6e204b454b204341203230313130820122300d06092a864886f70d01010105000382010f003082010a0282010100c4e8b58abfad5726b026c3eae7fb577a44025d070dda4ae5742ae6b00fec6debec7fb9e35a63327c11174f0ee30ba73815938ec6f5e084b19a9b2ce7f5b791d609e1e2c004a8ac301cdf48f306509a64a7517fc8854f8f2086cefe2fe19fff82c0ede9cdcef4536a623a0b43b9e225fdfe05f9d4c414ab11e223898d70b7a41d4decaee59cfa16c2d7c1cbd4e8c42fe599ee248b03ec8df28beac34afb4311120b7eb547926cdce60489ebf53304eb10012a71e5f983133cff25092f687646ffba4fbedcad712a58aafb0ed2793de49b653bcc292a9ffc7259a2ebae92eff6351380c602ece45fcc9d76cdef6392c1af79408479877fe352a8e89d7b07698f150203010001a382014f3082014b301006092b06010401823715010403020100301d0603551d0e0416041462fc43cda03ea4cb6712d25bd955ac7bccb68a5f301906092b0601040182371402040c1e0a00530075006200430041300b0603551d0f040403020186300f0603551d130101ff040530030101ff301f0603551d2304183016801445665243e17e5811bfd64e9e2355083b3a226aa8305c0603551d1f045530533051a04fa04d864b687474703a2f2f63726c2e6d6963726f736f66742e636f6d2f706b692f63726c2f70726f64756374732f4d6963436f725468695061724d6172526f6f5f323031302d31302d30352e63726c306006082b0601050507010104543052305006082b060105050730028644687474703a2f2f7777772e6d6963726f736f66742e636f6d2f706b692f63657274732f4d6963436f725468695061724d6172526f6f5f323031302d31302d30352e637274300d06092a864886f70d01010b05000382020100d48488f514941802ca2a3cfb2a921c0cd7a0d1f1e85266a8eea2b5757a9000aa2da4765aea79b7b9376a517b1064f6e164f20267bef7a81b78bdbace8858640cd657c819a35f05d6dbc6d069ce484b32b7eb5dd230f5c0f5b8ba7807a32bfe9bdb345684ec82caae4125709c6be9fe900fd7961fe5e7941fb22a0c8d4bff2829107bf7d77ca5d176b905c879ed0f90929cc2fedf6f7e6c0f7bd4c145dd345196390fe55e56d8180596f407a642b3a077fd0819f27156cc9f8623a487cba6fd587ed4696715917e81f27f13e50d8b8a3c8784ebe3cebd43e5ad2d84938e6a2b5a7c44fa52aa81c82d1cbbe052df0011f89a3dc160b0e133b5a388d165190a1ae7ac7ca4c182874e38b12f0dc514876ffd8d2ebc39b6e7e6c3e0e4cd2784ef9442ef298b9046413b811b67d8f9435965cb0dbcfd00924ff4753ba7a924fc50414079e02d4f0a6a27766e52ed96697baf0ff78705d045c2ad5314811ffb3004aa373661da4a691b34d868edd602cf6c940cd3cf6c2279adb1f0bc03a24660a9c407c22182f1fdf2e8793260bfd8aca522144bcac1d84beb7d3f5735b2e64f75b4b060032253ae91791dd69b411f15865470b2de0d350f7cb03472ba97603bf079eba2b21c5da216b887c5e91bf6b597256f389fe391fa8a7998c3690eb7a31c200597f8ca14ae00d7c4f3c01410756b34a01bb59960f35cb0c5574e36d23284bf9e", "guid": "8be4df61-93ca-11d2-aa0d-00e098032b8c", "attr": 39 }, { "name": "PK", "data": "0000ed8c2e45ffdf8c4bae015118862e682c2d00000000000000110000005be9d5a38f0a53478735445afb708f6200", "guid": "8be4df61-93ca-11d2-aa0d-00e098032b8c", "attr": 39 } ] }python-uefivars-1.2/uefivars000077500000000000000000000003031457232171300162720ustar00rootroot00000000000000#!/usr/bin/env python3 # # Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. # SPDX-License-Identifier: MIT import pyuefivars if __name__ == '__main__': pyuefivars.main()