From mboxrd@z Thu Jan 1 00:00:00 1970 Authentication-Results: mx.groups.io; dkim=missing; spf=pass (domain: intel.com, ip: 192.55.52.151, mailfrom: bob.c.feng@intel.com) Received: from mga17.intel.com (mga17.intel.com [192.55.52.151]) by groups.io with SMTP; Wed, 29 May 2019 23:40:03 -0700 X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga008.fm.intel.com ([10.253.24.58]) by fmsmga107.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 29 May 2019 23:40:02 -0700 X-ExtLoop1: 1 Received: from fmsmsx106.amr.corp.intel.com ([10.18.124.204]) by fmsmga008.fm.intel.com with ESMTP; 29 May 2019 23:40:02 -0700 Received: from fmsmsx101.amr.corp.intel.com (10.18.124.199) by FMSMSX106.amr.corp.intel.com (10.18.124.204) with Microsoft SMTP Server (TLS) id 14.3.408.0; Wed, 29 May 2019 23:40:02 -0700 Received: from shsmsx105.ccr.corp.intel.com (10.239.4.158) by fmsmsx101.amr.corp.intel.com (10.18.124.199) with Microsoft SMTP Server (TLS) id 14.3.408.0; Wed, 29 May 2019 23:40:02 -0700 Received: from shsmsx101.ccr.corp.intel.com ([169.254.1.10]) by SHSMSX105.ccr.corp.intel.com ([169.254.11.153]) with mapi id 14.03.0415.000; Thu, 30 May 2019 14:40:00 +0800 From: "Bob Feng" To: Andrew Fish , Laszlo Ersek , "Leif Lindholm" , "Kinney, Michael D" CC: "devel@edk2.groups.io" , "Feng, Bob C" , "Gao, Liming" , "Shi, Steven" , "Rodriguez, Christian" , "Fan, ZhijuX" Subject: Edk2 BaseTools Patches. Thread-Topic: Edk2 BaseTools Patches. Thread-Index: AdUWjQt6T2cDiXJSSJG3vQ9oXBf1IQ== Date: Thu, 30 May 2019 06:39:59 +0000 Message-ID: <08650203BA1BD64D8AD9B6D5D74A85D160128393@SHSMSX101.ccr.corp.intel.com> Accept-Language: zh-CN, en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.239.127.40] MIME-Version: 1.0 Return-Path: bob.c.feng@intel.com Content-Language: en-US Content-Type: multipart/alternative; boundary="_000_08650203BA1BD64D8AD9B6D5D74A85D160128393SHSMSX101ccrcor_" --_000_08650203BA1BD64D8AD9B6D5D74A85D160128393SHSMSX101ccrcor_ Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Hi, Currently, we have 5 Basetools patches which are ready to push. Since we ar= e in the soft-freeze phase, I'd like to ask for your opinions if those patc= hes can be pushed to edk2 master. These 5 patches are to fix the issues for the build cache feature. [Patch V4 2/2] BaseTools: Refactor hash tracking after checking for Sources= section https://edk2.groups.io/g/devel/topic/31835556#41642 [Patch V4 1/2] BaseTools: Add a checking for Sources section in INF file https://edk2.groups.io/g/devel/topic/31835555#41641 [PATCH v3 1/1] BaseTools:Extend the binary cache to support library cache https://edk2.groups.io/g/devel/topic/31843505#41655 [PATCH V5] BaseTools:Make BaseTools support new rules to generate RAW FFS F= ILE https://edk2.groups.io/g/devel/topic/31830807#41571 [PATCH] BaseTools:Update binary cache restore time to current time https://edk2.groups.io/g/devel/topic/31819590#41468 Thanks, Bob --_000_08650203BA1BD64D8AD9B6D5D74A85D160128393SHSMSX101ccrcor_ Content-Type: text/html; charset="us-ascii" Content-Transfer-Encoding: quoted-printable

Hi,

 

Currently, we have 5 Basetools patches which are rea= dy to push. Since we are in the soft-freeze phase, I’d like to ask fo= r your opinions if those patches can be pushed to edk2 master.

 

These 5 patches are to fix the issues for the build = cache feature.

 

[Patch V4 2/2] BaseTools: Refactor hash tracking aft= er checking for Sources section

https://edk2.groups.io/g/devel/topic/31835556#41642

 

[Patch V4 1/2] BaseTools: Add a checking for Sources= section in INF file

https://edk2.groups.io/g/devel/topic/31835555#41641

 

[PATCH v3 1/1] BaseTools:Extend the binary cache to = support library cache

https://edk2.groups.io/g/devel/topic/31843505#41655

 

[PATCH V5] BaseTools:Make BaseTools support new rule= s to generate RAW FFS FILE

https://edk2.groups.io/g/devel/topic/31830807#41571

 

[PATCH] BaseTools:Update binary cache restore time t= o current time

https://edk2.groups.io/g/devel/topic/31819590#41468

 

 

Thanks,

Bob

--_000_08650203BA1BD64D8AD9B6D5D74A85D160128393SHSMSX101ccrcor_-- From mboxrd@z Thu Jan 1 00:00:00 1970 Authentication-Results: mx.groups.io; dkim=pass header.i=@linaro.org header.s=google header.b=RN1WWPQ+; spf=pass (domain: linaro.org, ip: 209.85.221.50, mailfrom: leif.lindholm@linaro.org) Received: from mail-wr1-f50.google.com (mail-wr1-f50.google.com [209.85.221.50]) by groups.io with SMTP; Thu, 30 May 2019 02:28:06 -0700 Received: by mail-wr1-f50.google.com with SMTP id h1so3711498wro.4 for ; Thu, 30 May 2019 02:28:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=date:from:to:cc:subject:message-id:references:mime-version :content-disposition:in-reply-to:user-agent; bh=ilZxcqth9NbmsKXjMd+XX/3iy0t6+V3tew5mrLVUYBY=; b=RN1WWPQ+wjxyxPEhBAXlqNbXDx9T+jj1tJ4DNyec23jCFh3XfOGV+C+8nHlhKDm7R1 FbNMXf4psINXgIaJ3ErBfWqj9NkuX569068X4NKwuQ0jD6GZ2HhrxKMfXQ+1g3A1TsZi TdC56JYHFC0HI3b0gAv4duwyS7cLHtLpeOw4fIlHDyqMpVXlX1zAHTCzehVb7haXLtvs JJlGyyuzrnRar5GQ/5mSjTYGhm0I3Nn9SDdLdAaPzgLWURApfbbA1U97cMTzsRxJL4lk fplabGyJvvsTR8PdxV5FxGwZ90ZzqXocHHzl5R862F7CBdT5BCHnRc/36n+6p3mSmcrK Rb4A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:in-reply-to:user-agent; bh=ilZxcqth9NbmsKXjMd+XX/3iy0t6+V3tew5mrLVUYBY=; b=bOfDhV6TZTW4B0rtbigf/BAzgSQ7Kt65K0bJQRJwTSX3DcqvgTFy9x5NVL2SXm0EzA qCDJ+cR0mruELPDxXC8Sda9wXUoJqoUfNAdAXe0D0TeGVvybZMEcrvkENx6J7vRITpHi gXGLFMVOIsNtBr7tcbwDGyHOCNciTNVm7qBNPagwAOJlGkVBdBCCx1P3AAp+32RoqSpr 2onm1qVyJ2FPMUNxwh7gSmfay3PApJ6eZFDky7ENXsgQWmGbh/ENCbwR69FVIRweTb6n 2vqsoTm4Zf1Mn5f42WuBmyDew7eS8JxWnOyTkCgUOSJNjxUepqq9n8nQDalYnrWeXIhX XgGA== X-Gm-Message-State: APjAAAVnCyAJbilZxzQZFluY9MC+PYD4vw6dZQX7IzUHzNJKe42uVPxR XQB0o5eNmGb93GH62iTAS9aTXA== X-Google-Smtp-Source: APXvYqzhYcPIcINVALdsGZ+Xod2eP5UJyfNfb5HhhrcwX2Edrh4HJrOBm3Tl7SESM8dsvuAJ98rewg== X-Received: by 2002:a5d:554f:: with SMTP id g15mr1881708wrw.318.1559208484581; Thu, 30 May 2019 02:28:04 -0700 (PDT) Return-Path: Received: from bivouac.eciton.net (bivouac.eciton.net. [2a00:1098:0:86:1000:23:0:2]) by smtp.gmail.com with ESMTPSA id u205sm2453435wmu.47.2019.05.30.02.28.03 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Thu, 30 May 2019 02:28:03 -0700 (PDT) Date: Thu, 30 May 2019 10:28:02 +0100 From: "Leif Lindholm" To: "Feng, Bob C" Cc: Andrew Fish , Laszlo Ersek , "Kinney, Michael D" , "devel@edk2.groups.io" , "Gao, Liming" , "Shi, Steven" , "Rodriguez, Christian" , "Fan, ZhijuX" Subject: Re: Edk2 BaseTools Patches. Message-ID: <20190530092802.7belyzgxdd76ps2v@bivouac.eciton.net> References: <08650203BA1BD64D8AD9B6D5D74A85D160128393@SHSMSX101.ccr.corp.intel.com> MIME-Version: 1.0 In-Reply-To: <08650203BA1BD64D8AD9B6D5D74A85D160128393@SHSMSX101.ccr.corp.intel.com> User-Agent: NeoMutt/20170113 (1.7.2) Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Hi Bob, On Thu, May 30, 2019 at 06:39:59AM +0000, Feng, Bob C wrote: > Hi, > > Currently, we have 5 Basetools patches which are ready to > push. Since we are in the soft-freeze phase, I'd like to ask for > your opinions if those patches can be pushed to edk2 master. To save me the time of reading through all the threads and getting to grips with all the code, could you summarise the problem these solve and the impact of not including these? Is there a BZ? Regards, Leif > > These 5 patches are to fix the issues for the build cache feature. > > [Patch V4 2/2] BaseTools: Refactor hash tracking after checking for Sources section > https://edk2.groups.io/g/devel/topic/31835556#41642 > > [Patch V4 1/2] BaseTools: Add a checking for Sources section in INF file > https://edk2.groups.io/g/devel/topic/31835555#41641 > > [PATCH v3 1/1] BaseTools:Extend the binary cache to support library cache > https://edk2.groups.io/g/devel/topic/31843505#41655 > > [PATCH V5] BaseTools:Make BaseTools support new rules to generate RAW FFS FILE > https://edk2.groups.io/g/devel/topic/31830807#41571 > > [PATCH] BaseTools:Update binary cache restore time to current time > https://edk2.groups.io/g/devel/topic/31819590#41468 > > > Thanks, > Bob From mboxrd@z Thu Jan 1 00:00:00 1970 Authentication-Results: mx.groups.io; dkim=missing; spf=pass (domain: intel.com, ip: 134.134.136.126, mailfrom: christian.rodriguez@intel.com) Received: from mga18.intel.com (mga18.intel.com [134.134.136.126]) by groups.io with SMTP; Thu, 30 May 2019 07:25:56 -0700 X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga002.jf.intel.com ([10.7.209.21]) by orsmga106.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 30 May 2019 07:25:55 -0700 X-ExtLoop1: 1 Received: from orsmsx101.amr.corp.intel.com ([10.22.225.128]) by orsmga002.jf.intel.com with ESMTP; 30 May 2019 07:25:55 -0700 Received: from orsmsx112.amr.corp.intel.com ([169.254.3.79]) by ORSMSX101.amr.corp.intel.com ([169.254.8.107]) with mapi id 14.03.0415.000; Thu, 30 May 2019 07:25:55 -0700 From: "Christian Rodriguez" To: Leif Lindholm , "Feng, Bob C" CC: Andrew Fish , Laszlo Ersek , "Kinney, Michael D" , "devel@edk2.groups.io" , "Gao, Liming" , "Shi, Steven" , "Fan, ZhijuX" Subject: Re: Edk2 BaseTools Patches. Thread-Topic: Edk2 BaseTools Patches. Thread-Index: AdUWjQt6T2cDiXJSSJG3vQ9oXBf1IQAd5skAAARyC9A= Date: Thu, 30 May 2019 14:25:54 +0000 Message-ID: <3A7DCC9A944C6149BF832E1C9B718ABC01F24E6B@ORSMSX112.amr.corp.intel.com> References: <08650203BA1BD64D8AD9B6D5D74A85D160128393@SHSMSX101.ccr.corp.intel.com> <20190530092802.7belyzgxdd76ps2v@bivouac.eciton.net> In-Reply-To: <20190530092802.7belyzgxdd76ps2v@bivouac.eciton.net> Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ctpclassification: CTP_NT x-titus-metadata-40: eyJDYXRlZ29yeUxhYmVscyI6IiIsIk1ldGFkYXRhIjp7Im5zIjoiaHR0cDpcL1wvd3d3LnRpdHVzLmNvbVwvbnNcL0ludGVsMyIsImlkIjoiMGQ0Y2E5ODYtNzk1Ny00MzQwLTk3YzYtNjQ3MzcyNzAzMjEwIiwicHJvcHMiOlt7Im4iOiJDVFBDbGFzc2lmaWNhdGlvbiIsInZhbHMiOlt7InZhbHVlIjoiQ1RQX05UIn1dfV19LCJTdWJqZWN0TGFiZWxzIjpbXSwiVE1DVmVyc2lvbiI6IjE3LjEwLjE4MDQuNDkiLCJUcnVzdGVkTGFiZWxIYXNoIjoiSWxpdWlpUHhtaU53clwvQkpBWnk2Vk54cFN3b2tQRlF6NHZyWDFYQ3pxaUoxNlY1M3phQTFLekR2OFwvNnorT3B1In0= dlp-product: dlpe-windows dlp-version: 11.2.0.6 dlp-reaction: no-action x-originating-ip: [10.22.254.140] MIME-Version: 1.0 Content-Language: en-US Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Hey Leif, I thought I'd help Bob and gather those BZs for each thread: [Patch V4 1/2] BaseTools: Add a checking for Sources section in INF file [Patch V4 2/2] BaseTools: Refactor hash tracking after checking for Sources= section BZ: https://bugzilla.tianocore.org/show_bug.cgi?id=3D1804 [PATCH v3 1/1] BaseTools:Extend the binary cache to support library cache BZ: https://bugzilla.tianocore.org/show_bug.cgi?id=3D1797 [PATCH V5] BaseTools:Make BaseTools support new rules to generate RAW FFS F= ILE BZ: https://bugzilla.tianocore.org/show_bug.cgi?id=3D1765 [PATCH] BaseTools:Update binary cache restore time to current time BZ: https://bugzilla.tianocore.org/show_bug.cgi?id=3D1742 Thanks, Christian >-----Original Message----- >From: Leif Lindholm [mailto:leif.lindholm@linaro.org] >Sent: Thursday, May 30, 2019 2:28 AM >To: Feng, Bob C >Cc: Andrew Fish ; Laszlo Ersek ; >Kinney, Michael D ; devel@edk2.groups.io; >Gao, Liming ; Shi, Steven ; >Rodriguez, Christian ; Fan, ZhijuX > >Subject: Re: Edk2 BaseTools Patches. > >Hi Bob, > >On Thu, May 30, 2019 at 06:39:59AM +0000, Feng, Bob C wrote: >> Hi, >> >> Currently, we have 5 Basetools patches which are ready to push. Since >> we are in the soft-freeze phase, I'd like to ask for your opinions if >> those patches can be pushed to edk2 master. > >To save me the time of reading through all the threads and getting to grip= s >with all the code, could you summarise the problem these solve and the >impact of not including these? > >Is there a BZ? > >Regards, > >Leif > >> >> These 5 patches are to fix the issues for the build cache feature. >> >> [Patch V4 2/2] BaseTools: Refactor hash tracking after checking for >> Sources section >> https://edk2.groups.io/g/devel/topic/31835556#41642 >> >> [Patch V4 1/2] BaseTools: Add a checking for Sources section in INF >> file >> https://edk2.groups.io/g/devel/topic/31835555#41641 >> >> [PATCH v3 1/1] BaseTools:Extend the binary cache to support library >> cache >> https://edk2.groups.io/g/devel/topic/31843505#41655 >> >> [PATCH V5] BaseTools:Make BaseTools support new rules to generate RAW >> FFS FILE >> https://edk2.groups.io/g/devel/topic/31830807#41571 >> >> [PATCH] BaseTools:Update binary cache restore time to current time >> https://edk2.groups.io/g/devel/topic/31819590#41468 >> >> >> Thanks, >> Bob From mboxrd@z Thu Jan 1 00:00:00 1970 Authentication-Results: mx.groups.io; dkim=missing; spf=pass (domain: intel.com, ip: 192.55.52.120, mailfrom: bob.c.feng@intel.com) Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by groups.io with SMTP; Thu, 30 May 2019 08:06:52 -0700 X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga006.fm.intel.com ([10.253.24.20]) by fmsmga104.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 30 May 2019 08:06:51 -0700 X-ExtLoop1: 1 Received: from fmsmsx108.amr.corp.intel.com ([10.18.124.206]) by fmsmga006.fm.intel.com with ESMTP; 30 May 2019 08:06:51 -0700 Received: from fmsmsx113.amr.corp.intel.com (10.18.116.7) by FMSMSX108.amr.corp.intel.com (10.18.124.206) with Microsoft SMTP Server (TLS) id 14.3.408.0; Thu, 30 May 2019 08:06:51 -0700 Received: from shsmsx105.ccr.corp.intel.com (10.239.4.158) by FMSMSX113.amr.corp.intel.com (10.18.116.7) with Microsoft SMTP Server (TLS) id 14.3.408.0; Thu, 30 May 2019 08:06:50 -0700 Received: from shsmsx101.ccr.corp.intel.com ([169.254.1.10]) by SHSMSX105.ccr.corp.intel.com ([169.254.11.153]) with mapi id 14.03.0415.000; Thu, 30 May 2019 23:06:49 +0800 From: "Bob Feng" To: "Rodriguez, Christian" , Leif Lindholm CC: Andrew Fish , Laszlo Ersek , "Kinney, Michael D" , "devel@edk2.groups.io" , "Gao, Liming" , "Shi, Steven" , "Fan, ZhijuX" Subject: Re: Edk2 BaseTools Patches. Thread-Topic: Edk2 BaseTools Patches. Thread-Index: AdUWjQt6T2cDiXJSSJG3vQ9oXBf1If//88EAgABTOQD//3BK4A== Date: Thu, 30 May 2019 15:06:48 +0000 Message-ID: <08650203BA1BD64D8AD9B6D5D74A85D1601296DA@SHSMSX101.ccr.corp.intel.com> References: <08650203BA1BD64D8AD9B6D5D74A85D160128393@SHSMSX101.ccr.corp.intel.com> <20190530092802.7belyzgxdd76ps2v@bivouac.eciton.net> <3A7DCC9A944C6149BF832E1C9B718ABC01F24E6B@ORSMSX112.amr.corp.intel.com> In-Reply-To: <3A7DCC9A944C6149BF832E1C9B718ABC01F24E6B@ORSMSX112.amr.corp.intel.com> Accept-Language: zh-CN, en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-titus-metadata-40: eyJDYXRlZ29yeUxhYmVscyI6IiIsIk1ldGFkYXRhIjp7Im5zIjoiaHR0cDpcL1wvd3d3LnRpdHVzLmNvbVwvbnNcL0ludGVsMyIsImlkIjoiMGQ0Y2E5ODYtNzk1Ny00MzQwLTk3YzYtNjQ3MzcyNzAzMjEwIiwicHJvcHMiOlt7Im4iOiJDVFBDbGFzc2lmaWNhdGlvbiIsInZhbHMiOlt7InZhbHVlIjoiQ1RQX05UIn1dfV19LCJTdWJqZWN0TGFiZWxzIjpbXSwiVE1DVmVyc2lvbiI6IjE3LjEwLjE4MDQuNDkiLCJUcnVzdGVkTGFiZWxIYXNoIjoiSWxpdWlpUHhtaU53clwvQkpBWnk2Vk54cFN3b2tQRlF6NHZyWDFYQ3pxaUoxNlY1M3phQTFLekR2OFwvNnorT3B1In0= x-ctpclassification: CTP_NT dlp-product: dlpe-windows dlp-version: 11.0.600.7 dlp-reaction: no-action x-originating-ip: [10.239.127.40] MIME-Version: 1.0 Return-Path: bob.c.feng@intel.com Content-Language: en-US Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Thanks Christian. I add some short description for the patches. These 5 patches are all for binary cache feature. [Patch V4 2/2] BaseTools: Refactor hash tracking after checking for Source= s section [Patch V4 1/2] BaseTools: Add a checking for Sources section in INF file The above 2 patches is to fix the issue that The build tool uses the files list under [sources] section of INF file as = a input to calculate a module's hash value. But in some INF files, [sources= ] does not list all the "source" files, missing some .h files. Path 2/2 use= another method to get all source files for a module and patch 1/2 do a che= ck whether [sources] list all the "source" files. [PATCH v3 1/1] BaseTools:Extend the binary cache to support library cache This patch is to resolve the problem that Build tool dose not cache the library binaries now. Whiteout this patch, th= ere is 25% extra time cost to rebuild the all module dependency libraries i= f cache miss happen. [PATCH] BaseTools:Update binary cache restore time to current time This patch is to make the restored binary file have the current time stamp = not the binary file original time stamp.=20 [PATCH V5] BaseTools:Make BaseTools support new rules to generate RAW FFS F= ILE This patch is to support the raw ffs file rule. Now build tool does not cor= rectly handle this case: [Rule.Common.USER_DEFINED.MicroCode] FILE RAW =3D $(NAMED_GUID) { $(INF_OUTPUT)/$(MODULE_NAME).bin } Thanks, Bob -----Original Message----- From: Rodriguez, Christian=20 Sent: Thursday, May 30, 2019 10:26 PM To: Leif Lindholm ; Feng, Bob C Cc: Andrew Fish ; Laszlo Ersek ; Kinney= , Michael D ; devel@edk2.groups.io; Gao, Liming= ; Shi, Steven ; Fan, ZhijuX Subject: RE: Edk2 BaseTools Patches. Hey Leif, I thought I'd help Bob and gather those BZs for each thread: [Patch V4 1/2] BaseTools: Add a checking for Sources section in INF file [P= atch V4 2/2] BaseTools: Refactor hash tracking after checking for Sources s= ection BZ: https://bugzilla.tianocore.org/show_bug.cgi?id=3D1804 [PATCH v3 1/1] BaseTools:Extend the binary cache to support library cache BZ: https://bugzilla.tianocore.org/show_bug.cgi?id=3D1797 [PATCH V5] BaseTools:Make BaseTools support new rules to generate RAW FFS F= ILE BZ: https://bugzilla.tianocore.org/show_bug.cgi?id=3D1765 [PATCH] BaseTools:Update binary cache restore time to current time BZ: https://bugzilla.tianocore.org/show_bug.cgi?id=3D1742 Thanks, Christian >-----Original Message----- >From: Leif Lindholm [mailto:leif.lindholm@linaro.org] >Sent: Thursday, May 30, 2019 2:28 AM >To: Feng, Bob C >Cc: Andrew Fish ; Laszlo Ersek ;=20 >Kinney, Michael D ; devel@edk2.groups.io;=20 >Gao, Liming ; Shi, Steven ;=20 >Rodriguez, Christian ; Fan, ZhijuX=20 > >Subject: Re: Edk2 BaseTools Patches. > >Hi Bob, > >On Thu, May 30, 2019 at 06:39:59AM +0000, Feng, Bob C wrote: >> Hi, >> >> Currently, we have 5 Basetools patches which are ready to push. Since=20 >> we are in the soft-freeze phase, I'd like to ask for your opinions if=20 >> those patches can be pushed to edk2 master. > >To save me the time of reading through all the threads and getting to=20 >grips with all the code, could you summarise the problem these solve=20 >and the impact of not including these? > >Is there a BZ? > >Regards, > >Leif > >> >> These 5 patches are to fix the issues for the build cache feature. >> >> [Patch V4 2/2] BaseTools: Refactor hash tracking after checking for=20 >> Sources section >> https://edk2.groups.io/g/devel/topic/31835556#41642 >> >> [Patch V4 1/2] BaseTools: Add a checking for Sources section in INF=20 >> file >> https://edk2.groups.io/g/devel/topic/31835555#41641 >> >> [PATCH v3 1/1] BaseTools:Extend the binary cache to support library=20 >> cache >> https://edk2.groups.io/g/devel/topic/31843505#41655 >> >> [PATCH V5] BaseTools:Make BaseTools support new rules to generate RAW=20 >> FFS FILE >> https://edk2.groups.io/g/devel/topic/31830807#41571 >> >> [PATCH] BaseTools:Update binary cache restore time to current time >> https://edk2.groups.io/g/devel/topic/31819590#41468 >> >> >> Thanks, >> Bob From mboxrd@z Thu Jan 1 00:00:00 1970 Authentication-Results: mx.groups.io; dkim=pass header.i=@linaro.org header.s=google header.b=uLdx41GY; spf=pass (domain: linaro.org, ip: 209.85.128.45, mailfrom: leif.lindholm@linaro.org) Received: from mail-wm1-f45.google.com (mail-wm1-f45.google.com [209.85.128.45]) by groups.io with SMTP; Thu, 30 May 2019 09:37:58 -0700 Received: by mail-wm1-f45.google.com with SMTP id f10so4371324wmb.1 for ; Thu, 30 May 2019 09:37:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=date:from:to:cc:subject:message-id:references:mime-version :content-disposition:in-reply-to:user-agent; bh=snbwMRC6qAIVmB80ZdHk+4tWDYo3Phm6CksUuujgQS4=; b=uLdx41GYKkjRszd9ERYUF4/mSADiRZkkoP+d1TE1vF9okkR0mArpSJx1wP9HrNKJsS F5z5iWb2ffF/QxbqD1RkmbviC2Hix0C8zR2KBpygFJ446RN/SgedT1KYOx4DrMHcBGqp rcrPl5ngPscjpTZm6tFoozb/QEXUqq4kuuEJLjSAIc++QHs/jeuHASXDmu9Z377fMDfB lRDYR9BCvfiuDLcrgCjBA0RYLTbrAFGiHCtcW8Fyt8LJeifwbPCf2HF38sfj7oheP1yF qJ7aRKH6KZnZP1neUBD9QEjTNkaxVJ73kFsIY6hoPXa5TfVpJHAqNAJyG2/5mI0orYoY stwA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:in-reply-to:user-agent; bh=snbwMRC6qAIVmB80ZdHk+4tWDYo3Phm6CksUuujgQS4=; b=teJwa1kh0KX1I2csg3MHICAO9KPWz3d9Ko9yoP/4zoPdhbafISHXk/KoHvqlvReL77 +8r5z9Hq4wrkUwyQMQmwZ/TwBOYQKkYLiqn73Rmrcw1twDknif6mG7bbUKJgGKbJ73aQ 4YPd1akh0eLpxvD3uGgIz00rm7jjg1r8j+bIoB56hApH80zFsbZR2hFRwoURyL3w6XeU gnFYt4C4KWq/ACj1yOdvVmcjY5E3x608zByfO0cw0nIQjgKMwS5H6wdeAfhUeNEO2b1u SayrabMJrl2gIa97vhA+STeXIw66r5YKk0b2Z8ke9VbbHv8qh8Om6I5lO1XNgR0kfgln aJug== X-Gm-Message-State: APjAAAVmBr8smTRWhWPt6RhuWWIflnmK1o6p8NoM0t+gwHlvDvFxHl8j sb9wNic3OlvbQie64BMO605vkQ== X-Google-Smtp-Source: APXvYqwqXWLvc7OUooD9Oc3H5EfWdIH54QOh2n3CU9IMamzEIDrbICi6GVw8N3QmGlxR98gBewEp/Q== X-Received: by 2002:a7b:c946:: with SMTP id i6mr2853757wml.17.1559234276848; Thu, 30 May 2019 09:37:56 -0700 (PDT) Return-Path: Received: from bivouac.eciton.net (bivouac.eciton.net. [2a00:1098:0:86:1000:23:0:2]) by smtp.gmail.com with ESMTPSA id k2sm4086906wrx.84.2019.05.30.09.37.55 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Thu, 30 May 2019 09:37:55 -0700 (PDT) Date: Thu, 30 May 2019 17:37:54 +0100 From: "Leif Lindholm" To: "Feng, Bob C" Cc: "Rodriguez, Christian" , Andrew Fish , Laszlo Ersek , "Kinney, Michael D" , "devel@edk2.groups.io" , "Gao, Liming" , "Shi, Steven" , "Fan, ZhijuX" Subject: Re: Edk2 BaseTools Patches. Message-ID: <20190530163754.shb54x46euzszpza@bivouac.eciton.net> References: <08650203BA1BD64D8AD9B6D5D74A85D160128393@SHSMSX101.ccr.corp.intel.com> <20190530092802.7belyzgxdd76ps2v@bivouac.eciton.net> <3A7DCC9A944C6149BF832E1C9B718ABC01F24E6B@ORSMSX112.amr.corp.intel.com> <08650203BA1BD64D8AD9B6D5D74A85D1601296DA@SHSMSX101.ccr.corp.intel.com> MIME-Version: 1.0 In-Reply-To: <08650203BA1BD64D8AD9B6D5D74A85D1601296DA@SHSMSX101.ccr.corp.intel.com> User-Agent: NeoMutt/20170113 (1.7.2) Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Thanks Bob, Christian, On Thu, May 30, 2019 at 03:06:48PM +0000, Feng, Bob C wrote: > Thanks Christian. I add some short description for the patches. > > These 5 patches are all for binary cache feature. > > [Patch V4 2/2] BaseTools: Refactor hash tracking after checking for Sources section > [Patch V4 1/2] BaseTools: Add a checking for Sources section in INF file > > The above 2 patches is to fix the issue that > The build tool uses the files list under [sources] section of INF > file as a input to calculate a module's hash value. But in some INF > files, [sources] does not list all the "source" files, missing some > .h files. Path 2/2 use another method to get all source files for a > module and patch 1/2 do a check whether [sources] list all the > "source" files. I'll be honest - because of the wild variance in whether .h files are listed in the [sources] section of .inf files, I have always been unsure as to whether they were just being ignored (and extracted on the side via mkdep or similar). If the intent is to speed up build time, would it not be better to warn the user - so they notice the problem and fix their modules, rather than adding extra processing time on having the tools work with broken .inf files? This does not look like material for edk2-stable201905 to me. > [PATCH v3 1/1] BaseTools:Extend the binary cache to support library cache > This patch is to resolve the problem that > Build tool dose not cache the library binaries now. Whiteout this > patch, there is 25% extra time cost to rebuild the all module > dependency libraries if cache miss happen. 25% is a big number, so I won't argue against this. But I also won't argue for it - the BZ was raised very late in the cycle. > [PATCH] BaseTools:Update binary cache restore time to current time > This patch is to make the restored binary file have the current time > stamp not the binary file original time stamp. I can see how the current behaviour could cause problems with some CI/build systems. If it is properly reviewed and tested, I am OK with this one going in for edk2-stable201903. > [PATCH V5] BaseTools:Make BaseTools support new rules to generate RAW FFS FILE > This patch is to support the raw ffs file rule. Now build tool does > not correctly handle this case: > > [Rule.Common.USER_DEFINED.MicroCode] > FILE RAW = $(NAMED_GUID) { > $(INF_OUTPUT)/$(MODULE_NAME).bin > } This looks like a new feature - not something that should bypass the freeze period for edk2-stable201905. Can you explain why this is needed in the stable tag as opposed to being available from master the day after the tag is made? Best Regards, Leif > > > Thanks, > Bob > > -----Original Message----- > From: Rodriguez, Christian > Sent: Thursday, May 30, 2019 10:26 PM > To: Leif Lindholm ; Feng, Bob C > Cc: Andrew Fish ; Laszlo Ersek ; Kinney, Michael D ; devel@edk2.groups.io; Gao, Liming ; Shi, Steven ; Fan, ZhijuX > Subject: RE: Edk2 BaseTools Patches. > > Hey Leif, > > I thought I'd help Bob and gather those BZs for each thread: > > [Patch V4 1/2] BaseTools: Add a checking for Sources section in INF file [Patch V4 2/2] BaseTools: Refactor hash tracking after checking for Sources section > BZ: https://bugzilla.tianocore.org/show_bug.cgi?id=1804 > > [PATCH v3 1/1] BaseTools:Extend the binary cache to support library cache > BZ: https://bugzilla.tianocore.org/show_bug.cgi?id=1797 > > [PATCH V5] BaseTools:Make BaseTools support new rules to generate RAW FFS FILE > BZ: https://bugzilla.tianocore.org/show_bug.cgi?id=1765 > > [PATCH] BaseTools:Update binary cache restore time to current time > BZ: https://bugzilla.tianocore.org/show_bug.cgi?id=1742 > > Thanks, > Christian > > >-----Original Message----- > >From: Leif Lindholm [mailto:leif.lindholm@linaro.org] > >Sent: Thursday, May 30, 2019 2:28 AM > >To: Feng, Bob C > >Cc: Andrew Fish ; Laszlo Ersek ; > >Kinney, Michael D ; devel@edk2.groups.io; > >Gao, Liming ; Shi, Steven ; > >Rodriguez, Christian ; Fan, ZhijuX > > > >Subject: Re: Edk2 BaseTools Patches. > > > >Hi Bob, > > > >On Thu, May 30, 2019 at 06:39:59AM +0000, Feng, Bob C wrote: > >> Hi, > >> > >> Currently, we have 5 Basetools patches which are ready to push. Since > >> we are in the soft-freeze phase, I'd like to ask for your opinions if > >> those patches can be pushed to edk2 master. > > > >To save me the time of reading through all the threads and getting to > >grips with all the code, could you summarise the problem these solve > >and the impact of not including these? > > > >Is there a BZ? > > > >Regards, > > > >Leif > > > >> > >> These 5 patches are to fix the issues for the build cache feature. > >> > >> [Patch V4 2/2] BaseTools: Refactor hash tracking after checking for > >> Sources section > >> https://edk2.groups.io/g/devel/topic/31835556#41642 > >> > >> [Patch V4 1/2] BaseTools: Add a checking for Sources section in INF > >> file > >> https://edk2.groups.io/g/devel/topic/31835555#41641 > >> > >> [PATCH v3 1/1] BaseTools:Extend the binary cache to support library > >> cache > >> https://edk2.groups.io/g/devel/topic/31843505#41655 > >> > >> [PATCH V5] BaseTools:Make BaseTools support new rules to generate RAW > >> FFS FILE > >> https://edk2.groups.io/g/devel/topic/31830807#41571 > >> > >> [PATCH] BaseTools:Update binary cache restore time to current time > >> https://edk2.groups.io/g/devel/topic/31819590#41468 > >> > >> > >> Thanks, > >> Bob From mboxrd@z Thu Jan 1 00:00:00 1970 Authentication-Results: mx.groups.io; dkim=missing; spf=pass (domain: intel.com, ip: 134.134.136.20, mailfrom: christian.rodriguez@intel.com) Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by groups.io with SMTP; Thu, 30 May 2019 11:05:23 -0700 X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga002.fm.intel.com ([10.253.24.26]) by orsmga101.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 30 May 2019 11:05:22 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.60,532,1549958400"; d="scan'208";a="180025095" Received: from orsmsx101.amr.corp.intel.com ([10.22.225.128]) by fmsmga002.fm.intel.com with ESMTP; 30 May 2019 11:05:22 -0700 Received: from orsmsx112.amr.corp.intel.com ([169.254.3.79]) by ORSMSX101.amr.corp.intel.com ([169.254.8.107]) with mapi id 14.03.0415.000; Thu, 30 May 2019 11:05:22 -0700 From: "Christian Rodriguez" To: Leif Lindholm , "Feng, Bob C" CC: Andrew Fish , Laszlo Ersek , "Kinney, Michael D" , "devel@edk2.groups.io" , "Gao, Liming" , "Shi, Steven" , "Fan, ZhijuX" Subject: Re: Edk2 BaseTools Patches. Thread-Topic: Edk2 BaseTools Patches. Thread-Index: AdUWjQt6T2cDiXJSSJG3vQ9oXBf1IQAd5skAAARyC9AAB2LEAAADLn8AAAvzuBA= Date: Thu, 30 May 2019 18:05:22 +0000 Message-ID: <3A7DCC9A944C6149BF832E1C9B718ABC01F24F39@ORSMSX112.amr.corp.intel.com> References: <08650203BA1BD64D8AD9B6D5D74A85D160128393@SHSMSX101.ccr.corp.intel.com> <20190530092802.7belyzgxdd76ps2v@bivouac.eciton.net> <3A7DCC9A944C6149BF832E1C9B718ABC01F24E6B@ORSMSX112.amr.corp.intel.com> <08650203BA1BD64D8AD9B6D5D74A85D1601296DA@SHSMSX101.ccr.corp.intel.com> <20190530163754.shb54x46euzszpza@bivouac.eciton.net> In-Reply-To: <20190530163754.shb54x46euzszpza@bivouac.eciton.net> Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ctpclassification: CTP_NT x-titus-metadata-40: eyJDYXRlZ29yeUxhYmVscyI6IiIsIk1ldGFkYXRhIjp7Im5zIjoiaHR0cDpcL1wvd3d3LnRpdHVzLmNvbVwvbnNcL0ludGVsMyIsImlkIjoiYjVkZjM5NGYtYzRkYy00NjI0LWJiMDQtNjQxNDk3YjE3ODg1IiwicHJvcHMiOlt7Im4iOiJDVFBDbGFzc2lmaWNhdGlvbiIsInZhbHMiOlt7InZhbHVlIjoiQ1RQX05UIn1dfV19LCJTdWJqZWN0TGFiZWxzIjpbXSwiVE1DVmVyc2lvbiI6IjE3LjEwLjE4MDQuNDkiLCJUcnVzdGVkTGFiZWxIYXNoIjoicmhBOEdyQThcL2ZacG91ZW1hU0gzOWVKb3ZFUXB0NUFSdTVsMVZDSDNra3hqdVB6WEhNT3YxdTNIZUtqTTRrdHkifQ== dlp-product: dlpe-windows dlp-version: 11.2.0.6 dlp-reaction: no-action x-originating-ip: [10.22.254.140] MIME-Version: 1.0 Content-Language: en-US Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable See below. >-----Original Message----- >From: Leif Lindholm [mailto:leif.lindholm@linaro.org] >Sent: Thursday, May 30, 2019 9:38 AM >To: Feng, Bob C >Cc: Rodriguez, Christian ; Andrew Fish >; Laszlo Ersek ; Kinney, Michael D >; devel@edk2.groups.io; Gao, Liming >; Shi, Steven ; Fan, ZhijuX > >Subject: Re: Edk2 BaseTools Patches. > >Thanks Bob, Christian, > >On Thu, May 30, 2019 at 03:06:48PM +0000, Feng, Bob C wrote: >> Thanks Christian. I add some short description for the patches. >> >> These 5 patches are all for binary cache feature. >> >> [Patch V4 2/2] BaseTools: Refactor hash tracking after checking for >> Sources section [Patch V4 1/2] BaseTools: Add a checking for Sources >> section in INF file >> >> The above 2 patches is to fix the issue that The build tool uses the >> files list under [sources] section of INF file as a input to calculate >> a module's hash value. But in some INF files, [sources] does not list >> all the "source" files, missing some .h files. Path 2/2 use another >> method to get all source files for a module and patch 1/2 do a check >> whether [sources] list all the "source" files. > >I'll be honest - because of the wild variance in whether .h files are list= ed in the >[sources] section of .inf files, I have always been unsure as to whether t= hey >were just being ignored (and extracted on the side via mkdep or similar). > >If the intent is to speed up build time, would it not be better to warn th= e user >- so they notice the problem and fix their modules, rather than adding ext= ra >processing time on having the tools work with broken .inf files? > >This does not look like material for edk2-stable201905 to me. The patch does warn the user, so they notice the problem and fix their modu= les. And somewhere in the email thread for that patch set I mentioned the p= rocessing time is almost negligible since the information is already availa= ble in memory and it's just a simple set lookup for existence and warning w= rite. It doesn't really matter if it goes in edk2-stable201905, as long as it goe= s in eventually because it does fix a bug/corner-case in the hash feature. > >> [PATCH v3 1/1] BaseTools:Extend the binary cache to support library >> cache This patch is to resolve the problem that Build tool dose not >> cache the library binaries now. Whiteout this patch, there is 25% >> extra time cost to rebuild the all module dependency libraries if >> cache miss happen. > >25% is a big number, so I won't argue against this. But I also won't argue= for it - >the BZ was raised very late in the cycle. > >> [PATCH] BaseTools:Update binary cache restore time to current time >> This patch is to make the restored binary file have the current time >> stamp not the binary file original time stamp. > >I can see how the current behaviour could cause problems with some CI/buil= d >systems. If it is properly reviewed and tested, I am OK with this one goin= g in >for edk2-stable201903. > >> [PATCH V5] BaseTools:Make BaseTools support new rules to generate RAW >> FFS FILE This patch is to support the raw ffs file rule. Now build >> tool does not correctly handle this case: >> >> [Rule.Common.USER_DEFINED.MicroCode] >> FILE RAW =3D $(NAMED_GUID) { >> $(INF_OUTPUT)/$(MODULE_NAME).bin >> } > >This looks like a new feature - not something that should bypass the freez= e >period for edk2-stable201905. >Can you explain why this is needed in the stable tag as opposed to being >available from master the day after the tag is made? > >Best Regards, > >Leif > >> >> >> Thanks, >> Bob >> >> -----Original Message----- >> From: Rodriguez, Christian >> Sent: Thursday, May 30, 2019 10:26 PM >> To: Leif Lindholm ; Feng, Bob C >> >> Cc: Andrew Fish ; Laszlo Ersek ; >> Kinney, Michael D ; devel@edk2.groups.io; >> Gao, Liming ; Shi, Steven >> ; Fan, ZhijuX >> Subject: RE: Edk2 BaseTools Patches. >> >> Hey Leif, >> >> I thought I'd help Bob and gather those BZs for each thread: >> >> [Patch V4 1/2] BaseTools: Add a checking for Sources section in INF >> file [Patch V4 2/2] BaseTools: Refactor hash tracking after checking >> for Sources section >> BZ: https://bugzilla.tianocore.org/show_bug.cgi?id=3D1804 >> >> [PATCH v3 1/1] BaseTools:Extend the binary cache to support library >> cache >> BZ: https://bugzilla.tianocore.org/show_bug.cgi?id=3D1797 >> >> [PATCH V5] BaseTools:Make BaseTools support new rules to generate RAW >> FFS FILE >> BZ: https://bugzilla.tianocore.org/show_bug.cgi?id=3D1765 >> >> [PATCH] BaseTools:Update binary cache restore time to current time >> BZ: https://bugzilla.tianocore.org/show_bug.cgi?id=3D1742 >> >> Thanks, >> Christian >> >> >-----Original Message----- >> >From: Leif Lindholm [mailto:leif.lindholm@linaro.org] >> >Sent: Thursday, May 30, 2019 2:28 AM >> >To: Feng, Bob C >> >Cc: Andrew Fish ; Laszlo Ersek ; >> >Kinney, Michael D ; devel@edk2.groups.io; >> >Gao, Liming ; Shi, Steven >> >; Rodriguez, Christian >> >; Fan, ZhijuX >> >Subject: Re: Edk2 BaseTools Patches. >> > >> >Hi Bob, >> > >> >On Thu, May 30, 2019 at 06:39:59AM +0000, Feng, Bob C wrote: >> >> Hi, >> >> >> >> Currently, we have 5 Basetools patches which are ready to push. >> >> Since we are in the soft-freeze phase, I'd like to ask for your >> >> opinions if those patches can be pushed to edk2 master. >> > >> >To save me the time of reading through all the threads and getting to >> >grips with all the code, could you summarise the problem these solve >> >and the impact of not including these? >> > >> >Is there a BZ? >> > >> >Regards, >> > >> >Leif >> > >> >> >> >> These 5 patches are to fix the issues for the build cache feature. >> >> >> >> [Patch V4 2/2] BaseTools: Refactor hash tracking after checking for >> >> Sources section >> >> https://edk2.groups.io/g/devel/topic/31835556#41642 >> >> >> >> [Patch V4 1/2] BaseTools: Add a checking for Sources section in INF >> >> file >> >> https://edk2.groups.io/g/devel/topic/31835555#41641 >> >> >> >> [PATCH v3 1/1] BaseTools:Extend the binary cache to support library >> >> cache >> >> https://edk2.groups.io/g/devel/topic/31843505#41655 >> >> >> >> [PATCH V5] BaseTools:Make BaseTools support new rules to generate >> >> RAW FFS FILE >> >> https://edk2.groups.io/g/devel/topic/31830807#41571 >> >> >> >> [PATCH] BaseTools:Update binary cache restore time to current time >> >> https://edk2.groups.io/g/devel/topic/31819590#41468 >> >> >> >> >> >> Thanks, >> >> Bob From mboxrd@z Thu Jan 1 00:00:00 1970 Authentication-Results: mx.groups.io; dkim=pass header.i=@apple.com header.s=20180706 header.b=XOb11zzl; spf=pass (domain: apple.com, ip: 17.171.2.72, mailfrom: afish@apple.com) Received: from ma1-aaemail-dr-lapp03.apple.com (ma1-aaemail-dr-lapp03.apple.com [17.171.2.72]) by groups.io with SMTP; Thu, 30 May 2019 11:10:38 -0700 Received: from pps.filterd (ma1-aaemail-dr-lapp03.apple.com [127.0.0.1]) by ma1-aaemail-dr-lapp03.apple.com (8.16.0.27/8.16.0.27) with SMTP id x4UI77MR018664; Thu, 30 May 2019 11:10:37 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=apple.com; h=mime-version : content-type : sender : from : message-id : subject : date : in-reply-to : cc : to : references; s=20180706; bh=4eS7/11LfwIovGKJPoDw5LZTdDp496vwmXeDeZW6xE8=; b=XOb11zzlhLBP0KHwaaBjAB9Gxgq0uwtloDlJKDf1COAzy7WMtDFN8sN/vedWva0aIqv2 Gn/hq1D0WLAP45qi7MbZF4LvXS8hIhzc/cs5eD5Y8+gC4luX0QBNXN18rFM9JDvW4eWj j3tgQepPzsZtFSo8oefdhmdMREjz2myuSKX+IIdKFxbP/UZV9RFhZUlqKaXkMtwdPDbQ ZTE/uJ9NrEyKgKFMZMkqJFXfSRxy6TA4R7UBcHcPprsl25wmhP8uJYYvCH5s/SL8DLXv V4fhwMXkohVsht2x6wjgpWDuYfbW+nFIX4cWqHnw8TxlSRWElCnw5w2cguuUhmHmjfld fg== Received: from ma1-mtap-s02.corp.apple.com (ma1-mtap-s02.corp.apple.com [17.40.76.6]) by ma1-aaemail-dr-lapp03.apple.com with ESMTP id 2sq4pxkjjd-5 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NO); Thu, 30 May 2019 11:10:37 -0700 MIME-version: 1.0 Received: from nwk-mmpp-sz12.apple.com (nwk-mmpp-sz12.apple.com [17.128.115.204]) by ma1-mtap-s02.corp.apple.com (Oracle Communications Messaging Server 8.0.2.3.20181024 64bit (built Oct 24 2018)) with ESMTPS id <0PSB006UJX5NUB70@ma1-mtap-s02.corp.apple.com>; Thu, 30 May 2019 11:10:36 -0700 (PDT) Received: from process_milters-daemon.nwk-mmpp-sz12.apple.com by nwk-mmpp-sz12.apple.com (Oracle Communications Messaging Server 8.0.2.3.20181024 64bit (built Oct 24 2018)) id <0PSB00600WN8KQ00@nwk-mmpp-sz12.apple.com>; Thu, 30 May 2019 11:10:35 -0700 (PDT) X-Va-A: X-Va-T-CD: 17e290161afadc43df911743530be568 X-Va-E-CD: f42e1f233b026a6701a5dc376868b5d0 X-Va-R-CD: 65855544104c2f96f2c335eea6ab5477 X-Va-CD: 0 X-Va-ID: 30d0aa91-8cd8-459a-84c7-d63757c11e16 X-V-A: X-V-T-CD: 17e290161afadc43df911743530be568 X-V-E-CD: f42e1f233b026a6701a5dc376868b5d0 X-V-R-CD: 65855544104c2f96f2c335eea6ab5477 X-V-CD: 0 X-V-ID: 1207ff89-cea7-434c-b242-7b9a118923af X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:,, definitions=2019-05-30_11:,, signatures=0 Received: from [17.226.41.60] (unknown [17.226.41.60]) by nwk-mmpp-sz12.apple.com (Oracle Communications Messaging Server 8.0.2.3.20181024 64bit (built Oct 24 2018)) with ESMTPSA id <0PSB00M44X4UUR20@nwk-mmpp-sz12.apple.com>; Thu, 30 May 2019 11:10:34 -0700 (PDT) Sender: afish@apple.com From: "Andrew Fish" Message-id: Subject: Re: [edk2-devel] Edk2 BaseTools Patches. Date: Thu, 30 May 2019 11:10:08 -0700 In-reply-to: <20190530163754.shb54x46euzszpza@bivouac.eciton.net> Cc: "Feng, Bob C" , "Rodriguez, Christian" , Laszlo Ersek , Mike Kinney , "Gao, Liming" , "Shi, Steven" , "Fan, ZhijuX" To: devel@edk2.groups.io, Leif Lindholm References: <08650203BA1BD64D8AD9B6D5D74A85D160128393@SHSMSX101.ccr.corp.intel.com> <20190530092802.7belyzgxdd76ps2v@bivouac.eciton.net> <3A7DCC9A944C6149BF832E1C9B718ABC01F24E6B@ORSMSX112.amr.corp.intel.com> <08650203BA1BD64D8AD9B6D5D74A85D1601296DA@SHSMSX101.ccr.corp.intel.com> <20190530163754.shb54x46euzszpza@bivouac.eciton.net> X-Mailer: Apple Mail (2.3445.6.18) X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:,, definitions=2019-05-30_11:,, signatures=0 Content-type: multipart/alternative; boundary="Boundary_(ID_/caoijfrdCHYW+nzuCrQNw)" --Boundary_(ID_/caoijfrdCHYW+nzuCrQNw) Content-type: text/plain; CHARSET=US-ASCII Content-transfer-encoding: 7BIT > On May 30, 2019, at 9:37 AM, Leif Lindholm wrote: > > Thanks Bob, Christian, > > On Thu, May 30, 2019 at 03:06:48PM +0000, Feng, Bob C wrote: >> Thanks Christian. I add some short description for the patches. >> >> These 5 patches are all for binary cache feature. >> >> [Patch V4 2/2] BaseTools: Refactor hash tracking after checking for Sources section >> [Patch V4 1/2] BaseTools: Add a checking for Sources section in INF file >> >> The above 2 patches is to fix the issue that >> The build tool uses the files list under [sources] section of INF >> file as a input to calculate a module's hash value. But in some INF >> files, [sources] does not list all the "source" files, missing some >> .h files. Path 2/2 use another method to get all source files for a >> module and patch 1/2 do a check whether [sources] list all the >> "source" files. > > I'll be honest - because of the wild variance in whether .h files are > listed in the [sources] section of .inf files, I have always been > unsure as to whether they were just being ignored (and extracted on > the side via mkdep or similar). > Leif, I'm confused too as you can only really know the set of include files by doing the mkdep? I don't see the value of hashing the local include files as any include file change in the mkdep path requires the module to be recompiled. It seems to me having one scheme for hashing and anther four building is going to cause a lot of very subtle errors that are really hard to debug. When you have these kind of errors in your build system you teach people they always need to make clean, so they bypass the hashing and dependency checks. Seems like we may be fighting the makefiles again, but from a 10,000 point of view it seems like the dependency algorithm and the hash need to be tied together. Seems like the makefile already knows if it needs to build it, but I'm not sure if the makefile can run an action if it does not need to build something? Thanks, Andrew Fish > If the intent is to speed up build time, would it not be better to > warn the user - so they notice the problem and fix their modules, > rather than adding extra processing time on having the tools work with > broken .inf files? > > This does not look like material for edk2-stable201905 to me. > >> [PATCH v3 1/1] BaseTools:Extend the binary cache to support library cache >> This patch is to resolve the problem that >> Build tool dose not cache the library binaries now. Whiteout this >> patch, there is 25% extra time cost to rebuild the all module >> dependency libraries if cache miss happen. > > 25% is a big number, so I won't argue against this. But I also won't > argue for it - the BZ was raised very late in the cycle. > >> [PATCH] BaseTools:Update binary cache restore time to current time >> This patch is to make the restored binary file have the current time >> stamp not the binary file original time stamp. > > I can see how the current behaviour could cause problems with some > CI/build systems. If it is properly reviewed and tested, I am OK with > this one going in for edk2-stable201903. > >> [PATCH V5] BaseTools:Make BaseTools support new rules to generate RAW FFS FILE >> This patch is to support the raw ffs file rule. Now build tool does >> not correctly handle this case: >> >> [Rule.Common.USER_DEFINED.MicroCode] >> FILE RAW = $(NAMED_GUID) { >> $(INF_OUTPUT)/$(MODULE_NAME).bin >> } > > This looks like a new feature - not something that should bypass the > freeze period for edk2-stable201905. > Can you explain why this is needed in the stable tag as opposed to > being available from master the day after the tag is made? > > Best Regards, > > Leif > >> >> >> Thanks, >> Bob >> >> -----Original Message----- >> From: Rodriguez, Christian >> Sent: Thursday, May 30, 2019 10:26 PM >> To: Leif Lindholm ; Feng, Bob C >> Cc: Andrew Fish ; Laszlo Ersek ; Kinney, Michael D ; devel@edk2.groups.io; Gao, Liming ; Shi, Steven ; Fan, ZhijuX >> Subject: RE: Edk2 BaseTools Patches. >> >> Hey Leif, >> >> I thought I'd help Bob and gather those BZs for each thread: >> >> [Patch V4 1/2] BaseTools: Add a checking for Sources section in INF file [Patch V4 2/2] BaseTools: Refactor hash tracking after checking for Sources section >> BZ: https://bugzilla.tianocore.org/show_bug.cgi?id=1804 >> >> [PATCH v3 1/1] BaseTools:Extend the binary cache to support library cache >> BZ: https://bugzilla.tianocore.org/show_bug.cgi?id=1797 >> >> [PATCH V5] BaseTools:Make BaseTools support new rules to generate RAW FFS FILE >> BZ: https://bugzilla.tianocore.org/show_bug.cgi?id=1765 >> >> [PATCH] BaseTools:Update binary cache restore time to current time >> BZ: https://bugzilla.tianocore.org/show_bug.cgi?id=1742 >> >> Thanks, >> Christian >> >>> -----Original Message----- >>> From: Leif Lindholm [mailto:leif.lindholm@linaro.org] >>> Sent: Thursday, May 30, 2019 2:28 AM >>> To: Feng, Bob C >>> Cc: Andrew Fish ; Laszlo Ersek ; >>> Kinney, Michael D ; devel@edk2.groups.io; >>> Gao, Liming ; Shi, Steven ; >>> Rodriguez, Christian ; Fan, ZhijuX >>> >>> Subject: Re: Edk2 BaseTools Patches. >>> >>> Hi Bob, >>> >>> On Thu, May 30, 2019 at 06:39:59AM +0000, Feng, Bob C wrote: >>>> Hi, >>>> >>>> Currently, we have 5 Basetools patches which are ready to push. Since >>>> we are in the soft-freeze phase, I'd like to ask for your opinions if >>>> those patches can be pushed to edk2 master. >>> >>> To save me the time of reading through all the threads and getting to >>> grips with all the code, could you summarise the problem these solve >>> and the impact of not including these? >>> >>> Is there a BZ? >>> >>> Regards, >>> >>> Leif >>> >>>> >>>> These 5 patches are to fix the issues for the build cache feature. >>>> >>>> [Patch V4 2/2] BaseTools: Refactor hash tracking after checking for >>>> Sources section >>>> https://edk2.groups.io/g/devel/topic/31835556#41642 >>>> >>>> [Patch V4 1/2] BaseTools: Add a checking for Sources section in INF >>>> file >>>> https://edk2.groups.io/g/devel/topic/31835555#41641 >>>> >>>> [PATCH v3 1/1] BaseTools:Extend the binary cache to support library >>>> cache >>>> https://edk2.groups.io/g/devel/topic/31843505#41655 >>>> >>>> [PATCH V5] BaseTools:Make BaseTools support new rules to generate RAW >>>> FFS FILE >>>> https://edk2.groups.io/g/devel/topic/31830807#41571 >>>> >>>> [PATCH] BaseTools:Update binary cache restore time to current time >>>> https://edk2.groups.io/g/devel/topic/31819590#41468 >>>> >>>> >>>> Thanks, >>>> Bob > > --Boundary_(ID_/caoijfrdCHYW+nzuCrQNw) Content-type: text/html; CHARSET=US-ASCII Content-transfer-encoding: quoted-printable
On May 30= , 2019, at 9:37 AM, Leif Lindholm <leif.lindholm@linaro.org> wrote:

Thanks Bob, Christian,

On Thu, May 30, 2019 at 03:06:48PM +0000, Feng, Bob C wrote:=
Thanks Ch= ristian. I add some short description for the patches.

These 5 patches are all for binary cache feature.
[Patch V4 2/2] BaseTools: Refactor hash tracking after checkin= g for Sources section
[Patch V4 1/2] BaseTools: Add a checkin= g for Sources section in INF file

The above 2 = patches is to fix the issue that
The  build tool uses th= e files list under [sources] section of INF
file as a input t= o calculate a module's hash value. But in some INF
files, [so= urces] does not list all the "source" files, missing some
.h = files. Path 2/2 use another method to get all source files for a
module and patch 1/2 do a check whether [sources] list all the
"source" files.

I'll be honest - because of the wild variance in whe= ther .h files are
lis= ted in the [sources] section of .inf files, I have always been
unsure as to whether they were just= being ignored (and extracted on
the side via mkdep or similar).

=
Leif,

I'm con= fused too as you can only really know the set of include files by doing the= mkdep?

I don't see the value of hashin= g the local include files as any include file change in the mkdep path requ= ires the module to be recompiled. It seems to me having one scheme for hash= ing and anther four building is going to cause a lot of very subtle errors = that are really hard to debug. When you have these kind of errors in your b= uild system you teach people they always need to make clean, so they bypass= the hashing and dependency checks. 

Seems like we may be fighting the makefiles again, but from a 10,000 poi= nt of view it seems like the dependency algorithm and the hash need to be t= ied together. Seems like the makefile already knows if it needs to build it= , but I'm not sure if the makefile can run an action if it does not need to= build something? 

Thanks,

Andrew Fish

If = the intent is to speed up build time, would it not be better to
warn the user - so they notice the= problem and fix their modules,
rather than adding extra processing time on having the tools work = with
broken .inf files?=

This does not look like material for edk2-stable201905 to = me.

[PATCH v3 1/1] BaseTools:Extend the binary= cache to support library cache
This patch is to resolve the = problem that
Build tool dose not cache the library binaries n= ow. Whiteout this
patch, there is 25% extra time cost to rebu= ild the all module
dependency libraries if cache miss happen.=

2= 5% is a big number, so I won't argue against this. But I also won't<= br style=3D"caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 1= 2px; font-style: normal; font-variant-caps: normal; font-weight: normal; le= tter-spacing: normal; text-align: start; text-indent: 0px; text-transform: = none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0p= x; text-decoration: none;" class=3D"">argue for it - the BZ was rais= ed very late in the cycle.
[PATCH] BaseTools:U= pdate binary cache restore time to current time
This patch is= to make the restored binary file have the current time
stamp= not the binary file original time stamp.

I can see how the current behaviour= could cause problems with some
CI/build systems. If it is properly reviewed and tested, I am OK w= ith
this one going in f= or edk2-stable201903.

[PATCH V5] BaseTools:Mak= e BaseTools support new rules to generate RAW FFS FILE
This p= atch is to support the raw ffs file rule. Now build tool does
not correctly handle this case:

[Rule.Common.= USER_DEFINED.MicroCode]
 FILE RAW =3D $(NAMED_GUID) {          &nb= sp;     $(INF_OUTPUT)/$(MODULE_NAME).bin
 }

This looks like a new feature - not something that should byp= ass the
freeze period f= or edk2-stable201905.
C= an you explain why this is needed in the stable tag as opposed tobeing available from master the = day after the tag is made?
Best Regards,

Le= if



Thanks,
Bob

-----Original Message-----
From: Rodriguez, Christian&nb= sp;
Sent: Thursday, May 30, 2019 10:26 PM
To: Leif Lindholm <leif.lindholm@linaro.org>; Feng, Bob C <bob.c.feng@intel.com>
Cc: Andrew Fish <afish@ap= ple.com>; Laszlo Ersek <lersek@redhat.com>; Kinney, Michael D <michael.d.kinney@intel.com>; <= a href=3D"mailto:devel@edk2.groups.io" class=3D"">devel@edk2.groups.io;= Gao, Liming <liming.= gao@intel.com>; Shi, Steven <steven.shi@intel.com>; Fan, ZhijuX <zhijux.fan@intel.com>
Subject: RE: Edk2 BaseTools Patches.

He= y Leif,

I thought I'd help Bob and gather thos= e BZs for each thread:

[Patch V4 1/2] BaseTool= s: Add a checking for Sources section in INF file [Patch V4 2/2] BaseTools:= Refactor hash tracking after checking for Sources section
BZ= : https://bugzilla.tianocore.org/show_bug.cgi?id=3D1804

[PATCH v3 1/1] BaseTools:Extend the binary cache to s= upport library cache
BZ: https://bugzilla.tianocore.org/sho= w_bug.cgi?id=3D1797

[PATCH V5] BaseTools:M= ake BaseTools support new rules to generate RAW FFS FILE
BZ: = https://bugzilla.tianocore.org/show_bug.cgi?id=3D1765
<= br class=3D"">[PATCH] BaseTools:Update binary cache restore time to current= time
BZ: https://bugzilla.tianocore.org/show_bug.cgi?id=3D= 1742

Thanks,
Christian

-----Original = Message-----
From: Leif Lindholm [mailto:leif.lindholm@linaro.org]
Sent: Thursday, May 30, 2019 2:28 AM
To: Feng, Bob C &= lt;bob.c.feng@intel.com<= /a>>
Cc: Andrew Fish <
afish@apple.com>; Laszlo Ersek <lersek@redhat.com>; 
Kinney, Michael D <michael.d.kinney@intel.c= om>; devel@edk2.g= roups.io; 
Gao, Liming <l= iming.gao@intel.com>; Shi, Steven <steven.shi@intel.com>; 
Rodriguez, Christian <christian.rodriguez@i= ntel.com>; Fan, ZhijuX 
<= zhijux.fan@intel.com>
Subject: Re: Edk2 BaseTools Patc= hes.

Hi Bob,

On T= hu, May 30, 2019 at 06:39:59AM +0000, Feng, Bob C wrote:
Hi,

Currently= , we have 5 Basetools patches which are ready to push. Since 
we are in the soft-freez= e phase, I'd like to ask for your opinions if 
those patches can be pushed to edk2 mas= ter.

To save me the time of readi= ng through all the threads and getting to 
grips with all the code, could you summaris= e the problem these solve 
and the impact of not including these?

Is there a BZ?

Regards,

Leif


These 5 patches are to fix the issues for the bu= ild cache feature.

[Patch V4 2/2] BaseTools: R= efactor hash tracking after checking for 
Sources section
https://edk2.g= roups.io/g/devel/topic/31835556#41642

[Pat= ch V4 1/2] BaseTools: Add a checking for Sources section in INF 
file
= https://edk2.groups.io/g/devel/topic/31835555#41641

[PATCH v3 1/1] BaseTools:Extend the binary cache to support library<= span class=3D"Apple-converted-space"> 
cache
https://edk2.groups.io/g/devel/topic/31843505#41655

[PATCH V5] BaseTools:Make BaseTools support new rules to ge= nerate RAW 
FFS FILE
https://edk2.groups.io/g/devel/topic/31830807#41571=

[PATCH] BaseTools:Update binary cache restore= time to current time
https://edk2.groups.io/g/devel/topic/31= 819590#41468


Thanks,
Bob


--Boundary_(ID_/caoijfrdCHYW+nzuCrQNw)-- From mboxrd@z Thu Jan 1 00:00:00 1970 Authentication-Results: mx.groups.io; dkim=missing; spf=pass (domain: intel.com, ip: 192.55.52.151, mailfrom: michael.johnson@intel.com) Received: from mga17.intel.com (mga17.intel.com [192.55.52.151]) by groups.io with SMTP; Thu, 30 May 2019 14:31:23 -0700 X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga003.jf.intel.com ([10.7.209.27]) by fmsmga107.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 30 May 2019 14:31:22 -0700 X-ExtLoop1: 1 Received: from orsmsx102.amr.corp.intel.com ([10.22.225.129]) by orsmga003.jf.intel.com with ESMTP; 30 May 2019 14:31:22 -0700 Received: from orsmsx123.amr.corp.intel.com (10.22.240.116) by ORSMSX102.amr.corp.intel.com (10.22.225.129) with Microsoft SMTP Server (TLS) id 14.3.408.0; Thu, 30 May 2019 14:31:22 -0700 Received: from orsmsx121.amr.corp.intel.com ([169.254.10.47]) by ORSMSX123.amr.corp.intel.com ([169.254.1.141]) with mapi id 14.03.0415.000; Thu, 30 May 2019 14:31:22 -0700 From: michael.johnson@intel.com To: "devel@edk2.groups.io" , "afish@apple.com" , Leif Lindholm CC: "Feng, Bob C" , "Rodriguez, Christian" , Laszlo Ersek , "Kinney, Michael D" , "Gao, Liming" , "Shi, Steven" , "Fan, ZhijuX" Subject: Re: [edk2-devel] Edk2 BaseTools Patches. Thread-Topic: [edk2-devel] Edk2 BaseTools Patches. Thread-Index: AdUWjQt6T2cDiXJSSJG3vQ9oXBf1IQAd5skAAARyC9AAB2LEAAADLn8AAAM4ogAACDTMcA== Date: Thu, 30 May 2019 21:31:21 +0000 Message-ID: <9DB7F8038713D946B98D79CA523B7F95E968B5E5@ORSMSX121.amr.corp.intel.com> References: <08650203BA1BD64D8AD9B6D5D74A85D160128393@SHSMSX101.ccr.corp.intel.com> <20190530092802.7belyzgxdd76ps2v@bivouac.eciton.net> <3A7DCC9A944C6149BF832E1C9B718ABC01F24E6B@ORSMSX112.amr.corp.intel.com> <08650203BA1BD64D8AD9B6D5D74A85D1601296DA@SHSMSX101.ccr.corp.intel.com> <20190530163754.shb54x46euzszpza@bivouac.eciton.net> In-Reply-To: Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-product: dlpe-windows dlp-version: 11.2.0.6 dlp-reaction: no-action x-originating-ip: [10.22.254.140] MIME-Version: 1.0 Return-Path: michael.johnson@intel.com Content-Language: en-US Content-Type: multipart/alternative; boundary="_000_9DB7F8038713D946B98D79CA523B7F95E968B5E5ORSMSX121amrcor_" --_000_9DB7F8038713D946B98D79CA523B7F95E968B5E5ORSMSX121amrcor_ Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable All, These patches are not required for the stable tag. They're improvements n= eeded to enable relatively new build options that are not yet widely used. That said, let me try to clear the air here about what is happening regard= ing the sources/includes and what changes with these patches. The INF spec (section 3.9) says that all local source files, including .h files, must be = included in the sources section. This means a module is not compliant if i= t includes a header file from a directory other than a package include dire= ctory and fails to list it in its sources section. We're already generatin= g a hash which is guaranteed to change whenever the module's source changes= - without invoking mkdep - by hashing each file from the sources section a= s well as *all* the contents of every include folder belonging to each pack= age that the module is dependent on. Every possible 'legally' included header will change the hash, but the has= hes of non-compliant modules will not change when their 'illegally' include= d headers change and we will incorrectly re-use stale cached binaries. To = prevent this, the below patches check for compliance and invalidate the has= h of any non-compliant module. In this way, non-compliance is neither supp= orted nor allowed to poison the cache. Again, since this only has an effect on builds which have enabled this rel= atively new feature, I don't expect any production impact if the stable tag= doesn't take these patches. Nobody is using it yet. -Michael From: devel@edk2.groups.io [mailto:devel@edk2.groups.io] On Behalf Of Andr= ew Fish via Groups.Io Sent: Thursday, May 30, 2019 11:10 AM To: devel@edk2.groups.io; Leif Lindholm Cc: Feng, Bob C ; Rodriguez, Christian ; Laszlo Ersek ; Kinney, Michael D ; Gao, Liming ; Shi, Steven = ; Fan, ZhijuX Subject: Re: [edk2-devel] Edk2 BaseTools Patches. On May 30, 2019, at 9:37 AM, Leif Lindholm > wrote: Thanks Bob, Christian, On Thu, May 30, 2019 at 03:06:48PM +0000, Feng, Bob C wrote: Thanks Christian. I add some short description for the patches. These 5 patches are all for binary cache feature. [Patch V4 2/2] BaseTools: Refactor hash tracking after checking for Source= s section [Patch V4 1/2] BaseTools: Add a checking for Sources section in INF file The above 2 patches is to fix the issue that The build tool uses the files list under [sources] section of INF file as a input to calculate a module's hash value. But in some INF files, [sources] does not list all the "source" files, missing some .h files. Path 2/2 use another method to get all source files for a module and patch 1/2 do a check whether [sources] list all the "source" files. I'll be honest - because of the wild variance in whether .h files are listed in the [sources] section of .inf files, I have always been unsure as to whether they were just being ignored (and extracted on the side via mkdep or similar). Leif, I'm confused too as you can only really know the set of include files by d= oing the mkdep? I don't see the value of hashing the local include files as any include fi= le change in the mkdep path requires the module to be recompiled. It seems = to me having one scheme for hashing and anther four building is going to ca= use a lot of very subtle errors that are really hard to debug. When you hav= e these kind of errors in your build system you teach people they always ne= ed to make clean, so they bypass the hashing and dependency checks. Seems like we may be fighting the makefiles again, but from a 10,000 point= of view it seems like the dependency algorithm and the hash need to be tie= d together. Seems like the makefile already knows if it needs to build it, = but I'm not sure if the makefile can run an action if it does not need to b= uild something? Thanks, Andrew Fish If the intent is to speed up build time, would it not be better to warn the user - so they notice the problem and fix their modules, rather than adding extra processing time on having the tools work with broken .inf files? This does not look like material for edk2-stable201905 to me. [PATCH v3 1/1] BaseTools:Extend the binary cache to support library cache This patch is to resolve the problem that Build tool dose not cache the library binaries now. Whiteout this patch, there is 25% extra time cost to rebuild the all module dependency libraries if cache miss happen. 25% is a big number, so I won't argue against this. But I also won't argue for it - the BZ was raised very late in the cycle. [PATCH] BaseTools:Update binary cache restore time to current time This patch is to make the restored binary file have the current time stamp not the binary file original time stamp. I can see how the current behaviour could cause problems with some CI/build systems. If it is properly reviewed and tested, I am OK with this one going in for edk2-stable201903. [PATCH V5] BaseTools:Make BaseTools support new rules to generate RAW FFS = FILE This patch is to support the raw ffs file rule. Now build tool does not correctly handle this case: [Rule.Common.USER_DEFINED.MicroCode] FILE RAW =3D $(NAMED_GUID) { $(INF_OUTPUT)/$(MODULE_NAME).bin } This looks like a new feature - not something that should bypass the freeze period for edk2-stable201905. Can you explain why this is needed in the stable tag as opposed to being available from master the day after the tag is made? Best Regards, Leif Thanks, Bob -----Original Message----- From: Rodriguez, Christian Sent: Thursday, May 30, 2019 10:26 PM To: Leif Lindholm >; Feng, Bob C > Cc: Andrew Fish >; Laszlo Ersek >; Kinney, Michael D >; devel@edk2.groups.io; Gao, Liming >; Shi, Steven >; Fan, ZhijuX > Subject: RE: Edk2 BaseTools Patches. Hey Leif, I thought I'd help Bob and gather those BZs for each thread: [Patch V4 1/2] BaseTools: Add a checking for Sources section in INF file [= Patch V4 2/2] BaseTools: Refactor hash tracking after checking for Sources = section BZ: https://bugzilla.tianocore.org/show_bug.cgi?id=3D1804 [PATCH v3 1/1] BaseTools:Extend the binary cache to support library cache BZ: https://bugzilla.tianocore.org/show_bug.cgi?id=3D1797 [PATCH V5] BaseTools:Make BaseTools support new rules to generate RAW FFS = FILE BZ: https://bugzilla.tianocore.org/show_bug.cgi?id=3D1765 [PATCH] BaseTools:Update binary cache restore time to current time BZ: https://bugzilla.tianocore.org/show_bug.cgi?id=3D1742 Thanks, Christian -----Original Message----- From: Leif Lindholm [mailto:leif.lindholm@linaro.org] Sent: Thursday, May 30, 2019 2:28 AM To: Feng, Bob C > Cc: Andrew Fish >; Laszlo Ersek >; Kinney, Michael D >; devel@edk2.groups.io; Gao, Liming >; Shi, Stev= en >; Rodriguez, Christian >; Fan, ZhijuX > Subject: Re: Edk2 BaseTools Patches. Hi Bob, On Thu, May 30, 2019 at 06:39:59AM +0000, Feng, Bob C wrote: Hi, Currently, we have 5 Basetools patches which are ready to push. Since we are in the soft-freeze phase, I'd like to ask for your opinions if those patches can be pushed to edk2 master. To save me the time of reading through all the threads and getting to grips with all the code, could you summarise the problem these solve and the impact of not including these? Is there a BZ? Regards, Leif These 5 patches are to fix the issues for the build cache feature. [Patch V4 2/2] BaseTools: Refactor hash tracking after checking for Sources section https://edk2.groups.io/g/devel/topic/31835556#41642 [Patch V4 1/2] BaseTools: Add a checking for Sources section in INF file https://edk2.groups.io/g/devel/topic/31835555#41641 [PATCH v3 1/1] BaseTools:Extend the binary cache to support library cache https://edk2.groups.io/g/devel/topic/31843505#41655 [PATCH V5] BaseTools:Make BaseTools support new rules to generate RAW FFS FILE https://edk2.groups.io/g/devel/topic/31830807#41571 [PATCH] BaseTools:Update binary cache restore time to current time https://edk2.groups.io/g/devel/topic/31819590#41468 Thanks, Bob --_000_9DB7F8038713D946B98D79CA523B7F95E968B5E5ORSMSX121amrcor_ Content-Type: text/html; charset="us-ascii" Content-Transfer-Encoding: quoted-printable

All,

 

These patches are not required for t= he stable tag.  They’re improvements needed to enable relatively= new build options that are not yet widely used.

 

That said, let me try to clear the a= ir here about what is happening regarding the sources/includes and what cha= nges with these patches.

 

The INF spec (section 3.9) says that all local source files, including .h files, must be in= cluded in the sources section.  This means a module is not compliant i= f it includes a header file from a directory other than a package include d= irectory and fails to list it in its sources section.  We’re already generating a hash which is guaranteed = to change whenever the module’s source changes - without invoking mkd= ep - by hashing each file from the sources section as well as *all* = the contents of every include folder belonging to each package that the module is dependent on.

 

Every possible ‘legally’= included header will change the hash, but the hashes of non-compliant modu= les will not change when their ‘illegally’ included headers change and we will incorrectly re-use stale cached binaries.  To pre= vent this, the below patches check for compliance and invalidate the hash o= f any non-compliant module.  In this way, non-compliance is neither su= pported nor allowed to poison the cache.

 

Again, since this only has an effect= on builds which have enabled this relatively new feature, I don’t ex= pect any production impact if the stable tag doesn’t take these patches.  Nobody is using it yet.

 

-Michael

 

&nb= sp;

From: devel@edk2.groups.io [mailto:= devel@edk2.groups.io] On Behalf Of Andrew Fish via Groups.Io
Sent: Thursday, May 30, 2019 11:10 AM
To: devel@edk2.groups.io; Leif Lindholm <leif.lindholm@linaro.or= g>
Cc: Feng, Bob C <bob.c.feng@intel.com>; Rodriguez, Christian = <christian.rodriguez@intel.com>; Laszlo Ersek <lersek@redhat.com&g= t;; Kinney, Michael D <michael.d.kinney@intel.com>; Gao, Liming <l= iming.gao@intel.com>; Shi, Steven <steven.shi@intel.com>; Fan, ZhijuX <zhijux.fan@intel.com>
Subject: Re: [edk2-devel] Edk2 BaseTools Patches.
=

 

 



On May 30, 2019, at 9:37 AM, Leif Lindholm <leif.lindholm@linaro.org> wr= ote:

 

Thanks Bob, Christian,

On Thu, May 30, 2019 at 03:06:48PM +0000, Feng, Bob C wrote:

Thanks Christian. I add some short description fo= r the patches.

These 5 patches are all for binary cache feature.

[Patch V4 2/2] BaseTools: Refactor hash tracking after checking for Source= s section
[Patch V4 1/2] BaseTools: Add a checking for Sources section in INF file
The above 2 patches is to fix the issue that
The  build tool uses the files list under [sources] section of INF file as a input to calculate a module's hash value. But in some INF
files, [sources] does not list all the "source" files, missing s= ome
.h files. Path 2/2 use another method to get all source files for a
module and patch 1/2 do a check whether [sources] list all the
"source" files.


I'll be honest - because of the wild variance in whether .h files are
listed in the [sources] section of .inf files, I have always been
unsure as to whether they were just being ignored (and extracted on
the side via mkdep or similar).

 

Leif,

 

I'm confused too as you can only really know the se= t of include files by doing the mkdep?

 

I don't see the value of hashing the local include = files as any include file change in the mkdep path requires the module to b= e recompiled. It seems to me having one scheme for hashing and anther four = building is going to cause a lot of very subtle errors that are really hard to debug. When you have these kin= d of errors in your build system you teach people they always need to make = clean, so they bypass the hashing and dependency checks. 

 

Seems like we may be fighting the makefiles again, = but from a 10,000 point of view it seems like the dependency algorithm and = the hash need to be tied together. Seems like the makefile already knows if= it needs to build it, but I'm not sure if the makefile can run an action if it does not need to build somet= hing? 

 

Thanks,

 

Andrew Fish

 



If the intent is to speed up build time, would it= not be better to
warn the user - so they notice the problem and fix their modules,
rather than adding extra processing time on having the tools work with
broken .inf files?

This does not look like material for edk2-stable201905 to me.


[PATCH v3 1/1] BaseTools:Extend the binary cache = to support library cache
This patch is to resolve the problem that
Build tool dose not cache the library binaries now. Whiteout this
patch, there is 25% extra time cost to rebuild the all module
dependency libraries if cache miss happen.


25% is a big number, so I won't argue against this. But I also won't
argue for it - the BZ was raised very late in the cycle.


[PATCH] BaseTools:Update binary cache restore tim= e to current time
This patch is to make the restored binary file have the current time
stamp not the binary file original time stamp.


I can see how the current behaviour could cause problems with some
CI/build systems. If it is properly reviewed and tested, I am OK with
this one going in for edk2-stable201903.


[PATCH V5] BaseTools:Make BaseTools support new r= ules to generate RAW FFS FILE
This patch is to support the raw ffs file rule. Now build tool does
not correctly handle this case:

[Rule.Common.USER_DEFINED.MicroCode]
 FILE RAW =3D $(NAMED_GUID) {
            &n= bsp;   $(INF_OUTPUT)/$(MODULE_NAME).bin
 }


This looks like a new feature - not something that should bypass the
freeze period for edk2-stable201905.
Can you explain why this is needed in the stable tag as opposed to
being available from master the day after the tag is made?

Best Regards,

Leif




Thanks,
Bob

-----Original Message-----
From: Rodriguez, Christian 
Sent: Thursday, May 30, 2019 10:26 PM
To: Leif Lindholm <leif.lin= dholm@linaro.org>; Feng, Bob C <bob.c.feng@intel.com>
Cc: Andrew Fish <afish@apple.com= >; Laszlo Ersek <lersek@redhat.c= om>; Kinney, Michael D <michael.d.kinney@intel.com>; devel@edk2.groups.io; Gao, Lim= ing <liming.gao@intel.com>= ;; Shi, Steven <steven.shi@intel= .com>; Fan, ZhijuX <zhiju= x.fan@intel.com>
Subject: RE: Edk2 BaseTools Patches.

Hey Leif,

I thought I'd help Bob and gather those BZs for each thread:

[Patch V4 1/2] BaseTools: Add a checking for Sources section in INF file [= Patch V4 2/2] BaseTools: Refactor hash tracking after checking for Sources = section
BZ: http= s://bugzilla.tianocore.org/show_bug.cgi?id=3D1804

[PATCH v3 1/1] BaseTools:Extend the binary cache to support library cache<= br> BZ: http= s://bugzilla.tianocore.org/show_bug.cgi?id=3D1797

[PATCH V5] BaseTools:Make BaseTools support new rules to generate RAW FFS = FILE
BZ: http= s://bugzilla.tianocore.org/show_bug.cgi?id=3D1765

[PATCH] BaseTools:Update binary cache restore time to current time
BZ: http= s://bugzilla.tianocore.org/show_bug.cgi?id=3D1742

Thanks,
Christian


-----Original Message-----
From: Leif Lindholm [mailto:le= if.lindholm@linaro.org]
Sent: Thursday, May 30, 2019 2:28 AM
To: Feng, Bob C <bob.c.feng@int= el.com>
Cc: Andrew Fish <afish@apple.com= >; Laszlo Ersek <lersek@redhat.c= om>; 
Kinney, Michael D <michae= l.d.kinney@intel.com>; devel@edk2.groups.io; 
Gao, Liming <liming.gao@intel.c= om>; Shi, Steven <steven.= shi@intel.com>;  Rodriguez, Christian <= christian.rodriguez@intel.com>; Fan, ZhijuX 
<zhijux.fan@intel.com> Subject: Re: Edk2 BaseTools Patches.

Hi Bob,

On Thu, May 30, 2019 at 06:39:59AM +0000, Feng, Bob C wrote:

Hi,

Currently, we have 5 Basetools patches which are ready to push. Since 

we are in the soft-freeze phase, I'd like to ask for your opinions if 
those patches can be pushed to edk2 master.


To save me the time of reading through all the threads and getting to 

grips with all the code, could you summarise the problem these solve 
and the impact of not including these?

Is there a BZ?

Regards,

Leif



These 5 patches are to fix the issues for the build cache feature.

[Patch V4 2/2] BaseTools: Refactor hash tracking after checking for 
Sources section
https://ed= k2.groups.io/g/devel/topic/31835556#41642

[Patch V4 1/2] BaseTools: Add a checking for Sources section in INF 
file
https://edk2.groups.io/g/devel/topic/31835555#41641

[PATCH v3 1/1] BaseTools:Extend the binary cache to support library 
cache
https://edk2.groups.io/g/devel/topic/31843505#41655

[PATCH V5] BaseTools:Make BaseTools support new rules to generate RAW 

FFS FILE
https://edk2.groups.io/g/devel/topic/31830807#41571

[PATCH] BaseTools:Update binary cache restore time to current time
https://edk2.groups.io/g/devel/topic/31819590#41468


Thanks,
Bob



 

--_000_9DB7F8038713D946B98D79CA523B7F95E968B5E5ORSMSX121amrcor_-- From mboxrd@z Thu Jan 1 00:00:00 1970 Authentication-Results: mx.groups.io; dkim=pass header.i=@apple.com header.s=20180706 header.b=Pnsnd6p1; spf=pass (domain: apple.com, ip: 17.171.2.72, mailfrom: afish@apple.com) Received: from ma1-aaemail-dr-lapp03.apple.com (ma1-aaemail-dr-lapp03.apple.com [17.171.2.72]) by groups.io with SMTP; Thu, 30 May 2019 15:53:50 -0700 Received: from pps.filterd (ma1-aaemail-dr-lapp03.apple.com [127.0.0.1]) by ma1-aaemail-dr-lapp03.apple.com (8.16.0.27/8.16.0.27) with SMTP id x4UMqTW6045086; Thu, 30 May 2019 15:53:49 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=apple.com; h=mime-version : content-type : sender : from : message-id : subject : date : in-reply-to : cc : to : references; s=20180706; bh=Efq/2fm3wZuZW9xQmSqgNi0cxeaEIBo76XVyn5wZUvI=; b=Pnsnd6p1Vp/0z9nslHUTqj4EnZ2W9BWpcofOMNQNGNrJ1HF0kRMnmdctRjQKiJyTU+f+ tD07EwTAu1gV6ayJcqsjQs5hbUSX1ZuuVv6wLnpA6PPF4giVAfpQGmGBqHcuWwARx4sz /2oYhljhaQU1ZRJadfNx2NVZwpCZXrWXomDkZb/1+rKOE1gMH24y2qt0DOYD/87Cb5DU 1MfGT/ZujKsC1cTeQJJdTZ+bw/5lsHDeyBGAu2AG0y1uKOAggStRbQ8rKEXH5yIvL+sc Dmtfegp5gQkpkNHfSGrdSF5DPTMbAendb6T9GhwaRonony3aEJSbIN5zModjUj4fawsS Kw== Received: from ma1-mtap-s02.corp.apple.com (ma1-mtap-s02.corp.apple.com [17.40.76.6]) by ma1-aaemail-dr-lapp03.apple.com with ESMTP id 2sq4pxrxqk-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NO); Thu, 30 May 2019 15:53:49 -0700 MIME-version: 1.0 Received: from nwk-mmpp-sz11.apple.com (nwk-mmpp-sz11.apple.com [17.128.115.155]) by ma1-mtap-s02.corp.apple.com (Oracle Communications Messaging Server 8.0.2.4.20190507 64bit (built May 7 2019)) with ESMTPS id <0PSC00BLYA9OM4L0@ma1-mtap-s02.corp.apple.com>; Thu, 30 May 2019 15:53:49 -0700 (PDT) Received: from process_milters-daemon.nwk-mmpp-sz11.apple.com by nwk-mmpp-sz11.apple.com (Oracle Communications Messaging Server 8.0.2.4.20190507 64bit (built May 7 2019)) id <0PSC00C009P5L000@nwk-mmpp-sz11.apple.com>; Thu, 30 May 2019 15:53:48 -0700 (PDT) X-Va-A: X-Va-T-CD: 54cb108f6b4b688c9ccb457ecf33e88c X-Va-E-CD: f42e1f233b026a6701a5dc376868b5d0 X-Va-R-CD: 65855544104c2f96f2c335eea6ab5477 X-Va-CD: 0 X-Va-ID: c50188b2-80c2-49e2-b92e-0b0dca497163 X-V-A: X-V-T-CD: 54cb108f6b4b688c9ccb457ecf33e88c X-V-E-CD: f42e1f233b026a6701a5dc376868b5d0 X-V-R-CD: 65855544104c2f96f2c335eea6ab5477 X-V-CD: 0 X-V-ID: fdc5e65f-6f1c-4a28-ae71-2bd36bfd32c5 X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:,, definitions=2019-05-30_14:,, signatures=0 Received: from [17.226.41.60] (unknown [17.226.41.60]) by nwk-mmpp-sz11.apple.com (Oracle Communications Messaging Server 8.0.2.4.20190507 64bit (built May 7 2019)) with ESMTPSA id <0PSC00H31A9NYF10@nwk-mmpp-sz11.apple.com>; Thu, 30 May 2019 15:53:47 -0700 (PDT) Sender: afish@apple.com From: "Andrew Fish" Message-id: Subject: Re: [edk2-devel] Edk2 BaseTools Patches. Date: Thu, 30 May 2019 15:53:21 -0700 In-reply-to: <9DB7F8038713D946B98D79CA523B7F95E968B5E5@ORSMSX121.amr.corp.intel.com> Cc: Leif Lindholm , "Feng, Bob C" , "Rodriguez, Christian" , Laszlo Ersek , Mike Kinney , "Gao, Liming" , "Shi, Steven" , "Fan, ZhijuX" To: devel@edk2.groups.io, Michael Johnson References: <08650203BA1BD64D8AD9B6D5D74A85D160128393@SHSMSX101.ccr.corp.intel.com> <20190530092802.7belyzgxdd76ps2v@bivouac.eciton.net> <3A7DCC9A944C6149BF832E1C9B718ABC01F24E6B@ORSMSX112.amr.corp.intel.com> <08650203BA1BD64D8AD9B6D5D74A85D1601296DA@SHSMSX101.ccr.corp.intel.com> <20190530163754.shb54x46euzszpza@bivouac.eciton.net> <9DB7F8038713D946B98D79CA523B7F95E968B5E5@ORSMSX121.amr.corp.intel.com> X-Mailer: Apple Mail (2.3445.6.18) X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:,, definitions=2019-05-30_14:,, signatures=0 Content-type: multipart/alternative; boundary="Boundary_(ID_LaaWnc2Gg0JC1JoGr8W4kw)" --Boundary_(ID_LaaWnc2Gg0JC1JoGr8W4kw) Content-type: text/plain; charset=utf-8 Content-transfer-encoding: quoted-printable > On May 30, 2019, at 2:31 PM, Johnson, Michael wrote: >=20 > All, > > These patches are not required for the stable tag. They=E2=80=99re impr= ovements needed to enable relatively new build options that are not yet wid= ely used. > > That said, let me try to clear the air here about what is happening rega= rding the sources/includes and what changes with these patches. > > The INF spec (section 3.9 ) says that all local source files, including .h files, must = be included in the sources section. This means a module is not compliant i= f it includes a header file from a directory other than a package include d= irectory and fails to list it in its sources section. We=E2=80=99re alread= y generating a hash which is guaranteed to change whenever the module=E2=80= = =99s source changes - without invoking mkdep - by hashing each file from t= he sources section as well as *all* the contents of every include folder be= longing to each package that the module is dependent on. > > Every possible =E2=80=98legally=E2=80=99 included header will change the= hash, Michael, What about the force include of AutoGen.h?=20 > but the hashes of non-compliant modules will not change when their =E2= =80=98illegally=E2=80=99 included headers change and we will incorrectly r= e-use stale cached binaries. To prevent this, the below patches check for = compliance and invalidate the hash of any non-compliant module. In this wa= y, non-compliance is neither supported nor allowed to poison the cache. > If there is a rule the tools should enforce the rule with good error messa= ges.=20 > Again, since this only has an effect on builds which have enabled this r= elatively new feature, I don=E2=80=99t expect any production impact if the = stable tag doesn=E2=80=99t take these patches. Nobody is using it yet. > I think Leif and I are both concerned about having two ways to do somethin= g as complex as make dependencies, as they risk getting out of phase, or br= eaking different ways (like following the .h rules in the INF File). Also I understand some times we hit circular dependencies and that forces = duplication. It would be good in general to try and make a list of these ki= nd of circular dependencies, given they may been caused by a faulty high le= vel design decision made long ago. At some point refactoring the build syst= em from the top might be the right approach.=20 Thanks, Andrew Fish > -Michael > > =C2=A0 <> > From: devel@edk2.groups.io [mailto:devel@e= dk2.groups.io ] On Behalf Of Andrew Fish via G= roups.Io > Sent: Thursday, May 30, 2019 11:10 AM > To: devel@edk2.groups.io ; Leif Lindholm > > Cc: Feng, Bob C >; Ro= driguez, Christian >; Laszlo Ersek >= ; Kinney, Michael D >; Gao, Liming >= ; Shi, Steven >; Fan, Zh= ijuX > > Subject: Re: [edk2-devel] Edk2 BaseTools Patches. > > >=20 >=20 > On May 30, 2019, at 9:37 AM, Leif Lindholm > wrote: > > Thanks Bob, Christian, >=20 > On Thu, May 30, 2019 at 03:06:48PM +0000, Feng, Bob C wrote: >=20 > Thanks Christian. I add some short description for the patches. >=20 > These 5 patches are all for binary cache feature. >=20 > [Patch V4 2/2] BaseTools: Refactor hash tracking after checking for Sour= ces section > [Patch V4 1/2] BaseTools: Add a checking for Sources section in INF file >=20 > The above 2 patches is to fix the issue that > The build tool uses the files list under [sources] section of INF > file as a input to calculate a module's hash value. But in some INF > files, [sources] does not list all the "source" files, missing some > .h files. Path 2/2 use another method to get all source files for a > module and patch 1/2 do a check whether [sources] list all the > "source" files. >=20 > I'll be honest - because of the wild variance in whether .h files are > listed in the [sources] section of .inf files, I have always been > unsure as to whether they were just being ignored (and extracted on > the side via mkdep or similar). >=20 > > Leif, > > I'm confused too as you can only really know the set of include files by= doing the mkdep? > > I don't see the value of hashing the local include files as any include = file change in the mkdep path requires the module to be recompiled. It seem= s to me having one scheme for hashing and anther four building is going to = cause a lot of very subtle errors that are really hard to debug. When you h= ave these kind of errors in your build system you teach people they always = need to make clean, so they bypass the hashing and dependency checks.=20 > > Seems like we may be fighting the makefiles again, but from a 10,000 poi= nt of view it seems like the dependency algorithm and the hash need to be t= ied together. Seems like the makefile already knows if it needs to build it= , but I'm not sure if the makefile can run an action if it does not need to= build something?=20 > > Thanks, > > Andrew Fish > >=20 >=20 > If the intent is to speed up build time, would it not be better to > warn the user - so they notice the problem and fix their modules, > rather than adding extra processing time on having the tools work with > broken .inf files? >=20 > This does not look like material for edk2-stable201905 to me. >=20 >=20 > [PATCH v3 1/1] BaseTools:Extend the binary cache to support library cach= e > This patch is to resolve the problem that > Build tool dose not cache the library binaries now. Whiteout this > patch, there is 25% extra time cost to rebuild the all module > dependency libraries if cache miss happen. >=20 > 25% is a big number, so I won't argue against this. But I also won't > argue for it - the BZ was raised very late in the cycle. >=20 >=20 > [PATCH] BaseTools:Update binary cache restore time to current time > This patch is to make the restored binary file have the current time > stamp not the binary file original time stamp. >=20 > I can see how the current behaviour could cause problems with some > CI/build systems. If it is properly reviewed and tested, I am OK with > this one going in for edk2-stable201903. >=20 >=20 > [PATCH V5] BaseTools:Make BaseTools support new rules to generate RAW FF= S FILE > This patch is to support the raw ffs file rule. Now build tool does > not correctly handle this case: >=20 > [Rule.Common.USER_DEFINED.MicroCode] > FILE RAW =3D $(NAMED_GUID) { > $(INF_OUTPUT)/$(MODULE_NAME).bin > } >=20 > This looks like a new feature - not something that should bypass the > freeze period for edk2-stable201905. > Can you explain why this is needed in the stable tag as opposed to > being available from master the day after the tag is made? >=20 > Best Regards, >=20 > Leif >=20 >=20 >=20 >=20 > Thanks, > Bob >=20 > -----Original Message----- > From: Rodriguez, Christian=20 > Sent: Thursday, May 30, 2019 10:26 PM > To: Leif Lindholm >; Feng, Bob C > > Cc: Andrew Fish >; Laszlo Ersek= >; Kinney, Michael D >;devel@edk2.groups.= io ; Gao, Liming >; Shi, Steven >; Fan, ZhijuX > > Subject: RE: Edk2 BaseTools Patches. >=20 > Hey Leif, >=20 > I thought I'd help Bob and gather those BZs for each thread: >=20 > [Patch V4 1/2] BaseTools: Add a checking for Sources section in INF file= [Patch V4 2/2] BaseTools: Refactor hash tracking after checking for Source= s section > BZ: https://bugzilla.tianocore.org/show_bug.cgi?id=3D1804 >=20 > [PATCH v3 1/1] BaseTools:Extend the binary cache to support library cach= e > BZ: https://bugzilla.tianocore.org/show_bug.cgi?id=3D1797 >=20 > [PATCH V5] BaseTools:Make BaseTools support new rules to generate RAW FF= S FILE > BZ: https://bugzilla.tianocore.org/show_bug.cgi?id=3D1765 >=20 > [PATCH] BaseTools:Update binary cache restore time to current time > BZ: https://bugzilla.tianocore.org/show_bug.cgi?id=3D1742 >=20 > Thanks, > Christian >=20 >=20 > -----Original Message----- > From: Leif Lindholm [mailto:leif.lindholm@linaro.org ] > Sent: Thursday, May 30, 2019 2:28 AM > To: Feng, Bob C > > Cc: Andrew Fish >; Laszlo Ersek= >;=20 > Kinney, Michael D >; devel@edk2.groups.io ;=20 > Gao, Liming >; Shi, S= teven >;=20 > Rodriguez, Christian >; Fan, ZhijuX=20 > > > Subject: Re: Edk2 BaseTools Patches. >=20 > Hi Bob, >=20 > On Thu, May 30, 2019 at 06:39:59AM +0000, Feng, Bob C wrote: >=20 > Hi, >=20 > Currently, we have 5 Basetools patches which are ready to push. Since=20 > we are in the soft-freeze phase, I'd like to ask for your opinions if=20 > those patches can be pushed to edk2 master. >=20 > To save me the time of reading through all the threads and getting to=20 > grips with all the code, could you summarise the problem these solve=20 > and the impact of not including these? >=20 > Is there a BZ? >=20 > Regards, >=20 > Leif >=20 >=20 >=20 > These 5 patches are to fix the issues for the build cache feature. >=20 > [Patch V4 2/2] BaseTools: Refactor hash tracking after checking for=20 > Sources section > https://edk2.groups.io/g/devel/topic/31835556#41642 >=20 > [Patch V4 1/2] BaseTools: Add a checking for Sources section in INF=20 > file > https://edk2.groups.io/g/devel/topic/31835555#41641 >=20 > [PATCH v3 1/1] BaseTools:Extend the binary cache to support library=20 > cache > https://edk2.groups.io/g/devel/topic/31843505#41655 >=20 > [PATCH V5] BaseTools:Make BaseTools support new rules to generate RAW=20 > FFS FILE > https://edk2.groups.io/g/devel/topic/31830807#41571 >=20 > [PATCH] BaseTools:Update binary cache restore time to current time > https://edk2.groups.io/g/devel/topic/31819590#41468 >=20 >=20 > Thanks, > Bob >=20 >=20 > >=20 --Boundary_(ID_LaaWnc2Gg0JC1JoGr8W4kw) Content-type: text/html; charset=utf-8 Content-transfer-encoding: quoted-printable

On May 30, 2019, at 2:31 PM, Johnson, Michael &= lt;michael.johnson@= intel.com> wrote:

All,
 
These patches are not required for the stable tag.  They=E2=80= =99re improvements needed to enable relatively new build options that are = not yet widely used.
 
That said, let me try to clear the air here about what is happ= ening regarding the sources/includes and what changes with these patches.
 
The INF s= pec (section 3.= 9) says that all local source files, including .h files, must be includ= ed in the sources section.  This means a module is not compliant if it= includes a header file from a directory other than a package include direc= tory and fails to list it in its sources section.  We=E2=80=99re alrea= dy generating a hash which is guaranteed to change whenever the module=E2= =80=99s source changes - without invoking mkdep - by hashing each file fro= m the sources section as well as *all* the contents of ev= ery include folder belonging to each package that the module is dependent o= n.
 
= Every possible =E2=80=98legally=E2=80=99 included header will change the ha= sh,

Mi= chael,

What about the f= orce include of AutoGen.h? 
=

but th= e hashes of non-compliant modules will not change when their =E2=80=98illeg= ally=E2=80=99 included headers change and we will incorrectly re-use stale = cached binaries.  To prevent this, the below patches check for complia= nce and invalidate the hash of any non-compliant module.  In this way,= non-compliance is neither supported nor allowed to poison the cache.
 

If there is a rule the tools= should enforce the rule with good error messages. 

Again, since this only has = an effect on builds which have enabled this relatively new feature, I don= =E2=80=99t expect any production impact if the stable tag doesn=E2=80=99t = take these patches.  Nobody is using it yet.
 

I think Leif and I are both co= ncerned about having two ways to do something as complex as make dependenci= es, as they risk getting out of phase, or breaking different ways (like fol= lowing the .h rules in the INF File).

<= /div>
Also I understand some times we hit circular dependenc= ies and that forces duplication. It would be good in general to try and mak= e a list of these kind of circular dependencies, given they may been caused= by a faulty high level design decision made long ago. At some point refact= oring the build system from the top might be the right approach. 

Thanks,

Andrew Fish


-Michael
 
<= div style=3D"border-style: solid none none; border-top-width: 1pt; border-t= op-color: rgb(225, 225, 225); padding: 3pt 0in 0in;" class=3D"">
From: = devel@edk2.groups.io = [mailto:devel@edk2.groups.io] On Behalf Of Andrew Fish via Groups.IoSent:&n= bsp;Thursday, May 30, 2019 11:10 AM
To:<= /b> devel@edk2.groups.io; Leif Lindholm <leif.lindholm@linaro.org>
Cc:<= /b> Feng, Bob C <bob.c.feng@intel.com>; Rodriguez, Christian = <christian.rodriguez@intel.com= >; Laszlo Ersek <lersek@redhat.com>;= Kinney, Michael D <michael.d.kinne= y@intel.com>; Gao, Liming <liming.ga= o@intel.com>; Shi, Steven <steven.sh= i@intel.com>; Fan, ZhijuX <zhijux.fa= n@intel.com>
Subject: Re: [edk2-devel] Edk2 BaseTools Patches= .
 
 


On= May 30, 2019, at 9:37 AM, Leif Lindholm <leif.lindholm@linaro.org> wrote:
 
Thanks= Bob, Christian,

On Thu, May 30, 2019 at 03:06= :48PM +0000, Feng, Bob C wrote:

<= /div>
=
Thanks Christian. I add some= short description for the patches.

These 5 pa= tches are all for binary cache feature.

[Patch= V4 2/2] BaseTools: Refactor hash tracking after checking for Sources secti= on
[Patch V4 1/2] BaseTools: Add a checking for Sources secti= on in INF file

The above 2 patches is to fix t= he issue that
The  build tool uses the files list under = [sources] section of INF
file as a input to calculate a modul= e's hash value. But in some INF
files, [sources] does not lis= t all the "source" files, missing some
.h files. Path 2/2 use= another method to get all source files for a
module and patc= h 1/2 do a check whether [sources] list all the
"source" file= s.

I'll be honest - because of the wild v= ariance in whether .h files are
listed in the [sources] secti= on of .inf files, I have always been
unsure as to whether the= y were just being ignored (and extracted on
the side via mkde= p or similar).

 
Leif,
 
I'm confused = too as you can only really know the set of include files by doing the mkdep= ?
 
=
I don't see the value of hashing= the local include files as any include file change in the mkdep path requi= res the module to be recompiled. It seems to me having one scheme for hashi= ng and anther four building is going to cause a lot of very subtle errors t= hat are really hard to debug. When you have these kind of errors in your bu= ild system you teach people they always need to make clean, so they bypass = the hashing and dependency checks. 
<= div class=3D"">
&= nbsp;
Seems like we may be fighting the makefiles again, but from a 10,000= point of view it seems like the dependency algorithm and the hash need to = be tied together. Seems like the makefile already knows if it needs to buil= d it, but I'm not sure if the makefile can run an action if it does not nee= d to build something? 
 
Thanks= ,
 
=
Andrew Fish
 


If the intent is to speed u= p build time, would it not be better to
warn the user - so th= ey notice the problem and fix their modules,
rather than addi= ng extra processing time on having the tools work with
broken= .inf files?

This does not look like material = for edk2-stable201905 to me.


[PATCH v3 1/1]= BaseTools:Extend the binary cache to support library cache
T= his patch is to resolve the problem that
Build tool dose not = cache the library binaries now. Whiteout this
patch, there is= 25% extra time cost to rebuild the all module
dependency lib= raries if cache miss happen.

25% is a big= number, so I won't argue against this. But I also won't
argu= e for it - the BZ was raised very late in the cycle.


[PATCH] BaseTools:Update binary cache restore time to current ti= me
This patch is to make the restored binary file have the cu= rrent time
stamp not the binary file original time stamp.

I can see how the current behaviour could ca= use problems with some
CI/build systems. If it is properly re= viewed and tested, I am OK with
this one going in for edk2-st= able201903.


=
[PATCH V5] BaseTools:Make BaseToo= ls support new rules to generate RAW FFS FILE
This patch is t= o support the raw ffs file rule. Now build tool does
not corr= ectly handle this case:

[Rule.Common.USER_DEFI= NED.MicroCode]
 FILE RAW =3D $(NAMED_GUID) {
            =     $(INF_OUTPUT)/$(MODULE_NAME).bin
&nbs= p;}

This looks like a new feature - not s= omething that should bypass the
freeze period for edk2-stable= 201905.
Can you explain why this is needed in the stable tag = as opposed to
being available from master the day after the t= ag is made?

Best Regards,

Leif




T= hanks,
Bob

-----Original Message= -----
From: Rodriguez, Christian 
Sent: Thursday, May 30, 2019 10:26 PM<= br class=3D"">To: Leif Lindholm <leif.l= indholm@linaro.org>; Feng, Bob C <bo= b.c.feng@intel.com>
Cc: Andrew Fish <afish@apple.com>; Laszlo Ersek <lersek@redhat.com>; Kinney, Michael D <michael.d.kinney@intel.com>;devel@edk2.groups.io; Gao, Liming <lim= ing.gao@intel.com>; Shi, Steven <ste= ven.shi@intel.com>; Fan, ZhijuX <zhi= jux.fan@intel.com>
Subject: RE: Edk2 BaseTools Patches= .

Hey Leif,

I tho= ught I'd help Bob and gather those BZs for each thread:

[Patch V4 1/2] BaseTools: Add a checking for Sources section in I= NF file [Patch V4 2/2] BaseTools: Refactor hash tracking after checking for= Sources section
BZ:&nb= sp;https://bu= gzilla.tianocore.org/show_bug.cgi?id=3D1804

[PATCH v3 1/1] BaseTools:Extend the binary cache to support library cache=
BZ: https://bugzilla.tianocore= .org/show_bug.cgi?id=3D1797

[PATCH V5] Bas= eTools:Make BaseTools support new rules to generate RAW FFS FILE
BZ: https://bugzilla.tianocore.org/sho= w_bug.cgi?id=3D1765

[PATCH] BaseTools:Upda= te binary cache restore time to current time
BZ: https://bugzilla.tianocore.org/show_bug.cgi?id=3D1742<= /a>

Thanks,
Christian


-----Original Message-----
From: Leif Lindholm [
mailto:leif.li= ndholm@linaro.org]
Sent: Thursday, May 30, 2019 2:28 AMTo: Feng, Bob C <bob.c.feng@in= tel.com>
Cc: Andrew Fish <a= fish@apple.com>; Laszlo Ersek <lersek@r= edhat.com>; 
Kinney, Michael D <michael.d= .kinney@intel.com>; devel@edk2.groups.io; 
Gao, Liming <liming.gao@intel.com>; Shi, Steven <steven.shi@intel.com>; 
Rodriguez, Christian <christian.rodriguez@intel.com>; Fan, ZhijuX=  
<zhijux.fan@intel.com>
Subject:= Re: Edk2 BaseTools Patches.

Hi Bob,

On Thu, May 30, 2019 at 06:39:59AM +0000, Feng, Bob C= wrote:

Hi,

Cur= rently, we have 5 Basetools patches which are ready to push. Since 
we are in the soft= -freeze phase, I'd like to ask for your opinions if 
those patches can be pushed to ed= k2 master.

To save me the time of reading= through all the threads and getting to 
grips with all the code, could you summarise = the problem these solve <= br class=3D"">and the impact of not including these?

Is there a BZ?

Regards,
<= br class=3D"">Leif



These 5 patches are to fix the issues for the build cache feature.=

[Patch V4 2/2] BaseTools: Refactor hash track= ing after checking for Sources section
https://edk2.groups.io/g/devel/topic/31835556#41642

[Patch V4 1/2] BaseTools: Add a checking for= Sources section in INF <= br class=3D"">file
https://edk2.groups.io/g/devel/topic/31835555#41641

[PATCH v3 1/1] BaseTools:Extend the binary cache to s= upport library 
cache
https://edk2.groups.io/g/devel/topic/31843505#41655

[PATCH V5] BaseTools:Make BaseTools support new rules to g= enerate RAW 
FFS FILE
https://edk2.groups.io/g/devel/topic/31830807#41571
[PATCH] BaseTools:Update binary cache restore time to current = time
htt= ps://edk2.groups.io/g/devel/topic/31819590#41468


Thanks,
Bob


 


--Boundary_(ID_LaaWnc2Gg0JC1JoGr8W4kw)-- From mboxrd@z Thu Jan 1 00:00:00 1970 Authentication-Results: mx.groups.io; dkim=missing; spf=pass (domain: intel.com, ip: 134.134.136.126, mailfrom: michael.johnson@intel.com) Received: from mga18.intel.com (mga18.intel.com [134.134.136.126]) by groups.io with SMTP; Thu, 30 May 2019 17:02:45 -0700 X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga006.fm.intel.com ([10.253.24.20]) by orsmga106.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 30 May 2019 17:02:44 -0700 X-ExtLoop1: 1 Received: from orsmsx108.amr.corp.intel.com ([10.22.240.6]) by fmsmga006.fm.intel.com with ESMTP; 30 May 2019 17:02:43 -0700 Received: from orsmsx112.amr.corp.intel.com (10.22.240.13) by ORSMSX108.amr.corp.intel.com (10.22.240.6) with Microsoft SMTP Server (TLS) id 14.3.408.0; Thu, 30 May 2019 17:02:42 -0700 Received: from orsmsx121.amr.corp.intel.com ([169.254.10.47]) by ORSMSX112.amr.corp.intel.com ([169.254.3.79]) with mapi id 14.03.0415.000; Thu, 30 May 2019 17:02:42 -0700 From: "Johnson, Michael" To: "devel@edk2.groups.io" , "afish@apple.com" CC: Leif Lindholm , "Feng, Bob C" , "Rodriguez, Christian" , Laszlo Ersek , "Kinney, Michael D" , "Gao, Liming" , "Shi, Steven" , "Fan, ZhijuX" Subject: Re: [edk2-devel] Edk2 BaseTools Patches. Thread-Topic: [edk2-devel] Edk2 BaseTools Patches. Thread-Index: AdUWjQt6T2cDiXJSSJG3vQ9oXBf1IQAd5skAAARyC9AAB2LEAAADLn8AAAM4ogAACDTMcAABr1uAAA5Dn7A= Date: Fri, 31 May 2019 00:02:41 +0000 Message-ID: <9DB7F8038713D946B98D79CA523B7F95E968B751@ORSMSX121.amr.corp.intel.com> References: <08650203BA1BD64D8AD9B6D5D74A85D160128393@SHSMSX101.ccr.corp.intel.com> <20190530092802.7belyzgxdd76ps2v@bivouac.eciton.net> <3A7DCC9A944C6149BF832E1C9B718ABC01F24E6B@ORSMSX112.amr.corp.intel.com> <08650203BA1BD64D8AD9B6D5D74A85D1601296DA@SHSMSX101.ccr.corp.intel.com> <20190530163754.shb54x46euzszpza@bivouac.eciton.net> <9DB7F8038713D946B98D79CA523B7F95E968B5E5@ORSMSX121.amr.corp.intel.com> In-Reply-To: Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-product: dlpe-windows dlp-version: 11.2.0.6 dlp-reaction: no-action x-originating-ip: [10.22.254.140] MIME-Version: 1.0 Return-Path: michael.johnson@intel.com Content-Language: en-US Content-Type: multipart/alternative; boundary="_000_9DB7F8038713D946B98D79CA523B7F95E968B751ORSMSX121amrcor_" --_000_9DB7F8038713D946B98D79CA523B7F95E968B751ORSMSX121amrcor_ Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 QW5kcmV3LA0KDQpXaGF0IGFib3V0IHRoZSBmb3JjZSBpbmNsdWRlIG9mIEF1dG9HZW4uaD8NCg0K QXV0b0dlbi5oIChhbmQgLmMpIGhhdmUgY29udGVudHMgd2hpY2ggYXJlIGRldGVybWluZWQgYnkg dmFyaW91cyBtZXRhZGF0YSBsaWtlIFBDRCB2YWx1ZXMgb3IgaXRlbXMgbGlzdGVkIGluIHRoZSBJ TkYuICBUaGUgc291cmNlcyBhbmQgZGVwZW5kZW5jaWVzIGNhbuKAmXQgYmUgaW52b2x2ZWQsIHNp bmNlIHRob3NlIGFyZW7igJl0IGtub3duIHVudGlsIGFmdGVyIHRoZSBhdXRvZ2VuIGZpbGVzIGFy ZSBhbHJlYWR5IGNvbXBsZXRlLiAgVGhlIGJ1aWxkIGNhbGxzIGdlbmMgYmVmb3JlIGdlbm1ha2Uu ICBUaGUgaGFzaCBhY2NvdW50cyBmb3IgdGhvc2UgYnkgaW5jb3Jwb3JhdGluZyB0aGUgbWV0YWRh dGEgaXRzZWxmLCByYXRoZXIgdGhhbiB0aGUgYXV0b2dlbmVyYXRlZCBmaWxlcy4NCg0KSWYgdGhl cmUgaXMgYSBydWxlIHRoZSB0b29scyBzaG91bGQgZW5mb3JjZSB0aGUgcnVsZSB3aXRoIGdvb2Qg ZXJyb3IgbWVzc2FnZXMuDQoNCkZvciB0aGUgY2FzZSBvZiB0aGUgYnVpbGQgaGFzaCBmZWF0dXJl LCB3ZSBoYXZlIGFuIEVka0xvZ2dlci53YXJuIGluIHRoZXNlIHBhdGNoZXMuICBJbnZhbGlkYXRp bmcgdGhlIGhhc2ggYWxsb3dzIHRoZSBidWlsZCB0byBjb250aW51ZSB3aXRoIHVwLXRvLWRhdGUg bW9kdWxlcyBieSBzZW5kaW5nIHRoZSBtb2R1bGUgYmFjayB0byB0aGUgcmVndWxhciBidWlsZCBw cm9jZXNzLCBhbmQgdGhlIG1lc3NhZ2UgaW5mb3JtcyB0aGUgdXNlciBvZiB3aGF0IHdlIGZvdW5k Lg0KDQoNClNpbmNlIHRoZSBwb2ludCBvZiB0aGUgZmVhdHVyZSBpcyB0byBzcGVlZCB1cCBidWls ZHMsIEkgdGhpbmsgdGhpcyBpcyByaWdodC4gIElmIHdlIGluc3RlYWQgc3RvcHBlZCB0aGUgYnVp bGQsIHdoZW4gd2l0aG91dCAtLWhhc2ggaXQgd291bGTigJl2ZSBjb21wbGV0ZWQgc3VjY2Vzc2Z1 bGx5LCB0aGVuIHdl4oCZdmUgbWFkZSBhIG1vcmUgcmVzdHJpY3RlZCBidWlsZCB0aGF04oCZcyBs ZXNzIHVzZWZ1bCwgcmF0aGVyIHRoYW4gZ2l2aW5nIHRoZSBleGlzdGluZyBmdW5jdGlvbmFsaXR5 IGEgc3BlZWQgYm9vc3QgdmlhIGNhY2hpbmcuICBJ4oCZbSBub3QgYWdhaW5zdCBicm9hZGVuaW5n IHRoZSB1c2Ugb2YgdGhpcyBjaGVjayB0byByZWd1bGFyIGJ1aWxkcywgYnV0IHRoYXQgaGFzIHVu YW5zd2VyZWQgcXVlc3Rpb25zIGFuZCBpdHMgb3V0c2lkZSB0aGUgc2NvcGUgb2YgdGhlIEJacyB0 YXJnZXRlZCBieSB0aGVzZSBwYXRjaGVzLiAgRG8gd2Ugd2FudCB0byBjaGVjayBmb3IgdGhpcyBj b25kaXRpb24gb24gZXZlcnkgYnVpbGQgYW5kIGxvZyB3aGVuIHdlIHNlZSBpdD8gIERvIHdlIHdh bnQgYW4gb3B0aW9uYWwgYnVpbGQgZmxhZyBmb3IgaXQ/ICBTaG91bGQgYW5vdGhlciBmbGFnIGNh dXNlIGEgaGFsdCBhbmQgZ2l2ZSBhbiBlcnJvciwgbWF5YmUgc29tZXRoaW5nIGxpa2Ug4oCcLS1z dHJpY3TigJ0gd2hpY2ggY291bGQgY2hlY2sgZm9yIG90aGVyIHNwZWMgdmlvbGF0aW5nIGNvbmRp dGlvbnMgYXMgd2VsbD8gIEl0IHR1cm5zIGludG8gYSB3aG9sZSBmZWF0dXJlIG9mIGl0cyBvd24s IHdpdGggY29uc2lkZXJhYmx5IGhpZ2hlciBpbXBhY3Qgc2luY2UgKm1hbnkqIGNvZGViYXNlcyBp biB0aGUgd2lsZCBoYXZlIG5vbi1jb21wbGlhbnQgbW9kdWxlcyBzcHJpbmtsZWQgdGhyb3VnaG91 dC4NCg0KSSB0aGluayBMZWlmIGFuZCBJIGFyZSBib3RoIGNvbmNlcm5lZCBhYm91dCBoYXZpbmcg dHdvIHdheXMgdG8gZG8gc29tZXRoaW5nIGFzIGNvbXBsZXggYXMgbWFrZSBkZXBlbmRlbmNpZXMs IGFzIHRoZXkgcmlzayBnZXR0aW5nIG91dCBvZiBwaGFzZSwgb3IgYnJlYWtpbmcgZGlmZmVyZW50 IHdheXMgKGxpa2UgZm9sbG93aW5nIHRoZSAuaCBydWxlcyBpbiB0aGUgSU5GIEZpbGUpLg0KDQpJ IHVuZGVyc3RhbmQgdGhlIGNvbmNlcm4uICBPbmUgcG9zaXRpdmUgdGhpbmcgYWJvdXQgdGhlIG92 ZXJseSBicm9hZCBuYXR1cmUgb2YgaGFzaGluZyBhbGwgcG9zc2libGUgbGVnYWwgaW5jbHVkZXMg YW5kIGFsbCBjb21waWxlciBmbGFncyBhbmQgYWxsIGV0YyBldGMgaXMgdGhhdCB3ZSBkb27igJl0 IG5lZWQgdG8gY2FycnkgbXVjaCB1bmRlcnN0YW5kaW5nIG9yIGNvbXBsZXhpdHkuICBXZSBqdXN0 IGhhc2gg4oCYYWxsIHRoZSBpbnB1dHPigJkgYW5kIGRvbuKAmXQgYm90aGVyIGxvb2tpbmcgYW55 IGRlZXBlci4gIEZ1cnRoZXIsIHdoZW4gdGhlIGhhc2ggb2YgYSBtb2R1bGUgY2hhbmdlcywgaXQg ZHJvcHMgYmFjayB0byB0aGUgcmVndWxhciBwYXRoIGFuZCB0aGUgb3JkaW5hcnkgYnVpbGQvc2tp cCBkZWNpc2lvbiBpcyBtYWRlIGV4YWN0bHkgYXMgaXQgd291bGQgYmUgaW4gYSByZWd1bGFyIGJ1 aWxkLiAgSSB0aGluayB0aGlzIGlzIHNpbXBsZSBlbm91Z2ggdG8gbm90IGJlICh0b28pIHRyb3Vi bGluZy4NCg0KQXQgc29tZSBwb2ludCByZWZhY3RvcmluZyB0aGUgYnVpbGQgc3lzdGVtIGZyb20g dGhlIHRvcCBtaWdodCBiZSB0aGUgcmlnaHQgYXBwcm9hY2guDQoNCkFncmVlZC4gIFRoZSBidWls ZCB0b29scyBhcmUgY3JpdGljYWwgYW5kIGNvdWxkIHVzZSBtb3JlIGF0dGVudGlvbi4gIE1heWJl IHNvbWVkYXnigKYNCg0KLU1pY2hhZWwNCg0KRnJvbTogZGV2ZWxAZWRrMi5ncm91cHMuaW8gW21h aWx0bzpkZXZlbEBlZGsyLmdyb3Vwcy5pb10gT24gQmVoYWxmIE9mIEFuZHJldyBGaXNoIHZpYSBH cm91cHMuSW8NClNlbnQ6IFRodXJzZGF5LCBNYXkgMzAsIDIwMTkgMzo1MyBQTQ0KVG86IGRldmVs QGVkazIuZ3JvdXBzLmlvOyBKb2huc29uLCBNaWNoYWVsIDxtaWNoYWVsLmpvaG5zb25AaW50ZWwu Y29tPg0KQ2M6IExlaWYgTGluZGhvbG0gPGxlaWYubGluZGhvbG1AbGluYXJvLm9yZz47IEZlbmcs IEJvYiBDIDxib2IuYy5mZW5nQGludGVsLmNvbT47IFJvZHJpZ3VleiwgQ2hyaXN0aWFuIDxjaHJp c3RpYW4ucm9kcmlndWV6QGludGVsLmNvbT47IExhc3psbyBFcnNlayA8bGVyc2VrQHJlZGhhdC5j b20+OyBLaW5uZXksIE1pY2hhZWwgRCA8bWljaGFlbC5kLmtpbm5leUBpbnRlbC5jb20+OyBHYW8s IExpbWluZyA8bGltaW5nLmdhb0BpbnRlbC5jb20+OyBTaGksIFN0ZXZlbiA8c3RldmVuLnNoaUBp bnRlbC5jb20+OyBGYW4sIFpoaWp1WCA8emhpanV4LmZhbkBpbnRlbC5jb20+DQpTdWJqZWN0OiBS ZTogW2VkazItZGV2ZWxdIEVkazIgQmFzZVRvb2xzIFBhdGNoZXMuDQoNCg0KT24gTWF5IDMwLCAy MDE5LCBhdCAyOjMxIFBNLCBKb2huc29uLCBNaWNoYWVsIDxtaWNoYWVsLmpvaG5zb25AaW50ZWwu Y29tPG1haWx0bzptaWNoYWVsLmpvaG5zb25AaW50ZWwuY29tPj4gd3JvdGU6DQoNCkFsbCwNCg0K VGhlc2UgcGF0Y2hlcyBhcmUgbm90IHJlcXVpcmVkIGZvciB0aGUgc3RhYmxlIHRhZy4gIFRoZXni gJlyZSBpbXByb3ZlbWVudHMgbmVlZGVkIHRvIGVuYWJsZSByZWxhdGl2ZWx5IG5ldyBidWlsZCBv cHRpb25zIHRoYXQgYXJlIG5vdCB5ZXQgd2lkZWx5IHVzZWQuDQoNClRoYXQgc2FpZCwgbGV0IG1l IHRyeSB0byBjbGVhciB0aGUgYWlyIGhlcmUgYWJvdXQgd2hhdCBpcyBoYXBwZW5pbmcgcmVnYXJk aW5nIHRoZSBzb3VyY2VzL2luY2x1ZGVzIGFuZCB3aGF0IGNoYW5nZXMgd2l0aCB0aGVzZSBwYXRj aGVzLg0KDQpUaGUgSU5GIHNwZWMgKHNlY3Rpb24gMy45PGh0dHBzOi8vZWRrMi1kb2NzLmdpdGJv b2tzLmlvL2Vkay1paS1pbmYtc3BlY2lmaWNhdGlvbi9jb250ZW50L3YvcmVsZWFzZS8xLjI3LzNf ZWRrX2lpX2luZl9maWxlX2Zvcm1hdC8zOV8lNWJzb3VyY2VzJTVkX3NlY3Rpb25zLmh0bWw+KSBz YXlzIHRoYXQgYWxsIGxvY2FsIHNvdXJjZSBmaWxlcywgaW5jbHVkaW5nIC5oIGZpbGVzLCBtdXN0 IGJlIGluY2x1ZGVkIGluIHRoZSBzb3VyY2VzIHNlY3Rpb24uICBUaGlzIG1lYW5zIGEgbW9kdWxl IGlzIG5vdCBjb21wbGlhbnQgaWYgaXQgaW5jbHVkZXMgYSBoZWFkZXIgZmlsZSBmcm9tIGEgZGly ZWN0b3J5IG90aGVyIHRoYW4gYSBwYWNrYWdlIGluY2x1ZGUgZGlyZWN0b3J5IGFuZCBmYWlscyB0 byBsaXN0IGl0IGluIGl0cyBzb3VyY2VzIHNlY3Rpb24uICBXZeKAmXJlIGFscmVhZHkgZ2VuZXJh dGluZyBhIGhhc2ggd2hpY2ggaXMgZ3VhcmFudGVlZCB0byBjaGFuZ2Ugd2hlbmV2ZXIgdGhlIG1v ZHVsZeKAmXMgc291cmNlIGNoYW5nZXMgLSB3aXRob3V0IGludm9raW5nIG1rZGVwIC0gYnkgaGFz aGluZyBlYWNoIGZpbGUgZnJvbSB0aGUgc291cmNlcyBzZWN0aW9uIGFzIHdlbGwgYXMgKmFsbCog dGhlIGNvbnRlbnRzIG9mIGV2ZXJ5IGluY2x1ZGUgZm9sZGVyIGJlbG9uZ2luZyB0byBlYWNoIHBh Y2thZ2UgdGhhdCB0aGUgbW9kdWxlIGlzIGRlcGVuZGVudCBvbi4NCg0KRXZlcnkgcG9zc2libGUg 4oCYbGVnYWxseeKAmSBpbmNsdWRlZCBoZWFkZXIgd2lsbCBjaGFuZ2UgdGhlIGhhc2gsDQoNCk1p Y2hhZWwsDQoNCldoYXQgYWJvdXQgdGhlIGZvcmNlIGluY2x1ZGUgb2YgQXV0b0dlbi5oPw0KDQoN CmJ1dCB0aGUgaGFzaGVzIG9mIG5vbi1jb21wbGlhbnQgbW9kdWxlcyB3aWxsIG5vdCBjaGFuZ2Ug d2hlbiB0aGVpciDigJhpbGxlZ2FsbHnigJkgaW5jbHVkZWQgaGVhZGVycyBjaGFuZ2UgYW5kIHdl IHdpbGwgaW5jb3JyZWN0bHkgcmUtdXNlIHN0YWxlIGNhY2hlZCBiaW5hcmllcy4gIFRvIHByZXZl bnQgdGhpcywgdGhlIGJlbG93IHBhdGNoZXMgY2hlY2sgZm9yIGNvbXBsaWFuY2UgYW5kIGludmFs aWRhdGUgdGhlIGhhc2ggb2YgYW55IG5vbi1jb21wbGlhbnQgbW9kdWxlLiAgSW4gdGhpcyB3YXks IG5vbi1jb21wbGlhbmNlIGlzIG5laXRoZXIgc3VwcG9ydGVkIG5vciBhbGxvd2VkIHRvIHBvaXNv biB0aGUgY2FjaGUuDQoNCg0KSWYgdGhlcmUgaXMgYSBydWxlIHRoZSB0b29scyBzaG91bGQgZW5m b3JjZSB0aGUgcnVsZSB3aXRoIGdvb2QgZXJyb3IgbWVzc2FnZXMuDQoNCg0KQWdhaW4sIHNpbmNl IHRoaXMgb25seSBoYXMgYW4gZWZmZWN0IG9uIGJ1aWxkcyB3aGljaCBoYXZlIGVuYWJsZWQgdGhp cyByZWxhdGl2ZWx5IG5ldyBmZWF0dXJlLCBJIGRvbuKAmXQgZXhwZWN0IGFueSBwcm9kdWN0aW9u IGltcGFjdCBpZiB0aGUgc3RhYmxlIHRhZyBkb2VzbuKAmXQgdGFrZSB0aGVzZSBwYXRjaGVzLiAg Tm9ib2R5IGlzIHVzaW5nIGl0IHlldC4NCg0KDQpJIHRoaW5rIExlaWYgYW5kIEkgYXJlIGJvdGgg Y29uY2VybmVkIGFib3V0IGhhdmluZyB0d28gd2F5cyB0byBkbyBzb21ldGhpbmcgYXMgY29tcGxl eCBhcyBtYWtlIGRlcGVuZGVuY2llcywgYXMgdGhleSByaXNrIGdldHRpbmcgb3V0IG9mIHBoYXNl LCBvciBicmVha2luZyBkaWZmZXJlbnQgd2F5cyAobGlrZSBmb2xsb3dpbmcgdGhlIC5oIHJ1bGVz IGluIHRoZSBJTkYgRmlsZSkuDQoNCkFsc28gSSB1bmRlcnN0YW5kIHNvbWUgdGltZXMgd2UgaGl0 IGNpcmN1bGFyIGRlcGVuZGVuY2llcyBhbmQgdGhhdCBmb3JjZXMgZHVwbGljYXRpb24uIEl0IHdv dWxkIGJlIGdvb2QgaW4gZ2VuZXJhbCB0byB0cnkgYW5kIG1ha2UgYSBsaXN0IG9mIHRoZXNlIGtp bmQgb2YgY2lyY3VsYXIgZGVwZW5kZW5jaWVzLCBnaXZlbiB0aGV5IG1heSBiZWVuIGNhdXNlZCBi eSBhIGZhdWx0eSBoaWdoIGxldmVsIGRlc2lnbiBkZWNpc2lvbiBtYWRlIGxvbmcgYWdvLiBBdCBz b21lIHBvaW50IHJlZmFjdG9yaW5nIHRoZSBidWlsZCBzeXN0ZW0gZnJvbSB0aGUgdG9wIG1pZ2h0 IGJlIHRoZSByaWdodCBhcHByb2FjaC4NCg0KVGhhbmtzLA0KDQpBbmRyZXcgRmlzaA0KDQoNCg0K LU1pY2hhZWwNCg0KDQpGcm9tOiBkZXZlbEBlZGsyLmdyb3Vwcy5pbzxtYWlsdG86ZGV2ZWxAZWRr Mi5ncm91cHMuaW8+IFttYWlsdG86ZGV2ZWxAZWRrMi5ncm91cHMuaW9dIE9uIEJlaGFsZiBPZiBB bmRyZXcgRmlzaCB2aWEgR3JvdXBzLklvDQpTZW50OiBUaHVyc2RheSwgTWF5IDMwLCAyMDE5IDEx OjEwIEFNDQpUbzogZGV2ZWxAZWRrMi5ncm91cHMuaW88bWFpbHRvOmRldmVsQGVkazIuZ3JvdXBz LmlvPjsgTGVpZiBMaW5kaG9sbSA8bGVpZi5saW5kaG9sbUBsaW5hcm8ub3JnPG1haWx0bzpsZWlm LmxpbmRob2xtQGxpbmFyby5vcmc+Pg0KQ2M6IEZlbmcsIEJvYiBDIDxib2IuYy5mZW5nQGludGVs LmNvbTxtYWlsdG86Ym9iLmMuZmVuZ0BpbnRlbC5jb20+PjsgUm9kcmlndWV6LCBDaHJpc3RpYW4g PGNocmlzdGlhbi5yb2RyaWd1ZXpAaW50ZWwuY29tPG1haWx0bzpjaHJpc3RpYW4ucm9kcmlndWV6 QGludGVsLmNvbT4+OyBMYXN6bG8gRXJzZWsgPGxlcnNla0ByZWRoYXQuY29tPG1haWx0bzpsZXJz ZWtAcmVkaGF0LmNvbT4+OyBLaW5uZXksIE1pY2hhZWwgRCA8bWljaGFlbC5kLmtpbm5leUBpbnRl bC5jb208bWFpbHRvOm1pY2hhZWwuZC5raW5uZXlAaW50ZWwuY29tPj47IEdhbywgTGltaW5nIDxs aW1pbmcuZ2FvQGludGVsLmNvbTxtYWlsdG86bGltaW5nLmdhb0BpbnRlbC5jb20+PjsgU2hpLCBT dGV2ZW4gPHN0ZXZlbi5zaGlAaW50ZWwuY29tPG1haWx0bzpzdGV2ZW4uc2hpQGludGVsLmNvbT4+ OyBGYW4sIFpoaWp1WCA8emhpanV4LmZhbkBpbnRlbC5jb208bWFpbHRvOnpoaWp1eC5mYW5AaW50 ZWwuY29tPj4NClN1YmplY3Q6IFJlOiBbZWRrMi1kZXZlbF0gRWRrMiBCYXNlVG9vbHMgUGF0Y2hl cy4NCg0KDQoNCg0KDQpPbiBNYXkgMzAsIDIwMTksIGF0IDk6MzcgQU0sIExlaWYgTGluZGhvbG0g PGxlaWYubGluZGhvbG1AbGluYXJvLm9yZzxtYWlsdG86bGVpZi5saW5kaG9sbUBsaW5hcm8ub3Jn Pj4gd3JvdGU6DQoNClRoYW5rcyBCb2IsIENocmlzdGlhbiwNCg0KT24gVGh1LCBNYXkgMzAsIDIw MTkgYXQgMDM6MDY6NDhQTSArMDAwMCwgRmVuZywgQm9iIEMgd3JvdGU6DQoNCg0KVGhhbmtzIENo cmlzdGlhbi4gSSBhZGQgc29tZSBzaG9ydCBkZXNjcmlwdGlvbiBmb3IgdGhlIHBhdGNoZXMuDQoN ClRoZXNlIDUgcGF0Y2hlcyBhcmUgYWxsIGZvciBiaW5hcnkgY2FjaGUgZmVhdHVyZS4NCg0KW1Bh dGNoIFY0IDIvMl0gQmFzZVRvb2xzOiBSZWZhY3RvciBoYXNoIHRyYWNraW5nIGFmdGVyIGNoZWNr aW5nIGZvciBTb3VyY2VzIHNlY3Rpb24NCltQYXRjaCBWNCAxLzJdIEJhc2VUb29sczogQWRkIGEg Y2hlY2tpbmcgZm9yIFNvdXJjZXMgc2VjdGlvbiBpbiBJTkYgZmlsZQ0KDQpUaGUgYWJvdmUgMiBw YXRjaGVzIGlzIHRvIGZpeCB0aGUgaXNzdWUgdGhhdA0KVGhlICBidWlsZCB0b29sIHVzZXMgdGhl IGZpbGVzIGxpc3QgdW5kZXIgW3NvdXJjZXNdIHNlY3Rpb24gb2YgSU5GDQpmaWxlIGFzIGEgaW5w dXQgdG8gY2FsY3VsYXRlIGEgbW9kdWxlJ3MgaGFzaCB2YWx1ZS4gQnV0IGluIHNvbWUgSU5GDQpm aWxlcywgW3NvdXJjZXNdIGRvZXMgbm90IGxpc3QgYWxsIHRoZSAic291cmNlIiBmaWxlcywgbWlz c2luZyBzb21lDQouaCBmaWxlcy4gUGF0aCAyLzIgdXNlIGFub3RoZXIgbWV0aG9kIHRvIGdldCBh bGwgc291cmNlIGZpbGVzIGZvciBhDQptb2R1bGUgYW5kIHBhdGNoIDEvMiBkbyBhIGNoZWNrIHdo ZXRoZXIgW3NvdXJjZXNdIGxpc3QgYWxsIHRoZQ0KInNvdXJjZSIgZmlsZXMuDQoNCkknbGwgYmUg aG9uZXN0IC0gYmVjYXVzZSBvZiB0aGUgd2lsZCB2YXJpYW5jZSBpbiB3aGV0aGVyIC5oIGZpbGVz IGFyZQ0KbGlzdGVkIGluIHRoZSBbc291cmNlc10gc2VjdGlvbiBvZiAuaW5mIGZpbGVzLCBJIGhh dmUgYWx3YXlzIGJlZW4NCnVuc3VyZSBhcyB0byB3aGV0aGVyIHRoZXkgd2VyZSBqdXN0IGJlaW5n IGlnbm9yZWQgKGFuZCBleHRyYWN0ZWQgb24NCnRoZSBzaWRlIHZpYSBta2RlcCBvciBzaW1pbGFy KS4NCg0KDQoNCkxlaWYsDQoNCkknbSBjb25mdXNlZCB0b28gYXMgeW91IGNhbiBvbmx5IHJlYWxs eSBrbm93IHRoZSBzZXQgb2YgaW5jbHVkZSBmaWxlcyBieSBkb2luZyB0aGUgbWtkZXA/DQoNCkkg ZG9uJ3Qgc2VlIHRoZSB2YWx1ZSBvZiBoYXNoaW5nIHRoZSBsb2NhbCBpbmNsdWRlIGZpbGVzIGFz IGFueSBpbmNsdWRlIGZpbGUgY2hhbmdlIGluIHRoZSBta2RlcCBwYXRoIHJlcXVpcmVzIHRoZSBt b2R1bGUgdG8gYmUgcmVjb21waWxlZC4gSXQgc2VlbXMgdG8gbWUgaGF2aW5nIG9uZSBzY2hlbWUg Zm9yIGhhc2hpbmcgYW5kIGFudGhlciBmb3VyIGJ1aWxkaW5nIGlzIGdvaW5nIHRvIGNhdXNlIGEg bG90IG9mIHZlcnkgc3VidGxlIGVycm9ycyB0aGF0IGFyZSByZWFsbHkgaGFyZCB0byBkZWJ1Zy4g V2hlbiB5b3UgaGF2ZSB0aGVzZSBraW5kIG9mIGVycm9ycyBpbiB5b3VyIGJ1aWxkIHN5c3RlbSB5 b3UgdGVhY2ggcGVvcGxlIHRoZXkgYWx3YXlzIG5lZWQgdG8gbWFrZSBjbGVhbiwgc28gdGhleSBi eXBhc3MgdGhlIGhhc2hpbmcgYW5kIGRlcGVuZGVuY3kgY2hlY2tzLg0KDQpTZWVtcyBsaWtlIHdl IG1heSBiZSBmaWdodGluZyB0aGUgbWFrZWZpbGVzIGFnYWluLCBidXQgZnJvbSBhIDEwLDAwMCBw b2ludCBvZiB2aWV3IGl0IHNlZW1zIGxpa2UgdGhlIGRlcGVuZGVuY3kgYWxnb3JpdGhtIGFuZCB0 aGUgaGFzaCBuZWVkIHRvIGJlIHRpZWQgdG9nZXRoZXIuIFNlZW1zIGxpa2UgdGhlIG1ha2VmaWxl IGFscmVhZHkga25vd3MgaWYgaXQgbmVlZHMgdG8gYnVpbGQgaXQsIGJ1dCBJJ20gbm90IHN1cmUg aWYgdGhlIG1ha2VmaWxlIGNhbiBydW4gYW4gYWN0aW9uIGlmIGl0IGRvZXMgbm90IG5lZWQgdG8g YnVpbGQgc29tZXRoaW5nPw0KDQpUaGFua3MsDQoNCkFuZHJldyBGaXNoDQoNCg0KDQoNCklmIHRo ZSBpbnRlbnQgaXMgdG8gc3BlZWQgdXAgYnVpbGQgdGltZSwgd291bGQgaXQgbm90IGJlIGJldHRl ciB0bw0Kd2FybiB0aGUgdXNlciAtIHNvIHRoZXkgbm90aWNlIHRoZSBwcm9ibGVtIGFuZCBmaXgg dGhlaXIgbW9kdWxlcywNCnJhdGhlciB0aGFuIGFkZGluZyBleHRyYSBwcm9jZXNzaW5nIHRpbWUg b24gaGF2aW5nIHRoZSB0b29scyB3b3JrIHdpdGgNCmJyb2tlbiAuaW5mIGZpbGVzPw0KDQpUaGlz IGRvZXMgbm90IGxvb2sgbGlrZSBtYXRlcmlhbCBmb3IgZWRrMi1zdGFibGUyMDE5MDUgdG8gbWUu DQoNCg0KDQpbUEFUQ0ggdjMgMS8xXSBCYXNlVG9vbHM6RXh0ZW5kIHRoZSBiaW5hcnkgY2FjaGUg dG8gc3VwcG9ydCBsaWJyYXJ5IGNhY2hlDQpUaGlzIHBhdGNoIGlzIHRvIHJlc29sdmUgdGhlIHBy b2JsZW0gdGhhdA0KQnVpbGQgdG9vbCBkb3NlIG5vdCBjYWNoZSB0aGUgbGlicmFyeSBiaW5hcmll cyBub3cuIFdoaXRlb3V0IHRoaXMNCnBhdGNoLCB0aGVyZSBpcyAyNSUgZXh0cmEgdGltZSBjb3N0 IHRvIHJlYnVpbGQgdGhlIGFsbCBtb2R1bGUNCmRlcGVuZGVuY3kgbGlicmFyaWVzIGlmIGNhY2hl IG1pc3MgaGFwcGVuLg0KDQoyNSUgaXMgYSBiaWcgbnVtYmVyLCBzbyBJIHdvbid0IGFyZ3VlIGFn YWluc3QgdGhpcy4gQnV0IEkgYWxzbyB3b24ndA0KYXJndWUgZm9yIGl0IC0gdGhlIEJaIHdhcyBy YWlzZWQgdmVyeSBsYXRlIGluIHRoZSBjeWNsZS4NCg0KDQoNCltQQVRDSF0gQmFzZVRvb2xzOlVw ZGF0ZSBiaW5hcnkgY2FjaGUgcmVzdG9yZSB0aW1lIHRvIGN1cnJlbnQgdGltZQ0KVGhpcyBwYXRj aCBpcyB0byBtYWtlIHRoZSByZXN0b3JlZCBiaW5hcnkgZmlsZSBoYXZlIHRoZSBjdXJyZW50IHRp bWUNCnN0YW1wIG5vdCB0aGUgYmluYXJ5IGZpbGUgb3JpZ2luYWwgdGltZSBzdGFtcC4NCg0KSSBj YW4gc2VlIGhvdyB0aGUgY3VycmVudCBiZWhhdmlvdXIgY291bGQgY2F1c2UgcHJvYmxlbXMgd2l0 aCBzb21lDQpDSS9idWlsZCBzeXN0ZW1zLiBJZiBpdCBpcyBwcm9wZXJseSByZXZpZXdlZCBhbmQg dGVzdGVkLCBJIGFtIE9LIHdpdGgNCnRoaXMgb25lIGdvaW5nIGluIGZvciBlZGsyLXN0YWJsZTIw MTkwMy4NCg0KDQoNCltQQVRDSCBWNV0gQmFzZVRvb2xzOk1ha2UgQmFzZVRvb2xzIHN1cHBvcnQg bmV3IHJ1bGVzIHRvIGdlbmVyYXRlIFJBVyBGRlMgRklMRQ0KVGhpcyBwYXRjaCBpcyB0byBzdXBw b3J0IHRoZSByYXcgZmZzIGZpbGUgcnVsZS4gTm93IGJ1aWxkIHRvb2wgZG9lcw0Kbm90IGNvcnJl Y3RseSBoYW5kbGUgdGhpcyBjYXNlOg0KDQpbUnVsZS5Db21tb24uVVNFUl9ERUZJTkVELk1pY3Jv Q29kZV0NCiBGSUxFIFJBVyA9ICQoTkFNRURfR1VJRCkgew0KICAgICAgICAgICAgICAgICQoSU5G X09VVFBVVCkvJChNT0RVTEVfTkFNRSkuYmluDQogfQ0KDQpUaGlzIGxvb2tzIGxpa2UgYSBuZXcg ZmVhdHVyZSAtIG5vdCBzb21ldGhpbmcgdGhhdCBzaG91bGQgYnlwYXNzIHRoZQ0KZnJlZXplIHBl cmlvZCBmb3IgZWRrMi1zdGFibGUyMDE5MDUuDQpDYW4geW91IGV4cGxhaW4gd2h5IHRoaXMgaXMg bmVlZGVkIGluIHRoZSBzdGFibGUgdGFnIGFzIG9wcG9zZWQgdG8NCmJlaW5nIGF2YWlsYWJsZSBm cm9tIG1hc3RlciB0aGUgZGF5IGFmdGVyIHRoZSB0YWcgaXMgbWFkZT8NCg0KQmVzdCBSZWdhcmRz LA0KDQpMZWlmDQoNCg0KDQoNCg0KVGhhbmtzLA0KQm9iDQoNCi0tLS0tT3JpZ2luYWwgTWVzc2Fn ZS0tLS0tDQpGcm9tOiBSb2RyaWd1ZXosIENocmlzdGlhbg0KU2VudDogVGh1cnNkYXksIE1heSAz MCwgMjAxOSAxMDoyNiBQTQ0KVG86IExlaWYgTGluZGhvbG0gPGxlaWYubGluZGhvbG1AbGluYXJv Lm9yZzxtYWlsdG86bGVpZi5saW5kaG9sbUBsaW5hcm8ub3JnPj47IEZlbmcsIEJvYiBDIDxib2Iu Yy5mZW5nQGludGVsLmNvbTxtYWlsdG86Ym9iLmMuZmVuZ0BpbnRlbC5jb20+Pg0KQ2M6IEFuZHJl dyBGaXNoIDxhZmlzaEBhcHBsZS5jb208bWFpbHRvOmFmaXNoQGFwcGxlLmNvbT4+OyBMYXN6bG8g RXJzZWsgPGxlcnNla0ByZWRoYXQuY29tPG1haWx0bzpsZXJzZWtAcmVkaGF0LmNvbT4+OyBLaW5u ZXksIE1pY2hhZWwgRCA8bWljaGFlbC5kLmtpbm5leUBpbnRlbC5jb208bWFpbHRvOm1pY2hhZWwu ZC5raW5uZXlAaW50ZWwuY29tPj47ZGV2ZWxAZWRrMi5ncm91cHMuaW88bWFpbHRvOmRldmVsQGVk azIuZ3JvdXBzLmlvPjsgR2FvLCBMaW1pbmcgPGxpbWluZy5nYW9AaW50ZWwuY29tPG1haWx0bzps aW1pbmcuZ2FvQGludGVsLmNvbT4+OyBTaGksIFN0ZXZlbiA8c3RldmVuLnNoaUBpbnRlbC5jb208 bWFpbHRvOnN0ZXZlbi5zaGlAaW50ZWwuY29tPj47IEZhbiwgWmhpanVYIDx6aGlqdXguZmFuQGlu dGVsLmNvbTxtYWlsdG86emhpanV4LmZhbkBpbnRlbC5jb20+Pg0KU3ViamVjdDogUkU6IEVkazIg QmFzZVRvb2xzIFBhdGNoZXMuDQoNCkhleSBMZWlmLA0KDQpJIHRob3VnaHQgSSdkIGhlbHAgQm9i IGFuZCBnYXRoZXIgdGhvc2UgQlpzIGZvciBlYWNoIHRocmVhZDoNCg0KW1BhdGNoIFY0IDEvMl0g QmFzZVRvb2xzOiBBZGQgYSBjaGVja2luZyBmb3IgU291cmNlcyBzZWN0aW9uIGluIElORiBmaWxl IFtQYXRjaCBWNCAyLzJdIEJhc2VUb29sczogUmVmYWN0b3IgaGFzaCB0cmFja2luZyBhZnRlciBj aGVja2luZyBmb3IgU291cmNlcyBzZWN0aW9uDQpCWjogaHR0cHM6Ly9idWd6aWxsYS50aWFub2Nv cmUub3JnL3Nob3dfYnVnLmNnaT9pZD0xODA0DQoNCltQQVRDSCB2MyAxLzFdIEJhc2VUb29sczpF eHRlbmQgdGhlIGJpbmFyeSBjYWNoZSB0byBzdXBwb3J0IGxpYnJhcnkgY2FjaGUNCkJaOiBodHRw czovL2J1Z3ppbGxhLnRpYW5vY29yZS5vcmcvc2hvd19idWcuY2dpP2lkPTE3OTcNCg0KW1BBVENI IFY1XSBCYXNlVG9vbHM6TWFrZSBCYXNlVG9vbHMgc3VwcG9ydCBuZXcgcnVsZXMgdG8gZ2VuZXJh dGUgUkFXIEZGUyBGSUxFDQpCWjogaHR0cHM6Ly9idWd6aWxsYS50aWFub2NvcmUub3JnL3Nob3df YnVnLmNnaT9pZD0xNzY1DQoNCltQQVRDSF0gQmFzZVRvb2xzOlVwZGF0ZSBiaW5hcnkgY2FjaGUg cmVzdG9yZSB0aW1lIHRvIGN1cnJlbnQgdGltZQ0KQlo6IGh0dHBzOi8vYnVnemlsbGEudGlhbm9j b3JlLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc0Mg0KDQpUaGFua3MsDQpDaHJpc3RpYW4NCg0KDQoN Ci0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQpGcm9tOiBMZWlmIExpbmRob2xtIFttYWlsdG86 bGVpZi5saW5kaG9sbUBsaW5hcm8ub3JnXQ0KU2VudDogVGh1cnNkYXksIE1heSAzMCwgMjAxOSAy OjI4IEFNDQpUbzogRmVuZywgQm9iIEMgPGJvYi5jLmZlbmdAaW50ZWwuY29tPG1haWx0bzpib2Iu Yy5mZW5nQGludGVsLmNvbT4+DQpDYzogQW5kcmV3IEZpc2ggPGFmaXNoQGFwcGxlLmNvbTxtYWls dG86YWZpc2hAYXBwbGUuY29tPj47IExhc3psbyBFcnNlayA8bGVyc2VrQHJlZGhhdC5jb208bWFp bHRvOmxlcnNla0ByZWRoYXQuY29tPj47DQpLaW5uZXksIE1pY2hhZWwgRCA8bWljaGFlbC5kLmtp bm5leUBpbnRlbC5jb208bWFpbHRvOm1pY2hhZWwuZC5raW5uZXlAaW50ZWwuY29tPj47IGRldmVs QGVkazIuZ3JvdXBzLmlvPG1haWx0bzpkZXZlbEBlZGsyLmdyb3Vwcy5pbz47DQpHYW8sIExpbWlu ZyA8bGltaW5nLmdhb0BpbnRlbC5jb208bWFpbHRvOmxpbWluZy5nYW9AaW50ZWwuY29tPj47IFNo aSwgU3RldmVuIDxzdGV2ZW4uc2hpQGludGVsLmNvbTxtYWlsdG86c3RldmVuLnNoaUBpbnRlbC5j b20+PjsNClJvZHJpZ3VleiwgQ2hyaXN0aWFuIDxjaHJpc3RpYW4ucm9kcmlndWV6QGludGVsLmNv bTxtYWlsdG86Y2hyaXN0aWFuLnJvZHJpZ3VlekBpbnRlbC5jb20+PjsgRmFuLCBaaGlqdVgNCjx6 aGlqdXguZmFuQGludGVsLmNvbTxtYWlsdG86emhpanV4LmZhbkBpbnRlbC5jb20+Pg0KU3ViamVj dDogUmU6IEVkazIgQmFzZVRvb2xzIFBhdGNoZXMuDQoNCkhpIEJvYiwNCg0KT24gVGh1LCBNYXkg MzAsIDIwMTkgYXQgMDY6Mzk6NTlBTSArMDAwMCwgRmVuZywgQm9iIEMgd3JvdGU6DQoNCg0KSGks DQoNCkN1cnJlbnRseSwgd2UgaGF2ZSA1IEJhc2V0b29scyBwYXRjaGVzIHdoaWNoIGFyZSByZWFk eSB0byBwdXNoLiBTaW5jZQ0Kd2UgYXJlIGluIHRoZSBzb2Z0LWZyZWV6ZSBwaGFzZSwgSSdkIGxp a2UgdG8gYXNrIGZvciB5b3VyIG9waW5pb25zIGlmDQp0aG9zZSBwYXRjaGVzIGNhbiBiZSBwdXNo ZWQgdG8gZWRrMiBtYXN0ZXIuDQoNClRvIHNhdmUgbWUgdGhlIHRpbWUgb2YgcmVhZGluZyB0aHJv dWdoIGFsbCB0aGUgdGhyZWFkcyBhbmQgZ2V0dGluZyB0bw0KZ3JpcHMgd2l0aCBhbGwgdGhlIGNv ZGUsIGNvdWxkIHlvdSBzdW1tYXJpc2UgdGhlIHByb2JsZW0gdGhlc2Ugc29sdmUNCmFuZCB0aGUg aW1wYWN0IG9mIG5vdCBpbmNsdWRpbmcgdGhlc2U/DQoNCklzIHRoZXJlIGEgQlo/DQoNClJlZ2Fy ZHMsDQoNCkxlaWYNCg0KDQoNCg0KVGhlc2UgNSBwYXRjaGVzIGFyZSB0byBmaXggdGhlIGlzc3Vl cyBmb3IgdGhlIGJ1aWxkIGNhY2hlIGZlYXR1cmUuDQoNCltQYXRjaCBWNCAyLzJdIEJhc2VUb29s czogUmVmYWN0b3IgaGFzaCB0cmFja2luZyBhZnRlciBjaGVja2luZyBmb3INClNvdXJjZXMgc2Vj dGlvbg0KaHR0cHM6Ly9lZGsyLmdyb3Vwcy5pby9nL2RldmVsL3RvcGljLzMxODM1NTU2IzQxNjQy DQoNCltQYXRjaCBWNCAxLzJdIEJhc2VUb29sczogQWRkIGEgY2hlY2tpbmcgZm9yIFNvdXJjZXMg c2VjdGlvbiBpbiBJTkYNCmZpbGUNCmh0dHBzOi8vZWRrMi5ncm91cHMuaW8vZy9kZXZlbC90b3Bp Yy8zMTgzNTU1NSM0MTY0MQ0KDQpbUEFUQ0ggdjMgMS8xXSBCYXNlVG9vbHM6RXh0ZW5kIHRoZSBi aW5hcnkgY2FjaGUgdG8gc3VwcG9ydCBsaWJyYXJ5DQpjYWNoZQ0KaHR0cHM6Ly9lZGsyLmdyb3Vw cy5pby9nL2RldmVsL3RvcGljLzMxODQzNTA1IzQxNjU1DQoNCltQQVRDSCBWNV0gQmFzZVRvb2xz Ok1ha2UgQmFzZVRvb2xzIHN1cHBvcnQgbmV3IHJ1bGVzIHRvIGdlbmVyYXRlIFJBVw0KRkZTIEZJ TEUNCmh0dHBzOi8vZWRrMi5ncm91cHMuaW8vZy9kZXZlbC90b3BpYy8zMTgzMDgwNyM0MTU3MQ0K DQpbUEFUQ0hdIEJhc2VUb29sczpVcGRhdGUgYmluYXJ5IGNhY2hlIHJlc3RvcmUgdGltZSB0byBj dXJyZW50IHRpbWUNCmh0dHBzOi8vZWRrMi5ncm91cHMuaW8vZy9kZXZlbC90b3BpYy8zMTgxOTU5 MCM0MTQ2OA0KDQoNClRoYW5rcywNCkJvYg0KDQoNCg0KDQoNCg0K --_000_9DB7F8038713D946B98D79CA523B7F95E968B751ORSMSX121amrcor_ Content-Type: text/html; charset="utf-8" Content-Transfer-Encoding: base64 PGh0bWwgeG1sbnM6dj0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTp2bWwiIHhtbG5zOm89InVy bjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOm9mZmljZSIgeG1sbnM6dz0idXJuOnNjaGVt YXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6d29yZCIgeG1sbnM6bT0iaHR0cDovL3NjaGVtYXMubWlj cm9zb2Z0LmNvbS9vZmZpY2UvMjAwNC8xMi9vbW1sIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv VFIvUkVDLWh0bWw0MCI+DQo8aGVhZD4NCjxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIg Y29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04Ij4NCjxtZXRhIG5hbWU9IkdlbmVyYXRv ciIgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgMTUgKGZpbHRlcmVkIG1lZGl1bSkiPg0KPCEtLVtp ZiAhbXNvXT48c3R5bGU+dlw6KiB7YmVoYXZpb3I6dXJsKCNkZWZhdWx0I1ZNTCk7fQ0Kb1w6KiB7 YmVoYXZpb3I6dXJsKCNkZWZhdWx0I1ZNTCk7fQ0Kd1w6KiB7YmVoYXZpb3I6dXJsKCNkZWZhdWx0 I1ZNTCk7fQ0KLnNoYXBlIHtiZWhhdmlvcjp1cmwoI2RlZmF1bHQjVk1MKTt9DQo8L3N0eWxlPjwh W2VuZGlmXS0tPjxzdHlsZT48IS0tDQovKiBGb250IERlZmluaXRpb25zICovDQpAZm9udC1mYWNl DQoJe2ZvbnQtZmFtaWx5OkhlbHZldGljYTsNCglwYW5vc2UtMToyIDExIDYgNCAyIDIgMiAyIDIg NDt9DQpAZm9udC1mYWNlDQoJe2ZvbnQtZmFtaWx5OiJDYW1icmlhIE1hdGgiOw0KCXBhbm9zZS0x OjIgNCA1IDMgNSA0IDYgMyAyIDQ7fQ0KQGZvbnQtZmFjZQ0KCXtmb250LWZhbWlseTpDYWxpYnJp Ow0KCXBhbm9zZS0xOjIgMTUgNSAyIDIgMiA0IDMgMiA0O30NCi8qIFN0eWxlIERlZmluaXRpb25z ICovDQpwLk1zb05vcm1hbCwgbGkuTXNvTm9ybWFsLCBkaXYuTXNvTm9ybWFsDQoJe21hcmdpbjow aW47DQoJbWFyZ2luLWJvdHRvbTouMDAwMXB0Ow0KCWZvbnQtc2l6ZToxMi4wcHQ7DQoJZm9udC1m YW1pbHk6IlRpbWVzIE5ldyBSb21hbiIsc2VyaWY7fQ0KYTpsaW5rLCBzcGFuLk1zb0h5cGVybGlu aw0KCXttc28tc3R5bGUtcHJpb3JpdHk6OTk7DQoJY29sb3I6Ymx1ZTsNCgl0ZXh0LWRlY29yYXRp b246dW5kZXJsaW5lO30NCmE6dmlzaXRlZCwgc3Bhbi5Nc29IeXBlcmxpbmtGb2xsb3dlZA0KCXtt c28tc3R5bGUtcHJpb3JpdHk6OTk7DQoJY29sb3I6cHVycGxlOw0KCXRleHQtZGVjb3JhdGlvbjp1 bmRlcmxpbmU7fQ0KcC5Nc29QbGFpblRleHQsIGxpLk1zb1BsYWluVGV4dCwgZGl2Lk1zb1BsYWlu VGV4dA0KCXttc28tc3R5bGUtcHJpb3JpdHk6OTk7DQoJbXNvLXN0eWxlLWxpbms6IlBsYWluIFRl eHQgQ2hhciI7DQoJbWFyZ2luOjBpbjsNCgltYXJnaW4tYm90dG9tOi4wMDAxcHQ7DQoJZm9udC1z aXplOjExLjBwdDsNCglmb250LWZhbWlseToiQ2FsaWJyaSIsc2Fucy1zZXJpZjt9DQpwDQoJe21z by1zdHlsZS1wcmlvcml0eTo5OTsNCgltc28tbWFyZ2luLXRvcC1hbHQ6YXV0bzsNCgltYXJnaW4t cmlnaHQ6MGluOw0KCW1zby1tYXJnaW4tYm90dG9tLWFsdDphdXRvOw0KCW1hcmdpbi1sZWZ0OjBp bjsNCglmb250LXNpemU6MTIuMHB0Ow0KCWZvbnQtZmFtaWx5OiJUaW1lcyBOZXcgUm9tYW4iLHNl cmlmO30NCnNwYW4uYXBwbGUtY29udmVydGVkLXNwYWNlDQoJe21zby1zdHlsZS1uYW1lOmFwcGxl LWNvbnZlcnRlZC1zcGFjZTt9DQpzcGFuLkVtYWlsU3R5bGUxOQ0KCXttc28tc3R5bGUtdHlwZTpw ZXJzb25hbDsNCglmb250LWZhbWlseToiQ2FsaWJyaSIsc2Fucy1zZXJpZjsNCgljb2xvcjojMUY0 OTdEO30NCnNwYW4uRW1haWxTdHlsZTIwDQoJe21zby1zdHlsZS10eXBlOnBlcnNvbmFsLWNvbXBv c2U7DQoJZm9udC1mYW1pbHk6IkNhbGlicmkiLHNhbnMtc2VyaWY7DQoJY29sb3I6d2luZG93dGV4 dDt9DQpzcGFuLlBsYWluVGV4dENoYXINCgl7bXNvLXN0eWxlLW5hbWU6IlBsYWluIFRleHQgQ2hh ciI7DQoJbXNvLXN0eWxlLXByaW9yaXR5Ojk5Ow0KCW1zby1zdHlsZS1saW5rOiJQbGFpbiBUZXh0 IjsNCglmb250LWZhbWlseToiQ2FsaWJyaSIsc2Fucy1zZXJpZjt9DQouTXNvQ2hwRGVmYXVsdA0K CXttc28tc3R5bGUtdHlwZTpleHBvcnQtb25seTsNCglmb250LXNpemU6MTAuMHB0O30NCkBwYWdl IFdvcmRTZWN0aW9uMQ0KCXtzaXplOjguNWluIDExLjBpbjsNCgltYXJnaW46MS4waW4gMS4waW4g MS4waW4gMS4waW47fQ0KZGl2LldvcmRTZWN0aW9uMQ0KCXtwYWdlOldvcmRTZWN0aW9uMTt9DQot LT48L3N0eWxlPjwhLS1baWYgZ3RlIG1zbyA5XT48eG1sPg0KPG86c2hhcGVkZWZhdWx0cyB2OmV4 dD0iZWRpdCIgc3BpZG1heD0iMTAyNiIgLz4NCjwveG1sPjwhW2VuZGlmXS0tPjwhLS1baWYgZ3Rl IG1zbyA5XT48eG1sPg0KPG86c2hhcGVsYXlvdXQgdjpleHQ9ImVkaXQiPg0KPG86aWRtYXAgdjpl eHQ9ImVkaXQiIGRhdGE9IjEiIC8+DQo8L286c2hhcGVsYXlvdXQ+PC94bWw+PCFbZW5kaWZdLS0+ DQo8L2hlYWQ+DQo8Ym9keSBsYW5nPSJFTi1VUyIgbGluaz0iYmx1ZSIgdmxpbms9InB1cnBsZSI+ DQo8ZGl2IGNsYXNzPSJXb3JkU2VjdGlvbjEiPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PHNwYW4g c3R5bGU9ImZvbnQtc2l6ZToxMS4wcHQ7Zm9udC1mYW1pbHk6JnF1b3Q7Q2FsaWJyaSZxdW90Oyxz YW5zLXNlcmlmO2NvbG9yOiMxRjQ5N0QiPkFuZHJldyw8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQo8 cCBjbGFzcz0iTXNvTm9ybWFsIj48c3BhbiBzdHlsZT0iZm9udC1zaXplOjExLjBwdDtmb250LWZh bWlseTomcXVvdDtDYWxpYnJpJnF1b3Q7LHNhbnMtc2VyaWY7Y29sb3I6IzFGNDk3RCI+PG86cD4m bmJzcDs8L286cD48L3NwYW4+PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+V2hhdCBhYm91dCB0 aGUgZm9yY2UgaW5jbHVkZSBvZiBBdXRvR2VuLmg/Jm5ic3A7PG86cD48L286cD48L3A+DQo8cCBj bGFzcz0iTXNvTm9ybWFsIj48c3BhbiBzdHlsZT0iZm9udC1zaXplOjExLjBwdDtmb250LWZhbWls eTomcXVvdDtDYWxpYnJpJnF1b3Q7LHNhbnMtc2VyaWY7Y29sb3I6IzFGNDk3RCI+PG86cD4mbmJz cDs8L286cD48L3NwYW4+PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PHNwYW4gc3R5bGU9ImZv bnQtc2l6ZToxMS4wcHQ7Zm9udC1mYW1pbHk6JnF1b3Q7Q2FsaWJyaSZxdW90OyxzYW5zLXNlcmlm O2NvbG9yOiMxRjQ5N0QiPkF1dG9HZW4uaCAoYW5kIC5jKSBoYXZlIGNvbnRlbnRzIHdoaWNoIGFy ZSBkZXRlcm1pbmVkIGJ5IHZhcmlvdXMgbWV0YWRhdGEgbGlrZSBQQ0QgdmFsdWVzIG9yIGl0ZW1z IGxpc3RlZCBpbiB0aGUgSU5GLiZuYnNwOyBUaGUgc291cmNlcyBhbmQgZGVwZW5kZW5jaWVzIGNh buKAmXQgYmUgaW52b2x2ZWQsDQogc2luY2UgdGhvc2UgYXJlbuKAmXQga25vd24gdW50aWwgYWZ0 ZXIgdGhlIGF1dG9nZW4gZmlsZXMgYXJlIGFscmVhZHkgY29tcGxldGUuICZuYnNwO1RoZSBidWls ZCBjYWxscyBnZW5jIGJlZm9yZSBnZW5tYWtlLiZuYnNwOyBUaGUgaGFzaDxhIG5hbWU9Il9NYWls RW5kQ29tcG9zZSI+IGFjY291bnRzIGZvciB0aG9zZSBieSBpbmNvcnBvcmF0aW5nIHRoZSBtZXRh ZGF0YSBpdHNlbGYsIHJhdGhlciB0aGFuIHRoZSBhdXRvZ2VuZXJhdGVkIGZpbGVzLjxvOnA+PC9v OnA+PC9hPjwvc3Bhbj48L3A+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj48c3BhbiBzdHlsZT0iZm9u dC1zaXplOjExLjBwdDtmb250LWZhbWlseTomcXVvdDtDYWxpYnJpJnF1b3Q7LHNhbnMtc2VyaWY7 Y29sb3I6IzFGNDk3RCI+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KPHAgY2xhc3M9Ik1z b05vcm1hbCI+SWYgdGhlcmUgaXMgYSBydWxlIHRoZSB0b29scyBzaG91bGQgZW5mb3JjZSB0aGUg cnVsZSB3aXRoIGdvb2QgZXJyb3IgbWVzc2FnZXMuJm5ic3A7PG86cD48L286cD48L3A+DQo8cCBj bGFzcz0iTXNvTm9ybWFsIj48c3BhbiBzdHlsZT0iZm9udC1zaXplOjExLjBwdDtmb250LWZhbWls eTomcXVvdDtDYWxpYnJpJnF1b3Q7LHNhbnMtc2VyaWY7Y29sb3I6IzFGNDk3RCI+PG86cD4mbmJz cDs8L286cD48L3NwYW4+PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PHNwYW4gc3R5bGU9ImZv bnQtc2l6ZToxMS4wcHQ7Zm9udC1mYW1pbHk6JnF1b3Q7Q2FsaWJyaSZxdW90OyxzYW5zLXNlcmlm O2NvbG9yOiMxRjQ5N0QiPkZvciB0aGUgY2FzZSBvZiB0aGUgYnVpbGQgaGFzaCBmZWF0dXJlLCB3 ZSBoYXZlIGFuIEVka0xvZ2dlci53YXJuIGluIHRoZXNlIHBhdGNoZXMuJm5ic3A7IEludmFsaWRh dGluZyB0aGUgaGFzaCBhbGxvd3MgdGhlIGJ1aWxkIHRvIGNvbnRpbnVlIHdpdGggdXAtdG8tZGF0 ZSBtb2R1bGVzDQogYnkgc2VuZGluZyB0aGUgbW9kdWxlIGJhY2sgdG8gdGhlIHJlZ3VsYXIgYnVp bGQgcHJvY2VzcywgYW5kIHRoZSBtZXNzYWdlIGluZm9ybXMgdGhlIHVzZXIgb2Ygd2hhdCB3ZSBm b3VuZC48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQo8cCBjbGFzcz0iTXNvUGxhaW5UZXh0Ij48bzpw PiZuYnNwOzwvbzpwPjwvcD4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiPjxzcGFuIHN0eWxlPSJmb250 LXNpemU6MTEuMHB0O2ZvbnQtZmFtaWx5OiZxdW90O0NhbGlicmkmcXVvdDssc2Fucy1zZXJpZjtj b2xvcjojMUY0OTdEIj5TaW5jZSB0aGUgcG9pbnQgb2YgdGhlIGZlYXR1cmUgaXMgdG8gc3BlZWQg dXAgYnVpbGRzLCBJIHRoaW5rIHRoaXMgaXMgcmlnaHQuJm5ic3A7IElmIHdlIGluc3RlYWQgc3Rv cHBlZCB0aGUgYnVpbGQsIHdoZW4gd2l0aG91dCAtLWhhc2ggaXQgd291bGTigJl2ZSBjb21wbGV0 ZWQgc3VjY2Vzc2Z1bGx5LA0KIHRoZW4gd2XigJl2ZSBtYWRlIGEgbW9yZSByZXN0cmljdGVkIGJ1 aWxkIHRoYXTigJlzIGxlc3MgdXNlZnVsLCByYXRoZXIgdGhhbiBnaXZpbmcgdGhlIGV4aXN0aW5n IGZ1bmN0aW9uYWxpdHkgYSBzcGVlZCBib29zdCB2aWEgY2FjaGluZy4mbmJzcDsgSeKAmW0gbm90 IGFnYWluc3QgYnJvYWRlbmluZyB0aGUgdXNlIG9mIHRoaXMgY2hlY2sgdG8gcmVndWxhciBidWls ZHMsIGJ1dCB0aGF0IGhhcyB1bmFuc3dlcmVkIHF1ZXN0aW9ucyBhbmQgaXRzIG91dHNpZGUgdGhl DQogc2NvcGUgb2YgdGhlIEJacyB0YXJnZXRlZCBieSB0aGVzZSBwYXRjaGVzLiZuYnNwOyBEbyB3 ZSB3YW50IHRvIGNoZWNrIGZvciB0aGlzIGNvbmRpdGlvbiBvbiBldmVyeSBidWlsZCBhbmQgbG9n IHdoZW4gd2Ugc2VlIGl0PyZuYnNwOyBEbyB3ZSB3YW50IGFuIG9wdGlvbmFsIGJ1aWxkIGZsYWcg Zm9yIGl0PyZuYnNwOyBTaG91bGQgYW5vdGhlciBmbGFnIGNhdXNlIGEgaGFsdCBhbmQgZ2l2ZSBh biBlcnJvciwgbWF5YmUgc29tZXRoaW5nIGxpa2Ug4oCcLS1zdHJpY3TigJ0gd2hpY2gNCiBjb3Vs ZCBjaGVjayBmb3Igb3RoZXIgc3BlYyB2aW9sYXRpbmcgY29uZGl0aW9ucyBhcyB3ZWxsPyZuYnNw OyBJdCB0dXJucyBpbnRvIGEgd2hvbGUgZmVhdHVyZSBvZiBpdHMgb3duLCB3aXRoIGNvbnNpZGVy YWJseSBoaWdoZXIgaW1wYWN0IHNpbmNlICo8Yj5tYW55PC9iPiogY29kZWJhc2VzIGluIHRoZSB3 aWxkIGhhdmUgbm9uLWNvbXBsaWFudCBtb2R1bGVzIHNwcmlua2xlZCB0aHJvdWdob3V0LjxvOnA+ PC9vOnA+PC9zcGFuPjwvcD4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiPjxzcGFuIHN0eWxlPSJmb250 LXNpemU6MTEuMHB0O2ZvbnQtZmFtaWx5OiZxdW90O0NhbGlicmkmcXVvdDssc2Fucy1zZXJpZjtj b2xvcjojMUY0OTdEIj48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQo8cCBjbGFzcz0iTXNv Tm9ybWFsIj5JIHRoaW5rIExlaWYgYW5kIEkgYXJlIGJvdGggY29uY2VybmVkIGFib3V0IGhhdmlu ZyB0d28gd2F5cyB0byBkbyBzb21ldGhpbmcgYXMgY29tcGxleCBhcyBtYWtlIGRlcGVuZGVuY2ll cywgYXMgdGhleSByaXNrIGdldHRpbmcgb3V0IG9mIHBoYXNlLCBvciBicmVha2luZyBkaWZmZXJl bnQgd2F5cyAobGlrZSBmb2xsb3dpbmcgdGhlIC5oIHJ1bGVzIGluIHRoZSBJTkYgRmlsZSkuPG86 cD48L286cD48L3A+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj48c3BhbiBzdHlsZT0iZm9udC1zaXpl OjExLjBwdDtmb250LWZhbWlseTomcXVvdDtDYWxpYnJpJnF1b3Q7LHNhbnMtc2VyaWY7Y29sb3I6 IzFGNDk3RCI+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1h bCI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMS4wcHQ7Zm9udC1mYW1pbHk6JnF1b3Q7Q2FsaWJy aSZxdW90OyxzYW5zLXNlcmlmO2NvbG9yOiMxRjQ5N0QiPkkgdW5kZXJzdGFuZCB0aGUgY29uY2Vy bi4mbmJzcDsgT25lIHBvc2l0aXZlIHRoaW5nIGFib3V0IHRoZSBvdmVybHkgYnJvYWQgbmF0dXJl IG9mIGhhc2hpbmcgYWxsIHBvc3NpYmxlIGxlZ2FsIGluY2x1ZGVzIGFuZCBhbGwgY29tcGlsZXIg ZmxhZ3MgYW5kIGFsbCBldGMgZXRjIGlzIHRoYXQNCiB3ZSBkb27igJl0IG5lZWQgdG8gY2Fycnkg bXVjaCB1bmRlcnN0YW5kaW5nIG9yIGNvbXBsZXhpdHkuJm5ic3A7IFdlIGp1c3QgaGFzaCDigJhh bGwgdGhlIGlucHV0c+KAmSBhbmQgZG9u4oCZdCBib3RoZXIgbG9va2luZyBhbnkgZGVlcGVyLiZu YnNwOyBGdXJ0aGVyLCB3aGVuIHRoZSBoYXNoIG9mIGEgbW9kdWxlIGNoYW5nZXMsIGl0IGRyb3Bz IGJhY2sgdG8gdGhlIHJlZ3VsYXIgcGF0aCBhbmQgdGhlIG9yZGluYXJ5IGJ1aWxkL3NraXAgZGVj aXNpb24gaXMgbWFkZSBleGFjdGx5DQogYXMgaXQgd291bGQgYmUgaW4gYSByZWd1bGFyIGJ1aWxk LiZuYnNwOyBJIHRoaW5rIHRoaXMgaXMgc2ltcGxlIGVub3VnaCB0byBub3QgYmUgKHRvbykgdHJv dWJsaW5nLjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiPjxzcGFu IHN0eWxlPSJmb250LXNpemU6MTEuMHB0O2ZvbnQtZmFtaWx5OiZxdW90O0NhbGlicmkmcXVvdDss c2Fucy1zZXJpZjtjb2xvcjojMUY0OTdEIj48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQo8 cCBjbGFzcz0iTXNvTm9ybWFsIj48c3BhbiBzdHlsZT0iZm9udC1zaXplOjExLjBwdDtmb250LWZh bWlseTomcXVvdDtDYWxpYnJpJnF1b3Q7LHNhbnMtc2VyaWY7Y29sb3I6IzFGNDk3RCI+PC9zcGFu PkF0IHNvbWUgcG9pbnQgcmVmYWN0b3JpbmcgdGhlIGJ1aWxkIHN5c3RlbSBmcm9tIHRoZSB0b3Ag bWlnaHQgYmUgdGhlIHJpZ2h0IGFwcHJvYWNoLiZuYnNwOzxvOnA+PC9vOnA+PC9wPg0KPHAgY2xh c3M9Ik1zb05vcm1hbCI+PG86cD4mbmJzcDs8L286cD48L3A+DQo8cCBjbGFzcz0iTXNvTm9ybWFs Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOjExLjBwdDtmb250LWZhbWlseTomcXVvdDtDYWxpYnJp JnF1b3Q7LHNhbnMtc2VyaWY7Y29sb3I6IzFGNDk3RCI+QWdyZWVkLiZuYnNwOyBUaGUgYnVpbGQg dG9vbHMgYXJlIGNyaXRpY2FsIGFuZCBjb3VsZCB1c2UgbW9yZSBhdHRlbnRpb24uJm5ic3A7IE1h eWJlIHNvbWVkYXnigKY8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQo8cCBjbGFzcz0iTXNvTm9ybWFs Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOjExLjBwdDtmb250LWZhbWlseTomcXVvdDtDYWxpYnJp JnF1b3Q7LHNhbnMtc2VyaWY7Y29sb3I6IzFGNDk3RCI+PG86cD4mbmJzcDs8L286cD48L3NwYW4+ PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMS4wcHQ7 Zm9udC1mYW1pbHk6JnF1b3Q7Q2FsaWJyaSZxdW90OyxzYW5zLXNlcmlmO2NvbG9yOiMxRjQ5N0Qi Pi1NaWNoYWVsPG86cD48L286cD48L3NwYW4+PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PHNw YW4gc3R5bGU9ImZvbnQtc2l6ZToxMS4wcHQ7Zm9udC1mYW1pbHk6JnF1b3Q7Q2FsaWJyaSZxdW90 OyxzYW5zLXNlcmlmO2NvbG9yOiMxRjQ5N0QiPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4N CjxkaXY+DQo8ZGl2IHN0eWxlPSJib3JkZXI6bm9uZTtib3JkZXItdG9wOnNvbGlkICNFMUUxRTEg MS4wcHQ7cGFkZGluZzozLjBwdCAwaW4gMGluIDBpbiI+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj48 Yj48c3BhbiBzdHlsZT0iZm9udC1zaXplOjExLjBwdDtmb250LWZhbWlseTomcXVvdDtDYWxpYnJp JnF1b3Q7LHNhbnMtc2VyaWYiPkZyb206PC9zcGFuPjwvYj48c3BhbiBzdHlsZT0iZm9udC1zaXpl OjExLjBwdDtmb250LWZhbWlseTomcXVvdDtDYWxpYnJpJnF1b3Q7LHNhbnMtc2VyaWYiPiBkZXZl bEBlZGsyLmdyb3Vwcy5pbyBbbWFpbHRvOmRldmVsQGVkazIuZ3JvdXBzLmlvXQ0KPGI+T24gQmVo YWxmIE9mIDwvYj5BbmRyZXcgRmlzaCB2aWEgR3JvdXBzLklvPGJyPg0KPGI+U2VudDo8L2I+IFRo dXJzZGF5LCBNYXkgMzAsIDIwMTkgMzo1MyBQTTxicj4NCjxiPlRvOjwvYj4gZGV2ZWxAZWRrMi5n cm91cHMuaW87IEpvaG5zb24sIE1pY2hhZWwgJmx0O21pY2hhZWwuam9obnNvbkBpbnRlbC5jb20m Z3Q7PGJyPg0KPGI+Q2M6PC9iPiBMZWlmIExpbmRob2xtICZsdDtsZWlmLmxpbmRob2xtQGxpbmFy by5vcmcmZ3Q7OyBGZW5nLCBCb2IgQyAmbHQ7Ym9iLmMuZmVuZ0BpbnRlbC5jb20mZ3Q7OyBSb2Ry aWd1ZXosIENocmlzdGlhbiAmbHQ7Y2hyaXN0aWFuLnJvZHJpZ3VlekBpbnRlbC5jb20mZ3Q7OyBM YXN6bG8gRXJzZWsgJmx0O2xlcnNla0ByZWRoYXQuY29tJmd0OzsgS2lubmV5LCBNaWNoYWVsIEQg Jmx0O21pY2hhZWwuZC5raW5uZXlAaW50ZWwuY29tJmd0OzsgR2FvLCBMaW1pbmcgJmx0O2xpbWlu Zy5nYW9AaW50ZWwuY29tJmd0OzsNCiBTaGksIFN0ZXZlbiAmbHQ7c3RldmVuLnNoaUBpbnRlbC5j b20mZ3Q7OyBGYW4sIFpoaWp1WCAmbHQ7emhpanV4LmZhbkBpbnRlbC5jb20mZ3Q7PGJyPg0KPGI+ U3ViamVjdDo8L2I+IFJlOiBbZWRrMi1kZXZlbF0gRWRrMiBCYXNlVG9vbHMgUGF0Y2hlcy48bzpw PjwvbzpwPjwvc3Bhbj48L3A+DQo8L2Rpdj4NCjwvZGl2Pg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+ PG86cD4mbmJzcDs8L286cD48L3A+DQo8ZGl2Pg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PG86cD4m bmJzcDs8L286cD48L3A+DQo8L2Rpdj4NCjxkaXY+DQo8ZGl2Pg0KPGRpdj4NCjxibG9ja3F1b3Rl IHN0eWxlPSJtYXJnaW4tdG9wOjUuMHB0O21hcmdpbi1ib3R0b206NS4wcHQiPg0KPGRpdj4NCjxw IGNsYXNzPSJNc29Ob3JtYWwiPk9uIE1heSAzMCwgMjAxOSwgYXQgMjozMSBQTSwgSm9obnNvbiwg TWljaGFlbCAmbHQ7PGEgaHJlZj0ibWFpbHRvOm1pY2hhZWwuam9obnNvbkBpbnRlbC5jb20iPm1p Y2hhZWwuam9obnNvbkBpbnRlbC5jb208L2E+Jmd0OyB3cm90ZTo8bzpwPjwvbzpwPjwvcD4NCjwv ZGl2Pg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PG86cD4mbmJzcDs8L286cD48L3A+DQo8ZGl2Pg0K PGRpdj4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTEuMHB0 O2ZvbnQtZmFtaWx5OiZxdW90O0NhbGlicmkmcXVvdDssc2Fucy1zZXJpZjtjb2xvcjojMUY0OTdE Ij5BbGwsPC9zcGFuPjxvOnA+PC9vOnA+PC9wPg0KPC9kaXY+DQo8ZGl2Pg0KPHAgY2xhc3M9Ik1z b05vcm1hbCI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMS4wcHQ7Zm9udC1mYW1pbHk6JnF1b3Q7 Q2FsaWJyaSZxdW90OyxzYW5zLXNlcmlmO2NvbG9yOiMxRjQ5N0QiPiZuYnNwOzwvc3Bhbj48bzpw PjwvbzpwPjwvcD4NCjwvZGl2Pg0KPGRpdj4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiPjxzcGFuIHN0 eWxlPSJmb250LXNpemU6MTEuMHB0O2ZvbnQtZmFtaWx5OiZxdW90O0NhbGlicmkmcXVvdDssc2Fu cy1zZXJpZjtjb2xvcjojMUY0OTdEIj5UaGVzZSBwYXRjaGVzIGFyZSBub3QgcmVxdWlyZWQgZm9y IHRoZSBzdGFibGUgdGFnLiZuYnNwOyBUaGV54oCZcmUgaW1wcm92ZW1lbnRzIG5lZWRlZCB0byBl bmFibGUgcmVsYXRpdmVseSBuZXcgYnVpbGQgb3B0aW9ucyB0aGF0IGFyZSBub3QgeWV0IHdpZGVs eSB1c2VkLjwvc3Bhbj48bzpwPjwvbzpwPjwvcD4NCjwvZGl2Pg0KPGRpdj4NCjxwIGNsYXNzPSJN c29Ob3JtYWwiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTEuMHB0O2ZvbnQtZmFtaWx5OiZxdW90 O0NhbGlicmkmcXVvdDssc2Fucy1zZXJpZjtjb2xvcjojMUY0OTdEIj4mbmJzcDs8L3NwYW4+PG86 cD48L286cD48L3A+DQo8L2Rpdj4NCjxkaXY+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj48c3BhbiBz dHlsZT0iZm9udC1zaXplOjExLjBwdDtmb250LWZhbWlseTomcXVvdDtDYWxpYnJpJnF1b3Q7LHNh bnMtc2VyaWY7Y29sb3I6IzFGNDk3RCI+VGhhdCBzYWlkLCBsZXQgbWUgdHJ5IHRvIGNsZWFyIHRo ZSBhaXIgaGVyZSBhYm91dCB3aGF0IGlzIGhhcHBlbmluZyByZWdhcmRpbmcgdGhlIHNvdXJjZXMv aW5jbHVkZXMgYW5kIHdoYXQgY2hhbmdlcyB3aXRoIHRoZXNlIHBhdGNoZXMuPC9zcGFuPjxvOnA+ PC9vOnA+PC9wPg0KPC9kaXY+DQo8ZGl2Pg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PHNwYW4gc3R5 bGU9ImZvbnQtc2l6ZToxMS4wcHQ7Zm9udC1mYW1pbHk6JnF1b3Q7Q2FsaWJyaSZxdW90OyxzYW5z LXNlcmlmO2NvbG9yOiMxRjQ5N0QiPiZuYnNwOzwvc3Bhbj48bzpwPjwvbzpwPjwvcD4NCjwvZGl2 Pg0KPGRpdj4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTEu MHB0O2ZvbnQtZmFtaWx5OiZxdW90O0NhbGlicmkmcXVvdDssc2Fucy1zZXJpZjtjb2xvcjojMUY0 OTdEIj5UaGUgSU5GIHNwZWMgKDxhIGhyZWY9Imh0dHBzOi8vZWRrMi1kb2NzLmdpdGJvb2tzLmlv L2Vkay1paS1pbmYtc3BlY2lmaWNhdGlvbi9jb250ZW50L3YvcmVsZWFzZS8xLjI3LzNfZWRrX2lp X2luZl9maWxlX2Zvcm1hdC8zOV8lNWJzb3VyY2VzJTVkX3NlY3Rpb25zLmh0bWwiPjxzcGFuIHN0 eWxlPSJjb2xvcjpwdXJwbGUiPnNlY3Rpb24NCiAzLjk8L3NwYW4+PC9hPikgc2F5cyB0aGF0IGFs bCBsb2NhbCBzb3VyY2UgZmlsZXMsIGluY2x1ZGluZyAuaCBmaWxlcywgbXVzdCBiZSBpbmNsdWRl ZCBpbiB0aGUgc291cmNlcyBzZWN0aW9uLiZuYnNwOyBUaGlzIG1lYW5zIGEgbW9kdWxlIGlzIG5v dCBjb21wbGlhbnQgaWYgaXQgaW5jbHVkZXMgYSBoZWFkZXIgZmlsZSBmcm9tIGEgZGlyZWN0b3J5 IG90aGVyIHRoYW4gYSBwYWNrYWdlIGluY2x1ZGUgZGlyZWN0b3J5IGFuZCBmYWlscyB0byBsaXN0 IGl0IGluDQogaXRzIHNvdXJjZXMgc2VjdGlvbi4mbmJzcDsgV2XigJlyZSBhbHJlYWR5IGdlbmVy YXRpbmcgYSBoYXNoIHdoaWNoIGlzIGd1YXJhbnRlZWQgdG8gY2hhbmdlIHdoZW5ldmVyIHRoZSBt b2R1bGXigJlzIHNvdXJjZSBjaGFuZ2VzIC0gd2l0aG91dCBpbnZva2luZyBta2RlcCAtIGJ5IGhh c2hpbmcgZWFjaCBmaWxlIGZyb20gdGhlIHNvdXJjZXMgc2VjdGlvbiBhcyB3ZWxsIGFzICo8Yj5h bGw8L2I+KiB0aGUgY29udGVudHMgb2YgZXZlcnkgaW5jbHVkZSBmb2xkZXIgYmVsb25naW5nDQog dG8gZWFjaCBwYWNrYWdlIHRoYXQgdGhlIG1vZHVsZSBpcyBkZXBlbmRlbnQgb24uPC9zcGFuPjxv OnA+PC9vOnA+PC9wPg0KPC9kaXY+DQo8ZGl2Pg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PHNwYW4g c3R5bGU9ImZvbnQtc2l6ZToxMS4wcHQ7Zm9udC1mYW1pbHk6JnF1b3Q7Q2FsaWJyaSZxdW90Oyxz YW5zLXNlcmlmO2NvbG9yOiMxRjQ5N0QiPiZuYnNwOzwvc3Bhbj48bzpwPjwvbzpwPjwvcD4NCjwv ZGl2Pg0KPC9kaXY+DQo8L2Jsb2NrcXVvdGU+DQo8YmxvY2txdW90ZSBzdHlsZT0ibWFyZ2luLXRv cDo1LjBwdDttYXJnaW4tYm90dG9tOjUuMHB0Ij4NCjxkaXY+DQo8ZGl2Pg0KPHAgY2xhc3M9Ik1z b05vcm1hbCI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMS4wcHQ7Zm9udC1mYW1pbHk6JnF1b3Q7 Q2FsaWJyaSZxdW90OyxzYW5zLXNlcmlmO2NvbG9yOiMxRjQ5N0QiPkV2ZXJ5IHBvc3NpYmxlIOKA mGxlZ2FsbHnigJkgaW5jbHVkZWQgaGVhZGVyIHdpbGwgY2hhbmdlIHRoZSBoYXNoLA0KPC9zcGFu PjxvOnA+PC9vOnA+PC9wPg0KPC9kaXY+DQo8L2Rpdj4NCjwvYmxvY2txdW90ZT4NCjxkaXY+DQo8 cCBjbGFzcz0iTXNvTm9ybWFsIj48bzpwPiZuYnNwOzwvbzpwPjwvcD4NCjwvZGl2Pg0KPGRpdj4N CjxwIGNsYXNzPSJNc29Ob3JtYWwiPk1pY2hhZWwsPG86cD48L286cD48L3A+DQo8L2Rpdj4NCjxk aXY+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj48bzpwPiZuYnNwOzwvbzpwPjwvcD4NCjwvZGl2Pg0K PGRpdj4NCjxkaXY+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj5XaGF0IGFib3V0IHRoZSBmb3JjZSBp bmNsdWRlIG9mIEF1dG9HZW4uaD8mbmJzcDs8bzpwPjwvbzpwPjwvcD4NCjwvZGl2Pg0KPC9kaXY+ DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj48YnI+DQo8YnI+DQo8bzpwPjwvbzpwPjwvcD4NCjxibG9j a3F1b3RlIHN0eWxlPSJtYXJnaW4tdG9wOjUuMHB0O21hcmdpbi1ib3R0b206NS4wcHQiPg0KPGRp dj4NCjxkaXY+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj48c3BhbiBzdHlsZT0iZm9udC1zaXplOjEx LjBwdDtmb250LWZhbWlseTomcXVvdDtDYWxpYnJpJnF1b3Q7LHNhbnMtc2VyaWY7Y29sb3I6IzFG NDk3RCI+YnV0IHRoZSBoYXNoZXMgb2Ygbm9uLWNvbXBsaWFudCBtb2R1bGVzIHdpbGwgbm90IGNo YW5nZSB3aGVuIHRoZWlyIOKAmGlsbGVnYWxseeKAmSBpbmNsdWRlZCBoZWFkZXJzIGNoYW5nZSBh bmQgd2Ugd2lsbCBpbmNvcnJlY3RseSByZS11c2Ugc3RhbGUgY2FjaGVkIGJpbmFyaWVzLiZuYnNw Ow0KIFRvIHByZXZlbnQgdGhpcywgdGhlIGJlbG93IHBhdGNoZXMgY2hlY2sgZm9yIGNvbXBsaWFu Y2UgYW5kIGludmFsaWRhdGUgdGhlIGhhc2ggb2YgYW55IG5vbi1jb21wbGlhbnQgbW9kdWxlLiZu YnNwOyBJbiB0aGlzIHdheSwgbm9uLWNvbXBsaWFuY2UgaXMgbmVpdGhlciBzdXBwb3J0ZWQgbm9y IGFsbG93ZWQgdG8gcG9pc29uIHRoZSBjYWNoZS48L3NwYW4+PG86cD48L286cD48L3A+DQo8L2Rp dj4NCjxkaXY+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj48c3BhbiBzdHlsZT0iZm9udC1zaXplOjEx LjBwdDtmb250LWZhbWlseTomcXVvdDtDYWxpYnJpJnF1b3Q7LHNhbnMtc2VyaWY7Y29sb3I6IzFG NDk3RCI+Jm5ic3A7PC9zcGFuPjxvOnA+PC9vOnA+PC9wPg0KPC9kaXY+DQo8L2Rpdj4NCjwvYmxv Y2txdW90ZT4NCjxkaXY+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj48bzpwPiZuYnNwOzwvbzpwPjwv cD4NCjwvZGl2Pg0KPGRpdj4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiPklmIHRoZXJlIGlzIGEgcnVs ZSB0aGUgdG9vbHMgc2hvdWxkIGVuZm9yY2UgdGhlIHJ1bGUgd2l0aCBnb29kIGVycm9yIG1lc3Nh Z2VzLiZuYnNwOzxvOnA+PC9vOnA+PC9wPg0KPC9kaXY+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj48 YnI+DQo8YnI+DQo8bzpwPjwvbzpwPjwvcD4NCjxibG9ja3F1b3RlIHN0eWxlPSJtYXJnaW4tdG9w OjUuMHB0O21hcmdpbi1ib3R0b206NS4wcHQiPg0KPGRpdj4NCjxkaXY+DQo8cCBjbGFzcz0iTXNv Tm9ybWFsIj48c3BhbiBzdHlsZT0iZm9udC1zaXplOjExLjBwdDtmb250LWZhbWlseTomcXVvdDtD YWxpYnJpJnF1b3Q7LHNhbnMtc2VyaWY7Y29sb3I6IzFGNDk3RCI+QWdhaW4sIHNpbmNlIHRoaXMg b25seSBoYXMgYW4gZWZmZWN0IG9uIGJ1aWxkcyB3aGljaCBoYXZlIGVuYWJsZWQgdGhpcyByZWxh dGl2ZWx5IG5ldyBmZWF0dXJlLCBJIGRvbuKAmXQgZXhwZWN0IGFueSBwcm9kdWN0aW9uIGltcGFj dCBpZiB0aGUgc3RhYmxlIHRhZyBkb2VzbuKAmXQNCiB0YWtlIHRoZXNlIHBhdGNoZXMuJm5ic3A7 IE5vYm9keSBpcyB1c2luZyBpdCB5ZXQuPC9zcGFuPjxvOnA+PC9vOnA+PC9wPg0KPC9kaXY+DQo8 ZGl2Pg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMS4wcHQ7 Zm9udC1mYW1pbHk6JnF1b3Q7Q2FsaWJyaSZxdW90OyxzYW5zLXNlcmlmO2NvbG9yOiMxRjQ5N0Qi PiZuYnNwOzwvc3Bhbj48bzpwPjwvbzpwPjwvcD4NCjwvZGl2Pg0KPC9kaXY+DQo8L2Jsb2NrcXVv dGU+DQo8ZGl2Pg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PG86cD4mbmJzcDs8L286cD48L3A+DQo8 L2Rpdj4NCjxkaXY+DQo8ZGl2Pg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+SSB0aGluayBMZWlmIGFu ZCBJIGFyZSBib3RoIGNvbmNlcm5lZCBhYm91dCBoYXZpbmcgdHdvIHdheXMgdG8gZG8gc29tZXRo aW5nIGFzIGNvbXBsZXggYXMgbWFrZSBkZXBlbmRlbmNpZXMsIGFzIHRoZXkgcmlzayBnZXR0aW5n IG91dCBvZiBwaGFzZSwgb3IgYnJlYWtpbmcgZGlmZmVyZW50IHdheXMgKGxpa2UgZm9sbG93aW5n IHRoZSAuaCBydWxlcyBpbiB0aGUgSU5GIEZpbGUpLjxvOnA+PC9vOnA+PC9wPg0KPC9kaXY+DQo8 ZGl2Pg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PG86cD4mbmJzcDs8L286cD48L3A+DQo8L2Rpdj4N CjxkaXY+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj5BbHNvIEkgdW5kZXJzdGFuZCBzb21lIHRpbWVz IHdlIGhpdCBjaXJjdWxhciBkZXBlbmRlbmNpZXMgYW5kIHRoYXQgZm9yY2VzIGR1cGxpY2F0aW9u LiBJdCB3b3VsZCBiZSBnb29kIGluIGdlbmVyYWwgdG8gdHJ5IGFuZCBtYWtlIGEgbGlzdCBvZiB0 aGVzZSBraW5kIG9mIGNpcmN1bGFyIGRlcGVuZGVuY2llcywgZ2l2ZW4gdGhleSBtYXkgYmVlbiBj YXVzZWQgYnkgYSBmYXVsdHkgaGlnaCBsZXZlbCBkZXNpZ24gZGVjaXNpb24NCiBtYWRlIGxvbmcg YWdvLiBBdCBzb21lIHBvaW50IHJlZmFjdG9yaW5nIHRoZSBidWlsZCBzeXN0ZW0gZnJvbSB0aGUg dG9wIG1pZ2h0IGJlIHRoZSByaWdodCBhcHByb2FjaC4mbmJzcDs8bzpwPjwvbzpwPjwvcD4NCjxk aXY+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj48bzpwPiZuYnNwOzwvbzpwPjwvcD4NCjwvZGl2Pg0K PGRpdj4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiPlRoYW5rcyw8bzpwPjwvbzpwPjwvcD4NCjwvZGl2 Pg0KPGRpdj4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiPjxvOnA+Jm5ic3A7PC9vOnA+PC9wPg0KPC9k aXY+DQo8ZGl2Pg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+QW5kcmV3IEZpc2g8bzpwPjwvbzpwPjwv cD4NCjwvZGl2Pg0KPC9kaXY+DQo8ZGl2Pg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PG86cD4mbmJz cDs8L286cD48L3A+DQo8L2Rpdj4NCjwvZGl2Pg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PGJyPg0K PGJyPg0KPG86cD48L286cD48L3A+DQo8YmxvY2txdW90ZSBzdHlsZT0ibWFyZ2luLXRvcDo1LjBw dDttYXJnaW4tYm90dG9tOjUuMHB0Ij4NCjxkaXY+DQo8ZGl2Pg0KPHAgY2xhc3M9Ik1zb05vcm1h bCI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMS4wcHQ7Zm9udC1mYW1pbHk6JnF1b3Q7Q2FsaWJy aSZxdW90OyxzYW5zLXNlcmlmO2NvbG9yOiMxRjQ5N0QiPi1NaWNoYWVsPC9zcGFuPjxvOnA+PC9v OnA+PC9wPg0KPC9kaXY+DQo8ZGl2Pg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PHNwYW4gc3R5bGU9 ImZvbnQtc2l6ZToxMS4wcHQ7Zm9udC1mYW1pbHk6JnF1b3Q7Q2FsaWJyaSZxdW90OyxzYW5zLXNl cmlmO2NvbG9yOiMxRjQ5N0QiPiZuYnNwOzwvc3Bhbj48bzpwPjwvbzpwPjwvcD4NCjwvZGl2Pg0K PGRpdj4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTEuMHB0 O2ZvbnQtZmFtaWx5OiZxdW90O0NhbGlicmkmcXVvdDssc2Fucy1zZXJpZjtjb2xvcjojMUY0OTdE Ij4mbmJzcDs8L3NwYW4+PG86cD48L286cD48L3A+DQo8L2Rpdj4NCjxkaXY+DQo8ZGl2IHN0eWxl PSJib3JkZXI6bm9uZTtib3JkZXItdG9wOnNvbGlkICNFMUUxRTEgMS4wcHQ7cGFkZGluZzozLjBw dCAwaW4gMGluIDBpbiI+DQo8ZGl2Pg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PGI+PHNwYW4gc3R5 bGU9ImZvbnQtc2l6ZToxMS4wcHQ7Zm9udC1mYW1pbHk6JnF1b3Q7Q2FsaWJyaSZxdW90OyxzYW5z LXNlcmlmIj5Gcm9tOjwvc3Bhbj48L2I+PHNwYW4gY2xhc3M9ImFwcGxlLWNvbnZlcnRlZC1zcGFj ZSI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMS4wcHQ7Zm9udC1mYW1pbHk6JnF1b3Q7Q2FsaWJy aSZxdW90OyxzYW5zLXNlcmlmIj4mbmJzcDs8L3NwYW4+PC9zcGFuPjxzcGFuIHN0eWxlPSJmb250 LXNpemU6MTEuMHB0O2ZvbnQtZmFtaWx5OiZxdW90O0NhbGlicmkmcXVvdDssc2Fucy1zZXJpZiI+ PGEgaHJlZj0ibWFpbHRvOmRldmVsQGVkazIuZ3JvdXBzLmlvIj48c3BhbiBzdHlsZT0iY29sb3I6 cHVycGxlIj5kZXZlbEBlZGsyLmdyb3Vwcy5pbzwvc3Bhbj48L2E+PHNwYW4gY2xhc3M9ImFwcGxl LWNvbnZlcnRlZC1zcGFjZSI+Jm5ic3A7PC9zcGFuPls8YSBocmVmPSJtYWlsdG86ZGV2ZWxAZWRr Mi5ncm91cHMuaW8iPjxzcGFuIHN0eWxlPSJjb2xvcjpwdXJwbGUiPm1haWx0bzpkZXZlbEBlZGsy Lmdyb3Vwcy5pbzwvc3Bhbj48L2E+XTxzcGFuIGNsYXNzPSJhcHBsZS1jb252ZXJ0ZWQtc3BhY2Ui PiZuYnNwOzwvc3Bhbj48Yj5Pbg0KIEJlaGFsZiBPZjxzcGFuIGNsYXNzPSJhcHBsZS1jb252ZXJ0 ZWQtc3BhY2UiPiZuYnNwOzwvc3Bhbj48L2I+QW5kcmV3IEZpc2ggdmlhIEdyb3Vwcy5Jbzxicj4N CjxiPlNlbnQ6PC9iPjxzcGFuIGNsYXNzPSJhcHBsZS1jb252ZXJ0ZWQtc3BhY2UiPiZuYnNwOzwv c3Bhbj5UaHVyc2RheSwgTWF5IDMwLCAyMDE5IDExOjEwIEFNPGJyPg0KPGI+VG86PC9iPjxzcGFu IGNsYXNzPSJhcHBsZS1jb252ZXJ0ZWQtc3BhY2UiPiZuYnNwOzwvc3Bhbj48YSBocmVmPSJtYWls dG86ZGV2ZWxAZWRrMi5ncm91cHMuaW8iPjxzcGFuIHN0eWxlPSJjb2xvcjpwdXJwbGUiPmRldmVs QGVkazIuZ3JvdXBzLmlvPC9zcGFuPjwvYT47IExlaWYgTGluZGhvbG0gJmx0OzxhIGhyZWY9Im1h aWx0bzpsZWlmLmxpbmRob2xtQGxpbmFyby5vcmciPjxzcGFuIHN0eWxlPSJjb2xvcjpwdXJwbGUi PmxlaWYubGluZGhvbG1AbGluYXJvLm9yZzwvc3Bhbj48L2E+Jmd0Ozxicj4NCjxiPkNjOjwvYj48 c3BhbiBjbGFzcz0iYXBwbGUtY29udmVydGVkLXNwYWNlIj4mbmJzcDs8L3NwYW4+RmVuZywgQm9i IEMgJmx0OzxhIGhyZWY9Im1haWx0bzpib2IuYy5mZW5nQGludGVsLmNvbSI+PHNwYW4gc3R5bGU9 ImNvbG9yOnB1cnBsZSI+Ym9iLmMuZmVuZ0BpbnRlbC5jb208L3NwYW4+PC9hPiZndDs7IFJvZHJp Z3VleiwgQ2hyaXN0aWFuICZsdDs8YSBocmVmPSJtYWlsdG86Y2hyaXN0aWFuLnJvZHJpZ3VlekBp bnRlbC5jb20iPjxzcGFuIHN0eWxlPSJjb2xvcjpwdXJwbGUiPmNocmlzdGlhbi5yb2RyaWd1ZXpA aW50ZWwuY29tPC9zcGFuPjwvYT4mZ3Q7Ow0KIExhc3psbyBFcnNlayAmbHQ7PGEgaHJlZj0ibWFp bHRvOmxlcnNla0ByZWRoYXQuY29tIj48c3BhbiBzdHlsZT0iY29sb3I6cHVycGxlIj5sZXJzZWtA cmVkaGF0LmNvbTwvc3Bhbj48L2E+Jmd0OzsgS2lubmV5LCBNaWNoYWVsIEQgJmx0OzxhIGhyZWY9 Im1haWx0bzptaWNoYWVsLmQua2lubmV5QGludGVsLmNvbSI+PHNwYW4gc3R5bGU9ImNvbG9yOnB1 cnBsZSI+bWljaGFlbC5kLmtpbm5leUBpbnRlbC5jb208L3NwYW4+PC9hPiZndDs7IEdhbywgTGlt aW5nICZsdDs8YSBocmVmPSJtYWlsdG86bGltaW5nLmdhb0BpbnRlbC5jb20iPjxzcGFuIHN0eWxl PSJjb2xvcjpwdXJwbGUiPmxpbWluZy5nYW9AaW50ZWwuY29tPC9zcGFuPjwvYT4mZ3Q7Ow0KIFNo aSwgU3RldmVuICZsdDs8YSBocmVmPSJtYWlsdG86c3RldmVuLnNoaUBpbnRlbC5jb20iPjxzcGFu IHN0eWxlPSJjb2xvcjpwdXJwbGUiPnN0ZXZlbi5zaGlAaW50ZWwuY29tPC9zcGFuPjwvYT4mZ3Q7 OyBGYW4sIFpoaWp1WCAmbHQ7PGEgaHJlZj0ibWFpbHRvOnpoaWp1eC5mYW5AaW50ZWwuY29tIj48 c3BhbiBzdHlsZT0iY29sb3I6cHVycGxlIj56aGlqdXguZmFuQGludGVsLmNvbTwvc3Bhbj48L2E+ Jmd0Ozxicj4NCjxiPlN1YmplY3Q6PC9iPjxzcGFuIGNsYXNzPSJhcHBsZS1jb252ZXJ0ZWQtc3Bh Y2UiPiZuYnNwOzwvc3Bhbj5SZTogW2VkazItZGV2ZWxdIEVkazIgQmFzZVRvb2xzIFBhdGNoZXMu PC9zcGFuPjxvOnA+PC9vOnA+PC9wPg0KPC9kaXY+DQo8L2Rpdj4NCjwvZGl2Pg0KPGRpdj4NCjxw IGNsYXNzPSJNc29Ob3JtYWwiPiZuYnNwOzxvOnA+PC9vOnA+PC9wPg0KPC9kaXY+DQo8ZGl2Pg0K PHAgY2xhc3M9Ik1zb05vcm1hbCI+Jm5ic3A7PG86cD48L286cD48L3A+DQo8L2Rpdj4NCjxkaXY+ DQo8ZGl2Pg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PGJyPg0KPGJyPg0KPGJyPg0KPG86cD48L286 cD48L3A+DQo8L2Rpdj4NCjxibG9ja3F1b3RlIHN0eWxlPSJtYXJnaW4tdG9wOjUuMHB0O21hcmdp bi1ib3R0b206NS4wcHQiPg0KPGRpdj4NCjxkaXY+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj5PbiBN YXkgMzAsIDIwMTksIGF0IDk6MzcgQU0sIExlaWYgTGluZGhvbG0gJmx0OzxhIGhyZWY9Im1haWx0 bzpsZWlmLmxpbmRob2xtQGxpbmFyby5vcmciPjxzcGFuIHN0eWxlPSJjb2xvcjpwdXJwbGUiPmxl aWYubGluZGhvbG1AbGluYXJvLm9yZzwvc3Bhbj48L2E+Jmd0OyB3cm90ZTo8bzpwPjwvbzpwPjwv cD4NCjwvZGl2Pg0KPC9kaXY+DQo8ZGl2Pg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+Jm5ic3A7PG86 cD48L286cD48L3A+DQo8L2Rpdj4NCjxkaXY+DQo8ZGl2Pg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+ PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTo5LjBwdDtmb250LWZhbWlseTomcXVvdDtIZWx2ZXRpY2Em cXVvdDssc2Fucy1zZXJpZiI+VGhhbmtzIEJvYiwgQ2hyaXN0aWFuLDxicj4NCjxicj4NCk9uIFRo dSwgTWF5IDMwLCAyMDE5IGF0IDAzOjA2OjQ4UE0gJiM0MzswMDAwLCBGZW5nLCBCb2IgQyB3cm90 ZTo8YnI+DQo8YnI+DQo8YnI+DQo8L3NwYW4+PG86cD48L286cD48L3A+DQo8L2Rpdj4NCjxibG9j a3F1b3RlIHN0eWxlPSJtYXJnaW4tdG9wOjUuMHB0O21hcmdpbi1ib3R0b206NS4wcHQiPg0KPGRp dj4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6OS4wcHQ7Zm9u dC1mYW1pbHk6JnF1b3Q7SGVsdmV0aWNhJnF1b3Q7LHNhbnMtc2VyaWYiPlRoYW5rcyBDaHJpc3Rp YW4uIEkgYWRkIHNvbWUgc2hvcnQgZGVzY3JpcHRpb24gZm9yIHRoZSBwYXRjaGVzLjxicj4NCjxi cj4NClRoZXNlIDUgcGF0Y2hlcyBhcmUgYWxsIGZvciBiaW5hcnkgY2FjaGUgZmVhdHVyZS48YnI+ DQo8YnI+DQpbUGF0Y2ggVjQgMi8yXSBCYXNlVG9vbHM6IFJlZmFjdG9yIGhhc2ggdHJhY2tpbmcg YWZ0ZXIgY2hlY2tpbmcgZm9yIFNvdXJjZXMgc2VjdGlvbjxicj4NCltQYXRjaCBWNCAxLzJdIEJh c2VUb29sczogQWRkIGEgY2hlY2tpbmcgZm9yIFNvdXJjZXMgc2VjdGlvbiBpbiBJTkYgZmlsZTxi cj4NCjxicj4NClRoZSBhYm92ZSAyIHBhdGNoZXMgaXMgdG8gZml4IHRoZSBpc3N1ZSB0aGF0PGJy Pg0KVGhlICZuYnNwO2J1aWxkIHRvb2wgdXNlcyB0aGUgZmlsZXMgbGlzdCB1bmRlciBbc291cmNl c10gc2VjdGlvbiBvZiBJTkY8YnI+DQpmaWxlIGFzIGEgaW5wdXQgdG8gY2FsY3VsYXRlIGEgbW9k dWxlJ3MgaGFzaCB2YWx1ZS4gQnV0IGluIHNvbWUgSU5GPGJyPg0KZmlsZXMsIFtzb3VyY2VzXSBk b2VzIG5vdCBsaXN0IGFsbCB0aGUgJnF1b3Q7c291cmNlJnF1b3Q7IGZpbGVzLCBtaXNzaW5nIHNv bWU8YnI+DQouaCBmaWxlcy4gUGF0aCAyLzIgdXNlIGFub3RoZXIgbWV0aG9kIHRvIGdldCBhbGwg c291cmNlIGZpbGVzIGZvciBhPGJyPg0KbW9kdWxlIGFuZCBwYXRjaCAxLzIgZG8gYSBjaGVjayB3 aGV0aGVyIFtzb3VyY2VzXSBsaXN0IGFsbCB0aGU8YnI+DQomcXVvdDtzb3VyY2UmcXVvdDsgZmls ZXMuPC9zcGFuPjxvOnA+PC9vOnA+PC9wPg0KPC9kaXY+DQo8L2Jsb2NrcXVvdGU+DQo8ZGl2Pg0K PHAgY2xhc3M9Ik1zb05vcm1hbCI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTo5LjBwdDtmb250LWZh bWlseTomcXVvdDtIZWx2ZXRpY2EmcXVvdDssc2Fucy1zZXJpZiI+PGJyPg0KSSdsbCBiZSBob25l c3QgLSBiZWNhdXNlIG9mIHRoZSB3aWxkIHZhcmlhbmNlIGluIHdoZXRoZXIgLmggZmlsZXMgYXJl PGJyPg0KbGlzdGVkIGluIHRoZSBbc291cmNlc10gc2VjdGlvbiBvZiAuaW5mIGZpbGVzLCBJIGhh dmUgYWx3YXlzIGJlZW48YnI+DQp1bnN1cmUgYXMgdG8gd2hldGhlciB0aGV5IHdlcmUganVzdCBi ZWluZyBpZ25vcmVkIChhbmQgZXh0cmFjdGVkIG9uPGJyPg0KdGhlIHNpZGUgdmlhIG1rZGVwIG9y IHNpbWlsYXIpLjxicj4NCjxicj4NCjxicj4NCjwvc3Bhbj48bzpwPjwvbzpwPjwvcD4NCjwvZGl2 Pg0KPC9kaXY+DQo8L2Jsb2NrcXVvdGU+DQo8ZGl2Pg0KPGRpdj4NCjxwIGNsYXNzPSJNc29Ob3Jt YWwiPiZuYnNwOzxvOnA+PC9vOnA+PC9wPg0KPC9kaXY+DQo8L2Rpdj4NCjxkaXY+DQo8ZGl2Pg0K PHAgY2xhc3M9Ik1zb05vcm1hbCI+TGVpZiw8bzpwPjwvbzpwPjwvcD4NCjwvZGl2Pg0KPC9kaXY+ DQo8ZGl2Pg0KPGRpdj4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiPiZuYnNwOzxvOnA+PC9vOnA+PC9w Pg0KPC9kaXY+DQo8L2Rpdj4NCjxkaXY+DQo8ZGl2Pg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+SSdt IGNvbmZ1c2VkIHRvbyBhcyB5b3UgY2FuIG9ubHkgcmVhbGx5IGtub3cgdGhlIHNldCBvZiBpbmNs dWRlIGZpbGVzIGJ5IGRvaW5nIHRoZSBta2RlcD88bzpwPjwvbzpwPjwvcD4NCjwvZGl2Pg0KPC9k aXY+DQo8ZGl2Pg0KPGRpdj4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiPiZuYnNwOzxvOnA+PC9vOnA+ PC9wPg0KPC9kaXY+DQo8L2Rpdj4NCjxkaXY+DQo8ZGl2Pg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+ SSBkb24ndCBzZWUgdGhlIHZhbHVlIG9mIGhhc2hpbmcgdGhlIGxvY2FsIGluY2x1ZGUgZmlsZXMg YXMgYW55IGluY2x1ZGUgZmlsZSBjaGFuZ2UgaW4gdGhlIG1rZGVwIHBhdGggcmVxdWlyZXMgdGhl IG1vZHVsZSB0byBiZSByZWNvbXBpbGVkLiBJdCBzZWVtcyB0byBtZSBoYXZpbmcgb25lIHNjaGVt ZSBmb3IgaGFzaGluZyBhbmQgYW50aGVyIGZvdXIgYnVpbGRpbmcgaXMgZ29pbmcgdG8gY2F1c2Ug YSBsb3Qgb2YNCiB2ZXJ5IHN1YnRsZSBlcnJvcnMgdGhhdCBhcmUgcmVhbGx5IGhhcmQgdG8gZGVi dWcuIFdoZW4geW91IGhhdmUgdGhlc2Uga2luZCBvZiBlcnJvcnMgaW4geW91ciBidWlsZCBzeXN0 ZW0geW91IHRlYWNoIHBlb3BsZSB0aGV5IGFsd2F5cyBuZWVkIHRvIG1ha2UgY2xlYW4sIHNvIHRo ZXkgYnlwYXNzIHRoZSBoYXNoaW5nIGFuZCBkZXBlbmRlbmN5IGNoZWNrcy4mbmJzcDs8bzpwPjwv bzpwPjwvcD4NCjwvZGl2Pg0KPC9kaXY+DQo8ZGl2Pg0KPGRpdj4NCjxwIGNsYXNzPSJNc29Ob3Jt YWwiPiZuYnNwOzxvOnA+PC9vOnA+PC9wPg0KPC9kaXY+DQo8L2Rpdj4NCjxkaXY+DQo8ZGl2Pg0K PHAgY2xhc3M9Ik1zb05vcm1hbCI+U2VlbXMgbGlrZSB3ZSBtYXkgYmUgZmlnaHRpbmcgdGhlIG1h a2VmaWxlcyBhZ2FpbiwgYnV0IGZyb20gYSAxMCwwMDAgcG9pbnQgb2YgdmlldyBpdCBzZWVtcyBs aWtlIHRoZSBkZXBlbmRlbmN5IGFsZ29yaXRobSBhbmQgdGhlIGhhc2ggbmVlZCB0byBiZSB0aWVk IHRvZ2V0aGVyLiBTZWVtcyBsaWtlIHRoZSBtYWtlZmlsZSBhbHJlYWR5IGtub3dzIGlmIGl0IG5l ZWRzIHRvIGJ1aWxkIGl0LCBidXQgSSdtIG5vdA0KIHN1cmUgaWYgdGhlIG1ha2VmaWxlIGNhbiBy dW4gYW4gYWN0aW9uIGlmIGl0IGRvZXMgbm90IG5lZWQgdG8gYnVpbGQgc29tZXRoaW5nPyZuYnNw OzxvOnA+PC9vOnA+PC9wPg0KPC9kaXY+DQo8L2Rpdj4NCjxkaXY+DQo8ZGl2Pg0KPHAgY2xhc3M9 Ik1zb05vcm1hbCI+Jm5ic3A7PG86cD48L286cD48L3A+DQo8L2Rpdj4NCjwvZGl2Pg0KPGRpdj4N CjxkaXY+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj5UaGFua3MsPG86cD48L286cD48L3A+DQo8L2Rp dj4NCjwvZGl2Pg0KPGRpdj4NCjxkaXY+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj4mbmJzcDs8bzpw PjwvbzpwPjwvcD4NCjwvZGl2Pg0KPC9kaXY+DQo8ZGl2Pg0KPGRpdj4NCjxwIGNsYXNzPSJNc29O b3JtYWwiPkFuZHJldyBGaXNoPG86cD48L286cD48L3A+DQo8L2Rpdj4NCjwvZGl2Pg0KPGRpdj4N CjxkaXY+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj4mbmJzcDs8bzpwPjwvbzpwPjwvcD4NCjwvZGl2 Pg0KPC9kaXY+DQo8ZGl2Pg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PGJyPg0KPGJyPg0KPGJyPg0K PG86cD48L286cD48L3A+DQo8L2Rpdj4NCjxibG9ja3F1b3RlIHN0eWxlPSJtYXJnaW4tdG9wOjUu MHB0O21hcmdpbi1ib3R0b206NS4wcHQiPg0KPGRpdj4NCjxkaXY+DQo8cCBjbGFzcz0iTXNvTm9y bWFsIj48c3BhbiBzdHlsZT0iZm9udC1zaXplOjkuMHB0O2ZvbnQtZmFtaWx5OiZxdW90O0hlbHZl dGljYSZxdW90OyxzYW5zLXNlcmlmIj5JZiB0aGUgaW50ZW50IGlzIHRvIHNwZWVkIHVwIGJ1aWxk IHRpbWUsIHdvdWxkIGl0IG5vdCBiZSBiZXR0ZXIgdG88YnI+DQp3YXJuIHRoZSB1c2VyIC0gc28g dGhleSBub3RpY2UgdGhlIHByb2JsZW0gYW5kIGZpeCB0aGVpciBtb2R1bGVzLDxicj4NCnJhdGhl ciB0aGFuIGFkZGluZyBleHRyYSBwcm9jZXNzaW5nIHRpbWUgb24gaGF2aW5nIHRoZSB0b29scyB3 b3JrIHdpdGg8YnI+DQpicm9rZW4gLmluZiBmaWxlcz88YnI+DQo8YnI+DQpUaGlzIGRvZXMgbm90 IGxvb2sgbGlrZSBtYXRlcmlhbCBmb3IgZWRrMi1zdGFibGUyMDE5MDUgdG8gbWUuPGJyPg0KPGJy Pg0KPGJyPg0KPGJyPg0KPC9zcGFuPjxvOnA+PC9vOnA+PC9wPg0KPC9kaXY+DQo8YmxvY2txdW90 ZSBzdHlsZT0ibWFyZ2luLXRvcDo1LjBwdDttYXJnaW4tYm90dG9tOjUuMHB0Ij4NCjxkaXY+DQo8 cCBjbGFzcz0iTXNvTm9ybWFsIj48c3BhbiBzdHlsZT0iZm9udC1zaXplOjkuMHB0O2ZvbnQtZmFt aWx5OiZxdW90O0hlbHZldGljYSZxdW90OyxzYW5zLXNlcmlmIj5bUEFUQ0ggdjMgMS8xXSBCYXNl VG9vbHM6RXh0ZW5kIHRoZSBiaW5hcnkgY2FjaGUgdG8gc3VwcG9ydCBsaWJyYXJ5IGNhY2hlPGJy Pg0KVGhpcyBwYXRjaCBpcyB0byByZXNvbHZlIHRoZSBwcm9ibGVtIHRoYXQ8YnI+DQpCdWlsZCB0 b29sIGRvc2Ugbm90IGNhY2hlIHRoZSBsaWJyYXJ5IGJpbmFyaWVzIG5vdy4gV2hpdGVvdXQgdGhp czxicj4NCnBhdGNoLCB0aGVyZSBpcyAyNSUgZXh0cmEgdGltZSBjb3N0IHRvIHJlYnVpbGQgdGhl IGFsbCBtb2R1bGU8YnI+DQpkZXBlbmRlbmN5IGxpYnJhcmllcyBpZiBjYWNoZSBtaXNzIGhhcHBl bi48L3NwYW4+PG86cD48L286cD48L3A+DQo8L2Rpdj4NCjwvYmxvY2txdW90ZT4NCjxkaXY+DQo8 cCBjbGFzcz0iTXNvTm9ybWFsIj48c3BhbiBzdHlsZT0iZm9udC1zaXplOjkuMHB0O2ZvbnQtZmFt aWx5OiZxdW90O0hlbHZldGljYSZxdW90OyxzYW5zLXNlcmlmIj48YnI+DQoyNSUgaXMgYSBiaWcg bnVtYmVyLCBzbyBJIHdvbid0IGFyZ3VlIGFnYWluc3QgdGhpcy4gQnV0IEkgYWxzbyB3b24ndDxi cj4NCmFyZ3VlIGZvciBpdCAtIHRoZSBCWiB3YXMgcmFpc2VkIHZlcnkgbGF0ZSBpbiB0aGUgY3lj bGUuPGJyPg0KPGJyPg0KPGJyPg0KPGJyPg0KPC9zcGFuPjxvOnA+PC9vOnA+PC9wPg0KPC9kaXY+ DQo8YmxvY2txdW90ZSBzdHlsZT0ibWFyZ2luLXRvcDo1LjBwdDttYXJnaW4tYm90dG9tOjUuMHB0 Ij4NCjxkaXY+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj48c3BhbiBzdHlsZT0iZm9udC1zaXplOjku MHB0O2ZvbnQtZmFtaWx5OiZxdW90O0hlbHZldGljYSZxdW90OyxzYW5zLXNlcmlmIj5bUEFUQ0hd IEJhc2VUb29sczpVcGRhdGUgYmluYXJ5IGNhY2hlIHJlc3RvcmUgdGltZSB0byBjdXJyZW50IHRp bWU8YnI+DQpUaGlzIHBhdGNoIGlzIHRvIG1ha2UgdGhlIHJlc3RvcmVkIGJpbmFyeSBmaWxlIGhh dmUgdGhlIGN1cnJlbnQgdGltZTxicj4NCnN0YW1wIG5vdCB0aGUgYmluYXJ5IGZpbGUgb3JpZ2lu YWwgdGltZSBzdGFtcC48L3NwYW4+PG86cD48L286cD48L3A+DQo8L2Rpdj4NCjwvYmxvY2txdW90 ZT4NCjxkaXY+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj48c3BhbiBzdHlsZT0iZm9udC1zaXplOjku MHB0O2ZvbnQtZmFtaWx5OiZxdW90O0hlbHZldGljYSZxdW90OyxzYW5zLXNlcmlmIj48YnI+DQpJ IGNhbiBzZWUgaG93IHRoZSBjdXJyZW50IGJlaGF2aW91ciBjb3VsZCBjYXVzZSBwcm9ibGVtcyB3 aXRoIHNvbWU8YnI+DQpDSS9idWlsZCBzeXN0ZW1zLiBJZiBpdCBpcyBwcm9wZXJseSByZXZpZXdl ZCBhbmQgdGVzdGVkLCBJIGFtIE9LIHdpdGg8YnI+DQp0aGlzIG9uZSBnb2luZyBpbiBmb3IgZWRr Mi1zdGFibGUyMDE5MDMuPGJyPg0KPGJyPg0KPGJyPg0KPGJyPg0KPC9zcGFuPjxvOnA+PC9vOnA+ PC9wPg0KPC9kaXY+DQo8YmxvY2txdW90ZSBzdHlsZT0ibWFyZ2luLXRvcDo1LjBwdDttYXJnaW4t Ym90dG9tOjUuMHB0Ij4NCjxkaXY+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj48c3BhbiBzdHlsZT0i Zm9udC1zaXplOjkuMHB0O2ZvbnQtZmFtaWx5OiZxdW90O0hlbHZldGljYSZxdW90OyxzYW5zLXNl cmlmIj5bUEFUQ0ggVjVdIEJhc2VUb29sczpNYWtlIEJhc2VUb29scyBzdXBwb3J0IG5ldyBydWxl cyB0byBnZW5lcmF0ZSBSQVcgRkZTIEZJTEU8YnI+DQpUaGlzIHBhdGNoIGlzIHRvIHN1cHBvcnQg dGhlIHJhdyBmZnMgZmlsZSBydWxlLiBOb3cgYnVpbGQgdG9vbCBkb2VzPGJyPg0Kbm90IGNvcnJl Y3RseSBoYW5kbGUgdGhpcyBjYXNlOjxicj4NCjxicj4NCltSdWxlLkNvbW1vbi5VU0VSX0RFRklO RUQuTWljcm9Db2RlXTxicj4NCiZuYnNwO0ZJTEUgUkFXID0gJChOQU1FRF9HVUlEKSB7PGJyPg0K Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7JChJTkZfT1VUUFVUKS8kKE1P RFVMRV9OQU1FKS5iaW48YnI+DQombmJzcDt9PC9zcGFuPjxvOnA+PC9vOnA+PC9wPg0KPC9kaXY+ DQo8L2Jsb2NrcXVvdGU+DQo8ZGl2Pg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PHNwYW4gc3R5bGU9 ImZvbnQtc2l6ZTo5LjBwdDtmb250LWZhbWlseTomcXVvdDtIZWx2ZXRpY2EmcXVvdDssc2Fucy1z ZXJpZiI+PGJyPg0KVGhpcyBsb29rcyBsaWtlIGEgbmV3IGZlYXR1cmUgLSBub3Qgc29tZXRoaW5n IHRoYXQgc2hvdWxkIGJ5cGFzcyB0aGU8YnI+DQpmcmVlemUgcGVyaW9kIGZvciBlZGsyLXN0YWJs ZTIwMTkwNS48YnI+DQpDYW4geW91IGV4cGxhaW4gd2h5IHRoaXMgaXMgbmVlZGVkIGluIHRoZSBz dGFibGUgdGFnIGFzIG9wcG9zZWQgdG88YnI+DQpiZWluZyBhdmFpbGFibGUgZnJvbSBtYXN0ZXIg dGhlIGRheSBhZnRlciB0aGUgdGFnIGlzIG1hZGU/PGJyPg0KPGJyPg0KQmVzdCBSZWdhcmRzLDxi cj4NCjxicj4NCkxlaWY8YnI+DQo8YnI+DQo8YnI+DQo8YnI+DQo8L3NwYW4+PG86cD48L286cD48 L3A+DQo8L2Rpdj4NCjxibG9ja3F1b3RlIHN0eWxlPSJtYXJnaW4tdG9wOjUuMHB0O21hcmdpbi1i b3R0b206NS4wcHQiPg0KPGRpdj4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiPjxzcGFuIHN0eWxlPSJm b250LXNpemU6OS4wcHQ7Zm9udC1mYW1pbHk6JnF1b3Q7SGVsdmV0aWNhJnF1b3Q7LHNhbnMtc2Vy aWYiPjxicj4NCjxicj4NClRoYW5rcyw8YnI+DQpCb2I8YnI+DQo8YnI+DQotLS0tLU9yaWdpbmFs IE1lc3NhZ2UtLS0tLTxicj4NCkZyb206IFJvZHJpZ3VleiwgQ2hyaXN0aWFuPHNwYW4gY2xhc3M9 ImFwcGxlLWNvbnZlcnRlZC1zcGFjZSI+Jm5ic3A7PC9zcGFuPjxicj4NClNlbnQ6IFRodXJzZGF5 LCBNYXkgMzAsIDIwMTkgMTA6MjYgUE08YnI+DQpUbzogTGVpZiBMaW5kaG9sbSAmbHQ7PGEgaHJl Zj0ibWFpbHRvOmxlaWYubGluZGhvbG1AbGluYXJvLm9yZyI+PHNwYW4gc3R5bGU9ImNvbG9yOnB1 cnBsZSI+bGVpZi5saW5kaG9sbUBsaW5hcm8ub3JnPC9zcGFuPjwvYT4mZ3Q7OyBGZW5nLCBCb2Ig QyAmbHQ7PGEgaHJlZj0ibWFpbHRvOmJvYi5jLmZlbmdAaW50ZWwuY29tIj48c3BhbiBzdHlsZT0i Y29sb3I6cHVycGxlIj5ib2IuYy5mZW5nQGludGVsLmNvbTwvc3Bhbj48L2E+Jmd0Ozxicj4NCkNj OiBBbmRyZXcgRmlzaCAmbHQ7PGEgaHJlZj0ibWFpbHRvOmFmaXNoQGFwcGxlLmNvbSI+PHNwYW4g c3R5bGU9ImNvbG9yOnB1cnBsZSI+YWZpc2hAYXBwbGUuY29tPC9zcGFuPjwvYT4mZ3Q7OyBMYXN6 bG8gRXJzZWsgJmx0OzxhIGhyZWY9Im1haWx0bzpsZXJzZWtAcmVkaGF0LmNvbSI+PHNwYW4gc3R5 bGU9ImNvbG9yOnB1cnBsZSI+bGVyc2VrQHJlZGhhdC5jb208L3NwYW4+PC9hPiZndDs7IEtpbm5l eSwgTWljaGFlbCBEICZsdDs8YSBocmVmPSJtYWlsdG86bWljaGFlbC5kLmtpbm5leUBpbnRlbC5j b20iPjxzcGFuIHN0eWxlPSJjb2xvcjpwdXJwbGUiPm1pY2hhZWwuZC5raW5uZXlAaW50ZWwuY29t PC9zcGFuPjwvYT4mZ3Q7OzxhIGhyZWY9Im1haWx0bzpkZXZlbEBlZGsyLmdyb3Vwcy5pbyI+PHNw YW4gc3R5bGU9ImNvbG9yOnB1cnBsZSI+ZGV2ZWxAZWRrMi5ncm91cHMuaW88L3NwYW4+PC9hPjsN CiBHYW8sIExpbWluZyAmbHQ7PGEgaHJlZj0ibWFpbHRvOmxpbWluZy5nYW9AaW50ZWwuY29tIj48 c3BhbiBzdHlsZT0iY29sb3I6cHVycGxlIj5saW1pbmcuZ2FvQGludGVsLmNvbTwvc3Bhbj48L2E+ Jmd0OzsgU2hpLCBTdGV2ZW4gJmx0OzxhIGhyZWY9Im1haWx0bzpzdGV2ZW4uc2hpQGludGVsLmNv bSI+PHNwYW4gc3R5bGU9ImNvbG9yOnB1cnBsZSI+c3RldmVuLnNoaUBpbnRlbC5jb208L3NwYW4+ PC9hPiZndDs7IEZhbiwgWmhpanVYICZsdDs8YSBocmVmPSJtYWlsdG86emhpanV4LmZhbkBpbnRl bC5jb20iPjxzcGFuIHN0eWxlPSJjb2xvcjpwdXJwbGUiPnpoaWp1eC5mYW5AaW50ZWwuY29tPC9z cGFuPjwvYT4mZ3Q7PGJyPg0KU3ViamVjdDogUkU6IEVkazIgQmFzZVRvb2xzIFBhdGNoZXMuPGJy Pg0KPGJyPg0KSGV5IExlaWYsPGJyPg0KPGJyPg0KSSB0aG91Z2h0IEknZCBoZWxwIEJvYiBhbmQg Z2F0aGVyIHRob3NlIEJacyBmb3IgZWFjaCB0aHJlYWQ6PGJyPg0KPGJyPg0KW1BhdGNoIFY0IDEv Ml0gQmFzZVRvb2xzOiBBZGQgYSBjaGVja2luZyBmb3IgU291cmNlcyBzZWN0aW9uIGluIElORiBm aWxlIFtQYXRjaCBWNCAyLzJdIEJhc2VUb29sczogUmVmYWN0b3IgaGFzaCB0cmFja2luZyBhZnRl ciBjaGVja2luZyBmb3IgU291cmNlcyBzZWN0aW9uPGJyPg0KQlo6PHNwYW4gY2xhc3M9ImFwcGxl LWNvbnZlcnRlZC1zcGFjZSI+Jm5ic3A7PC9zcGFuPjxhIGhyZWY9Imh0dHBzOi8vYnVnemlsbGEu dGlhbm9jb3JlLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTgwNCI+PHNwYW4gc3R5bGU9ImNvbG9yOnB1 cnBsZSI+aHR0cHM6Ly9idWd6aWxsYS50aWFub2NvcmUub3JnL3Nob3dfYnVnLmNnaT9pZD0xODA0 PC9zcGFuPjwvYT48YnI+DQo8YnI+DQpbUEFUQ0ggdjMgMS8xXSBCYXNlVG9vbHM6RXh0ZW5kIHRo ZSBiaW5hcnkgY2FjaGUgdG8gc3VwcG9ydCBsaWJyYXJ5IGNhY2hlPGJyPg0KQlo6PHNwYW4gY2xh c3M9ImFwcGxlLWNvbnZlcnRlZC1zcGFjZSI+Jm5ic3A7PC9zcGFuPjxhIGhyZWY9Imh0dHBzOi8v YnVnemlsbGEudGlhbm9jb3JlLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc5NyI+PHNwYW4gc3R5bGU9 ImNvbG9yOnB1cnBsZSI+aHR0cHM6Ly9idWd6aWxsYS50aWFub2NvcmUub3JnL3Nob3dfYnVnLmNn aT9pZD0xNzk3PC9zcGFuPjwvYT48YnI+DQo8YnI+DQpbUEFUQ0ggVjVdIEJhc2VUb29sczpNYWtl IEJhc2VUb29scyBzdXBwb3J0IG5ldyBydWxlcyB0byBnZW5lcmF0ZSBSQVcgRkZTIEZJTEU8YnI+ DQpCWjo8c3BhbiBjbGFzcz0iYXBwbGUtY29udmVydGVkLXNwYWNlIj4mbmJzcDs8L3NwYW4+PGEg aHJlZj0iaHR0cHM6Ly9idWd6aWxsYS50aWFub2NvcmUub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzY1 Ij48c3BhbiBzdHlsZT0iY29sb3I6cHVycGxlIj5odHRwczovL2J1Z3ppbGxhLnRpYW5vY29yZS5v cmcvc2hvd19idWcuY2dpP2lkPTE3NjU8L3NwYW4+PC9hPjxicj4NCjxicj4NCltQQVRDSF0gQmFz ZVRvb2xzOlVwZGF0ZSBiaW5hcnkgY2FjaGUgcmVzdG9yZSB0aW1lIHRvIGN1cnJlbnQgdGltZTxi cj4NCkJaOjxzcGFuIGNsYXNzPSJhcHBsZS1jb252ZXJ0ZWQtc3BhY2UiPiZuYnNwOzwvc3Bhbj48 YSBocmVmPSJodHRwczovL2J1Z3ppbGxhLnRpYW5vY29yZS5vcmcvc2hvd19idWcuY2dpP2lkPTE3 NDIiPjxzcGFuIHN0eWxlPSJjb2xvcjpwdXJwbGUiPmh0dHBzOi8vYnVnemlsbGEudGlhbm9jb3Jl Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc0Mjwvc3Bhbj48L2E+PGJyPg0KPGJyPg0KVGhhbmtzLDxi cj4NCkNocmlzdGlhbjxicj4NCjxicj4NCjxicj4NCjxicj4NCjwvc3Bhbj48bzpwPjwvbzpwPjwv cD4NCjwvZGl2Pg0KPGJsb2NrcXVvdGUgc3R5bGU9Im1hcmdpbi10b3A6NS4wcHQ7bWFyZ2luLWJv dHRvbTo1LjBwdCI+DQo8ZGl2Pg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PHNwYW4gc3R5bGU9ImZv bnQtc2l6ZTo5LjBwdDtmb250LWZhbWlseTomcXVvdDtIZWx2ZXRpY2EmcXVvdDssc2Fucy1zZXJp ZiI+LS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS08YnI+DQpGcm9tOiBMZWlmIExpbmRob2xtIFs8 YSBocmVmPSJtYWlsdG86bGVpZi5saW5kaG9sbUBsaW5hcm8ub3JnIj48c3BhbiBzdHlsZT0iY29s b3I6cHVycGxlIj5tYWlsdG86bGVpZi5saW5kaG9sbUBsaW5hcm8ub3JnPC9zcGFuPjwvYT5dPGJy Pg0KU2VudDogVGh1cnNkYXksIE1heSAzMCwgMjAxOSAyOjI4IEFNPGJyPg0KVG86IEZlbmcsIEJv YiBDICZsdDs8YSBocmVmPSJtYWlsdG86Ym9iLmMuZmVuZ0BpbnRlbC5jb20iPjxzcGFuIHN0eWxl PSJjb2xvcjpwdXJwbGUiPmJvYi5jLmZlbmdAaW50ZWwuY29tPC9zcGFuPjwvYT4mZ3Q7PGJyPg0K Q2M6IEFuZHJldyBGaXNoICZsdDs8YSBocmVmPSJtYWlsdG86YWZpc2hAYXBwbGUuY29tIj48c3Bh biBzdHlsZT0iY29sb3I6cHVycGxlIj5hZmlzaEBhcHBsZS5jb208L3NwYW4+PC9hPiZndDs7IExh c3psbyBFcnNlayAmbHQ7PGEgaHJlZj0ibWFpbHRvOmxlcnNla0ByZWRoYXQuY29tIj48c3BhbiBz dHlsZT0iY29sb3I6cHVycGxlIj5sZXJzZWtAcmVkaGF0LmNvbTwvc3Bhbj48L2E+Jmd0Ozs8c3Bh biBjbGFzcz0iYXBwbGUtY29udmVydGVkLXNwYWNlIj4mbmJzcDs8L3NwYW4+PGJyPg0KS2lubmV5 LCBNaWNoYWVsIEQgJmx0OzxhIGhyZWY9Im1haWx0bzptaWNoYWVsLmQua2lubmV5QGludGVsLmNv bSI+PHNwYW4gc3R5bGU9ImNvbG9yOnB1cnBsZSI+bWljaGFlbC5kLmtpbm5leUBpbnRlbC5jb208 L3NwYW4+PC9hPiZndDs7PHNwYW4gY2xhc3M9ImFwcGxlLWNvbnZlcnRlZC1zcGFjZSI+Jm5ic3A7 PC9zcGFuPjxhIGhyZWY9Im1haWx0bzpkZXZlbEBlZGsyLmdyb3Vwcy5pbyI+PHNwYW4gc3R5bGU9 ImNvbG9yOnB1cnBsZSI+ZGV2ZWxAZWRrMi5ncm91cHMuaW88L3NwYW4+PC9hPjs8c3BhbiBjbGFz cz0iYXBwbGUtY29udmVydGVkLXNwYWNlIj4mbmJzcDs8L3NwYW4+PGJyPg0KR2FvLCBMaW1pbmcg Jmx0OzxhIGhyZWY9Im1haWx0bzpsaW1pbmcuZ2FvQGludGVsLmNvbSI+PHNwYW4gc3R5bGU9ImNv bG9yOnB1cnBsZSI+bGltaW5nLmdhb0BpbnRlbC5jb208L3NwYW4+PC9hPiZndDs7IFNoaSwgU3Rl dmVuICZsdDs8YSBocmVmPSJtYWlsdG86c3RldmVuLnNoaUBpbnRlbC5jb20iPjxzcGFuIHN0eWxl PSJjb2xvcjpwdXJwbGUiPnN0ZXZlbi5zaGlAaW50ZWwuY29tPC9zcGFuPjwvYT4mZ3Q7OzxzcGFu IGNsYXNzPSJhcHBsZS1jb252ZXJ0ZWQtc3BhY2UiPiZuYnNwOzwvc3Bhbj48YnI+DQpSb2RyaWd1 ZXosIENocmlzdGlhbiAmbHQ7PGEgaHJlZj0ibWFpbHRvOmNocmlzdGlhbi5yb2RyaWd1ZXpAaW50 ZWwuY29tIj48c3BhbiBzdHlsZT0iY29sb3I6cHVycGxlIj5jaHJpc3RpYW4ucm9kcmlndWV6QGlu dGVsLmNvbTwvc3Bhbj48L2E+Jmd0OzsgRmFuLCBaaGlqdVg8c3BhbiBjbGFzcz0iYXBwbGUtY29u dmVydGVkLXNwYWNlIj4mbmJzcDs8L3NwYW4+PGJyPg0KJmx0OzxhIGhyZWY9Im1haWx0bzp6aGlq dXguZmFuQGludGVsLmNvbSI+PHNwYW4gc3R5bGU9ImNvbG9yOnB1cnBsZSI+emhpanV4LmZhbkBp bnRlbC5jb208L3NwYW4+PC9hPiZndDs8YnI+DQpTdWJqZWN0OiBSZTogRWRrMiBCYXNlVG9vbHMg UGF0Y2hlcy48YnI+DQo8YnI+DQpIaSBCb2IsPGJyPg0KPGJyPg0KT24gVGh1LCBNYXkgMzAsIDIw MTkgYXQgMDY6Mzk6NTlBTSAmIzQzOzAwMDAsIEZlbmcsIEJvYiBDIHdyb3RlOjxicj4NCjxicj4N Cjxicj4NCjwvc3Bhbj48bzpwPjwvbzpwPjwvcD4NCjwvZGl2Pg0KPGJsb2NrcXVvdGUgc3R5bGU9 Im1hcmdpbi10b3A6NS4wcHQ7bWFyZ2luLWJvdHRvbTo1LjBwdCI+DQo8ZGl2Pg0KPHAgY2xhc3M9 Ik1zb05vcm1hbCI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTo5LjBwdDtmb250LWZhbWlseTomcXVv dDtIZWx2ZXRpY2EmcXVvdDssc2Fucy1zZXJpZiI+SGksPGJyPg0KPGJyPg0KQ3VycmVudGx5LCB3 ZSBoYXZlIDUgQmFzZXRvb2xzIHBhdGNoZXMgd2hpY2ggYXJlIHJlYWR5IHRvIHB1c2guIFNpbmNl PHNwYW4gY2xhc3M9ImFwcGxlLWNvbnZlcnRlZC1zcGFjZSI+Jm5ic3A7PC9zcGFuPjxicj4NCndl IGFyZSBpbiB0aGUgc29mdC1mcmVlemUgcGhhc2UsIEknZCBsaWtlIHRvIGFzayBmb3IgeW91ciBv cGluaW9ucyBpZjxzcGFuIGNsYXNzPSJhcHBsZS1jb252ZXJ0ZWQtc3BhY2UiPiZuYnNwOzwvc3Bh bj48YnI+DQp0aG9zZSBwYXRjaGVzIGNhbiBiZSBwdXNoZWQgdG8gZWRrMiBtYXN0ZXIuPC9zcGFu PjxvOnA+PC9vOnA+PC9wPg0KPC9kaXY+DQo8L2Jsb2NrcXVvdGU+DQo8ZGl2Pg0KPHAgY2xhc3M9 Ik1zb05vcm1hbCI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTo5LjBwdDtmb250LWZhbWlseTomcXVv dDtIZWx2ZXRpY2EmcXVvdDssc2Fucy1zZXJpZiI+PGJyPg0KVG8gc2F2ZSBtZSB0aGUgdGltZSBv ZiByZWFkaW5nIHRocm91Z2ggYWxsIHRoZSB0aHJlYWRzIGFuZCBnZXR0aW5nIHRvPHNwYW4gY2xh c3M9ImFwcGxlLWNvbnZlcnRlZC1zcGFjZSI+Jm5ic3A7PC9zcGFuPjxicj4NCmdyaXBzIHdpdGgg YWxsIHRoZSBjb2RlLCBjb3VsZCB5b3Ugc3VtbWFyaXNlIHRoZSBwcm9ibGVtIHRoZXNlIHNvbHZl PHNwYW4gY2xhc3M9ImFwcGxlLWNvbnZlcnRlZC1zcGFjZSI+Jm5ic3A7PC9zcGFuPjxicj4NCmFu ZCB0aGUgaW1wYWN0IG9mIG5vdCBpbmNsdWRpbmcgdGhlc2U/PGJyPg0KPGJyPg0KSXMgdGhlcmUg YSBCWj88YnI+DQo8YnI+DQpSZWdhcmRzLDxicj4NCjxicj4NCkxlaWY8YnI+DQo8YnI+DQo8YnI+ DQo8YnI+DQo8L3NwYW4+PG86cD48L286cD48L3A+DQo8L2Rpdj4NCjxibG9ja3F1b3RlIHN0eWxl PSJtYXJnaW4tdG9wOjUuMHB0O21hcmdpbi1ib3R0b206NS4wcHQiPg0KPGRpdj4NCjxwIGNsYXNz PSJNc29Ob3JtYWwiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6OS4wcHQ7Zm9udC1mYW1pbHk6JnF1 b3Q7SGVsdmV0aWNhJnF1b3Q7LHNhbnMtc2VyaWYiPjxicj4NClRoZXNlIDUgcGF0Y2hlcyBhcmUg dG8gZml4IHRoZSBpc3N1ZXMgZm9yIHRoZSBidWlsZCBjYWNoZSBmZWF0dXJlLjxicj4NCjxicj4N CltQYXRjaCBWNCAyLzJdIEJhc2VUb29sczogUmVmYWN0b3IgaGFzaCB0cmFja2luZyBhZnRlciBj aGVja2luZyBmb3I8c3BhbiBjbGFzcz0iYXBwbGUtY29udmVydGVkLXNwYWNlIj4mbmJzcDs8L3Nw YW4+PGJyPg0KU291cmNlcyBzZWN0aW9uPGJyPg0KPGEgaHJlZj0iaHR0cHM6Ly9lZGsyLmdyb3Vw cy5pby9nL2RldmVsL3RvcGljLzMxODM1NTU2IzQxNjQyIj48c3BhbiBzdHlsZT0iY29sb3I6cHVy cGxlIj5odHRwczovL2VkazIuZ3JvdXBzLmlvL2cvZGV2ZWwvdG9waWMvMzE4MzU1NTYjNDE2NDI8 L3NwYW4+PC9hPjxicj4NCjxicj4NCltQYXRjaCBWNCAxLzJdIEJhc2VUb29sczogQWRkIGEgY2hl Y2tpbmcgZm9yIFNvdXJjZXMgc2VjdGlvbiBpbiBJTkY8c3BhbiBjbGFzcz0iYXBwbGUtY29udmVy dGVkLXNwYWNlIj4mbmJzcDs8L3NwYW4+PGJyPg0KZmlsZTxicj4NCjxhIGhyZWY9Imh0dHBzOi8v ZWRrMi5ncm91cHMuaW8vZy9kZXZlbC90b3BpYy8zMTgzNTU1NSM0MTY0MSI+PHNwYW4gc3R5bGU9 ImNvbG9yOnB1cnBsZSI+aHR0cHM6Ly9lZGsyLmdyb3Vwcy5pby9nL2RldmVsL3RvcGljLzMxODM1 NTU1IzQxNjQxPC9zcGFuPjwvYT48YnI+DQo8YnI+DQpbUEFUQ0ggdjMgMS8xXSBCYXNlVG9vbHM6 RXh0ZW5kIHRoZSBiaW5hcnkgY2FjaGUgdG8gc3VwcG9ydCBsaWJyYXJ5PHNwYW4gY2xhc3M9ImFw cGxlLWNvbnZlcnRlZC1zcGFjZSI+Jm5ic3A7PC9zcGFuPjxicj4NCmNhY2hlPGJyPg0KPGEgaHJl Zj0iaHR0cHM6Ly9lZGsyLmdyb3Vwcy5pby9nL2RldmVsL3RvcGljLzMxODQzNTA1IzQxNjU1Ij48 c3BhbiBzdHlsZT0iY29sb3I6cHVycGxlIj5odHRwczovL2VkazIuZ3JvdXBzLmlvL2cvZGV2ZWwv dG9waWMvMzE4NDM1MDUjNDE2NTU8L3NwYW4+PC9hPjxicj4NCjxicj4NCltQQVRDSCBWNV0gQmFz ZVRvb2xzOk1ha2UgQmFzZVRvb2xzIHN1cHBvcnQgbmV3IHJ1bGVzIHRvIGdlbmVyYXRlIFJBVzxz cGFuIGNsYXNzPSJhcHBsZS1jb252ZXJ0ZWQtc3BhY2UiPiZuYnNwOzwvc3Bhbj48YnI+DQpGRlMg RklMRTxicj4NCjxhIGhyZWY9Imh0dHBzOi8vZWRrMi5ncm91cHMuaW8vZy9kZXZlbC90b3BpYy8z MTgzMDgwNyM0MTU3MSI+PHNwYW4gc3R5bGU9ImNvbG9yOnB1cnBsZSI+aHR0cHM6Ly9lZGsyLmdy b3Vwcy5pby9nL2RldmVsL3RvcGljLzMxODMwODA3IzQxNTcxPC9zcGFuPjwvYT48YnI+DQo8YnI+ DQpbUEFUQ0hdIEJhc2VUb29sczpVcGRhdGUgYmluYXJ5IGNhY2hlIHJlc3RvcmUgdGltZSB0byBj dXJyZW50IHRpbWU8YnI+DQo8YSBocmVmPSJodHRwczovL2VkazIuZ3JvdXBzLmlvL2cvZGV2ZWwv dG9waWMvMzE4MTk1OTAjNDE0NjgiPjxzcGFuIHN0eWxlPSJjb2xvcjpwdXJwbGUiPmh0dHBzOi8v ZWRrMi5ncm91cHMuaW8vZy9kZXZlbC90b3BpYy8zMTgxOTU5MCM0MTQ2ODwvc3Bhbj48L2E+PGJy Pg0KPGJyPg0KPGJyPg0KVGhhbmtzLDxicj4NCkJvYjwvc3Bhbj48bzpwPjwvbzpwPjwvcD4NCjwv ZGl2Pg0KPC9ibG9ja3F1b3RlPg0KPC9ibG9ja3F1b3RlPg0KPC9ibG9ja3F1b3RlPg0KPGRpdj4N CjxwIGNsYXNzPSJNc29Ob3JtYWwiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6OS4wcHQ7Zm9udC1m YW1pbHk6JnF1b3Q7SGVsdmV0aWNhJnF1b3Q7LHNhbnMtc2VyaWYiPjxicj4NCjxicj4NCjxicj4N Cjwvc3Bhbj48bzpwPjwvbzpwPjwvcD4NCjwvZGl2Pg0KPC9kaXY+DQo8L2Jsb2NrcXVvdGU+DQo8 L2Rpdj4NCjxkaXY+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj4mbmJzcDs8bzpwPjwvbzpwPjwvcD4N CjwvZGl2Pg0KPC9kaXY+DQo8L2Jsb2NrcXVvdGU+DQo8L2Rpdj4NCjxwIGNsYXNzPSJNc29Ob3Jt YWwiPjxvOnA+Jm5ic3A7PC9vOnA+PC9wPg0KPC9kaXY+DQo8L2Rpdj4NCjxkaXY+DQo8cCBjbGFz cz0iTXNvTm9ybWFsIj48L286cD48L3NwYW4+PC9wPg0KPC9kaXY+DQo8L2Rpdj4NCjwvYm9keT4N CjwvaHRtbD4NCg== --_000_9DB7F8038713D946B98D79CA523B7F95E968B751ORSMSX121amrcor_-- From mboxrd@z Thu Jan 1 00:00:00 1970 Authentication-Results: mx.groups.io; dkim=missing; spf=pass (domain: intel.com, ip: 192.55.52.93, mailfrom: bob.c.feng@intel.com) Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by groups.io with SMTP; Thu, 30 May 2019 19:07:46 -0700 X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga008.fm.intel.com ([10.253.24.58]) by fmsmga102.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 30 May 2019 19:07:46 -0700 X-ExtLoop1: 1 Received: from fmsmsx106.amr.corp.intel.com ([10.18.124.204]) by fmsmga008.fm.intel.com with ESMTP; 30 May 2019 19:07:45 -0700 Received: from shsmsx151.ccr.corp.intel.com (10.239.6.50) by FMSMSX106.amr.corp.intel.com (10.18.124.204) with Microsoft SMTP Server (TLS) id 14.3.408.0; Thu, 30 May 2019 19:07:44 -0700 Received: from shsmsx101.ccr.corp.intel.com ([169.254.1.10]) by SHSMSX151.ccr.corp.intel.com ([169.254.3.6]) with mapi id 14.03.0415.000; Fri, 31 May 2019 10:07:43 +0800 From: "Bob Feng" To: "Johnson, Michael" , "devel@edk2.groups.io" , "afish@apple.com" CC: Leif Lindholm , "Rodriguez, Christian" , Laszlo Ersek , "Kinney, Michael D" , "Gao, Liming" , "Shi, Steven" , "Fan, ZhijuX" Subject: Re: [edk2-devel] Edk2 BaseTools Patches. Thread-Topic: [edk2-devel] Edk2 BaseTools Patches. Thread-Index: AdUWjQt6T2cDiXJSSJG3vQ9oXBf1If//88EAgABTOQD//3BK4IAAtJcAgAAZxQCAADg4gIAAFuqAgAATX4D//1lX0A== Date: Fri, 31 May 2019 02:07:42 +0000 Message-ID: <08650203BA1BD64D8AD9B6D5D74A85D16012CBB6@SHSMSX101.ccr.corp.intel.com> References: <08650203BA1BD64D8AD9B6D5D74A85D160128393@SHSMSX101.ccr.corp.intel.com> <20190530092802.7belyzgxdd76ps2v@bivouac.eciton.net> <3A7DCC9A944C6149BF832E1C9B718ABC01F24E6B@ORSMSX112.amr.corp.intel.com> <08650203BA1BD64D8AD9B6D5D74A85D1601296DA@SHSMSX101.ccr.corp.intel.com> <20190530163754.shb54x46euzszpza@bivouac.eciton.net> <9DB7F8038713D946B98D79CA523B7F95E968B5E5@ORSMSX121.amr.corp.intel.com> <9DB7F8038713D946B98D79CA523B7F95E968B751@ORSMSX121.amr.corp.intel.com> In-Reply-To: <9DB7F8038713D946B98D79CA523B7F95E968B751@ORSMSX121.amr.corp.intel.com> Accept-Language: zh-CN, en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.239.127.40] MIME-Version: 1.0 Return-Path: bob.c.feng@intel.com Content-Language: en-US Content-Type: multipart/alternative; boundary="_000_08650203BA1BD64D8AD9B6D5D74A85D16012CBB6SHSMSX101ccrcor_" --_000_08650203BA1BD64D8AD9B6D5D74A85D16012CBB6SHSMSX101ccrcor_ Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 VGhhbmtzIGZvciB5b3VyIGNvbW1lbnRzLg0KDQpJ4oCZbGwgcHVzaCB0aGUgYmVsb3cgMiBwYXRj aGVzLg0KW1BBVENIIHYzIDEvMV0gQmFzZVRvb2xzOkV4dGVuZCB0aGUgYmluYXJ5IGNhY2hlIHRv IHN1cHBvcnQgbGlicmFyeSBjYWNoZQ0KW1BBVENIXSBCYXNlVG9vbHM6VXBkYXRlIGJpbmFyeSBj YWNoZSByZXN0b3JlIHRpbWUgdG8gY3VycmVudCB0aW1lDQoNCg0KSSBoYXZlIG5vIHN0cm9uZyBq dXN0aWZpY2F0aW9uIHRvIHB1c2ggdGhpcyBwYXRjaCBpbiB0aGlzIHN0YWJsZSB0YWcuIEnigJls bCBwdXNoIGl0IGFmdGVyIHRoZSB0YWcuDQpbUEFUQ0ggVjVdIEJhc2VUb29sczpNYWtlIEJhc2VU b29scyBzdXBwb3J0IG5ldyBydWxlcyB0byBnZW5lcmF0ZSBSQVcNCkZGUyBGSUxFDQoNCknigJls bCBwdXNoIHRoZXNlIDIgcGF0Y2hlcyBhZnRlciB0aGUgdGFnIGFsc28uDQpbUGF0Y2ggVjQgMi8y XSBCYXNlVG9vbHM6IFJlZmFjdG9yIGhhc2ggdHJhY2tpbmcgYWZ0ZXIgY2hlY2tpbmcgZm9yIFNv dXJjZXMgc2VjdGlvbg0KW1BhdGNoIFY0IDEvMl0gQmFzZVRvb2xzOiBBZGQgYSBjaGVja2luZyBm b3IgU291cmNlcyBzZWN0aW9uIGluIElORiBmaWxlDQoNClRoYW5rcywNCkJvYg0KRnJvbTogSm9o bnNvbiwgTWljaGFlbA0KU2VudDogRnJpZGF5LCBNYXkgMzEsIDIwMTkgODowMyBBTQ0KVG86IGRl dmVsQGVkazIuZ3JvdXBzLmlvOyBhZmlzaEBhcHBsZS5jb20NCkNjOiBMZWlmIExpbmRob2xtIDxs ZWlmLmxpbmRob2xtQGxpbmFyby5vcmc+OyBGZW5nLCBCb2IgQyA8Ym9iLmMuZmVuZ0BpbnRlbC5j b20+OyBSb2RyaWd1ZXosIENocmlzdGlhbiA8Y2hyaXN0aWFuLnJvZHJpZ3VlekBpbnRlbC5jb20+ OyBMYXN6bG8gRXJzZWsgPGxlcnNla0ByZWRoYXQuY29tPjsgS2lubmV5LCBNaWNoYWVsIEQgPG1p Y2hhZWwuZC5raW5uZXlAaW50ZWwuY29tPjsgR2FvLCBMaW1pbmcgPGxpbWluZy5nYW9AaW50ZWwu Y29tPjsgU2hpLCBTdGV2ZW4gPHN0ZXZlbi5zaGlAaW50ZWwuY29tPjsgRmFuLCBaaGlqdVggPHpo aWp1eC5mYW5AaW50ZWwuY29tPg0KU3ViamVjdDogUkU6IFtlZGsyLWRldmVsXSBFZGsyIEJhc2VU b29scyBQYXRjaGVzLg0KDQpBbmRyZXcsDQoNCldoYXQgYWJvdXQgdGhlIGZvcmNlIGluY2x1ZGUg b2YgQXV0b0dlbi5oPw0KDQpBdXRvR2VuLmggKGFuZCAuYykgaGF2ZSBjb250ZW50cyB3aGljaCBh cmUgZGV0ZXJtaW5lZCBieSB2YXJpb3VzIG1ldGFkYXRhIGxpa2UgUENEIHZhbHVlcyBvciBpdGVt cyBsaXN0ZWQgaW4gdGhlIElORi4gIFRoZSBzb3VyY2VzIGFuZCBkZXBlbmRlbmNpZXMgY2Fu4oCZ dCBiZSBpbnZvbHZlZCwgc2luY2UgdGhvc2UgYXJlbuKAmXQga25vd24gdW50aWwgYWZ0ZXIgdGhl IGF1dG9nZW4gZmlsZXMgYXJlIGFscmVhZHkgY29tcGxldGUuICBUaGUgYnVpbGQgY2FsbHMgZ2Vu YyBiZWZvcmUgZ2VubWFrZS4gIFRoZSBoYXNoIGFjY291bnRzIGZvciB0aG9zZSBieSBpbmNvcnBv cmF0aW5nIHRoZSBtZXRhZGF0YSBpdHNlbGYsIHJhdGhlciB0aGFuIHRoZSBhdXRvZ2VuZXJhdGVk IGZpbGVzLg0KDQpJZiB0aGVyZSBpcyBhIHJ1bGUgdGhlIHRvb2xzIHNob3VsZCBlbmZvcmNlIHRo ZSBydWxlIHdpdGggZ29vZCBlcnJvciBtZXNzYWdlcy4NCg0KRm9yIHRoZSBjYXNlIG9mIHRoZSBi dWlsZCBoYXNoIGZlYXR1cmUsIHdlIGhhdmUgYW4gRWRrTG9nZ2VyLndhcm4gaW4gdGhlc2UgcGF0 Y2hlcy4gIEludmFsaWRhdGluZyB0aGUgaGFzaCBhbGxvd3MgdGhlIGJ1aWxkIHRvIGNvbnRpbnVl IHdpdGggdXAtdG8tZGF0ZSBtb2R1bGVzIGJ5IHNlbmRpbmcgdGhlIG1vZHVsZSBiYWNrIHRvIHRo ZSByZWd1bGFyIGJ1aWxkIHByb2Nlc3MsIGFuZCB0aGUgbWVzc2FnZSBpbmZvcm1zIHRoZSB1c2Vy IG9mIHdoYXQgd2UgZm91bmQuDQoNCg0KU2luY2UgdGhlIHBvaW50IG9mIHRoZSBmZWF0dXJlIGlz IHRvIHNwZWVkIHVwIGJ1aWxkcywgSSB0aGluayB0aGlzIGlzIHJpZ2h0LiAgSWYgd2UgaW5zdGVh ZCBzdG9wcGVkIHRoZSBidWlsZCwgd2hlbiB3aXRob3V0IC0taGFzaCBpdCB3b3VsZOKAmXZlIGNv bXBsZXRlZCBzdWNjZXNzZnVsbHksIHRoZW4gd2XigJl2ZSBtYWRlIGEgbW9yZSByZXN0cmljdGVk IGJ1aWxkIHRoYXTigJlzIGxlc3MgdXNlZnVsLCByYXRoZXIgdGhhbiBnaXZpbmcgdGhlIGV4aXN0 aW5nIGZ1bmN0aW9uYWxpdHkgYSBzcGVlZCBib29zdCB2aWEgY2FjaGluZy4gIEnigJltIG5vdCBh Z2FpbnN0IGJyb2FkZW5pbmcgdGhlIHVzZSBvZiB0aGlzIGNoZWNrIHRvIHJlZ3VsYXIgYnVpbGRz LCBidXQgdGhhdCBoYXMgdW5hbnN3ZXJlZCBxdWVzdGlvbnMgYW5kIGl0cyBvdXRzaWRlIHRoZSBz Y29wZSBvZiB0aGUgQlpzIHRhcmdldGVkIGJ5IHRoZXNlIHBhdGNoZXMuICBEbyB3ZSB3YW50IHRv IGNoZWNrIGZvciB0aGlzIGNvbmRpdGlvbiBvbiBldmVyeSBidWlsZCBhbmQgbG9nIHdoZW4gd2Ug c2VlIGl0PyAgRG8gd2Ugd2FudCBhbiBvcHRpb25hbCBidWlsZCBmbGFnIGZvciBpdD8gIFNob3Vs ZCBhbm90aGVyIGZsYWcgY2F1c2UgYSBoYWx0IGFuZCBnaXZlIGFuIGVycm9yLCBtYXliZSBzb21l dGhpbmcgbGlrZSDigJwtLXN0cmljdOKAnSB3aGljaCBjb3VsZCBjaGVjayBmb3Igb3RoZXIgc3Bl YyB2aW9sYXRpbmcgY29uZGl0aW9ucyBhcyB3ZWxsPyAgSXQgdHVybnMgaW50byBhIHdob2xlIGZl YXR1cmUgb2YgaXRzIG93biwgd2l0aCBjb25zaWRlcmFibHkgaGlnaGVyIGltcGFjdCBzaW5jZSAq bWFueSogY29kZWJhc2VzIGluIHRoZSB3aWxkIGhhdmUgbm9uLWNvbXBsaWFudCBtb2R1bGVzIHNw cmlua2xlZCB0aHJvdWdob3V0Lg0KDQpJIHRoaW5rIExlaWYgYW5kIEkgYXJlIGJvdGggY29uY2Vy bmVkIGFib3V0IGhhdmluZyB0d28gd2F5cyB0byBkbyBzb21ldGhpbmcgYXMgY29tcGxleCBhcyBt YWtlIGRlcGVuZGVuY2llcywgYXMgdGhleSByaXNrIGdldHRpbmcgb3V0IG9mIHBoYXNlLCBvciBi cmVha2luZyBkaWZmZXJlbnQgd2F5cyAobGlrZSBmb2xsb3dpbmcgdGhlIC5oIHJ1bGVzIGluIHRo ZSBJTkYgRmlsZSkuDQoNCkkgdW5kZXJzdGFuZCB0aGUgY29uY2Vybi4gIE9uZSBwb3NpdGl2ZSB0 aGluZyBhYm91dCB0aGUgb3Zlcmx5IGJyb2FkIG5hdHVyZSBvZiBoYXNoaW5nIGFsbCBwb3NzaWJs ZSBsZWdhbCBpbmNsdWRlcyBhbmQgYWxsIGNvbXBpbGVyIGZsYWdzIGFuZCBhbGwgZXRjIGV0YyBp cyB0aGF0IHdlIGRvbuKAmXQgbmVlZCB0byBjYXJyeSBtdWNoIHVuZGVyc3RhbmRpbmcgb3IgY29t cGxleGl0eS4gIFdlIGp1c3QgaGFzaCDigJhhbGwgdGhlIGlucHV0c+KAmSBhbmQgZG9u4oCZdCBi b3RoZXIgbG9va2luZyBhbnkgZGVlcGVyLiAgRnVydGhlciwgd2hlbiB0aGUgaGFzaCBvZiBhIG1v ZHVsZSBjaGFuZ2VzLCBpdCBkcm9wcyBiYWNrIHRvIHRoZSByZWd1bGFyIHBhdGggYW5kIHRoZSBv cmRpbmFyeSBidWlsZC9za2lwIGRlY2lzaW9uIGlzIG1hZGUgZXhhY3RseSBhcyBpdCB3b3VsZCBi ZSBpbiBhIHJlZ3VsYXIgYnVpbGQuICBJIHRoaW5rIHRoaXMgaXMgc2ltcGxlIGVub3VnaCB0byBu b3QgYmUgKHRvbykgdHJvdWJsaW5nLg0KDQpBdCBzb21lIHBvaW50IHJlZmFjdG9yaW5nIHRoZSBi dWlsZCBzeXN0ZW0gZnJvbSB0aGUgdG9wIG1pZ2h0IGJlIHRoZSByaWdodCBhcHByb2FjaC4NCg0K QWdyZWVkLiAgVGhlIGJ1aWxkIHRvb2xzIGFyZSBjcml0aWNhbCBhbmQgY291bGQgdXNlIG1vcmUg YXR0ZW50aW9uLiAgTWF5YmUgc29tZWRheeKApg0KDQotTWljaGFlbA0KDQpGcm9tOiBkZXZlbEBl ZGsyLmdyb3Vwcy5pbzxtYWlsdG86ZGV2ZWxAZWRrMi5ncm91cHMuaW8+IFttYWlsdG86ZGV2ZWxA ZWRrMi5ncm91cHMuaW9dIE9uIEJlaGFsZiBPZiBBbmRyZXcgRmlzaCB2aWEgR3JvdXBzLklvDQpT ZW50OiBUaHVyc2RheSwgTWF5IDMwLCAyMDE5IDM6NTMgUE0NClRvOiBkZXZlbEBlZGsyLmdyb3Vw cy5pbzxtYWlsdG86ZGV2ZWxAZWRrMi5ncm91cHMuaW8+OyBKb2huc29uLCBNaWNoYWVsIDxtaWNo YWVsLmpvaG5zb25AaW50ZWwuY29tPG1haWx0bzptaWNoYWVsLmpvaG5zb25AaW50ZWwuY29tPj4N CkNjOiBMZWlmIExpbmRob2xtIDxsZWlmLmxpbmRob2xtQGxpbmFyby5vcmc8bWFpbHRvOmxlaWYu bGluZGhvbG1AbGluYXJvLm9yZz4+OyBGZW5nLCBCb2IgQyA8Ym9iLmMuZmVuZ0BpbnRlbC5jb208 bWFpbHRvOmJvYi5jLmZlbmdAaW50ZWwuY29tPj47IFJvZHJpZ3VleiwgQ2hyaXN0aWFuIDxjaHJp c3RpYW4ucm9kcmlndWV6QGludGVsLmNvbTxtYWlsdG86Y2hyaXN0aWFuLnJvZHJpZ3VlekBpbnRl bC5jb20+PjsgTGFzemxvIEVyc2VrIDxsZXJzZWtAcmVkaGF0LmNvbTxtYWlsdG86bGVyc2VrQHJl ZGhhdC5jb20+PjsgS2lubmV5LCBNaWNoYWVsIEQgPG1pY2hhZWwuZC5raW5uZXlAaW50ZWwuY29t PG1haWx0bzptaWNoYWVsLmQua2lubmV5QGludGVsLmNvbT4+OyBHYW8sIExpbWluZyA8bGltaW5n Lmdhb0BpbnRlbC5jb208bWFpbHRvOmxpbWluZy5nYW9AaW50ZWwuY29tPj47IFNoaSwgU3RldmVu IDxzdGV2ZW4uc2hpQGludGVsLmNvbTxtYWlsdG86c3RldmVuLnNoaUBpbnRlbC5jb20+PjsgRmFu LCBaaGlqdVggPHpoaWp1eC5mYW5AaW50ZWwuY29tPG1haWx0bzp6aGlqdXguZmFuQGludGVsLmNv bT4+DQpTdWJqZWN0OiBSZTogW2VkazItZGV2ZWxdIEVkazIgQmFzZVRvb2xzIFBhdGNoZXMuDQoN Cg0KT24gTWF5IDMwLCAyMDE5LCBhdCAyOjMxIFBNLCBKb2huc29uLCBNaWNoYWVsIDxtaWNoYWVs LmpvaG5zb25AaW50ZWwuY29tPG1haWx0bzptaWNoYWVsLmpvaG5zb25AaW50ZWwuY29tPj4gd3Jv dGU6DQoNCkFsbCwNCg0KVGhlc2UgcGF0Y2hlcyBhcmUgbm90IHJlcXVpcmVkIGZvciB0aGUgc3Rh YmxlIHRhZy4gIFRoZXnigJlyZSBpbXByb3ZlbWVudHMgbmVlZGVkIHRvIGVuYWJsZSByZWxhdGl2 ZWx5IG5ldyBidWlsZCBvcHRpb25zIHRoYXQgYXJlIG5vdCB5ZXQgd2lkZWx5IHVzZWQuDQoNClRo YXQgc2FpZCwgbGV0IG1lIHRyeSB0byBjbGVhciB0aGUgYWlyIGhlcmUgYWJvdXQgd2hhdCBpcyBo YXBwZW5pbmcgcmVnYXJkaW5nIHRoZSBzb3VyY2VzL2luY2x1ZGVzIGFuZCB3aGF0IGNoYW5nZXMg d2l0aCB0aGVzZSBwYXRjaGVzLg0KDQpUaGUgSU5GIHNwZWMgKHNlY3Rpb24gMy45PGh0dHBzOi8v ZWRrMi1kb2NzLmdpdGJvb2tzLmlvL2Vkay1paS1pbmYtc3BlY2lmaWNhdGlvbi9jb250ZW50L3Yv cmVsZWFzZS8xLjI3LzNfZWRrX2lpX2luZl9maWxlX2Zvcm1hdC8zOV8lNWJzb3VyY2VzJTVkX3Nl Y3Rpb25zLmh0bWw+KSBzYXlzIHRoYXQgYWxsIGxvY2FsIHNvdXJjZSBmaWxlcywgaW5jbHVkaW5n IC5oIGZpbGVzLCBtdXN0IGJlIGluY2x1ZGVkIGluIHRoZSBzb3VyY2VzIHNlY3Rpb24uICBUaGlz IG1lYW5zIGEgbW9kdWxlIGlzIG5vdCBjb21wbGlhbnQgaWYgaXQgaW5jbHVkZXMgYSBoZWFkZXIg ZmlsZSBmcm9tIGEgZGlyZWN0b3J5IG90aGVyIHRoYW4gYSBwYWNrYWdlIGluY2x1ZGUgZGlyZWN0 b3J5IGFuZCBmYWlscyB0byBsaXN0IGl0IGluIGl0cyBzb3VyY2VzIHNlY3Rpb24uICBXZeKAmXJl IGFscmVhZHkgZ2VuZXJhdGluZyBhIGhhc2ggd2hpY2ggaXMgZ3VhcmFudGVlZCB0byBjaGFuZ2Ug d2hlbmV2ZXIgdGhlIG1vZHVsZeKAmXMgc291cmNlIGNoYW5nZXMgLSB3aXRob3V0IGludm9raW5n IG1rZGVwIC0gYnkgaGFzaGluZyBlYWNoIGZpbGUgZnJvbSB0aGUgc291cmNlcyBzZWN0aW9uIGFz IHdlbGwgYXMgKmFsbCogdGhlIGNvbnRlbnRzIG9mIGV2ZXJ5IGluY2x1ZGUgZm9sZGVyIGJlbG9u Z2luZyB0byBlYWNoIHBhY2thZ2UgdGhhdCB0aGUgbW9kdWxlIGlzIGRlcGVuZGVudCBvbi4NCg0K RXZlcnkgcG9zc2libGUg4oCYbGVnYWxseeKAmSBpbmNsdWRlZCBoZWFkZXIgd2lsbCBjaGFuZ2Ug dGhlIGhhc2gsDQoNCk1pY2hhZWwsDQoNCldoYXQgYWJvdXQgdGhlIGZvcmNlIGluY2x1ZGUgb2Yg QXV0b0dlbi5oPw0KDQpidXQgdGhlIGhhc2hlcyBvZiBub24tY29tcGxpYW50IG1vZHVsZXMgd2ls bCBub3QgY2hhbmdlIHdoZW4gdGhlaXIg4oCYaWxsZWdhbGx54oCZIGluY2x1ZGVkIGhlYWRlcnMg Y2hhbmdlIGFuZCB3ZSB3aWxsIGluY29ycmVjdGx5IHJlLXVzZSBzdGFsZSBjYWNoZWQgYmluYXJp ZXMuICBUbyBwcmV2ZW50IHRoaXMsIHRoZSBiZWxvdyBwYXRjaGVzIGNoZWNrIGZvciBjb21wbGlh bmNlIGFuZCBpbnZhbGlkYXRlIHRoZSBoYXNoIG9mIGFueSBub24tY29tcGxpYW50IG1vZHVsZS4g IEluIHRoaXMgd2F5LCBub24tY29tcGxpYW5jZSBpcyBuZWl0aGVyIHN1cHBvcnRlZCBub3IgYWxs b3dlZCB0byBwb2lzb24gdGhlIGNhY2hlLg0KDQoNCklmIHRoZXJlIGlzIGEgcnVsZSB0aGUgdG9v bHMgc2hvdWxkIGVuZm9yY2UgdGhlIHJ1bGUgd2l0aCBnb29kIGVycm9yIG1lc3NhZ2VzLg0KDQpB Z2Fpbiwgc2luY2UgdGhpcyBvbmx5IGhhcyBhbiBlZmZlY3Qgb24gYnVpbGRzIHdoaWNoIGhhdmUg ZW5hYmxlZCB0aGlzIHJlbGF0aXZlbHkgbmV3IGZlYXR1cmUsIEkgZG9u4oCZdCBleHBlY3QgYW55 IHByb2R1Y3Rpb24gaW1wYWN0IGlmIHRoZSBzdGFibGUgdGFnIGRvZXNu4oCZdCB0YWtlIHRoZXNl IHBhdGNoZXMuICBOb2JvZHkgaXMgdXNpbmcgaXQgeWV0Lg0KDQoNCkkgdGhpbmsgTGVpZiBhbmQg SSBhcmUgYm90aCBjb25jZXJuZWQgYWJvdXQgaGF2aW5nIHR3byB3YXlzIHRvIGRvIHNvbWV0aGlu ZyBhcyBjb21wbGV4IGFzIG1ha2UgZGVwZW5kZW5jaWVzLCBhcyB0aGV5IHJpc2sgZ2V0dGluZyBv dXQgb2YgcGhhc2UsIG9yIGJyZWFraW5nIGRpZmZlcmVudCB3YXlzIChsaWtlIGZvbGxvd2luZyB0 aGUgLmggcnVsZXMgaW4gdGhlIElORiBGaWxlKS4NCg0KQWxzbyBJIHVuZGVyc3RhbmQgc29tZSB0 aW1lcyB3ZSBoaXQgY2lyY3VsYXIgZGVwZW5kZW5jaWVzIGFuZCB0aGF0IGZvcmNlcyBkdXBsaWNh dGlvbi4gSXQgd291bGQgYmUgZ29vZCBpbiBnZW5lcmFsIHRvIHRyeSBhbmQgbWFrZSBhIGxpc3Qg b2YgdGhlc2Uga2luZCBvZiBjaXJjdWxhciBkZXBlbmRlbmNpZXMsIGdpdmVuIHRoZXkgbWF5IGJl ZW4gY2F1c2VkIGJ5IGEgZmF1bHR5IGhpZ2ggbGV2ZWwgZGVzaWduIGRlY2lzaW9uIG1hZGUgbG9u ZyBhZ28uIEF0IHNvbWUgcG9pbnQgcmVmYWN0b3JpbmcgdGhlIGJ1aWxkIHN5c3RlbSBmcm9tIHRo ZSB0b3AgbWlnaHQgYmUgdGhlIHJpZ2h0IGFwcHJvYWNoLg0KDQpUaGFua3MsDQoNCkFuZHJldyBG aXNoDQoNCg0KLU1pY2hhZWwNCg0KDQpGcm9tOiBkZXZlbEBlZGsyLmdyb3Vwcy5pbzxtYWlsdG86 ZGV2ZWxAZWRrMi5ncm91cHMuaW8+IFttYWlsdG86ZGV2ZWxAZWRrMi5ncm91cHMuaW9dIE9uIEJl aGFsZiBPZiBBbmRyZXcgRmlzaCB2aWEgR3JvdXBzLklvDQpTZW50OiBUaHVyc2RheSwgTWF5IDMw LCAyMDE5IDExOjEwIEFNDQpUbzogZGV2ZWxAZWRrMi5ncm91cHMuaW88bWFpbHRvOmRldmVsQGVk azIuZ3JvdXBzLmlvPjsgTGVpZiBMaW5kaG9sbSA8bGVpZi5saW5kaG9sbUBsaW5hcm8ub3JnPG1h aWx0bzpsZWlmLmxpbmRob2xtQGxpbmFyby5vcmc+Pg0KQ2M6IEZlbmcsIEJvYiBDIDxib2IuYy5m ZW5nQGludGVsLmNvbTxtYWlsdG86Ym9iLmMuZmVuZ0BpbnRlbC5jb20+PjsgUm9kcmlndWV6LCBD aHJpc3RpYW4gPGNocmlzdGlhbi5yb2RyaWd1ZXpAaW50ZWwuY29tPG1haWx0bzpjaHJpc3RpYW4u cm9kcmlndWV6QGludGVsLmNvbT4+OyBMYXN6bG8gRXJzZWsgPGxlcnNla0ByZWRoYXQuY29tPG1h aWx0bzpsZXJzZWtAcmVkaGF0LmNvbT4+OyBLaW5uZXksIE1pY2hhZWwgRCA8bWljaGFlbC5kLmtp bm5leUBpbnRlbC5jb208bWFpbHRvOm1pY2hhZWwuZC5raW5uZXlAaW50ZWwuY29tPj47IEdhbywg TGltaW5nIDxsaW1pbmcuZ2FvQGludGVsLmNvbTxtYWlsdG86bGltaW5nLmdhb0BpbnRlbC5jb20+ PjsgU2hpLCBTdGV2ZW4gPHN0ZXZlbi5zaGlAaW50ZWwuY29tPG1haWx0bzpzdGV2ZW4uc2hpQGlu dGVsLmNvbT4+OyBGYW4sIFpoaWp1WCA8emhpanV4LmZhbkBpbnRlbC5jb208bWFpbHRvOnpoaWp1 eC5mYW5AaW50ZWwuY29tPj4NClN1YmplY3Q6IFJlOiBbZWRrMi1kZXZlbF0gRWRrMiBCYXNlVG9v bHMgUGF0Y2hlcy4NCg0KDQoNCg0KT24gTWF5IDMwLCAyMDE5LCBhdCA5OjM3IEFNLCBMZWlmIExp bmRob2xtIDxsZWlmLmxpbmRob2xtQGxpbmFyby5vcmc8bWFpbHRvOmxlaWYubGluZGhvbG1AbGlu YXJvLm9yZz4+IHdyb3RlOg0KDQpUaGFua3MgQm9iLCBDaHJpc3RpYW4sDQoNCk9uIFRodSwgTWF5 IDMwLCAyMDE5IGF0IDAzOjA2OjQ4UE0gKzAwMDAsIEZlbmcsIEJvYiBDIHdyb3RlOg0KDQpUaGFu a3MgQ2hyaXN0aWFuLiBJIGFkZCBzb21lIHNob3J0IGRlc2NyaXB0aW9uIGZvciB0aGUgcGF0Y2hl cy4NCg0KVGhlc2UgNSBwYXRjaGVzIGFyZSBhbGwgZm9yIGJpbmFyeSBjYWNoZSBmZWF0dXJlLg0K DQpbUGF0Y2ggVjQgMi8yXSBCYXNlVG9vbHM6IFJlZmFjdG9yIGhhc2ggdHJhY2tpbmcgYWZ0ZXIg Y2hlY2tpbmcgZm9yIFNvdXJjZXMgc2VjdGlvbg0KW1BhdGNoIFY0IDEvMl0gQmFzZVRvb2xzOiBB ZGQgYSBjaGVja2luZyBmb3IgU291cmNlcyBzZWN0aW9uIGluIElORiBmaWxlDQoNClRoZSBhYm92 ZSAyIHBhdGNoZXMgaXMgdG8gZml4IHRoZSBpc3N1ZSB0aGF0DQpUaGUgIGJ1aWxkIHRvb2wgdXNl cyB0aGUgZmlsZXMgbGlzdCB1bmRlciBbc291cmNlc10gc2VjdGlvbiBvZiBJTkYNCmZpbGUgYXMg YSBpbnB1dCB0byBjYWxjdWxhdGUgYSBtb2R1bGUncyBoYXNoIHZhbHVlLiBCdXQgaW4gc29tZSBJ TkYNCmZpbGVzLCBbc291cmNlc10gZG9lcyBub3QgbGlzdCBhbGwgdGhlICJzb3VyY2UiIGZpbGVz LCBtaXNzaW5nIHNvbWUNCi5oIGZpbGVzLiBQYXRoIDIvMiB1c2UgYW5vdGhlciBtZXRob2QgdG8g Z2V0IGFsbCBzb3VyY2UgZmlsZXMgZm9yIGENCm1vZHVsZSBhbmQgcGF0Y2ggMS8yIGRvIGEgY2hl Y2sgd2hldGhlciBbc291cmNlc10gbGlzdCBhbGwgdGhlDQoic291cmNlIiBmaWxlcy4NCg0KSSds bCBiZSBob25lc3QgLSBiZWNhdXNlIG9mIHRoZSB3aWxkIHZhcmlhbmNlIGluIHdoZXRoZXIgLmgg ZmlsZXMgYXJlDQpsaXN0ZWQgaW4gdGhlIFtzb3VyY2VzXSBzZWN0aW9uIG9mIC5pbmYgZmlsZXMs IEkgaGF2ZSBhbHdheXMgYmVlbg0KdW5zdXJlIGFzIHRvIHdoZXRoZXIgdGhleSB3ZXJlIGp1c3Qg YmVpbmcgaWdub3JlZCAoYW5kIGV4dHJhY3RlZCBvbg0KdGhlIHNpZGUgdmlhIG1rZGVwIG9yIHNp bWlsYXIpLg0KDQoNCkxlaWYsDQoNCkknbSBjb25mdXNlZCB0b28gYXMgeW91IGNhbiBvbmx5IHJl YWxseSBrbm93IHRoZSBzZXQgb2YgaW5jbHVkZSBmaWxlcyBieSBkb2luZyB0aGUgbWtkZXA/DQoN CkkgZG9uJ3Qgc2VlIHRoZSB2YWx1ZSBvZiBoYXNoaW5nIHRoZSBsb2NhbCBpbmNsdWRlIGZpbGVz IGFzIGFueSBpbmNsdWRlIGZpbGUgY2hhbmdlIGluIHRoZSBta2RlcCBwYXRoIHJlcXVpcmVzIHRo ZSBtb2R1bGUgdG8gYmUgcmVjb21waWxlZC4gSXQgc2VlbXMgdG8gbWUgaGF2aW5nIG9uZSBzY2hl bWUgZm9yIGhhc2hpbmcgYW5kIGFudGhlciBmb3VyIGJ1aWxkaW5nIGlzIGdvaW5nIHRvIGNhdXNl IGEgbG90IG9mIHZlcnkgc3VidGxlIGVycm9ycyB0aGF0IGFyZSByZWFsbHkgaGFyZCB0byBkZWJ1 Zy4gV2hlbiB5b3UgaGF2ZSB0aGVzZSBraW5kIG9mIGVycm9ycyBpbiB5b3VyIGJ1aWxkIHN5c3Rl bSB5b3UgdGVhY2ggcGVvcGxlIHRoZXkgYWx3YXlzIG5lZWQgdG8gbWFrZSBjbGVhbiwgc28gdGhl eSBieXBhc3MgdGhlIGhhc2hpbmcgYW5kIGRlcGVuZGVuY3kgY2hlY2tzLg0KDQpTZWVtcyBsaWtl IHdlIG1heSBiZSBmaWdodGluZyB0aGUgbWFrZWZpbGVzIGFnYWluLCBidXQgZnJvbSBhIDEwLDAw MCBwb2ludCBvZiB2aWV3IGl0IHNlZW1zIGxpa2UgdGhlIGRlcGVuZGVuY3kgYWxnb3JpdGhtIGFu ZCB0aGUgaGFzaCBuZWVkIHRvIGJlIHRpZWQgdG9nZXRoZXIuIFNlZW1zIGxpa2UgdGhlIG1ha2Vm aWxlIGFscmVhZHkga25vd3MgaWYgaXQgbmVlZHMgdG8gYnVpbGQgaXQsIGJ1dCBJJ20gbm90IHN1 cmUgaWYgdGhlIG1ha2VmaWxlIGNhbiBydW4gYW4gYWN0aW9uIGlmIGl0IGRvZXMgbm90IG5lZWQg dG8gYnVpbGQgc29tZXRoaW5nPw0KDQpUaGFua3MsDQoNCkFuZHJldyBGaXNoDQoNCg0KDQpJZiB0 aGUgaW50ZW50IGlzIHRvIHNwZWVkIHVwIGJ1aWxkIHRpbWUsIHdvdWxkIGl0IG5vdCBiZSBiZXR0 ZXIgdG8NCndhcm4gdGhlIHVzZXIgLSBzbyB0aGV5IG5vdGljZSB0aGUgcHJvYmxlbSBhbmQgZml4 IHRoZWlyIG1vZHVsZXMsDQpyYXRoZXIgdGhhbiBhZGRpbmcgZXh0cmEgcHJvY2Vzc2luZyB0aW1l IG9uIGhhdmluZyB0aGUgdG9vbHMgd29yayB3aXRoDQpicm9rZW4gLmluZiBmaWxlcz8NCg0KVGhp cyBkb2VzIG5vdCBsb29rIGxpa2UgbWF0ZXJpYWwgZm9yIGVkazItc3RhYmxlMjAxOTA1IHRvIG1l Lg0KDQoNCltQQVRDSCB2MyAxLzFdIEJhc2VUb29sczpFeHRlbmQgdGhlIGJpbmFyeSBjYWNoZSB0 byBzdXBwb3J0IGxpYnJhcnkgY2FjaGUNClRoaXMgcGF0Y2ggaXMgdG8gcmVzb2x2ZSB0aGUgcHJv YmxlbSB0aGF0DQpCdWlsZCB0b29sIGRvc2Ugbm90IGNhY2hlIHRoZSBsaWJyYXJ5IGJpbmFyaWVz IG5vdy4gV2hpdGVvdXQgdGhpcw0KcGF0Y2gsIHRoZXJlIGlzIDI1JSBleHRyYSB0aW1lIGNvc3Qg dG8gcmVidWlsZCB0aGUgYWxsIG1vZHVsZQ0KZGVwZW5kZW5jeSBsaWJyYXJpZXMgaWYgY2FjaGUg bWlzcyBoYXBwZW4uDQoNCjI1JSBpcyBhIGJpZyBudW1iZXIsIHNvIEkgd29uJ3QgYXJndWUgYWdh aW5zdCB0aGlzLiBCdXQgSSBhbHNvIHdvbid0DQphcmd1ZSBmb3IgaXQgLSB0aGUgQlogd2FzIHJh aXNlZCB2ZXJ5IGxhdGUgaW4gdGhlIGN5Y2xlLg0KDQoNCltQQVRDSF0gQmFzZVRvb2xzOlVwZGF0 ZSBiaW5hcnkgY2FjaGUgcmVzdG9yZSB0aW1lIHRvIGN1cnJlbnQgdGltZQ0KVGhpcyBwYXRjaCBp cyB0byBtYWtlIHRoZSByZXN0b3JlZCBiaW5hcnkgZmlsZSBoYXZlIHRoZSBjdXJyZW50IHRpbWUN CnN0YW1wIG5vdCB0aGUgYmluYXJ5IGZpbGUgb3JpZ2luYWwgdGltZSBzdGFtcC4NCg0KSSBjYW4g c2VlIGhvdyB0aGUgY3VycmVudCBiZWhhdmlvdXIgY291bGQgY2F1c2UgcHJvYmxlbXMgd2l0aCBz b21lDQpDSS9idWlsZCBzeXN0ZW1zLiBJZiBpdCBpcyBwcm9wZXJseSByZXZpZXdlZCBhbmQgdGVz dGVkLCBJIGFtIE9LIHdpdGgNCnRoaXMgb25lIGdvaW5nIGluIGZvciBlZGsyLXN0YWJsZTIwMTkw My4NCg0KDQpbUEFUQ0ggVjVdIEJhc2VUb29sczpNYWtlIEJhc2VUb29scyBzdXBwb3J0IG5ldyBy dWxlcyB0byBnZW5lcmF0ZSBSQVcgRkZTIEZJTEUNClRoaXMgcGF0Y2ggaXMgdG8gc3VwcG9ydCB0 aGUgcmF3IGZmcyBmaWxlIHJ1bGUuIE5vdyBidWlsZCB0b29sIGRvZXMNCm5vdCBjb3JyZWN0bHkg aGFuZGxlIHRoaXMgY2FzZToNCg0KW1J1bGUuQ29tbW9uLlVTRVJfREVGSU5FRC5NaWNyb0NvZGVd DQogRklMRSBSQVcgPSAkKE5BTUVEX0dVSUQpIHsNCiAgICAgICAgICAgICAgICAkKElORl9PVVRQ VVQpLyQoTU9EVUxFX05BTUUpLmJpbg0KIH0NCg0KVGhpcyBsb29rcyBsaWtlIGEgbmV3IGZlYXR1 cmUgLSBub3Qgc29tZXRoaW5nIHRoYXQgc2hvdWxkIGJ5cGFzcyB0aGUNCmZyZWV6ZSBwZXJpb2Qg Zm9yIGVkazItc3RhYmxlMjAxOTA1Lg0KQ2FuIHlvdSBleHBsYWluIHdoeSB0aGlzIGlzIG5lZWRl ZCBpbiB0aGUgc3RhYmxlIHRhZyBhcyBvcHBvc2VkIHRvDQpiZWluZyBhdmFpbGFibGUgZnJvbSBt YXN0ZXIgdGhlIGRheSBhZnRlciB0aGUgdGFnIGlzIG1hZGU/DQoNCkJlc3QgUmVnYXJkcywNCg0K TGVpZg0KDQoNCg0KDQpUaGFua3MsDQpCb2INCg0KLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0N CkZyb206IFJvZHJpZ3VleiwgQ2hyaXN0aWFuDQpTZW50OiBUaHVyc2RheSwgTWF5IDMwLCAyMDE5 IDEwOjI2IFBNDQpUbzogTGVpZiBMaW5kaG9sbSA8bGVpZi5saW5kaG9sbUBsaW5hcm8ub3JnPG1h aWx0bzpsZWlmLmxpbmRob2xtQGxpbmFyby5vcmc+PjsgRmVuZywgQm9iIEMgPGJvYi5jLmZlbmdA aW50ZWwuY29tPG1haWx0bzpib2IuYy5mZW5nQGludGVsLmNvbT4+DQpDYzogQW5kcmV3IEZpc2gg PGFmaXNoQGFwcGxlLmNvbTxtYWlsdG86YWZpc2hAYXBwbGUuY29tPj47IExhc3psbyBFcnNlayA8 bGVyc2VrQHJlZGhhdC5jb208bWFpbHRvOmxlcnNla0ByZWRoYXQuY29tPj47IEtpbm5leSwgTWlj aGFlbCBEIDxtaWNoYWVsLmQua2lubmV5QGludGVsLmNvbTxtYWlsdG86bWljaGFlbC5kLmtpbm5l eUBpbnRlbC5jb20+PjtkZXZlbEBlZGsyLmdyb3Vwcy5pbzxtYWlsdG86ZGV2ZWxAZWRrMi5ncm91 cHMuaW8+OyBHYW8sIExpbWluZyA8bGltaW5nLmdhb0BpbnRlbC5jb208bWFpbHRvOmxpbWluZy5n YW9AaW50ZWwuY29tPj47IFNoaSwgU3RldmVuIDxzdGV2ZW4uc2hpQGludGVsLmNvbTxtYWlsdG86 c3RldmVuLnNoaUBpbnRlbC5jb20+PjsgRmFuLCBaaGlqdVggPHpoaWp1eC5mYW5AaW50ZWwuY29t PG1haWx0bzp6aGlqdXguZmFuQGludGVsLmNvbT4+DQpTdWJqZWN0OiBSRTogRWRrMiBCYXNlVG9v bHMgUGF0Y2hlcy4NCg0KSGV5IExlaWYsDQoNCkkgdGhvdWdodCBJJ2QgaGVscCBCb2IgYW5kIGdh dGhlciB0aG9zZSBCWnMgZm9yIGVhY2ggdGhyZWFkOg0KDQpbUGF0Y2ggVjQgMS8yXSBCYXNlVG9v bHM6IEFkZCBhIGNoZWNraW5nIGZvciBTb3VyY2VzIHNlY3Rpb24gaW4gSU5GIGZpbGUgW1BhdGNo IFY0IDIvMl0gQmFzZVRvb2xzOiBSZWZhY3RvciBoYXNoIHRyYWNraW5nIGFmdGVyIGNoZWNraW5n IGZvciBTb3VyY2VzIHNlY3Rpb24NCkJaOiBodHRwczovL2J1Z3ppbGxhLnRpYW5vY29yZS5vcmcv c2hvd19idWcuY2dpP2lkPTE4MDQNCg0KW1BBVENIIHYzIDEvMV0gQmFzZVRvb2xzOkV4dGVuZCB0 aGUgYmluYXJ5IGNhY2hlIHRvIHN1cHBvcnQgbGlicmFyeSBjYWNoZQ0KQlo6IGh0dHBzOi8vYnVn emlsbGEudGlhbm9jb3JlLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc5Nw0KDQpbUEFUQ0ggVjVdIEJh c2VUb29sczpNYWtlIEJhc2VUb29scyBzdXBwb3J0IG5ldyBydWxlcyB0byBnZW5lcmF0ZSBSQVcg RkZTIEZJTEUNCkJaOiBodHRwczovL2J1Z3ppbGxhLnRpYW5vY29yZS5vcmcvc2hvd19idWcuY2dp P2lkPTE3NjUNCg0KW1BBVENIXSBCYXNlVG9vbHM6VXBkYXRlIGJpbmFyeSBjYWNoZSByZXN0b3Jl IHRpbWUgdG8gY3VycmVudCB0aW1lDQpCWjogaHR0cHM6Ly9idWd6aWxsYS50aWFub2NvcmUub3Jn L3Nob3dfYnVnLmNnaT9pZD0xNzQyDQoNClRoYW5rcywNCkNocmlzdGlhbg0KDQoNCi0tLS0tT3Jp Z2luYWwgTWVzc2FnZS0tLS0tDQpGcm9tOiBMZWlmIExpbmRob2xtIFttYWlsdG86bGVpZi5saW5k aG9sbUBsaW5hcm8ub3JnXQ0KU2VudDogVGh1cnNkYXksIE1heSAzMCwgMjAxOSAyOjI4IEFNDQpU bzogRmVuZywgQm9iIEMgPGJvYi5jLmZlbmdAaW50ZWwuY29tPG1haWx0bzpib2IuYy5mZW5nQGlu dGVsLmNvbT4+DQpDYzogQW5kcmV3IEZpc2ggPGFmaXNoQGFwcGxlLmNvbTxtYWlsdG86YWZpc2hA YXBwbGUuY29tPj47IExhc3psbyBFcnNlayA8bGVyc2VrQHJlZGhhdC5jb208bWFpbHRvOmxlcnNl a0ByZWRoYXQuY29tPj47DQpLaW5uZXksIE1pY2hhZWwgRCA8bWljaGFlbC5kLmtpbm5leUBpbnRl bC5jb208bWFpbHRvOm1pY2hhZWwuZC5raW5uZXlAaW50ZWwuY29tPj47IGRldmVsQGVkazIuZ3Jv dXBzLmlvPG1haWx0bzpkZXZlbEBlZGsyLmdyb3Vwcy5pbz47DQpHYW8sIExpbWluZyA8bGltaW5n Lmdhb0BpbnRlbC5jb208bWFpbHRvOmxpbWluZy5nYW9AaW50ZWwuY29tPj47IFNoaSwgU3RldmVu IDxzdGV2ZW4uc2hpQGludGVsLmNvbTxtYWlsdG86c3RldmVuLnNoaUBpbnRlbC5jb20+PjsNClJv ZHJpZ3VleiwgQ2hyaXN0aWFuIDxjaHJpc3RpYW4ucm9kcmlndWV6QGludGVsLmNvbTxtYWlsdG86 Y2hyaXN0aWFuLnJvZHJpZ3VlekBpbnRlbC5jb20+PjsgRmFuLCBaaGlqdVgNCjx6aGlqdXguZmFu QGludGVsLmNvbTxtYWlsdG86emhpanV4LmZhbkBpbnRlbC5jb20+Pg0KU3ViamVjdDogUmU6IEVk azIgQmFzZVRvb2xzIFBhdGNoZXMuDQoNCkhpIEJvYiwNCg0KT24gVGh1LCBNYXkgMzAsIDIwMTkg YXQgMDY6Mzk6NTlBTSArMDAwMCwgRmVuZywgQm9iIEMgd3JvdGU6DQoNCkhpLA0KDQpDdXJyZW50 bHksIHdlIGhhdmUgNSBCYXNldG9vbHMgcGF0Y2hlcyB3aGljaCBhcmUgcmVhZHkgdG8gcHVzaC4g U2luY2UNCndlIGFyZSBpbiB0aGUgc29mdC1mcmVlemUgcGhhc2UsIEknZCBsaWtlIHRvIGFzayBm b3IgeW91ciBvcGluaW9ucyBpZg0KdGhvc2UgcGF0Y2hlcyBjYW4gYmUgcHVzaGVkIHRvIGVkazIg bWFzdGVyLg0KDQpUbyBzYXZlIG1lIHRoZSB0aW1lIG9mIHJlYWRpbmcgdGhyb3VnaCBhbGwgdGhl IHRocmVhZHMgYW5kIGdldHRpbmcgdG8NCmdyaXBzIHdpdGggYWxsIHRoZSBjb2RlLCBjb3VsZCB5 b3Ugc3VtbWFyaXNlIHRoZSBwcm9ibGVtIHRoZXNlIHNvbHZlDQphbmQgdGhlIGltcGFjdCBvZiBu b3QgaW5jbHVkaW5nIHRoZXNlPw0KDQpJcyB0aGVyZSBhIEJaPw0KDQpSZWdhcmRzLA0KDQpMZWlm DQoNCg0KDQpUaGVzZSA1IHBhdGNoZXMgYXJlIHRvIGZpeCB0aGUgaXNzdWVzIGZvciB0aGUgYnVp bGQgY2FjaGUgZmVhdHVyZS4NCg0KW1BhdGNoIFY0IDIvMl0gQmFzZVRvb2xzOiBSZWZhY3RvciBo YXNoIHRyYWNraW5nIGFmdGVyIGNoZWNraW5nIGZvcg0KU291cmNlcyBzZWN0aW9uDQpodHRwczov L2VkazIuZ3JvdXBzLmlvL2cvZGV2ZWwvdG9waWMvMzE4MzU1NTYjNDE2NDINCg0KW1BhdGNoIFY0 IDEvMl0gQmFzZVRvb2xzOiBBZGQgYSBjaGVja2luZyBmb3IgU291cmNlcyBzZWN0aW9uIGluIElO Rg0KZmlsZQ0KaHR0cHM6Ly9lZGsyLmdyb3Vwcy5pby9nL2RldmVsL3RvcGljLzMxODM1NTU1IzQx NjQxDQoNCltQQVRDSCB2MyAxLzFdIEJhc2VUb29sczpFeHRlbmQgdGhlIGJpbmFyeSBjYWNoZSB0 byBzdXBwb3J0IGxpYnJhcnkNCmNhY2hlDQpodHRwczovL2VkazIuZ3JvdXBzLmlvL2cvZGV2ZWwv dG9waWMvMzE4NDM1MDUjNDE2NTUNCg0KW1BBVENIIFY1XSBCYXNlVG9vbHM6TWFrZSBCYXNlVG9v bHMgc3VwcG9ydCBuZXcgcnVsZXMgdG8gZ2VuZXJhdGUgUkFXDQpGRlMgRklMRQ0KaHR0cHM6Ly9l ZGsyLmdyb3Vwcy5pby9nL2RldmVsL3RvcGljLzMxODMwODA3IzQxNTcxDQoNCltQQVRDSF0gQmFz ZVRvb2xzOlVwZGF0ZSBiaW5hcnkgY2FjaGUgcmVzdG9yZSB0aW1lIHRvIGN1cnJlbnQgdGltZQ0K aHR0cHM6Ly9lZGsyLmdyb3Vwcy5pby9nL2RldmVsL3RvcGljLzMxODE5NTkwIzQxNDY4DQoNCg0K VGhhbmtzLA0KQm9iDQoNCg0KDQoNCg0K --_000_08650203BA1BD64D8AD9B6D5D74A85D16012CBB6SHSMSX101ccrcor_ Content-Type: text/html; charset="utf-8" Content-Transfer-Encoding: base64 PGh0bWwgeG1sbnM6dj0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTp2bWwiIHhtbG5zOm89InVy bjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOm9mZmljZSIgeG1sbnM6dz0idXJuOnNjaGVt YXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6d29yZCIgeG1sbnM6bT0iaHR0cDovL3NjaGVtYXMubWlj cm9zb2Z0LmNvbS9vZmZpY2UvMjAwNC8xMi9vbW1sIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv VFIvUkVDLWh0bWw0MCI+DQo8aGVhZD4NCjxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIg Y29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04Ij4NCjxtZXRhIG5hbWU9IkdlbmVyYXRv ciIgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgMTUgKGZpbHRlcmVkIG1lZGl1bSkiPg0KPCEtLVtp ZiAhbXNvXT48c3R5bGU+dlw6KiB7YmVoYXZpb3I6dXJsKCNkZWZhdWx0I1ZNTCk7fQ0Kb1w6KiB7 YmVoYXZpb3I6dXJsKCNkZWZhdWx0I1ZNTCk7fQ0Kd1w6KiB7YmVoYXZpb3I6dXJsKCNkZWZhdWx0 I1ZNTCk7fQ0KLnNoYXBlIHtiZWhhdmlvcjp1cmwoI2RlZmF1bHQjVk1MKTt9DQo8L3N0eWxlPjwh W2VuZGlmXS0tPjxzdHlsZT48IS0tDQovKiBGb250IERlZmluaXRpb25zICovDQpAZm9udC1mYWNl DQoJe2ZvbnQtZmFtaWx5OkhlbHZldGljYTsNCglwYW5vc2UtMToyIDExIDUgNCAyIDIgMiAyIDIg NDt9DQpAZm9udC1mYWNlDQoJe2ZvbnQtZmFtaWx5OlNpbVN1bjsNCglwYW5vc2UtMToyIDEgNiAw IDMgMSAxIDEgMSAxO30NCkBmb250LWZhY2UNCgl7Zm9udC1mYW1pbHk6IkNhbWJyaWEgTWF0aCI7 DQoJcGFub3NlLTE6MiA0IDUgMyA1IDQgNiAzIDIgNDt9DQpAZm9udC1mYWNlDQoJe2ZvbnQtZmFt aWx5OkNhbGlicmk7DQoJcGFub3NlLTE6MiAxNSA1IDIgMiAyIDQgMyAyIDQ7fQ0KQGZvbnQtZmFj ZQ0KCXtmb250LWZhbWlseToiXEBTaW1TdW4iOw0KCXBhbm9zZS0xOjIgMSA2IDAgMyAxIDEgMSAx IDE7fQ0KLyogU3R5bGUgRGVmaW5pdGlvbnMgKi8NCnAuTXNvTm9ybWFsLCBsaS5Nc29Ob3JtYWws IGRpdi5Nc29Ob3JtYWwNCgl7bWFyZ2luOjBpbjsNCgltYXJnaW4tYm90dG9tOi4wMDAxcHQ7DQoJ Zm9udC1zaXplOjEyLjBwdDsNCglmb250LWZhbWlseToiVGltZXMgTmV3IFJvbWFuIixzZXJpZjt9 DQphOmxpbmssIHNwYW4uTXNvSHlwZXJsaW5rDQoJe21zby1zdHlsZS1wcmlvcml0eTo5OTsNCglj b2xvcjpibHVlOw0KCXRleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7fQ0KYTp2aXNpdGVkLCBzcGFu Lk1zb0h5cGVybGlua0ZvbGxvd2VkDQoJe21zby1zdHlsZS1wcmlvcml0eTo5OTsNCgljb2xvcjpw dXJwbGU7DQoJdGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTt9DQpwLk1zb1BsYWluVGV4dCwgbGku TXNvUGxhaW5UZXh0LCBkaXYuTXNvUGxhaW5UZXh0DQoJe21zby1zdHlsZS1wcmlvcml0eTo5OTsN Cgltc28tc3R5bGUtbGluazoiUGxhaW4gVGV4dCBDaGFyIjsNCgltYXJnaW46MGluOw0KCW1hcmdp bi1ib3R0b206LjAwMDFwdDsNCglmb250LXNpemU6MTEuMHB0Ow0KCWZvbnQtZmFtaWx5OiJDYWxp YnJpIixzYW5zLXNlcmlmO30NCnANCgl7bXNvLXN0eWxlLXByaW9yaXR5Ojk5Ow0KCW1zby1tYXJn aW4tdG9wLWFsdDphdXRvOw0KCW1hcmdpbi1yaWdodDowaW47DQoJbXNvLW1hcmdpbi1ib3R0b20t YWx0OmF1dG87DQoJbWFyZ2luLWxlZnQ6MGluOw0KCWZvbnQtc2l6ZToxMi4wcHQ7DQoJZm9udC1m YW1pbHk6IlRpbWVzIE5ldyBSb21hbiIsc2VyaWY7fQ0Kc3Bhbi5QbGFpblRleHRDaGFyDQoJe21z by1zdHlsZS1uYW1lOiJQbGFpbiBUZXh0IENoYXIiOw0KCW1zby1zdHlsZS1wcmlvcml0eTo5OTsN Cgltc28tc3R5bGUtbGluazoiUGxhaW4gVGV4dCI7DQoJZm9udC1mYW1pbHk6IkNhbGlicmkiLHNh bnMtc2VyaWY7fQ0Kc3Bhbi5hcHBsZS1jb252ZXJ0ZWQtc3BhY2UNCgl7bXNvLXN0eWxlLW5hbWU6 YXBwbGUtY29udmVydGVkLXNwYWNlO30NCnNwYW4uRW1haWxTdHlsZTIxDQoJe21zby1zdHlsZS10 eXBlOnBlcnNvbmFsOw0KCWZvbnQtZmFtaWx5OiJDYWxpYnJpIixzYW5zLXNlcmlmOw0KCWNvbG9y OiMxRjQ5N0Q7fQ0Kc3Bhbi5FbWFpbFN0eWxlMjINCgl7bXNvLXN0eWxlLXR5cGU6cGVyc29uYWw7 DQoJZm9udC1mYW1pbHk6IkNhbGlicmkiLHNhbnMtc2VyaWY7DQoJY29sb3I6d2luZG93dGV4dDt9 DQpzcGFuLkVtYWlsU3R5bGUyMw0KCXttc28tc3R5bGUtdHlwZTpwZXJzb25hbC1yZXBseTsNCglm b250LWZhbWlseToiQ2FsaWJyaSIsc2Fucy1zZXJpZjsNCgljb2xvcjojMUY0OTdEO30NCi5Nc29D aHBEZWZhdWx0DQoJe21zby1zdHlsZS10eXBlOmV4cG9ydC1vbmx5Ow0KCWZvbnQtc2l6ZToxMC4w cHQ7fQ0KQHBhZ2UgV29yZFNlY3Rpb24xDQoJe3NpemU6OC41aW4gMTEuMGluOw0KCW1hcmdpbjox LjBpbiAxLjBpbiAxLjBpbiAxLjBpbjt9DQpkaXYuV29yZFNlY3Rpb24xDQoJe3BhZ2U6V29yZFNl Y3Rpb24xO30NCi0tPjwvc3R5bGU+PCEtLVtpZiBndGUgbXNvIDldPjx4bWw+DQo8bzpzaGFwZWRl ZmF1bHRzIHY6ZXh0PSJlZGl0IiBzcGlkbWF4PSIxMDI2IiAvPg0KPC94bWw+PCFbZW5kaWZdLS0+ PCEtLVtpZiBndGUgbXNvIDldPjx4bWw+DQo8bzpzaGFwZWxheW91dCB2OmV4dD0iZWRpdCI+DQo8 bzppZG1hcCB2OmV4dD0iZWRpdCIgZGF0YT0iMSIgLz4NCjwvbzpzaGFwZWxheW91dD48L3htbD48 IVtlbmRpZl0tLT4NCjwvaGVhZD4NCjxib2R5IGxhbmc9IkVOLVVTIiBsaW5rPSJibHVlIiB2bGlu az0icHVycGxlIj4NCjxkaXYgY2xhc3M9IldvcmRTZWN0aW9uMSI+DQo8cCBjbGFzcz0iTXNvTm9y bWFsIj48c3BhbiBzdHlsZT0iZm9udC1zaXplOjExLjBwdDtmb250LWZhbWlseTomcXVvdDtDYWxp YnJpJnF1b3Q7LHNhbnMtc2VyaWY7Y29sb3I6IzFGNDk3RCI+VGhhbmtzIGZvciB5b3VyIGNvbW1l bnRzLjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiPjxzcGFuIHN0 eWxlPSJmb250LXNpemU6MTEuMHB0O2ZvbnQtZmFtaWx5OiZxdW90O0NhbGlicmkmcXVvdDssc2Fu cy1zZXJpZjtjb2xvcjojMUY0OTdEIj48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQo8cCBj bGFzcz0iTXNvTm9ybWFsIj48c3BhbiBzdHlsZT0iZm9udC1zaXplOjExLjBwdDtmb250LWZhbWls eTomcXVvdDtDYWxpYnJpJnF1b3Q7LHNhbnMtc2VyaWY7Y29sb3I6IzFGNDk3RCI+SeKAmWxsIHB1 c2ggdGhlIGJlbG93IDIgcGF0Y2hlcy48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQo8cCBjbGFzcz0i TXNvTm9ybWFsIj48c3BhbiBzdHlsZT0iZm9udC1zaXplOjExLjBwdDtmb250LWZhbWlseTomcXVv dDtDYWxpYnJpJnF1b3Q7LHNhbnMtc2VyaWY7Y29sb3I6IzFGNDk3RCI+W1BBVENIIHYzIDEvMV0g QmFzZVRvb2xzOkV4dGVuZCB0aGUgYmluYXJ5IGNhY2hlIHRvIHN1cHBvcnQgbGlicmFyeSZuYnNw O2NhY2hlPGJyPg0KW1BBVENIXSBCYXNlVG9vbHM6VXBkYXRlIGJpbmFyeSBjYWNoZSByZXN0b3Jl IHRpbWUgdG8gY3VycmVudCB0aW1lPC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LXNpemU6OS4wcHQ7 Zm9udC1mYW1pbHk6JnF1b3Q7SGVsdmV0aWNhJnF1b3Q7LHNhbnMtc2VyaWYiPjxicj4NCjxicj4N CjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiPjxzcGFuIHN0eWxl PSJmb250LXNpemU6OS4wcHQ7Zm9udC1mYW1pbHk6JnF1b3Q7SGVsdmV0aWNhJnF1b3Q7LHNhbnMt c2VyaWYiPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCjxwIGNsYXNzPSJNc29Ob3JtYWwi PjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTEuMHB0O2ZvbnQtZmFtaWx5OiZxdW90O0NhbGlicmkm cXVvdDssc2Fucy1zZXJpZjtjb2xvcjojMUY0OTdEIj5JIGhhdmUgbm8gc3Ryb25nIGp1c3RpZmlj YXRpb24gdG8gcHVzaCB0aGlzIHBhdGNoIGluIHRoaXMgc3RhYmxlIHRhZy4gSeKAmWxsIHB1c2gg aXQgYWZ0ZXIgdGhlIHRhZy48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQo8cCBjbGFzcz0iTXNvTm9y bWFsIj48c3BhbiBzdHlsZT0iZm9udC1zaXplOjExLjBwdDtmb250LWZhbWlseTomcXVvdDtDYWxp YnJpJnF1b3Q7LHNhbnMtc2VyaWY7Y29sb3I6IzFGNDk3RCI+W1BBVENIIFY1XSBCYXNlVG9vbHM6 TWFrZSBCYXNlVG9vbHMgc3VwcG9ydCBuZXcgcnVsZXMgdG8gZ2VuZXJhdGUgUkFXJm5ic3A7PGJy Pg0KRkZTIEZJTEU8L3NwYW4+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTo5LjBwdDtmb250LWZhbWls eTomcXVvdDtIZWx2ZXRpY2EmcXVvdDssc2Fucy1zZXJpZiI+PGJyPg0KPGJyPg0KPC9zcGFuPjxz cGFuIHN0eWxlPSJmb250LXNpemU6MTEuMHB0O2ZvbnQtZmFtaWx5OiZxdW90O0NhbGlicmkmcXVv dDssc2Fucy1zZXJpZjtjb2xvcjojMUY0OTdEIj48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQo8cCBj bGFzcz0iTXNvTm9ybWFsIj48c3BhbiBzdHlsZT0iZm9udC1zaXplOjExLjBwdDtmb250LWZhbWls eTomcXVvdDtDYWxpYnJpJnF1b3Q7LHNhbnMtc2VyaWY7Y29sb3I6IzFGNDk3RCI+SeKAmWxsIHB1 c2ggdGhlc2UgMiBwYXRjaGVzIGFmdGVyIHRoZSB0YWcgYWxzby48bzpwPjwvbzpwPjwvc3Bhbj48 L3A+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj48c3BhbiBzdHlsZT0iZm9udC1zaXplOjExLjBwdDtm b250LWZhbWlseTomcXVvdDtDYWxpYnJpJnF1b3Q7LHNhbnMtc2VyaWY7Y29sb3I6IzFGNDk3RCI+ W1BhdGNoIFY0IDIvMl0gQmFzZVRvb2xzOiBSZWZhY3RvciBoYXNoIHRyYWNraW5nIGFmdGVyIGNo ZWNraW5nIGZvciZuYnNwO1NvdXJjZXMgc2VjdGlvbjxicj4NCltQYXRjaCBWNCAxLzJdIEJhc2VU b29sczogQWRkIGEgY2hlY2tpbmcgZm9yIFNvdXJjZXMgc2VjdGlvbiBpbiBJTkYmbmJzcDtmaWxl PC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LXNpemU6OS4wcHQ7Zm9udC1mYW1pbHk6JnF1b3Q7SGVs dmV0aWNhJnF1b3Q7LHNhbnMtc2VyaWYiPjxicj4NCjxicj4NCjwvc3Bhbj48c3BhbiBzdHlsZT0i Zm9udC1zaXplOjExLjBwdDtmb250LWZhbWlseTomcXVvdDtDYWxpYnJpJnF1b3Q7LHNhbnMtc2Vy aWY7Y29sb3I6IzFGNDk3RCI+PG86cD48L286cD48L3NwYW4+PC9wPg0KPHAgY2xhc3M9Ik1zb05v cm1hbCI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMS4wcHQ7Zm9udC1mYW1pbHk6JnF1b3Q7Q2Fs aWJyaSZxdW90OyxzYW5zLXNlcmlmO2NvbG9yOiMxRjQ5N0QiPlRoYW5rcyw8bzpwPjwvbzpwPjwv c3Bhbj48L3A+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj48c3BhbiBzdHlsZT0iZm9udC1zaXplOjEx LjBwdDtmb250LWZhbWlseTomcXVvdDtDYWxpYnJpJnF1b3Q7LHNhbnMtc2VyaWY7Y29sb3I6IzFG NDk3RCI+Qm9iPG86cD48L286cD48L3NwYW4+PC9wPg0KPGRpdj4NCjxkaXYgc3R5bGU9ImJvcmRl cjpub25lO2JvcmRlci10b3A6c29saWQgI0UxRTFFMSAxLjBwdDtwYWRkaW5nOjMuMHB0IDBpbiAw aW4gMGluIj4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiPjxiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6 MTEuMHB0O2ZvbnQtZmFtaWx5OiZxdW90O0NhbGlicmkmcXVvdDssc2Fucy1zZXJpZiI+RnJvbTo8 L3NwYW4+PC9iPjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTEuMHB0O2ZvbnQtZmFtaWx5OiZxdW90 O0NhbGlicmkmcXVvdDssc2Fucy1zZXJpZiI+IEpvaG5zb24sIE1pY2hhZWwNCjxicj4NCjxiPlNl bnQ6PC9iPiBGcmlkYXksIE1heSAzMSwgMjAxOSA4OjAzIEFNPGJyPg0KPGI+VG86PC9iPiBkZXZl bEBlZGsyLmdyb3Vwcy5pbzsgYWZpc2hAYXBwbGUuY29tPGJyPg0KPGI+Q2M6PC9iPiBMZWlmIExp bmRob2xtICZsdDtsZWlmLmxpbmRob2xtQGxpbmFyby5vcmcmZ3Q7OyBGZW5nLCBCb2IgQyAmbHQ7 Ym9iLmMuZmVuZ0BpbnRlbC5jb20mZ3Q7OyBSb2RyaWd1ZXosIENocmlzdGlhbiAmbHQ7Y2hyaXN0 aWFuLnJvZHJpZ3VlekBpbnRlbC5jb20mZ3Q7OyBMYXN6bG8gRXJzZWsgJmx0O2xlcnNla0ByZWRo YXQuY29tJmd0OzsgS2lubmV5LCBNaWNoYWVsIEQgJmx0O21pY2hhZWwuZC5raW5uZXlAaW50ZWwu Y29tJmd0OzsgR2FvLCBMaW1pbmcgJmx0O2xpbWluZy5nYW9AaW50ZWwuY29tJmd0OzsNCiBTaGks IFN0ZXZlbiAmbHQ7c3RldmVuLnNoaUBpbnRlbC5jb20mZ3Q7OyBGYW4sIFpoaWp1WCAmbHQ7emhp anV4LmZhbkBpbnRlbC5jb20mZ3Q7PGJyPg0KPGI+U3ViamVjdDo8L2I+IFJFOiBbZWRrMi1kZXZl bF0gRWRrMiBCYXNlVG9vbHMgUGF0Y2hlcy48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQo8L2Rpdj4N CjwvZGl2Pg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PG86cD4mbmJzcDs8L286cD48L3A+DQo8cCBj bGFzcz0iTXNvTm9ybWFsIj48c3BhbiBzdHlsZT0iZm9udC1zaXplOjExLjBwdDtmb250LWZhbWls eTomcXVvdDtDYWxpYnJpJnF1b3Q7LHNhbnMtc2VyaWY7Y29sb3I6IzFGNDk3RCI+QW5kcmV3LDxv OnA+PC9vOnA+PC9zcGFuPjwvcD4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiPjxzcGFuIHN0eWxlPSJm b250LXNpemU6MTEuMHB0O2ZvbnQtZmFtaWx5OiZxdW90O0NhbGlicmkmcXVvdDssc2Fucy1zZXJp Zjtjb2xvcjojMUY0OTdEIj48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQo8cCBjbGFzcz0i TXNvTm9ybWFsIj5XaGF0IGFib3V0IHRoZSBmb3JjZSBpbmNsdWRlIG9mIEF1dG9HZW4uaD8mbmJz cDs8bzpwPjwvbzpwPjwvcD4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiPjxzcGFuIHN0eWxlPSJmb250 LXNpemU6MTEuMHB0O2ZvbnQtZmFtaWx5OiZxdW90O0NhbGlicmkmcXVvdDssc2Fucy1zZXJpZjtj b2xvcjojMUY0OTdEIj48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQo8cCBjbGFzcz0iTXNv Tm9ybWFsIj48c3BhbiBzdHlsZT0iZm9udC1zaXplOjExLjBwdDtmb250LWZhbWlseTomcXVvdDtD YWxpYnJpJnF1b3Q7LHNhbnMtc2VyaWY7Y29sb3I6IzFGNDk3RCI+QXV0b0dlbi5oIChhbmQgLmMp IGhhdmUgY29udGVudHMgd2hpY2ggYXJlIGRldGVybWluZWQgYnkgdmFyaW91cyBtZXRhZGF0YSBs aWtlIFBDRCB2YWx1ZXMgb3IgaXRlbXMgbGlzdGVkIGluIHRoZSBJTkYuJm5ic3A7IFRoZSBzb3Vy Y2VzIGFuZCBkZXBlbmRlbmNpZXMgY2Fu4oCZdCBiZSBpbnZvbHZlZCwNCiBzaW5jZSB0aG9zZSBh cmVu4oCZdCBrbm93biB1bnRpbCBhZnRlciB0aGUgYXV0b2dlbiBmaWxlcyBhcmUgYWxyZWFkeSBj b21wbGV0ZS4gJm5ic3A7VGhlIGJ1aWxkIGNhbGxzIGdlbmMgYmVmb3JlIGdlbm1ha2UuJm5ic3A7 IFRoZSBoYXNoPGEgbmFtZT0iX01haWxFbmRDb21wb3NlIj4gYWNjb3VudHMgZm9yIHRob3NlIGJ5 IGluY29ycG9yYXRpbmcgdGhlIG1ldGFkYXRhIGl0c2VsZiwgcmF0aGVyIHRoYW4gdGhlIGF1dG9n ZW5lcmF0ZWQgZmlsZXMuPC9hPjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCjxwIGNsYXNzPSJNc29O b3JtYWwiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTEuMHB0O2ZvbnQtZmFtaWx5OiZxdW90O0Nh bGlicmkmcXVvdDssc2Fucy1zZXJpZjtjb2xvcjojMUY0OTdEIj48bzpwPiZuYnNwOzwvbzpwPjwv c3Bhbj48L3A+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj5JZiB0aGVyZSBpcyBhIHJ1bGUgdGhlIHRv b2xzIHNob3VsZCBlbmZvcmNlIHRoZSBydWxlIHdpdGggZ29vZCBlcnJvciBtZXNzYWdlcy4mbmJz cDs8bzpwPjwvbzpwPjwvcD4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiPjxzcGFuIHN0eWxlPSJmb250 LXNpemU6MTEuMHB0O2ZvbnQtZmFtaWx5OiZxdW90O0NhbGlicmkmcXVvdDssc2Fucy1zZXJpZjtj b2xvcjojMUY0OTdEIj48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQo8cCBjbGFzcz0iTXNv Tm9ybWFsIj48c3BhbiBzdHlsZT0iZm9udC1zaXplOjExLjBwdDtmb250LWZhbWlseTomcXVvdDtD YWxpYnJpJnF1b3Q7LHNhbnMtc2VyaWY7Y29sb3I6IzFGNDk3RCI+Rm9yIHRoZSBjYXNlIG9mIHRo ZSBidWlsZCBoYXNoIGZlYXR1cmUsIHdlIGhhdmUgYW4gRWRrTG9nZ2VyLndhcm4gaW4gdGhlc2Ug cGF0Y2hlcy4mbmJzcDsgSW52YWxpZGF0aW5nIHRoZSBoYXNoIGFsbG93cyB0aGUgYnVpbGQgdG8g Y29udGludWUgd2l0aCB1cC10by1kYXRlIG1vZHVsZXMNCiBieSBzZW5kaW5nIHRoZSBtb2R1bGUg YmFjayB0byB0aGUgcmVndWxhciBidWlsZCBwcm9jZXNzLCBhbmQgdGhlIG1lc3NhZ2UgaW5mb3Jt cyB0aGUgdXNlciBvZiB3aGF0IHdlIGZvdW5kLjxvOnA+PC9vOnA+PC9zcGFuPjwvcD4NCjxwIGNs YXNzPSJNc29QbGFpblRleHQiPjxvOnA+Jm5ic3A7PC9vOnA+PC9wPg0KPHAgY2xhc3M9Ik1zb05v cm1hbCI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMS4wcHQ7Zm9udC1mYW1pbHk6JnF1b3Q7Q2Fs aWJyaSZxdW90OyxzYW5zLXNlcmlmO2NvbG9yOiMxRjQ5N0QiPlNpbmNlIHRoZSBwb2ludCBvZiB0 aGUgZmVhdHVyZSBpcyB0byBzcGVlZCB1cCBidWlsZHMsIEkgdGhpbmsgdGhpcyBpcyByaWdodC4m bmJzcDsgSWYgd2UgaW5zdGVhZCBzdG9wcGVkIHRoZSBidWlsZCwgd2hlbiB3aXRob3V0IC0taGFz aCBpdCB3b3VsZOKAmXZlIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHksDQogdGhlbiB3ZeKAmXZlIG1h ZGUgYSBtb3JlIHJlc3RyaWN0ZWQgYnVpbGQgdGhhdOKAmXMgbGVzcyB1c2VmdWwsIHJhdGhlciB0 aGFuIGdpdmluZyB0aGUgZXhpc3RpbmcgZnVuY3Rpb25hbGl0eSBhIHNwZWVkIGJvb3N0IHZpYSBj YWNoaW5nLiZuYnNwOyBJ4oCZbSBub3QgYWdhaW5zdCBicm9hZGVuaW5nIHRoZSB1c2Ugb2YgdGhp cyBjaGVjayB0byByZWd1bGFyIGJ1aWxkcywgYnV0IHRoYXQgaGFzIHVuYW5zd2VyZWQgcXVlc3Rp b25zIGFuZCBpdHMgb3V0c2lkZSB0aGUNCiBzY29wZSBvZiB0aGUgQlpzIHRhcmdldGVkIGJ5IHRo ZXNlIHBhdGNoZXMuJm5ic3A7IERvIHdlIHdhbnQgdG8gY2hlY2sgZm9yIHRoaXMgY29uZGl0aW9u IG9uIGV2ZXJ5IGJ1aWxkIGFuZCBsb2cgd2hlbiB3ZSBzZWUgaXQ/Jm5ic3A7IERvIHdlIHdhbnQg YW4gb3B0aW9uYWwgYnVpbGQgZmxhZyBmb3IgaXQ/Jm5ic3A7IFNob3VsZCBhbm90aGVyIGZsYWcg Y2F1c2UgYSBoYWx0IGFuZCBnaXZlIGFuIGVycm9yLCBtYXliZSBzb21ldGhpbmcgbGlrZSDigJwt LXN0cmljdOKAnSB3aGljaA0KIGNvdWxkIGNoZWNrIGZvciBvdGhlciBzcGVjIHZpb2xhdGluZyBj b25kaXRpb25zIGFzIHdlbGw/Jm5ic3A7IEl0IHR1cm5zIGludG8gYSB3aG9sZSBmZWF0dXJlIG9m IGl0cyBvd24sIHdpdGggY29uc2lkZXJhYmx5IGhpZ2hlciBpbXBhY3Qgc2luY2UgKjxiPm1hbnk8 L2I+KiBjb2RlYmFzZXMgaW4gdGhlIHdpbGQgaGF2ZSBub24tY29tcGxpYW50IG1vZHVsZXMgc3By aW5rbGVkIHRocm91Z2hvdXQuPG86cD48L286cD48L3NwYW4+PC9wPg0KPHAgY2xhc3M9Ik1zb05v cm1hbCI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMS4wcHQ7Zm9udC1mYW1pbHk6JnF1b3Q7Q2Fs aWJyaSZxdW90OyxzYW5zLXNlcmlmO2NvbG9yOiMxRjQ5N0QiPjxvOnA+Jm5ic3A7PC9vOnA+PC9z cGFuPjwvcD4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiPkkgdGhpbmsgTGVpZiBhbmQgSSBhcmUgYm90 aCBjb25jZXJuZWQgYWJvdXQgaGF2aW5nIHR3byB3YXlzIHRvIGRvIHNvbWV0aGluZyBhcyBjb21w bGV4IGFzIG1ha2UgZGVwZW5kZW5jaWVzLCBhcyB0aGV5IHJpc2sgZ2V0dGluZyBvdXQgb2YgcGhh c2UsIG9yIGJyZWFraW5nIGRpZmZlcmVudCB3YXlzIChsaWtlIGZvbGxvd2luZyB0aGUgLmggcnVs ZXMgaW4gdGhlIElORiBGaWxlKS48bzpwPjwvbzpwPjwvcD4NCjxwIGNsYXNzPSJNc29Ob3JtYWwi PjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTEuMHB0O2ZvbnQtZmFtaWx5OiZxdW90O0NhbGlicmkm cXVvdDssc2Fucy1zZXJpZjtjb2xvcjojMUY0OTdEIj48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48 L3A+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj48c3BhbiBzdHlsZT0iZm9udC1zaXplOjExLjBwdDtm b250LWZhbWlseTomcXVvdDtDYWxpYnJpJnF1b3Q7LHNhbnMtc2VyaWY7Y29sb3I6IzFGNDk3RCI+ SSB1bmRlcnN0YW5kIHRoZSBjb25jZXJuLiZuYnNwOyBPbmUgcG9zaXRpdmUgdGhpbmcgYWJvdXQg dGhlIG92ZXJseSBicm9hZCBuYXR1cmUgb2YgaGFzaGluZyBhbGwgcG9zc2libGUgbGVnYWwgaW5j bHVkZXMgYW5kIGFsbCBjb21waWxlciBmbGFncyBhbmQgYWxsIGV0YyBldGMgaXMgdGhhdA0KIHdl IGRvbuKAmXQgbmVlZCB0byBjYXJyeSBtdWNoIHVuZGVyc3RhbmRpbmcgb3IgY29tcGxleGl0eS4m bmJzcDsgV2UganVzdCBoYXNoIOKAmGFsbCB0aGUgaW5wdXRz4oCZIGFuZCBkb27igJl0IGJvdGhl ciBsb29raW5nIGFueSBkZWVwZXIuJm5ic3A7IEZ1cnRoZXIsIHdoZW4gdGhlIGhhc2ggb2YgYSBt b2R1bGUgY2hhbmdlcywgaXQgZHJvcHMgYmFjayB0byB0aGUgcmVndWxhciBwYXRoIGFuZCB0aGUg b3JkaW5hcnkgYnVpbGQvc2tpcCBkZWNpc2lvbiBpcyBtYWRlIGV4YWN0bHkNCiBhcyBpdCB3b3Vs ZCBiZSBpbiBhIHJlZ3VsYXIgYnVpbGQuJm5ic3A7IEkgdGhpbmsgdGhpcyBpcyBzaW1wbGUgZW5v dWdoIHRvIG5vdCBiZSAodG9vKSB0cm91YmxpbmcuPG86cD48L286cD48L3NwYW4+PC9wPg0KPHAg Y2xhc3M9Ik1zb05vcm1hbCI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMS4wcHQ7Zm9udC1mYW1p bHk6JnF1b3Q7Q2FsaWJyaSZxdW90OyxzYW5zLXNlcmlmO2NvbG9yOiMxRjQ5N0QiPjxvOnA+Jm5i c3A7PC9vOnA+PC9zcGFuPjwvcD4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiPkF0IHNvbWUgcG9pbnQg cmVmYWN0b3JpbmcgdGhlIGJ1aWxkIHN5c3RlbSBmcm9tIHRoZSB0b3AgbWlnaHQgYmUgdGhlIHJp Z2h0IGFwcHJvYWNoLiZuYnNwOzxvOnA+PC9vOnA+PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+ PG86cD4mbmJzcDs8L286cD48L3A+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj48c3BhbiBzdHlsZT0i Zm9udC1zaXplOjExLjBwdDtmb250LWZhbWlseTomcXVvdDtDYWxpYnJpJnF1b3Q7LHNhbnMtc2Vy aWY7Y29sb3I6IzFGNDk3RCI+QWdyZWVkLiZuYnNwOyBUaGUgYnVpbGQgdG9vbHMgYXJlIGNyaXRp Y2FsIGFuZCBjb3VsZCB1c2UgbW9yZSBhdHRlbnRpb24uJm5ic3A7IE1heWJlIHNvbWVkYXnigKY8 bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj48c3BhbiBzdHlsZT0i Zm9udC1zaXplOjExLjBwdDtmb250LWZhbWlseTomcXVvdDtDYWxpYnJpJnF1b3Q7LHNhbnMtc2Vy aWY7Y29sb3I6IzFGNDk3RCI+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0KPHAgY2xhc3M9 Ik1zb05vcm1hbCI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMS4wcHQ7Zm9udC1mYW1pbHk6JnF1 b3Q7Q2FsaWJyaSZxdW90OyxzYW5zLXNlcmlmO2NvbG9yOiMxRjQ5N0QiPi1NaWNoYWVsPG86cD48 L286cD48L3NwYW4+PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PHNwYW4gc3R5bGU9ImZvbnQt c2l6ZToxMS4wcHQ7Zm9udC1mYW1pbHk6JnF1b3Q7Q2FsaWJyaSZxdW90OyxzYW5zLXNlcmlmO2Nv bG9yOiMxRjQ5N0QiPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCjxkaXY+DQo8ZGl2IHN0 eWxlPSJib3JkZXI6bm9uZTtib3JkZXItdG9wOnNvbGlkICNFMUUxRTEgMS4wcHQ7cGFkZGluZzoz LjBwdCAwaW4gMGluIDBpbiI+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj48Yj48c3BhbiBzdHlsZT0i Zm9udC1zaXplOjExLjBwdDtmb250LWZhbWlseTomcXVvdDtDYWxpYnJpJnF1b3Q7LHNhbnMtc2Vy aWYiPkZyb206PC9zcGFuPjwvYj48c3BhbiBzdHlsZT0iZm9udC1zaXplOjExLjBwdDtmb250LWZh bWlseTomcXVvdDtDYWxpYnJpJnF1b3Q7LHNhbnMtc2VyaWYiPg0KPGEgaHJlZj0ibWFpbHRvOmRl dmVsQGVkazIuZ3JvdXBzLmlvIj5kZXZlbEBlZGsyLmdyb3Vwcy5pbzwvYT4gWzxhIGhyZWY9Im1h aWx0bzpkZXZlbEBlZGsyLmdyb3Vwcy5pbyI+bWFpbHRvOmRldmVsQGVkazIuZ3JvdXBzLmlvPC9h Pl0NCjxiPk9uIEJlaGFsZiBPZiA8L2I+QW5kcmV3IEZpc2ggdmlhIEdyb3Vwcy5Jbzxicj4NCjxi PlNlbnQ6PC9iPiBUaHVyc2RheSwgTWF5IDMwLCAyMDE5IDM6NTMgUE08YnI+DQo8Yj5Ubzo8L2I+ IDxhIGhyZWY9Im1haWx0bzpkZXZlbEBlZGsyLmdyb3Vwcy5pbyI+ZGV2ZWxAZWRrMi5ncm91cHMu aW88L2E+OyBKb2huc29uLCBNaWNoYWVsICZsdDs8YSBocmVmPSJtYWlsdG86bWljaGFlbC5qb2hu c29uQGludGVsLmNvbSI+bWljaGFlbC5qb2huc29uQGludGVsLmNvbTwvYT4mZ3Q7PGJyPg0KPGI+ Q2M6PC9iPiBMZWlmIExpbmRob2xtICZsdDs8YSBocmVmPSJtYWlsdG86bGVpZi5saW5kaG9sbUBs aW5hcm8ub3JnIj5sZWlmLmxpbmRob2xtQGxpbmFyby5vcmc8L2E+Jmd0OzsgRmVuZywgQm9iIEMg Jmx0OzxhIGhyZWY9Im1haWx0bzpib2IuYy5mZW5nQGludGVsLmNvbSI+Ym9iLmMuZmVuZ0BpbnRl bC5jb208L2E+Jmd0OzsgUm9kcmlndWV6LCBDaHJpc3RpYW4gJmx0OzxhIGhyZWY9Im1haWx0bzpj aHJpc3RpYW4ucm9kcmlndWV6QGludGVsLmNvbSI+Y2hyaXN0aWFuLnJvZHJpZ3VlekBpbnRlbC5j b208L2E+Jmd0OzsNCiBMYXN6bG8gRXJzZWsgJmx0OzxhIGhyZWY9Im1haWx0bzpsZXJzZWtAcmVk aGF0LmNvbSI+bGVyc2VrQHJlZGhhdC5jb208L2E+Jmd0OzsgS2lubmV5LCBNaWNoYWVsIEQgJmx0 OzxhIGhyZWY9Im1haWx0bzptaWNoYWVsLmQua2lubmV5QGludGVsLmNvbSI+bWljaGFlbC5kLmtp bm5leUBpbnRlbC5jb208L2E+Jmd0OzsgR2FvLCBMaW1pbmcgJmx0OzxhIGhyZWY9Im1haWx0bzps aW1pbmcuZ2FvQGludGVsLmNvbSI+bGltaW5nLmdhb0BpbnRlbC5jb208L2E+Jmd0OzsgU2hpLCBT dGV2ZW4NCiAmbHQ7PGEgaHJlZj0ibWFpbHRvOnN0ZXZlbi5zaGlAaW50ZWwuY29tIj5zdGV2ZW4u c2hpQGludGVsLmNvbTwvYT4mZ3Q7OyBGYW4sIFpoaWp1WCAmbHQ7PGEgaHJlZj0ibWFpbHRvOnpo aWp1eC5mYW5AaW50ZWwuY29tIj56aGlqdXguZmFuQGludGVsLmNvbTwvYT4mZ3Q7PGJyPg0KPGI+ U3ViamVjdDo8L2I+IFJlOiBbZWRrMi1kZXZlbF0gRWRrMiBCYXNlVG9vbHMgUGF0Y2hlcy48bzpw PjwvbzpwPjwvc3Bhbj48L3A+DQo8L2Rpdj4NCjwvZGl2Pg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+ PG86cD4mbmJzcDs8L286cD48L3A+DQo8ZGl2Pg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PG86cD4m bmJzcDs8L286cD48L3A+DQo8L2Rpdj4NCjxkaXY+DQo8ZGl2Pg0KPGRpdj4NCjxibG9ja3F1b3Rl IHN0eWxlPSJtYXJnaW4tdG9wOjUuMHB0O21hcmdpbi1ib3R0b206NS4wcHQiPg0KPGRpdj4NCjxw IGNsYXNzPSJNc29Ob3JtYWwiPk9uIE1heSAzMCwgMjAxOSwgYXQgMjozMSBQTSwgSm9obnNvbiwg TWljaGFlbCAmbHQ7PGEgaHJlZj0ibWFpbHRvOm1pY2hhZWwuam9obnNvbkBpbnRlbC5jb20iPm1p Y2hhZWwuam9obnNvbkBpbnRlbC5jb208L2E+Jmd0OyB3cm90ZTo8bzpwPjwvbzpwPjwvcD4NCjwv ZGl2Pg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PG86cD4mbmJzcDs8L286cD48L3A+DQo8ZGl2Pg0K PGRpdj4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTEuMHB0 O2ZvbnQtZmFtaWx5OiZxdW90O0NhbGlicmkmcXVvdDssc2Fucy1zZXJpZjtjb2xvcjojMUY0OTdE Ij5BbGwsPC9zcGFuPjxvOnA+PC9vOnA+PC9wPg0KPC9kaXY+DQo8ZGl2Pg0KPHAgY2xhc3M9Ik1z b05vcm1hbCI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMS4wcHQ7Zm9udC1mYW1pbHk6JnF1b3Q7 Q2FsaWJyaSZxdW90OyxzYW5zLXNlcmlmO2NvbG9yOiMxRjQ5N0QiPiZuYnNwOzwvc3Bhbj48bzpw PjwvbzpwPjwvcD4NCjwvZGl2Pg0KPGRpdj4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiPjxzcGFuIHN0 eWxlPSJmb250LXNpemU6MTEuMHB0O2ZvbnQtZmFtaWx5OiZxdW90O0NhbGlicmkmcXVvdDssc2Fu cy1zZXJpZjtjb2xvcjojMUY0OTdEIj5UaGVzZSBwYXRjaGVzIGFyZSBub3QgcmVxdWlyZWQgZm9y IHRoZSBzdGFibGUgdGFnLiZuYnNwOyBUaGV54oCZcmUgaW1wcm92ZW1lbnRzIG5lZWRlZCB0byBl bmFibGUgcmVsYXRpdmVseSBuZXcgYnVpbGQgb3B0aW9ucyB0aGF0IGFyZSBub3QgeWV0IHdpZGVs eSB1c2VkLjwvc3Bhbj48bzpwPjwvbzpwPjwvcD4NCjwvZGl2Pg0KPGRpdj4NCjxwIGNsYXNzPSJN c29Ob3JtYWwiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTEuMHB0O2ZvbnQtZmFtaWx5OiZxdW90 O0NhbGlicmkmcXVvdDssc2Fucy1zZXJpZjtjb2xvcjojMUY0OTdEIj4mbmJzcDs8L3NwYW4+PG86 cD48L286cD48L3A+DQo8L2Rpdj4NCjxkaXY+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj48c3BhbiBz dHlsZT0iZm9udC1zaXplOjExLjBwdDtmb250LWZhbWlseTomcXVvdDtDYWxpYnJpJnF1b3Q7LHNh bnMtc2VyaWY7Y29sb3I6IzFGNDk3RCI+VGhhdCBzYWlkLCBsZXQgbWUgdHJ5IHRvIGNsZWFyIHRo ZSBhaXIgaGVyZSBhYm91dCB3aGF0IGlzIGhhcHBlbmluZyByZWdhcmRpbmcgdGhlIHNvdXJjZXMv aW5jbHVkZXMgYW5kIHdoYXQgY2hhbmdlcyB3aXRoIHRoZXNlIHBhdGNoZXMuPC9zcGFuPjxvOnA+ PC9vOnA+PC9wPg0KPC9kaXY+DQo8ZGl2Pg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PHNwYW4gc3R5 bGU9ImZvbnQtc2l6ZToxMS4wcHQ7Zm9udC1mYW1pbHk6JnF1b3Q7Q2FsaWJyaSZxdW90OyxzYW5z LXNlcmlmO2NvbG9yOiMxRjQ5N0QiPiZuYnNwOzwvc3Bhbj48bzpwPjwvbzpwPjwvcD4NCjwvZGl2 Pg0KPGRpdj4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTEu MHB0O2ZvbnQtZmFtaWx5OiZxdW90O0NhbGlicmkmcXVvdDssc2Fucy1zZXJpZjtjb2xvcjojMUY0 OTdEIj5UaGUgSU5GIHNwZWMgKDxhIGhyZWY9Imh0dHBzOi8vZWRrMi1kb2NzLmdpdGJvb2tzLmlv L2Vkay1paS1pbmYtc3BlY2lmaWNhdGlvbi9jb250ZW50L3YvcmVsZWFzZS8xLjI3LzNfZWRrX2lp X2luZl9maWxlX2Zvcm1hdC8zOV8lNWJzb3VyY2VzJTVkX3NlY3Rpb25zLmh0bWwiPjxzcGFuIHN0 eWxlPSJjb2xvcjpwdXJwbGUiPnNlY3Rpb24NCiAzLjk8L3NwYW4+PC9hPikgc2F5cyB0aGF0IGFs bCBsb2NhbCBzb3VyY2UgZmlsZXMsIGluY2x1ZGluZyAuaCBmaWxlcywgbXVzdCBiZSBpbmNsdWRl ZCBpbiB0aGUgc291cmNlcyBzZWN0aW9uLiZuYnNwOyBUaGlzIG1lYW5zIGEgbW9kdWxlIGlzIG5v dCBjb21wbGlhbnQgaWYgaXQgaW5jbHVkZXMgYSBoZWFkZXIgZmlsZSBmcm9tIGEgZGlyZWN0b3J5 IG90aGVyIHRoYW4gYSBwYWNrYWdlIGluY2x1ZGUgZGlyZWN0b3J5IGFuZCBmYWlscyB0byBsaXN0 IGl0IGluDQogaXRzIHNvdXJjZXMgc2VjdGlvbi4mbmJzcDsgV2XigJlyZSBhbHJlYWR5IGdlbmVy YXRpbmcgYSBoYXNoIHdoaWNoIGlzIGd1YXJhbnRlZWQgdG8gY2hhbmdlIHdoZW5ldmVyIHRoZSBt b2R1bGXigJlzIHNvdXJjZSBjaGFuZ2VzIC0gd2l0aG91dCBpbnZva2luZyBta2RlcCAtIGJ5IGhh c2hpbmcgZWFjaCBmaWxlIGZyb20gdGhlIHNvdXJjZXMgc2VjdGlvbiBhcyB3ZWxsIGFzICo8Yj5h bGw8L2I+KiB0aGUgY29udGVudHMgb2YgZXZlcnkgaW5jbHVkZSBmb2xkZXIgYmVsb25naW5nDQog dG8gZWFjaCBwYWNrYWdlIHRoYXQgdGhlIG1vZHVsZSBpcyBkZXBlbmRlbnQgb24uPC9zcGFuPjxv OnA+PC9vOnA+PC9wPg0KPC9kaXY+DQo8ZGl2Pg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PHNwYW4g c3R5bGU9ImZvbnQtc2l6ZToxMS4wcHQ7Zm9udC1mYW1pbHk6JnF1b3Q7Q2FsaWJyaSZxdW90Oyxz YW5zLXNlcmlmO2NvbG9yOiMxRjQ5N0QiPiZuYnNwOzwvc3Bhbj48bzpwPjwvbzpwPjwvcD4NCjwv ZGl2Pg0KPC9kaXY+DQo8L2Jsb2NrcXVvdGU+DQo8YmxvY2txdW90ZSBzdHlsZT0ibWFyZ2luLXRv cDo1LjBwdDttYXJnaW4tYm90dG9tOjUuMHB0Ij4NCjxkaXY+DQo8ZGl2Pg0KPHAgY2xhc3M9Ik1z b05vcm1hbCI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMS4wcHQ7Zm9udC1mYW1pbHk6JnF1b3Q7 Q2FsaWJyaSZxdW90OyxzYW5zLXNlcmlmO2NvbG9yOiMxRjQ5N0QiPkV2ZXJ5IHBvc3NpYmxlIOKA mGxlZ2FsbHnigJkgaW5jbHVkZWQgaGVhZGVyIHdpbGwgY2hhbmdlIHRoZSBoYXNoLA0KPC9zcGFu PjxvOnA+PC9vOnA+PC9wPg0KPC9kaXY+DQo8L2Rpdj4NCjwvYmxvY2txdW90ZT4NCjxkaXY+DQo8 cCBjbGFzcz0iTXNvTm9ybWFsIj48bzpwPiZuYnNwOzwvbzpwPjwvcD4NCjwvZGl2Pg0KPGRpdj4N CjxwIGNsYXNzPSJNc29Ob3JtYWwiPk1pY2hhZWwsPG86cD48L286cD48L3A+DQo8L2Rpdj4NCjxk aXY+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj48bzpwPiZuYnNwOzwvbzpwPjwvcD4NCjwvZGl2Pg0K PGRpdj4NCjxkaXY+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj5XaGF0IGFib3V0IHRoZSBmb3JjZSBp bmNsdWRlIG9mIEF1dG9HZW4uaD8mbmJzcDs8bzpwPjwvbzpwPjwvcD4NCjwvZGl2Pg0KPC9kaXY+ DQo8cCBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2luLWJvdHRvbToxMi4wcHQiPjxvOnA+ Jm5ic3A7PC9vOnA+PC9wPg0KPGJsb2NrcXVvdGUgc3R5bGU9Im1hcmdpbi10b3A6NS4wcHQ7bWFy Z2luLWJvdHRvbTo1LjBwdCI+DQo8ZGl2Pg0KPGRpdj4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiPjxz cGFuIHN0eWxlPSJmb250LXNpemU6MTEuMHB0O2ZvbnQtZmFtaWx5OiZxdW90O0NhbGlicmkmcXVv dDssc2Fucy1zZXJpZjtjb2xvcjojMUY0OTdEIj5idXQgdGhlIGhhc2hlcyBvZiBub24tY29tcGxp YW50IG1vZHVsZXMgd2lsbCBub3QgY2hhbmdlIHdoZW4gdGhlaXIg4oCYaWxsZWdhbGx54oCZIGlu Y2x1ZGVkIGhlYWRlcnMgY2hhbmdlIGFuZCB3ZSB3aWxsIGluY29ycmVjdGx5IHJlLXVzZSBzdGFs ZSBjYWNoZWQgYmluYXJpZXMuJm5ic3A7DQogVG8gcHJldmVudCB0aGlzLCB0aGUgYmVsb3cgcGF0 Y2hlcyBjaGVjayBmb3IgY29tcGxpYW5jZSBhbmQgaW52YWxpZGF0ZSB0aGUgaGFzaCBvZiBhbnkg bm9uLWNvbXBsaWFudCBtb2R1bGUuJm5ic3A7IEluIHRoaXMgd2F5LCBub24tY29tcGxpYW5jZSBp cyBuZWl0aGVyIHN1cHBvcnRlZCBub3IgYWxsb3dlZCB0byBwb2lzb24gdGhlIGNhY2hlLjwvc3Bh bj48bzpwPjwvbzpwPjwvcD4NCjwvZGl2Pg0KPGRpdj4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiPjxz cGFuIHN0eWxlPSJmb250LXNpemU6MTEuMHB0O2ZvbnQtZmFtaWx5OiZxdW90O0NhbGlicmkmcXVv dDssc2Fucy1zZXJpZjtjb2xvcjojMUY0OTdEIj4mbmJzcDs8L3NwYW4+PG86cD48L286cD48L3A+ DQo8L2Rpdj4NCjwvZGl2Pg0KPC9ibG9ja3F1b3RlPg0KPGRpdj4NCjxwIGNsYXNzPSJNc29Ob3Jt YWwiPjxvOnA+Jm5ic3A7PC9vOnA+PC9wPg0KPC9kaXY+DQo8ZGl2Pg0KPHAgY2xhc3M9Ik1zb05v cm1hbCI+SWYgdGhlcmUgaXMgYSBydWxlIHRoZSB0b29scyBzaG91bGQgZW5mb3JjZSB0aGUgcnVs ZSB3aXRoIGdvb2QgZXJyb3IgbWVzc2FnZXMuJm5ic3A7PG86cD48L286cD48L3A+DQo8L2Rpdj4N CjxwIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJtYXJnaW4tYm90dG9tOjEyLjBwdCI+PG86cD4m bmJzcDs8L286cD48L3A+DQo8YmxvY2txdW90ZSBzdHlsZT0ibWFyZ2luLXRvcDo1LjBwdDttYXJn aW4tYm90dG9tOjUuMHB0Ij4NCjxkaXY+DQo8ZGl2Pg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PHNw YW4gc3R5bGU9ImZvbnQtc2l6ZToxMS4wcHQ7Zm9udC1mYW1pbHk6JnF1b3Q7Q2FsaWJyaSZxdW90 OyxzYW5zLXNlcmlmO2NvbG9yOiMxRjQ5N0QiPkFnYWluLCBzaW5jZSB0aGlzIG9ubHkgaGFzIGFu IGVmZmVjdCBvbiBidWlsZHMgd2hpY2ggaGF2ZSBlbmFibGVkIHRoaXMgcmVsYXRpdmVseSBuZXcg ZmVhdHVyZSwgSSBkb27igJl0IGV4cGVjdCBhbnkgcHJvZHVjdGlvbiBpbXBhY3QgaWYgdGhlIHN0 YWJsZSB0YWcgZG9lc27igJl0DQogdGFrZSB0aGVzZSBwYXRjaGVzLiZuYnNwOyBOb2JvZHkgaXMg dXNpbmcgaXQgeWV0Ljwvc3Bhbj48bzpwPjwvbzpwPjwvcD4NCjwvZGl2Pg0KPGRpdj4NCjxwIGNs YXNzPSJNc29Ob3JtYWwiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTEuMHB0O2ZvbnQtZmFtaWx5 OiZxdW90O0NhbGlicmkmcXVvdDssc2Fucy1zZXJpZjtjb2xvcjojMUY0OTdEIj4mbmJzcDs8L3Nw YW4+PG86cD48L286cD48L3A+DQo8L2Rpdj4NCjwvZGl2Pg0KPC9ibG9ja3F1b3RlPg0KPGRpdj4N CjxwIGNsYXNzPSJNc29Ob3JtYWwiPjxvOnA+Jm5ic3A7PC9vOnA+PC9wPg0KPC9kaXY+DQo8ZGl2 Pg0KPGRpdj4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiPkkgdGhpbmsgTGVpZiBhbmQgSSBhcmUgYm90 aCBjb25jZXJuZWQgYWJvdXQgaGF2aW5nIHR3byB3YXlzIHRvIGRvIHNvbWV0aGluZyBhcyBjb21w bGV4IGFzIG1ha2UgZGVwZW5kZW5jaWVzLCBhcyB0aGV5IHJpc2sgZ2V0dGluZyBvdXQgb2YgcGhh c2UsIG9yIGJyZWFraW5nIGRpZmZlcmVudCB3YXlzIChsaWtlIGZvbGxvd2luZyB0aGUgLmggcnVs ZXMgaW4gdGhlIElORiBGaWxlKS48bzpwPjwvbzpwPjwvcD4NCjwvZGl2Pg0KPGRpdj4NCjxwIGNs YXNzPSJNc29Ob3JtYWwiPjxvOnA+Jm5ic3A7PC9vOnA+PC9wPg0KPC9kaXY+DQo8ZGl2Pg0KPHAg Y2xhc3M9Ik1zb05vcm1hbCI+QWxzbyBJIHVuZGVyc3RhbmQgc29tZSB0aW1lcyB3ZSBoaXQgY2ly Y3VsYXIgZGVwZW5kZW5jaWVzIGFuZCB0aGF0IGZvcmNlcyBkdXBsaWNhdGlvbi4gSXQgd291bGQg YmUgZ29vZCBpbiBnZW5lcmFsIHRvIHRyeSBhbmQgbWFrZSBhIGxpc3Qgb2YgdGhlc2Uga2luZCBv ZiBjaXJjdWxhciBkZXBlbmRlbmNpZXMsIGdpdmVuIHRoZXkgbWF5IGJlZW4gY2F1c2VkIGJ5IGEg ZmF1bHR5IGhpZ2ggbGV2ZWwgZGVzaWduIGRlY2lzaW9uDQogbWFkZSBsb25nIGFnby4gQXQgc29t ZSBwb2ludCByZWZhY3RvcmluZyB0aGUgYnVpbGQgc3lzdGVtIGZyb20gdGhlIHRvcCBtaWdodCBi ZSB0aGUgcmlnaHQgYXBwcm9hY2guJm5ic3A7PG86cD48L286cD48L3A+DQo8ZGl2Pg0KPHAgY2xh c3M9Ik1zb05vcm1hbCI+PG86cD4mbmJzcDs8L286cD48L3A+DQo8L2Rpdj4NCjxkaXY+DQo8cCBj bGFzcz0iTXNvTm9ybWFsIj5UaGFua3MsPG86cD48L286cD48L3A+DQo8L2Rpdj4NCjxkaXY+DQo8 cCBjbGFzcz0iTXNvTm9ybWFsIj48bzpwPiZuYnNwOzwvbzpwPjwvcD4NCjwvZGl2Pg0KPGRpdj4N CjxwIGNsYXNzPSJNc29Ob3JtYWwiPkFuZHJldyBGaXNoPG86cD48L286cD48L3A+DQo8L2Rpdj4N CjwvZGl2Pg0KPGRpdj4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiPjxvOnA+Jm5ic3A7PC9vOnA+PC9w Pg0KPC9kaXY+DQo8L2Rpdj4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJtYXJnaW4tYm90 dG9tOjEyLjBwdCI+PG86cD4mbmJzcDs8L286cD48L3A+DQo8YmxvY2txdW90ZSBzdHlsZT0ibWFy Z2luLXRvcDo1LjBwdDttYXJnaW4tYm90dG9tOjUuMHB0Ij4NCjxkaXY+DQo8ZGl2Pg0KPHAgY2xh c3M9Ik1zb05vcm1hbCI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMS4wcHQ7Zm9udC1mYW1pbHk6 JnF1b3Q7Q2FsaWJyaSZxdW90OyxzYW5zLXNlcmlmO2NvbG9yOiMxRjQ5N0QiPi1NaWNoYWVsPC9z cGFuPjxvOnA+PC9vOnA+PC9wPg0KPC9kaXY+DQo8ZGl2Pg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+ PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMS4wcHQ7Zm9udC1mYW1pbHk6JnF1b3Q7Q2FsaWJyaSZx dW90OyxzYW5zLXNlcmlmO2NvbG9yOiMxRjQ5N0QiPiZuYnNwOzwvc3Bhbj48bzpwPjwvbzpwPjwv cD4NCjwvZGl2Pg0KPGRpdj4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiPjxzcGFuIHN0eWxlPSJmb250 LXNpemU6MTEuMHB0O2ZvbnQtZmFtaWx5OiZxdW90O0NhbGlicmkmcXVvdDssc2Fucy1zZXJpZjtj b2xvcjojMUY0OTdEIj4mbmJzcDs8L3NwYW4+PG86cD48L286cD48L3A+DQo8L2Rpdj4NCjxkaXY+ DQo8ZGl2IHN0eWxlPSJib3JkZXI6bm9uZTtib3JkZXItdG9wOnNvbGlkICNFMUUxRTEgMS4wcHQ7 cGFkZGluZzozLjBwdCAwaW4gMGluIDBpbiI+DQo8ZGl2Pg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+ PGI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMS4wcHQ7Zm9udC1mYW1pbHk6JnF1b3Q7Q2FsaWJy aSZxdW90OyxzYW5zLXNlcmlmIj5Gcm9tOjwvc3Bhbj48L2I+PHNwYW4gY2xhc3M9ImFwcGxlLWNv bnZlcnRlZC1zcGFjZSI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMS4wcHQ7Zm9udC1mYW1pbHk6 JnF1b3Q7Q2FsaWJyaSZxdW90OyxzYW5zLXNlcmlmIj4mbmJzcDs8L3NwYW4+PC9zcGFuPjxzcGFu IHN0eWxlPSJmb250LXNpemU6MTEuMHB0O2ZvbnQtZmFtaWx5OiZxdW90O0NhbGlicmkmcXVvdDss c2Fucy1zZXJpZiI+PGEgaHJlZj0ibWFpbHRvOmRldmVsQGVkazIuZ3JvdXBzLmlvIj48c3BhbiBz dHlsZT0iY29sb3I6cHVycGxlIj5kZXZlbEBlZGsyLmdyb3Vwcy5pbzwvc3Bhbj48L2E+PHNwYW4g Y2xhc3M9ImFwcGxlLWNvbnZlcnRlZC1zcGFjZSI+Jm5ic3A7PC9zcGFuPls8YSBocmVmPSJtYWls dG86ZGV2ZWxAZWRrMi5ncm91cHMuaW8iPjxzcGFuIHN0eWxlPSJjb2xvcjpwdXJwbGUiPm1haWx0 bzpkZXZlbEBlZGsyLmdyb3Vwcy5pbzwvc3Bhbj48L2E+XTxzcGFuIGNsYXNzPSJhcHBsZS1jb252 ZXJ0ZWQtc3BhY2UiPiZuYnNwOzwvc3Bhbj48Yj5Pbg0KIEJlaGFsZiBPZjxzcGFuIGNsYXNzPSJh cHBsZS1jb252ZXJ0ZWQtc3BhY2UiPiZuYnNwOzwvc3Bhbj48L2I+QW5kcmV3IEZpc2ggdmlhIEdy b3Vwcy5Jbzxicj4NCjxiPlNlbnQ6PC9iPjxzcGFuIGNsYXNzPSJhcHBsZS1jb252ZXJ0ZWQtc3Bh Y2UiPiZuYnNwOzwvc3Bhbj5UaHVyc2RheSwgTWF5IDMwLCAyMDE5IDExOjEwIEFNPGJyPg0KPGI+ VG86PC9iPjxzcGFuIGNsYXNzPSJhcHBsZS1jb252ZXJ0ZWQtc3BhY2UiPiZuYnNwOzwvc3Bhbj48 YSBocmVmPSJtYWlsdG86ZGV2ZWxAZWRrMi5ncm91cHMuaW8iPjxzcGFuIHN0eWxlPSJjb2xvcjpw dXJwbGUiPmRldmVsQGVkazIuZ3JvdXBzLmlvPC9zcGFuPjwvYT47IExlaWYgTGluZGhvbG0gJmx0 OzxhIGhyZWY9Im1haWx0bzpsZWlmLmxpbmRob2xtQGxpbmFyby5vcmciPjxzcGFuIHN0eWxlPSJj b2xvcjpwdXJwbGUiPmxlaWYubGluZGhvbG1AbGluYXJvLm9yZzwvc3Bhbj48L2E+Jmd0Ozxicj4N CjxiPkNjOjwvYj48c3BhbiBjbGFzcz0iYXBwbGUtY29udmVydGVkLXNwYWNlIj4mbmJzcDs8L3Nw YW4+RmVuZywgQm9iIEMgJmx0OzxhIGhyZWY9Im1haWx0bzpib2IuYy5mZW5nQGludGVsLmNvbSI+ PHNwYW4gc3R5bGU9ImNvbG9yOnB1cnBsZSI+Ym9iLmMuZmVuZ0BpbnRlbC5jb208L3NwYW4+PC9h PiZndDs7IFJvZHJpZ3VleiwgQ2hyaXN0aWFuICZsdDs8YSBocmVmPSJtYWlsdG86Y2hyaXN0aWFu LnJvZHJpZ3VlekBpbnRlbC5jb20iPjxzcGFuIHN0eWxlPSJjb2xvcjpwdXJwbGUiPmNocmlzdGlh bi5yb2RyaWd1ZXpAaW50ZWwuY29tPC9zcGFuPjwvYT4mZ3Q7Ow0KIExhc3psbyBFcnNlayAmbHQ7 PGEgaHJlZj0ibWFpbHRvOmxlcnNla0ByZWRoYXQuY29tIj48c3BhbiBzdHlsZT0iY29sb3I6cHVy cGxlIj5sZXJzZWtAcmVkaGF0LmNvbTwvc3Bhbj48L2E+Jmd0OzsgS2lubmV5LCBNaWNoYWVsIEQg Jmx0OzxhIGhyZWY9Im1haWx0bzptaWNoYWVsLmQua2lubmV5QGludGVsLmNvbSI+PHNwYW4gc3R5 bGU9ImNvbG9yOnB1cnBsZSI+bWljaGFlbC5kLmtpbm5leUBpbnRlbC5jb208L3NwYW4+PC9hPiZn dDs7IEdhbywgTGltaW5nICZsdDs8YSBocmVmPSJtYWlsdG86bGltaW5nLmdhb0BpbnRlbC5jb20i PjxzcGFuIHN0eWxlPSJjb2xvcjpwdXJwbGUiPmxpbWluZy5nYW9AaW50ZWwuY29tPC9zcGFuPjwv YT4mZ3Q7Ow0KIFNoaSwgU3RldmVuICZsdDs8YSBocmVmPSJtYWlsdG86c3RldmVuLnNoaUBpbnRl bC5jb20iPjxzcGFuIHN0eWxlPSJjb2xvcjpwdXJwbGUiPnN0ZXZlbi5zaGlAaW50ZWwuY29tPC9z cGFuPjwvYT4mZ3Q7OyBGYW4sIFpoaWp1WCAmbHQ7PGEgaHJlZj0ibWFpbHRvOnpoaWp1eC5mYW5A aW50ZWwuY29tIj48c3BhbiBzdHlsZT0iY29sb3I6cHVycGxlIj56aGlqdXguZmFuQGludGVsLmNv bTwvc3Bhbj48L2E+Jmd0Ozxicj4NCjxiPlN1YmplY3Q6PC9iPjxzcGFuIGNsYXNzPSJhcHBsZS1j b252ZXJ0ZWQtc3BhY2UiPiZuYnNwOzwvc3Bhbj5SZTogW2VkazItZGV2ZWxdIEVkazIgQmFzZVRv b2xzIFBhdGNoZXMuPC9zcGFuPjxvOnA+PC9vOnA+PC9wPg0KPC9kaXY+DQo8L2Rpdj4NCjwvZGl2 Pg0KPGRpdj4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiPiZuYnNwOzxvOnA+PC9vOnA+PC9wPg0KPC9k aXY+DQo8ZGl2Pg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+Jm5ic3A7PG86cD48L286cD48L3A+DQo8 L2Rpdj4NCjxkaXY+DQo8ZGl2Pg0KPHAgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1hcmdpbi1i b3R0b206MTIuMHB0Ij48YnI+DQo8YnI+DQo8bzpwPjwvbzpwPjwvcD4NCjwvZGl2Pg0KPGJsb2Nr cXVvdGUgc3R5bGU9Im1hcmdpbi10b3A6NS4wcHQ7bWFyZ2luLWJvdHRvbTo1LjBwdCI+DQo8ZGl2 Pg0KPGRpdj4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiPk9uIE1heSAzMCwgMjAxOSwgYXQgOTozNyBB TSwgTGVpZiBMaW5kaG9sbSAmbHQ7PGEgaHJlZj0ibWFpbHRvOmxlaWYubGluZGhvbG1AbGluYXJv Lm9yZyI+PHNwYW4gc3R5bGU9ImNvbG9yOnB1cnBsZSI+bGVpZi5saW5kaG9sbUBsaW5hcm8ub3Jn PC9zcGFuPjwvYT4mZ3Q7IHdyb3RlOjxvOnA+PC9vOnA+PC9wPg0KPC9kaXY+DQo8L2Rpdj4NCjxk aXY+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj4mbmJzcDs8bzpwPjwvbzpwPjwvcD4NCjwvZGl2Pg0K PGRpdj4NCjxkaXY+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2luLWJvdHRvbTox Mi4wcHQiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6OS4wcHQ7Zm9udC1mYW1pbHk6JnF1b3Q7SGVs dmV0aWNhJnF1b3Q7LHNhbnMtc2VyaWYiPlRoYW5rcyBCb2IsIENocmlzdGlhbiw8YnI+DQo8YnI+ DQpPbiBUaHUsIE1heSAzMCwgMjAxOSBhdCAwMzowNjo0OFBNICYjNDM7MDAwMCwgRmVuZywgQm9i IEMgd3JvdGU6PGJyPg0KPGJyPg0KPC9zcGFuPjxvOnA+PC9vOnA+PC9wPg0KPC9kaXY+DQo8Ymxv Y2txdW90ZSBzdHlsZT0ibWFyZ2luLXRvcDo1LjBwdDttYXJnaW4tYm90dG9tOjUuMHB0Ij4NCjxk aXY+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj48c3BhbiBzdHlsZT0iZm9udC1zaXplOjkuMHB0O2Zv bnQtZmFtaWx5OiZxdW90O0hlbHZldGljYSZxdW90OyxzYW5zLXNlcmlmIj5UaGFua3MgQ2hyaXN0 aWFuLiBJIGFkZCBzb21lIHNob3J0IGRlc2NyaXB0aW9uIGZvciB0aGUgcGF0Y2hlcy48YnI+DQo8 YnI+DQpUaGVzZSA1IHBhdGNoZXMgYXJlIGFsbCBmb3IgYmluYXJ5IGNhY2hlIGZlYXR1cmUuPGJy Pg0KPGJyPg0KW1BhdGNoIFY0IDIvMl0gQmFzZVRvb2xzOiBSZWZhY3RvciBoYXNoIHRyYWNraW5n IGFmdGVyIGNoZWNraW5nIGZvciBTb3VyY2VzIHNlY3Rpb248YnI+DQpbUGF0Y2ggVjQgMS8yXSBC YXNlVG9vbHM6IEFkZCBhIGNoZWNraW5nIGZvciBTb3VyY2VzIHNlY3Rpb24gaW4gSU5GIGZpbGU8 YnI+DQo8YnI+DQpUaGUgYWJvdmUgMiBwYXRjaGVzIGlzIHRvIGZpeCB0aGUgaXNzdWUgdGhhdDxi cj4NClRoZSAmbmJzcDtidWlsZCB0b29sIHVzZXMgdGhlIGZpbGVzIGxpc3QgdW5kZXIgW3NvdXJj ZXNdIHNlY3Rpb24gb2YgSU5GPGJyPg0KZmlsZSBhcyBhIGlucHV0IHRvIGNhbGN1bGF0ZSBhIG1v ZHVsZSdzIGhhc2ggdmFsdWUuIEJ1dCBpbiBzb21lIElORjxicj4NCmZpbGVzLCBbc291cmNlc10g ZG9lcyBub3QgbGlzdCBhbGwgdGhlICZxdW90O3NvdXJjZSZxdW90OyBmaWxlcywgbWlzc2luZyBz b21lPGJyPg0KLmggZmlsZXMuIFBhdGggMi8yIHVzZSBhbm90aGVyIG1ldGhvZCB0byBnZXQgYWxs IHNvdXJjZSBmaWxlcyBmb3IgYTxicj4NCm1vZHVsZSBhbmQgcGF0Y2ggMS8yIGRvIGEgY2hlY2sg d2hldGhlciBbc291cmNlc10gbGlzdCBhbGwgdGhlPGJyPg0KJnF1b3Q7c291cmNlJnF1b3Q7IGZp bGVzLjwvc3Bhbj48bzpwPjwvbzpwPjwvcD4NCjwvZGl2Pg0KPC9ibG9ja3F1b3RlPg0KPGRpdj4N CjxwIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJtYXJnaW4tYm90dG9tOjEyLjBwdCI+PHNwYW4g c3R5bGU9ImZvbnQtc2l6ZTo5LjBwdDtmb250LWZhbWlseTomcXVvdDtIZWx2ZXRpY2EmcXVvdDss c2Fucy1zZXJpZiI+PGJyPg0KSSdsbCBiZSBob25lc3QgLSBiZWNhdXNlIG9mIHRoZSB3aWxkIHZh cmlhbmNlIGluIHdoZXRoZXIgLmggZmlsZXMgYXJlPGJyPg0KbGlzdGVkIGluIHRoZSBbc291cmNl c10gc2VjdGlvbiBvZiAuaW5mIGZpbGVzLCBJIGhhdmUgYWx3YXlzIGJlZW48YnI+DQp1bnN1cmUg YXMgdG8gd2hldGhlciB0aGV5IHdlcmUganVzdCBiZWluZyBpZ25vcmVkIChhbmQgZXh0cmFjdGVk IG9uPGJyPg0KdGhlIHNpZGUgdmlhIG1rZGVwIG9yIHNpbWlsYXIpLjxicj4NCjxicj4NCjwvc3Bh bj48bzpwPjwvbzpwPjwvcD4NCjwvZGl2Pg0KPC9kaXY+DQo8L2Jsb2NrcXVvdGU+DQo8ZGl2Pg0K PGRpdj4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiPiZuYnNwOzxvOnA+PC9vOnA+PC9wPg0KPC9kaXY+ DQo8L2Rpdj4NCjxkaXY+DQo8ZGl2Pg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+TGVpZiw8bzpwPjwv bzpwPjwvcD4NCjwvZGl2Pg0KPC9kaXY+DQo8ZGl2Pg0KPGRpdj4NCjxwIGNsYXNzPSJNc29Ob3Jt YWwiPiZuYnNwOzxvOnA+PC9vOnA+PC9wPg0KPC9kaXY+DQo8L2Rpdj4NCjxkaXY+DQo8ZGl2Pg0K PHAgY2xhc3M9Ik1zb05vcm1hbCI+SSdtIGNvbmZ1c2VkIHRvbyBhcyB5b3UgY2FuIG9ubHkgcmVh bGx5IGtub3cgdGhlIHNldCBvZiBpbmNsdWRlIGZpbGVzIGJ5IGRvaW5nIHRoZSBta2RlcD88bzpw PjwvbzpwPjwvcD4NCjwvZGl2Pg0KPC9kaXY+DQo8ZGl2Pg0KPGRpdj4NCjxwIGNsYXNzPSJNc29O b3JtYWwiPiZuYnNwOzxvOnA+PC9vOnA+PC9wPg0KPC9kaXY+DQo8L2Rpdj4NCjxkaXY+DQo8ZGl2 Pg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+SSBkb24ndCBzZWUgdGhlIHZhbHVlIG9mIGhhc2hpbmcg dGhlIGxvY2FsIGluY2x1ZGUgZmlsZXMgYXMgYW55IGluY2x1ZGUgZmlsZSBjaGFuZ2UgaW4gdGhl IG1rZGVwIHBhdGggcmVxdWlyZXMgdGhlIG1vZHVsZSB0byBiZSByZWNvbXBpbGVkLiBJdCBzZWVt cyB0byBtZSBoYXZpbmcgb25lIHNjaGVtZSBmb3IgaGFzaGluZyBhbmQgYW50aGVyIGZvdXIgYnVp bGRpbmcgaXMgZ29pbmcgdG8gY2F1c2UgYSBsb3Qgb2YNCiB2ZXJ5IHN1YnRsZSBlcnJvcnMgdGhh dCBhcmUgcmVhbGx5IGhhcmQgdG8gZGVidWcuIFdoZW4geW91IGhhdmUgdGhlc2Uga2luZCBvZiBl cnJvcnMgaW4geW91ciBidWlsZCBzeXN0ZW0geW91IHRlYWNoIHBlb3BsZSB0aGV5IGFsd2F5cyBu ZWVkIHRvIG1ha2UgY2xlYW4sIHNvIHRoZXkgYnlwYXNzIHRoZSBoYXNoaW5nIGFuZCBkZXBlbmRl bmN5IGNoZWNrcy4mbmJzcDs8bzpwPjwvbzpwPjwvcD4NCjwvZGl2Pg0KPC9kaXY+DQo8ZGl2Pg0K PGRpdj4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiPiZuYnNwOzxvOnA+PC9vOnA+PC9wPg0KPC9kaXY+ DQo8L2Rpdj4NCjxkaXY+DQo8ZGl2Pg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+U2VlbXMgbGlrZSB3 ZSBtYXkgYmUgZmlnaHRpbmcgdGhlIG1ha2VmaWxlcyBhZ2FpbiwgYnV0IGZyb20gYSAxMCwwMDAg cG9pbnQgb2YgdmlldyBpdCBzZWVtcyBsaWtlIHRoZSBkZXBlbmRlbmN5IGFsZ29yaXRobSBhbmQg dGhlIGhhc2ggbmVlZCB0byBiZSB0aWVkIHRvZ2V0aGVyLiBTZWVtcyBsaWtlIHRoZSBtYWtlZmls ZSBhbHJlYWR5IGtub3dzIGlmIGl0IG5lZWRzIHRvIGJ1aWxkIGl0LCBidXQgSSdtIG5vdA0KIHN1 cmUgaWYgdGhlIG1ha2VmaWxlIGNhbiBydW4gYW4gYWN0aW9uIGlmIGl0IGRvZXMgbm90IG5lZWQg dG8gYnVpbGQgc29tZXRoaW5nPyZuYnNwOzxvOnA+PC9vOnA+PC9wPg0KPC9kaXY+DQo8L2Rpdj4N CjxkaXY+DQo8ZGl2Pg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+Jm5ic3A7PG86cD48L286cD48L3A+ DQo8L2Rpdj4NCjwvZGl2Pg0KPGRpdj4NCjxkaXY+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj5UaGFu a3MsPG86cD48L286cD48L3A+DQo8L2Rpdj4NCjwvZGl2Pg0KPGRpdj4NCjxkaXY+DQo8cCBjbGFz cz0iTXNvTm9ybWFsIj4mbmJzcDs8bzpwPjwvbzpwPjwvcD4NCjwvZGl2Pg0KPC9kaXY+DQo8ZGl2 Pg0KPGRpdj4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiPkFuZHJldyBGaXNoPG86cD48L286cD48L3A+ DQo8L2Rpdj4NCjwvZGl2Pg0KPGRpdj4NCjxkaXY+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj4mbmJz cDs8bzpwPjwvbzpwPjwvcD4NCjwvZGl2Pg0KPC9kaXY+DQo8ZGl2Pg0KPHAgY2xhc3M9Ik1zb05v cm1hbCIgc3R5bGU9Im1hcmdpbi1ib3R0b206MTIuMHB0Ij48YnI+DQo8YnI+DQo8bzpwPjwvbzpw PjwvcD4NCjwvZGl2Pg0KPGJsb2NrcXVvdGUgc3R5bGU9Im1hcmdpbi10b3A6NS4wcHQ7bWFyZ2lu LWJvdHRvbTo1LjBwdCI+DQo8ZGl2Pg0KPGRpdj4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxl PSJtYXJnaW4tYm90dG9tOjEyLjBwdCI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTo5LjBwdDtmb250 LWZhbWlseTomcXVvdDtIZWx2ZXRpY2EmcXVvdDssc2Fucy1zZXJpZiI+SWYgdGhlIGludGVudCBp cyB0byBzcGVlZCB1cCBidWlsZCB0aW1lLCB3b3VsZCBpdCBub3QgYmUgYmV0dGVyIHRvPGJyPg0K d2FybiB0aGUgdXNlciAtIHNvIHRoZXkgbm90aWNlIHRoZSBwcm9ibGVtIGFuZCBmaXggdGhlaXIg bW9kdWxlcyw8YnI+DQpyYXRoZXIgdGhhbiBhZGRpbmcgZXh0cmEgcHJvY2Vzc2luZyB0aW1lIG9u IGhhdmluZyB0aGUgdG9vbHMgd29yayB3aXRoPGJyPg0KYnJva2VuIC5pbmYgZmlsZXM/PGJyPg0K PGJyPg0KVGhpcyBkb2VzIG5vdCBsb29rIGxpa2UgbWF0ZXJpYWwgZm9yIGVkazItc3RhYmxlMjAx OTA1IHRvIG1lLjxicj4NCjxicj4NCjxicj4NCjwvc3Bhbj48bzpwPjwvbzpwPjwvcD4NCjwvZGl2 Pg0KPGJsb2NrcXVvdGUgc3R5bGU9Im1hcmdpbi10b3A6NS4wcHQ7bWFyZ2luLWJvdHRvbTo1LjBw dCI+DQo8ZGl2Pg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTo5 LjBwdDtmb250LWZhbWlseTomcXVvdDtIZWx2ZXRpY2EmcXVvdDssc2Fucy1zZXJpZiI+W1BBVENI IHYzIDEvMV0gQmFzZVRvb2xzOkV4dGVuZCB0aGUgYmluYXJ5IGNhY2hlIHRvIHN1cHBvcnQgbGli cmFyeSBjYWNoZTxicj4NClRoaXMgcGF0Y2ggaXMgdG8gcmVzb2x2ZSB0aGUgcHJvYmxlbSB0aGF0 PGJyPg0KQnVpbGQgdG9vbCBkb3NlIG5vdCBjYWNoZSB0aGUgbGlicmFyeSBiaW5hcmllcyBub3cu IFdoaXRlb3V0IHRoaXM8YnI+DQpwYXRjaCwgdGhlcmUgaXMgMjUlIGV4dHJhIHRpbWUgY29zdCB0 byByZWJ1aWxkIHRoZSBhbGwgbW9kdWxlPGJyPg0KZGVwZW5kZW5jeSBsaWJyYXJpZXMgaWYgY2Fj aGUgbWlzcyBoYXBwZW4uPC9zcGFuPjxvOnA+PC9vOnA+PC9wPg0KPC9kaXY+DQo8L2Jsb2NrcXVv dGU+DQo8ZGl2Pg0KPHAgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1hcmdpbi1ib3R0b206MTIu MHB0Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOjkuMHB0O2ZvbnQtZmFtaWx5OiZxdW90O0hlbHZl dGljYSZxdW90OyxzYW5zLXNlcmlmIj48YnI+DQoyNSUgaXMgYSBiaWcgbnVtYmVyLCBzbyBJIHdv bid0IGFyZ3VlIGFnYWluc3QgdGhpcy4gQnV0IEkgYWxzbyB3b24ndDxicj4NCmFyZ3VlIGZvciBp dCAtIHRoZSBCWiB3YXMgcmFpc2VkIHZlcnkgbGF0ZSBpbiB0aGUgY3ljbGUuPGJyPg0KPGJyPg0K PGJyPg0KPC9zcGFuPjxvOnA+PC9vOnA+PC9wPg0KPC9kaXY+DQo8YmxvY2txdW90ZSBzdHlsZT0i bWFyZ2luLXRvcDo1LjBwdDttYXJnaW4tYm90dG9tOjUuMHB0Ij4NCjxkaXY+DQo8cCBjbGFzcz0i TXNvTm9ybWFsIj48c3BhbiBzdHlsZT0iZm9udC1zaXplOjkuMHB0O2ZvbnQtZmFtaWx5OiZxdW90 O0hlbHZldGljYSZxdW90OyxzYW5zLXNlcmlmIj5bUEFUQ0hdIEJhc2VUb29sczpVcGRhdGUgYmlu YXJ5IGNhY2hlIHJlc3RvcmUgdGltZSB0byBjdXJyZW50IHRpbWU8YnI+DQpUaGlzIHBhdGNoIGlz IHRvIG1ha2UgdGhlIHJlc3RvcmVkIGJpbmFyeSBmaWxlIGhhdmUgdGhlIGN1cnJlbnQgdGltZTxi cj4NCnN0YW1wIG5vdCB0aGUgYmluYXJ5IGZpbGUgb3JpZ2luYWwgdGltZSBzdGFtcC48L3NwYW4+ PG86cD48L286cD48L3A+DQo8L2Rpdj4NCjwvYmxvY2txdW90ZT4NCjxkaXY+DQo8cCBjbGFzcz0i TXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2luLWJvdHRvbToxMi4wcHQiPjxzcGFuIHN0eWxlPSJmb250 LXNpemU6OS4wcHQ7Zm9udC1mYW1pbHk6JnF1b3Q7SGVsdmV0aWNhJnF1b3Q7LHNhbnMtc2VyaWYi Pjxicj4NCkkgY2FuIHNlZSBob3cgdGhlIGN1cnJlbnQgYmVoYXZpb3VyIGNvdWxkIGNhdXNlIHBy b2JsZW1zIHdpdGggc29tZTxicj4NCkNJL2J1aWxkIHN5c3RlbXMuIElmIGl0IGlzIHByb3Blcmx5 IHJldmlld2VkIGFuZCB0ZXN0ZWQsIEkgYW0gT0sgd2l0aDxicj4NCnRoaXMgb25lIGdvaW5nIGlu IGZvciBlZGsyLXN0YWJsZTIwMTkwMy48YnI+DQo8YnI+DQo8YnI+DQo8L3NwYW4+PG86cD48L286 cD48L3A+DQo8L2Rpdj4NCjxibG9ja3F1b3RlIHN0eWxlPSJtYXJnaW4tdG9wOjUuMHB0O21hcmdp bi1ib3R0b206NS4wcHQiPg0KPGRpdj4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiPjxzcGFuIHN0eWxl PSJmb250LXNpemU6OS4wcHQ7Zm9udC1mYW1pbHk6JnF1b3Q7SGVsdmV0aWNhJnF1b3Q7LHNhbnMt c2VyaWYiPltQQVRDSCBWNV0gQmFzZVRvb2xzOk1ha2UgQmFzZVRvb2xzIHN1cHBvcnQgbmV3IHJ1 bGVzIHRvIGdlbmVyYXRlIFJBVyBGRlMgRklMRTxicj4NClRoaXMgcGF0Y2ggaXMgdG8gc3VwcG9y dCB0aGUgcmF3IGZmcyBmaWxlIHJ1bGUuIE5vdyBidWlsZCB0b29sIGRvZXM8YnI+DQpub3QgY29y cmVjdGx5IGhhbmRsZSB0aGlzIGNhc2U6PGJyPg0KPGJyPg0KW1J1bGUuQ29tbW9uLlVTRVJfREVG SU5FRC5NaWNyb0NvZGVdPGJyPg0KJm5ic3A7RklMRSBSQVcgPSAkKE5BTUVEX0dVSUQpIHs8YnI+ DQombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsm bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDskKElORl9PVVRQVVQpLyQo TU9EVUxFX05BTUUpLmJpbjxicj4NCiZuYnNwO308L3NwYW4+PG86cD48L286cD48L3A+DQo8L2Rp dj4NCjwvYmxvY2txdW90ZT4NCjxkaXY+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibWFy Z2luLWJvdHRvbToxMi4wcHQiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6OS4wcHQ7Zm9udC1mYW1p bHk6JnF1b3Q7SGVsdmV0aWNhJnF1b3Q7LHNhbnMtc2VyaWYiPjxicj4NClRoaXMgbG9va3MgbGlr ZSBhIG5ldyBmZWF0dXJlIC0gbm90IHNvbWV0aGluZyB0aGF0IHNob3VsZCBieXBhc3MgdGhlPGJy Pg0KZnJlZXplIHBlcmlvZCBmb3IgZWRrMi1zdGFibGUyMDE5MDUuPGJyPg0KQ2FuIHlvdSBleHBs YWluIHdoeSB0aGlzIGlzIG5lZWRlZCBpbiB0aGUgc3RhYmxlIHRhZyBhcyBvcHBvc2VkIHRvPGJy Pg0KYmVpbmcgYXZhaWxhYmxlIGZyb20gbWFzdGVyIHRoZSBkYXkgYWZ0ZXIgdGhlIHRhZyBpcyBt YWRlPzxicj4NCjxicj4NCkJlc3QgUmVnYXJkcyw8YnI+DQo8YnI+DQpMZWlmPGJyPg0KPGJyPg0K PGJyPg0KPC9zcGFuPjxvOnA+PC9vOnA+PC9wPg0KPC9kaXY+DQo8YmxvY2txdW90ZSBzdHlsZT0i bWFyZ2luLXRvcDo1LjBwdDttYXJnaW4tYm90dG9tOjUuMHB0Ij4NCjxkaXY+DQo8cCBjbGFzcz0i TXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2luLWJvdHRvbToxMi4wcHQiPjxzcGFuIHN0eWxlPSJmb250 LXNpemU6OS4wcHQ7Zm9udC1mYW1pbHk6JnF1b3Q7SGVsdmV0aWNhJnF1b3Q7LHNhbnMtc2VyaWYi Pjxicj4NCjxicj4NClRoYW5rcyw8YnI+DQpCb2I8YnI+DQo8YnI+DQotLS0tLU9yaWdpbmFsIE1l c3NhZ2UtLS0tLTxicj4NCkZyb206IFJvZHJpZ3VleiwgQ2hyaXN0aWFuPHNwYW4gY2xhc3M9ImFw cGxlLWNvbnZlcnRlZC1zcGFjZSI+Jm5ic3A7PC9zcGFuPjxicj4NClNlbnQ6IFRodXJzZGF5LCBN YXkgMzAsIDIwMTkgMTA6MjYgUE08YnI+DQpUbzogTGVpZiBMaW5kaG9sbSAmbHQ7PGEgaHJlZj0i bWFpbHRvOmxlaWYubGluZGhvbG1AbGluYXJvLm9yZyI+PHNwYW4gc3R5bGU9ImNvbG9yOnB1cnBs ZSI+bGVpZi5saW5kaG9sbUBsaW5hcm8ub3JnPC9zcGFuPjwvYT4mZ3Q7OyBGZW5nLCBCb2IgQyAm bHQ7PGEgaHJlZj0ibWFpbHRvOmJvYi5jLmZlbmdAaW50ZWwuY29tIj48c3BhbiBzdHlsZT0iY29s b3I6cHVycGxlIj5ib2IuYy5mZW5nQGludGVsLmNvbTwvc3Bhbj48L2E+Jmd0Ozxicj4NCkNjOiBB bmRyZXcgRmlzaCAmbHQ7PGEgaHJlZj0ibWFpbHRvOmFmaXNoQGFwcGxlLmNvbSI+PHNwYW4gc3R5 bGU9ImNvbG9yOnB1cnBsZSI+YWZpc2hAYXBwbGUuY29tPC9zcGFuPjwvYT4mZ3Q7OyBMYXN6bG8g RXJzZWsgJmx0OzxhIGhyZWY9Im1haWx0bzpsZXJzZWtAcmVkaGF0LmNvbSI+PHNwYW4gc3R5bGU9 ImNvbG9yOnB1cnBsZSI+bGVyc2VrQHJlZGhhdC5jb208L3NwYW4+PC9hPiZndDs7IEtpbm5leSwg TWljaGFlbCBEICZsdDs8YSBocmVmPSJtYWlsdG86bWljaGFlbC5kLmtpbm5leUBpbnRlbC5jb20i PjxzcGFuIHN0eWxlPSJjb2xvcjpwdXJwbGUiPm1pY2hhZWwuZC5raW5uZXlAaW50ZWwuY29tPC9z cGFuPjwvYT4mZ3Q7OzxhIGhyZWY9Im1haWx0bzpkZXZlbEBlZGsyLmdyb3Vwcy5pbyI+PHNwYW4g c3R5bGU9ImNvbG9yOnB1cnBsZSI+ZGV2ZWxAZWRrMi5ncm91cHMuaW88L3NwYW4+PC9hPjsNCiBH YW8sIExpbWluZyAmbHQ7PGEgaHJlZj0ibWFpbHRvOmxpbWluZy5nYW9AaW50ZWwuY29tIj48c3Bh biBzdHlsZT0iY29sb3I6cHVycGxlIj5saW1pbmcuZ2FvQGludGVsLmNvbTwvc3Bhbj48L2E+Jmd0 OzsgU2hpLCBTdGV2ZW4gJmx0OzxhIGhyZWY9Im1haWx0bzpzdGV2ZW4uc2hpQGludGVsLmNvbSI+ PHNwYW4gc3R5bGU9ImNvbG9yOnB1cnBsZSI+c3RldmVuLnNoaUBpbnRlbC5jb208L3NwYW4+PC9h PiZndDs7IEZhbiwgWmhpanVYICZsdDs8YSBocmVmPSJtYWlsdG86emhpanV4LmZhbkBpbnRlbC5j b20iPjxzcGFuIHN0eWxlPSJjb2xvcjpwdXJwbGUiPnpoaWp1eC5mYW5AaW50ZWwuY29tPC9zcGFu PjwvYT4mZ3Q7PGJyPg0KU3ViamVjdDogUkU6IEVkazIgQmFzZVRvb2xzIFBhdGNoZXMuPGJyPg0K PGJyPg0KSGV5IExlaWYsPGJyPg0KPGJyPg0KSSB0aG91Z2h0IEknZCBoZWxwIEJvYiBhbmQgZ2F0 aGVyIHRob3NlIEJacyBmb3IgZWFjaCB0aHJlYWQ6PGJyPg0KPGJyPg0KW1BhdGNoIFY0IDEvMl0g QmFzZVRvb2xzOiBBZGQgYSBjaGVja2luZyBmb3IgU291cmNlcyBzZWN0aW9uIGluIElORiBmaWxl IFtQYXRjaCBWNCAyLzJdIEJhc2VUb29sczogUmVmYWN0b3IgaGFzaCB0cmFja2luZyBhZnRlciBj aGVja2luZyBmb3IgU291cmNlcyBzZWN0aW9uPGJyPg0KQlo6PHNwYW4gY2xhc3M9ImFwcGxlLWNv bnZlcnRlZC1zcGFjZSI+Jm5ic3A7PC9zcGFuPjxhIGhyZWY9Imh0dHBzOi8vYnVnemlsbGEudGlh bm9jb3JlLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTgwNCI+PHNwYW4gc3R5bGU9ImNvbG9yOnB1cnBs ZSI+aHR0cHM6Ly9idWd6aWxsYS50aWFub2NvcmUub3JnL3Nob3dfYnVnLmNnaT9pZD0xODA0PC9z cGFuPjwvYT48YnI+DQo8YnI+DQpbUEFUQ0ggdjMgMS8xXSBCYXNlVG9vbHM6RXh0ZW5kIHRoZSBi aW5hcnkgY2FjaGUgdG8gc3VwcG9ydCBsaWJyYXJ5IGNhY2hlPGJyPg0KQlo6PHNwYW4gY2xhc3M9 ImFwcGxlLWNvbnZlcnRlZC1zcGFjZSI+Jm5ic3A7PC9zcGFuPjxhIGhyZWY9Imh0dHBzOi8vYnVn emlsbGEudGlhbm9jb3JlLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc5NyI+PHNwYW4gc3R5bGU9ImNv bG9yOnB1cnBsZSI+aHR0cHM6Ly9idWd6aWxsYS50aWFub2NvcmUub3JnL3Nob3dfYnVnLmNnaT9p ZD0xNzk3PC9zcGFuPjwvYT48YnI+DQo8YnI+DQpbUEFUQ0ggVjVdIEJhc2VUb29sczpNYWtlIEJh c2VUb29scyBzdXBwb3J0IG5ldyBydWxlcyB0byBnZW5lcmF0ZSBSQVcgRkZTIEZJTEU8YnI+DQpC Wjo8c3BhbiBjbGFzcz0iYXBwbGUtY29udmVydGVkLXNwYWNlIj4mbmJzcDs8L3NwYW4+PGEgaHJl Zj0iaHR0cHM6Ly9idWd6aWxsYS50aWFub2NvcmUub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzY1Ij48 c3BhbiBzdHlsZT0iY29sb3I6cHVycGxlIj5odHRwczovL2J1Z3ppbGxhLnRpYW5vY29yZS5vcmcv c2hvd19idWcuY2dpP2lkPTE3NjU8L3NwYW4+PC9hPjxicj4NCjxicj4NCltQQVRDSF0gQmFzZVRv b2xzOlVwZGF0ZSBiaW5hcnkgY2FjaGUgcmVzdG9yZSB0aW1lIHRvIGN1cnJlbnQgdGltZTxicj4N CkJaOjxzcGFuIGNsYXNzPSJhcHBsZS1jb252ZXJ0ZWQtc3BhY2UiPiZuYnNwOzwvc3Bhbj48YSBo cmVmPSJodHRwczovL2J1Z3ppbGxhLnRpYW5vY29yZS5vcmcvc2hvd19idWcuY2dpP2lkPTE3NDIi PjxzcGFuIHN0eWxlPSJjb2xvcjpwdXJwbGUiPmh0dHBzOi8vYnVnemlsbGEudGlhbm9jb3JlLm9y Zy9zaG93X2J1Zy5jZ2k/aWQ9MTc0Mjwvc3Bhbj48L2E+PGJyPg0KPGJyPg0KVGhhbmtzLDxicj4N CkNocmlzdGlhbjxicj4NCjxicj4NCjxicj4NCjwvc3Bhbj48bzpwPjwvbzpwPjwvcD4NCjwvZGl2 Pg0KPGJsb2NrcXVvdGUgc3R5bGU9Im1hcmdpbi10b3A6NS4wcHQ7bWFyZ2luLWJvdHRvbTo1LjBw dCI+DQo8ZGl2Pg0KPHAgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1hcmdpbi1ib3R0b206MTIu MHB0Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOjkuMHB0O2ZvbnQtZmFtaWx5OiZxdW90O0hlbHZl dGljYSZxdW90OyxzYW5zLXNlcmlmIj4tLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLTxicj4NCkZy b206IExlaWYgTGluZGhvbG0gWzxhIGhyZWY9Im1haWx0bzpsZWlmLmxpbmRob2xtQGxpbmFyby5v cmciPjxzcGFuIHN0eWxlPSJjb2xvcjpwdXJwbGUiPm1haWx0bzpsZWlmLmxpbmRob2xtQGxpbmFy by5vcmc8L3NwYW4+PC9hPl08YnI+DQpTZW50OiBUaHVyc2RheSwgTWF5IDMwLCAyMDE5IDI6Mjgg QU08YnI+DQpUbzogRmVuZywgQm9iIEMgJmx0OzxhIGhyZWY9Im1haWx0bzpib2IuYy5mZW5nQGlu dGVsLmNvbSI+PHNwYW4gc3R5bGU9ImNvbG9yOnB1cnBsZSI+Ym9iLmMuZmVuZ0BpbnRlbC5jb208 L3NwYW4+PC9hPiZndDs8YnI+DQpDYzogQW5kcmV3IEZpc2ggJmx0OzxhIGhyZWY9Im1haWx0bzph ZmlzaEBhcHBsZS5jb20iPjxzcGFuIHN0eWxlPSJjb2xvcjpwdXJwbGUiPmFmaXNoQGFwcGxlLmNv bTwvc3Bhbj48L2E+Jmd0OzsgTGFzemxvIEVyc2VrICZsdDs8YSBocmVmPSJtYWlsdG86bGVyc2Vr QHJlZGhhdC5jb20iPjxzcGFuIHN0eWxlPSJjb2xvcjpwdXJwbGUiPmxlcnNla0ByZWRoYXQuY29t PC9zcGFuPjwvYT4mZ3Q7OzxzcGFuIGNsYXNzPSJhcHBsZS1jb252ZXJ0ZWQtc3BhY2UiPiZuYnNw Ozwvc3Bhbj48YnI+DQpLaW5uZXksIE1pY2hhZWwgRCAmbHQ7PGEgaHJlZj0ibWFpbHRvOm1pY2hh ZWwuZC5raW5uZXlAaW50ZWwuY29tIj48c3BhbiBzdHlsZT0iY29sb3I6cHVycGxlIj5taWNoYWVs LmQua2lubmV5QGludGVsLmNvbTwvc3Bhbj48L2E+Jmd0Ozs8c3BhbiBjbGFzcz0iYXBwbGUtY29u dmVydGVkLXNwYWNlIj4mbmJzcDs8L3NwYW4+PGEgaHJlZj0ibWFpbHRvOmRldmVsQGVkazIuZ3Jv dXBzLmlvIj48c3BhbiBzdHlsZT0iY29sb3I6cHVycGxlIj5kZXZlbEBlZGsyLmdyb3Vwcy5pbzwv c3Bhbj48L2E+OzxzcGFuIGNsYXNzPSJhcHBsZS1jb252ZXJ0ZWQtc3BhY2UiPiZuYnNwOzwvc3Bh bj48YnI+DQpHYW8sIExpbWluZyAmbHQ7PGEgaHJlZj0ibWFpbHRvOmxpbWluZy5nYW9AaW50ZWwu Y29tIj48c3BhbiBzdHlsZT0iY29sb3I6cHVycGxlIj5saW1pbmcuZ2FvQGludGVsLmNvbTwvc3Bh bj48L2E+Jmd0OzsgU2hpLCBTdGV2ZW4gJmx0OzxhIGhyZWY9Im1haWx0bzpzdGV2ZW4uc2hpQGlu dGVsLmNvbSI+PHNwYW4gc3R5bGU9ImNvbG9yOnB1cnBsZSI+c3RldmVuLnNoaUBpbnRlbC5jb208 L3NwYW4+PC9hPiZndDs7PHNwYW4gY2xhc3M9ImFwcGxlLWNvbnZlcnRlZC1zcGFjZSI+Jm5ic3A7 PC9zcGFuPjxicj4NClJvZHJpZ3VleiwgQ2hyaXN0aWFuICZsdDs8YSBocmVmPSJtYWlsdG86Y2hy aXN0aWFuLnJvZHJpZ3VlekBpbnRlbC5jb20iPjxzcGFuIHN0eWxlPSJjb2xvcjpwdXJwbGUiPmNo cmlzdGlhbi5yb2RyaWd1ZXpAaW50ZWwuY29tPC9zcGFuPjwvYT4mZ3Q7OyBGYW4sIFpoaWp1WDxz cGFuIGNsYXNzPSJhcHBsZS1jb252ZXJ0ZWQtc3BhY2UiPiZuYnNwOzwvc3Bhbj48YnI+DQombHQ7 PGEgaHJlZj0ibWFpbHRvOnpoaWp1eC5mYW5AaW50ZWwuY29tIj48c3BhbiBzdHlsZT0iY29sb3I6 cHVycGxlIj56aGlqdXguZmFuQGludGVsLmNvbTwvc3Bhbj48L2E+Jmd0Ozxicj4NClN1YmplY3Q6 IFJlOiBFZGsyIEJhc2VUb29scyBQYXRjaGVzLjxicj4NCjxicj4NCkhpIEJvYiw8YnI+DQo8YnI+ DQpPbiBUaHUsIE1heSAzMCwgMjAxOSBhdCAwNjozOTo1OUFNICYjNDM7MDAwMCwgRmVuZywgQm9i IEMgd3JvdGU6PGJyPg0KPGJyPg0KPC9zcGFuPjxvOnA+PC9vOnA+PC9wPg0KPC9kaXY+DQo8Ymxv Y2txdW90ZSBzdHlsZT0ibWFyZ2luLXRvcDo1LjBwdDttYXJnaW4tYm90dG9tOjUuMHB0Ij4NCjxk aXY+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj48c3BhbiBzdHlsZT0iZm9udC1zaXplOjkuMHB0O2Zv bnQtZmFtaWx5OiZxdW90O0hlbHZldGljYSZxdW90OyxzYW5zLXNlcmlmIj5IaSw8YnI+DQo8YnI+ DQpDdXJyZW50bHksIHdlIGhhdmUgNSBCYXNldG9vbHMgcGF0Y2hlcyB3aGljaCBhcmUgcmVhZHkg dG8gcHVzaC4gU2luY2U8c3BhbiBjbGFzcz0iYXBwbGUtY29udmVydGVkLXNwYWNlIj4mbmJzcDs8 L3NwYW4+PGJyPg0Kd2UgYXJlIGluIHRoZSBzb2Z0LWZyZWV6ZSBwaGFzZSwgSSdkIGxpa2UgdG8g YXNrIGZvciB5b3VyIG9waW5pb25zIGlmPHNwYW4gY2xhc3M9ImFwcGxlLWNvbnZlcnRlZC1zcGFj ZSI+Jm5ic3A7PC9zcGFuPjxicj4NCnRob3NlIHBhdGNoZXMgY2FuIGJlIHB1c2hlZCB0byBlZGsy IG1hc3Rlci48L3NwYW4+PG86cD48L286cD48L3A+DQo8L2Rpdj4NCjwvYmxvY2txdW90ZT4NCjxk aXY+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2luLWJvdHRvbToxMi4wcHQiPjxz cGFuIHN0eWxlPSJmb250LXNpemU6OS4wcHQ7Zm9udC1mYW1pbHk6JnF1b3Q7SGVsdmV0aWNhJnF1 b3Q7LHNhbnMtc2VyaWYiPjxicj4NClRvIHNhdmUgbWUgdGhlIHRpbWUgb2YgcmVhZGluZyB0aHJv dWdoIGFsbCB0aGUgdGhyZWFkcyBhbmQgZ2V0dGluZyB0bzxzcGFuIGNsYXNzPSJhcHBsZS1jb252 ZXJ0ZWQtc3BhY2UiPiZuYnNwOzwvc3Bhbj48YnI+DQpncmlwcyB3aXRoIGFsbCB0aGUgY29kZSwg Y291bGQgeW91IHN1bW1hcmlzZSB0aGUgcHJvYmxlbSB0aGVzZSBzb2x2ZTxzcGFuIGNsYXNzPSJh cHBsZS1jb252ZXJ0ZWQtc3BhY2UiPiZuYnNwOzwvc3Bhbj48YnI+DQphbmQgdGhlIGltcGFjdCBv ZiBub3QgaW5jbHVkaW5nIHRoZXNlPzxicj4NCjxicj4NCklzIHRoZXJlIGEgQlo/PGJyPg0KPGJy Pg0KUmVnYXJkcyw8YnI+DQo8YnI+DQpMZWlmPGJyPg0KPGJyPg0KPGJyPg0KPC9zcGFuPjxvOnA+ PC9vOnA+PC9wPg0KPC9kaXY+DQo8YmxvY2txdW90ZSBzdHlsZT0ibWFyZ2luLXRvcDo1LjBwdDtt YXJnaW4tYm90dG9tOjUuMHB0Ij4NCjxkaXY+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj48c3BhbiBz dHlsZT0iZm9udC1zaXplOjkuMHB0O2ZvbnQtZmFtaWx5OiZxdW90O0hlbHZldGljYSZxdW90Oyxz YW5zLXNlcmlmIj48YnI+DQpUaGVzZSA1IHBhdGNoZXMgYXJlIHRvIGZpeCB0aGUgaXNzdWVzIGZv ciB0aGUgYnVpbGQgY2FjaGUgZmVhdHVyZS48YnI+DQo8YnI+DQpbUGF0Y2ggVjQgMi8yXSBCYXNl VG9vbHM6IFJlZmFjdG9yIGhhc2ggdHJhY2tpbmcgYWZ0ZXIgY2hlY2tpbmcgZm9yPHNwYW4gY2xh c3M9ImFwcGxlLWNvbnZlcnRlZC1zcGFjZSI+Jm5ic3A7PC9zcGFuPjxicj4NClNvdXJjZXMgc2Vj dGlvbjxicj4NCjxhIGhyZWY9Imh0dHBzOi8vZWRrMi5ncm91cHMuaW8vZy9kZXZlbC90b3BpYy8z MTgzNTU1NiM0MTY0MiI+PHNwYW4gc3R5bGU9ImNvbG9yOnB1cnBsZSI+aHR0cHM6Ly9lZGsyLmdy b3Vwcy5pby9nL2RldmVsL3RvcGljLzMxODM1NTU2IzQxNjQyPC9zcGFuPjwvYT48YnI+DQo8YnI+ DQpbUGF0Y2ggVjQgMS8yXSBCYXNlVG9vbHM6IEFkZCBhIGNoZWNraW5nIGZvciBTb3VyY2VzIHNl Y3Rpb24gaW4gSU5GPHNwYW4gY2xhc3M9ImFwcGxlLWNvbnZlcnRlZC1zcGFjZSI+Jm5ic3A7PC9z cGFuPjxicj4NCmZpbGU8YnI+DQo8YSBocmVmPSJodHRwczovL2VkazIuZ3JvdXBzLmlvL2cvZGV2 ZWwvdG9waWMvMzE4MzU1NTUjNDE2NDEiPjxzcGFuIHN0eWxlPSJjb2xvcjpwdXJwbGUiPmh0dHBz Oi8vZWRrMi5ncm91cHMuaW8vZy9kZXZlbC90b3BpYy8zMTgzNTU1NSM0MTY0MTwvc3Bhbj48L2E+ PGJyPg0KPGJyPg0KW1BBVENIIHYzIDEvMV0gQmFzZVRvb2xzOkV4dGVuZCB0aGUgYmluYXJ5IGNh Y2hlIHRvIHN1cHBvcnQgbGlicmFyeTxzcGFuIGNsYXNzPSJhcHBsZS1jb252ZXJ0ZWQtc3BhY2Ui PiZuYnNwOzwvc3Bhbj48YnI+DQpjYWNoZTxicj4NCjxhIGhyZWY9Imh0dHBzOi8vZWRrMi5ncm91 cHMuaW8vZy9kZXZlbC90b3BpYy8zMTg0MzUwNSM0MTY1NSI+PHNwYW4gc3R5bGU9ImNvbG9yOnB1 cnBsZSI+aHR0cHM6Ly9lZGsyLmdyb3Vwcy5pby9nL2RldmVsL3RvcGljLzMxODQzNTA1IzQxNjU1 PC9zcGFuPjwvYT48YnI+DQo8YnI+DQpbUEFUQ0ggVjVdIEJhc2VUb29sczpNYWtlIEJhc2VUb29s cyBzdXBwb3J0IG5ldyBydWxlcyB0byBnZW5lcmF0ZSBSQVc8c3BhbiBjbGFzcz0iYXBwbGUtY29u dmVydGVkLXNwYWNlIj4mbmJzcDs8L3NwYW4+PGJyPg0KRkZTIEZJTEU8YnI+DQo8YSBocmVmPSJo dHRwczovL2VkazIuZ3JvdXBzLmlvL2cvZGV2ZWwvdG9waWMvMzE4MzA4MDcjNDE1NzEiPjxzcGFu IHN0eWxlPSJjb2xvcjpwdXJwbGUiPmh0dHBzOi8vZWRrMi5ncm91cHMuaW8vZy9kZXZlbC90b3Bp Yy8zMTgzMDgwNyM0MTU3MTwvc3Bhbj48L2E+PGJyPg0KPGJyPg0KW1BBVENIXSBCYXNlVG9vbHM6 VXBkYXRlIGJpbmFyeSBjYWNoZSByZXN0b3JlIHRpbWUgdG8gY3VycmVudCB0aW1lPGJyPg0KPGEg aHJlZj0iaHR0cHM6Ly9lZGsyLmdyb3Vwcy5pby9nL2RldmVsL3RvcGljLzMxODE5NTkwIzQxNDY4 Ij48c3BhbiBzdHlsZT0iY29sb3I6cHVycGxlIj5odHRwczovL2VkazIuZ3JvdXBzLmlvL2cvZGV2 ZWwvdG9waWMvMzE4MTk1OTAjNDE0Njg8L3NwYW4+PC9hPjxicj4NCjxicj4NCjxicj4NClRoYW5r cyw8YnI+DQpCb2I8L3NwYW4+PG86cD48L286cD48L3A+DQo8L2Rpdj4NCjwvYmxvY2txdW90ZT4N CjwvYmxvY2txdW90ZT4NCjwvYmxvY2txdW90ZT4NCjxkaXY+DQo8cCBjbGFzcz0iTXNvTm9ybWFs IiBzdHlsZT0ibWFyZ2luLWJvdHRvbToxMi4wcHQiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6OS4w cHQ7Zm9udC1mYW1pbHk6JnF1b3Q7SGVsdmV0aWNhJnF1b3Q7LHNhbnMtc2VyaWYiPjxicj4NCjxi cj4NCjwvc3Bhbj48bzpwPjwvbzpwPjwvcD4NCjwvZGl2Pg0KPC9kaXY+DQo8L2Jsb2NrcXVvdGU+ DQo8L2Rpdj4NCjxkaXY+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj4mbmJzcDs8bzpwPjwvbzpwPjwv cD4NCjwvZGl2Pg0KPC9kaXY+DQo8L2Jsb2NrcXVvdGU+DQo8L2Rpdj4NCjxwIGNsYXNzPSJNc29O b3JtYWwiPjxvOnA+Jm5ic3A7PC9vOnA+PC9wPg0KPC9kaXY+DQo8L2Rpdj4NCjxkaXY+DQo8cCBj bGFzcz0iTXNvTm9ybWFsIj48L286cD48L3NwYW4+PC9wPg0KPC9kaXY+DQo8L2Rpdj4NCjwvYm9k eT4NCjwvaHRtbD4NCg== --_000_08650203BA1BD64D8AD9B6D5D74A85D16012CBB6SHSMSX101ccrcor_--