* [PATCH] IntelFsp2Pkg: Converted PatchFvUserManual from .docx to .md format
@ 2016-08-05 15:03 Giri P Mudusuru
2016-08-05 19:55 ` [PATCHV2] " Giri P Mudusuru
0 siblings, 1 reply; 3+ messages in thread
From: Giri P Mudusuru @ 2016-08-05 15:03 UTC (permalink / raw)
To: edk2-devel; +Cc: Jiewen Yao, Maurice Ma, Satya Yarlagadda
Converted the the word format of the documentation into markdown format
for PatchFvUserManual
Cc: Jiewen Yao <jiewen.yao@intel.com>
Cc: Maurice Ma <maurice.ma@intel.com>
Cc: Satya Yarlagadda <satya.p.yarlagadda@intel.com>
Cc: Satya Yarlagadda <satya.p.yarlagadda@intel.com>
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Giri P Mudusuru <giri.p.mudusuru@intel.com>
---
.../Tools/UserManuals/PatchFvUserManual.docx | Bin 21481 -> 0 bytes
.../Tools/UserManuals/PatchFvUserManual.md | 123 +++++++++++++++++++++
2 files changed, 123 insertions(+)
delete mode 100644 IntelFsp2Pkg/Tools/UserManuals/PatchFvUserManual.docx
create mode 100644 IntelFsp2Pkg/Tools/UserManuals/PatchFvUserManual.md
diff --git a/IntelFsp2Pkg/Tools/UserManuals/PatchFvUserManual.docx b/IntelFsp2Pkg/Tools/UserManuals/PatchFvUserManual.docx
deleted file mode 100644
index ab1eda993e7b7d249a0390dc1db83ff4987395da..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 21481
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
diff --git a/IntelFsp2Pkg/Tools/UserManuals/PatchFvUserManual.md b/IntelFsp2Pkg/Tools/UserManuals/PatchFvUserManual.md
new file mode 100644
index 0000000..3c5d89f
--- /dev/null
+++ b/IntelFsp2Pkg/Tools/UserManuals/PatchFvUserManual.md
@@ -0,0 +1,123 @@
+#Name
+**_PatchFv.py_** - The python script that patches the firmware volumes (**FV**)
+with in the flash device (**FD**) file post FSP build.
+
+#Synopsis
+
+```
+PatchFv FvBuildDir [FvFileBaseNames:]FdFileBaseNameToPatch ["Offset, Value"]+
+ | ["Offset, Value, @Comment"]+
+ | ["Offset, Value, $Command"]+
+ | ["Offset, Value, $Command, @Comment"]+
+```
+
+#Description
+The **_PatchFv.py_** tool allows the developer to fix up FD images to follow the
+Intel FSP Architecture specification. It also makes the FD image relocatable.
+The tool is written in Python and uses Python 2.7 or later to run.
+Consider using the tool in a build script.
+
+#FvBuildDir (Argument 1)
+This is the first argument that **_PatchFv.py_** requires. It is the build
+directory for all firmware volumes created during the FSP build. The path must
+be either an absolute path or a relevant path, relevant to the top level of the
+FSP tree.
+
+####Example usage:
+```
+ Build\YouPlatformFspPkg\%BD_TARGET%_%VS_VERSION%%VS_X86%\FV
+```
+
+The example used contains Windows batch script %VARIABLES%.
+
+#FvFileBaseNames (Argument 2: 0ptional Part 1)
+The firmware volume file base names (**_FvFileBaseNames_**) are the independent
+Fv’s that are to be patched within the FD. (0 or more in the form
+**FVFILEBASENAME:**) The colon **:** is used for delimiting the single
+argument and must be appended to the end of each (**_FvFileBaseNames_**).
+
+####Example usage:
+```
+STAGE1:STAGE2:MANIFEST:YOURPLATFORM
+```
+
+In the example **STAGE1** is **STAGE1.Fv** in **YOURPLATFORM.fd**.
+
+# FdFileNameToPatch (Argument 2: Mandatory Part 2)
+
+Firmware device file name to patch (**_FdFileNameToPatch_**) is the base name of
+the FD file that is to be patched. (1 only, in the form **YOURPLATFORM**)
+
+####Example usage:
+```
+STAGE1:STAGE2:MANIFEST:YOURPLATFORM
+```
+
+In the example **YOURPLATFORM** is from **_YOURPLATFORM.fd_**
+
+#"Offset, Value[, Command][, Comment]" (Argument 3)
+The **_Offset_** can be a positive or negative number and represents where the
+**_Value_** to be patched is located within the FD. The **_Value_** is what
+will be written at the given **_Offset_** in the FD. Constants may be used for
+both offsets and values. Also, this argument handles expressions for both
+offsets and values using these operators:
+
+```
+ = - * & | ~ ( ) [ ] { } < >
+```
+
+The entire argument includes the quote marks like in the example argument below:
+
+```
+0xFFFFFFC0, SomeCore:__EntryPoint - [0x000000F0],@SomeCore Entry
+```
+
+###Constants:
+ Hexadecimal (use **0x** as prefix) | Decimal
+
+####Examples:
+
+| **Positive Hex** | **Negative Hex** | **Positive Decimal** | **Negative Decimal** |
+| ---------------: | ---------------: | -------------------: | -------------------: |
+| 0x000000BC | 0xFFFFFFA2 | 188 | -94 |
+
+```
+ModuleName:FunctionName | ModuleName:GlobalVariableName
+ModuleGuid:Offset
+```
+
+###Operators:
+
+```
+
+ + Addition
+ - Subtraction
+ * Multiplication
+ & Logical and
+ | Logical or
+ ~ Complement
+ ( ) Evaluation control
+ [ ] Get a DWord value at the specified offset expression from [expr]
+ { } Convert an offset {expr} into an absolute address (FSP_BASE + expr)
+ < > Convert absolute address <expr> into an image offset (expr & FSP_SIZE)
+
+```
+
+###Special Commands:
+Special commands must use the **$** symbol as a prefix to the command itself.
+There is only one command available at this time.
+
+```
+$COPY – Copy a binary block from source to destination.
+```
+
+####Example:
+
+```
+0x94, [PlatformInit:__gPcd_BinPatch_FvRecOffset] + 0x94, [0x98], $COPY, @Sync up 2nd FSP Header
+```
+
+###Comments:
+Comments are allowed in the **Offset, Value [, Comment]** argument. Comments
+must use the **@** symbol as a prefix. The comment will output to the build
+window upon successful completion of patching along with the offset and value data.
--
2.9.0.windows.1
^ permalink raw reply related [flat|nested] 3+ messages in thread
* [PATCHV2] IntelFsp2Pkg: Converted PatchFvUserManual from .docx to .md format
2016-08-05 15:03 [PATCH] IntelFsp2Pkg: Converted PatchFvUserManual from .docx to .md format Giri P Mudusuru
@ 2016-08-05 19:55 ` Giri P Mudusuru
2016-08-06 12:15 ` Yao, Jiewen
0 siblings, 1 reply; 3+ messages in thread
From: Giri P Mudusuru @ 2016-08-05 19:55 UTC (permalink / raw)
To: edk2-devel; +Cc: Jiewen Yao, Maurice Ma, Satya Yarlagadda
Converted the the word format of the documentation into markdown format
for PatchFv.py
V2: updated the commit message descripton
Cc: Jiewen Yao <jiewen.yao@intel.com>
Cc: Maurice Ma <maurice.ma@intel.com>
Cc: Satya Yarlagadda <satya.p.yarlagadda@intel.com>
Cc: Satya Yarlagadda <satya.p.yarlagadda@intel.com>
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Giri P Mudusuru <giri.p.mudusuru@intel.com>
---
.../Tools/UserManuals/PatchFvUserManual.docx | Bin 21481 -> 0 bytes
.../Tools/UserManuals/PatchFvUserManual.md | 123 +++++++++++++++++++++
2 files changed, 123 insertions(+)
delete mode 100644 IntelFsp2Pkg/Tools/UserManuals/PatchFvUserManual.docx
create mode 100644 IntelFsp2Pkg/Tools/UserManuals/PatchFvUserManual.md
diff --git a/IntelFsp2Pkg/Tools/UserManuals/PatchFvUserManual.docx b/IntelFsp2Pkg/Tools/UserManuals/PatchFvUserManual.docx
deleted file mode 100644
index ab1eda993e7b7d249a0390dc1db83ff4987395da..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 21481
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
diff --git a/IntelFsp2Pkg/Tools/UserManuals/PatchFvUserManual.md b/IntelFsp2Pkg/Tools/UserManuals/PatchFvUserManual.md
new file mode 100644
index 0000000..3c5d89f
--- /dev/null
+++ b/IntelFsp2Pkg/Tools/UserManuals/PatchFvUserManual.md
@@ -0,0 +1,123 @@
+#Name
+**_PatchFv.py_** - The python script that patches the firmware volumes (**FV**)
+with in the flash device (**FD**) file post FSP build.
+
+#Synopsis
+
+```
+PatchFv FvBuildDir [FvFileBaseNames:]FdFileBaseNameToPatch ["Offset, Value"]+
+ | ["Offset, Value, @Comment"]+
+ | ["Offset, Value, $Command"]+
+ | ["Offset, Value, $Command, @Comment"]+
+```
+
+#Description
+The **_PatchFv.py_** tool allows the developer to fix up FD images to follow the
+Intel FSP Architecture specification. It also makes the FD image relocatable.
+The tool is written in Python and uses Python 2.7 or later to run.
+Consider using the tool in a build script.
+
+#FvBuildDir (Argument 1)
+This is the first argument that **_PatchFv.py_** requires. It is the build
+directory for all firmware volumes created during the FSP build. The path must
+be either an absolute path or a relevant path, relevant to the top level of the
+FSP tree.
+
+####Example usage:
+```
+ Build\YouPlatformFspPkg\%BD_TARGET%_%VS_VERSION%%VS_X86%\FV
+```
+
+The example used contains Windows batch script %VARIABLES%.
+
+#FvFileBaseNames (Argument 2: 0ptional Part 1)
+The firmware volume file base names (**_FvFileBaseNames_**) are the independent
+Fv’s that are to be patched within the FD. (0 or more in the form
+**FVFILEBASENAME:**) The colon **:** is used for delimiting the single
+argument and must be appended to the end of each (**_FvFileBaseNames_**).
+
+####Example usage:
+```
+STAGE1:STAGE2:MANIFEST:YOURPLATFORM
+```
+
+In the example **STAGE1** is **STAGE1.Fv** in **YOURPLATFORM.fd**.
+
+# FdFileNameToPatch (Argument 2: Mandatory Part 2)
+
+Firmware device file name to patch (**_FdFileNameToPatch_**) is the base name of
+the FD file that is to be patched. (1 only, in the form **YOURPLATFORM**)
+
+####Example usage:
+```
+STAGE1:STAGE2:MANIFEST:YOURPLATFORM
+```
+
+In the example **YOURPLATFORM** is from **_YOURPLATFORM.fd_**
+
+#"Offset, Value[, Command][, Comment]" (Argument 3)
+The **_Offset_** can be a positive or negative number and represents where the
+**_Value_** to be patched is located within the FD. The **_Value_** is what
+will be written at the given **_Offset_** in the FD. Constants may be used for
+both offsets and values. Also, this argument handles expressions for both
+offsets and values using these operators:
+
+```
+ = - * & | ~ ( ) [ ] { } < >
+```
+
+The entire argument includes the quote marks like in the example argument below:
+
+```
+0xFFFFFFC0, SomeCore:__EntryPoint - [0x000000F0],@SomeCore Entry
+```
+
+###Constants:
+ Hexadecimal (use **0x** as prefix) | Decimal
+
+####Examples:
+
+| **Positive Hex** | **Negative Hex** | **Positive Decimal** | **Negative Decimal** |
+| ---------------: | ---------------: | -------------------: | -------------------: |
+| 0x000000BC | 0xFFFFFFA2 | 188 | -94 |
+
+```
+ModuleName:FunctionName | ModuleName:GlobalVariableName
+ModuleGuid:Offset
+```
+
+###Operators:
+
+```
+
+ + Addition
+ - Subtraction
+ * Multiplication
+ & Logical and
+ | Logical or
+ ~ Complement
+ ( ) Evaluation control
+ [ ] Get a DWord value at the specified offset expression from [expr]
+ { } Convert an offset {expr} into an absolute address (FSP_BASE + expr)
+ < > Convert absolute address <expr> into an image offset (expr & FSP_SIZE)
+
+```
+
+###Special Commands:
+Special commands must use the **$** symbol as a prefix to the command itself.
+There is only one command available at this time.
+
+```
+$COPY – Copy a binary block from source to destination.
+```
+
+####Example:
+
+```
+0x94, [PlatformInit:__gPcd_BinPatch_FvRecOffset] + 0x94, [0x98], $COPY, @Sync up 2nd FSP Header
+```
+
+###Comments:
+Comments are allowed in the **Offset, Value [, Comment]** argument. Comments
+must use the **@** symbol as a prefix. The comment will output to the build
+window upon successful completion of patching along with the offset and value data.
--
2.9.0.windows.1
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCHV2] IntelFsp2Pkg: Converted PatchFvUserManual from .docx to .md format
2016-08-05 19:55 ` [PATCHV2] " Giri P Mudusuru
@ 2016-08-06 12:15 ` Yao, Jiewen
0 siblings, 0 replies; 3+ messages in thread
From: Yao, Jiewen @ 2016-08-06 12:15 UTC (permalink / raw)
To: Mudusuru, Giri P, edk2-devel@lists.01.org
Reviewed-by: Jiewen.yao@intel.com
> -----Original Message-----
> From: Mudusuru, Giri P
> Sent: Saturday, August 6, 2016 3:55 AM
> To: edk2-devel@lists.01.org
> Cc: Yao, Jiewen <jiewen.yao@intel.com>; Ma, Maurice
> <maurice.ma@intel.com>; Yarlagadda, Satya P
> <satya.p.yarlagadda@intel.com>
> Subject: [edk2] [PATCHV2] IntelFsp2Pkg: Converted PatchFvUserManual
> from .docx to .md format
>
> Converted the the word format of the documentation into markdown
> format
> for PatchFv.py
>
> V2: updated the commit message descripton
>
> Cc: Jiewen Yao <jiewen.yao@intel.com>
> Cc: Maurice Ma <maurice.ma@intel.com>
> Cc: Satya Yarlagadda <satya.p.yarlagadda@intel.com>
> Cc: Satya Yarlagadda <satya.p.yarlagadda@intel.com>
> Contributed-under: TianoCore Contribution Agreement 1.0
> Signed-off-by: Giri P Mudusuru <giri.p.mudusuru@intel.com>
> ---
> .../Tools/UserManuals/PatchFvUserManual.docx | Bin 21481 -> 0
> bytes
> .../Tools/UserManuals/PatchFvUserManual.md | 123
> +++++++++++++++++++++
> 2 files changed, 123 insertions(+)
> delete mode 100644
> IntelFsp2Pkg/Tools/UserManuals/PatchFvUserManual.docx
> create mode 100644
> IntelFsp2Pkg/Tools/UserManuals/PatchFvUserManual.md
>
> diff --git a/IntelFsp2Pkg/Tools/UserManuals/PatchFvUserManual.docx
> b/IntelFsp2Pkg/Tools/UserManuals/PatchFvUserManual.docx
> deleted file mode 100644
> index
> ab1eda993e7b7d249a0390dc1db83ff4987395da..0000000000000000000000
> 000000000000000000
> GIT binary patch
> literal 0
> HcmV?d00001
>
> literal 21481
> zcmeF2^Ot7LlBnOZZQHhOS9RI8ZQJbXQkT1I+cvvwSC{R&^?he%%{h0@z5l?>{
> vlVs
> zd+!w)J2T>q^+aYU%7B2P0>A-~004jp07V)e6bJ+W#DM_-C;&)cZ4rAr7gIYIeHB
> j!
> zQ)gXz4_h0;d{AJ@TmbOb`~Q3W51xUB6gh=pLBz02@(+kQb&xeL#-Wsl-1`!_it
> 7$~
> zk(CiY6Z6;mOFU_rvb<kfoe4e6m#-5rEWxwVKW2e>sja{LR`8+)Cb2D=pf#<YAA
> U*|
> z!weY}wS+6Qfg2I;ACK;JIR}uGv8UA$gSroMjR80G3~)2LBxzTR<!TG;$&Vl~f%t9
> w
> z*>JFw1EB0GTGs4r1357<h_LF-?qv*!MAEiZ>sNGqBhRAwjv6TW+-I_-vs)=5{5{j
> X
> zMiIUmGWc38{B*yjx9K81|C&13g4o9cIfL<O?j^=tZHnza0r!XHPJ?F^DeL|Bj9W
> Ee
> zV$-VeLatfibi7X?c-TM4SC>>)8z|>nDwIQ>@Jak`?)cbyWhaGA%jM^8!HATF%C
> cP_
> zL5}LjEvgry8hx+h-AZSX?m_#k*vi*>eNd5~j4|SED8w@zAX_@G=FT=Iahh``vK_
> 9H
> zul=9-=NmyKWyaWC5d4%DYNBfqY;g_VQx^zj=cz)!cPBa4T%Mo+fX`15fa1S+E
> `B0*
> z^X->8%6~Z~%$MitJDJ)zGtmFl{;$XW4|dak`t+EjHE9qb*sx2mEyEFCjx}iFxs^@
> H
> zJa^(hAR*~zK<@Apg{xhi1%z#iYkG%wN8<{=GlMf1c#3(!s|__5bC)v>B(|(QY@4
> GY
> z6g5Y*GlI<FB&KRC?d*Ru@Fu3@@y0Nf=kL~s36b&>o3Yds=!A}Rsk9~FN<k^d
> Cr;qp
> z$CS5q4d1DQWTY3ZYQkBXUkWx3Yq0D8hS%l5_JcONTpo`^8-XyiU!gamwvifgi
> nXG;
> zr^U8moF@C3XjB2szHOPmcrW^?9~~D;3zY{IIeqKnngybzhv2f3?>St}LqMcSi|*
> _F
> zDiU1JV8Q<t!~VOE`0)JTBK~^P3IYJ&0w96h?VU^*{^2Ml_QtNZUxDtg2=|{(1N0
> T<
> zzTW<yeN`mODTFZo<8OYh9aT*?cBKx3ZKb^GdYw+$A|%yi2;rj>tsZ(TAA(-aETe
> 0B
> zUaDQIdr|cc7(cc?=$B(3an0Dl5PA@wjlBZBW(cV*J&n0g4SGUl{a(Q$o=Q?55v^
> RX
> zl4LEVhSY+NV_aE?meCn@jiCgOz6|s)1`m?OWZD3RB$H8Jfnd|%35#TyLyl*v=q
> 6i~
> z5r1=@%Ge<5;%w_0)}U=j(H%2P=3fi}plj~C+oMk{eY*j|wkht%tb=2VZ^<7*otS
> zt
> zB#mg>1$j5()`|<mpX(Vnk_a9#G0y}A$0MCWF88Q@Tol=TFoE`7>Nj?B#kf;PE;
> Cbe
> zY8PeM!|K-3yEgKX>dPCSUf(+p^+FK%bspgVos9_)mxQWd006lu007dL>HKYD|
> 7=}n
> zeAdouBZ*tpryn3ujhl5Sn&7?7^hT))+NyPxNw}Bip1Smipk!G>0YHMItIpqE32vx
> V
> zM|0Nnoi=U(=HMWRq-2#1H0pKiKohbG3f)ER#YYPMAIy)jG8|EzjGPrJkCRb5;P
> RaJ
> zLAU*5`kS#i%{1a!%e@N^{XKjYI_-`J(;J^}@dCPdvLfbO?!f~A^g&PCRy(+A^hqX;
> zSG!_oIxWsTn>pU{s6#unEAD;I(GKjlxQ~OXm~#3WW{aesTB3P-LrgIoHNi4GR
> W%of
> zE1P|xI6WHmj2UZE9R%V>42N!ao~<76oeXCKnI2s~bVRnylHF18)l!uldH`P8z#(
> $*
> zl!9jro5W)i!YuT*Tqc-=BwZ0Y1O|}7Pkq`IMYXo}jDs-nbEdPT^hf-k7gkD@=0h^Y
> zI%aTTiN0VmwWo~pKf$q-S1m4-dADDx)Kt%Ft<dGdDk0qx`xL=JJ!RoX*B^o!GS
> 3xB
> zh%q>gFkbwyLdV6Rr~1|^n+vv`S236m!4uNu`aE|Rc4N6mYA#knI~{0-*10&j5&
> A~5
> zp8&I}jdp}$YHftH<U4oRpL&?;5QH{G#o=i4xUiL8jmkUmVHXp6FH#SaQ2ceLl|t
> 5%
> z+}c^9h1K=@tL}OCzs?EN^jg`aE3FQ|x?c6e1#&`qB(KiEVCB~mhol~3`P{E9g*SU
> e
> z-i+{KC<yUootLZOU$uI8D#cyb_mszg)?tbOKQE^Ys_4dP;jSZpa$@X_zYjKEk57L
> x
> zZt9L)ftYboBaL{qvty@&8j6Y&48W`fx@wBror(Xj`(;gAl^o5;Xhd;?9+{}K90}xv
> z8sZKspksU}c1y$K6gxfxp+tbAK;{F~md}_KON`6jswcR0-FN?9KM;q^U8)n%wm1
> IG
> zH#X=bBU@45r1)W?<t7QHALdxpho_6N=z{E+VDH4^3APA4r9hAni05o6e9{f+
> 0o^bQ
> z)y*)rY;q^SZ5A)*=NWqzlcv{4LkU8?ZQQ9($9p~lL}l6H8Je7Ywg%Qzi}3|tJA9wm
> z+29=Oy#u_}xmjhOX0X#$iLPyI*@*~}$I0ymCnjf7WR@c)DN}&Ka2!OEKO#NJb
> ZiXA
> z1zMlOEX?kiGDKnB6A_XP%FWgjg@xFFUSsSV5DEne5pbFV?PLbBu;RxC(*$K;x
> =AuR
> zi$aHqSRY?npdR$7P6`Ln&yEfVWniQYiA0vW{H^siA4;}@*LFr@MSWi$x7n~nF
> $4U>
> z4VkJF{0i;x+mY<8CDW%C_$M9fV?BpQ71DfnBBb75W+_SEhTi%YrMHR>7x>a
> _<2*jD
> zzLv;~Cv(uQ&b*`f{nzW)&yObwO{-6MTj(~j(N)y$-Ka6bywR)0k&4ai>kY!J0tM*b
> zj(AjC1fxkm*M<dB1G61hNdk++FW)I<>=Oigf4)fO&awYdnM3j^e{gU&WtORS
> Germ&
> zBrrYUb5w@cJ<Sdt2`WTwFxon8247rwA89Ew%lOGZ;AmhTpRFEPzCZ2kgLljhI!
> w*l
> zY#s^oF-`sJqCA-HJ<ZD)wj(`kdt0_|hQnqHp}K?tIm^8Yp*MU)Quu1qmnjv-n3uJq
> z)i-Wa+5>%ecwhsfi{0U2aFeTr9iwVbXgN~U>;Z0%GEjbRCT%SzJvrH(Slicgjna`J
> zs4J-u#xMu5O(Lhcf!~v_;>>szKcKHP`PplmII4rx5#&xMTk(?C0>&5%q~WZ&af`
> Wc
> zB)|YgOuPa1Ar@%hX9pFph7o0~LEr->Ci^`uGeh+m#sacZm-glv8_(|q<!|tvv`sG
> K
> z=58qI=O|*!Q+80hz0Id;wkpR!zN^twmI3uIvRaySb5{K?xvBZ$CUxH=+a1aObh
> Rf0
> zfFB+K2Z$<zZZ%{R1fuWw)4~F>?J|vnL!dzAW7oUs`68$kFN|y>>Q~eHoGG9Rt
> hc8i
> zTRqXfDF%$w`el1o0dJYsMl!!wYS^==V9M_UH_OFRdDvpP=fw~uhgi}W%S2qb
> pSn6v
> z1OY~lVIa@2Z^;Z?cCqO}sRAr*x96l_g;GO0C2X(=HP>ZufX|jq?C()R@aScb>0zI
> G
> z?qeNNqdG~QHjrtv6)JBsanZXyt?+znk6<82X^j((>eMC2?Vg!W!zchLz=k!PTn~(6
> zZ9)z5)2dint!Uxih}pTX`cP;Njd-7|J&K@E1S4V8r!2d-@7LiDp1|1P&U8c9yZg7#
> z@d_{f3YT8R3=)^wK3+E;XY;SKCo8jS912%kpBr}k&yH_h5eNeY8dwX*>YZxV86
> Z{u
> zX`aT7R(rq44v{7@1Mi-P8anvHZ00Rwf&0)sxX26>P~iu>3111>yC6uQY}25IR6P
> st
> zM_)Hjl&bxCxxK#yY2I3PE`ZwW6GX=i*mln1(3t+|VZ=zYH-0tX5RX(6mpLk^+bW
> Aw
> z2kMQrG?h_KLySW<E3Q3(@_38|Y`kiVZnWk#jQ1t*-(|hfk_?Lau41wd(-mFcoiq
> Ic
> zuwfEThGtb!ktb5skr*SG#PoI$5!u{-`QCac?2-Z?H(UjZITmq|lhQ&mBcKpo@rd
> @o
> zfH#FpySAH9O(0;#7APsUm^|b87BOLP9#aro<Z!tA_fFY}8#2U2+*W*ioW%R)
> %CX$#
> zy`)-u#(VT;XM7gTJ#-h{ih<f8|EbDatkD|IK`Dyx7?J!VfLl}>m0d{LNK#&RE7Kc_
> zW6)t3q)5ancQ-5&N8=#~aT(P;Lefdl)`Gs39dd7@PIEvLFd11<R1t525LY2yAUB_
> u
> zbV08|9s4Ou&R%(AVlw$GK9hWt$&>7xx$485wu>&~=d6taVD37xiL-@c(=lL5k
> HsXu
> zVkAB!)i*j-!DFBBsumNStcDjTZ1Xt6;C~YUB8&t()maNn>kDE(UTNPPSGo^)GsW
> w;
> z=;XqVpV}<FiIjinqJ`>v?_cZA%Eo=%jNQuaN)71=gB=~9(jH#RH~$`SH}(=yG~@V
> 3
> zEhCk984CxUlC7<Va^j@>VfaVMdWyWe;>RxZ+4O=7m+vr5Ga#@-TR8P_Eiq
> WDek<V4
> zSrCqM-zoLNP0mTuO;&!kB5M5v%BJ{ryYor*AxO$yHvc1yy-syN|C?z-r}kzz_~D
> B+
> zuee}`(12dE35n1+F*8X7F~O!moiS6k{iXubAyqAHx=Wa6p+!+apwL7Q-2}9>TRX
> iR
> z&>G)fRfmgu;!8{z^{tc)Z&Srk0$G%sV-<8UGE&wLUD+5DG7;rOOruY)>tGLE&1
> Gh5
> zX5SwiUC=ZIXh~l5SQQH8;+RiMVp}lMtS1*}zElrcEM$XO7^Z6M^t6@XBTgH-&k
> !7h
> z?vnyvOA!jZ4Nndrb<>B1Rn;A5Cvf`g1abwziDNkkZd4V!_`ctF2z?HJtVu@P8S>4
> B
> z-!ZC0%1nt<eKBmaVJu8$u#25_rUCN%Io+&qP1vMWWtVuLt#zc*;L;?wF{$HZ
> K*7sT
> za%^eRZxuZczjs?kX6LQcE7^HI=E+85PiM03X9DL>dK~k>S4hb>8dqkY;|NQ0_#k
> DH
> zZ7A53)r6Bkk0DmUd4tl~QKOGxw8YG;$y~M_Ebe8a=X-}xoo?Alxtr$(=JUm{7AF
> le
> zhvAnrz<tYCt!L`p)|N$f6}{581rv~AYl%IU`VBCeFanSJuBjcab=!_X;ntlcw_7GO
> za)`mI3DzM~Z=oWa<cZSSdW;=BC?$R>1>*UF^=h5Aso_K>z`j(v<<NmiN66~Ld}
> BVu
> zv7d>}n9;KFiWX;yvPmi+_AG%3FUnj7mbD3Da|oTs#TWn^uM<zJnu*i{9l{j$2I+c
> j
> zx$)6|Z-MM#YoLCpr0~d&EC8xA&~afdH;5Xj^;>r)yo-@B`DI^%tw{pM4d={yq3l
> ?d
> zgBMR#5vd#l(Wq3cwyZR3!?WjQI}k^D*b|s8qi6uYbhOhi2-&gw$oCs2aW-*<?(
> K8#
> zt{ETP|G-41Eduwz`H}GJ+k!33aaS`pnxyTwhZ=)P7>o|lTYQtkb0H644`MhY9l!`b
> z=;t~EWl0S$$g(aWv~v-dhVc#}B#u!AF1OagRZyW@x)$mDx2YWqxJs`AH3I8t-f
> @j_
> zM^B+39oeBeiXQlZTbw)`%zNgDmwsso;nxX-iSACv#Y~Z)a4}Y*U8>^F)vVpS))x
> &_
> z5bej8aP5<O?UAnMYVDKfKb3bckJ=}yaFEh(b5;xGBISzvC4x%a334io&-NkkDm
> c2Q
> zuGShX;*YUCFaFd<UtSb;Z!gwqH>tn%B1J@E19#DUG>8|iR<OM~J7&br6DLlTL
> eo8(
> zILJY-Zuy~{AlP;!9qbvn$3O&^Ik55B220e8G=3jIcj_yzjP0R8wdjo^S=^OG;)?(T
> z_BeL0#?&1%niJS+o)zls4v->+$l;F-B5mV`;*)IlwDV!?7Tg4X!^$Lh?Ap`E+Ruy{
> z(9(LNIRvnLFPRn+`Ehg9EcT-m2KDv^U{gm8$$z`!)I(~aBwc@il9`9V(kLf`Xj1SS
> z_d(lYs-&3q!tA1tHT~zHgW%zCZ$3-4_9783O5V!}+SN9yywn6y;sq7v)^R3dcg2b
> U
> zD|aQ)vi0-EVVbm?O#mOv5eF$WNY=sQg0GnmTNtWf>GxE6oPt9Q#vQO(%5
> Eak5qu(i
> z%t#wj>_$q7HbbR24F&em0gAMorxe<qW*3uP%=6tJi5$M0&bSUrtTVJ>b`&3v
> 0l#P*
> zmWVbjd-1%}Lr(sXEFUBwl-<KSdd%7v>7U&t8^3bv7+rw*g2C+60rSkfJ7W5Us
> Sj{+
> z{NZDUmGa|<GgPT#Ag(oiYxLsk*%j2_h0p7Id;@wWh19<{r0K^7-SK{jPO$`j>n))
> |
> zb{ONFb$-Hmku07ooS}*TQ(>3%)}p$|Z<l$pX|#Lmn3Qrn145lV%=7K2)be+xYty
> SK
> zaUYb~oRMlNBH5=HXv#2#kOH{=j?0*$=%$FDKjBB%5;6aE<5OllyrGpT-czQrYv
> 6K}
> znRX3^69~03a#+j&QOL;*nTnFJaIC<Ggt#2HtFXpCMqs>hTz1NZfK@;?-cUhL5Gj
> nP
> zkr1gz7;PzHhOBq7iX?~k;vsdi=$-a>4vG}H;;EKY)0nly$*y=x=W>$xw_n5#s?$5m
> z{p-PHcGWeKNL2+eqzln}+OJ6|%yV6iMpv=FI`2D6B_Of|f2i!&Y?aSLWm!Vm1T
> }=B
> zi;hZ12!HE%Oa=fSXFE)@Tj<3KlZXmGOYhSM)(PGLf#buPmO2@dp$Ss=i?&!Gt4
> PM_
> zNFIP=pzimIB)~joGy1cv--iuG#n83F&_zgG5TkF9xI2D-ENLgsk5+4=@fT@Q^Uq
> `Y
> z7%_~;CCB<6k2}OkyQpu?1&bBS9u@F2La3u(JoRFs#Fkv!G(>yFPO<q~Vawk9d
> *bBg
> zp19iqX)A=c&w4Sxor&?KBMHywO6;C^ss!Ro@YWvtgF6-DeIn{%Sw1;20{?x5Z
> OLw)
> zeK&q7uyl;+o0C-Ys-3+EJc4ial_b2ElgDQ1Q8EaN%{2oywe}^gIg*?m1V;FKoqD7
> V
> z>H|%iE~vrOCJ`}20G9i{2(7=LcCAy03Jy9(aKA7yv`^R0cVHuljinuzlVq=hxi)LB
> zNuGsVC|!b>AA!Ma23LZA+We%z67MSP&6r<U;8uj3f!FjGNoOVit!T1!#*oY09
> w*@_
> zYyS2U_^FudF8T3y5o8R`Om9vnm3$;!P<&R?Psda{zbTc-Md^TQ?kwr)sJxcBa6c
> 3g
> z^S+#!EMe|=W8W;vee;Ia!WTWPP<bCKs#fiJ(soi8acCfd+zDeLM{k)D?G(t-XLja
> u
> z9xLsfo2GjHoa$R5S9*~$r#1?>6SEK2w^rw}WmuMJ(_MzXiFACHaVg{#(c-tmgx
> m0&
> z5l^_s8c&#<#mPnEQ=q-#cJ?h@6JkCT>|w8lkfQ)LN?lx80_vcEgNU?|AJqEw$rx
> la
> z4vO~87K3?(<5x)HWHY_kH(j8HB;Bn9Mo*Uq&r)s)OmDz;HHTE2>a{3#n3c>G8
> &r0j
> zr6#htix&A+d3_-0W|jQA!{p8y^3#sfF^Mlh%7~{Tk=WOWn5AIy)Gp$A495KCJb
> gB7
> zl|dEhm8pxv5s?{>G~KQ9u0oeKJ5Y(0iMk%bg{u~evTEyg$z%)uuXCZ;(bVy#lyvo
> #
> z`GxFn_!kMPBf?wkYy+jXh2f#u_^jKsl%%!SWj7AlsrZbj@+VXx(##E@UXqqzt_O
> Dx
> z(T!-F_e7o11uoZ5xxh(X&1mROuVb`)gAEfx2!RrkwDXJTBfDYl%~un1P3r~4mED
> H-
> zel5W`C4AeUzbZ88u}rrYsxNfsr8h+vEtQ~yK&bLmKsK`FuV-j<7R%TXBc0c+?s49
> _
> z=5d`r3SA&_78syxULp+!RY>Y#wBx<FH}E{`%+ouOWTe%t1gT!}q>xh#lvhTQ+<
> GU~
> z%w3Ka^GPoY;=nlBEZ%tjOkLad_W7_1joe6Z1Ab>cqF_iUn9|htT!L@=<Rwu<f
> Dl=W
> z#ClZ)w`0>*6wj@1x{>N2F~7%L#}t-bx&EP#hI4{|#mFj)Y+Z2~6l;~*D9x!7YRVge
> z7nawdhI+u;*R#tpm-sBeUPa+#3JK?q^a~8r^O}Lcy$S!Wz|h}y?qlZpex_Z+I>#{
> D
> zTl9uT&&y4hq@14dvw{^V2j5ilAg^XGWote49v(Rp+)$c}FZ5J8!_49?XUA7!+s`2
> M
> zhm(A+RF^{e7Vdq+ePXVML}fO<<vJ9YY71CsQt#;<RBBz1xdn5bB&w+mdn7T{Z
> ~*<x
> zY)vmoV{vX3q+U}H1kS9>=TJoT5lV+Pbd+rcS9HW~gSzc~#jfyqMFS_!^i|UGy}4<
> i
> zI;HyTHkmj>%8x&5B4H@Ft6^g#h5=+tP-C#Ka}PeS9J6o;9daG5?T1B~_r_El2N
> uoH
> z_e$2wQgm>m;H}nH6D9DK$|4M_-B=xb&p`5XA0+OcC2xkb;wOHH^i`^DRQV
> 3t?;5GL
> zMq6H#v5^?d4m|UqV<NufrtddiqG~nZZ1ug=V+VIXmULKFICaF~Qzs{_oo_{inS
> fhZ
> z16uqSgie4**l*CMavzqhn&!&}i0{YjFXU6}3Pwzg43Pcbp=*lU6#0WaG_U}r9*Q
> mJ
> zvEHgc$P^N=EDCrfM5KO_ve7tY)zc~G)d(169wiqurI%O)Pw%o4fj<Nt!*5Z{UrH
> ~*
> zC_FGmi?0t#|IAq2Ni3Jvkzc95?qv&wpy*tAy5Vtp#OH&dV{Mv0jD-pVlp=Q#K<3
> Yu
> z?i+Ipp%Hl!J$rSvseYx@WrP4HbE%<d$!v!%L4{_a*S=KJdMzPn1`&OqD^dwNEa
> ;kT
> z8d5{R0>zu<$?F=?(hm2o8iN$C&Bek*@?fFhl+oO<E@2R&O4e<&gA@~}?VzX
> zE08v}
> z%$WgTE{VcKAi<80(e`wpiSUtBsLz2Z*B-ASlh8~qVIyaGAfnd3(rZ<0eLs=A>_U4
> T
> zn_XVORtrmDq}wGgPEKmN^K#J0lWY(%+}Y+QYhgw{Ri(`}0jsY&8B9{&S8LQ+qi
> !#R
> zX_2PX6XuHL%%<~Ybs@S5qe9%~$aQ_K^~r|gfd84SofU;RXR`#+&!!y|EsRVZ_
> zhhn
> zfRP!7uV)deX#z>>wRPJJni5}MF4Qf~XSo*trWS$>4E2Eug#5d$TKgiVMJ0u&8dr
> ^Z
> z66Z>s^IH4L3@!y5bZqeyOFwgYBi|k*H2L-gw^oRv5t6b+4E_w|Gc9{fp^eK)YU
> G=C
> zrB!3uhHE{?fM4X!%K}Oy&Wd(QUG!~zj-Zo)CHi<i8xZ~WRxJCL6~mPN+A^jcbm
> &nF
> zh=fq^qN$pIAxd`0?V|nGPbhna2r<FS&XA^h#4-;dQ&g47t6Lu^bu{BV)V6weVS>
> x=
> z1Ez@8V_9MFYC3@&{Oft1yMdlg8k%U{h03IQ0aBcu<evfL`-dABpD<qu_W!=k
> !?+<r
> zRRRtG6yg8?X#bglcd;<FHD&m_W%_HA=S)+<evKWq8)4a<(8b=E!VMe3HEOv
> wlTHq2
> zz%Cr$GBR~pF<)>_$`@yKF94{&%`hBo**4rzI}m;O*DLD^w+-G*b&bTgq(Ke6B
> =+T~
> zN`6x0=e^fYe1g*QrHf%$JY*s&g;l+Gr%4ggYfr)Cn)40(2Zl;dN$M=nwCj+DPO8
> Ms
> z#@NTL_NXOQQKKLOU*aXlwdfS-r5~w<2>lv*hg4Dqb`xSTXdO`wRESTI$3r%jt
> !mo3
> zQA~2YDchJMo7nNC3NwnyckE8PeBjlQNnSnXM!8Zb=Apgd5U#Na$}6V8ct*b;
> 0u*}U
> z!}hyw5c|LNimsKXf92#HU7@PYqtmo%ni{I?{Z`s+gdA#YJfa*_7%LxfDrvOAd_f
> GX
> z@R$DFw{?06O#^B!gNxKsnJ2~lD>p|iQw1L!v)!71SFq{$M1G8AO;pMk&)b;RY
> 2<^O
> z5a2jJHLhA2JFoQOBn)yKUBynBHMgH`!;S2!A6>oER4#@^bL2+M?i;{Y;;mkqFTj
> kX
> z)t^g0VfQRqVflmwSy1N7)MMU?(nU35ZtdkG0N_kCW<g6WrH7WoDKB<CNG
> X5AUUB#S
> z!s6K<ZzY<9k<y=0Y3xK$hQ(qkcszZ6tj-n?8%D^+6L>m#+Uehe5YQ5yDznWBIZ$
> Qj
> zem|QYCMXcd_Pf2A#aQ&v9Qu6er|5or^JGJuGbf*lX2^MaI2(<w=6`>0mq5Fc3
> zRT@
> zN*EH&&)kPRzr{plQFA1tAaU$M>xZ1biJBx$;q1+j0ejDm!o8cMGD~;I<>DS_+{O
> bs
> zD1i3xb(%)<K#YvcN6T{0Uk18xn&Q?`(K3{{rB3(cl<KoOH2OAlZtSBm*dC2C+}$Y
> !
> z?aG26BXMmfip%tfDUS*-C5$@f{1%V^eSY!nblLUCOOOn|+A+Nto-B<Vb0G;u
> hFNrz
> zC9Ge%+6nB3n@znpgezzHoL4k%o8$=e1a$}j@?qLFcQz%idLr&_+IKiVkn$4gk
> zSQ2
> zQym5BD;G&jiOv8?&Bnu2fUk`FR<B|$^+wltQEfD86u!!AM<5piN%NBsN1vlsD
> BcVy
> zwXr|~1Y$nsxuYuB)`4BvvHKN>JbK$JJXu`3LN$1^<#7Zn3?d&35?WV>d<#l<Fcp
> rm
> zku)5tYq8oe>vMbGB&CYo_|7ggN6Hw6zCcyNt1aD1W{tP%!NfzPa3`dD9j|*U
> <nfyR
> z&*m%A6_NzRTkVDR-M1=E@6YGm4$2&cF4E~TMpTQ9=w<P>hK=jKDsNdVo
> DwP$jzY^0
> zvNJv*0`Plo=Uvi4D%#j>C39v*2Zy{KGdN@&Ur|-o2nT36?~Qp;;q*j!GU?Wk{(P
> *e
> z!piHJCmQbsn^Td9N?hb}UHs)8G`_4HHfUz?vKd?pXK|X09?kShozaLOyXyXms!(
> p0
> z<~F2BRIzaFygK$;u9V<Wm_>t{8gf=PNG+n88|tiQHfzo^194zm_df;ebVD#0C&
> XAg
> z0Ve!&Uem87c3COIV_C#n2sp4W+a6Ji((76oXE+W#(aB?H*f7fno8Bl42S~iP$cj
> Aa
> zakNwv6f!ePYu0Q(GVyO5S09EP<imzJ!K!68B#hAeOp~ia;9ixJS4^HKGAnhMIG|
> 1)
> z?hViRi))l2z7Z{=rzXO|v3w5&$gon-d^({_cqu`vs1(#o)z*RcUR6s0xw+`d3>oj1
> z*VW6Athzn0(fsnskH8e|MZ&I)Tpr%`!z;^G5G2!aPm9Xc-?o$2UXyJd<dSK-iB0Q
> W
> zah#ZgG(S))w#Xhuw}bvh6zoY83DKrHW|zX#O-+8lAo<-1^K)8d_7!TKzXEg>gkJ{
> ^
> zCdQ?xfsbBgAP@Q%()}wiHiR+{q1Lt^MiEiTcF^h@#=hcbGnct#T0@vf;c77vGU
> @{f
> z8kF!uE^YcTPpAgpT05;&DiSl2DzbW!+8GiTsZELXcG>0{AF5DErd85+pkN*>{|o
> O_
> zp#nt?t^*%uYR%fmRotgy9)iq?+!XC_Ig#YGZp2y(1he)sUHjA{Z+lH7J|^pWY)>^n
> z{hZp&*xU!380V3iHO=p=q47x_&a2&yAw~^WQL1$!qIZY~0csz!ZntAN*OAA(C
> gLZL
> zyhx#CK^6VFSco~WIrz9-$GTwlG*&9>)e6@+wQ-I=Fc&T`T@*2uWIWN`)0SuX
> T+S<8
> ztsaR(Q?zHxt8sL!Y#t9LQGGL<0wb8iY11YL44OVJ2)LbKTd?G^QYf-lKcx+h^B~9(
> z2%qUB>Rt92{%vS09JtTg{5qR=hWt;v%g&}QE|zxY&VPlq28}hlHE~2=h8cgvI~
> @t{
> zgCybope1&pEL7DSAR0$9B%;=Vq`F-n-*66^s$rp-+^gWx*7J$<`f|Lkk9QeW`io
> d=
> z7;XF1J2Xvt+0JH9B?69d1%i4U|5ghg-J`aK#uZuu+4i^hhb4VI{oj=*+>F*3i1~I)
> zi+=UIuDbPlm8<WgDs8@|ILg5{2D-m^JY0uWe{CE&JJ&a>7PK3wr-(h)7=?I@Q
> ^jo1
> zPFLwE5ZRR(UD{Y9=w8+}g^Sd3%y+N!zmK#Pm>WGFjV)}{?2e@)JJq;)Q)jrvsl6{
> *
> zDDGOqf8|<<FUp;o+7)m3#!J_uU7rhv;|rH~Sf?)J)`Wx0oM@Zp#NIK(qRa#F^Zd
> XR
> ztA`rZeJLG^O+4DnHdCkH67Ax3ebmpg+>A2=0lw&qe(#4G+Qsf<38%t?H|Uu6i
> >p?S
> znjAytc~XKB!l~tYK!eNuP4hp2T-Va-aGzQkV#5r6+|Qmsr!{KECG}EpK={(P$9pxO
> z+kl8aVmqnXK(`857C-)UTob<}(z5w8wc^w?e(t?C*z*m7Fit8a>wF$7r-|gVx8OI
> L
> z3X?R2{MO3)UHVVmYuFNuzze)ETA=tma33O=*G06}z&YvqbA0J!p_{eca;QIV=
> dI_^
> z%VZ$+{=~tTWCo{x2M9Io0{pDxENwg>vY+!tA{2FX78lS*72e86J+V2uHf$WV_
> 7u2&
> zo;(6?wzeG2feD<3LEt3lohzy$Es_PLa-VZgq(%Ivd&w#TCFFO&sks>g1=RhlDPBx
> F
> zC1KGaxw9oIZ(wqSQe`t1d4*l!mY9i2q9x)b8hKcZ@kJr|{88V=6y^4R?Z99Uvanj
> C
> zm!^eTG^C+${RCFv83tI#J*50vkeQis%tsYr+J=h8yhx5nD>#OvCXRB`X3W^Wha
> 43P
> zb5eQYm7A3oD@y_#loSeYcciY%5Tjb3)W_s$$ZRR2K0=8OIpzqG;b%0)bi!`IFyG
> f9
> zntq>X>0z6(MlQw_;XS=ZJr5c#+_q5Qo6?B-z4uHkuULUrEEQ!|*@Cg7Nke53b
> OCmt
> zd|1#@s&WH*&<N~;oWjG8gtV!gGZvG3{1h~bDz*^5rTeyijq-ixC@zO-TB7zMz
> 6^H5
> zIS>`ej~GmP4)$CDv4=kq6Cp^FGV)cFdEWz^2?-0Ij=W277K*u7xnVA$EFo_l3JXd
> (
> z&J+(C3+k=|p6?gxSVF|CVm@pn>ZC)Qco#B*C`?EX7P1iA(`Fp=!QinJ5(+X@N&(
> Y>
> zVFWR@^92&>ET&tk=xijKDgNp?=Qn;o@*$>2z6Kbkw+|*4`);3N$%r6<ied*iL)
> =Q%
> zM9~mRJ1N3sz+<H7ZeE47(GCr-R-bTCHjmV)W9UU_iquI#w{xx%>>wQ)>GkY9
> *}W&~
> z_AKzJOvAUQ=UX3@WF~TyhBYi@-XXRi=fM1APijdeQI=oCk<3idp4hpVCR9=@
> JsvH^
> z^3C&B8whFst!qnr%KiuXDtj%6f2@w6J6rxpC}QH4-B0<(MS1<cgpJug)Si6k$o$
> U1
> zQIKEhqG`s6G8q*ZvB=G^O3oBcWaC-9agFU>=TL%rSlt|7`{Fs(B9O($v1f%*oO
> w+x
> zzyR?WN2RCaei>zz+I+O(_E2UR^Cs?Eb&K#=h0xO0=d9^|b#I6nxq0%!xwS0kd
> uzEC
> zPbuE4yNvEt|K`;ex%Ifo2%BQJ=HI~R-ezfl4cfkuXqRg0$m`nR{%4ymJRYNe{9=S
> 0
> z569)|_n$C~&dX@9KPPz{m;}96UM*u!w0r7UF^2^|TgLWjlhxBX#<%xIO?`uuC
> VF+=
> zuns4mYkv^fXs$+&erAPc9<a<p3VYAR2C6+8vrLG%@j(`Gwdt-`Phwz>$?3UV$(
> 2yu
> zNc*3dyRc^!CA*dqoV9uztx255W>U<FRq-76ItW)~bBb^nj`(McoBqu71%ln+S8
> 4x~
> z@?j<0LAz>ajg5KC^Cx%TFzmy2d+?rR@m%2F1_Mnh6$t;Y18TBg$JtQ-lXKinjg
> <c>
> z9;7HMDfBTS`f*$f(E5hM2NA>IKoMc07{}})9Jj$^uj$RF%01oV;}Aw6TrK?Bc=YX
> T
> zx5rWFYKWrV=>Sbm(&HdcWW<HGOr?6(nBYMmy$MVYqGBW_!`T@nZSTZdl
> A^nDM*=4H
> z4WS;Q$S5{J3zDO}_aS4w)vf6>s0A(7>?zm&Ho1PZ>c(j?9yIYQ$x!6g(MREd`2rb
> @
> zQf71z_DKr{1)JYhIFA^!JLxyU!l}%Hl|!g&Pv|3Oyjo?p*&ME^S1=0^T`LHJ>G3XO
> z!+FF-VZvr~rX&rrWi~Gz9A_%cy1@oc0_>9d$k^p{iM&Z-(hep5pyQ|A@`5uZJBy
> }a
> zr4e)`kxTf{0bevTZrwH0EBTLd|2deNqh+cPz>5O@YdX5!qxjPfChJea8GGfR9B}Y
> d
> zN8J2KE=s}bWp2T>Fz%BxZnKZ_f<G-6E;rUC4NQ4hZE*FD-t1igaNou&(}FX(OFA
> 85
> zfn=#l^!4$tgSM0X317eP^S^^BYwBhDci1l|H30yy|8v2dT|8|}oz*Q}EX2&rOpR
> Us
> z4&!G!y3T7&$iCey?+DnPJio)~D6*;Xw3~3I3rlghI;T;=G%Kite-xgPc7M>L6GA3}
> zwj!Qb&K-`TOP=)_xlaQV{t)=Q@kDvZ*2n_o&3Fi}27kwo_UVGn54ZfBf1jNF<Hs
> P?
> zX>k(DYc&6Xk$UIv`8x0K=f|%w$3P_GMMx+;mDBvu&@DfI{(SAYTfH(Qqh|{&a
> 0sRU
> ztJ<fF>#$sPyME6cpCMi%cn9#gHneUo1#H2>;B}MKh1^Ufv!{&?^gC)8he1y7`f
> 0~w
> zZ!o_797%G^%d!TtkMJG14kB3=Hs`_J(WMI9r4WL&Eo&U8R6sMnrBDp4>dbT
> SeIrba
> ziWq;GHiYSlQWIiLCsyQFVALNQNd;GFUfaI2uA}p-!jNLsqUCMshwNU|)}Ex6s8
> NkE
> z`Ao&B;2L|o#r%PtTzM>0BqHJXK;{tN2^&%zhKPo={-U8QorrMuk9X?{cWu5b+
> Zp*)
> z+q)9e$Ql>S6@#Ee^RiS<D9X?apL1Ky?&j-hdjev7?`TBvJ6_%ssQ9yPurdv&}
> {
> z-8AxDb03WIoKuXC)*YpcyX@)C0fZp$T*QPrD8cRaXiBIThfq%`uS8J2gTcm@@
> |&of
> z!mx&M1FXAvFrynZ6MoN~1_5kSIu@p&&Ze1Y{5p1YJl~8=lJp1HdEkBdS3MurZ
> p6Mg
> zrOC7EybCu4&!<q46)%2K{B4i&6d)*|Xs9ek#NT*7feJ<m2;7aFI(5g;AfW+_%Cv
> 8^
> z6PykxjEg$V>^i39kL&&><DSqMMZN<;Lki9Ajy=Y?vzDKeIDt^H&P`C8VB=&cP{
> NJA
> zQNMeW-rXnj6`-^a&;8d4`Dh~fx5TJm{hh+}5Xr~?O!KcnXMoNoQqaB$xd7lnoH
> 02$
> zb9EEq#o196Yp?yW_7zuakWD9f6X(1*KePxJyq2&nNLiWD1Y6~e@tQFl=kx|Fy
> ^)SP
> z&JTAh-YE@;=6@5<allp=;;<cbx$ryV57}GksNGR|DjCNo&9gpGK1+UeWWG9{f
> ?u6p
> z9PgB~wdDensa5>0@B!7ke5NUIs;{gBYY6X3k4t~5O7S<j%c<zj@a45CZ{k|?a9
> xSi
> z+YRDhaA+rY4s}_@Oc>*nVOW7@w8D=D@?D!YOM1vXWgSo@2Mb%#zZ5Q
> )I0Fu>K^96~
> zx{~Bu7)xah-Sdv>*${rvUToA)&*j6v3tVmLR54>iEX`G128X+@2CL>tw#FKuj2Et
> %
> z3y=8|ka9vauJ{-!{gUDw4MU06Uk&{nO6|2vmV+~7V@~wBFgOGTg|GFCk`IX-
> n_Vmk
> zWdw+UrPHsg3O<KikMHl&>o2D<`=v+0rzl`{%j!UkNqm+xSF_CP^wvtpqw1MY)
> $;5S
> z#jCe7MhA*}aXQBtzzHe$az!-yAWLO&NnGLkKG6FRxY?l!xHgGR6~I$Y9VSp>+P
> LUu
> z#eU1}%nKHu0;e{J#jRO&tOQA5Iq@@52;>BHlLH@_^Qv6IoH8DV6@(_P%==
> uvZt#TT
> zt8>6dJ75pmOA5KSurQX{SDH-`81*?a*mH}V1}f17cL7-afW`};{V>$OJ<gJZu*|{
> 5
> ztI4v|G-q<*VP?tUVyOprk^#aykn4LHNA7gfr#zAaj;aqF^GpudwfQMbKmXNP)Z
> 8RB
> z(5wsF5GOBgqddsskR$9wCbU?9^F#?~BeDlp<k*)3SSf5y5^f}N0F9^Puoh>0-Ra
> ZT
> zX?npPA+-liVBwH#QZ^UY+!Ud@&s>8a$@~(Y%j}7wm{n;^Vh@bIxw{JmMl0tE
> T46Vm
> z3HVpRr(qpXg6E^{ScN<{<OW>M!G|izUw5YNasy>=$N@Wa^y`XJo0#_u@|&
> Qj<{;lk
> z{}TQaIPX-98fbh)@Js9_C~e2!AQmb*cXRZ&jRX#%f`1*w`^FCZB(4KWV`@E@Y
> w>S=
> z`78+k9^`M)G5@z{t85YjE}W8pUteQ|e#~WjspB!8CrFR&DzXV0`~R5|ry>YAlOz
> tH
> zk#rpDQ5@s_!M~OLkC{*=RQXF)a}cx|)<vY6zr-MNn_2(;jSv7s)Yi08oE!3gO#5o
> G
> zJBy_IzFd#fA^2n|`PV{Zod|)Xf6e;Wjq7Z>4hCsIK35Az;8Sn#6>T_^p2R^(6~SNI
> z5=}--Drj|w%_3UBX4u?>T3@@myJSc4e5=tL#?iqEc|l^B4nDtLVY+@9qY}qVTT
> w$@
> z_~+bjjsmBB6L2Yg=djQ98llDLyCGHL1l^PEw#hRw&+OEsFBA$)DEae^Oi%;G3k
> FQ6
> ztU|&C-Id>g1YNb%%*U==@!G#cK-cUM7QDWE7K)QcC$KhmBuvOc<JTeLpIF)
> L4glme
> zI(`b>JAGM#bbr+L#%Y-w<)GKZDofhRYV^UtktyB^Us+RdKAD<56dD26njgRix8
> Ug-
> z|Fj$V?fWrwEm$zN24nxIwa?Qp=pk??T%R9N8MTiJhV1YigfIi3pbMKjIb&8lm(>
> |o
> zJdW2|s@qWGmuTzf_Y*J|qRx5_%?Zu|$=J`ksxvkzd!r|lI5B<|iz4u0+#Ej7O!ny0
> z5JI=(IHeUzJ&)YhOwdm?aI6yF&$IV~k@yJ8F09ry(NvEg*J}!eCkjrCQ^#Ob+Rg~
> d
> zfJyX=$6p^dLBhyiTa=Y-6<N$G#7koP@i&Rht9S(|0Ru#Av4|FiNYd3o{&pltBhzK
> T
> zipWDZ^%P>g_gFCfTfBF@DfZ{hVK!uah@fx~Eo0OXT34(GINqO_(TEkm23nK7
> BRRrQ
> zuRap(lR<-Jg}u_=My}tC2ueD8+@fg|%~$!G_y``{p=9CEz0oZ_<6ELW%IP1%I<u
> Cb
> zMK!S?N>tJKwD@H7Y7##Xl8{q-v%o*--t{2b<y|q`jUu&f*gJ^F6J}V!aCS{ukbZ~|
> zlqJ^`ZwNQFnaWBLg9xo$Mt&&iHlB&&{<u;FJjsWqVN2nrwGI}Os3>iyOGXC4ix
> q)-
> zfDYp(FUj<eiO-D*`LZ40F7S{P26ICwu63DQ3bvzfeDYSb?~6OXbep4ZX?L6&AfHt
> v
> zdsF2)45#Z?L6^OF1T}BgCi^mR^77#zRPF0hHvvx+_8Atx*C%RiJu8kw!3_MwC^
> O<u
> zfB_%t0uF%wzGBS4XYtG2honnC$v!m-syCV#o&XZ@;H7r6U)9oH0mjrWkDO-
> &*gG@m
> z&(hvFhgH}DF}waJ9EH<qQuXtTLR0TPYsF_7pRgRfn%3`$XvVM*`kIOpL^C_q{X
> @+M
> zQ?t^6Sra|_N&7>;!?&@f!{-g>u8c-0N3*E<sw(4a>ov5fK(b1Srhs7Ort}7_;t=Q
> W
> z-D&!IX4uymCE8{AjfEYp2Xwj>4tk-Vb06g$4n(d!y2eMFW@SdsoUZX3M=@OE
> M+5x!
> zy53n_LN#xr-BtxoLqtN_=l(zRFrDyKlk(fht>??vr-mZJW_%t-u3J7ifgI0?w2VZ3
> zJ%D9M)ZJnp;}nbDz3nGCvNZyCM<Z6Y`!P}%OmPkE3fLo~r7H%Z=wDhbx!RN0
> oI6fV
> zz}1%QKANZ9U1g8^Mt2)dVJw`U^pJgopgzf7AG%0#y0Ww27P;&(;$U^GH0e`0
> GM^08
> zY}n&Xel1%LVr%-`_4=4NQRC&-&=a5W@3cdsIr@0<wYDmTo9UKxcfV#uqg=$
> lJtOnG
> zaw2q{f>?t=nu~crWXY^vT5!KGH!FJFsn-7JFQ|&bI~zS1v<XAV8#^kn%0Jg$Ll^$
> @
> z&_Orw+a^p~vT}p0In{cFpMVx)7h!$OCCc7kKUQQ&vL%{mcC@}!6_J8!0NzQ
> MinV?i
> z?G=GW>uBvv#@`zOKZ*eI>>*LC=}BcG5cm7b>HZoA+_OT&#ZGS=9FLvr(<WU
> nS|1Oz
> za5{y_t4xTwoeENgg%wsKHK^#=^tWInL?T|YS0se*M~yOF$_kapoYmj$Ra2&|
> {Y`lK
> zV0}1t0-k}?<kJWiiv0YUJ~@)O*s{A9uRnQ`W;s%$8F7w7E>m#OYkDz1MvXkZA
> V&A-
> zKf)PEyDZmw@jWWHcyC0&FK>J17JO_V1=NKg2_n0&b@kWxFZ0(83VcMsws
> Hq!(=9p?
> z2Grw+pOT{5?K}3a)lJ3-x`<>AH!iyNv2RV6lD4v@WBs0ReVl&Q?7#T=P7R67WJ
> eTK
> zzYP}epMU<_VyaQK=M}ZDCox|Ihe%(=R9`hNica<p&J4!(PNsjQBEQNG|F?qbi}
> GTU
> z#^w7NQAHmm-$eG=O7~FnjL1qoN@%E6i6IB3>g?Ado`}|1&$sqSZ6#IFX@91
> B^E&^u
> z>H6W?0P=^r(n*vYDoW6ij=FJlR=YLAoYE<qs@JNLPy)iiLQhBEbX~EEuA+k7z!!`j
> zn)HB@gKO2xo^mM8UWl0k3Lb5su_@`<p#jGR^V0~Y$1-W%5Got$5X&yG7A
> xX70@X(_
> z!(Q7R(95(yDC8MF8nUfl4MDS!1M-vEX>5!@_Shwc#|&mOI@tTNtaq7pvM}9
> ^N!Tw)
> zAeEt7cd_N$c@<|aF-n#b%!IWzZ6h2^M<jmQBDI#OM`5FPMf&Y{&5bMA?zM
> wucSD0R
> zx|`~&6_^wYFMoJ>d(rzlVSd8T2RVhY*SnKeom^tM5ms_i@_J@6Rym6#pQh`n
> !!`PM
> z2v68&f?ePAqPx^A6or6%8J~|&)PJ7}d1K_zfd3+EQbPa$;a|!6FH=0z(f$jk{RCK!
> z1RU<Nmy>M9M^#Rqw7iGpHbzc7izr8oM3A^i(T1Pzb!i0=iJ_c`=H?40lj#!H5thf
> B
> z0TBlZ0{)s3o93y7MDfMJJAe8Ehj#-Q`koxQpPn4vPhGZur4ul`MGV_;dzhVUAGv
> ?N
> zPb(<c&!2G_l|lgT-ko!&!K-ODd3rk}fYUTR%rE)$8@06TkFHK{o8NfUJR~cuO_m
> 2#
> zbNHc8^;1q{BZ!BGQ-F|>=Sl92n_||;;M*+GPF+0*hlmj-4xdo37q&J~L^V)k)3QS
> $
> zXk_%|E+wWkKlE!vW8tfUR`wI_Q0bdh8!|%FNk9mr^78WzeEy#8(T1?MCos-_
> x`j-6
> zWaY)~0GXuoa2QSfU?2N-&C;r{pl}cKsdLLI(^=f?haIv5Qi2LvA(G(gj9$D0sA3eD
> zoSK`d?rcGJU(|z|n@DiOr|;_x6qM}_nwa)u#fuU591lJ2mDk=Mj`zfg*7way=Szo
> o
> znaACihw!_xaw8AH+h)A&9&+H|2@cm^{vJyZzyui9H-pUr_7U9{&AaNI1$`6yc
> &b73
> zx^Ko(C!_@Q$ktxf7dl>{U1g=a7_^L~y7N8_px49F%R)qe#S++GCMQsA7tZ%)as
> Z=X
> zo7>=RhD3v*T<5Ry50yLgel#0h52w&YJ#1CaK7Stwu-}7i^Jf-fh?pB({1IRqvKDl_
> zjDhaQfDaf3`hwZzJX?)BarTrinEmAX3ue(x2Yrxs@E^L7ASF7_VOfz$m>~k3e!g&
> D
> z(C?PCN9<h?&v>?<7|nHJ^!(AKBlhjTl5SIC!IwN@xo7m7->%z@jKXN-S8~kwO+
> n2+
> z_aZt-rj=9TA@~OcEx4Iqsn-6h<IK*F^dzZc%79(KE*bcaXoiF`&4D~qL$X+^vbXU
> X
> z`I+{V`JDpUx^+#?gllbzMN2(V{*hu_Gxh4JR+S{-r`Yku<f!_e$uR|yG_uALzXhdx
> z1f$=3?@1xiY9+=eKHr&k1`63jHzfRe)OfXO2D}aQ3&rrV{ii$AvrHS@stPnO`-W8
> y
> zC)LuNw0q@grJJpV$GTyZ7le!%e`<uyk!P9o{{v;m(0AN^mWMIoaQ%(4$e?bun
> qm@t
> zqKn5?cwZ=M3dyY7f&g@Y^1_fD-R@&(Ed6Opy{gQg_sQ&dPDSuuu+lXp>kJjG
> _Jy)2
> zN6VetND8TIl<|RTUTK^XHDS4M|ADfyStK6e{GIiL0pD>36@J<(U6p`D)pL<TgX
> 8$p
> zPKi^^Zq68rexa=47s|H%2g(}ch}2RXX22%=y4R^^%Nj<9`$E~tJpZkm3SapDK-sY
> K
> zq!drqhFY?l5{t1MlP>2P$L4_}zycizH^5aU6kZVhvu4`UMZPfDMIjDeW2&K|9<v
> QE
> zJ)L4|q9Snpo1lVcGUI2RX!Qn0+20JCYqd$5%c)(QGVbz4vG=JQP#UQfhRunirS!p
> 0
> zQ<>xm*-(h$3kY8X_3{_W3Vb2dsr=?S;rsuEvZ?=!vfkpJUnn~ny@vk}l%@VxlqL
> Hc
> zW&Qp_*?$!r{zZx#qwRQw0{>5xmH97}Rs9FbBIlh-{f)9;V*d$c$8*0F?u+;@t^f
> bR
> zxtvAlJdGK<IR8==PKC_=3-ev2L&`kk0uF3)kyFXPF#JWv{BPQP1#XQgA-Ey`y8+yP
> zL2d5E{s#OUfhS5$R;!S6nbamIp}E(L;NRfcnwQ$aB(9g$0Yy0lUiL+|gDc!*!i#^w
> zDZ3(+j4~cj`Ijs}p0V547>Jv75QyT5(dqxCy!(wE#7X?W$8W-^l|E0Uo9l(VL8y`=
> z*c;{lL|L{T1e;N0$~vR-Vi9iOLlPIkh876dh@&k38w-f`VRQ&0k<eSpeUHLdEQJ%
> y
> zP{=(g5whNXdyLIk+JI8taQa5?8}PF52`3_21>{hXndvi65Hg<3H<Q)`a4_NgDw*#
> 9
> z!^m|yRM65o{Og*M+d!P!5^1(QZ|%^iPZ6$7;_joXt6e7-&?$KJTn5UzUntmWa
> Ly6;
> z;^YoWfDjL7g0WOT6jjOZc7qO0ZB=;EwfqO?ToZ$13WdATb#ZU_s%t`6Unm<%
> <Y#1a
> zi+@!czdMY#;Q#B1W)aQE85}LlAgn;y=lKg|;Y|ge*iqPw-E#^$2t0()BcLElI{O70
> z7u`N`;1=C>cfXhQprme5wXAv8QMRB=iuG>joPG$$Q6fqR-Ri|D#8qz@+!<HmJ
> 25V_
> z?(7WbYjzNXB<ARk_hN(j6njQ1^@Q6pI^ouBBm*<%69_Kq2J@8XL;Fs_$xw&j
> %MsM8
> z=xyhgf8<d!MtQb%*dO6CvaY=TjI;_4<2Pm#Hpcbxh+fcX3|0h0=vw_Dn(5<B(g
> XWk
> zA0kf3Lqz+jj6Ad(&G5ytFz904FUP@HTg&#b%iltXAhGdxY0F8irs`v=&!;IgLJZIV
> zR%|>Z{!v29_jvY8&Z&ZEhQU)?&P+U|H3$oO2JM4rB^gbRw!`7Uw$Nq0M$^o
> 6mx$^s
> z{)=Mv$7mgD#AB<RJxYtS1&j6jU^pkAgj9xD6PDXsbC<3)e^kP2X^KkF?E7izV4>
> uc
> z>xlH&Q5@Os^0=XL8nj2$nq!n0m=ROn@lOcuRmbfH9N`-e6`L4TNFqU4nkfy{
> #a#7?
> z$f9OY(~-B4aGhn97~oiNq-ebP%Bjq&i=Bm6|Lh=Itzn#ji!be53p{x1I2DwBT&54
> Y
> zlUH-6f%5#>*Mp+eaYX;|C#Z}odwYS0-y{bXKAvK)U&ixCR3#!ysl)P#0r0O#N}>
> QQ
> z`7}bicS*EcAsS4|PiO#q$rwJ*i4ej|Q1##=Y1H61E}|#Li5(E2d>w&V>z20JwRz$1
> z+9jj#bv;x0+ovu*AL5phaz@e5TUVlG6z^ISpC&kz#ik$Xmq^lF8kQ@$7>2M=x<;
> Dw
> zL=)>4BXo6V;})fTUocyB%;7Ge++A0x+s!kz#K=KqT~y)fiWjZlKBWjtYsps!hMQFv
> zJ%{}h`9bx=M94M6a=^OGt~C1h*!Cou{ee;JE%n=v2mOOkXD)CZwucMbLq!|-;
> )~kX
> zth{<*3b)StbH}0}gBN9=Me&0e-=L<=CHUEV4(F;}_YMN6$eW0BzULjPjfS
> MI-A
> z)=;$56Il6+Wo6x(6pMl({0Eo1(gJs<B32L!UoakOYLtEqh>`uS3mX4F?Ogdco7)-|
> zuDPaCT1tr_HPm#8Dc96ENQxLj%|uW`%}P~5P%}Z*Jl81~;kX>F;iAzRYA9OsSgI
> |j
> z=7Uy>o1Uu+Y1jP=?)Uw$*Z$#o)?RzP-~RS~_wznjFROvIce|IpLz-|SPjZh|_p9-Y
> zw#t^~m961oG3%nwc+xlQ|K+`|y0y97gD&5_OY%X_oAd_MHjO{$sYBI%ftkni
> kM*U#
> z(7n=UA=WhvfNcYbE1a#B2+po93(%OW`|B$F+x2R7S5yp%CQLO(rmde?6VhP
> ?Alh-v
> z0!V4QYLgAEeWF}mn31X_pUO%X+Is=mJH9xX;tJ9u*wF5;x9N)wJZ4!@eB2%
> UrQqr`
> zwcg*Q3imRYH|f2cRbM=5tL~I`5}5|2e0(?iM*ha|ITXE0@%fxDe=tqsmu2SO+
> wV`^
> z-9#K}I<(bDZS|C)Sl^XPA=Kt@Zrx$p0c?ABJa76|_U~aCtGQ-<FZMu$rtE<b=11`k
> zI;OqlNFhNJYyod#c<lVO34Cz*OpWaZA;jY$5les|jb~~OQdb#xKYI}Y+cbT7vKr+
> &
> z2W#j<ZxMfYNLb~;QIN<ZZz&!}@F3%yxKf`ZPVQ@@sNWuIS{G)EtxzxYbwi}$2
> CNXm
> z1f=_L*TK%C6&zLAD;t4_+9y{JR43G39UH%DR6fsWWs?;*8iNSk2~LbLo5n0gg
> X~kq
> z!#+pL-VbafrTO<|=98-<)s^<&`fv0E64U=6?WpjvY2A}(XpN6FT5fJ59}IrHl!JaL
> zLg2_}*hzXSDzd8PzlIGiWZNq<N0jGZ2idChIj>1suFiGPDnD>8Q&|Y1$%5>Sug|r
> s
> z`UJS)({AOd+aR?1_fLN7wMyetp6f$SYK#ko;qK6QqATga!FJHV%z>m#1Pd}pKee
> Ph
> z(pXbRjOT`w>7N+zzb_SO@&UO^Qz9OJOmYv<IQ+U?&AViBk-t5pSQi2xdYR?N
> 6|HJ*
> zY#5-MVb<;-eE~#wSmE3qw_hvmE#Cu2jptqHYq>Aii7}fhhufeF>JqW36FH`i)BA`
> a
> z>dU_lN}8{95}KY9(%g+DvW*FE`&u@zd9p*3&>kFzYj&E|`^Pjfj0efu9<;r}pIU=)
> z)CEbc()Z2Kc2vz0u)(KvJZ8dL%CVd#zcr$~ibS;Cd7q6(bBPn>3Kj%fRv*k)V;&8v
> zq9scd6j!02mhybeTNEp*vqrH+XfbQW{phPMO7CJ6tcmSbuYBVRfQi14d|(Y!9
> HtqZ
> zRS!FtyVd6SkFqI=l*{8;+rFkH#oGYd&=sUtVKIIH5O-<OjQ&+UQ>(t=b4H-t8cm$
> Q
> z#&75*3l8IfF^-mW22Tj~)+;tpcDSFKUdjGf3yw|oOwMd})*(TV-c9O)C{aIKu=+0
> x
> zvV6*J6Q24{MKnteoxpY%!z@X9DMZNiB?Y&`J<^9cjkXnX(#7a+ZqGD9?gARVH
> CQ@~
> z%=##sC7&h9&RjjPyLoCWjz03A$i0s9T3!A+K}@LxHJ;ku4tZh8*uA(a2sQnbmgk
> I!
> zh0Br?Mg;5rz}Ujz%AUZU*7Fbh3^vmvNa3+~V`sG<M&2iyC<ZRn*!A%4A+z@1
> 8_jET
> znWTBl;)EN!CnRlyF=b^$1A$dRgBuNj{>ik^1*wFl#+6OAp9ZXmeQfInIq|YdzV>
> H7
> zop^Ed@%ew=g*;`)Po8P7*OV-K3(rRlhNiB1n=XTMIa+Uv^l%Mw4x%b`Z(fSQ$
> k*m_
> z3s_91N!8$OqY*dz9RB{~&;4-Mc$%p4eA|a3Xe(}qhaUAagqJb<+b@uo(Da7XP
> RpAQ
> zbz_&3f{&8DBevNQ*QFSUoybPrKjEDvlh;9uQIi>}1m=7wtRuOxVT8#mKV+>P
> m}^kR
> zOee$8fO}8GhcAUch0GsCfDJ{lo3-j8K&fDse5LbRp+*6HrM~07VDr1Hh#adR!3
> uZ<
> z{?c4GKXemUCp2#)tzc|3@Hme}$bQ{9g-KsquGwyI$`Tj0HG4}m_05I3dM4>6?
> gWxu
> z3=rUxf%h49VO~+W1!1yEE&E#80Cfg`@QjVMPH7fAP><IED!YVMmf{q}1+Cn
> GKD*}g
> zL4vOXl}tFDu<c6#t|kQZAYn~SGU1B6_V8__0D5p3xSZJ;U5Zb_UxX5d*ugu|Eo|
> Gh
> zkWqi*9U87YHnDIVjpD$>4&MR>J{Nr?XuX8K$4WDjXvm$ccBpCFJOIDPWiJ&
> WJ}Mo|
> zv!5^|Zf~tmD%^ZFwg%4rh<vk+a)|;ZkqDU*Dz1l{s!yP!3)X(D3IU6p^VYbzAwYz
> _
> zb&ug4`hK_f>%YiPEN;*zxT|LmziwVJ6ZS}K%lORleOU)kUn2`)e(q)XJu1GpKXEoh
> zz|Rt#wN(2K{MI&+KfO~1Ym~sVK2xWGvt(V!|8kw8WTJEvI^ohLyTJY6Ekp^Ytb
> {m$
> zzYsizQ`SXLQcx;RPbi8&#}udar<8C?jnWC6aP1gQp;)41pcKuVFxZhbvVTp%PbD;z
> zJZJOOCoEJ{k`OAYAF|h!aLNqh3BgnKGsF0{1XF@3_ZTPOZP+pR%#MQ+e|E_~L
> 6d7-
> d3{H*x_y>T1(~`rCis~HsWh6)HOT@R{e*iTGZzuo&
>
> diff --git a/IntelFsp2Pkg/Tools/UserManuals/PatchFvUserManual.md
> b/IntelFsp2Pkg/Tools/UserManuals/PatchFvUserManual.md
> new file mode 100644
> index 0000000..3c5d89f
> --- /dev/null
> +++ b/IntelFsp2Pkg/Tools/UserManuals/PatchFvUserManual.md
> @@ -0,0 +1,123 @@
> +#Name
> +**_PatchFv.py_** - The python script that patches the firmware volumes
> (**FV**)
> +with in the flash device (**FD**) file post FSP build.
> +
> +#Synopsis
> +
> +```
> +PatchFv FvBuildDir [FvFileBaseNames:]FdFileBaseNameToPatch ["Offset,
> Value"]+
> + | ["Offset, Value, @Comment"]+
> + | ["Offset, Value, $Command"]+
> + | ["Offset, Value, $Command, @Comment"]+
> +```
> +
> +#Description
> +The **_PatchFv.py_** tool allows the developer to fix up FD images to
> follow the
> +Intel FSP Architecture specification. It also makes the FD image
> relocatable.
> +The tool is written in Python and uses Python 2.7 or later to run.
> +Consider using the tool in a build script.
> +
> +#FvBuildDir (Argument 1)
> +This is the first argument that **_PatchFv.py_** requires. It is the build
> +directory for all firmware volumes created during the FSP build. The path
> must
> +be either an absolute path or a relevant path, relevant to the top level of
> the
> +FSP tree.
> +
> +####Example usage:
> +```
> + Build\YouPlatformFspPkg\%BD_TARGET%_%VS_VERSION%%VS_X86%\FV
> +```
> +
> +The example used contains Windows batch script %VARIABLES%.
> +
> +#FvFileBaseNames (Argument 2: 0ptional Part 1)
> +The firmware volume file base names (**_FvFileBaseNames_**) are the
> independent
> +Fv's that are to be patched within the FD. (0 or more in the form
> +**FVFILEBASENAME:**) The colon **:** is used for delimiting the single
> +argument and must be appended to the end of each
> (**_FvFileBaseNames_**).
> +
> +####Example usage:
> +```
> +STAGE1:STAGE2:MANIFEST:YOURPLATFORM
> +```
> +
> +In the example **STAGE1** is **STAGE1.Fv** in **YOURPLATFORM.fd**.
> +
> +# FdFileNameToPatch (Argument 2: Mandatory Part 2)
> +
> +Firmware device file name to patch (**_FdFileNameToPatch_**) is the base
> name of
> +the FD file that is to be patched. (1 only, in the form **YOURPLATFORM**)
> +
> +####Example usage:
> +```
> +STAGE1:STAGE2:MANIFEST:YOURPLATFORM
> +```
> +
> +In the example **YOURPLATFORM** is from **_YOURPLATFORM.fd_**
> +
> +#"Offset, Value[, Command][, Comment]" (Argument 3)
> +The **_Offset_** can be a positive or negative number and represents
> where the
> +**_Value_** to be patched is located within the FD. The **_Value_** is
> what
> +will be written at the given **_Offset_** in the FD. Constants may be used
> for
> +both offsets and values. Also, this argument handles expressions for both
> +offsets and values using these operators:
> +
> +```
> + = - * & | ~ ( ) [ ] { } < >
> +```
> +
> +The entire argument includes the quote marks like in the example argument
> below:
> +
> +```
> +0xFFFFFFC0, SomeCore:__EntryPoint - [0x000000F0],@SomeCore Entry
> +```
> +
> +###Constants:
> + Hexadecimal (use **0x** as prefix) | Decimal
> +
> +####Examples:
> +
> +| **Positive Hex** | **Negative Hex** | **Positive Decimal** |
> **Negative Decimal** |
> +| ---------------: | ---------------: | -------------------: | -------------------: |
> +| 0x000000BC | 0xFFFFFFA2 | 188 |
> -94 |
> +
> +```
> +ModuleName:FunctionName | ModuleName:GlobalVariableName
> +ModuleGuid:Offset
> +```
> +
> +###Operators:
> +
> +```
> +
> + + Addition
> + - Subtraction
> + * Multiplication
> + & Logical and
> + | Logical or
> + ~ Complement
> + ( ) Evaluation control
> + [ ] Get a DWord value at the specified offset expression from [expr]
> + { } Convert an offset {expr} into an absolute address (FSP_BASE + expr)
> + < > Convert absolute address <expr> into an image offset (expr &
> FSP_SIZE)
> +
> +```
> +
> +###Special Commands:
> +Special commands must use the **$** symbol as a prefix to the command
> itself.
> +There is only one command available at this time.
> +
> +```
> +$COPY - Copy a binary block from source to destination.
> +```
> +
> +####Example:
> +
> +```
> +0x94, [PlatformInit:__gPcd_BinPatch_FvRecOffset] + 0x94, [0x98], $COPY,
> @Sync up 2nd FSP Header
> +```
> +
> +###Comments:
> +Comments are allowed in the **Offset, Value [, Comment]** argument.
> Comments
> +must use the **@** symbol as a prefix. The comment will output to the
> build
> +window upon successful completion of patching along with the offset and
> value data.
> --
> 2.9.0.windows.1
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2016-08-06 12:16 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-08-05 15:03 [PATCH] IntelFsp2Pkg: Converted PatchFvUserManual from .docx to .md format Giri P Mudusuru
2016-08-05 19:55 ` [PATCHV2] " Giri P Mudusuru
2016-08-06 12:15 ` Yao, Jiewen
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox