issue-#163 Adding 'Decimal' Tabs to Rulers

Merged to the master branch
Post Reply
Zinn
Posts: 476
Joined: Tue Mar 25, 2014 5:56 pm
Location: Frankfurt am Main
Contact:

Re: issue-#146 TextRulers docu improvements

Post by Zinn »

Is it possible to add decimal point tabs to TextRulers? How to do it? How much work is it?
- Helmut
User avatar
Robert
Posts: 1024
Joined: Sat Sep 28, 2013 11:04 am
Location: Edinburgh, Scotland

Re: issue-#146 TextRulers docu improvements

Post by Robert »

Zinn wrote:Is it possible to add decimal point tabs to TextRulers? How to do it? How much work is it?
I've already done this - well sort of!

I think this is a very valuable addition.

The two modified files (TextSetters & TextRulers) are in the coding below. The comment I've added to the code files is:
(* Modified by RDC 28-Mar-2007 & 16-Sep-2008. The Tab.type combination {centerTab, rightTab} used to be reserved, it now represents a new Tab type 'Decimal' tab. Fields are aligned to their last decimal point (full stop actually) or colon provided all characters to the right of the decimal point are a valid part of a number (ie all digits or contain a floating point exponent), otherwise the fields are centred. This tab type has a small square beneath it, and is selected in sequence after the right justified tab. Associated changes in this file are in purple. File TextSetters has also been changed to support this new feature.
Restriction: Fields ending with '-' are right aligned, not centred. *)
Now for the bad news ...
1 - I found that as '-' is used by the line breaking algorithm that seemed (if I remenmber correctly) to complicate the implementation.
2 - I never fully resolved all the bugs. For example, if a text ends with "123.456" that is not decimal aligned until another character (eg crLf) is added.
3 - My code is pretty messy. Since I never removed all the bugs I never started to tidy it up!

Despite the implementation being imperfect, I have found it good enough for frequent and extensive personal use.

Code: Select all

PacCoder.Decode /I:.Pk/h.5..:k....:O....TH2......./2.1c.L./0.4k.ME/X.4g.EU/j
.5U.L./I.4I.S./o.3k.HE/j.4E.L./H.4I.R./o.4I.QU/n.0s.Pk/Y.4:..../..2BjqhaoU4t
bkR.E/.DY4.FUTts7w3S.uU1Z.67m.V.OGgawbWQuy9OJOu0S6XXsF:b64Sjlog8HQK52gWfqmlz
xwgZZYwE/S2TEY62DkU8235/3yTUUgvkGeiyGCVkmFDk6bDS2LHRophhf2Khy6GqUfFXKoIvcWRy
6W9O6VtkPpzDLzDKRzEStJhy3zFO7pWDJck.IRO8Jx22W:9bm7uYF.XYELOQW82F3kt2JLBICF0R
Dt2LG6:YHmyz6GFEIr6Z9cpcPkSvk8vk9ms4fncD0s1Zk6fWNMgbfUtrJkKefOi7/Q0IQtQD4L09
ZkisJiyL0JYpEi4JHL.t9UoOTZ0sDZkuDnhQ7es4Jk4jRtQC5JSbS34:fbwHyhOMB5sK4iJMioXH
wcnH2ltF4tERaf:QdkxfZ3/zLUiZwD:8tSewExBntn:jn.DZkQL5NyZmV:z9sfUo9ifGVcioSn2m
VLVZ//PtZ4xZ47Z3jrgS1LZZ3CsyP0jthneCveE9e1xsUZ96LntjhEszKueFyfto2TC8dp2.j1ed
p5ukP2p78grgQWCE1ZR1JKZHcpdiXXEXXKQetJdJg02I42XfExWZ4O9EOgh.T6N6bMcSXkV105VV
5Ur5UmX3Q8blsKBKKcPNJJKGcEC0D063S5UgkURe7U.1cD1IJKDR3nQ90DYaNd8viVsNlkM1l5Xk
S/kROOxf7gD0L3aFzbI/VORtSzj4funDBrbKvPXGmGW/Ppyn.9tWnbLx4CSLq.2nX84s2SCx1WY4
7TojhpJNCht3bRcw0J/kv5Rma/g7WZYIIC2:5WBCPGqsj8CdspJ9hUI4llDYQxSC9uMzeRDdh51O
DCo1QnQKV1XH5qUXpvF0USwtb67Qv:RuaB4uU:OaFqPEGRaqVVzxqTwbBcOKo3vnloQvb5sQRgqF
sbcQinj/rClpch1bOIpDI.54CkU7aBNv1n4JfXDZlYysoPQ:yZy14D/YX71tprQgQ6sBOSTZO5gf
HP9FMz4pkOoyr/T2M/1P1eMGS.ZeuOp:zBgxH8j.VfvWmdYEI.fZH6MROaSrsmDj:eN/zedZ4caJ
H4HGvLedbnlInQeMctpKhH4CdbOjOeaMzseMeRzZH4aiyuOdWDIneeNLjGPLUeMhJ:JtydYbSOaL
haZbnzdLbbWeNrkl5kTZH8mSWdXZ/J:ceUaO0OOH:zjY/PYmNJ1:mdfw9L5v:moaXMmJrDocNaTw
.aNZQeNap/7ZfrGx4LHSwmd8UWv7tQbPyseHvf7J:nRiNa9hSMdIn9a1n.FbvQMxCNagRcQ6aJg:
EkeCl/2DV2FvK6U1k2stsr0zUkjmGR2IU:3212oBmBG4BENDNWV.g.tYJ2M:7Ri9.oTwly/8e6jE
MhaFIa8GmF7YGIawCH11aGLgoKMpkeYcXPIafVH4gX6qGqFFmctQaGXaFmmH6qVJ3/VympuO8hSs
pd7POeQq9PJuR9glZn9ZrL58vZkTNYGP9XUMJpfy9BYnBhhQYJCKcN7CRyzHaPaiEMT1UMSXUKGi
5ee11LnNez6enhQqYXK.prQs2GFbRVbyTibbfiUi.1jpDszcxe9TiG1eymLXqqqxNvUrLF2pnvVx
Iib3aOgEKQysOji2MN55u02b1.SDH0XoKSV:cbZGqLiFsSuepfZGrtIieZCfHfdKBPZHTtIcCJBX
ZH2xFQ.e29K9Gd6xttIuOJQcnOtPM1BZKxydIOne7uOZ8hvacgRBd:1hIXLVitNMemNNctK:YJX3
YmlNarKeujjKzyfvPOxfqhvKvPCrQiyrqrrvpvyzvxzvwzzxzRjwzxyyzrvyztvzrxzLvPjRrTfw
jvzhzhzJxKjuzrjTOrqqjhvPqzzjTzvz46lMlW.bzjQxzrTbvTxPzSzjzuxvyxuxvyjvyy..c613
/X49222MWW:412JUcW0kKkF2F4WnCofCKohgtfOOoVdvSp9ZR9:fhaeNpCn9b9H8pKOmetOnBhIq
dPCeRIneRZp9dndJdQidgn:qJeJNav:ntddTtTBDbon8ftSnBDSjT9BRZPxOKdvqZihSSgzgohqb
rOKNifIgh:hqZuxbxv9regfGfqKOLnB8mgfSzxtvRjInGpqjBHBuPLlzkrQrkLRrxB9C1nn:8u9g
8ShpT8deKcddsfBanBoRcuqeN4UbThxoKBiE8:mHL1QfWj9YcWuqHegulhnPVRFJWw2Wf39CuhZS
sCt93T:OnEdK9iRLYjzM4Z.4FgwDLRGyk.fufkTf4pFzbrQTRFS5ZISRV3sLZLl6D60ax.0nfZpH
LQp7utgn1CoO0QIkwnNSDpyM7zTh9rf25MsJh9RFeNj4X15wu5LMG.UvFM4qfKpc5K7U3FKJJJI9
M8.0Yp7VtTRq3yoTOBpNpPYSRYUGDBacRd7N44o6FfNp3XHNQyt5n8HrJZhcCQFjSkPmmUT5tqpm
iMCz67UI1jS1RinP7F81N4megCfZ3TnSrefJtRKv4W3xnvj/q6RrthINv.uT4Y.jI99Dv.zdMQBj
BQxrdUxkwNT5DxxvT:TBXvjywQu59r5DMr:Pvzbfl7sldScXXNG9TdnxFr0HYJodfCH.naxi9F:N
SX1ODVw5CilBYtcwSud14GEuDFbD9lZoYspJeT8CfV8L6LMKuZBGimXJnmvl06iqtnnjk:VXKRij
Hdsx6U/7C0v/cSUbo:T2k6St3DzasQQ9mdZ0pjx69cFaqKpBa7/45Dr4I:imKZ19j8Jegqdgsj3h
KtN1YfBJBL/2m9RzX4:govItZdghwJGsS6Qt.t7WG7cMk0LQ6my5Z5NyctkikN7vn8Q4ENOENNeQ
h8WJrYvc3z6HvchF27CMw4OCkIz2ZzX:/EM0ZLRmnHeGPgTm9NdORCP.aaaad345:gFIpB:qaIhI
l78ZJdObSOFJgfRIuUUlu:vzZkE.NDq/Cmc0fqJCJyyVbbViyHrm0nvcTg4ishoNzyWmK93WlMrq
92hft3qLMhJapLh326jRXUbD:1bnkxrFgT1hgCTMlyFd.5zP2w6N8lCcKMi1k7zv/7TzBv8NwSF9
szSWVQkTqwNgsNh4OeHRHFgWN8whUknS6zi.HnkYkBycYJV.0.zTN/Zzo/p3BviGW7qvCvwgy/a7
I8vjH4N73WjzHvRzENrkClwjlRRGMXXfWhtSWwvm:f..bSxTjjgYm5kVtYlCyEjxwnzzu1C9zE3v
SPirNwCYqk0oWhylDg8.OulwPwh3KOGfJ3U9w9twP.VCYOpxdGKxSYNxQ5yyO/uVbEyxa.PlQ8c0
OY8jV1ytvZi00PTBsRvoEEYSwLUQIrfskZEzQrbjcMsCFWjrxy1VsyFdiNIzwwo::M7bfSXnzrx6
Y3wUc5/trzxuXbrD2PnULqUt1WwlbU4l6lEjGXjWiw1Otm728INrxzDiB/5xq:BqWC8ixi1rS:js
w/:qX2ElSOfurRhrDBuSZZjquTDzF3NQSI3pT37tMkQTvTXkuyTFaPy:cwyGOmpcq4r98n:l24Q7
w9MemJDlh4Ki7:n997KMh8KNot8mmh:eH:eJ8pIgHGmodpWOoLBh4RfRqX49GqcbGq2G8pkqvC6W
7p3C7XBRPf2mv2qL9NPRXCXZGhm7gOIo:BlHkrFh:u8vjTz/xv0Wah5x55CjJcYuly2DdLL/4iQd
xfj6rxk.Vnkslds1ETT3QhFU3ZZsVT2bPuK:l6/OQkgv5R.03:CwLazW9bMQ:BR0M5LD2OqFW.vT
zkUdOuwrt20hGfSPSMgpmirSdJa72CYiKnb0WIh2FJxzoCRWb4efWJtHoqZCkSrrIRP4lW/MVwyq
U3bwjwUV6Ti9S3DCMrle0Fel1p8HvmRyKddpzcrp5/SK55BDgGh9OWZoWGCzRJF7OgElSTjvrxom
zD3PvpySJpOsL3iDFGTx2JyxD9xDIhTtqymjxjo4PzBftpetPKdbOjYfLlrTjTwvQym0STuTmjmQ
nMXyHsx6zLXKLKJNfFPjPujjcgjYiLwVqcidcrYEhcSKNiRNrri0Gryt/gjVQYqRSMoihyamg6vj
NPOugUz29ehSMhN5wOsOjZbrSPpevwCrDa.cwGLPkvupfjBXz:ozPyzfgjoFcgZCLuhRWTIWQC84
Lcx/HGTP9acjlXJ3KVjWyDbuEfzwzhft6bWzG:UHIdGjGzGcgjrx7uVYdiGtOLCsksZTZIkwjppT
ckES6pbt8jJvmZKgl.2YxQYwn:4cW9tLG/RLpTLtRvr8stusOURhNNvw1ZeDYO7Esp8NVSqNXuPr
rBldQ9fFS0yvwRtbq:dlnTbXNv:VShY:Oyz4HhvxlLHfYLZDei3lzlsS5uyQlpn5HMoq1vljFUNG
QpVTNvOmW7nm9LwkiBZDh69B.exPXbsJ8dVmtWl1/3jCvufjCrTyugxJsxlCG7:fUs5SSZLYgmUW
26d0f8N6DaBCEoVvC4IsyPydIrCwlEl0ObrLZTm3Snml8osZMJklvhPOxVUFwTEzlSEFksPmLYby
0jTuhsXpwrPxsyFp:97wLGul0QeJNJzwn:q6gxbjz77UJZWTSDJSPQq.syZQteBOUdosJV7LaaiG
56vnTPvpNcr5P9oovrjKfqp:1pt7R:y8kxqBnPlxknCazwyuOOxqNdRritJzNmXGvKXkHhdPzJyH
IvMisDP4aBkyqeyQr2sxD6:pMR.DjK5p0Vt968oP38jRJt23FVkIf8lzZjtnI:LG2pHPOILauVkR
:q4uEdC9jRyxiwylCy5Q8w7fHl1IwadfP/V1FM16HXi77zYzBKKzxV1ilNknE.8lbaviFVtUya6K
TRfHy6gqB/djzeWzzzKxRBI:sV1WajtU4/joolc8qEKm/8UKf04:ie4:8/tszvrMbdxjCZyjLO1v
r9o9c2uR2YOf4y8Rl:Bq9vydjSxBo3z5KwKzOiOzV649DCyuMqmtU9frzzzzzzx1is.K0Qm3afBD
xfRuveMRGoLX:13VHD9myOuOC9mq6DmbvSkKNsr3pcx8O.RMpBc:TbxKGwsFZxn9LlYVu4/OoQ.2
CCJgc8CwbS5ZtXOHqcCO9JqXlntlXTdjaqtzf4FGg.damBcbuVc9q/x9qoVfRCd4c3amjDv:xvDv
HX00.pP2kBaP7lOEPQDo4qHjSxb5MiHDI/uxvc6rCltLwmrpizHjIOslIYySCNC97iuLHJHR9JEx
E98O74ZsRlMtqB7Q6pnbcHhb7UMvyW2XsZH.xO8Z69GuPv4tiNV:lGgjJnbcmfPMyLo91fz98b5P
1OOq6GBhkFyQLoloBKmWCEhEItECtPi7CQis:sOR5uo9yOu9QQPYqbyPbhqperS/gGU:YMtcyKWf
ob/hkUDL7r/JioHhs2hhghVmqtj:7nDDgvqHL3jZvh5ZF8HQ3m39Ut8PUm0:0Bl0WtOEicoa:SRo
BS4u6Uf.Npkg/z67:2ffIMxoE5rQe.D59QjbMdEgvbCUfgpzqrTxpy7qTujYnHdyyH8nkuuykDNC
XsrPpG:qTGB/g4dzep0yiruOtNOX7jFox/cgiBXD1g0svNCsjPbHUR7aMd1ivSr.XMly6levmoHe
:FwPLnYiUST.TrGuZb25zeNVryooUjvdQDzTziF7G7JNY:OIYHYPs:jV9sDChbnCnxdWjfCC5Ddj
UtCbsNnm7k/tSBZ9Nr1/1D/zDSNxWDHhjZ7g9IqXTsCEvEDMEVh4sSfLYJatnFDvPeUc7NOQsN4H
y:opgPGJfbDzRyEeUrUSPfurHvvM7rsRoy5aC5xro9WtT15ZxXIGOdvDrusxiVJrp4qFyVfnzt7N
uSwlPao3i3tE79Ooo6lXDjLwQDcxObJSCpWRUIT9cRfRH7YuNSEy9hiLcKTiPaxi1t:dctujzidk
unjCzCS7zGOdagmKDNzDk.qs.bfnUdP6NVNQgBUqBBCFPiGJdev5lVS51jeZoi47mSQ1atV/jUnX
.Qdaaq:iZtpVnovNIbZwBaNKHkeqfDxFxQtmtpOb9bN7gJc63IsMF8eUaRBq.Fb6.qRUpz.b8Pi2
xtyTFS6LJT6Ym7JXm7J:b8vNCbwcN9qD1qcsGGvNqJprfDrOtY/2gqd2UQxMgWaU3KgVFVZc87Wt
FM52kX3qyGlw2HMEsuDnqZoCeVpxZ8CzwcNnBSxgauCXySnFb6P9cpzt9sZrKv9b3uNiJmEywZQn
9Bznonxgtx8BfFa/bFuPXHwvTjYz5:SE1XCOrCdcnauPff:F3mnKhnPq9oZB3HFyIwLWoJSxlwlC
B:4VLIfsuIoreycZLgttF8BmlejCH4n7:qeSgpj3CHL9se.Kbbfe9iTEyOBwN1Qp/OLTi4sz6M6D
uPKxyjorfZ4B7YfH7BzcqzSXwhprTfTSJRdyckHtjgcac:frWlshMagdin7O5hrIkUmueV6ULZWY
K7HklSorw7Z7XOnVDOD6qcX5jYOhny45hFsmxg4wN64qu2x9K9iC74G9r9g:/t86DbDRLzna2K2w
KwIov:fqCyzHBOWmT.13djrormm8x3cSp2/6oE0SH1rHow0eTq5TR8x0GmQnozTezuBQw:frv/5q
I126fPq/zc.p2CvqS1YJU57shnhdPdb7jqEjIVMU4u3QzG:8ztVP7zKxY1LzSwRbvNttvWN/M6WL
n3uLqBj9qFwS4es0wKvxzHNaczuFkMfNZqIUUODkkUKcvfvqqpEznGByxTSraOxinsKUtdQXMTR5
5G70zgiT2Ljy.4/4wPndOxyPhq.SV:xlj1HdVvkrI6Sr8we:FROoujzys2:2xTsjDhDNdFxY:mlO
C4/DiuvluDlxG9XZ6OXaRq9lt4T9tYFqwztSnfqQS:299Cmv:iNRgfhguGmnXhhhhhgtq9XhhXXW
tqlNNKRhCKGvNpB3MXJpxQtKdLqDLIiCcaMdBNlCGvNmbPMfWb9hhjtKheqp7qpNWX3X7Iz9gGv5
MYaII/gxf6/tg7bq3xbzjWyjJ1Y:9jmteirLrkla1vs:C9kZMdGDmZaUmTClZNxsk6PcmvnlDf3u
8eJWDS0Z1vCabg8Vp0JKgQzkgpXb9ecLsZv..CfsqblmpxxIu8LRMxb87Y2Pztm0VebHCwuyhXm7
h:IxpjTMK3SYXLgYSc3kxGBpuJx/ltPu0uQNt4I:P.xoc4PwWpdbn2hY4vjYgzXQfyFPCV0W6Dek
97trvZGloTUq3qFyFgvqoHuTu6SsSeBBiBvh0w0VeWxIkiZ42f7CQIjv2gj7F/wzeKX4mfmoulfe
JvNS4OQFpEIT8p6tPWhLN87i:DfXgthfZCrTnCYYYblJJS0I3ZFgE:IrNHNL3mS55SRXbMhdLnNx
gvSGy7QZhm93fvNq9g2rORYIVgzmDhHyyV1bCRqhJlPmlTB0yNqUYjnEbrW7ggaSY8cXe9TqzlSd
ECQ5/JPlCvv3EjRihjCQOLzKzvPGRgvKIq9hzgi7S3PBObvWtBD3aSwGReCPr47zgsjwWzuLHD4g
ZuQ3jEkvphRZ1fFYnSPCLNhCmiqqngsiQGvDQIkxTv8NhBfHzYziNTTFePjLvz2jzNdvkLvRvgMv
yvzuELrHqCQNGUXzskjVOrzRZeV3WBWCpZB3apqjiYBRihlJpDMbuoEXhsvChu1rSrUtnZchGLj8
jU18mOlMxGzNi4N0L.eqhi.r2tnXWPqmbMpvkVyGnl72eLOzoKMjXm4:ELezmRyPtzPtpwbwCgHv
ayyTgzXrdyrpvtzreREibTbvzzpTyLzjvvXvKpSuLfruxvejvrxxnmSxSzxvzyzLHrGRLLzzLjzz
zoxLIxSzZojSjvidrGxTzrbfpDsZPjJzvrzxvzyzuwEW0F6W.U2Pyj8GqEV/2082801RDHY88080
08./F.vdCI882/6c/t0dl26c/6E32.3V9322V203ZNK2I/6IE/28.0gfi5YVuZhoJlbplV:0jjYL
qHw7cFvniNj9/:f1zL.4yhdaySRQ5zFy/P7djhhVBs7ZijdjnCfQt/ZfRC5bqZV8rdeHvxIQbO4c
lOa9:92Yx6YwZ.YW.GjvDp06U6tCvZrKvmnT0nLlTCfwvDWOjWVutQktbLYtnX99fB9rrFfyTShp
MuiehxyGad2fKzUS:WFF606Hj:e82YmoMvfoTOpdXgLuxZXHHPyDSYlch3lp7JY7HiahKeRfp1nv
lTKTprTQSTSoqahndTp9:mdXTuydewtTPnSb9oz8yTqjZhmthP6ip4:gZ5rPkB4LY72FM6H1MQPW
MbRkoyx0q1HSFnneYpGfPZKTW6dW8q/E.s30LXWCXVgTMpMYlL2wH5a9IMtpeUUVBBk/u9jOGUW.
Xtp5OWg:rv2M./iEtik.ReqqRod2h9C1CPme50IeGMNtIPdd.6naQmxmbJ64pxio9QJ513rYO1vi
1DfNGUopb5gGai/9WGQuDbzqUQv5EP..FtYQWXhcoWKOj4o2YYjV:bSb7xe84x/QZ26cnrgRnMjz
coyBZYct.Zvgw7i53wcdU3WN2mnkfHQtKEIHp1LjTKte7sHWySq7Wfo6SjhG3hDogqXjjsyhB1cV
Y/mJEpDzrLMeBTy4eh9F8lVGbbWKqok0m5XR3RJj15osR1woSeLMrh22OBRuSPoKWwZId4sgSm7R
gUcR/sr:4TJMRFhDNfL1pf7bFs7:w.4dcE6Hdde:M4JhtaNvEjhCT:5faqsNxhHdjx/vpqoylz/T
Lfh0qx1cE1O1fFfTNp.phd2qUU4H2Pfs/XJUXVaLKL1ChxxVEf54RRvLBUsWvNZGG63SyoPqqryn
iHQtsKjgiiJvm8ujXtd6SPzBvCtO/Zt34wz2DUzFdSzs7N4LPDqLvurPaECLBpJz6KSNBmdxxx3B
wc1F.yOyz12jlavOlBUZC7Zf4n.yMIfiZEdMf1DPuBtXc0iZXBvcx5Y6HHYykdzCQZYKba4jxkjW
kkgF0U1HC7ehj/g/9FL48oRWVVTVmjfn01rHcgCwh:Qn7vX1EFps9gpIR0oUF3BPrD1K1JKmxFdh
qIy6HW2IFZRShm88yr3qeRIzsfF6lIdWzrmsBqyzW7uXUtwNOr7lSxpsP/dgPbbnaBZBxpO0/nbO
CboEFbx2cjFgDv1kStakmdidL5p0Md1cMcaTqDNlf21BZ6XHqKsvQGSXFy8pFWSYUxfBLC:TqUTu
Ok:N3ojzVjnw4fDIKO7fllNsXZFS1hw3QkpcW64QSt4DpHjsn5h2LGltXQuuF03H8PWqfvM0XhgM
jVw8GvLsi1nn99zVw/dDY45Dd5sZrjmy3yU4:9tGPEBnDyLxy8O.I8UKWUoLX9nXBh0:5MNm5CRU
5.M9hYC0:fhg/laQ/b62m7.b62s7anBU:uXhZnWh7lmuiidhuqShhsb8xuHSLjSfSIiQJRZ7SbLi
ygZQbq9Ov3CpZTLtwGQPLBZhLqHNL3LMt/WwwhMfH.8gRbCamvNn38yRrTfS:b9w.W5PJydoSm9Q
WsHYLFyMqYpnXHGMtJWZ8FjixG:Fr6F/4.UWJkHLq7hoobM5mln3:0PH:YR6WKJJ974onP9daCQ/
Iv:Nmgvmo6EfQwQNqurHEkvfL5YSyZK8pCJeYK5Spfy0GWVeseDDteTzNK:y:KaFH9oShTFOhfP9
oqMdI7ahfXHQjcIo1UXUxBBbO:qqnciaXzgYwJzK9aJ0Xf3Qnaz9yQWy5wT0/.ZbFKQUkUjnjDgE
Mx0VxzxujdMJSkqa.mBYWwHv/j5IZiI21EsMQ0cTrPCqngvNqqqncyDvzIlth.IoF:BYJC5THxtp
29ORRRT8t4n0GGugFZ5f4DXh8Mpt4:ggZkqetJOxbeke1TrrqJ7ardyVNmx3eRiD:JX8s/k27m3.
Zq2qFOKrHvJCdy0hJkrmYnTYXEgQghXYzbSJ9VtB:PEpRPhjq/zIyuc2rvkBSft60kJb:omtMiYY
Qt0gkOFXjnsy95ZFLBdD8qJjePqP9TKfrjurWEROtGRBzLmyjSiL9JWJYLJSlKcwhJZchBhJ.8pg
8C:7QC2EfNHp54iWRb/kH/fOSD/tDaKqomxxxTzSpEZOqr0iQfLjJvzSpTpvpSzzHzTzTPKnDqkj
TyyxvzyxTyzxvzyjrzvzzxxziTzwQHKSZifRugnwrJM9eghiRe2r9nK0eoYTLmTGJ75IOxcarPIr
Lbub:vRDKbRnZGh6NbGwqfNpM9:tOoZh6TpvspfeGRvGzKxNzxOktM8lhpeOgjaQ2tieOXd6vbyY
wXjTdtdSl6:N6CDLoB3MIdGZ3EJSKm3VFUiFDkJxhaX.XMg.faE47zfO4wR5tD9C2e4d2B80/aIp
CE8rG:m/Pq8E/WC1U4mF.sDEFEUY6GJT.RJ1324dktp2g:/H0MkivlUMD2IBaT90364NU::pH5i3
kJE3:IrmW:ptvQWHXkjm8eRH754GPTv:O:qLL87iilN/7hmW20n0V6t7xxr3UTZ2k9mYQknTCZv0
6kW/qBcJ0V:bG42q7C:l9qQdgstsY676mxb5qGnoauc.DZ8xXx2E5aN3vFE0cCt88Pt3ZBd7062V
2j8DKkaUak:9cK:vgrfhtdhxL5rg5N14SC8Xu9:Q5fx6Cw4l26YN5TowNLBrMn0HFkqhPu4Vn6E5
jQcHtDrDI52fuTrEmPbfBtI9twjcVQrFEkcCycI72d4HdTI9TTljzbsgoE5t4I9W0/Q:MLQIIxVc
QsEGpZZZZYC2cEsPBrZCbNiuz7O9IMQ2ISkhoMQDqr8uRYbscqvcP.PP/Ygd8GZwce66syTl7VJd
nl73fxTp9zjjrPhByHozujrJvrjzHnmXXvnwytj7icM0tnrPajJSmyyvhrjzuxzCK8vdznb:abqE
wSP6:zpYGEI07oGF:qImXFB6a4JzNptrTyGX3yKJo5KPZ0NoFF1jv8h41MDoxj77Brwrgjb8QxHc
teKmbTizQrTzovhjpGIMJFVnFE9RHbGW4buLKzbRrzx8er4rXRpeUaRGEH0nd3kvU7BqJNhtxKlM
vQwVMX8kEHdsSjrzzzLvir4DCfjmWmxyqSpSJfuvRSPRuVppzvxpeJf9JuJyZKOpvhOKZwfJwcyt
fBpdnQqS1yrBf:J:ZCRMpFBrzoNjRnH6gCT3xbpXZLY1QypiRRNTTK.hJWJ0hPfPM8nKf:haKe3U
JuzbyvybTnmrSeHiSrQbBu19p4l3PzxTzrXqM/ExhbRixvyzTiseU8VtfRxCf5ojzTwYRNPqq5GO
Zh:ak.G0UtHiJPfTLgVYROt5vmCbSOGSPzPTjByFfRhizejrTpLirzLvzejrJi4u4NWpOQ4epLqX
OjwQ0wijSfLyrjvuyjjzSPhfFtKeMgwlJa9KlgtxxvE.1T9M7Krzz2gh8B.SPiLZOjTfMUOTHyjT
rQSnNjYyPZuvfj4znvfKTMRuPRrMICCpJxvLzfJvTzLeW.ekKdBfBeXJN0PMwqc1wCgb2yhzTiM3
SrFC1yv6ezzzzzzzzzzzzzU.B7OSiognaji0iwinS4IZKjL6Qj2fDkfGocdPGcn0hVODWz3nijmR
WSBuLB/PuxJJxfoPyLbHdG:yZtDbnLgr9ZjOgYKvpW:7RhebJq9QLTheNHPJap3YRe9KnqqhT:Tr
SpqqLGfyH:U4d6dtsUd/d6YM80k7zKh9ZXJBz8oePEjpGv/E/dgNgsfJ47Mgnfw.ODwrQXgai:rz
qhj9xhX.hOfeqqbOVj2UaklBumZvyd9qYuIk8708iL9tC59Ki/mT:snTbG7:HQnMkIoWzf9wWpcX
2C:t5kyQwMRe0517Rsa:xTzTzGZh4rn0xPmFWOYYy1goh2RTDizBO2ck2ZWv3bKyoNgn7:O4lyo8
OIO9XaZ82jKn4BPyzczhNImGx7yWcCtYByp7MKu9mrlpYcTu7T1wYbnouTuzHTqq0YgfYwCHleGk
KXoVHZamd:pUSVg7F7hfD/jxvzrpuzxvupTPT:Wg0KbYzjJzLp6qen6I9xfPvvfE7FTePElZOdSe
SyzxlxgqydjfzHSPnNjGvbx1sqxTuyfSychuD1M5yc/QKnCnI7gDvrP6pdIlgVJUHL/7:xrWvbiK
MLP3FXb75cxK1/jxzezIPqjcdZr3Lqnfsn1dRwloLPGowqTfvK9jKzpNaajwqxfTzunLayqaXOaW
cdHi9pVPulNd60PLXjUE3QS:FPb9hOTi5jZHfpuSGfKSuiFhNFIbVnhhtL.YoOgzIMJdenBbCreq
ydRxId6gVkRMNh1I8zzGoLZvTopLxkvRLTMuDnOvB1RRCKBUgFM.qcPhqb3HcR4RCaXDOUjg1LMl
RsnsaU9S.NsoxhD8/U8OBFQnB3ED:l:HFRdHlyhs../e1/jZetgspbtyfdPKv8u/fJj6qx3HaWp8
y7C7b4RL533uXOO1InNdhUcalI6a78ZZh6Z77x8qdHQOTj4hB4Z3RgyDnEeow:PzS8OZzzIVd5sE
lh8JJLuxBWWwSY:Tn/kgH6zzQ:vzCZzSGYbPUbfckSaPOdpowBCndcE6IffZWKiCviqnxczbYSKS
CCgSYrSZi6/t9hP9iBHXiH37y92GQHdve0nHX5v0nrvkcHLjzuLYma8JXdkzxUZMWUk:njKGYyPT
ohgTjBPjzqwJw0xoPrxyRfHsFrziUNrppt.w5zy28TblxtyjK3Tnh7IC0GvwQziwE2HgCbseyHn7
PSekkam95zwUILHzXcJiyuRC:1c:E32TYTb0FCrtmntsuuzd5h3WpZUmtfXH8yZ98qappx8Fmww:
mbULk7yL0ZRrdyan87p8iv3b:nf/ih5HomkqwpNWYpoxbagBeqLNH0odtQ7B:Gmda8/PJfbaCrhS
Mdrw25yWbi5OCzGBOdm/pHut0ggvRhB7Tqql.5q:Kaq9RJ:pRo4aRin:qH/xwMWfPep8IeNZO48H
ijIL80pOmhSbOwxTnpKztK8OEGUX8xwD7IhtBRargpejwkmBevUaavSYdRJHOlQvDKYWh:ZtOwut
zD8PTnVit7V7YGYu7YDdp.C8y:rve3KXK0IxDxbI4RGlU4lCqtapChP5pchHMilcL9e7tws0d4pH
M3:S0F:psGBvSOhfPW//g5xthTTLznHBzLsiKBIDv:EXvyjvroRL2uhpql2.sQRIwhiGXQQMEOlU
p0p1TzO2jaBCzooglJ06Kq1Jvud3lzFhBz0yw3eRzSRilitrMG26inNzjQzrfPuTjPzvTrSRrhzH
zPTTNrrvzSTtrzvq:JBQerYce0CiEiJjtP:pm9LoEPMLShiCd/xJtfrHcihj40fflkyX/PzubBJs
qPapj7JBSrFV03pI4WyZyjjt1hDTOxXMmYPuKupKh9aXPLZSLfS2Tk4cuHna00cp2mOdSf9ZoTSy
eOU5THs6UXJCwy0yjDL9HqethDdxOlWbPqju1K1p.2pKzTuvF8xfFTDC3ERslW1kQW2JDQcPXCf0
eh86in.Dk00kCS:KbJKTqZqDN0XdxfCez9hueRmgZGxJ7QhvLJXagwpFDzqVeBZ3ObWpRmxTJzhZ
wLfel3OJTo3VhTLexRbzMKNQqiXf7dmoYdmW:prJ:4:47mQ9Rr7ILYJixXqGbXytTJHj/Pjli4Zp
LF6Ij8gm6iXoKORFt6ywQQzC/3oFvMgIzxylFRKKSltJDHZZQ9k7nxzqJSLjIIonJMGxIgSlWNtn
4SkNT.9pNJoG57aw5vaSwE32RFRJbySuXoflgOM9oYsTzs8MgSbEWZvfIOU9NpTtt.3lfnlKlLxw
Tne5TRlTz4LJf.2YolJ9w3FySXfTyaelRD7puix5i5x8kWd8LJK7:ihz.XmwLb3m0bfdpIk4JXxS
zD/z35XlFyEL6xFQduMyJzYdOWo9PZVHN:LY3JqyHKrdf7hvx0bba46tmi2RCeOybkgJYRmiqTtl
3PwaC.LywvjtcShu:LdRPravlbdImvIgN:yqrHuLgmolIhdKx0xR6BF:rxU8b1uTQ5BHoDzT0quE
iedLw5nBHPJqakhsd0SRuhrdx9tlRxXrx8hnijHx6fudXtNR1xqDnclmP/NeraDGDeFD:yZGFnY:
q7Kcz6mFq4ygbq1vwu7C9SRRdcPfFyXSq9zFtbXGX7KPM5Gvq2oTdIqjHHpVfKxyoZvT0axug1KS
g66DaKTjOfqwF5iFL1zxyZuD:DxpUbqaaTSp5drzXj7rdLr5WixIfOvDeHcoqJOuRfLmppyueTNL
waqvBSV8xK1PyDm0GqYmbnsIJazhTuhSpfqP4Vt5vfD1mfxu:ckeRmuroKfeM3uX:Ya3T8Nrpv/x
9R4C2gKUx5D:3scg8mq44cn:cxbXbw3VzZN3NwDvCNv6jwXhQfHmjfgjjgnzSDeonztWhjunLdhK
:8m6jLjhe:I4Z/Przzj5Uzi5zzz8t8q61J7Yzhr3IjhED:KLpQtOpwQ7Q.xs0QnrkQ.jDrxmmFt.
.itojZmBCgIoIv8xem18mmi3eBNO8tR034ub37Oa:pPpGTmTy3e3SxcwLfhSzgSthJ0RrFIsYqrI
EHQ1uw:jvbjxaq9PBKpB.erI:bWSBiQhXaYJDHpRzS8h7w6nYwObiGnHXMBs1tF7RBmmw7FFhGs4
ODQ:EvGuaOiQGJjxriEpQrZhqcjGuMkR5jnbjLeZ7TN/jEwC5xTrdMEzf016gU98i/1nJuVwh0Vn
lN1JsgLnTI6Mubi58MrI2ZwOY/TaMNLCQxSxF3mxmsEuwiHOzDuHISRqnBTTBxZuBGWJTziNW8Qe
FGkV.TpTpJjGuifN7:tGWtySZGgJuZSly3nOBV8U2CB5qYL:RBO9Co391IqPFsafQrnsbcgxVnKY
T9X1mxTLyfJvtfKKjcKih4emgjv::jVztTnzZ1kmkcNzCSDmabo789zrtnwtzSzDCa3qEriIIz9l
Y2cciqKa5Kk9JsYhf0SnqByMGuxwV5hJwZrnFZT3X7PtuZbtm2NUFbWnVbdXYuPs:M9tOz:koXjC
dOoF9n:eaENNZZ5maOOF9u1LZoT0zn9DubBKLwOstTLepv1kZkkUzevUS7x2dJTpT6LvRyO0Lwfd
hDx4z3a0:nT49o:DShK4HDMTkRjtFNQDQ:jw:gxKLfJsnqSDT9ztL0z:xQDsxNQzwmxNxJfuxxTT
g9ZxqKT1pTyziLyJQX9eFn9bsLxsGkn1TgiQtun1.t6b80ozVupiocSvLhIUpGwbxxXj2sO:sBuf
mjolVKOMbySKNzvy1rWNcQz/1qN.tZDUVKD1OhlnzlQjnZvzlutTnFJKpL9KbuqIGi0OpJCNBICX
8Zhep8uN9Lkgvnr/vEyrfckzK4wzdTQe7SJYIKj2Fck:dSl1du5/OmgPzN3etbKZVrsNDixlc0On
9IJcbSFppnsgJgmsYf9:n:onlzguzw3s5HRqKpmRDZxZzaSFUj6aKKGGRpSnG6R6FhhKdySJ:8PK
UJlgCB6n:gyXozjvzMdtaK5wrMbSlzo55syOIG8OEu1urwT77ZSJr1/KRpYat8GZYyLd7IYrYq94
7DxV8cFaGGel3DgzpSfI8w:vt5a29a39f8IggDZ6aB8JbDj8zzrPqzm6i4TzzoGbFJZRTTSYd2jB
xS10/K8ZruKNtzSveHKhQr:oCmNCmgnu0DC8mTk.6fTJdL.RdO8NtpPzisSQe6wSUCQ681U51wcz
0CEIn:oFMaPPRr7RXPOfPkC2S6ybb3XSIjnPjW6GSc3HifsP5oMpzfKZuliJT8JOR5NPyh74t:zb
ZIxgx2LEHYthSKITBqxvr:FZBr.DiDbvnR4dqWYO9Zr3dN9NOa5myqzSDjxCx9s60Zw/E9sqINaE
L:W1ykcc69ls09bBH97aKE2222KNNy3JivBbogGiqrNzaa9Qp83duwXvMuDJOYm2vT3wBPYxOVB/
HJOjak:VmpP:laINFtMdN3gQT32FvEWIXu9BzCPBX19RmqKO4/qG:o..3q5LNjq0t2IiYimYQd/Q
gtBkMfCiPEy9cvangUNeSM8vJpO5p7lZSjpjXKhDH10IbxCiJTIuhjZNmpK:q6vDG:xvQT3QxDkl
8yq5bWnKyX7dyXSuMSSc8MkHXWXSxjr7F/benrBpHJdDtgb.TGNorH7KmPTh8nPRvd9zHDhgn2fC
Km2vVp9R:ar7IKR3RLyF3.ICQ0xCjJiWeRQjTieJGz5IuPL.BrSOrczH5SjP8W8jbDmhvmHunsZR
/HyUe.DuXlzu0fkSCSwZQmWDzscdvxvL:3pPHo3c3STiWdeh9YOTDcbxKi8eJzDV.QaxmLwwvD:t
T0y5SmjgfRjSzv:p5GTKiFtNZgzrTbx/rSRtvnobjCPbjFh3eo/HrMTI2r2DrgzXGeGypKzqaxio
nuLjEwbzvTxaDkQx.StuchRveGxDDTvJuBpG6vemtbRyxrjHrvoXTny7iwjD70KQepciD7:Enzpf
uDegPmd0xvvjvO:zFif8WU6XVs66cc69w6fZ51rzEejzo/OSb3Y2pqoRKpMkfJeYRpxFynpcPpTf
czveGGlpp7BQE49/h8o3cwoqqcBB8FXXzLSRbcn7af:zraT:f0P9MIMz/qFIBHwNjnlIshqxgaCx
MB/CiZprKnRPhpuC4kqvhKKnPhhPqbxBj35niVoe/IzgbafRim5xjNg7v72nZCy6wgxHNGSGkhMo
bYMHbFs.mTKHLep84uNF1KQgXLnD5UkgyMx3Ksy5hZTPCPbNG8wezc9lm9NZ/ETyJzlQzf7yYJJZ
JL9kzOROHrSgDqwFBWQsRKT:mDyFrltpuTh5CJkdwTphGDDwamqcDRWdhD1PahrnzoLvfzrPIzTj
YKgnWRfNa65NPsDYKNa0LoSaITzsbd.ELDE.F..u.3k.EU/g.42.Mk/f.26.Pk/s.3k.J./Z.5U.
R./Q.2o.Pk/Y.3k.IU/p.4k.NE/m.5:.9U/j.4E.Mk....2.aMCpOqPG.T75CtJ.E.I.E4MTfh/z
E/E/M.P2/oUFoFSL.ivGq33EfxF7c6M:Wqt8pjm4HY84VIuIe4yEeFSHRd..jgWprzII2/p8iBFv
p/9I/BG0pE1ILricnOV7HIXYp0uUuYHxG8WCRuF44vcTvxzTnzutVCxWnV/vqQ5BgYw:TOz5y:xN
wJKQe0Kk8gsx1CQ2GgssmVGJRhnSZejNCQCljMhb5LCDrHVzFZb3K2NkI7QsIXJi9JlKQ9:sftmq
rm5knXzjNlHVPC94Q:wsStkSnVf5R2.ln/p/yNCFW8X1V40faUX0740m:2oMdPCBfKjcl6qbFQX/
/KoG:4vIyTjcl:FWWU6kCFUNgZcafcYM9y5ZYM2eaOauF4FWTwwYjTnw3EV2RyZtfGj12zbUzbTG
RhRXIvB5cKKDEQvFgr9ZxEMPuRSw73wzFoOv5eInK5WDV:v4wRzElcGptf/fhMP7urSXK1zpSaxW
OktkHKBPK6GLh1K/hqXSRRuPRtyvjWGHg3dz4rvK4bp:Kikd/U4G8N1MzG4bbu.Ydf/oxOpapZUn
9Mt9MyYfMGlY58453Kkj6GbpyRXMRXRBJng4PSeXgKRSYDJtBt6yPhLZqztq6:18Zp1iVXjlmeZ5
gkFXOFXEsBLyS/tK3m:6ogeY/3UoK5h3EcB:PHIS.oX6EutgegshinRTMzUNw1:HLum22WJDS8WZ
Lke8JchQlV/dekr7WEaxqM4E/XvmkOMUOHl:l9lryU4VWuyGHe9roVVtdZSa4phhemhIrbt5XDcU
4e5Xmjc/cfZB9mYycJluoexOS7nOIwj82BpZdSCp9MTrIOnjWuDMnuRks3zSg54Jyb2FPsmz:0:C
boVngb1tF6:aUji7NV8mu6TWgiWfWzTU1kdS/yFdRENmC8P9EK3UnxnMEGS9VwgKudPRFjBThpgK
uXzyKuefROpihrc1Xxqzc4dk9tJ7XPVraWD8hkkrZJ3M36u.UQIJ7bc/dwVMxqO.ZhSmO.oaB.Ez
Fz:Lc04sx.QGJ3shLRo.TOdjxIu.hzHE0Ibo/eNiWnE0Pv2rY4U:b/vr3dfw77n.zqU6XE3RqtIh
zicgo/WPUdx.IYixovj33n87CCeUYdYJ/jeUlZ.J/SeUx3EP8bm990cDxI1T9Wc7zX8Un:uqr6dn
IGrJ.fHTenK8ee/qtgb0c:V/I59yWc7RI1taZz9rpnt8UVCqu0NOKL79lYdhCYR5G5.rnsqrETYw
qsyKOCUGxppHQbRZf9S9c70HaZQjuR.mCUbLELnc7IKoMrE3fGMyzrZcu1DR/qiMHOISY0qXUIm4
3lrOKeo:0ciu2scXBqMlqbHdYNP8u4cMEmUT.0Xchcc0OBmof6ocalhr6npwEPuVCbQJGWgZsXGZ
GXJGXOIfIclZgWqFN8gN6gN76mpXlzNFrtwBle8K390RGpdZ8ccDqTe9EWZfPX8hsZJJkYfeq9Oe
CmPXP43:v9Ul5CvMhNgtvMgNK:qeFnbeCxFXhiKCJ8KvVpmJQjXnpfOZLLCwMxbS:Sfj4:RUL4qw
MqhjCGZJ99LKafRj48ay:EcSy:RkFy:O7puz..EKUkMvXv0Fh4yrTLX4iDZqM8VKrX5jslRiB5P9
.JJFvlVoiME265pwMjz4Dfx.dc.BYL9q:3j.UlHlWF:j1ed2js9UDZa.xGZfHXjU0Zpi0Hgcr78y
:JU01ufQy:6XOdN7WpSky:M5X2tJT4CekqpX4pT4B:hgiwMtazV2/WEi7NgFGoMsYWYzkzy7nxUd
aiwDzP0:JyzWlwrboMj7JYKQPJkGepfOfKxhxfvTJepfOyxhjnhZqmvzPP9zjZyrQzvzRTrxTZux
TpzTzxzyjLvjTrxrTrtTrzvzRySjSezjyvjzzyxxSjzKzyxzzSyyvrjqyyzzyrzynrvfrDLvzRJy
RujhjzzzzjTTkO9//.4g/EEI/4B./FMcc1I/UW:FU.086e4mhBaZqNf8qLGnNp9dNRaab8fZLNRZ
NnKKoonHZJonNOaQtqKp9dhaQuOP9OKhdaLHBZrSnSKNZLrTRT8zgxizrufztxyxONZeKNvIxfnq
wyjqzNadjvrdabxZv9SaaONaOZdaihpfnRinDdZizyzipIoHB6kIh7En:o:nFBGlF30Igreyivdi
ytsiTztfXdyzafuSSbuMyjviSvvyatRRTZsJYRo4RlpTrLToLVRqTZlSKRL3rTLRLrrzrRzzrboT
xzRBat/2YY2aY6WIi0IycxuvNZhfpwymrPWIdF7LreRbK87HptTFxTBHD3O4T87SUebmU1ewe8th
hvKhTJfxRqpvPPRJjpjhhJxrfOrpTeqyqhb9hheYupIh6ioPQwG2EDD9eUeMdRp3M1pt6k8gCM.p
WXOrKG2eICgiDGeQ:YUXa:5S7lnhuFLmQfvr/ROvcQhp4Mnbv1PZMEMQ.UgouRIv3fHHOqBR772n
JBcLsv0sDU:XNN8jKks8lLCZjM8grnHOrdPRdT87PgKgJlrOOhjV9TJxjOqxitxfZfst9aQh4mEm
fMBtPSvCjPqzbg3a2Nkv5nQ2lGJIKgLI1:ybplgsy8wKa2N9SCOLykgkwyNfyOJQvHZtMnYqCXTm
n7H8r5bCDJNIIRw/YFFZB7t7lK7NCKVyMcw/NMOaRQcyN6ngY:gX76R:uDmksclkihglt0:HX16/
KsaMlMKsiHapfwggg:qxQpN57gnz4wIPiJRFa:Cgm6sC8HSCEFm4GsxXCCbbDgfmF8Cy9ViJqW04
UVy4i48CgT12625q7KJNOLmg4Hjpjy0:0pLZ6ZQ4:osjSdnDMn9X1k9UlHtenrmzgpGpr0CwgyYn
tlaRnJl9YTGB2Jp6zGvfSZZpGv3rv3K8Ii4jzbRNONaffzfNQxyhhrp0/MkW60qeCPKLsqHS2Rni
uUw2moxxPuryo0K2SBUJo:0yJTvmfSuyj.Wv62EBjIFROjBTRzqqpdqRdwJHBN9iS:smNQG.VZKB
qGFcKEcKllu3vv1hgqMKTNrBZk6RIDC5B6yvDmdpHyzwtyRxKJpP8bBg0sqnSZddReRTbIpbzPIf
Ij5vTOhHpbvtynKyLSmzNGuHjNbgyiyruQfyhuCTJ5soP/xGfhsqNVrhnLqDHDSauTEF:HgyKjVz
RsxzLLxyazDjhyNCnfPfqTnNoWyyQZyaOd0JjPG1U..Yvk596NsM1w0wUrJ40.Z8SRMNatmmB58:
X0RrZj:.5yq3UYekc3FZBYnlYlwSzrl/sy8fCiBtgnnoGaa2Xi/:9iIXPHCh:qs5IExVzkio0SQl
qtZQ6LhU0GDkhusObDyws570Cu6e5iK.Ybsga0GRBTTqECVEP5nLFqWsExRjtHIg.3RWy8WFoxpT
535UH.xlcZuLDBQ.Csx3CUPaRs92TYTPhtbuPqzvsfluWyQJTKt8usLP.4lt7loNTnhcaRFubrPc
nKao0Ra7BoYTDrQWDjP9R9Pg7F1WN57IX2w.8ab.l:E7ff/jjT4fu0.mD9RRrbM/nUjSELb6zp/.
xDHTqMYBnJqWww.zsSTlwd1nWHt6owvIYpZDMqbeOePXXD:9RmTeIZk6J9pe7r:6Btr.4DskMMBu
EEC:U6QtlFlHUet2:0fWPvsolHxPVV2R7mN43iGcUz55WnwT1kgRKBlswioSJoWwMP0uo3EscPrS
5GQttzF3sUT4EoM1XEIrio:0KZ/pxUN:V7an6k1UV:5v3UmelcgJVxu9/g6ldmcE:klSNBgM:mCd
oz2sLM3lK5jxqHdnasV9:SPnHYJ4j/OpUkdGzzro/iwmg45INSiTp8pYezZWgwr/hjm.TNJPRnzu
f2IR81gyKzEd4LqgNGCsawMXo/oUUYHrYplw9jEh/xqSDSCvyzoMDFjjHM79pDrD7Otzp5QDP1YQ
y6/:ND2K:Mm4Ssuy41lsz4JwVrjM5db43rVZxylvxcXsi:pwRfG0yjaT0xfy9rhyxhGyE9z0ffZx
7nu4HXQasnbxfQtxCtwVcyTKbHgttlrnuhmtN1irY.rRgnfPyKqijfvrJVTvhyrrHtV/SyyqvqIb
C:T:/VgqbXtQSXmzmkO.iuy6jyzLZrTjSUCffNvpJDbyLvykxrxqjKfxzuyNvXv6:jpuEHpT0RnN
5gT2vlaSLSrzRGQDVLkTVxL5SuhfcmsBzLmVvPdgqO/hpo3XHcfLRoFSSjRi5LmxMnbLazmvSChG
jTZuq1lZsv0jfgT:xSZuaBz2dKeGd3VjqLwLrZdPLyrawv.JOT4EcgyKbxYtFNiviCvHWi2Bujgg
e9mLQlymeiLTuZYgSXdouiRqzJ2kwSxmGpn8iRLlire1/nahiHlrDcnn9w8Q0fd1Gb8PtKMiFmDm
9dLr8ox8GKCnEcD.yLkmh4c8fI78j7TM7llrhJVTTeXwBMc5.uLoL0KV5KNz3BxbxGyIM6x4xQnz
bpdCHwqOy0Jj4DcBrDPU7kiTtvamqwvPMvhDnLLWr4r:nHCr6n4aaKSWmr5bxDhTbHbiURwnsXi1
9Gww02ZK:b775gR1iGKTLKoRWYV3lL2YKrZy/UnlwgHnMp3PKniCBM.0vc.4zhrRl8hC9XQZ5De5
rrrz/vdfmBGLBQeO8plb26F/toUE6k6xumHVm95cQ:zHMR5Xsy.2E.M:1SKvivT5RniveyhFuM1L
8J1SHKW607wvstizKHvpWMyjcpTwlzDHglfMzjIwF32XKViuzzy5LE2a1kZa7phofnpq7hWHg38q
9CfDakvyKw:EC5uXepcKdk4hErBhwtqjtOtRQthLXBQ1VdMETgviqQrDwhym0iDIbxUGwOz.8hTs
sCsFlFlzMiL0RkW6W6W6W6W6bdvYF2W.W6XnrTjgSMIq3SnnT8vqzx:m/ZigH3LBoZw0F9Chofv4
uNvjy7I:MbyhMxcw3XtE7mXaUYbySvB1vDRUSyX6zylDSorHBDd8hBfyaoKbDXTX3zlfJLNeKvxU
KaVYRro1t2PaQ4JjiT0u1OOz2zMlPP1DVOkJ1iDna9ydQgYtn7zzuRUy7vPBgychYPlvthzKyOUx
XGOoWYowxw9ctoOSLaa0Qy2GXGQ7iuQWdB265PycZn:zWTuRSZ1QPqoFGeJ9OshsSXhgz7GjPHHC
n8J5QEDzPCxkdrxjSyybxvsuxuS7zbTyPowIN/hDb3zyvFMoI7/KjzxzzDwCTt:runrcTNIsPnye
MBfruxPM2ow5ztyrTvtvogDlwiqLXEOixalLNwE9qpejL9THJyibzQiyCTzm9uSUwz3vdtqhSwjt
7rrCzhqoHmBXyNywKaq6mRF9ZEFd4S5nyzZuyPtDfj5pGynhwLfsxPux8urrvXXtYjdjFgx2d9SE
UE8bRZCqusrO1LPhKorDup.9gv8DMW7RLMqIjQLn3VzyZN:mEKfDmZKcgrm3drsjS2eVIIyHT5es
yh/6gC1RajB9Mr.g3IX8MGdINSmo.r8srCvhFuWbOptx4sEijSzjvn:Xgm13d6tDc:kNvR50VIZL
BdGpGXk5kQ7fjkkv/erM2LUcm/r2u5L:u4iri2uVsucPeHa.OJWffyJqrf15MF.bVppPe.xCDelN
FsubufJN5T1LuxCPWK5b/2RRwz3/hEI3PJiVxcBXysvod/w3.bgaPl4rw5nxmrMbBM:Uos25fzzx
hUthmPe2rkYDK:6owT4rhKBYB1/91jzcSKzztYEPkLzxxruzN:dqaH6wJg4LxqRMqlQPrbQvcPjo
XdgzNniiFfwgU/wlv.YcqB4.NXTVq8:4Vrsn3Fnf1JKvhij/...xwS2aOUrJcF5o30xMWL3.Y.hf
OxlhMxtCtM.Ux:jKWq/C5jSHyLWOLLTn3qCSLmS.zOJHiEWq3iK8RHebxJlX.PirGYtM1Rypjrm8
Bvj08q8ZZXMW1ik8ZDmJpCJfcD2r2m8W9uPa1w2NLt4PVU9rbOfijMUD1ue3P9Pqk5saMfplRcUd
80UxzBU11iVi/vlLZNcChuifJOdZDbOf0F6vyQ2bbbnnG6gqfDSvjzs95IupioXpbqf83:30hNI.
xVIa8KQQaTCKXHmlQvZpX8hmQ2Ns/5yE.zxBTzmMsE8aBz3he0q95WRj68QqSlct1ZnCExUkYuZ4
FS4ZfW/JOYSjaObCjDIkR/.HPDJa.uyHSR9:S.gtf7U:unK2sNH:77K5DjL0X:Vbt27iiQlqbTuv
eDr0v5sfWVxo3XcWI/y0XingnBmyTfT1QUktDe65ygZhj1TB6EhVwqxmztXVK3DfO2x/Rk:ZSuYE
fpsqxvyDpxaSEROypTqvj.gn0sokJYhVyG4vPQL/j1HzQN2u4W:4UeSFvOk6hHyWjhhKMmTVpilH
OVXvUYsgpo97byqSsqnZWNr6mxzTSZ4DZ4.w2l8LuieSv8u.TViNpsDhhdi9PSYz0hZivGEzLJWl
U7Mu.BrRH9d9xFfhgzXLTx4I:QNpxjcrrwxrBHm76nRzVB5xxcXdDfDKhVb4:jQjgQbJJ:ZY5xz5
krKMV2DXzzz3Tt5zyGBv4DI3fZjedoy7S5fNGprIQ3MRwrLTaXuQHkygcz6GkkQzaKIvz6fxqG8J
0KqgmE1nWmwUnWul6Lhw9c/Hy/2CsefFPDOMq:VU:zxXIMU8rxzPfihIRRToX1RPvidRQ35njSpO
m3CQqWtvC66OoKv1p7oIFkCqLGRRkGIgm0b5vB5HyeHd6rxeLf2jfYTyjwRJxt7D5fsLtn5mSHg3
T:4f8ijtzJwzY4hUOvtz8XLKBEBZFKqqT6KWKwOgIh1b53nmn6hYKlwfYegMrD8Z3PRMX3SlUrff
4qYQFmrR3mrpVHRLqLiaKLQitFwk/1:oSP0qF9RF1OMJTRJalqCVsXdb0vGn2WPqr6BVS9/Z.vmh
XIJiqX3foODlLXiBRIf6jIpgmsckDVmm7K78C5qiqqWnRIiMg4Iko5ybzmP8n28IqyFEj46hJlyc
.xkn0pKza0iLWKzqw6Za1ozohKYh0X:OODNr9qaLQpTFtTrjSiQJiNg0Omhhfbl3aSodB5iLPlgT
IB:BjGdEBjqtSgPD4MeFGoROzmGuB8d6Q9zwsPapISGRm9DUTbWkO/BXEBcNIybV5NVwJmz:QX.d
r:yRGwf2x8C1TnU6ohH.ZUFT0qpLJOsIFKd56Qd9cDcsQqxnh28YvI.Bto4xB9IwI9bkx4sbutNP
x7/VmC1IEH/Qnxl:ah8gqar1Fhg:wksGcBUhzd:ybrRk:CqPyvivgRpqPzeLKnKlsZUFdc6RgzUi
wxgBZKo.oi.2lxJpeWueW9.OrLpOJ6m4a2So/SpsjgQyy4nUoUDpHQ5N7TcHG1btYnZt6.cmWuNR
qmOq32VBiStwxCb9xc0aZuT.KKisr42653Jex4qH62byxyujeo3hg9oFinZo7T:SWQpV2VMwGKeb
Zi6Vtr2O1h1Ks6y3pgu4I157NimpEN7ZoFc0DdL5GVvtwoBLvJPnGB7H/l3pmsaoulQ19jIMhMHp
gkfJBvlP4i8Of9g4Q1guT6O2fp5/::OBH3UXU7dYtK6b5Bb5:Ugf./Z/WYzmJwk5Lu4VoaE4gkTH
GaT5zJ0riNWGrDmXrR1.cnyDYlLTPa6BCOL:2R/rqGvjIQW.1iDu./c98t0r6u4IaH1CTr8TZTQH
Ryv0K07kH:VMWyVjRzhuSFSZcN.hiRFLLOpNbY8yLwODJZhhdTvMccUqezYJkDyhopQHQTzD3qLZ
nnZqCmwQRittRq79YfnZnnXqLbCCrIaS8SqmLP7ngL5N7qRivPXbCSRqLiOHSQWGgWM/hZ75zxDV
yg7vZsyGz25RLzgrZFORtX3KZ4SPaaHFgQ2fFElVeVeRzReTNIfXuyrt:dXDqziO8x.TFq:BvzqF
S/i2VrnVlR6aDUQp7CqRgZRgsfgzeO1l6DOfiTaDIJycQjBJqrPb9KoSyXlq0BSDI0Vh/KNa8v36
dpqw57yYn.gDsUItviG83KOlE/a:WSOXEERaHbo3afWQqBQOQDu:4BDCzRo:g1YhX9RHlqILkjgH
q7oWimqXGx96yHykiMy8MSp2i7Qv7qrqlGPaEcp15SnXMHe3fZ9mBDUP2znTOU.VMhMzJMFV0hc3
zf1Lk:PeXdz49uix/tCPSPV0frXayUqh.KmB0W9xzRmTdXuHQoo5nxwjwoitCN1t/wp1XZreUX4C
tynhwgJbhKeTcoRnX34TtCQ2/tzxHrkuqzzo/xntQEjxnbPZ:BQcN7sh7ZwbVC71nNN0o.6px3zI
azBaJeaL2pRt1UbuFZHB63T1FutHF.dyJO80Lq69fCi9wyu6vOc/jgQk5iG5.XjPH1.zHpvzhWvu
jC8xWxtg/3VKZzWNwQq00qIUZi4i1EMjrgFZfzdK.Nx1fEi.gQ/inuxoqQ1nRrwEnzNtLslVSi1v
weRKpT8YoN5rudqJFf4GF4PJc.01D6Midnz4cF52Z7D8e.a0pNHBmv4gjhPLO75IYEK4mVYePaHr
dgvHN5cetSOYCRDlYDGOT4VtBC4HB8HccLLC2goYwah0nFLCzaDFXZPhzF0X5CrRnH:IwpQzoNml
mcqBCXbpZfzp8:s6nxyFrinylrPMrQpRbHz8jFovFKjov7TcwS9v0Xy8hJD7pBXhB.VTzVuSjdjN
.fLPCPvyzZqTDC3zH2xL9h5Gak.ZlZkSSGNp8jZJzR5CYi1UmSFzruyiuGEmHG7aNkb9gvOuYmhN
IJcJaqnV0s:kty:Ybv94K4XDyWfdbOtl1yfR4iXqXLZ376JaFRemerhyR4algNqYanBhsjuTlSzy
6Le9juzEk.WNTZv5G:oIpXTCzd2YWiqzWWkyz6eW.wMc4lPSkqFZ4dN3QT6mbtbUZSjHvx5xaOnP
HhSmk:.zmRnszjmcE2CiDzZn7XyTbS1CxR5H9gLOqrG9hginhWahTPCmvCrjuvGXravTaOFfxNjg
FSBxR6oWcZFS8mz6dSs7vsyRkL:dIReIfIYuC32p1xPER8FI9i9Xwi3yTjNVzqJiPFvdQJjf4z7D
P4bTtCJNFq43eBeJuyMnvm04YlNJp9qHxNgothv/cT6oaxoGWJwp2fsL2OfRT9f:SPCmpmNqCPl8
2uzzklMkIjZy5nL7Dsoofi015DqOLCgY6Kh1Ldf0DLnjJY2T3aPtdtUCw.hURlwk0WcEEriRwPsy
Xxx9xbxz52Q6BF.jjecpnUPRJip9l0NJj7EriBhL0H154n.6uEPQrDHlOCcRynBGjC.1PuCjb:tN
7Bubi6QRG6la.RWKC2JSQOGeJyKwV3YGf6KBcl2kSB5dkiomIoPc6dS6laF/ttCy4pC3/frnjvsE
9kTPIk6/.Hs9hkql99xLbeWl.dx1uwEkvH2W0LxpHsVF5Otfb0/lMSId6LxQTEeuyQwHlY/bNI9/
SvlL6eYLm67uLY0X.IxNzXIkfWplZ2YZZbJYkV2YVXJGGR2sZV1/c.wM1K7yCemmPbQ8uRZTSnob
0DVrPUzYMeDz4G:EaCNSGnsSIFzB6gKkcjHBJlm8utb6bF993rlIG64idNbPHKOwl.OxszQ0Gat2
mOpzMrtofd/4DJzTrldmFlzTCwTtZqwECpvz:Goq44::7JUkhcPe048LzEg8s7crdVvnBbfZhXPB
j6DN/Shx2jjZWWB2F/TTaR5fmredl:rNM9qoGDXda8pbNZwzzbwpwtGpjkcxGD6Q8sU5tykzGmMw
nMwVgvdywLK:LIPCdzEBwVan.hw93DXtY2y.HX5.KpBqPzV33uuPMqciE.SHJOyNVXCCzhxWKboi
zvhURQKxb7lWUz3ks3QtJpTRi9/Ot5KyMLhdCHO0ENYZeHFV7C2RUoI4CbLrlS1bPVZthNHfWwFZ
DSY0.zsLPumFdZnDBFS4N0Mnib8DZLt/SChpxdl35MvrjVWft8zBGyYZijlxdXeZ4gQ5hChLqQCH
0XXdEJl2SzC9r9PF4WUshVHiasdSkVcXopsX:5g6lIBTFkIH2gSrLWirCaYipdtr3n3w2l0sRhr6
6UyFc2jyHFQ.4FoH2PZ9lqRkZLvpoHt8YsC6c.jlaoE8dsvba0ab16Ld3HG4akrRremHXYwzBve9
i8io8ZQZ1DQl32OXXa7HOnigqsqnHFqubtSGaVfxYhqxfc2dBruv9pSo6fJW5Di.H2.xr/zVHzBZ
z8J1mckbfohpKvmHMz:QT0NRJw4BOlkLrOzHQvBy:9D0VtvgFciajSwETJn5TmmXt3cpgaZoJtMO
7ryDrzuuUzotrutwpJnKu6GvHvzDjmkojBQwSmtEkmBixsuG8s3D5lzYHhqJPoQGPHNQupLCzMyS
DT5jbSzxLjNrhr9NrnxLyS9TXTzbJTsjYJuzzxTszlT6yrhxzKBISljlqxNiRLOxTtPRjSm9hT74
rgI5emrljgjf5ngXRqjzLfz7PqDbMrzzszlzzLyTnxzX5xLjYSnfD2ue4KHw:WEiDN9USsu2GjmN
WY7VMZJlYXQckUmitXTTylzumDvyh6HyNL7VP122XdvcdH7DZvYXaqPHkNXYv8oKn0t6zjWnhPTx
jvRhereKLLjTmYryRnzzzsy9vhvNyeZcl2RcgYV575Wl2gFx6ZieEvzjydREyiW7BmoMpN5eV45m
5yUKnZ61zrxv4SDTryGyjfSxgJIHRhhiOvOoFede0BJDp5QmuZBggRi2Gc39eNBuMMqzhdcLxwrO
YXiPNu83r7vK0jcLvrhyZm:E.yIShxvJLqjPKVfvOfv67rOpgvHOQzrpzxSxhjxPPXhVfPPH3Hod
nOvwY:5BEbmgYXQhXRbbjW1HGDC0zwvWvgLoslzwwbtTv5mF8Vl1ugEnZZL8X8Evwp.tsJhumyLn
tM92IHmprrxfyoLWKLOegQarzepluxTKiNZhLDL9ZJxjvSpxz/zQiMz3emdHPK0ePqqqYhhKZhPP
NnKnzPpuzpiVJhdp.4xxTvrjjhzuzxTpTufzPzPKqCygjjTyzzxTTzTuyzjzuyxTTzrxzxzSzhTr
rxTvTy7OsLQxapupO:qqiehneh:qoLWKxhxOmCwTJ/9bTRTitqHiFuvMH5xgves8Zz/zbzRytOv9
ruNH2bZPNLOVvHX2txFwtybkOvzrjzSxyXNbYdow0T3QPfIsxSUfhiC3qLJBT9NDjigeHC014a:S
OxQqmYO0Uh2C9NGcXPMBcXK5XSGl3KflJh6xyhhiegq0pDyoIWWUql406kO6pWoOBIKpPlPFNjKS
yfSqd7BHF4jWcND12McW:FsxcFT....DML8HfugK9qBaQEKj5wDh4l3SOxPl:vf97emP97KpFZ9P
M9OMPPLKmvJzJdViapKwQf/UeWXKBaaqPnrDEZBPCzja3pfQBh3hitBOHMOj8hYc9p75CrTOu0Xh
QUpRaX:NJvLjtRqeviqxumiwbVUJFNq5OFfvLhOE8eor49zZny4PzZDM/HmbeE3O:WNLHZr/vNzR
PrB29z63ZJvo6rm9ntpfYMfJH5i8pgYZec5jlcqXOkiZmX:kBONeOlBSzHTLdTOLujbKdPPOKfPI
TojxLqcfSjSKqoqpgOh2Y5JP.4B6T39pzvm8Xp5k4hdOBTSrfGzPPMLqKbQeqKLODJc/VRKY.xSx
Iue475MHbGor58V13vsso7N6VDURcaxqqqOObnF2:jKurpKZWh9/QZt7RG2sv.9MljlXjulgJtRB
uoMOmxXTGYuOc5muxhzSCv1KUtOTS9KpxdRJGzOrF:uqrxhCyjuzqpDrF1MRI25vPPSeLPrrfSjz
9ekbhhgJMNKqp3Ka5IKbBhO6DIHkNCjOJoPP5MS5eyxxVoYab1z/DYuRxSzzjTrqZM7orjLyfpsh
z4vuXTq.QxLwDzRamwqgz4oyv41JuXPOYiqT0hCpoTwddz0KDczdrQeKXbjd:KuETTwUYUXpjGyO
fTl2hLRSXxfZMjJUK91nnHuDwNub7bSUNP4RlLo6Cg3ok6fHpvdeKondjPOyb1whvHmtURY7BDRV
B2fiKBTXGMQt7ajlfht0BbIm2C4TujUOxzMOJ5DKnbZTZQfatdnrau2ySbD2Ji4xsSw340IL0Sp1
pJ4Fk8b50k3sbmV9N5qWrzPnN1D9rCNjjuhrGNljopjuhn8VZVYLXne47aQXzzvzpnzrzBXHOW5x
g4RjqBex7SwJVZYWv8d1TF9dfeG0vkRY7hBcjTPPN/Si.jOnT2I7xRTrXdax9TOh9getSjijufhF
80i:5jOGrnzRRglMx7Yf0mfuH7UmazSRch9frVCOcBPJ01748nIyz9BDPQE3XTfv2MhPJJiXFRiF
GLLTSLe2BLHQWYTch3xLoRXgHUwtkRqw.iqY4yeu5RQ34hvxEXCTG/eHJYsQiltSPaebrH9taNMj
bmoe9ttP3pwdOpf4gLQgDoP1wLRduxsOzMaWDfor.4XmyxkbbyK7th12wThDB4qhB:pfPVzvovpt
zy95j4.gHRe.U9nRawQtmUXvSOgMajklsLPKnsBw2t5QS0QlnDz5rwIz3jJcs1r0cUfbe8sIQUrS
.TjyJJoHiFkWzD2QDkUxzS1VSWxotg1b3awK.cwpp3HnNhzoHyzJPVdXySygIx1RKKwIc46WfNID
zFoTSLfTZNLYqtztH27G9Tjh4nwiTtsgvzSjJPmCNvMTfwHGjhnkTb9nnELVP0n:9P8tvHOfOaxL
p7aopzUxOy4yxOhKWLmzdzZr4izmdVfxxvCP3KiygUWh:EFRx:br9I7flVqtsUzt/mfy0xaghbuz
zoc06BI1Iz154NOpN:bWxFkWe1BiQSIuYIpoPinCZaRuOgjVSrHSNBgoOTHiOOUa46wQLaONW.c0
DulMStMbdnslKDMc9koEzzjNTztRJFIjN4JZyNENLfq6lszbc8SS/vwxDXjulJXsjb:SQzTrRubx
LESWjLpnORfiGL5zovX1b7O8MlyqprjLzRUjJ5SxqLyuRpgzG9n7Dzr7qs5jzbbcT5NQddiy.F1t
xqLkNipRO01q9sK7u4aw3sh/dq3zNfJhVunK7cJDTjzaJM:H7zMK.h.JjeOzCBVudKbuNd/kYfTb
Z0WzZ5jCSouDmHnktdNzyas:bkTz42xLmXaqR86H8D.aTDyKstyMXnvji6RxnXyr4YuC/E/MoLSR
4QMzjMm5qTxzr:pajDvCjHldUHzE4bbybr6SFq6zTYQ/X0ByUw6wxet8jKuICwvjCwyMOGKxw8KZ
PfH6DYMSb2RDGyG6jdGGeBtnu1y14FoqzGK2edBnEkTylUNOdzffuxUKU:axeW:WgnBO4ijfvlaM
np9O..Jexf0c9M.0WcUJMJZ5zqESfTXyPp8dGcc..eKOJPsmo:ERGi2QoEr6hyV5ZijmpxsDSE8O
TsoTwhB8faeDhELDMlzhoXTyNyjOeFZZyjJhJj0BxJp.F/Qs6aTPzuRZFwNtNNNaNPIbn2qMTy:f
CmcJSEUdC4oKj9BJepKWoxq2SvS:uXDQz6UWtKtNDFJBTJNwOSwhRTfadXXG49el/2fOwWFgK74m
Q9RcGNWdFSh4NwMmZPLY6z8Pqghqxqrtur34DYKOqhOl.MDnHBfnB0vQzeGkVEzwY2QWjFu7JSw2
iSLlRx/kwjfh8qKNYQ8MGqwmCmEDffwx8bqRzrl8JjFHg7z6ZJZOrHztIb5hSiphw0mJodGuvxZZ
msUhSTgxtrG9YRtweDyJ5zETPRNutQuFhogelOnh3ew9x0SfFzDbBGhHDzeC9S7MPmhyhSo:InuK
Pa8huK:JN6rpwpVjSq:g.tTwdZBROaIkvppJ7aJbic7tTzKojIyFTYTr6Xltwzd6zxQfuSLmoyKS
6x:GyqulnUS4DxsxtmnJyoLpBmgmeXf/ZL6.cxmdD0gzGW3NbKh:xfhOh8O97lwSWDF2LG8Bq:dG
fcS/9ixrJGLTvfe5butS/uWEhaPgWjN:0nz6zn0nry5hVaTNVSfDS9XoxqSuMjItrrxch0m8J1uX
kJnJbyy:yfppz3SZjfmuT7GO7G8oocDxpejKIhG1GnryOu58ke6sTUJnwkzmepZ3VzvTef8M4Owg
VLoowcHe1qSuPaSzbVFzK3Skt3EJyThozhYbZ2TplDr1W9tUT:99sL6WuPbxtjzvPLhxH9rxrYWm
5bBZ4J1tKkeLfHvK5cq0dDHgrfLi2S9qmrtsjr5iNIE/xNw091k3FkbOk1zwrxSrmno7zRlh:LhE
E22Wmk8pOrKyMTRjDiptMQC5YEv30cUDS1ytnrD2aHecvfqeljolNtyKutPui6WhzqOv:czCSeEX
Dz2Wvlef::zwSKdzzLdriPHR8HxEn6FwOLw.QsFFgxOQL5dujbrioswxIJNDpr5:yX5KdXcssDMJ
fiXsKJVyo2SRHhpoIKxqJZMKQgQwjC1irrKmCP4veiZtvJ6qHMdTgrWjXdXydhSjHpRrGyZOxbHz
kSUiFno3xoQ889bsJFFJk6DswLfRvxZQuyaxyxHwh1qdjqwGMgPB0xeUT1nwuvOMtkc0WeD/Lw35
D/.jnqmrySUtu.xkjkUW0tkWWwIFIodsCTXNwYd9zjHNBDvmDUKjtzKlhTz550WCTyuvtZs3FzQD
Gzr9ldHQ35wI/yE.JVp3Rms1oDvpYFsW08wlQqaebJGFFdEpzNvdThQdoJhlbYEJe3ZKEQU8KaED
vsh8v9xh5nVr/JfTTSyTC34BX/yzqKfsCpJrUg4tnfgy4irDzXLk:F7tDT5VnVzsDJ/LyZomxOjv
BMVTse8DsDS0XkSLL1yoZD:M51bzMyjWMxF3Fmntim6UWEJuaVLlfBM97Ffyy5/mNxwZwtSeR2Tq
95z5XlQjpB7Zd7ndGZkgRgODW8dBJZFH3tvyRrvixttHe45T://F8TtThBDSgp5zYj:rjecmmvXz
uDvj3qdhsBv9QSx/rrCxDs7u89Nzi9qnpibKjyrGkfjTgKyZNfD/um9q3wCSPtN3GTwYIx2dVqHM
f2Yu5Z/PhvnojqdSu8KirzxZZ.V1CE4N/YixikXS3QYZwRRtQxh9:ZytuDs9GrITQQC7toWHlasn
DKZYvyheyQBMdwUsz8im2ctMUvxj:xxix4RNSv16G7zzxlSEv4mmGgf9ZhJHM066cqWzRahpipj6
0vXbdHyJ66cUXlpJ0xPX:xYsH8jq5j7RuzJW6zUWct5DEjIpCpGdB3TzJ9XV3mcuYpz3mjixvIRR
rvtbwq1oJTCgPP9umiieYxZ8yw28zzZC0x:aoqgNCi7WOub9aEPmPQqP64LernDHFFy1Y:DPq:uM
.KEFFs0i4JZZFF4Fwf6eo1U5zoiPPOSq8rRe6Uow5qC0Z5zoK0VHn2xSJSrWLn3jNc0yG0W9uLoj
naGrPZ49KPhxrM67TOy8QMjv3QSxQZnxnTIWd9T7tPvGRiKN8NUMe6yz7W:dhFWvXh1TpVTrv250
rRc0I8zOyYtKJYdqpahUulIaZzf.eCyTEWT63VW2nPRpPP1RZJObCvSTxfNTirrRzDCTDgd0OEbp
Fhmnv7DjW2t:hVivd7c.vg.2wLyWxVzjsJra9FMDqPvvTo9p/4uMhKkssyyYihbsLdduYhqwUVzo
deJBbSzGQyTQu5zkZTrRTeJTK91ef1wf0HTTsuiHWZQO9a7yjuqlbKnBTpyGxpBPuosdzogEap0S
xiZkzQTkLzplkBfGwCrGzR77KywVvdLYwgF1dus2F5JkeybwvzlHof:oPDKbeirxGQqI8CF7GqtF
mKwwtZFyjIdPxO4Jwxi/sDuUziLXokTqKilf77dLzhcjzsdNNCm:GgOMJMHyn7bevKqyz:mm/ELi
xSfFB7qCjdQW6/z4rCSdlubPjWfWZiLbt5HU0c0D57hx9fN:D9ZLqyjIugRF3/J2fPPz5l4kSw3y
GdrqoIbDuWDzEPc3TpjN1jytVhOnym3cfhryx.5itzYedgQCJxhzwrZI.zegK:61mK4aewZzjyoL
xYtgdHRyeHapaCQga5muPTylNf3K6bpOcplTrOMzrimSV/UpfDg2DDejDrhzXSDUNsaXJ2xdukLr
ocKR.RYeQJh3iv/LUvFV:iQVEJ75qlqrqQKwyzP1NkVOO56.Un3fUa1PHP.TRqVhR1PLfTcIoign
CCMTJiOKXKjZKS5bN/ynW0EUvsqa/q1gjUqhwRzvew7JBqhU01T/EG.Ky1hp3qBphqpJzTpPj0tB
VTLyNZj4rs/KhHBVi4BK/zLz7Df6NTNsKr7jVunPJeazNtqSDDqLrxsfshr/uxYDi47FOSrxpdSy
O9jpvtyZm93ci.v8Z9Cv7HjwKNheUO957qj2HEDKbomzgzivKyKzUCVNrgvfGpJKtz1zN6pPNW7a
hfEhvPinjNfKaPUf1Gh:oxZSfvKPRSjQHP0WqjSuzJhjJbjUXSgKhRqUZwJPvaCBMhlD5q0gQOah
Bh1hiC3zkNIlDmCa4nOgdCOX2tNHaIbRYMR3IRhzrruyjhCexgbL9vjijSd7V4vumxNPTHVvTKgM
Jq7qD2042F.mhvJJxsQHs64MnsrgjummujqF4gqweadvbntEYvwD0jrgE7fknebxNTVSFl5MLxiM
RLWzUDIzO4UejXyyQxIRzdaHWJTDSJzimJKSnpW.7zKiymF9RTvIjKKz3EV8mp9:gySkbeBy8jDZ
wOvtrIT6flMSiuyOqKTzvEJ4ryizxe7L7FgfGnIyf.gamdlU:pnboDzrzgjyiK5psaOLyK5q7BEm
dwHWES9:NzzYjN.WBa5gwS7vaPycfyPtvDdaNvtLnB8hDaem4jhmMDYZFVKyiifVC2ZI:bFCf/zi
OGYFNLbdgWyO:qs1HejMU2nI1gkRTw08yw4JFfDH7/ZRvun2/caKZUOZ0eM7EcKxnrw5JYMztifY
xYhjyJKZv8E3f.UvgPieevechpgdP4jBy:5FWqxLRRpovrofirqysL:jxp5X2v9QGybnjNovepTX
jnzPmpTjw9JyPCvrzYvj5b/xM:zfVb/elxzHwLO3tjJhKrL/nq3ipynqnsmOqF2O3PFd0rWrxBbB
VhPbSRg1VjIkCZMtFfvHHW9D0S9MCVFWWW28rXCaxuOKYIlqwfPe8pTN0J2.pBqr8BYMhuCZiVk6
KxFG/NReyelPWKyjWkIzH/oYsV.PiwNuMEu7.Miq6L57UuiDDkBekGE0VWr7rMDUskvJ9Pp7g6wG
k1ElCzvrFTlIOgD9wjNWUuG09qzynzsZxl8zrfTSVMm46kzkyBJSryfRWPCpgskbR/WxCb.7kJqg
JbKOlE:C6ecncSrptvz2K5TQsa4PbTrk0NSgnGef8f8eeZv/J2JaKaONFVVVZKDzqIFnvB:vMr.2
Wi4T9pcBrIhvRxgYykXtXpuWttwyjrwesPIh:01EdcdihDavrwxLk0pzsDc3mnNOeWgwfEdOSh8o
mSqcxOG9Z2sSMOr7qz:YkrPFXBVfNi0PnLMaanqBV5oDXTtXSfsrtVr9/mdWpwqfZac6qd0gCyC8
LzmohGbkOjzVazcMRBegf9v:B.yDtmttTrxPgaLFoYgNQzuSCuwz/sE3gonBn.gojcxnGGk0CjPG
CTDiZVXS:Ido6X5IW7GW7RrOrHUSZM.8o./UZbZtJMYCgkR9G11cB6qC8kKRbY2Hcb2.62lrDX5K
RjmpkHtgiqRLFz2o6b.f.Po.c6iPjh:PFoRVoFVO3Rp9rWMpieiqvhjrPR65FrRbCeBvgM3vb/CY
loKNgzEVrRBQGkrB5YFxs8jxm0us1y9hDji0CIUo.xZPS4Ggoj6HqgiCKRR9t:6a8OB5roz4UjXa
8O6uqugXetd.aWsW3P3h:aKSlSJRGCV9dlL8CL0.8PzfjZTsNrlbT9mfBvRvO8Yo.0fq7kmoNxXz
PKyaelt4v3ZV8HcVx/fVjcEib7QuU5f1S2qClSvrRuQ9trgLjwTiryG8HMnwou.zEFP3/kzUkjTy
OYYjGHcWUi7qrZvHyzfOochpNwgU7Sgq9pHBTz0chNyZERrhDiozqjt/b4SPz0UYeDzkSx4abmme
xTDWVsz6xJDWP7mYZKy/6:r3.ndxlTzd6BTwaiHM.hivgu.9xThWTzCBvlNRNKSxzzU7xzbrejjU
ttuv4xJCHmGOt5wpL4lg5x0Kgw14ztVqbPjjqOxPvoqjxjjQ/VTIEKirxrravJyyTtxvfTqRO4e8
MDzBBtOSjZeZuhSdury0CujbyLz6DaqyyaZdLqvivPKvxBJaLogJrLqY4gUwTyTzzw2zwLmQTceP
twX.M4tWavL1Ns4KNiojx:ydeujjqSozw3NDzsC/jVs1kHwMzy.qPbS.Yw9RTnvCjFT5jNXbgyi4
XjSSEwPpE.wQzCgE.T4c4yzpiKRa9ivK1Lw8mfnOzTfxrLs8eef9IgikqvivONfss/WR:MDxE:kU
uGGq0uHaMWTOB4.Q7hJzmDbfRPvilDTKCIq:PaNi.7cOUbBBFxM8TqeaOLxxW4yZhO/GTtkLP3Lf
HyzszrXM1YFJkxiTDyihfK9ozG4y.nMnWrlrt4bXMwPPKqHQBihT48H/4w5T9QZVZZVhDTFzrJxd
fqmqCwHvzjnuipSnPugMz98T.SzXVbSEpbz/3DU2xVBYRNe76VBUql1ivt:Tlz2mPeHY2Noq702z
kenBMKhBhx:oPneB9YV42yEuDpekyaftIHUTd3BZvrwErywjzLqb3y1tqSJq/ujxkrzePoIzfg5l
Kk0QoSJ.8qKKg4En0eW6UMqd5EbgOq2x4T2Yo6p6FUVD0MygWF714VNybcacxUd:so6NclyEaL9H
wGzXbhsZR.ENhw.
AtEndOfEncoding
User avatar
Josef Templ
Posts: 2047
Joined: Tue Sep 17, 2013 6:50 am

Re: issue-#146 TextRulers docu improvements

Post by Josef Templ »

Zinn wrote:Is it possible to add decimal point tabs to TextRulers? How to do it? How much work is it?
- Helmut
Besides the implementation this is more complicated than it looks, I am afraid.
It depends on the user's settings (or region) which character is to be used as the separator.
It can be a "," or a ".", for example.
If the separator is fixed, it will not please everybody.

As a simple work around for the missing decimal tabs I would use
a fixed number of decimal places with a right aligned tab.

- Josef
Zinn
Posts: 476
Joined: Tue Mar 25, 2014 5:56 pm
Location: Frankfurt am Main
Contact:

Re: issue-#146 TextRulers docu improvements

Post by Zinn »

Ok, it is good to speak about it.
Thank you Josef that you point out the problem and show another solution.
It is better to leave it out.
- Helmut
User avatar
Robert
Posts: 1024
Joined: Sat Sep 28, 2013 11:04 am
Location: Edinburgh, Scotland

Re: issue-#146 TextRulers docu improvements

Post by Robert »

Josef Templ wrote:Besides the implementation this is more complicated than it looks, I am afraid.
Yes, I agree.
It depends on the user's settings (or region) which character is to be used as the separator.
It can be a "," or a ".", for example.
If the separator is fixed, it will not please everybody.
This seems like a relatively minor problem. I can think of a couple of possible ways to approch this, but the simplest is to just use '.'. No one has complained that Strings.StringToReal does not adapt, and that is a much more common limitation.
Helmut wrote:Thank you Josef that you point out the problem and show another solution.
It is better to leave it out.
If I was being polite I would agree.
If I was being honest I would disagree.
This feels like the StdStamps upgrade; a lot of work, but a worthwhile improvement. Is the improvement worth the work? I suspect the answer depends on whether you are the person doing the work!
User avatar
Josef Templ
Posts: 2047
Joined: Tue Sep 17, 2013 6:50 am

Re: issue-#146 TextRulers docu improvements

Post by Josef Templ »

Robert wrote: I can think of a couple of possible ways to approch this, but the simplest is to just use '.'. No one has complained that Strings.StringToReal does not adapt, and that is a much more common limitation.
In general, I am not against adding decimal tabs.
I only wanted to point out that it not only requires (1) a working implementation but also (2) a reasonable specification.

In the german speaking part of the world a currency value is typically (99.9%) formatted like this:

123.456.789,00

A dot is used for groups of 10^3 and the comma is used as a decimal separator.
In many tables you find large numbers formatted like this be it a currency or something else.
For CP REAL literals the dot would of course be sufficient but this is a very special use case.
Texts can be typed in by hand or be generated by something different from Strings.RealToString.

I have looked it up in Open Office, Microsoft Office 2013, and Google Docs.
Open Office allows one to select an arbitrary separator character where the user's
setting from the control panel seems to be the default.
MS Word 2013 always uses the user's setting from the control panel.
Google Docs does not support decimal tabs at all.

- Josef
Zinn
Posts: 476
Joined: Tue Mar 25, 2014 5:56 pm
Location: Frankfurt am Main
Contact:

Re: issue-#146 TextRulers docu improvements

Post by Zinn »

I had a close look at Robert's implementation.
My suggestion is to use right justify instead of centre when the decimal point is not found.
Further I would like to define that the rightmost decimal point or comma is used to align to the tab stop.
Whatever is more right.
Maybe we can also add colon in the list of point and comma.
- Helmut
Last edited by Zinn on Mon Jun 05, 2017 10:23 am, edited 1 time in total.
User avatar
Robert
Posts: 1024
Joined: Sat Sep 28, 2013 11:04 am
Location: Edinburgh, Scotland

Re: issue-#146 TextRulers docu improvements

Post by Robert »

Zinn wrote:I had a close look at Robert's implementation.
My suggestion is to ...
Due to the recent interest in this topic I do intend to investigate if I can improve my implementation.

However I have a pretty full calender in the next few weeks (two big bike trips; 1 by pedal, 1 by 1000cc Kawasaki), then I should have some free time (I retire in 3 days!).
Meanwhile any suggestions gratefully received.
User avatar
Josef Templ
Posts: 2047
Joined: Tue Sep 17, 2013 6:50 am

Re: issue-#146 TextRulers docu improvements

Post by Josef Templ »

Zinn wrote:My suggestion is to use right justify instead of centre when the decimal point is not found.
I agree that if there is no radix character, the text should be right aligned.
This is the usual case for column titles.
Zinn wrote:Further I would like to define that the rightmost decimal point or comma is used to align to the tab stop.
Whatever is more right.
Maybe we can also add colon in the list of point and comma.
This is a smart idea, but there is one remaining problem:

Code: Select all

123.456
123.456,78
- Josef
User avatar
Robert
Posts: 1024
Joined: Sat Sep 28, 2013 11:04 am
Location: Edinburgh, Scotland

Re: issue-#146 TextRulers docu improvements

Post by Robert »

Josef Templ wrote:
Zinn wrote:Further I would like to define that the rightmost decimal point or comma is used to align to the tab stop.
Whatever is more right.
Maybe we can also add colon in the list of point and comma.
This is a smart idea, but there is one remaining problem:

Code: Select all

123.456
123.456,78
1 - My published code already includes : as a reference point.

2 - I don't understand the remaining problem example: Are you suggesting the second line could mean either 123·45678
or 123456·78 depending on national conventions, so is ambiguous?

Anyway I don't think the behaviour should depend on user's preferences or options. If I write a document that renders correctly on my machine, I want to be able to send it to you and have it render correctly on your machine. If we need two different behaviours to suit national conventions we should have two different "Decimal Tabs" so the option becomes explicit within the document.
Post Reply