From 831ed0005531ccb57777c7c322cc36ff7bd32ecc Mon Sep 17 00:00:00 2001 From: guipublic Date: Thu, 21 Mar 2024 14:44:12 +0000 Subject: [PATCH 01/13] upgrade width to 4 --- barretenberg/cpp/src/barretenberg/bb/main.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/barretenberg/cpp/src/barretenberg/bb/main.cpp b/barretenberg/cpp/src/barretenberg/bb/main.cpp index 17c465945f1f..d726609bd209 100644 --- a/barretenberg/cpp/src/barretenberg/bb/main.cpp +++ b/barretenberg/cpp/src/barretenberg/bb/main.cpp @@ -445,7 +445,7 @@ void acvm_info(const std::string& output_path) const char* jsonData = R"({ "language": { "name" : "PLONK-CSAT", - "width" : 3 + "width" : 4 } })"; From 31b0c56fce9c17586dff64aabd1e03e74e2b12ac Mon Sep 17 00:00:00 2001 From: guipublic Date: Thu, 21 Mar 2024 14:52:22 +0000 Subject: [PATCH 02/13] update snapshot --- .../contract/__snapshots__/contract_class.test.ts.snap | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/yarn-project/circuits.js/src/contract/__snapshots__/contract_class.test.ts.snap b/yarn-project/circuits.js/src/contract/__snapshots__/contract_class.test.ts.snap index 37bb4cec5676..574ebd6bb88c 100644 --- a/yarn-project/circuits.js/src/contract/__snapshots__/contract_class.test.ts.snap +++ b/yarn-project/circuits.js/src/contract/__snapshots__/contract_class.test.ts.snap @@ -9,18 +9,18 @@ exports[`ContractClass creates a contract class from a contract compilation arti "selector": { "value": 2381782501 }, - "bytecode": "0x1f8b08000000000000ffed9d779815c5b6f67b6040643b0398b3830915c56118e20cb03127cc2822220cc3080a0c51cc98250773468292b380802020869373f2243d1e4fbaf79e739efbc7fdeefd82dfeddabbd69d778aea61f6d8b579f7eceae7a9d9d56baa7bfdeaedd5d5a9baab20484fff0c5381ceb70cd399c18193fc3fa97f4bbfd9d435c67595bae42cc811ce1639c2d93247380b7384b3558e70b6ce11cec37284b34d8e701e1e23a7626b11d49fe2e66deb40d7b8191339a6e91139a069518e695a9c039ab60b72a38d6a9f239c1d7284f3c81ce13c2a47388fce11ce637284f3d81ce13c2e47388fcf11ce137284f3c41ce13c2947384fce11ce537284f3d41ce13c2d47384b7284b3638e709e9e239c67e408e79939c279568e709e1d236767e0eca47fcfd1bfe7eadff3f4af943d5fff5ea07fbbe83a16eaf90b155798d4439a32e37fddc2541ea6ee61ea61fcaf67987a85a97798fae8ff95e8ff5584a9324c7dc3d42f4cfdb50603c27451982e0ed32561ba344c9785e9f2305d11a62bc3745598ae0ed335611a18a66bc3745d98ae0fd30d61ba314c3785e9e6300d0ad32d61ba354c83c3745b9886182cb787696898ee08d3b030dd19a6e1611a11a6aa308d0c5375984685a9264c7785697498c684e9ee30dd13a6b1611a17a6f161aa0dd384304d0cd3a4304d0ed394304d0dd3bd619a16a6fbc2747f981e30347b304c0f85e9e1303d62704e0fd3a3617a2c4c8f87e989303d19a6a7c2f474989e09d38c30cd0cd3ac30cd0ed39c30cd0dd3bc30cd0fd382302d0cd3b3617a2e4ccf87e98530bd18a697c2f472985e09d3ab617a2d4caf87e98d30bda95964475814a6b7c2b4384c4bc2b4344ccbc2f47698de09d3f230ad08d3ca30ad0ad3ea30ad09d3da30ad0bd3fa306d08d3c6306d0ad3e630bd1ba62d61da1aa66d617a2f4cdbc3b4234c3bc3f47e9876856977983e08d39e30ed0dd3be307d18a6fd61fa284c1f87e993307d1aa66f85e9db61fa4e98be1ba6ef85e9fb86e63f08d30fc3f4a330fd58db7ea27f7faacbcafdbb9f85e9e73aff0bfdfb4bfdfb2bfdfb99b1ccafc3f41bc3f6db30fdceb0fd3e4c9febfc17faf70ffaf74bfdfb47fdfb95fefd93fefdb3fefd8bfefdabfefd9bfefd17fdfbaffaf7dff4efdff5ef3ff4ef3fc3b4b9633adf26a89b92414c6d54794dead98f88df29a83f292d5aeaffc96f89b617ea79f915ed5ae9f95686bdb59e6f6daca78d9e6f63d83be8f90e86fd283d7f94613f46cf1f63d88fd3f3c719f633f5fc99604f04706f58db95ada53615804de2b505d85a695b4bb0b596d581ed306d6b0536d9beadc176b8b61d06b6b6dad6066c096d3b5cb40cd311da960ce28a95d2116abd4571af573f2f2b8e9f77a45a6f3b47bcede3e71da5d6dbc101af8a8f23f5bada43dc1ca56d1dc076b4b61d09b663b4ed28b01dab6d4783ed386d3b066cc76bdbb1603b41db8e03db89da763cd84ed2b613c076b2b69d08b653b4ed24b09daa6d2783ed346d3b056c25da762ad874931b9c06b6d3b5ad046c67685b47b09da96da783ed2c6d3b036c676bdb996093f6f72cb0c9f9e2d9daa6da8ec30b60196d97762bb58cb4d9603b57da6bb09d276d35d83a4b3b0db6f3c1b7d82e80b6466c5db44dda2df5bf3e3a9f0ce2da4fca6ad47a2be25e6fb866b5debef1af37f5ccb15f50a77512fc548056fd753ec67e4d5dd177814ee247ec8590bf0aca4a39d1438e3dc2ae8e05953adfbf81e5fa18cb1543994a4bfd9341bcf5ef6bf0f435985b41de4dcc76ebe663b6d153c6313b18ca9ab127e741cd31660702878398ede963b6d153c6315b0365cdd89373e1e618b3b703878398ad7213b365a53e66d3f7cd82c01e7b723dd41c63760c70c41fb3dd7dcc367eca38661f87b266ecc93571738cd969c0117fccf6acf2e7068d9e328ed90550d68c3db93fd31c63f629e07010b335be9d6df49471ccbe0965cdd8937b85cd31669f038ef863b6b7a398ede66336483f030d027becc97debe618b38b8123fe981de9efcf367eca386677405933f6e4194a738cd9f53aaf9e33fc443f6738196c3fd5b6538037fed8aeeeee28b6cb7c6ca7fb8604813d46e5795e738ced0f745ec5f12fa03f82d87ea96d1dc1f62b6d3b1d6c9f69db19502f07fb4095df071a3d65bc0ffc06ca9ab12ccf969be33ef023e07010b3d53e661b3d651cb37f83b266ec493f87e618b3bf070e07315be363b6d153c631fb9f50d68cbd7374be39c6acf43555e70b5fe8f385f3c0f6076deb0cb62fb5ed7cb0fd51db2e00db57dad6056c7fd2b60bc1f6676d2b05db5fb4ad2bd8feaa6d6560fb9bb67503dbbf685b39d8fe55dbba83eddfb4ad07d8feae6d3dc1f60f6deb05b67f6a5b6f6d53fdf4a4ef959cb7b601fe6410efb6957e97b26e99ef9a05dfed0cdfedb2e8bb83e1bb83c5779903df09f0215381319f847c995b9ed262e0415fe5f1fbeaa6eade2d687cddcb81a7bb83ba27c0476378ba034f8ff87952fd7f7bc6bfded436ee66689a005fdda05ebd1cd4ab007cc9ba655efc15830ddbd65e16c6def1339615802f59b7ccf70646b1615b2fef5cc9fea38e879d0aea781dec4ba97322f127df2d138e72b04b992b3bd6b175d66c45f07f3ceef5306c8ee2321517e24bd62df3e2af08ead323fb8c658d65ec6e30ba6a230ac097acdbfbaedb0e92c7e3b8836b1d6b9b26be2bb2e0bbb7e1bbdcf08d6da74c0d1ddb7a0373ecd79cfad85619ff7a4bf1fa44ae0dc50f9e3fe0355c5c7542df726d287ec45e08f96b0beaca4a39d143da616157b12cdb12d9cde57a19cb1543990a4bfd9341bcf5af34782a0d66b54d2e8663a183fd211503150687cc9783769511da55807652e61cd0ce557bd6c7e091f91ec023ed584fe071754d14c5938debb183f9c67358bc7e96ffe37980abedd5d5609479dbf6ea0d8cb6731507d7330d9eab740746b1f5019e6e8e348bdaaedd487c3b8895547b243ee4dc5cf6df1e609732bdf50b75aaadbc1bda4a173182f1285363af79e3df4e65a96bf0ee19f0e0b673705dd5d5513c96e2fd9baf837863cd6c97ba1b5a45dde371d596773378645efc7966cfec993db367f6cc9ed9337b66cfec993db367f6cc9ed9337b66cfec993db367e667c6e749d86f4bcaf5206134fbbfb9bacf9ffafea15e97ac5f3dd7f93f4efb83959562ff18e907719e51e7422853d4a2aeecff87fe60e6732aec23d9c3ad76a96d89fd3193302ffeb0af156e4b86fe4e25b1f92e1be9ea799bea63adbea369f6fdec61d1d445ff67d4b4c0d014fbe39f6ff0a838ad6c59c7e6e2d95fa6cf22512bc9c7f96caf38b0c77afcdba5acde33eb1641fdf6038f33aefaef485b2dcfcb2b0cdf8550e6a41675db46fa56c918c3dd8ce5b0df8fac5b96390fec95c6badbeb6585a395b1fe9eb0ac943915dad4bd2dea3473d0569665da771d9f9bc77f1c4e3fc7ef96014f57e071d1ce383adf28c57d20eee7f866ff34db798c94c1be7d0efa5536d8df49fc7966cfec993db367f6cc9ed9337b66cfec993db367f6cc9ed9337b66cfec993db367e667563ce6b3567cbfb69c84314b7d1f52cf33e45b65b2fed4f7825bd4f975fd1c4e9e397536ea8cef8efeb3455dd9cd3a5f141cd8df216a5bbafa3e45d4b6147ff8ed197c16e4e2b96e01f892759759b4907c496cbed3cff15d8c0d21cff1bb19ba965b3475b5bfe23356d414f7d7ee060f3e1b8dfab64f996173d977282a2ec41fee4b6560933cbe1fed623be3b1c4ecd723fef0f9f577b4b6ed0357dbbeacd465bb81df4d490607c6377e4fe587d0f6fd58e7b10f07f61df9c2f27f991a7a4e2dfaa93a3bf8be666901ac4bb6afeddb9e03803526df5d715d053a0d30342884fce72deaca4a39292b5a0bbbda47e41b30c86e2ed7dd58ae18caf4b3d43f19c45b7ff35babfd0d66b54d7e0671f6051cff5db549fd22343a0f3492328ebfd968ed5f69f62bc476b4b5514696c56fd1fd15daa8a8fea3b66380ebe398acdb761c338f0b8de9e799effdb4fe0bda8bb8fb69fd17c410f6d30a8cf57786f50b57eb20fad82265fe9fb17ef39c5c96c17e60ffb39fc0f75cca743e9373f243757d653b27c7e5a2eaae98f13b68c9189931269005cf13a44c5badb56cb3ca08eede96658b229615adcc6f85150507eae7e63b6be97dbebf5117896bfc06b994390aeae2e6bc257d0ee8ea9b7249a893ca9759ea2a658e877ded449d4fc076c2fdf65ccbff656ae81c10c770bf28fe3aa7b6efc5c099043fe8fb12608dc97757f42de780e247ec85903fa7655d5929277a88d6c2aef611398f427673b90a63b9622833c052ff64106ffd2f32782e3298d5363905e2ec5ce887eeaaad1e10a15167d048cae03d45db77406df73a5cbdbf11752e85ef2f99e757789c7473de643f8f35efabd9ce113a1bfc788ed013dad984a5ac79bf508e9771f61bc677257a825f7c57c2d5b79bfb806e4998c7f38243e9dbc5776c95bfa83113fa64c177d49809d9f0ddc1f0dd218bbebde65e7326cd1d8c41907aff0cbf59aaa686ce4b715c0259ae0530ba18cb2111d4fff6f8c118717c0759ae2530ba383e64faedf39ec028cb1502a38b774b71fc8dc630e23786f1382f8c0ebe15dbb5a9df8ac57b7aad8191e99d4d7c36751830ba382f6eeabb7a783edf067e5d8d4bd42d03c6326094e50e074617f7c6f15aa6318c785d24cbb5054617cfb0321ddf09bf3d8ff7965d3236746c77dc17a52cd37b2f956e791a3cd740df0ec6354c6981f7190fa6455fb73c0d9efba06f07f7fd525ae0388307d3029f0dba18f73011d47f0e77301e7c7e29cb1d098c49478cfd33604c02e3ffdc2b06c6018e189319300e0046b11f0d8c0eeebfa6180764c088f72965b96380f162478c1765c0783130ca72c702a38b7ba909f0db18c64b8051963b0e182f75c47849068c9702a32c773c305ee688f1d20c182f034659ee0460bcdc11e36519305e0e8cb2dc89c0788523c6cb3360bc021865b99380f14a478c5764c0782530ca722703e3558e18afcc80f12a6094e54e01c6ab1d315e9501e3d5c028cb9d0a8cd73862bc3a03c66b8051963b0d18073a62bc2603c681c028cb9500e3b58e180766c0782d30ca721d81f13a478cd766c0781d30ca72a703e3f58e18afcb80f17a6094e5ce00c61b1c315e9f01e30dc028cb9d098c373a62bc2103c61b8151963b0b186f72c47863068c3701a32c773630deec88f1a60c186f06c69b2c8c831c31de9c01e3206094e5ce07c65be2674c5d4b0fca80f116e0b9357e9e9466b764c073ab5b9ed477f56eb1f8ba2d7e5fa96d3138687cdd6f039e21f1f3a4b6c56d19f00843312c879add1e3f634ab3211930de0e3c43e3e74969767b063c4341b3db2d9add113f634ab3a11930de013cc3e2e749697647063cc340b33b2c9add193f634ab3611930de093cc3e3e749697667063cc3833acdeeb46836227ec69466c333601c013c55f1f3a4341b91014f156836c2a2d9c8f819539a5565c0381278aae3e749693632039e6ad06ca445b351f133a634abce807114f0d4c4cf93d26c54063c35a0d9288b6677c5cf98d2ac2603c6bb806774fc3c29cdeeca80673468769745b331f133a6341b9d01e318e0b93b7e9e94666332e0b91b341b63d1ec1e478c7767c0788f8527eeef64df6df135ce51ddc7068dafbb3014c372d84f62bc23c67119308e0746590efb49d43a621c9f01632d30ca7209c78c0df593a805df13e2f79d6a976a83c6eb33c12d4f83fd24d0f744475a4c081aafc544b73c0df69340df931c69313168bc16938067b2032d12e0a3313cc2500ccb613f89298e182767c03805186539ec2731d511e3940c18a702a32c87fd24ee75c4383503c67b815196c37e12d31c31de9b01e3346094e5b09fc47d8e18a765c0781f30ca72d84fe27e478cf765c0783f30ca72d84fe201478cf767c0f80030ca72d84fe241478c0f64c0f82030ca72d84fe221478c0f66c0f81030ca72d84fe261478c0f65c0f83030ca72d84fe211478c0f67c0f80830ca72d84f62ba23c64732609c0e8cb21cf69378d411e3f40c181f0546590efb493ce688f1d10c181f034659ee1ec78c0d5dbf3cd6cc7d475dab3477df51d725cdddb78f731fe7f9e0dbc7b98ff37cf0ede3dcc7793ef8f671eee33c1f7cfb38f7719e0fbe7d9cfb38cf07df3ece7d9c33f97edc81ef04f890a9c0984f425e188a61b97b3c63b366449e92f8784ab1eee8eb0982ba3f61e129705477f4f52441dd8521d7181fcf01c67b7280d1eb98ee83d81446c5f394239e2733e0790a789e76c4f354063c4f03cf33f1f3a462eae90c7884a11896bb2707181fcf0146afa3d79189d1eb983f3a7a46cfe8193de3a160cc8536dc33e6443c96359551f1cc889f27a5d93319f0cc00cd64b95bdd3296359551f1cc8c9f27a5d98c0c78668266332c9a39602c6b2aa3e299153f4f4ab39919f0cc02cd665a3473c058d65446c5333b7e9e9466b332e0990d9acdb268e680b1aca98c8a674efc3c29cd6667c03307349b6dd1cc016359531915cfdcf879529acdc980672e6836c7a29903c6b2a6322a9e79f1f3a4349b9b01cf3cd06cae4533078c654d65543cf3e3e74969362f039ef9a0d93c8b660e18cb9acaa87816c4cf93d26c7e063c0b40b3f916cd5819efc901c6c77380d1b18e654d65543c0b1df12cc8806721f03ceb886761063ccf02cf73f1f3a462ead90c7884a11896bb2707181fcf0146afa3d79189d1eb983f3a7a46cfe81933637c220718fdb6f68cac8c0eaeaf1a7c87e6d966ee3bea1d9ae6ee3bea1d9ae6eedbc7b98ff37cf0ede3dcc7793ef8f671eee33c1f7cfb38f7719e0fbe7d9cfb38cf07df3ece7d9ce7836f1fe73ecef3c1b78f731fe7f9e0dbc7b98ff37cf0ede3dcc7793ef8f671eee33c1f7cfb38f7719e0fbe7d9cfb38cf07df3ece7d9ce7836f1fe73ecef3c1b78f731fe7f9e0dbc7b98ff37cf0ede3dcc7793ef8f671eee33c1f7cfb38f7719e0fbe7d9cfb38cf07df3ece7d9ce7836f1fe73ece997c3f1fbfefb24cbf31f33cf0b8f8e68da37a96aaf5bea0d7f5758cfa29ad5e34b47ad6d0aa18cabc00fabde840bf02f02beb9679f197297327026647becb54fb7238d45f7c3c6ee8a1fcbfe4a8ee516dfd4bcddc77545bdfdc7d47b5f5cdddb78f731fe7f9e0dbc7b98ff37cf0ede3dcc7398b6fccb70aeacedbe5fba76a1d2feb7ca19e97f24f805dca4c3e2cfddb3ef0fb900bdf7e1ff2c78a7cf0ede3dcc7793ef8f671eee33c1f7cfb38f7719e0fbe7d9cfb38cf07df3ece7d9ce7836f1fe73ecef3c1b78f73be382f86ff5766812730788206781690f14c25e3994dc6339a8c672819cf75643c1793f13c44c6534ec633818c672419cf2d643c5791f15c48c6d38f8c671a194f6f329e39643c7793f13c4dc6338c8ce706329e4bc9781e21e32923e39944c6338a8ce736329e6bc87892643cf793f1f424e339978c671c19cf5c329e73c8788693f13c43c67313194f31194f3b329ecbc9789e24e3b9808ca7828ce751329ef9643c53c878ee22e3b99d8ca7948ce75a329e2e643c1791f13c48c6d39d8c671e194f2d19cf0c329e2a329e41643ce791f15c49c6d3928ca72f19cf42329e7bc978fa90f18c21e3e94cc6730719cff5643c9790f13c4cc6d38d8c672219cf4c329e6a329ec1643c5793f1f427e3b98f8ca71719cf58329e4e643c7792f1dc48c6938def9966c27304194f1119cf65643c8f91f14c27e3e94ac633998c6716194f0d19cf10329e81643c03c8781e20e3e941c6339e8c670419cfcd643c4f91f1b427e3e940c67305194f01014f2238700c9304fcff79b0b53096559f7d9dd3b1eeffaf687b0b58e6559d6f6959f72b60936fc9be6a5916757a05ea92d4f9d26f36a574425f4998177f45c0f12a09cf15643c1dc878da93f13c45c6733319cf08329ef1643c3dc8781e20e31940c633908c6708194f0d19cf2c329ec9643c5dc978a693f13c46c67319194f1119cf11643ccf93f1dc48c67327194f27329eb1643cbdc878ee23e3e94fc6733519cf60329e6a329e99643c13c978ba91f13c4cc6730919cff5643c7790f17426e31943c6d3878ce75e329e85643c7dc9785a92f15c49c6731e19cf20329e2a329e19643cb5643cf3c878ba93f13c48c67311194f17329e6bc9784ac9786e27e3b98b8c670a19cf7c329e47c9782ac8782e20e379928ce772329e76643cc5643c3791f13c43c6339c8ce71c329eb9643ce3c878ce25e3e949c6733f194f928ce71a329edbc8784691f14c22e32923e379848ce752329e1bc8788691f13c4dc6733719cf1c329ede643cd3c878fa91f15c48c6731519cf2d643c23c9782690f19493f13c44c6733119cf75643c43c9784693f1cc26e3994ac6b3808ca7d2c2f3bc231e79df5dd62df3cf93f876b01d4ad57a5f7354a7d7f5ba5ae9f50abff82b8432d3dba67fd5fbe1b8ac7099df27c077735e078d5e775417d91e05c6f641df2f3bf22def68c9ba65fee566eebb9de1bb5d9ef8ee60f8ee9027be7d9cfb38cf07df3ece7d9ce7836f1fe73ece997c3bb83628c3efa4c95460cc27218fd70b2ebe2fe7a89ef5ae13bf8e513fa5d51b8656e6b5553194790df47bc3817eb66b4f99177f9932772260c6b82809e28d8b37e3af53996ab70e075ddf34f4c57a2d72a469d431645133f71d750c69eebea38e21cdddb78f731fe7f9e0dbc7b98ff37cf0ede3dcc73993efb7743ec6ebc652f4a19e2fcaf5c05be07789ce17c4e857ad6bb15e57a15eb7702c01bb94f9dff05cd3eff37e9f8fcbb73fb6f938cf07df3ece7d9ce7836f1fe73ecef3c1b78f731fe7f9e0dbc7b98ff37cf0cd1ce7665efa8b9f036caefaf347c56236de253894bea362b1b9fb8e8ac5e6eedbc7b98f7326df4b1df84e800f991aeae3b71478163be07154cfd4b38d65469d9e37ea540c65f018bfcc413d0bc0afac5be697018f4c95c0e3220e1ab3cd91670119cf54329ed9643ca3c9788692f15c47c6733119cf43643ce5643c13c8784692f1dc42c6731519cf85643cfdc878a691f1f426e39943c6733719cfd3643cc3c8786e20e3b9948ce711329e32329e49643ca3c8786e23e3b9868c2749c6733f194f4f329e73c978c691f1cc25e3194ec6f30c19cf4d643cc5643cedc8782e27e379928ce702329e0a329e47c978e693f14c21e3b98b8ce776329e52329e45643cd792f17421e3b9888ce741329eee643cf3c8786ac9786690f15491f10c22e3398f8ce74a329e96643c7dc9781692f1dc4bc6d3878c670c194f67329e3bc878ae27e3b9848ce761329e6e643c13c9786692f15493f10c26e379838ce76a329efe643cf791f1f422e3194bc6d3898ce74e329e1bc9788e20e32922e3b98c8ce731329ee9643c5dc9782693f1cc22e3a921e31942c633908c670019cf03643c3dc878c693f18c20e3b9998ce729329ef6643c1dc878ae20e32920e0490407befb9f80ffbf01367947fd79b0bdadf38bc1d6c2e2a3a5ce2f035ba1cecb3a0e0bd34b1d0f5c37eae4eabd7cf4958479f157041c6f93f05c41c6d3818ca73d19cf53643c3793f18c20e3194fc6d3838ce701329e01643c03c9788690f1d490f1cc22e3994cc6d3958c673a19cf63643c9791f11491f11c41c6732319cf9d643c9dc878c692f1f422e3b98f8ca73f19cfd5643c6f90f10c26e3a926e39949c633918ca71b19cfc3643c9790f15c4fc67307194f67329e31643c7dc878ee25e35948c6d3978ca72519cf95643ce791f10c22e3a922e39941c6534bc6338f8ca73b19cf83643c1791f17421e3b9968c6711194f2919cfed643c7791f14c21e3994fc6f328194f0519cf05643c4f92f15c4ec6d38e8ca7988ce726329e67c8788693f1cc25e31947c6732e194f4f329efbc97892643cd790f1dc46c6338a8c6712194f1919cf23643c9792f1dc40c6338c8ce769329ebbc978e690f1f426e39946c6d38f8ce742329eabc8786e21e31949c633818ca79c8ce721329e8bc978ae23e3194ac6339a8c673619cf54329e05643c95d9e12953efb64b5feb00b8704a427e19f02c72a08fa37a96e2770dbe8e71bd4aab770cadde30b42a86324b41bf771ce857007e65dd322ffe729159f13ca6f3b6ef403c46c228b6456e7952fbed6341fda9a1fdf61de071d1ae39aa676aff5a6ed4e9318bee52066375b9837adaf61d995f0edb21d79815cf933a2fac0928f72409a3d896b9e549ed5f4f06f5a786f6afe5c0e3a2fd7154cfd4feb5c2a8d39316dda50cc6ea0a07f5b4ed3b32bf02b643ae312b9ea7745e581350ee291246b1bde396a73c017596a9a1fd6b05f0b8687f1cd533b57fad34eaf49445772983b1bad2413d6dfb8eccaf84ede0993db38d59f1c8b31d614d40b9a74918c5b6dc294f796902ea2c5343edd84ae071d1ce3bd23dd58ead32eaf4b445772983b1baca413d6dfb8eccafb2f82e09e2d5627523b4586de1599d652dc45fa6cc4b7390d9ebec758e62f63a7b9da398bdce5ee72866afb3d7398ad9ebec758e62f63a7b9da398bdce5ee72866afb3d7398ad9ebec758e62f63a7b9da398bdce5ee72866afb3d7398ad9ebec758e62f63a7b9da398bdce5ee72866afb3d7594d5e67afb3d7d9eb1c07b3d7d9eb1cc5ec75f63a473133e8ac78e4db95c29a8072cf90308a6d855b9ed47b41cf04f5a702633e09f9d5c0b3d2813e8eea99ea43bec6a8d33316dda50cee5f6b1cd4d3b6efc8fc1ad80e9930afca4166af73d39815cf0c9d17d604949b41c228b6956e7952edd88ca0fed4503bb606785cb4f38eea996ac7d61a759a61d15dcae0feb5d6413d6dfb8eccaf85ede0993db38d59f1ccd479614d40b999248c625bed94a72cf57ee3cca0fed4503bb616785cb4f38e744fb563eb8c3acdb4e82e653056d739a8a76ddf91f975b01d32615e9583cc5e67af7314b3d7d9eb1cc5ec75f63a47317b9dbdce51cc5e67af7314b3d7d9eb1cc5ec75f63a47317b9dbdce51cc5e67af7314b3d7397f74563cb3745e5813506e1609a3d8d638e5e9967aee302ba83f35f4dc611df0b8782ee348f7d47387f5469d6659749732b87fad77504fdbbe23f3eb613b3477e65539c8ec63233bcc3e363c7314b38f0dcf1cc5ec63c3334731fbd8f0cc51cc3e363c7314b38f0dcf1cc5ec63c3334731fbd8f0cc51cc3e363c7314b38f0dcf1cc5ec63c3334731fbd8f0cc51cc3e363c7314b38f0dcf1cc5cc101b8a67b6ce0b6b02cacd266114db5ab73ca9ef1ecc0eea4f0df5db590f3ceb1ce8e3a89ea97e3b1b8c3acdb6e82e6570ffdae0a09eb67d47e637c076f0cc9ed9c6ac78e6e8bcb026a0dc1c1246b1ad73cb936ac7e604f5a786dab10dc0e3a29d7754cf543bb6d1a8d31c8bee52066375a3837adaf61d99df08dbc1337b661bb3e299abf3c29a8072734918c5b6de2d4faa1d9b1bd49f1a6ac736028f8b76de513d53edd826a34e732dba4b198cd54d0eea69db77647e136c07cfec996dcc8a679ece0b6b02cacd236114db06b73c6509a8b34c0db5639b80c7453befa89ea9766cb351a77916dda50cc6ea6607f5b4ed3b32bf19b643ae312b9ef93a2fac0928379f84516c1bddf2a4f6aff941fda9a1fd6b33f0b8687f1cd533b57fbd6bd469be45772983b1faae837adaf61d997f17b643ae312b9e053a2fac0928b78084516c9bdcf2a4f6af0541fda9a1fdeb5de071d1fe38aa676affda62d4698145772983b1bac5413d6dfb8ecc6f81ed906bcc8a67a1ce0b6b02ca2d2461141b1e2f163ae22932788a2c5a1c2adf4a8b0a9d3f42ff26e0ff15c0e8aa3d5c6830ca3cc6b8d88ab2a0593b83a79da1d9a1f4adb4a884bc9a707b550223c3f66a9705cd3a183c1d0ccd0ea56fa5455f9d6faf7f717bf5054686edd501781cb4cfe50983474d0d9d6f6c71ac8fa37aa6ce37b60676ddf1382465f0d8bdd5413d6de71232bf15b68367f6cc3666c53348e7853501e50691308a0daf53b6c5cf539e3078d4d4503bb6cdb13e8eea996ac7de0becba6f03dda50cc6ea7b0eea59007e65dd32ff1e6c874c9857e520b3d7b969cc8a67b0ce0b6b02ca0d266114db56e0d91e3f4f79c2e0515343edd876c7fa38aa67aa1ddb11d875df0eba4b19dcbf7638a86701f89575cbfc0ed80e9930afca4166af73d39815cf109d17d604941b42c228b6f7806767ec3ce9f18090474d0db5633b1debe3a69ee976ecfdc0aefb4ed05dcae0fef5be837a16805f59b7ccbf0fdbc1337b66cfec993db367f6cc9ed9337b66cfec993db367f6cc9ed9337b66cfec993d3337b3e219aaf3c29a8072434918c5b6037876c5ce937eee803c6a6ae8b9c32ec7fab8a967fab9c3eec0aefb2ed05dca60acee7650cf02f02beb96f9ddb01d3cb367f6cc9ed9337b66cfec993db367f6cc9ed9337b66cfec993db367f6cc9ed93373332b9e613a2fac0928378c84516cef03cf07f1f394270c1e3535f4dce103c7fa38aa67eab9c39ec0aefb07a0bb94c158dde3a09e05e057d62df37b603becf1cc9ed9c2ac7886ebbcb026a0dc701246b1ed069ebdb1f3a49f9f228f9a1a6ac7f63ad6c74d3dd3edd8bec0aefb5ed05dca60acee7350cf02f02beb96f97db01d32615e9583cc5e67af7314b3d7d9eb1cc5ec75f63a47317b9dbdce51cc5e67af7314b3d7d9eb1cc5ec75f63a47317b9dbdce51cc5e67af7314b3d7397f74563c553a2fac09285745c228b63dc0f361ec3cdd4a13068f9a0a8cf924e43f74ac8f9b7aa69f3bec0fecba7f08ba4b19dcbff63ba86701f89575cbfc7ed80ecd9d79550e32fbd8c80eb38f0dcf1cc5ec63c3334731fbd8f0cc51cc3e363c7314b38f0dcf1cc5ec63c3334731fbd8f0cc51cc3e363c7314b38f0dcf1cc5ec63c3334731fbd8f0cc51cc3e363c7314b38f0dcf1cc5ec63c333473133c486e2a9d679614d40b96a1246b1ed039e8fe2e7294f183c6a2a30e69390ffc8b13e8eea99eab7f37160d7fd23d05dcae0fef5b1837a16805f59b7cc7f0cdbc1337b661bb3e2a9d179614d40b91a1246b1ed079e4fe2e7294b183c6a6aa81dfbc4b13e8eea996ac73e0decba7f02ba4b198cd54f1dd4b300fccaba65fe53d80eb9c6ac7846ebbcb026a0dc681246b17d0c3c0ee22ec55364f0c8fc2704be9516b53a7f84fec5ed550b8c0cdbab280b9ab53378da199a1d4adf4a8b099057136eaf09c0c8b0bdda6541b30e064f0743b343e95b693151e7dbeb5fdc5e138191617b75c8826687b23d3c94fbf6a18c53aff9a1d3bce0106a5e7008352ff09a5369eee0f85286c7b20018704a42fe53e0f976fc3ca9fb729f66c0f36de0f956fc3c5d1dd5b354adf73bc01ed77a9556df35b4fad4d0aa18ca20c3771de857007e65dd322ffe3cb3678e62c6735b614d40b94f4818c5f62de071d16ea8ba5fa0d725eb6f15a6cf8eaef3ebe27909de2b6ea5d72b1ce2af10ca4c2ca92bfb3bcd5604ff97eda6eab3dfb0397a87b9abedb99dcc8bbfa2206bf76e1bbc978c5ab878de94e9717fbf85e7ebf8784a713f475ffb1cd53d93677ffb2c3c31d6bd6bd473cfbdf1d73dd57e74d1eb92f5ab7df4df8f76aa7939ee7bd27e7431ea5c08650696d495fd0f683f6c6d85eb7d53cec9cd7db34550d79e095789b69bcf84bed67629f71194c736a742ffe2fe59017575d52e46dd63c276d16cbb5d6a6f3e97347d17832e1f916a667b4e813a565ab82b09b8311eb3b99fc9ba6dcfc82a0d1dd934c36dfd9145c7be16eebe04dc8cfb755f434736cd0eb65f0fb2700f22e066dcaf07193ab26976b0fd7ab0857b300137e37e3dd8d0914db383edd7432cdc4308b819f7eb21868e6c9a1d6cbf1e6ae11e4ac0cdb85f0f357464d3ec60fbf5300bf730026ec6fd7a98a1239b6607dbaf875bb887137033eed7c383fa3ab26976b0fdbacac25d45c0cdb85f57193ab26976b0fdbadac25d4dc0cdb85f571b3ab26976b0fdbac6c25d43c0cdb85fd7183ab26976b0fd7ab4857b340137e37eddd87efbacfb75ad85bb96809b71bfae357464d3ec60fbf5040bf704026ec6fd7a82a1239b6607dbaf275ab827127033eed7130d1dd934b3edd78ede25ccf8ddc68f9dea931e63fae30c783e041e1731e5280e4a1df57349f54ddd6b68f5b1a1158eddb10ff473d017a6c16f12883fcfec993db367f6cc9ed9337b66cfec993db367f6cc9ed9337b66cfec993db367f6ccfcccf85d467cbe22e53e2261141b3e9372719f5fd5fd42bd2e597fab300d3cb6ceefbed8fd96951618fe92c021fe0aa1cc89a7d595bd41b31505076e371c8b1bb7e59ed8eb90de9666fccbbcf82b82faec051e07efe7a778f6193cfb2c5ae07ba7f1f82e1be946e3b252f5fd9dc383baedbcc7a80f6afa41ecfeeb6b5a6068fa8163df89a0fef614069c9290471e17cf861dd533d516ec36ea646a5c0c653a413d773ba86701f89575cbfc6ee091a905f0b88ac1c0e0092cfac85449c633958c673419cf99643c43c9788e27e3b98e8ce770329e8bc9781e22e32927e39940c633928ce734329e5bc8788e22e3b98a8ce742329e42329e7e643cd3c8787a93f1dc4dc6733619cf30329ef3c9784e24e3b9818c2741c6732919cf23643c65643c93c8784691f17424e3b98d8ce718329e6bc8785a93f124c978ee27e3e949c6732e19cf38329e73c8788693f19c4cc67313194f31194f3b329ecbc9781e25e3a920e3b9808c670a19cf5d643c6790f1dc4ec6534ac6731c19cfb5643c5dc8782e22e36943c6f320194f77329e5a329e2a329e53c9780691f19c47c6732419cf95643c2dc978fa92f1dc4bc6d3878c670c194f67329eb3c878ee20e339818ce77a329eb6643c9790f1ec25e379988ca71b19cf44329e6a329efd643c25643c83c9788e26e3b99a8ca715194f7f329efbc8787a91f18c25e3e944c6732719cf49643c3792f11c41c65344c6731919cf74329eae643c93c9786ac8784e27e31942c6732c19cf40329ec3c8780690f13c40c6d3838c673c19cf08329e53c8786e26e3694fc6d3818ce70a329e02029e4470e0b79812f0ff7d60936f067d08b61696f5c9736a29af8e8b8b3b1eb8ee1696757f6061409d76415d923a5ffacda6944ee82b09f3e2af08383e20e1b9828ca703194f7b329e9bc9784e21e31941c6339e8ca70719cf03643c03c8780e23e31948c6732c19cf10329ed3c9786ac8782693f17425e3994ec67319194f1119cf11643c3792f19c44c67327194f27329eb1643cbdc878ee23e3e94fc6d38a8ce76a329ea3c9780693f19490f1ec27e3a926e39948c6d38d8ce761329ebd643c9790f1b425e3b99e8ce704329e3bc878ce22e3e94cc633868ca70f19cfbd643c7dc9785a92f15c49c6732419cf79643c83c8784e25e3a922e3a925e3e94ec6f320194f1b329e8bc878ba90f15c4bc6731c194f2919cfed643c6790f1dc45c633858ce702329e0a329e47c9782e27e36947c6534cc6731319cfc9643cc3c978ce21e31947c6732e194f4f329efbc97892643cadc978ae21e339868ce736329e8e643ca3c8782691f19491f13c42c67329194f828ce706329e13c978ce27e31946c6733619cfdd643cbdc978a691f1f423e32924e3b9908ce72a329ea3c8786e21e3398d8c672419cf04329e72329e87c8782e26e3399c8ce73a329ee3c9788692f19c49c6339a8c672a194f25194f0b8307ffafde0ddbabf3f2eda042f8ff24ddb9bcbd5e97949167c4ea5ec5fb864dd577a7a3fabe1fd44d4998df09f515f6f781e77d473cbb0c1ed37711e42b41b31d864d316e77c4b8c36094f9edc028faed009e1d8e78761a3ca6ef22c8f705cdde336c8a719b23c6f70c4699df068ca2df7bc0f39e239eed068fe9bb08f28340b3ad864d316e71c4b8d56094f92dc028fa6d059ead8e78b6193ca6ef22c80f06cdde356c8a71b323c6770d4699df0c8ca2dfbbc0f3ae239e2d068fe9bb08f24340b34d864d316e74c4b8c96094f98dc028fa6d029e4d8e78361b3ca6ef22c80f05cd361836c5b8de11e3068351e6d703a3e8b701783638e2d968f098be8b203f0c345b67d814e35a478ceb0c46995f0b8ca2df3ae059e78867bdc163fa2e82fc70d06c8d61538cab1d31ae3118657e35308a7e6b80678d239eb5068fe9bb08f255a0d92ac3a618573a625c6530cafc4a6014fd5601cf2a473cab0d1ed37711e4ab41b315864d312e77c4b8c26094f9e5c028faad009e158e78561a3ca6ef22c8d78066ef1836c5f8b623c6770c46997f1b1845bf7780e71d473ccb0d1ed37711e4478366cb0c9b625cea887199c128f34b8151f45b063ccb1cf1bc6df098be8b205f0b9a2d316c8a71b123c62506a3cc2f0646d16f09f02c71c4b3d4e0317d17417e0268f69661538c8b1c31be6530cafc226014fdde029eb71cf12c36784cdf45909f089abd69d814e31b8e18df341865fe0d6014fdde049e371df12c32784cdf4590bf096cc2db076cafeb7c6fb0bda6f3bdc0f6aacef704db2b3adf036c2feb7c77b0bda4f3e5607b51e7bb81ed059d2f03dbf33adf156ccfe97c3fb03dabf3fdc1b650e793605ba0f303c0365fe72f02db3c9dbf186c7375fe12b0cdd1f94bc1365be72f03db2c9dbf1c6c3375fe0ab0cdd0f92bc1f68cce5f05b6a775fe6ab03da5f3d780ed499d1f08b62774fe5ab03daef3d781ed319dbf1e6cf7e8fc0d60bb55e76f04dbc73a7f33d83ed1f95bc0f6a9cedf06b66fe9fced60fbb6cedf01b6efe8fc9d60fbaece8f00dbf7747e24d8beaff3a3c0f6039dbf0b6c3fd4f93160fb91cedf0db61febfc58b0fd44e7c781eda73a3f1e6c3fd3f94960fbb9ce4f06db2f747e0ad87ea9f353c1f62b9dbf176c9fe9fc34b0fd5ae7ef03db6f74fe7eb0fd56e71f00dbef74fe41b0fd5ee71f02dbe73aff30d8bed0f947c0f6079d9f0eb62f75fe51b0fd51e7a55d53edec9f74be2488b79dfd2aa89b4ac0b7f85365feacf3ad8d32b26c2194395b772854cf38d4bb4bd20e4bbbac6cd20ebf0e3669875f039bb4c3af824ddae157c026edf0cb609376f825b0493bfc22d8a41d7e016cd20e3f0f3669879f039bb4c3cf822da9f30bc126edf002b0493b3c1f6cd20ecf039bb4c373c126edf01cb0493b3c1b6cd20ecf029bb4c333c126edf00cb0493bfc0cd8a41d7e1a6cd20e3f053669879f049bb4c34f804ddae1c7c126edf063609376f81eb0493b7c2bd8647ff90a6cd2367f0c36699b3f019bb4cd9f824ddae66f814ddae66f834ddae6ef804ddae6ef824ddae6ef814ddae6ef834ddae61f804ddae61f824ddae61f814ddae61f834ddae69f806dbcceff146cd236ff0c6cd236ff1c6cd236ff026cd236ff126cd236ff0a6cd2367f0636699b7f0d36699b7f0336699b7f0b36699b7f0736699b7f0f36699b3f079bb4cd5f804ddae63f80ed519d97b6ba0dd8e459b19a4abfe184e3f0b4005fc2920ce26dfb714a421eeb2e532519cf1c329ed1643c2f93f19c49c633948ce778329ec3c978de24e39940c6b3908c671919cf52329e37c8784e23e3d940c6b39e8ce728329ef7c9787692f15c48c65348c6338b8ce745329eb3c9788691f19c4fc67322194f828c673e19cf12329ec5643caf91f17424e35947c6b3968ce718329e1d643cdbc9785a93f17c45c633838ce75c329ee7c978ce21e3194ec67332194f31194f3b329e0a329e0bc878e692f1bc45c6b3888ce715329e33c878d690f1ac26e32925e3398e8ce73d329e6d643c5dc878da90f13c4dc6534bc6f32c194f1519cfa9643c83c878ce23e339928ca725194f5f329e5bc9786693f1bc44c6d3998ce72c329e55643c2bc978be24e339818c672b19cf16329eb6643c7bc9782692f12c20e3a926e3799d8c673f194f0919cf60329ea3c9785a91f17c4cc633938ce705329e15643ccbc9784e22e379978c673319cf11643c45643cf3c8786ac8785e25e3399d8c670819cfb1643c8791f13c43c6f31c19cf3b643c6f93f19c42c6b3898c6723194f7b329e0e643cbbc9787691f11410f0248023009bfcbf25d8e43b3cfbc1f685ceef059b7cc3e74db07daef38f82ed618bad85854f18a6834dde95fd026c727fe611b0c93b139f834dce1bc4bf9a5fd9f140fe16b08cf86969e1477f9f5bb8248fdb5b964906f16e6ff4950cecdfbc2b30180f35cf2e329edd643c1dc878da93f16c24e3d944c6730a19cfdb643cef90f13c47c6f30c19cf61643cc792f10c21e3399d8ce755329e1a329e79643c45643c4790f16c26e379978ce724329ee5643c2bc8785e20e39949c6f331194f2b329ea3c9780693f19490f1ec27e3799d8ca79a8c670119cf44329ebd643c6dc978b690f16c25e339818ce74b329e95643cabc878ce22e3e94cc6f31219cf6c329e5bc978fa92f1b424e339928ce73c329e41643ca792f15491f13c4bc6534bc6f334194f1b329e2e643cdbc878de23e3398e8ca7948c673519cf1a329e33c8785e21e35944c6f31619cf5c329e0bc8782ac878da91f11493f19c4cc6339c8ce71c329ee7c978ce25e39941c6f315194f6b329eed643c3bc8788e21e3594bc6b38e8ca72319cf6b643c8bc9789690f1cc27e34990f19c48c6733e19cf30329eb3c9785e24e39945c65348c6732119cf4e329ef7c9788e22e3594fc6b3818ce734329e37c8789692f12c23e35948c633818ce74d329ec3c9788e27e3194ac6732619cfcb643ca3c978e690f15492f1b4b0f0ec77c423df8a9175cbfcfe66ee7ba7e17b679ef8de6ef8de9e27beb719beb7e589ef2d86ef2d79e27bb3e17b739ef8de68f8de9827bed71bbed7e789efb586efb579e27bb5e17b759ef85e69f85e9927be971bbe97e789efb70ddf6fe789efa586efa579e27bb1e17b719ef85e64f85e9427be99afbf553f5ce9abbc5bff26e0ff15c0f8a623c6fd06a3ccbf098c62c3ef515738e289ba76af20f0adb4907b59f2cc3301ffaf04465731556130cabc2da676024fa5239ea87b0e9504be9516f22eb6f4a94cc0ff71fc655731556930cabc2da6b6034f5f473c51f74afa12f8565ac8bbcff2ce5f02fe8fe3adbb8aa9be06a3ccdb626a1bf00c72c413758f6710816fa5857c2b4cbe499380ffe3f88cae626a90c128f3b698c2f173073be289ba373598c0b7d242beb52bdfbc4cc0ff71fc26573135d86094795b4ce1f871431cf144dd531b42e05b6921cf82e51bed09f8ff5060741553430c4699b7c5148e7733d4114fd4bdc0a104be9516c3745efa5825e0ffc380d1554c0d351865de1653eb816798239ea87b98c3087c2b2d86ebbcbcc39180ff0f0746573135cc6094795b4cad059ee18e78a2eebd0e27f0adb4a8d27979a73f01ffaf0246573135dc6094795b4cad069e2a473c51f78cab087c2b2daa755ebe399780ffe3f8efc31d3156198c323f1c18c5b61278aa1df144ddebae26f0adb4906ffbafd0bf09f83f8ec7ea2aa6aa0d4699b7c5148e075de38827ea1e7d0d816fa5c5689d97316112f0ffd1c0e82aa66a0c4699b7c5148e5f39da114fd4b385d104be9516f26dae65fa3701ffaf0546573135da6094795b4c2d059e5a473c8b0d9ec5162d0e956fa585f4e55ea27f13f0ff09c0e82aa66a0d4699b7c5d462e099e08827ea59ce0402df4a0bf9b6f65bfa3701ff9f088cae626a82c128f3b6985a043c131df1443d839a9805df51cf53b2e13bead940367c47dde7ce86efa87bb6d9f01d75ff311bbea3eea565c377d47da16cf88ebac7910ddf51d7ebd9f01d75ed990ddf51d751d9f01d754d900ddf51e7b7d9f01d75ae960ddf51e71dbe3df7ed79dcbe0fe5b943beb6e787f2187a288f25fedac05f1b64cbb73f96f86b836cf9ced76b03df9e67bf3d97ebaf8220fa7aec6d47be971abe651e9fb32c75e47bb1e15be6f199c16247be1719be651eef7f2f72e4bbc8f02df38bb2e0bb9de1bb5d167d77307c77b0f876b0bdcb1241fdeb6f61c02909798c81b71c68e1a89ea56abd4bf4babe8e71bdb6fb36e6fe520c6596807eaedb0e59b7d976e42233c6459bf87c9726c0877c974cd9e4f9f1eb609376ff35b049bf8057c126c7a657c026cfa45e069b3cb37a096ca375fe63b0c9b363ecb32fcfffb781ad4ae7b1aff8709ddf0236e94b857d94a53fdc66b0499f46ec1b2bfd5237824dfa16639f4ce91fbe1e6cd2c71ffb02ca7b1a6bc126efda601f34795f6a35d8f6ea3cf67d92efd0ac04db749d5f01b63fe8fc72b03da4f3b782edf73aff15d87ea7f38bc0f6a0cebf05b6dfeafc12b03da0f32f82ed373aff02d8eed7f9e7c1769fcee3bb6cbfd6f95d60fb4ce7f11daa693abf136cbfd2797c77e75e9ddf0eb65feafc73609baaf3cf826d8ace2f04db2f747e01d87eaef3f3c13659e7e781ed673a3f176c93747e0ed87eaaf3b3c1365ee76781ed273a3f136ce3747e06d8c6eafc3360fbb1ce3f0db61fe9fc9760bb5be71783ad85ce2f059b8c1989fd540a75fe6db0b5d279ec7f24dff79f08b6c3747e02d8dae87c2dd8e4db70a3c126e341d7802da1f3d5603b42e7abc026e767c3c126e39f0c039b9c4b0d055b7b9d1f023639ef190c3619cf7210d8e41ba47dc176b4ce57824dbead5f01b663757e3fd864ccb137c126dfaddb0b36198bf911b0c9f7aaa783ed249dff03d8641c9687c0768aceff1e6ca7eafcefc026dff07c106c253aff5bb075d4f907c076baceff066c3246d6fd603b53e7ef039b8c1dfc6bb0c9f79e3f035b279d9f06b67374fe576093b144ee059b8c0ffa4bb075d6f9a96093ef704f01db053aff0bb0c9787f3f079b7c637832d8645cb79f81adabce4f025b99ceff146cdd747e3cd8ca75fe2760ebaef3e3c0d643e7c782ada7ceff186cbd74fe4760ebadf3d2cea8fd59ede7fbf47c3288efbc4cf9fb30a83f35746d200cc813e7b97631f0a0af3db1d7bd2c755e2ffb7d0bbd5e89a13de07b77ecbed3d7141fe87515eaf5ee367c1742997374e3a09693637e4bbddc5e6339bc8f25eb96652e04fb2e63dded757d3f7054dfdd069370a30e52e67ccda48e8d3fd0f936b04c8c6ca9eb6389b50034c42909796170a35559299ef73686e703e0d9133b4ffa7add454ce0be15f7f5ba791fd78cb56228b31bf4dbe5403fdcd765dd322ffe3cb367f6cc9ed9337b66cfec993db367f6cc9ed9337b66cfec993db367f6cc9ed933f3332b9e7d3a8fcf95a5dc3e1246b1ed011e17f7f9f139acac5f3dd7d9755a9ddf3db1fbadff7caf955e6fa951e74228f3353c73daabf345f07fd96e51dbd2c173c206b7a5f82b82fae0b3a07d8e78f6183c7b2c5a48be2436df6523dd685c56aafaada867ec7b0d5df7593475b5bfeed1eb2a3034c5fdf54383079f8d1601ef47fa3701ebf908eae0601f6f302ec41fee4b7bc026f90f81d1c576c66389b407f23c1c9f4d4b995f19cfc5e3dff665a52edb8df7a14ec9e0c0f82e8432bf83b6ef739dc7be21fb40b77f58fe2f5343cfa9453f55e71df1d739b57db7036712fca0eff7803526dff5dea129d049fc88bd10f27f87fe1c524ef410ad851dc72b477673b90f8de58aa1cc4e4bfd9341bcf5df61f0ec3098d536f912e2ec1f70fc77d526ed8cd0e842d048caec018df63ae2d963f00887f8536564fbb736cac8b28550e67f411ba5ea22edbcd413fbb6e031c0d5714c7cc9ba65de766efc01309a7554f131f0d83ade3db1f3e656ffafc34ad2bfd8aec7d5ff4bd6dd5e2f2b1c81b1fe5258bf70b50ea28f2dffb37d4bead6efb27fd95ea3cec2823a4b997625e95f156797e97c26e7fa87eaba2dea5c7fa7039e4450ffda5b4d0d1ddff118f3be031e47f52cb51dbb7619752a86329da09e0ece631a7c177807f876b1cd510b3987da6d685108653a96a47fa5ed88d211af553fc84a5dcaace783a596ba48994e2575756903f638995c6eb7f7a04e6abd7b2c759532e797d4e9d245e713b09df0be495fcbff656aa83dc0b178b6c65fe7d4f6dd029c49f083bedf05d6987cd7fb16889cef8b1fb11742beb2a4aeac94133d446b6157fb88bcf387ece672bb8de58aa1cc364bfd9341bcf5df6af06c3598d536e95a5297973872d96e6e8bd0a81434923278ff588eedf8de9dedb8bfc71177d4717f0f309aed269ebbb864db6bb099f7506de7835206cfc9a4ccd525e95fd5ce262c65cd7bc32eee63e23ba801d42330ea2a13c680836bc372bc7692764afc7401fb1e9d179dbb18da1542994125e95f87e7ddd67b97e6f51d5e5308b7b96fe1bb1f434aeab871ecc43dfab7086c9fe85f47d769e5b67b86c261bb6738bca48e1d9715ae8f2d7531af915b0407de53ffda288bf7dd1a5acecc9be3502a7d3f31cad9fce0354f6cef6a742d2d45a61681fd7ec187067b4170e0989bb21f60cc99f751ba18ebc1fb28b525e95f6993ccb26adbfffbd175fac87614edb03dc198fc1018933a5ffacda6aeb6facbbcf8538c1f197570d376a5df57cae43ef05ee071d1b63b6aa34bf1181bdff7297a57d98eff1f1a5a65f179adf5986f3e736f63e4e3f15d566dbbff64d362b785c7d57394282d765b7cc7a7458f91b6e3874d8b5d169e5d59d66297c5778c5ad4e07dcf86b478dfc2e3e25e54435abc6ff11d9f163d4b1b7aae815aecb4f0b8baf710a585f8cb94791701731b231f8feff22adb7d329b163b2c3caeae9ba3b4d861f11d9f165d7be03dba86b4d86ee189fffe5cc35a6cb7f88e4f8b5ebdf11e5e435abc67e171f54c374a8bf72cbe638c8b51b67b39362db65978b665598b6d16df319e1ff6b0dd6bb369b1d5c2e3e0be6b835a6cb5f88e518b1178dfb5212db65878b664598b2d16dff16951d5dd764fd8a6c5bb161e57f784a3b478d7e23b3e2d46f452be3737428bcd169ecd59d662b3c5778cd750a9b8d8d4082d3659783665598b4d16dff169519d3ad7dad8082d365a783666598b8d16dff169519a3aa66e6884161b2c3c1bb2acc5068bef18e322753db9be115aacb7f0accfb216eb2dbe633c8ea4e2625d23b45867e15997652dd6597cc7a7454deafed3da4668b1d6c2b336cb5aacb5f88ef19e4b2a2ed634428b35169e3559d6628dc5777c5a744b1d535737428bd5169ed559d662b5c5777c5a8c4a3d135bd5082d5659785665598b5516df319e77a6da8b958dd062a585676596b55869f11de37967eafec58a4668b1c2c2b322cb5aacb0f88eb1ed4c9d772e6f8416cb2d3ccbb3acc5728bef18cf3b535abcd3082ddeb1f0bc93652ddeb1f88ef1bc33751c79bb115abc6de17135064a94166f5b7cc71817a9b6735923b45866e15996652d96597cc7785f2bd5762e6d84164b2d3caec66b88d262a9c5778cd723a97b7c4b1aa1c5120bcf922c6bb1c4e23bc66745a973f0c58dd062b185677196b5580cbef7c6ee3bdd9f5b7c485fac0b0c2d0aa1cca91dd3bfd2172b4a475907f62bc3babc157b5dd2fdca1645d4e52da88b943913ead22670324651b9a3baa662e64da8935aef4796ba4a99733bd6e9d259e713b04d3e06ddfa58fe2f5381319f84bce8a7eafc7afc754ec5ea6bc099043fe8fb55608dc97757f45da093f8117b21e47b77ac2b2be5440fd15ad8d53ef286ce23bbb9dc6263b96228f386a5fec920defabf6ef0bc6e30a7de7b8038933872d376a599de88d0e802d048ca609fbd8f1cf1987d088543fca932b2fd5b1b65b00fa594b908da28ec572af54c0407f69b74d49675457659b7cc8bbf62b0ed0546b38e2a3e3e83be9f3256848c23a16c322e4437584f4fc3a6eadacb515dc597ac5be67b01a38c53d133fb8c658d65ec61302a9e3e0e34c3b137646ae878d107787a3be07154cfd471a8c2a8532fa34ec55006df6dac7050cf02f02beb96f90af0ed629ba316724c3ed7d0a210ca0c37ce1fa3749475a8f8ed69a94b3fc77591754bbbd42f0bbe2b0ddfdd0ddf89a0fe760e8286f7af4a60eeeb8059adb77ffceb2dc5f3368929f1d31dea34003488ab4eb82e39cf1b60685b08f9a9709e27e5a4ac1cbf845dc5b26c4b643797eb632c570c65fa59ea9f0ce2ad7f7f83a7bfc1acb6c9dd706ee7607f48c5403f8343e6bb8376fd23b4eb07da49193cfef570a45d5f8347e67b008f9ce354804dce15843f01ffef96056eb3ddabb0708b0dc789eb6161ec1e3f63ea5ca787c128f3dd81516c7d81a7d29166e6b63ed7d0078fcbad8d32b26c21949905c7c684a5acdaef3a15d4d5aba5b6c7f6ee986ed35b3bd00bc7690c409fc0d03000bda49ead1cf0b40deac66a9c3ca576d288bb46dd382afde851d00a0d4cfc2db054a305d830dfd2620b82fa435216824d86a46c05b616862c3814a6949721ed5cc8857ac8ba0b0dce36c012a76f1cce53a68642e730e07111ca2a7464484f1d3ab74e1a336514c6472b83b329b1a3fed7b2817251eb72b51dcc7d2209f3660c163af2df12ea9b8479f1a7b68d0cad3a61c4c87b064cba6beab851e3a74c46a1cc1d1bf30541fd0d60fe4609ee6aa7c300c00a63e3d0caa8173618f23fd9306de3e72cc731734d6d02f027535bd0ed7007baa9f5cbd8b723478c1d7bfdd4aab163465e3675fcc829636ac7e3d66c632817b5a5e5ffadc1666be2b1ac9ab0d9c2650fb3d86c138e32dc066c72e43a1c6cc2d3166c2d212fe5cd2de3245c3bc1fa659752ff53e2b4d2153f2ca80b01391cab7655edbfea544e7d42569d0aa9a18dd5e6544317ab3b866a6862f5153b35f4b01a6a580d2d7c62901e3a580d157c4a901e0a587deda224480fed7b7a901ebaf7cc203d34efd9c0f76d603e27489f76a9a1753b07e9a173d5adcb2e41fa336feadd7a75faae6e0ba8535e7589a74e3fd569a7babc50b72fd4ad2c754aa74e97d5a9a03a7d539723fdb5d603c27451982e0ed32561ba344c9785e9f2305d11a62bc3745598ae0ed335611a18a66bc3745d98ae0fd30d61ba314c3785e9e6203dbcf32d417af87535fcf36d417a68e8db83f4b0d17704e921a5ef0cd2c34d8f08d243518f0cd2c3548f0ad24358df15a487b71e13a487c9bd27480fb5ab86e01d1fa487c356c364abe1b3d530bf6a486035a4b01a6a580d4bac8630564320aba1911f08d2432eab219b1f0ed2c33e4f0fd3a3617a2c4c8f87e989303d19a6a782f4f0e06ad8f019417a987135fcf8ec203d5cf9dc203dbcb91af65c0d87ae864957c3a7ab61d5d530ef6af877352cfc4b617a394caf04e94712ea518c7a44a16effabc760ea16f55b41fad6f99220fd885b3df2575d20549710d545664590ee42a5ba94a92e76aacba1ea82a9baa4aa2ebaaacbb2eac2adbab4ab2efeea9507f50a887a2546bd22a45e9952af90a957ead42b86ea3551f5daa57a8d58bd56bd2748df16df17a41f95aadbe1ead180ba65ae6edf7f1aa66f05e998fc4e98be1ba6ef85e9fb61fa41987e18a4873556c31dabe192d5d0ca6a18663564b31aca590d05ad868dfe2c480f3dad86aefe6d901e12fbf761fa3c4c5f04e9e1b5bf0cd31fc3f45598fe14a63f87e92f61fa6b98fe16a67f09d3bf86e9dfc2f4f730fd234cff0cea86d9c686e444ddfae82b9860c49429a3c64d985232a5b664dcd4b153c64c187b7fc9b431534697d4de3b6a52cdd8da69b8f0b7f5c23246f880499346dc5f32667cf5a8fb4a6aa74e29a9ad29a9aa9d3abebade41fc2f7aa1930ff438a2ba3adad97f7e13d2ffdb44a787eb7651465fbfb2e1ba1dd1b209821cd994857ab46c5a8526e923985ceade943e0f2e993cb6764a4969c9f8f06f78e0ad9d36aaba4b09fe6f7228f2e4292593a78c9834a5a46652edb892ae5d70bd8fb46d4225feabad1b98b34e6c9a389df477969a1462bf3cad090afcc7694d236d5df20d48db9634cd694949136a78765316baaa8984379744ca32796ad5944923464e895ef8b66fb2f09d4da9e6f82656f3948e4d70764653161ad0b169847736c5d9cc0c9c05ff0dcac800708c550600", + "bytecode": "0x1f8b08000000000000ffed9d779815c5b6f67b6040643b0398b3830915c56118e20c3098136614111186610405862866cc9283392341c95940401010c3c93979921e8f27dd7bcf39cffde37ef77ec1ef76ed5debce3b45f566f6d8b579f7eceae7a9d9d56baa7bfdeaedd5d5a9baab20484dff0c5381ceb70cd399c18193fcbf4aff967eb3a96b8ceb2a75c95990239c2d7284b3658e7016e60867ab1ce16c9d239c87e508679b1ce13c3c464ec5d6226838c5cddbd681ae713326724cd3237240d3a21cd3b43807346d17e4461bd53e47383be408e79139c279548e701e9d239cc7e408e7b139c2795c8e701e9f239c27e408e78939c279528e709e9c239ca7e408e7a939c2795a8e7096e40867c71ce13c3d4738cfc811ce337384f3ac1ce13c3b46cecec0d949ff9ea37fcfd5bfe7e95f297bbefebd40ff76d1752cd4f3172aae30a9873465c6ffba85a93c4cddc3d4c3f85fcf30f50a53ef30f5d1ff2bd1ffab08536598fa86a95f98fa6b0d0684e9a2305d1ca64bc27469982e0bd3e561ba224c5786e9aa305d1da66bc234304cd786e9ba305d1fa61bc27463986e0ad3cd611a14a65bc2746b980687e9b6300d31586e0fd3d030dd11a66161ba334cc3c334224cd5611a19a69a308d0a536d98ee0ad3e8308d09d3dd61ba274c63c3342e4ce3c35417a609619a18a649619a1ca629619a1aa67bc3342d4cf785e9fe303d6068f660981e0ad3c3617ac4e09c1ea647c3f458981e0fd313617a324c4f85e9e9303d13a619619a19a659619a1da639619a1ba679619a1fa605615a18a667c3f45c989e0fd30b617a314c2f85e9e530bd12a657c3f45a985e0fd31b617a53b3c88eb0284c6f8569719896846969989685e9ed30bd13a6e5615a11a695615a15a6d5615a13a6b5615a17a6f561da10a68d61da14a6cd617a374c5bc2b4354cdbc2f45e98b6876947987686e9fd30ed0ad3ee307d10a63d61da1ba67d61fa304cfbc3f451983e0ed32761fa344cdf0ad3b7c3f49d307d374cdf0bd3f70dcd7f10a61f86e94761fab1b6fd44fffe549795fb773f0bd3cf75fe17faf797faf757faf73363995f87e93786edb761fa9d61fb7d983ed7f92ff4ef1ff4ef97faf78ffaf72bfdfb27fdfb67fdfb17fdfb57fdfb37fdfb2ffaf75ff5efbfe9dfbfebdf7fe8df7f866973c754be4d503f550531b551e5b5c9673f227ea7a0e1a4b468a9ff27bf25da5ea8e7e557b46ba5e75b19f6d67abeb5b19e367abe8d61efa0e73b18f6a3f4fc5186fd183d7f8c613f4ecf1f67d8cfd4f367823d11c0bd616d57b696da54003689d716606ba56d2dc1d65a5607b6c3b4ad15d864fbb606dbe1da7618d8da6a5b1bb025b4ed70d1324c47685b551057ac948e50eb2d8a7bbdfa795971fcbc23d57adb39e26d1f3fef28b5de0e0e78557c1ca9d7d51ee2e6286deb00b6a3b5ed48b01da36d4781ed586d3b1a6cc769db31603b5edb8e05db09da761cd84ed4b6e3c17692b69d00b693b5ed44b09da26d2781ed546d3b196ca769db29602bd1b653c1a69bdce034b09dae6d25603b43db3a82ed4c6d3b1d6c6769db19603b5bdbce049bb4bf67814dce17cfd636d5761c5e00cb68bbb45bc965a4cd06dbb9d25e83ed3c69abc1d659da69b09d0fbec57601b43562eba26dd26ea9fff5d1f9aa20aefda4ac56adb722eef5866b56ebed1bff7a93cf1cfb05f55a57819f0ad0aabfcec7d8afa92bfa2ed049fc88bd10f257415929277ac8b147d8d5b1a052e7fba759ae8fb15c3194a9b4d4bf2a88b7fe7d0d9ebe06732bc8bb89d96edd7ccc367aca386607435933f6e43ca839c6ec40e07010b33d7dcc367aca38666ba1ac197b722edc1c63f676e07010b3d56e62b6acd4c76ceabe5910d8634fae879a63cc8e018ef863b6bb8fd9c64f19c7ece350d68c3db9266e8e313b0d38e28fd99ed5fedca0d153c631bb00ca9ab127f7679a63cc3e051c0e62b6d6b7b38d9e328ed937a1ac197b72afb039c6ec73c0117fccf67614b3dd7ccc06a967a041608f3db96fdd1c63763170c41fb323fdfdd9c64f19c7ec0e286bc69e3c43698e31bb5ee7d573869fe8e70c2783eda7da760af0c61fdb35dd1dc576998fed54df9020b0c7a83ccf6b8eb1fd81ceab38fe05f44710db2fb5ad23d87ea56da783ed336d3b03eae5601fa8f6fb40a3a78cf781df40593396e5d97273dc077e041c0e62b6c6c76ca3a78c63f66f50d68c3de9e7d01c63f6f7c0e120666b7dcc367aca3866ff13ca9ab1778ece37c79895bea6ea7ce10b7dbe701ed8fea06d9dc1f6a5b69d0fb63f6adb0560fb4adbba80ed4fda7621d8feac6da560fb8bb67505db5fb5ad0c6c7fd3b66e60fb176d2b07dbbf6a5b77b0fd9bb6f500dbdfb5ad27d8fea16dbdc0f64f6debad6daa9f9ef4bd92f3d636c05f15c4bb6da5dfa5ac5be6bb66c1773bc377bb2cfaee60f8ee60f15de6c077027cc85460cc5741becc2d4f6931f0a0aff2f87d755375ef1634beeee5c0d3dd41dd13e0a3313cdd81a747fc3cc9febf3de35f6f721b7733344d80af6e50af5e0eea5500be64dd322ffe8ac1866d6b2f0b63eff819cb0ac097ac5be67b03a3d8b0ad9777ae64ff51c7c34e05f5bc0ef6a5e43991f893ef96094739d8a5cc951debd93a6bb622f83f1ef77a18364771998c0bf125eb9679f15704f5e9917dc6b2c6327637185db51105e04bd6ed7dd76f07c9e371dcc1b58eb54d13df1559f0dddbf05d6ef8c6b653a674c7b6dec01cfb35a73eb655c6bfde52bc3e916b43f183e70f780d17579dd0b75c1b8a1fb11742feda82fab2524ef4907658d8552ccbb6447673b95ec672c550a6c252ffaa20defa571a3c9506b3da2617c3b1d0c1fe908c810a8343e6cb41bbca08ed2a403b29730e68e7aa3deb63f0c87c0fe09176ac27f0b8ba268ae2c9c6f5d8c17ce3392c5e3fcbfff13cc0d5f6ea6a30cabc6d7bf50646dbb98a83eb99b4e72add81516c7d80a79b23cda2b66b3712df0e6225d91e890f393797fdb707d8a54c6ffd429d6a2bef86b6d2458c603ccad4d86bdef8b75359f21abc7b063cb8ed1c5c577575148fa578ffe6eb20de5833dba5ee865651f7785cb5e5dd0c1e99177f9ed9337b66cfec993db367f6cc9ed9337b66cfec993db367f6cc9ed9337b66cfec99f999f17912f6db92723d4818cdfe6faeeef327bf7fa8d725eb57cf75fe8fd3fe6065a5d83f46fa419c67d4b910ca14b5a82ffbffa13f98f99c0afb48f670ab5d725b627fcc2a98177fd8d70ab725437fa792d87c978d74f5bcad5dd0b0af9cb99fa2a62efa3fa3a60586a6d81fff7c8347c56965cb7a3617cffe327d16895a493ece677bc5813dd6e3df2e650d9e59b7081ab61f789c71d57f47da6a795e5e61f82e843227b5a8df36d2b74ac618ee662c87fd7e64ddb2cc7960af34d6dd5e2f2b1cad8cf5f78465a5cca9d0a6ee6d51af9983b6b22cd3beebf8dc3cfee370ea397eb70c78ba028f8b76c6d1f94629ee03713fc737fba7d9ce63a40cf6ed73d0af326d7f27f1e7993db367f6cc9ed9337b66cfec993db367f6cc9ed9337b66cfec993db367f6cc9e999f59f198cf5af1fdda7212c62cf57d483ecf906f95c9fa93df0b6e51efd7f5733879e6d4d9a833be3bfacf16f56537eb7c5170607f87a86de9eafb1451db52fce1b767f059908be7ba05e04bd65d66d142f225b1f94e3dc7773136843cc7ef66e85a6ed1d4d5fe8acf585153dc5fbb1b3cf86c34eadb3e6586cdd13e9e362ec41fee4b6560933cbe1fed623be3b1c4ecd723fef0f9f577b4b6ed0357dbbeacd465bb81df4da90a0e8c6ffc9eca0fa1edfbb1ce631f0eec3bf285e5ff32a57b4e2dfaa93a3bf8be666901ac4bb6afeddb9e03803526df5d715d053a0d30342884fce72deacb4a39292b5a0bbbda47e41b30c86e2ed7dd58ae18caf4b3d4bf2a88b7fee6b756fb1bcc6a9bfc0ce2ec0b38febb6a93fa4568741e6824651c7fb3d1dabfd2ec5788ed686ba38c2c8bdfa2fb2bb45151fd476dc700d7c73159b7ed38661e171ad3cf33dffb69fd17b41771f7d3fa2f8821eca71518ebef0ceb17aed641f4b145cafc3f63fde639b92c83fdc0fe673f81efb994e97c26e7e487eafaca764e8ecb45d55d31e377d0aa6264c69840163c4f90326db5d6b2cd2a23b87b5b962d8a5856b432bf1556141ca89f9befaca5f6f9fe465d24aef11be452e628a88b9bf396d439a0ab6fca55419d54becc525729733cec6b27ea7c02b613eeb7e75afe2f53ba73401cc3fda2f8eb9cdcbe17036715f841df97006b4cbebba26f3907143f622f84fc392debcb4a39d143b41676b58fc87914b29bcb5518cb1543990196fa5705f1d6ff2283e72283596d935320cece857ee8aedaea01111a75068da40cde53b47d07d476afc3d5fb1b51e752f8fe92797e85c74937e74df6f358f3be9aed1ca1b3c18fe7083da19d4d58ca9af70be5781967bf617c57a227f8c577255c7dbbb90fe85605f3785e70287dbbf88eadf2173566429f2cf88e1a33211bbe3b18be3b64d1b7d7dc6bcea4b983310892ef9fe1374bd594eebc14c72590e55a00a38bb11c1241c36f8f1f8c11c77790e55a02a38be343a6df3eef098cb25c2130ba78b714c7df680c237e63188ff3c2e8e05bb15d9bfaad58bca7d71a1899ded9c467538701a38bf3e2a6beab87e7f36de0d7d5b844dd32602c034659ee706074716f1caf651ac388d745b25c5b6074f10c2bd3f19df0dbf3786fd92563ba63bbe3be286599de7ba974cb93f65c037d3b18d730a905de673c98167dddf2a43df741df0eeefb25b5c071060fa6053e1b7431ee612268f81cee603cf8fc52963b1218ab1c31f6cf80b10a18ffe75e31300e70c4589501e3006014fbd1c0e8e0fe6b927140068c789f52963b06182f76c47851068c1703a32c772c30bab8979a00bf8d61bc041865b9e380f152478c9764c0782930ca72c703e3658e182fcd80f1326094e54e00c6cb1d315e9601e3e5c028cb9d088c573862bc3c03c62b8051963b0918af74c47845068c5702a32c7732305ee588f1ca0c18af024659ee1460bcda11e35519305e0d8cb2dca9c0788d23c6ab3360bc061865b9d38071a023c66b32601c088cb25c09305eeb887160068cd702a32cd71118af73c4786d068cd701a32c773a305eef88f1ba0c18af074659ee0c60bcc111e3f51930de008cb2dc99c078a323c61b3260bc111865b9b380f126478c3766c0781330ca726703e3cd8e186fca80f16660bcc9c238c811e3cd19300e024659ee7c60bc257ec6e4b5f4a00c186f019e5be3e7496a764b063cb7bae5497e57ef168bafdbe2f795dc168383c6d7fd36e019123f4f725bdc96018f3014c372a8d9edf13326351b9201e3edc033347e9ea466b767c0331434bbdda2d91df13326351b9a01e31dc0332c7e9ea4667764c0330c34bbc3a2d99df13326351b9601e39dc0333c7e9ea4667766c0333ca8d7ec4e8b6623e2674c6a363c03c611c0531d3f4f52b31119f0548366232c9a8d8c9f31a95975068c2381a7267e9ea4662333e0a901cd465a341b153f6352b39a0c1847014f6dfc3c49cd4665c0530b9a8db2687657fc8c49cd6a3360bc0b7846c7cf93d4ecae0c784683667759341b133f6352b3d119308e019ebbe3e7496a3626039ebb41b33116cdee71c47877068cf75878e2fe4ef6dd165fe31cd57d6cd0f8ba0b43312c87fd24c63b621c9701e3786094e5b09f449d23c6f11930d601a32c9770cc98ae9f441df89e10bfef64bb5417345e9f096e79d2f69340df131d69312168bc1613ddf2a4ed2781be2739d26262d0782d2601cf64075a24c047637884a11896c37e12531c314ece80710a30ca72d84f62aa23c62919304e0546590efb49dceb88716a068cf702a32c87fd24a63962bc3703c669c028cb613f89fb1c314ecb80f13e6094e5b09fc4fd8e18efcb80f17e6094e5b09fc4038e18efcf80f1016094e5b09fc4838e181fc880f1416094e5b09fc4438e181fcc80f1216094e5b09fc4c38e181fca80f1616094e5b09fc4238e181fce80f1116094e5b09fc474478c8f64c0381d186539ec27f1a823c6e919303e0a8cb21cf69378cc11e3a319303e068cb2dc3d8e19d35dbf3cd6cc7d475dab3477df51d725cdddb78f731fe7f9e0dbc7b98ff37cf0ede3dcc7793ef8f671eee33c1f7cfb38f7719e0fbe7d9cfb38cf07df3ece7d9c33f97edc81ef04f890a9c098af82bc3014c372f778c666cd883c25f1f19462ddd1d71304757fc2c253e0a8eee8eb4982ba0b43ae313e9e038cf7e400a3d731d507b1298c8ae729473c4f66c0f314f03ced88e7a90c789e069e67e2e749c6d4d319f00843312c774f0e303e9e038c5e47af2313a3d7317f74f48c9ed1337ac643c1980b6db867cc89782c6b2aa3e299113f4f52b36732e099019ac972b7ba652c6b2aa3e299193f4f52b31919f0cc04cd66583473c058d65446c5332b7e9ea4663333e099059acdb468e680b1aca98c8a6776fc3c49cd6665c0331b349b65d1cc016359531915cf9cf879929acdce80670e6836dba29903c6b2a6322a9eb9f1f324359b9301cf5cd06c8e4533078c654d65543cf3e2e7496a3637039e79a0d95c8b660e18cb9acaa878e6c7cf93d46c5e063cf341b37916cd1c3096359551f12c889f27a9d9fc0c78168066f32d9ab132de93038c8fe700a3631dcb9acaa878163ae2599001cf42e079d611cfc20c789e059ee7e2e749c6d4b319f00843312c774f0e303e9e038c5e47af2313a3d7317f74f48c9ed13366c6f8440e30fa6ded1959191d5c5fa57d87e6d966ee3bea1d9ae6ee3bea1d9ae6eedbc7b98ff37cf0ede3dcc7793ef8f671eee33c1f7cfb38f7719e0fbe7d9cfb38cf07df3ece7d9ce7836f1fe73ecef3c1b78f731fe7f9e0dbc7b98ff37cf0ede3dcc7793ef8f671eee33c1f7cfb38f7719e0fbe7d9cfb38cf07df3ece7d9ce7836f1fe73ecef3c1b78f731fe7f9e0dbc7b98ff37cf0ede3dcc7793ef8f671eee33c1f7cfb38f7719e0fbe7d9cfb38cf07df3ece7d9ce7836f1fe73ece997c3f1fbfefb24cbf31f33cf0b8f8e68da37a96aaf5bea0d7f5758cfa29ad5e34b47ad6d0aa18cabc00fabde840bf02f02beb9679f197297327026647becbda050df76bf1f1b8a1872af392a3ba47b5f52f3573df516d7d73f71dd5d63777df3ece7d9ce7836f1fe73ecef3c1b78f731fe72cbe31df2aa83f6f97ef9faa75bcacf3857a5eca3f01762933f9b0d46ffbc0ef432e7cfb7dc81f2bf2c1b78f731fe7f9e0dbc7b98ff37cf0ede3dcc7793ef8f671eee33c1f7cfb38f7719e0fbe7d9cfb38cf07df3ecef9e2bc18fe5f99059ec0e009d2f02c20e3994ac6339b8c673419cf50329eebc8782e26e379888ca79c8c670219cf48329e5bc878ae22e3b9908ca71f19cf34329ede643c73c878ee26e3799a8c671819cf0d643c9792f13c42c65346c633898c671419cf6d643cd790f15491f1dc4fc6d3938ce75c329e71643c73c978ce21e3194ec6f30c19cf4d643cc5643cedc8782e27e379928ce702329e0a329e47c978e693f14c21e3b98b8ce776329e52329e6bc978ba90f15c44c6f320194f77329e79643c75643c33c878aac9780691f19c47c67325194f4b329ebe643c0bc978ee25e3e943c633868ca73319cf1d643cd793f15c42c6f330194f37329e89643c33c9786ac8780693f15c4dc6d39f8ce73e329e5e643c63c9783a91f1dc49c67323194f36be679a09cf11643c45643c9791f13c46c6339d8ca72b19cf64329e59643cb5643c43c8780692f10c20e379808ca70719cf78329e11643c3793f13c45c6d39e8ca70319cf15643c05043c89e0c0314c12f0ffe7c1d6c258567df6754ec7faffbfa2ed2d60995775bea565ddaf804dbe25fbaa6559d4e915a84b95ce977eb329a913faaa8279f157041caf92f05c41c6d3818ca73d19cf53643c3793f18c20e3194fc6d3838ce701329e01643c03c9788690f1d492f1cc22e3994cc6d3958c673a19cf63643c9791f11491f11c41c6f33c19cf8d643c7792f17422e3194bc6d38b8ce73e329efe643c5793f10c26e3a921e39949c633918ca71b19cfc3643c9790f15c4fc67307194f67329e31643c7dc878ee25e35948c6d3978ca72519cf95643ce791f10c22e3a926e39941c65347c6338f8ca73b19cf83643c1791f17421e3b9968ca7948ce776329ebbc878a690f1cc27e379948ca7828ce702329e27c9782e27e36947c6534cc6731319cf33643cc3c978ce21e3994bc6338e8ce75c329e9e643cf793f15491f15c43c6731b19cf28329e49643c65643c8f90f15c4ac6730319cf30329ea7c978ee26e39943c6d39b8c671a194f3f329e0bc978ae22e3b9858c672419cf04329e72329e87c8782e26e3b98e8c672819cf68329ed9643c53c9781690f1545a789e77c423efbbcbba65fe7912df0eb643a95aef6b8eeaf4ba5e572bbd5ee1177f8550667adbd4af7a3f1c97152ef3fb04f86eceeba0d1eb8eea22dba3c0d83ee8fb6547bee51d2d59b7ccbfdccc7db7337cb7cb13df1d0cdf1df2c4b78f731fe7f9e0dbc7b98ff37cf0ede3dcc739936f07d70665f89d34990a8cf92ac8e3f5828befcb39aa6783ebc4af63d44f69f586a195796d550c655e03fdde70a09fedda53e6c55fa6cc9d0898312e4a8278e3e2cdf8eb54d62e68d85ebc69e88bf55ae448d3a863c8a266ee3bea18d2dc7d471d439abb6f1fe73ecef3c1b78f731fe7f9e0dbc7b98f7326df6fe97c8cd78da5e8433d5f94eb81b7c0ef129d2f88d1af5ad762bdae42bd6ee158027629f3bfe1b9a6dfe7fd3e1f976f7f6cf3719e0fbe7d9cfb38cf07df3ece7d9ce7836f1fe73ecef3c1b78f731fe7f9e09b39cecdbcf4173f07d85cf5e78f8ac56cbc4b70287d47c56273f71d158bcdddb78f731fe74cbe973af09d001f32a5ebe3b71478163be07154cfe4b38d65469d9e37ea540c65f018bfcc413d0bc0afac5be697018f4c95c0e3220e1ab3cd91670119cf54329ed9643ca3c9788692f15c47c6733119cf43643ce5643c13c8784692f1dc42c6731519cf85643cfdc878a691f1f426e39943c6733719cfd3643cc3c8786e20e3b9948ce711329e32329e49643ca3c8786e23e3b9868ca78a8ce77e329e9e643ce792f18c23e3994bc6339c8ce719329e9bc8788ac978da91f15c4ec6f32419cf05643c15643c8f92f1cc27e39942c6731719cfed643ca5643c8bc878ae25e3e942c6731119cf83643cddc978e691f1d491f1cc20e3a926e31944c6731e19cf95643c2dc978fa92f12c24e3b9978ca70f19cf18329ece643c7790f15c4fc6730919cfc3643cddc8782692f1cc24e3a921e3194cc6f30619cfd5643cfdc978ee23e3e945c633968ca71319cf9d643c3792f11c41c65344c6731919cf63643cd3c978ba92f14c26e39945c6534bc633848c672019cf00329e07c8787a90f18c27e31941c6733319cf53643cedc9783a90f15c41c65340c093080e7cf73f01ff7f036cf28efaf3607b5be71783ad85c5474b9d5f06b6429d97751c16a6973a1eb86ed4c9d57bf9e8ab0ae6c55f1170bc4dc27305194f07329ef6643c4f91f1dc4cc633828c673c194f0f329e07c8780690f10c24e31942c6534bc6338b8c6732194f57329ee9643c8f91f15c46c65344c6730419cf8d643c7792f17422e3194bc6d38b8ce73e329efe643c5793f1bc41c633988ca7868c672619cf44329e6e643c0f93f15c42c6733d19cf1d643c9dc978c690f1f421e3b9978c6721194f5f329e96643c5792f19c47c633888ca79a8c6706194f1d19cf3c329eee643c0f92f15c44c6d3858ce75a329e45643ca5643cb793f1dc45c633858c673e19cfa3643c15643c1790f13c49c67339194f3b329e62329e9bc8789e21e3194ec633978c671c19cfb9643c3dc978ee27e3a922e3b9868ce736329e51643c93c878cac8781e21e3b9948ce706329e61643c4f93f1dc4dc633878ca73719cf34329e7e643c1792f15c45c6730b19cf48329e09643ce5643c0f91f15c4cc6731d19cf50329ed1643cb3c978a692f12c20e3a9cc0e4f997ab75dfa5a07c0855315e49701cf2207fa38aa67297ed7e0eb18d7abb47ac7d0ea0d43ab6228b314f47bc7817e05e057d62df3e22f179915cf633a6ffb0ec463248c625be49627b9df3e16349cd2edb7ef008f8b76cd513d93fbd772a34e8f5974973218abcb1dd4d3b6efc8fc72d80eb9c6ac789ed479614d40b9274918c5b6cc2d4f72ff7a326838a5dbbf96038f8bf6c7513d93fbd70aa34e4f5a74973218ab2b1cd4d3b6efc8fc0ad80eb9c6ac789ed279614d40b9a74818c5f68e5b9ef204d459a674fbd70ae071d1fe38aa6772ff5a69d4e9298bee52066375a5837adaf61d995f09dbc1337b661bb3e291673bc29a80724f93308a6db9539ef2d204d459a674edd84ae071d1ce3bd23dd98ead32eaf4b445772983b1baca413d6dfb8eccafb2f82e09e2d5627523b4586de1599d652dc45fa6cc4b7390d9ebec758e62f63a7b9da398bdce5ee72866afb3d7398ad9ebec758e62f63a7b9da398bdce5ee72866afb3d7398ad9ebec758e62f63a7b9da398bdce5ee72866afb3d7398ad9ebec758e62f63a7b9da398bdce5ee72866afb3d7594d5e67afb3d7d9eb1c07b3d7d9eb1cc5ec75f63a473133e8ac78e4db95c29a8072cf90308a6d855b9ee47b41cf040da70263be0af2ab8167a5037d1cd533d9877c8d51a7672cba4b19dcbfd638a8a76ddf91f935b01d32615e9583cc5ee7a6312b9e193a2fac0928378384516c2bddf224dbb11941c3295d3bb606785cb4f38eea996cc7d61a759a61d15dcae0feb5d6413d6dfb8eccaf85ede0993db38d59f1ccd479614d40b999248c625bed94a72cf97ee3cca0e194ae1d5b0b3c2eda7947ba27dbb175469d665a74973218abeb1cd4d3b6efc8fc3ad80e9930afca4166afb3d7398ad9ebec758e62f63a7b9da398bdce5ee72866afb3d7398ad9ebec758e62f63a7b9da398bdce5ee72866afb3d7398ad9eb9c3f3a2b9e593a2fac0928378b84516c6b9cf2744b3e779815349cd23d7758073c2e9ecb38d23df9dc61bd51a75916dda50cee5feb1dd4d3b6efc8fc7ad80ecd9d79550e32fbd8c80eb38f0dcf1cc5ec63c3334731fbd8f0cc51cc3e363c7314b38f0dcf1cc5ec63c3334731fbd8f0cc51cc3e363c7314b38f0dcf1cc5ec63c3334731fbd8f0cc51cc3e363c7314b38f0dcf1cc5ec63c333473133c486e299adf3c29a8072b34918c5b6d62d4ff2bb07b3838653ba7e3beb81679d037d1cd533d96f678351a7d916dda50cee5f1b1cd4d3b6efc8fc06d80e9ed933db9815cf1c9d17d604949b43c228b6756e7992edd89ca0e194ae1ddb003c2eda7947f54cb6631b8d3acdb1e82e653056373aa8a76ddf91f98db01d3cb367b6312b9eb93a2fac0928379784516cebddf224dbb1b941c3295d3bb611785cb4f38eea996cc73619759a6bd15dca60ac6e72504fdbbe23f39b603b7866cf6c63563cf3745e5813506e1e09a3d836b8e5294b409d654ad78e6d021e17edbca37a26dbb1cd469de65974973218ab9b1dd4d3b6efc8fc66d80eb9c6ac78e6ebbcb026a0dc7c1246b16d74cb93dcbfe6070da774fbd766e071d1fe38aa6772ff7ad7a8d37c8bee520663f55d07f5b4ed3b32ff2e6c875c63563c0b745e5813506e0109a3d836b9e549ee5f0b828653bafdeb5de071d1fe38aa6772ffda62d4698145772983b1bac5413d6dfb8ecc6f81ed906bcc8a67a1ce0b6b02ca2d2461141b1e2f163ae22932788a2c5a1c2adf4a8b0a9d3f42ff26e0ff15c0e8aa3d5c6830ca3cc6b8d88ab2a0593b83a79da1d9a1f4adb4a884bc9a707b550223c3f66a9705cd3a183c1d0ccd0ea56fa5455f9d6faf7f717bf5054686edd501781cb4cfe50983474de9ce37b638d6c7513d93e71b5b03bbee781c923278ecdeeaa09eb6730999df0adbc1337b661bb3e219a4f3c29a8072834818c586d729dbe2e7294f183c6a4ad78e6d73ac8fa37a26dbb1f702bbeedb40772983b1fa9e837a16805f59b7ccbf07db2113e65539c8ec756e1ab3e219acf3c29a8072834918c5b61578b6c7cf539e3078d494ae1ddbee581f47f54cb6633b02bbeedb41772983fbd70e07f52c00bfb26e99df01db2113e65539c8ec756e1ab3e219a2f3c29a8072434818c5f61ef0ec8c9d27351e10f2a8295d3bb6d3b13e6eea996ac7de0fecbaef04dda50cee5fef3ba86701f89575cbfcfbb01d3cb367f6cc9ed9337b66cfec993db367f6cc9ed9337b66cfec993db367f6cc9ed93373332b9ea13a2fac0928379484516c3b806757ec3ca9e70ec8a3a674cf1d7639d6c74d3d53cf1d760776dd7781ee52066375b7837a16805f59b7ccef86ede0993db367f6cc9ed9337b66cfec993db367f6cc9ed9337b66cfec993db367f6cc9e999b59f10cd379614d40b961248c627b1f783e889fa73c61f0a829dd73870f1cebe3a89ec9e70e7b02bbee1f80ee520663758f837a16805f59b7ccef81edb0c7337b660bb3e219aef3c29a8072c34918c5b61b78f6c6ce937a7e8a3c6a4ad78eed75ac8f9b7aa6dab17d815df7bda0bb94c158dde7a09e05e057d62df3fb603b64c2bc2a0799bdce5ee72866afb3d7398ad9ebec758e62f63a7b9da398bdce5ee72866afb3d7398ad9ebec758e62f63a7b9da398bdce5ee72866af73fee8ac78aa755e581350ae9a84516c7b80e7c3d879ba95260c1e351518f35590ffd0b13e6eea997aeeb03fb0ebfe21e82e6570ffdaefa09e05e057d62df3fb613b3477e65539c8ec63233bcc3e363c7314b38f0dcf1cc5ec63c3334731fbd8f0cc51cc3e363c7314b38f0dcf1cc5ec63c3334731fbd8f0cc51cc3e363c7314b38f0dcf1cc5ec63c3334731fbd8f0cc51cc3e363c7314b38f0dcf1cc5cc101b8aa746e7853501e56a4818c5b60f783e8a9fa73c61f0a8a9c098af82fc478ef57154cf64bf9d8f03bbee1f81ee5206f7af8f1dd4b300fccaba65fe63d80e9ed933db98154fadce0b6b02cad592308a6d3ff07c123f4f59c2e05153ba76ec13c7fa38aa67b21dfb34b0ebfe09e82e6530563f7550cf02f02beb96f94f613be41ab3e219adf3c29a8072a34918c5f631f03888bb244f91c123f39f10f8565ad4e9fc11fa17b7571d30326cafa22c68d6cee069676876287d2b2d26405e4db8bd260023c3f66a9705cd3a183c1d0ccd0ea56fa5c5449d6faf7f717b4d044686edd5210b9a1dcaf6f050eedb87324ebde6874ef38243a879c121d4bcc06b4ea5b983e34b191ecb0260c0a90af29f02cfb7e3e749de97fb34039e6f03cfb7e2e7e9eaa89ea56abddf01f6b8d6abb4faaea1d5a78656c5500619beeb40bf02f02beb9679f1e7993d7314339edb0a6b02ca7d42c228b66f018f8b7643d5fd02bd2e597fab307d7674bd5f17cf4bf05e712bbd5ee1107f85506662497dd9df69b622f8bf6c37559ffd86cdd13bcc5d6dcfed645efc150559bb779bf65e326ae1e27953a6c7fdfd169eafe3e329c5fd1c7ded7354f74c9efdedb3f0c458f7ae51cf3df7c65ff764fbd145af4bd6aff6d17f3fdaa9e6e5b8ef49fbd1c5a87321941958525ff63fa0fdb0b515aef74d392737f7cd16417d7b265c25da6e3e13fa5adba5dc47501edb9c0afd8bfb6705d4d555bb18758f09db45b3ed76a9bdf95cd2f45d0cba7c44aa99ed3905ea5869e1ae24e0c678cce67e26ebb63d23ab347464d30cb7f547161dfb5ab8fb127033eed77d0d1dd9343bd87e3dc8c23d88809b71bf1e64e8c8a6d9c1f6ebc116eec104dc8cfbf560434736cd0eb65f0fb1700f21e066dcaf87183ab26976b0fd7aa8857b280137e37e3dd4d0914db383edd7c32cdcc308b819f7eb61868e6c9a1d6cbf1e6ee11e4ec0cdb85f0f0f1aeac8a6d9c1f6eb6a0b77350137e37e5d6de8c8a6d9c1f6eb1a0b770d0137e37e5d63e8c8a6d9c1f6eb5a0b772d0137e37e5d6be8c8a6d9c1f6ebd116eed104dc8cfb7563fbedb3eed77516ee3a026ec6fdbaced0914db383edd7132cdc1308b819f7eb09868e6c9a1d6cbf9e68e19e48c0cdb85f4f347464d3ccb65f3b7a9730e3771b3f76aa4f6a8ce98f33e0f910785cc494a3382875d4cf25d93775afa1d5c786563876c73ed0cf415f98b4df24107f9ed9337b66cfec993db367f6cc9ed9337b66cfec993db367f6cc9ed9337b66cfec99f999f1bb8cf87c45ca7d44c228367c26e5e23ebfaafb857a5db2fe56611a786cbddf7db1fb2d2b2d30fc550187f82b8432279e565ff606cd56141cb8dd702c6edc967b62af436a5b9af12ff3e2af08eab317781cbc9f9fe4d967f0ecb36881ef9dc6e3bb6ca41b8dcb4adb050d637f8f511fd4f483d8fd37d4b4c0d0f403c7be1341c3ed290c3855411e795c3c1b7654cf645bb0dba893a9713194e904f5dceda09e05e057d62df3bb8147a616c0e32a06038327b0e823532519cf54329ed1643c6792f10c25e3399e8ce73a329ec3c9782e26e379888ca79c8c670219cf48329ed3c8786e21e3398a8ce72a329e0bc9780ac978fa91f14c23e3e94dc6733719cfd9643cc3c878ce27e339918ce706329e0419cfa5643c8f90f19491f14c22e31945c6d3918ce736329e63c878ae21e3694dc65345c6733f194f4f329e73c978c691f19c43c6339c8ce764329e9bc8788ac978da91f15c4ec6f328194f0519cf05643c53c878ee22e339838ce776329e52329ee3c878ae25e3e942c67311194f1b329e07c978ba93f1d491f15493f19c4ac633888ce73c329e23c978ae24e36949c6d3978ce75e329e3e643c63c8783a93f19c45c6730719cf09643cd793f1b425e3b9848c672f19cfc3643cddc8782692f1d490f1ec27e32921e3194cc6733419cfd5643cadc878fa93f1dc47c6d38b8c672c194f27329e3bc9784e22e3b9918ce708329e22329ecbc878a693f17425e3994cc6534bc6733a19cf10329e63c9780692f11c46c633808ce701329e1e643ce3c9784690f19c42c67333194f7b329e0e643c5790f11410f0248203bfc59480ffef039b7c33e843b0b5b0ac4f9e534b79755c5cdcf1c075b7b0acfb030b03eab40bea52a5f3a5df6c4aea84beaa605efc1501c707243c5790f17420e3694fc6733319cf29643c23c878c693f1f420e379808c670019cf61643c03c9788e25e31942c6733a194f2d19cf64329eae643cd3c9782e23e32922e339828ce746329e93c878ee24e3e944c633968ca71719cf7d643cfdc9785a91f15c4dc6733419cf60329e12329efd643c35643c13c978ba91f13c4cc6b3978ce712329eb6643cd793f19c40c6730719cf59643c9dc978c690f1f421e3b9978ca72f194f4b329e2bc9788e24e3398f8c671019cfa9643cd5643c75643cddc9781e24e36943c67311194f17329e6bc9788e23e32925e3b99d8ce70c329ebbc878a690f15c40c65341c6f32819cfe5643cedc8788ac9786e22e339998c673819cf39643ce3c878ce25e3e949c6733f194f15194f6b329e6bc8788e21e3b98d8ca72319cf28329e49643c65643c8f90f15c4ac69320e3b9818ce744329ef3c9788691f19c4dc67337194f6f329e69643cfdc8780ac9782e24e3b98a8ce728329e5bc8784e23e31949c633818ca79c8ce721329e8bc9780e27e3b98e8ce778329ea1643c6792f18c26e3994ac65349c6d3c2e0c1ffab77c3f6eabc7c3ba810fe3f49772e6fafd72565e419b1ba57f1be6153f5dde9a8beef07f55315ccef84fa0afbfbc0f3be239e5d068fe9bb08f295a0d90ec3a618b73b62dc6130cafc766014fd7600cf0e473c3b0d1ed37711e4fb8266ef1936c5b8cd11e37b06a3cc6f0346d1ef3de079cf11cf7683c7f45d04f941a0d956c3a618b73862dc6a30cafc166014fdb602cf56473cdb0c1ed37711e4078366ef1a36c5b8d911e3bb06a3cc6f0646d1ef5de079d711cf1683c7f45d04f921a0d926c3a618373a62dc6430cafc466014fd3601cf26473c9b0d1ed37711e48782661b0c9b625cef887183c128f3eb8151f4db003c1b1cf16c34784cdf45901f069aad336c8a71ad23c67506a3ccaf0546d16f1df0ac73c4b3dee0317d17417e3868b6c6b029c6d58e18d7188c32bf1a1845bf35c0b3c611cf5a83c7f45d04f96ad06c9561538c2b1d31ae3218657e25308a7eab806795239ed5068fe9bb08f235a0d90ac3a618973b625c6130cafc726014fd5600cf0a473c2b0d1ed37711e46b41b3770c9b627cdb11e33b06a3ccbf0d8ca2df3bc0f38e239ee5068fe9bb08f2a341b365864d312e75c4b8cc6094f9a5c028fa2d039e658e78de36784cdf4590af03cd961836c5b8d811e3128351e61703a3e8b704789638e2596af098be8b203f01347bcbb029c6458e18df3218657e11308a7e6f01cf5b8e78161b3ca6ef22c84f04cdde346c8af10d478c6f1a8c32ff06308a7e6f02cf9b8e7816193ca6ef22c8df0436e1ed03b6d775be37d85ed3f95e607b55e77b82ed159def01b69775be3bd85ed2f972b0bda8f3ddc0f682ce9781ed799def0ab6e774be1fd89ed5f9fe605ba8f355605ba0f303c0365fe72f02db3c9dbf186c7375fe12b0cdd1f94bc1365be72f03db2c9dbf1c6c3375fe0ab0cdd0f92bc1f68cce5f05b6a775fe6ab03da5f3d780ed499d1f08b62774fe5ab03daef3d781ed319dbf1e6cf7e8fc0d60bb55e76f04dbc73a7f33d83ed1f95bc0f6a9cedf06b66fe9fced60fbb6cedf01b6efe8fc9d60fbaece8f00dbf7747e24d8beaff3a3c0f6039dbf0b6c3fd4f93160fb91cedf0db61febfc58b0fd44e7c781eda73a3f1e6c3fd3f94960fbb9ce4f06db2f747e0ad87ea9f353c1f62b9dbf176c9fe9fc34b0fd5ae7ef03db6f74fe7eb0fd56e71f00dbef74fe41b0fd5ee71f02dbe73aff30d8bed0f947c0f6079d9f0eb62f75fe51b0fd51e7a55d53edec9f74be2488b79dfd2aa89f4ac0b7f85365feacf3ad8d32b26c2194395b772854cf38d4bb4bd20e4bbbac6cd20ebf0e3669875f039bb4c3af824ddae157c026edf0cb609376f825b0493bfc22d8a41d7e016cd20e3f0f3669879f039bb4c3cf82ad4ae717824ddae105609376783ed8a41d9e07366987e7824ddae1396093767836d8a41d9e0536698767824ddae119609376f819b0493bfc34d8a41d7e0a6cd20e3f093669879f009bb4c38f834ddae1c7c026edf03d609376f856b0c9fef215d8a46dfe186cd2367f0236699b3f059bb4cddf029bb4cddf069bb4cddf019bb4cddf059bb4cddf039bb4cddf079bb4cd3f009bb4cd3f049bb4cd3f029bb4cd3f069bb4cd3f01db789dff29d8a46dfe19d8a46dfe39d8a46dfe05d8a46dfe25d8a46dfe15d8a46dfe0c6cd236ff1a6cd236ff066cd236ff166cd236ff0e6cd236ff1e6cd2367f0e36699bbf009bb4cd7f00dba33a2f6d751bb0c9b36235957ec309c7e16901be84a52a88b7edc7a90af25877992ac978e690f18c26e379998ce74c329ea1643cc793f11c4ec6f32619cf04329e85643ccbc8789692f1bc41c6731a19cf06329ef5643c4791f1bc4fc6b3938ce742329e42329e59643c2f92f19c4dc6338c8ce77c329e13c97812643cf3c9789690f12c26e3798d8ca72319cf3a329eb5643cc790f1ec20e3d94ec6d39a8ce72b329e19643ce792f13c4fc6730e19cf70329e93c9788ac978da91f15490f15c40c633978ce72d329e45643caf90f19c41c6b3868c6735194f2919cf71643cef91f16c23e3e942c6d3868ce769329e3a329e67c978aac9784e25e31944c6731e19cf91643c2dc978fa92f1dc4ac6339b8ce725329ece643c6791f1ac22e35949c6f32519cf09643c5bc978b690f1b425e3d94bc633918c6701194f0d19cfeb643cfbc9784ac8780693f11c4dc6d38a8ce763329e99643c2f90f1ac20e3594ec6731219cfbb643c9bc9788e20e32922e39947c6534bc6f32a19cfe9643c43c8788e25e3398c8ce719329ee7c878de21e3799b8ce714329e4d643c1bc978da93f17420e3d94dc6b38b8ca7808027011c01d8e4ff2dc126dfe1d90fb62f747e2fd8e41b3e6f82ed739d7f146c0f5b6c2d2c7cc2301d6cf2aeec176093fb338f804dde99f81c6c72de20fed5fcca8e07f2b78065c44f4b0b3ffafbdcc22579dcdeb24c5510eff6465f5581fd9b770506e3a1e6d945c6b39b8ca703194f7b329e8d643c9bc8784e21e3799b8ce71d329ee7c8789e21e3398c8ce758329e21643ca793f1bc4ac6534bc6338f8ca7888ce708329ecd643cef92f19c44c6b39c8c670519cf0b643c33c9783e26e36945c6733419cf60329e12329efd643caf93f1d490f12c20e39948c6b3978ca72d19cf16329ead643c2790f17c49c6b3928c671519cf59643c9dc9785e22e3994dc6732b194f5f329e96643c4792f19c47c633888ce754329e6a329e67c978eac8789e26e36943c6d3858c671b19cf7b643cc791f19492f1ac26e35943c6730619cf2b643c8bc878de22e3994bc67301194f05194f3b329e62329e93c9788693f19c43c6f33c19cfb9643c33c878be22e3694dc6b39d8c670719cf31643c6bc978d691f17424e3798d8c673119cf12329ef9643c09329e13c978ce27e31946c6733619cf8b643cb3c8780ac9782e24e3d949c6f33e19cf51643cebc9783690f19c46c6f30619cf52329e65643c0bc9782690f1bc49c6733819cff1643c43c978ce24e379998c673419cf1c329e4a329e16169efd8e78e45b31b26e99dfdfcc7def347cefcc13dfdb0ddfdbf3c4f736c3f7b63cf1bdc5f0bd254f7c6f367c6fce13df1b0ddf1bf3c4f77ac3f7fa3cf1bdd6f0bd364f7caf367cafce13df2b0ddf2bf3c4f772c3f7f23cf1fdb6e1fbed3cf1bdd4f0bd344f7c2f367c2fce13df8b0cdf8bf2c437f3f5b7ea872b7d9577ebdf04fcbf0218df74c4b8df6094f93781516cf83dea0a473c51d7ee1504be9516722f4b9e7926e0ff95c0e82aa62a0c4699b7c5d44ee0a974c41375cfa192c0b7d242dec5963e9509f83f8ebfec2aa62a0d4699b7c5d476e0e9eb8827ea5e495f02df4a0b79f759def94bc0ff71bc755731d5d76094795b4c6d039e418e78a2eef10c22f0adb4906f85c9376912f07f1c9fd1554c0d321865de1653387eee60473c51f7a60613f8565ac8b776e59b9709f83f8edfe42aa6061b8c326f8b291c3f6e88239ea87b6a43087c2b2de459b07ca33d01ff1f0a8cae626a88c128f3b698c2f16e863ae289ba173894c0b7d26298ce4b1fab04fc7f1830ba8aa9a106a3ccdb626a3df00c73c413750f7318816fa5c5709d97773812f0ffe1c0e82aa686198c326f8ba9b5c033dc114fd4bdd7e104be9516d53a2feff427e0ffd5c0e82aa6861b8c326f8ba9d5c053ed8827ea9e7135816fa5458dcecb37e712f07f1cff7db823c66a8351e68703a3d856024f8d239ea87bdd3504be9516f26dff15fa3701ffc7f1585dc5548dc128f3b698c2f1a06b1df144dda3af25f0adb418adf332264c02fe3f1a185dc554adc128f3b698c2f12b473be2897ab6309ac0b7d242becdb54cff26e0ff75c0e82aa6461b8c326f8ba9a5c053e78867b1c1b3d8a2c5a1f2adb490bedc4bf46f02fe3f01185dc5549dc128f3b6985a0c3c131cf1443dcb9940e05b6921dfd67e4bff26e0ff1381d1554c4d301865de16538b8067a2239ea8675013b3e03bea794a367c473d1bc886efa8fbdcd9f01d75cf361bbea3ee3f66c377d4bdb46cf88eba2f940ddf51f738b2e13bea7a3d1bbea3ae3db3e13bea3a2a1bbea3ae09b2e13beafc361bbea3ced5b2e13beabcc3b7e7be3d8fdbf7a13c77c8d7f6fc501e430fe5b1c45f1bf86b836cf9f6c7127f6d902ddff97a6de0dbf3ecb7e772fd5510445f8fbdedc8f752c3b7cce37396a58e7c2f367ccb3c3e3358ecc8f722c3b7cce3fdef458e7c1719be657e51167cb7337cb7cba2ef0e86ef0e16df0eb67759226878fd2d0c3855411e63e02d075a38aa67a95aef12bdaeaf635cafedbe8db9bf14439925a09febb643d66db61db9c88c71d1263edfa509f021df255336797efc3ad8a4dd7f0d6cd22fe055b0c9b1e915b0c933a997c126cfac5e02db689dff186cf2ec18fbeccbf3ff6d60abd679ec2b3e5ce7b7804dfa52611f65e90fb7196cd2a711fbc64abfd48d6093bec5d82753fa87af079bf4f1c7be80f29ec65ab0c9bb36d8074dde975a0db6bd3a8f7d9fe43b342bc1365de75780ed0f3abf1c6c0fe9fcad60fbbdce7f05b6dfe9fc22b03da8f36f81edb73abf046c0fe8fc8b60fb8dcebf00b6fb75fe79b0dda7f3f82edbaf757e17d83ed3797c876a9aceef04dbaf741edfddb957e7b783ed973aff1cd8a6eafcb3609ba2f30bc1f60b9d5f00b69febfc7cb04dd6f97960fb99cecf05db249d9f03b69feafc6cb08dd7f95960fb89cecf04db389d9f01b6b13aff0cd87eacf34f83ed473aff25d8eed6f9c5606ba1f34bc1266346623f95429d7f1b6cad741efb1fc9f7fd2782ed309d9f00b6363a5f0736f936dc68b0c978d0b5604be87c0dd88ed0f96ab0c9f9d970b0c9f827c3c026e75243c1d65ee787804dce7b06834dc6b31c0436f906695fb01dadf39560936feb5780ed589ddf0f361973ec4db0c977ebf6824dc6627e046cf2bdeae9603b49e7ff00361987e521b09da2f3bf07dba93aff3bb0c9373c1f045b89ceff166c1d75fe01b09daef3bf019b8c91753fd8ced4f9fbc0266307ff1a6cf2bde7cfc0d649e7a781ed1c9dff15d8642c917bc126e383fe126c9d757e2ad8e43bdc53c07681ceff026c32dedfcfc126df189e0c3619d7ed6760ebaaf393c056a6f33f055b379d1f0fb6729dff09d8baebfc38b0f5d0f9b160eba9f33f065b2f9dff11d87aebbcb4336a7f56fbf93e3d5f15c4775ea6fc7d18349cd25d1b0803f2c479ae5d0c3ce86b4fec752f4b9ed7cb7edf42af5762680ff8de1dbbefd435c5077a5d857abdbb0ddf8550e61cdd38a8e5e498df522fb7d7580eef63c9ba65990bc1becb58777b5ddf0f1cd577b7c124dca88394395f33a963e30f74be0d2c13235bf2fa58622d000d71aa82bc30b8d1aaac14cf7b1bc3f301f0ec899d2775bdee222670df8afb7addbc8f6bc65a3194d90dfaed72a01feeebb26e99177f9ed9337b66cfec993db367f6cc9ed9337b66cfec993db367f6cc9ed9337b66cfec99f99915cf3e9dc7e7ca526e1f09a3d8f6008f8bfbfcf81c56d6af9eebec3aaddeef9ed8fd367cbed74aafb7d4a8732194f91a9e39edd5f922f8bf6cb7a86de9e03961da6d29fe8aa03ef82c689f239e3d06cf1e8b16922f89cd77d948371a9795b60b1a3e5bdc6dd4073575b5bfeed1eb2a3034c5fdf54383079f8d1601ef47fa3701ebf908eae0601f4f1b17e20ff7a53d6093fc87c0e8623be3b144da03791e8ecfa6a5ccaf8ce7e2f16ffbb25297edc6fb50a7aae0c0f82e8432bf83b6ef739dc7be21fb40b77f58fe2f53bae7d4a29faaf38ef8eb9cdcbedb81b30afca0eff7803526df0ddea129d049fc88bd10f27f87fe1c524ef410ad851dc72b477673b90f8de58aa1cc4e4bfdab8278ebbfc3e0d96130ab6df225c4d93fe0f8efaa4dda19a1d185a09194d9031aed75c4b3c7e0110ef1a7cac8f66f6d9491650ba1ccff82364ad545da79a927f66dc16380abe398f89275cbbceddcf8036034eba8e263e0b1f5bc7b62e7cdadfe5f8795a47eb15d8fabff97acbbbd5e56380263fda5b07ee16a1d441f5bfe67fb96d4afdf65ffb2bd469d8505759632ed4a52bf2ace2ed3f94ccef50fd5755bd4b9fe4e073c89a0e1b5b79ad21ddff118f3be031e47f52cb51dbb7619752a86329da09e0ece63d2be0bbc037cbbd8e6a8859c43ed36b42884321d4b52bfd27644e988d7aa1f64a52e65d6f3c1524b5da44ca792fabab4017b9c4c2eb7db7b5027b5de3d96ba4a99f34bea75e9a2f309d84e78dfa4afe5ff32a56b0f702c9eadf1d739b97db7006715f841dfef026b4cbe1b7c0b44cef7c58fd80b215f59525f56ca891ea2b5b0ab7d44def9437673b9ddc672c550669ba5fe5541bcf5df6af06c3598d536e95a529f973872d96e6e8bd0a81434923278ff588eedf8de9dedb8bfc71177d4717f0f309aed269ebbb864db6bb099f7506de7835206cfc9a4ccd525a95fd5ce262c65cd7bc32eee63e23ba801d42330ea2a13c680836bc372bc7692764afc7401fb1e9d179dbb18da1542994125a95f87e7ddd67b97e6f51d5e5308b7b96fe1bb1f434aeab971ecc43dfab7086c9fe85f47d769e5b67b86c261bb6738bca49e1d9715ae8f2d7531af915b0407de53ffda288bf7ddd22d67e6cd712895be9f18e56c7ef09a27b67735ba969622538bc07ebfe04383bd203870cc4dd90f30e6ccfb285d8cf5e07d94ba92d4afb4496659b5edfffde87a7d643b8a76d89e604c7e088c553a5ffacda6aeb6facbbcf8538c1f197570d376a5de57cae43ef05ee071d1b63b6aa34bf1181bdff7297a57db8eff1f1a5a65f179adf5986f3e736f63e4e3f15d5663bbff64d362b785c7d57394282d765b7cc7a7458f91b6e3874d8b5d169e5d59d66297c5778c5ad4e27dcf745abc6fe171712f2a9d16ef5b7cc7a745cfd274cf35508b9d161e57f71ea2b4107f9932ef22606e63e4e3f15d5e6dbb4f66d3628785c7d5757394163b2cbee3d3a26b0fbc47974e8bed169ef8efcfa5d762bbc5777c5af4ea8df7f0d269f19e85c7d533dd282ddeb3f88e312e46d9eee5d8b4d866e1d996652db6597cc7787ed8c376afcda6c5560b8f83fbae69b5d86af11da31623f0be6b3a2db65878b664598b2d16dff16951dddd764fd8a6c5bb161e57f784a3b478d7e23b3e2d46f452be3737428bcd169ecd59d662b3c5778cd750c9b8d8d4082d3659783665598b4d16dff16951933cd7dad8082d365a783666598b8d16dff169519a3ca66e6884161b2c3c1bb2acc5068bef18e322793db9be115aacb7f0accfb216eb2dbe633c8e24e3625d23b45867e15997652dd6597cc7a7456df2fed3da4668b1d6c2b336cb5aacb5f88ef19e4b322ed634428b35169e3559d6628dc5777c5a744b1e535737428bd5169ed559d662b5c5777c5a8c4a3e135bd5082d5659785665598b5516df319e7726db8b958dd062a585676596b55869f11de37967f2fec58a4668b1c2c2b322cb5aacb0f88eb1ed4c9e772e6f8416cb2d3ccbb3acc5728bef18cf3b935abcd3082ddeb1f0bc93652ddeb1f88ef1bc33791c79bb115abc6de17135064a94166f5b7cc71817c9b6735923b45866e15996652d96597cc7785f2bd9762e6d84164b2d3caec66b88d262a9c5778cd723c97b7c4b1aa1c5120bcf922c6bb1c4e23bc66745c973f0c58dd062b185677196b5580cbef7c6ee3bd59f5b7c485fac0b0c2d0aa1cca91d53bfd2172b4a475907f62bc3babc157b5d52fdca1645d4e52da88b943913ead22670324651b9a3ba2663e64da8935aef4796ba4a99733bd6ebd259e713b04d3e06ddfa58fe2f5381315f0579d14fd5f9f5f8eb9c8cd5d780b30afca0ef57813526df5dd177814ee247ec8590efddb1beac94133d446b6157fbc81b3a8fece6728b8de58aa1cc1b96fa5705f1d6ff7583e7758339f9de03c499c4919bb62bc5f44684461780465206fbec7de488c7ec43281ce24f9591eddfda28837d28a5cc45d04661bf52a9672238b0dfa4a3b6ac2bb2cbba655efc15836d2f309a7554f1f119f4fd94b122641c0965937121bac17a7a1a3655d75e8eea2abe64dd32df0b18659c8a9ed9672c6b2c630f8351f1f471a0198ebd2153bae3451fe0e9ed80c7513d93c7a10aa34ebd8c3a1543197cb7b1c2413d0bc0afac5be62bc0b78b6d8e5ac831f95c438b422833dc387f8cd251d6a1e2b7a7a52efd1cd745d62ded52bf2cf8ae347c77377c278286db3908d2ef5f95c0dcd701b35a6ffff8d75b8ae76d1253e2a73bd469006810579d705d729e37c0d0b610f253e13c4fca4959397e09bb8a65d996c86e2ed7c758ae18caf4b3d4bf2a88b7fefd0d9efe06b3da2677c3b99d83fd211903fd0c0e99ef0edaf58fd0ae1f682765f0f8d7c391767d0d1e99ef013c728e530136395710fe04fcbf5b16b8cd76afc2c22d361c27ae8785b17bfc8cc9739d1e06a3cc770746b1f5059e4a479a99dbfa5c431f3c2eb736cac8b2855066161c1b1396b26abfeb54505faf96da1edbbb63ba4d6fed402f1ca731007d0243c300f4927ab672c0d336a81fab71f294ba4923ee1a75e3a8d4a347412b3430f1b7c0528d1660c37c4b8b2d081a0e495908361992b215d85a18b2e05098525e86b4732117ea21eb2e3438db004b9cbe71384f99d285ce61c0e3229455e8c8909e3a746e9d3466ca288c8f560667536247fdaf659a7251eb72b51dcc7da20ae6cd182c74e4bf25d4b70ae6c59fda3632b4ea841123ef1930e9aea9e3468d9f32198532776ccc17040d3780f91b25b8ab9d0e03002b8c8d432ba35ed860c8ff64c3b48d9fb31cc7cc35b509c09f4c6d41b7c31de8a6d62f63df8e1c3176ecf553abc78e1979d9d4f123a78ca91b8f5bb38da15cd49696ffb7069bad89c7b26ac2660b973dcc62b34d38ca701bb0c991eb70b0094f5bb0b584bc9437b78c9370ed04eb975d4afd4f89d34a57fcb0a03e04e470acda55b5ffaa5339f50959752aa48636569b530d5dacee18aaa189d557ecd4d0c36aa86135b4f089416ae8603554f029416a2860f5b58b922035b4efe9416ae8de3383d4d0bc6703dfb781f99c2075daa586d6ed1ca486ce55b72ebb04a9cfbca977ebd5e9bbba2da04e79d5259e3afd54a79deaf242ddbe50b7b2d4299d3a5d56a782eaf44d5d8ef4d75a0f08d34561ba384c9784e9d2305d16a6cbc3744598ae0cd35561ba3a4cd784696098ae0dd37561ba3e4c3784e9c630dd14a69b83d4f0ceb704a9e1d7d5f0cfb705a9a1a16f0f52c346df11a48694be33480d373d22480d453d32480d533d2a480d617d57901ade7a4c901a26f79e2035d4ae1a82777c901a0e5b0d93ad86cf56c3fcaa2181d590c26aa861352cb11ac2580d81ac86467e20480db9ac866c7e38480dfb3c3d4c8f86e9b1303d1ea627c2f464989e0a52c383ab61c36704a961c6d5f0e3b383d470e57383d4f0e66ad873351cba1a265d0d9fae865557c3bcabe1dfd5b0f02f85e9e530bd12a41e49a84731ea1185bafdaf1e83a95bd46f05a95be74b82d4236ef5c85f7581505d425417991541aa0b95ea52a6bad8a92e87aa0ba6ea92aabae8aa2ecbaa0bb7ead2aebaf8ab571ed42b20ea9518f58a907a654abd42a65ea953af18aad744d56b97ea3562f55af59e20755b7c5f907a54aa6e87ab4703ea96b9ba7dff6998be15a462f23b61fa6e98be17a6ef87e90761fa61901ad6580d77ac864b56432bab6198d590cd6a28673514b41a36fab32035f4b41abafab7416a48ecdf87e9f3307d11a486d7fe324c7f0cd35761fa5398fe1ca6bf84e9af61fa5b98fe254cff1aa67f0bd3dfc3f48f30fd33a81f661b1b921375eba3af60821153a68c1a37614ac994ba927153c74e193361ecfd25d3c64c195d5277efa849b563eba6e1c2dfd60bcb18e103264d1a717fc998f135a3ee2ba99b3aa5a4aeb6a4ba6eeaf89a0607f1bfe8854e3ed0e3889a9a6867fff94d48ff6f139d1eaedb45197dfdcaf4753ba265130439b2290bf568d9b40a4dd24730b9d4bd29751e5c32796cdd9492d292f1e1dff0c05b376d544d9712fcdfe450e4c9534a264f1931694a49eda4ba71255dbbe07a1f69db844afc575b3730679dd834713ae9ef2c3529c47e795a1314f88fd39a46dabae41b90b62d699ad3929226d4f0eca62c745513096f2e899465f2d4ea2993468c9c12bdf06ddf64e13b9b52cdf14dace6291d9be0ec8ca62c34a063d308ef6c8ab39919380bfe1ba14b957d8c550600", "isInternal": false }, { "selector": { "value": 2603445359 }, - "bytecode": "0x1f8b08000000000000ffed9d77741cc791c667911856000892600e50a219c1c5228309cc99122559391024419116495024942ccb922cc939e76c399de59cf35917edbbf3390739e72839dd3ff77cefee3dbfeb9eed323e3467d6d8d5145883ad79afb03db5bd53bffea6ba77b67b7691090adb9f8c655cb9dad885c1d91b3ddfef1e734f6e6b4bf058394ece4c4a38ab52c2599d12ce9a9470d6a684b32e259c9352c23939259c5312e4b46c55c1e82d69dea90cba26cd984d99a6e7a540d3fa9469da90024d1b83748c51d352c2d99412cee929e19c9112ce9929e16c4e09e7ac9470ce4e09e79c9470ce4d09e7bc9470ce4f09e78294702e4c09e7a294702e4e09674b4a38cf4f09e70529e1bc30259c17a584f3e204395700e712f7f814f7b8d43d2e738fcbdd23bd66a57b5ce5da58e3f65b8dadb66cc6dabce7f2c6da8d7518ebf49eeb32d66dacc758af7baec53dd7676c8db1b5c6d6195b6f6c83d361a3b14dc6361bdb626cabb16dc6b61bdb616ca7b15dc6761bdb636cafb17dc62e3176a9b1fdc62e3376b9b12b8c3dd5d895c6ae3276b5b16b3c966b8d5d67ec7a633718bbd1d84dc60e181b3076d0d82163878d0d1a3b62ec6663478d1d33f63463b7183b6eec84b193c6868c9d3276abb1d3c6ce181b36769bb1db8ddd61ec4e6377799a3dddd8ddc69e61ec1e8ff399c6ee35769fb1fb8d3dcbd803c61e34f690b1671b7b8eb1e71a7b9eb1e71b7b81b1171a7b91b1171b7b89b1971a7b99b1971b7b85b1571a7b95b1571b7b8db1d71a7b9db1d71b7b83b1371a7b9363a18ef066636f31f6b0b1b71a7b9bb1b71b7b87b1771afb3b63ef32f688b1771b7b8fb1f71a7b9fb1f71bfb80b10f1afb90b10f1bfb88b18f1afb98b18f1bfb84b14f1afb94b14f1bfb8cb1cf1afb7b639f33f6a8b17f30f68fc6fec9d83f1bfb1763ff6aecf3c6be60ecdf8cfdbbb1ff30f64563ff69ec4bc6beec69fe15635f35f635635f77be6fb8c76fbaba342ff62d63df76e5c7dce377dce377dde3f7bcd77cdfd80f3cdf0f8dfdc8f3fdd8d84f5cf9a7eef167eef1e7eef117eef197eef157eef1d7eef137eef1b7eef171f7f8847bfc9d7bfcbd7bfc837bfca37bb46baa973617ca938391ad3f48688cea3892b36b2a24fe9260f466b5a876cfd1638bf3d7b87d7a24ed6add7eade7af73fb75de7126bbfdc99ebfc9ed3779fe196e7f86e76f76fbcd9e7fb6db9fedf92f72fb17813f1bc09cabf35b5fb57365c047f95a05be5ae7ab065f1d1d0e7c939caf167c747eebc037c5f926816faaf34d065fd6f9a69096c6ce73befe20a95cc90dd8e3d6277d5cb70ed5903cef217bdc4626de69c9f30edae33631f0dafc98ee8e350df26686f335816fa6f34d079f1b82fedae7ac6f96f3cd04df6ce76b06df1ce79b05beb9ce371b7cf39c6f0ef8e63bdf5cf02d70be79e05be87cf3c1b7c8f916806fb1f32d045f8bf32d02dff9ceb7187c17385f0bf8e81e97f3c17791f35d00be8b9def42f0d1587b11f8e8daf062e7b3e3c4e40cbcc6f9698c0a5f43e333f896d2d80cbe65342e836f398dc9e05b01b1c9b712c615f2ad723e1aa3ec737daedc1f24d527f2619f5893f471cd91ed71d7257fdc70dd6e7d30a2753fc459035a6d70e504ef0d6ac3d819671487fc3550de0975a91ee941ef33c46ec7fdb5aebca1c8ebfabcd735409db511edef0f926dff3a8f679dc75c0bede7c9d9f6bce6ec98b79273f62aa8ebe71e5df34cc49cdd031c0c39dba5393be6ade49c1d84ba7eeed175ef44ccd96b81832167077872369fd39c2dcc91054174eed1679f8998b3478123f99cedd49c1dfb5672cede0f75fddca3cfbf1331676f078ee473b67b40af0dc6bc959cb32f81ba7eeed15ccc44ccd9078183216707759c1df35672cebe09eafab947f3821331675f0e1cc9e76c2f53ceb66bce0685f5ce2088ce3d9aa39e8839fb3070249fb387747e76ec5bc939fb69a8ebe71ead974cc49cfd802bdb75866fb8758605e0fba6f32d04dee473fb7007536ee735b70bf7810441748ed2dadd44cced475dd9e6f16370ef01f9bee37ce783efbbce7701f8bee77c1742bb18fac080f681316f25f7811f405d3f97691d7922f681af010743ce1ed29c1df35672ce3e0e75fddca37b1a2662cefe1838187276507376cc5bc939fb67a8ebe7de52579e88394bf795daeb859fbaeb85e5e0fb99f3ad00dfcf9d6f25f87ee17cabc0f74be76b05dfaf9c6f35f87eed7c39f0fdc6f9dac0f75be7cb83ef71e76b07df13ced701bedf395f27f87eef7c5de0fb83f37583ef8fced703be3f395faff3d97bf2e8deab2f3a9f3db7a4517f90ecb9a57b2ce9d8b4bf721c62377ab11bc731769317bb2922f62a86d85988415bc6dbef87f22a5e9e5c4330fafb1f146b75f2b1da6ddb5b83b1b77d35f0e418da9e851863e1c9014f5bf23ce1bdbef9e48f1b9ee3564fd32cc46a8576b533b42b03b1e8d8b44ff11ac087e3777b046347f28cf90cc4a263d37e0730920fdf4fe87d9dfa8f7d3f5c9219e165e84be13511c5a3dffe228ed5e0a73a7f9c39c2b6dcb1d5c3f3f8dedae6f998f232cc0b8a45c7a67d8a570fed691b7fc6fc5819731e23d718918158746c3f36f6f755e3afd998ce6b03f8cec198942f774caa07b6f1b84e893bd7526273bc5f6520068d6da4791efc546796fb42821ddbb6c3b8cbd0fff2a55ebfe178907c1ee773d8afc7c2d30e3c1c7d9fa9bfe6f07dff2f41b2b9d6e969d5e669d500753a40bf4e06fd8a5d87503c6556666556666556666556666556666556666556666556666556666556666596cf8cf75fe0fa26d55b2984917c79e0e198e70f7f3fca1d8b8e6fd775be0beb3ac9af5be473b86649f7182ef3da5c03759ec88cd4fd21aca7fb6b83b8a6b99257bb31dd67511f9cbd16cbb98618b70e1cb57ed99258ecfc21aef5367b8f9afd1db2564fd795119a32dca7324ad38ca729dea7b8c2e3b1793ab77a848d63edafd4b548d48aca49aeede13d06bce7a5307e502e5405a3c70f7c9fe94a3cf6e8354c5a2feff262d7409dffc98c9c1bba1795fecfa17fcf93add3ed1d9b5eb30cfcdddeb1a7b9d71247ad77fc56782dd5f93f1853df5c15fc55338efb3f705c0ea0adb8f54319d7cd937f1f2eace3b797c0d3093c1ce30cd3f5460efb40d2ebf8dd9e5651d73154a70bf4eb66d02fea5a94f6299e322bb3322bb3322bb3322bb3322bb3322bb3322bb3322bb3322bb3322bb332cb67c6ef8a126b16eae585308ed3bd0fe17a06fdfe0b1ddfaeebbcb06a242ef73a1cad392df7da5c0375be5c3552f7a5ae5c1f9c7dbf43dcb96458cf2b7a2e295e3db407d782b8becfdde1f174446841e596c46217d6f193d778641dbfddd3351fa129577fc53556d414fb6b9bc7836ba3f5c1d9f79664e138e371ef505c5e503cec4b1de0a3327e3f9ae33ce37b897f5f0fc5c3f5eb479cb6d302ae739fcf718e1b3dd0a6fee0ecfcae813aef87b1ef83ae8cf770e0bd238f463c4f5bb1756ad28fe5b7ec728575df35c0d90f7130f65a604d28761bc6ce38a338e4af81f2e7aa46ea523dd283b42676db47e837c190dd7f5d9bf7ba06a8d31bd1fefe20d9f6f7793c7d1eb33d271f813c7b14deffb9c6a4de188d9681465407af83b8eec9f3c748fffe46bc6fafceab83d72c54e70b3046c5dd3f1a75cf21d7fb58dc3d8751d7c69dc0e8b7d1bfcfb3d2efd37a0cc68ba4efd37a0c7208efd30abce32f87e313575d10ffde4275beef1ddfbf26a7d7e07d6054e747305e34ba7b16eb83b3afbff19ea9f1f87c15779f34c5c3eb1aecdb7fabed96b907eaf727c88c39812c789d40757ee39db3ee18eed511af7d22e6b5a415fd0e157e7ef1f5b33af4c26bfa13d1a1d0e7fbbcb6505ef7425ba8ce7f79d780c95fb714ae01936febe86b121a073a22da4a75fe1bfada9fe11a8fce137eeea8ab3efb79da8a5d03927eb6cde3fdfbc0185bc2ef03d7568fd4f57fe797b42ef5f781bbbcd749fc7de0ff853cab83fbd0b9c6eab5311a2d078da80e7e3788de47f0b77ca3de63b8eeed8f7b8f89fa0d4a1c9f1babc79fcd9f578bba46a03af45abc4698e998a7399dfdbafe7c21bd5f2679df307e57a215e2e277255a99f4cc816efdb08fd705e732768e2976dc6f4ee7c62176dc6f4e8f47ec262f76d338c656cd5573499a33fc2672f8fd33fccd52bb15bb2e258606785d550a18ab53c0589302c6da1430d6a58071520a1827a780714a0a18a7a680310b8ce7f2bd9d419f7cb9fa709daf62d71a189be17f97e44bfdff1dccff4ba5e8b50fc666f84c176ab12a18bb16f8398fe3b71f4afd5f2fc480ffbb607a0a1867a48071660a189b53c0382b058cb353c03827058c7353c0382f058cf353c0b820058c0b53c0b828058c8b53c0d89202c6f353c078410a182f4c01e3452960bc38058c4b943111c615bc8cf972192d0fc7fffc7b32ff738c81271775cf29d3774f4afe7f6bccbf4fda56eeefc6e1bd25bcff13eec9fdb61dc7bd23a5feb65db1ffb7cac4982f9791eb3e76fc1ecf5878f07b9151dfad6160cc97cbc8f5fd17fc8ede5878ba40b3ce08cd1818f3e53272dd2b57eabd9c784f7f5784660c8cf97219f1beea047942cdba4be0e901cdba23346360cc97cbc8755f7216628c85a71734eb89d08c81315f2e23d377db42cd7a4be0c1ef80f54668c6c0982f97d1f2ac61d2acaf049e35a0595f846692189127e9dfc9ee8b88c5f19dc152db4e0cc83825058c5353c088f749708c5fc5ee93e8e3d5275fae3e5ce7abd87d12189be1fb31a116f87d88bfa5c53a5e9ea2f74960ecf54c5ae0f755fe9616eb8187e3fb33598831161e626880d74d4f01e38c1430ce4c0163730a1867a58071760a18e7a480716e0a18e7a580717e0a1817a48071610a1817a58071710a18f1b32ac3b562d1cf2feb2778ecb8cf2a133d76dce792891e5bf35cf3bc12626b9e6b9e57426ccd73cdf34a88ad79ae795e09b135cf35cf2b21b6e6b9e67925c4d63cd73c97143b0d73fcca38f11891a725399e1cb61d63f50b687b7f044f86a9ed186ba380b61343da1837a480714d0a1855c7c23d88e5305a9e4d4c3c1b4be0d9043c9b99783695c0b31978b624cf13e6d4e6127888a1015eb726058c1b52c0a83aaa8ed6ec967b729bea2888310d3a2aa3322aa3329e0bc6348ce1ca988a7ccc97cb6879b626cf136ab6a5049eada019bdae8d97315f2ea3e5d9963c4fa8d9d61278b681665b23346360cc97cb6879b627cf136ab6ad049eeda0d9b608cd1818f3e5325a9e1dc9f3849a6d2f81670768b63d423306c67cb98c966767f23ca1663b4ae0d9099aed88d08c81315f2ea3e5d9953c4fa8d9ce12787681663b23346360cc97cb68797627cf136ab6ab049edda0d9ae08cd1818f3e5325a9e3dc9f3849aed2e81670f68b63b423306c67cb98c96676ff23ca1667b4ae0d90b9aed89d04c2ae39a14306e480123b38ef972192dcf3e269ebd25f0ec039e4b9878f695c07309f05c9a3c4f98539794c0430c0df0ba352960dc900246d5517594c4a83a568e8ecaa88cca581a637f0a18f55c2ba3544686cf5745bf4373c9048fdde8c56eac90d871dfa199e8b135cf35cf2b21b6e6b9e67925c4d63cd73caf84d89ae79ae795105bf35cf3bc12626b9e6b9e57426ccd73cdf34a88ad79ae795e09b135cf35cf2b21b6e6b9e67925c4d63cd73caf84d89ae79ae795105bf35cf3bc12626b9e6b9e57426ccd73cdf34a88ad79ae795e09b135cf35cf2b21b6e6b9e67925c4d63cd73caf84d89ae79ae795105bf35cf3bc12626b9e6b9e57426ccd73cd7349b1f7271f3b5fea6fccec071e8edfbc616a67ce1ef73277acbf24a89fd5ea724fab4b3cad1aa0ce65a0dfe50cfa65202e1d9bf6295ea9cc4f11c0cc143b6fc79729d07e8ab1c1d3c3c6bf82a9ed7163fd15133c76dc583fd163c78df5133db6e6b9e67925c4d63cd73caf84d89ae79ae7526263b93618b96ea7df3fb5c778aa2bd7b87d64253fd5b97452e1715aa07d8823b6f6217dafa884d89ae79ae795105bf35cf3bc12626b9e6b9e57426ccd73cdf34a88ad79ae795e09b135cf35cf2b21b6e6b9bc3c6f80e7abc68127f07882223c8b84f1cc11c6335d18cf14613ccb84f1540be3592f8c673ceee72b856797309eedc2787a84f12c16c6b35c18cf5c613c79613c3384f1740ae3992a8c678b309e1a613c1b85f1e484f1ec11c6b34418cf3c613c3385f1ac10c69315c6532b8c6793309ed5c278960ae3d92b8c67b7309e3e613c3b84f1f40ae3e912c6335f184fbb309e66613cadc278ce13c6532f8c67ab309e3a613cab84f1ec13c6b35618cf02613cb384f13408e36914c6334918cf3a613c3b85f16c13c6d32d8c67a1309e0e613cb385f1ac14c6334d184f93309ecdc278260be3c908e0c90667ff2659169edf0fbe2aefb5f67aa0ad79e4f92b9dbf0a5e73952b57471cfb4af0d177c3af8a782dea7425b4a5df95734f6e0b75c258fdb04ff1ea81e32a213c9385f16c16c6d3248c679a309e95c278660be3e910c6b350184fb7309e6dc278760ae359278c6792309e46613c0dc2786609e359208c67ad309e7dc2785609e3a913c6b355184fbd309ef384f1b40ae36916c6d32e8c67be309e2e613cbdc2787608e3e913c6b35b18cf5e613c4b85f1ac16c6b349184fad309eac309e15c278660ae399278c6789309e3dc27872c278360ae3a911c6b34518cf54613c9dc2786608e3c90be3992b8c67b9309ec5c2787a84f16c17c6b34b18cf7e613ceb85f1540be359268c678a309ee9c278e608e359248ca72a8287e1ff5f863c74ff1a1d9bf6f70b89cd701ec2fffb7935539bae71c7aa75c7257e8a570375ae750385bdbf0a5f4b5cfefd86f8de740d68740d535be87c64bcf3c31c3b8ff75506c01078fa04113c1cf7a332b573541e26f8ff677356ab6b3dadfc73d70075ae06fdae65d02f2ab7ffda07dc631a992d0f5d9b116b16eaad17c248be2b7879c27ebb3e18bd15ebb7d7020fc718c6d4ceb07f5de7b5697d84ee540773f53a867646f51ddabf0ece43da982dcf465726d62cd4db2884917cd7f0f284fd6b63307a2bd6bfae031e8ef187a99d61ffbade6bd3c608dda90ee6eaf50ced8cea3bb47f3d9c87b4315b9e4dae4cac59a8b7490823f9aee5e5e9c8429b692bd6bfae071e8ef187a99d61ffbac16bd3a608dda90ee6ea0d0ced8cea3bb47f039c076556e62866cb43dfe122d62cd4db2c84917cd7b1f274e4b2d066da8a8d6337000fc738cfa47b388edde8b5697384ee540773f546867646f51ddabf3122764b90ac16378d418b9b22786e1a672d285ea9cc57a7905975569de3985567d5398e5975569de3985567d5398e5975569de3985567d5d96eaab3eaac3aabce4930abceaa731cb3eaac3ac731abceaa731cb3eaac3ac731abceaa731cb3eaac3ac731abceaa731cb3eaac3ac731abceaa731cb3eaac3ac731abceaa731cb3eaac3ac7314bd0d9f2d06f66116b16ea6d11c248beeb7979c2ef056d09466f196fbf1fca3701cf0d0cfa30b533bc87fc80d7a62d11ba531dec5f0718da19d57768ff009c87032530df984266d5b93c66cb43bf4d4fac59a8b7550823f96ee0e509c7b1adc1e8add83876007838c679a67686e3d880d7a6ad11ba531dec5f030ced8cea3bb44ff1945999e3982d0ffd8f2862cd42bd6d4218c977132b4f3efc7ee3b660f4566c1c1b009e0389f314c63106ddc371eca0d7a66d11ba531dccd5830ced8cea3bb47f10ce4329cc37a6905975569de3985567d5398e5975569de3985567d5398e5975569de3985567d5398e5975569de3985567d5398e5975569de39855e7cad1d9f2d0ff0a22d62cd4db2e84917c075879dac37587edc1e82de3edf743f920f00c24ce53587760d03d5c7738e4b5697b84ee5407fbd721867646f51dda3f04e761a233df984266cd8df161d6dc50e63866cd0d658e63d6dc50e63866cd0d658e63d6dc50e63866cd0d658e63d6dc50e63866cd0d658e63d6dc50e63866cd0d658e63d6dc50e63866cd0d658e63d6dc50e63866cd0d658e6396901b9667872b136b16eaed10c248be015e9ef0770f7604a3b762f7ed1c029e830cfa30b533bc6fe7b0d7a61d11ba531dec5f8719da19d57768ff309c076556e62866cbb3d39589350bf5760a6124df415e9e701cdb198cde8a8d63878187639c676a67388e0d7a6dda19a13bd5c15c1d64686754dfa1fd41380fcaaccc51cc9667972b136b16eaed12c248be43bc3ce138b62b18bd151bc7068187639c676a67388e1df1dab42b4277aa83b97a84a19d517d87f68fc0795066658e62b63cbb5d9958b3506fb71046f21de6e5c967a1cdb4151bc78e000fc738cfd4ce701cbbd96bd3ee08dda90ee6eacd0ced8cea3bb47f339c87b4315b9e3dae4cac59a8b7470823f9067979c2feb52718bd15eb5f37030fc7f8c3d4ceb07f1df5dab4274277aa83b97a94a19d517d87f68fc279481bb3e5d9ebcac49a857a7b853092ef082f4fd8bff606a3b762fdeb28f0708c3f4ced0cfbd731af4d7b2374a73a98abc718da19d57768ff189c87b4315b9e7dae4cac59a8b74f0823f9f0fd621f134fbdc7531fa1c5448cdde8c56eac90d84d5eeca60a89ad79ae795e09b135cf35cf2b21b6e6b9e67925c4aed45c53cd2b53f3cc39d43c730e35cfa8e62235ff4b72b13b1b8291ad0a621d656a276efd50c6f939da1609e399238c67ba309e29c2789609e3a916c6d3238c67b1309ee5c278e60ae3c90be399218ca75318cf54613c35c27872c2789608e399278c67a6309e15c278b2c2786a85f1ac16c6b354184f9f309e5e613c5dc278e60be36917c6d32c8ca75518cf79c278ea85f1d409e359258c67ad309e05c2786609e36910c6d3288c67bf309e49c278d609e3e916c6b350184f87309ed9c278560ae399268ca74918cf64613c19013cd9e0ecefa3e0f709aac147f7f7ef03dfd35c793ff8aa2262d0718e818fe673e918f6fd6a6df3d90c55f09a5b22b89e16118fe2dc12f1daf1d01d63f5c33ec5ab078e5b84f04c16c6d3248c679a309e95c278660be3e910c6b350184fb7309e75c2782609e3d92f8ca751184f83309e59c2781608e3592b8c6795309e3a613cf5c278ce13c6d32a8ca759184fbb309ef9c278ba84f1f40ae3e913c6b35418cf6a613cb5c278b2c2785608e399298c679e309e25c27872c2786a84f14c15c6d3298c6786309ebc309eb9c278960be3592c8ca747184fb5309e65c278a608e3992e8c678e309e45c278aa2278f633f1c4fd9ec27e01b1edbc375d0bd29c58169e1f8fef29edf71869ff2830920fefd3cd31f1c4fd06454e406cabc56a28db2d0bcfe3f74cb8722ae731d27e544ee17d96ab9978e27eb763b580d8560b5a1ba07b00b2f03cde57cd9553ab3d46da8fcaa9265e9ef07f4bac0a466fc5ee35c23ec7710e99da99c3fe97e06f6844fe16f52a4fab06a8331ef715c78d07144f9995398ed9f2d0da17b1e2fbd9787c6f692c8c51efaf0c3ce1f8d81a8cde8a8d8f478187e3fd83a99de13876dc6b536b84ee540773f538433ba3fa0eed1f8f88dd1224abc5893168712282e7c4386b41f14a65de9f4266093a5b1eba579358b3506fa51046f2e57879c2f17165307a2b363e9e001e8ef70fa6768663c249af4d2b2374a73ad8bf4e32b433aaefd0fe49380fa5301f4f21b3ea5c1eb3e5a1351a62cd42bdbc1046f21d65e5c9e7b2d066da8a8d63278187639c67d23d1cc786bc36e52374a73ad8bf8618da19d577687f08ce83322bb3322bb3322bb3322bb3322bb3322bb3322bb3322bb3322bb3322bb332cb66b63cf4dd6162cd42bd76218ce43bc1ca535877680f466fc5d61d8680e764e23c85750706ddc37587535e9bda2374a73a98aba718da19d57768ff149c076556666556666556666556666556666556666556666556666556666556666596cd6c79e837e489350bf53a843092ef242f4ff8bdad8e60f4566cdde114f070accb30b5335c77b8d56b534784ee540773f556867646f51ddabf15ce83322b7314b3e5a1df1e24d62cd4eb14c248be21569ec2fa6967307a2b368edd0a3c1ce33c93eee13876da6b536784ee540773f534433ba3fa0eed9f86f3500af3f11432abceaa731cb3eaac3ac731abceaa731cb3eaac3ac731abceaa731cb3eaac3ac731abceaa731cb3eaac3ac731abceaa731cb3ea5c393a5b1efa9f86c49a857a5d4218c9778a95a73d5c77e80a466fc5d61d4e030fc7ba0c93eee1bac319af4d5d11ba531dec5f6718da19d57768ff0c9c8789ce7c3c85cc9a1be3c3acb9a1cc71cc9a1bca1cc7acb9a1cc71cc9a1bca1cc7acb9a1cc71cc9a1bca1cc7acb9a1cc71cc9a1bca1cc7acb9a1cc71cc9a1bca1cc7acb9a1cc71cc9a1bca1cc7acb9a1cc71cc9a1bca1cc72c21372c4fb72b136b16ea750b6124dfadbc3ce1ef1e7407a3b762f7ed9c019ed30cfa30b533bc6f67d86b537784ee5407fbd730433ba3fa0eed0fc3795066658e62b63c3dae4cac59a8d72384917ca77979f25968336dc5c6b161e0e118e799da198e63b7796dea89d09dea60aedec6d0cea8be43fbb7c179481bb3e5e9756562cd42bd5e218ce4c3f7e55e269e7a8fa73e428b7315db6ad1e7cae7b9c72c3cdf078c5ce361afc748fb98e3e4ab079e3e269e468fa731428b7315db6ab116ca76cbc2f36b81912ba7fa3c46da8fcaa946e059cbc4d3e4f134456871ae625b2dd6b9f234f79885e7d70123574eadf518693f2aa79a80671d134fdc98b46e1c62c7f5aff1881d972be3115b3557cd5573d59c53f3cc39d43c730e35cfa8e6a23467b88e0ae77b2946000cb8f543193f2b705c7b32b53317f5796c9dd726fc3c86730ee7eaf386322b731c33d3bc4547d68b4dfa041e0f6dc3cc5a8ce7bc699fd7a634cc9b16633e9e4266d5b93c661bfbf6e4637764bdd8a44fe0f1d0763bb3164ced0cc7833b82688d295e03d4c13cbd83a19d19884bc7a6fd3be03c94c27c3c85ccaa7379cc36f69d89c72efc9e3cc6267d028f87b63b99b5e06967613cb82b88d698e235401dccd3bb18da9981b8746cdabf0bce83322bb3322bb3322bb3322bb3322bb3322bb3322bb3322bb3322bb3322bb332cb66b6b19f9e78ecc2fc3dc6267d028f87b6a7336bc1d3cec2fcfddd41b4c614af01eae039bf9ba19d19884bc7a6fdbbe13c28b3322bb3322bb3322bb3322bb3322bb3322bb3322bb3322bb3322bb3322bb36c661bfb19c9c70ebf8f83b1499fc0e3a1ed19cc5a30b5339cbfbf2788d698e235401d3ce7f730b4330371e9d8b47f0f9c076556e628661bfb9989c72eace7616cd227f078687b26b3163ced2c8c07f706d11a53bc06a883e7fc5e867666202e1d9bf6ef85f3500af3f11432abceaa731cb3eaac3ac731abceaa731cb3eaac3ac731abceaa731cb3eaac3ac731abceaa731cb3eaac3ac731abceaa731cb3ea5c393adbd8f7251ebb3d9cbfc7d8a44fe0f1d0761fb3163ced2cccdfdf1f446b4cf11aa00ee6e9fd0cedcc405c3a36ed53bc4a603e9e4266cd8df161d6dc50e63866cd0d658e63d6dc50e63866cd0d658e63d6dc50e63866cd0d658e63d6dc50e63866cd0d658e63d6dc50e63866cd0d658e63d6dc50e63866cd0d658e63d6dc50e63866cd0d658e6396901b36f6b3928f1d7e9f1d63933e81c743dbb398b5606a6778ffcb0341b4c614af01ea609e3ec0d0ce0cc4a563d3fe03701e945999a3986dec07938f9dcf7ab1499fc0e3a1ed41662d98da198e070f05d11a53bc06a883e7fc21867666202e1d9bf61f82f39036663c7f93938b1ddeb74931aadca3f53ddb95abc1f71c57ae01df735db9167ccf73e53af03ddf952781ef05d01ef2bdd0955780ef45aebc0e7c2f76e5b5e07b892bf781efa5aedc0bbe97b9f230f85eeecab781ef15ae7c3bf85ee9ca7780ef55ae7c27f85eedca7781ef35aefc74f0bdd695ef06dfeb5cf919e07bbd2bdf03be37b8f233c1f74657be177c6f72e5fbc0f76657be1f7c6f71e525e07b38c2f756577e16f8dee6ca0f80efedaebc1f7cef70e529e07ba72b4f05dfdf41991edfe5cae781ef1157ae07dfbb5db9017cef71e546f0bdd795a781ef7daedc04bef7bbf274f07dc0956780ef83ae3c137c1f72e566f07dd8956781ef23ae3c1b7c1f75e539e0fb982bcf05dfc75d791ef83ee1caf3c1f749575e00be4fb9f242f07dda951781ef33aebc187c9f75653cbf7fefca0f828fc69587c047e3cab3c147e3ca73c047e3ca73c147e3caf3c047e3caf3c147e3ca0bc04779f742f051debd087c94772f061fe5dd4bc04779f752f051debd0c7c94772f071fe5dd2bc04779f74af051debd0a7c9477af061fe5dd6bc04779f75af051debd0e7c9477af071fe5dd1bc04779f746f051debd097c94776f061fe5dd5bc04779f730f828efde0a3ecabbb781afc595df0ebef35df91de0bbc095df09be0b5d19c7998b5cf95de0bbd8951f011f8d85ef06df535cf93de05beacaef05df32577e1ff896bbf2fbc1b7c2953f00be95aefc41f0ad72e50f81afd5953f0cbed5aefc11f0e55cf9a3e06b73e58f812fefca1f075fbb2b7f027c1daefc49f075baf2a7c0d7e5ca9f065fb72b7f067c3daefc59f0d1fb388d33b63fdb3e483a9046d6476d6e8d680bf926435bfa8364afe928161d9bf6db8191ce417efc19f363656cf3182d4f2783669857b415fbccd4093c1d0c3c4ced0c3f3375796d6af7dad400759e02edec62686706e2d2b169bf0b62739c73d4a2d61d77a9a7450dd6716f68f6bdb3988e740c9bbff988b6f432b7858e4de352ef38c4eef662e7bcd8381ed356ac7f7503730f03b33d6e5ff2c70dfbd71a772cca298a938336ad050d926a13c6ce38a338e4af81f2bce691ba548ff4a0f72f62b7b94ce712d9fdd7757aaf6b803abd11edef0f926d7f9fc7d3e731db73d2d83cc2c1d01fc21ce8f538683f07daf5c568d70bda511d7cffcb3369d7e3f1f478b12d0f5de374818fae15881fafb35ac781db1ff7ba22b8c9d70d8c51d73a6dc93316bdd6690346f2f5004f379366feb95eeae983efcb755e1d7a6d0dd4590def8dd988bab6df2dc98cb48b3e83ff2548764caf63d00be70702d027f0340c402f6a672d03cfd460648ee0ccf0d0e9819b072f1b1c389c01b41a0f131f3311cda8021f96ab237c41307a2a04a764692a04a764ab3c59700a86eadb8f52b65934dd3078e2d8f0534f0e9e3c74faae53c38387f70cdd8cd4b51e3d92c6b50049d147dbe46064d2a63f487631a6ce8b552c7926c3e3a4e479da98da19bee94df1da54e7b5a901ead4c2735318da9981b8746cda9f12113bc18128d462ea18b4981ac133759cb5c0896ff2614fa5e771f1a4ca6b0bf6686c939fe7893688022e81e3671c9c7dce76f65ad79849c1c8c9a6d1d3cea8daab5a7b22ec0ca97de7b233a07608b2339c7646d3bea9d9194b3b43696724ed0ca49d71b4338c7646d1ce20da19433b43d812146600ed8c9f9de1b3337a1703db1781d77eaab6ef907646cecec0d919377b65653fb1d9ab117bf56daf14edd581bd2ab09f2ced2c837db7b55732f65ddabeb3da2b457b8568afe8ed15ae5da55a6f6c83d37aa3b14dc6361bdb626cabb16dc6b61bdb616ca7b15dc6761bdb636cafb17dc62e31766950985dbfccd8e5c6ae30f65463571abbcad8d5c6ae3176adb1eb8c5d6fec0663371abbc9d8016303c60e1a3b64ecb0b14163478cdd6ceca8b163c69e66ec96a07087ce0963278d0d193b65ec5663a78d9d090a2b667685ccae88d91530bbe26557b8ec8a965dc1b22b567685caae48d915a8fb82c20a935d29b22b437655c0ae02d8597f3bcbffdca0308b6f67ed5f101466e5ed2cbc9d75b7b3ec7656ddcea2db59733b4b6e67c5ed2cb89df5b6b3dc7656dbce62db596b3b4b6d67a5ed2cb49d75b6b3cc0f078559643b6b6c6789edacb09d05b6b3be7696f791a0308b6b676ded2cad9d95b5b3b076d6d5ceb2da59553b8b6a674ded2ca99d15b5b3a076d6d3ce72da594d3b8b69672ded2ca59d95fc9cb1478dfd83b17f34f64fc6fed9d8bf18fb57639f37f60563ff66ecdf8dfd4750c8cbff34f625635f36f615635f35f635635f37f60d63df34f62d63df36f698b1ef18fbaeb1ef19fbbeb11f18fba1b11f19fbb1b19f18fba9b19f19fbb9b15f18fba5b15f19fbb5b1df18fbadb1c78d3d61ec77c67e6fec0fc6fe68ec4fc1c8ea060e227f763b34d33e303c3c78e2d470cbf050cb89db8e0f1f3b75fcae963b8e0d1f6d19ba7df0f491e34377e08bdfe5862d5a46d878faf4c05d2dc74e1e1ebcb365e8b6e196a1232d07876e3b79f80cbee8f3ee450bce8e3870f8707cb06f573d09d2ef9519f4d7ee75b440b3b378db1e2f47903f95f3a219d5e535e812f7ae439fde2f2f5cedb69c393e34dc926b3969fe0e1c37af193cdcda82cf9d31229f196e39333c707ab8e5c8e9a1132d6dad78dc6ba694d1889ae6325ed4da3cf69607ff0f1d686fac2d0a0400", + "bytecode": "0x1f8b08000000000000ffed9d77745cc5f5c7dfaab92c5a59b6e55e44735ce5d5aacb4deedd6020f462d996b1836d195bb4100204484f20a41708a9900224a492427aef8d407a854012f8fdf33bf99ddfef1cce6fe6eddce8abf1bc8d767923dfa7bdef9cab9d7777f6ddcf7cdf9dd9b7336f57a920bf3dab2c65ca95ca4e0d8edfe8f91ef3987d7e5b738cc7cafae44c2584b322219c9509e1ac4a08677542386b12c23926219c6313c2392e464ecd56110cdde2e61def41d7b819d309d3f4a404685a9b304d3309d0b42e48c6183521219cf509e19c9810ce4909e19c9c10ce8684704e4908e7d484704e4b08e7f48470ce4808e7cc8470ce4a08e7ec8470ce4908e7dc8470362684f3e484709e9210ce5313c2795a42384f8f91731170ce338f2f308ff3cde302f3b8d03cd26b169bc725a68d5566bf49d952cda6acd97a2ea7ac4559abb236ebb976651dca3a957599e71acd73ddca96295bae6c85b295ca56191d562b5ba36cadb275cad62bdba06ca3b24dca362bdba26cabb26dcab62bdba1ec0c65672adba9ec2c65672b3b47d90b959dabec3c65e72bbbc062b950d945ca2e567689b24b955da66c97b25e65bb95ed51b657599fb27dca2e57b65fd901652f527685b283ca0e293bacac5fd91165572a3baaec98b201655729bb5ad935caae55769da5d98b955dafec25ca6eb0385faaec46653729bb59d9cb94dda2ec5665b7297bb9b257287ba5b257297bb5b2d7287badb2d7297bbdb2db95dda1ec0dcaee54f646656f52f666656f51f656656f53f67665ef50f64e65ef52769761a18e70b7b2772bbb47d97b94bd57d9fb94bd5fd907947d50d9bdcaee53f621651f56f611651f5576bfb207943da8ec63ca3eaeec21659f50f649659f52f669659f51f659650f2bfb9cb2cf2bfb82b22f2a7b44d997947d59d957947d55d9d7947d5dd937947d53d9b7947d5bd977947d57d9f7947d5fd90f2ccd7fa8ec47ca7eacec27c6f753f3f8335397e6c57eaeec17a6fca879fca5797ccc3c3e6ebde657ca7e6df97ea3ecb796ef77ca7e6fca7f308f7f348f7f328f7f368f7f318f7f358f4f98c727cde3dfcce353e6f169f3f877f3f80ff3f84ff3f88c79d46baa6736e4cb6383c1ad2788698c6add97d56b2a24febc60e8a6b5a834cfd163a3f157997d7a24edaacd7eb5e5af31fb35d671c69afdb196bfdeecd75bfe49667f92e56f30fb0d967faad99f6af94f33fba7813f1dc09cabf16b5fa571a5c047f95a01be6ae3ab045f0d1d0e7c638caf1a7c747e6bc037cef8c6806fbcf18d055fdaf8c69196ca4e32be9e20ae5cc9f6eae3d6c67d5cb30e95899f778f3e6e9d27de09f1f3f6e9e3d67be0d5f931d11c6b02e4cd24e3ab07df64e39b083e3304fdbbcf69df14e39b0cbea9c6d700be69c637057cd38d6f2af86618df34f0cd34bee9e09b657c33c037dbf866826f8ef1cd02df5ce39b0dbe46e39b03be938d6f2ef84e31be46f0d13d2e2783ef34e33b057ca71bdfa9e0a3b1f634f0d1b5e1e9c6a7c789b129788df1d31815be86c667f0cda7b1197c0b685c06df421a93c1b70862936f318c2be45b627c3446e9e7ba4db92788ab4fe4c23eb12ceee3aa23ebe3ae88ffb8e1baddca6050eb1e88b30cb45a65ca31de1bd48cb153c6280ef9aba0bc19ea523dd283de67885d8ffbcb4d795581d7755bafcb409de58ef6f704f1b67f85c5b3c262ae86f6fbc9d9969ce4ecb0b7a273f63ca86be71e5df38cc69cdd061c1e72b65d7276d85bd139db0775eddca3ebded198b3170287879cedf593b3b9ace46c7e8e2c08dcb9479f7d4663ceee078ef873b64d7276f85bd1397b33d4b5738f3eff8ec69cbd1a38e2cfd98e5eb93618f65674cede0e75eddca3b998d198b3b70287879ced937176d85bd1397b17d4b5738fe6054763cede091cf1e76c97a79c6d919c0df2eb9d41e0ce3d9aa31e8d397b0f70c49fb37b647e76f85bd139fb30d4b5738fd64b4663ce3e60ca7a9de1a7669d6116f87e667cb38137fedcdedbea29b77392dbf9fb4082c09da3b476371a73fb1153d679fc28dc7b40be5f1adfc9e07bccf84e01dfe3c6772ab4cb431fe8953e30ecade83ef06ba86be732ad238fc63ef063e0f090b37b246787bd159db34f415d3bf7e89e86d198b3bf030e0f39db27393becade89cfd17d4b5736fbe298fc69ca5fb4af5f5c21fccf5c242f0fdd1f81681ef4fc6b7187c7f36be25e0fb8bf13581efafc6b7147c4f185f167c4f1a5f33f8fe667c39f03d657c2de07bdaf85ac1f777e36b03df3f8caf1d7cff34be0ef03d637c9de07bd6f8ba8c4fdf9347f75e7dd7f8f4b9258d7a8278cf2ddd6349c7a6fdc52310bbce8a5d3782b1ebadd8f58ed84b3cc44e430cda52d67e0f9497f8e5c96682a1dfffa0584be38fd5a2dbde140cbfed4b8127eba1ed6988311c9e2cf034c7cf13deeb9b8bffb8e1396eb2344d43ac2668578b8776a520161d9bf6295e067c387eb738185be367cca520161d9bf65b81917cf87e42efebd47ff4fbe1bcd420af87be145e13513cfaed2fe2580a7eaaf3cce441b68586ad169ec7f7d666cbe7292fc3bca058746cdaa778b5d09ee69167cc0d97316b31fa1a2352108b8e6dc7c6febe64e4351bd679cd80ef048c49b952c7a45a601b89eb94a873cd25b68ff7ab14c4a0b18d34cf819fea4c315f48d063db4618773df4bf5cb1d76f381ec49fc7b92cf6ebe1f0b4008f8fbeefa9bf66f17dffb920de5c6bb3b46ab6b4ca409d56d0afcd837e85ae43289e300bb3300bb3300bb3300bb3300bb3300bb3300bb3300bb3300bb3300bb330f367c6fb2f707d93ea2d66c248be1cf0f898e70f7f3fca1c8b8eafd7751e83759df8d72d72595cb3a47b0c17586dae823a4fa706ebfe06d6d3edb5415cd35cec57bb61dd67511b1cbf16eb730d316a1dd8b57ed9185becdc1e5feb6d7586b9c9d275b143530ff7a90cd13465698af7292eb278749e4eaf1c64f3b1f657ec5a246a45e538d7f6f01e03bfe7253f7e502e540443c70f7c9f698f3df6d0354c5a2f6fb76257419dff490d9e1bba1795fecfa17dcf93aed3611d9b5eb300fc1dd6b12798d71247b575fc26782dd5f93f1853efae08fead998ffb3f705c0ea0adb8f54019d7cde37f1fceafe3b714c1d3063c3ec6194fd71b59ec0371afe377585ab9ae63a84e3be8d7e1413fd7b528ed533c61166661166661166661166661166661166661166661166661166661166661e6cf8cdf1525d634d4cb31611ca17b1fc2f50cfafd173abe5ed7796dc5605cdfeb70b4e6b4d06a7315d4f941c560dd3b4cb93638fe7e87a873e9613dafe0b9a478b5d01e5c0bf2f57dee568ba7d5a105951b638b9d5fc78f5fe3c175fc164bd79c43535ffd15d7585153ecafcd160fae8dd606c7df5b9286e38cc4bd43517941f1b02fb5828fcaf8fd681fe719df4becfb7a281eae5fdf67b49d10f83af7b9accf71a313dad4131c9fdf5550e77e18fb1e3465bc8703ef1d79c4f13c6d85d6a9493fdde6d87fcb2e9b5ff75d069c3d1007632f07d698623763ec94318a43fe2a287fb162b02ed5233d486b62d77d847e130cd9edd7355bafcb409d2e47fb7b8278dbdf6df1745bccfa9c3c0479f608bcfffb1a93ba22345a001a511dbc0ef2754f9e3d46daf737e27d7b35561dbc66a13adf84312aeafe51d73d87bedec7a2ee39745d1bb701a3dd46fb3ecf72bf4feb51182fe2be4feb51c821bc4f2bb08ebf108e4f5c3541f47b0bd5f995757cfb9a9c5e83f781519ddfc2785167ee59ac0d8ebffec67ba646e2f355d47dd2140faf6bb06fffa7b66be64ea8df132333e604b2e07502d579d23a671d11dc4b1daf7d3ae2b5a415fd0e157e7eb1f5d33a74c16b7a62d121dfe7bbadb6505e77415ba8ce7f59d780f15fb7e4af01e36febd06b121a075a1d6da53aff0d7ded5f708d47e7093f77d4541eff3c6d85ae01493fdde691fe7d608ccde1f781ab2b07ebdabff34b5a17fbfbc0edd6eb38fe3ef0ff429ed5c07de8bec6eae5111a2d048da80e7e3788de47f0b77c5def31beeeed8f7a8f71fd06258ecf759523cf66cfabb9ae11a80ebd16af11261be6094667bbae3d5f48ef9771de378cdf956882b8f85d89264f7a6641b71ed8c7eb8213193beb2976d46f4e67472076d46f4e8f44ec7a2b76fd08c616cd45734e9a7bf84de4f0fb67f89ba57a2b745d4a0c19785d4502182b13c0589500c6ea0430d62480714c0218c72680715c0218c72780310d8c27f2bddd833eb952f5f175be0a5d6b606c0fffbb2457ecffeff0fcbf540a5efb606c0f9fe9422d9604c3d7023fe7f9f8ed8762ffd70b31e0ff2e989800c64909609c9c00c68604304e4900e3d404304e4b00e3f40430ce4800e3cc0430ce4a00e3ec0430ce4900e3dc0430362680f1e404309e9200c65313c0785a02184f4f00e33c618c8571915fc65ca98c9ac7c7fffc7b3eff73cc034fd675cfa9a7ef9e14fdffd63cff3e6973a9bf1b87f796f8fd9f70cfefb7ed7cdc3b52ec6fdb15fa7fab9e1873a532faba8f1dbfc7331c1efc5ea4ebbb351e1873a532fafafe0b7e476f383ceda0599b43330f8cb952197ddd2b57ecbd9c784f7fbb43330f8cb95219f1beea187942cd3a8ae0e904cd3a1c9a7960cc95cae8ebbee434c4180e4f1768d6e9d0cc0363ae54464fdf6d0b35eb2a8207bf03d6e5d0cc0363ae5446cdb3cc9366dd45f02c03cdba1d9a7162449eb87f27bbdb11cbc777068b6d3b3120e3b804308e4f0023de27e163fc2a749f44b75f7d72a5eae3eb7c15ba4f02637bf87e4ca8057e1fe23f69b1c22f4fc1fb2430f64a4f5ae0f755fe93162b81c7c7f767d21063383cc49081d74d4c00e3a404304e4e0063430218a72480716a0218a72580717a02186724807166021867258071760218e72480716e0218f1b3aa876bc5829f5f568ef2d8519f55467beca8cf25a33db6e4b9e47939c4963c973c2f87d892e792e7e5105bf25cf2bc1c624b9e4b9e97436cc973c9f372882d792e79ce297612e6f88571f431224f637c3c596c3bc6ea61d0f61e074fca53db31d66a066d2786a431ae4a00e3b204308a8ef97b104b61d43c6b3cf1ac2e82670df0acf5c4b3a6089eb5c0b32e7e9e30a7d616c1430c1978ddb20430ae4a00a3e8283a6ad35bf6f96da22323c624e8288cc2288cc27822189330860b6322f231572aa3e6591f3f4fa8d9ba2278d68366f4ba66bf8cb9521935cf86f87942cdd617c1b301345befd0cc0363ae5446cdb3317e9e50b30d45f06c04cd363834f3c0982b9551f36c8a9f27d46c63113c9b40b38d0ecd3c30e64a65d43c9be3e70935db5404cf66d06c9343330f8cb9521935cf96f87942cd3617c1b30534dbecd0cc0363ae5446cdb3357e9e50b32d45f06c05cdb63834f3c0982b9551f36c8b9f27d46c6b113cdb40b3ad0ecd3c30e64a65d43cdbe3e70935db5604cf76d06c9b4333ae8ccb12c0b82a018c9e75cc95caa8797678e2d95e04cf0ee039c313cf8e2278ce009e33e3e70973ea8c2278882103af5b9600c6550960141d45474e8ca263f9e8288cc2288cc531f6248051ceb5307265f4f0f9aae07768ce18e5b1ebacd87565123bea3b34a33db6e4b9e47939c4963c973c2f87d892e792e7e5105bf25cf2bc1c624b9e4b9e97436cc973c9f372882d792e795e0eb125cf25cfcb21b6e4b9e47939c4963c973c2f87d892e792e7e5105bf25cf2bc1c624b9e4b9e97436cc973c9f372882d792e795e0eb125cf25cfcb21b6e4b9e47939c4963c973c2f87d892e792e7e5105bf25cf2bc1c624b9e4b9e97436cc973c9f372882d792e79ce29f6cef863e78afd8d999dc0e3e3376f3cb533ab8f7b9639d67331eaa7b53adbd2ea0c4bab0cd4390bf43bdb837e29884bc7a67d8a572cf30b18307b8a9dab0b86f66b8ab1cad243d739c753dba3c6fa734679eca8b17eb4c78e1aeb477b6cc973c9f372882d792e795e0eb125cf25cfb9c4c672753078dd4ebf7faa8ff14253ae32fbc84a7eaa73e698fce38440fa908fd8d287e4bda21c624b9e4b9e97436cc973c9f372882d792e795e0eb125cf25cfcb21b6e4b9e47939c4963c973c2f87d892e7fcf23c03cf578c004f60f1040578e630e399c68c6722339e71cc781630e3a964c6b39219cf48dccf570ccf16663c1b99f17432e399cb8c6721339ee9cc7872cc782631e36963c6339e19cf3a663c55cc785633e3c932e3d9c68c671e339e19cc782633e359c48c27cd8ca79a19cf1a663c4b99f1cc67c6b39d19cf56663cddcc783631e3e962c6d3ce8c6726339e16663c0dcc789a98f19cc48ca79619cf7a663c35cc789630e3d9c18c6739339e59cc78a630e3c930e3a963c6338619cf0a663c9b99f16c60c6d3c18c6736339e56663c5399f12c66c63381194f3d339eb5cc78c632e34931e04907c7ff26591a9edf09be0aebb5fa7aa0b961f0f9738dbf025e739e29573a8e7d2ef8e8bbe1e7395e8b3a9d0b6de931e5ecf3db429d30560fec53bc5ae0388f09cf58663c6b99f1d433e399c08c6731339ea9cc785a99f1cc66c6d3c18c6703339ecdcc785630e319c38ca78e194f8619cf14663cb398f12c67c6b38319cf12663c35cc78d633e3a965c67312339e26663c0dcc785a98f1cc64c6d3ce8ca78b19cf26663cddcc78b632e3d9ce8c673e339ea5cc78d630e3a966c69366c6b38819cf64663c3398f1cc63c6b38d194f9619cf6a663c55cc78d631e319cf8ca78d19cf24663c39663cd399f12c64c63397194f27339e8dcc78b630e3d9c98c6725339e4a663c0b98f18c63c6339119cf34663c7398f15438783cfcffcb9087ee5fa363d3fe4e26b13d9c87f0ff7e9eefa94d179863559be3123fc5ab823a179a8142df5f85af252efb7e437c6fba0034bac0535be87ca4acf3e339760eefab0c8021b0f4091c3c3eee47f5d4ce217918e3ff9fcd6aad2eb4b4b2cf5d06ea9c0ffa5de8413f576effbb0f98c724326b1eba3623d634d45bc984917ce7f8e509fbedca60e856a8df5e083c3ec6304fed0cfbd745569b563a74a73a98ab177968a7abefd0fe45701e92c6ac79569b32b1a6a1de6a268ce4bbc02f4fd8bf560743b742fdeb22e0f131fe786a67d8bf2eb6dab4daa13bd5c15cbdd8433b5d7d87f62f86f3903466cdb3c69489350df5d6306124df857e795ad3d066da0af5af8b81c7c7f8e3a99d61ffbac46ad31a87ee540773f5120fed74f51ddabf04ce83300bb38b59f3d077b888350df5d6326124df455e795ab36968336d85c6b14b80c7c738ef49f7701cbbd46ad35a87ee540773f5520fed74f51ddabfd411bb3188578bcb86a1c5650e9ecb46580b8a572cf3f90964169d45e72866d159748e62169d45e72866d159748e62169d45e72866d15974d69be82c3a8bcea2731ccca2b3e81cc52c3a8bce51cca2b3e81cc52c3a8bce51cca2b3e81cc52c3a8bce51cca2b3e81cc52c3a8bce51cca2b3e81cc52c3a8bce51cca2b3e81cc52c3a8bce51cc1c74d63cf49b59c49a867aeb983092ef62bf3ce1f782d60543b794b5df03e5cb80e7120ffa786a67780ff92eab4deb1cba531dec5fbb3cb4d3d577687f179c875d45305f9a4066d1b93466cd43bf4d4fac69a8b79e0923f92ef1cb138e63eb83a15ba1716c17f0f818e73db5331cc77aad36ad77e84e75b07ff57a68a7abefd03ec51366618e62d63cf43fa288350df536306124df655e7972e1f71b370443b742e3582ff0ec8a9d273f8e79d03d1cc7765b6ddae0d09dea60aeeef6d04e57dfa1fddd701e8a61be3481cca2b3e81cc52c3a8bce51cca2b3e81cc52c3a8bce51cca2b3e81cc52c3a8bce51cca2b3e81cc52c3a8bce51cca2b3e81cc52c3a978fce9a87fe5710b1a6a1de46268ce4dbe595a7255c77d8180cdd52d67e0f9477034f6fec3cf975070fba87eb0e7bac366d74e84e75b07fedf1d04e57dfa1fd3d701e463bf3a5096496dc181966c90d618e6296dc10e62866c90d618e6296dc10e62866c90d618e6296dc10e62866c90d618e6296dc10e62866c90d618e6296dc10e62866c90d618e6296dc10e62866c90d618e6296dc10e628660eb9a179369932b1a6a1de26268ce4ebf5cb13feeec1a660e856e8be9d3dc0b3db833e9eda19deb7b3d76ad32687ee5407fbd75e0fed74f51ddadf0be7419885d9c5ac79369b32b1a6a1de66268ce4dbed97271cc7360743b742e3d85ee0f131ce7b6a67388ef5596ddaecd09dea60aef67968a7abefd07e1f9c0761166617b3e6d962cac49a867a5b9830926f8f5f9e701cdb120cdd0a8d637dc0e3639cf7d4ce701cdb67b5698b4377aa83b9bacf433b5d7d87f6f7c17910666176316b9eada64cac69a8b7950923f9f6fae5c9a5a1cdb4151ac7f6018f8f71de533bc371ec72ab4d5b1dba531dccd5cb3db4d3d57768ff72380f4963d63cdb4c9958d3506f1b1346f2f5f9e509fbd7b660e856a87f5d0e3c3ec61f4fed0cfbd77eab4ddb1cba531dccd5fd1edae9ea3bb4bf1fce43d29835cf765326d634d4dbce84917cfbfcf284fd6b7b30742bd4bff6038f8ff1c7533bc3fe75c06ad37687ee540773f5808776bafa0eed1f80f3903466cdb3c39489350df5763061241fbe5fecf0c4536bf1d43ab4188db1ebacd8756512bbde8a5d5f26b125cf25cfcb21b6e4b9e47939c4963c973c2f87d8e59a6ba279796a9e3a819aa74ea0e629d19ca5e6cfc517bb2d130c6e15106bbfa776e2d603659c9fa36d0e339e69cc782632e319c78c6701339e4a663c9dcc78e632e359c88c673a339e1c339e49cc78da98f18c67c653c58c27cb8c671e339e19cc782633e359c48c27cd8ca79a19cf52663cf399f17433e3e962c6d3ce8c6726339e16663c0dcc789a98f19cc48ca796194f0d339e25cc789633e399c58c670a339e0c339e3a663c3b99f18c61c6b382194f07339ed9cc785a99f14c65c6b39819cf04663cf5cc78c632e34931e04907c77f1f05bf4f50093ebabf7f07f85e64ca3bc157e18841c739003e9acfa563e8f7abe50dc73354c06bae7070bdc8118fe25ce178ed48e88eb17a609fe2d502c7154c78c632e3a967c6338119cf62663c5399f1b432e399cd8ca78319cf0a663c6398f1ec64c653c78c27c38c670a339e59cc789633e359c28ca786194f2d339e9398f13431e36960c6d3c28c6726339e76663c5dcc78ba99f1cc67c6b394194f35339e34339e45cc782633e399c18c671e339e2c339e2a663ce399f1b431e399c48c27c78c673a339e85cc78e632e3e964c653c98c6701339e71cc782632e399c68c670e339e0a07cf4e4f3c51bfa7b093416c3def4dd78234279686e747e27b4a3b2d46dadf0f8ce4c3fb74b39e78a27e8322cb20b6d6622994f59686e7f17b26be722a6b31d2be2ba7f03ecba59e78a27eb7632983d85a0b5a1ba07b00d2f03cde57ed2ba7965a8cb4efcaa97abf3ce1ff9658120cdd0add6b847dcec739f4d4ce2cf6bf187f43c3f95bd44b2cad32506724ee2b8e1a0f289e300b7314b3e6a1b52f62c5f7b391f8ded270185defaf1e78c2f1b12918ba151a1ff7038f8ff70f4fed0cc7b183569b9a1cba531dccd5831edae9ea3bb47fd011bb3188578b43c3d0e29083e7d0086b41f18a65de9940660e3a6b1eba579358d3506f311346f265fdf284e3e3e260e856687c3c043c3ede3f3cb5331c130e5b6d5aecd09dea60ff3aeca19daebe43fb87e13c14c37c3081cca27369cc9a87d66888350df5724c18c9b7df2b4f2e9b8636d356681c3b0c3c3ec6794fba87e358bfd5a69c4377aa83fdabdf433b5d7d87f6fbe13c08b3300bb3300bb3300bb3300bb3300bb3300bb3300bb3300bb3300bb3300b336f66cd43df1d26d634d46b61c248be435e79f2eb0e2dc1d0add0ba433ff01c8e9d27bfeee041f770dde188d5a61687ee540773f5888776bafa0eed1f81f320ccc22cccc22cccc22cccc22cccc22cccc22cccc22cccc22cccc22cccc22cccbc99350ffd863cb1a6a15e2b1346f21df6cb137e6fab3518ba155a7738023c3ed6653cb5335c77b8d26a53ab4377aa83b97aa58776bafa0eed5f09e7419885d9c5ac79e8b70789350df5da983092afdf2b4f7efdb42d18ba151ac7ae041e1fe3bc27ddc371eca8d5a63687ee540773f5a88776bafa0eed1f85f3500cf3c104328bcea27314b3e82c3a47318bcea27314b3e82c3a47318bcea27314b3e82c3a47318bcea27314b3e82c3a47318bcea27314b3e85c3e3a6b1efa9f86c49a867aed4c18c977c42b4f4bb8eed01e0cdd0aad3b1c051e1feb329e740fd71d8e596d6a77e84e75b07f1df3d04e57dfa1fd63701e463bf3c104324b6e8c0cb3e4863047314b6e087314b3e4863047314b6e087314b3e4863047314b6e087314b3e4863047314b6e087314b3e4863047314b6e087314b3e4863047314b6e087314b3e4863047314b6e0873143387dcd03c1da64cac69a8d7c184917c57fae5097ff7a02318ba15ba6fe718f01cf5a08fa77686f7ed0c586dea70e84e75b07f0d7868a7abefd0fe009c0761166617b3e6e93465624d43bd4e268ce43bea9727978636d356681c1b001e1fe3bca77686e3d855569b3a1dba531dccd5ab3cb4d3d57768ff2a380f4963d63c5da64cac69a8d7c584917cf8bedce589a7d6e2a9756871a2626b2dba4df924f39886e7bb81d1d778d86531d23ee638f96a81a7db134f9dc553e7d0e244c5d65a2c87b2ded2f0fc7260f49553dd1623edbb72aa0e78967be2a9b778ea1d5a9ca8d85a8b15a63cc13ca6e1f915c0e82ba7965b8cb4efcaa97ae059e189276a4c5a3102b1a3fad748c48eca9591882d9a8be6a2b968ee53f3d409d43c7502354f89e6ac34f7701d15cef7528c001870eb81327e56f071ede9a99d59d7e7b115569bf0f318ce399ca8cf1bc22ccc51cc9ee62d5ad3566cd227b078681bf0acc548ce9b765b6d4ac2bc6921e6830964169d4b63d6b1af8e3f766bda8a4dfa04160f6d577bd6c2533bc3f1e09ac0ad31c5cb401dccd36b3cb4330571e9d8b47f0d9c8762980f269059742e8d59c7be36f6d8f9df93c7d8a44f60f1d076ad672dfcb4333f1e5c17b835a67819a883797a9d8776a6202e1d9bf6af83f320ccc22cccc22cccc22cccc22cccc22cccc22cccc22cccc22cccc22cccc22cccbc9975ec17c71e3b3f7f8fb1499fc0e2a1edc59eb5f0d3cefcfcfdf5815b638a97813a78ceaff7d0ce14c4a563d3fef5701e845998855998855998855998855998855998855998855998855998855998859937b38efd92f86387dfc7c1d8a44f60f1d0f612cf5a786a67387f7f43e0d698e265a00e9ef31b3cb4330571e9d8b47f039c0761166617b38efdd2d863e7d7f33036e913583cb4bdd4b3167eda991f0f6e0cdc1a53bc0cd4c1737ea38776a6202e1d9bf66f84f3500cf3c104328bcea27314b3e82c3a47318bcea27314b3e82c3a47318bcea27314b3e82c3a47318bcea27314b3e82c3a47318bcea27314b3e85c3e3aebd837c51ebb259cbfc7d8a44f60f1d07693672dfcb4333f7f7f73e0d698e265a00ee6e9cd1eda9982b8746cdaa778e5c07c3081cc921b23c32cb921cc51cc921bc21cc52cb921cc51cc921bc21cc52cb921cc51cc921bc21cc52cb921cc51cc921bc21cc52cb921cc51cc921bc21cc52cb921cc51cc921bc21cc52cb921cc51cc921bc21cc5cc213774ec97c51f3bfc3e3bc6267d028b87b69779d6c2533bc3fb5f6e09dc1a53bc0cd4c13cbdc5433b5310978e4dfbb7c0791066617631ebd8b7c61f3b97b662933e81c543dbad9eb5f0d4ce703cb82d706b4cf1325007cff96d1eda9982b8746cdabf0dce43d298f1fc8d8d2f7678df26c5a8308fdaf77253ae04df2b4cb90a7caf34e56af0bdca946bc0f76a531e03bed7407bc8f75a535e04bed799f20af0bdde949783ef7653ee06df1da6dc05be3798f200f8ee34e5abc0f74653be1a7c6f32e56bc0f76653be167c6f31e5ebc0f756537e31f8de66cad783efeda6fc12f0bdc3946f00df3b4df9a5e07b9729df08bebb4cf926f0dd6dca3783efdda63c0f7cf7387cef31e59781efbda67c0bf8de67ca3bc1f77e531e07be0f98f278f07d10caf478af299f04befb4cb9167c1f32e50cf83e6cca75e0fb88294f00df474db91e7cf79bf244f03d60ca93c0f7a0294f06dfc74cb9017c1f37e529e07bc894a782ef13a63c0d7c9f34e5e9e0fb9429cf00dfa74d7926f83e63cab3c0f759539e0dbe874d790ef83e67ca73c1f77953c6f3fb0553be157c34aedc063e1a575e0e3e1a575e013e1a575e093e1a575e053e1a575e0d3e1a575e033ecabbd7828ff2ee75e0a3bc7b3df828ef6e071fe5dd1de0a3bc7b03f828efee041fe5dd1bc14779f726f051debd197c94776f011fe5dd5bc14779f736f051debd1d7c9477ef001fe5dd3bc14779f72ef051dedd053ecabbbbc14779f76ef051dedd033ecabbf7808ff2eebde06b34e5f781ef64537e3ff84e31e50f80ef5453c671e63453be177ca79bf27de0a3b1f043e07b81297f187cf34df923e05b60ca1f05df4253be1f7c8b4cf901f02d36e507c1b7c4943f06be2653fe38f8969af243e0cb9af227c0d76cca9f045fce943f05be1653fe34f85a4df933e06b33e5cf82afdd941f065f87297f0e7c9da6fc79f0d1fb388d33ba3feb3e483a9046da476d6e72b4857c63a12d3d41bcd774148b8e4dfb2dc048e72037f28cb9e132365b8c9aa7cd83669857b415faccd4063cad1e783cb533fcccd46eb5a9c56a5306eabc00dad9eea19d29884bc7a6fd7688ede39ca316d5e6b8f32d2daab08e7943d3ef9d8574a463e8fccd39dad2e5b92d746c1a97ba46207687153b6bc5c6f198b642fdab03983b3d30ebe376c77fdcb07f2d33c7a29ca2385968d372d020ae3661ec94318a43fe2a28cf6818ac4bf5480f7aff22769dcb742e91dd7e5d9bf5ba0cd4e972b4bf2788b7fddd164fb7c5accf495dc3208787fe10e64097c541fb59d0ae3b42bb2ed08eeae0fb5fce93769d164fa7155bf3d0354e3bf8e85a81f8f13aab6904b8ed71afddc14dbe0e60745deb34c7cf58f05aa71918c9d7093c1d9e34b3cff57c4b1f7c5faeb1ead06baba0ce52786f4c3beaea7e372f35d82efa0cfe5c10ef985ee3412f9c1f08409fc0d23000bda89dd51e78c607837304c706fa8ff65ede77565fefde14a0555998f8987234a3027c58ae74f88260e854084ec9d254084ec95658b2e0140cd5d71fa574b368baa1efd08181171eee3bbce7e8754706faf66eebbf1ca9ab2d7a248d6a0192a28fb6b1c1e0a44d4f10ef624c8d15ab50f28c85c731f1f3347b6a67f8a637ce6a538dd5a60cd4a986e7c67968670ae2d2b1697f9c23768c0351a8c5f8616831dec1337e84b5c0896ff2614fa5e771f1a4c26a0bf6686c939de7b1368802ce83e3a70c9c7e4e77f66ad39831c1e0c9a6d153cfa8eaab5a7d22f40ca97ee7d233a07a08d2339c7a4653bfa9e9194b3d43a96724f50ca49e71d4338c7a4651cf20ea19433d43d818e46700f58c9f9ee1d3337aa703db7781577faad6ef907a464ecfc0e919377d65a53fb1e9ab117df5adaf14f5d581be2ad09f2cf52c837eb7d55732fa5d5abfb3ea2b457d85a8afe8f515ae5ea55aa96c95d17ab5b235cad62a5ba76cbdb20dca362adba46cb3b22dcab62adba66cbbb21dcace507666909f5d3f4bd9d9cace51f64265e72a3b4fd9f9ca2e5076a1b28b945dacec1265972abb4cd92e65bdca762bdba36cafb23e65fb945dae6cbfb203ca5ea4ec8a207f87ce21658795f52b3ba2ec4a6547951d0bf22b667a854caf88e91530bde2a557b8f48a965ec1d22b567a854aaf48e915a89b82fc0a935e29d22b437a5540af02e8597f3dcbffca203f8baf67ed5f13e467e5f52cbc9e75d7b3ec7a565dcfa2eb59733d4bae67c5f52cb89ef5d6b3dc7a565bcf62eb596b3d4bad67a5f52cb49e75d6b3ccf704f959643d6bac6789f5acb09e05d6b3be7a96f7be203f8bab676df52cad9e95d5b3b07ad655cfb2ea59553d8baa674df52ca99e15d5b3a07ad653cf72ea594d3d8ba9672df52ca59e95fca2b247947d49d997957d45d957957d4dd9d7957d43d937957d4bd9b7957d27c8e7e5f7947d5fd90f94fd50d98f94fd58d94f94fd54d9cf94fd5cd92f943daaec97ca1e53f6b8b25f29fbb5b2df28fbadb2df29fbbdb23f28fba3b23f29fbb3b2bf28fbabb227943da9ec6fca9e52f6b4b2bf2bfb87b27f2a7b46d9b3c1e0ea060e22ff323b34d3de3b30d077e8c840e3407fe3a1ab0e0e1c3872f0bac66b0e0cec6fecbfbaefe8be83fdd7e08bef35c3162d23ac3e7ab4f7bac60387f7f65ddbd87fd54063ffbec6ddfd571dde7b0c5ff40df3a259c747ecddbb373ad82f2a9e07e9e325067dc2bc8e166836176edb53a508f26c292f9a54595a83ce30ef3af4e9fdecfcd56ee3b183fd038dd9c6c3ea6fef41f59abebd4d8df8dc3125f2b181c66303bd47071af71ded3fd4d8dc84c7bd605c098da86a28e1454d0dc36f79f0ffa32be9722d0a0400", "isInternal": false } ], - "packedBytecode": "0x000000028df71de500000047ce1f8b08000000000000ffed9d779815c5b6f67b6040643b0398b3830915c56118e20cb03127cc2822220cc3080a0c51cc98250773468292b380802020869373f2243d1e4fbaf79e739efbc7fdeefd82dfeddabbd69d778aea61f6d8b579f7eceae7a9d9d56baa7bfdeaedd5d5a9baab20484fff0c5381ceb70cd399c18193fc3fa97f4bbfd9d435c67595bae42cc811ce1639c2d93247380b7384b3558e70b6ce11cec37284b34d8e701e1e23a7626b11d49fe2e66deb40d7b8191339a6e91139a069518e695a9c039ab60b72a38d6a9f239c1d7284f3c81ce13c2a47388fce11ce637284f3d81ce13c2e47388fcf11ce137284f3c41ce13c2947384fce11ce537284f3d41ce13c2d47384b7284b3638e709e9e239c67e408e79939c279568e709e1d236767e0eca47fcfd1bfe7eadff3f4af943d5fff5ea07fbbe83a16eaf90b155798d4439a32e37fddc2541ea6ee61ea61fcaf67987a85a97798fae8ff95e8ff5584a9324c7dc3d42f4cfdb50603c27451982e0ed32561ba344c9785e9f2305d11a62bc3745598ae0ed335611a18a66bc3745d98ae0fd30d61ba314c3785e9e6300d0ad32d61ba354c83c3745b9886182cb787696898ee08d3b030dd19a6e1611a11a6aa308d0c5375984685a9264c7785697498c684e9ee30dd13a6b1611a17a6f161aa0dd384304d0cd3a4304d0ed394304d0dd3bd619a16a6fbc2747f981e30347b304c0f85e9e1303d62704e0fd3a3617a2c4c8f87e989303d19a6a7c2f474989e09d38c30cd0cd3ac30cd0ed39c30cd0dd3bc30cd0fd382302d0cd3b3617a2e4ccf87e98530bd18a697c2f472985e09d3ab617a2d4caf87e98d30bda95964475814a6b7c2b4384c4bc2b4344ccbc2f47698de09d3f230ad08d3ca30ad0ad3ea30ad09d3da30ad0bd3fa306d08d3c6306d0ad3e630bd1ba62d61da1aa66d617a2f4cdbc3b4234c3bc3f47e9876856977983e08d39e30ed0dd3be307d18a6fd61fa284c1f87e993307d1aa66f85e9db61fa4e98be1ba6ef85e9fb86e63f08d30fc3f4a330fd58db7ea27f7faacbcafdbb9f85e9e73aff0bfdfb4bfdfb2bfdfb99b1ccafc3f41bc3f6db30fdceb0fd3e4c9febfc17faf70ffaf74bfdfb47fdfb95fefd93fefdb3fefd8bfefdabfefd9bfefd17fdfbaffaf7dff4efdff5ef3ff4ef3fc3b4b9633adf26a89b92414c6d54794dead98f88df29a83f292d5aeaffc96f89b617ea79f915ed5ae9f95686bdb59e6f6daca78d9e6f63d83be8f90e86fd283d7f94613f46cf1f63d88fd3f3c719f633f5fc99604f04706f58db95ada53615804de2b505d85a695b4bb0b596d581ed306d6b0536d9beadc176b8b61d06b6b6dad6066c096d3b5cb40cd311da960ce28a95d2116abd4571af573f2f2b8e9f77a45a6f3b47bcede3e71da5d6dbc101af8a8f23f5bada43dc1ca56d1dc076b4b61d09b663b4ed28b01dab6d4783ed386d3b066cc76bdbb1603b41db8e03db89da763cd84ed2b613c076b2b69d08b653b4ed24b09daa6d2783ed346d3b056c25da762ad874931b9c06b6d3b5ad046c67685b47b09da96da783ed2c6d3b036c676bdb996093f6f72cb0c9f9e2d9daa6da8ec30b60196d97762bb58cb4d9603b57da6bb09d276d35d83a4b3b0db6f3c1b7d82e80b6466c5db44dda2df5bf3e3a9f0ce2da4fca6ad47a2be25e6fb866b5debef1af37f5ccb15f50a77512fc548056fd753ec67e4d5dd177814ee247ec8590bf0aca4a39d1438e3dc2ae8e05953adfbf81e5fa18cb1543994a4bfd9341bcf5ef6bf0f435985b41de4dcc76ebe663b6d153c6313b18ca9ab127e741cd31660702878398ede963b6d153c6315b0365cdd89373e1e618b3b703878398ad7213b365a53e66d3f7cd82c01e7b723dd41c63760c70c41fb3dd7dcc367eca38661f87b266ecc93571738cd969c0117fccf6acf2e7068d9e328ed90550d68c3db93fd31c63f629e07010b335be9d6df49471ccbe0965cdd8937b85cd31669f038ef863b6b7a398ede66336483f030d027becc97debe618b38b8123fe981de9efcf367eca386677405933f6e4194a738cd9f53aaf9e33fc443f6738196c3fd5b6538037fed8aeeeee28b6cb7c6ca7fb8604813d46e5795e738ced0f745ec5f12fa03f82d87ea96d1dc1f62b6d3b1d6c9f69db19502f07fb4095df071a3d65bc0ffc06ca9ab12ccf969be33ef023e07010b3d53e661b3d651cb37f83b266ec493f87e618b3bf070e07315be363b6d153c631fb9f50d68cbd7374be39c6acf43555e70b5fe8f385f3c0f6076deb0cb62fb5ed7cb0fd51db2e00db57dad6056c7fd2b60bc1f6676d2b05db5fb4ad2bd8feaa6d6560fb9bb67503dbbf685b39d8fe55dbba83eddfb4ad07d8feae6d3dc1f60f6deb05b67f6a5b6f6d53fdf4a4ef959cb7b601fe6410efb6957e97b26e99ef9a05dfed0cdfedb2e8bb83e1bb83c5779903df09f0215381319f847c995b9ed262e0415fe5f1fbeaa6eade2d687cddcb81a7bb83ba27c0476378ba034f8ff87952fd7f7bc6bfded436ee66689a005fdda05ebd1cd4ab007cc9ba655efc15830ddbd65e16c6def1339615802f59b7ccf70646b1615b2fef5cc9fea38e879d0aea781dec4ba97322f127df2d138e72b04b992b3bd6b175d66c45f07f3ceef5306c8ee2321517e24bd62df3e2af08ead323fb8c658d65ec6e30ba6a230ac097acdbfbaedb0e92c7e3b8836b1d6b9b26be2bb2e0bbb7e1bbdcf08d6da74c0d1ddb7a0373ecd79cfad85619ff7a4bf1fa44ae0dc50f9e3fe0355c5c7542df726d287ec45e08f96b0beaca4a39d143da616157b12cdb12d9cde57a19cb1543990a4bfd9341bcf5af34782a0d66b54d2e8663a183fd211503150687cc9783769511da55807652e61cd0ce557bd6c7e091f91ec023ed584fe071754d14c5938debb183f9c67358bc7e96ffe37980abedd5d5609479dbf6ea0d8cb6731507d7330d9eab740746b1f5019e6e8e348bdaaedd487c3b8895547b243ee4dc5cf6df1e609732bdf50b75aaadbc1bda4a173182f1285363af79e3df4e65a96bf0ee19f0e0b673705dd5d5513c96e2fd9baf837863cd6c97ba1b5a45dde371d596773378645efc7966cfec993db367f6cc9ed9337b66cfec993db367f6cc9ed9337b66cfec993db367e667c6e749d86f4bcaf5206134fbbfb9bacf9ffafea15e97ac5f3dd7f93f4efb83959562ff18e907719e51e7422853d4a2aeecff87fe60e6732aec23d9c3ad76a96d89fd3193302ffeb0af156e4b86fe4e25b1f92e1be9ea799bea63adbea369f6fdec61d1d445ff67d4b4c0d014fbe39f6ff0a838ad6c59c7e6e2d95fa6cf22512bc9c7f96caf38b0c77afcdba5acde33eb1641fdf6038f33aefaef485b2dcfcb2b0cdf8550e6a41675db46fa56c918c3dd8ce5b0df8fac5b96390fec95c6badbeb6585a395b1fe9eb0ac943915dad4bd2dea3473d0569665da771d9f9bc77f1c4e3fc7ef96014f57e071d1ce383adf28c57d20eee7f866ff34db798c94c1be7d0efa5536d8df49fc7966cfec993db367f6cc9ed9337b66cfec993db367f6cc9ed9337b66cfec993db367e667563ce6b3567cbfb69c84314b7d1f52cf33e45b65b2fed4f7825bd4f975fd1c4e9e397536ea8cef8efeb3455dd9cd3a5f141cd8df216a5bbafa3e45d4b6147ff8ed197c16e4e2b96e01f892759759b4907c496cbed3cff15d8c0d21cff1bb19ba965b3475b5bfe23356d414f7d7ee060f3e1b8dfab64f996173d977282a2ec41fee4b6560933cbe1fed623be3b1c4ecd723fef0f9f577b4b6ed0357dbbeacd465bb81df4d490607c6377e4fe587d0f6fd58e7b10f07f61df9c2f27f991a7a4e2dfaa93a3bf8be666901ac4bb6afeddb9e03803526df5d715d053a0d30342884fce72deaca4a39292b5a0bbbda47e41b30c86e2ed7dd58ae18caf4b3d43f19c45b7ff35babfd0d66b54d7e0671f6051cff5db549fd22343a0f3492328ebfd968ed5f69f62bc476b4b5514696c56fd1fd15daa8a8fea3b66380ebe398acdb761c338f0b8de9e799effdb4fe0bda8bb8fb69fd17c410f6d30a8cf57786f50b57eb20fad82265fe9fb17ef39c5c96c17e60ffb39fc0f75cca743e9373f243757d653b27c7e5a2eaae98f13b68c9189931269005cf13a44c5badb56cb3ca08eede96658b229615adcc6f85150507eae7e63b6be97dbebf5117896bfc06b994390aeae2e6bc257d0ee8ea9b7249a893ca9759ea2a658e877ded449d4fc076c2fdf65ccbff656ae81c10c770bf28fe3aa7b6efc5c099043fe8fb12608dc97757f42de780e247ec85903fa7655d5929277a88d6c2aef611398f427673b90a63b9622833c052ff64106ffd2f32782e3298d5363905e2ec5ce887eeaaad1e10a15167d048cae03d45db77406df73a5cbdbf11752e85ef2f99e757789c7473de643f8f35efabd9ce113a1bfc788ed013dad984a5ac79bf508e9771f61bc677257a825f7c57c2d5b79bfb806e4998c7f38243e9dbc5776c95bfa83113fa64c177d49809d9f0ddc1f0dd218bbebde65e7326cd1d8c41907aff0cbf59aaa686ce4b715c0259ae0530ba18cb2111d4fff6f8c118717c0759ae2530ba383e64faedf39ec028cb1502a38b774b71fc8dc630e23786f1382f8c0ebe15dbb5a9df8ac57b7aad8191e99d4d7c36751830ba382f6eeabb7a783edf067e5d8d4bd42d03c6326094e50e074617f7c6f15aa6318c785d24cbb5054617cfb0321ddf09bf3d8ff7965d3236746c77dc17a52cd37b2f956e791a3cd740df0ec6354c6981f7190fa6455fb73c0d9efba06f07f7fd525ae0388307d3029f0dba18f73011d47f0e77301e7c7e29cb1d098c49478cfd33604c02e3ffdc2b06c6018e189319300e0046b11f0d8c0eeebfa6180764c088f72965b96380f162478c1765c0783130ca72c702a38b7ba909f0db18c64b8051963b0e182f75c47849068c9702a32c773c305ee688f1d20c182f034659ee0460bcdc11e36519305e0e8cb2dc89c0788523c6cb3360bc021865b99380f14a478c5764c0782530ca722703e3558e18afcc80f12a6094e54e01c6ab1d315e9501e3d5c028cb9d0a8cd73862bc3a03c66b8051963b0d18073a62bc2603c681c028cb9500e3b58e180766c0782d30ca721d81f13a478cd766c0781d30ca72a703e3f58e18afcb80f17a6094e5ce00c61b1c315e9f01e30dc028cb9d098c373a62bc2103c61b8151963b0b186f72c47863068c3701a32c773630deec88f1a60c186f06c69b2c8c831c31de9c01e3206094e5ce07c65be2674c5d4b0fca80f116e0b9357e9e9466b764c073ab5b9ed477f56eb1f8ba2d7e5fa96d3138687cdd6f039e21f1f3a4b6c56d19f00843312c879add1e3f634ab3211930de0e3c43e3e74969767b063c4341b3db2d9add113f634ab3a11930de013cc3e2e749697647063cc340b33b2c9add193f634ab3611930de093cc3e3e749697667063cc3833acdeeb46836227ec69466c333601c013c55f1f3a4341b91014f156836c2a2d9c8f819539a5565c0381278aae3e749693632039e6ad06ca445b351f133a634abce807114f0d4c4cf93d26c54063c35a0d9288b6677c5cf98d2ac2603c6bb806774fc3c29cdeeca80673468769745b331f133a6341b9d01e318e0b93b7e9e94666332e0b91b341b63d1ec1e478c7767c0788f8527eeef64df6df135ce51ddc7068dafbb3014c372d84f62bc23c67119308e0746590efb49d43a621c9f01632d30ca7209c78c0df593a805df13e2f79d6a976a83c6eb33c12d4f83fd24d0f744475a4c081aafc544b73c0df69340df931c69313168bc16938067b2032d12e0a3313cc2500ccb613f89298e182767c03805186539ec2731d511e3940c18a702a32c87fd24ee75c4383503c67b815196c37e12d31c31de9b01e3346094e5b09fc47d8e18a765c0781f30ca72d84fe27e478cf765c0783f30ca72d84fe201478cf767c0f80030ca72d84fe241478c0f64c0f82030ca72d84fe221478c0f66c0f81030ca72d84fe261478c0f65c0f83030ca72d84fe211478c0f67c0f80830ca72d84f62ba23c64732609c0e8cb21cf69378d411e3f40c181f0546590efb493ce688f1d10c181f034659ee1ec78c0d5dbf3cd6cc7d475dab3477df51d725cdddb78f731fe7f9e0dbc7b98ff37cf0ede3dcc7793ef8f671eee33c1f7cfb38f7719e0fbe7d9cfb38cf07df3ece7d9c33f97edc81ef04f890a9c0984f425e188a61b97b3c63b366449e92f8784ab1eee8eb0982ba3f61e129705477f4f52441dd8521d7181fcf01c67b7280d1eb98ee83d81446c5f394239e2733e0790a789e76c4f354063c4f03cf33f1f3a462eae90c7884a11896bb2707181fcf0146afa3d79189d1eb983f3a7a46cfe8193de3a160cc8536dc33e6443c96359551f1cc889f27a5d93319f0cc00cd64b95bdd3296359551f1cc8c9f27a5d98c0c78668266332c9a39602c6b2aa3e299153f4f4ab39919f0cc02cd665a3473c058d65446c5333b7e9e9466b332e0990d9acdb268e680b1aca98c8a674efc3c29cd6667c03307349b6dd1cc016359531915cfdcf879529acdc980672e6836c7a29903c6b2a6322a9e79f1f3a4349b9b01cf3cd06cae4533078c654d65543cf3e3e74969362f039ef9a0d93c8b660e18cb9acaa87816c4cf93d26c7e063c0b40b3f916cd5819efc901c6c77380d1b18e654d65543c0b1df12cc8806721f03ceb886761063ccf02cf73f1f3a462ead90c7884a11896bb2707181fcf0146afa3d79189d1eb983f3a7a46cfe81933637c220718fdb6f68cac8c0eaeaf1a7c87e6d966ee3bea1d9ae6ee3bea1d9ae6eedbc7b98ff37cf0ede3dcc7793ef8f671eee33c1f7cfb38f7719e0fbe7d9cfb38cf07df3ece7d9ce7836f1fe73ecef3c1b78f731fe7f9e0dbc7b98ff37cf0ede3dcc7793ef8f671eee33c1f7cfb38f7719e0fbe7d9cfb38cf07df3ece7d9ce7836f1fe73ecef3c1b78f731fe7f9e0dbc7b98ff37cf0ede3dcc7793ef8f671eee33c1f7cfb38f7719e0fbe7d9cfb38cf07df3ece7d9ce7836f1fe73ece997c3f1fbfefb24cbf31f33cf0b8f8e68da37a96aaf5bea0d7f5758cfa29ad5e34b47ad6d0aa18cabc00fabde840bf02f02beb9679f197297327026647becb54fb7238d45f7c3c6ee8a1fcbfe4a8ee516dfd4bcddc77545bdfdc7d47b5f5cdddb78f731fe7f9e0dbc7b98ff37cf0ede3dcc7398b6fccb70aeacedbe5fba76a1d2feb7ca19e97f24f805dca4c3e2cfddb3ef0fb900bdf7e1ff2c78a7cf0ede3dcc7793ef8f671eee33c1f7cfb38f7719e0fbe7d9cfb38cf07df3ece7d9ce7836f1fe73ecef3c1b78f73be382f86ff5766812730788206781690f14c25e3994dc6339a8c672819cf75643c1793f13c44c6534ec633818c672419cf2d643c5791f15c48c6d38f8c671a194f6f329e39643c7793f13c4dc6338c8ce706329e4bc9781e21e32923e39944c6338a8ce736329e6bc87892643cf793f1f424e339978c671c19cf5c329e73c8788693f13c43c67313194f31194f3b329ecbc9789e24e3b9808ca7828ce751329ef9643c53c878ee22e3b99d8ca7948ce75a329e2e643c1791f13c48c6d39d8c671e194f2d19cf0c329e2a329e41643ce791f15c49c6d3928ca72f19cf42329e7bc978fa90f18c21e3e94cc6730719cff5643c9790f13c4cc6d38d8c672219cf4c329e6a329ec1643c5793f1f427e3b98f8ca71719cf58329e4e643c7792f1dc48c6938def9966c27304194f1119cf65643c8f91f14c27e3e94ac633998c6716194f0d19cf10329e81643c03c8781e20e3e941c6339e8c670419cfcd643c4f91f1b427e3e940c67305194f01014f2238700c9304fcff79b0b53096559f7d9dd3b1eeffaf687b0b58e6559d6f6959f72b60936fc9be6a5916757a05ea92d4f9d26f36a574425f4998177f45c0f12a09cf15643c1dc878da93f13c45c6733319cf08329ef1643c3dc8781e20e31940c633908c6708194f0d19cf2c329ec9643c5dc978a693f13c46c67319194f1119cf11643ccf93f1dc48c67327194f27329eb1643cbdc878ee23e3e94fc6733519cf60329e6a329e99643c13c978ba91f13c4cc6730919cff5643c7790f17426e31943c6d3878ce75e329e85643c7dc9785a92f15c49c6731e19cf20329e2a329e19643cb5643cf3c878ba93f13c48c67311194f17329e6bc9784ac9786e27e3b98b8c670a19cf7c329e47c9782ac8782e20e379928ce772329e76643cc5643c3791f13c43c6339c8ce71c329eb9643ce3c878ce25e3e949c6733f194f928ce71a329edbc8784691f14c22e32923e379848ce752329e1bc8788691f13c4dc6733719cf1c329ede643cd3c878fa91f15c48c6731519cf2d643c23c9782690f19493f13c44c6733119cf75643c43c9784693f1cc26e3994ac6b3808ca7d2c2f3bc231e79df5dd62df3cf93f876b01d4ad57a5f7354a7d7f5ba5ae9f50abff82b8432d3dba67fd5fbe1b8ac7099df27c077735e078d5e775417d91e05c6f641df2f3bf22def68c9ba65fee566eebb9de1bb5d9ef8ee60f8ee9027be7d9cfb38cf07df3ece7d9ce7836f1fe73ece997c3bb83628c3efa4c95460cc27218fd70b2ebe2fe7a89ef5ae13bf8e513fa5d51b8656e6b5553194790df47bc3817eb66b4f99177f9932772260c6b82809e28d8b37e3af53996ab70e075ddf34f4c57a2d72a469d431645133f71d750c69eebea38e21cdddb78f731fe7f9e0dbc7b98ff37cf0ede3dcc73993efb7743ec6ebc652f4a19e2fcaf5c05be07789ce17c4e857ad6bb15e57a15eb7702c01bb94f9dff05cd3eff37e9f8fcbb73fb6f938cf07df3ece7d9ce7836f1fe73ecef3c1b78f731fe7f9e0dbc7b98ff37cf0cd1ce7665efa8b9f036caefaf347c56236de253894bea362b1b9fb8e8ac5e6eedbc7b98f7326df4b1df84e800f991aeae3b71478163be07154cfd4b38d65469d9e37ea540c65f018bfcc413d0bc0afac5be697018f4c95c0e3220e1ab3cd91670119cf54329ed9643ca3c9788692f15c47c6733119cf43643ce5643c13c8784692f1dc42c6731519cf85643cfdc878a691f1f426e39943c6733719cfd3643cc3c8786e20e3b9948ce711329e32329e49643ca3c8786e23e3b9868c2749c6733f194f4f329e73c978c691f1cc25e3194ec6f30c19cf4d643cc5643cedc8782e27e379928ce702329e0a329e47c978e693f14c21e3b98b8ce776329e52329e45643cd792f17421e3b9888ce741329eee643cf3c8786ac9786690f15491f10c22e3398f8ce74a329e96643c7dc9781692f1dc4bc6d3878c670c194f67329e3bc878ae27e3b9848ce761329e6e643c13c9786692f15493f10c26e379838ce76a329efe643cf791f1f422e3194bc6d3898ce74e329e1bc9788e20e32922e3b98c8ce731329ee9643c5dc9782693f1cc22e3a921e31942c633908c670019cf03643c3dc878c693f18c20e3b9998ce729329ef6643c1dc878ae20e32920e0490407befb9f80ffbf01367947fd79b0bdadf38bc1d6c2e2a3a5ce2f035ba1cecb3a0e0bd34b1d0f5c37eae4eabd7cf4958479f157041c6f93f05c41c6d3818ca73d19cf53643c3793f18c20e3194fc6d3838ce701329e01643c03c9788690f1d490f1cc22e3994cc6d3958c673a19cf63643c9791f11491f11c41c6732319cf9d643c9dc878c692f1f422e3b98f8ca73f19cfd5643c6f90f10c26e3a926e39949c633918ca71b19cfc3643c9790f15c4fc67307194f67329e31643c7dc878ee25e35948c6d3978ca72519cf95643ce791f10c22e3a922e39941c6534bc6338f8ca73b19cf83643c1791f17421e3b9968c6711194f2919cfed643c7791f14c21e3994fc6f328194f0519cf05643c4f92f15c4ec6d38e8ca7988ce726329e67c8788693f1cc25e31947c6732e194f4f329efbc97892643cd790f1dc46c6338a8c6712194f1919cf23643c9792f1dc40c6338c8ce769329ebbc978e690f1f426e39946c6d38f8ce742329eabc8786e21e31949c633818ca79c8ce721329e8bc978ae23e3194ac6339a8c673619cf54329e05643c95d9e12953efb64b5feb00b8704a427e19f02c72a08fa37a96e2770dbe8e71bd4aab770cadde30b42a86324b41bf771ce857007e65dd322ffe729159f13ca6f3b6ef403c46c228b6456e7952fbed6341fda9a1fdf61de071d1ae39aa676aff5a6ed4e9318bee52066375b9837adaf61d995f0edb21d79815cf933a2fac0928f72409a3d896b9e549ed5f4f06f5a786f6afe5c0e3a2fd7154cfd4feb5c2a8d39316dda50cc6ea0a07f5b4ed3b32bf02b643ae312b9ea7745e581350ee291246b1bde396a73c017596a9a1fd6b05f0b8687f1cd533b57fad34eaf49445772983b1bad2413d6dfb8eccaf84ede0993db38d59f1c8b31d614d40b9a74918c5b6dc294f796902ea2c5343edd84ae071d1ce3bd23dd58ead32eaf4b445772983b1baca413d6dfb8eccafb2f82e09e2d5627523b4586de1599d652dc45fa6cc4b7390d9ebec758e62f63a7b9da398bdce5ee72866afb3d7398ad9ebec758e62f63a7b9da398bdce5ee72866afb3d7398ad9ebec758e62f63a7b9da398bdce5ee72866afb3d7398ad9ebec758e62f63a7b9da398bdce5ee72866afb3d7594d5e67afb3d7d9eb1c07b3d7d9eb1cc5ec75f63a473133e8ac78e4db95c29a8072cf90308a6d855b9ed47b41cf04f5a702633e09f9d5c0b3d2813e8eea99ea43bec6a8d33316dda50cee5f6b1cd4d3b6efc8fc1ad80e9930afca4166af73d39815cf0c9d17d604949b41c228b6956e7952edd88ca0fed4503bb606785cb4f38eea996ac7d61a759a61d15dcae0feb5d6413d6dfb8eccaf85ede0993db38d59f1ccd479614d40b999248c625bed94a72cf57ee3cca0fed4503bb616785cb4f38e744fb563eb8c3acdb4e82e653056d739a8a76ddf91f975b01d32615e9583cc5e67af7314b3d7d9eb1cc5ec75f63a47317b9dbdce51cc5e67af7314b3d7d9eb1cc5ec75f63a47317b9dbdce51cc5e67af7314b3d7397f74563cb3745e5813506e1609a3d8d638e5e9967aee302ba83f35f4dc611df0b8782ee348f7d47387f5469d6659749732b87fad77504fdbbe23f3eb613b3477e65539c8ec63233bcc3e363c7314b38f0dcf1cc5ec63c3334731fbd8f0cc51cc3e363c7314b38f0dcf1cc5ec63c3334731fbd8f0cc51cc3e363c7314b38f0dcf1cc5ec63c3334731fbd8f0cc51cc3e363c7314b38f0dcf1cc5cc101b8a67b6ce0b6b02cacd266114db5ab73ca9ef1ecc0eea4f0df5db590f3ceb1ce8e3a89ea97e3b1b8c3acdb6e82e6570ffdae0a09eb67d47e637c076f0cc9ed9c6ac78e6e8bcb026a0dc1c1246b1ad73cb936ac7e604f5a786dab10dc0e3a29d7754cf543bb6d1a8d31c8bee52066375a3837adaf61d99df08dbc1337b661bb3e299abf3c29a8072734918c5b6de2d4faa1d9b1bd49f1a6ac736028f8b76de513d53edd826a34e732dba4b198cd54d0eea69db77647e136c07cfec996dcc8a679ece0b6b02cacd236114db06b73c6509a8b34c0db5639b80c7453befa89ea9766cb351a77916dda50cc6ea6607f5b4ed3b32bf19b643ae312b9ef93a2fac0928379f84516c1bddf2a4f6aff941fda9a1fd6b33f0b8687f1cd533b57fbd6bd469be45772983b1faae837adaf61d997f17b643ae312b9e053a2fac0928b78084516c9bdcf2a4f6af0541fda9a1fdeb5de071d1fe38aa676affda62d4698145772983b1bac5413d6dfb8ecc6f81ed906bcc8a67a1ce0b6b02ca2d2461141b1e2f163ae22932788a2c5a1c2adf4a8b0a9d3f42ff26e0ff15c0e8aa3d5c6830ca3cc6b8d88ab2a0593b83a79da1d9a1f4adb4a884bc9a707b550223c3f66a9705cd3a183c1d0ccd0ea56fa5455f9d6faf7f717bf5054686edd501781cb4cfe50983474d0d9d6f6c71ac8fa37aa6ce37b60676ddf1382465f0d8bdd5413d6de71232bf15b68367f6cc3666c53348e7853501e50691308a0daf53b6c5cf539e3078d4d4503bb6cdb13e8eea996ac7de0becba6f03dda50cc6ea7b0eea59007e65dd32ff1e6c874c9857e520b3d7b969cc8a67b0ce0b6b02ca0d266114db56e0d91e3f4f79c2e0515343edd876c7fa38aa67aa1ddb11d875df0eba4b19dcbf7638a86701f89575cbfc0ed80e9930afca4166af73d39815cf109d17d604941b42c228b6f7806767ec3ce9f18090474d0db5633b1debe3a69ee976ecfdc0aefb4ed05dcae0fef5be837a16805f59b7ccbf0fdbc1337b66cfec993db367f6cc9ed9337b66cfec993db367f6cc9ed9337b66cfec993d3337b3e219aaf3c29a8072434918c5b6037876c5ce937eee803c6a6ae8b9c32ec7fab8a967fab9c3eec0aefb2ed05dca60acee7650cf02f02beb96f9ddb01d3cb367f6cc9ed9337b66cfec993db367f6cc9ed9337b66cfec993db367f6cc9ed93373332b9e613a2fac0928378c84516cef03cf07f1f394270c1e3535f4dce103c7fa38aa67eab9c39ec0aefb07a0bb94c158dde3a09e05e057d62df37b603becf1cc9ed9c2ac7886ebbcb026a0dc701246b1ed069ebdb1f3a49f9f228f9a1a6ac7f63ad6c74d3dd3edd8bec0aefb5ed05dca60acee7350cf02f02beb96f97db01d32615e9583cc5e67af7314b3d7d9eb1cc5ec75f63a47317b9dbdce51cc5e67af7314b3d7d9eb1cc5ec75f63a47317b9dbdce51cc5e67af7314b3d7397f74563c553a2fac09285745c228b63dc0f361ec3cdd4a13068f9a0a8cf924e43f74ac8f9b7aa69f3bec0fecba7f08ba4b19dcbff63ba86701f89575cbfc7ed80ecd9d79550e32fbd8c80eb38f0dcf1cc5ec63c3334731fbd8f0cc51cc3e363c7314b38f0dcf1cc5ec63c3334731fbd8f0cc51cc3e363c7314b38f0dcf1cc5ec63c3334731fbd8f0cc51cc3e363c7314b38f0dcf1cc5ec63c333473133c486e2a9d679614d40b96a1246b1ed039e8fe2e7294f183c6a2a30e69390ffc8b13e8eea99eab7f37160d7fd23d05dcae0fef5b1837a16805f59b7cc7f0cdbc1337b661bb3e2a9d179614d40b91a1246b1ed079e4fe2e7294b183c6a6aa81dfbc4b13e8eea996ac73e0decba7f02ba4b198cd54f1dd4b300fccaba65fe53d80eb9c6ac7846ebbcb026a0dc681246b17d0c3c0ee22ec55364f0c8fc2704be9516b53a7f84fec5ed550b8c0cdbab280b9ab53378da199a1d4adf4a8b099057136eaf09c0c8b0bdda6541b30e064f0743b343e95b693151e7dbeb5fdc5e138191617b75c8826687b23d3c94fbf6a18c53aff9a1d3bce0106a5e7008352ff09a5369eee0f85286c7b20018704a42fe53e0f976fc3ca9fb729f66c0f36de0f956fc3c5d1dd5b354adf73bc01ed77a9556df35b4fad4d0aa18ca20c3771de857007e65dd322ffe3cb3678e62c6735b614d40b94f4818c5f62de071d16ea8ba5fa0d725eb6f15a6cf8eaef3ebe27909de2b6ea5d72b1ce2af10ca4c2ca92bfb3bcd5604ff97eda6eab3dfb0397a87b9abedb99dcc8bbfa2206bf76e1bbc978c5ab878de94e9717fbf85e7ebf8784a713f475ffb1cd53d93677ffb2c3c31d6bd6bd473cfbdf1d73dd57e74d1eb92f5ab7df4df8f76aa7939ee7bd27e7431ea5c08650696d495fd0f683f6c6d85eb7d53cec9cd7db34550d79e095789b69bcf84bed67629f71194c736a742ffe2fe59017575d52e46dd63c276d16cbb5d6a6f3e97347d17832e1f916a667b4e813a565ab82b09b8311eb3b99fc9ba6dcfc82a0d1dd934c36dfd9145c7be16eebe04dc8cfb755f434736cd0eb65f0fb2700f22e066dcaf07193ab26976b0fd7ab0857b300137e37e3dd8d0914db383edd7432cdc4308b819f7eb21868e6c9a1d6cbf1e6ae11e4ac0cdb85f0f357464d3ec60fbf5300bf730026ec6fd7a98a1239b6607dbaf875bb887137033eed7c383fa3ab26976b0fdbacac25d45c0cdb85f57193ab26976b0fdbadac25d4dc0cdb85f571b3ab26976b0fdbac6c25d43c0cdb85fd7183ab26976b0fd7ab4857b340137e37eddd87efbacfb75ad85bb96809b71bfae357464d3ec60fbf5040bf704026ec6fd7a82a1239b6607dbaf275ab827127033eed7130d1dd934b3edd78ede25ccf8ddc68f9dea931e63fae30c783e041e1731e5280e4a1df57349f54ddd6b68f5b1a1158eddb10ff473d017a6c16f12883fcfec993db367f6cc9ed9337b66cfec993db367f6cc9ed9337b66cfec993db367f6ccfcccf85d467cbe22e53e2261141b3e9372719f5fd5fd42bd2e597fab300d3cb6ceefbed8fd96951618fe92c021fe0aa1cc89a7d595bd41b31505076e371c8b1bb7e59ed8eb90de9666fccbbcf82b82faec051e07efe7a778f6193cfb2c5ae07ba7f1f82e1be946e3b252f5fd9dc383baedbcc7a80f6afa41ecfeeb6b5a6068fa8163df89a0fef614069c9290471e17cf861dd533d516ec36ea646a5c0c653a413d773ba86701f89575cbfc6ee091a905f0b88ac1c0e0092cfac85449c633958c673419cf99643c43c9788e27e3b98e8ce770329e8bc9781e22e32927e39940c633928ce734329e5bc8788e22e3b98a8ce742329e42329e7e643cd3c8787a93f1dc4dc6733619cf30329ef3c9784e24e3b9818c2741c6732919cf23643c65643c93c8784691f17424e3b98d8ce718329e6bc8785a93f124c978ee27e3e949c6732e19cf38329e73c8788693f19c4cc67313194f31194f3b329ecbc9781e25e3a920e3b9808c670a19cf5d643c6790f1dc4ec6534ac6731c19cfb5643c5dc8782e22e36943c6f320194f77329e5a329e2a329e53c9780691f19c47c6732419cf95643c2dc978fa92f1dc4bc6d3878c670c194f67329eb3c878ee20e339818ce77a329eb6643c9790f1ec25e379988ca71b19cf44329e6a329efd643c25643c83c9788e26e3b99a8ca715194f7f329efbc8787a91f18c25e3e944c6732719cf49643c3792f11c41c65344c6731919cf74329eae643c93c9786ac8784e27e31942c6732c19cf40329ec3c8780690f13c40c6d3838c673c19cf08329e53c8786e26e3694fc6d3818ce70a329e02029e4470e0b79812f0ff7d60936f067d08b61696f5c9736a29af8e8b8b3b1eb8ee1696757f6061409d76415d923a5ffacda6944ee82b09f3e2af08383e20e1b9828ca703194f7b329e9bc9784e21e31941c6339e8ca70719cf03643c03c8780e23e31948c6732c19cf10329ed3c9786ac8782693f17425e3994ec67319194f1119cf11643c3792f19c44c67327194f27329eb1643cbdc878ee23e3e94fc6d38a8ce76a329ea3c9780693f19490f1ec27e3a926e39948c6d38d8ce761329ebd643c9790f1b425e3b99e8ce704329e3bc878ce22e3e94cc633868ca70f19cfbd643c7dc9785a92f15c49c6732419cf79643c83c8784e25e3a922e3a925e3e94ec6f320194f1b329e8bc878ba90f15c4bc6731c194f2919cfed643c6790f1dc45c633858ce702329e0a329e47c9782e27e36947c6534cc6731319cfc9643cc3c978ce21e31947c6732e194f4f329efbc97892643cadc978ae21e339868ce736329e8e643ca3c8782691f19491f13c42c67329194f828ce706329e13c978ce27e31946c6733619cfdd643cbdc978a691f1f423e32924e3b9908ce72a329ea3c8786e21e3398d8c672419cf04329e72329e87c8782e26e3399c8ce73a329ee3c9788692f19c49c6339a8c672a194f25194f0b8307ffafde0ddbabf3f2eda042f8ff24ddb9bcbd5e97949167c4ea5ec5fb864dd577a7a3fabe1fd44d4998df09f515f6f781e77d473cbb0c1ed37711e42b41b31d864d316e77c4b8c36094f9edc028faed009e1d8e78761a3ca6ef22c8f705cdde336c8a719b23c6f70c4699df068ca2df7bc0f39e239eed068fe9bb08f28340b3ad864d316e71c4b8d56094f92dc028fa6d059ead8e78b6193ca6ef22c80f06cdde356c8a71b323c6770d4699df0c8ca2dfbbc0f3ae239e2d068fe9bb08f24340b34d864d316e74c4b8c96094f98dc028fa6d029e4d8e78361b3ca6ef22c80f05cd361836c5b8de11e3068351e6d703a3e8b701783638e2d968f098be8b203f0c345b67d814e35a478ceb0c46995f0b8ca2df3ae059e78867bdc163fa2e82fc70d06c8d61538cab1d31ae3118657e35308a7e6b80678d239eb5068fe9bb08f255a0d92ac3a618573a625c6530cafc4a6014fd5601cf2a473cab0d1ed37711e4ab41b315864d312e77c4b8c26094f9e5c028faad009e158e78561a3ca6ef22c8d78066ef1836c5f8b623c6770c46997f1b1845bf7780e71d473ccb0d1ed37711e4478366cb0c9b625cea887199c128f34b8151f45b063ccb1cf1bc6df098be8b205f0b9a2d316c8a71b123c62506a3cc2f0646d16f09f02c71c4b3d4e0317d17417e0268f69661538c8b1c31be6530cafc226014fdde029eb71cf12c36784cdf45909f089abd69d814e31b8e18df341865fe0d6014fdde049e371df12c32784cdf4590bf096cc2db076cafeb7c6fb0bda6f3bdc0f6aacef704db2b3adf036c2feb7c77b0bda4f3e5607b51e7bb81ed059d2f03dbf33adf156ccfe97c3fb03dabf3fdc1b650e793605ba0f303c0365fe72f02db3c9dbf186c7375fe12b0cdd1f94bc1365be72f03db2c9dbf1c6c3375fe0ab0cdd0f92bc1f68cce5f05b6a775fe6ab03da5f3d780ed499d1f08b62774fe5ab03daef3d781ed319dbf1e6cf7e8fc0d60bb55e76f04dbc73a7f33d83ed1f95bc0f6a9cedf06b66fe9fced60fbb6cedf01b6efe8fc9d60fbaece8f00dbf7747e24d8beaff3a3c0f6039dbf0b6c3fd4f93160fb91cedf0db61febfc58b0fd44e7c781eda73a3f1e6c3fd3f94960fbb9ce4f06db2f747e0ad87ea9f353c1f62b9dbf176c9fe9fc34b0fd5ae7ef03db6f74fe7eb0fd56e71f00dbef74fe41b0fd5ee71f02dbe73aff30d8bed0f947c0f6079d9f0eb62f75fe51b0fd51e7a55d53edec9f74be2488b79dfd2aa89b4ac0b7f85365feacf3ad8d32b26c2194395b772854cf38d4bb4bd20e4bbbac6cd20ebf0e3669875f039bb4c3af824ddae157c026edf0cb609376f825b0493bfc22d8a41d7e016cd20e3f0f3669879f039bb4c3cf822da9f30bc126edf002b0493b3c1f6cd20ecf039bb4c373c126edf01cb0493b3c1b6cd20ecf029bb4c333c126edf00cb0493bfc0cd8a41d7e1a6cd20e3f053669879f049bb4c34f804ddae1c7c126edf063609376f81eb0493b7c2bd8647ff90a6cd2367f0c36699b3f019bb4cd9f824ddae66f814ddae66f834ddae6ef804ddae6ef824ddae6ef814ddae6ef834ddae61f804ddae61f824ddae61f814ddae61f834ddae69f806dbcceff146cd236ff0c6cd236ff1c6cd236ff026cd236ff126cd236ff0a6cd2367f0636699b7f0d36699b7f0336699b7f0b36699b7f0736699b7f0f36699b3f079bb4cd5f804ddae63f80ed519d97b6ba0dd8e459b19a4abfe184e3f0b4005fc2920ce26dfb714a421eeb2e532519cf1c329ed1643c2f93f19c49c633948ce778329ec3c978de24e39940c6b3908c671919cf52329e37c8784e23e3d940c6b39e8ce728329ef7c9787692f15c48c65348c6338b8ce745329eb3c9788691f19c4fc67322194f828c673e19cf12329ec5643caf91f17424e35947c6b3968ce718329e1d643cdbc9785a93f17c45c633838ce75c329ee7c978ce21e3194ec67332194f31194f3b329e0a329e0bc878e692f1bc45c6b3888ce715329e33c878d690f1ac26e32925e3398e8ce73d329e6d643c5dc878da90f13c4dc6534bc6f32c194f1519cfa9643c83c878ce23e339928ca725194f5f329e5bc9786693f1bc44c6d3998ce72c329e55643c2bc978be24e339818c672b19cf16329eb6643c7bc9782692f12c20e3a926e3799d8c673f194f0919cf60329ea3c9785a91f17c4cc633938ce705329e15643ccbc9784e22e379978c673319cf11643c45643cf3c8786ac8785e25e3399d8c670819cfb1643c8791f13c43c6f31c19cf3b643c6f93f19c42c6b3898c6723194f7b329e0e643cbbc9787691f11410f0248023009bfcbf25d8e43b3cfbc1f685ceef059b7cc3e74db07daef38f82ed618bad85854f18a6834dde95fd026c727fe611b0c93b139f834dce1bc4bf9a5fd9f140fe16b08cf86969e1477f9f5bb8248fdb5b964906f16e6ff4950cecdfbc2b30180f35cf2e329edd643c1dc878da93f16c24e3d944c6730a19cfdb643cef90f13c47c6f30c19cf61643cc792f10c21e3399d8ce755329e1a329e79643c45643c4790f16c26e379978ce724329ee5643c2bc8785e20e39949c6f331194f2b329ea3c9780693f19490f1ec27e3799d8ca79a8c670119cf44329ebd643c6dc978b690f16c25e339818ce74b329e95643cabc878ce22e3e94cc6f31219cf6c329e5bc978fa92f1b424e339928ce73c329e41643ca792f15491f13c4bc6534bc6f334194f1b329e2e643cdbc878de23e3398e8ca7948c673519cf1a329e33c8785e21e35944c6f31619cf5c329e0bc8782ac878da91f11493f19c4cc6339c8ce71c329ee7c978ce25e39941c6f315194f6b329eed643c3bc8788e21e3594bc6b38e8ca72319cf6b643c8bc9789690f1cc27e34990f19c48c6733e19cf30329eb3c9785e24e39945c65348c6732119cf4e329ef7c9788e22e3594fc6b3818ce734329e37c8789692f12c23e35948c633818ce74d329ec3c9788e27e3194ac6732619cfcb643ca3c978e690f15492f1b4b0f0ec77c423df8a9175cbfcfe66ee7ba7e17b679ef8de6ef8de9e27beb719beb7e589ef2d86ef2d79e27bb3e17b739ef8de68f8de9827bed71bbed7e789efb586efb579e27bb5e17b759ef85e69f85e9927be971bbe97e789efb70ddf6fe789efa586efa579e27bb1e17b719ef85e64f85e9427be99afbf553f5ce9abbc5bff26e0ff15c0f8a623c6fd06a3ccbf098c62c3ef515738e289ba76af20f0adb4907b59f2cc3301ffaf04465731556130cabc2da676024fa5239ea87b0e9504be9516f22eb6f4a94cc0ff71fc655731556930cabc2da6b6034f5f473c51f74afa12f8565ac8bbcff2ce5f02fe8fe3adbb8aa9be06a3ccdb626a1bf00c72c413758f6710816fa5857c2b4cbe499380ffe3f88cae626a90c128f3b698c2f173073be289ba373598c0b7d242beb52bdfbc4cc0ff71fc26573135d86094795b4ce1f871431cf144dd531b42e05b6921cf82e51bed09f8ff5060741553430c4699b7c5148e7733d4114fd4bdc0a104be9516c3745efa5825e0ffc380d1554c0d351865de1653eb816798239ea87b98c3087c2b2d86ebbcbcc39180ff0f0746573135cc6094795b4cad059ee18e78a2eebd0e27f0adb4a8d27979a73f01ffaf0246573135dc6094795b4cad069e2a473c51f78cab087c2b2daa755ebe399780ffe3f8efc31d3156198c323f1c18c5b61278aa1df144ddebae26f0adb4906ffbafd0bf09f83f8ec7ea2aa6aa0d4699b7c5148e075de38827ea1e7d0d816fa5c5689d97316112f0ffd1c0e82aa66a0c4699b7c5148e5f39da114fd4b385d104be9516f26dae65fa3701ffaf0546573135da6094795b4c2d059e5a473c8b0d9ec5162d0e956fa585f4e55ea27f13f0ff09c0e82aa66a0d4699b7c5d462e099e08827ea59ce0402df4a0bf9b6f65bfa3701ff9f088cae626a82c128f3b6985a043c131df1443d839a9805df51cf53b2e13bead940367c47dde7ce86efa87bb6d9f01d75ff311bbea3eea565c377d47da16cf88ebac7910ddf51d7ebd9f01d75ed990ddf51d751d9f01d754d900ddf51e7b7d9f01d75ae960ddf51e71dbe3df7ed79dcbe0fe5b943beb6e787f2187a288f25fedac05f1b64cbb73f96f86b836cf9ced76b03df9e67bf3d97ebaf8220fa7aec6d47be971abe651e9fb32c75e47bb1e15be6f199c16247be1719be651eef7f2f72e4bbc8f02df38bb2e0bb9de1bb5d167d77307c77b0f876b0bdcb1241fdeb6f61c02909798c81b71c68e1a89ea56abd4bf4babe8e71bdb6fb36e6fe520c6596807eaedb0e59b7d976e42233c6459bf87c9726c0877c974cd9e4f9f1eb609376ff35b049bf8057c126c7a657c026cfa45e069b3cb37a096ca375fe63b0c9b363ecb32fcfffb781ad4ae7b1aff8709ddf0236e94b857d94a53fdc66b0499f46ec1b2bfd5237824dfa16639f4ce91fbe1e6cd2c71ffb02ca7b1a6bc126efda601f34795f6a35d8f6ea3cf67d92efd0ac04db749d5f01b63fe8fc72b03da4f3b782edf73aff15d87ea7f38bc0f6a0cebf05b6dfeafc12b03da0f32f82ed373aff02d8eed7f9e7c1769fcee3bb6cbfd6f95d60fb4ce7f11daa693abf136cbfd2797c77e75e9ddf0eb65feafc73609baaf3cf826d8ace2f04db2f747e01d87eaef3f3c13659e7e781ed673a3f176c93747e0ed87eaaf3b3c1365ee76781ed273a3f136ce3747e06d8c6eafc3360fbb1ce3f0db61fe9fc9760bb5be71783ad85ce2f059b8c1989fd540a75fe6db0b5d279ec7f24dff79f08b6c3747e02d8dae87c2dd8e4db70a3c126e341d7802da1f3d5603b42e7abc026e767c3c126e39f0c039b9c4b0d055b7b9d1f023639ef190c3619cf7210d8e41ba47dc176b4ce57824dbead5f01b663757e3fd864ccb137c126dfaddb0b36198bf911b0c9f7aaa783ed249dff03d8641c9687c0768aceff1e6ca7eafcefc026dff07c106c253aff5bb075d4f907c076baceff066c3246d6fd603b53e7ef039b8c1dfc6bb0c9f79e3f035b279d9f06b67374fe576093b144ee059b8c0ffa4bb075d6f9a96093ef704f01db053aff0bb0c9787f3f079b7c637832d8645cb79f81adabce4f025b99ceff146cdd747e3cd8ca75fe2760ebaef3e3c0d643e7c782ada7ceff186cbd74fe4760ebadf3d2cea8fd59ede7fbf47c3288efbc4cf9fb30a83f35746d200cc813e7b97631f0a0af3db1d7bd2c755e2ffb7d0bbd5e89a13de07b77ecbed3d7141fe87515eaf5ee367c1742997374e3a09693637e4bbddc5e6339bc8f25eb96652e04fb2e63dded757d3f7054dfdd069370a30e52e67ccda48e8d3fd0f936b04c8c6ca9eb6389b50034c42909796170a35559299ef73686e703e0d9133b4ffa7add454ce0be15f7f5ba791fd78cb56228b31bf4dbe5403fdcd765dd322ffe3cb367f6cc9ed9337b66cfec993db367f6cc9ed9337b66cfec993db367f6cc9ed933f3332b9e7d3a8fcf95a5dc3e1246b1ed011e17f7f9f139acac5f3dd7d9755a9ddf3db1fbadff7caf955e6fa951e74228f3353c73daabf345f07fd96e51dbd2c173c206b7a5f82b82fae0b3a07d8e78f6183c7b2c5a48be2436df6523dd685c56aafaada867ec7b0d5df7593475b5bfeed1eb2a3034c5fdf54383079f8d1601ef47fa3701ebf908eae0601f6f302ec41fee4b7bc026f90f81d1c576c66389b407f23c1c9f4d4b995f19cfc5e3dff665a52edb8df7a14ec9e0c0f82e8432bf83b6ef739dc7be21fb40b77f58fe2f5343cfa9453f55e71df1d739b57db7036712fca0eff7803526dff5dea129d049fc88bd10f27f87fe1c524ef410ad851dc72b477673b90f8de58aa1cc4e4bfd9341bcf5df61f0ec3098d536f912e2ec1f70fc77d526ed8cd0e842d048caec018df63ae2d963f00887f8536564fbb736cac8b28550e67f411ba5ea22edbcd413fbb6e031c0d5714c7cc9ba65de766efc01309a7554f131f0d83ade3db1f3e656ffafc34ad2bfd8aec7d5ff4bd6dd5e2f2b1c81b1fe5258bf70b50ea28f2dffb37d4bead6efb27fd95ea3cec2823a4b997625e95f156797e97c26e7fa87eaba2dea5c7fa7039e4450ffda5b4d0d1ddff118f3be031e47f52cb51dbb7619752a86329da09e0ece631a7c177807f876b1cd510b3987da6d685108653a96a47fa5ed88d211af553fc84a5dcaace783a596ba48994e2575756903f638995c6eb7f7a04e6abd7b2c759532e797d4e9d245e713b09df0be495fcbff656aa83dc0b178b6c65fe7d4f6dd029c49f083bedf05d6987cd7fb16889cef8b1fb11742beb2a4aeac94133d446b6157fb88bcf387ece672bb8de58aa1cc364bfd9341bcf5df6af06c3598d536e95a5297973872d96e6e8bd0a81434923278ff588eedf8de9dedb8bfc71177d4717f0f309aed269ebbb864db6bb099f7506de7835206cfc9a4ccd525e95fd5ce262c65cd7bc32eee63e23ba801d42330ea2a13c680836bc372bc7692764afc7401fb1e9d179dbb18da1542994125e95f87e7ddd67b97e6f51d5e5308b7b96fe1bb1f434aeab871ecc43dfab7086c9fe85f47d769e5b67b86c261bb6738bca48e1d9715ae8f2d7531af915b0407de53ffda288bf7dd1a5acecc9be3502a7d3f31cad9fce0354f6cef6a742d2d45a61681fd7ec187067b4170e0989bb21f60cc99f751ba18ebc1fb28b525e95f6993ccb26adbfffbd175fac87614edb03dc198fc1018933a5ffacda6aeb6facbbcf8538c1f197570d376a5df57cae43ef05ee071d1b63b6aa34bf1181bdff7297a57d98eff1f1a5a65f179adf5986f3e736f63e4e3f15d566dbbff64d362b785c7d57394282d765b7cc7a7458f91b6e3874d8b5d169e5d59d66297c5778c5ad4e07dcf86b478dfc2e3e25e54435abc6ff11d9f163d4b1b7aae815aecb4f0b8baf710a585f8cb94791701731b231f8feff22adb7d329b163b2c3caeae9ba3b4d861f11d9f165d7be03dba86b4d86ee189fffe5cc35a6cb7f88e4f8b5ebdf11e5e435abc67e171f54c374a8bf72cbe638c8b51b67b39362db65978b665598b6d16df319e1ff6b0dd6bb369b1d5c2e3e0be6b835a6cb5f88e518b1178dfb5212db65878b664598b2d16dff16951d5dd764fd8a6c5bb161e57f784a3b478d7e23b3e2d46f452be3737428bcd169ecd59d662b3c5778cd750a9b8d8d4082d3659783665598b4d16dff169519d3ad7dad8082d365a783666598b8d16dff169519a3aa66e6884161b2c3c1bb2acc5068bef18e322753db9be115aacb7f0accfb216eb2dbe633c8ea4e2625d23b45867e15997652dd6597cc7a7454deafed3da4668b1d6c2b336cb5aacb5f88ef19e4b2a2ed634428b35169e3559d6628dc5777c5a744b1d535737428bd5169ed559d662b5c5777c5a8c4a3d135bd5082d5659785665598b5516df319e77a6da8b958dd062a585676596b55869f11de37967eafec58a4668b1c2c2b322cb5aacb0f88eb1ed4c9d772e6f8416cb2d3ccbb3acc5728bef18cf3b535abcd3082ddeb1f0bc93652ddeb1f88ef1bc33751c79bb115abc6de17135064a94166f5b7cc71817a9b6735923b45866e15996652d96597cc7785f2bd5762e6d84164b2d3caec66b88d262a9c5778cd723a97b7c4b1aa1c5120bcf922c6bb1c4e23bc66745a973f0c58dd062b185677196b5580cbef7c6ee3bdd9f5b7c485fac0b0c2d0aa1cca91dd3bfd2172b4a475907f62bc3babc157b5dd2fdca1645d4e52da88b943913ead22670324651b9a3baa662e64da8935aef4796ba4a99733bd6e9d259e713b04d3e06ddfa58fe2f5381319f84bce8a7eafc7afc754ec5ea6bc099043fe8fb55608dc97757f45da093f8117b21e47b77ac2b2be5440fd15ad8d53ef286ce23bbb9dc6263b96228f386a5fec920defabf6ef0bc6e30a7de7b8038933872d376a599de88d0e802d048ca609fbd8f1cf1987d088543fca932b2fd5b1b65b00fa594b908da28ec572af54c0407f69b74d49675457659b7cc8bbf62b0ed0546b38e2a3e3e83be9f3256848c23a16c322e4437584f4fc3a6eadacb515dc597ac5be67b01a38c53d133fb8c658d65ec61302a9e3e0e34c3b137646ae878d107787a3be07154cfd471a8c2a8532fa34ec55006df6dac7050cf02f02beb96f90af0ed629ba316724c3ed7d0a210ca0c37ce1fa3749475a8f8ed69a94b3fc77591754bbbd42f0bbe2b0ddfdd0ddf89a0fe760e8286f7af4a60eeeb8059adb77ffceb2dc5f3368929f1d31dea34003488ab4eb82e39cf1b60685b08f9a9709e27e5a4ac1cbf845dc5b26c4b643797eb632c570c65fa59ea9f0ce2ad7f7f83a7bfc1acb6c9dd706ee7607f48c5403f8343e6bb8376fd23b4eb07da49193cfef570a45d5f8347e67b008f9ce354804dce15843f01ffef96056eb3ddabb0708b0dc789eb6161ec1e3f63ea5ca787c128f3dd81516c7d81a7d29166e6b63ed7d0078fcbad8d32b26c21949905c7c684a5acdaef3a15d4d5aba5b6c7f6ee986ed35b3bd00bc7690c409fc0d03000bda49ead1cf0b40deac66a9c3ca576d288bb46dd382afde851d00a0d4cfc2db054a305d830dfd2620b82fa435216824d86a46c05b616862c3814a6949721ed5cc8857ac8ba0b0dce36c012a76f1cce53a68642e730e07111ca2a7464484f1d3ab74e1a336514c6472b83b329b1a3fed7b2817251eb72b51dcc7d2209f3660c163af2df12ea9b8479f1a7b68d0cad3a61c4c87b064cba6beab851e3a74c46a1cc1d1bf30541fd0d60fe4609ee6aa7c300c00a63e3d0caa8173618f23fd9306de3e72cc731734d6d02f027535bd0ed7007baa9f5cbd8b723478c1d7bfdd4aab163465e3675fcc829636ac7e3d66c632817b5a5e5ffadc1666be2b1ac9ab0d9c2650fb3d86c138e32dc066c72e43a1c6cc2d3166c2d212fe5cd2de3245c3bc1fa659752ff53e2b4d2153f2ca80b01391cab7655edbfea544e7d42569d0aa9a18dd5e6544317ab3b866a6862f5153b35f4b01a6a580d2d7c62901e3a580d157c4a901e0a587deda224480fed7b7a901ebaf7cc203d34efd9c0f76d603e27489f76a9a1753b07e9a173d5adcb2e41fa336feadd7a75faae6e0ba8535e7589a74e3fd569a7babc50b72fd4ad2c754aa74e97d5a9a03a7d539723fdb5d603c27451982e0ed32561ba344c9785e9f2305d11a62bc3745598ae0ed335611a18a66bc3745d98ae0fd30d61ba314c3785e9e6203dbcf32d417af87535fcf36d417a68e8db83f4b0d17704e921a5ef0cd2c34d8f08d243518f0cd2c3548f0ad24358df15a487b71e13a487c9bd27480fb5ab86e01d1fa487c356c364abe1b3d530bf6a486035a4b01a6a580d4bac8630564320aba1911f08d2432eab219b1f0ed2c33e4f0fd3a3617a2c4c8f87e989303d19a6a782f4f0e06ad8f019417a987135fcf8ec203d5cf9dc203dbcb91af65c0d87ae864957c3a7ab61d5d530ef6af877352cfc4b617a394caf04e94712ea518c7a44a16effabc760ea16f55b41fad6f99220fd885b3df2575d20549710d545664590ee42a5ba94a92e76aacba1ea82a9baa4aa2ebaaacbb2eac2adbab4ab2efeea9507f50a887a2546bd22a45e9952af90a957ead42b86ea3551f5daa57a8d58bd56bd2748df16df17a41f95aadbe1ead180ba65ae6edf7f1aa66f05e998fc4e98be1ba6ef85e9fb61fa41987e18a4873556c31dabe192d5d0ca6a18663564b31aca590d05ad868dfe2c480f3dad86aefe6d901e12fbf761fa3c4c5f04e9e1b5bf0cd31fc3f45598fe14a63f87e92f61fa6b98fe16a67f09d3bf86e9dfc2f4f730fd234cff0cea86d9c686e444ddfae82b9860c49429a3c64d985232a5b664dcd4b153c64c187b7fc9b431534697d4de3b6a52cdd8da69b8f0b7f5c23246f880499346dc5f32667cf5a8fb4a6aa74e29a9ad29a9aa9d3abebade41fc2f7aa1930ff438a2ba3adad97f7e13d2ffdb44a787eb7651465fbfb2e1ba1dd1b209821cd994857ab46c5a8526e923985ceade943e0f2e993cb6764a4969c9f8f06f78e0ad9d36aaba4b09fe6f7228f2e4292593a78c9834a5a46652edb892ae5d70bd8fb46d4225feabad1b98b34e6c9a389df477969a1462bf3cad090afcc7694d236d5df20d48db9634cd694949136a78765316baaa8984379744ca32796ad5944923464e895ef8b66fb2f09d4da9e6f82656f3948e4d70764653161ad0b169847736c5d9cc0c9c05ff0dcac800708c5506009b2d6c6f00000028481f8b08000000000000ffed9d77741cc791c667911856000892600e50a219c1c5228309cc99122559391024419116495024942ccb922cc939e76c399de59cf35917edbbf3390739e72839dd3ff77cefee3dbfeb9eed323e3467d6d8d5145883ad79afb03db5bd53bffea6ba77b67b7691090adb9f8c655cb9dad885c1d91b3ddfef1e734f6e6b4bf058394ece4c4a38ab52c2599d12ce9a9470d6a684b32e259c9352c23939259c5312e4b46c55c1e82d69dea90cba26cd984d99a6e7a540d3fa9469da90024d1b83748c51d352c2d99412cee929e19c9112ce9929e16c4e09e7ac9470ce4e09e79c9470ce4d09e7bc9470ce4f09e78294702e4c09e7a294702e4e09674b4a38cf4f09e70529e1bc30259c17a584f3e204395700e712f7f814f7b8d43d2e738fcbdd23bd66a57b5ce5da58e3f65b8dadb66cc6dabce7f2c6da8d7518ebf49eeb32d66dacc758af7baec53dd7676c8db1b5c6d6195b6f6c83d361a3b14dc6361bdb626cabb16dc6b61bdb616ca7b15dc6761bdb636cafb17dc62e3176a9b1fdc62e3376b9b12b8c3dd5d895c6ae3276b5b16b3c966b8d5d67ec7a633718bbd1d84dc60e181b3076d0d82163878d0d1a3b62ec6663478d1d33f63463b7183b6eec84b193c6868c9d3276abb1d3c6ce181b36769bb1db8ddd61ec4e6377799a3dddd8ddc69e61ec1e8ff399c6ee35769fb1fb8d3dcbd803c61e34f690b1671b7b8eb1e71a7b9eb1e71b7b81b1171a7b91b1171b7b89b1971a7b99b1971b7b85b1571a7b95b1571b7b8db1d71a7b9db1d71b7b83b1371a7b9363a18ef066636f31f6b0b1b71a7b9bb1b71b7b87b1771afb3b63ef32f688b1771b7b8fb1f71a7b9fb1f71bfb80b10f1afb90b10f1bfb88b18f1afb98b18f1bfb84b14f1afb94b14f1bfb8cb1cf1afb7b639f33f6a8b17f30f68fc6fec9d83f1bfb1763ff6aecf3c6be60ecdf8cfdbbb1ff30f64563ff69ec4bc6beec69fe15635f35f635635f77be6fb8c76fbaba342ff62d63df76e5c7dce377dce377dde3f7bcd77cdfd80f3cdf0f8dfdc8f3fdd8d84f5cf9a7eef167eef1e7eef117eef197eef157eef1d7eef137eef1b7eef171f7f8847bfc9d7bfcbd7bfc837bfca37bb46baa973617ca938391ad3f48688cea3892b36b2a24fe9260f466b5a876cfd1638bf3d7b87d7a24ed6add7eade7af73fb75de7126bbfdc99ebfc9ed3779fe196e7f86e76f76fbcd9e7fb6db9fedf92f72fb17813f1bc09cabf35b5fb57365c047f95a05be5ae7ab065f1d1d0e7c939caf167c747eebc037c5f926816faaf34d065fd6f9a69096c6ce73befe20a95cc90dd8e3d6277d5cb70ed5903cef217bdc4626de69c9f30edae33631f0dafc98ee8e350df26686f335816fa6f34d079f1b82fedae7ac6f96f3cd04df6ce76b06df1ce79b05beb9ce371b7cf39c6f0ef8e63bdf5cf02d70be79e05be87cf3c1b7c8f916806fb1f32d045f8bf32d02dff9ceb7187c17385f0bf8e81e97f3c17791f35d00be8b9def42f0d1587b11f8e8daf062e7b3e3c4e40cbcc6f9698c0a5f43e333f896d2d80cbe65342e836f398dc9e05b01b1c9b712c615f2ad723e1aa3ec737daedc1f24d527f2619f5893f471cd91ed71d7257fdc70dd6e7d30a2753fc459035a6d70e504ef0d6ac3d819671487fc3550de0975a91ee941ef33c46ec7fdb5aebca1c8ebfabcd735409db511edef0f926dff3a8f679dc75c0bede7c9d9f6bce6ec98b79273f62aa8ebe71e5df34cc49cdd031c0c39dba5393be6ade49c1d84ba7eeed175ef44ccd96b81832167077872369fd39c2dcc91054174eed1679f8998b3478123f99cedd49c1dfb5672cede0f75fddca3cfbf1331676f078ee473b67b40af0dc6bc959cb32f81ba7eeed15ccc44ccd9078183216707759c1df35672cebe09eafab947f3821331675f0e1cc9e76c2f53ceb66bce0685f5ce2088ce3d9aa39e8839fb3070249fb387747e76ec5bc939fb69a8ebe71ead974cc49cfd802bdb75866fb8758605e0fba6f32d04dee473fb7007536ee735b70bf7810441748ed2dadd44cced475dd9e6f16370ef01f9bee37ce783efbbce7701f8bee77c1742bb18fac080f681316f25f7811f405d3f97691d7922f681af010743ce1ed29c1df35672ce3e0e75fddca37b1a2662cefe1838187276507376cc5bc939fb67a8ebe7de52579e88394bf795daeb859fbaeb85e5e0fb99f3ad00dfcf9d6f25f87ee17cabc0f74be76b05dfaf9c6f35f87eed7c39f0fdc6f9dac0f75be7cb83ef71e76b07df13ced701bedf395f27f87eef7c5de0fb83f37583ef8fced703be3f395faff3d97bf2e8deab2f3a9f3db7a4517f90ecb9a57b2ce9d8b4bf721c62377ab11bc731769317bb2922f62a86d85988415bc6dbef87f22a5e9e5c4330fafb1f146b75f2b1da6ddb5b83b1b77d35f0e418da9e851863e1c9014f5bf23ce1bdbef9e48f1b9ee3564fd32cc46a8576b533b42b03b1e8d8b44ff11ac087e3777b046347f28cf90cc4a263d37e0730920fdf4fe87d9dfa8f7d3f5c9219e165e84be13511c5a3dffe228ed5e0a73a7f9c39c2b6dcb1d5c3f3f8dedae6f998f232cc0b8a45c7a67d8a570fed691b7fc6fc5819731e23d718918158746c3f36f6f755e3afd998ce6b03f8cec198942f774caa07b6f1b84e893bd7526273bc5f6520068d6da4791efc546796fb42821ddbb6c3b8cbd0fff2a55ebfe178907c1ee773d8afc7c2d30e3c1c7d9fa9bfe6f07dff2f41b2b9d6e969d5e669d500753a40bf4e06fd8a5d87503c6556666556666556666556666556666556666556666556666556666556666596cf8cf75fe0fa26d55b2984917c79e0e198e70f7f3fca1d8b8e6fd775be0beb3ac9af5be473b86649f7182ef3da5c03759ec88cd4fd21aca7fb6b83b8a6b99257bb31dd67511f9cbd16cbb98618b70e1cb57ed99258ecfc21aef5367b8f9afd1db2564fd795119a32dca7324ad38ca729dea7b8c2e3b1793ab77a848d63edafd4b548d48aca49aeede13d06bce7a5307e502e5405a3c70f7c9fe94a3cf6e8354c5a2feff262d7409dffc98c9c1bba1795fecfa17fcf93add3ed1d9b5eb30cfcdddeb1a7b9d71247ad77fc56782dd5f93f1853df5c15fc55338efb3f705c0ea0adb8f54319d7cd937f1f2eace3b797c0d3093c1ce30cd3f5460efb40d2ebf8dd9e5651d73154a70bf4eb66d02fea5a94f6299e322bb3322bb3322bb3322bb3322bb3322bb3322bb3322bb3322bb3322bb332cb67c6ef8a126b16eae585308ed3bd0fe17a06fdfe0b1ddfaeebbcb06a242ef73a1cad392df7da5c0375be5c3552f7a5ae5c1f9c7dbf43dcb96458cf2b7a2e295e3db407d782b8becfdde1f174446841e596c46217d6f193d778641dbfddd3351fa129577fc53556d414fb6b9bc7836ba3f5c1d9f79664e138e371ef505c5e503cec4b1de0a3327e3f9ae33ce37b897f5f0fc5c3f5eb479cb6d302ae739fcf718e1b3dd0a6fee0ecfcae813aef87b1ef83ae8cf770e0bd238f463c4f5bb1756ad28fe5b7ec728575df35c0d90f7130f65a604d28761bc6ce38a338e4af81f2e7aa46ea523dd283b42676db47e837c190dd7f5d9bf7ba06a8d31bd1fefe20d9f6f7793c7d1eb33d271f813c7b14deffb9c6a4de188d9681465407af83b8eec9f3c748fffe46bc6fafceab83d72c54e70b3046c5dd3f1a75cf21d7fb58dc3d8751d7c69dc0e8b7d1bfcfb3d2efd37a0cc68ba4efd37a0c7208efd30abce32f87e313575d10ffde4275beef1ddfbf26a7d7e07d6054e747305e34ba7b16eb83b3afbff19ea9f1f87c15779f34c5c3eb1aecdb7fabed96b907eaf727c88c39812c789d40757ee39db3ee18eed511af7d22e6b5a415fd0e157e7ef1f5b33af4c26bfa13d1a1d0e7fbbcb6505ef7425ba8ce7f79d780c95fb714ae01936febe86b121a073a22da4a75fe1bfada9fe11a8fce137eeea8ab3efb79da8a5d03927eb6cde3fdfbc0185bc2ef03d7568fd4f57fe797b42ef5f781bbbcd749fc7de0ff853cab83fbd0b9c6eab5311a2d078da80e7e3788de47f0b77ca3de63b8eeed8f7b8f89fa0d4a1c9f1babc79fcd9f578bba46a03af45abc4698e998a7399dfdbafe7c21bd5f2679df307e57a215e2e277255a99f4cc816efdb08fd705e732768e2976dc6f4ee7c62176dc6f4e8f47ec262f76d338c656cd5573499a33fc2672f8fd33fccd52bb15bb2e258606785d550a18ab53c0589302c6da1430d6a58071520a1827a780714a0a18a7a680310b8ce7f2bd9d419f7cb9fa709daf62d71a189be17f97e44bfdff1dccff4ba5e8b50fc666f84c176ab12a18bb16f8398fe3b71f4afd5f2fc480ffbb607a0a1867a48071660a189b53c0382b058cb353c03827058c7353c0382f058cf353c0b820058c0b53c0b828058c8b53c0d89202c6f353c078410a182f4c01e3452960bc38058c4b943111c615bc8cf972192d0fc7fffc7b32ff738c81271775cf29d3774f4afe7f6bccbf4fda56eeefc6e1bd25bcff13eec9fdb61dc7bd23a5feb65db1ffb7cac4982f9791eb3e76fc1ecf5878f07b9151dfad6160cc97cbc8f5fd17fc8ede5878ba40b3ce08cd1818f3e53272dd2b57eabd9c784f7f5784660c8cf97219f1beea047942cdba4be0e901cdba23346360cc97cbc8755f7216628c85a71734eb89d08c81315f2e23d377db42cd7a4be0c1ef80f54668c6c0982f97d1f2ac61d2acaf049e35a0595f846692189127e9dfc9ee8b88c5f19dc152db4e0cc83825058c5353c088f749708c5fc5ee93e8e3d5275fae3e5ce7abd87d12189be1fb31a116f87d88bfa5c53a5e9ea2f74960ecf54c5ae0f755fe9616eb8187e3fb33598831161e626880d74d4f01e38c1430ce4c0163730a1867a58071760a18e7a480716e0a18e7a580717e0a1817a48071610a1817a58071710a18f1b32ac3b562d1cf2feb2778ecb8cf2a133d76dce792891e5bf35cf3bc12626b9e6b9e57426ccd73cdf34a88ad79ae795e09b135cf35cf2b21b6e6b9e67925c4d63cd73c97143b0d73fcca38f11891a725399e1cb61d63f50b687b7f044f86a9ed186ba380b61343da1837a480714d0a1855c7c23d88e5305a9e4d4c3c1b4be0d9043c9b99783695c0b31978b624cf13e6d4e6127888a1015eb726058c1b52c0a83aaa8ed6ec967b729bea2888310d3a2aa3322aa3329e0bc6348ce1ca988a7ccc97cb6879b626cf136ab6a5049eada019bdae8d97315f2ea3e5d9963c4fa8d9d61278b681665b23346360cc97cb6879b627cf136ab6ad049eeda0d9b608cd1818f3e5325a9e1dc9f3849a6d2f81670768b63d423306c67cb98c966767f23ca1663b4ae0d9099aed88d08c81315f2ea3e5d9953c4fa8d9ce12787681663b23346360cc97cb68797627cf136ab6ab049edda0d9ae08cd1818f3e5325a9e3dc9f3849aed2e81670f68b63b423306c67cb98c96676ff23ca1667b4ae0d90b9aed89d04c2ae39a14306e480123b38ef972192dcf3e269ebd25f0ec039e4b9878f695c07309f05c9a3c4f98539794c0430c0df0ba352960dc900246d5517594c4a83a568e8ecaa88cca581a637f0a18f55c2ba3544686cf5745bf4373c9048fdde8c56eac90d871dfa199e8b135cf35cf2b21b6e6b9e67925c4d63cd73caf84d89ae79ae795105bf35cf3bc12626b9e6b9e57426ccd73cdf34a88ad79ae795e09b135cf35cf2b21b6e6b9e67925c4d63cd73caf84d89ae79ae795105bf35cf3bc12626b9e6b9e57426ccd73cdf34a88ad79ae795e09b135cf35cf2b21b6e6b9e67925c4d63cd73caf84d89ae79ae795105bf35cf3bc12626b9e6b9e57426ccd73cd7349b1f7271f3b5fea6fccec071e8edfbc616a67ce1ef73277acbf24a89fd5ea724fab4b3cad1aa0ce65a0dfe50cfa65202e1d9bf6295ea9cc4f11c0cc143b6fc79729d07e8ab1c1d3c3c6bf82a9ed7163fd15133c76dc583fd163c78df5133db6e6b9e67925c4d63cd73caf84d89ae79ae7526263b93618b96ea7df3fb5c778aa2bd7b87d64253fd5b97452e1715aa07d8823b6f6217dafa884d89ae79ae795105bf35cf3bc12626b9e6b9e57426ccd73cdf34a88ad79ae795e09b135cf35cf2b21b6e6b9bc3c6f80e7abc68127f07882223c8b84f1cc11c6335d18cf14613ccb84f1540be3592f8c673ceee72b856797309eedc2787a84f12c16c6b35c18cf5c613c79613c3384f1740ae3992a8c678b309e1a613c1b85f1e484f1ec11c6b34418cf3c613c3385f1ac10c69315c6532b8c6793309ed5c278960ae3d92b8c67b7309e3e613c3b84f1f40ae3e912c6335f184fbb309e66613cadc278ce13c6532f8c67ab309e3a613cab84f1ec13c6b35618cf02613cb384f13408e36914c6334918cf3a613c3b85f16c13c6d32d8c67a1309e0e613cb385f1ac14c6334d184f93309ecdc278260be3c908e0c90667ff2659169edf0fbe2aefb5f67aa0ad79e4f92b9dbf0a5e73952b57471cfb4af0d177c3af8a782dea7425b4a5df95734f6e0b75c258fdb04ff1ea81e32a213c9385f16c16c6d3248c679a309e95c278660be3e910c6b350184fb7309e6dc278760ae359278c6792309e46613c0dc2786609e359208c67ad309e7dc2785609e3a913c6b355184fbd309ef384f1b40ae36916c6d32e8c67be309e2e613cbdc2787608e3e913c6b35b18cf5e613c4b85f1ac16c6b349184fad309eac309e15c278660ae399278c6789309e3dc27872c278360ae3a911c6b34518cf54613c9dc2786608e3c90be3992b8c67b9309ec5c2787a84f16c17c6b34b18cf7e613ceb85f1540be359268c678a309ee9c278e608e359248ca72a8287e1ff5f863c74ff1a1d9bf6f70b89cd701ec2fffb7935539bae71c7aa75c7257e8a570375ae750385bdbf0a5f4b5cfefd86f8de740d68740d535be87c64bcf3c31c3b8ff75506c01078fa04113c1cf7a332b573541e26f8ff677356ab6b3dadfc73d70075ae06fdae65d02f2ab7ffda07dc631a992d0f5d9b116b16eaad17c248be2b7879c27ebb3e18bd15ebb7d7020fc718c6d4ceb07f5de7b5697d84ee540773f53a867646f51ddabf0ece43da982dcf465726d62cd4db2884917cd7f0f284fd6b63307a2bd6bfae031e8ef187a99d61ffbade6bd3c608dda90ee6eaf50ced8cea3bb47f3d9c87b4315b9e4dae4cac59a8b7490823f9aee5e5e9c8429b692bd6bfae071e8ef187a99d61ffbac16bd3a608dda90ee6ea0d0ced8cea3bb47f039c076556e62866cb43dfe122d62cd4db2c84917cd7b1f274e4b2d066da8a8d6337000fc738cfa47b388edde8b5697384ee540773f546867646f51ddabf3122764b90ac16378d418b9b22786e1a672d285ea9cc57a7905975569de3985567d5398e5975569de3985567d5398e5975569de3985567d5d96eaab3eaac3aabce4930abceaa731cb3eaac3ac731abceaa731cb3eaac3ac731abceaa731cb3eaac3ac731abceaa731cb3eaac3ac731abceaa731cb3eaac3ac731abceaa731cb3eaac3ac7314bd0d9f2d06f66116b16ea6d11c248beeb7979c2ef056d09466f196fbf1fca3701cf0d0cfa30b533bc87fc80d7a62d11ba531dec5f0718da19d57768ff009c87032530df984266d5b93c66cb43bf4d4fac59a8b7550823f96ee0e509c7b1adc1e8add83876007838c679a67686e3d880d7a6ad11ba531dec5f030ced8cea3bb44ff1945999e3982d0ffd8f2862cd42bd6d4218c977132b4f3efc7ee3b660f4566c1c1b009e0389f314c63106ddc371eca0d7a66d11ba531dccd5830ced8cea3bb47f10ce4329cc37a6905975569de3985567d5398e5975569de3985567d5398e5975569de3985567d5398e5975569de3985567d5398e5975569de39855e7cad1d9f2d0ff0a22d62cd4db2e84917c075879dac37587edc1e82de3edf743f920f00c24ce53587760d03d5c7738e4b5697b84ee5407fbd721867646f51dda3f04e761a233df984266cd8df161d6dc50e63866cd0d658e63d6dc50e63866cd0d658e63d6dc50e63866cd0d658e63d6dc50e63866cd0d658e63d6dc50e63866cd0d658e63d6dc50e63866cd0d658e63d6dc50e63866cd0d658e6396901b9667872b136b16eaed10c248be015e9ef0770f7604a3b762f7ed1c029e830cfa30b533bc6fe7b0d7a61d11ba531dec5f8719da19d57768ff309c076556e62866cbb3d39589350bf5760a6124df415e9e701cdb198cde8a8d63878187639c676a67388e0d7a6dda19a13bd5c15c1d64686754dfa1fd41380fcaaccc51cc9667972b136b16eaed12c248be43bc3ce138b62b18bd151bc7068187639c676a67388e1df1dab42b4277aa83b97a84a19d517d87f68fc0795066658e62b63cbb5d9958b3506fb71046f21de6e5c967a1cdb4151bc78e000fc738cfd4ce701cbbd96bd3ee08dda90ee6eacd0ced8cea3bb47f339c87b4315b9e3dae4cac59a8b7470823f9067979c2feb52718bd15eb5f37030fc7f8c3d4ceb07f1df5dab4274277aa83b97a94a19d517d87f68fc279481bb3e5d9ebcac49a857a7b853092ef082f4fd8bff606a3b762fdeb28f0708c3f4ced0cfbd731af4d7b2374a73a98abc718da19d57768ff189c87b4315b9e7dae4cac59a8b74f0823f9f0fd621f134fbdc7531fa1c5448cdde8c56eac90d84d5eeca60a89ad79ae795e09b135cf35cf2b21b6e6b9e67925c4aed45c53cd2b53f3cc39d43c730e35cfa8e62235ff4b72b13b1b8291ad0a621d656a276efd50c6f939da1609e399238c67ba309e29c2789609e3a916c6d3238c67b1309ee5c278e60ae3c90be399218ca75318cf54613c35c27872c2789608e399278c67a6309e15c278b2c2786a85f1ac16c6b354184f9f309e5e613c5dc278e60be36917c6d32c8ca75518cf79c278ea85f1d409e359258c67ad309e05c2786609e36910c6d3288c67bf309e49c278d609e3e916c6b350184f87309ed9c278560ae399268ca74918cf64613c19013cd9e0ecefa3e0f709aac147f7f7ef03dfd35c793ff8aa2262d0718e818fe673e918f6fd6a6df3d90c55f09a5b22b89e16118fe2dc12f1daf1d01d63f5c33ec5ab078e5b84f04c16c6d3248c679a309e95c278660be3e910c6b350184fb7309e75c2782609e3d92f8ca751184f83309e59c2781608e3592b8c6795309e3a613cf5c278ce13c6d32a8ca759184fbb309ef9c278ba84f1f40ae3e913c6b35418cf6a613cb5c278b2c2785608e399298c679e309e25c27872c2786a84f14c15c6d3298c6786309ebc309eb9c278960be3592c8ca747184fb5309e65c278a608e3992e8c678e309e45c278aa2278f633f1c4fd9ec27e01b1edbc375d0bd29c58169e1f8fef29edf71869ff2830920fefd3cd31f1c4fd06454e406cabc56a28db2d0bcfe3f74cb8722ae731d27e544ee17d96ab9978e27eb763b580d8560b5a1ba07b00b2f03cde57cd9553ab3d46da8fcaa9265e9ef07f4bac0a466fc5ee35c23ec7710e99da99c3fe97e06f6844fe16f52a4fab06a8331ef715c78d07144f9995398ed9f2d0da17b1e2fbd9787c6f692c8c51efaf0c3ce1f8d81a8cde8a8d8f478187e3fd83a99de13876dc6b536b84ee540773f538433ba3fa0eed1f8f88dd1224abc5893168712282e7c4386b41f14a65de9f4266093a5b1eba579358b3506fa51046f2e57879c2f17165307a2b363e9e001e8ef70fa6768663c249af4d2b2374a73ad8bf4e32b433aaefd0fe49380fa5301f4f21b3ea5c1eb3e5a1351a62cd42bdbc1046f21d65e5c9e7b2d066da8a8d63278187639c67d23d1cc786bc36e52374a73ad8bf8618da19d577687f08ce83322bb3322bb3322bb3322bb3322bb3322bb3322bb3322bb3322bb3322bb332cb66b63cf4dd6162cd42bd76218ce43bc1ca535877680f466fc5d61d8680e764e23c85750706ddc37587535e9bda2374a73a98aba718da19d57768ff149c076556666556666556666556666556666556666556666556666556666556666596cd6c79e837e489350bf53a843092ef242f4ff8bdad8e60f4566cdde114f070accb30b5335c77b8d56b534784ee540773f556867646f51ddabf15ce83322b7314b3e5a1df1e24d62cd4eb14c248be21569ec2fa6967307a2b368edd0a3c1ce33c93eee13876da6b536784ee540773f534433ba3fa0eed9f86f3500af3f11432abceaa731cb3eaac3ac731abceaa731cb3eaac3ac731abceaa731cb3eaac3ac731abceaa731cb3eaac3ac731abceaa731cb3ea5c393a5b1efa9f86c49a857a5d4218c9778a95a73d5c77e80a466fc5d61d4e030fc7ba0c93eee1bac319af4d5d11ba531dec5f6718da19d57768ff0c9c8789ce7c3c85cc9a1be3c3acb9a1cc71cc9a1bca1cc7acb9a1cc71cc9a1bca1cc7acb9a1cc71cc9a1bca1cc7acb9a1cc71cc9a1bca1cc7acb9a1cc71cc9a1bca1cc7acb9a1cc71cc9a1bca1cc7acb9a1cc71cc9a1bca1cc72c21372c4fb72b136b16ea750b6124dfadbc3ce1ef1e7407a3b762f7ed9c019ed30cfa30b533bc6f67d86b537784ee5407fbd730433ba3fa0eed0fc3795066658e62b63c3dae4cac59a8d72384917ca77979f25968336dc5c6b161e0e118e799da198e63b7796dea89d09dea60aedec6d0cea8be43fbb7c179481bb3e5e9756562cd42bd5e218ce4c3f7e55e269e7a8fa73e428b7315db6ad1e7cae7b9c72c3cdf078c5ce361afc748fb98e3e4ab079e3e269e468fa731428b7315db6ab116ca76cbc2f36b81912ba7fa3c46da8fcaa946e059cbc4d3e4f134456871ae625b2dd6b9f234f79885e7d70123574eadf518693f2aa79a80671d134fdc98b46e1c62c7f5aff1881d972be3115b3557cd5573d59c53f3cc39d43c730e35cfa8e6a23467b88e0ae77b2946000cb8f543193f2b705c7b32b53317f5796c9dd726fc3c86730ee7eaf386322b731c33d3bc4547d68b4dfa041e0f6dc3cc5a8ce7bc699fd7a634cc9b16633e9e4266d5b93c661bfbf6e4637764bdd8a44fe0f1d0763bb3164ced0cc7833b82688d295e03d4c13cbd83a19d19884bc7a6fd3be03c94c27c3c85ccaa7379cc36f69d89c72efc9e3cc6267d028f87b63b99b5e06967613cb82b88d698e235401dccd3bb18da9981b8746cdabf0bce83322bb3322bb3322bb3322bb3322bb3322bb3322bb3322bb3322bb3322bb332cb66b6b19f9e78ecc2fc3dc6267d028f87b6a7336bc1d3cec2fcfddd41b4c614af01eae039bf9ba19d19884bc7a6fdbbe13c28b3322bb3322bb3322bb3322bb3322bb3322bb3322bb3322bb3322bb3322bb36c661bfb19c9c70ebf8f83b1499fc0e3a1ed19cc5a30b5339cbfbf2788d698e235401d3ce7f730b4330371e9d8b47f0f9c076556e628661bfb9989c72eace7616cd227f078687b26b3163ced2c8c07f706d11a53bc06a883e7fc5e867666202e1d9bf6ef85f3500af3f11432abceaa731cb3eaac3ac731abceaa731cb3eaac3ac731abceaa731cb3eaac3ac731abceaa731cb3eaac3ac731abceaa731cb3ea5c393adbd8f7251ebb3d9cbfc7d8a44fe0f1d0761fb3163ced2cccdfdf1f446b4cf11aa00ee6e9fd0cedcc405c3a36ed53bc4a603e9e4266cd8df161d6dc50e63866cd0d658e63d6dc50e63866cd0d658e63d6dc50e63866cd0d658e63d6dc50e63866cd0d658e63d6dc50e63866cd0d658e63d6dc50e63866cd0d658e63d6dc50e63866cd0d658e6396901b36f6b3928f1d7e9f1d63933e81c743dbb398b5606a6778ffcb0341b4c614af01ea609e3ec0d0ce0cc4a563d3fe03701e945999a3986dec07938f9dcf7ab1499fc0e3a1ed41662d98da198e070f05d11a53bc06a883e7fc21867666202e1d9bf61f82f39036663c7f93938b1ddeb74931aadca3f53ddb95abc1f71c57ae01df735db9167ccf73e53af03ddf952781ef05d01ef2bdd0955780ef45aebc0e7c2f76e5b5e07b892bf781efa5aedc0bbe97b9f230f85eeecab781ef15ae7c3bf85ee9ca7780ef55ae7c27f85eedca7781ef35aefc74f0bdd695ef06dfeb5cf919e07bbd2bdf03be37b8f233c1f74657be177c6f72e5fbc0f76657be1f7c6f71e525e07b38c2f756577e16f8dee6ca0f80efedaebc1f7cef70e529e07ba72b4f05dfdf41991edfe5cae781ef1157ae07dfbb5db9017cef71e546f0bdd795a781ef7daedc04bef7bbf274f07dc0956780ef83ae3c137c1f72e566f07dd8956781ef23ae3c1b7c1f75e539e0fb982bcf05dfc75d791ef83ee1caf3c1f749575e00be4fb9f242f07dda951781ef33aebc187c9f75653cbf7fefca0f828fc69587c047e3cab3c147e3ca73c047e3ca73c147e3caf3c047e3caf3c147e3ca0bc04779f742f051debd087c94772f061fe5dd4bc04779f752f051debd0c7c94772f071fe5dd2bc04779f74af051debd0a7c9477af061fe5dd6bc04779f75af051debd0e7c9477af071fe5dd1bc04779f746f051debd097c94776f061fe5dd5bc04779f730f828efde0a3ecabbb781afc595df0ebef35df91de0bbc095df09be0b5d19c7998b5cf95de0bbd8951f011f8d85ef06df535cf93de05beacaef05df32577e1ff896bbf2fbc1b7c2953f00be95aefc41f0ad72e50f81afd5953f0cbed5aefc11f0e55cf9a3e06b73e58f812fefca1f075fbb2b7f027c1daefc49f075baf2a7c0d7e5ca9f065fb72b7f067c3daefc59f0d1fb388d33b63fdb3e483a9046d6476d6e8d680bf926435bfa8364afe928161d9bf6db8191ce417efc19f363656cf3182d4f2783669857b415fbccd4093c1d0c3c4ced0c3f3375796d6af7dad400759e02edec62686706e2d2b169bf0b62739c73d4a2d61d77a9a7450dd6716f68f6bdb3988e740c9bbff988b6f432b7858e4de352ef38c4eef662e7bcd8381ed356ac7f7503730f03b33d6e5ff2c70dfbd71a772cca298a938336ad050d926a13c6ce38a338e4af81f2bce691ba548ff4a0f72f62b7b94ce712d9fdd7757aaf6b803abd11edef0f926d7f9fc7d3e731db73d2d83cc2c1d01fc21ce8f538683f07daf5c568d70bda511d7cffcb3369d7e3f1f478b12d0f5de374818fae15881fafb35ac781db1ff7ba22b8c9d70d8c51d73a6dc93316bdd6690346f2f5004f379366feb95eeae983efcb755e1d7a6d0dd4590def8dd988bab6df2dc98cb48b3e83ff2548764caf63d00be70702d027f0340c402f6a672d03cfd460648ee0ccf0d0e9819b072f1b1c389c01b41a0f131f3311cda8021f96ab237c41307a2a04a764692a04a764ab3c59700a86eadb8f52b65934dd3078e2d8f0534f0e9e3c74faae53c38387f70cdd8cd4b51e3d92c6b50049d147dbe46064d2a63f487631a6ce8b552c7926c3e3a4e479da98da19bee94df1da54e7b5a901ead4c2735318da9981b8746cda9f12113bc18128d462ea18b4981ac133759cb5c0896ff2614fa5e771f1a4ca6b0bf6686c939fe7893688022e81e3671c9c7dce76f65ad79849c1c8c9a6d1d3cea8daab5a7b22ec0ca97de7b233a07608b2339c7646d3bea9d9194b3b43696724ed0ca49d71b4338c7646d1ce20da19433b43d812146600ed8c9f9de1b3337a1703db1781d77eaab6ef907646cecec0d919377b65653fb1d9ab117bf56daf14edd581bd2ab09f2ced2c837db7b55732f65ddabeb3da2b457b8568afe8ed15ae5da55a6f6c83d37aa3b14dc6361bdb626cabb16dc6b61bdb616ca7b15dc6761bdb636cafb17dc62e31766950985dbfccd8e5c6ae30f65463571abbcad8d5c6ae3176adb1eb8c5d6fec0663371abbc9d8016303c60e1a3b64ecb0b14163478cdd6ceca8b163c69e66ec96a07087ce0963278d0d193b65ec5663a78d9d090a2b667685ccae88d91530bbe26557b8ec8a965dc1b22b567685caae48d915a8fb82c20a935d29b22b437655c0ae02d8597f3bcbffdca0308b6f67ed5f101466e5ed2cbc9d75b7b3ec7656ddcea2db59733b4b6e67c5ed2cb89df5b6b3dc7656dbce62db596b3b4b6d67a5ed2cb49d75b6b3cc0f078559643b6b6c6789edacb09d05b6b3be7696f791a0308b6b676ded2cad9d95b5b3b076d6d5ceb2da59553b8b6a674ded2ca99d15b5b3a076d6d3ce72da594d3b8b69672ded2ca59d95fc9cb1478dfd83b17f34f64fc6fed9d8bf18fb57639f37f60563ff66ecdf8dfd4750c8cbff34f625635f36f615635f35f635635f37f60d63df34f62d63df36f698b1ef18fbaeb1ef19fbbeb11f18fba1b11f19fbb1b19f18fba9b19f19fbb9b15f18fba5b15f19fbb5b1df18fbadb1c78d3d61ec77c67e6fec0fc6fe68ec4fc1c8ea060e227f763b34d33e303c3c78e2d470cbf050cb89db8e0f1f3b75fcae963b8e0d1f6d19ba7df0f491e34377e08bdfe5862d5a46d878faf4c05d2dc74e1e1ebcb365e8b6e196a1232d07876e3b79f80cbee8f3ee450bce8e3870f8707cb06f573d09d2ef9519f4d7ee75b440b3b378db1e2f47903f95f3a219d5e535e812f7ae439fde2f2f5cedb69c393e34dc926b3969fe0e1c37af193cdcda82cf9d31229f196e39333c707ab8e5c8e9a1132d6dad78dc6ba694d1889ae6325ed4da3cf69607ff0f1d686fac2d0a0400", + "packedBytecode": "0x000000028df71de500000047c51f8b08000000000000ffed9d779815c5b6f67b6040643b0398b3830915c56118e20c3098136614111186610405862866cc9283392341c95940401010c3c93979921e8f27dd7bcf39cffde37ef77ec1ef76ed5debce3b45f566f6d8b579f7eceae7a9d9d56baa7bfdeaedd5d5a9baab20484dff0c5381ceb70cd399c18193fcbf4aff967eb3a96b8ceb2a75c95990239c2d7284b3658e7016e60867ab1ce16c9d239c87e508679b1ce13c3c464ec5d6226838c5cddbd681ae713326724cd3237240d3a21cd3b43807346d17e4461bd53e47383be408e79139c279548e701e9d239cc7e408e7b139c2795c8e701e9f239c27e408e78939c279528e709e9c239ca7e408e7a939c2795a8e7096e40867c71ce13c3d4738cfc811ce337384f3ac1ce13c3b46cecec0d949ff9ea37fcfd5bfe7e95f297bbefebd40ff76d1752cd4f3172aae30a9873465c6ffba85a93c4cddc3d4c3f85fcf30f50a53ef30f5d1ff2bd1ffab08536598fa86a95f98fa6b0d0684e9a2305d1ca64bc27469982e0bd3e561ba224c5786e9aa305d1da66bc234304cd786e9ba305d1fa61bc27463986e0ad3cd611a14a65bc2746b980687e9b6300d31586e0fd3d030dd11a66161ba334cc3c334224cd5611a19a69a308d0a536d98ee0ad3e8308d09d3dd61ba274c63c3342e4ce3c35417a609619a18a649619a1ca629619a1aa67bc3342d4cf785e9fe303d6068f660981e0ad3c3617ac4e09c1ea647c3f458981e0fd313617a324c4f85e9e9303d13a619619a19a659619a1da639619a1ba679619a1fa605615a18a667c3f45c989e0fd30b617a314c2f85e9e530bd12a657c3f45a985e0fd31b617a53b3c88eb0284c6f8569719896846969989685e9ed30bd13a6e5615a11a695615a15a6d5615a13a6b5615a17a6f561da10a68d61da14a6cd617a374c5bc2b4354cdbc2f45e98b6876947987686e9fd30ed0ad3ee307d10a63d61da1ba67d61fa304cfbc3f451983e0ed32761fa344cdf0ad3b7c3f49d307d374cdf0bd3f70dcd7f10a61f86e94761fab1b6fd44fffe549795fb773f0bd3cf75fe17faf797faf757faf73363995f87e93786edb761fa9d61fb7d983ed7f92ff4ef1ff4ef97faf78ffaf72bfdfb27fdfb67fdfb17fdfb57fdfb37fdfb2ffaf75ff5efbfe9dfbfebdf7fe8df7f866973c754be4d503f550531b551e5b5c9673f227ea7a0e1a4b468a9ff27bf25da5ea8e7e557b46ba5e75b19f6d67abeb5b19e367abe8d61efa0e73b18f6a3f4fc5186fd183d7f8c613f4ecf1f67d8cfd4f367823d11c0bd616d57b696da54003689d716606ba56d2dc1d65a5607b6c3b4ad15d864fbb606dbe1da7618d8da6a5b1bb025b4ed70d1324c47685b551057ac948e50eb2d8a7bbdfa795971fcbc23d57adb39e26d1f3fef28b5de0e0e78557c1ca9d7d51ee2e6286deb00b6a3b5ed48b01da36d4781ed586d3b1a6cc769db31603b5edb8e05db09da761cd84ed4b6e3c17692b69d00b693b5ed44b09da26d2781ed546d3b196ca769db29602bd1b653c1a69bdce034b09dae6d25603b43db3a82ed4c6d3b1d6c6769db19603b5bdbce049bb4bf67814dce17cfd636d5761c5e00cb68bbb45bc965a4cd06dbb9d25e83ed3c69abc1d659da69b09d0fbec57601b43562eba26dd26ea9fff5d1f9aa20aefda4ac56adb722eef5866b56ebed1bff7a93cf1cfb05f55a57819f0ad0aabfcec7d8afa92bfa2ed049fc88bd10f257415929277ac8b147d8d5b1a052e7fba759ae8fb15c3194a9b4d4bf2a88b7fe7d0d9ebe06732bc8bb89d96edd7ccc367aca386607435933f6e43ca839c6ec40e07010b33d7dcc367aca38666ba1ac197b722edc1c63f676e07010b3d56e62b6acd4c76ceabe5910d8634fae879a63cc8e018ef863b6bb8fd9c64f19c7ece350d68c3db9266e8e313b0d38e28fd99ed5fedca0d153c631bb00ca9ab127f7679a63cc3e051c0e62b6d6b7b38d9e328ed937a1ac197b72afb039c6ec73c0117fccf67614b3dd7ccc06a967a041608f3db96fdd1c63763170c41fb323fdfdd9c64f19c7ec0e286bc69e3c43698e31bb5ee7d573869fe8e70c2783eda7da760af0c61fdb35dd1dc576998fed54df9020b0c7a83ccf6b8eb1fd81ceab38fe05f44710db2fb5ad23d87ea56da783ed336d3b03eae5601fa8f6fb40a3a78cf781df40593396e5d97273dc077e041c0e62b6c6c76ca3a78c63f66f50d68c3de9e7d01c63f6f7c0e120666b7dcc367aca3866ff13ca9ab1778ece37c79895bea6ea7ce10b7dbe701ed8fea06d9dc1f6a5b69d0fb63f6adb0560fb4adbba80ed4fda7621d8feac6da560fb8bb67505db5fb5ad0c6c7fd3b66e60fb176d2b07dbbf6a5b77b0fd9bb6f500dbdfb5ad27d8fea16dbdc0f64f6debad6daa9f9ef4bd92f3d636c05f15c4bb6da5dfa5ac5be6bb66c1773bc377bb2cfaee60f8ee60f15de6c077027cc85460cc5741becc2d4f6931f0a0aff2f87d755375ef1634beeee5c0d3dd41dd13e0a3313cdd81a747fc3cc9febf3de35f6f721b7733344d80af6e50af5e0eea5500be64dd322ffe8ac1866d6b2f0b63eff819cb0ac097ac5be67b03a3d8b0ad9777ae64ff51c7c34e05f5bc0ef6a5e43991f893ef96094739d8a5cc951debd93a6bb622f83f1ef77a18364771998c0bf125eb9679f15704f5e9917dc6b2c6327637185db51105e04bd6ed7dd76f07c9e371dcc1b58eb54d13df1559f0dddbf05d6ef8c6b653a674c7b6dec01cfb35a73eb655c6bfde52bc3e916b43f183e70f780d17579dd0b75c1b8a1fb11742feda82fab2524ef4907658d8552ccbb6447673b95ec672c550a6c252ffaa20defa571a3c9506b3da2617c3b1d0c1fe908c810a8343e6cb41bbca08ed2a403b29730e68e7aa3deb63f0c87c0fe09176ac27f0b8ba268ae2c9c6f5d8c17ce3392c5e3fcbfff13cc0d5f6ea6a30cabc6d7bf50646dbb98a83eb99b4e72add81516c7d80a79b23cda2b66b3712df0e6225d91e890f393797fdb707d8a54c6ffd429d6a2bef86b6d2458c603ccad4d86bdef8b75359f21abc7b063cb8ed1c5c577575148fa578ffe6eb20de5833dba5ee865651f7785cb5e5dd0c1e99177f9ed9337b66cfec993db367f6cc9ed9337b66cfec993db367f6cc9ed9337b66cfec99f999f17912f6db92723d4818cdfe6faeeef327bf7fa8d725eb57cf75fe8fd3fe6065a5d83f46fa419c67d4b910ca14b5a82ffbffa13f98f99c0afb48f670ab5d725b627fcc2a98177fd8d70ab725437fa792d87c978d74f5bcad5dd0b0af9cb99fa2a62efa3fa3a60586a6d81fff7c8347c56965cb7a3617cffe327d16895a493ece677bc5813dd6e3df2e650d9e59b7081ab61f789c71d57f47da6a795e5e61f82e843227b5a8df36d2b74ac618ee662c87fd7e64ddb2cc7960af34d6dd5e2f2b1cad8cf5f78465a5cca9d0a6ee6d51af9983b6b22cd3beebf8dc3cfee370ea397eb70c78ba028f8b76c6d1f94629ee03713fc737fba7d9ce63a40cf6ed73d0af326d7f27f1e7993db367f6cc9ed9337b66cfec993db367f6cc9ed9337b66cfec993db367f6cc9e999f59f198cf5af1fdda7212c62cf57d483ecf906f95c9fa93df0b6e51efd7f5733879e6d4d9a833be3bfacf16f56537eb7c5170607f87a86de9eafb1451db52fce1b767f059908be7ba05e04bd65d66d142f225b1f94e3dc7773136843cc7ef66e85a6ed1d4d5fe8acf585153dc5fbb1b3cf86c34eadb3e6586cdd13e9e362ec41fee4b6560933cbe1fed623be3b1c4ecd723fef0f9f577b4b6ed0357dbbeacd465bb81df4da90a0e8c6ffc9eca0fa1edfbb1ce631f0eec3bf285e5ff32a57b4e2dfaa93a3bf8be666901ac4bb6afeddb9e03803526df5d715d053a0d30342884fce72deacb4a39292b5a0bbbda47e41b30c86e2ed7dd58ae18caf4b3d4bf2a88b7fee6b756fb1bcc6a9bfc0ce2ec0b38febb6a93fa4568741e6824651c7fb3d1dabfd2ec5788ed686ba38c2c8bdfa2fb2bb45151fd476dc700d7c73159b7ed38661e171ad3cf33dffb69fd17b41771f7d3fa2f8821eca71518ebef0ceb17aed641f4b145cafc3f63fde639b92c83fdc0fe673f81efb994e97c26e7e487eafaca764e8ecb45d55d31e377d0aa6264c69840163c4f90326db5d6b2cd2a23b87b5b962d8a5856b432bf1556141ca89f9befaca5f6f9fe465d24aef11be452e628a88b9bf396d439a0ab6fca55419d54becc525729733cec6b27ea7c02b613eeb7e75afe2f53ba73401cc3fda2f8eb9cdcbe17036715f841df97006b4cbebba26f3907143f622f84fc392debcb4a39d143b41676b58fc87914b29bcb5518cb1543990196fa5705f1d6ff2283e72283596d935320cece857ee8aedaea01111a75068da40cde53b47d07d476afc3d5fb1b51e752f8fe92797e85c74937e74df6f358f3be9aed1ca1b3c18fe7083da19d4d58ca9af70be5781967bf617c57a227f8c577255c7dbbb90fe85605f3785e70287dbbf88eadf2173566429f2cf88e1a33211bbe3b18be3b64d1b7d7dc6bcea4b983310892ef9fe1374bd594eebc14c72590e55a00a38bb11c1241c36f8f1f8c11c77790e55a02a38be343a6df3eef098cb25c2130ba78b714c7df680c237e63188ff3c2e8e05bb15d9bfaad58bca7d71a1899ded9c467538701a38bf3e2a6beab87e7f36de0d7d5b844dd32602c034659ee706074716f1caf651ac388d745b25c5b6074f10c2bd3f19df0dbf3786fd92563ba63bbe3be286599de7ba974cb93f65c037d3b18d730a905de673c98167dddf2a43df741df0eeefb25b5c071060fa6053e1b7431ee612268f81cee603cf8fc52963b1218ab1c31f6cf80b10a18ffe75e31300e70c4589501e3006014fbd1c0e8e0fe6b927140068c789f52963b06182f76c47851068c1703a32c772c30bab8979a00bf8d61bc041865b9e380f152478c9764c0782930ca72c703e3658e182fcd80f1326094e54e00c6cb1d315e9601e3e5c028cb9d088c573862bc3c03c62b8051963b0918af74c47845068c5702a32c7732305ee588f1ca0c18af024659ee1460bcda11e35519305e0d8cb2dca9c0788d23c6ab3360bc061865b9d38071a023c66b32601c088cb25c09305eeb887160068cd702a32cd71118af73c4786d068cd701a32c773a305eef88f1ba0c18af074659ee0c60bcc111e3f51930de008cb2dc99c078a323c61b3260bc111865b9b380f126478c3766c0781330ca726703e3cd8e186fca80f16660bcc9c238c811e3cd19300e024659ee7c60bc257ec6e4b5f4a00c186f019e5be3e7496a764b063cb7bae5497e57ef168bafdbe2f795dc168383c6d7fd36e019123f4f725bdc96018f3014c372a8d9edf13326351b9201e3edc033347e9ea466b767c0331434bbdda2d91df13326351b9a01e31dc0332c7e9ea4667764c0330c34bbc3a2d99df13326351b9601e39dc0333c7e9ea4667766c0333ca8d7ec4e8b6623e2674c6a363c03c611c0531d3f4f52b31119f0548366232c9a8d8c9f31a95975068c2381a7267e9ea4662333e0a901cd465a341b153f6352b39a0c1847014f6dfc3c49cd4665c0530b9a8db2687657fc8c49cd6a3360bc0b7846c7cf93d4ecae0c784683667759341b133f6352b3d119308e019ebbe3e7496a3626039ebb41b33116cdee71c47877068cf75878e2fe4ef6dd165fe31cd57d6cd0f8ba0b43312c87fd24c63b621c9701e3786094e5b09f449d23c6f11930d601a32c9770cc98ae9f441df89e10bfef64bb5417345e9f096e79d2f69340df131d69312168bc1613ddf2a4ed2781be2739d26262d0782d2601cf64075a24c047637884a11896c37e12531c314ece80710a30ca72d84f62aa23c62919304e0546590efb49dceb88716a068cf702a32c87fd24a63962bc3703c669c028cb613f89fb1c314ecb80f13e6094e5b09fc4fd8e18efcb80f17e6094e5b09fc4038e18efcf80f1016094e5b09fc4838e181fc880f1416094e5b09fc4438e181fcc80f1216094e5b09fc4c38e181fca80f1616094e5b09fc4238e181fce80f1116094e5b09fc474478c8f64c0381d186539ec27f1a823c6e919303e0a8cb21cf69378cc11e3a319303e068cb2dc3d8e19d35dbf3cd6cc7d475dab3477df51d725cdddb78f731fe7f9e0dbc7b98ff37cf0ede3dcc7793ef8f671eee33c1f7cfb38f7719e0fbe7d9cfb38cf07df3ece7d9c33f97edc81ef04f890a9c098af82bc3014c372f778c666cd883c25f1f19462ddd1d71304757fc2c253e0a8eee8eb4982ba0b43ae313e9e038cf7e400a3d731d507b1298c8ae729473c4f66c0f314f03ced88e7a90c789e069e67e2e749c6d4d319f00843312c774f0e303e9e038c5e47af2313a3d7317f74f48c9ed1337ac643c1980b6db867cc89782c6b2aa3e299113f4f52b36732e099019ac972b7ba652c6b2aa3e299193f4f52b31919f0cc04cd66583473c058d65446c5332b7e9ea4663333e099059acdb468e680b1aca98c8a6776fc3c49cd6665c0331b349b65d1cc016359531915cf9cf879929acdce80670e6836dba29903c6b2a6322a9eb9f1f324359b9301cf5cd06c8e4533078c654d65543cf3e2e7496a3637039e79a0d95c8b660e18cb9acaa878e6c7cf93d46c5e063cf341b37916cd1c3096359551f12c889f27a9d9fc0c78168066f32d9ab132de93038c8fe700a3631dcb9acaa878163ae2599001cf42e079d611cfc20c789e059ee7e2e749c6d4b319f00843312c774f0e303e9e038c5e47af2313a3d7317f74f48c9ed13366c6f8440e30fa6ded1959191d5c5fa57d87e6d966ee3bea1d9ae6ee3bea1d9ae6eedbc7b98ff37cf0ede3dcc7793ef8f671eee33c1f7cfb38f7719e0fbe7d9cfb38cf07df3ece7d9ce7836f1fe73ecef3c1b78f731fe7f9e0dbc7b98ff37cf0ede3dcc7793ef8f671eee33c1f7cfb38f7719e0fbe7d9cfb38cf07df3ece7d9ce7836f1fe73ecef3c1b78f731fe7f9e0dbc7b98ff37cf0ede3dcc7793ef8f671eee33c1f7cfb38f7719e0fbe7d9cfb38cf07df3ece7d9ce7836f1fe73ece997c3f1fbfefb24cbf31f33cf0b8f8e68da37a96aaf5bea0d7f5758cfa29ad5e34b47ad6d0aa18cabc00fabde840bf02f02beb9679f197297327026647becbda050df76bf1f1b8a1872af392a3ba47b5f52f3573df516d7d73f71dd5d63777df3ece7d9ce7836f1fe73ecef3c1b78f731fe72cbe31df2aa83f6f97ef9faa75bcacf3857a5eca3f01762933f9b0d46ffbc0ef432e7cfb7dc81f2bf2c1b78f731fe7f9e0dbc7b98ff37cf0ede3dcc7793ef8f671eee33c1f7cfb38f7719e0fbe7d9cfb38cf07df3ecef9e2bc18fe5f99059ec0e009d2f02c20e3994ac6339b8c673419cf50329eebc8782e26e379888ca79c8c670219cf48329e5bc878ae22e3b9908ca71f19cf34329ede643c73c878ee26e3799a8c671819cf0d643c9792f13c42c65346c633898c671419cf6d643cd790f15491f1dc4fc6d3938ce75c329e71643c73c978ce21e3194ec6f30c19cf4d643cc5643cedc8782e27e379928ce702329e0a329e47c978e693f14c21e3b98b8ce776329e52329e6bc978ba90f15c44c6f320194f77329e79643c75643c33c878aac9780691f19c47c67325194f4b329ebe643c0bc978ee25e3e943c633868ca73319cf1d643cd793f15c42c6f330194f37329e89643c33c9786ac8780693f15c4dc6d39f8ce73e329e5e643c63c9783a91f1dc49c67323194f36be679a09cf11643c45643c9791f13c46c6339d8ca72b19cf64329e59643cb5643c43c8780692f10c20e379808ca70719cf78329e11643c3793f13c45c6d39e8ca70319cf15643c05043c89e0c0314c12f0ffe7c1d6c258567df6754ec7faffbfa2ed2d60995775bea565ddaf804dbe25fbaa6559d4e915a84b95ce977eb329a913faaa8279f157041caf92f05c41c6d3818ca73d19cf53643c3793f18c20e3194fc6d3838ce701329e01643c03c9788690f1d492f1cc22e3994cc6d3958c673a19cf63643c9791f11491f11c41c6f33c19cf8d643c7792f17422e3194bc6d38b8ce73e329efe643c5793f10c26e3a921e39949c633918ca71b19cfc3643c9790f15c4fc67307194f67329e31643c7dc878ee25e35948c6d3978ca72519cf95643ce791f10c22e3a926e39941c65347c6338f8ca73b19cf83643c1791f17421e3b9968ca7948ce776329ebbc878a690f1cc27e379948ca7828ce702329e27c9782e27e36947c6534cc6731319cf33643cc3c978ce21e3994bc6338e8ce75c329e9e643cf793f15491f15c43c6731b19cf28329e49643c65643c8f90f15c4ac6730319cf30329ea7c978ee26e39943c6d39b8c671a194f3f329e0bc978ae22e3b9858c672419cf04329e72329e87c8782e26e3b98e8c672819cf68329ed9643c53c9781690f1545a789e77c423efbbcbba65fe7912df0eb643a95aef6b8eeaf4ba5e572bbd5ee1177f8550667adbd4af7a3f1c97152ef3fb04f86eceeba0d1eb8eea22dba3c0d83ee8fb6547bee51d2d59b7ccbfdccc7db7337cb7cb13df1d0cdf1df2c4b78f731fe7f9e0dbc7b98ff37cf0ede3dcc739936f07d70665f89d34990a8cf92ac8e3f5828befcb39aa6783ebc4af63d44f69f586a195796d550c655e03fdde70a09fedda53e6c55fa6cc9d0898312e4a8278e3e2cdf8eb54d62e68d85ebc69e88bf55ae448d3a863c8a266ee3bea18d2dc7d471d439abb6f1fe73ecef3c1b78f731fe7f9e0dbc7b98f7326df6fe97c8cd78da5e8433d5f94eb81b7c0ef129d2f88d1af5ad762bdae42bd6ee158027629f3bfe1b9a6dfe7fd3e1f976f7f6cf3719e0fbe7d9cfb38cf07df3ece7d9ce7836f1fe73ecef3c1b78f731fe7f9e09b39cecdbcf4173f07d85cf5e78f8ac56cbc4b70287d47c56273f71d158bcdddb78f731fe74cbe973af09d001f32a5ebe3b71478163be07154cfe4b38d65469d9e37ea540c65f018bfcc413d0bc0afac5be697018f4c95c0e3220e1ab3cd91670119cf54329ed9643ca3c9788692f15c47c6733119cf43643ce5643c13c8784692f1dc42c6731519cf85643cfdc878a691f1f426e39943c6733719cfd3643cc3c8786e20e3b9948ce711329e32329e49643ca3c8786e23e3b9868ca78a8ce77e329e9e643ce792f18c23e3994bc6339c8ce719329e9bc8788ac978da91f15c4ec6f32419cf05643c15643c8f92f1cc27e39942c6731719cfed643ca5643c8bc878ae25e3e942c6731119cf83643cddc978e691f1d491f1cc20e3a926e31944c6731e19cf95643c2dc978fa92f12c24e3b9978ca70f19cf18329ece643c7790f15c4fc6730919cfc3643cddc8782692f1cc24e3a921e3194cc6f30619cfd5643cfdc978ee23e3e945c633968ca71319cf9d643c3792f11c41c65344c6731919cf63643cd3c978ba92f14c26e39945c6534bc633848c672019cf00329e07c8787a90f18c27e31941c6733319cf53643cedc9783a90f15c41c65340c093080e7cf73f01ff7f036cf28efaf3607b5be71783ad85c5474b9d5f06b6429d97751c16a6973a1eb86ed4c9d57bf9e8ab0ae6c55f1170bc4dc27305194f07329ef6643c4f91f1dc4cc633828c673c194f0f329e07c8780690f10c24e31942c6534bc6338b8c6732194f57329ee9643c8f91f15c46c65344c6730419cf8d643c7792f17422e3194bc6d38b8ce73e329efe643c5793f1bc41c633988ca7868c672619cf44329e6e643c0f93f15c42c6733d19cf1d643c9dc978c690f1f421e3b9978c6721194f5f329e96643c5792f19c47c633888ca79a8c6706194f1d19cf3c329eee643c0f92f15c44c6d3858ce75a329e45643ca5643cb793f1dc45c633858c673e19cfa3643c15643c1790f13c49c67339194f3b329e62329e9bc8789e21e3194ec633978c671c19cfb9643c3dc978ee27e3a922e3b9868ce736329e51643c93c878cac8781e21e3b9948ce706329e61643c4f93f1dc4dc633878ca73719cf34329e7e643c1792f15c45c6730b19cf48329e09643ce5643c0f91f15c4cc6731d19cf50329ed1643cb3c978a692f12c20e3a9cc0e4f997ab75dfa5a07c0855315e49701cf2207fa38aa67297ed7e0eb18d7abb47ac7d0ea0d43ab6228b314f47bc7817e05e057d62df3e22f179915cf633a6ffb0ec463248c625be49627b9df3e16349cd2edb7ef008f8b76cd513d93fbd772a34e8f5974973218abcb1dd4d3b6efc8fc72d80eb9c6ac789ed479614d40b9274918c5b6cc2d4f72ff7a326838a5dbbf96038f8bf6c7513d93fbd70aa34e4f5a74973218ab2b1cd4d3b6efc8fc0ad80eb9c6ac789ed279614d40b9a74818c5f68e5b9ef204d459a674fbd70ae071d1fe38aa6772ff5a69d4e9298bee52066375a5837adaf61d995f09dbc1337b661bb3e291673bc29a80724f93308a6db9539ef2d204d459a674edd84ae071d1ce3bd23dd98ead32eaf4b445772983b1baca413d6dfb8eccafb2f82e09e2d5627523b4586de1599d652dc45fa6cc4b7390d9ebec758e62f63a7b9da398bdce5ee72866afb3d7398ad9ebec758e62f63a7b9da398bdce5ee72866afb3d7398ad9ebec758e62f63a7b9da398bdce5ee72866afb3d7398ad9ebec758e62f63a7b9da398bdce5ee72866afb3d7594d5e67afb3d7d9eb1c07b3d7d9eb1cc5ec75f63a473133e8ac78e4db95c29a8072cf90308a6d855b9ee47b41cf040da70263be0af2ab8167a5037d1cd533d9877c8d51a7672cba4b19dcbfd638a8a76ddf91f935b01d32615e9583cc5ee7a6312b9e193a2fac0928378384516c2bddf224dbb11941c3295d3bb606785cb4f38eea996cc7d61a759a61d15dcae0feb5d6413d6dfb8eccaf85ede0993db38d59f1ccd479614d40b999248c625bed94a72cf97ee3cca0e194ae1d5b0b3c2eda7947ba27dbb175469d665a74973218abeb1cd4d3b6efc8fc3ad80e9930afca4166afb3d7398ad9ebec758e62f63a7b9da398bdce5ee72866afb3d7398ad9ebec758e62f63a7b9da398bdce5ee72866afb3d7398ad9eb9c3f3a2b9e593a2fac0928378b84516c6b9cf2744b3e779815349cd23d7758073c2e9ecb38d23df9dc61bd51a75916dda50cee5feb1dd4d3b6efc8fc7ad80ecd9d79550e32fbd8c80eb38f0dcf1cc5ec63c3334731fbd8f0cc51cc3e363c7314b38f0dcf1cc5ec63c3334731fbd8f0cc51cc3e363c7314b38f0dcf1cc5ec63c3334731fbd8f0cc51cc3e363c7314b38f0dcf1cc5ec63c333473133c486e299adf3c29a8072b34918c5b6d62d4ff2bb07b3838653ba7e3beb81679d037d1cd533d96f678351a7d916dda50cee5f1b1cd4d3b6efc8fc06d80e9ed933db9815cf1c9d17d604949b43c228b6756e7992edd89ca0e194ae1ddb003c2eda7947f54cb6631b8d3acdb1e82e653056373aa8a76ddf91f98db01d3cb367b6312b9eb93a2fac0928379784516cebddf224dbb1b941c3295d3bb611785cb4f38eea996cc73619759a6bd15dca60ac6e72504fdbbe23f39b603b7866cf6c63563cf3745e5813506e1e09a3d836b8e5294b409d654ad78e6d021e17edbca37a26dbb1cd469de65974973218ab9b1dd4d3b6efc8fc66d80eb9c6ac78e6ebbcb026a0dc7c1246b16d74cb93dcbfe6070da774fbd766e071d1fe38aa6772ff7ad7a8d37c8bee520663f55d07f5b4ed3b32ff2e6c875c63563c0b745e5813506e0109a3d836b9e549ee5f0b828653bafdeb5de071d1fe38aa6772ffda62d4698145772983b1bac5413d6dfb8ecc6f81ed906bcc8a67a1ce0b6b02ca2d2461141b1e2f163ae22932788a2c5a1c2adf4a8b0a9d3f42ff26e0ff15c0e8aa3d5c6830ca3cc6b8d88ab2a0593b83a79da1d9a1f4adb4a884bc9a707b550223c3f66a9705cd3a183c1d0ccd0ea56fa5455f9d6faf7f717bf5054686edd501781cb4cfe50983474de9ce37b638d6c7513d93e71b5b03bbee781c923278ecdeeaa09eb6730999df0adbc1337b661bb3e219a4f3c29a8072834818c586d729dbe2e7294f183c6a4ad78e6d73ac8fa37a26dbb1f702bbeedb40772983b1fa9e837a16805f59b7ccbf07db2113e65539c8ec756e1ab3e219acf3c29a8072834918c5b61578b6c7cf539e3078d494ae1ddbee581f47f54cb6633b02bbeedb41772983fbd70e07f52c00bfb26e99df01db2113e65539c8ec756e1ab3e219a2f3c29a8072434818c5f61ef0ec8c9d27351e10f2a8295d3bb6d3b13e6eea996ac7de0fecbaef04dda50cee5fef3ba86701f89575cbfcfbb01d3cb367f6cc9ed9337b66cfec993db367f6cc9ed9337b66cfec993db367f6cc9ed93373332b9ea13a2fac0928379484516c3b806757ec3ca9e70ec8a3a674cf1d7639d6c74d3d53cf1d760776dd7781ee52066375b7837a16805f59b7ccef86ede0993db367f6cc9ed9337b66cfec993db367f6cc9ed9337b66cfec993db367f6cc9e999b59f10cd379614d40b961248c627b1f783e889fa73c61f0a829dd73870f1cebe3a89ec9e70e7b02bbee1f80ee520663758f837a16805f59b7ccef81edb0c7337b660bb3e219aef3c29a8072c34918c5b61b78f6c6ce937a7e8a3c6a4ad78eed75ac8f9b7aa6dab17d815df7bda0bb94c158dde7a09e05e057d62df3fb603b64c2bc2a0799bdce5ee72866afb3d7398ad9ebec758e62f63a7b9da398bdce5ee72866afb3d7398ad9ebec758e62f63a7b9da398bdce5ee72866af73fee8ac78aa755e581350ae9a84516c7b80e7c3d879ba95260c1e351518f35590ffd0b13e6eea997aeeb03fb0ebfe21e82e6570ffdaefa09e05e057d62df3fb613b3477e65539c8ec63233bcc3e363c7314b38f0dcf1cc5ec63c3334731fbd8f0cc51cc3e363c7314b38f0dcf1cc5ec63c3334731fbd8f0cc51cc3e363c7314b38f0dcf1cc5ec63c3334731fbd8f0cc51cc3e363c7314b38f0dcf1cc5cc101b8aa746e7853501e56a4818c5b60f783e8a9fa73c61f0a8a9c098af82fc478ef57154cf64bf9d8f03bbee1f81ee5206f7af8f1dd4b300fccaba65fe63d80e9ed933db98154fadce0b6b02cad592308a6d3ff07c123f4f59c2e05153ba76ec13c7fa38aa67b21dfb34b0ebfe09e82e6530563f7550cf02f02beb96f94f613be41ab3e219adf3c29a8072a34918c5f631f03888bb244f91c123f39f10f8565ad4e9fc11fa17b7571d30326cafa22c68d6cee069676876287d2b2d26405e4db8bd260023c3f66a9705cd3a183c1d0ccd0ea56fa5c5449d6faf7f717b4d044686edd5210b9a1dcaf6f050eedb87324ebde6874ef38243a879c121d4bcc06b4ea5b983e34b191ecb0260c0a90af29f02cfb7e3e749de97fb34039e6f03cfb7e2e7e9eaa89ea56abddf01f6b8d6abb4faaea1d5a78656c5500619beeb40bf02f02beb9679f1e7993d7314339edb0a6b02ca7d42c228b66f018f8b7643d5fd02bd2e597fab307d7674bd5f17cf4bf05e712bbd5ee1107f85506662497dd9df69b622f8bf6c37559ffd86cdd13bcc5d6dcfed645efc150559bb779bf65e326ae1e27953a6c7fdfd169eafe3e329c5fd1c7ded7354f74c9efdedb3f0c458f7ae51cf3df7c65ff764fbd145af4bd6aff6d17f3fdaa9e6e5b8ef49fbd1c5a87321941958525ff63fa0fdb0b515aef74d392737f7cd16417d7b265c25da6e3e13fa5adba5dc47501edb9c0afd8bfb6705d4d555bb18758f09db45b3ed76a9bdf95cd2f45d0cba7c44aa99ed3905ea5869e1ae24e0c678cce67e26ebb63d23ab347464d30cb7f547161dfb5ab8fb127033eed77d0d1dd9343bd87e3dc8c23d88809b71bf1e64e8c8a6d9c1f6ebc116eec104dc8cfbf560434736cd0eb65f0fb1700f21e066dcaf87183ab26976b0fd7aa8857b280137e37e3dd4d0914db383edd7c32cdcc308b819f7eb61868e6c9a1d6cbf1e6ee11e4ec0cdb85f0f0f1aeac8a6d9c1f6eb6a0b77350137e37e5d6de8c8a6d9c1f6eb1a0b770d0137e37e5d63e8c8a6d9c1f6eb5a0b772d0137e37e5d6be8c8a6d9c1f6ebd116eed104dc8cfb7563fbedb3eed77516ee3a026ec6fdbaced0914db383edd7132cdc1308b819f7eb09868e6c9a1d6cbf9e68e19e48c0cdb85f4f347464d3ccb65f3b7a9730e3771b3f76aa4f6a8ce98f33e0f910785cc494a3382875d4cf25d93775afa1d5c786563876c73ed0cf415f98b4df24107f9ed9337b66cfec993db367f6cc9ed9337b66cfec993db367f6cc9ed9337b66cfec99f999f1bb8cf87c45ca7d44c228367c26e5e23ebfaafb857a5db2fe56611a786cbddf7db1fb2d2b2d30fc550187f82b8432279e565ff606cd56141cb8dd702c6edc967b62af436a5b9af12ff3e2af08eab317781cbc9f9fe4d967f0ecb36881ef9dc6e3bb6ca41b8dcb4adb050d637f8f511fd4f483d8fd37d4b4c0d0f403c7be1341c3ed290c3855411e795c3c1b7654cf645bb0dba893a9713194e904f5dceda09e05e057d62df3bb8147a616c0e32a06038327b0e823532519cf54329ed1643c6792f10c25e3399e8ce73a329ec3c9782e26e379888ca79c8c670219cf48329ed3c8786e21e3398a8ce72a329e0bc9780ac978fa91f14c23e3e94dc6733719cfd9643cc3c878ce27e339918ce706329e0419cfa5643c8f90f19491f14c22e31945c6d3918ce736329e63c878ae21e3694dc65345c6733f194f4f329e73c978c691f19c43c6339c8ce764329e9bc8788ac978da91f15c4ec6f328194f0519cf05643c53c878ee22e339838ce776329e52329ee3c878ae25e3e942c67311194f1b329e07c978ba93f1d491f15493f19c4ac633888ce73c329e23c978ae24e36949c6d3978ce75e329e3e643c63c8783a93f19c45c6730719cf09643cd793f1b425e3b9848c672f19cfc3643cddc8782692f1d490f1ec27e32921e3194cc6733419cfd5643cadc878fa93f1dc47c6d38b8c672c194f27329e3bc9784e22e3b9918ce708329e22329ecbc878a693f17425e3994cc6534bc6733a19cf10329e63c9780692f11c46c633808ce701329e1e643ce3c9784690f19c42c67333194f7b329e0e643c5790f11410f0248203bfc59480ffef039b7c33e843b0b5b0ac4f9e534b79755c5cdcf1c075b7b0acfb030b03eab40bea52a5f3a5df6c4aea84beaa605efc1501c707243c5790f17420e3694fc6733319cf29643c23c878c693f1f420e379808c670019cf61643c03c9788e25e31942c6733a194f2d19cf64329eae643cd3c9782e23e32922e339828ce746329e93c878ee24e3e944c633968ca71719cf7d643cfdc9785a91f15c4dc6733419cf60329e12329efd643c35643c13c978ba91f13c4cc6b3978ce712329eb6643cd793f19c40c6730719cf59643c9dc978c690f1f421e3b9978ca72f194f4b329e2bc9788e24e3398f8c671019cfa9643cd5643c75643cddc9781e24e36943c67311194f17329e6bc9788e23e32925e3b99d8ce70c329ebbc878a690f15c40c65341c6f32819cfe5643cedc8788ac9786e22e339998c673819cf39643ce3c878ce25e3e949c6733f194f15194f6b329e6bc8788e21e3b98d8ca72319cf28329e49643c65643c8f90f15c4ac69320e3b9818ce744329ef3c9788691f19c4dc67337194f6f329e69643cfdc8780ac9782e24e3b98a8ce728329e5bc8784e23e31949c633818ca79c8ce721329e8bc9780e27e3b98e8ce778329ea1643c6792f18c26e3994ac65349c6d3c2e0c1ffab77c3f6eabc7c3ba810fe3f49772e6fafd72565e419b1ba57f1be6153f5dde9a8beef07f55315ccef84fa0afbfbc0f3be239e5d068fe9bb08f295a0d90ec3a618b73b62dc6130cafc766014fd7600cf0e473c3b0d1ed37711e4fb8266ef1936c5b8cd11e37b06a3cc6f0346d1ef3de079cf11cf7683c7f45d04f941a0d956c3a618b73862dc6a30cafc166014fdb602cf56473cdb0c1ed37711e4078366ef1a36c5b8d911e3bb06a3cc6f0646d1ef5de079d711cf1683c7f45d04f921a0d926c3a618373a62dc6430cafc466014fd3601cf26473c9b0d1ed37711e48782661b0c9b625cef887183c128f3eb8151f4db003c1b1cf16c34784cdf45901f069aad336c8a71ad23c67506a3ccaf0546d16f1df0ac73c4b3dee0317d17417e3868b6c6b029c6d58e18d7188c32bf1a1845bf35c0b3c611cf5a83c7f45d04f96ad06c9561538c2b1d31ae3218657e25308a7eab806795239ed5068fe9bb08f235a0d90ac3a618973b625c6130cafc726014fd5600cf0a473c2b0d1ed37711e46b41b3770c9b627cdb11e33b06a3ccbf0d8ca2df3bc0f38e239ee5068fe9bb08f2a341b365864d312e75c4b8cc6094f9a5c028fa2d039e658e78de36784cdf4590af03cd961836c5b8d811e3128351e61703a3e8b704789638e2596af098be8b203f01347bcbb029c6458e18df3218657e11308a7e6f01cf5b8e78161b3ca6ef22c84f04cdde346c8af10d478c6f1a8c32ff06308a7e6f02cf9b8e7816193ca6ef22c8df0436e1ed03b6d775be37d85ed3f95e607b55e77b82ed159def01b69775be3bd85ed2f972b0bda8f3ddc0f682ce9781ed799def0ab6e774be1fd89ed5f9fe605ba8f355605ba0f303c0365fe72f02db3c9dbf186c7375fe12b0cdd1f94bc1365be72f03db2c9dbf1c6c3375fe0ab0cdd0f92bc1f68cce5f05b6a775fe6ab03da5f3d780ed499d1f08b62774fe5ab03daef3d781ed319dbf1e6cf7e8fc0d60bb55e76f04dbc73a7f33d83ed1f95bc0f6a9cedf06b66fe9fced60fbb6cedf01b6efe8fc9d60fbaece8f00dbf7747e24d8beaff3a3c0f6039dbf0b6c3fd4f93160fb91cedf0db61febfc58b0fd44e7c781eda73a3f1e6c3fd3f94960fbb9ce4f06db2f747e0ad87ea9f353c1f62b9dbf176c9fe9fc34b0fd5ae7ef03db6f74fe7eb0fd56e71f00dbef74fe41b0fd5ee71f02dbe73aff30d8bed0f947c0f6079d9f0eb62f75fe51b0fd51e7a55d53edec9f74be2488b79dfd2aa89f4ac0b7f85365feacf3ad8d32b26c2194395b772854cf38d4bb4bd20e4bbbac6cd20ebf0e3669875f039bb4c3af824ddae157c026edf0cb609376f825b0493bfc22d8a41d7e016cd20e3f0f3669879f039bb4c3cf82ad4ae717824ddae105609376783ed8a41d9e07366987e7824ddae1396093767836d8a41d9e0536698767824ddae119609376f819b0493bfc34d8a41d7e0a6cd20e3f093669879f009bb4c38f834ddae1c7c026edf03d609376f856b0c9fef215d8a46dfe186cd2367f0236699b3f059bb4cddf029bb4cddf069bb4cddf019bb4cddf059bb4cddf039bb4cddf079bb4cd3f009bb4cd3f049bb4cd3f029bb4cd3f069bb4cd3f01db789dff29d8a46dfe19d8a46dfe39d8a46dfe05d8a46dfe25d8a46dfe15d8a46dfe0c6cd236ff1a6cd236ff066cd236ff166cd236ff0e6cd236ff1e6cd2367f0e36699bbf009bb4cd7f00dba33a2f6d751bb0c9b36235957ec309c7e16901be84a52a88b7edc7a90af25877992ac978e690f18c26e379998ce74c329ea1643cc793f11c4ec6f32619cf04329e85643ccbc8789692f1bc41c6731a19cf06329ef5643c4791f1bc4fc6b3938ce742329e42329e59643c2f92f19c4dc6338c8ce77c329e13c97812643cf3c9789690f12c26e3798d8ca72319cf3a329eb5643cc790f1ec20e3d94ec6d39a8ce72b329e19643ce792f13c4fc6730e19cf70329e93c9788ac978da91f15490f15c40c633978ce72d329e45643caf90f19c41c6b3868c6735194f2919cf71643cef91f16c23e3e942c6d3868ce769329e3a329e67c978aac9784e25e31944c6731e19cf91643c2dc978fa92f1dc4ac6339b8ce725329ece643c6791f1ac22e35949c6f32519cf09643c5bc978b690f1b425e3d94bc633918c6701194f0d19cfeb643cfbc9784ac8780693f11c4dc6d38a8ce763329e99643c2f90f1ac20e3594ec6731219cfbb643c9bc9788e20e32922e39947c6534bc6f32a19cfe9643c43c8788e25e3398c8ce719329ee7c878de21e3799b8ce714329e4d643c1bc978da93f17420e3d94dc6b38b8ca7808027011c01d8e4ff2dc126dfe1d90fb62f747e2fd8e41b3e6f82ed739d7f146c0f5b6c2d2c7cc2301d6cf2aeec176093fb338f804dde99f81c6c72de20fed5fcca8e07f2b78065c44f4b0b3ffafbdcc22579dcdeb24c5510eff6465f5581fd9b770506e3a1e6d945c6b39b8ca703194f7b329e8d643c9bc8784e21e3799b8ce71d329ee7c8789e21e3398c8ce758329e21643ca793f1bc4ac6534bc6338f8ca7888ce708329ecd643cef92f19c44c6b39c8c670519cf0b643c33c9783e26e36945c6733419cf60329e12329efd643caf93f1d490f12c20e39948c6b3978ca72d19cf16329ead643c2790f17c49c6b3928c671519cf59643c9dc9785e22e3994dc6732b194f5f329e96643c4792f19c47c633888ce754329e6a329e67c978eac8789e26e36943c6d3858c671b19cf7b643cc791f19492f1ac26e35943c6730619cf2b643c8bc878de22e3994bc67301194f05194f3b329e62329e93c9788693f19c43c6f33c19cfb9643c33c878be22e3694dc6b39d8c670719cf31643c6bc978d691f17424e3798d8c673119cf12329ef9643c09329e13c978ce27e31946c6733619cf8b643cb3c8780ac9782e24e3d949c6f33e19cf51643cebc9783690f19c46c6f30619cf52329e65643c0bc9782690f1bc49c6733819cff1643c43c978ce24e379998c673419cf1c329e4a329e16169efd8e78e45b31b26e99dfdfcc7def347cefcc13dfdb0ddfdbf3c4f736c3f7b63cf1bdc5f0bd254f7c6f367c6fce13df1b0ddf1bf3c4f77ac3f7fa3cf1bdd6f0bd364f7caf367cafce13df2b0ddf2bf3c4f772c3f7f23cf1fdb6e1fbed3cf1bdd4f0bd344f7c2f367c2fce13df8b0cdf8bf2c437f3f5b7ea872b7d9577ebdf04fcbf0218df74c4b8df6094f93781516cf83dea0a473c51d7ee1504be9516722f4b9e7926e0ff95c0e82aa62a0c4699b7c5d44ee0a974c41375cfa192c0b7d242dec5963e9509f83f8ebfec2aa62a0d4699b7c5d476e0e9eb8827ea5e495f02df4a0b79f759def94bc0ff71bc755731d5d76094795b4c6d039e418e78a2eef10c22f0adb4906f85c9376912f07f1c9fd1554c0d321865de1653387eee60473c51f7a60613f8565ac8b776e59b9709f83f8edfe42aa6061b8c326f8b291c3f6e88239ea87b6a43087c2b2de459b07ca33d01ff1f0a8cae626a88c128f3b698c2f16e863ae289ba173894c0b7d26298ce4b1fab04fc7f1830ba8aa9a106a3ccdb626a3df00c73c413750f7318816fa5c5709d97773812f0ffe1c0e82aa686198c326f8ba9b5c033dc114fd4bdd7e104be9516d53a2feff427e0ffd5c0e82aa6861b8c326f8ba9d5c053ed8827ea9e7135816fa5458dcecb37e712f07f1cff7db823c66a8351e68703a3d856024f8d239ea87bdd3504be9516f26dff15fa3701ffc7f1585dc5548dc128f3b698c2f1a06b1df144dda3af25f0adb418adf332264c02fe3f1a185dc554adc128f3b698c2f12b473be2897ab6309ac0b7d242becdb54cff26e0ff75c0e82aa6461b8c326f8ba9a5c053e78867b1c1b3d8a2c5a1f2adb490bedc4bf46f02fe3f01185dc5549dc128f3b6985a0c3c131cf1443dcb9940e05b6921dfd67e4bff26e0ff1381d1554c4d301865de16538b8067a2239ea8675013b3e03bea794a367c473d1bc886efa8fbdcd9f01d75cf361bbea3ee3f66c377d4bdb46cf88eba2f940ddf51f738b2e13bea7a3d1bbea3ae3db3e13bea3a2a1bbea3ae09b2e13beafc361bbea3ced5b2e13beabcc3b7e7be3d8fdbf7a13c77c8d7f6fc501e430fe5b1c45f1bf86b836cf9f6c7127f6d902ddff97a6de0dbf3ecb7e772fd5510445f8fbdedc8f752c3b7cce37396a58e7c2f367ccb3c3e3358ecc8f722c3b7cce3fdef458e7c1719be657e51167cb7337cb7cba2ef0e86ef0e16df0eb67759226878fd2d0c3855411e63e02d075a38aa67a95aef12bdaeaf635cafedbe8db9bf14439925a09febb643d66db61db9c88c71d1263edfa509f021df255336797efc3ad8a4dd7f0d6cd22fe055b0c9b1e915b0c933a997c126cfac5e02db689dff186cf2ec18fbeccbf3ff6d60abd679ec2b3e5ce7b7804dfa52611f65e90fb7196cd2a711fbc64abfd48d6093bec5d82753fa87af079bf4f1c7be80f29ec65ab0c9bb36d8074dde975a0db6bd3a8f7d9fe43b342bc1365de75780ed0f3abf1c6c0fe9fcad60fbbdce7f05b6dfe9fc22b03da8f36f81edb73abf046c0fe8fc8b60fb8dcebf00b6fb75fe79b0dda7f3f82edbaf757e17d83ed3797c876a9aceef04dbaf741edfddb957e7b783ed973aff1cd8a6eafcb3609ba2f30bc1f60b9d5f00b69febfc7cb04dd6f97960fb99cecf05db249d9f03b69feafc6cb08dd7f95960fb89cecf04db389d9f01b6b13aff0cd87eacf34f83ed473aff25d8eed6f9c5606ba1f34bc1266346623f95429d7f1b6cad741efb1fc9f7fd2782ed309d9f00b6363a5f0736f936dc68b0c978d0b5604be87c0dd88ed0f96ab0c9f9d970b0c9f827c3c026e75243c1d65ee787804dce7b06834dc6b31c0436f906695fb01dadf39560936feb5780ed589ddf0f361973ec4db0c977ebf6824dc6627e046cf2bdeae9603b49e7ff00361987e521b09da2f3bf07dba93aff3bb0c9373c1f045b89ceff166c1d75fe01b09daef3bf019b8c91753fd8ced4f9fbc0266307ff1a6cf2bde7cfc0d649e7a781ed1c9dff15d8642c917bc126e383fe126c9d757e2ad8e43bdc53c07681ceff026c32dedfcfc126df189e0c3619d7ed6760ebaaf393c056a6f33f055b379d1f0fb6729dff09d8baebfc38b0f5d0f9b160eba9f33f065b2f9dff11d87aebbcb4336a7f56fbf93e3d5f15c4775ea6fc7d18349cd25d1b0803f2c479ae5d0c3ce86b4fec752f4b9ed7cb7edf42af5762680ff8de1dbbefd435c5077a5d857abdbb0ddf8550e61cdd38a8e5e498df522fb7d7580eef63c9ba65990bc1becb58777b5ddf0f1cd577b7c124dca88394395f33a963e30f74be0d2c13235bf2fa58622d000d71aa82bc30b8d1aaac14cf7b1bc3f301f0ec899d2775bdee222670df8afb7addbc8f6bc65a3194d90dfaed72a01feeebb26e99177f9ed9337b66cfec993db367f6cc9ed9337b66cfec993db367f6cc9ed9337b66cfec99f99915cf3e9dc7e7ca526e1f09a3d8f6008f8bfbfcf81c56d6af9eebec3aaddeef9ed8fd367cbed74aafb7d4a8732194f91a9e39edd5f922f8bf6cb7a86de9e03961da6d29fe8aa03ef82c689f239e3d06cf1e8b16922f89cd77d948371a9795b60b1a3e5bdc6dd4073575b5bfeed1eb2a3034c5fdf54383079f8d1601ef47fa3701ebf908eae0601f4f1b17e20ff7a53d6093fc87c0e8623be3b144da03791e8ecfa6a5ccaf8ce7e2f16ffbb25297edc6fb50a7aae0c0f82e8432bf83b6ef739dc7be21fb40b77f58fe2f53bae7d4a29faaf38ef8eb9cdcbedb81b30afca0eff7803526df0ddea129d049fc88bd10f27f87fe1c524ef410ad851dc72b477673b90f8de58aa1cc4e4bfdab8278ebbfc3e0d96130ab6df225c4d93fe0f8efaa4dda19a1d185a09194d9031aed75c4b3c7e0110ef1a7cac8f66f6d9491650ba1ccff82364ad545da79a927f66dc16380abe398f89275cbbceddcf8036034eba8e263e0b1f5bc7b62e7cdadfe5f8795a47eb15d8fabff97acbbbd5e56380263fda5b07ee16a1d441f5bfe67fb96d4afdf65ffb2bd469d8505759632ed4a52bf2ace2ed3f94ccef50fd5755bd4b9fe4e073c89a0e1b5b79ad21ddff118f3be031e47f52cb51dbb7619752a86329da09e0ece63d2be0bbc037cbbd8e6a8859c43ed36b42884321d4b52bfd27644e988d7aa1f64a52e65d6f3c1524b5da44ca792fabab4017b9c4c2eb7db7b5027b5de3d96ba4a99f34bea75e9a2f309d84e78dfa4afe5ff32a56b0f702c9eadf1d739b97db7006715f841dfef026b4cbe1b7c0b44cef7c58fd80b215f59525f56ca891ea2b5b0ab7d44def9437673b9ddc672c550669ba5fe5541bcf5df6af06c3598d536e95a529f973872d96e6e8bd0a81434923278ff588eedf8de9dedb8bfc71177d4717f0f309aed269ebbb864db6bb099f7506de7835206cfc9a4ccd525a95fd5ce262c65cd7bc32eee63e23ba801d42330ea2a13c680836bc372bc7692764afc7401fb1e9d179dbb18da1542994125a95f87e7ddd67b97e6f51d5e5308b7b96fe1bb1f434aeab971ecc43dfab7086c9fe85f47d769e5b67b86c261bb6738bca49e1d9715ae8f2d7531af915b0407de53ffda288bf7ddd22d67e6cd712895be9f18e56c7ef09a27b67735ba969622538bc07ebfe04383bd203870cc4dd90f30e6ccfb285d8cf5e07d94ba92d4afb4496659b5edfffde87a7d643b8a76d89e604c7e088c553a5ffacda6aeb6facbbcf8538c1f197570d376a5de57cae43ef05ee071d1b63b6aa34bf1181bdff7297a57db8eff1f1a5a65f179adf5986f3e736f63e4e3f15d5663bbff64d362b785c7d57394282d765b7cc7a7458f91b6e3874d8b5d169e5d59d66297c5778c5ad4e27dcf745abc6fe171712f2a9d16ef5b7cc7a745cfd274cf35508b9d161e57f71ea2b4107f9932ef22606e63e4e3f15d5e6dbb4f66d3628785c7d5757394163b2cbee3d3a26b0fbc47974e8bed169ef8efcfa5d762bbc5777c5af4ea8df7f0d269f19e85c7d533dd282ddeb3f88e312e46d9eee5d8b4d866e1d996652db6597cc7787ed8c376afcda6c5560b8f83fbae69b5d86af11da31623f0be6b3a2db65878b664598b2d16dff16951dddd764fd8a6c5bb161e57f784a3b478d7e23b3e2d46f452be3737428bcd169ecd59d662b3c5778cd750c9b8d8d4082d3659783665598b4d16dff16951933cd7dad8082d365a783666598b8d16dff169519a3ca66e6884161b2c3c1bb2acc5068bef18e322793db9be115aacb7f0accfb216eb2dbe633c8e24e3625d23b45867e15997652dd6597cc7a7456df2fed3da4668b1d6c2b336cb5aacb5f88ef19e4b322ed634428b35169e3559d6628dc5777c5a744b1e535737428bd5169ed559d662b5c5777c5a8c4a3e135bd5082d5659785665598b5516df319e7726db8b958dd062a585676596b55869f11de37967f2fec58a4668b1c2c2b322cb5aacb0f88eb1ed4c9e772e6f8416cb2d3ccbb3acc5728bef18cf3b935abcd3082ddeb1f0bc93652ddeb1f88ef1bc33791c79bb115abc6de17135064a94166f5b7cc71817c9b6735923b45866e15996652d96597cc7785f2bd9762e6d84164b2d3caec66b88d262a9c5778cd723c97b7c4b1aa1c5120bcf922c6bb1c4e23bc66745c973f0c58dd062b185677196b5580cbef7c6ee3bd59f5b7c485fac0b0c2d0aa1cca91d53bfd2172b4a475907f62bc3babc157b5d52fdca1645d4e52da88b943913ead22670324651b9a3ba2663e64da8935aef4796ba4a99733bd6ebd259e713b04d3e06ddfa58fe2f5381315f0579d14fd5f9f5f8eb9c8cd5d780b30afca0ef57813526df5dd177814ee247ec8590efddb1beac94133d446b6157fbc81b3a8fece6728b8de58aa1cc1b96fa5705f1d6ff7583e7758339f9de03c499c4919bb62bc5f44684461780465206fbec7de488c7ec43281ce24f9591eddfda28837d28a5cc45d04661bf52a9672238b0dfa4a3b6ac2bb2cbba655efc15836d2f309a7554f1f119f4fd94b122641c0965937121bac17a7a1a3655d75e8eea2abe64dd32df0b18659c8a9ed9672c6b2c630f8351f1f471a0198ebd2153bae3451fe0e9ed80c7513d93c7a10aa34ebd8c3a1543197cb7b1c2413d0bc0afac5be62bc0b78b6d8e5ac831f95c438b422833dc387f8cd251d6a1e2b7a7a52efd1cd745d62ded52bf2cf8ae347c77377c278286db3908d2ef5f95c0dcd701b35a6ffff8d75b8ae76d1253e2a73bd469006810579d705d729e37c0d0b610f253e13c4fca4959397e09bb8a65d996c86e2ed7c758ae18caf4b3d4bf2a88b7fefd0d9efe06b3da2677c3b99d83fd211903fd0c0e99ef0edaf58fd0ae1f682765f0f8d7c391767d0d1e99ef013c728e530136395710fe04fcbf5b16b8cd76afc2c22d361c27ae8785b17bfc8cc9739d1e06a3cc770746b1f5059e4a479a99dbfa5c431f3c2eb736cac8b2855066161c1b1396b26abfeb54505faf96da1edbbb63ba4d6fed402f1ca731007d0243c300f4927ab672c0d336a81fab71f294ba4923ee1a75e3a8d4a347412b3430f1b7c0528d1660c37c4b8b2d081a0e495908361992b215d85a18b2e05098525e86b4732117ea21eb2e3438db004b9cbe71384f99d285ce61c0e3229455e8c8909e3a746e9d3466ca288c8f560667536247fdaf659a7251eb72b51dcc7da20ae6cd182c74e4bf25d4b70ae6c59fda3632b4ea841123ef1930e9aea9e3468d9f32198532776ccc17040d3780f91b25b8ab9d0e03002b8c8d432ba35ed860c8ff64c3b48d9fb31cc7cc35b509c09f4c6d41b7c31de8a6d62f63df8e1c3176ecf553abc78e1979d9d4f123a78ca91b8f5bb38da15cd49696ffb7069bad89c7b26ac2660b973dcc62b34d38ca701bb0c991eb70b0094f5bb0b584bc9437b78c9370ed04eb975d4afd4f89d34a57fcb0a03e04e470acda55b5ffaa5339f50959752aa48636569b530d5dacee18aaa189d557ecd4d0c36aa86135b4f089416ae8603554f029416a2860f5b58b922035b4efe9416ae8de3383d4d0bc6703dfb781f99c2075daa586d6ed1ca486ce55b72ebb04a9cfbca977ebd5e9bbba2da04e79d5259e3afd54a79deaf242ddbe50b7b2d4299d3a5d56a782eaf44d5d8ef4d75a0f08d34561ba384c9784e9d2305d16a6cbc3744598ae0cd35561ba3a4cd784696098ae0dd37561ba3e4c3784e9c630dd14a69b83d4f0ceb704a9e1d7d5f0cfb705a9a1a16f0f52c346df11a48694be33480d373d22480d453d32480d533d2a480d617d57901ade7a4c901a26f79e2035d4ae1a82777c901a0e5b0d93ad86cf56c3fcaa2181d590c26aa861352cb11ac2580d81ac86467e20480db9ac866c7e38480dfb3c3d4c8f86e9b1303d1ea627c2f464989e0a52c383ab61c36704a961c6d5f0e3b383d470e57383d4f0e66ad873351cba1a265d0d9fae865557c3bcabe1dfd5b0f02f85e9e530bd12a41e49a84731ea1185bafdaf1e83a95bd46f05a95be74b82d4236ef5c85f7581505d425417991541aa0b95ea52a6bad8a92e87aa0ba6ea92aabae8aa2ecbaa0bb7ead2aebaf8ab571ed42b20ea9518f58a907a654abd42a65ea953af18aad744d56b97ea3562f55af59e20755b7c5f907a54aa6e87ab4703ea96b9ba7dff6998be15a462f23b61fa6e98be17a6ef87e90761fa61901ad6580d77ac864b56432bab6198d590cd6a28673514b41a36fab32035f4b41abafab7416a48ecdf87e9f3307d11a486d7fe324c7f0cd35761fa5398fe1ca6bf84e9af61fa5b98fe254cff1aa67f0bd3dfc3f48f30fd33a81f661b1b921375eba3af60821153a68c1a37614ac994ba927153c74e193361ecfd25d3c64c195d5277efa849b563eba6e1c2dfd60bcb18e103264d1a717fc998f135a3ee2ba99b3aa5a4aeb6a4ba6eeaf89a0607f1bfe8854e3ed0e3889a9a6867fff94d48ff6f139d1eaedb45197dfdcaf4753ba265130439b2290bf568d9b40a4dd24730b9d4bd29751e5c32796cdd9492d292f1e1dff0c05b376d544d9712fcdfe450e4c9534a264f1931694a49eda4ba71255dbbe07a1f69db844afc575b3730679dd834713ae9ef2c3529c47e795a1314f88fd39a46dabae41b90b62d699ad3929226d4f0eca62c745513096f2e899465f2d4ea2993468c9c12bdf06ddf64e13b9b52cdf14dace6291d9be0ec8ca62c34a063d308ef6c8ab39919380bfe1ba14b957d8c5506009b2d6c6f00000028491f8b08000000000000ffed9d77745cc5f5c7dfaab92c5a59b6e55e44735ce5d5aacb4deedd6020f462d996b1836d195bb4100204484f20a41708a9900224a492427aef8d407a854012f8fdf33bf99ddfef1cce6fe6eddce8abf1bc8d767923dfa7bdef9cab9d7777f6ddcf7cdf9dd9b7336f57a920bf3dab2c65ca95ca4e0d8edfe8f91ef3987d7e5b738cc7cafae44c2584b322219c9509e1ac4a08677542386b12c23926219c6313c2392e464ecd56110cdde2e61def41d7b819d309d3f4a404685a9b304d3309d0b42e48c6183521219cf509e19c9810ce4909e19c9c10ce8684704e4908e7d484704e4b08e7f48470ce4808e7cc8470ce4a08e7ec8470ce4908e7dc8470362684f3e484709e9210ce5313c2795a42384f8f91731170ce338f2f308ff3cde302f3b8d03cd26b169bc725a68d5566bf49d952cda6acd97a2ea7ac4559abb236ebb976651dca3a957599e71acd73ddca96295bae6c85b295ca56191d562b5ba36cadb275cad62bdba06ca3b24dca362bdba26cabb26dcab62bdba1ec0c65672adba9ec2c65672b3b47d90b959dabec3c65e72bbbc062b950d945ca2e567689b24b955da66c97b25e65bb95ed51b657599fb27dca2e57b65fd901652f527685b283ca0e293bacac5fd91165572a3baaec98b201655729bb5ad935caae55769da5d98b955dafec25ca6eb0385faaec46653729bb59d9cb94dda2ec5665b7297bb9b257287ba5b257297bb5b2d7287badb2d7297bbdb2db95dda1ec0dcaee54f646656f52f666656f51f656656f53f67665ef50f64e65ef52769761a18e70b7b2772bbb47d97b94bd57d9fb94bd5fd907947d50d9bdcaee53f621651f56f611651f5576bfb207943da8ec63ca3eaeec21659f50f649659f52f669659f51f659650f2bfb9cb2cf2bfb82b22f2a7b44d997947d59d957947d55d9d7947d5dd937947d53d9b7947d5bd977947d57d9f7947d5fd90f2ccd7fa8ec47ca7eacec27c6f753f3f8335397e6c57eaeec17a6fca879fca5797ccc3c3e6ebde657ca7e6df97ea3ecb796ef77ca7e6fca7f308f7f348f7f328f7f368f7f318f7f358f4f98c727cde3dfcce353e6f169f3f877f3f80ff3f84ff3f88c79d46baa6736e4cb6383c1ad2788698c6add97d56b2a24febc60e8a6b5a834cfd163a3f157997d7a24edaacd7eb5e5af31fb35d671c69afdb196bfdeecd75bfe49667f92e56f30fb0d967faad99f6af94f33fba7813f1dc09cabf16b5fa571a5c047f95a01be6ae3ab045f0d1d0e7c638caf1a7c747e6bc037cef8c6806fbcf18d055fdaf8c69196ca4e32be9e20ae5cc9f6eae3d6c67d5cb30e95899f778f3e6e9d27de09f1f3f6e9e3d67be0d5f931d11c6b02e4cd24e3ab07df64e39b083e3304fdbbcf69df14e39b0cbea9c6d700be69c637057cd38d6f2af86618df34f0cd34bee9e09b657c33c037dbf866826f8ef1cd02df5ce39b0dbe46e39b03be938d6f2ef84e31be46f0d13d2e2783ef34e33b057ca71bdfa9e0a3b1f634f0d1b5e1e9c6a7c789b129788df1d31815be86c667f0cda7b1197c0b685c06df421a93c1b70862936f318c2be45b627c3446e9e7ba4db92788ab4fe4c23eb12ceee3aa23ebe3ae88ffb8e1baddca6050eb1e88b30cb45a65ca31de1bd48cb153c6280ef9aba0bc19ea523dd283de67885d8ffbcb4d795581d7755bafcb409de58ef6f704f1b67f85c5b3c262ae86f6fbc9d9969ce4ecb0b7a273f63ca86be71e5df38cc69cdd061c1e72b65d7276d85bd139db0775eddca3ebded198b3170287879cedf593b3b9ace46c7e8e2c08dcb9479f7d4663ceee078ef873b64d7276f85bd1397b33d4b5738f3eff8ec69cbd1a38e2cfd98e5eb93618f65674cede0e75eddca3b998d198b3b70287879ced937176d85bd1397b17d4b5738fe6054763cede091cf1e76c97a79c6d919c0df2eb9d41e0ce3d9aa31e8d397b0f70c49fb37b647e76f85bd139fb30d4b5738fd64b4663ce3e60ca7a9de1a7669d6116f87e667cb38137fedcdedbea29b77392dbf9fb4082c09da3b476371a73fb1153d679fc28dc7b40be5f1adfc9e07bccf84e01dfe3c6772ab4cb431fe8953e30ecade83ef06ba86be732ad238fc63ef063e0f090b37b246787bd159db34f415d3bf7e89e86d198b3bf030e0f39db27393becade89cfd17d4b5736fbe298fc69ca5fb4af5f5c21fccf5c242f0fdd1f81681ef4fc6b7187c7f36be25e0fb8bf13581efafc6b7147c4f185f167c4f1a5f33f8fe667c39f03d657c2de07bdaf85ac1f777e36b03df3f8caf1d7cff34be0ef03d637c9de07bd6f8ba8c4fdf9347f75e7dd7f8f4b9258d7a8278cf2ddd6349c7a6fdc52310bbce8a5d3782b1ebadd8f58ed84b3cc44e430cda52d67e0f9497f8e5c96682a1dfffa0584be38fd5a2dbde140cbfed4b8127eba1ed6988311c9e2cf034c7cf13deeb9b8bffb8e1396eb2344d43ac2668578b8776a520161d9bf6295e067c387eb738185be367cca520161d9bf65b81917cf87e42efebd47ff4fbe1bcd420af87be145e13513cfaed2fe2580a7eaaf3cce441b68586ad169ec7f7d666cbe7292fc3bca058746cdaa778b5d09ee69167cc0d97316b31fa1a2352108b8e6dc7c6febe64e4351bd679cd80ef048c49b952c7a45a601b89eb94a873cd25b68ff7ab14c4a0b18d34cf819fea4c315f48d063db4618773df4bf5cb1d76f381ec49fc7b92cf6ebe1f0b4008f8fbeefa9bf66f17dffb920de5c6bb3b46ab6b4ca409d56d0afcd837e85ae43289e300bb3300bb3300bb3300bb3300bb3300bb3300bb3300bb3300bb3300bb330f367c6fb2f707d93ea2d66c248be1cf0f898e70f7f3fca1c8b8eafd7751e83759df8d72d72595cb3a47b0c17586dae823a4fa706ebfe06d6d3edb5415cd35cec57bb61dd67511b1cbf16eb730d316a1dd8b57ed9185becdc1e5feb6d7586b9c9d275b143530ff7a90cd13465698af7292eb278749e4eaf1c64f3b1f657ec5a246a45e538d7f6f01e03bfe7253f7e502e540443c70f7c9f698f3df6d0354c5a2f6fb76257419dff490d9e1bba1795fecfa17dcf93aed3611d9b5eb300fc1dd6b12798d71247b575fc26782dd5f93f1853efae08fead998ffb3f705c0ea0adb8f54019d7cde37f1fceafe3b714c1d3063c3ec6194fd71b59ec0371afe377585ab9ae63a84e3be8d7e1413fd7b528ed533c61166661166661166661166661166661166661166661166661166661166661e6cf8cdf1525d634d4cb31611ca17b1fc2f50cfafd173abe5ed7796dc5605cdfeb70b4e6b4d06a7315d4f941c560dd3b4cb93638fe7e87a873e9613dafe0b9a478b5d01e5c0bf2f57dee568ba7d5a105951b638b9d5fc78f5fe3c175fc164bd79c43535ffd15d7585153ecafcd160fae8dd606c7df5b9286e38cc4bd43517941f1b02fb5828fcaf8fd681fe719df4becfb7a281eae5fdf67b49d10f83af7b9accf71a313dad4131c9fdf5550e77e18fb1e3465bc8703ef1d79c4f13c6d85d6a9493fdde6d87fcb2e9b5ff75d069c3d1007632f07d698623763ec94318a43fe2a287fb162b02ed5233d486b62d77d847e130cd9edd7355bafcb409d2e47fb7b8278dbdf6df1745bccfa9c3c0479f608bcfffb1a93ba22345a001a511dbc0ef2754f9e3d46daf737e27d7b35561dbc66a13adf84312aeafe51d73d87bedec7a2ee39745d1bb701a3dd46fb3ecf72bf4feb51182fe2be4feb51c821bc4f2bb08ebf108e4f5c3541f47b0bd5f995757cfb9a9c5e83f781519ddfc2785167ee59ac0d8ebffec67ba646e2f355d47dd2140faf6bb06fffa7b66be64ea8df132333e604b2e07502d579d23a671d11dc4b1daf7d3ae2b5a415fd0e157e7eb1f5d33a74c16b7a62d121dfe7bbadb6505e77415ba8ce7f59d780f15fb7e4af01e36febd06b121a075a1d6da53aff0d7ded5f708d47e7093f77d4541eff3c6d85ae01493fdde691fe7d608ccde1f781ab2b07ebdabff34b5a17fbfbc0edd6eb38fe3ef0ff429ed5c07de8bec6eae5111a2d048da80e7e3788de47f0b77c5def31beeeed8f7a8f71fd06258ecf759523cf66cfabb9ae11a80ebd16af11261be6094667bbae3d5f48ef9771de378cdf956882b8f85d89264f7a6641b71ed8c7eb8213193beb2976d46f4e67472076d46f4e8f44ec7a2b76fd08c616cd45734e9a7bf84de4f0fb67f89ba57a2b745d4a0c19785d4502182b13c0589500c6ea0430d62480714c0218c72680715c0218c72780310d8c27f2bddd833eb952f5f175be0a5d6b606c0fffbb2457ecffeff0fcbf540a5efb606c0f9fe9422d9604c3d7023fe7f9f8ed8762ffd70b31e0ff2e989800c64909609c9c00c68604304e4900e3d404304e4b00e3f40430ce4800e3cc0430ce4a00e3ec0430ce4900e3dc0430362680f1e404309e9200c65313c0785a02184f4f00e33c618c8571915fc65ca98c9ac7c7fffc7b3eff73cc034fd675cfa9a7ef9e14fdffd63cff3e6973a9bf1b87f796f8fd9f70cfefb7ed7cdc3b52ec6fdb15fa7fab9e1873a532faba8f1dbfc7331c1efc5ea4ebbb351e1873a532fafafe0b7e476f383ceda0599b43330f8cb952197ddd2b57ecbd9c784f7fbb43330f8cb95219f1beea187942cd3a8ae0e904cd3a1c9a7960cc95cae8ebbee434c4180e4f1768d6e9d0cc0363ae54464fdf6d0b35eb2a8207bf03d6e5d0cc0363ae5446cdb3cc9366dd45f02c03cdba1d9a7162449eb87f27bbdb11cbc777068b6d3b3120e3b804308e4f0023de27e163fc2a749f44b75f7d72a5eae3eb7c15ba4f02637bf87e4ca8057e1fe23f69b1c22f4fc1fb2430f64a4f5ae0f755fe93162b81c7c7f767d21063383cc49081d74d4c00e3a404304e4e0063430218a72480716a0218a72580717a02186724807166021867258071760218e72480716e0218f1b3aa876bc5829f5f568ef2d8519f55467beca8cf25a33db6e4b9e47939c4963c973c2f87d892e792e7e5105bf25cf2bc1c624b9e4b9e97436cc973c9f372882d792e79ce297612e6f88571f431224f637c3c596c3bc6ea61d0f61e074fca53db31d66a066d2786a431ae4a00e3b204308a8ef97b104b61d43c6b3cf1ac2e82670df0acf5c4b3a6089eb5c0b32e7e9e30a7d616c1430c1978ddb20430ae4a00a3e8283a6ad35bf6f96da22323c624e8288cc2288cc27822189330860b6322f231572aa3e6591f3f4fa8d9ba2278d68366f4ba66bf8cb9521935cf86f87942cdd617c1b301345befd0cc0363ae5446cdb3317e9e50b30d45f06c04cd363834f3c0982b9551f36c8a9f27d46c63113c9b40b38d0ecd3c30e64a65d43c9be3e70935db5404cf66d06c9343330f8cb9521935cf96f87942cd3617c1b30534dbecd0cc0363ae5446cdb3357e9e50b32d45f06c05cdb63834f3c0982b9551f36c8b9f27d46c6b113cdb40b3ad0ecd3c30e64a65d43cdbe3e70935db5604cf76d06c9b4333ae8ccb12c0b82a018c9e75cc95caa8797678e2d95e04cf0ee039c313cf8e2278ce009e33e3e70973ea8c2278882103af5b9600c6550960141d45474e8ca263f9e8288cc2288cc531f6248051ceb5307265f4f0f9aae07768ce18e5b1ebacd87565123bea3b34a33db6e4b9e47939c4963c973c2f87d892e792e7e5105bf25cf2bc1c624b9e4b9e97436cc973c9f372882d792e795e0eb125cf25cfcb21b6e4b9e47939c4963c973c2f87d892e792e7e5105bf25cf2bc1c624b9e4b9e97436cc973c9f372882d792e795e0eb125cf25cfcb21b6e4b9e47939c4963c973c2f87d892e792e7e5105bf25cf2bc1c624b9e4b9e97436cc973c9f372882d792e79ce29f6cef863e78afd8d999dc0e3e3376f3cb533ab8f7b9639d67331eaa7b53adbd2ea0c4bab0cd4390bf43bdb837e29884bc7a67d8a572cf30b18307b8a9dab0b86f66b8ab1cad243d739c753dba3c6fa734679eca8b17eb4c78e1aeb477b6cc973c9f372882d792e795e0eb125cf25cfb9c4c672753078dd4ebf7faa8ff14253ae32fbc84a7eaa73e698fce38440fa908fd8d287e4bda21c624b9e4b9e97436cc973c9f372882d792e795e0eb125cf25cfcb21b6e4b9e47939c4963c973c2f87d892e7fcf23c03cf578c004f60f1040578e630e399c68c6722339e71cc781630e3a964c6b39219cf48dccf570ccf16663c1b99f17432e399cb8c6721339ee9cc7872cc782631e36963c6339e19cf3a663c55cc785633e3c932e3d9c68c671e339e19cc782633e359c48c27cd8ca79a19cf1a663c4b99f1cc67c6b39d19cf56663cddcc783631e3e962c6d3ce8c6726339e16663c0dcc789a98f19cc48ca79619cf7a663c35cc789630e3d9c18c6739339e59cc78a630e3c930e3a963c6338619cf0a663c9b99f16c60c6d3c18c6736339e56663c5399f12c66c63381194f3d339eb5cc78c632e34931e04907c7ff26591a9edf09be0aebb5fa7aa0b961f0f9738dbf025e739e29573a8e7d2ef8e8bbe1e7395e8b3a9d0b6de931e5ecf3db429d30560fec53bc5ae0388f09cf58663c6b99f1d433e399c08c6731339ea9cc785a99f1cc66c6d3c18c6703339ecdcc785630e319c38ca78e194f8619cf14663cb398f12c67c6b38319cf12663c35cc78d633e3a965c67312339e26663c0dcc785a98f1cc64c6d3ce8ca78b19cf26663cddcc78b632e3d9ce8c673e339ea5cc78d630e3a966c69366c6b38819cf64663c3398f1cc63c6b38d194f9619cf6a663c55cc78d631e319cf8ca78d19cf24663c39663cd399f12c64c63397194f27339e8dcc78b630e3d9c98c6725339e4a663c0b98f18c63c6339119cf34663c7398f15438783cfcffcb9087ee5fa363d3fe4e26b13d9c87f0ff7e9eefa94d179863559be3123fc5ab823a179a8142df5f85af252efb7e437c6fba0034bac0535be87ca4acf3e339760eefab0c8021b0f4091c3c3eee47f5d4ce217918e3ff9fcd6aad2eb4b4b2cf5d06ea9c0ffa5de8413f576effbb0f98c724326b1eba3623d634d45bc984917ce7f8e509fbedca60e856a8df5e083c3ec6304fed0cfbd745569b563a74a73a98ab177968a7abefd0fe45701e92c6ac79569b32b1a6a1de6a268ce4bbc02f4fd8bf560743b742fdeb22e0f131fe786a67d8bf2eb6dab4daa13bd5c15cbdd8433b5d7d87f62f86f3903466cdb3c69489350df5d6306124df857e795ad3d066da0af5af8b81c7c7f8e3a99d61ffbac46ad31a87ee540773f5120fed74f51ddabf04ce83300bb38b59f3d077b888350df5d6326124df455e795ab36968336d85c6b14b80c7c738ef49f7701cbbd46ad35a87ee540773f5520fed74f51ddabfd411bb3188578bcb86a1c5650e9ecb46580b8a572cf3f90964169d45e72866d159748e62169d45e72866d159748e62169d45e72866d15974d69be82c3a8bcea2731ccca2b3e81cc52c3a8bce51cca2b3e81cc52c3a8bce51cca2b3e81cc52c3a8bce51cca2b3e81cc52c3a8bce51cca2b3e81cc52c3a8bce51cca2b3e81cc52c3a8bce51cc1c74d63cf49b59c49a867aeb983092ef62bf3ce1f782d60543b794b5df03e5cb80e7120ffa786a67780ff92eab4deb1cba531dec5fbb3cb4d3d577687f179c875d45305f9a4066d1b93466cd43bf4d4fac69a8b79e0923f92ef1cb138e63eb83a15ba1716c17f0f818e73db5331cc77aad36ad77e84e75b07ff57a68a7abefd03ec51366618e62d63cf43fa288350df536306124df655e7972e1f71b370443b742e3582ff0ec8a9d273f8e79d03d1cc7765b6ddae0d09dea60aeeef6d04e57dfa1fddd701e8a61be3481cca2b3e81cc52c3a8bce51cca2b3e81cc52c3a8bce51cca2b3e81cc52c3a8bce51cca2b3e81cc52c3a8bce51cca2b3e81cc52c3a978fce9a87fe5710b1a6a1de46268ce4dbe595a7255c77d8180cdd52d67e0f9477034f6fec3cf975070fba87eb0e7bac366d74e84e75b07fedf1d04e57dfa1fd3d701e463bf3a5096496dc181966c90d618e6296dc10e62866c90d618e6296dc10e62866c90d618e6296dc10e62866c90d618e6296dc10e62866c90d618e6296dc10e62866c90d618e6296dc10e62866c90d618e6296dc10e628660eb9a179369932b1a6a1de26268ce4ebf5cb13feeec1a660e856e8be9d3dc0b3db833e9eda19deb7b3d76ad32687ee5407fbd75e0fed74f51ddadf0be7419885d9c5ac79369b32b1a6a1de66268ce4dbed97271cc7360743b742e3d85ee0f131ce7b6a67388ef5596ddaecd09dea60aef67968a7abefd07e1f9c0761166617b3e6d962cac49a867a5b9830926f8f5f9e701cdb120cdd0a8d637dc0e3639cf7d4ce701cdb67b5698b4377aa83b9bacf433b5d7d87f6f7c17910666176316b9eada64cac69a8b7950923f9f6fae5c9a5a1cdb4151ac7f6018f8f71de533bc371ec72ab4d5b1dba531dccd5cb3db4d3d57768ff72380f4963d63cdb4c9958d3506f1b1346f2f5f9e509fbd7b660e856a87f5d0e3c3ec61f4fed0cfbd77eab4ddb1cba531dccd5fd1edae9ea3bb4bf1fce43d29835cf765326d634d4dbce84917cfbfcf284fd6b7b30742bd4bff6038f8ff1c7533bc3fe75c06ad37687ee540773f5808776bafa0eed1f80f3903466cdb3c39489350df5763061241fbe5fecf0c4536bf1d43ab4188db1ebacd8756512bbde8a5d5f26b125cf25cfcb21b6e4b9e47939c4963c973c2f87d8e59a6ba279796a9e3a819aa74ea0e629d19ca5e6cfc517bb2d130c6e15106bbfa776e2d603659c9fa36d0e339e69cc782632e319c78c6701339e4a663c9dcc78e632e359c88c673a339e1c339e49cc78da98f18c67c653c58c27cb8c671e339e19cc782633e359c48c27cd8ca79a19cf52663cf399f17433e3e962c6d3ce8c6726339e16663c0dcc789a98f19cc48ca796194f0d339e25cc789633e399c58c670a339e0c339e3a663c3b99f18c61c6b382194f07339ed9cc785a99f14c65c6b39819cf04663cf5cc78c632e34931e04907c77f1f05bf4f50093ebabf7f07f85e64ca3bc157e18841c739003e9acfa563e8f7abe50dc73354c06bae7070bdc8118fe25ce178ed48e88eb17a609fe2d502c7154c78c632e3a967c6338119cf62663c5399f1b432e399cd8ca78319cf0a663c6398f1ec64c653c78c27c38c670a339e59cc789633e359c28ca786194f2d339e9398f13431e36960c6d3c28c6726339e76663c5dcc78ba99f1cc67c6b394194f35339e34339e45cc782633e399c18c671e339e2c339e2a663ce399f1b431e399c48c27c78c673a339e85cc78e632e3e964c653c98c6701339e71cc782632e399c68c670e339e0a07cf4e4f3c51bfa7b093416c3def4dd78234279686e747e27b4a3b2d46dadf0f8ce4c3fb74b39e78a27e8322cb20b6d6622994f59686e7f17b26be722a6b31d2be2ba7f03ecba59e78a27eb7632983d85a0b5a1ba07b00d2f03cde57ed2ba7965a8cb4efcaa97abf3ce1ff9658120cdd0add6b847dcec739f4d4ce2cf6bf187f43c3f95bd44b2cad32506724ee2b8e1a0f289e300b7314b3e6a1b52f62c5f7b391f8ded270185defaf1e78c2f1b12918ba151a1ff7038f8ff70f4fed0cc7b183569b9a1cba531dccd5831edae9ea3bb47fd011bb3188578b43c3d0e29083e7d0086b41f18a65de9940660e3a6b1eba579358d3506f311346f265fdf284e3e3e260e856687c3c043c3ede3f3cb5331c130e5b6d5aecd09dea60ff3aeca19daebe43fb87e13c14c37c3081cca27369cc9a87d66888350df5724c18c9b7df2b4f2e9b8636d356681c3b0c3c3ec6794fba87e358bfd5a69c4377aa83fdabdf433b5d7d87f6fbe13c08b3300bb3300bb3300bb3300bb3300bb3300bb3300bb3300bb3300bb3300b336f66cd43df1d26d634d46b61c248be435e79f2eb0e2dc1d0add0ba433ff01c8e9d27bfeee041f770dde188d5a61687ee540773f5888776bafa0eed1f81f320ccc22cccc22cccc22cccc22cccc22cccc22cccc22cccc22cccc22cccc22cccbc99350ffd863cb1a6a15e2b1346f21df6cb137e6fab3518ba155a7738023c3ed6653cb5335c77b8d26a53ab4377aa83b97aa58776bafa0eed5f09e7419885d9c5ac79e8b70789350df5da983092afdf2b4f7efdb42d18ba151ac7ae041e1fe3bc27ddc371eca8d5a63687ee540773f5a88776bafa0eed1f85f3500cf3c104328bcea27314b3e82c3a47318bcea27314b3e82c3a47318bcea27314b3e82c3a47318bcea27314b3e82c3a47318bcea27314b3e85c3e3a6b1efa9f86c49a867aed4c18c977c42b4f4bb8eed01e0cdd0aad3b1c051e1feb329e740fd71d8e596d6a77e84e75b07f1df3d04e57dfa1fd63701e463bf3c104324b6e8c0cb3e4863047314b6e087314b3e4863047314b6e087314b3e4863047314b6e087314b3e4863047314b6e087314b3e4863047314b6e087314b3e4863047314b6e087314b3e4863047314b6e0873143387dcd03c1da64cac69a8d7c184917c57fae5097ff7a02318ba15ba6fe718f01cf5a08fa77686f7ed0c586dea70e84e75b07f0d7868a7abefd0fe009c0761166617b3e6e93465624d43bd4e268ce43bea9727978636d356681c1b001e1fe3bca77686e3d855569b3a1dba531dccd5ab3cb4d3d57768ff2a380f4963d63c5da64cac69a8d7c584917cf8bedce589a7d6e2a9756871a2626b2dba4df924f39886e7bb81d1d778d86531d23ee638f96a81a7db134f9dc553e7d0e244c5d65a2c87b2ded2f0fc7260f49553dd1623edbb72aa0e78967be2a9b778ea1d5a9ca8d85a8b15a63cc13ca6e1f915c0e82ba7965b8cb4efcaa97ae059e189276a4c5a3102b1a3fad748c48eca9591882d9a8be6a2b968ee53f3d409d43c7502354f89e6ac34f7701d15cef7528c001870eb81327e56f071ede9a99d59d7e7b115569bf0f318ce399ca8cf1bc22ccc51cc9ee62d5ad3566cd227b078681bf0acc548ce9b765b6d4ac2bc6921e6830964169d4b63d6b1af8e3f766bda8a4dfa04160f6d577bd6c2533bc3f1e09ac0ad31c5cb401dccd36b3cb4330571e9d8b47f0d9c8762980f269059742e8d59c7be36f6d8f9df93c7d8a44f60f1d076ad672dfcb4333f1e5c17b835a67819a883797a9d8776a6202e1d9bf6af83f320ccc22cccc22cccc22cccc22cccc22cccc22cccc22cccc22cccc22cccc22cccbc9975ec17c71e3b3f7f8fb1499fc0e2a1edc59eb5f0d3cefcfcfdf5815b638a97813a78ceaff7d0ce14c4a563d3fef5701e845998855998855998855998855998855998855998855998855998855998859937b38efd92f86387dfc7c1d8a44f60f1d0f612cf5a786a67387f7f43e0d698e265a00e9ef31b3cb4330571e9d8b47f039c0761166617b38efdd2d863e7d7f33036e913583cb4bdd4b3167eda991f0f6e0cdc1a53bc0cd4c1737ea38776a6202e1d9bf66f84f3500cf3c104328bcea27314b3e82c3a47318bcea27314b3e82c3a47318bcea27314b3e82c3a47318bcea27314b3e82c3a47318bcea27314b3e85c3e3aebd837c51ebb259cbfc7d8a44f60f1d07693672dfcb4333f7f7f73e0d698e265a00ee6e9cd1eda9982b8746cdaa778e5c07c3081cc921b23c32cb921cc51cc921bc21cc52cb921cc51cc921bc21cc52cb921cc51cc921bc21cc52cb921cc51cc921bc21cc52cb921cc51cc921bc21cc52cb921cc51cc921bc21cc52cb921cc51cc921bc21cc5cc213774ec97c51f3bfc3e3bc6267d028b87b69779d6c2533bc3fb5f6e09dc1a53bc0cd4c13cbdc5433b5310978e4dfbb7c0791066617631ebd8b7c61f3b97b662933e81c543dbad9eb5f0d4ce703cb82d706b4cf1325007cff96d1eda9982b8746cdabf0dce43d298f1fc8d8d2f7678df26c5a8308fdaf77253ae04df2b4cb90a7caf34e56af0bdca946bc0f76a531e03bed7407bc8f75a535e04bed799f20af0bdde949783ef7653ee06df1da6dc05be3798f200f8ee34e5abc0f74653be1a7c6f32e56bc0f76653be167c6f31e5ebc0f756537e31f8de66cad783efeda6fc12f0bdc3946f00df3b4df9a5e07b9729df08bebb4cf926f0dd6dca3783efdda63c0f7cf7387cef31e59781efbda67c0bf8de67ca3bc1f77e531e07be0f98f278f07d10caf478af299f04befb4cb9167c1f32e50cf83e6cca75e0fb88294f00df474db91e7cf79bf244f03d60ca93c0f7a0294f06dfc74cb9017c1f37e529e07bc894a782ef13a63c0d7c9f34e5e9e0fb9429cf00dfa74d7926f83e63cab3c0f759539e0dbe874d790ef83e67ca73c1f77953c6f3fb0553be157c34aedc063e1a575e0e3e1a575e013e1a575e093e1a575e053e1a575e0d3e1a575e033ecabbd7828ff2ee75e0a3bc7b3df828ef6e071fe5dd1de0a3bc7b03f828efee041fe5dd1bc14779f726f051debd197c94776f011fe5dd5bc14779f736f051debd1d7c9477ef001fe5dd3bc14779f72ef051dedd053ecabbbbc14779f76ef051dedd033ecabbf7808ff2eebde06b34e5f781ef64537e3ff84e31e50f80ef5453c671e63453be177ca79bf27de0a3b1f043e07b81297f187cf34df923e05b60ca1f05df4253be1f7c8b4cf901f02d36e507c1b7c4943f06be2653fe38f8969af243e0cb9af227c0d76cca9f045fce943f05be1653fe34f85a4df933e06b33e5cf82afdd941f065f87297f0e7c9da6fc79f0d1fb388d33ba3feb3e483a9046da476d6e72b4857c63a12d3d41bcd774148b8e4dfb2dc048e72037f28cb9e132365b8c9aa7cd83669857b415faccd4063cad1e783cb533fcccd46eb5a9c56a5306eabc00dad9eea19d29884bc7a6fd7688ede39ca316d5e6b8f32d2daab08e7943d3ef9d8574a463e8fccd39dad2e5b92d746c1a97ba46207687153b6bc5c6f198b642fdab03983b3d30ebe376c77fdcb07f2d33c7a29ca2385968d372d020ae3661ec94318a43fe2a28cf6818ac4bf5480f7aff22769dcb742e91dd7e5d9bf5ba0cd4e972b4bf2788b7fddd164fb7c5accf495dc3208787fe10e64097c541fb59d0ae3b42bb2ed08eeae0fb5fce93769d164fa7155bf3d0354e3bf8e85a81f8f13aab6904b8ed71afddc14dbe0e60745deb34c7cf58f05aa71918c9d7093c1d9e34b3cff57c4b1f7c5faeb1ead06baba0ce52786f4c3beaea7e372f35d82efa0cfe5c10ef985ee3412f9c1f08409fc0d23000bda89dd51e78c607837304c706fa8ff65ede77565fefde14a0555998f8987234a3027c58ae74f88260e854084ec9d254084ec95658b2e0140cd5d71fa574b368baa1efd08181171eee3bbce7e8754706faf66eebbf1ca9ab2d7a248d6a0192a28fb6b1c1e0a44d4f10ef624c8d15ab50f28c85c731f1f3347b6a67f8a637ce6a538dd5a60cd4a986e7c67968670ae2d2b1697f9c23768c0351a8c5f8616831dec1337e84b5c0896ff2614fa5e771f1a4c26a0bf6686c939de7b1368802ce83e3a70c9c7e4e77f66ad39831c1e0c9a6d153cfa8eaab5a7d22f40ca97ee7d233a07a08d2339c7a4653bfa9e9194b3d43a96724f50ca49e71d4338c7a4651cf20ea19433d43d818e46700f58c9f9ee1d3337aa703db7781577faad6ef907a464ecfc0e919377d65a53fb1e9ab117df5adaf14f5d581be2ad09f2cf52c837eb7d55732fa5d5abfb3ea2b457d85a8afe8f515ae5ea55aa96c95d17ab5b235cad62a5ba76cbdb20dca362adba46cb3b22dcab62adba66cbbb21dcace507666909f5d3f4bd9d9cace51f64265e72a3b4fd9f9ca2e5076a1b28b945dacec1265972abb4cd92e65bdca762bdba36cafb23e65fb945dae6cbfb203ca5ea4ec8a207f87ce21658795f52b3ba2ec4a6547951d0bf22b667a854caf88e91530bde2a557b8f48a965ec1d22b567a854aaf48e915a89b82fc0a935e29d22b437a5540af02e8597f3dcbffca203f8baf67ed5f13e467e5f52cbc9e75d7b3ec7a565dcfa2eb59733d4bae67c5f52cb89ef5d6b3dc7a565bcf62eb596b3d4bad67a5f52cb49e75d6b3ccf704f959643d6bac6789f5acb09e05d6b3be7a96f7be203f8bab676df52cad9e95d5b3b07ad655cfb2ea59553d8baa674df52ca99e15d5b3a07ad653cf72ea594d3d8ba9672df52ca59e95fca2b247947d49d997957d45d957957d4dd9d7957d43d937957d4bd9b7957d27c8e7e5f7947d5fd90f94fd50d98f94fd58d94f94fd54d9cf94fd5cd92f943daaec97ca1e53f6b8b25f29fbb5b2df28fbadb2df29fbbdb23f28fba3b23f29fbb3b2bf28fbabb227943da9ec6fca9e52f6b4b2bf2bfb87b27f2a7b46d9b3c1e0ea060e22ff323b34d3de3b30d077e8c840e3407fe3a1ab0e0e1c3872f0bac66b0e0cec6fecbfbaefe8be83fdd7e08bef35c3162d23ac3e7ab4f7bac60387f7f65ddbd87fd54063ffbec6ddfd571dde7b0c5ff40df3a259c747ecddbb373ad82f2a9e07e9e325067dc2bc8e166836176edb53a508f26c292f9a54595a83ce30ef3af4e9fdecfcd56ee3b183fd038dd9c6c3ea6fef41f59abebd4d8df8dc3125f2b181c66303bd47071af71ded3fd4d8dc84c7bd605c098da86a28e1454d0dc36f79f0ffa32be9722d0a0400", "privateFunctions": [ { "selector": { @@ -37,8 +37,8 @@ exports[`ContractClass creates a contract class from a contract compilation arti "isInternal": false } ], - "id": "0x28f6931da37e7dcba1db1327de9c81d93d6dbbcfd809b7503e43a298a2373fe3", + "id": "0x2fb6c774ae752073bb84ab8f00ac717fe7743d88a5ceef7d5a36cf9e2eb5718f", "privateFunctionsRoot": "0x2dc1f38d7be98a8e72227d6f8aec393c60db813a1819c9c86b02a00cc18f6687", - "publicBytecodeCommitment": "0x13b5b578e8f823e8816a172573e197816096c5b3097293a04acfbecb026c0744" + "publicBytecodeCommitment": "0x0debf6b39f2d3a831e4ac2ef6eb7f96a48ba1d8d971be8429581cb65a7366b39" }" `; From 868c8b84d15fc0d2f32ec4a0c114502c7056e642 Mon Sep 17 00:00:00 2001 From: guipublic Date: Tue, 26 Mar 2024 11:15:48 +0000 Subject: [PATCH 03/13] enable acir gates of width 4 in bb --- .../dsl/acir_format/acir_format.cpp | 3 + .../dsl/acir_format/acir_format.hpp | 1 + .../acir_format/acir_to_constraint_buf.hpp | 78 ++++++++++++++++++- 3 files changed, 80 insertions(+), 2 deletions(-) diff --git a/barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_format.cpp b/barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_format.cpp index 2cc00db97c71..4dd2ad04dff6 100644 --- a/barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_format.cpp +++ b/barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_format.cpp @@ -16,6 +16,9 @@ void build_constraints(Builder& builder, AcirFormat const& constraint_system, bo for (const auto& constraint : constraint_system.constraints) { builder.create_poly_gate(constraint); } + for (const auto& constraint : constraint_system.quad_constraints) { + builder.create_big_mul_gate(constraint); + } // Add logic constraint for (const auto& constraint : constraint_system.logic_constraints) { diff --git a/barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_format.hpp b/barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_format.hpp index 9a03f96d37a9..ae22d0f452ed 100644 --- a/barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_format.hpp +++ b/barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_format.hpp @@ -60,6 +60,7 @@ struct AcirFormat { std::vector, ContainerSlabAllocator>> constraints; + std::vector> quad_constraints; std::vector block_constraints; // For serialization, update with any new fields diff --git a/barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_to_constraint_buf.hpp b/barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_to_constraint_buf.hpp index ddad2310a490..4c4a407acbc7 100644 --- a/barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_to_constraint_buf.hpp +++ b/barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_to_constraint_buf.hpp @@ -20,7 +20,7 @@ #include namespace acir_format { - +using mul_quad = mul_quad_; /** * @brief Construct a poly_tuple for a standard width-3 arithmetic gate from its acir representation * @@ -97,10 +97,84 @@ poly_triple serialize_arithmetic_gate(Program::Expression const& arg) pt.q_c = uint256_t(arg.q_c); return pt; } +mul_quad serialize_mul_quad_gate(Program::Expression const& arg) +{ + // TODO(https://github.com/AztecProtocol/barretenberg/issues/816): The initialization of the witness indices a,b,c + // to 0 is implicitly assuming that (builder.zero_idx == 0) which is no longer the case. Now, witness idx 0 in + // general will correspond to some non-zero value and some witnesses which are not explicitly set below will be + // erroneously populated with this value. This does not cause failures however because the corresponding selector + // will indeed be 0 so the gate will be satisfied. Still, its a bad idea to have erroneous wire values + // even if they dont break the relation. They'll still add cost in commitments, for example. + mul_quad quad{ .a = 0, + .b = 0, + .c = 0, + .d = 0, + .mul_scaling = 0, + .a_scaling = 0, + .b_scaling = 0, + .c_scaling = 0, + .d_scaling = 0, + .const_scaling = 0 }; + + // Flags indicating whether each witness index for the present poly_tuple has been set + bool a_set = false; + bool b_set = false; + bool c_set = false; + bool d_set = false; + ASSERT(arg.mul_terms.size() == 1); // We can only accommodate 1 quadratic term + // Note: mul_terms are tuples of the form {selector_value, witness_idx_1, witness_idx_2} + if (!arg.mul_terms.empty()) { + const auto& mul_term = arg.mul_terms[0]; + quad.mul_scaling = uint256_t(std::get<0>(mul_term)); + quad.a = std::get<1>(mul_term).value; + quad.b = std::get<2>(mul_term).value; + a_set = true; + b_set = true; + } + // If necessary, set values for linears terms q_l * w_l, q_r * w_r and q_o * w_o + ASSERT(arg.linear_combinations.size() <= 4); // We can only accommodate 4 linear terms + for (const auto& linear_term : arg.linear_combinations) { + bb::fr selector_value(uint256_t(std::get<0>(linear_term))); + uint32_t witness_idx = std::get<1>(linear_term).value; + + // If the witness index has not yet been set or if the corresponding linear term is active, set the witness + // index and the corresponding selector value. + // TODO(https://github.com/AztecProtocol/barretenberg/issues/816): May need to adjust the pt.a == witness_idx + // check (and the others like it) since we initialize a,b,c with 0 but 0 is a valid witness index once the + // +1 offset is removed from noir. + if (!a_set || quad.a == witness_idx) { + quad.a = witness_idx; + quad.a_scaling = selector_value; + a_set = true; + } else if (!b_set || quad.b == witness_idx) { + quad.b = witness_idx; + quad.b_scaling = selector_value; + b_set = true; + } else if (!c_set || quad.c == witness_idx) { + quad.c = witness_idx; + quad.c_scaling = selector_value; + c_set = true; + } else if (!d_set || quad.d == witness_idx) { + quad.d = witness_idx; + quad.d_scaling = selector_value; + d_set = true; + } else { + throw_or_abort("Cannot assign linear term to a constraint of width 4"); + } + } + + // Set constant value q_c + quad.const_scaling = uint256_t(arg.q_c); + return quad; +} void handle_arithmetic(Program::Opcode::AssertZero const& arg, AcirFormat& af) { - af.constraints.push_back(serialize_arithmetic_gate(arg.value)); + if (arg.value.linear_combinations.size() <= 3) { + af.constraints.push_back(serialize_arithmetic_gate(arg.value)); + } else { + af.quad_constraints.push_back(serialize_mul_quad_gate(arg.value)); + } } void handle_blackbox_func_call(Program::Opcode::BlackBoxFuncCall const& arg, AcirFormat& af) From 5dd07692ecfcea76b9b5dc8861c3eede8f72026c Mon Sep 17 00:00:00 2001 From: guipublic Date: Tue, 26 Mar 2024 11:54:06 +0000 Subject: [PATCH 04/13] allow for non mul gates --- .../src/barretenberg/dsl/acir_format/acir_to_constraint_buf.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_to_constraint_buf.hpp b/barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_to_constraint_buf.hpp index 4c4a407acbc7..f9817bb4ec7e 100644 --- a/barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_to_constraint_buf.hpp +++ b/barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_to_constraint_buf.hpp @@ -121,7 +121,7 @@ mul_quad serialize_mul_quad_gate(Program::Expression const& arg) bool b_set = false; bool c_set = false; bool d_set = false; - ASSERT(arg.mul_terms.size() == 1); // We can only accommodate 1 quadratic term + ASSERT(arg.mul_terms.size() <= 1); // We can only accommodate 1 quadratic term // Note: mul_terms are tuples of the form {selector_value, witness_idx_1, witness_idx_2} if (!arg.mul_terms.empty()) { const auto& mul_term = arg.mul_terms[0]; From 2f39695f387175e7ea3acb09c576dd9fe78c344d Mon Sep 17 00:00:00 2001 From: guipublic Date: Tue, 26 Mar 2024 13:35:00 +0000 Subject: [PATCH 05/13] backup to quad gate --- .../dsl/acir_format/acir_to_constraint_buf.hpp | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_to_constraint_buf.hpp b/barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_to_constraint_buf.hpp index f9817bb4ec7e..fca8df720c90 100644 --- a/barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_to_constraint_buf.hpp +++ b/barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_to_constraint_buf.hpp @@ -89,6 +89,16 @@ poly_triple serialize_arithmetic_gate(Program::Expression const& arg) pt.q_o = selector_value; c_set = true; } else { + return poly_triple{ + .a = 0, + .b = 0, + .c = 0, + .q_m = 0, + .q_l = 0, + .q_r = 0, + .q_o = 0, + .q_c = 0, + }; throw_or_abort("Cannot assign linear term to a constraint of width 3"); } } @@ -171,7 +181,12 @@ mul_quad serialize_mul_quad_gate(Program::Expression const& arg) void handle_arithmetic(Program::Opcode::AssertZero const& arg, AcirFormat& af) { if (arg.value.linear_combinations.size() <= 3) { - af.constraints.push_back(serialize_arithmetic_gate(arg.value)); + poly_triple pt = serialize_arithmetic_gate(arg.value); + if (pt == poly_triple{ 0, 0, 0, 0, 0, 0, 0, 0 }) { + af.quad_constraints.push_back(serialize_mul_quad_gate(arg.value)); + } else { + af.constraints.push_back(pt); + } } else { af.quad_constraints.push_back(serialize_mul_quad_gate(arg.value)); } From 4d3922facf6d9915ceda3658eb969989b3e413fb Mon Sep 17 00:00:00 2001 From: guipublic Date: Tue, 26 Mar 2024 13:36:40 +0000 Subject: [PATCH 06/13] remove dead code --- .../src/barretenberg/dsl/acir_format/acir_to_constraint_buf.hpp | 1 - 1 file changed, 1 deletion(-) diff --git a/barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_to_constraint_buf.hpp b/barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_to_constraint_buf.hpp index fca8df720c90..4694ca1aa6db 100644 --- a/barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_to_constraint_buf.hpp +++ b/barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_to_constraint_buf.hpp @@ -99,7 +99,6 @@ poly_triple serialize_arithmetic_gate(Program::Expression const& arg) .q_o = 0, .q_c = 0, }; - throw_or_abort("Cannot assign linear term to a constraint of width 3"); } } From fa2a6ecd680055e0fa82dc5773f683f2f609bf52 Mon Sep 17 00:00:00 2001 From: guipublic Date: Tue, 26 Mar 2024 16:28:04 +0000 Subject: [PATCH 07/13] update test cases with quad_constraints --- .../src/barretenberg/dsl/acir_format/acir_format.test.cpp | 5 +++++ .../barretenberg/dsl/acir_format/bigint_constraint.test.cpp | 5 +++++ .../barretenberg/dsl/acir_format/block_constraint.test.cpp | 1 + .../src/barretenberg/dsl/acir_format/ec_operations.test.cpp | 1 + .../barretenberg/dsl/acir_format/ecdsa_secp256k1.test.cpp | 3 +++ .../barretenberg/dsl/acir_format/ecdsa_secp256r1.test.cpp | 4 ++++ .../dsl/acir_format/poseidon2_constraint.test.cpp | 1 + .../dsl/acir_format/recursion_constraint.test.cpp | 2 ++ .../barretenberg/dsl/acir_format/sha256_constraint.test.cpp | 1 + 9 files changed, 23 insertions(+) diff --git a/barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_format.test.cpp b/barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_format.test.cpp index cf36bbd1c0b5..69dabe8886af 100644 --- a/barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_format.test.cpp +++ b/barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_format.test.cpp @@ -171,6 +171,7 @@ TEST_F(AcirFormatTests, TestLogicGateFromNoirCircuit) .bigint_to_le_bytes_constraints = {}, .bigint_operations = {}, .constraints = { expr_a, expr_b, expr_c, expr_d }, + .quad_constraints = {}, .block_constraints = {} }; uint256_t inverse_of_five = fr(5).invert(); @@ -248,6 +249,7 @@ TEST_F(AcirFormatTests, TestSchnorrVerifyPass) .q_o = 1, .q_c = fr::neg_one(), } }, + .quad_constraints = {}, .block_constraints = {} }; std::string message_string = "tenletters"; @@ -343,6 +345,7 @@ TEST_F(AcirFormatTests, TestSchnorrVerifySmallRange) .q_o = 1, .q_c = fr::neg_one(), } }, + .quad_constraints = {}, .block_constraints = {}, }; @@ -448,6 +451,7 @@ TEST_F(AcirFormatTests, TestVarKeccak) .bigint_to_le_bytes_constraints = {}, .bigint_operations = {}, .constraints = { dummy }, + .quad_constraints = {}, .block_constraints = {}, }; @@ -495,6 +499,7 @@ TEST_F(AcirFormatTests, TestKeccakPermutation) .bigint_to_le_bytes_constraints = {}, .bigint_operations = {}, .constraints = {}, + .quad_constraints = {}, .block_constraints = {} }; WitnessVector witness{ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, diff --git a/barretenberg/cpp/src/barretenberg/dsl/acir_format/bigint_constraint.test.cpp b/barretenberg/cpp/src/barretenberg/dsl/acir_format/bigint_constraint.test.cpp index 550ee4a7b404..543d4b127d7e 100644 --- a/barretenberg/cpp/src/barretenberg/dsl/acir_format/bigint_constraint.test.cpp +++ b/barretenberg/cpp/src/barretenberg/dsl/acir_format/bigint_constraint.test.cpp @@ -192,6 +192,7 @@ TEST_F(BigIntTests, TestBigIntConstraintMultiple) .bigint_to_le_bytes_constraints = {}, .bigint_operations = {}, .constraints = {}, + .quad_constraints = {}, .block_constraints = {}, }; apply_constraints(constraint_system, contraints); @@ -260,6 +261,7 @@ TEST_F(BigIntTests, TestBigIntConstraintSimple) .bigint_to_le_bytes_constraints = { result2_to_le_bytes }, .bigint_operations = { add_constraint }, .constraints = {}, + .quad_constraints = {}, .block_constraints = {}, }; @@ -313,6 +315,7 @@ TEST_F(BigIntTests, TestBigIntConstraintReuse) .bigint_to_le_bytes_constraints = {}, .bigint_operations = {}, .constraints = {}, + .quad_constraints = {}, .block_constraints = {}, }; apply_constraints(constraint_system, contraints); @@ -370,6 +373,7 @@ TEST_F(BigIntTests, TestBigIntConstraintReuse2) .bigint_to_le_bytes_constraints = {}, .bigint_operations = {}, .constraints = {}, + .quad_constraints = {}, .block_constraints = {}, }; apply_constraints(constraint_system, contraints); @@ -448,6 +452,7 @@ TEST_F(BigIntTests, TestBigIntDIV) .bigint_to_le_bytes_constraints = { result3_to_le_bytes }, .bigint_operations = { div_constraint }, .constraints = {}, + .quad_constraints = {}, .block_constraints = {}, }; diff --git a/barretenberg/cpp/src/barretenberg/dsl/acir_format/block_constraint.test.cpp b/barretenberg/cpp/src/barretenberg/dsl/acir_format/block_constraint.test.cpp index 3054120b4ba0..4bd4d6ed6272 100644 --- a/barretenberg/cpp/src/barretenberg/dsl/acir_format/block_constraint.test.cpp +++ b/barretenberg/cpp/src/barretenberg/dsl/acir_format/block_constraint.test.cpp @@ -134,6 +134,7 @@ TEST_F(UltraPlonkRAM, TestBlockConstraint) .bigint_to_le_bytes_constraints = {}, .bigint_operations = {}, .constraints = {}, + .quad_constraints = {}, .block_constraints = { block }, }; diff --git a/barretenberg/cpp/src/barretenberg/dsl/acir_format/ec_operations.test.cpp b/barretenberg/cpp/src/barretenberg/dsl/acir_format/ec_operations.test.cpp index efcfd7ceacea..0ce5010a0c9f 100644 --- a/barretenberg/cpp/src/barretenberg/dsl/acir_format/ec_operations.test.cpp +++ b/barretenberg/cpp/src/barretenberg/dsl/acir_format/ec_operations.test.cpp @@ -74,6 +74,7 @@ TEST_F(EcOperations, TestECOperations) .bigint_to_le_bytes_constraints = {}, .bigint_operations = {}, .constraints = {}, + .quad_constraints = {}, .block_constraints = {}, }; diff --git a/barretenberg/cpp/src/barretenberg/dsl/acir_format/ecdsa_secp256k1.test.cpp b/barretenberg/cpp/src/barretenberg/dsl/acir_format/ecdsa_secp256k1.test.cpp index 6d8135cf36f7..115b29cd2880 100644 --- a/barretenberg/cpp/src/barretenberg/dsl/acir_format/ecdsa_secp256k1.test.cpp +++ b/barretenberg/cpp/src/barretenberg/dsl/acir_format/ecdsa_secp256k1.test.cpp @@ -114,6 +114,7 @@ TEST_F(ECDSASecp256k1, TestECDSAConstraintSucceed) .bigint_to_le_bytes_constraints = {}, .bigint_operations = {}, .constraints = {}, + .quad_constraints = {}, .block_constraints = {}, }; @@ -163,6 +164,7 @@ TEST_F(ECDSASecp256k1, TestECDSACompilesForVerifier) .bigint_to_le_bytes_constraints = {}, .bigint_operations = {}, .constraints = {}, + .quad_constraints = {}, .block_constraints = {}, }; @@ -207,6 +209,7 @@ TEST_F(ECDSASecp256k1, TestECDSAConstraintFail) .bigint_to_le_bytes_constraints = {}, .bigint_operations = {}, .constraints = {}, + .quad_constraints = {}, .block_constraints = {}, }; diff --git a/barretenberg/cpp/src/barretenberg/dsl/acir_format/ecdsa_secp256r1.test.cpp b/barretenberg/cpp/src/barretenberg/dsl/acir_format/ecdsa_secp256r1.test.cpp index 17720a6dd5d8..86d98a2a5bea 100644 --- a/barretenberg/cpp/src/barretenberg/dsl/acir_format/ecdsa_secp256r1.test.cpp +++ b/barretenberg/cpp/src/barretenberg/dsl/acir_format/ecdsa_secp256r1.test.cpp @@ -148,6 +148,7 @@ TEST(ECDSASecp256r1, test_hardcoded) .bigint_to_le_bytes_constraints = {}, .bigint_operations = {}, .constraints = {}, + .quad_constraints = {}, .block_constraints = {}, }; @@ -199,6 +200,7 @@ TEST(ECDSASecp256r1, TestECDSAConstraintSucceed) .bigint_to_le_bytes_constraints = {}, .bigint_operations = {}, .constraints = {}, + .quad_constraints = {}, .block_constraints = {}, }; @@ -248,6 +250,7 @@ TEST(ECDSASecp256r1, TestECDSACompilesForVerifier) .bigint_to_le_bytes_constraints = {}, .bigint_operations = {}, .constraints = {}, + .quad_constraints = {}, .block_constraints = {}, }; auto builder = create_circuit(constraint_system); @@ -292,6 +295,7 @@ TEST(ECDSASecp256r1, TestECDSAConstraintFail) .bigint_to_le_bytes_constraints = {}, .bigint_operations = {}, .constraints = {}, + .quad_constraints = {}, .block_constraints = {}, }; diff --git a/barretenberg/cpp/src/barretenberg/dsl/acir_format/poseidon2_constraint.test.cpp b/barretenberg/cpp/src/barretenberg/dsl/acir_format/poseidon2_constraint.test.cpp index a7b026197341..d190ed6698bc 100644 --- a/barretenberg/cpp/src/barretenberg/dsl/acir_format/poseidon2_constraint.test.cpp +++ b/barretenberg/cpp/src/barretenberg/dsl/acir_format/poseidon2_constraint.test.cpp @@ -54,6 +54,7 @@ TEST_F(Poseidon2Tests, TestPoseidon2Permutation) .bigint_to_le_bytes_constraints = {}, .bigint_operations = {}, .constraints = {}, + .quad_constraints = {}, .block_constraints = {} }; WitnessVector witness{ diff --git a/barretenberg/cpp/src/barretenberg/dsl/acir_format/recursion_constraint.test.cpp b/barretenberg/cpp/src/barretenberg/dsl/acir_format/recursion_constraint.test.cpp index bc1febd7409b..82fdc7fa511f 100644 --- a/barretenberg/cpp/src/barretenberg/dsl/acir_format/recursion_constraint.test.cpp +++ b/barretenberg/cpp/src/barretenberg/dsl/acir_format/recursion_constraint.test.cpp @@ -106,6 +106,7 @@ Builder create_inner_circuit() .bigint_to_le_bytes_constraints = {}, .bigint_operations = {}, .constraints = { expr_a, expr_b, expr_c, expr_d }, + .quad_constraints = {}, .block_constraints = {} }; uint256_t inverse_of_five = fr(5).invert(); @@ -263,6 +264,7 @@ Builder create_outer_circuit(std::vector& inner_circuits) .bigint_to_le_bytes_constraints = {}, .bigint_operations = {}, .constraints = {}, + .quad_constraints = {}, .block_constraints = {} }; auto outer_circuit = create_circuit(constraint_system, /*size_hint*/ 0, witness); diff --git a/barretenberg/cpp/src/barretenberg/dsl/acir_format/sha256_constraint.test.cpp b/barretenberg/cpp/src/barretenberg/dsl/acir_format/sha256_constraint.test.cpp index 037473e31d4b..2b3172322a7d 100644 --- a/barretenberg/cpp/src/barretenberg/dsl/acir_format/sha256_constraint.test.cpp +++ b/barretenberg/cpp/src/barretenberg/dsl/acir_format/sha256_constraint.test.cpp @@ -56,6 +56,7 @@ TEST_F(Sha256Tests, TestSha256Compression) .bigint_to_le_bytes_constraints = {}, .bigint_operations = {}, .constraints = {}, + .quad_constraints = {}, .block_constraints = {} }; WitnessVector witness{ 0, From 6bf1d975b6dfca936f7f111d16ef475bd25f2141 Mon Sep 17 00:00:00 2001 From: guipublic Date: Tue, 26 Mar 2024 16:35:22 +0000 Subject: [PATCH 08/13] add missing quad_constraint for test case --- .../cpp/src/barretenberg/dsl/acir_format/acir_format.test.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_format.test.cpp b/barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_format.test.cpp index 69dabe8886af..95c0d53597d1 100644 --- a/barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_format.test.cpp +++ b/barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_format.test.cpp @@ -55,6 +55,7 @@ TEST_F(AcirFormatTests, TestASingleConstraintNoPubInputs) .bigint_to_le_bytes_constraints = {}, .bigint_operations = {}, .constraints = { constraint }, + .quad_constraints = {}, .block_constraints = {}, }; From 1c068fef2ad5acc2d82490173edcced81dbb3ef5 Mon Sep 17 00:00:00 2001 From: guipublic Date: Tue, 26 Mar 2024 16:47:08 +0000 Subject: [PATCH 09/13] code review --- .../src/barretenberg/dsl/acir_format/acir_format.cpp | 2 +- .../src/barretenberg/dsl/acir_format/acir_format.hpp | 4 ++-- .../dsl/acir_format/acir_format.test.cpp | 12 ++++++------ .../dsl/acir_format/acir_to_constraint_buf.hpp | 10 +++++++--- .../dsl/acir_format/bigint_constraint.test.cpp | 10 +++++----- .../dsl/acir_format/block_constraint.test.cpp | 2 +- .../dsl/acir_format/ec_operations.test.cpp | 2 +- .../dsl/acir_format/ecdsa_secp256k1.test.cpp | 6 +++--- .../dsl/acir_format/ecdsa_secp256r1.test.cpp | 8 ++++---- .../dsl/acir_format/poseidon2_constraint.test.cpp | 2 +- .../dsl/acir_format/recursion_constraint.test.cpp | 4 ++-- .../dsl/acir_format/sha256_constraint.test.cpp | 2 +- 12 files changed, 34 insertions(+), 30 deletions(-) diff --git a/barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_format.cpp b/barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_format.cpp index 4dd2ad04dff6..73950362e63f 100644 --- a/barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_format.cpp +++ b/barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_format.cpp @@ -13,7 +13,7 @@ template void build_constraints(Builder& builder, AcirFormat const& constraint_system, bool has_valid_witness_assignments) { // Add arithmetic gates - for (const auto& constraint : constraint_system.constraints) { + for (const auto& constraint : constraint_system.poly_triple_constraints) { builder.create_poly_gate(constraint); } for (const auto& constraint : constraint_system.quad_constraints) { diff --git a/barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_format.hpp b/barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_format.hpp index ae22d0f452ed..625b558d5cf9 100644 --- a/barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_format.hpp +++ b/barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_format.hpp @@ -59,7 +59,7 @@ struct AcirFormat { // This could be a large vector so use slab allocator, we don't expect the blackbox implementations to be so large. std::vector, ContainerSlabAllocator>> - constraints; + poly_triple_constraints; std::vector> quad_constraints; std::vector block_constraints; @@ -84,7 +84,7 @@ struct AcirFormat { fixed_base_scalar_mul_constraints, ec_add_constraints, recursion_constraints, - constraints, + poly_triple_constraints, block_constraints, bigint_from_le_bytes_constraints, bigint_to_le_bytes_constraints, diff --git a/barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_format.test.cpp b/barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_format.test.cpp index 95c0d53597d1..a88b9d646c8d 100644 --- a/barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_format.test.cpp +++ b/barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_format.test.cpp @@ -54,7 +54,7 @@ TEST_F(AcirFormatTests, TestASingleConstraintNoPubInputs) .bigint_from_le_bytes_constraints = {}, .bigint_to_le_bytes_constraints = {}, .bigint_operations = {}, - .constraints = { constraint }, + .poly_triple_constraints = { constraint }, .quad_constraints = {}, .block_constraints = {}, }; @@ -171,7 +171,7 @@ TEST_F(AcirFormatTests, TestLogicGateFromNoirCircuit) .bigint_from_le_bytes_constraints = {}, .bigint_to_le_bytes_constraints = {}, .bigint_operations = {}, - .constraints = { expr_a, expr_b, expr_c, expr_d }, + .poly_triple_constraints = { expr_a, expr_b, expr_c, expr_d }, .quad_constraints = {}, .block_constraints = {} }; @@ -240,7 +240,7 @@ TEST_F(AcirFormatTests, TestSchnorrVerifyPass) .bigint_from_le_bytes_constraints = {}, .bigint_to_le_bytes_constraints = {}, .bigint_operations = {}, - .constraints = { poly_triple{ + .poly_triple_constraints = { poly_triple{ .a = schnorr_constraint.result, .b = schnorr_constraint.result, .c = schnorr_constraint.result, @@ -336,7 +336,7 @@ TEST_F(AcirFormatTests, TestSchnorrVerifySmallRange) .bigint_from_le_bytes_constraints = {}, .bigint_to_le_bytes_constraints = {}, .bigint_operations = {}, - .constraints = { poly_triple{ + .poly_triple_constraints = { poly_triple{ .a = schnorr_constraint.result, .b = schnorr_constraint.result, .c = schnorr_constraint.result, @@ -451,7 +451,7 @@ TEST_F(AcirFormatTests, TestVarKeccak) .bigint_from_le_bytes_constraints = {}, .bigint_to_le_bytes_constraints = {}, .bigint_operations = {}, - .constraints = { dummy }, + .poly_triple_constraints = { dummy }, .quad_constraints = {}, .block_constraints = {}, }; @@ -499,7 +499,7 @@ TEST_F(AcirFormatTests, TestKeccakPermutation) .bigint_from_le_bytes_constraints = {}, .bigint_to_le_bytes_constraints = {}, .bigint_operations = {}, - .constraints = {}, + .poly_triple_constraints = {}, .quad_constraints = {}, .block_constraints = {} }; diff --git a/barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_to_constraint_buf.hpp b/barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_to_constraint_buf.hpp index 4694ca1aa6db..867e5c56b292 100644 --- a/barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_to_constraint_buf.hpp +++ b/barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_to_constraint_buf.hpp @@ -125,7 +125,7 @@ mul_quad serialize_mul_quad_gate(Program::Expression const& arg) .d_scaling = 0, .const_scaling = 0 }; - // Flags indicating whether each witness index for the present poly_tuple has been set + // Flags indicating whether each witness index for the present mul_quad has been set bool a_set = false; bool b_set = false; bool c_set = false; @@ -148,7 +148,7 @@ mul_quad serialize_mul_quad_gate(Program::Expression const& arg) // If the witness index has not yet been set or if the corresponding linear term is active, set the witness // index and the corresponding selector value. - // TODO(https://github.com/AztecProtocol/barretenberg/issues/816): May need to adjust the pt.a == witness_idx + // TODO(https://github.com/AztecProtocol/barretenberg/issues/816): May need to adjust the quad.a == witness_idx // check (and the others like it) since we initialize a,b,c with 0 but 0 is a valid witness index once the // +1 offset is removed from noir. if (!a_set || quad.a == witness_idx) { @@ -181,10 +181,14 @@ void handle_arithmetic(Program::Opcode::AssertZero const& arg, AcirFormat& af) { if (arg.value.linear_combinations.size() <= 3) { poly_triple pt = serialize_arithmetic_gate(arg.value); + // Even if the number of linear terms is less than 3, we might not be able to fit it into a width-3 arithmetic + // gate. This is the case if the linear terms are all disctinct witness from the multiplication term. In that + // case, the serialize_arithmetic_gate() function will return a poly_triple with all 0's, and we use a width-4 + // gate instead. We could probably always use a width-4 gate in fact. if (pt == poly_triple{ 0, 0, 0, 0, 0, 0, 0, 0 }) { af.quad_constraints.push_back(serialize_mul_quad_gate(arg.value)); } else { - af.constraints.push_back(pt); + af.poly_triple_constraints.push_back(pt); } } else { af.quad_constraints.push_back(serialize_mul_quad_gate(arg.value)); diff --git a/barretenberg/cpp/src/barretenberg/dsl/acir_format/bigint_constraint.test.cpp b/barretenberg/cpp/src/barretenberg/dsl/acir_format/bigint_constraint.test.cpp index 543d4b127d7e..ba51e800da8c 100644 --- a/barretenberg/cpp/src/barretenberg/dsl/acir_format/bigint_constraint.test.cpp +++ b/barretenberg/cpp/src/barretenberg/dsl/acir_format/bigint_constraint.test.cpp @@ -191,7 +191,7 @@ TEST_F(BigIntTests, TestBigIntConstraintMultiple) .bigint_from_le_bytes_constraints = {}, .bigint_to_le_bytes_constraints = {}, .bigint_operations = {}, - .constraints = {}, + .poly_triple_constraints = {}, .quad_constraints = {}, .block_constraints = {}, }; @@ -260,7 +260,7 @@ TEST_F(BigIntTests, TestBigIntConstraintSimple) .bigint_from_le_bytes_constraints = { from_le_bytes_constraint_bigint1 }, .bigint_to_le_bytes_constraints = { result2_to_le_bytes }, .bigint_operations = { add_constraint }, - .constraints = {}, + .poly_triple_constraints = {}, .quad_constraints = {}, .block_constraints = {}, @@ -314,7 +314,7 @@ TEST_F(BigIntTests, TestBigIntConstraintReuse) .bigint_from_le_bytes_constraints = {}, .bigint_to_le_bytes_constraints = {}, .bigint_operations = {}, - .constraints = {}, + .poly_triple_constraints = {}, .quad_constraints = {}, .block_constraints = {}, }; @@ -372,7 +372,7 @@ TEST_F(BigIntTests, TestBigIntConstraintReuse2) .bigint_from_le_bytes_constraints = {}, .bigint_to_le_bytes_constraints = {}, .bigint_operations = {}, - .constraints = {}, + .poly_triple_constraints = {}, .quad_constraints = {}, .block_constraints = {}, }; @@ -451,7 +451,7 @@ TEST_F(BigIntTests, TestBigIntDIV) .bigint_from_le_bytes_constraints = { from_le_bytes_constraint_bigint1, from_le_bytes_constraint_bigint2 }, .bigint_to_le_bytes_constraints = { result3_to_le_bytes }, .bigint_operations = { div_constraint }, - .constraints = {}, + .poly_triple_constraints = {}, .quad_constraints = {}, .block_constraints = {}, diff --git a/barretenberg/cpp/src/barretenberg/dsl/acir_format/block_constraint.test.cpp b/barretenberg/cpp/src/barretenberg/dsl/acir_format/block_constraint.test.cpp index 4bd4d6ed6272..300d4df6c06d 100644 --- a/barretenberg/cpp/src/barretenberg/dsl/acir_format/block_constraint.test.cpp +++ b/barretenberg/cpp/src/barretenberg/dsl/acir_format/block_constraint.test.cpp @@ -133,7 +133,7 @@ TEST_F(UltraPlonkRAM, TestBlockConstraint) .bigint_from_le_bytes_constraints = {}, .bigint_to_le_bytes_constraints = {}, .bigint_operations = {}, - .constraints = {}, + .poly_triple_constraints = {}, .quad_constraints = {}, .block_constraints = { block }, }; diff --git a/barretenberg/cpp/src/barretenberg/dsl/acir_format/ec_operations.test.cpp b/barretenberg/cpp/src/barretenberg/dsl/acir_format/ec_operations.test.cpp index 0ce5010a0c9f..33f480690fce 100644 --- a/barretenberg/cpp/src/barretenberg/dsl/acir_format/ec_operations.test.cpp +++ b/barretenberg/cpp/src/barretenberg/dsl/acir_format/ec_operations.test.cpp @@ -73,7 +73,7 @@ TEST_F(EcOperations, TestECOperations) .bigint_from_le_bytes_constraints = {}, .bigint_to_le_bytes_constraints = {}, .bigint_operations = {}, - .constraints = {}, + .poly_triple_constraints = {}, .quad_constraints = {}, .block_constraints = {}, }; diff --git a/barretenberg/cpp/src/barretenberg/dsl/acir_format/ecdsa_secp256k1.test.cpp b/barretenberg/cpp/src/barretenberg/dsl/acir_format/ecdsa_secp256k1.test.cpp index 115b29cd2880..082df8b9b577 100644 --- a/barretenberg/cpp/src/barretenberg/dsl/acir_format/ecdsa_secp256k1.test.cpp +++ b/barretenberg/cpp/src/barretenberg/dsl/acir_format/ecdsa_secp256k1.test.cpp @@ -113,7 +113,7 @@ TEST_F(ECDSASecp256k1, TestECDSAConstraintSucceed) .bigint_from_le_bytes_constraints = {}, .bigint_to_le_bytes_constraints = {}, .bigint_operations = {}, - .constraints = {}, + .poly_triple_constraints = {}, .quad_constraints = {}, .block_constraints = {}, }; @@ -163,7 +163,7 @@ TEST_F(ECDSASecp256k1, TestECDSACompilesForVerifier) .bigint_from_le_bytes_constraints = {}, .bigint_to_le_bytes_constraints = {}, .bigint_operations = {}, - .constraints = {}, + .poly_triple_constraints = {}, .quad_constraints = {}, .block_constraints = {}, }; @@ -208,7 +208,7 @@ TEST_F(ECDSASecp256k1, TestECDSAConstraintFail) .bigint_from_le_bytes_constraints = {}, .bigint_to_le_bytes_constraints = {}, .bigint_operations = {}, - .constraints = {}, + .poly_triple_constraints = {}, .quad_constraints = {}, .block_constraints = {}, }; diff --git a/barretenberg/cpp/src/barretenberg/dsl/acir_format/ecdsa_secp256r1.test.cpp b/barretenberg/cpp/src/barretenberg/dsl/acir_format/ecdsa_secp256r1.test.cpp index 86d98a2a5bea..47344f14705b 100644 --- a/barretenberg/cpp/src/barretenberg/dsl/acir_format/ecdsa_secp256r1.test.cpp +++ b/barretenberg/cpp/src/barretenberg/dsl/acir_format/ecdsa_secp256r1.test.cpp @@ -147,7 +147,7 @@ TEST(ECDSASecp256r1, test_hardcoded) .bigint_from_le_bytes_constraints = {}, .bigint_to_le_bytes_constraints = {}, .bigint_operations = {}, - .constraints = {}, + .poly_triple_constraints = {}, .quad_constraints = {}, .block_constraints = {}, }; @@ -199,7 +199,7 @@ TEST(ECDSASecp256r1, TestECDSAConstraintSucceed) .bigint_from_le_bytes_constraints = {}, .bigint_to_le_bytes_constraints = {}, .bigint_operations = {}, - .constraints = {}, + .poly_triple_constraints = {}, .quad_constraints = {}, .block_constraints = {}, }; @@ -249,7 +249,7 @@ TEST(ECDSASecp256r1, TestECDSACompilesForVerifier) .bigint_from_le_bytes_constraints = {}, .bigint_to_le_bytes_constraints = {}, .bigint_operations = {}, - .constraints = {}, + .poly_triple_constraints = {}, .quad_constraints = {}, .block_constraints = {}, }; @@ -294,7 +294,7 @@ TEST(ECDSASecp256r1, TestECDSAConstraintFail) .bigint_from_le_bytes_constraints = {}, .bigint_to_le_bytes_constraints = {}, .bigint_operations = {}, - .constraints = {}, + .poly_triple_constraints = {}, .quad_constraints = {}, .block_constraints = {}, }; diff --git a/barretenberg/cpp/src/barretenberg/dsl/acir_format/poseidon2_constraint.test.cpp b/barretenberg/cpp/src/barretenberg/dsl/acir_format/poseidon2_constraint.test.cpp index d190ed6698bc..5b5fb8c2463c 100644 --- a/barretenberg/cpp/src/barretenberg/dsl/acir_format/poseidon2_constraint.test.cpp +++ b/barretenberg/cpp/src/barretenberg/dsl/acir_format/poseidon2_constraint.test.cpp @@ -53,7 +53,7 @@ TEST_F(Poseidon2Tests, TestPoseidon2Permutation) .bigint_from_le_bytes_constraints = {}, .bigint_to_le_bytes_constraints = {}, .bigint_operations = {}, - .constraints = {}, + .poly_triple_constraints = {}, .quad_constraints = {}, .block_constraints = {} }; diff --git a/barretenberg/cpp/src/barretenberg/dsl/acir_format/recursion_constraint.test.cpp b/barretenberg/cpp/src/barretenberg/dsl/acir_format/recursion_constraint.test.cpp index 82fdc7fa511f..a5e5c0a159a8 100644 --- a/barretenberg/cpp/src/barretenberg/dsl/acir_format/recursion_constraint.test.cpp +++ b/barretenberg/cpp/src/barretenberg/dsl/acir_format/recursion_constraint.test.cpp @@ -105,7 +105,7 @@ Builder create_inner_circuit() .bigint_from_le_bytes_constraints = {}, .bigint_to_le_bytes_constraints = {}, .bigint_operations = {}, - .constraints = { expr_a, expr_b, expr_c, expr_d }, + .poly_triple_constraints = { expr_a, expr_b, expr_c, expr_d }, .quad_constraints = {}, .block_constraints = {} }; @@ -263,7 +263,7 @@ Builder create_outer_circuit(std::vector& inner_circuits) .bigint_from_le_bytes_constraints = {}, .bigint_to_le_bytes_constraints = {}, .bigint_operations = {}, - .constraints = {}, + .poly_triple_constraints = {}, .quad_constraints = {}, .block_constraints = {} }; diff --git a/barretenberg/cpp/src/barretenberg/dsl/acir_format/sha256_constraint.test.cpp b/barretenberg/cpp/src/barretenberg/dsl/acir_format/sha256_constraint.test.cpp index 2b3172322a7d..45345a845d59 100644 --- a/barretenberg/cpp/src/barretenberg/dsl/acir_format/sha256_constraint.test.cpp +++ b/barretenberg/cpp/src/barretenberg/dsl/acir_format/sha256_constraint.test.cpp @@ -55,7 +55,7 @@ TEST_F(Sha256Tests, TestSha256Compression) .bigint_from_le_bytes_constraints = {}, .bigint_to_le_bytes_constraints = {}, .bigint_operations = {}, - .constraints = {}, + .poly_triple_constraints = {}, .quad_constraints = {}, .block_constraints = {} }; From d1d37b4d0a5dcdd6c9ef0b1b8bf1463477acadc9 Mon Sep 17 00:00:00 2001 From: guipublic Date: Wed, 27 Mar 2024 14:54:17 +0000 Subject: [PATCH 10/13] change default width to 4 --- .../noir-repo/tooling/backend_interface/src/proof_system.rs | 6 +++--- .../tooling/backend_interface/src/smart_contract.rs | 2 +- .../test-binaries/mock_backend/src/info_cmd.rs | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/noir/noir-repo/tooling/backend_interface/src/proof_system.rs b/noir/noir-repo/tooling/backend_interface/src/proof_system.rs index 105ae3377939..6bf9a938e645 100644 --- a/noir/noir-repo/tooling/backend_interface/src/proof_system.rs +++ b/noir/noir-repo/tooling/backend_interface/src/proof_system.rs @@ -39,16 +39,16 @@ impl Backend { InfoCommand { crs_path: self.crs_directory() }.run(binary_path) } - /// If we cannot get a valid backend, returns `ExpressionWidth::Bound { width: 3 }`` + /// If we cannot get a valid backend, returns `ExpressionWidth::Bound { width: 4 }`` /// The function also prints a message saying we could not find a backend pub fn get_backend_info_or_default(&self) -> ExpressionWidth { if let Ok(expression_width) = self.get_backend_info() { expression_width } else { warn!( - "No valid backend found, ExpressionWidth defaulting to Bounded with a width of 3" + "No valid backend found, ExpressionWidth defaulting to Bounded with a width of 4" ); - ExpressionWidth::Bounded { width: 3 } + ExpressionWidth::Bounded { width: 4 } } } diff --git a/noir/noir-repo/tooling/backend_interface/src/smart_contract.rs b/noir/noir-repo/tooling/backend_interface/src/smart_contract.rs index f6beeeb09d99..26368862aefc 100644 --- a/noir/noir-repo/tooling/backend_interface/src/smart_contract.rs +++ b/noir/noir-repo/tooling/backend_interface/src/smart_contract.rs @@ -51,7 +51,7 @@ mod tests { let circuit = Circuit { current_witness_index: 4, - expression_width: ExpressionWidth::Bounded { width: 3 }, + expression_width: ExpressionWidth::Bounded { width: 4 }, opcodes: vec![constraint], private_parameters: BTreeSet::from([Witness(1), Witness(2)]), public_parameters: PublicInputs::default(), diff --git a/noir/noir-repo/tooling/backend_interface/test-binaries/mock_backend/src/info_cmd.rs b/noir/noir-repo/tooling/backend_interface/test-binaries/mock_backend/src/info_cmd.rs index fd8cf6021259..75a6d323e7bd 100644 --- a/noir/noir-repo/tooling/backend_interface/test-binaries/mock_backend/src/info_cmd.rs +++ b/noir/noir-repo/tooling/backend_interface/test-binaries/mock_backend/src/info_cmd.rs @@ -5,7 +5,7 @@ use std::path::PathBuf; const INFO_RESPONSE: &str = r#"{ "language": { "name": "PLONK-CSAT", - "width": 3 + "width": 4 }, "opcodes_supported": ["arithmetic", "directive", "brillig", "memory_init", "memory_op"], "black_box_functions_supported": [ From 29a3148d7eab64ec4ced105eb6243d9b4b6953e5 Mon Sep 17 00:00:00 2001 From: guipublic Date: Wed, 27 Mar 2024 14:55:33 +0000 Subject: [PATCH 11/13] code review --- .../cpp/src/barretenberg/dsl/acir_format/acir_format.hpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_format.hpp b/barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_format.hpp index 625b558d5cf9..c637ef587d72 100644 --- a/barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_format.hpp +++ b/barretenberg/cpp/src/barretenberg/dsl/acir_format/acir_format.hpp @@ -60,7 +60,8 @@ struct AcirFormat { std::vector, ContainerSlabAllocator>> poly_triple_constraints; - std::vector> quad_constraints; + std::vector, ContainerSlabAllocator>> + quad_constraints; std::vector block_constraints; // For serialization, update with any new fields From 239d70fcf969682223d743a52307540a12737fa0 Mon Sep 17 00:00:00 2001 From: guipublic Date: Tue, 16 Apr 2024 14:28:43 +0000 Subject: [PATCH 12/13] update instance deployer address --- yarn-project/circuits.js/src/constants.gen.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/yarn-project/circuits.js/src/constants.gen.ts b/yarn-project/circuits.js/src/constants.gen.ts index e69612799748..63247818e39e 100644 --- a/yarn-project/circuits.js/src/constants.gen.ts +++ b/yarn-project/circuits.js/src/constants.gen.ts @@ -68,7 +68,7 @@ export const REGISTERER_UNCONSTRAINED_FUNCTION_BROADCASTED_MAGIC_VALUE = 0xe7af816635466f128568edb04c9fa024f6c87fb9010fdbffa68b3d99n; export const DEPLOYER_CONTRACT_INSTANCE_DEPLOYED_MAGIC_VALUE = 0x85864497636cf755ae7bde03f267ce01a520981c21c3682aaf82a631n; -export const DEPLOYER_CONTRACT_ADDRESS = 0x1b02447505c1781a416a5f44bc5be922f0d2f709e0996877f673a86bd49f79f4n; +export const DEPLOYER_CONTRACT_ADDRESS = 0x0362dfc881f85ce713039b515d6b32ac62f451eca6e1d7b89c7ef377339cb94en; export const L1_TO_L2_MESSAGE_ORACLE_CALL_LENGTH = 17; export const MAX_NOTE_FIELDS_LENGTH = 20; export const GET_NOTE_ORACLE_RETURN_LENGTH = 23; From 720a84f1ad78e95029e5d9e1da404924d1e9767b Mon Sep 17 00:00:00 2001 From: guipublic Date: Tue, 16 Apr 2024 17:01:55 +0000 Subject: [PATCH 13/13] update instance deployer address --- yarn-project/circuits.js/src/constants.gen.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/yarn-project/circuits.js/src/constants.gen.ts b/yarn-project/circuits.js/src/constants.gen.ts index 82a1274b7ed2..abea48aef024 100644 --- a/yarn-project/circuits.js/src/constants.gen.ts +++ b/yarn-project/circuits.js/src/constants.gen.ts @@ -68,7 +68,7 @@ export const REGISTERER_UNCONSTRAINED_FUNCTION_BROADCASTED_MAGIC_VALUE = 0xe7af816635466f128568edb04c9fa024f6c87fb9010fdbffa68b3d99n; export const DEPLOYER_CONTRACT_INSTANCE_DEPLOYED_MAGIC_VALUE = 0x85864497636cf755ae7bde03f267ce01a520981c21c3682aaf82a631n; -export const DEPLOYER_CONTRACT_ADDRESS = 0x0362dfc881f85ce713039b515d6b32ac62f451eca6e1d7b89c7ef377339cb94en; +export const DEPLOYER_CONTRACT_ADDRESS = 0x1d2c645a18ab4d81672dd779bf1ea4fa2c0b4a2f09bf59d3fb4ee408299d00b2n; export const L1_TO_L2_MESSAGE_ORACLE_CALL_LENGTH = 17; export const MAX_NOTE_FIELDS_LENGTH = 20; export const GET_NOTE_ORACLE_RETURN_LENGTH = 23;