0xAkrasia / Keynesian-Beauty-Contest

0 stars 0 forks source link

Input out of bounds issue #1

Closed cryptitalk closed 7 months ago

cryptitalk commented 7 months ago

when testing the contract castVote, because we need encrypted cypher text, I used this utility: https://utils.inco.org/ to get 8 inputs (0, or 1), when testing against the contract, I will get following error, the cypher text is too long to be processed in my mind.

transact to KeynsianBeautyContest.castVote errored: Error encoding arguments: Error: value out-of-bounds (argument=null, value="0x1008000000000000f1d3589f37bb2f874879c6e6eb1502b6f283a304d10657e3028e466055838020780fbac1f9752e494102ec52033bc34c48e63fd92cc31e658fcd2556c4ea82f56856437a37e79c7ca50c5c2d3572095da30778c5e7d17798c6f540f72c97b375d5a383f0d2763dc9a1b622876a8ee81334fd1298422ad86cf4ba9b4a49446d9eb4fba0ae200f05dd578589f6c63aa4d3f9e51946b4009138c811f7b9a28a9c1897417cdc46a9f2b037ccbb9dca28cfe5445277929d39ec369c887998cb016c36f6612259e6941b40da11f1e557aae93badd48d286ad261dcea8f5098427be0eec75ff20b712fd46682b65cf512e22049c416a5b1a4168dfc9ab8d1734b0a98848e70fbf9629435d81ef56198ceb40dee692eb06253668e95713554b3bbc5f06d66c5f22dac8999f92877dcca3d38a9f0ad65ba1e9783bc2c1bedb7b181a3cf451730d11facc9490267f2425fb47a03536838b68cbf3c619b9eef1782b371feb19e5c6c5efd17640f15436a93c3210f16865e513338c1e259530d02e33ec7b69b3a0eaa706e00821c641e0bb2f2d6ed1d08b1af22b206f0f876ff07dfdff442b9283806b5c6094eadc8558c40866cc9da0ef33e39b7f3e8617718592aab24a87c6c230a26b55bc0eebc7af2a44e4afa4e79c830f47722834fe251e02bee359dd2abc55167a2ef48bebaf29b6a9f8bf94e0147ba1d2c3731ad88ad83e7dccf5c9ea87dc08aea994442edb7e8d2a48f699e77016e8449bb2cc8fa001fe09c34184ac975e04c090cb8b30db502790f8844b8d3c119702c3382e26f268ebe442f957a260e0b6fdf766a03337b84319b5aaef7f86f610316b461f18984761cbd51c6d4814aac2f55d46de9b7b4169f8f0b6a3deb51465d3fbd913072d86e66b7d13749762737c35883694182f9911532cbc0aa8cf33fd35dcc44b4ca32fa079758e3530853dcb299f768fa206561b9687fb841a9d0ab6d8141c0a7cd888b30a18d565a0880362dbde8c91adbc35c48c6b8bcfdc386801bbac979863cff247c8ede2f7508ec7ff54c4450994b688d02fd1ba6638890186bb721828a6b84a01fd256828c66c6fe7e5515a6cfdbffc3bdd90650041b69a2ed4593702739e4dad07058f05f8c6a71f14e48b9004e00abb66fc9a1983b5573fa415e41c6c9c7e0069e08a7f1aed8be29097c45da72a975e9cc5a9084caa0ee974a78a87b787221fa59a0c5b50a3add3d2f7eb39348e3f48c54b3c0e1c12e9a39a1543e7ccd5e26684092c5cb7342c8536110a6322b7c3fe8a234ce1e96a9b2f32a558fc66c4f60781604e6022ce5d0c69934cddd80226b8653986a235e717084c9fcd73e6253f79074eb723af831ae921597e77470d2ea729baa8fac7d8fcb7ce90b891759374bf287c7fc41fd86bd5f758ce0bb8a1bc50e05cc1ff3b5615825874d5f0b50f4013d059e7a0d268aca12ec4ccfb6bc970f63010552e577569ef39e6636d8724fa0f2320c42d15c84413965eb3edfb697180a51636f89ae184a51d4280b73887daeef53d0f68cc92513512030c2449d2157c56ee5964a465dd7c793dbe601239ea0b2dfd442e888d1780e3f1b2a56f37c0c998a154686b1abe12459845560abef4bd70c85e541d50dda8a78a002fb3aed38719691c0d51f3a7929c6ea61fc936c2781cb741e54376e0f26706af9c7fe7c90401a838f8e4f1ea09eb8046ec1e6c069c509f0f83eb84edfa3d1af829b82004eaaca134fa5350c7de1d78b4b00e7f263cc46b62e8ef0dc432cfbdc6b7730816925ae41f95ad3336ad5b157568915da7b8e5fb66dba436a0d863e806337cee6197c15f5bb408658980e5f009457df79c95196ad76c4aeab1aec68db840b2df14613d8af42647bcd08d5653dda99097817352ca559076bc3127906815cb057d4b1ab342dcddf736a568fb1e4e212c618a68ee0eaa2d25a1a91cb1206b00d898565d8086ae54f6db187a1f8a179148b1090fee1b4b402a5b98c1125d5482082b6680189bb1330eb9560dd465a0894e264f441c21f4aa1a8cf42cf3dbbf3c1be91dda729de073dec1f65c53648044deee51b89501cdbf0fa0b17e3bacdca2edba15796c067faac25839dada7b4a915284f946ab4ffaef1081396cbbb93efba6cfffcf48955dfdbfee6d277aa7373510495f417a037bad0560d50fec5c16e2cb9a5f7a092a7058cbaee2a71c326a9ba7f383cfe8a957ea77a74ed4127837d1bab64808ea1b9ceccda946d33188d2a534708e02c69a95e6572e5a972a79eb5d833eb934b04d9321e67225b55264d03da788815dbc2f6000d62964011915638b921efd6c0f751a97b9d9eb6ad6acd81c393349e42f9378dd99d9e6a978930877197c31fe8b9e698d17c911651aa77ad4edb5f680b74df2c8aa7b1e8accf998969045a2ffca7055b7256b5ef38f9b4f8110856c8139dbbc0a0e103728a9cf458d8dd7d9fc5ee59d46e53dcfb81b194ca7675180390de8dac0434af389f0c3bc6797e5c223edb4329346100272aafe8628177e28f592ca07498d092178b3969baaefa162dc3c7f04c21da00b49c16c7de22e23ebd32962a291fd2b798323034b1d731fe8016113668ce0a539e418c933eb1e41a2d709348124e1a1752563f7a71732cecc33c7e2b6390faf082bde23a0aacc5999109df463c49596bc99b3485700d08fa2e6a05bd8a749b1d01720249b8e0d9b2025d9806c9e89585bbad07dc2437bb22ac781e6217797380d0a9c899d1435b6953739ff838a0bba6e20fcf57fcd374ca946d57054570f0dff7da33c7e25d09cfe61fb9982c8ab4421efc52bcb0a84cf1011fc0428ff4169ec5bda93543dbef08f65ba51468a9f18dd62c87530ad2574b498ef062ac67808c6f61afabe13a5deac359e4f8aaf9f8b176c6b2c76c548dccfebc9374363f67dcfc3b166d64dca0c3d9ef567afa70fcdbdae003248051486ae3ef68422f7c69f728104f7611d02622fbb9aa1af492393392579bcbb338ece8b1aa381f526912898133438fa8b5f147fdd026154709e2ff81b6d7608d0ecca1e4810fbd2170528e5296cf64c9950b130a6436f8ccc1c315a7ed38d648dbb7635b950652fd62e0bf2097407d2cb24dd4fdad89f12e976d7d4ad508fdc8e88a0d365a1331b969b74b2e5837de2bd64a124fb7b8fad999e150d7e5bb87c13c697a831c3ae169924ebce5b44b830c7ac2982cac6f4cc519a2dd655d23e91a4ecd56dc9c4bfef3802405615d4b7a68248f4c03fc0c6176b22e2d1f1827ffffd2dcd0cbaa4eccfdff414981104b7e4d98782aa8ac45b608f3a077693d50a49df2094842dc326050d467bbc08fee53ebbc4e67ae6f247154a3bab98836aa59b6c9b88125853fa70c1bf84ec5179a3351a16c73425946e1ef064361da126375a794e519c2bd2d1e183c3aae152434e42cc9b982099f57e17c7a0b9cf3a6142a3a70eb762edf155f283b5feb4fb590e5323a13022869ccee7077a0c8cb10f3dbeab08c58ae7397b100bba8c2e865debb62f3fd13aca2dbbe168ca3293767d2430051be663ff93b47e07de146a5db4d23e7b530608f85a6b1dd7d163d5b68fe63a3c651393bcc7201c59c237068750ff1b5f733bf28aafbc63c4cb2471d56e2fb9de200f933231d797f4754b1710531173431de8ece0aa57f22c61f71f1e5fe5bd1255ed488d8a8e0cf625d4a46ae9dd320aacf51da03d3e5fbabab0c5a431294151e5e9c237e1b901bbac415ebb996221f90b31271606f2c1ced61bc89857630d39826413cb67f4ac46020fe94a7b3b04b7348c7c1d5b92a017406c6a38033bfbbb3c484adeef288eb27ada4ae08e815d09f5ab2e69fb836436f36f0952eb3712410e080e96a36f2e2eea1b93fbdb5cb99d19602e23328ad3cb7cc08ad395b1f46317709aae7b360f47c5651532b22eb3e61fe77ca05dab220f27992a3ee6e41dc2f93bf3a44da3155c5912c111c781a87e1641202adb6e82c760e4c32ef92bd97bf381592235c1720c25bd0b9ee111bb35b5303fd3235e242069c4e09d921c8dcb3863ffdb2a0bce26810880c7553b8450472c228003282f348b3900177e7114fb3e7889c6bc4aac6d705d7f244f623bb539bd5d235597e5b90b2836ed153ba53ee603e072b1cb316c813e8e5f0ce1332757ca04ed6353866419c2ecfca2648b08eaba178bec215839a135ca6387797dd13ef2d3e78e725b1de4ad397233e76f0813193042034eb8ca47fdae8053b3f2a17229827f4a173c2ba8cf33ae111c2c349a8187a84ae12a14c8447a0e225d81d932fc3e22f970c67e5d65585c45bc607670d1be909468b8bd59eb7dc9885610b21b6e86598068ed5cb00e057c96f39fe701823fb503a3de785ec24c8fa6554a7c792ca0da9225875b07da503390ff412e8aea7776504fc699b9e3940d7c10b4000b8aa315551ac7fcdbf300c7a6d7b99161aa4eb5788af9f896440989c4b3d46fd4d733594b896c67e93db3243e4ad15d2be90fd617e47cafae4134cd5d24e686795d12f746a3a5450bbf66fa64c046a3c7f5125fe81d66b8fae3c6ba073a1d963250bd0415dc289be34cc417569b6acba06e98e824a3c34e20a2ec1242d5f40ce3e637b0cfda65d1282ac58ae57b911b1aa89b2dabc4a8105cca163228bc2ed0ab71cdead6db0a38bd13c5e4a5c5f5db594df7fe1ae9a22f5792721c0e66e655e40b938275f70eb44a55a266388aeac3f6757aa827c1f966d9cfc3ded7f48496c4dfd759089aed8a53874e6505f1f405fa2c880487ee43d2c49924e1b02e5ef52d6b807f8b8b5b7221eb034b4436150080da649f4154469e31557cd6c3faefa19c2dbc289dff7c10f8dbfb25b65289f5370272643fb4ee4b4e0581cd4668d37f06b25c4901e9e3224962ab876a7a514488793f82572d9b53c0ca06097da2199e705c5b0a66c35c8989fd0369439452f3f7e792d05ffa50a4a33d8ef7cc3ea0a0661c4a66cfe0ae65f3ce371bbb19d78938f388b582070e27b72a95608a46670a40812221c712e950e9f840f166e529268b44e61a67d42f8123549c2b9ac8f687769a53d560652be2c4a573aeb6c8c18aca40ad249b872c970ac351bb6ea613e050b44c3192226c4dc8989c2736f978ee850294acbfe472c13b24eb12674877e9798a42423e7c1f852a849af30215cf81dc1e8c075734b74ab926967cb39b7beff8f4be845d03a72b7653cfb74f5dffa5bb8c076c3d3722268f5a825e7e7bb158b5cfc08a565556c33996c914508cc0a817213df3de546e8635e2ccbe1e204d14e1bf3440ecbeb616a11f22466c552d8e881001c9936c08ffc8adc23b868571a5bd99c96f4c99e6a37db8ce80cdcc8a679b5fed92241eee75709299c827acf77599a31f7b963a249eff17fe5281c02b6932001b9d9fa14f3776016512ee47357150522d93ce4d06724047dc141c25b44237c28a453d1ce163900b38e2d4a02b34a145540dc81be3c33931fc1b0f7827abe4c33dac2db1df43d80c2544d479028c75f90564a2a4221e40a922f074657828e60a8b60853d505144059506855792a329490f5387fefdced293617ec85e1bfeeac683a498cefa95b4acd7fdb4ab25efeb59a6a3d23b53e0114907a01fa65e107d816afd520636e1083adb7745dd76e50930b84eda77405063935a20896c2fbb9fb9637d84c7175f7a8458463bd6b0d5a635501064f491c88ba1841c79da269c36e06912040f51949e2b751baec63669fe8883337ea7663efa5dc65b542bdc10a3a2417b432404f0aa108875d5e4786ea8adc984b86e3ca4713f89ac726d9214ca20dabcb382d2c54910dcbfaa6a0b2ef8fc92ac675bba1f7b5309ec575dae76b99eeb528646de6cb87c30b676afb4b61ca08185a8b04c13800c04d99e13577926edef220f372ef728465c66bdb026c559187abb582dc6a4b8c56c6808f56e29cff906c446a31f5e6e2c756d11512a3d88c544667639291bf782275f36d00f4e7131cc7aeb1cfca74ae0372c4e03d742479cd4131ad7c6dc9431c1eee8b4de752aa1570647b6ad563ffeeed7cc9f244e70e4dd0f1dfde073f47b5b3c11204b15aa97ba5c5a4b647aa37388fdcc472d9537311fcd392acc2a1a1638345159299673581434a38c10d3fcaf142ee2c1dba922940e106de1c1334661047835070c19ebd32e5fdd52d4d7154ef9afda1c5c280cbd19595de2f08858b21398f13ddbacfa396c2dd30a5f914026c2d662212ffdcc89ca7472a87e1763ac0fefd689ef681457d94a97ccb59d85915b6c40004268255ea1ebdfaff860e3e97645f8db1764e1b6d736ac9c163345b266303e7def75feb8809e1be9d270ff76a909e723f1c78213b11713d2ed89ef05eb1a840c9ab7fa25c3910fb67b6b4a3530602757aee4483f9722c328a6222cdc05a279be554671a5cbc04fd5f6decbcf068c724e734887cacd4aaa9b5846092484c6fc8f5cbec75022b513bc5aab1b79171404567bc7d4c121cdeff14b48b526ba157a84cd86bcd52493560be220fdcd844b7fa092ad6ea496acb13311453125aa6df02c2bd075298707dcce1cc9b093cc9c2a26a55e216cb8e38d986ffb0c6cce6f23db3d146c7840a85abef2b550bee3b5ac4aec2c24d1ec4588226e0d9a21896c6a57284efac847a1c2130d69822e6b242c94b64d25d192453d061e28250bc94ac96c9915bbced3531e856fca63a09b123931d03a21131f432830b5afbf1e33c905fc160884439a027c0af476d548d7ae078a21f1b8854a44fb2b7cd0dca6d55b82a650d79a6501203b9a52bc512bc658d8a9fc0ef087373a408ee7544245979b9c3e2aeff998fb29b91af4949439b63f01b38095a1ec76994fb91b75f60d9641efe5b1c562f1a579094f4bd829fee239e202d182a4fe3dda36d1c35dccaf7f43254a40559bd90a060e66b7113055e36b3860724fea621d8bef9abc5fa8b9609660cc8448dfa06697eef58293f035ae3f35e26370ec23f0bc1b0876e938aaa04e7363a4b7946f392e94515c579e89f2a6e1f3ca37bf56a7120373f6f85d6abb296255f7b0e231efe869da092710b88156abad0d66a4d43aacd9d651189107814f1a97387a0886a1cd2e3d8a95ac5d83af8ed299c33915a66f91d1ba1e7c92fe703c49809efdac6fb479dff3eebf21d37bfcc57fc29ac91059cad5dcd660be9f179161a732ebb56068e9ae3eb12fd2ae5679f41dcbdf813f51cd7031ea28df5e1404076d37a2947b93388ec2cf63337b1cbe72d2fc53d14f0532abf6c4445a63331a55da2174e050a3e2ad0a0f524634f65423c98541a273645b29b23b7af0168ba3cb98fedf894e672392fbf70d1177aef32925a85b7953214360e74fde08834a15135c9fab8632042fb8b333ec128860881be8c94f8d950f054a90beff3388f05e42032a56bdfa11e23970847178d9f90c38058832e0f574bf5d219773cc74b9b551193a5a153d24b118a00e481830e6a92bbb24a67c2d44da2686352e3934dacd4781b3d2f0ae28597d5cc859cadf5aa6d4e3dcf3819b85eb29719e1217bb9b087517638064b82b35b9639873d857fa0fcb885ab3019b3be35d2fed75d1831c1db9629ef417b228dba3287b4d71dc0dc60fffd00e6d7697b2f0736c7ba5fdd5e4a6a68e14e30f20179fccc9e04e461f319999d41ab7af4a34a959f021cd6161af27c2ff67f1b0dc0cc12da78752ec0648e98e6e336b4d75d059e1f8074efe51159ad8427b2d7ef2263faa8133fb013a88b3da0ed2ffd4c826454ff592f6c4a8afcd9c1ea8d1b1af301928242c8e0fed76eae04f7adabc187e23c1894bc8314430a83e0efb641e6c27f0068db7a4d57dce6d0270c5f51488d4a24390671c59f3d5108daaeb084cf5a0e74efadf9458975385fbf4e6b8f62834cdfbae8c3b0eed113d84a3dae395d75128e16d12ebe2741473b84c9dd6cdd3223a674b50fabf9340cd4d0a0c61fff16b2400740f9c4afe19d9949377e7a61e6714b146be0f02d0d4728ca646474dbec6d671f26ccb69578760dd022aa597ce9115a45b4a4a8b77471d33c5644d4c4b1e2017f1a01ca995b4f65796742c5983bacd0344c3bbe9f41e757ee8319ae60c55c4279f7899d2582abfa0323948d68806712bacfcda2488e72f23c0b9e3d58aefd63077ad4463ac7107b8285d62868491ac2ba10e3be1858a88f22e606d1f98a172955ac53dcb054d951a3bded02e76c134db07dc32159a1cfb44cea3d002bc4ed0d444f6de5d010fc69347336887558fec024caa6c55adf6ed359ce5b87870b4caaedb7d0a11bb3302976922847a7205ab5089338ff2bff01d2e2d0cb39de7dd146ae834a9dc770b3a765bfae39343e65c8053c118025afd3c45f489d5604dfcba6c8f3e9d59afc742b9630449d38c03bd22b812e50e9a5b6fc2e1a2375ce79cd75167129d6b6aa6533832d873612b3da746ab0ac0dcc60c65cc139ec8329a80472421e617152575dd1fb2114d22a7c13957ce254c36b2e9238a0be1229489fc84765b7bdcc0e44a7bb4348c7e158a8a2cc048d210bfaf1a0fd4e2f81e88e0332003a6fc74ecf358cb1f579f5bde4fda75e634db8c15cf681a094edd54ef6cd2813b6f0277d63e3857b05d98902046325839db91116ded1f5f3ee2f58eb6ff01a7554b5b2dc962b4b8a4bb76995a729fb69a075875d3828c3a7586796308716715418e07b3d0e1683dda7e3f9fe3240579d7e631cd3620e146dc59c01b23eec27a1449ce02bb95a4dfee225f3e851cc5c72e1f3b2117a2c9d43549751e3d112e30502a4f5572d901efd8812263b104d4d5a57e03c18c59e331ca7e0754ad2342382bbcd0fadf48e76ae3c4a821874ded97da096425367d6332f30deea33278ab0389b03ae47e4cb6390c932f450b5ef40cd166e3798527acc104df194ad540fc70dd8fa5aaa3723cf79863dfbe5e4274df30eb483e1277870e36c06b17feccdde4084535ac12935bc4e0e649b8ee622250084332efeab9f70973710bacdbb0107d80bdc365136964cdcfcda9919685d39705d3578ab6c0a5a1579dbaf0abea6b5cb6bc9239129aa65b456a9e796c0bc8fb94e0e75ddaf2cfda29094df53e06f8e22c1d1b7227c124b0b33d83596fb3a4edafe39209c3fde11472acf8c709643c9ae1384a87dbb9e34eb04d88c647f863e6d2f2e446021b503a6aa0ad4316d649d518e4919724d50fc676513f1c9d3452d075d6f45c415c2a9a96b12d9f56ef971bf02d4e27144316a0fe4b65035fb4378020fd3e58ea537d4855d93f6e9823f98a5e2e121ec19d6dfb65f7cb8aa2c24ec315873c34132a11b25622cc13d589dda536a5d167d68a18eaf3480e4ba71e72d8a7bb23988d5efd3c2ca3d57efe2f35598dd3ce58d03e7edcb226f1cc059a3d1c43ff1e50164cbfba10a34b8a0e42431934fded0ec3a63732cad39062a9964782ae5f722f872edbacb28df6be17772cac38848ff2fa5897b9676a86a42190270dfdebe1c6df9196079bf5315cb04664fceba4f84c9e26df453cf4f80d68a81e5793eef9c5c24190e0789b70e4bc314c945bfa6be41b6a1bd61dd6f8a0e4cbdabde57a46912bae141f16182a731c64c59b383342d4f6fcc347848ba8d260f6dbcb038edb69f82dc947b9667c4385a186f1c41d8e093c3390ef7d3d74c658f0aedba0910aac6eddf9f7c5ef161584f813c12ba7d66ac75edd6bc7048a2718ff473b37a5e4e66aea5a7a79de9245be8af0e42ae66fa5477309f0c62868d59331f787de9e327045127751ca7feb15f2754906a9c862ebc365e4994d630c39f26ce165dd68034780ed5a850a9dcb6b56a7bb95bea7677cf402114e4c20832cf373a4b040085a617c2b2dc3eaa8a6073520b9f2e9152df2f8f93d4930d7a5091a75549ad2716564ea2c30121d45c82b2850893119554c10914da0437334d6b0e75c386edfc8a5b28d6c6d62426ffe313d9f69ae5481596b69850b1c125c62cb6e6fc4ce9634c4c4162f594fe5c71c13ba8d62040907bfd00ca7785a72d5e94266c9c713723297c62828965bf4b57f2b723e1c3f8ba37e7e88787a35932d878308889bc743ff79423c62e4e5be280a146f63ced8e086ccf8e9f85ec260808ddd27889ef5cd9fd01711f0db5099395aecd8ecc7817d35312772c2062f3a81a39243630752d936f640a206958372b9c9eef9237ad4e42546bfce29d611c43480412fa36381e3f88c1ef06fe65747c7fefbee17400efdf01121a28f62f626633fe8a22cd679268fcc4084e081c9b27b21bcf44d1aca50f3687fcf9734c7dfc43924133f92a0030da1af2bde5b97c3dac02e5b69840dd58c1c7a647ece177d43e1a9fc65284c6c8c85eaa1c7c47d561d92d5cd4bb18e7ec10070be63a52b255ac36975f2b8c7f337fa080ed7f10a0a855768f3a4dc4785c36fa1c3e1627f50ba3da098f11ba9e3b9d3bef9a568d76fb93118c2746c4fa99a88c03ab04b47c5354a652dc63ea84fc21db55baa62c851234d9783ca390df5424fd5fd66045c1ecbd3fb7ec27cc066d7a4bca6a29eb38a280461d7d33b1e8e1629f7306a3a8fc84b92e565f2ab9c5919be27efb336cf3eac1708776cb8de6f062e6a7f8aecfa1d0743b3a0e2108a4c012f117cdb9ea5d53fb2fb2ac7c758d82e674a8c7b032cc9848b497219298df2a069551c2a386732487821a5dfe7971b66a46db11def9fe10d6d183aaf1c524998595ae2a9eb804b83ebef4231fcb15cba1216efb606dc4522e580ea2eaae38521b3454aed431d1b82b4e4deb7e8a1d5baaf15b5200b01e0238f9c9b8516255fe19e7e4d066084eb5592b3112c2f5784beb03208b5135acc2c06c1b01579fa24f1b752faf676f5e08844e5a113e0a50a3660e0c9452505540a72a07c86717b802b3dc7c9fd2fd089ef3e395eee5523cfb864764a75d3357b90c3a1b74699d4e04800f509805995a21b776669017886415b0937dd7ee655ae396a1dafd5957099ea44067d52c8b6079c7eeca25531e45d1576d463c8d6987470aa826c6bd3fc54384e59b465cb86f91a3de87ade7488fc8dbd40baa389dc1631528fc9343fc1e12812f7748b08a9c7615f7fe07f392a875f1f346e324d35c3b654992148dd213d89dc69a796c2c80b69e91dd536500771a22c0f9f9ce75315a5c229fc0ac2a071226d8385d08a1af78a83f7afa8c97b59436ef3ba27a7f302fc62577ca504e41298733135b316dd5a10a91ffa2f205220d5886b820c9f228dd4cad55916df445515237aa9f747432d065f812c99fba7130b7bfa3da2da2689922308829b94ee8b7a543c64ed20d6a43b80adbf1fe14aa0db311bba402dde47ed78eb4c614f96ba59549813b38d5f161002aa4dfc5b757f2d2e22e8a2eed5724acdcf8dab42e13b36cf1f6e475da54e03055feab6b3d5827ac556dce819a31b0326c15c03d1358742758f301175738a611d81cd8d035a8b45c7f6b8a5cf527bd6cb6e8e2f0fffaeb53c0ba496e83a02c79348fd0dbed048142c73eef0a35ed666af5491860ca0ffe56d801f3d890732bb09841a6d923f06a85efd75840a3d768b19e7bad448fd27be004897b184bb6b824f6e253caa07cb425ffb3f85c344a8475610b88dc663e8b0f2ac44cc2ecca1c0e6b14b71e6e801a3f6baaf4d1547b8718006da919ba5848a6884542eb5f97c14e54a381e624d245eb1d76ad9520854f45e3f05cbc0847d1a7e70a9492bc4dd9258da1b1baa2f21690012e5749dee3732a14ba27181ccc134b7dc3ffdd3d05b3e33ccbfa20f40f5b2e82e957c6a674db2282f8314ad1f708350676e497ecc9da492c6d0e77b2c1e4ef1b9d8b42a2ec361ebfa71c11589d1d22f3c736a5fbb782b6f531850f5fd351833cf842af943be053a1f15e59ab12d37c1b23bc837756f9e52f16af90d0301656336fff31eb0a574d353630500f9c6eeeabaaa76d26c104e8869e4555d9d60f2718a02caeca7ee05a00c48739bb7288cd1c92b80917cf85939ad4dd7bf76760ea1e123f8cdcfb61638bc811dbf133486d58ad619049c0e471752365a7c575b295c15132ae812da9e5c80a03c14a6f5de549e9817a2795a2e966d41b2aeced94bf406eec57abdb1763e16c8d53e285169c1cff84e428995b33d3cd8e8dd5b57affa50a7d64aab6f3c2622466391805788be4dee24b7f020aaeaa74317cb446d4e2692735b3aff5c4a09adbc79d8c2b417d03918592af1f78b0292744254366c5b226647b8504bfb3f010ab9a2fe44580bb3d9d6438d89f9e8b91f092feca83d310f18c55185c172d430a9f9b1eeaae8eb2326ef8bc9e376e94d3a3fd8884a203b17791598f83e5b67b284cdbf587ef1f51b66519459d560e87f87003b8a76ad0e3110daff7a550b9397ec2256ea4d944513a19d9e4fe1850d05a149f4918523e9c2afd565445bd652287a5aa60185bdddde79b040e6970802dfebd55a26228a0fdc369dd0aa9fcb3c25df54104414333ebff1f37c268d5cff3fc8960d3c2b99226372949094420763a7351f1fec14c64a29d49bfe0eeb58577fa7a083de4ddcd86b61efda2ecff574adb12cbd753e2df4c947b06785740644b44250a9cbf72f9b7cb5eb4d7a3fd399656fd2b475155aa4e3685be54be270ab530e7294dc55dce8367d675b75e6a9b52141300963e746779cef6b7907a2736ad2c4ab5bd1f4ded18ea207e4d85c9e0929dcf881b4fecf60668c22ee9e12fcbcc7d9573a664bf20cb87c0f4925efc05e2dca152306f58301094690a0e4de2ea47cd2709d0abb8f417cd4c2a1063ece35dd9f23290264a57aa0f9dd5b050d820c8e07c89c7d7963b9fa13c078bf394686457c9c045c93cf1490da2eb3acf9d56dbd278e8d16440c7c02e40671ee4fbe034b5abb54c8da3571e0ec8c55cf3580d8d70ac3e5405b7105c3d77a749b6d7e695b94830b7cb2aa96e1c9a266e723287aa6705541a1fc9e851d46ec0ad9b6406bb1a4dc42d2b3f37b47d90bd78941b548e052fc5d90efc32c4b0b4e9f9dbf757f29089d0d26422fdae07c8d092bb1c36f22c08d5e60c535b1d0289508ba645afc052e711d0a05e9b57959e5ce56d4fb521ce75fbef9277f44b7c5ae3b980cbd35ec4dae18ce8b81b7ddde7c96f486d647f9b9d3968e6340af03a27f7d9ad4c26cc6f9cb217ce88cdbe3a73a866306d6e5696abc0e4965e14b4ef009fd27b87bb5165dc680b2aeb7765c0b396551aeb281b3cc6056dbf15d63200778ea9a8a7eef82f361d6e46fba5c373f7f36a84467e37c57f10b36badcce1a2e2197344b3fd696b1e1049e6396c345d9e3ae8ebad59698b81ca3abb0a78f45ae50649e7653e559740d41a32b4fee17ef6c8fcf219333d3457d88054b022b503e47a0826460cf6b4a29ff183b8f6e33be8adfd0941caa4be0dbd0cd14edce2eb438f44883b59e23a629fa946a9e9d34f1c423c085d5000c6de7ee932d1be2d09102a4e06a465c136f21b76a6b367435e0602202fc7903833f95699542ab6d125388710e3a62ce385c2df39f3f337b1afa7784561b88687533469f4b1b322aa1f3327a1748b9cd1a53e4732518df723e48230d4d23d584f5526508d3bcf460d253261a409f67a9540b19a3086c7fec7e7e8b5343fc240359b652e67301e3dad9dcf699eefa374ee0a4ae0f8567a884315066c08e8314059670106b033530f809e93ba43dc78769247e3a650d83176e568f95f6b8059023715733084e1e77f30fd533d21ce975f00e1941dd6a53c6dfbd3778a130b3cea5d1af8cda13c630df33aa8e4b6e85fbaf5330c6c143145c3c92e38a1c79cfc45cb543daf190d3ec6a44aca633f57f1673b0d0c2820d79c11a9486955c6a39400a134a1fd87e65f8ba87f8a8faf5cdbf511eea9355c54cb637903ecd978f5158c4349d2c047f8c3b96ea698e91deeb19a792c2bc14aec8e66f1cb7c77363eed7d61c08a2ae62cf9e5faae0b8ae8dc27a3ae0141eaee799db87213f5a2d1a15a3cf2398829454e3f95820f27ac833398e0632f836114f41f58203a64342b11b781042beb381fa2aed3f22c88338b1459d2bf4c48b614b960730d6858704832049d91ae6a6003b2d909f67df334dfe917f4b185cf2bc7cad4e085feddc031f53d5a2151ca1261642576ab253865bae21a51bfde23c4d3e43ef56478c5bf5fb7fc058b020a349d6cd6954b64f2d21d3fd95070251b926c46d3d39177cb291a855ef25d25d3b1629f8cc07271fdb7b134e979f7d69b7ed6decb7f174ac967e490f2f9c00078a683df8084f145e055ad6bfaf3a990d066854f95ed4b4a00c0cc61626d5a5628bce250e5ec49cf80c43d7a983440fffadbb86293686e0f5434f7c7d65df95ca06704cd9f5947a9b9b3acf98e6224feedfc09db41452f1b97b27cd4ff60547ae1bfbd7cd8664e5d853620e320e4a29fcb1778d31a18e3f62ca573abb7d76b8165eee6f2245a69a0ed007c488b92da1b70ef311ddffc7db4dbbc2f05aa859879c195a247116ce2dfedef0c5245926a51b3009858a0f5283a0f268cdc64a40cc91d0f9cabb7ed848142912d3aa48d7889899c0aec8b3e5b90116c3e47a1895a920f47310ea5228711f9ab25bfd6d4867079f871bab0c289a80f5f430df474e009cf08854ccb492ca8d5f0b50c24664b98f21daef8b0a426ebba38638c30359e73e14e0752d5641feb836e232d75684fd7405b00fb26732b2d29a39e5d334f00767fd67b5a630399b600b912bbd2af9174917783489146dc4b87660210cd307950af2216d321ecc582304a961f6519cb82a326f1fc9ee276485ba3711989a05e422a2d33ac7619398a726bfcdaeb9ebe8560b36dcd4a9c9924f77ce775d458c135b131e24646afeed9e794a23a617d9052aedfc9023eec65cd58dc281395b4aeef5b093ba8a9c8dbf34a2db733c7f9a3e63db866d62be3b353479de6a4599ea3006b93ea297aa3cdba38bb66d34c3ab5d04dd8046560b213597a7126e307e56ea39288fabef29307b79f091f0670d3b1d5049c739030c6a93313b63a193faec18b15289fa5b265ed36f26f084f9dcabb7b490e3e9a2d98b196fce1185b0b1d9d9717e0addbdbe01f0afdd6f0163b6e95320dc7d9613fef4907e93b2301569b9f00ce85f9af14b4aef60ce53ad0f214f21aeefbf7a5ee3ee6a51caea55e25b525604d3eaba162433c3183540016fa9b1ae68a80640d07830952b7d1a736b34d9ab20165d93e3ddf9d910d5c74a89df1c4bec3fe2cf1ece0b03f7ae00becf134f5dc791d47485acc4834e4ea3028993f7c3ac68f19e72388a1b6cdde723c05ffc3e484dc3de5da52a128079ac15a614803089dfa43f6ea8fd8f03fbe901d9cc0b3c09d05b682996cab03207f298c04bc2c19b3e1b4339dd96257f4e511efb268903f1a885d7cedab7a8469e21ed883002936251f27f6081c9d5bc345b55408bbdbbea7c8757eb716381514444e6c5e588d7a4da47acfe672072d818ec7d670f71b528ba64efa8d373603f8c22730192de7cb99d57fdbda1c181fd4f62f0faba4a1b96ff053e21e9e3f5f12789e272ac731307308ab2c20729612eb34639d5257e95f5bf902e7188d861eb2cb83161a001561fda688c38e95a379ff7a0cb35a3944ff850f9febeaed1332b87a22af17ed6d6df481a2af130186161436f9fb8c81cae08e6046b6e465bdef73e941e60cc91fbd21d37ffa135a566a3d238fa7dfc04a334f958f6c4065dbebab360d40670250593a16c1144e6902f140dabdcf7bb3ffde2700178199f67699c207e1494a859ceab4ce2c6549cee991daa7c0126167a08a2901a8e83cec2188130bc84d7c366b8cfbc726183c98c79df6e3a418a2bc07a34d8b5608701ec95c9f2b5ec7f7e6e9777167f50502ecae07220611d2487015524da58ef49a3a62e19502f8ed872d980ebda306b523e8f4567e2fa3ec9d2736b94bb0f17acc77d4890be324b09554f4a2ecd827f746bf7987f0f41bda2f9bdd2c2f9ebc47bad62fa02ad2568bfbfded645f90781ea1ae4de5c8b76dfa66f93ca2bcf2c2aa2f33a71b2794badad09ba6d3a7c6803c4cdbc3fe3929cf3f0ac1b393c0a88fcad500b5e9fd78a8a99ba2da2f93d36d9d7544b522316c83f0e3c92028e89e889c51e9a4b3d08041a6f346634a66f1b3e60c8c125a147024dddcd79f312adaedac9f4bb4476f0c09e0052f915ef1c36cf2054369d8eedf20eaa61417952a3e9e90e647ef4886b96f0963dc6cace8bb9bdda83f668fac479f431f7e702dfdb7f18fc1ad6b802d06e0bc26c08851bb0ff97e555decbb49d883cdf567e59fd4c108b30dd7aa7fffa2f5170d822c8315f80ecbf2ee4a1769ecf55281f3d529e2405040c2b79d881af4489b32ebd0decbc2c327e10c81e2ab0191eff1af90adfa5a76524bd07f554d72164c152471e1446a311a39603b593e5526d4b1f755d94941b3980a5c1830671fcd99460a5841bbc12cfc55a0a46faef48fc76218eb18a84c5f9c63d05023e5d930b3f561b1e68a62a606e64e33d4b1f34b01438931ec02a9834a1a6a7d8bd135847eeffb4cba53395a02ca7c3bb8dd7c9dc0f534691aaa4004d6c5dc71393c3f666f28241e77dc255f3ecf29ed6db1e95fde60e261537fc8b93161d014ebdc18bd14a013da0d914e03122966ec43ddcd478835fec1234ebf5635f1aa12991259f8f896e393373429bcda821d8d88f4021e04ea7cf12110a0befc06d9fdce1537cc80c0c50ecad06bc0d8a1887eebe018c185fed8dfd3b1fb1aa65d3705a7cf721991758b5dfa1311e0915c90e7e4725223bfb349ad7e330486ef79d1243e599914977a66058357e718c92de711f013b5668d1eafa73a5be79b24f7f3e0ba5a0a070337e2267c02b5a5cb7ac2143ff67365c90542fd44df5d85a99b53301abfd56c033196bd004b802733020171fec54e991c7188f984c0f1c373d1d19fa948738f0a3d9f964b7ab20fd765136838ff960526d3977205da31bef106d95afdf183584b4e95e32bf8fede07383bcb2878ad12b055917abbb8cdda129d4e7a065e468ac1350a43ebb73f2cc08328a6e66f2732a2df209a7c606f951ea9da1bea97fc2d1397d22e55adcd967ee43ec4a4a8d279dd2f63f8cd23dfe97a84804b87ab8cc33bd36f72adeb5a36de8f43c94f15b900d9b46a0f56b163206647e78213c3de0cfbf3350abc0d41e2f4548c44f7f536b669f3d72e3414e2554785355e5e9a831607690aa99e2acb22920d0a9cda49848bf35bca039cd678491939960cf9e884fcdbd7de9b43f8f4238927f8b757eb75b4fd004b3d221c51e79050fc9a52d572407b676329927411522a1559daaf2cf96ec05574038ff2402dc91115708a209807208f89165ea968aaad9967087731b4a08eb2cd61b1e5fc71b71c1f8733a708530198ba7e0ffd72fa117927b6c3f9e35fff1eaceb5f27681329a9983ad7fa54394c582289c5a0909105935f075453c2d20830e826e57f745cf4b3aac31fd78b598a7d0d15428c50f10648b940dd2249af5475394986d932628529fb2c99920501f8529f5a143ee7b64dedf1ce2e27ae2575f7ea1cebf88f3f5ad0a2cbf23034f3f06b386413975810e011515c8b6d2fafdc9cdbbbcbbfd7192bfcead5f71045660a55923ad07f85f1d75f2faecb6ea4129db25c446ea38fe5ef196b2c6d15dfd0dfdad7e48abcfac7aea22e676eb8a17fc6c5737a1370178eca18b09445541b8da6eb11d799e9af55dfa549c9ca3e4e405511f3441a4180ee1677d7e66a11ef0059b2c551afbb0e17e35f5ed5624eed2c98d33f8cac104eeb3b3cac255fbc64dcb5184cf4f3e0900157032129e9588dff8c49cf08db84b4b479426f511ec3e527e51fe75870c5829eeaa12244871c41682f8430d4133bccde022b9f33ac892c0238100b73a90091d895227f058df11e27ee7f7157daf127da3558777d25a9098f259f83f166cd7dd0055eabb6b10973b37825a84389281ca7273e0b314b1256f936fc7cd8721b504c245ccc8fe6f8afc5f0a44a0e21c1e6189ae7a6c4b32dc53cc9d84eb5bac3610e2c75e0e0f82e207118526611e49476f5add00cef0cc11ea795e4f04d2211d06f99ce12f20ec2e094336442c766e7e7871b447474eed3b78729ad6ff49c25376b4ce72224b2c8d75bfadb6e272c0ece52fac63ee9fe6f728ba0ae1bf410ff7eda17b1eae48c216dc5343849962aced2757565856674e0fee103b88a4dd971d63b6b179569a7389a090c623a3537f3f0d564ccfd8c0aa69f09b935f22d5815d48d0b7ace19d9660e219924b3dbdd417c1c33112496f1c0f6ba00747ff0acaf920ec8be62997ad43ecb49afc792a3253d41458366a1718d368313d3cd89a212f1823269e3109c3992f87ecc59fd25731e8df04328ed980d1416c0b9be155e982031b93e899dc694ad3e87c5d1ee6898c59ca646484c37ae530a4e4b19a30a6ba7d9cdf8f1372d8f61977615981f772226c9114527a4fb21a9f0827753a34d8329b99950fdd31f7c83592e659ab44a5bb2c85ad053d2e3fa8e0929c2fb6e16d3abbdf20f6eb5614d7761af587075fee9b6eae1b8ead4481b7c9edc14a8d98639150af15705887db921dec7271824b92ecbf4a5f37bac504bb9b8163908b68264e48331942074f894ee74e0916edc436a63bec0bd4245a036bd54ee202edceed04967e61087827960c1fd2fa2a10c00f1d86f93c43e49afaec3ac9de21f9c2b69ac62da354c65a00dc02d1cd295fb472728345bb68e6163ee01ae7e35461debd382a7b97461f628c5eb9e7ca0b225766b86978a7f3dbfcf30c79d5a35218881a437130494360b0e8832c32a4b7ec6a9fe3103876735a2eb738b8ec2bf9582dac07c2ce76699650d79119c1a6f20ff3df0dc00c7c07917a2b8bdec9bbca40ea4f0ef1e068c78af96079d37a20e2e56f02162930ffb6ff0a3f86aaf87a2796846ef61635eb5d4d1e978402e014797f9d17b151be8919ff3bbdc0b7034f71e0e12669dbe23f4d1313cd85fffefe3f47e547ae3d7878ff32c075e9e75576d2eca0fa0c24c2c5a33d9defaddf5ac2d47f84301270334f82a72526f1f8a75e16761fac8b3d2958a6521385d77a9ef3e5a47f885d399c9669d7521e47fea046309406055c8347882d10144e1c3a3848b3049112ad344258e3aa467c0be7a451e2e4bc6e074c36f0ddbc94d5083eafa77779992976938e9c25003d842aed6edd3ba621c6754d1f3c67c5fbe83c2b4412bfe77bc91a690a0674a7451ae976db2522dd468cfc42f1cfe39b397197a1f60026e71f7fb1183fc2edc4747a977ea884861a432100d03fa9f8855b7b67add8a04cb13ba3b2fed5bb8d49bebb3b7d600706d89040751687f4717bb3ce605b232f1e980a045c774358e85fc8ec2f32415eddc45081046d2c5ddea4fbeeae240b15e309ed395d455947464b65315624189f567cbabfb6f95b707569cc6c7e348651360a01252cfa8ef7ae3caf2a9b6f19da731b024e9f373fce70223a54dde0d6b2b3f4202d2c8621aa775656c777c992b8cdda294e80bed545823c25a3f89a167bde609f899531411bdcbb0b972289ad581e563016b920047c56699db21dea073d2bc6ad0a4ce29347505ba010654a958761412389179f3cedd5c6407bf0db5b833a629b7bc35225e22fb422f6a7da9c7778d327fd9aad16c67a845f0daef452628ab83de04e6e430ad221d6010830cc95776d415f8f643d04697c015bec513e17ae7aeeccaf4a709dbb8ef769409934d6ecd78a45909a18cb76c96301433650f043cb78e54f890e25d53982b13f4f5589c98422e71e590d044eb742f15bc507f7ae84f76f957bfd1214812d2945857012ec42a809ed43e6a9e1f616f471a9e7d93bf12209fafbb1c81f31863771a643256016d1bcfa22cecc5ec32394fc73f1efef094eea4626c8c00e695093b4427241b15f2a7033ab89a0f188f4bbbf0853030820ce5ab35eee794082498e4b58e0fc7c9258432ef6e5668bae5753bc25a752c522176dba5e6fab7610956c11dfe0afc4369802b20970812ef6fc03afbf0a644a9d54fb7faeed1b05f35168bc22b74bd7c0db636f0375fca2520e9a0f7a991d3323f0fcc915b277e15a61327e391d6f59f649ffc4d70b8ecf67011067bfa8924ae4710f0bf0893154bb8389c6663a25355911232cd70acbcd4eaacc47288e6a499b2d47da4f6752fd4472aa108aae6115d6177691074e2d685aa806c22f2154911a7f57be237c67ff591ac7f28ca395b6cbde1ee6c058aabeec22f8ceef337489161bfee4c4b4de5011de92b69c1958480264386304a12b267789243ffc6522b13ccc4fbb4cacb77d23aedabaab9490ae42c8d41791edaef38d6438befad72be11f59e9d4a2dc144bd7f06e987838c12afbe219050021e0765dbc83040c2fcaf57d92273b9134b614b75d040c691b45a9a5afc96a876aa0444c9c0618c0c850adf6e2c97b8a64cd3a1cc5b6adbb963eff25c3f2bc6fcedcc1f19f8cf5887ef22b2787c11adf59ed2d6066bbf2f3cbaa55892cff4059895cb453eca12c4711c0d212e7d9b5e7f08e135eac743dd4985c67d75a0a8d7e8855ec4d577808561fc5c3b7fbe8db351dbe5bedd140a900758a22ae05065cded22cd3cb94b9c9685ec799a5e18875c8617073217404ba052383c391d01612563ccd5742792c2e80181d98b4b0ca3e2fdadd19ad0cf95a925c32f60da03adabc9ae1ca27945be9b352434a812d6f3eab8bac7325bce1c8c56ddbf7ad8e87d0806d9ee1e66801af33912e314084d14ec8101b3c200b53364e07641e8bf6c2f870e9443cb52cd1ff5a4b08f6f0bf55dee98bcc360b6e4b445619200048b44027ced30ed46af6622c0676a3161f12eb044ddf2f09662259ef4f578a0a65ade27c4bb5593ae01d6b16d002ddfdf16cf34c09ce59fbb39228c1822784265bddc503b7608bf0bb94c586242bbb3ab34d6c9f206dbd6d81e7dff8ec5e27c7efa0858ae30b7ca421647574651e142eba07a896316231f2c91cfbc088ebdc13251e8ea13399dbac46dc5973a50873353871d5fcd37fb99983f2bacb94e033e0f6fff5795c602dde76659e516366d7333e8627cd01687f940043387afa10da6e443c186174ea1eb71a6224fde08a03fa48730e99f832d1a3de9e313e9f2ea1717e9b5941c2576c98781175c5b3f9561b0f22e6ba3cf068d11a9bc5f2e0bba26f369aa82f6ebb4077ce6fc7bfdf2ffa6300a1b505823d86ee0f9e31738c2493d8c31c63e414b014086512f2d65539fc8bd1d1faaa069a5d2699ad824621e4066edec8bb32bffa86124246c61f4d057e69421f35286b82b99c35f33b7021b1b8b686fcf547e959356c55ee93c72cf6a6fabb9b84782449879b75ed1855d6d6962e0b6a22d7323c4837a0e416d393d291748912176b1b8b3eccbbc08d354026910a95a3b4e423cb15744cd67a8031a5281c19cb82e1295146ada3516d13019a55214348b8268d034c98ea4dfa571050c9f642f2b0564bea743e6d941214aa97a023cf7fdae5f62cebd8dba5ab022c419154596bd572748e8557b925880422d992193631d4b2c55ef2410fd6db6ec11e3d0a7bfe193440092b3f919a6e7500c6970561b0bf63e8c466c341bbfb0bb8231776bc13daba3a8d082df433dde1daa280b538b9a18534cb544c223ea4f7dec6f9daf774f2ce860c26f8a1975541b77816d3989a4457783498a56d329979dc86f93ff7ecb6484790deed3522ad7016918e56682b3aa7a1898326031d55b091916b87e3c30131aa70271ee00f2b4fe5e6c4cc74b0da5701790b8adf86b25d3c884ac61a086bb620714d9ce508a46b3017466acac4abd03fc880f9473d63979a4728b6645eb97c0427a69c05e7f6615a26a0bf51003c9bd16594d308a9bb96ee08eacb0835b2aceac1fa1e70f66c3bd368da209c73294410aff32f64b65bd5b86804021ccb76722c195e5543ccde01d1b836d3fc6808adfb7615aced133ca4b4c789b33345a2c96637b9cdf338a21c5bcecde9b2cc96cf28e1356c06227f8e264dbf8715c6ea6d62096ba95491baf135ba0a2c35cc72dc72bc809bd559851cad04bfd9a430b82ba89b2a27038e4086184a0f268c74817be39605e8e2e0c7b1162ec25f32742e589d1693fd57b64058fbfe121c0a5ab241c6cac56f3ec86e7b0815185786390d409c005ee0b06b06bded3b308cd8c52751f0fa7bd2c249e6692f0136b31e16f6b2f5c49b030edfff9b68198393918eec1e12c8a5933cffc2cbbb9c8977b50b8503abab2e2727f05656341632f65cdfbe3e5fca9e6d1320edcb3ca92cbd64e2a37a7adeaf614a7b5cff8e4a8454884b2824d9a966bdefe3b3385ad858284e7a03d245c7114155073367f0174e0edadb65e247dc2b0c964c56522629271cf8e093ed1bf0a02916fff812d499fb1d45dd2f85fd4f759dfce3758838c028af540d3146260e4baf59c808a37aedfc34e88d62c325f5ca694562531843322fc080f0cae969fd6e040a36e4ea90fded1b652193ad45190ebc4d06dd636c5e10a78f3fec2b0985ef46f5437c1410bec031947f897aa8517fcb9c047c98f2cd6fba92b5a43a85fc84b09b8843f64bc0fdb04801e71e49d3591934282c2b27499c4cd3e90a18380373d60536e275d91e60667d9f3a6229fa9c2668b87a6b092dfbce34ffb936077c5ac0535a39c4ef56efb64235f6773781550c6091c30bedbb17084a9029728b6d785ca611bfb4169828b0d547a85fedd489707a9d215fc4531a57e8f7c819c2b368ea910b07fdad6404c348a7b722a7c0509c090397ea8bcc31a043264bd491253530355d1daddc77a39ba82dc2a4fbc6c1d5a041fe439d4f21330ccdbcc2a0d2317e87fb17a1471c566efc823830b2b54a925f003fd8220d4163a2edb64d9594d42984cd53988174e169dbec8b3c0623fd252a1157845636994bd20c6c7404b36158ae98f07fadd80bee42406961208ee9e06844adcd89089c4439990b32b05e32732713d24797ccea9d1f23718473f6c7ec970948b86dbe2edb1857fac8ab6813b88c13c35e72cb40270de040f9ce74d475c8cf063835a8a46d18a520b6f7fb0e259a45620a1c0e22d553c8f6ba9d9c5a1d8944b33a5d88d7e2f776b2056e1e9136dca33a36bda06d5ef8075158eb4020c920b01df3f9d1bb3e5aa9c5222ed5285067f67f5dc4624829d38cfc72abe6c06b8497e8780ae2bd53193fd17bbdc09ffb98c58b41542ba20debd5333c50cfa52db580e23cc6543e034031846aa2dcc07690ac92f70fd20c19a60917d0c51df3c68d67543efb9dae44f3ef81180c5a20852b1487195b5a028a9186dbeb70e6fd1c6656622b370f47e95b3682ffc904d68d6f3010800000000000010000000000000000000000000000000000000000000000040000000000000000300000000000000040000000000000004000000000000000000000001000000000000001000000000000000", code=INVALID_ARGUMENT, version=abi/5.7.0)
cryptitalk commented 7 months ago

please see updated version for less use of gas, idea is using bitwise operation.

for example, if we want to have 8 votes, after n number of votes, we know what the top 4 is, then we set the resultBits' according bit position to 1.

for example

resultBit is: 01101100

if my vote is: 11111111 then my score is: 01101100 xor 11111111 -> 10010011 which is pretty large

if my vote is 01101100 then my score is: 01101100 xor 01101100 -> 00000000 which is perfect, then I am the winner

cryptitalk commented 7 months ago

pushed a new version with test scripts, something wrong with fhevmjs that prevents me from running encrypt8 in my test script, working on the fix

cryptitalk commented 7 months ago

specifically this error:

1) Contract: KeynsianBeautyContest Tests
       Vote and check winner
         should let participants vote and determine the winner correctly:
     RuntimeError: unreachable
      at null.<anonymous> (wasm://wasm/002d022a:1:590648)
      at null.<anonymous> (wasm://wasm/002d022a:1:672482)
      at null.<anonymous> (wasm://wasm/002d022a:1:654419)
      at null.<anonymous> (wasm://wasm/002d022a:1:294611)
      at Function.encrypt_with_compact_public_key (node_modules/node-tfhe/tfhe.js:4006:18)
      at encrypt8 (node_modules/fhevmjs/lib/node.cjs:63:50)
      at Object.encrypt8 (node_modules/fhevmjs/lib/node.cjs:193:36)
      at Context.<anonymous> (test/keynsianBeautyContest_test.js:39:49)
      at processImmediate (node:internal/timers:478:21)

  2) Contract: KeynsianBeautyContest Tests
       "after each" hook: after test for "should let participants vote and determine the winner correctly":
     invalid argument 0: hex string without 0x prefix
cryptitalk commented 7 months ago

also reported here: https://community.zama.ai/t/runtimeerror-unreachable/980

can you reach out to team INCO @0xAkrasia

cryptitalk commented 7 months ago

problem resolved

according to https://community.zama.ai/t/runtimeerror-unreachable/980, they recommend use fhevmjs@0.4.0-3

and in [In-Theory-Games](https://github.com/0xAkrasia/In-Theory-Games), it also uses fhevmjs@0.4.0-3

that explains why In-Theory-Games has a working fhevmjs, but we need to be aware that once fhevmjs might be broken again once they upgrade to 0.5* as mentioned in https://community.zama.ai/t/runtimeerror-unreachable/980/2

cryptitalk commented 7 months ago

test is passed @ 0x22cEe6ffECE58f7DE72B424Ac7e1453796dc33F4