From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-io1-f67.google.com (mail-io1-f67.google.com [209.85.166.67]) by mx.groups.io with SMTP id smtpd.web09.1991.1604429406176222415 for ; Tue, 03 Nov 2020 10:50:06 -0800 Authentication-Results: mx.groups.io; dkim=pass header.i=@gmail.com header.s=20161025 header.b=oJ8hyVjh; spf=pass (domain: gmail.com, ip: 209.85.166.67, mailfrom: matthewfcarlson@gmail.com) Received: by mail-io1-f67.google.com with SMTP id j12so4907813iow.0 for ; Tue, 03 Nov 2020 10:50:06 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=ZLOkE9lwdtU6sGM6mmRxag/iUv6ZcPmf/qZ/HOkv+Ao=; b=oJ8hyVjh4PQu5DJWNC5zDducYX99vBBqX7I85F5ehLU/xFjl0YWEd0K02r8cmErvrI dQjZrQP6se9dB9RINN0gKXLYtHx8KW3XAfrKLDsP6vFxv+9neZoURo7t6TJwmhkwdCPr lO0eC+OyzL5Hp+QyOqVIAi0w6BJvS6w6x/3eLwlFHSgVsx/BYDZSap856f7unnJFRD0e d1j5EERgZe1GxcmcAb0hD8rNO0pwGLjPoGm5Cv4U2v1B+Kc+G3VqxnVHa3YrdNGMvyN9 IVe4JcPOCwWZcVPp9+PSzDp0xO0tEOT6DG97XIxcT3Lem65plR3nXrxIr8Q/GAELZ9Dx Kpjw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=ZLOkE9lwdtU6sGM6mmRxag/iUv6ZcPmf/qZ/HOkv+Ao=; b=jM7WSVba9S/AzaLA6yWMgU7cRkvolMjbxMGN6SoVh2csL78BYo5axHrMj6csDM/+6c QM2r5Xwcw/X+HZa9SDiZQNzi9ihGk8XO9DK5OGElGhKjDRBjpGeFiz3FkBZ+8nl7BIQH ViFJSYz65XZFZB1oRZERJ0f8u24xFaAlkL0jZOrsMKPS5AHoiFuvvD5ZIMy6rATVF4IJ X6dn7o7wo1sKKma4Qu0kOd8pkBN1lSwJBY0VLHi9TjgUepboV/WIJw/UtYzBTM84iTPn fFsiBu4PNdcuPkpci7Fqv3YJ2IFF622JB9Dbc2rwpa1JxBhfwmKKY+ra0QGiX4BAKYeY fC0g== X-Gm-Message-State: AOAM531o25eKa4ts1I8Qlpt1iMPuKpqQpv+OQrbe03ilVxanlmSV8OJ0 LqU0TA6gQ2RkTDqqn7E7PUc76Co6uhmU8kJzLFM= X-Google-Smtp-Source: ABdhPJz9vE+OtROZbF5f4SSUZjw+691rSJqNcPe+GtvT/IA6BD42gUJE3/GAGa0KVr79U26uKhGhQsrC76uFmwMNRk4= X-Received: by 2002:a6b:b983:: with SMTP id j125mr14877180iof.201.1604429405561; Tue, 03 Nov 2020 10:50:05 -0800 (PST) MIME-Version: 1.0 References: <20201103003630.1869-1-matthewfcarlson@gmail.com> In-Reply-To: From: "Matthew Carlson" Date: Tue, 3 Nov 2020 10:49:57 -0800 Message-ID: Subject: Re: [edk2-devel] [PATCH v1 0/1] Use Pip version of BaseTools To: "Shi, Steven" Cc: "devel@edk2.groups.io" , "Feng, Bob C" , Liming Gao , "Chen, Christine" , Sean Brogan , "Kinney, Michael D" Content-Type: multipart/alternative; boundary="000000000000c92bbb05b338547e" --000000000000c92bbb05b338547e Content-Type: text/plain; charset="UTF-8" Hey Steven, So there's a pip requirement file that should keep things in lockstep in terms of dependencies. The initial plan is to have every commit into basetools be released. Changes in BaseTools will be submitted and then edk2 will be updated to consume that new feature. So it will simply be a new patch in the series when people submit. So whenever there's some sort of change where it is required in lockstep, the expectation is that basetools will be updated first. Right now, the basetools repo doesn't try to build with EDK2 (though that is coming). It does unit tests, code coverage, linting, and a few other things (most of them won't cause an error, due to it breaking current builds). But we already do CI with EDK2 in the pytools repos ( https://github.com/tianocore/edk2-pytool-extensions) where we clone, install locally, and test. It's run as an optional test and the expectation is that build breaks should be well-understood and tested by the person submitting the breaking change. The goal eventually is for the unit tests to provide a very good litmus test for whether it will break edk2 or not, but BaseTools is currently at 4% coverage, so we have a good ways to go there. Great question! -Matthew Carlson On Mon, Nov 2, 2020 at 8:54 PM Shi, Steven wrote: > Hello Carlson, > I'd like to know the validation process of the BaseTools patch in Open CI > after we fully adopt the pip based BaseTools. There will be two different > repos as edk2-basetools and edk2, and the two repos closely depend on each > other to do the build validation. We might need a mechanism to sync the two > repos dependency when we want to change the edk2-basetools. When I send a > patch to change edk2-basetools, is there a mechanism in Open CI to let the > build agent not to use the pre-installed pip basetools, but to clone the > new branch version of edk2-basetools, build&install the new version > basetools, and force the edk2 to finish build with the new version > basetools? > > > Thanks > Steven Shi > > > -----Original Message----- > > From: devel@edk2.groups.io On Behalf Of > > Matthew Carlson > > Sent: Tuesday, November 3, 2020 8:36 AM > > To: devel@edk2.groups.io > > Cc: Feng, Bob C ; Liming Gao > > ; Chen, Christine ; > > Sean Brogan ; Kinney, Michael D > > > > Subject: [edk2-devel] [PATCH v1 0/1] Use Pip version of BaseTools > > > > From: Matthew Carlson > > > > Hello all, > > > > This patch adds the capability to leverage the pip based BaseTools. > > The BaseTools master is current with EDK2 master (as of 3pm Nov 2, 2020). > > While I could rehash a lot of what has gone out on the mailing list, I > think > > it might be better just to link the discussion. > > > > In a nutshell, setup will detect if edk2-basetools is installed, and if > it > > is, use the other verison of BinWrappers (BinPipWrappers). This should > > provide an easy and convenient way to transition over. By default, CI > > uses the pip version. > > > > The pipeline is setup. Every commit that gets pushed to master on > basetools > > get published to pypi and tagged. This should offer bisectability and > easier > > debugging. Additionally, the pip requirements file tracks a specific > version. > > > > We'd like to set a date for when PR's no longer go into EDK2 for > BaseTools > > and instead go exclusively into the new basetools repo. > > > > Ref: https://edk2.groups.io/g/devel/topic/76572200#64993 > > Ref: https://github.com/tianocore/edk2-basetools > > Ref: https://github.com/tianocore/edk2/pull/1072 > > > > Cc: Bob Feng > > Cc: Liming Gao > > Cc: Yuwei Chen > > Cc: Sean Brogan > > Cc: Michael Kinney > > > > Matthew Carlson (1): > > BaseTools: Use pip module if available, CI uses it by default > > > > .pytool/CISettings.py > | 20 +- > > BaseTools/BinPipWrappers/PosixLike/AmlToC > | 14 + > > BaseTools/BinPipWrappers/PosixLike/BPDG > | 12 + > > BaseTools/BinPipWrappers/PosixLike/Brotli > | 29 ++ > > BaseTools/BinPipWrappers/PosixLike/BrotliCompress > | > > 34 ++ > > BaseTools/BinPipWrappers/PosixLike/DevicePath > | 29 > > ++ > > BaseTools/BinPipWrappers/PosixLike/Ecc > | 13 + > > BaseTools/BinPipWrappers/PosixLike/EfiRom > | 29 > > ++ > > BaseTools/BinPipWrappers/PosixLike/GenCrc32 > | 29 > > ++ > > BaseTools/BinPipWrappers/PosixLike/GenDepex > | 12 > > + > > BaseTools/BinPipWrappers/PosixLike/GenFds > | 12 + > > BaseTools/BinPipWrappers/PosixLike/GenFfs > | 29 ++ > > BaseTools/BinPipWrappers/PosixLike/GenFv > | 29 ++ > > BaseTools/BinPipWrappers/PosixLike/GenFw > | 29 > > ++ > > BaseTools/BinPipWrappers/PosixLike/GenPatchPcdTable > | > > 12 + > > BaseTools/BinPipWrappers/PosixLike/GenSec > | 29 > > ++ > > BaseTools/BinPipWrappers/PosixLike/GenerateCapsule > | > > 12 + > > BaseTools/BinPipWrappers/PosixLike/LzmaCompress > | > > 29 ++ > > BaseTools/BinPipWrappers/PosixLike/LzmaF86Compress > | > > 19 + > > BaseTools/BinPipWrappers/PosixLike/PatchPcdValue > | > > 12 + > > BaseTools/BinPipWrappers/PosixLike/Pkcs7Sign > | 12 + > > BaseTools/BinPipWrappers/PosixLike/Rsa2048Sha256GenerateKeys > > | 12 + > > BaseTools/BinPipWrappers/PosixLike/Rsa2048Sha256Sign > > | 12 + > > BaseTools/BinPipWrappers/PosixLike/Split > | 29 ++ > > BaseTools/BinPipWrappers/PosixLike/TargetTool > | 12 > > + > > BaseTools/BinPipWrappers/PosixLike/TianoCompress > | > > 29 ++ > > BaseTools/BinPipWrappers/PosixLike/Trim > | 13 + > > BaseTools/BinPipWrappers/PosixLike/UPT > | 12 + > > BaseTools/BinPipWrappers/PosixLike/VfrCompile > | 29 > > ++ > > BaseTools/BinPipWrappers/PosixLike/VolInfo > | 29 ++ > > BaseTools/BinPipWrappers/PosixLike/build > | 12 + > > BaseTools/{BinWrappers => > > BinPipWrappers}/PosixLike/posix_path_env.yaml | 3 +- > > BaseTools/BinPipWrappers/WindowsLike/AmlToC.bat > | > > 3 + > > BaseTools/BinPipWrappers/WindowsLike/BPDG.bat > | > > 3 + > > BaseTools/BinPipWrappers/WindowsLike/BrotliCompress.bat > > | 55 ++ > > BaseTools/BinPipWrappers/WindowsLike/Ecc.bat > | 3 > > + > > BaseTools/BinPipWrappers/WindowsLike/GenDepex.bat > > | 3 + > > BaseTools/BinPipWrappers/WindowsLike/GenFds.bat > | > > 3 + > > BaseTools/BinPipWrappers/WindowsLike/GenPatchPcdTable.bat > > | 3 + > > BaseTools/BinPipWrappers/WindowsLike/GenerateCapsule.bat > > | 1 + > > BaseTools/BinPipWrappers/WindowsLike/PatchPcdValue.bat > > | 3 + > > BaseTools/BinPipWrappers/WindowsLike/Pkcs7Sign.bat > | > > 3 + > > BaseTools/BinPipWrappers/WindowsLike/Rsa2048Sha256GenerateKeys.bat > > | 1 + > > BaseTools/BinPipWrappers/WindowsLike/Rsa2048Sha256Sign.bat > > | 3 + > > BaseTools/BinPipWrappers/WindowsLike/TargetTool.bat > | > > 3 + > > BaseTools/BinPipWrappers/WindowsLike/Trim.bat > | 3 > > + > > BaseTools/BinPipWrappers/WindowsLike/UPT.bat > | 3 > > + > > BaseTools/BinPipWrappers/WindowsLike/build.bat > | 3 > > + > > BaseTools/{BinWrappers => > > BinPipWrappers}/WindowsLike/win_build_tools_path_env.yaml | 3 +- > > BaseTools/BinWrappers/PosixLike/posix_path_env.yaml > | > > 1 + > > BaseTools/BinWrappers/WindowsLike/win_build_tools_path_env.yaml > > | 1 + > > BaseTools/BuildEnv > | 548 ++++++++++--- > > ------- > > BaseTools/Scripts/PatchCheck.py > | 1 + > > BaseTools/toolsetup.bat > | 19 + > > pip-requirements.txt > | 1 + > > 55 files changed, 1035 insertions(+), 272 deletions(-) > > create mode 100644 BaseTools/BinPipWrappers/PosixLike/AmlToC > > create mode 100644 BaseTools/BinPipWrappers/PosixLike/BPDG > > create mode 100644 BaseTools/BinPipWrappers/PosixLike/Brotli > > create mode 100644 BaseTools/BinPipWrappers/PosixLike/BrotliCompress > > create mode 100644 BaseTools/BinPipWrappers/PosixLike/DevicePath > > create mode 100644 BaseTools/BinPipWrappers/PosixLike/Ecc > > create mode 100644 BaseTools/BinPipWrappers/PosixLike/EfiRom > > create mode 100644 BaseTools/BinPipWrappers/PosixLike/GenCrc32 > > create mode 100644 BaseTools/BinPipWrappers/PosixLike/GenDepex > > create mode 100644 BaseTools/BinPipWrappers/PosixLike/GenFds > > create mode 100644 BaseTools/BinPipWrappers/PosixLike/GenFfs > > create mode 100644 BaseTools/BinPipWrappers/PosixLike/GenFv > > create mode 100644 BaseTools/BinPipWrappers/PosixLike/GenFw > > create mode 100644 > > BaseTools/BinPipWrappers/PosixLike/GenPatchPcdTable > > create mode 100644 BaseTools/BinPipWrappers/PosixLike/GenSec > > create mode 100644 BaseTools/BinPipWrappers/PosixLike/GenerateCapsule > > create mode 100644 BaseTools/BinPipWrappers/PosixLike/LzmaCompress > > create mode 100644 > > BaseTools/BinPipWrappers/PosixLike/LzmaF86Compress > > create mode 100644 BaseTools/BinPipWrappers/PosixLike/PatchPcdValue > > create mode 100644 BaseTools/BinPipWrappers/PosixLike/Pkcs7Sign > > create mode 100644 > > BaseTools/BinPipWrappers/PosixLike/Rsa2048Sha256GenerateKeys > > create mode 100644 > > BaseTools/BinPipWrappers/PosixLike/Rsa2048Sha256Sign > > create mode 100644 BaseTools/BinPipWrappers/PosixLike/Split > > create mode 100644 BaseTools/BinPipWrappers/PosixLike/TargetTool > > create mode 100644 BaseTools/BinPipWrappers/PosixLike/TianoCompress > > create mode 100644 BaseTools/BinPipWrappers/PosixLike/Trim > > create mode 100644 BaseTools/BinPipWrappers/PosixLike/UPT > > create mode 100644 BaseTools/BinPipWrappers/PosixLike/VfrCompile > > create mode 100644 BaseTools/BinPipWrappers/PosixLike/VolInfo > > create mode 100644 BaseTools/BinPipWrappers/PosixLike/build > > copy BaseTools/{BinWrappers => > > BinPipWrappers}/PosixLike/posix_path_env.yaml (71%) > > create mode 100644 BaseTools/BinPipWrappers/WindowsLike/AmlToC.bat > > create mode 100644 BaseTools/BinPipWrappers/WindowsLike/BPDG.bat > > create mode 100644 > > BaseTools/BinPipWrappers/WindowsLike/BrotliCompress.bat > > create mode 100644 BaseTools/BinPipWrappers/WindowsLike/Ecc.bat > > create mode 100644 > > BaseTools/BinPipWrappers/WindowsLike/GenDepex.bat > > create mode 100644 BaseTools/BinPipWrappers/WindowsLike/GenFds.bat > > create mode 100644 > > BaseTools/BinPipWrappers/WindowsLike/GenPatchPcdTable.bat > > create mode 100644 > > BaseTools/BinPipWrappers/WindowsLike/GenerateCapsule.bat > > create mode 100644 > > BaseTools/BinPipWrappers/WindowsLike/PatchPcdValue.bat > > create mode 100644 > > BaseTools/BinPipWrappers/WindowsLike/Pkcs7Sign.bat > > create mode 100644 > > BaseTools/BinPipWrappers/WindowsLike/Rsa2048Sha256GenerateKeys.bat > > create mode 100644 > > BaseTools/BinPipWrappers/WindowsLike/Rsa2048Sha256Sign.bat > > create mode 100644 > > BaseTools/BinPipWrappers/WindowsLike/TargetTool.bat > > create mode 100644 BaseTools/BinPipWrappers/WindowsLike/Trim.bat > > create mode 100644 BaseTools/BinPipWrappers/WindowsLike/UPT.bat > > create mode 100644 BaseTools/BinPipWrappers/WindowsLike/build.bat > > copy BaseTools/{BinWrappers => > > BinPipWrappers}/WindowsLike/win_build_tools_path_env.yaml (70%) > > > > -- > > 2.28.0.vfs.0.0 > > > > > > > > > > > > --000000000000c92bbb05b338547e Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hey Steven,

So there&#= 39;s a pip requirement file that should=C2=A0keep things=C2=A0in lockstep i= n terms of dependencies. The initial plan is to have every commit into base= tools be released. Changes in BaseTools will be submitted and then edk2 wil= l be updated=C2=A0to consume that new feature. So it will simply be a new p= atch in the series when people submit. So whenever there's some sort of= change where it is required in lockstep, the expectation is that basetools= will be updated first.=C2=A0

Right now, the baset= ools repo doesn't try to build with EDK2 (though that is coming). It do= es unit tests, code coverage, linting, and a few other things (most of them= won't cause an error, due to it breaking current builds). But we alrea= dy do CI with EDK2 in the pytools repos (https://github.com/tianocore/edk2-pytool-exte= nsions) where we clone, install locally, and test. It's run as an o= ptional test and the expectation is that build breaks should be well-unders= tood and tested by the person submitting the breaking change. The goal even= tually is for the unit tests to provide a very good litmus test for whether= it will break edk2 or not, but BaseTools is currently at 4% coverage, so w= e have a good ways to go there.

Great question!
-Matthew Carlson


On Mon, Nov 2, 2020= at 8:54 PM Shi, Steven <steven.= shi@intel.com> wrote:
Hello Carlson,
I'd like to know the validation process of the BaseTools patch in Open= CI after we fully adopt the pip based BaseTools. There will be two differe= nt repos as edk2-basetools and edk2,=C2=A0 and the two repos closely depend= on each other to do the build validation. We might need a mechanism to syn= c the two repos dependency when we want to change the edk2-basetools. When = I send a patch to change edk2-basetools, is there a mechanism in Open CI to= let the build agent not to use the pre-installed pip basetools, but to clo= ne the new branch version of edk2-basetools, build&install the new vers= ion basetools, and force the edk2 to finish build with the new version base= tools?


Thanks
Steven Shi

> -----Original Message-----
> From: devel= @edk2.groups.io <devel@edk2.groups.io> On Behalf Of
> Matthew Carlson
> Sent: Tuesday, November 3, 2020 8:36 AM
> To: devel@e= dk2.groups.io
> Cc: Feng, Bob C <bob.c.feng@intel.com>; Liming Gao
> <gao= liming@byosoft.com.cn>; Chen, Christine <yuwei.chen@intel.com>;
> Sean Brogan <sean.brogan@microsoft.com>; Kinney, Michael D
> <m= ichael.d.kinney@intel.com>
> Subject: [edk2-devel] [PATCH v1 0/1] Use Pip version of BaseTools
>
> From: Matthew Carlson <matthewfcarlson@gmail.com>
>
> Hello all,
>
> This patch adds the capability to leverage the pip based BaseTools. > The BaseTools master is current with EDK2 master (as of 3pm Nov 2, 20= 20).
> While I could rehash a lot of what has gone out on the mailing list, = I think
> it might be better just to link the discussion.
>
> In a nutshell, setup will detect if edk2-basetools is installed, and = if it
> is, use the other verison of BinWrappers (BinPipWrappers). This shoul= d
> provide an easy and convenient way to transition over. By default, CI=
> uses the pip version.
>
> The pipeline is setup. Every commit that gets pushed to master on bas= etools
> get published to pypi and tagged. This should offer bisectability and= easier
> debugging. Additionally, the pip requirements file tracks a specific = version.
>
> We'd like to set a date for when PR's no longer go into EDK2 = for BaseTools
> and instead go exclusively into the new basetools repo.
>
> Ref: https://edk2.groups.io/g/devel/topic/7= 6572200#64993
> Ref: https://github.com/tianocore/edk2-basetools
> Ref:
https://github.com/tianocore/edk2/pull/1072
>
> Cc: Bob Feng <
bob.c.feng@intel.com>
> Cc: Liming Gao <gaoliming@byosoft.com.cn>
> Cc: Yuwei Chen <yuwei.chen@intel.com>
> Cc: Sean Brogan <sean.brogan@microsoft.com>
> Cc: Michael Kinney <michael.d.kinney@intel.com>
>
> Matthew Carlson (1):
>=C2=A0 =C2=A0BaseTools: Use pip module if available, CI uses it by def= ault
>
>=C2=A0 .pytool/CISettings.py=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0|=C2=A0 20 +-
>=C2=A0 BaseTools/BinPipWrappers/PosixLike/AmlToC=C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0|=C2=A0 14 + >=C2=A0 BaseTools/BinPipWrappers/PosixLike/BPDG=C2=A0 =C2=A0 =C2=A0 =C2= = =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0|=C2=A0 12 +=
>=C2=A0 BaseTools/BinPipWrappers/PosixLike/Brotli=C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0|=C2=A0 29 ++ >=C2=A0 BaseTools/BinPipWrappers/PosixLike/BrotliCompress=C2=A0 =C2=A0 = = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0|
> 34 ++
>=C2=A0 BaseTools/BinPipWrappers/PosixLike/DevicePath=C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0|=C2=A0 29
> ++
>=C2=A0 BaseTools/BinPipWrappers/PosixLike/Ecc=C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 |=C2=A0 13 = +
>=C2=A0 BaseTools/BinPipWrappers/PosixLike/EfiRom=C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0|=C2=A0 29
> ++
>=C2=A0 BaseTools/BinPipWrappers/PosixLike/GenCrc32=C2=A0 =C2=A0 =C2=A0= =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0|=C2=A0 29
> ++
>=C2=A0 BaseTools/BinPipWrappers/PosixLike/GenDepex=C2=A0 =C2=A0 =C2=A0= =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0|=C2=A0 12
> +
>=C2=A0 BaseTools/BinPipWrappers/PosixLike/GenFds=C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0|=C2=A0 12 + >=C2=A0 BaseTools/BinPipWrappers/PosixLike/GenFfs=C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0|=C2=A0 29 ++ >=C2=A0 BaseTools/BinPipWrappers/PosixLike/GenFv=C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 |=C2=A0 29 ++<= br> >=C2=A0 BaseTools/BinPipWrappers/PosixLike/GenFw=C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 |=C2=A0 29
> ++
>=C2=A0 BaseTools/BinPipWrappers/PosixLike/GenPatchPcdTable=C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0|
> 12 +
>=C2=A0 BaseTools/BinPipWrappers/PosixLike/GenSec=C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0|=C2=A0 29
> ++
>=C2=A0 BaseTools/BinPipWrappers/PosixLike/GenerateCapsule=C2=A0 =C2=A0= =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 |
> 12 +
>=C2=A0 BaseTools/BinPipWrappers/PosixLike/LzmaCompress=C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0|
> 29 ++
>=C2=A0 BaseTools/BinPipWrappers/PosixLike/LzmaF86Compress=C2=A0 =C2=A0= =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 |
> 19 +
>=C2=A0 BaseTools/BinPipWrappers/PosixLike/PatchPcdValue=C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 |
> 12 +
>=C2=A0 BaseTools/BinPipWrappers/PosixLike/Pkcs7Sign=C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 |=C2=A0 12 +
>=C2=A0 BaseTools/BinPipWrappers/PosixLike/Rsa2048Sha256GenerateKeys > |=C2=A0 12 +
>=C2=A0 BaseTools/BinPipWrappers/PosixLike/Rsa2048Sha256Sign
> |=C2=A0 12 +
>=C2=A0 BaseTools/BinPipWrappers/PosixLike/Split=C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 |=C2=A0 29 ++<= br> >=C2=A0 BaseTools/BinPipWrappers/PosixLike/TargetTool=C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0|=C2=A0 12
> +
>=C2=A0 BaseTools/BinPipWrappers/PosixLike/TianoCompress=C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 |
> 29 ++
>=C2=A0 BaseTools/BinPipWrappers/PosixLike/Trim=C2=A0 =C2=A0 =C2=A0 =C2= = =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0|=C2=A0 13 +=
>=C2=A0 BaseTools/BinPipWrappers/PosixLike/UPT=C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 |=C2=A0 12 = +
>=C2=A0 BaseTools/BinPipWrappers/PosixLike/VfrCompile=C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0|=C2=A0 29
> ++
>=C2=A0 BaseTools/BinPipWrappers/PosixLike/VolInfo=C2=A0 =C2=A0 =C2=A0 = = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 |=C2=A0 29 ++
>=C2=A0 BaseTools/BinPipWrappers/PosixLike/build=C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 |=C2=A0 12 + >=C2=A0 BaseTools/{BinWrappers =3D>
> BinPipWrappers}/PosixLike/posix_path_env.yaml=C2=A0 =C2=A0 =C2=A0 =C2= = =A0 =C2=A0 =C2=A0 =C2=A0|=C2=A0 =C2=A03 +-
>=C2=A0 BaseTools/BinPipWrappers/WindowsLike/AmlToC.bat=C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0|
> 3 +
>=C2=A0 BaseTools/BinPipWrappers/WindowsLike/BPDG.bat=C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0|
> 3 +
>=C2=A0 BaseTools/BinPipWrappers/WindowsLike/BrotliCompress.bat
> |=C2=A0 55 ++
>=C2=A0 BaseTools/BinPipWrappers/WindowsLike/Ecc.bat=C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 |=C2=A0 =C2=A03
> +
>=C2=A0 BaseTools/BinPipWrappers/WindowsLike/GenDepex.bat
> |=C2=A0 =C2=A03 +
>=C2=A0 BaseTools/BinPipWrappers/WindowsLike/GenFds.bat=C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0|
> 3 +
>=C2=A0 BaseTools/BinPipWrappers/WindowsLike/GenPatchPcdTable.bat
> |=C2=A0 =C2=A03 +
>=C2=A0 BaseTools/BinPipWrappers/WindowsLike/GenerateCapsule.bat
> |=C2=A0 =C2=A01 +
>=C2=A0 BaseTools/BinPipWrappers/WindowsLike/PatchPcdValue.bat
> |=C2=A0 =C2=A03 +
>=C2=A0 BaseTools/BinPipWrappers/WindowsLike/Pkcs7Sign.bat=C2=A0 =C2=A0= =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 |
> 3 +
>=C2=A0 BaseTools/BinPipWrappers/WindowsLike/Rsa2048Sha256GenerateKeys.= bat
> |=C2=A0 =C2=A01 +
>=C2=A0 BaseTools/BinPipWrappers/WindowsLike/Rsa2048Sha256Sign.bat
> |=C2=A0 =C2=A03 +
>=C2=A0 BaseTools/BinPipWrappers/WindowsLike/TargetTool.bat=C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0|
> 3 +
>=C2=A0 BaseTools/BinPipWrappers/WindowsLike/Trim.bat=C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0|=C2=A0 =C2=A03
> +
>=C2=A0 BaseTools/BinPipWrappers/WindowsLike/UPT.bat=C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 |=C2=A0 =C2=A03
> +
>=C2=A0 BaseTools/BinPipWrappers/WindowsLike/build.bat=C2=A0 =C2=A0 =C2= = =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 |=C2=A0 =C2=A03
> +
>=C2=A0 BaseTools/{BinWrappers =3D>
> BinPipWrappers}/WindowsLike/win_build_tools_path_env.yaml |=C2=A0 =C2= = =A03 +-
>=C2=A0 BaseTools/BinWrappers/PosixLike/posix_path_env.yaml=C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0|
> 1 +
>=C2=A0 BaseTools/BinWrappers/WindowsLike/win_build_tools_path_env.yaml=
> |=C2=A0 =C2=A01 +
>=C2=A0 BaseTools/BuildEnv=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= = =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 | 548 ++++++++++---
> -------
>=C2=A0 BaseTools/Scripts/PatchCheck.py=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0|=C2=A0 =C2=A01 +
>=C2=A0 BaseTools/toolsetup.bat=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0|=C2=A0 19 +
>=C2=A0 pip-requirements.txt=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 |=C2=A0 =C2=A01 +
>=C2=A0 55 files changed, 1035 insertions(+), 272 deletions(-)
>=C2=A0 create mode 100644 BaseTools/BinPipWrappers/PosixLike/AmlToC >=C2=A0 create mode 100644 BaseTools/BinPipWrappers/PosixLike/BPDG
>=C2=A0 create mode 100644 BaseTools/BinPipWrappers/PosixLike/Brotli >=C2=A0 create mode 100644 BaseTools/BinPipWrappers/PosixLike/BrotliCom= press
>=C2=A0 create mode 100644 BaseTools/BinPipWrappers/PosixLike/DevicePat= h
>=C2=A0 create mode 100644 BaseTools/BinPipWrappers/PosixLike/Ecc
>=C2=A0 create mode 100644 BaseTools/BinPipWrappers/PosixLike/EfiRom >=C2=A0 create mode 100644 BaseTools/BinPipWrappers/PosixLike/GenCrc32<= br> >=C2=A0 create mode 100644 BaseTools/BinPipWrappers/PosixLike/GenDepex<= br> >=C2=A0 create mode 100644 BaseTools/BinPipWrappers/PosixLike/GenFds >=C2=A0 create mode 100644 BaseTools/BinPipWrappers/PosixLike/GenFfs >=C2=A0 create mode 100644 BaseTools/BinPipWrappers/PosixLike/GenFv
>=C2=A0 create mode 100644 BaseTools/BinPipWrappers/PosixLike/GenFw
>=C2=A0 create mode 100644
> BaseTools/BinPipWrappers/PosixLike/GenPatchPcdTable
>=C2=A0 create mode 100644 BaseTools/BinPipWrappers/PosixLike/GenSec >=C2=A0 create mode 100644 BaseTools/BinPipWrappers/PosixLike/GenerateC= apsule
>=C2=A0 create mode 100644 BaseTools/BinPipWrappers/PosixLike/LzmaCompr= ess
>=C2=A0 create mode 100644
> BaseTools/BinPipWrappers/PosixLike/LzmaF86Compress
>=C2=A0 create mode 100644 BaseTools/BinPipWrappers/PosixLike/PatchPcdV= alue
>=C2=A0 create mode 100644 BaseTools/BinPipWrappers/PosixLike/Pkcs7Sign=
>=C2=A0 create mode 100644
> BaseTools/BinPipWrappers/PosixLike/Rsa2048Sha256GenerateKeys
>=C2=A0 create mode 100644
> BaseTools/BinPipWrappers/PosixLike/Rsa2048Sha256Sign
>=C2=A0 create mode 100644 BaseTools/BinPipWrappers/PosixLike/Split
>=C2=A0 create mode 100644 BaseTools/BinPipWrappers/PosixLike/TargetToo= l
>=C2=A0 create mode 100644 BaseTools/BinPipWrappers/PosixLike/TianoComp= ress
>=C2=A0 create mode 100644 BaseTools/BinPipWrappers/PosixLike/Trim
>=C2=A0 create mode 100644 BaseTools/BinPipWrappers/PosixLike/UPT
>=C2=A0 create mode 100644 BaseTools/BinPipWrappers/PosixLike/VfrCompil= e
>=C2=A0 create mode 100644 BaseTools/BinPipWrappers/PosixLike/VolInfo >=C2=A0 create mode 100644 BaseTools/BinPipWrappers/PosixLike/build
>=C2=A0 copy BaseTools/{BinWrappers =3D>
> BinPipWrappers}/PosixLike/posix_path_env.yaml (71%)
>=C2=A0 create mode 100644 BaseTools/BinPipWrappers/WindowsLike/AmlToC.= bat
>=C2=A0 create mode 100644 BaseTools/BinPipWrappers/WindowsLike/BPDG.ba= t
>=C2=A0 create mode 100644
> BaseTools/BinPipWrappers/WindowsLike/BrotliCompress.bat
>=C2=A0 create mode 100644 BaseTools/BinPipWrappers/WindowsLike/Ecc.bat=
>=C2=A0 create mode 100644
> BaseTools/BinPipWrappers/WindowsLike/GenDepex.bat
>=C2=A0 create mode 100644 BaseTools/BinPipWrappers/WindowsLike/GenFds.= bat
>=C2=A0 create mode 100644
> BaseTools/BinPipWrappers/WindowsLike/GenPatchPcdTable.bat
>=C2=A0 create mode 100644
> BaseTools/BinPipWrappers/WindowsLike/GenerateCapsule.bat
>=C2=A0 create mode 100644
> BaseTools/BinPipWrappers/WindowsLike/PatchPcdValue.bat
>=C2=A0 create mode 100644
> BaseTools/BinPipWrappers/WindowsLike/Pkcs7Sign.bat
>=C2=A0 create mode 100644
> BaseTools/BinPipWrappers/WindowsLike/Rsa2048Sha256GenerateKeys.bat >=C2=A0 create mode 100644
> BaseTools/BinPipWrappers/WindowsLike/Rsa2048Sha256Sign.bat
>=C2=A0 create mode 100644
> BaseTools/BinPipWrappers/WindowsLike/TargetTool.bat
>=C2=A0 create mode 100644 BaseTools/BinPipWrappers/WindowsLike/Trim.ba= t
>=C2=A0 create mode 100644 BaseTools/BinPipWrappers/WindowsLike/UPT.bat=
>=C2=A0 create mode 100644 BaseTools/BinPipWrappers/WindowsLike/build.b= at
>=C2=A0 copy BaseTools/{BinWrappers =3D>
> BinPipWrappers}/WindowsLike/win_build_tools_path_env.yaml (70%)
>
> --
> 2.28.0.vfs.0.0
>
>
>
>
>

--000000000000c92bbb05b338547e--