bugs in Time.hs
Härmel Nestra
nestra@math.ut.ee
Tue, 26 Aug 2003 17:53:32 +0200 (EET)
This message is in MIME format. The first part should be readable text,
while the remaining parts are likely unreadable without MIME-aware tools.
Send mail to mime@docserver.cac.washington.edu for more info.
--683745061-2141550489-1061904422=:1896
Content-Type: TEXT/PLAIN; CHARSET=ISO-8859-15
Content-Transfer-Encoding: 8BIT
Content-ID: <Pine.LNX.4.44.0308261710111.1896@rhea.at.mt.ut.ee>
Hi Hugs-team,
I found several divergences of the module Time of Hugs (v. Nov
2002 for Linux) from the Haskell Report which can't be found neither
in the list of known Hugs bugs nor in the list of differences from
Haskell 98 (the latter is also too old and claims that Time is not
yet available).
1. The report specifies that the field ctSec of datatype
CalendarTime must be exported outside the module. In Hugs, this field
is missing from the exports list.
2. The report requires (see the end of the penultimate paragraph
before the library starts) that " toClockTime l converts l [...]
ignoring the contents of the ctWDay , ctYDay , ctTZName , and
ctIsDST fields". Hugs, however, does not ignore ctIsDST .
3. Additionally, the behaviour of the function diffClockTime is
strange in Hugs. In the returned record, at most two fields are
non-zero: tdSec and tdPicosec . Thereby, tdSec is of type Int
which leads to incorrect value in the case of big time differences.
The report is amazingly tongue-tied at this point, so it is even
difficult to argue that your implementation is diverging. It seems
natural to think however that this behaviour is not what was expected.
I solved this problem by changing the type of tdSec to be Integer .
But this created a new divergence from the report.
4. There seem to be problems with dates before year 1970.
I attach my version of Time.hs to this mail, perhaps it helps you
somewhat (the places of change are documented with today's date).
(Handling dates before 1970 has not been added there.)
The report on Time is really funny. It specifies that
"Pre-Gregorian dates are inaccurate". So if your implementation
handles pre-Gregorian dates accurately then it does not implement the
Haskell 98 language correctly :)
Best regards,
Härmel Nestra
(researcher of University of Tartu, Estonia)
--683745061-2141550489-1061904422=:1896
Content-Type: TEXT/PLAIN; charset=US-ASCII; name="Time.hs"
Content-Transfer-Encoding: BASE64
Content-ID: <Pine.LNX.4.44.0308261753320.1896@rhea.at.mt.ut.ee>
Content-Description:
Content-Disposition: attachment; filename="Time.hs"
LS0NCi0tIEltcGxlbWVudGF0aW9uIG9mIEhhc2tlbGwgOTgncyBUaW1lIG1v
ZHVsZS4gU3VpdGFibGUgZm9yIHVzZQ0KLS0gd2l0aCBIdWdzOTguDQotLQ0K
bW9kdWxlIFRpbWUNCgkoIENsb2NrVGltZSguLikgICAgICAgICAtLSBub24t
c3RhbmRhcmQsIHJlcG9ydCBzYXlzIGl0cyBhYnN0cmFjdC4NCgkJCQktLSBp
bnN0YW5jZXM6IEVxLCBPcmQNCgkJCQktLSBpbnN0YW5jZXM6IFNob3cgIChu
b24tc3RhbmRhcmQpDQoJLCBNb250aCggSmFudWFyeQ0KCSAgICAgICAsIEZl
YnJ1YXJ5DQoJICAgICAgICwgTWFyY2gNCgkgICAgICAgLCBBcHJpbA0KCSAg
ICAgICAsIE1heQ0KCSAgICAgICAsIEp1bmUNCgkgICAgICAgLCBKdWx5DQoJ
ICAgICAgICwgQXVndXN0DQoJICAgICAgICwgU2VwdGVtYmVyDQoJICAgICAg
ICwgT2N0b2Jlcg0KCSAgICAgICAsIE5vdmVtYmVyDQoJICAgICAgICwgRGVj
ZW1iZXINCgkgICAgICAgKQkJLS0gaW5zdGFuY2VzOiBFcSwgT3JkLCBFbnVt
LCBCb3VuZGVkDQoJICAgICAgIAkJCS0tIGluc3RhbmNlczogSXgsIFJlYWQs
IFNob3cNCgksIERheSggU3VuZGF5DQoJICAgICAsIE1vbmRheQ0KCSAgICAg
LCBUdWVzZGF5DQoJICAgICAsIFdlZG5lc2RheQ0KCSAgICAgLCBUaHVyc2Rh
eQ0KCSAgICAgLCBGcmlkYXkNCgkgICAgICwgU2F0dXJkYXkpCS0tIGluc3Rh
bmNlczogRXEsIE9yZCwgRW51bSwgQm91bmRlZA0KCSAgICAgCQkJLS0gaW5z
dGFuY2VzOiBJeCwgUmVhZCwgU2hvdw0KCSwgQ2FsZW5kYXJUaW1lKCBDYWxl
bmRhclRpbWUNCgkJICAgICAgLCBjdFllYXINCgkJICAgICAgLCBjdE1vbnRo
DQoJCSAgICAgICwgY3REYXkNCgkJICAgICAgLCBjdEhvdXINCgkJICAgICAg
LCBjdE1pbg0KICAgICAgICAgICAgICAgICAgICAgICwgY3RTZWMgLS1hZGRl
ZCAyMDAzLTA4LTI2DQoJCSAgICAgICwgY3RQaWNvc2VjDQoJCSAgICAgICwg
Y3RXRGF5DQoJCSAgICAgICwgY3RZRGF5DQoJCSAgICAgICwgY3RUWk5hbWUN
CgkJICAgICAgLCBjdFRaDQoJCSAgICAgICwgY3RJc0RTVA0KCQkgICAgICAp
CQktLSBpbnN0YW5jZXM6IEVxLCBPcmQsIFJlYWQsIFNob3cNCgksIFRpbWVE
aWZmKCBUaW1lRGlmZg0KCQkgICwgdGRZZWFyDQoJCSAgLCB0ZE1vbnRoDQoJ
CSAgLCB0ZERheQ0KCQkgICwgdGRIb3VyDQoJCSAgLCB0ZE1pbg0KCQkgICwg
dGRTZWMNCgkJICAsIHRkUGljb3NlYw0KCQkgICkJCS0tIGluc3RhbmNlczog
RXEsIE9yZCwgUmVhZCwgU2hvdw0KDQoJLCBnZXRDbG9ja1RpbWUJCS0tIDo6
IElPIENsb2NrVGltZQ0KCSwgYWRkVG9DbG9ja1RpbWUJLS0gOjogVGltZURp
ZmYgIC0+IENsb2NrVGltZSAtPiBDbG9ja1RpbWUNCgksIGRpZmZDbG9ja1Rp
bWVzCS0tIDo6IENsb2NrVGltZSAtPiBDbG9ja1RpbWUgLT4gVGltZURpZmYN
Cg0KCSwgdG9DYWxlbmRhclRpbWUJLS0gOjogQ2xvY2tUaW1lIC0+IElPIENh
bGVuZGFyVGltZQ0KCSwgdG9VVENUaW1lCQktLSA6OiBDbG9ja1RpbWUgLT4g
Q2FsZW5kYXJUaW1lDQoJLCB0b0Nsb2NrVGltZQkJLS0gOjogQ2FsZW5kYXJU
aW1lIC0+IENsb2NrVGltZQ0KDQoJLCBjYWxlbmRhclRpbWVUb1N0cmluZyAg
LS0gOjogQ2FsZW5kYXJUaW1lIC0+IFN0cmluZw0KCSwgZm9ybWF0Q2FsZW5k
YXJUaW1lICAgIC0tIDo6IFRpbWVMb2NhbGUgLT4gU3RyaW5nIC0+IENhbGVu
ZGFyVGltZSAtPiBTdHJpbmcNCgkNCgkgIC0tIE5PTi1TVEFOREFSRCAoYnV0
IGFsc28gcHJvdmlkZWQgYnkgR0hDIGltcGwpDQoJLCBub1RpbWVEaWZmCSAg
ICAgICAgLS0gOjogVGltZURpZmYNCgkpIHdoZXJlDQoNCmltcG9ydCBMb2Nh
bGUNCmltcG9ydCBDaGFyICggaW50VG9EaWdpdCApDQppbXBvcnQgSU9FeHRz
ICggdW5zYWZlUGVyZm9ybUlPICkNCmltcG9ydCBJeCAoIEl4ICkNCg0KZGF0
YSBDbG9ja1RpbWUgDQogID0gVE9EIEludGVnZXIgIC0tIHNlY3MNCiAgCUlu
dGVnZXIgIC0tIG1pY3JvICgxMF4tNikgc2VjcyBbMCwgOTk5OTk5XQ0KICAg
IGRlcml2aW5nICggRXEsIE9yZCApDQoNCg0KLS0gRGVmaW5pdGlvbnMgb2Yg
TW9udGgsIERheSwgQ2xvY2tUaW1lLCBUaW1lRGlmZiAtIHN0cmFpZ2h0IG91
dCBvZiB0aGUgcmVwb3J0Og0KZGF0YSBNb250aCANCiAgPSBKYW51YXJ5DQog
IHwgRmVicnVhcnkNCiAgfCBNYXJjaA0KICB8IEFwcmlsDQogIHwgTWF5DQog
IHwgSnVuZQ0KICB8IEp1bHkNCiAgfCBBdWd1c3QNCiAgfCBTZXB0ZW1iZXIN
CiAgfCBPY3RvYmVyDQogIHwgTm92ZW1iZXINCiAgfCBEZWNlbWJlcg0KICAg
IGRlcml2aW5nIChFcSwgT3JkLCBFbnVtLCBCb3VuZGVkLCBJeCwgUmVhZCwg
U2hvdykNCg0KZGF0YSBEYXkNCiAgPSBTdW5kYXkNCiAgfCBNb25kYXkNCiAg
fCBUdWVzZGF5DQogIHwgV2VkbmVzZGF5DQogIHwgVGh1cnNkYXkgDQogIHwg
RnJpZGF5DQogIHwgU2F0dXJkYXkNCiAgICBkZXJpdmluZyAoRXEsIE9yZCwg
RW51bSwgQm91bmRlZCwgSXgsIFJlYWQsIFNob3cpDQoNCmRhdGEgQ2FsZW5k
YXJUaW1lIA0KICA9IENhbGVuZGFyVGltZSANCiAgICAgICAgeyBjdFllYXIg
ICAgICAgICAgICAgICAgICAgICAgICAgIDo6IEludA0KCSwgY3RNb250aCAg
ICAgICAgICAgICAgICAgICAgICAgICA6OiBNb250aA0KCSwgY3REYXksIGN0
SG91ciwgY3RNaW4sIGN0U2VjICAgICA6OiBJbnQNCgksIGN0UGljb3NlYyAg
ICAgICAgICAgICAgICAgICAgICAgOjogSW50ZWdlcg0KCSwgY3RXRGF5ICAg
ICAgICAgICAgICAgICAgICAgICAgICA6OiBEYXkNCgksIGN0WURheSAgICAg
ICAgICAgICAgICAgICAgICAgICAgOjogSW50DQoJLCBjdFRaTmFtZSAgICAg
ICAgICAgICAgICAgICAgICAgIDo6IFN0cmluZw0KCSwgY3RUWiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA6OiBJbnQNCgksIGN0SXNEU1QgICAgICAg
ICAgICAgICAgICAgICAgICAgOjogQm9vbA0KICAgICAgICB9IGRlcml2aW5n
IChFcSwgT3JkLCBSZWFkLCBTaG93KQ0KDQpkYXRhIFRpbWVEaWZmIA0KICA9
IFRpbWVEaWZmIA0KICAgICAgICB7IHRkWWVhciwgdGRNb250aCwgdGREYXkg
OjogSW50DQoJLCB0ZEhvdXIsIHRkTWluICAgOjogSW50IC0tbW9kaWZpZWQg
MjAwMy0wOC0yNg0KCSwgdGRTZWMsIHRkUGljb3NlYyAgICAgICAgICAgICAg
OjogSW50ZWdlciAtLW1vZGlmaWVkIDIwMDMtMDgtMjYNCiAgICAgICAgfSBk
ZXJpdmluZyAoRXEsIE9yZCwgUmVhZCwgU2hvdykNCg0Kbm9UaW1lRGlmZj1U
aW1lRGlmZiAwIDAgMA0KCQkgICAgMCAwIDANCgkJICAgIDANCg0KcHJlY2lz
aW9uID0gMTAwMDAwMCAtLWFkZGVkIDIwMDMtMDgtMjYNCg0KZ2V0Q2xvY2tU
aW1lIDo6IElPIENsb2NrVGltZQ0KZ2V0Q2xvY2tUaW1lID0gZG8NCiAgKHMs
bWljcm9zKSA8LSBnZXRDbG9ja1RpbWVQcmltIA0KICByZXR1cm4gKFRPRCAo
ZnJvbUludGVncmFsIHMpIChmcm9tSW50ZWdyYWwgbWljcm9zKSkNCg0KcHJp
bWl0aXZlIGdldENsb2NrVGltZVByaW0gOjogSU8gKEludCxJbnQpDQoNCnRv
Q2xvY2tUaW1lIDo6IENhbGVuZGFyVGltZSAtPiBDbG9ja1RpbWUNCnRvQ2xv
Y2tUaW1lIChDYWxlbmRhclRpbWUgeXIgbW9uIG1kYXkNCgkJCSAgaG91ciBt
aW4gc2VjIF8NCgkJCSAgXyBfIF8gdHogXykgPSB1bnNhZmVQZXJmb3JtSU8g
JCBkbyAtLW1vZGlmaWVkIDIwMDMtMDgtMjYNCiAgcyA8LSB0b0Nsb2NrVGlt
ZVByaW0gKHlyLTE5MDApIChmcm9tRW51bSBtb24pIG1kYXkNCiAgCQkgICAg
ICAgaG91ciBtaW4gc2VjDQoJCSAgICAgICB0eiAwIC0tbW9kaWZpZWQgMjAw
My0wOC0yNg0KICByZXR1cm4gKFRPRCAoZnJvbUludGVncmFsIHMpIDApDQoN
CnByaW1pdGl2ZSB0b0Nsb2NrVGltZVByaW0gOjogSW50IC0+IEludCAtPiBJ
bnQNCgkJCSAgLT4gSW50IC0+IEludCAtPiBJbnQNCgkJCSAgLT4gSW50IC0+
IEludCAtPiBJTyBJbnQNCg0KdG9VVENUaW1lIDo6IENsb2NrVGltZSAtPiBD
YWxlbmRhclRpbWUNCnRvVVRDVGltZSBjdCA9IHVuc2FmZVBlcmZvcm1JTyAo
dG9DYWxUaW1lIFRydWUgY3QpDQoNCnRvQ2FsZW5kYXJUaW1lIDo6IENsb2Nr
VGltZSAtPiBJTyBDYWxlbmRhclRpbWUNCnRvQ2FsZW5kYXJUaW1lID0gdG9D
YWxUaW1lIEZhbHNlDQoNCnRvQ2FsVGltZSA6OiBCb29sIC0+IENsb2NrVGlt
ZSAtPiBJTyBDYWxlbmRhclRpbWUNCnRvQ2FsVGltZSB0b1VUQyAoVE9EIHMg
bXNlY3MpDQogIHwgKHMgPiBmcm9tSW50ZWdyYWwgKG1heEJvdW5kIDo6IElu
dCkpIHx8IA0KICAgIChzIDwgZnJvbUludGVncmFsIChtaW5Cb3VuZCA6OiBJ
bnQpKQ0KICA9IGVycm9yICgoaWYgdG9VVEMgdGhlbiAidG9VVENUaW1lOiAi
IGVsc2UgInRvQ2FsZW5kYXJUaW1lOiAiKSArKw0KICAgICAgICAgICAiY2xv
Y2sgc2VjcyBvdXQgb2YgcmFuZ2UiKQ0KICB8IG90aGVyd2lzZSA9IGRvDQog
ICAgKHNlYyxtaW4saG91cixtZGF5LG1vbix5ZWFyLHdkYXkseWRheSxpc2Rz
dCx6b25lLG9mZikgPC0gDQogIAkJdG9DYWxUaW1lUHJpbSAoaWYgdG9VVEMg
dGhlbiAxIGVsc2UgMCkgKGZyb21JbnRlZ3JhbCBzKQ0KICAgIHJldHVybiAo
Q2FsZW5kYXJUaW1leyBjdFllYXI9MTkwMCt5ZWFyDQogIAkJICAgICAgICAs
IGN0TW9udGg9dG9FbnVtIG1vbg0KCQkgICAgICAgICwgY3REYXk9bWRheQ0K
CQkgICAgICAgICwgY3RIb3VyPWhvdXINCgkJICAgICAgICAsIGN0TWluPW1p
bg0KCQkgICAgICAgICwgY3RTZWM9c2VjDQoJCSAgICAgICAgLCBjdFBpY29z
ZWM9bXNlY3MqMTAwMCoxMDAwDQoJCSAgICAgICAgLCBjdFdEYXk9dG9FbnVt
IHdkYXkNCgkJICAgICAgICAsIGN0WURheT15ZGF5DQoJCSAgICAgICAgLCBj
dFRaTmFtZT0oaWYgdG9VVEMgdGhlbiAiVVRDIiBlbHNlIHpvbmUpDQoJCSAg
ICAgICAgLCBjdFRaPShpZiB0b1VUQyB0aGVuIDAgZWxzZSBvZmYpDQoJCSAg
ICAgICAgLCBjdElzRFNUPW5vdCB0b1VUQyAmJiAoaXNkc3QvPTApDQoJCSAg
ICAgICAgfSkNCg0KcHJpbWl0aXZlIHRvQ2FsVGltZVByaW0gOjogSW50IC0+
IEludCAtPiBJTyAoSW50LEludCxJbnQsSW50LEludCxJbnQsSW50LEludCxJ
bnQsU3RyaW5nLEludCkNCg0KLS0gbm9uLXN0YW5kYXJkIFNob3cgaW5zdGFu
Y2UsIGJ1dCB3b3J0aCBpdC4uPyAocHJvdmlkZWQgYnkgR0hDIHRvbykuDQpp
bnN0YW5jZSBTaG93IENsb2NrVGltZSB3aGVyZQ0KICBzaG93IGN0ID0gY2Fs
ZW5kYXJUaW1lVG9TdHJpbmcgKHVuc2FmZVBlcmZvcm1JTyAodG9DYWxlbmRh
clRpbWUgY3QpKQ0KDQotLWFkZHMgZGF5cywgaG91cnMsIG1pbnV0ZXMgYW5k
IHNlY29uZHMgZmlyc3QgYW5kIG1vbnRocyBhbmQgeWVhcnMgYWZ0ZXIgdGhh
dCAyMDAzLTA4LTI2DQphZGRUb0Nsb2NrVGltZSA6OiBUaW1lRGlmZiAtPiBD
bG9ja1RpbWUgLT4gQ2xvY2tUaW1lDQphZGRUb0Nsb2NrVGltZSAoVGltZURp
ZmYgeWVhciBtb24gZGF5IGhvdXIgbWluIHNlYyBwc2VjKQ0KCSAgICAgICAo
VE9EIGNzZWNzIG1zZWNzKSA9IA0KCWxldA0KCSAgKHJfeXIsIHJfbW9uKSA9
IG1vbiBgZGl2TW9kYCAxMiAtLW1vZGlmaWVkIDIwMDMtMDgtMjYNCgkgIA0K
CSAgcHNlY1RvTVNlYyBwcyA9IHBzIGBkaXZgIHByZWNpc2lvbiAtLW1vZGlm
aWVkIDIwMDMtMDgtMjYNCg0KCSAgc2VjT2ZmID0gLS1yaHMgbW9kaWZpZWQg
MjAwMy0wOC0yNg0KCSAgICBzZWMgKyA2MCAqICh0b0ludGVnZXIgbWluICsN
CgkgICAgNjAgKiAodG9JbnRlZ2VyIGhvdXIgKyAyNCAqIHRvSW50ZWdlciBk
YXkpKSArIGV4U2VjDQoJICAoZXhTZWMsbXNlY3MnKSA9IChtc2VjcyArIHBz
ZWNUb01TZWMgcHNlYykgYHF1b3RSZW1gIHByZWNpc2lvbiAtLW1vZGlmaWVk
IDIwMDMtMDgtMjYNCgkgIA0KCSAgbmV3X21vbiA9IGZyb21FbnVtIChjdE1v
bnRoIGNhbCkgKyByX21vbg0KICAgICAgICAgICh5cl9kaWZmICwgbW9udGgn
KSAtLWRlY2xhcmF0aW9uIHJld3JpdHRlbiAyMDAzLTA4LTI2DQogICAgICAg
ICAgICA9IG5ld19tb24gYGRpdk1vZGAgMTINCg0KCSAgeWVhcicgPSBjdFll
YXIgY2FsICsgeWVhciArIHJfeXIgKyB5cl9kaWZmDQoJICBjYWwgPSB0b1VU
Q1RpbWUoVE9EIChjc2VjcyArIHNlY09mZikgbXNlY3MnKQ0KCWluDQoJdG9D
bG9ja1RpbWUgY2Fse2N0TW9udGg9dG9FbnVtIG1vbnRoJywgY3RZZWFyPXll
YXInfSAtLW1vZGlmaWVkIDIwMDMtMDgtMjYNCg0KZGlmZkNsb2NrVGltZXMg
OjogQ2xvY2tUaW1lIC0+IENsb2NrVGltZSAtPiBUaW1lRGlmZg0KZGlmZkNs
b2NrVGltZXMgKFRPRCBzMSBtczEpIChUT0QgczIgbXMyKSAtLXJocyByZXdy
aXR0ZW4gMjAwMy0wOC0yNg0KICA9IGxldA0KICAgICAgKGNhcnJ5ICwgZnJh
YykNCiAgICAgICAgPSAobXMxIC0gbXMyKSBgZGl2TW9kYCBwcmVjaXNpb24N
CiAgICBpbg0KCW5vVGltZURpZmZ7IHRkU2VjID0gczEgLSBzMiArIGNhcnJ5
DQoJCSAgLCB0ZFBpY29zZWM9IDEwMDAgKiAxMDAwICogZnJhYw0KCQkgIH0N
Cg0KLS0gZm9ybWF0dGluZyBDYWxlbmRhclRpbWVzLg0KY2FsZW5kYXJUaW1l
VG9TdHJpbmcgICAgOjogQ2FsZW5kYXJUaW1lIC0+IFN0cmluZw0KY2FsZW5k
YXJUaW1lVG9TdHJpbmcgICAgPSAgZm9ybWF0Q2FsZW5kYXJUaW1lIGRlZmF1
bHRUaW1lTG9jYWxlICIlYyINCg0KZm9ybWF0Q2FsZW5kYXJUaW1lIDo6IFRp
bWVMb2NhbGUgLT4gU3RyaW5nIC0+IENhbGVuZGFyVGltZSAtPiBTdHJpbmcN
CmZvcm1hdENhbGVuZGFyVGltZSBsIGZtdCBjdEAoQ2FsZW5kYXJUaW1lIHll
YXIgbW9uIGRheSBob3VyIG1pbiBzZWMgc2RlYyANCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3ZGF5IHlkYXkgdHpuYW1l
IF8gXykgPQ0KICAgICAgICBkb0ZtdCBmbXQNCiAgd2hlcmUgZG9GbXQgKCcl
JzpjOmNzKSA9IGRlY29kZSBjICsrIGRvRm10IGNzDQogICAgICAgIGRvRm10
IChjOmNzKSA9IGMgOiBkb0ZtdCBjcw0KICAgICAgICBkb0ZtdCAiIiA9ICIi
DQoNCiAgICAgICAgZGVjb2RlICdBJyA9IGZzdCAod0RheXMgbCAgISEgZnJv
bUVudW0gd2RheSkNCiAgICAgICAgZGVjb2RlICdhJyA9IHNuZCAod0RheXMg
bCAgISEgZnJvbUVudW0gd2RheSkNCiAgICAgICAgZGVjb2RlICdCJyA9IGZz
dCAobW9udGhzIGwgISEgZnJvbUVudW0gbW9uKQ0KICAgICAgICBkZWNvZGUg
J2InID0gc25kIChtb250aHMgbCAhISBmcm9tRW51bSBtb24pDQogICAgICAg
IGRlY29kZSAnaCcgPSBzbmQgKG1vbnRocyBsICEhIGZyb21FbnVtIG1vbikN
CiAgICAgICAgZGVjb2RlICdDJyA9IHNob3cyICh5ZWFyIGBxdW90YCAxMDAp
DQogICAgICAgIGRlY29kZSAnYycgPSBkb0ZtdCAoZGF0ZVRpbWVGbXQgbCkN
CiAgICAgICAgZGVjb2RlICdEJyA9IGRvRm10ICIlbS8lZC8leSINCiAgICAg
ICAgZGVjb2RlICdkJyA9IHNob3cyIGRheQ0KICAgICAgICBkZWNvZGUgJ2Un
ID0gc2hvdzInIGRheQ0KICAgICAgICBkZWNvZGUgJ0gnID0gc2hvdzIgaG91
cg0KICAgICAgICBkZWNvZGUgJ0knID0gc2hvdzIgKHRvMTIgaG91cikNCiAg
ICAgICAgZGVjb2RlICdqJyA9IHNob3czIHlkYXkNCiAgICAgICAgZGVjb2Rl
ICdrJyA9IHNob3cyJyBob3VyDQogICAgICAgIGRlY29kZSAnbCcgPSBzaG93
MicgKHRvMTIgaG91cikNCiAgICAgICAgZGVjb2RlICdNJyA9IHNob3cyIG1p
bg0KICAgICAgICBkZWNvZGUgJ20nID0gc2hvdzIgKGZyb21FbnVtIG1vbisx
KQ0KICAgICAgICBkZWNvZGUgJ24nID0gIlxuIg0KICAgICAgICBkZWNvZGUg
J3AnID0gKGlmIGhvdXIgPCAxMiB0aGVuIGZzdCBlbHNlIHNuZCkgKGFtUG0g
bCkNCiAgICAgICAgZGVjb2RlICdSJyA9IGRvRm10ICIlSDolTSINCiAgICAg
ICAgZGVjb2RlICdyJyA9IGRvRm10ICh0aW1lMTJGbXQgbCkNCiAgICAgICAg
ZGVjb2RlICdUJyA9IGRvRm10ICIlSDolTTolUyINCiAgICAgICAgZGVjb2Rl
ICd0JyA9ICJcdCINCiAgICAgICAgZGVjb2RlICdTJyA9IHNob3cyIHNlYw0K
ICAgICAgICBkZWNvZGUgJ3MnID0gc2hvdyAoY2FzZSB0b0Nsb2NrVGltZSBj
dCBvZiB7IChUT0QgcyBfKSAtPiBzIH0pDQogICAgICAgIGRlY29kZSAnVScg
PSBzaG93MiAoKHlkYXkgKyA3IC0gZnJvbUVudW0gd2RheSkgYGRpdmAgNykN
CiAgICAgICAgZGVjb2RlICd1JyA9IHNob3cgKGxldCBuID0gZnJvbUVudW0g
d2RheSBpbiANCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG4gPT0g
MCB0aGVuIDcgZWxzZSBuKQ0KICAgICAgICBkZWNvZGUgJ1YnID0gDQogICAg
ICAgICAgICBsZXQgKHdlZWssIGRheXMpID0gDQogICAgICAgICAgICAgICAg
ICAgKHlkYXkgKyA3IC0gaWYgZnJvbUVudW0gd2RheSA+IDAgdGhlbiANCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tRW51bSB3ZGF5IC0g
MSBlbHNlIDYpIGBkaXZNb2RgIDcNCiAgICAgICAgICAgIGluICBzaG93MiAo
aWYgZGF5cyA+PSA0IHRoZW4NCiAgICAgICAgICAgICAgICAgICAgICAgICAg
d2VlaysxIA0KICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIHdlZWsg
PT0gMCB0aGVuIDUzIGVsc2Ugd2VlaykNCg0KICAgICAgICBkZWNvZGUgJ1cn
ID0gDQogICAgICAgICAgICBzaG93MiAoKHlkYXkgKyA3IC0gaWYgZnJvbUVu
dW0gd2RheSA+IDAgdGhlbiANCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBmcm9tRW51bSB3ZGF5IC0gMSBlbHNlIDYpIGBkaXZgIDcpDQogICAg
ICAgIGRlY29kZSAndycgPSBzaG93IChmcm9tRW51bSB3ZGF5KQ0KICAgICAg
ICBkZWNvZGUgJ1gnID0gZG9GbXQgKHRpbWVGbXQgbCkNCiAgICAgICAgZGVj
b2RlICd4JyA9IGRvRm10IChkYXRlRm10IGwpDQogICAgICAgIGRlY29kZSAn
WScgPSBzaG93IHllYXINCiAgICAgICAgZGVjb2RlICd5JyA9IHNob3cyICh5
ZWFyIGByZW1gIDEwMCkNCiAgICAgICAgZGVjb2RlICdaJyA9IHR6bmFtZQ0K
ICAgICAgICBkZWNvZGUgJyUnID0gIiUiDQogICAgICAgIGRlY29kZSBjICAg
PSBbY10NCg0Kc2hvdzIsIHNob3cyJywgc2hvdzMgOjogSW50IC0+IFN0cmlu
Zw0Kc2hvdzIgeCA9IFtpbnRUb0RpZ2l0ICh4IGBxdW90YCAxMCksIGludFRv
RGlnaXQgKHggYHJlbWAgMTApXQ0KDQpzaG93MicgeCA9IGlmIHggPCAxMCB0
aGVuIFsgJyAnLCBpbnRUb0RpZ2l0IHhdIGVsc2Ugc2hvdzIgeA0KDQpzaG93
MyB4ID0gaW50VG9EaWdpdCAoeCBgcXVvdGAgMTAwKSA6IHNob3cyICh4IGBy
ZW1gIDEwMCkNCg0KdG8xMiA6OiBJbnQgLT4gSW50DQp0bzEyIGggPSBsZXQg
aCcgPSBoIGBtb2RgIDEyIGluIGlmIGgnID09IDAgdGhlbiAxMiBlbHNlIGgn
DQoNCg==
--683745061-2141550489-1061904422=:1896--