diff --git a/.eslintignore b/.eslintignore
index 9b48e902..bdbe5430 100644
--- a/.eslintignore
+++ b/.eslintignore
@@ -1,2 +1,3 @@
node_modules/
/build
+
diff --git a/.eslintrc.cjs b/.eslintrc.cjs
index e01afe0a..0ac65a93 100644
--- a/.eslintrc.cjs
+++ b/.eslintrc.cjs
@@ -17,6 +17,9 @@ module.exports = {
// Tells eslint-plugin-react to automatically detect the version of React to use.
version: 'detect',
},
+ linterOptions: {
+ exclude: ['src/interfaces/*'],
+ },
// Tells eslint how to resolve imports
'import/resolver': {
node: {
diff --git a/edgeware.json b/edgeware.json
index f59d19b6..af284386 100644
--- a/edgeware.json
+++ b/edgeware.json
@@ -1 +1 @@
-{"jsonrpc":"2.0","result":"0x6d6574610e6103000c1c73705f636f72651863727970746f2c4163636f756e7449643332000004000401205b75383b2033325d0000040000032000000008000800000503000c08306672616d655f73797374656d2c4163636f756e74496e666f0814496e64657801102c4163636f756e74446174610114001401146e6f6e6365100114496e646578000124636f6e73756d657273100120526566436f756e7400012470726f766964657273100120526566436f756e7400012c73756666696369656e7473100120526566436f756e740001106461746114012c4163636f756e74446174610000100000050500140c3c70616c6c65745f62616c616e6365731474797065732c4163636f756e7444617461041c42616c616e63650118001001106672656518011c42616c616e6365000120726573657276656418011c42616c616e636500011866726f7a656e18011c42616c616e6365000114666c6167731c01284578747261466c61677300001800000507001c0c3c70616c6c65745f62616c616e636573147479706573284578747261466c61677300000400180110753132380000200c346672616d655f737570706f7274206469737061746368405065724469737061746368436c6173730404540124000c01186e6f726d616c2401045400012c6f7065726174696f6e616c240104540001246d616e6461746f7279240104540000240c2873705f77656967687473247765696768745f76321857656967687400000801207265665f74696d6528010c75363400012870726f6f665f73697a6528010c7536340000280000062c002c000005060030083c7072696d69746976655f74797065731048323536000004000401205b75383b2033325d000034000002080038102873705f72756e74696d651c67656e65726963186469676573741844696765737400000401106c6f67733c013c5665633c4469676573744974656d3e00003c000002400040102873705f72756e74696d651c67656e6572696318646967657374284469676573744974656d0001142850726552756e74696d650800440144436f6e73656e737573456e67696e654964000034011c5665633c75383e00060024436f6e73656e7375730800440144436f6e73656e737573456e67696e654964000034011c5665633c75383e000400105365616c0800440144436f6e73656e737573456e67696e654964000034011c5665633c75383e000500144f74686572040034011c5665633c75383e0000006452756e74696d65456e7669726f6e6d656e74557064617465640008000044000003040000000800480000024c004c08306672616d655f73797374656d2c4576656e745265636f7264080445015004540130000c011470686173651101011450686173650001146576656e7450010445000118746f70696373150101185665633c543e000050083467616d65335f72756e74696d653052756e74696d654576656e740001281853797374656d04005401706672616d655f73797374656d3a3a4576656e743c52756e74696d653e0000001c4772616e647061040078015470616c6c65745f6772616e6470613a3a4576656e740004002042616c616e63657304008c017c70616c6c65745f62616c616e6365733a3a4576656e743c52756e74696d653e000500485472616e73616374696f6e5061796d656e7404009401a870616c6c65745f7472616e73616374696f6e5f7061796d656e743a3a4576656e743c52756e74696d653e000600105375646f040098016c70616c6c65745f7375646f3a3a4576656e743c52756e74696d653e000700104e6674730400a8016c70616c6c65745f6e6674733a3a4576656e743c52756e74696d653e0008001047616d650400d4016c70616c6c65745f67616d653a3a4576656e743c52756e74696d653e0009003847616d6552616e646f6d6e65737304000501017c67616d655f72616e646f6d6e6573733a3a4576656e743c52756e74696d653e000a001846617563657404000901017470616c6c65745f6661756365743a3a4576656e743c52756e74696d653e000b002c50616c6c6574436163686504000d01017070616c6c65745f63616368653a3a4576656e743c52756e74696d653e000c0000540c306672616d655f73797374656d1870616c6c6574144576656e740404540001184045787472696e7369635375636365737304013464697370617463685f696e666f5801304469737061746368496e666f00000490416e2065787472696e73696320636f6d706c65746564207375636365737366756c6c792e3c45787472696e7369634661696c656408013864697370617463685f6572726f7264013444697370617463684572726f7200013464697370617463685f696e666f5801304469737061746368496e666f00010450416e2065787472696e736963206661696c65642e2c436f64655570646174656400020450603a636f6465602077617320757064617465642e284e65774163636f756e7404011c6163636f756e74000130543a3a4163636f756e7449640003046841206e6577206163636f756e742077617320637265617465642e344b696c6c65644163636f756e7404011c6163636f756e74000130543a3a4163636f756e74496400040458416e206163636f756e7420776173207265617065642e2052656d61726b656408011873656e646572000130543a3a4163636f756e7449640001106861736830011c543a3a48617368000504704f6e206f6e2d636861696e2072656d61726b2068617070656e65642e04704576656e7420666f72207468652053797374656d2070616c6c65742e580c346672616d655f737570706f7274206469737061746368304469737061746368496e666f00000c0118776569676874240118576569676874000114636c6173735c01344469737061746368436c617373000120706179735f6665656001105061797300005c0c346672616d655f737570706f7274206469737061746368344469737061746368436c61737300010c184e6f726d616c0000002c4f7065726174696f6e616c000100244d616e6461746f727900020000600c346672616d655f737570706f727420646973706174636810506179730001080c596573000000084e6f0001000064082873705f72756e74696d653444697370617463684572726f72000134144f746865720000003043616e6e6f744c6f6f6b7570000100244261644f726967696e000200184d6f64756c65040068012c4d6f64756c654572726f7200030044436f6e73756d657252656d61696e696e670004002c4e6f50726f76696465727300050040546f6f4d616e79436f6e73756d65727300060014546f6b656e04006c0128546f6b656e4572726f720007002841726974686d65746963040070013c41726974686d657469634572726f72000800345472616e73616374696f6e616c04007401485472616e73616374696f6e616c4572726f7200090024457868617573746564000a0028436f7272757074696f6e000b002c556e617661696c61626c65000c000068082873705f72756e74696d652c4d6f64756c654572726f720000080114696e64657808010875380001146572726f7244018c5b75383b204d41585f4d4f44554c455f4552524f525f454e434f4445445f53495a455d00006c082873705f72756e74696d6528546f6b656e4572726f720001244046756e6473556e617661696c61626c65000000304f6e6c7950726f76696465720001003042656c6f774d696e696d756d0002003043616e6e6f7443726561746500030030556e6b6e6f776e41737365740004001846726f7a656e0005002c556e737570706f727465640006004043616e6e6f74437265617465486f6c64000700344e6f74457870656e6461626c650008000070083473705f61726974686d657469633c41726974686d657469634572726f7200010c24556e646572666c6f77000000204f766572666c6f77000100384469766973696f6e42795a65726f0002000074082873705f72756e74696d65485472616e73616374696f6e616c4572726f72000108304c696d6974526561636865640000001c4e6f4c6179657200010000780c3870616c6c65745f6772616e6470611870616c6c6574144576656e7400010c384e6577417574686f726974696573040134617574686f726974795f7365747c0134417574686f726974794c6973740000048c4e657720617574686f726974792073657420686173206265656e206170706c6965642e185061757365640001049843757272656e7420617574686f726974792073657420686173206265656e207061757365642e1c526573756d65640002049c43757272656e7420617574686f726974792073657420686173206265656e20726573756d65642e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a0909097c00000280008000000408842c00840c5073705f636f6e73656e7375735f6772616e6470610c617070185075626c69630000040088013c656432353531393a3a5075626c69630000880c1c73705f636f72651c65643235353139185075626c6963000004000401205b75383b2033325d00008c0c3c70616c6c65745f62616c616e6365731870616c6c6574144576656e740804540004490001541c456e646f77656408011c6163636f756e74000130543a3a4163636f756e744964000130667265655f62616c616e6365180128543a3a42616c616e6365000004b8416e206163636f756e74207761732063726561746564207769746820736f6d6520667265652062616c616e63652e20447573744c6f737408011c6163636f756e74000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650001083d01416e206163636f756e74207761732072656d6f7665642077686f73652062616c616e636520776173206e6f6e2d7a65726f206275742062656c6f77204578697374656e7469616c4465706f7369742c78726573756c74696e6720696e20616e206f75747269676874206c6f73732e205472616e736665720c011066726f6d000130543a3a4163636f756e744964000108746f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650002044c5472616e73666572207375636365656465642e2842616c616e636553657408010c77686f000130543a3a4163636f756e74496400011066726565180128543a3a42616c616e636500030468412062616c616e6365207761732073657420627920726f6f742e20526573657276656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000404e0536f6d652062616c616e63652077617320726573657276656420286d6f7665642066726f6d206672656520746f207265736572766564292e28556e726573657276656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000504e8536f6d652062616c616e63652077617320756e726573657276656420286d6f7665642066726f6d20726573657276656420746f2066726565292e4852657365727665526570617472696174656410011066726f6d000130543a3a4163636f756e744964000108746f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500014864657374696e6174696f6e5f7374617475739001185374617475730006084d01536f6d652062616c616e636520776173206d6f7665642066726f6d207468652072657365727665206f6620746865206669727374206163636f756e7420746f20746865207365636f6e64206163636f756e742ed846696e616c20617267756d656e7420696e64696361746573207468652064657374696e6174696f6e2062616c616e636520747970652e1c4465706f73697408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000704d8536f6d6520616d6f756e7420776173206465706f73697465642028652e672e20666f72207472616e73616374696f6e2066656573292e20576974686472617708010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650008041d01536f6d6520616d6f756e74207761732077697468647261776e2066726f6d20746865206163636f756e742028652e672e20666f72207472616e73616374696f6e2066656573292e1c536c617368656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650009040101536f6d6520616d6f756e74207761732072656d6f7665642066726f6d20746865206163636f756e742028652e672e20666f72206d69736265686176696f72292e184d696e74656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000a049c536f6d6520616d6f756e7420776173206d696e74656420696e746f20616e206163636f756e742e184275726e656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000b049c536f6d6520616d6f756e7420776173206275726e65642066726f6d20616e206163636f756e742e2453757370656e64656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000c041501536f6d6520616d6f756e74207761732073757370656e6465642066726f6d20616e206163636f756e74202869742063616e20626520726573746f726564206c61746572292e20526573746f72656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000d04a4536f6d6520616d6f756e742077617320726573746f72656420696e746f20616e206163636f756e742e20557067726164656404010c77686f000130543a3a4163636f756e744964000e0460416e206163636f756e74207761732075706772616465642e18497373756564040118616d6f756e74180128543a3a42616c616e6365000f042d01546f74616c2069737375616e63652077617320696e637265617365642062792060616d6f756e74602c206372656174696e6720612063726564697420746f2062652062616c616e6365642e2452657363696e646564040118616d6f756e74180128543a3a42616c616e63650010042501546f74616c2069737375616e636520776173206465637265617365642062792060616d6f756e74602c206372656174696e672061206465627420746f2062652062616c616e6365642e184c6f636b656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500110460536f6d652062616c616e636520776173206c6f636b65642e20556e6c6f636b656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500120468536f6d652062616c616e63652077617320756e6c6f636b65642e1846726f7a656e08010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500130460536f6d652062616c616e6365207761732066726f7a656e2e1854686177656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500140460536f6d652062616c616e636520776173207468617765642e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a0909099014346672616d655f737570706f72741874726169747318746f6b656e73106d6973633442616c616e6365537461747573000108104672656500000020526573657276656400010000940c6870616c6c65745f7472616e73616374696f6e5f7061796d656e741870616c6c6574144576656e74040454000104485472616e73616374696f6e466565506169640c010c77686f000130543a3a4163636f756e74496400012861637475616c5f66656518013042616c616e63654f663c543e00010c74697018013042616c616e63654f663c543e000008590141207472616e73616374696f6e20666565206061637475616c5f666565602c206f662077686963682060746970602077617320616464656420746f20746865206d696e696d756d20696e636c7573696f6e206665652c5c686173206265656e2070616964206279206077686f602e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909980c2c70616c6c65745f7375646f1870616c6c6574144576656e7404045400010c14537564696404012c7375646f5f726573756c749c01384469737061746368526573756c740000048841207375646f206a75737420746f6f6b20706c6163652e205c5b726573756c745c5d284b65794368616e6765640401286f6c645f7375646f6572a401504f7074696f6e3c543a3a4163636f756e7449643e0001043901546865205c5b7375646f65725c5d206a757374207377697463686564206964656e746974793b20746865206f6c64206b657920697320737570706c696564206966206f6e6520657869737465642e285375646f4173446f6e6504012c7375646f5f726573756c749c01384469737061746368526573756c740002048841207375646f206a75737420746f6f6b20706c6163652e205c5b726573756c745c5d04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a0909099c0418526573756c7408045401a0044501640108084f6b0400a0000000000c4572720400640000010000a00000040000a404184f7074696f6e04045401000108104e6f6e6500000010536f6d650400000000010000a80c2c70616c6c65745f6e6674731870616c6c6574144576656e740804540004490001981c437265617465640c0128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e496400011c63726561746f72000130543a3a4163636f756e7449640001146f776e6572000130543a3a4163636f756e7449640000046c412060636f6c6c656374696f6e602077617320637265617465642e30466f72636543726561746564080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001146f776e6572000130543a3a4163636f756e74496400010484412060636f6c6c656374696f6e602077617320666f7263652d637265617465642e2444657374726f796564040128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e496400020474412060636f6c6c656374696f6e60207761732064657374726f7965642e184973737565640c0128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d49640001146f776e6572000130543a3a4163636f756e74496400030454416e20606974656d6020776173206973737565642e2c5472616e73666572726564100128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d496400011066726f6d000130543a3a4163636f756e744964000108746f000130543a3a4163636f756e74496400040468416e20606974656d6020776173207472616e736665727265642e184275726e65640c0128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d49640001146f776e6572000130543a3a4163636f756e74496400050460416e20606974656d60207761732064657374726f7965642e484974656d5472616e736665724c6f636b6564080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d496400060488416e20606974656d6020626563616d65206e6f6e2d7472616e7366657261626c652e504974656d5472616e73666572556e6c6f636b6564080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d496400070478416e20606974656d6020626563616d65207472616e7366657261626c652e504974656d50726f706572746965734c6f636b6564100128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d49640001346c6f636b5f6d65746164617461ac0110626f6f6c00013c6c6f636b5f61747472696275746573ac0110626f6f6c000804a8606974656d60206d65746164617461206f7220617474726962757465732077657265206c6f636b65642e40436f6c6c656374696f6e4c6f636b6564040128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e496400090474536f6d652060636f6c6c656374696f6e6020776173206c6f636b65642e304f776e65724368616e676564080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001246e65775f6f776e6572000130543a3a4163636f756e744964000a0448546865206f776e6572206368616e6765642e2c5465616d4368616e676564100128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e4964000118697373756572a401504f7074696f6e3c543a3a4163636f756e7449643e00011461646d696ea401504f7074696f6e3c543a3a4163636f756e7449643e00011c667265657a6572a401504f7074696f6e3c543a3a4163636f756e7449643e000b0470546865206d616e6167656d656e74207465616d206368616e6765642e405472616e73666572417070726f766564140128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d49640001146f776e6572000130543a3a4163636f756e74496400012064656c6567617465000130543a3a4163636f756e744964000120646561646c696e65b001a04f7074696f6e3c3c542061732053797374656d436f6e6669673e3a3a426c6f636b4e756d6265723e000c083101416e20606974656d60206f6620612060636f6c6c656374696f6e6020686173206265656e20617070726f7665642062792074686520606f776e65726020666f72207472616e736665722062793461206064656c6567617465602e44417070726f76616c43616e63656c6c6564100128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d49640001146f776e6572000130543a3a4163636f756e74496400012064656c6567617465000130543a3a4163636f756e744964000d081901416e20617070726f76616c20666f722061206064656c656761746560206163636f756e7420746f207472616e736665722074686520606974656d60206f6620616e206974656da860636f6c6c656374696f6e60207761732063616e63656c6c65642062792069747320606f776e6572602e54416c6c417070726f76616c7343616e63656c6c65640c0128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d49640001146f776e6572000130543a3a4163636f756e744964000e049c416c6c20617070726f76616c73206f6620616e206974656d20676f742063616e63656c6c65642e5c436f6c6c656374696f6e436f6e6669674368616e676564040128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e4964000f040101412060636f6c6c656374696f6e6020686173206861642069747320636f6e666967206368616e676564206279207468652060466f72636560206f726967696e2e54436f6c6c656374696f6e4d65746164617461536574080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e496400011064617461b40178426f756e6465645665633c75382c20543a3a537472696e674c696d69743e001004b44e6577206d6574616461746120686173206265656e2073657420666f7220612060636f6c6c656374696f6e602e64436f6c6c656374696f6e4d65746164617461436c6561726564040128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e4964001104b44d6574616461746120686173206265656e20636c656172656420666f7220612060636f6c6c656374696f6e602e3c4974656d4d657461646174615365740c0128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d496400011064617461b40178426f756e6465645665633c75382c20543a3a537472696e674c696d69743e001204984e6577206d6574616461746120686173206265656e2073657420666f7220616e206974656d2e4c4974656d4d65746164617461436c6561726564080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d4964001304984d6574616461746120686173206265656e20636c656172656420666f7220616e206974656d2e2c52656465706f7369746564080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001407375636365737366756c5f6974656d73b801385665633c543a3a4974656d49643e0014042101546865206465706f73697420666f72206120736574206f6620606974656d60732077697468696e20612060636f6c6c656374696f6e6020686173206265656e20757064617465642e30417474726962757465536574140128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001286d617962655f6974656db001444f7074696f6e3c543a3a4974656d49643e00010c6b6579bc016c426f756e6465645665633c75382c20543a3a4b65794c696d69743e00011476616c7565bc0174426f756e6465645665633c75382c20543a3a56616c75654c696d69743e0001246e616d657370616365c001804174747269627574654e616d6573706163653c543a3a4163636f756e7449643e00150405014e657720617474726962757465206d6574616461746120686173206265656e2073657420666f7220612060636f6c6c656374696f6e60206f7220606974656d602e40417474726962757465436c6561726564100128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001286d617962655f6974656db001444f7074696f6e3c543a3a4974656d49643e00010c6b6579bc016c426f756e6465645665633c75382c20543a3a4b65794c696d69743e0001246e616d657370616365c001804174747269627574654e616d6573706163653c543a3a4163636f756e7449643e0016040501417474726962757465206d6574616461746120686173206265656e20636c656172656420666f7220612060636f6c6c656374696f6e60206f7220606974656d602e6c4974656d41747472696275746573417070726f76616c41646465640c0128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d496400012064656c6567617465000130543a3a4163636f756e744964001704cc41206e657720617070726f76616c20746f206d6f64696679206974656d2061747472696275746573207761732061646465642e744974656d41747472696275746573417070726f76616c52656d6f7665640c0128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d496400012064656c6567617465000130543a3a4163636f756e744964001804d441206e657720617070726f76616c20746f206d6f64696679206974656d2061747472696275746573207761732072656d6f7665642e684f776e657273686970416363657074616e63654368616e67656408010c77686f000130543a3a4163636f756e7449640001406d617962655f636f6c6c656374696f6eb0015c4f7074696f6e3c543a3a436f6c6c656374696f6e49643e001904c04f776e65727368697020616363657074616e636520686173206368616e67656420666f7220616e206163636f756e742e58436f6c6c656374696f6e4d6178537570706c79536574080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001286d61785f737570706c7910010c753332001a04a44d617820737570706c7920686173206265656e2073657420666f72206120636f6c6c656374696f6e2e74436f6c6c656374696f6e4d696e7453657474696e677355706461746564040128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e4964001b04ac4d696e742073657474696e677320666f72206120636f6c6c656374696f6e20686164206368616e6765642e6c4e657874436f6c6c656374696f6e4964496e6372656d656e74656404011c6e6578745f696410013c543a3a436f6c6c656374696f6e4964001c0401014576656e74206765747320656d6974746564207768656e2074686520604e657874436f6c6c656374696f6e496460206765747320696e6372656d656e7465642e304974656d5072696365536574100128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d4964000114707269636518013c4974656d50726963653c542c20493e00014477686974656c69737465645f6275796572a401504f7074696f6e3c543a3a4163636f756e7449643e001d047c546865207072696365207761732073657420666f7220746865206974656d2e404974656d507269636552656d6f766564080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d4964001e048c54686520707269636520666f7220746865206974656d207761732072656d6f7665642e284974656d426f75676874140128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d4964000114707269636518013c4974656d50726963653c542c20493e00011873656c6c6572000130543a3a4163636f756e7449640001146275796572000130543a3a4163636f756e744964001f044c416e206974656d2077617320626f756768742e1c54697053656e74140128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d496400011873656e646572000130543a3a4163636f756e7449640001207265636569766572000130543a3a4163636f756e744964000118616d6f756e741801584465706f73697442616c616e63654f663c542c20493e0020043c4120746970207761732073656e742e2c53776170437265617465641801486f6666657265645f636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001306f6666657265645f6974656d100124543a3a4974656d4964000148646573697265645f636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e4964000130646573697265645f6974656db001444f7074696f6e3c543a3a4974656d49643e0001147072696365c401ac4f7074696f6e3c507269636557697468446972656374696f6e3c4974656d50726963653c542c20493e3e3e000120646561646c696e651001803c542061732053797374656d436f6e6669673e3a3a426c6f636b4e756d62657200210488416e20606974656d60207377617020696e74656e742077617320637265617465642e345377617043616e63656c6c65641801486f6666657265645f636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001306f6666657265645f6974656d100124543a3a4974656d4964000148646573697265645f636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e4964000130646573697265645f6974656db001444f7074696f6e3c543a3a4974656d49643e0001147072696365c401ac4f7074696f6e3c507269636557697468446972656374696f6e3c4974656d50726963653c542c20493e3e3e000120646561646c696e651001803c542061732053797374656d436f6e6669673e3a3a426c6f636b4e756d6265720022045c5468652073776170207761732063616e63656c6c65642e2c53776170436c61696d656420013c73656e745f636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e496400012473656e745f6974656d100124543a3a4974656d496400013c73656e745f6974656d5f6f776e6572000130543a3a4163636f756e74496400014c72656365697665645f636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e496400013472656365697665645f6974656d100124543a3a4974656d496400014c72656365697665645f6974656d5f6f776e6572000130543a3a4163636f756e7449640001147072696365c401ac4f7074696f6e3c507269636557697468446972656374696f6e3c4974656d50726963653c542c20493e3e3e000120646561646c696e651001803c542061732053797374656d436f6e6669673e3a3a426c6f636b4e756d62657200230468546865207377617020686173206265656e20636c61696d65642e585072655369676e6564417474726962757465735365740c0128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d49640001246e616d657370616365c001804174747269627574654e616d6573706163653c543a3a4163636f756e7449643e002404fc4e657720617474726962757465732068617665206265656e2073657420666f7220616e20606974656d60206f66207468652060636f6c6c656374696f6e602e4850616c6c6574417474726962757465536574100128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656db001444f7074696f6e3c543a3a4974656d49643e000124617474726962757465d0018450616c6c6574417474726962757465733c543a3a436f6c6c656374696f6e49643e00011476616c7565bc0174426f756e6465645665633c75382c20543a3a56616c75654c696d69743e0025084d0141206e65772061747472696275746520696e20746865206050616c6c657460206e616d657370616365207761732073657420666f72207468652060636f6c6c656374696f6e60206f7220616e20606974656d606477697468696e20746861742060636f6c6c656374696f6e602e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909ac0000050000b004184f7074696f6e04045401100108104e6f6e6500000010536f6d650400100000010000b40c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003401185665633c543e0000b80000021000bc0c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003401185665633c543e0000c00c2c70616c6c65745f6e667473147479706573484174747269627574654e616d65737061636504244163636f756e744964010001101850616c6c65740000003c436f6c6c656374696f6e4f776e6572000100244974656d4f776e65720002001c4163636f756e7404000001244163636f756e74496400030000c404184f7074696f6e04045401c80108104e6f6e6500000010536f6d650400c80000010000c80c2c70616c6c65745f6e66747314747970657348507269636557697468446972656374696f6e0418416d6f756e74011800080118616d6f756e74180118416d6f756e74000124646972656374696f6ecc01385072696365446972656374696f6e0000cc0c2c70616c6c65745f6e667473147479706573385072696365446972656374696f6e0001081053656e640000001c5265636569766500010000d00c2c70616c6c65745f6e6674731474797065734050616c6c6574417474726962757465730430436f6c6c656374696f6e4964011001042c55736564546f436c61696d0400100130436f6c6c656374696f6e496400000000d40c2c70616c6c65745f67616d651870616c6c6574144576656e740804540004490001802c47616d654372656174656408010c77686f000130543a3a4163636f756e74496400011067616d65100124543a3a47616d6549640000003c47616d655365744d657461646174610c010c77686f000130543a3a4163636f756e74496400011067616d65100124543a3a47616d65496400011064617461b40178426f756e6465645665633c75382c20543a3a537472696e674c696d69743e0001004c47616d654d65746164617461436c656172656408010c77686f000130543a3a4163636f756e74496400011067616d65100124543a3a47616d65496400020044436f6c6c656374696f6e4372656174656408010c77686f000130543a3a4163636f756e744964000128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640003004c416464696e67416363657074616e63655365740c010c77686f000130543a3a4163636f756e74496400011067616d65100124543a3a47616d654964000128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640004003c436f6c6c656374696f6e41646465640c010c77686f000130543a3a4163636f756e74496400011067616d65100124543a3a47616d654964000128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640005002c4974656d4372656174656410010c77686f000130543a3a4163636f756e744964000128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d49640001306d617962655f737570706c79b0012c4f7074696f6e3c7533323e000600244974656d416464656410010c77686f000130543a3a4163636f756e744964000128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d4964000118616d6f756e74100118416d6f756e740007002c526571756573744d696e7410010c77686f000130543a3a4163636f756e744964000110706f6f6c100124543a3a506f6f6c4964000118746172676574000130543a3a4163636f756e744964000130626c6f636b5f6e756d626572100138543a3a426c6f636b4e756d626572000800184d696e74656418010c77686f000130543a3a4163636f756e744964000110706f6f6c100124543a3a506f6f6c4964000118746172676574000130543a3a4163636f756e7449640001106e667473d801905665633c4e46543c543a3a436f6c6c656374696f6e49642c20543a3a4974656d49643e3e000114707269636518013c42616c616e63654f663c542c20493e000118616d6f756e74100118416d6f756e74000900184275726e656410010c77686f000130543a3a4163636f756e744964000128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d4964000118616d6f756e74100118416d6f756e74000a002c5472616e7366657272656414011066726f6d000130543a3a4163636f756e744964000128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d496400011064657374000130543a3a4163636f756e744964000118616d6f756e74100118416d6f756e74000b00285570677261646553657414010c77686f000130543a3a4163636f756e744964000128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d49640001206e65775f6974656d100124543a3a4974656d49640001146c6576656c1001144c6576656c000c0020557067726164656414010c77686f000130543a3a4163636f756e744964000128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d49640001206e65775f6974656d100124543a3a4974656d4964000118616d6f756e74100118416d6f756e74000d002050726963655365742001147472616465100128543a3a5472616465496400010c77686f000130543a3a4163636f756e744964000128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d4964000118616d6f756e74100118416d6f756e74000128756e69745f707269636518013c42616c616e63654f663c542c20493e00012c73746172745f626c6f636bb001584f7074696f6e3c543a3a426c6f636b4e756d6265723e000124656e645f626c6f636bb001584f7074696f6e3c543a3a426c6f636b4e756d6265723e000e00284974656d426f756768741001147472616465100128543a3a5472616465496400010c77686f000130543a3a4163636f756e744964000118616d6f756e74100118416d6f756e740001386269645f756e69745f707269636518013c42616c616e63654f663c542c20493e000f002442756e646c655365741801147472616465100128543a3a5472616465496400010c77686f000130543a3a4163636f756e74496400011862756e646c65e0018842756e646c653c543a3a436f6c6c656374696f6e49642c20543a3a4974656d49643e000114707269636518013c42616c616e63654f663c542c20493e00012c73746172745f626c6f636bb001584f7074696f6e3c543a3a426c6f636b4e756d6265723e000124656e645f626c6f636bb001584f7074696f6e3c543a3a426c6f636b4e756d6265723e0010003042756e646c65426f756768740c01147472616465100128543a3a5472616465496400010c77686f000130543a3a4163636f756e7449640001246269645f707269636518013c42616c616e63654f663c542c20493e00110034547261646543616e63656c65640801147472616465100128543a3a5472616465496400010c77686f000130543a3a4163636f756e7449640012002c576973686c6973745365741801147472616465100128543a3a5472616465496400010c77686f000130543a3a4163636f756e744964000120776973686c697374e0018842756e646c653c543a3a436f6c6c656374696f6e49642c20543a3a4974656d49643e000114707269636518013c42616c616e63654f663c542c20493e00012c73746172745f626c6f636bb001584f7074696f6e3c543a3a426c6f636b4e756d6265723e000124656e645f626c6f636bb001584f7074696f6e3c543a3a426c6f636b4e756d6265723e00130038576973686c69737446696c6c65640c01147472616465100128543a3a5472616465496400010c77686f000130543a3a4163636f756e74496400012461736b5f707269636518013c42616c616e63654f663c542c20493e00140044436f6c6c656374696f6e52656d6f7665640c010c77686f000130543a3a4163636f756e74496400011067616d65100124543a3a47616d654964000128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640015001c537761705365741c01147472616465100128543a3a5472616465496400010c77686f000130543a3a4163636f756e744964000118736f75726365e0018842756e646c653c543a3a436f6c6c656374696f6e49642c20543a3a4974656d49643e0001207265717569726564e0018842756e646c653c543a3a436f6c6c656374696f6e49642c20543a3a4974656d49643e00012c6d617962655f7072696365e8015c4f7074696f6e3c42616c616e63654f663c542c20493e3e00012c73746172745f626c6f636bb001584f7074696f6e3c543a3a426c6f636b4e756d6265723e000124656e645f626c6f636bb001584f7074696f6e3c543a3a426c6f636b4e756d6265723e0016002c53776170436c61696d65640c01147472616465100128543a3a5472616465496400010c77686f000130543a3a4163636f756e74496400013c6d617962655f6269645f7072696365e8015c4f7074696f6e3c42616c616e63654f663c542c20493e3e0017002841756374696f6e5365741801147472616465100128543a3a5472616465496400010c77686f000130543a3a4163636f756e744964000118736f75726365e0018842756e646c653c543a3a436f6c6c656374696f6e49642c20543a3a4974656d49643e00012c6d617962655f7072696365e8015c4f7074696f6e3c42616c616e63654f663c542c20493e3e00012c73746172745f626c6f636bb001584f7074696f6e3c543a3a426c6f636b4e756d6265723e0001206475726174696f6e100138543a3a426c6f636b4e756d6265720018000c4269640c01147472616465100128543a3a5472616465496400010c77686f000130543a3a4163636f756e74496400010c62696418013c42616c616e63654f663c542c20493e0019003841756374696f6e436c61696d65640801147472616465100128543a3a547261646549640001246d617962655f626964ec019c4f7074696f6e3c28543a3a4163636f756e7449642c2042616c616e63654f663c542c20493e293e001a00184275795365742001147472616465100128543a3a5472616465496400010c77686f000130543a3a4163636f756e744964000128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d4964000118616d6f756e74100118416d6f756e74000128756e69745f707269636518013c42616c616e63654f663c542c20493e00012c73746172745f626c6f636bb001584f7074696f6e3c543a3a426c6f636b4e756d6265723e000124656e645f626c6f636bb001584f7074696f6e3c543a3a426c6f636b4e756d6265723e001b0034536574427579436c61696d65641001147472616465100128543a3a5472616465496400010c77686f000130543a3a4163636f756e744964000118616d6f756e74100118416d6f756e7400013861736b5f756e69745f707269636518013c42616c616e63654f663c542c20493e001c00444d696e696e67506f6f6c43726561746564100110706f6f6c100124543a3a506f6f6c496400010c77686f000130543a3a4163636f756e744964000124706f6f6c5f74797065f40120506f6f6c547970650001147461626c65f801944c6f6f745461626c653c543a3a436f6c6c656374696f6e49642c20543a3a4974656d49643e001d003c506f6f6c5365744d657461646174610c010c77686f000130543a3a4163636f756e744964000110706f6f6c100124543a3a506f6f6c496400011064617461b40178426f756e6465645665633c75382c20543a3a537472696e674c696d69743e001e0058506f6f6c5365744d65746164617461436c656172656408010c77686f000130543a3a4163636f756e744964000110706f6f6c100124543a3a506f6f6c4964001f0004a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909d8000002dc00dc1030676166695f737570706f72741067616d651474797065730c4e46540830436f6c6c656374696f6e49640110184974656d4964011000080128636f6c6c656374696f6e100130436f6c6c656374696f6e49640001106974656d1001184974656d49640000e0000002e400e41030676166695f737570706f72741067616d651474797065731c5061636b6167650830436f6c6c656374696f6e49640110184974656d49640110000c0128636f6c6c656374696f6e100130436f6c6c656374696f6e49640001106974656d1001184974656d4964000118616d6f756e74100118416d6f756e740000e804184f7074696f6e04045401180108104e6f6e6500000010536f6d650400180000010000ec04184f7074696f6e04045401f00108104e6f6e6500000010536f6d650400f00000010000f000000408001800f41030676166695f737570706f72741067616d6514747970657320506f6f6c547970650001081c44796e616d696300000018537461626c6500010000f8000002fc00fc1030676166695f737570706f72741067616d65147479706573104c6f6f740830436f6c6c656374696f6e49640110184974656d49640110000801246d617962655f6e6674010101844f7074696f6e3c4e46543c436f6c6c656374696f6e49642c204974656d49643e3e00011877656967687410010c7533320000010104184f7074696f6e04045401dc0108104e6f6e6500000010536f6d650400dc000001000005010c3c67616d655f72616e646f6d6e6573731870616c6c6574144576656e740404540001041c4e657753656564080130626c6f636b5f6e756d626572100144426c6f636b4e756d626572466f723c543e0001107365656404011053656564000004b84576656e742067656e657261746564207768656e2061206e6577207072696365206973207375626d69747465642e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a09090909010c3470616c6c65745f6661756365741870616c6c6574144576656e740404540001042c5472616e736665727265640c00000130543a3a4163636f756e7449640000000130543a3a4163636f756e744964000018013042616c616e63654f663c543e00000004a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a0909090d010c3070616c6c65745f63616368651870616c6c6574144576656e7408045400044900010004a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909110108306672616d655f73797374656d14506861736500010c384170706c7945787472696e736963040010010c7533320000003046696e616c697a6174696f6e00010038496e697469616c697a6174696f6e000200001501000002300019010000021d01001d0100000408101000210108306672616d655f73797374656d584c61737452756e74696d6555706772616465496e666f0000080130737065635f76657273696f6e2501014c636f6465633a3a436f6d706163743c7533323e000124737065635f6e616d652901016473705f72756e74696d653a3a52756e74696d65537472696e67000025010000061000290100000502002d010c306672616d655f73797374656d1870616c6c65741043616c6c0404540001201872656d61726b04011872656d61726b34011c5665633c75383e000010684d616b6520736f6d65206f6e2d636861696e2072656d61726b2e0034232320436f6d706c6578697479202d20604f28312960387365745f686561705f706167657304011470616765732c010c753634000104f853657420746865206e756d626572206f6620706167657320696e2074686520576562417373656d626c7920656e7669726f6e6d656e74277320686561702e207365745f636f6465040110636f646534011c5665633c75383e0002106453657420746865206e65772072756e74696d6520636f64652e0034232320436f6d706c657869747931012d20604f2843202b2053296020776865726520604360206c656e677468206f662060636f64656020616e642060536020636f6d706c6578697479206f66206063616e5f7365745f636f6465605c7365745f636f64655f776974686f75745f636865636b73040110636f646534011c5665633c75383e000310190153657420746865206e65772072756e74696d6520636f646520776974686f757420646f696e6720616e7920636865636b73206f662074686520676976656e2060636f6465602e0034232320436f6d706c65786974798c2d20604f2843296020776865726520604360206c656e677468206f662060636f6465602c7365745f73746f726167650401146974656d73310101345665633c4b657956616c75653e0004046853657420736f6d65206974656d73206f662073746f726167652e306b696c6c5f73746f726167650401106b657973390101205665633c4b65793e000504744b696c6c20736f6d65206974656d732066726f6d2073746f726167652e2c6b696c6c5f70726566697808011870726566697834010c4b657900011c7375626b65797310010c75333200061011014b696c6c20616c6c2073746f72616765206974656d7320776974682061206b657920746861742073746172747320776974682074686520676976656e207072656669782e0039012a2a4e4f54453a2a2a2057652072656c79206f6e2074686520526f6f74206f726967696e20746f2070726f7669646520757320746865206e756d626572206f66207375626b65797320756e6465723d0174686520707265666978207765206172652072656d6f76696e6720746f2061636375726174656c792063616c63756c6174652074686520776569676874206f6620746869732066756e6374696f6e2e4472656d61726b5f776974685f6576656e7404011872656d61726b34011c5665633c75383e000704a44d616b6520736f6d65206f6e2d636861696e2072656d61726b20616e6420656d6974206576656e742e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e3101000002350100350100000408343400390100000234003d010c306672616d655f73797374656d186c696d69747330426c6f636b5765696768747300000c0128626173655f626c6f636b2401185765696768740001246d61785f626c6f636b2401185765696768740001247065725f636c617373410101845065724469737061746368436c6173733c57656967687473506572436c6173733e000041010c346672616d655f737570706f7274206469737061746368405065724469737061746368436c617373040454014501000c01186e6f726d616c450101045400012c6f7065726174696f6e616c45010104540001246d616e6461746f72794501010454000045010c306672616d655f73797374656d186c696d6974733c57656967687473506572436c6173730000100138626173655f65787472696e7369632401185765696768740001346d61785f65787472696e736963490101384f7074696f6e3c5765696768743e0001246d61785f746f74616c490101384f7074696f6e3c5765696768743e0001207265736572766564490101384f7074696f6e3c5765696768743e0000490104184f7074696f6e04045401240108104e6f6e6500000010536f6d6504002400000100004d010c306672616d655f73797374656d186c696d6974732c426c6f636b4c656e677468000004010c6d6178510101545065724469737061746368436c6173733c7533323e000051010c346672616d655f737570706f7274206469737061746368405065724469737061746368436c6173730404540110000c01186e6f726d616c1001045400012c6f7065726174696f6e616c100104540001246d616e6461746f72791001045400005501082873705f776569676874733c52756e74696d6544625765696768740000080110726561642c010c75363400011477726974652c010c75363400005901082873705f76657273696f6e3852756e74696d6556657273696f6e0000200124737065635f6e616d652901013452756e74696d65537472696e67000124696d706c5f6e616d652901013452756e74696d65537472696e67000144617574686f72696e675f76657273696f6e10010c753332000130737065635f76657273696f6e10010c753332000130696d706c5f76657273696f6e10010c753332000110617069735d01011c4170697356656300014c7472616e73616374696f6e5f76657273696f6e10010c75333200013473746174655f76657273696f6e080108753800005d01040c436f77040454016101000400610100000061010000026501006501000004086901100069010000030800000008006d01000005040071010c306672616d655f73797374656d1870616c6c6574144572726f720404540001183c496e76616c6964537065634e616d650000081101546865206e616d65206f662073706563696669636174696f6e20646f6573206e6f74206d61746368206265747765656e207468652063757272656e742072756e74696d6550616e6420746865206e65772072756e74696d652e685370656356657273696f6e4e65656473546f496e63726561736500010841015468652073706563696669636174696f6e2076657273696f6e206973206e6f7420616c6c6f77656420746f206465637265617365206265747765656e207468652063757272656e742072756e74696d6550616e6420746865206e65772072756e74696d652e744661696c6564546f4578747261637452756e74696d6556657273696f6e00020cec4661696c656420746f2065787472616374207468652072756e74696d652076657273696f6e2066726f6d20746865206e65772072756e74696d652e0009014569746865722063616c6c696e672060436f72655f76657273696f6e60206f72206465636f64696e67206052756e74696d6556657273696f6e60206661696c65642e4c4e6f6e44656661756c74436f6d706f73697465000304fc537569636964652063616c6c6564207768656e20746865206163636f756e7420686173206e6f6e2d64656661756c7420636f6d706f7369746520646174612e3c4e6f6e5a65726f526566436f756e74000404350154686572652069732061206e6f6e2d7a65726f207265666572656e636520636f756e742070726576656e74696e6720746865206163636f756e742066726f6d206265696e67207075726765642e3043616c6c46696c7465726564000504d0546865206f726967696e2066696c7465722070726576656e74207468652063616c6c20746f20626520646973706174636865642e046c4572726f7220666f72207468652053797374656d2070616c6c657475010c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540130045300000400150101185665633c543e000079010c4070616c6c65745f74696d657374616d701870616c6c65741043616c6c0404540001040c73657404010c6e6f77280124543a3a4d6f6d656e7400003c54536574207468652063757272656e742074696d652e005501546869732063616c6c2073686f756c6420626520696e766f6b65642065786163746c79206f6e63652070657220626c6f636b2e2049742077696c6c2070616e6963206174207468652066696e616c697a6174696f6ed470686173652c20696620746869732063616c6c206861736e2774206265656e20696e766f6b656420627920746861742074696d652e0041015468652074696d657374616d702073686f756c642062652067726561746572207468616e207468652070726576696f7573206f6e652062792074686520616d6f756e742073706563696669656420627940604d696e696d756d506572696f64602e00d4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d7573742062652060496e686572656e74602e0034232320436f6d706c657869747931012d20604f2831296020284e6f7465207468617420696d706c656d656e746174696f6e73206f6620604f6e54696d657374616d7053657460206d75737420616c736f20626520604f283129602961012d20312073746f72616765207265616420616e6420312073746f72616765206d75746174696f6e2028636f64656320604f28312960292e202862656361757365206f6620604469645570646174653a3a74616b656020696e402020606f6e5f66696e616c697a656029d42d2031206576656e742068616e646c657220606f6e5f74696d657374616d705f736574602e204d75737420626520604f283129602e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e7d01083870616c6c65745f6772616e6470612c53746f726564537461746504044e01100110104c6976650000003050656e64696e6750617573650801307363686564756c65645f61741001044e00011464656c61791001044e000100185061757365640002003450656e64696e67526573756d650801307363686564756c65645f61741001044e00011464656c61791001044e000300008101083870616c6c65745f6772616e6470614c53746f72656450656e64696e674368616e676508044e0110144c696d697400001001307363686564756c65645f61741001044e00011464656c61791001044e0001406e6578745f617574686f7269746965738501016c426f756e646564417574686f726974794c6973743c4c696d69743e000118666f72636564b001244f7074696f6e3c4e3e000085010c4c626f756e6465645f636f6c6c656374696f6e73407765616b5f626f756e6465645f766563385765616b426f756e64656456656308045401800453000004007c01185665633c543e000089010c3870616c6c65745f6772616e6470611870616c6c65741043616c6c04045400010c4c7265706f72745f65717569766f636174696f6e08014865717569766f636174696f6e5f70726f6f668d0101bc426f783c45717569766f636174696f6e50726f6f663c543a3a486173682c20543a3a426c6f636b4e756d6265723e3e00013c6b65795f6f776e65725f70726f6f66b9010140543a3a4b65794f776e657250726f6f6600001009015265706f727420766f7465722065717569766f636174696f6e2f6d69736265686176696f722e2054686973206d6574686f642077696c6c2076657269667920746865f465717569766f636174696f6e2070726f6f6620616e642076616c69646174652074686520676976656e206b6579206f776e6572736869702070726f6f66f8616761696e73742074686520657874726163746564206f6666656e6465722e20496620626f7468206172652076616c69642c20746865206f6666656e63654477696c6c206265207265706f727465642e707265706f72745f65717569766f636174696f6e5f756e7369676e656408014865717569766f636174696f6e5f70726f6f668d0101bc426f783c45717569766f636174696f6e50726f6f663c543a3a486173682c20543a3a426c6f636b4e756d6265723e3e00013c6b65795f6f776e65725f70726f6f66b9010140543a3a4b65794f776e657250726f6f6600012409015265706f727420766f7465722065717569766f636174696f6e2f6d69736265686176696f722e2054686973206d6574686f642077696c6c2076657269667920746865f465717569766f636174696f6e2070726f6f6620616e642076616c69646174652074686520676976656e206b6579206f776e6572736869702070726f6f66f8616761696e73742074686520657874726163746564206f6666656e6465722e20496620626f7468206172652076616c69642c20746865206f6666656e63654477696c6c206265207265706f727465642e000d01546869732065787472696e736963206d7573742062652063616c6c656420756e7369676e656420616e642069742069732065787065637465642074686174206f6e6c791501626c6f636b20617574686f72732077696c6c2063616c6c206974202876616c69646174656420696e206056616c6964617465556e7369676e656460292c2061732073756368150169662074686520626c6f636b20617574686f7220697320646566696e65642069742077696c6c20626520646566696e6564206173207468652065717569766f636174696f6e247265706f727465722e306e6f74655f7374616c6c656408011464656c6179100138543a3a426c6f636b4e756d62657200016c626573745f66696e616c697a65645f626c6f636b5f6e756d626572100138543a3a426c6f636b4e756d6265720002303d014e6f74652074686174207468652063757272656e7420617574686f7269747920736574206f6620746865204752414e4450412066696e616c6974792067616467657420686173207374616c6c65642e006101546869732077696c6c2074726967676572206120666f7263656420617574686f7269747920736574206368616e67652061742074686520626567696e6e696e67206f6620746865206e6578742073657373696f6e2c20746f6101626520656e6163746564206064656c61796020626c6f636b7320616674657220746861742e20546865206064656c6179602073686f756c64206265206869676820656e6f75676820746f20736166656c7920617373756d654901746861742074686520626c6f636b207369676e616c6c696e672074686520666f72636564206368616e67652077696c6c206e6f742062652072652d6f7267656420652e672e203130303020626c6f636b732e5d0154686520626c6f636b2070726f64756374696f6e207261746520287768696368206d617920626520736c6f77656420646f776e2062656361757365206f662066696e616c697479206c616767696e67292073686f756c64510162652074616b656e20696e746f206163636f756e74207768656e2063686f6f73696e6720746865206064656c6179602e20546865204752414e44504120766f74657273206261736564206f6e20746865206e65775501617574686f726974792077696c6c20737461727420766f74696e67206f6e20746f70206f662060626573745f66696e616c697a65645f626c6f636b5f6e756d6265726020666f72206e65772066696e616c697a65644d01626c6f636b732e2060626573745f66696e616c697a65645f626c6f636b5f6e756d626572602073686f756c64206265207468652068696768657374206f6620746865206c61746573742066696e616c697a6564c4626c6f636b206f6620616c6c2076616c696461746f7273206f6620746865206e657720617574686f72697479207365742e00584f6e6c792063616c6c61626c6520627920726f6f742e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e8d01085073705f636f6e73656e7375735f6772616e6470614445717569766f636174696f6e50726f6f660804480130044e0110000801187365745f69642c0114536574496400013065717569766f636174696f6e9101014845717569766f636174696f6e3c482c204e3e00009101085073705f636f6e73656e7375735f6772616e6470613045717569766f636174696f6e0804480130044e011001081c507265766f7465040095010139016772616e6470613a3a45717569766f636174696f6e3c417574686f7269747949642c206772616e6470613a3a507265766f74653c482c204e3e2c0a417574686f726974795369676e61747572653e00000024507265636f6d6d69740400ad010141016772616e6470613a3a45717569766f636174696f6e3c417574686f7269747949642c206772616e6470613a3a507265636f6d6d69743c482c204e3e2c0a417574686f726974795369676e61747572653e000100009501084066696e616c6974795f6772616e6470613045717569766f636174696f6e0c084964018404560199010453019d0100100130726f756e645f6e756d6265722c010c7536340001206964656e7469747984010849640001146669727374a901011828562c2053290001187365636f6e64a901011828562c20532900009901084066696e616c6974795f6772616e6470611c507265766f74650804480130044e01100008012c7461726765745f68617368300104480001347461726765745f6e756d6265721001044e00009d010c5073705f636f6e73656e7375735f6772616e6470610c617070245369676e617475726500000400a1010148656432353531393a3a5369676e61747572650000a1010c1c73705f636f72651c65643235353139245369676e617475726500000400a50101205b75383b2036345d0000a501000003400000000800a9010000040899019d0100ad01084066696e616c6974795f6772616e6470613045717569766f636174696f6e0c0849640184045601b1010453019d0100100130726f756e645f6e756d6265722c010c7536340001206964656e7469747984010849640001146669727374b501011828562c2053290001187365636f6e64b501011828562c2053290000b101084066696e616c6974795f6772616e64706124507265636f6d6d69740804480130044e01100008012c7461726765745f68617368300104480001347461726765745f6e756d6265721001044e0000b50100000408b1019d0100b901081c73705f636f726510566f696400010000bd010c3870616c6c65745f6772616e6470611870616c6c6574144572726f7204045400011c2c50617573654661696c65640000080501417474656d707420746f207369676e616c204752414e445041207061757365207768656e2074686520617574686f72697479207365742069736e2774206c697665a42865697468657220706175736564206f7220616c72656164792070656e64696e67207061757365292e30526573756d654661696c65640001081101417474656d707420746f207369676e616c204752414e44504120726573756d65207768656e2074686520617574686f72697479207365742069736e277420706175736564a028656974686572206c697665206f7220616c72656164792070656e64696e6720726573756d65292e344368616e676550656e64696e67000204e8417474656d707420746f207369676e616c204752414e445041206368616e67652077697468206f6e6520616c72656164792070656e64696e672e1c546f6f536f6f6e000304bc43616e6e6f74207369676e616c20666f72636564206368616e676520736f20736f6f6e206166746572206c6173742e60496e76616c69644b65794f776e65727368697050726f6f66000404310141206b6579206f776e6572736869702070726f6f662070726f76696465642061732070617274206f6620616e2065717569766f636174696f6e207265706f727420697320696e76616c69642e60496e76616c696445717569766f636174696f6e50726f6f660005043101416e2065717569766f636174696f6e2070726f6f662070726f76696465642061732070617274206f6620616e2065717569766f636174696f6e207265706f727420697320696e76616c69642e584475706c69636174654f6666656e63655265706f727400060415014120676976656e2065717569766f636174696f6e207265706f72742069732076616c69642062757420616c72656164792070726576696f75736c79207265706f727465642e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909c1010c4c626f756e6465645f636f6c6c656374696f6e73407765616b5f626f756e6465645f766563385765616b426f756e64656456656308045401c501045300000400cd0101185665633c543e0000c5010c3c70616c6c65745f62616c616e6365731474797065732c42616c616e63654c6f636b041c42616c616e63650118000c01086964690101384c6f636b4964656e746966696572000118616d6f756e7418011c42616c616e636500011c726561736f6e73c901011c526561736f6e730000c9010c3c70616c6c65745f62616c616e6365731474797065731c526561736f6e7300010c0c466565000000104d6973630001000c416c6c00020000cd01000002c50100d1010c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401d501045300000400d90101185665633c543e0000d5010c3c70616c6c65745f62616c616e6365731474797065732c52657365727665446174610844526573657276654964656e7469666965720169011c42616c616e6365011800080108696469010144526573657276654964656e746966696572000118616d6f756e7418011c42616c616e63650000d901000002d50100dd010c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401e101045300000400e50101185665633c543e0000e1010c3c70616c6c65745f62616c616e636573147479706573204964416d6f756e740808496401a01c42616c616e63650118000801086964a001084964000118616d6f756e7418011c42616c616e63650000e501000002e10100e9010c3c70616c6c65745f62616c616e6365731870616c6c65741043616c6c080454000449000124507472616e736665725f616c6c6f775f646561746808011064657374ed0101504163636f756e7449644c6f6f6b75704f663c543e00011476616c7565f9010128543a3a42616c616e636500001cd45472616e7366657220736f6d65206c697175696420667265652062616c616e636520746f20616e6f74686572206163636f756e742e003501607472616e736665725f616c6c6f775f6465617468602077696c6c207365742074686520604672656542616c616e636560206f66207468652073656e64657220616e642072656365697665722e11014966207468652073656e6465722773206163636f756e742069732062656c6f7720746865206578697374656e7469616c206465706f736974206173206120726573756c74b06f6620746865207472616e736665722c20746865206163636f756e742077696c6c206265207265617065642e001501546865206469737061746368206f726967696e20666f7220746869732063616c6c206d75737420626520605369676e65646020627920746865207472616e736163746f722e587365745f62616c616e63655f646570726563617465640c010c77686fed0101504163636f756e7449644c6f6f6b75704f663c543e0001206e65775f66726565f9010128543a3a42616c616e63650001306f6c645f7265736572766564f9010128543a3a42616c616e636500011855015365742074686520726567756c61722062616c616e6365206f66206120676976656e206163636f756e743b20697420616c736f2074616b657320612072657365727665642062616c616e6365206275742074686973ec6d757374206265207468652073616d6520617320746865206163636f756e7427732063757272656e742072657365727665642062616c616e63652e00b0546865206469737061746368206f726967696e20666f7220746869732063616c6c2069732060726f6f74602e0009015741524e494e473a20546869732063616c6c206973204445505245434154454421205573652060666f7263655f7365745f62616c616e63656020696e73746561642e38666f7263655f7472616e736665720c0118736f75726365ed0101504163636f756e7449644c6f6f6b75704f663c543e00011064657374ed0101504163636f756e7449644c6f6f6b75704f663c543e00011476616c7565f9010128543a3a42616c616e6365000208610145786163746c7920617320607472616e736665725f616c6c6f775f6465617468602c2065786365707420746865206f726967696e206d75737420626520726f6f7420616e642074686520736f75726365206163636f756e74446d6179206265207370656369666965642e4c7472616e736665725f6b6565705f616c69766508011064657374ed0101504163636f756e7449644c6f6f6b75704f663c543e00011476616c7565f9010128543a3a42616c616e6365000318590153616d6520617320746865205b607472616e736665725f616c6c6f775f6465617468605d2063616c6c2c206275742077697468206120636865636b207468617420746865207472616e736665722077696c6c206e6f74606b696c6c20746865206f726967696e206163636f756e742e00e8393925206f66207468652074696d6520796f752077616e74205b607472616e736665725f616c6c6f775f6465617468605d20696e73746561642e00f05b607472616e736665725f616c6c6f775f6465617468605d3a207374727563742e50616c6c65742e68746d6c236d6574686f642e7472616e73666572307472616e736665725f616c6c08011064657374ed0101504163636f756e7449644c6f6f6b75704f663c543e0001286b6565705f616c697665ac0110626f6f6c00043c05015472616e736665722074686520656e74697265207472616e7366657261626c652062616c616e63652066726f6d207468652063616c6c6572206163636f756e742e0059014e4f54453a20546869732066756e6374696f6e206f6e6c7920617474656d70747320746f207472616e73666572205f7472616e7366657261626c655f2062616c616e6365732e2054686973206d65616e7320746861746101616e79206c6f636b65642c2072657365727665642c206f72206578697374656e7469616c206465706f7369747320287768656e20606b6565705f616c6976656020697320607472756560292c2077696c6c206e6f742062655d017472616e7366657272656420627920746869732066756e6374696f6e2e20546f20656e73757265207468617420746869732066756e6374696f6e20726573756c747320696e2061206b696c6c6564206163636f756e742c4501796f75206d69676874206e65656420746f207072657061726520746865206163636f756e742062792072656d6f76696e6720616e79207265666572656e636520636f756e746572732c2073746f72616765406465706f736974732c206574632e2e2e00c0546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205369676e65642e00a02d206064657374603a2054686520726563697069656e74206f6620746865207472616e736665722e59012d20606b6565705f616c697665603a204120626f6f6c65616e20746f2064657465726d696e652069662074686520607472616e736665725f616c6c60206f7065726174696f6e2073686f756c642073656e6420616c6c4d0120206f66207468652066756e647320746865206163636f756e74206861732c2063617573696e67207468652073656e646572206163636f756e7420746f206265206b696c6c6564202866616c7365292c206f72590120207472616e736665722065766572797468696e6720657863657074206174206c6561737420746865206578697374656e7469616c206465706f7369742c2077686963682077696c6c2067756172616e74656520746f9c20206b656570207468652073656e646572206163636f756e7420616c697665202874727565292e3c666f7263655f756e7265736572766508010c77686fed0101504163636f756e7449644c6f6f6b75704f663c543e000118616d6f756e74180128543a3a42616c616e636500050cb0556e7265736572766520736f6d652062616c616e63652066726f6d2061207573657220627920666f7263652e006c43616e206f6e6c792062652063616c6c656420627920524f4f542e40757067726164655f6163636f756e747304010c77686ffd0101445665633c543a3a4163636f756e7449643e0006207055706772616465206120737065636966696564206163636f756e742e00742d20606f726967696e603a204d75737420626520605369676e6564602e902d206077686f603a20546865206163636f756e7420746f2062652075706772616465642e005501546869732077696c6c20776169766520746865207472616e73616374696f6e20666565206966206174206c6561737420616c6c2062757420313025206f6620746865206163636f756e7473206e656564656420746f410162652075706772616465642e20285765206c657420736f6d65206e6f74206861766520746f206265207570677261646564206a75737420696e206f7264657220746f20616c6c6f7720666f72207468655c706f73736962696c696c7479206f6620636875726e292e207472616e7366657208011064657374ed0101504163636f756e7449644c6f6f6b75704f663c543e00011476616c7565f9010128543a3a42616c616e636500070c3101416c69617320666f7220607472616e736665725f616c6c6f775f6465617468602c2070726f7669646564206f6e6c7920666f72206e616d652d7769736520636f6d7061746962696c6974792e0001015741524e494e473a2044455052454341544544212057696c6c2062652072656c656173656420696e20617070726f78696d6174656c792033206d6f6e7468732e44666f7263655f7365745f62616c616e636508010c77686fed0101504163636f756e7449644c6f6f6b75704f663c543e0001206e65775f66726565f9010128543a3a42616c616e636500080cac5365742074686520726567756c61722062616c616e6365206f66206120676976656e206163636f756e742e00b0546865206469737061746368206f726967696e20666f7220746869732063616c6c2069732060726f6f74602e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632eed010c2873705f72756e74696d65306d756c746961646472657373304d756c74694164647265737308244163636f756e7449640100304163636f756e74496e64657801a0011408496404000001244163636f756e74496400000014496e6465780400f10101304163636f756e74496e6465780001000c526177040034011c5665633c75383e0002002441646472657373333204000401205b75383b2033325d000300244164647265737332300400f50101205b75383b2032305d00040000f101000006a000f501000003140000000800f9010000061800fd01000002000001020c3c70616c6c65745f62616c616e6365731870616c6c6574144572726f720804540004490001283856657374696e6742616c616e63650000049c56657374696e672062616c616e636520746f6f206869676820746f2073656e642076616c75652e544c69717569646974795265737472696374696f6e73000104c84163636f756e74206c6971756964697479207265737472696374696f6e732070726576656e74207769746864726177616c2e4c496e73756666696369656e7442616c616e63650002047842616c616e636520746f6f206c6f7720746f2073656e642076616c75652e484578697374656e7469616c4465706f736974000304ec56616c756520746f6f206c6f7720746f20637265617465206163636f756e742064756520746f206578697374656e7469616c206465706f7369742e34457870656e646162696c697479000404905472616e736665722f7061796d656e7420776f756c64206b696c6c206163636f756e742e5c4578697374696e6756657374696e675363686564756c65000504cc412076657374696e67207363686564756c6520616c72656164792065786973747320666f722074686973206163636f756e742e2c446561644163636f756e740006048c42656e6566696369617279206163636f756e74206d757374207072652d65786973742e3c546f6f4d616e795265736572766573000704b84e756d626572206f66206e616d65642072657365727665732065786365656420604d61785265736572766573602e30546f6f4d616e79486f6c6473000804884e756d626572206f6620686f6c64732065786365656420604d6178486f6c6473602e38546f6f4d616e79467265657a6573000904984e756d626572206f6620667265657a65732065786365656420604d6178467265657a6573602e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a09090905020c3473705f61726974686d657469632c66697865645f706f696e7424466978656455313238000004001801107531323800000902086870616c6c65745f7472616e73616374696f6e5f7061796d656e742052656c6561736573000108245631416e6369656e74000000085632000100000d020c2c70616c6c65745f7375646f1870616c6c65741043616c6c040454000110107375646f04011063616c6c1102017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000018350141757468656e7469636174657320746865207375646f206b657920616e64206469737061746368657320612066756e6374696f6e2063616c6c20776974682060526f6f7460206f726967696e2e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e0034232320436f6d706c65786974791c2d204f2831292e547375646f5f756e636865636b65645f77656967687408011063616c6c1102017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000118776569676874240118576569676874000120350141757468656e7469636174657320746865207375646f206b657920616e64206469737061746368657320612066756e6374696f6e2063616c6c20776974682060526f6f7460206f726967696e2e2d01546869732066756e6374696f6e20646f6573206e6f7420636865636b2074686520776569676874206f66207468652063616c6c2c20616e6420696e737465616420616c6c6f777320746865b05375646f207573657220746f20737065636966792074686520776569676874206f66207468652063616c6c2e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e0034232320436f6d706c65786974791c2d204f2831292e1c7365745f6b657904010c6e6577ed0101504163636f756e7449644c6f6f6b75704f663c543e00021c5d0141757468656e74696361746573207468652063757272656e74207375646f206b657920616e6420736574732074686520676976656e204163636f756e7449642028606e6577602920617320746865206e6577207375646f106b65792e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e0034232320436f6d706c65786974791c2d204f2831292e1c7375646f5f617308010c77686fed0101504163636f756e7449644c6f6f6b75704f663c543e00011063616c6c1102017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00031c4d0141757468656e7469636174657320746865207375646f206b657920616e64206469737061746368657320612066756e6374696f6e2063616c6c207769746820605369676e656460206f726967696e2066726f6d406120676976656e206163636f756e742e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e0034232320436f6d706c65786974791c2d204f2831292e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e1102083467616d65335f72756e74696d652c52756e74696d6543616c6c0001201853797374656d04002d0101ad0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c53797374656d2c2052756e74696d653e0000002454696d657374616d700400790101b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c54696d657374616d702c2052756e74696d653e0002001c4772616e6470610400890101b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4772616e6470612c2052756e74696d653e0004002042616c616e6365730400e90101b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c42616c616e6365732c2052756e74696d653e000500105375646f04000d0201a50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c5375646f2c2052756e74696d653e0007001047616d650400150201a50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c47616d652c2052756e74696d653e0009003847616d6552616e646f6d6e6573730400350201cd0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c47616d6552616e646f6d6e6573732c2052756e74696d653e000a00184661756365740400390201ad0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4661756365742c2052756e74696d653e000b000015020c2c70616c6c65745f67616d651870616c6c65741043616c6c0804540004490001c02c6372656174655f67616d6504011461646d696eed0101504163636f756e7449644c6f6f6b75704f663c543e00002c484372656174652061206e65772067616d652e00584f726967696e206d757374206265205369676e65642e002901496620746865206f726967696e206973205369676e65642c207468656e2066756e6473206f66207369676e6572206172652072657365727665643a206047616d654465706f736974602e00842d206061646d696e603a207468652061646d696e206f66207468652067616d652e0050456d697473206047616d6543726561746564602e00385765696768743a20604f28312960586372656174655f67616d655f636f6c6c656374696f6e04011067616d65100124543a3a47616d65496400012c80437265617465206120636f6c6c656374696f6e20696e207468652067616d652e0021014f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c64206265207468652041646d696e2074686520746865206067616d65602e004101496620746865206f726967696e206973205369676e65642c207468656e2066756e6473206f66207369676e6572206172652072657365727665643a2060436f6c6c656374696f6e4465706f736974602e00582d206067616d65603a207468652067616d652069642e0068456d6974732060436f6c6c656374696f6e43726561746564602e00385765696768743a20604f28312960446372656174655f636f6c6c656374696f6e04011461646d696eed0101504163636f756e7449644c6f6f6b75704f663c543e00023c604372656174652061206e657720636f6c6c656374696f6e2e001d0154686973206e657720636f6c6c656374696f6e20686173206e6f206974656d7320696e697469616c6c7920616e6420697473206f776e657220697320746865206f726967696e2e002501546865206f726967696e206d757374206265205369676e656420616e64207468652073656e646572206d75737420686176652073756666696369656e742066756e647320667265652e00c460436f6c6c656374696f6e4465706f736974602066756e6473206f662073656e646572206172652072657365727665642e002c506172616d65746572733a45012d206061646d696e603a205468652061646d696e206f66207468697320636f6c6c656374696f6e2e205468652061646d696e2069732074686520696e697469616c2061646472657373206f662065616368986d656d626572206f662074686520636f6c6c656374696f6e27732061646d696e207465616d2e0068456d6974732060436f6c6c656374696f6e43726561746564602e00385765696768743a20604f28312960447365745f6163636570745f616464696e6708011067616d65100124543a3a47616d654964000128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e4964000320d453657420616363657074616e6365206f66206f776e65727368697020666f72206120706172746963756c6172206163636f756e742e002d014f726967696e206d75737420626520605369676e65646020616e64207468652073656e6465722073686f756c64206265207468652041646d696e206f662060636f6c6c656374696f6e602e00482d206067616d65603a2047616d652049442e782d2060636f6c6c656374696f6e603a20436f6c6c656374696f6e2049442e0070456d6974732060416464696e67416363657074616e6365536574602e4c6164645f67616d655f636f6c6c656374696f6e08011067616d65100124543a3a47616d654964000128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e496400042c74416464206120636f6c6c656374696f6e20746f207468652067616d652e002d01546865206f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c64206265207468652041646d696e206f6620746865206067616d65602e002c506172616d65746572733a482d206067616d65603a2047616d652049442e782d2060636f6c6c656374696f6e603a20436f6c6c656374696f6e2049442e0060456d6974732060436f6c6c656374696f6e4164646564602e00385765696768743a20604f283129602c6372656174655f6974656d0c0128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d49640001306d617962655f737570706c79b0012c4f7074696f6e3c7533323e000530f443726561746520616e206365727461696e20616d6f756e74206f66206974656d20666f72206120706172746963756c617220636f6c6c656374696f6e2e003501546865206f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c64206265207468652041646d696e206f662060636f6c6c656374696f6e602e00e02d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e206f6620746865206974656d20746f206265206d696e7465642ea02d20606974656d603a20416e206964656e746966696572206f6620746865206e6577206974656d2e602d2060636f6e666967603a204974656d20436f6e6669672e09012d20606d617962655f737570706c79603a204974656d20737570706c792c204e6f6e6520696e646963617465732074686520696e66696e69746520737570706c792e00a8456d69747320604974656d4372656174656460206576656e74207768656e207375636365737366756c2e00385765696768743a20604f28312960286164645f737570706c790c0128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d4964000118616d6f756e74100118416d6f756e740006340039014f726967696e206d757374206265207369676e656420616e642068617665207065726d697373696f6e2e204974656d277320737570706c79206d757374206e6f7420626520696e66696e6974652e00302320506172616d657465727300b42d20606f726967696e603a205369676e6564206f726967696e206f6620746865207472616e73616374696f6e2eb42d2060636f6c6c656374696f6e603a204964656e746966696572206f662074686520636f6c6c656374696f6e2e842d20606974656d603a204964656e746966696572206f6620746865206974656d2edc2d2060616d6f756e74603a20416d6f756e7420746f2061646420746f2062616c616e636520616e642066696e69746520737570706c792e00a0456d69747320604974656d416464656460206576656e74207768656e207375636365737366756c2e00385765696768743a20604f28312960106275726e0c0128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d4964000118616d6f756e74100118416d6f756e74000830504275726e20616d6f756e74206f66206974656d2e005d01546865206f726967696e206d75737420636f6e666f726d20746f2060466f7263654f726967696e60206f72206d757374206265205369676e656420616e6420746865207369676e696e67206163636f756e74206d757374ec626520746865206f776e6572206f662074686520606974656d6020616e64206861732073756666696369656e74206974656d2062616c616e63652e00e02d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e206f6620746865206974656d20746f206265206275726e65642e802d20606974656d603a20546865206974656d20746f206265206275726e65642eb02d2060616d6f756e74603a2054686520616d6f756e74206f66206974656d20746f206265206275726e65642e003c456d69747320604275726e6564602e00385765696768743a20604f28312960207472616e73666572100128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d496400011064657374ed0101504163636f756e7449644c6f6f6b75704f663c543e000118616d6f756e74100118416d6f756e7400093835015472616e736665727320612073706563696669656420616d6f756e74206f6620616e206974656d206265747765656e206163636f756e74732077697468696e206120636f6c6c656374696f6e2e00302320506172616d657465727300e42d20606f726967696e603a204f726967696e206d757374206265207369676e65642c20696e6469636174696e67207468652073656e6465722e982d2060636f6c6c656374696f6e603a20436f6c6c656374696f6e206964656e7469666965722e682d20606974656d603a204974656d206964656e7469666965722e942d206064657374603a2044657374696e6174696f6e206163636f756e74206c6f6f6b75702eac2d2060616d6f756e74603a20416d6f756e74206f6620746865206974656d20746f207472616e736665722e000050456d69747320605472616e73666572726564602e00385765696768743a20604f28312960407365745f757067726164655f6974656d1c0128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d49640001206e65775f6974656d100124543a3a4974656d4964000118636f6e666967190201284974656d436f6e66696700011064617461b40178426f756e6465645665633c75382c20543a3a537472696e674c696d69743e0001146c6576656c1001144c6576656c00010c66656518013c42616c616e63654f663c542c20493e000a406853657420757067726164652072756c6520666f72206974656d2e0015014f726967696e206d757374206265205369676e656420616e64207369676e65722073686f756c64206265207468652041646d696e206f662060636f6c6c656374696f6e602e0028417267756d656e74733a09012d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e206f6620746865206974656d20746f20626520757067726164652d72756c65207365742ea82d20606974656d603a20546865206974656d20746f20626520757067726164652d72756c65207365742eb02d20606e65775f6974656d603a20416e206964656e746966696572206f6620746865206e6577206974656d2e982d2060636f6e666967603a204974656d20636f6e666967206f6620606e65775f6974656d602e782d206064617461603a20606e65775f6974656d60206d657461646174612e642d20606c6576656c603a2055706772616465206c6576656c2e542d2060666565603a2055706772616465206665652e004c456d697473206055706772616465536574602e00385765696768743a20604f2831296030757067726164655f6974656d0c0128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d4964000118616d6f756e74100118416d6f756e74000b388055706772616465206365727461696e206e756d626572206f66206974656d732e005101546865206f726967696e206d757374206265207369676e656420616e6420746865207369676e6572206d757374206861766520612073756666696369656e742060616d6f756e7460206f6620606974656d73602e00d45369676e6572206d75737420706179206066656560202a2060616d6f756e746020746f207570677261646520746865206974656d2e0028417267756d656e74733ae82d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e206f6620746865206974656d20746f2062652075706772616465642e882d20606974656d603a20546865206974656d20746f2062652075706772616465642ec02d2060616d6f756e74603a2054686520616d6f756e74206f6620606974656d6020746f2062652075706772616465642e0044456d69747320605570677261646564602e00385765696768743a20604f28312960247365745f707269636510011c7061636b616765e4018c5061636b6167653c543a3a436f6c6c656374696f6e49642c20543a3a4974656d49643e000128756e69745f707269636518013c42616c616e63654f663c542c20493e00012c73746172745f626c6f636bb001584f7074696f6e3c543a3a426c6f636b4e756d6265723e000124656e645f626c6f636bb001584f7074696f6e3c543a3a426c6f636b4e756d6265723e000d34ac5365742074686520707269636520666f72204e4654732077697468696e206120636f6c6c656374696f6e2e00e84f726967696e206d757374206265205369676e656420616e64206d75737420626520746865206f776e6572206f662074686520606974656d602e0019012d20607061636b616765603a2061206e756d626572206f6620616e206974656d20696e206120636f6c6c656374696f6e20746f207365742074686520707269636520666f722ea02d2060756e69745f7072696365603a2054686520707269636520666f722065616368206974656d2e4d012d206073746172745f626c6f636b603a2054686520626c6f636b20746f2073746172742073657474696e67207468652070726963652c20604e6f6e656020696e64696361746573207468652063757272656e74202020626c6f636b2e2d012d2060656e645f626c6f636b603a2054686520626c6f636b20746f20656e642073657474696e67207468652070726963652c20604e6f6e656020696e64696361746573206e6f20656e642e0044456d69747320605072696365536574602e00385765696768743a20604f28312960206275795f6974656d0c01147472616465100128543a3a54726164654964000118616d6f756e74100118416d6f756e740001246269645f707269636518013c42616c616e63654f663c542c20493e000e30b4427579206365727461696e206e756d626572206f66206974656d732066726f6d20607365745f7072696365602e00584f726967696e206d757374206265205369676e65642e00882d20607472616465603a20546865207365745f70726963652074726164652069642e8c2d2060616d6f756e74603a204e756d626572206f66206974656d7320746f206275792e35012d20606269645f7072696365603a2042696420666f722065616368206974656d2c20606269645f707269636560206d75737420626520657175616c20746f206f7220686967686572207468616e3c20206070726963655f756e6974602e004c456d69747320604974656d426f75676874602e00385765696768743a20604f28312960346164645f7365745f70726963650801147472616465100128543a3a54726164654964000118737570706c79e4018c5061636b6167653c543a3a436f6c6c656374696f6e49642c20543a3a4974656d49643e000f20bc416464206d6f7265206974656d7320746f207365742074686520707269636520696e20607365745f7072696365602e00ec4f726967696e206d757374206265205369676e656420616e64206d75737420626520746865206f776e6572206f662074686520607472616465602e00882d20607472616465603a20546865207365745f70726963652074726164652069642eb02d2060737570706c79603a20546865206e756d626572206f66206974656d7320746f2062652061646465642e00385765696768743a20604f28312960247365745f6f7264657210011c7061636b616765e4018c5061636b6167653c543a3a436f6c6c656374696f6e49642c20543a3a4974656d49643e000128756e69745f707269636518013c42616c616e63654f663c542c20493e00012c73746172745f626c6f636bb001584f7074696f6e3c543a3a426c6f636b4e756d6265723e000124656e645f626c6f636bb001584f7074696f6e3c543a3a426c6f636b4e756d6265723e001d3880536574207570206120707572636861736520666f7220607061636b616765602e00e8497420697320706f737369626c6520746f20747261646520666f72206120736d616c6c2070617274206f662074686520607061636b616765602e00584f726967696e206d757374206265205369676e65642e00f42d20607061636b616765603a2041206e756d626572206f6620616e206974656d20696e206120636f6c6c656374696f6e2077616e7420746f206275792e11012d2060756e69745f7072696365603a20546865207072696365206f662065616368206974656d207468652073656e6465722069732077696c6c696e6720746f207061792eb02d206073746172745f626c6f636b603a2054686520626c6f636b20746f20737461727420736574206275792ea02d2060656e645f626c6f636b603a2054686520626c6f636b20746f20656e6420736574206275792e003c456d6974732060427579536574602e00385765696768743a20604f283129602473656c6c5f6974656d0c01147472616465100128543a3a54726164654964000118616d6f756e74100118416d6f756e7400012461736b5f707269636518013c42616c616e63654f663c542c20493e001e2cc053656c6c20e2808be2808b60616d6f756e7460206f6620746865206974656d20666f7220607365745f6f72646572602e00584f726967696e206d757374206265205369676e65642e00882d20607472616465603a20546865207365745f6f726465722074726164652069642ea02d2060616d6f756e74603a2054686520616d6f756e74206f66206974656d7320746f2073656c6c2eec2d206061736b5f7072696365603a205468652070726963652074686174207468652073656e6465722077696c6c696e6720746f206163636570742e003c456d6974732060427579536574602e00385765696768743a20604f28312960287365745f62756e646c6510011862756e646c65e0018842756e646c653c543a3a436f6c6c656374696f6e49642c20543a3a4974656d49643e000114707269636518013c42616c616e63654f663c542c20493e00012c73746172745f626c6f636bb001584f7074696f6e3c543a3a426c6f636b4e756d6265723e000124656e645f626c6f636bb001584f7074696f6e3c543a3a426c6f636b4e756d6265723e0010347c5365742074686520707269636520666f7220746865206062756e646c65602e00f04f726967696e206d757374206265205369676e656420616e64206d75737420626520746865206f776e6572206f6620746865206062756e646c65602e0041012d206062756e646c65603a20412067726f7570206f66206974656d73206d61792062652066726f6d20646966666572656e7420636f6c6c656374696f6e7320746f2073657420707269636520666f722e882d20607072696365603a2054686520707269636520746865206062756e646c65602e4d012d206073746172745f626c6f636b603a2054686520626c6f636b20746f2073746172742073657474696e67207468652070726963652c20604e6f6e656020696e64696361746573207468652063757272656e74202020626c6f636b2e2d012d2060656e645f626c6f636b603a2054686520626c6f636b20746f20656e642073657474696e67207468652070726963652c20604e6f6e656020696e64696361746573206e6f20656e642e0048456d697473206042756e646c65536574602e00385765696768743a20604f28312960286275795f62756e646c650801147472616465100128543a3a547261646549640001246269645f707269636518013c42616c616e63654f663c542c20493e0011287c42757920612062756e646c652066726f6d20607365745f62756e646c65602e00584f726967696e206d757374206265205369676e65642e007c2d20607472616465603a207365745f62756e646c652074726164652069642ed82d20606269645f7072696365603a20546865207072696365207468652073656e6465722069732077696c6c696e6720746f207061792e0048456d697473206042756e646c65536574602e00385765696768743a20604f283129603063616e63656c5f74726164650801147472616465100128543a3a5472616465496400012874726164655f7479706525020124547261646554797065001228b443616e63656c206120747261646520696e206074726164655f747970656020627920696420607472616465602e00e44f726967696e206d757374206265205369676e656420616e64207369676e6572206d75737420626520746865207472616465206f776e65722e00502d20607472616465603a2054726164652069642e6c2d206074726164655f74797065603a20547261646520747970652e0058456d6974732060547261646543616e63656c6564602e00385765696768743a20604f28312960306f726465725f62756e646c6510011862756e646c65e0018842756e646c653c543a3a436f6c6c656374696f6e49642c20543a3a4974656d49643e000114707269636518013c42616c616e63654f663c542c20493e00012c73746172745f626c6f636bb001584f7074696f6e3c543a3a426c6f636b4e756d6265723e000124656e645f626c6f636bb001584f7074696f6e3c543a3a426c6f636b4e756d6265723e0013307c536574207570206120707572636861736520666f72206062756e646c65602e00584f726967696e206d757374206265205369676e65642e0031012d206062756e646c65603a2020412067726f7570206f66206974656d73206d61792062652066726f6d20646966666572656e7420636f6c6c656374696f6e732077616e7420746f206275792ec82d20607072696365603a20546865207072696365207468652073656e6465722069732077696c6c696e6720746f207061792e55012d206073746172745f626c6f636b603a2054686520626c6f636b20746f2073746172742073657420776973686c6973742c20604e6f6e656020696e64696361746573207468652063757272656e7420626c6f636b2e19012d2060656e645f626c6f636b603a2054686520626c6f636b20746f20656e642073657420776973686c6973742c20604e6f6e656020696e64696361746573206e6f20656e642e0050456d6974732060576973686c697374536574602e00385765696768743a20604f283129602c73656c6c5f62756e646c650801147472616465100128543a3a5472616465496400012461736b5f707269636518013c42616c616e63654f663c542c20493e0014288c53656c6c207468652062756e646c6520666f7220606f726465725f62756e646c65602e00584f726967696e206d757374206265205369676e65642e00982d20607472616465603a2020546865206f726465725f62756e646c652074726164652069642ee42d206061736b5f7072696365603a20546865207072696365207468652073656e6465722069732077696c6c696e6720746f206163636570742e005c456d6974732060576973686c69737446696c6c6564602e00385765696768743a20604f283129604472656d6f76655f636f6c6c656374696f6e08011067616d65100124543a3a47616d654964000128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640015288052656d6f7665206120636f6c6c656374696f6e20696e207468652067616d652e003d014f726967696e206d757374206265205369676e656420616e64207369676e65722073686f756c64206265207468652041646d696e206f66207468652067616d65206f7220636f6c6c656374696f6e2e005c2d206067616d65603a20205468652067616d652069642e842d206061736b5f7072696365603a2054686520636f6c6c656374696f6e2069642e0068456d6974732060436f6c6c656374696f6e52656d6f766564602e00385765696768743a20604f28312960486c6f636b5f6974656d5f7472616e73666572080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d496400162cec446973616c6c6f77206675727468657220756e70726976696c65676564207472616e73666572206f72207472616465206f6620616e206974656d2ed453696d706c792072652d63616c6c20606c6f636b5f6974656d5f7472616e7366657260206f66206070616c6c65742d6e667473602e003d014f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c642062652074686520467265657a6572206f66207468652060636f6c6c656374696f6e602e00e42d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e206f6620746865206974656d20746f206265206368616e6765642eb82d20606974656d603a20546865206974656d20746f206265636f6d65206e6f6e2d7472616e7366657261626c652e006c456d69747320604974656d5472616e736665724c6f636b6564602e00385765696768743a20604f2831296050756e6c6f636b5f6974656d5f7472616e73666572080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d496400172ca852652d616c6c6f7720756e70726976696c65676564207472616e73666572206f6620616e206974656d2edc53696d706c792072652d63616c6c2060756e6c6f636b5f6974656d5f7472616e7366657260206f66206070616c6c65742d6e667473602e003d014f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c642062652074686520467265657a6572206f66207468652060636f6c6c656374696f6e602e00e42d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e206f6620746865206974656d20746f206265206368616e6765642ea82d20606974656d603a20546865206974656d20746f206265636f6d65207472616e7366657261626c652e0074456d69747320604974656d5472616e73666572556e6c6f636b6564602e00385765696768743a20604f283129602c6372656174655f73776170140118736f75726365e0018842756e646c653c543a3a436f6c6c656374696f6e49642c20543a3a4974656d49643e0001207265717569726564e0018842756e646c653c543a3a436f6c6c656374696f6e49642c20543a3a4974656d49643e00012c6d617962655f7072696365e8015c4f7074696f6e3c42616c616e63654f663c542c20493e3e00012c73746172745f626c6f636bb001584f7074696f6e3c543a3a426c6f636b4e756d6265723e000124656e645f626c6f636bb001584f7074696f6e3c543a3a426c6f636b4e756d6265723e001834b85365742061207377617020746f2065786368616e67652060736f757263656020746f20607265717569726564602e000d014f726967696e206d757374206265205369676e656420616e64207468652073656e646572206d75737420626520746865206f776e6572206f662060736f75726365602e00582d2060736f75726365603a2042756e646c6520696e2e642d20607265717569726564603a2042756e646c65206f75742efc2d20606d617962655f7072696365603a204d617962652074686520707269636520746861742073656e6465722077696c6c696e6720746f206163636570742e45012d206073746172745f626c6f636b603a2054686520626c6f636b20746f2073746172742073657420737761702c20604e6f6e656020696e64696361746573207468652063757272656e7420626c6f636b2e09012d2060656e645f626c6f636b603a2054686520626c6f636b20746f20656e642073657420737761702c20604e6f6e656020696e64696361746573206e6f20656e642e0040456d697473206053776170536574602e00385765696768743a20604f28312960246d616b655f737761700801147472616465100128543a3a5472616465496400013c6d617962655f6269645f7072696365e8015c4f7074696f6e3c42616c616e63654f663c542c20493e3e0019288c4d616b6520616e2065786368616e676520666f7220606372656174655f73776170602e00584f726967696e206d757374206265205369676e65642e00902d20607472616465603a20546865206372656174655f737761702074726164652069642ee42d20606d617962655f6269645f7072696365603a204d6179626520612070726963652073656e6465722077696c6c696e6720746f207061792e0050456d697473206053776170436c61696d6564602e00385765696768743a20604f283129602c7365745f61756374696f6e100118736f75726365e0018842756e646c653c543a3a436f6c6c656374696f6e49642c20543a3a4974656d49643e00012c6d617962655f7072696365e8015c4f7074696f6e3c42616c616e63654f663c542c20493e3e00012c73746172745f626c6f636bb001584f7074696f6e3c543a3a426c6f636b4e756d6265723e0001206475726174696f6e100138543a3a426c6f636b4e756d626572001a347843726561746520612061756374696f6e20666f722060736f75726365602e000d014f726967696e206d757374206265205369676e656420616e64207369676e6572206d75737420626520746865206f776e6572206f66207468652060736f75726365602e94546865206c617374206269646465722077696c6c2077696e207468652061756374696f6e2e008c2d2060736f75726365603a205468652062756e646c6520666f722061756374696f6e2e942d20606d617962655f7072696365603a204d617962652061206d696e696d756d206269642e51012d206073746172745f626c6f636b603a2054686520626c6f636b20746f207374617274207468652061756374696f6e2c20604e6f6e656020696e64696361746573207468652063757272656e7420626c6f636b2e2d012d20606475726174696f6e603a20546865206475726174696f6e206f66207468652061756374696f6e206d6561737572656420627920746865206e756d626572206f6620626c6f636b732e004c456d697473206041756374696f6e536574602e00385765696768743a20604f283129602c6269645f61756374696f6e0801147472616465100128543a3a5472616465496400010c62696418013c42616c616e63654f663c542c20493e001b2c6c4d616b6520612062696420666f72207468652061756374696f6e2e00584f726967696e206d757374206265205369676e65642e00682d20607472616465603a205468652061756374696f6e2069642e61012d2060626964603a20546865206269642c206062696460206d75737420626520686967686572207468616e20746865206d696e696d756d2062696420616e6420686967686572207468616e207468652070726576696f75731820206269642e0030456d6974732060426964602e00385765696768743a20604f2831296034636c6f73655f61756374696f6e0401147472616465100128543a3a54726164654964001c309048616e646c696e6720616e2061756374696f6e2061667465722069742773206f7665722e0094546865206c617374206269646465722077696c6c2077696e207468652061756374696f6e2ef04966207468657265206973206e6f206269642c20746865204e465420696e207468652061756374696f6e2077696c6c20626520726566756e6465642e00584f726967696e206d757374206265205369676e65642e00682d20607472616465603a205468652061756374696f6e2069642e005c456d697473206041756374696f6e436c61696d6564602e00385765696768743a20604f28312960347365745f617474726962757465140128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001286d617962655f6974656db001444f7074696f6e3c543a3a4974656d49643e0001246e616d657370616365c001804174747269627574654e616d6573706163653c543a3a4163636f756e7449643e00010c6b6579bc016c426f756e6465645665633c75382c20543a3a4b65794c696d69743e00011476616c7565bc0174426f756e6465645665633c75382c20543a3a56616c75654c696d69743e001f60a853657420616e2061747472696275746520666f72206120636f6c6c656374696f6e206f72206974656d2e00c053696d706c792072652d63616c6c20607365745f61747472696275746560206f66206070616c6c65742d6e667473602e0001014f726967696e206d757374206265205369676e656420616e64206d75737420636f6e666f726d20746f20746865206e616d6573706163652072756c657365743a3d012d2060436f6c6c656374696f6e4f776e657260206e616d65737061636520636f756c64206265206d6f646966696564206279207468652060636f6c6c656374696f6e602041646d696e206f6e6c793b59012d20604974656d4f776e657260206e616d65737061636520636f756c64206265206d6f6469666965642062792074686520606d617962655f6974656d60206f776e6572206f6e6c792e20606d617962655f6974656d6074202073686f756c642062652073657420696e207468617420636173653b55012d20604163636f756e74284163636f756e7449642960206e616d65737061636520636f756c64206265206d6f646966696564206f6e6c79207768656e2074686520606f726967696e602077617320676976656e20615820207065726d697373696f6e20746f20646f20736f3b00f05468652066756e6473206f6620606f726967696e6020617265207265736572766564206163636f7264696e6720746f2074686520666f726d756c613a2d01604174747269627574654465706f73697442617365202b204465706f73697450657242797465202a20286b65792e6c656e202b2076616c75652e6c656e29602074616b696e6720696e746f8c6163636f756e7420616e7920616c72656164792072657365727665642066756e64732e0039012d2060636f6c6c656374696f6e603a20546865206964656e746966696572206f662074686520636f6c6c656374696f6e2077686f7365206974656d2773206d6574616461746120746f207365742e05012d20606d617962655f6974656d603a20546865206964656e746966696572206f6620746865206974656d2077686f7365206d6574616461746120746f207365742e942d20606e616d657370616365603a204174747269627574652773206e616d6573706163652e882d20606b6579603a20546865206b6579206f6620746865206174747269627574652ecc2d206076616c7565603a205468652076616c756520746f20776869636820746f2073657420746865206174747269627574652e0054456d6974732060417474726962757465536574602e00385765696768743a20604f283129603c636c6561725f617474726962757465100128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001286d617962655f6974656db001444f7074696f6e3c543a3a4974656d49643e0001246e616d657370616365c001804174747269627574654e616d6573706163653c543a3a4163636f756e7449643e00010c6b6579bc016c426f756e6465645665633c75382c20543a3a4b65794c696d69743e002044b0436c65617220616e2061747472696275746520666f72206120636f6c6c656374696f6e206f72206974656d2e00c853696d706c792072652d63616c6c2060636c6561725f61747472696275746560206f66206070616c6c65742d6e667473602e005d014f726967696e206d757374206265206569746865722060466f7263654f726967696e60206f72205369676e656420616e64207468652073656e6465722073686f756c6420626520746865204f776e6572206f6620746865286174747269627574652e00c0416e79206465706f73697420697320667265656420666f722074686520636f6c6c656374696f6e2773206f776e65722e0041012d2060636f6c6c656374696f6e603a20546865206964656e746966696572206f662074686520636f6c6c656374696f6e2077686f7365206974656d2773206d6574616461746120746f20636c6561722e0d012d20606d617962655f6974656d603a20546865206964656e746966696572206f6620746865206974656d2077686f7365206d6574616461746120746f20636c6561722e942d20606e616d657370616365603a204174747269627574652773206e616d6573706163652e882d20606b6579603a20546865206b6579206f6620746865206174747269627574652e0064456d6974732060417474726962757465436c6561726564602e00385765696768743a20604f28312960307365745f6d657461646174610c0128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d496400011064617461b40178426f756e6465645665633c75382c20543a3a537472696e674c696d69743e00214c7453657420746865206d6574616461746120666f7220616e206974656d2e00bc53696d706c792072652d63616c6c20607365745f6d6574616461746160206f66206070616c6c65742d6e667473602e00005d014f726967696e206d757374206265206569746865722060466f7263654f726967696e60206f72205369676e656420616e64207468652073656e6465722073686f756c64206265207468652041646d696e206f66207468653460636f6c6c656374696f6e602e005101496620746865206f726967696e206973205369676e65642c207468656e2066756e6473206f66207369676e657220617265207265736572766564206163636f7264696e6720746f2074686520666f726d756c613af4604d657461646174614465706f73697442617365202b204465706f73697450657242797465202a20646174612e6c656e602074616b696e6720696e746f8c6163636f756e7420616e7920616c72656164792072657365727665642066756e64732e0039012d2060636f6c6c656374696f6e603a20546865206964656e746966696572206f662074686520636f6c6c656374696f6e2077686f7365206974656d2773206d6574616461746120746f207365742eec2d20606974656d603a20546865206964656e746966696572206f6620746865206974656d2077686f7365206d6574616461746120746f207365742e4d012d206064617461603a205468652067656e6572616c20696e666f726d6174696f6e206f662074686973206974656d2e204c696d6974656420696e206c656e6774682062792060537472696e674c696d6974602e0060456d69747320604974656d4d65746164617461536574602e00385765696768743a20604f2831296038636c6561725f6d65746164617461080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d496400223c7c436c65617220746865206d6574616461746120666f7220616e206974656d2e00c453696d706c792072652d63616c6c2060636c6561725f6d6574616461746160206f66206070616c6c65742d6e667473602e005d014f726967696e206d757374206265206569746865722060466f7263654f726967696e60206f72205369676e656420616e64207468652073656e6465722073686f756c64206265207468652041646d696e206f66207468653460636f6c6c656374696f6e602e00c0416e79206465706f73697420697320667265656420666f722074686520636f6c6c656374696f6e2773206f776e65722e0041012d2060636f6c6c656374696f6e603a20546865206964656e746966696572206f662074686520636f6c6c656374696f6e2077686f7365206974656d2773206d6574616461746120746f20636c6561722ef42d20606974656d603a20546865206964656e746966696572206f6620746865206974656d2077686f7365206d6574616461746120746f20636c6561722e0070456d69747320604974656d4d65746164617461436c6561726564602e00385765696768743a20604f283129605c7365745f636f6c6c656374696f6e5f6d65746164617461080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e496400011064617461b40178426f756e6465645665633c75382c20543a3a537472696e674c696d69743e0023448853657420746865206d6574616461746120666f72206120636f6c6c656374696f6e2e00e853696d706c792072652d63616c6c20607365745f636f6c6c656374696f6e5f6d6574616461746160206f66206070616c6c65742d6e667473602e0055014f726967696e206d757374206265206569746865722060466f7263654f726967696e60206f7220605369676e65646020616e64207468652073656e6465722073686f756c64206265207468652041646d696e206f66447468652060636f6c6c656374696f6e602e005901496620746865206f726967696e20697320605369676e6564602c207468656e2066756e6473206f66207369676e657220617265207265736572766564206163636f7264696e6720746f2074686520666f726d756c613af4604d657461646174614465706f73697442617365202b204465706f73697450657242797465202a20646174612e6c656e602074616b696e6720696e746f8c6163636f756e7420616e7920616c72656164792072657365727665642066756e64732e0011012d2060636f6c6c656374696f6e603a20546865206964656e746966696572206f6620746865206974656d2077686f7365206d6574616461746120746f207570646174652e4d012d206064617461603a205468652067656e6572616c20696e666f726d6174696f6e206f662074686973206974656d2e204c696d6974656420696e206c656e6774682062792060537472696e674c696d6974602e0078456d6974732060436f6c6c656374696f6e4d65746164617461536574602e00385765696768743a20604f2831296064636c6561725f636f6c6c656374696f6e5f6d65746164617461040128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e496400243890436c65617220746865206d6574616461746120666f72206120636f6c6c656374696f6e2e00f053696d706c792072652d63616c6c2060636c6561725f636f6c6c656374696f6e5f6d6574616461746160206f66206070616c6c65742d6e667473602e0055014f726967696e206d757374206265206569746865722060466f7263654f726967696e60206f7220605369676e65646020616e64207468652073656e6465722073686f756c64206265207468652041646d696e206f66447468652060636f6c6c656374696f6e602e00c0416e79206465706f73697420697320667265656420666f722074686520636f6c6c656374696f6e2773206f776e65722e0025012d2060636f6c6c656374696f6e603a20546865206964656e746966696572206f662074686520636f6c6c656374696f6e2077686f7365206d6574616461746120746f20636c6561722e0088456d6974732060436f6c6c656374696f6e4d65746164617461436c6561726564602e00385765696768743a20604f28312960207365745f7465616d100128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e4964000118697373756572290201704f7074696f6e3c4163636f756e7449644c6f6f6b75704f663c543e3e00011461646d696e290201704f7074696f6e3c4163636f756e7449644c6f6f6b75704f663c543e3e00011c667265657a6572290201704f7074696f6e3c4163636f756e7449644c6f6f6b75704f663c543e3e002548d44368616e676520746865204973737565722c2041646d696e20616e6420467265657a6572206f66206120636f6c6c656374696f6e2e00ac53696d706c792072652d63616c6c20607365745f7465616d60206f66206070616c6c65742d6e667473602e005d014f726967696e206d757374206265206569746865722060466f7263654f726967696e60206f72205369676e656420616e64207468652073656e6465722073686f756c6420626520746865204f776e6572206f66207468653460636f6c6c656374696f6e602e0051014e6f74653a2062792073657474696e672074686520726f6c6520746f20604e6f6e6560206f6e6c79207468652060466f7263654f726967696e602077696c6c2062652061626c6520746f206368616e676520697464616674657220746f2060536f6d65286163636f756e7429602e00f02d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e2077686f7365207465616d2073686f756c64206265206368616e6765642eb82d2060697373756572603a20546865206e657720497373756572206f66207468697320636f6c6c656374696f6e2eb02d206061646d696e603a20546865206e65772041646d696e206f66207468697320636f6c6c656374696f6e2ec02d2060667265657a6572603a20546865206e657720467265657a6572206f66207468697320636f6c6c656374696f6e2e0050456d69747320605465616d4368616e676564602e00385765696768743a20604f283129604c6372656174655f64796e616d69635f706f6f6c0c01286c6f6f745f7461626c65f801944c6f6f745461626c653c543a3a436f6c6c656374696f6e49642c20543a3a4974656d49643e00011461646d696eed0101504163636f756e7449644c6f6f6b75704f663c543e0001346d696e745f73657474696e67732d0201544d696e7453657474696e6773466f723c542c20493e0026347843726561746520612064796e616d6963206d696e74696e6720706f6f6c2e0059014f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c6420686176652073756666696369656e74206974656d7320696e2074686520606c6f6f745f7461626c65602e0009014e6f74653a20546865206d696e74696e67206368616e63652077696c6c206265206368616e6765642061667465722065616368204e4654206973206d696e7465642e00b42d20606c6f6f745f7461626c65603a20412062756e646c65206f66204e46547320666f72206d696e74696e672ea82d206061646d696e603a205468652041646d696e206f662074686973206d696e74696e6720706f6f6c2eb42d20606d696e745f73657474696e6773603a20546865206d696e74696e6720706f6f6c2073657474696e67732e0068456d69747320604d696e696e67506f6f6c43726561746564602e00385765696768743a20604f28312960486372656174655f737461626c655f706f6f6c0c01286c6f6f745f7461626c65f801944c6f6f745461626c653c543a3a436f6c6c656374696f6e49642c20543a3a4974656d49643e00011461646d696eed0101504163636f756e7449644c6f6f6b75704f663c543e0001346d696e745f73657474696e67732d0201544d696e7453657474696e6773466f723c542c20493e00273874437265617465206120737461626c65206d696e74696e6720706f6f6c2e0049014f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c6420626520746865206f776e6572206f6620616c6c20636f6c6c656374696f6e7320696e207468650501606c6f6f745f7461626c65602e20436f6c6c656374696f6e20696e20606c6f6f745f7461626c6560206d75737420626520696e66696e69746520737570706c792e0019014e6f74653a20546865206d696e74696e67206368616e63652077696c6c206e6f74206265206368616e6765642061667465722065616368204e4654206973206d696e7465642e00b42d20606c6f6f745f7461626c65603a20412062756e646c65206f66204e46547320666f72206d696e74696e672ea82d206061646d696e603a205468652041646d696e206f662074686973206d696e74696e6720706f6f6c2eb42d20606d696e745f73657474696e6773603a20546865206d696e74696e6720706f6f6c2073657474696e67732e0068456d69747320604d696e696e67506f6f6c43726561746564602e00385765696768743a20604f2831296030726571756573745f6d696e740c0110706f6f6c100124543a3a506f6f6c496400011c6d696e745f746fed0101504163636f756e7449644c6f6f6b75704f663c543e000118616d6f756e74100118416d6f756e7400282cd04d696e7420616e20616d6f756e74206f66206974656d206f6e206120706172746963756c6172206d696e74696e6720706f6f6c2e005101546865206f726967696e206d757374206265205369676e656420616e64207468652073656e646572206d75737420636f6d706c7920776974682074686520606d696e745f73657474696e6773602072756c65732e00802d2060706f6f6c603a2054686520706f6f6c20746f206265206d696e7465642ee02d20606d696e745f746f603a204163636f756e7420696e746f20776869636820746865206974656d2077696c6c206265206d696e7465642e942d2060616d6f756e74603a2054686520616d6f756e74206d6179206265206d696e7465642e0094456d69747320604d696e74656460206576656e74207768656e207375636365737366756c2e00385765696768743a20604f283129606c6372656174655f636f6c6c656374696f6e5f776974685f6461746114011064617461b40178426f756e6465645665633c75382c20543a3a537472696e674c696d69743e00011461646d696e290201704f7074696f6e3c4163636f756e7449644c6f6f6b75704f663c543e3e000118697373756572290201704f7074696f6e3c4163636f756e7449644c6f6f6b75704f663c543e3e00011c667265657a6572290201704f7074696f6e3c4163636f756e7449644c6f6f6b75704f663c543e3e00011067616d65b001444f7074696f6e3c543a3a47616d6549643e00292c5101437265617465732061206e657720636f6c6c656374696f6e2077697468207468652070726f7669646564206461746120616e6420736574732074686520636f6c6c656374696f6e206d6574616461746120616e64147465616d2e00b42d20606f726967696e603a20546865206163636f756e74206f726967696e206f66207468652063616c6c65722e902d206061646d696e603a205468652061646d696e206163636f756e74206c6f6f6b75702e882d206064617461603a2054686520636f6c6c656374696f6e206d657461646174612edc2d2060697373756572603a20546865206f7074696f6e616c206163636f756e74206c6f6f6b757020666f7220746865206973737565722ee42d2060667265657a6572603a20546865206f7074696f6e616c206163636f756e74206c6f6f6b757020666f722074686520667265657a65722e003d0152657475726e7320604f6b28282929602069662074686520636f6c6c656374696f6e206973206372656174656420616e6420746865206d6574616461746120616e64207465616d2061726520736574347375636365737366756c6c792e546372656174655f6974656d5f776974685f64617461100128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d49640001306d617962655f737570706c79b0012c4f7074696f6e3c7533323e00011064617461b40178426f756e6465645665633c75382c20543a3a537472696e674c696d69743e002a241501437265617465732061206e6577206974656d2077697468207468652070726f7669646564206461746120616e64207365747320746865206974656d206d657461646174612e00ac2d206f726967696e3a20546865206163636f756e74206f726967696e206f66207468652063616c6c65722ee42d20636f6c6c656374696f6e3a2054686520636f6c6c656374696f6e204944206f6620746865206974656d277320636f6c6c656374696f6e2e882d206974656d3a2054686520756e69717565204944206f6620746865206974656d2ec02d206d617962655f737570706c793a20546865206f7074696f6e616c20737570706c79206f6620746865206974656d2e682d20646174613a20546865206974656d206d657461646174612e002d0152657475726e73204f6b2828292920696620746865206974656d206973206372656174656420616e6420746865206d6574616461746120697320736574207375636365737366756c6c792e546372656174655f67616d655f776974685f6461746108011461646d696eed0101504163636f756e7449644c6f6f6b75704f663c543e00011064617461b40178426f756e6465645665633c75382c20543a3a537472696e674c696d69743e002b205101546869732066756e6374696f6e20637265617465732061206e65772067616d652077697468207468652070726f7669646564206d657461646174612e20497420726571756972657320746865206163636f756e7451016f726967696e206f66207468652063616c6c65722c20746865206c6f6f6b7570206f66207468652061646d696e206163636f756e742c20616e6420746865206d65746164617461206f66207468652067616d652e00ac2d206f726967696e3a20546865206163636f756e74206f726967696e206f66207468652063616c6c65722ea42d2061646d696e3a20546865206c6f6f6b7570206f66207468652061646d696e206163636f756e742e842d20646174613a20546865206d65746164617461206f66207468652067616d652e00290152657475726e204f6b28282929206966207468652067616d65206973206372656174656420616e6420746865206d6574616461746120697320736574207375636365737366756c6c792e447365745f67616d655f6d6574616461746108011064617461b40178426f756e6465645665633c75382c20543a3a537472696e674c696d69743e00011067616d65100124543a3a47616d654964002c2c745365747320746865206d6574616461746120666f7220612067616d652e002c2320417267756d656e747300ac2a20606f726967696e60202d20546865206f726967696e206f6620746865207472616e73616374696f6e2e51012a20606461746160202d20546865206d6574616461746120746f2073657420666f72207468652067616d652c20626f756e646564206279207468652060537472696e674c696d697460206173736f6369617465641c2020747970652e0024232052657475726e7300490152657475726e7320604f6b282829296020696620746865206f7065726174696f6e20776173207375636365737366756c2e204f74686572776973652c20616e206572726f722069732072657475726e65642e4c636c6561725f67616d655f6d6574616461746104011067616d65100124543a3a47616d654964002d247c436c6561727320746865206d6574616461746120666f7220612067616d652e002c2320417267756d656e747300ac2a20606f726967696e60202d20546865206f726967696e206f6620746865207472616e73616374696f6e2e0024232052657475726e7300490152657475726e7320604f6b282829296020696620746865206f7065726174696f6e20776173207375636365737366756c2e204f74686572776973652c20616e206572726f722069732072657475726e65642e746372656174655f64796e616d69635f706f6f6c5f776974685f646174611001286c6f6f745f7461626c65f801944c6f6f745461626c653c543a3a436f6c6c656374696f6e49642c20543a3a4974656d49643e00011461646d696eed0101504163636f756e7449644c6f6f6b75704f663c543e0001346d696e745f73657474696e67732d0201544d696e7453657474696e6773466f723c542c20493e00011064617461b40178426f756e6465645665633c75382c20543a3a537472696e674c696d69743e002e38bc4372656174657320612064796e616d696320706f6f6c2077697468207468652073706563696669656420646174612e002c2320417267756d656e747300ac2a20606f726967696e60202d20546865206f726967696e206f6620746865207472616e73616374696f6e2ee42a20606c6f6f745f7461626c6560202d20546865206c6f6f74207461626c65206173736f63696174656420776974682074686520706f6f6c2eac2a206061646d696e60202d205468652061646d696e206163636f756e7420666f722074686520706f6f6c2ecc2a20606d696e745f73657474696e677360202d20546865206d696e742073657474696e677320666f722074686520706f6f6c2ec02a20606461746160202d20546865206461746120746f207365742061732074686520706f6f6c206d657461646174612e0024232052657475726e73005d0152657475726e7320604f6b284469737061746368526573756c7457697468506f7374496e666f296020696620746865206f7065726174696f6e20776173207375636365737366756c2e204f74686572776973652c20616e486572726f722069732072657475726e65642e706372656174655f737461626c655f706f6f6c5f776974685f646174611001286c6f6f745f7461626c65f801944c6f6f745461626c653c543a3a436f6c6c656374696f6e49642c20543a3a4974656d49643e00011461646d696eed0101504163636f756e7449644c6f6f6b75704f663c543e0001346d696e745f73657474696e67732d0201544d696e7453657474696e6773466f723c542c20493e00011064617461b40178426f756e6465645665633c75382c20543a3a537472696e674c696d69743e002f38b843726561746573206120737461626c6520706f6f6c2077697468207468652073706563696669656420646174612e002c2320417267756d656e747300ac2a20606f726967696e60202d20546865206f726967696e206f6620746865207472616e73616374696f6e2ee42a20606c6f6f745f7461626c6560202d20546865206c6f6f74207461626c65206173736f63696174656420776974682074686520706f6f6c2eac2a206061646d696e60202d205468652061646d696e206163636f756e7420666f722074686520706f6f6c2ecc2a20606d696e745f73657474696e677360202d20546865206d696e742073657474696e677320666f722074686520706f6f6c2ec02a20606461746160202d20546865206461746120746f207365742061732074686520706f6f6c206d657461646174612e0024232052657475726e73005d0152657475726e7320604f6b284469737061746368526573756c7457697468506f7374496e666f296020696620746865206f7065726174696f6e20776173207375636365737366756c2e204f74686572776973652c20616e486572726f722069732072657475726e65642e447365745f706f6f6c5f6d65746164617461080110706f6f6c100124543a3a506f6f6c496400011064617461b40178426f756e6465645665633c75382c20543a3a537472696e674c696d69743e00302c745365747320746865206d6574616461746120666f72206120706f6f6c2e002c2320417267756d656e747300ac2a20606f726967696e60202d20546865206f726967696e206f6620746865207472616e73616374696f6e2e782a2060706f6f6c60202d20546865204944206f662074686520706f6f6c2ec02a20606461746160202d20546865206461746120746f207365742061732074686520706f6f6c206d657461646174612e0024232052657475726e7300490152657475726e7320604f6b282829296020696620746865206f7065726174696f6e20776173207375636365737366756c2e204f74686572776973652c20616e206572726f722069732072657475726e65642e4c636c6561725f706f6f6c5f6d65746164617461040110706f6f6c100124543a3a506f6f6c496400312c745365747320746865206d6574616461746120666f72206120706f6f6c2e002c2320417267756d656e747300ac2a20606f726967696e60202d20546865206f726967696e206f6620746865207472616e73616374696f6e2e782a2060706f6f6c60202d20546865204944206f662074686520706f6f6c2ec02a20606461746160202d20546865206461746120746f207365742061732074686520706f6f6c206d657461646174612e0024232052657475726e7300490152657475726e7320604f6b282829296020696620746865206f7065726174696f6e20776173207375636365737366756c2e204f74686572776973652c20616e206572726f722069732072657475726e65642e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e19020c2c70616c6c65745f6e667473147479706573284974656d436f6e666967000004012073657474696e67731d0201304974656d53657474696e677300001d020c2c70616c6c65745f6e66747314747970657320426974466c6167730404540121020004002c012c4974656d53657474696e67000021020c2c70616c6c65745f6e6674731474797065732c4974656d53657474696e6700010c305472616e7366657261626c6500010040556e6c6f636b65644d6574616461746100020048556e6c6f636b6564417474726962757465730004000025021030676166695f737570706f72741067616d6514747970657324547261646554797065000118205365745072696365000000185365744275790001001842756e646c6500020020576973686c6973740003001c41756374696f6e000400105377617000050000290204184f7074696f6e04045401ed010108104e6f6e6500000010536f6d650400ed0100000100002d021030676166695f737570706f72741067616d65147479706573304d696e7453657474696e67730c14507269636501182c426c6f636b4e756d626572011030436f6c6c656374696f6e49640110001001246d696e745f74797065310201584d696e74547970653c436f6c6c656374696f6e49643e0001147072696365180114507269636500012c73746172745f626c6f636bb0014c4f7074696f6e3c426c6f636b4e756d6265723e000124656e645f626c6f636bb0014c4f7074696f6e3c426c6f636b4e756d6265723e000031021030676166695f737570706f72741067616d65147479706573204d696e74547970650430436f6c6c656374696f6e496401100108185075626c696300000020486f6c6465724f660400100130436f6c6c656374696f6e49640001000035020c3c67616d655f72616e646f6d6e6573731870616c6c65741043616c6c0404540001046c7375626d69745f72616e646f6d5f736565645f756e7369676e6564080130626c6f636b5f6e756d626572100144426c6f636b4e756d626572466f723c543e0001107365656404011053656564000024645375626d69742061206e65772072616e646f6d20736565642e005501546869732066756e6374696f6e20736574732061206e65772060736565646020666f722072616e646f6d6e65737320696e2065766572792060543a3a556e7369676e6564496e74657276616c6020626c6f636b732e00302320506172616d657465727300c82d20606f726967696e603a204163636570746564206f6e6c7920627920746865206f66662d636861696e20776f726b65722e9c2d2060626c6f636b5f6e756d626572603a2043757272656e7420626c6f636b206e756d6265722e682d206073656564603a204e65772072616e646f6d20736565642e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e39020c3470616c6c65745f6661756365741870616c6c65741043616c6c04045400010818666175636574000014186661756365740064546865206f726967696e206d757374206265205369676e656400385765696768743a20604f2831296018646f6e617465040118616d6f756e7418013042616c616e63654f663c543e00012018646f6e6174650064546865206f726967696e206d757374206265205369676e6564002c506172616d65746572733a6c2d2060616d6f756e74603a20646f6e6174696f6e20616d6f756e7400385765696768743a20604f28312960042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e3d020c2c70616c6c65745f7375646f1870616c6c6574144572726f720404540001042c526571756972655375646f0000047c53656e646572206d75737420626520746865205375646f206163636f756e7404644572726f7220666f7220746865205375646f2070616c6c657441020c2c70616c6c65745f6e66747314747970657344436f6c6c656374696f6e44657461696c7308244163636f756e7449640100384465706f73697442616c616e63650118001801146f776e65720001244163636f756e7449640001346f776e65725f6465706f7369741801384465706f73697442616c616e63650001146974656d7310010c7533320001386974656d5f6d657461646174617310010c7533320001306974656d5f636f6e6669677310010c7533320001286174747269627574657310010c753332000045020000040c001010004902000004080010004d020000040810000051020c2c70616c6c65745f6e66747314747970657320426974466c616773040454015502000400080138436f6c6c656374696f6e526f6c65000055020c2c70616c6c65745f6e66747314747970657338436f6c6c656374696f6e526f6c6500010c184973737565720001001c467265657a65720002001441646d696e0004000059020c2c70616c6c65745f6e6674731474797065732c4974656d44657461696c730c244163636f756e74496401001c4465706f736974015d0224417070726f76616c73016102000c01146f776e65720001244163636f756e744964000124617070726f76616c7361020124417070726f76616c7300011c6465706f7369745d02011c4465706f73697400005d020c2c70616c6c65745f6e6674731474797065732c4974656d4465706f73697408384465706f73697442616c616e63650118244163636f756e74496401000008011c6163636f756e740001244163636f756e744964000118616d6f756e741801384465706f73697442616c616e6365000061020c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f6d61703c426f756e64656442547265654d61700c044b0100045601b00453000004006502013842547265654d61703c4b2c20563e00006502042042547265654d617008044b0100045601b0000400690200000069020000026d02006d020000040800b00071020c2c70616c6c65745f6e66747314747970657348436f6c6c656374696f6e4d65746164617461081c4465706f73697401182c537472696e674c696d6974000008011c6465706f73697418011c4465706f73697400011064617461b4016c426f756e6465645665633c75382c20537472696e674c696d69743e000075020c2c70616c6c65745f6e667473147479706573304974656d4d65746164617461081c4465706f7369740179022c537472696e674c696d6974000008011c6465706f7369747902011c4465706f73697400011064617461b4016c426f756e6465645665633c75382c20537472696e674c696d69743e000079020c2c70616c6c65745f6e6674731474797065734c4974656d4d657461646174614465706f73697408384465706f73697442616c616e63650118244163636f756e74496401000008011c6163636f756e74a401444f7074696f6e3c4163636f756e7449643e000118616d6f756e741801384465706f73697442616c616e636500007d020000041010b0c0bc00810200000408bc85020085020c2c70616c6c65745f6e667473147479706573404174747269627574654465706f73697408384465706f73697442616c616e63650118244163636f756e74496401000008011c6163636f756e74a401444f7074696f6e3c4163636f756e7449643e000118616d6f756e741801384465706f73697442616c616e6365000089020000040818a4008d020c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f7365743c426f756e646564425472656553657408045401000453000004009102012c42547265655365743c543e00009102042042547265655365740404540100000400fd0100000095020c2c70616c6c65745f6e6674731474797065732c50656e64696e67537761701030436f6c6c656374696f6e49640110184974656d49640110584974656d507269636557697468446972656374696f6e01c820446561646c696e65011000100148646573697265645f636f6c6c656374696f6e100130436f6c6c656374696f6e4964000130646573697265645f6974656db001384f7074696f6e3c4974656d49643e0001147072696365c401784f7074696f6e3c4974656d507269636557697468446972656374696f6e3e000120646561646c696e65100120446561646c696e65000099020c2c70616c6c65745f6e66747314747970657340436f6c6c656374696f6e436f6e6669670c14507269636501182c426c6f636b4e756d626572011030436f6c6c656374696f6e49640110000c012073657474696e67739d020148436f6c6c656374696f6e53657474696e67730001286d61785f737570706c79b0012c4f7074696f6e3c7533323e0001346d696e745f73657474696e6773a50201b84d696e7453657474696e67733c50726963652c20426c6f636b4e756d6265722c20436f6c6c656374696f6e49643e00009d020c2c70616c6c65745f6e66747314747970657320426974466c61677304045401a1020004002c0144436f6c6c656374696f6e53657474696e670000a1020c2c70616c6c65745f6e66747314747970657344436f6c6c656374696f6e53657474696e67000114445472616e7366657261626c654974656d7300010040556e6c6f636b65644d6574616461746100020048556e6c6f636b65644174747269627574657300040044556e6c6f636b65644d6178537570706c790008003c4465706f736974526571756972656400100000a5020c2c70616c6c65745f6e667473147479706573304d696e7453657474696e67730c14507269636501182c426c6f636b4e756d626572011030436f6c6c656374696f6e49640110001401246d696e745f74797065a90201584d696e74547970653c436f6c6c656374696f6e49643e0001147072696365e801344f7074696f6e3c50726963653e00012c73746172745f626c6f636bb0014c4f7074696f6e3c426c6f636b4e756d6265723e000124656e645f626c6f636bb0014c4f7074696f6e3c426c6f636b4e756d6265723e00015464656661756c745f6974656d5f73657474696e67731d0201304974656d53657474696e67730000a9020c2c70616c6c65745f6e667473147479706573204d696e74547970650430436f6c6c656374696f6e49640110010c18497373756572000000185075626c696300010020486f6c6465724f660400100130436f6c6c656374696f6e496400020000ad020c2c70616c6c65745f6e66747314747970657320426974466c61677304045401b1020004002c013450616c6c6574466561747572650000b1020c2c70616c6c65745f6e6674731474797065733450616c6c6574466561747572650001101c54726164696e67000100284174747269627574657300020024417070726f76616c7300040014537761707300080000b5020c2c70616c6c65745f6e6674731870616c6c6574144572726f720804540004490001b0304e6f5065726d697373696f6e000004e8546865207369676e696e67206163636f756e7420686173206e6f207065726d697373696f6e20746f20646f20746865206f7065726174696f6e2e44556e6b6e6f776e436f6c6c656374696f6e0001047454686520676976656e206974656d20494420697320756e6b6e6f776e2e34416c7265616479457869737473000204b8546865206974656d2049442068617320616c7265616479206265656e207573656420666f7220616e206974656d2e3c417070726f76616c45787069726564000304390154686520617070726f76616c20686164206120646561646c696e65207468617420657870697265642c20736f2074686520617070726f76616c2069736e27742076616c696420616e796d6f72652e2857726f6e674f776e6572000404e8546865206f776e6572207475726e6564206f757420746f20626520646966666572656e7420746f2077686174207761732065787065637465642e284261645769746e6573730005041501546865207769746e657373206461746120676976656e20646f6573206e6f74206d61746368207468652063757272656e74207374617465206f662074686520636861696e2e44436f6c6c656374696f6e4964496e5573650006047c436f6c6c656374696f6e20494420697320616c72656164792074616b656e2e504974656d734e6f6e5472616e7366657261626c65000704c84974656d732077697468696e207468617420636f6c6c656374696f6e20617265206e6f6e2d7472616e7366657261626c652e2c4e6f7444656c65676174650008049c5468652070726f7669646564206163636f756e74206973206e6f7420612064656c65676174652e3457726f6e6744656c6567617465000904f45468652064656c6567617465207475726e6564206f757420746f20626520646966666572656e7420746f2077686174207761732065787065637465642e28556e617070726f766564000a04c44e6f20617070726f76616c20657869737473207468617420776f756c6420616c6c6f7720746865207472616e736665722e28556e6163636570746564000b041901546865206e616d6564206f776e657220686173206e6f74207369676e6564206f776e65727368697020616363657074616e6365206f662074686520636f6c6c656374696f6e2e284974656d4c6f636b6564000c0498546865206974656d206973206c6f636b656420286e6f6e2d7472616e7366657261626c65292e504c6f636b65644974656d41747472696275746573000d04744974656d2773206174747269627574657320617265206c6f636b65642e684c6f636b6564436f6c6c656374696f6e41747472696275746573000e048c436f6c6c656374696f6e2773206174747269627574657320617265206c6f636b65642e484c6f636b65644974656d4d65746164617461000f04684974656d2773206d65746164617461206973206c6f636b65642e604c6f636b6564436f6c6c656374696f6e4d6574616461746100100480436f6c6c656374696f6e2773206d65746164617461206973206c6f636b65642e404d6178537570706c79526561636865640011046c416c6c206974656d732068617665206265656e206d696e7465642e3c4d6178537570706c794c6f636b6564001204b8546865206d617820737570706c79206973206c6f636b656420616e642063616e2774206265206368616e6765642e444d6178537570706c79546f6f536d616c6c00130449015468652070726f7669646564206d617820737570706c79206973206c657373207468616e20746865206e756d626572206f66206974656d73206120636f6c6c656374696f6e20616c7265616479206861732e2c556e6b6e6f776e4974656d0014047454686520676976656e206974656d20494420697320756e6b6e6f776e2e2c556e6b6e6f776e537761700015044c5377617020646f65736e27742065786973742e404d657461646174614e6f74466f756e640016048c54686520676976656e206974656d20686173206e6f206d65746164617461207365742e444174747269627574654e6f74466f756e64001704985468652070726f7669646564206174747269627574652063616e277420626520666f756e642e284e6f74466f7253616c65001804544974656d206973206e6f7420666f722073616c652e24426964546f6f4c6f77001904705468652070726f76696465642062696420697320746f6f206c6f772e5052656163686564417070726f76616c4c696d6974001a04a0546865206974656d2068617320726561636865642069747320617070726f76616c206c696d69742e3c446561646c696e6545787069726564001b048454686520646561646c696e652068617320616c726561647920657870697265642e3457726f6e674475726174696f6e001c043101546865206475726174696f6e2070726f76696465642073686f756c64206265206c657373207468616e206f7220657175616c20746f20604d6178446561646c696e654475726174696f6e602e384d6574686f6444697361626c6564001d04a8546865206d6574686f642069732064697361626c65642062792073797374656d2073657474696e67732e3057726f6e6753657474696e67001e04885468652070726f76696465642073657474696e672063616e2774206265207365742e58496e636f6e73697374656e744974656d436f6e666967001f0415014974656d277320636f6e66696720616c72656164792065786973747320616e642073686f756c6420626520657175616c20746f207468652070726f7669646564206f6e652e204e6f436f6e666967002004c8436f6e66696720666f72206120636f6c6c656374696f6e206f7220616e206974656d2063616e277420626520666f756e642e3c526f6c65734e6f74436c656172656400210470536f6d6520726f6c65732077657265206e6f7420636c65617265642e384d696e744e6f7453746172746564002204644d696e7420686173206e6f742073746172746564207965742e244d696e74456e6465640023045c4d696e742068617320616c726561647920656e6465642e38416c7265616479436c61696d6564002404c05468652070726f7669646564204974656d2077617320616c7265616479207573656420666f7220636c61696d696e672e34496e636f7272656374446174610025047c5468652070726f7669646564206461746120697320696e636f72726563742e2c57726f6e674f726967696e002604ac5468652065787472696e736963207761732073656e74206279207468652077726f6e67206f726967696e2e3857726f6e675369676e6174757265002704905468652070726f7669646564207369676e617475726520697320696e636f72726563742e44496e636f72726563744d65746164617461002804a05468652070726f7669646564206d65746164617461206d6967687420626520746f6f206c6f6e672e644d6178417474726962757465734c696d6974526561636865640029049c43616e277420736574206d6f7265206174747269627574657320706572206f6e652063616c6c2e3857726f6e674e616d657370616365002a04d05468652070726f7669646564206e616d6573706163652069736e277420737570706f7274656420696e20746869732063616c6c2e48436f6c6c656374696f6e4e6f74456d707479002b048c43616e27742064656c657465206e6f6e2d656d70747920636f6c6c656374696f6e732e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909b9020c2c70616c6c65745f67616d651474797065732c47616d6544657461696c7308244163636f756e7449640100384465706f73697442616c616e63650118001001146f776e65720001244163636f756e7449640001346f776e65725f6465706f7369741801384465706f73697442616c616e636500012c636f6c6c656374696f6e7310010c75333200011461646d696e0001244163636f756e7449640000bd020c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540110045300000400b801185665633c543e0000c1020c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540110045300000400b801185665633c543e0000c5020c2c70616c6c65745f67616d651474797065733047616d654d65746164617461042c537472696e674c696d6974000004011064617461b4016c426f756e6465645665633c75382c20537472696e674c696d69743e0000c9020c2c70616c6c65745f67616d6514747970657330506f6f6c4d65746164617461042c537472696e674c696d6974000004011064617461b4016c426f756e6465645665633c75382c20537472696e674c696d69743e0000cd020c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401fc045300000400f801185665633c543e0000d1020c2c70616c6c65745f67616d651474797065732c506f6f6c44657461696c7310244163636f756e74496401001c42616c616e636501182c426c6f636b4e756d626572011030436f6c6c656374696f6e4964011000140124706f6f6c5f74797065f40120506f6f6c547970650001146f776e65720001244163636f756e7449640001346f776e65725f6465706f73697418011c42616c616e636500011461646d696e0001244163636f756e7449640001346d696e745f73657474696e67732d0201c04d696e7453657474696e67733c42616c616e63652c20426c6f636b4e756d6265722c20436f6c6c656374696f6e49643e0000d5020c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401d902045300000400dd0201185665633c543e0000d9020c2c70616c6c65745f67616d651474797065732c4d696e745265717565737410244163636f756e744964010018506f6f6c496401101c42616c616e636501182c426c6f636b4e756d6265720110001c01146d696e65720001244163636f756e744964000110706f6f6c100118506f6f6c49640001187461726765740001244163636f756e744964000118616d6f756e74100118416d6f756e740001286d696e696e675f66656518011c42616c616e63650001346d696e65725f7265736572766518011c42616c616e6365000130626c6f636b5f6e756d62657210012c426c6f636b4e756d6265720000dd02000002d90200e1020000040c10101000e5020c2c70616c6c65745f67616d6514747970657344557067726164654974656d436f6e66696708184974656d496401101450726963650118000801106974656d1001184974656d496400010c66656518011450726963650000e9020c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401e4045300000400e001185665633c543e0000ed020c2c70616c6c65745f67616d651474797065732c5472616465436f6e66696710244163636f756e744964010014507269636501181842756e646c6501e9022c426c6f636b4e756d6265720110001801147472616465250201245472616465547970650001146f776e65720001244163636f756e74496400012c6d617962655f7072696365e801344f7074696f6e3c50726963653e0001386d617962655f7265717569726564f10201384f7074696f6e3c42756e646c653e00012c73746172745f626c6f636bb0014c4f7074696f6e3c426c6f636b4e756d6265723e000124656e645f626c6f636bb0014c4f7074696f6e3c426c6f636b4e756d6265723e0000f10204184f7074696f6e04045401e9020108104e6f6e6500000010536f6d650400e9020000010000f5020c2c70616c6c65745f67616d651474797065733441756374696f6e436f6e6669670c244163636f756e744964010014507269636501182c426c6f636b4e756d6265720110001001146f776e65720001244163636f756e74496400012c6d617962655f7072696365e801344f7074696f6e3c50726963653e00012c73746172745f626c6f636b10012c426c6f636b4e756d6265720001206475726174696f6e10012c426c6f636b4e756d6265720000f9020c2c70616c6c65745f67616d651870616c6c6574144572726f720804540004490001cc304e6f5065726d697373696f6e0000002c556e6b6e6f776e47616d6500010044556e6b6e6f776e436f6c6c656374696f6e0002002c556e6b6e6f776e4974656d00030030556e6b6e6f776e547261646500040038556e6b6e6f776e5570677261646500050038556e6b6e6f776e41756374696f6e00060028556e6b6e6f776e42696400070044556e6b6e6f776e416363657074616e636500080044556e6b6e6f776e4d696e696e67506f6f6c000900404d657461646174614e6f74466f756e64000a00344578636565644d61784974656d000b04bc45786365656420746865206d6178696d756d20616c6c6f776564206974656d20696e206120636f6c6c656374696f6e44457863656564546f74616c416d6f756e74000c042901546865206e756d626572206d696e746564206974656d73207265717569726520657863656564732074686520617661696c61626c65206974656d7320696e2074686520726573657276654c457863656564416c6c6f776564416d6f756e74000d040501546865206e756d626572206d696e746564206974656d73207265717569726520657863656564732074686520616d6f756e7420616c6c6f776564207065722074784c4578636565644d6178436f6c6c656374696f6e000e04bc45786365656420746865206d6178696d756d20616c6c6f77656420636f6c6c656374696f6e20696e20612067616d65484578636565644d617847616d655368617265000f042d01457863656564656420746865206d6178696d756d206e756d626572206f662067616d657320746861742063616e20626520736861726564206265747765656e20636f6c6c656374696f6e733c4578636565644d617842756e646c6500100488457863656564206d617820636f6c6c656374696f6e7320696e20612062756e646c65344578636565644d61784c6f6f740011046c457863656564206d6178206c6f6f747320696e2061207461626c651c536f6c644f7574001200545769746864726177526573657276654661696c656400130444546f6f206d616e7920617474656d707473345570677261646545786973747300140040436f6c6c656374696f6e4578697374730015048c416464207468652073616d6520636f6c6c656374696f6e20696e746f20612067616d655c496e73756666696369656e744974656d42616c616e63650016006c496e73756666696369656e74526573657276656442616c616e636500170034496e76616c6964416d6f756e740018043c6974656d20616d6f756e74203d2030284974656d4c6f636b6564001904805472616e73666572206973206c6f636b656420666f7220616e7920747261646524426964546f6f4c6f77001a049054686520626964206973206c6f776572207468616e20746865207365742070726963652e2841736b546f6f48696768001b04b85468652061736b696e6720707269636520697320686967686572207468616e20746865207365742070726963652e2c47616d654964496e557365001c003054726164654964496e557365001d002c506f6f6c4964496e557365001e003c54726164654e6f7453746172746564001f00285472616465456e6465640020004c496e636f7272656374436f6c6c656374696f6e00210034496e636f72726563744974656d0022004441756374696f6e496e50726f67726573730023004441756374696f6e4e6f74537461727465640024003041756374696f6e456e6465640025002c4e6f745365745072696365002600244e6f7442756e646c650027002c4e6f74576973686c6973740028001c4e6f7453776170002900284e6f7441756374696f6e002a00244e6f74536574427579002b0038496e66696e697465537570706c79002c00444e6f74496e66696e697465537570706c79002d00284d696e744661696c6564002e00384d696e744e6f7453746172746564002f00244d696e74456e646564003000384e6f7457686974656c69737465640031002c4f7665725265717565737400320004b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909fd02083c67616d655f72616e646f6d6e6573732c536565645061796c6f6164082c426c6f636b4e756d62657201101053656564010400080130626c6f636b5f6e756d62657210012c426c6f636b4e756d62657200011073656564040110536565640000010308346672616d655f737570706f72742050616c6c65744964000004006901011c5b75383b20385d000005030c3c67616d655f72616e646f6d6e6573731870616c6c6574144572726f720404540001042c496e76616c69645365656400000004b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a09090909030c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540100045300000400fd0101185665633c543e00000d030c3470616c6c65745f6661756365741870616c6c6574144572726f720404540001143053656c665472616e73666572000000404e6f74456e6f75676842616c616e636500010030446f6e74426547726565647900020028506c65617365576169740003002c4f75744f6646617563657400040004b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a09090911030c3070616c6c65745f63616368651870616c6c657410466c6167000108104c6566740000001452696768740001000015030000040800000019030c3070616c6c65745f63616368651870616c6c6574205772617044617461041044617461011800080110646174611801104461746100012474696d657374616d701801107531323800001d030c3070616c6c65745f63616368651870616c6c6574144572726f7208045400044900010004b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a0909092103102873705f72756e74696d651c67656e657269634c756e636865636b65645f65787472696e73696348556e636865636b656445787472696e736963101c4164647265737301ed011043616c6c011102245369676e6174757265012503144578747261013503000400340000002503082873705f72756e74696d65384d756c74695369676e617475726500010c1c456432353531390400a1010148656432353531393a3a5369676e61747572650000001c53723235353139040029030148737232353531393a3a5369676e617475726500010014456364736104002d03014065636473613a3a5369676e61747572650002000029030c1c73705f636f72651c73723235353139245369676e617475726500000400a50101205b75383b2036345d00002d030c1c73705f636f7265146563647361245369676e617475726500000400310301205b75383b2036355d0000310300000341000000080035030000042039033d0341034503490351035503590300390310306672616d655f73797374656d28657874656e73696f6e7354636865636b5f6e6f6e5f7a65726f5f73656e64657248436865636b4e6f6e5a65726f53656e646572040454000000003d0310306672616d655f73797374656d28657874656e73696f6e7348636865636b5f737065635f76657273696f6e40436865636b5370656356657273696f6e04045400000000410310306672616d655f73797374656d28657874656e73696f6e7340636865636b5f74785f76657273696f6e38436865636b547856657273696f6e04045400000000450310306672616d655f73797374656d28657874656e73696f6e7334636865636b5f67656e6573697330436865636b47656e6573697304045400000000490310306672616d655f73797374656d28657874656e73696f6e733c636865636b5f6d6f7274616c69747938436865636b4d6f7274616c697479040454000004004d03010c45726100004d03102873705f72756e74696d651c67656e657269630c6572610c4572610001010420496d6d6f7274616c0000001c4d6f7274616c31040008000001001c4d6f7274616c32040008000002001c4d6f7274616c33040008000003001c4d6f7274616c34040008000004001c4d6f7274616c35040008000005001c4d6f7274616c36040008000006001c4d6f7274616c37040008000007001c4d6f7274616c38040008000008001c4d6f7274616c3904000800000900204d6f7274616c313004000800000a00204d6f7274616c313104000800000b00204d6f7274616c313204000800000c00204d6f7274616c313304000800000d00204d6f7274616c313404000800000e00204d6f7274616c313504000800000f00204d6f7274616c313604000800001000204d6f7274616c313704000800001100204d6f7274616c313804000800001200204d6f7274616c313904000800001300204d6f7274616c323004000800001400204d6f7274616c323104000800001500204d6f7274616c323204000800001600204d6f7274616c323304000800001700204d6f7274616c323404000800001800204d6f7274616c323504000800001900204d6f7274616c323604000800001a00204d6f7274616c323704000800001b00204d6f7274616c323804000800001c00204d6f7274616c323904000800001d00204d6f7274616c333004000800001e00204d6f7274616c333104000800001f00204d6f7274616c333204000800002000204d6f7274616c333304000800002100204d6f7274616c333404000800002200204d6f7274616c333504000800002300204d6f7274616c333604000800002400204d6f7274616c333704000800002500204d6f7274616c333804000800002600204d6f7274616c333904000800002700204d6f7274616c343004000800002800204d6f7274616c343104000800002900204d6f7274616c343204000800002a00204d6f7274616c343304000800002b00204d6f7274616c343404000800002c00204d6f7274616c343504000800002d00204d6f7274616c343604000800002e00204d6f7274616c343704000800002f00204d6f7274616c343804000800003000204d6f7274616c343904000800003100204d6f7274616c353004000800003200204d6f7274616c353104000800003300204d6f7274616c353204000800003400204d6f7274616c353304000800003500204d6f7274616c353404000800003600204d6f7274616c353504000800003700204d6f7274616c353604000800003800204d6f7274616c353704000800003900204d6f7274616c353804000800003a00204d6f7274616c353904000800003b00204d6f7274616c363004000800003c00204d6f7274616c363104000800003d00204d6f7274616c363204000800003e00204d6f7274616c363304000800003f00204d6f7274616c363404000800004000204d6f7274616c363504000800004100204d6f7274616c363604000800004200204d6f7274616c363704000800004300204d6f7274616c363804000800004400204d6f7274616c363904000800004500204d6f7274616c373004000800004600204d6f7274616c373104000800004700204d6f7274616c373204000800004800204d6f7274616c373304000800004900204d6f7274616c373404000800004a00204d6f7274616c373504000800004b00204d6f7274616c373604000800004c00204d6f7274616c373704000800004d00204d6f7274616c373804000800004e00204d6f7274616c373904000800004f00204d6f7274616c383004000800005000204d6f7274616c383104000800005100204d6f7274616c383204000800005200204d6f7274616c383304000800005300204d6f7274616c383404000800005400204d6f7274616c383504000800005500204d6f7274616c383604000800005600204d6f7274616c383704000800005700204d6f7274616c383804000800005800204d6f7274616c383904000800005900204d6f7274616c393004000800005a00204d6f7274616c393104000800005b00204d6f7274616c393204000800005c00204d6f7274616c393304000800005d00204d6f7274616c393404000800005e00204d6f7274616c393504000800005f00204d6f7274616c393604000800006000204d6f7274616c393704000800006100204d6f7274616c393804000800006200204d6f7274616c393904000800006300244d6f7274616c31303004000800006400244d6f7274616c31303104000800006500244d6f7274616c31303204000800006600244d6f7274616c31303304000800006700244d6f7274616c31303404000800006800244d6f7274616c31303504000800006900244d6f7274616c31303604000800006a00244d6f7274616c31303704000800006b00244d6f7274616c31303804000800006c00244d6f7274616c31303904000800006d00244d6f7274616c31313004000800006e00244d6f7274616c31313104000800006f00244d6f7274616c31313204000800007000244d6f7274616c31313304000800007100244d6f7274616c31313404000800007200244d6f7274616c31313504000800007300244d6f7274616c31313604000800007400244d6f7274616c31313704000800007500244d6f7274616c31313804000800007600244d6f7274616c31313904000800007700244d6f7274616c31323004000800007800244d6f7274616c31323104000800007900244d6f7274616c31323204000800007a00244d6f7274616c31323304000800007b00244d6f7274616c31323404000800007c00244d6f7274616c31323504000800007d00244d6f7274616c31323604000800007e00244d6f7274616c31323704000800007f00244d6f7274616c31323804000800008000244d6f7274616c31323904000800008100244d6f7274616c31333004000800008200244d6f7274616c31333104000800008300244d6f7274616c31333204000800008400244d6f7274616c31333304000800008500244d6f7274616c31333404000800008600244d6f7274616c31333504000800008700244d6f7274616c31333604000800008800244d6f7274616c31333704000800008900244d6f7274616c31333804000800008a00244d6f7274616c31333904000800008b00244d6f7274616c31343004000800008c00244d6f7274616c31343104000800008d00244d6f7274616c31343204000800008e00244d6f7274616c31343304000800008f00244d6f7274616c31343404000800009000244d6f7274616c31343504000800009100244d6f7274616c31343604000800009200244d6f7274616c31343704000800009300244d6f7274616c31343804000800009400244d6f7274616c31343904000800009500244d6f7274616c31353004000800009600244d6f7274616c31353104000800009700244d6f7274616c31353204000800009800244d6f7274616c31353304000800009900244d6f7274616c31353404000800009a00244d6f7274616c31353504000800009b00244d6f7274616c31353604000800009c00244d6f7274616c31353704000800009d00244d6f7274616c31353804000800009e00244d6f7274616c31353904000800009f00244d6f7274616c3136300400080000a000244d6f7274616c3136310400080000a100244d6f7274616c3136320400080000a200244d6f7274616c3136330400080000a300244d6f7274616c3136340400080000a400244d6f7274616c3136350400080000a500244d6f7274616c3136360400080000a600244d6f7274616c3136370400080000a700244d6f7274616c3136380400080000a800244d6f7274616c3136390400080000a900244d6f7274616c3137300400080000aa00244d6f7274616c3137310400080000ab00244d6f7274616c3137320400080000ac00244d6f7274616c3137330400080000ad00244d6f7274616c3137340400080000ae00244d6f7274616c3137350400080000af00244d6f7274616c3137360400080000b000244d6f7274616c3137370400080000b100244d6f7274616c3137380400080000b200244d6f7274616c3137390400080000b300244d6f7274616c3138300400080000b400244d6f7274616c3138310400080000b500244d6f7274616c3138320400080000b600244d6f7274616c3138330400080000b700244d6f7274616c3138340400080000b800244d6f7274616c3138350400080000b900244d6f7274616c3138360400080000ba00244d6f7274616c3138370400080000bb00244d6f7274616c3138380400080000bc00244d6f7274616c3138390400080000bd00244d6f7274616c3139300400080000be00244d6f7274616c3139310400080000bf00244d6f7274616c3139320400080000c000244d6f7274616c3139330400080000c100244d6f7274616c3139340400080000c200244d6f7274616c3139350400080000c300244d6f7274616c3139360400080000c400244d6f7274616c3139370400080000c500244d6f7274616c3139380400080000c600244d6f7274616c3139390400080000c700244d6f7274616c3230300400080000c800244d6f7274616c3230310400080000c900244d6f7274616c3230320400080000ca00244d6f7274616c3230330400080000cb00244d6f7274616c3230340400080000cc00244d6f7274616c3230350400080000cd00244d6f7274616c3230360400080000ce00244d6f7274616c3230370400080000cf00244d6f7274616c3230380400080000d000244d6f7274616c3230390400080000d100244d6f7274616c3231300400080000d200244d6f7274616c3231310400080000d300244d6f7274616c3231320400080000d400244d6f7274616c3231330400080000d500244d6f7274616c3231340400080000d600244d6f7274616c3231350400080000d700244d6f7274616c3231360400080000d800244d6f7274616c3231370400080000d900244d6f7274616c3231380400080000da00244d6f7274616c3231390400080000db00244d6f7274616c3232300400080000dc00244d6f7274616c3232310400080000dd00244d6f7274616c3232320400080000de00244d6f7274616c3232330400080000df00244d6f7274616c3232340400080000e000244d6f7274616c3232350400080000e100244d6f7274616c3232360400080000e200244d6f7274616c3232370400080000e300244d6f7274616c3232380400080000e400244d6f7274616c3232390400080000e500244d6f7274616c3233300400080000e600244d6f7274616c3233310400080000e700244d6f7274616c3233320400080000e800244d6f7274616c3233330400080000e900244d6f7274616c3233340400080000ea00244d6f7274616c3233350400080000eb00244d6f7274616c3233360400080000ec00244d6f7274616c3233370400080000ed00244d6f7274616c3233380400080000ee00244d6f7274616c3233390400080000ef00244d6f7274616c3234300400080000f000244d6f7274616c3234310400080000f100244d6f7274616c3234320400080000f200244d6f7274616c3234330400080000f300244d6f7274616c3234340400080000f400244d6f7274616c3234350400080000f500244d6f7274616c3234360400080000f600244d6f7274616c3234370400080000f700244d6f7274616c3234380400080000f800244d6f7274616c3234390400080000f900244d6f7274616c3235300400080000fa00244d6f7274616c3235310400080000fb00244d6f7274616c3235320400080000fc00244d6f7274616c3235330400080000fd00244d6f7274616c3235340400080000fe00244d6f7274616c3235350400080000ff0000510310306672616d655f73797374656d28657874656e73696f6e732c636865636b5f6e6f6e636528436865636b4e6f6e63650404540000040025010120543a3a496e6465780000550310306672616d655f73797374656d28657874656e73696f6e7330636865636b5f7765696768742c436865636b576569676874040454000000005903086870616c6c65745f7472616e73616374696f6e5f7061796d656e74604368617267655472616e73616374696f6e5061796d656e7404045400000400f901013042616c616e63654f663c543e00005d03083467616d65335f72756e74696d651c52756e74696d6500000000341853797374656d011853797374656d401c4163636f756e7401010402000c4101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008004e8205468652066756c6c206163636f756e7420696e666f726d6174696f6e20666f72206120706172746963756c6172206163636f756e742049442e3845787472696e736963436f756e74000010040004b820546f74616c2065787472696e7369637320636f756e7420666f72207468652063757272656e7420626c6f636b2e2c426c6f636b576569676874010020180000000000000488205468652063757272656e742077656967687420666f722074686520626c6f636b2e40416c6c45787472696e736963734c656e000010040004410120546f74616c206c656e6774682028696e2062797465732920666f7220616c6c2065787472696e736963732070757420746f6765746865722c20666f72207468652063757272656e7420626c6f636b2e24426c6f636b486173680101040510308000000000000000000000000000000000000000000000000000000000000000000498204d6170206f6620626c6f636b206e756d6265727320746f20626c6f636b206861736865732e3445787472696e736963446174610101040510340400043d012045787472696e73696373206461746120666f72207468652063757272656e7420626c6f636b20286d61707320616e2065787472696e736963277320696e64657820746f206974732064617461292e184e756d6265720100101000000000040901205468652063757272656e7420626c6f636b206e756d626572206265696e672070726f6365737365642e205365742062792060657865637574655f626c6f636b602e28506172656e744861736801003080000000000000000000000000000000000000000000000000000000000000000004702048617368206f66207468652070726576696f757320626c6f636b2e18446967657374010038040004f020446967657374206f66207468652063757272656e7420626c6f636b2c20616c736f2070617274206f662074686520626c6f636b206865616465722e184576656e747301004804001ca0204576656e7473206465706f736974656420666f72207468652063757272656e7420626c6f636b2e001d01204e4f54453a20546865206974656d20697320756e626f756e6420616e642073686f756c64207468657265666f7265206e657665722062652072656164206f6e20636861696e2ed020497420636f756c64206f746865727769736520696e666c6174652074686520506f562073697a65206f66206120626c6f636b2e002d01204576656e747320686176652061206c6172676520696e2d6d656d6f72792073697a652e20426f7820746865206576656e747320746f206e6f7420676f206f75742d6f662d6d656d6f7279fc206a75737420696e206361736520736f6d656f6e65207374696c6c207265616473207468656d2066726f6d2077697468696e207468652072756e74696d652e284576656e74436f756e74010010100000000004b820546865206e756d626572206f66206576656e747320696e2074686520604576656e74733c543e60206c6973742e2c4576656e74546f70696373010104023019010400282501204d617070696e67206265747765656e206120746f7069632028726570726573656e74656420627920543a3a486173682920616e64206120766563746f72206f6620696e646578657394206f66206576656e747320696e2074686520603c4576656e74733c543e3e60206c6973742e00510120416c6c20746f70696320766563746f727320686176652064657465726d696e69737469632073746f72616765206c6f636174696f6e7320646570656e64696e67206f6e2074686520746f7069632e2054686973450120616c6c6f7773206c696768742d636c69656e747320746f206c6576657261676520746865206368616e67657320747269652073746f7261676520747261636b696e67206d656368616e69736d20616e64e420696e2063617365206f66206368616e67657320666574636820746865206c697374206f66206576656e7473206f6620696e7465726573742e004d01205468652076616c756520686173207468652074797065206028543a3a426c6f636b4e756d6265722c204576656e74496e646578296020626563617573652069662077652075736564206f6e6c79206a7573744d012074686520604576656e74496e64657860207468656e20696e20636173652069662074686520746f70696320686173207468652073616d6520636f6e74656e7473206f6e20746865206e65787420626c6f636b0101206e6f206e6f74696669636174696f6e2077696c6c20626520747269676765726564207468757320746865206576656e74206d69676874206265206c6f73742e484c61737452756e74696d65557067726164650000210104000455012053746f726573207468652060737065635f76657273696f6e6020616e642060737065635f6e616d6560206f66207768656e20746865206c6173742072756e74696d6520757067726164652068617070656e65642e545570677261646564546f553332526566436f756e740100ac0400044d012054727565206966207765206861766520757067726164656420736f207468617420607479706520526566436f756e74602069732060753332602e2046616c7365202864656661756c7429206966206e6f742e605570677261646564546f547269706c65526566436f756e740100ac0400085d012054727565206966207765206861766520757067726164656420736f2074686174204163636f756e74496e666f20636f6e7461696e73207468726565207479706573206f662060526566436f756e74602e2046616c736548202864656661756c7429206966206e6f742e38457865637574696f6e506861736500001101040004882054686520657865637574696f6e207068617365206f662074686520626c6f636b2e012d0101541830426c6f636b576569676874733d01f9010203815d000b00204aa9d10113ffffffffffffffffc2e9171b00010b90cd43a72e011366666666666666a6010b0098f73e5d0113ffffffffffffffbf010000c2e9171b00010b90559611a3011366666666666666e6010b00204aa9d10113ffffffffffffffff01070088526a74130000000000000040c2e9171b0000000004d020426c6f636b20262065787472696e7369637320776569676874733a20626173652076616c75657320616e64206c696d6974732e2c426c6f636b4c656e6774684d013000003c00000050000000500004a820546865206d6178696d756d206c656e677468206f66206120626c6f636b2028696e206279746573292e38426c6f636b48617368436f756e74101060090000045501204d6178696d756d206e756d626572206f6620626c6f636b206e756d62657220746f20626c6f636b2068617368206d617070696e677320746f206b65657020286f6c64657374207072756e6564206669727374292e20446257656967687455014040787d010000000000e1f505000000000409012054686520776569676874206f662072756e74696d65206461746162617365206f7065726174696f6e73207468652072756e74696d652063616e20696e766f6b652e1c56657273696f6e590189021467616d65331467616d65330100000072000000010000002cdf6acb689907609b0400000037e397fc7c91f5e40200000040fe3ad401f8959a06000000d2bc9897eed08f1503000000f78b278be53f454c02000000dd718d5cc53262d401000000ab3c0572291feb8b01000000ed99c5acb25eedf503000000bc9d89904f5b923f0100000037c8bb1350a9a2a804000000f3ff14d5ab5270590300000001000000010484204765742074686520636861696e27732063757272656e742076657273696f6e2e28535335385072656669786d01082a0014a8205468652064657369676e61746564205353353820707265666978206f66207468697320636861696e2e0039012054686973207265706c6163657320746865202273733538466f726d6174222070726f7065727479206465636c6172656420696e2074686520636861696e20737065632e20526561736f6e20697331012074686174207468652072756e74696d652073686f756c64206b6e6f772061626f7574207468652070726566697820696e206f7264657220746f206d616b6520757365206f662069742061737020616e206964656e746966696572206f662074686520636861696e2e017101006052616e646f6d6e657373436f6c6c656374697665466c6970016052616e646f6d6e657373436f6c6c656374697665466c6970043852616e646f6d4d6174657269616c0100750104000c610120536572696573206f6620626c6f636b20686561646572732066726f6d20746865206c61737420383120626c6f636b73207468617420616374732061732072616e646f6d2073656564206d6174657269616c2e2054686973610120697320617272616e67656420617320612072696e672062756666657220776974682060626c6f636b5f6e756d626572202520383160206265696e672074686520696e64657820696e746f20746865206056656360206f664420746865206f6c6465737420686173682e00000000012454696d657374616d70012454696d657374616d70080c4e6f7701002c20000000000000000004902043757272656e742074696d6520666f72207468652063757272656e7420626c6f636b2e244469645570646174650100ac040004b420446964207468652074696d657374616d7020676574207570646174656420696e207468697320626c6f636b3f0179010004344d696e696d756d506572696f642c20b80b000000000000104d0120546865206d696e696d756d20706572696f64206265747765656e20626c6f636b732e204265776172652074686174207468697320697320646966666572656e7420746f20746865202a65787065637465642a5d0120706572696f6420746861742074686520626c6f636b2070726f64756374696f6e206170706172617475732070726f76696465732e20596f75722063686f73656e20636f6e73656e7375732073797374656d2077696c6c5d012067656e6572616c6c7920776f726b2077697468207468697320746f2064657465726d696e6520612073656e7369626c6520626c6f636b2074696d652e20652e672e20466f7220417572612c2069742077696c6c206265a020646f75626c65207468697320706572696f64206f6e2064656661756c742073657474696e67732e000210417572610000000000031c4772616e647061011c4772616e6470611814537461746501007d0104000490205374617465206f66207468652063757272656e7420617574686f72697479207365742e3450656e64696e674368616e676500008101040004c42050656e64696e67206368616e67653a20287369676e616c65642061742c207363686564756c6564206368616e6765292e284e657874466f72636564000010040004bc206e65787420626c6f636b206e756d6265722077686572652077652063616e20666f7263652061206368616e67652e1c5374616c6c656400001d010400049020607472756560206966207765206172652063757272656e746c79207374616c6c65642e3043757272656e74536574496401002c200000000000000000085d0120546865206e756d626572206f66206368616e6765732028626f746820696e207465726d73206f66206b65797320616e6420756e6465726c79696e672065636f6e6f6d696320726573706f6e736962696c697469657329c420696e20746865202273657422206f66204772616e6470612076616c696461746f72732066726f6d2067656e657369732e30536574496453657373696f6e000104052c1004002859012041206d617070696e672066726f6d206772616e6470612073657420494420746f2074686520696e646578206f6620746865202a6d6f737420726563656e742a2073657373696f6e20666f722077686963682069747368206d656d62657273207765726520726573706f6e7369626c652e0045012054686973206973206f6e6c79207573656420666f722076616c69646174696e672065717569766f636174696f6e2070726f6f66732e20416e2065717569766f636174696f6e2070726f6f66206d7573744d0120636f6e7461696e732061206b65792d6f776e6572736869702070726f6f6620666f72206120676976656e2073657373696f6e2c207468657265666f7265207765206e65656420612077617920746f20746965450120746f6765746865722073657373696f6e7320616e64204752414e44504120736574206964732c20692e652e207765206e65656420746f2076616c6964617465207468617420612076616c696461746f7241012077617320746865206f776e6572206f66206120676976656e206b6579206f6e206120676976656e2073657373696f6e2c20616e642077686174207468652061637469766520736574204944207761735420647572696e6720746861742073657373696f6e2e00b82054574f582d4e4f54453a2060536574496460206973206e6f7420756e646572207573657220636f6e74726f6c2e018901017808384d6178417574686f726974696573101020000000045c204d617820417574686f72697469657320696e20757365584d6178536574496453657373696f6e456e74726965732c20000000000000000018390120546865206d6178696d756d206e756d626572206f6620656e747269657320746f206b65657020696e207468652073657420696420746f2073657373696f6e20696e646578206d617070696e672e0031012053696e6365207468652060536574496453657373696f6e60206d6170206973206f6e6c79207573656420666f722076616c69646174696e672065717569766f636174696f6e73207468697329012076616c75652073686f756c642072656c61746520746f2074686520626f6e64696e67206475726174696f6e206f66207768617465766572207374616b696e672073797374656d2069733501206265696e6720757365642028696620616e79292e2049662065717569766f636174696f6e2068616e646c696e67206973206e6f7420656e61626c6564207468656e20746869732076616c7565342063616e206265207a65726f2e01bd01042042616c616e636573012042616c616e6365731c34546f74616c49737375616e6365010018400000000000000000000000000000000004982054686520746f74616c20756e6974732069737375656420696e207468652073797374656d2e40496e61637469766549737375616e636501001840000000000000000000000000000000000409012054686520746f74616c20756e697473206f66206f75747374616e64696e672064656163746976617465642062616c616e636520696e207468652073797374656d2e1c4163636f756e74010104020014010100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080600901205468652042616c616e6365732070616c6c6574206578616d706c65206f662073746f72696e67207468652062616c616e6365206f6620616e206163636f756e742e00282023204578616d706c650034206060606e6f636f6d70696c65b02020696d706c2070616c6c65745f62616c616e6365733a3a436f6e66696720666f722052756e74696d65207b19022020202074797065204163636f756e7453746f7265203d2053746f726167654d61705368696d3c53656c663a3a4163636f756e743c52756e74696d653e2c206672616d655f73797374656d3a3a50726f76696465723c52756e74696d653e2c204163636f756e7449642c2053656c663a3a4163636f756e74446174613c42616c616e63653e3e0c20207d102060606000150120596f752063616e20616c736f2073746f7265207468652062616c616e6365206f6620616e206163636f756e7420696e20746865206053797374656d602070616c6c65742e00282023204578616d706c650034206060606e6f636f6d70696c65b02020696d706c2070616c6c65745f62616c616e6365733a3a436f6e66696720666f722052756e74696d65207b7420202074797065204163636f756e7453746f7265203d2053797374656d0c20207d102060606000510120427574207468697320636f6d657320776974682074726164656f6666732c2073746f72696e67206163636f756e742062616c616e63657320696e207468652073797374656d2070616c6c65742073746f7265736d0120606672616d655f73797374656d60206461746120616c6f6e677369646520746865206163636f756e74206461746120636f6e747261727920746f2073746f72696e67206163636f756e742062616c616e63657320696e207468652901206042616c616e636573602070616c6c65742c20776869636820757365732061206053746f726167654d61706020746f2073746f72652062616c616e6365732064617461206f6e6c792e4101204e4f54453a2054686973206973206f6e6c79207573656420696e207468652063617365207468617420746869732070616c6c6574206973207573656420746f2073746f72652062616c616e6365732e144c6f636b730101040200c101040008b820416e79206c6971756964697479206c6f636b73206f6e20736f6d65206163636f756e742062616c616e6365732e2501204e4f54453a2053686f756c64206f6e6c79206265206163636573736564207768656e2073657474696e672c206368616e67696e6720616e642066726565696e672061206c6f636b2e2052657365727665730101040200d101040004a4204e616d6564207265736572766573206f6e20736f6d65206163636f756e742062616c616e6365732e14486f6c64730101040200dd010400046c20486f6c6473206f6e206163636f756e742062616c616e6365732e1c467265657a65730101040200dd010400048820467265657a65206c6f636b73206f6e206163636f756e742062616c616e6365732e01e901018c14484578697374656e7469616c4465706f7369741840f401000000000000000000000000000020410120546865206d696e696d756d20616d6f756e7420726571756972656420746f206b65657020616e206163636f756e74206f70656e2e204d5553542042452047524541544552205448414e205a45524f2100590120496620796f75202a7265616c6c792a206e65656420697420746f206265207a65726f2c20796f752063616e20656e61626c652074686520666561747572652060696e7365637572655f7a65726f5f65646020666f72610120746869732070616c6c65742e20486f77657665722c20796f7520646f20736f20617420796f7572206f776e207269736b3a20746869732077696c6c206f70656e2075702061206d616a6f7220446f5320766563746f722e590120496e206361736520796f752068617665206d756c7469706c6520736f7572636573206f662070726f7669646572207265666572656e6365732c20796f75206d617920616c736f2067657420756e65787065637465648c206265686176696f757220696620796f7520736574207468697320746f207a65726f2e00f020426f74746f6d206c696e653a20446f20796f757273656c662061206661766f757220616e64206d616b65206974206174206c65617374206f6e6521204d61784c6f636b7310103200000008f420546865206d6178696d756d206e756d626572206f66206c6f636b7320746861742073686f756c64206578697374206f6e20616e206163636f756e742edc204e6f74207374726963746c7920656e666f726365642c20627574207573656420666f722077656967687420657374696d6174696f6e2e2c4d61785265736572766573101000000000040d0120546865206d6178696d756d206e756d626572206f66206e616d656420726573657276657320746861742063616e206578697374206f6e20616e206163636f756e742e204d6178486f6c647310100000000004190120546865206d6178696d756d206e756d626572206f6620686f6c647320746861742063616e206578697374206f6e20616e206163636f756e7420617420616e792074696d652e284d6178467265657a657310100000000004610120546865206d6178696d756d206e756d626572206f6620696e646976696475616c20667265657a65206c6f636b7320746861742063616e206578697374206f6e20616e206163636f756e7420617420616e792074696d652e01010205485472616e73616374696f6e5061796d656e7401485472616e73616374696f6e5061796d656e7408444e6578744665654d756c7469706c6965720100050240000064a7b3b6e00d0000000000000000003853746f7261676556657273696f6e0100090204000000019404604f7065726174696f6e616c4665654d756c7469706c696572080405545901204120666565206d756c6974706c69657220666f7220604f7065726174696f6e616c602065787472696e7369637320746f20636f6d7075746520227669727475616c207469702220746f20626f6f73742074686569722c20607072696f7269747960004d0120546869732076616c7565206973206d756c7469706c656420627920746865206066696e616c5f6665656020746f206f627461696e206120227669727475616c20746970222074686174206973206c61746572f420616464656420746f20612074697020636f6d706f6e656e7420696e20726567756c617220607072696f72697479602063616c63756c6174696f6e732e4d01204974206d65616e732074686174206120604e6f726d616c60207472616e73616374696f6e2063616e2066726f6e742d72756e20612073696d696c61726c792d73697a656420604f7065726174696f6e616c6041012065787472696e736963202877697468206e6f20746970292c20627920696e636c7564696e672061207469702076616c75652067726561746572207468616e20746865207669727475616c207469702e003c20606060727573742c69676e6f726540202f2f20466f7220604e6f726d616c608c206c6574207072696f72697479203d207072696f726974795f63616c6328746970293b0054202f2f20466f7220604f7065726174696f6e616c601101206c6574207669727475616c5f746970203d2028696e636c7573696f6e5f666565202b2074697029202a204f7065726174696f6e616c4665654d756c7469706c6965723bc4206c6574207072696f72697479203d207072696f726974795f63616c6328746970202b207669727475616c5f746970293b1020606060005101204e6f746520746861742073696e636520776520757365206066696e616c5f6665656020746865206d756c7469706c696572206170706c69657320616c736f20746f2074686520726567756c61722060746970605d012073656e74207769746820746865207472616e73616374696f6e2e20536f2c206e6f74206f6e6c7920646f657320746865207472616e73616374696f6e206765742061207072696f726974792062756d702062617365646101206f6e207468652060696e636c7573696f6e5f666565602c2062757420776520616c736f20616d706c6966792074686520696d70616374206f662074697073206170706c69656420746f20604f7065726174696f6e616c6038207472616e73616374696f6e732e0006105375646f01105375646f040c4b6579000000040004842054686520604163636f756e74496460206f6620746865207375646f206b65792e010d02019800013d0207104e66747301104e6674733c28436f6c6c656374696f6e00010402104102040004642044657461696c73206f66206120636f6c6c656374696f6e2e4c4f776e657273686970416363657074616e636500010402001004000429012054686520636f6c6c656374696f6e2c20696620616e792c206f6620776869636820616e206163636f756e742069732077696c6c696e6720746f2074616b65206f776e6572736869702e1c4163636f756e7400010c0202024502a0040008590120546865206974656d732068656c6420627920616e7920676976656e206163636f756e743b20736574206f757420746869732077617920736f2074686174206974656d73206f776e656420627920612073696e676c656c206163636f756e742063616e20626520656e756d6572617465642e44436f6c6c656374696f6e4163636f756e7400010802024902a004000869012054686520636f6c6c656374696f6e73206f776e656420627920616e7920676976656e206163636f756e743b20736574206f757420746869732077617920736f207468617420636f6c6c656374696f6e73206f776e65642062799020612073696e676c65206163636f756e742063616e20626520656e756d6572617465642e40436f6c6c656374696f6e526f6c654f6600010802024d025102040008d020546865206974656d7320696e206578697374656e636520616e64207468656972206f776e6572736869702064657461696c732ea02053746f72657320636f6c6c656374696f6e20726f6c657320617320706572206163636f756e742e104974656d00010802021d015902040004d020546865206974656d7320696e206578697374656e636520616e64207468656972206f776e6572736869702064657461696c732e50436f6c6c656374696f6e4d657461646174614f660001040210710204000468204d65746164617461206f66206120636f6c6c656374696f6e2e384974656d4d657461646174614f6600010802021d01750204000454204d65746164617461206f6620616e206974656d2e24417474726962757465000110020202027d028102040004702041747472696275746573206f66206120636f6c6c656374696f6e2e2c4974656d50726963654f6600010802021d018902040004502041207072696365206f6620616e206974656d2e644974656d41747472696275746573417070726f76616c734f6601010802021d018d0204000468204974656d2061747472696275746520617070726f76616c732e404e657874436f6c6c656374696f6e496400001004000831012053746f726573207468652060436f6c6c656374696f6e496460207468617420697320676f696e6720746f206265207573656420666f7220746865206e65787420636f6c6c656374696f6e2ef02054686973206765747320696e6372656d656e746564207768656e657665722061206e657720636f6c6c656374696f6e20697320637265617465642e3450656e64696e67537761704f6600010802021d0195020400047c2048616e646c657320616c6c207468652070656e64696e672073776170732e48436f6c6c656374696f6e436f6e6669674f66000104021099020400046020436f6e666967206f66206120636f6c6c656374696f6e2e304974656d436f6e6669674f6600010802021d0119020400044c20436f6e666967206f6620616e206974656d2e0001a83844436f6c6c656374696f6e4465706f7369741840020000000000000000000000000000000401012054686520626173696320616d6f756e74206f662066756e64732074686174206d75737420626520726573657276656420666f7220636f6c6c656374696f6e2e2c4974656d4465706f73697418400100000000000000000000000000000004f42054686520626173696320616d6f756e74206f662066756e64732074686174206d75737420626520726573657276656420666f7220616e206974656d2e4c4d657461646174614465706f73697442617365184001000000000000000000000000000000044d012054686520626173696320616d6f756e74206f662066756e64732074686174206d757374206265207265736572766564207768656e20616464696e67206d6574616461746120746f20796f7572206974656d2e504174747269627574654465706f736974426173651840010000000000000000000000000000000455012054686520626173696320616d6f756e74206f662066756e64732074686174206d757374206265207265736572766564207768656e20616464696e6720616e2061747472696275746520746f20616e206974656d2e384465706f7369745065724279746518400100000000000000000000000000000008590120546865206164646974696f6e616c2066756e64732074686174206d75737420626520726573657276656420666f7220746865206e756d626572206f662062797465732073746f726520696e206d657461646174612cc02065697468657220226e6f726d616c22206d65746164617461206f7220617474726962757465206d657461646174612e2c537472696e674c696d697410102c01000004b020546865206d6178696d756d206c656e677468206f6620646174612073746f726564206f6e2d636861696e2e204b65794c696d697410103200000004a020546865206d6178696d756d206c656e677468206f6620616e20617474726962757465206b65792e2856616c75654c696d697410103200000004a820546865206d6178696d756d206c656e677468206f6620616e206174747269627574652076616c75652e38417070726f76616c734c696d697410100a00000004a820546865206d6178696d756d20617070726f76616c7320616e206974656d20636f756c6420686176652e704974656d41747472696275746573417070726f76616c734c696d697410100200000004d420546865206d6178696d756d206174747269627574657320617070726f76616c7320616e206974656d20636f756c6420686176652e1c4d61785469707310100a00000004a820546865206d6178206e756d626572206f6620746970732061207573657220636f756c642073656e642e4c4d6178446561646c696e654475726174696f6e10101027000004a820546865206d6178206475726174696f6e20696e20626c6f636b7320666f7220646561646c696e65732e504d61784174747269627574657350657243616c6c10100200000004e020546865206d6178206e756d626572206f6620617474726962757465732061207573657220636f756c6420736574207065722063616c6c2e204665617475726573ad0220000000000000000004902044697361626c657320736f6d65206f662070616c6c657427732066656174757265732e01b502081047616d65011047616d65641047616d650001040510b902040004602053746f72696e672062617369632067616d6520696e666f2c47616d654163636f756e7400010802024902a00400083901205468652067616d6573206f776e656420627920616e7920676976656e206163636f756e743b20736574206f757420746869732077617920736f20746861742067616d6573206f776e65642062799020612073696e676c65206163636f756e742063616e20626520656e756d6572617465642e284e65787447616d654964000010040004542053746f72696e67206e6578742067616d652069642c4e65787454726164654964000010040004582053746f72696e67206e657874207472616465206964284e657874506f6f6c4964000010040004742053746f72696e67206e657874206d696e74696e6720706f6f6c20696434436f6c6c656374696f6e734f660101040510bd020400046020436f6c6c656374696f6e7320696e207468652067616d651c47616d65734f660101040510c1020400045820436f6c6c656374696f6e2062656c6f6e677320746f3847616d654d657461646174614f660001040210c50204000450204d65746164617461206f6620612067616d652e38506f6f6c4d657461646174614f660001040210c90204000450204d65746164617461206f66206120706f6f6c2e2847616d65526f6c654f6600010802024d0251020400042c2047616d6520726f6c6573344974656d42616c616e63654f6601010c02020545021010000000000464204974656d2062616c616e636573206f66206163636f756e7444526573657276656442616c616e63654f6601010c020205450210100000000004642053746f72696e672072657365727665642062616c616e636520537570706c794f6600010802021d01b0040004dc2053746f72696e67204e667420737570706c6965732c20604e6f6e656020696e6469636174657320696e66696e69746520737570706c792c4c6f6f745461626c654f660101040010cd02040004d4204974656d207265736572766520666f722072616e646f6d206d696e74696e67206372656174656420627920746865206f776e657218506f6f6c4f660001040510d1020400048c2053746f72696e67206d696e74696e6720706f6f6c20636f6e66696775726174696f6e344d696e74526571756573744f660101040510d502040004542053746f72696e67206d696e7420726571756573741c4c6576656c4f6601010802021d011010000000000438204c6576656c206f66206974656d304f726967696e4974656d4f66000104021d011d01040004c42053746f72696e6720746865206f726967696e616c206974656d73206f6620746865207570677261646564206974656d733c55706772616465436f6e6669674f6600010c020202e102e5020400046c2053746f72696e6720746865207570677261646520636f6e6669672852616e646f6d536565640100048000000000000000000000000000000000000000000000000000000000000000000411012053746f72696e672072616e646f6d20736565642067656e6572617465642066726f6d20746865206f66662d636861696e20776f726b657220657665727920626c6f636b2042756e646c654f660101040210e9020400043c2053746f72696e672062756e646c65345472616465436f6e6669674f660001040210ed02040004702053746f72696e6720747261646520636f6e66696775726174696f6e3c41756374696f6e436f6e6669674f660001040210f502040004782053746f72696e672061756374696f6e20636f6e66696775726174696f6e30486967686573744269644f660001040210f00400048c2053746f72696e6720746865206869676865737420626964206f662061756374696f6e40416464696e67416363657074616e6365000104021010040004b82053746f7265206163636570747320746f2061646420636f6c6c656374696f6e7320746f207468652067616d657301150201d4302c47616d654465706f736974184000002cf61a24a229000000000000000004f02054686520626173696320616d6f756e74206f662066756e64732074686174206d75737420626520726573657276656420666f7220612067616d652e444d696e696e67506f6f6c4465706f736974184000002cf61a24a22900000000000000000411012054686520626173696320616d6f756e74206f662066756e64732074686174206d75737420626520726573657276656420666f722061206d696e74696e6720706f6f6c2e444d617847616d65436f6c6c656374696f6e10100500000004a8204d6178696d756d206e756d626572206f6620636f6c6c656374696f6e7320696e2061202067616d652e304d617847616d65536861726510100500000004c0204d6178696d756d206e756d626572206f662067616d6573206120636f6c6c656374696f6e2063616e2073686172652e1c4d61784974656d10101400000004cc204d6178696d756d206e756d626572206f66206974656d2074686174206120636f6c6c656374696f6e20636f756c64206861732c4d61784d696e744974656d10100a000000048c204d6178696d756d206e756d626572206f66206974656d206d696e746564206f6e636538557067726164654465706f7369741840000064a7b3b6e00d00000000000000000405012054686520626173696320616d6f756e74206f662066756e64732074686174206d75737420626520726573657276656420666f7220616e7920757067726164652e244d617842756e646c6510100a00000004a4204d6178696d756d20636f6c6c656374696f6e20696e20612062756e646c6520666f722074726164651c4d61784c6f6f7410100a00000004b8204d6178696d756d206e756d626572206f66206c6f6f7420746861742061207461626c6520636f756c64206861733442756e646c654465706f73697418400000c84e676dc11b00000000000000000401012054686520626173696320616d6f756e74206f662066756e64732074686174206d75737420626520726573657276656420666f7220616e792062756e646c652e384d61784d696e745265717565737410100a00000004b8204d6178696d756d206e756d626572206f66206d696e74696e672072657175657374732070657220626c6f636b2e304d696e74496e74657276616c101002000000040d01204e756d626572206f6620626c6f636b73206f6620636f6f6c646f776e20726571756972656420746f2070726f63657373206d696e74696e672072657175657374732e01f902093847616d6552616e646f6d6e657373013847616d6552616e646f6d6e65737308384e657874556e7369676e656441740100101000000000140d0120446566696e65732074686520626c6f636b207768656e206e65787420756e7369676e6564207472616e73616374696f6e2077696c6c2062652061636365707465642e001d0120546f2070726576656e74207370616d206f6620756e7369676e65642028616e6420756e706169642129207472616e73616374696f6e73206f6e20746865206e6574776f726b2c0901207765206f6e6c7920616c6c6f77206f6e65207472616e73616374696f6e2065766572792060543a3a556e7369676e6564496e74657276616c6020626c6f636b732e250120546869732073746f7261676520656e74727920646566696e6573207768656e206e6577207472616e73616374696f6e20697320676f696e6720746f2062652061636365707465642e2852616e646f6d536565640000fd02040004e42053746f72696e672072616e646f6d20736565642067656e6572617465642066726f6d20746865206f66662d636861696e20776f726b65722e013502010501102050616c6c6574496401032067616d65726e64730040556e7369676e65645072696f726974792c20320000000000000010f0204120636f6e66696775726174696f6e20666f722062617365207072696f72697479206f6620756e7369676e6564207472616e73616374696f6e732e0015012054686973206973206578706f73656420736f20746861742069742063616e2062652074756e656420666f7220706172746963756c61722072756e74696d652c207768656eb4206d756c7469706c652070616c6c6574732073656e6420756e7369676e6564207472616e73616374696f6e732e40556e7369676e6564496e74657276616c101001000000101501204e756d626572206f6620626c6f636b73206f6620636f6f6c646f776e20616674657220756e7369676e6564207472616e73616374696f6e20697320696e636c756465642e005901205468697320656e73757265732074686174207765206f6e6c792061636365707420756e7369676e6564207472616e73616374696f6e73206f6e63652c2065766572792060556e7369676e6564496e74657276616c602020626c6f636b732e3452616e646f6d417474656d707310100a000000041101204e756d626572206f6620617474656d70747320746f2072652d72616e646f6d697a6520696e206f7264657220746f20726564756365206d6f64756c757320626961732e0105030a184661756365740118466175636574043c47656e657369734163636f756e7473010009030400046420486f6c64696e6720616c6c20746865206163636f756e747301390201090100010d030b2c50616c6c65744361636865012c50616c6c65744361636865102044617461466c61670100110304000020446174614c6566740001080505150319030400040d0120486f6c64696e67207468652064617461207468617420696e7365727420696e204361636865206279206b657973204163636f756e74496420616e6420416374696f6e244461746152696768740001080505150319030400040d0120486f6c64696e67207468652064617461207468617420696e7365727420696e204361636865206279206b657973204163636f756e74496420616e6420416374696f6e204d61726b54696d6501001840a0d6e2838a01000000000000000000000000010d010424436c65616e54696d6518404038000000000000000000000000000004a82043616368652077696c6c20636c65616e20746865206461746120616674657220746869732074696d65011d030c2103042048436865636b4e6f6e5a65726f53656e6465723903a040436865636b5370656356657273696f6e3d031038436865636b547856657273696f6e41031030436865636b47656e6573697345033038436865636b4d6f7274616c69747949033028436865636b4e6f6e63655103a02c436865636b5765696768745503a0604368617267655472616e73616374696f6e5061796d656e745903a05d03","id":"1"}
\ No newline at end of file
+Provided Host header is not whitelisted.
diff --git a/package.json b/package.json
index f2230fca..64a30fe5 100644
--- a/package.json
+++ b/package.json
@@ -10,6 +10,7 @@
"scripts": {
"dev": "vite --host",
"lint": "eslint src --ext .ts,.tsx",
+ "lint:pretty": "tsc --noEmit --pretty",
"build": "vite build",
"preview": "vite preview --host",
"typegen": "yarn get:testnet:metadata && yarn generate:defs && yarn generate:meta",
@@ -20,53 +21,36 @@
"test": "jest"
},
"dependencies": {
- "@chakra-ui/react": "^2.4.5",
- "@emotion/react": "^11",
- "@emotion/styled": "^11",
- "@ethersproject/bignumber": "^5.6.0",
+ "@chakra-ui/react": "^2.8.1",
+ "@emotion/react": "^11.11.1",
+ "@emotion/styled": "^11.11.0",
"@fontsource-variable/lexend": "^5.0.3",
- "@graphql-codegen/cli": "^2.6.2",
- "@graphql-codegen/typescript": "^2.4.11",
- "@graphql-codegen/typescript-operations": "^2.4.0",
- "@graphql-codegen/typescript-react-query": "^4.0.6",
- "@polkadot/api": "^10.6.1",
- "@polkadot/extension-dapp": "^0.46.2",
- "@polkadot/keyring": "^12.1.2",
- "@polkadot/networks": "^12.1.2",
- "@polkadot/typegen": "^10.9.1",
- "@polkadot/types": "^10.6.1",
- "@polkadot/ui-keyring": "^3.3.1",
- "@polkadot/ui-settings": "^3.3.1",
- "@polkadot/util": "^12.1.2",
- "@polkadot/util-crypto": "^12.1.2",
+ "@polkadot/react-identicon": "^3.6.3",
+ "@polkadot/api": "^9.4.2",
+ "@polkadot/typegen": "^9.4.2",
+ "@polkadot/types": "^9.4.2",
"@reduxjs/toolkit": "^1.9.5",
- "@rehooks/local-storage": "^2.4.4",
"@tanstack/react-query": "^4.29.14",
"@tanstack/react-query-devtools": "^4.29.15",
- "@testing-library/jest-dom": "^5.16.5",
- "@testing-library/react": "^14.0.0",
- "@testing-library/react-hooks": "^8.0.1",
- "@testing-library/user-event": "^14.4.3",
"axios": "^1.1.2",
"date-fns": "^2.30.0",
"framer-motion": "^6.5.0",
"jest": "^29.5.0",
"jest-environment-jsdom": "^29.5.0",
"react": "^18.2.0",
- "react-cropper": "^2.3.3",
"react-dom": "^18.2.0",
"react-hook-form": "^7.44.3",
- "react-i18next": "^12.3.1",
- "react-jazzicon": "^1.0.4",
"react-json-view": "^1.21.3",
"react-redux": "^8.1.1",
"react-router-dom": "^6.13.0",
- "swiper": "^9.4.1",
"ts-jest": "^29.1.0",
- "vite-tsconfig-paths": "^4.2.0",
- "web3": "^4.0.1"
+ "vite-tsconfig-paths": "^4.2.0"
},
"devDependencies": {
+ "@testing-library/jest-dom": "^5.16.5",
+ "@testing-library/react": "^14.0.0",
+ "@testing-library/react-hooks": "^8.0.1",
+ "@testing-library/user-event": "^14.4.3",
"@types/jest": "^29.5.2",
"@types/node": "^20.2.6",
"@types/react": "^18.2.11",
@@ -84,7 +68,7 @@
"eslint-plugin-react-refresh": "^0.3.4",
"prettier": "^2.8.8",
"ts-node": "^10.9.1",
- "typescript": "^5.1.6",
+ "typescript": "^5.2.2",
"vite": "^4.3.9",
"vite-plugin-svgr": "^3.2.0"
},
diff --git a/src/App.tsx b/src/App.tsx
index 25bf8d14..a2a8f5bb 100644
--- a/src/App.tsx
+++ b/src/App.tsx
@@ -1,30 +1,6 @@
-import { Center, Heading, Spinner } from '@chakra-ui/react';
-import { connectAPI } from 'components/ConnectSubstrate/ConnectSubstrateUtils';
-
-import { useAppDispatch, useAppSelector } from 'hooks/useRedux';
-
import { RouterProvider } from 'react-router-dom';
import router from 'routes/routes';
export default function App() {
- const dispatch = useAppDispatch();
-
- const { apiState, socket, jsonrpc } = useAppSelector(
- state => state.substrate
- );
-
- connectAPI({ socket, jsonrpc, apiState, dispatch });
-
- if (apiState !== 'READY') {
- return (
-
-
-
- Connecting to Substrate
-
-
- );
- }
-
return ;
}
diff --git a/src/components/Avatar/AvatarCollaborators.tsx b/src/components/Avatar/AvatarCollaborators.tsx
index 66e3d5c1..f9f07b32 100644
--- a/src/components/Avatar/AvatarCollaborators.tsx
+++ b/src/components/Avatar/AvatarCollaborators.tsx
@@ -1,11 +1,11 @@
import { Box, Center, Flex, FlexProps, Text } from '@chakra-ui/react';
import AvatarJazzicon from './AvatarJazzicon';
-import ButtonCopy from 'components/ButtonCopy';
-import { ColorOfCollaborator, convertHex, shorten } from 'utils/utils';
+import { ColorOfCollaborator, convertHex, shorten } from 'utils';
import { TypeCollaboratorsRole } from 'layouts/Collaborators/CollaboratorsUtils';
import React from 'react';
+import Clipboard from 'components/Clipboard';
interface AvatarProfileProps {
role: TypeCollaboratorsRole;
@@ -17,10 +17,7 @@ interface AvatarProfileProps {
export default ({ role, account, changeRole, sx }: AvatarProfileProps) => {
return (
-
+
@@ -41,7 +38,7 @@ export default ({ role, account, changeRole, sx }: AvatarProfileProps) => {
{shorten(account.address, 12)}
-
+
diff --git a/src/components/Avatar/AvatarJazzicon.tsx b/src/components/Avatar/AvatarJazzicon.tsx
index 33b4d7eb..26b38abd 100644
--- a/src/components/Avatar/AvatarJazzicon.tsx
+++ b/src/components/Avatar/AvatarJazzicon.tsx
@@ -1,32 +1,20 @@
-import { Box, BoxProps } from '@chakra-ui/react';
+import { Box } from '@chakra-ui/react';
+import Identicon from '@polkadot/react-identicon';
+import { IdentityProps } from '@polkadot/react-identicon/types';
-import { jsNumberForAddress } from 'react-jazzicon';
-import Jazzicon from 'react-jazzicon/dist/Jazzicon';
-
-interface AvatarJazziconProps {
- address: string;
- sx?: BoxProps;
-}
-
-export default function AvatarJazzicon({ address, sx }: AvatarJazziconProps) {
+export default (props: IdentityProps) => {
+ /*
+ but you cannot using variable as chakra
+ Ex: borderRadius: "full" // cannot so should '100%'
+ */
return (
-
-
-
+
);
-}
+};
diff --git a/src/components/Avatar/AvatarPopover.tsx b/src/components/Avatar/AvatarPopover.tsx
index 9421f6ea..ac98f0b7 100644
--- a/src/components/Avatar/AvatarPopover.tsx
+++ b/src/components/Avatar/AvatarPopover.tsx
@@ -9,9 +9,10 @@ import {
PopoverTrigger,
Text,
} from '@chakra-ui/react';
-import ButtonCopy from 'components/ButtonCopy';
-import { shorten } from 'utils/utils';
+
+import { shorten } from 'utils';
import AvatarJazzicon from './AvatarJazzicon';
+import Clipboard from 'components/Clipboard';
interface AvatarPopoverProps extends React.PropsWithChildren {
type: 'Owner' | 'Admin';
@@ -47,20 +48,18 @@ export default function AvatarPopover({
{type}
-
+
{name}
{shorten(address, 12)}
-
diff --git a/src/components/BackgroundUpload/index.tsx b/src/components/BackgroundUpload/index.tsx
index 063569f5..9f8d6a4a 100644
--- a/src/components/BackgroundUpload/index.tsx
+++ b/src/components/BackgroundUpload/index.tsx
@@ -1,6 +1,6 @@
import { Box, BoxProps, Center, Icon, Input, Text } from '@chakra-ui/react';
import RatioPicture from 'components/RatioPicture';
-import { convertHex } from 'utils/utils';
+import { convertHex } from 'utils';
import CloseIcon from 'public/assets/fill/close.svg';
import CameraIcon from 'public/assets/fill/camera.svg';
diff --git a/src/components/ButtonCopy/index.tsx b/src/components/ButtonCopy/index.tsx
deleted file mode 100644
index 8c75033e..00000000
--- a/src/components/ButtonCopy/index.tsx
+++ /dev/null
@@ -1,31 +0,0 @@
-import { IconButton, IconButtonProps, useClipboard } from '@chakra-ui/react';
-import CopyIcon from 'public/assets/line/copy.svg';
-import DoneIcon from 'public/assets/fill/done.svg';
-
-interface ButtonCopyProps {
- value: string;
- sx?: IconButtonProps;
-}
-
-export default function ButtonCopy({ value, sx }: ButtonCopyProps) {
- const { hasCopied, onCopy } = useClipboard(value);
-
- return (
- : }
- {...sx}
- />
- );
-}
diff --git a/src/components/Clipboard/index.tsx b/src/components/Clipboard/index.tsx
new file mode 100644
index 00000000..c76551c4
--- /dev/null
+++ b/src/components/Clipboard/index.tsx
@@ -0,0 +1,24 @@
+import { Icon, IconProps, useClipboard } from '@chakra-ui/react';
+import CopyIcon from 'public/assets/line/copy.svg';
+import DoneIcon from 'public/assets/fill/done.svg';
+
+interface ClipBoardProps {
+ value: string;
+ sx?: IconProps;
+}
+
+export default ({ value, sx }: ClipBoardProps) => {
+ const { hasCopied, onCopy } = useClipboard(value);
+
+ return (
+
+ );
+};
diff --git a/src/components/ConnectSubstrate/ConnectSubstratePolkadot.tsx b/src/components/ConnectSubstrate/ConnectSubstratePolkadot.tsx
deleted file mode 100644
index e69de29b..00000000
diff --git a/src/components/ConnectSubstrate/ConnectSubstrateUtils.ts b/src/components/ConnectSubstrate/ConnectSubstrateUtils.ts
deleted file mode 100644
index 2ba7a933..00000000
--- a/src/components/ConnectSubstrate/ConnectSubstrateUtils.ts
+++ /dev/null
@@ -1,123 +0,0 @@
-import { injectedExtension } from 'redux/injected';
-import { GAFI_WALLET_STORAGE_KEY } from 'utils/constants';
-import { getInjectedWeb3 } from 'utils/utils';
-import {
- InjectedAccountWithMeta,
- InjectedAccount,
-} from '@polkadot/extension-inject/types';
-import { decodeAddress, encodeAddress } from '@polkadot/util-crypto';
-import { ApiPromise, WsProvider } from '@polkadot/api';
-import { reduxSubstrateProps, substrateConnect } from 'redux/substrate';
-import { AppDispatch } from 'redux/store';
-
-interface mapAccountsProps {
- source: string;
- list: InjectedAccount[];
- ss58Format?: number;
-}
-
-interface loadAccountsProps {
- extensionName: string;
- dispatch: AppDispatch;
-}
-
-interface connectAPIProps {
- socket: reduxSubstrateProps['socket'];
- jsonrpc: reduxSubstrateProps['jsonrpc'];
- apiState: reduxSubstrateProps['apiState'];
- dispatch: AppDispatch;
-}
-
-const mapAccounts = ({
- source,
- list,
- ss58Format,
-}: mapAccountsProps): InjectedAccountWithMeta[] => {
- return list.map(
- ({ address, genesisHash, name, type }): InjectedAccountWithMeta => ({
- address:
- address.length === 42
- ? address
- : encodeAddress(decodeAddress(address), ss58Format),
- meta: { genesisHash, name, source: source },
- type,
- })
- );
-};
-
-const loadAccounts = async ({ extensionName, dispatch }: loadAccountsProps) => {
- try {
- const getKeyOfGAFI = localStorage.getItem(GAFI_WALLET_STORAGE_KEY);
-
- const accounts = await getInjectedWeb3(extensionName);
-
- const getAccounts = await accounts?.accounts.get();
-
- if (getAccounts) {
- if (!getAccounts.length) {
- dispatch(
- injectedExtension({
- keyringState: 'ERROR',
- polkadot: {},
- })
- );
- }
-
- if (getAccounts.length) {
- const mappedAccounts: InjectedAccountWithMeta[] = mapAccounts({
- source: extensionName,
- list: getAccounts, // filter(({ type }) => type && true),
- ss58Format: undefined,
- });
-
- dispatch(
- injectedExtension({
- keyringState: 'READY',
- polkadot: {
- allAccount: mappedAccounts.map(({ address, type, meta }) => ({
- address,
- ...meta,
- type,
- })),
- },
- })
- );
- }
-
- if (!getKeyOfGAFI) {
- localStorage.setItem(GAFI_WALLET_STORAGE_KEY, extensionName);
- }
- }
- } catch (error) {
- dispatch(
- injectedExtension({
- keyringState: 'INSTALL',
- polkadot: {},
- })
- );
- }
-};
-
-const connectAPI = async ({
- socket,
- jsonrpc,
- apiState,
- dispatch,
-}: connectAPIProps) => {
- if (apiState) return;
-
- const provider = new WsProvider(socket);
- const api = new ApiPromise({ provider, rpc: jsonrpc });
-
- api.on('connected', () => {
- api.isReady.then(() =>
- dispatch(substrateConnect({ apiState: 'READY', payload: api }))
- );
- });
-
- api.on('error', error =>
- dispatch(substrateConnect({ apiState: 'ERROR', payload: error }))
- );
-};
-
-export { mapAccounts, loadAccounts, connectAPI };
diff --git a/src/components/ConnectSubstrate/index.tsx b/src/components/ConnectSubstrate/index.tsx
deleted file mode 100644
index d83c8f08..00000000
--- a/src/components/ConnectSubstrate/index.tsx
+++ /dev/null
@@ -1,199 +0,0 @@
-import {
- Button,
- ButtonGroup,
- FormControl,
- FormErrorMessage,
- Icon,
- Link,
- Modal,
- ModalBody,
- ModalContent,
- ModalFooter,
- ModalHeader,
- ModalOverlay,
- Text,
- useDisclosure,
-} from '@chakra-ui/react';
-import { useAppDispatch, useAppSelector } from 'hooks/useRedux';
-import React from 'react';
-
-import {
- CHROME_EXT_URL,
- FIREFOX_ADDON_URL,
- GAFI_WALLET_ACCOUNT_KEY,
- GAFI_WALLET_STORAGE_KEY,
-} from 'utils/constants';
-
-import PolkadotIcon from 'public/assets/wallet/polkadot-js.svg';
-import SubWalletIcon from 'public/assets/wallet/subwallet.svg';
-import CloverWallet from 'public/assets/wallet/clover.svg';
-
-import { loadAccounts } from './ConnectSubstrateUtils';
-import { injectedAccount } from 'redux/injected';
-import { getInjectedWeb3 } from 'utils/utils';
-
-export default function ConnectSubstrate() {
- const extensionName = localStorage.getItem(GAFI_WALLET_STORAGE_KEY);
- const accountName = localStorage.getItem(GAFI_WALLET_ACCOUNT_KEY);
-
- const pairsAccount = accountName?.includes('address')
- ? JSON.parse(accountName)
- : undefined;
-
- const { apiState } = useAppSelector(state => state.substrate);
- const { keyringState } = useAppSelector(state => state.injected);
-
- const dispatch = useAppDispatch();
- const { isOpen, onOpen, onClose } = useDisclosure();
-
- React.useEffect(() => {
- // load all accounts extension
- if (apiState === 'READY' && extensionName) {
- loadAccounts({ extensionName, dispatch });
- }
-
- // parse pair account
- if (pairsAccount) {
- const { address, name } = pairsAccount;
-
- dispatch(injectedAccount({ polkadot: { account: { address, name } } }));
- }
- }, [apiState]);
-
- const wallets = [
- {
- title: 'Polkadot Wallet',
- icon: PolkadotIcon,
- extensionName: 'polkadot-js',
- onClick: async () => {
- loadAccounts({ extensionName: 'polkadot-js', dispatch });
-
- const injected = await getInjectedWeb3('polkadot-js');
-
- const account = await injected?.accounts.get();
-
- if (account) {
- const address = account[0].address;
- const name = account[0].name;
-
- localStorage.setItem(
- GAFI_WALLET_ACCOUNT_KEY,
- JSON.stringify({ address, name })
- );
-
- dispatch(
- injectedAccount({ polkadot: { account: { address, name } } })
- );
- }
- },
- },
- {
- title: 'SubWallet',
- icon: SubWalletIcon,
- extensionName: 'subwallet-js',
- onClick: () => {
- loadAccounts({ extensionName: 'subwallet-js', dispatch });
- },
- },
- {
- title: 'CloverWallet',
- icon: CloverWallet,
- extensionName: 'clover',
- onClick: () => {
- loadAccounts({ extensionName: 'clover', dispatch });
- },
- },
- ];
-
- return (
- <>
-
-
- {isOpen && (
-
-
-
-
- Connect Wallet
-
-
-
- {React.Children.toArray(
- wallets.map(button => (
- }
- >
- {button.title}
-
- ))
- )}
-
-
- {keyringState === 'ERROR'
- ? 'not found wallet polkadot'
- : 'please install extension'}
-
-
-
-
-
-
- {!window.injectedWeb3 && (
-
- Create an account with Polkadot-JS Extension (
-
- Chrome
-
- ,
-
- Firefox
-
- )
-
- )}
-
-
-
- )}
- >
- );
-}
diff --git a/src/components/ConnectWallet/ConnectWalletModal.tsx b/src/components/ConnectWallet/ConnectWalletModal.tsx
new file mode 100644
index 00000000..83c2bfe4
--- /dev/null
+++ b/src/components/ConnectWallet/ConnectWalletModal.tsx
@@ -0,0 +1,170 @@
+import {
+ Button,
+ Icon,
+ Link,
+ Modal,
+ ModalBody,
+ ModalCloseButton,
+ ModalContent,
+ ModalHeader,
+ ModalOverlay,
+} from '@chakra-ui/react';
+
+import React, { useState } from 'react';
+
+import PolkadotIcon from 'public/assets/wallet/polkadot-js.svg';
+import SubWalletIcon from 'public/assets/wallet/subwallet.svg';
+import CloverWallet from 'public/assets/wallet/clover.svg';
+
+import { getInjectedWeb3 } from 'utils';
+
+import { InjectedAccount } from 'types/polkadot.type';
+import { Signer } from '@polkadot/types/types';
+import { setCookie } from 'utils/utils.cookie';
+import { INJECTED_EXTENSION_CONNECTED } from 'utils/utils.injected';
+
+interface ConnectWalletModalProps {
+ setAccount: (account: InjectedAccount) => void;
+ onClose: () => void;
+}
+
+export default ({ setAccount, onClose }: ConnectWalletModalProps) => {
+ const [isError, setIsError] = useState('');
+
+ const [isLoading, setIsLoading] = useState('');
+
+ const ListWallet = [
+ {
+ extension: 'polkadot-js',
+ name: 'polkadot{.js}',
+ icon: ,
+ link: 'https://polkadot.js.org/extension/',
+ },
+ {
+ name: 'SubWallet',
+ icon: ,
+ link: 'https://metamask.io/download/',
+ },
+ {
+ name: 'CloverWallet',
+ icon: ,
+ link: 'https://www.coinbase.com/wallet/downloads',
+ },
+ ];
+
+ const Login = async (account: string, signer: Signer) => {
+ console.log({ account, signer });
+
+ setIsLoading(undefined);
+ };
+
+ return (
+
+
+
+
+
+ Connect wallet
+
+
+
+
+ {React.Children.toArray(
+ ListWallet.map(meta => (
+
+ ))
+ )}
+
+ {isError?.length ? (
+
+ Please install extension to use this feature (click here)
+
+ ) : null}
+
+
+
+ );
+};
diff --git a/src/components/ConnectWallet/ConnectWalletProfile.tsx b/src/components/ConnectWallet/ConnectWalletProfile.tsx
new file mode 100644
index 00000000..83ed68c8
--- /dev/null
+++ b/src/components/ConnectWallet/ConnectWalletProfile.tsx
@@ -0,0 +1,127 @@
+import {
+ Box,
+ Button,
+ Center,
+ Flex,
+ Icon,
+ Popover,
+ PopoverBody,
+ PopoverContent,
+ PopoverTrigger,
+ Text,
+} from '@chakra-ui/react';
+import AvatarJazzicon from 'components/Avatar/AvatarJazzicon';
+import Clipboard from 'components/Clipboard';
+import { colors } from 'theme/theme';
+import { InjectedAccount } from 'types/polkadot.type';
+import { convertHex, formatCurrency, shorten } from 'utils';
+import ConnectWalletSwitch from './ConnectWalletSwitch';
+import GafiTokenIcon from 'public/assets/token/gafi-token.svg';
+import useBalance from 'hooks/useBalance';
+import { useSubstrateContext } from 'contexts/contexts.substrate';
+import useSignAndSend from 'hooks/useSignAndSend';
+
+interface ConnectWalletProfileProps {
+ account: InjectedAccount;
+ accounts: InjectedAccount[];
+}
+
+export default ({ account, accounts }: ConnectWalletProfileProps) => {
+ const { api } = useSubstrateContext();
+
+ const { mutation, isLoading } = useSignAndSend({
+ key: ['faucet', account.address],
+ address: account.address,
+ });
+
+ const { balance } = useBalance({
+ account: account.address,
+ });
+
+ console.log(balance);
+
+ return (
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {account.name}
+
+
+
+
+ {shorten(account.address)}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {balance}
+
+ GAFI
+
+
+
+
+ ({formatCurrency(Number(balance?.replaceAll(',', '')))})
+
+
+
+
+
+
+
+
+ );
+};
diff --git a/src/components/ConnectWallet/ConnectWalletSwitch.tsx b/src/components/ConnectWallet/ConnectWalletSwitch.tsx
index 5f904cb4..7d9347ab 100644
--- a/src/components/ConnectWallet/ConnectWalletSwitch.tsx
+++ b/src/components/ConnectWallet/ConnectWalletSwitch.tsx
@@ -10,16 +10,18 @@ import {
Text,
} from '@chakra-ui/react';
-import { GAFI_WALLET_ACCOUNT_KEY } from 'utils/constants';
-import { InjectedAccount } from '@polkadot/extension-inject/types';
-import { useDispatch } from 'react-redux';
-import { injectedAccount } from 'redux/injected';
import AvatarJazzicon from 'components/Avatar/AvatarJazzicon';
-import ButtonCopy from 'components/ButtonCopy';
-import { convertHex, shorten } from 'utils/utils';
+
import Swap02Icon from 'public/assets/line/swap-02.svg';
import { colors } from 'theme/theme';
import UploadIcon from 'public/assets/line/upload.svg';
+import { InjectedAccount } from 'types/polkadot.type';
+import { convertHex, shorten } from 'utils';
+import { useAccountContext } from 'contexts/contexts.account';
+import Clipboard from 'components/Clipboard';
+import { deleteCookie } from 'utils/utils.cookie';
+
+import { INJECTED_ACCOUNT_CONNECTED } from 'utils/utils.injected';
interface ConnectWalletSwitchProps {
accounts: InjectedAccount[];
@@ -28,7 +30,7 @@ interface ConnectWalletSwitchProps {
export default function ConnectWalletSwitch({
accounts,
}: ConnectWalletSwitchProps) {
- const dispatch = useDispatch();
+ const { setAccount, setAccountContext } = useAccountContext();
return (
setAccount({ address, name })}
>
- {
- localStorage.setItem(
- GAFI_WALLET_ACCOUNT_KEY,
- JSON.stringify({ address, name })
- );
+
+
+
- dispatch(
- injectedAccount({
- polkadot: { account: { address, name } },
- })
- );
- }}
- >
-
-
-
+
+
+ {name || 'unknown'}
+
-
-
- {name || 'unknown'}
-
+
+ {shorten(address, 6)}
-
- {shorten(address, 6)}
-
-
-
-
-
+
+
+
))}
}
onClick={() => {
- dispatch(injectedAccount({ polkadot: { account: {} } }));
- localStorage.removeItem(GAFI_WALLET_ACCOUNT_KEY);
+ deleteCookie(INJECTED_ACCOUNT_CONNECTED);
+ setAccountContext(prev => ({ all: prev.all }));
}}
>
Log out
diff --git a/src/components/ConnectWallet/index.tsx b/src/components/ConnectWallet/index.tsx
index 311b29fa..d30bbca2 100644
--- a/src/components/ConnectWallet/index.tsx
+++ b/src/components/ConnectWallet/index.tsx
@@ -1,175 +1,41 @@
-import {
- Box,
- Button,
- Center,
- Flex,
- Icon,
- IconButton,
- Menu,
- MenuButton,
- MenuItem,
- MenuList,
- Text,
-} from '@chakra-ui/react';
-
-import GafiTokenIcon from 'public/assets/token/gafi-token.svg';
-
-import useSignAndSend from 'hooks/useSignAndSend';
-
-import useBalance from 'hooks/useBalance';
-
-import ConnectWalletSwitch from './ConnectWalletSwitch';
-import { useAppSelector } from 'hooks/useRedux';
-
-import { convertHex, formatCurrency, shorten } from 'utils/utils';
-
-import ConnectSubstrate from 'components/ConnectSubstrate';
-import AvatarJazzicon from 'components/Avatar/AvatarJazzicon';
-import ButtonCopy from 'components/ButtonCopy';
-import { colors } from 'theme/theme';
+import ConnectWalletModal from './ConnectWalletModal';
+import { useAccountContext } from 'contexts/contexts.account';
+import ConnectWalletProfile from './ConnectWalletProfile';
+import { Button, useDisclosure } from '@chakra-ui/react';
export default function ConnectWallet() {
- const { api } = useAppSelector(state => state.substrate);
-
- const { account, allAccount } = useAppSelector(
- state => state.injected.polkadot
- );
+ const { isOpen, onOpen, onClose } = useDisclosure();
- const { isLoading, mutation } = useSignAndSend({
- address: account?.address as string,
- key: ['faucet'],
- });
-
- const { balance } = useBalance({
- account: account?.address as string,
- });
+ const { account, setAccount } = useAccountContext();
return (
<>
- {allAccount && account && account.address ? (
-
+ {account.current?.address && account.all?.length ? (
+
) : (
-
+
+ )}
+
+ {isOpen && (
+
)}
>
);
diff --git a/src/components/DateBlock/index.tsx b/src/components/DateBlock/index.tsx
index 97f410a5..c90f03d7 100644
--- a/src/components/DateBlock/index.tsx
+++ b/src/components/DateBlock/index.tsx
@@ -1,7 +1,7 @@
import { Text, TextProps } from '@chakra-ui/react';
import { secondsToHours, secondsToMinutes } from 'date-fns';
import useBlockTime from 'hooks/useBlockTime';
-import { BLOCK_TIME } from 'utils/constants';
+import { BLOCK_TIME } from 'utils/utils.contants';
interface DateBlockProps {
endBlock: number;
diff --git a/src/components/SelectMenu/index.tsx b/src/components/SelectMenu/index.tsx
index 03fe1898..4f277445 100644
--- a/src/components/SelectMenu/index.tsx
+++ b/src/components/SelectMenu/index.tsx
@@ -7,7 +7,7 @@ import {
MenuList,
Text,
} from '@chakra-ui/react';
-import { convertHex } from 'utils/utils';
+import { convertHex } from 'utils';
import MenuIcon from 'public/assets/line/menu.svg';
import React from 'react';
diff --git a/src/config/config.ts b/src/config/config.ts
index 3fe5832a..aa987589 100644
--- a/src/config/config.ts
+++ b/src/config/config.ts
@@ -10,9 +10,12 @@ const common: commonProps = {
};
const development = {
- PROVIDER_SOCKETS: ['ws://0.0.0.0:9944'],
- // PROVIDER_SOCKETS: ['ws://192.168.1.19:9944'],
- // PROVIDER_SOCKETS: ['ws://192.168.1.13:9944'],
+ // PROVIDER_SOCKETS: ['ws://0.0.0.0:9944'],
+ // PROVIDER_SOCKETS: ['wss://ws-testnet.gafi.network'],
+ PROVIDER_SOCKETS: [
+ 'wss://ws-testnet.gafi.network',
+ 'wss://ws-test.gafi.network',
+ ],
};
const production = {
diff --git a/src/contexts/contexts.account/index.tsx b/src/contexts/contexts.account/index.tsx
new file mode 100644
index 00000000..763f020d
--- /dev/null
+++ b/src/contexts/contexts.account/index.tsx
@@ -0,0 +1,106 @@
+import {
+ Dispatch,
+ PropsWithChildren,
+ SetStateAction,
+ createContext,
+ useContext,
+ useEffect,
+ useState,
+} from 'react';
+
+import { InjectedAccount } from 'types/polkadot.type';
+import { getInjectedWeb3 } from 'utils';
+import { getCookie, setCookie } from 'utils/utils.cookie';
+import { INJECTED_ACCOUNT_CONNECTED } from 'utils/utils.injected';
+
+export type AccountStateProps = {
+ current?: InjectedAccount;
+ all?: InjectedAccount[];
+};
+
+interface AccountContextProps {
+ account: AccountStateProps;
+ setAccount: Dispatch>;
+}
+
+const AccountContext = createContext({
+ account: {},
+ setAccount: () => {},
+});
+
+const AccountContextProvider = ({ children }: PropsWithChildren) => {
+ const [account, setAccount] = useState({});
+
+ return (
+
+ {children}
+
+ );
+};
+
+const useAccountContext = () => {
+ const getAccount = getCookie(INJECTED_ACCOUNT_CONNECTED);
+
+ const { account, setAccount: setAccountContext } = useContext(AccountContext);
+
+ // currentAccount
+ useEffect(() => {
+ if (getAccount && !account.current?.address) {
+ const { address, name } = JSON.parse(getAccount);
+
+ setAccount({
+ address,
+ name,
+ });
+ }
+ }, [getAccount]);
+
+ useEffect(() => {
+ if (!account.all?.length) {
+ const response = async () => {
+ const injected = await getInjectedWeb3('polkadot-js');
+
+ if (injected?.accounts) {
+ const accounts = await injected.accounts.get();
+
+ setAccountContext(prev => ({
+ ...prev,
+ all: accounts,
+ }));
+ }
+ };
+
+ response();
+ }
+ }, []);
+
+ const setAccount = (account: InjectedAccount) => {
+ const getDate = new Date();
+ getDate.setFullYear(getDate.getFullYear() + 1);
+
+ // update state
+ setAccountContext(prev => ({ ...prev, current: account }));
+
+ // update cookie for account
+ setCookie({
+ expires: `${getDate}`,
+ key: INJECTED_ACCOUNT_CONNECTED,
+ value: JSON.stringify({ address: account.address, name: account.name }),
+ });
+ };
+
+ return {
+ account,
+
+ //
+ setAccount,
+ setAccountContext,
+ };
+};
+
+export { AccountContextProvider, useAccountContext };
diff --git a/src/contexts/contexts.substrate/index.tsx b/src/contexts/contexts.substrate/index.tsx
new file mode 100644
index 00000000..065276c9
--- /dev/null
+++ b/src/contexts/contexts.substrate/index.tsx
@@ -0,0 +1,85 @@
+import { ApiPromise, WsProvider } from '@polkadot/api';
+import jsonrpc from '@polkadot/types/interfaces/jsonrpc';
+
+import config from 'config';
+import {
+ PropsWithChildren,
+ createContext,
+ useContext,
+ useEffect,
+ useMemo,
+ useState,
+} from 'react';
+
+export interface SubstrateStateProps {
+ PROVIDER_SOCKET?: string;
+ api?: ApiPromise;
+}
+
+export interface SubstrateContextProps {
+ substrate: SubstrateStateProps | undefined;
+ setSubstrate: React.Dispatch<
+ React.SetStateAction
+ >;
+}
+
+const SubstrateContext = createContext({
+ substrate: undefined,
+ setSubstrate: () => {},
+});
+
+const SubstrateContextProvider = ({ children }: PropsWithChildren) => {
+ const [substrate, setSubstrate] = useState();
+
+ const provider = useMemo(
+ () =>
+ new WsProvider(
+ substrate?.PROVIDER_SOCKET || config.PROVIDER_SOCKETS?.[0]
+ ),
+ [substrate?.PROVIDER_SOCKET]
+ );
+
+ const api = useMemo(
+ () =>
+ new ApiPromise({
+ provider,
+ rpc: jsonrpc,
+ }),
+ [provider]
+ );
+
+ useEffect(() => {
+ api.isReady.then(event => {
+ if (!substrate?.api) {
+ setSubstrate(prev => ({
+ ...prev,
+ api: event,
+ }));
+ }
+ });
+ }, []);
+
+ return (
+
+ {children}
+
+ );
+};
+
+const useSubstrateContext = () => {
+ const { substrate, setSubstrate } = useContext(SubstrateContext);
+
+ return {
+ api: substrate?.api,
+ PROVIDER_SOCKET: substrate?.PROVIDER_SOCKET,
+
+ setSubstrate,
+ };
+};
+
+export { SubstrateContextProvider, useSubstrateContext };
diff --git a/src/hooks/useBalance.ts b/src/hooks/useBalance.ts
index 950b59cb..17b361ae 100644
--- a/src/hooks/useBalance.ts
+++ b/src/hooks/useBalance.ts
@@ -1,7 +1,8 @@
import React, { useState } from 'react';
-import { useAppSelector } from './useRedux';
-import { formatGAFI } from 'utils/utils';
+
+import { formatGAFI } from 'utils';
import useSubscribeSystem from './useSubscribeSystem';
+import { useSubstrateContext } from 'contexts/contexts.substrate';
type TypeGetBalance = {
data: {
@@ -14,15 +15,25 @@ interface useBalanceProps {
}
export default function useBalance({ account }: useBalanceProps) {
+ const { api } = useSubstrateContext();
const { event } = useSubscribeSystem('balances::Endowed');
const [balance, setBalance] = useState();
- const { api } = useAppSelector(state => state.substrate);
React.useEffect(() => {
const getBalance = () => {
+ if (event) {
+ event.forEach(({ eventValue }) => {
+ const [address] = JSON.parse(eventValue);
+
+ if (address === account) {
+ getBalance();
+ }
+ });
+ }
+
const callback = async () => {
- if (api && api.query.system && account) {
+ if (api?.query.system && account) {
const res = await api.query.system.account(account);
const getBalance = res.toPrimitive() as TypeGetBalance;
@@ -34,20 +45,10 @@ export default function useBalance({ account }: useBalanceProps) {
callback();
};
- if (event) {
- event.forEach(({ eventValue }) => {
- const [address] = JSON.parse(eventValue);
-
- if (address === account) {
- getBalance();
- }
- });
- }
-
getBalance();
return () => getBalance();
- }, [event, account]);
+ }, [event, account, api]);
return {
balance,
diff --git a/src/hooks/useBlockTime.ts b/src/hooks/useBlockTime.ts
index 370bc45f..402cef7e 100644
--- a/src/hooks/useBlockTime.ts
+++ b/src/hooks/useBlockTime.ts
@@ -1,17 +1,18 @@
+import { useSubstrateContext } from 'contexts/contexts.substrate';
import React from 'react';
-import { useAppSelector } from './useRedux';
export type TypeUseBlockTime = 'bestNumberFinalized' | 'bestNumber';
export default function useBlockTime(number: TypeUseBlockTime) {
- const { api } = useAppSelector(state => state.substrate);
+ const { api } = useSubstrateContext();
const chainBlock = api?.derive.chain[number];
+
const [blockNumber, setBlockNumber] = React.useState(0);
React.useEffect(() => {
const subscribe = () => {
- if (chainBlock) {
+ if (chainBlock && api.isConnected) {
chainBlock(number => setBlockNumber(number.toNumber()));
}
};
@@ -19,7 +20,7 @@ export default function useBlockTime(number: TypeUseBlockTime) {
subscribe();
return () => subscribe();
- }, [blockNumber]);
+ }, [blockNumber, api]);
return {
blockNumber,
diff --git a/src/hooks/useItemBalanceOf.ts b/src/hooks/useItemBalanceOf.ts
index deb9845a..b0baf56a 100644
--- a/src/hooks/useItemBalanceOf.ts
+++ b/src/hooks/useItemBalanceOf.ts
@@ -1,8 +1,8 @@
import { useQuery } from '@tanstack/react-query';
-import { useAppSelector } from './useRedux';
import { StorageKey, u32 } from '@polkadot/types';
import { AccountId32 } from '@polkadot/types/interfaces';
import { Codec } from '@polkadot/types/types';
+import { useSubstrateContext } from 'contexts/contexts.substrate';
export interface ItemBalanceOfProps {
owner: string;
@@ -22,7 +22,7 @@ export default function useItemBalanceOf({
arg,
key,
}: useItemBalanceOfProps) {
- const { api } = useAppSelector(state => state.substrate);
+ const { api } = useSubstrateContext();
const { data, isLoading } = useQuery({
queryKey: ['itemBalanceOf', key],
@@ -31,16 +31,14 @@ export default function useItemBalanceOf({
if (filter === 'entries') {
const service = await api.query.game.itemBalanceOf.entries();
- return service.map(
- ([option, meta]: [StorageKey<[AccountId32, u32, u32]>, Codec]) => {
- return {
- owner: option.args[0].toString(),
- collection_id: option.args[1].toNumber(),
- nft_id: option.args[2].toNumber(),
- amount: meta.toHuman() as string,
- };
- }
- ) as ItemBalanceOfProps[];
+ return service.map(([option, meta]) => {
+ return {
+ owner: option.args[0].toString(),
+ collection_id: option.args[1].toNumber(),
+ nft_id: option.args[2].toNumber(),
+ amount: meta.toHuman() as string,
+ };
+ }) as ItemBalanceOfProps[];
}
if (filter === 'address' && arg) {
diff --git a/src/hooks/useLootTableOf.ts b/src/hooks/useLootTableOf.ts
index 348bc3ee..fd366c99 100644
--- a/src/hooks/useLootTableOf.ts
+++ b/src/hooks/useLootTableOf.ts
@@ -1,8 +1,8 @@
import { useQuery } from '@tanstack/react-query';
-import { useAppSelector } from './useRedux';
import { GafiSupportGameTypesLoot } from '@polkadot/types/lookup';
import { Vec } from '@polkadot/types';
+import { useSubstrateContext } from 'contexts/contexts.substrate';
export interface lootTableOfProps {
weight: number;
@@ -20,7 +20,7 @@ export default function useLootTableOf({
key,
arg,
}: useLootTableOfProps) {
- const { api } = useAppSelector(state => state.substrate);
+ const { api } = useSubstrateContext();
const { data, isLoading, isError } = useQuery({
queryKey: ['lootTableOf', key],
diff --git a/src/hooks/useMetaCollection.ts b/src/hooks/useMetaCollection.ts
index a82d5e58..a0aba16a 100644
--- a/src/hooks/useMetaCollection.ts
+++ b/src/hooks/useMetaCollection.ts
@@ -1,10 +1,11 @@
import { useQuery } from '@tanstack/react-query';
-import { useAppSelector } from './useRedux';
-import { TypeMetadataOfCollection } from 'types';
+
import useSubscribeSystem from './useSubscribeSystem';
import { useEffect } from 'react';
import { Option, StorageKey, u32 } from '@polkadot/types';
import { PalletNftsCollectionMetadata } from '@polkadot/types/lookup';
+import { useSubstrateContext } from 'contexts/contexts.substrate';
+import { TypeMetaCollection } from 'types/meta.type.ts';
export interface useMetaCollectionProps {
filter: 'entries' | 'collection_id';
@@ -12,7 +13,7 @@ export interface useMetaCollectionProps {
key: string | string[] | number | number[];
}
-export interface MetaCollectionFieldProps extends TypeMetadataOfCollection {
+export interface MetaCollectionFieldProps extends TypeMetaCollection {
collection_id: number;
}
@@ -21,10 +22,9 @@ export default function useMetaCollection({
arg,
key,
}: useMetaCollectionProps) {
+ const { api } = useSubstrateContext();
const { event, setEvent } = useSubscribeSystem('nfts::CollectionMetadataSet');
- const { api } = useAppSelector(state => state.substrate);
-
const { data, isLoading, isError, refetch } = useQuery({
queryKey: [`collectionMetadataOf`, key],
queryFn: async () => {
@@ -39,7 +39,7 @@ export default function useMetaCollection({
]) => {
const metadata = JSON.parse(
String(meta.value.data.toHuman())
- ) as TypeMetadataOfCollection;
+ ) as TypeMetaCollection;
return {
title: metadata.title || 'unknown',
@@ -65,7 +65,7 @@ export default function useMetaCollection({
const metadata = JSON.parse(
String(service.value.data.toHuman())
- ) as TypeMetadataOfCollection;
+ ) as TypeMetaCollection;
return {
title: metadata.title,
diff --git a/src/hooks/useMetaGame.ts b/src/hooks/useMetaGame.ts
index 4baeec8a..0b798466 100644
--- a/src/hooks/useMetaGame.ts
+++ b/src/hooks/useMetaGame.ts
@@ -1,8 +1,9 @@
import { useQuery } from '@tanstack/react-query';
-import { useAppSelector } from './useRedux';
-import { TypeMetadataOfGame } from 'types';
+
import { Option, StorageKey, u32 } from '@polkadot/types';
import { PalletNftsCollectionMetadata } from '@polkadot/types/lookup';
+import { useSubstrateContext } from 'contexts/contexts.substrate';
+import { TypeMetaGame } from 'types/meta.type.ts';
export interface useMetaGameProps {
filter: 'entries' | 'game_id';
@@ -10,12 +11,12 @@ export interface useMetaGameProps {
key: string | string[] | number | number[];
}
-interface MetaGameFieldProps extends TypeMetadataOfGame {
+interface MetaGameFieldProps extends TypeMetaGame {
game_id: number;
}
export default ({ filter, arg, key }: useMetaGameProps) => {
- const { api } = useAppSelector(state => state.substrate);
+ const { api } = useSubstrateContext();
const { data, isLoading } = useQuery({
queryKey: [`gameMetadataOf`, key],
@@ -31,7 +32,7 @@ export default ({ filter, arg, key }: useMetaGameProps) => {
]) => {
const metadata = JSON.parse(
String(meta.value.data.toHuman())
- ) as TypeMetadataOfGame;
+ ) as TypeMetaGame;
return {
title: metadata.title || 'unknown',
@@ -58,7 +59,7 @@ export default ({ filter, arg, key }: useMetaGameProps) => {
const metadata = JSON.parse(
String(service.value.data.toHuman())
- ) as TypeMetadataOfGame;
+ ) as TypeMetaGame;
return {
title: metadata.title,
diff --git a/src/hooks/useMetaNFT.ts b/src/hooks/useMetaNFT.ts
index c35a2ad5..11a07888 100644
--- a/src/hooks/useMetaNFT.ts
+++ b/src/hooks/useMetaNFT.ts
@@ -1,10 +1,11 @@
import { useQuery } from '@tanstack/react-query';
-import { useAppSelector } from './useRedux';
-import { TypeMetadataOfItem } from 'types';
+
import { useEffect } from 'react';
import useSubscribeSystem from './useSubscribeSystem';
import { Option } from '@polkadot/types';
import { PalletNftsItemMetadata } from '@polkadot/types/lookup';
+import { useSubstrateContext } from 'contexts/contexts.substrate';
+import { TypeMetaNFT } from 'types/meta.type.ts';
export interface useMetaNFTProps {
filter: 'entries' | 'collection_id';
@@ -12,15 +13,15 @@ export interface useMetaNFTProps {
key: string | string[] | number | number[];
}
-interface MetaNFTFieldProps extends TypeMetadataOfItem {
+interface MetaNFTFieldProps extends TypeMetaNFT {
collection_id: number;
nft_id: number;
}
export default function useMetaNFT({ filter, arg, key }: useMetaNFTProps) {
- const { event, setEvent } = useSubscribeSystem('nfts::ItemMetadataSet');
+ const { api } = useSubstrateContext();
- const { api } = useAppSelector(state => state.substrate);
+ const { event, setEvent } = useSubscribeSystem('nfts::ItemMetadataSet');
const { data, refetch } = useQuery({
queryKey: ['itemMetadataOf', key],
@@ -34,7 +35,7 @@ export default function useMetaNFT({ filter, arg, key }: useMetaNFTProps) {
const metadata = JSON.parse(
String(meta.value.data.toHuman())
- ) as TypeMetadataOfItem;
+ ) as TypeMetaNFT;
return {
title: metadata.title,
@@ -60,7 +61,7 @@ export default function useMetaNFT({ filter, arg, key }: useMetaNFTProps) {
const metadata = JSON.parse(
String(service.value.data.toHuman())
- ) as TypeMetadataOfItem;
+ ) as TypeMetaNFT;
return {
title: metadata.title || 'unknown',
diff --git a/src/hooks/useMetaPool.ts b/src/hooks/useMetaPool.ts
index 56c52d89..2aefe44f 100644
--- a/src/hooks/useMetaPool.ts
+++ b/src/hooks/useMetaPool.ts
@@ -1,6 +1,6 @@
import { useQuery } from '@tanstack/react-query';
-import { useAppSelector } from './useRedux';
-import { TypeMetadataOfPool } from 'types';
+import { useSubstrateContext } from 'contexts/contexts.substrate';
+import { TypeMetaPool } from 'types/meta.type.ts';
export interface useMetaPoolProps {
filter: 'entries' | 'pool_id';
@@ -8,12 +8,12 @@ export interface useMetaPoolProps {
key: string | string[] | number | number[];
}
-interface MetaPoolFieldProps extends TypeMetadataOfPool {
+interface MetaPoolFieldProps extends TypeMetaPool {
pool_id: number;
}
export default ({ filter, arg, key }: useMetaPoolProps) => {
- const { api } = useAppSelector(state => state.substrate);
+ const { api } = useSubstrateContext();
const { data } = useQuery({
queryKey: ['poolMetadataOf', key],
@@ -29,7 +29,7 @@ export default ({ filter, arg, key }: useMetaPoolProps) => {
const metadata = JSON.parse(
String(service.value.data.toHuman())
- ) as TypeMetadataOfPool;
+ ) as TypeMetaPool;
return {
title: metadata.title || 'unknown',
diff --git a/src/hooks/useNFTsItem.ts b/src/hooks/useNFTsItem.ts
index 8d86abb8..357a0978 100644
--- a/src/hooks/useNFTsItem.ts
+++ b/src/hooks/useNFTsItem.ts
@@ -1,7 +1,7 @@
import { useQuery } from '@tanstack/react-query';
-import { useAppSelector } from './useRedux';
import { Option, StorageKey, u32 } from '@polkadot/types';
import { PalletNftsItemDetails } from '@polkadot/types/lookup';
+import { useSubstrateContext } from 'contexts/contexts.substrate';
interface useNFTsItemProps {
filter?: 'entries' | 'collection_id' | 'nft_id';
@@ -10,7 +10,7 @@ interface useNFTsItemProps {
}
export default function useNFTsItem({ filter, key, arg }: useNFTsItemProps) {
- const { api } = useAppSelector(state => state.substrate);
+ const { api } = useSubstrateContext();
const { data, isLoading, isError } = useQuery({
queryKey: ['nfts_item', key],
diff --git a/src/hooks/usePoolOf.ts b/src/hooks/usePoolOf.ts
index c56e5f9b..b886ca37 100644
--- a/src/hooks/usePoolOf.ts
+++ b/src/hooks/usePoolOf.ts
@@ -1,8 +1,8 @@
import { useQuery } from '@tanstack/react-query';
-import { useAppSelector } from './useRedux';
import { Option, StorageKey, u32 } from '@polkadot/types';
import { PalletGamePoolDetails } from '@polkadot/types/lookup';
+import { useSubstrateContext } from 'contexts/contexts.substrate';
export interface poolOfProps {
pool_id: number;
@@ -19,7 +19,7 @@ export interface usePoolOfProps {
}
export default ({ filter, arg, key }: usePoolOfProps) => {
- const { api } = useAppSelector(state => state.substrate);
+ const { api } = useSubstrateContext();
const { data, isLoading } = useQuery({
queryKey: ['poolOf', key],
diff --git a/src/hooks/useRedux.ts b/src/hooks/useRedux.ts
deleted file mode 100644
index 979410f0..00000000
--- a/src/hooks/useRedux.ts
+++ /dev/null
@@ -1,7 +0,0 @@
-import { useDispatch, useSelector } from 'react-redux';
-import type { TypedUseSelectorHook } from 'react-redux';
-import { AppDispatch, RootState } from 'redux/store';
-
-// Use throughout your app instead of plain `useDispatch` and `useSelector`
-export const useAppDispatch: () => AppDispatch = useDispatch;
-export const useAppSelector: TypedUseSelectorHook = useSelector;
diff --git a/src/hooks/useSignAndSend.ts b/src/hooks/useSignAndSend.ts
index 2ee87967..4c7a1af3 100644
--- a/src/hooks/useSignAndSend.ts
+++ b/src/hooks/useSignAndSend.ts
@@ -1,12 +1,13 @@
import { useToast } from '@chakra-ui/react';
import { useMutation } from '@tanstack/react-query';
-import { getInjectedWeb3 } from 'utils/utils';
+import { getInjectedWeb3 } from 'utils';
import { SubmittableExtrinsic } from '@polkadot/api/types';
import { ISubmittableResult } from '@polkadot/types/types';
import useTxError from './useTxError';
import { useState } from 'react';
-import { GAFI_WALLET_STORAGE_KEY } from 'utils/constants';
+import { getCookie } from 'utils/utils.cookie';
+import { INJECTED_EXTENSION_CONNECTED } from 'utils/utils.injected';
interface useSignAndSendProps {
address: string;
@@ -21,8 +22,8 @@ export default function useSignAndSend({
onSuccess,
onError,
}: useSignAndSendProps) {
- const extensionName = localStorage.getItem(GAFI_WALLET_STORAGE_KEY);
const toast = useToast();
+
const [isLoading, setIsLoading] = useState(false);
const { txError } = useTxError({
@@ -49,7 +50,9 @@ export default function useSignAndSend({
) => {
setIsLoading(true);
- const injected = await getInjectedWeb3(extensionName as string);
+ const injected = await getInjectedWeb3(
+ getCookie(INJECTED_EXTENSION_CONNECTED) as string
+ );
if (injected) {
await parmas.signAndSend(
diff --git a/src/hooks/useSubscribeSystem.ts b/src/hooks/useSubscribeSystem.ts
index 47ea3952..2a6a34bc 100644
--- a/src/hooks/useSubscribeSystem.ts
+++ b/src/hooks/useSubscribeSystem.ts
@@ -1,6 +1,6 @@
import React from 'react';
-import { useAppSelector } from './useRedux';
import { FrameSystemEventRecord } from '@polkadot/types/lookup';
+import { useSubstrateContext } from 'contexts/contexts.substrate';
interface StateEventProps {
eventName: string;
@@ -16,12 +16,13 @@ interface StateEventProps {
- show everything
*/
export default function useSubscribeSystem(include?: string) {
+ const { api } = useSubstrateContext();
+
const [event, setEvent] = React.useState([]);
- const { api } = useAppSelector(state => state.substrate);
React.useEffect(() => {
const subscribe = () => {
- if (api) {
+ if (api?.isConnected) {
api.query.system.events(events => {
events.forEach((record: FrameSystemEventRecord) => {
const eventName = record.event.section + '::' + record.event.method;
diff --git a/src/hooks/useSupplyOf.ts b/src/hooks/useSupplyOf.ts
index a51265fa..7b52696c 100644
--- a/src/hooks/useSupplyOf.ts
+++ b/src/hooks/useSupplyOf.ts
@@ -1,7 +1,7 @@
import { useQuery } from '@tanstack/react-query';
-import { useAppSelector } from './useRedux';
import { StorageKey, u32 } from '@polkadot/types';
import { Codec } from '@polkadot/types/types';
+import { useSubstrateContext } from 'contexts/contexts.substrate';
export interface SupplyOfProps {
collection_id: number;
@@ -16,7 +16,7 @@ interface useSupplyOfProps {
}
export default function useSupplyOf({ filter, key, arg }: useSupplyOfProps) {
- const { api } = useAppSelector(state => state.substrate);
+ const { api } = useSubstrateContext();
const { data, isLoading, isError } = useQuery({
queryKey: ['supplyOf', key],
diff --git a/src/hooks/useTxError.ts b/src/hooks/useTxError.ts
index 6fa3ad1c..24b62182 100644
--- a/src/hooks/useTxError.ts
+++ b/src/hooks/useTxError.ts
@@ -1,7 +1,7 @@
import { useToast } from '@chakra-ui/react';
import { EventRecord } from '@polkadot/types/interfaces';
import { ISubmittableResult } from '@polkadot/types/types';
-import { useAppSelector } from './useRedux';
+import { useSubstrateContext } from 'contexts/contexts.substrate';
interface useTxErrorProps {
onSuccess: () => void;
@@ -9,14 +9,14 @@ interface useTxErrorProps {
}
export default function useTxError({ onSuccess, onError }: useTxErrorProps) {
+ const { api } = useSubstrateContext();
+
const toast = useToast({
position: 'top-right',
isClosable: true,
duration: 3000,
});
- const { api } = useAppSelector(state => state.substrate);
-
const txError = (result: ISubmittableResult) => {
const { status, events } = result;
diff --git a/src/index.tsx b/src/index.tsx
index 86e26db4..2893e328 100644
--- a/src/index.tsx
+++ b/src/index.tsx
@@ -2,19 +2,16 @@ import { ChakraProvider } from '@chakra-ui/react';
import * as ReactDOM from 'react-dom/client';
import { ReactQueryDevtools } from '@tanstack/react-query-devtools';
-import 'swiper/css/bundle';
-import 'cropperjs/dist/cropper.css';
-
import '@fontsource-variable/lexend';
import theme from 'theme/theme';
import { QueryClientProvider } from '@tanstack/react-query';
-import getQueryClient from 'utils/queryClient';
+import getQueryClient from 'utils/utils.queryClient';
import App from 'App';
-import { Provider } from 'react-redux';
-import { store } from 'redux/store';
+import { AccountContextProvider } from 'contexts/contexts.account';
+import { SubstrateContextProvider } from 'contexts/contexts.substrate';
const root = ReactDOM.createRoot(
document.getElementById('root') as HTMLElement
@@ -27,9 +24,11 @@ root.render(
) : null}
-
-
-
+
+
+
+
+
);
diff --git a/src/interfaces/augment-types.ts b/src/interfaces/augment-types.ts
index 9c622c93..5f786380 100644
--- a/src/interfaces/augment-types.ts
+++ b/src/interfaces/augment-types.ts
@@ -6,7 +6,7 @@
import '@polkadot/types/types/registry';
import type { Data, StorageKey } from '@polkadot/types';
-import type { BitVec, Bool, Bytes, F32, F64, I128, I16, I256, I32, I64, I8, ISize, Json, Null, OptionBool, Raw, Text, Type, U128, U16, U256, U32, U64, U8, USize, bool, f32, f64, i128, i16, i256, i32, i64, i8, isize, u128, u16, u256, u32, u64, u8, usize } from '@polkadot/types-codec';
+import type { BitVec, Bool, Bytes, F32, F64, I128, I16, I256, I32, I64, I8, Json, Null, OptionBool, Raw, Text, Type, U128, U16, U256, U32, U64, U8, USize, bool, f32, f64, i128, i16, i256, i32, i64, i8, u128, u16, u256, u32, u64, u8, usize } from '@polkadot/types-codec';
import type { AssetApproval, AssetApprovalKey, AssetBalance, AssetDestroyWitness, AssetDetails, AssetMetadata, TAssetBalance, TAssetDepositBalance } from '@polkadot/types/interfaces/assets';
import type { BlockAttestations, IncludedBlocks, MoreAttestations } from '@polkadot/types/interfaces/attestations';
import type { RawAuraPreDigest } from '@polkadot/types/interfaces/aura';
@@ -14,7 +14,7 @@ import type { ExtrinsicOrHash, ExtrinsicStatus } from '@polkadot/types/interface
import type { UncleEntryItem } from '@polkadot/types/interfaces/authorship';
import type { AllowedSlots, BabeAuthorityWeight, BabeBlockWeight, BabeEpochConfiguration, BabeEquivocationProof, BabeGenesisConfiguration, BabeGenesisConfigurationV1, BabeWeight, Epoch, EpochAuthorship, MaybeRandomness, MaybeVrf, NextConfigDescriptor, NextConfigDescriptorV1, OpaqueKeyOwnershipProof, Randomness, RawBabePreDigest, RawBabePreDigestCompat, RawBabePreDigestPrimary, RawBabePreDigestPrimaryTo159, RawBabePreDigestSecondaryPlain, RawBabePreDigestSecondaryTo159, RawBabePreDigestSecondaryVRF, RawBabePreDigestTo159, SlotNumber, VrfData, VrfOutput, VrfProof } from '@polkadot/types/interfaces/babe';
import type { AccountData, BalanceLock, BalanceLockTo212, BalanceStatus, Reasons, ReserveData, ReserveIdentifier, VestingSchedule, WithdrawReasons } from '@polkadot/types/interfaces/balances';
-import type { BeefyAuthoritySet, BeefyCommitment, BeefyEquivocationProof, BeefyId, BeefyNextAuthoritySet, BeefyPayload, BeefyPayloadId, BeefySignedCommitment, BeefyVoteMessage, MmrRootHash, ValidatorSet, ValidatorSetId } from '@polkadot/types/interfaces/beefy';
+import type { BeefyAuthoritySet, BeefyCommitment, BeefyId, BeefyNextAuthoritySet, BeefyPayload, BeefyPayloadId, BeefySignedCommitment, MmrRootHash, ValidatorSet, ValidatorSetId } from '@polkadot/types/interfaces/beefy';
import type { BenchmarkBatch, BenchmarkConfig, BenchmarkList, BenchmarkMetadata, BenchmarkParameter, BenchmarkResult } from '@polkadot/types/interfaces/benchmark';
import type { CheckInherentsResult, InherentData, InherentIdentifier } from '@polkadot/types/interfaces/blockbuilder';
import type { BridgeMessageId, BridgedBlockHash, BridgedBlockNumber, BridgedHeader, CallOrigin, ChainId, DeliveredMessages, DispatchFeePayment, InboundLaneData, InboundRelayer, InitializationData, LaneId, MessageData, MessageKey, MessageNonce, MessagesDeliveryProofOf, MessagesProofOf, OperatingMode, OutboundLaneData, OutboundMessageFee, OutboundPayload, Parameter, RelayerId, UnrewardedRelayer, UnrewardedRelayersState } from '@polkadot/types/interfaces/bridges';
@@ -24,7 +24,7 @@ import type { StatementKind } from '@polkadot/types/interfaces/claims';
import type { CollectiveOrigin, MemberCount, ProposalIndex, Votes, VotesTo230 } from '@polkadot/types/interfaces/collective';
import type { AuthorityId, RawVRFOutput } from '@polkadot/types/interfaces/consensus';
import type { AliveContractInfo, CodeHash, CodeSource, CodeUploadRequest, CodeUploadResult, CodeUploadResultValue, ContractCallFlags, ContractCallRequest, ContractExecResult, ContractExecResultOk, ContractExecResultResult, ContractExecResultSuccessTo255, ContractExecResultSuccessTo260, ContractExecResultTo255, ContractExecResultTo260, ContractExecResultTo267, ContractExecResultU64, ContractInfo, ContractInstantiateResult, ContractInstantiateResultTo267, ContractInstantiateResultTo299, ContractInstantiateResultU64, ContractReturnFlags, ContractStorageKey, DeletedContract, ExecReturnValue, Gas, HostFnWeights, HostFnWeightsTo264, InstantiateRequest, InstantiateRequestV1, InstantiateRequestV2, InstantiateReturnValue, InstantiateReturnValueOk, InstantiateReturnValueTo267, InstructionWeights, Limits, LimitsTo264, PrefabWasmModule, RentProjection, Schedule, ScheduleTo212, ScheduleTo258, ScheduleTo264, SeedOf, StorageDeposit, TombstoneContractInfo, TrieId } from '@polkadot/types/interfaces/contracts';
-import type { ContractConstructorSpecLatest, ContractConstructorSpecV0, ContractConstructorSpecV1, ContractConstructorSpecV2, ContractConstructorSpecV3, ContractConstructorSpecV4, ContractContractSpecV0, ContractContractSpecV1, ContractContractSpecV2, ContractContractSpecV3, ContractContractSpecV4, ContractCryptoHasher, ContractDiscriminant, ContractDisplayName, ContractEnvironmentV4, ContractEventParamSpecLatest, ContractEventParamSpecV0, ContractEventParamSpecV2, ContractEventSpecLatest, ContractEventSpecV0, ContractEventSpecV1, ContractEventSpecV2, ContractLayoutArray, ContractLayoutCell, ContractLayoutEnum, ContractLayoutHash, ContractLayoutHashingStrategy, ContractLayoutKey, ContractLayoutStruct, ContractLayoutStructField, ContractMessageParamSpecLatest, ContractMessageParamSpecV0, ContractMessageParamSpecV2, ContractMessageSpecLatest, ContractMessageSpecV0, ContractMessageSpecV1, ContractMessageSpecV2, ContractMessageSpecV3, ContractMetadata, ContractMetadataLatest, ContractMetadataV0, ContractMetadataV1, ContractMetadataV2, ContractMetadataV3, ContractMetadataV4, ContractProject, ContractProjectContract, ContractProjectInfo, ContractProjectSource, ContractProjectV0, ContractSelector, ContractStorageLayout, ContractTypeSpec } from '@polkadot/types/interfaces/contractsAbi';
+import type { ContractConstructorSpecLatest, ContractConstructorSpecV0, ContractConstructorSpecV1, ContractConstructorSpecV2, ContractConstructorSpecV3, ContractContractSpecV0, ContractContractSpecV1, ContractContractSpecV2, ContractContractSpecV3, ContractContractSpecV4, ContractCryptoHasher, ContractDiscriminant, ContractDisplayName, ContractEventParamSpecLatest, ContractEventParamSpecV0, ContractEventParamSpecV2, ContractEventSpecLatest, ContractEventSpecV0, ContractEventSpecV1, ContractEventSpecV2, ContractLayoutArray, ContractLayoutCell, ContractLayoutEnum, ContractLayoutHash, ContractLayoutHashingStrategy, ContractLayoutKey, ContractLayoutStruct, ContractLayoutStructField, ContractMessageParamSpecLatest, ContractMessageParamSpecV0, ContractMessageParamSpecV2, ContractMessageSpecLatest, ContractMessageSpecV0, ContractMessageSpecV1, ContractMessageSpecV2, ContractMetadata, ContractMetadataLatest, ContractMetadataV0, ContractMetadataV1, ContractMetadataV2, ContractMetadataV3, ContractMetadataV4, ContractProject, ContractProjectContract, ContractProjectInfo, ContractProjectSource, ContractProjectV0, ContractSelector, ContractStorageLayout, ContractTypeSpec } from '@polkadot/types/interfaces/contractsAbi';
import type { FundIndex, FundInfo, LastContribution, TrieIndex } from '@polkadot/types/interfaces/crowdloan';
import type { CollationInfo, CollationInfoV1, ConfigData, MessageId, OverweightIndex, PageCounter, PageIndexData } from '@polkadot/types/interfaces/cumulus';
import type { AccountVote, AccountVoteSplit, AccountVoteStandard, Conviction, Delegations, PreimageStatus, PreimageStatusAvailable, PriorLock, PropIndex, Proposal, ProxyState, ReferendumIndex, ReferendumInfo, ReferendumInfoFinished, ReferendumInfoTo239, ReferendumStatus, Tally, Voting, VotingDelegating, VotingDirect, VotingDirectVote } from '@polkadot/types/interfaces/democracy';
@@ -34,20 +34,18 @@ import type { CreatedBlock, ImportedAux } from '@polkadot/types/interfaces/engin
import type { BlockV0, BlockV1, BlockV2, EIP1559Transaction, EIP2930Transaction, EthAccessList, EthAccessListItem, EthAccount, EthAddress, EthBlock, EthBloom, EthCallRequest, EthFeeHistory, EthFilter, EthFilterAddress, EthFilterChanges, EthFilterTopic, EthFilterTopicEntry, EthFilterTopicInner, EthHeader, EthLog, EthReceipt, EthReceiptV0, EthReceiptV3, EthRichBlock, EthRichHeader, EthStorageProof, EthSubKind, EthSubParams, EthSubResult, EthSyncInfo, EthSyncStatus, EthTransaction, EthTransactionAction, EthTransactionCondition, EthTransactionRequest, EthTransactionSignature, EthTransactionStatus, EthWork, EthereumAccountId, EthereumAddress, EthereumLookupSource, EthereumSignature, LegacyTransaction, TransactionV0, TransactionV1, TransactionV2 } from '@polkadot/types/interfaces/eth';
import type { EvmAccount, EvmCallInfo, EvmCreateInfo, EvmLog, EvmVicinity, ExitError, ExitFatal, ExitReason, ExitRevert, ExitSucceed } from '@polkadot/types/interfaces/evm';
import type { AnySignature, EcdsaSignature, Ed25519Signature, Era, Extrinsic, ExtrinsicEra, ExtrinsicPayload, ExtrinsicPayloadUnknown, ExtrinsicPayloadV4, ExtrinsicSignature, ExtrinsicSignatureV4, ExtrinsicUnknown, ExtrinsicV4, ImmortalEra, MortalEra, MultiSignature, Signature, SignerPayload, Sr25519Signature } from '@polkadot/types/interfaces/extrinsics';
-import type { FungiblesAccessError } from '@polkadot/types/interfaces/fungibles';
import type { AssetOptions, Owner, PermissionLatest, PermissionVersions, PermissionsV1 } from '@polkadot/types/interfaces/genericAsset';
import type { ActiveGilt, ActiveGiltsTotal, ActiveIndex, GiltBid } from '@polkadot/types/interfaces/gilt';
import type { AuthorityIndex, AuthorityList, AuthoritySet, AuthoritySetChange, AuthoritySetChanges, AuthorityWeight, DelayKind, DelayKindBest, EncodedFinalityProofs, ForkTreePendingChange, ForkTreePendingChangeNode, GrandpaCommit, GrandpaEquivocation, GrandpaEquivocationProof, GrandpaEquivocationValue, GrandpaJustification, GrandpaPrecommit, GrandpaPrevote, GrandpaSignedPrecommit, JustificationNotification, KeyOwnerProof, NextAuthority, PendingChange, PendingPause, PendingResume, Precommits, Prevotes, ReportedRoundStates, RoundState, SetId, StoredPendingChange, StoredState } from '@polkadot/types/interfaces/grandpa';
import type { IdentityFields, IdentityInfo, IdentityInfoAdditional, IdentityInfoTo198, IdentityJudgement, RegistrarIndex, RegistrarInfo, Registration, RegistrationJudgement, RegistrationTo198 } from '@polkadot/types/interfaces/identity';
import type { AuthIndex, AuthoritySignature, Heartbeat, HeartbeatTo244, OpaqueMultiaddr, OpaqueNetworkState, OpaquePeerId } from '@polkadot/types/interfaces/imOnline';
import type { CallIndex, LotteryConfig } from '@polkadot/types/interfaces/lottery';
-import type { ErrorMetadataLatest, ErrorMetadataV10, ErrorMetadataV11, ErrorMetadataV12, ErrorMetadataV13, ErrorMetadataV14, ErrorMetadataV9, EventMetadataLatest, EventMetadataV10, EventMetadataV11, EventMetadataV12, EventMetadataV13, EventMetadataV14, EventMetadataV9, ExtrinsicMetadataLatest, ExtrinsicMetadataV11, ExtrinsicMetadataV12, ExtrinsicMetadataV13, ExtrinsicMetadataV14, FunctionArgumentMetadataLatest, FunctionArgumentMetadataV10, FunctionArgumentMetadataV11, FunctionArgumentMetadataV12, FunctionArgumentMetadataV13, FunctionArgumentMetadataV14, FunctionArgumentMetadataV9, FunctionMetadataLatest, FunctionMetadataV10, FunctionMetadataV11, FunctionMetadataV12, FunctionMetadataV13, FunctionMetadataV14, FunctionMetadataV9, MetadataAll, MetadataLatest, MetadataV10, MetadataV11, MetadataV12, MetadataV13, MetadataV14, MetadataV15, MetadataV9, ModuleConstantMetadataV10, ModuleConstantMetadataV11, ModuleConstantMetadataV12, ModuleConstantMetadataV13, ModuleConstantMetadataV9, ModuleMetadataV10, ModuleMetadataV11, ModuleMetadataV12, ModuleMetadataV13, ModuleMetadataV9, OpaqueMetadata, PalletCallMetadataLatest, PalletCallMetadataV14, PalletConstantMetadataLatest, PalletConstantMetadataV14, PalletErrorMetadataLatest, PalletErrorMetadataV14, PalletEventMetadataLatest, PalletEventMetadataV14, PalletMetadataLatest, PalletMetadataV14, PalletMetadataV15, PalletStorageMetadataLatest, PalletStorageMetadataV14, PortableType, PortableTypeV14, RuntimeApiMetadataLatest, RuntimeApiMetadataV15, RuntimeApiMethodMetadataV15, RuntimeApiMethodParamMetadataV15, SignedExtensionMetadataLatest, SignedExtensionMetadataV14, StorageEntryMetadataLatest, StorageEntryMetadataV10, StorageEntryMetadataV11, StorageEntryMetadataV12, StorageEntryMetadataV13, StorageEntryMetadataV14, StorageEntryMetadataV9, StorageEntryModifierLatest, StorageEntryModifierV10, StorageEntryModifierV11, StorageEntryModifierV12, StorageEntryModifierV13, StorageEntryModifierV14, StorageEntryModifierV9, StorageEntryTypeLatest, StorageEntryTypeV10, StorageEntryTypeV11, StorageEntryTypeV12, StorageEntryTypeV13, StorageEntryTypeV14, StorageEntryTypeV9, StorageHasher, StorageHasherV10, StorageHasherV11, StorageHasherV12, StorageHasherV13, StorageHasherV14, StorageHasherV9, StorageMetadataV10, StorageMetadataV11, StorageMetadataV12, StorageMetadataV13, StorageMetadataV9 } from '@polkadot/types/interfaces/metadata';
-import type { MmrBatchProof, MmrEncodableOpaqueLeaf, MmrError, MmrHash, MmrLeafBatchProof, MmrLeafIndex, MmrLeafProof, MmrNodeIndex, MmrProof } from '@polkadot/types/interfaces/mmr';
-import type { NftCollectionId, NftItemId } from '@polkadot/types/interfaces/nfts';
-import type { NpApiError, NpPoolId } from '@polkadot/types/interfaces/nompools';
+import type { ErrorMetadataLatest, ErrorMetadataV10, ErrorMetadataV11, ErrorMetadataV12, ErrorMetadataV13, ErrorMetadataV14, ErrorMetadataV9, EventMetadataLatest, EventMetadataV10, EventMetadataV11, EventMetadataV12, EventMetadataV13, EventMetadataV14, EventMetadataV9, ExtrinsicMetadataLatest, ExtrinsicMetadataV11, ExtrinsicMetadataV12, ExtrinsicMetadataV13, ExtrinsicMetadataV14, FunctionArgumentMetadataLatest, FunctionArgumentMetadataV10, FunctionArgumentMetadataV11, FunctionArgumentMetadataV12, FunctionArgumentMetadataV13, FunctionArgumentMetadataV14, FunctionArgumentMetadataV9, FunctionMetadataLatest, FunctionMetadataV10, FunctionMetadataV11, FunctionMetadataV12, FunctionMetadataV13, FunctionMetadataV14, FunctionMetadataV9, MetadataAll, MetadataLatest, MetadataV10, MetadataV11, MetadataV12, MetadataV13, MetadataV14, MetadataV9, ModuleConstantMetadataV10, ModuleConstantMetadataV11, ModuleConstantMetadataV12, ModuleConstantMetadataV13, ModuleConstantMetadataV9, ModuleMetadataV10, ModuleMetadataV11, ModuleMetadataV12, ModuleMetadataV13, ModuleMetadataV9, OpaqueMetadata, PalletCallMetadataLatest, PalletCallMetadataV14, PalletConstantMetadataLatest, PalletConstantMetadataV14, PalletErrorMetadataLatest, PalletErrorMetadataV14, PalletEventMetadataLatest, PalletEventMetadataV14, PalletMetadataLatest, PalletMetadataV14, PalletStorageMetadataLatest, PalletStorageMetadataV14, PortableType, PortableTypeV14, SignedExtensionMetadataLatest, SignedExtensionMetadataV14, StorageEntryMetadataLatest, StorageEntryMetadataV10, StorageEntryMetadataV11, StorageEntryMetadataV12, StorageEntryMetadataV13, StorageEntryMetadataV14, StorageEntryMetadataV9, StorageEntryModifierLatest, StorageEntryModifierV10, StorageEntryModifierV11, StorageEntryModifierV12, StorageEntryModifierV13, StorageEntryModifierV14, StorageEntryModifierV9, StorageEntryTypeLatest, StorageEntryTypeV10, StorageEntryTypeV11, StorageEntryTypeV12, StorageEntryTypeV13, StorageEntryTypeV14, StorageEntryTypeV9, StorageHasher, StorageHasherV10, StorageHasherV11, StorageHasherV12, StorageHasherV13, StorageHasherV14, StorageHasherV9, StorageMetadataV10, StorageMetadataV11, StorageMetadataV12, StorageMetadataV13, StorageMetadataV9 } from '@polkadot/types/interfaces/metadata';
+import type { MmrBatchProof, MmrEncodableOpaqueLeaf, MmrError, MmrLeafBatchProof, MmrLeafIndex, MmrLeafProof, MmrNodeIndex, MmrProof } from '@polkadot/types/interfaces/mmr';
+import type { NpApiError } from '@polkadot/types/interfaces/nompools';
import type { StorageKind } from '@polkadot/types/interfaces/offchain';
import type { DeferredOffenceOf, Kind, OffenceDetails, Offender, OpaqueTimeSlot, ReportIdOf, Reporter } from '@polkadot/types/interfaces/offences';
-import type { AbridgedCandidateReceipt, AbridgedHostConfiguration, AbridgedHrmpChannel, AssignmentId, AssignmentKind, AttestedCandidate, AuctionIndex, AuthorityDiscoveryId, AvailabilityBitfield, AvailabilityBitfieldRecord, BackedCandidate, Bidder, BufferedSessionChange, CandidateCommitments, CandidateDescriptor, CandidateEvent, CandidateHash, CandidateInfo, CandidatePendingAvailability, CandidateReceipt, CollatorId, CollatorSignature, CommittedCandidateReceipt, CoreAssignment, CoreIndex, CoreOccupied, CoreState, DisputeLocation, DisputeResult, DisputeState, DisputeStatement, DisputeStatementSet, DoubleVoteReport, DownwardMessage, ExecutorParam, ExecutorParams, ExecutorParamsHash, ExplicitDisputeStatement, GlobalValidationData, GlobalValidationSchedule, GroupIndex, GroupRotationInfo, HeadData, HostConfiguration, HrmpChannel, HrmpChannelId, HrmpOpenChannelRequest, InboundDownwardMessage, InboundHrmpMessage, InboundHrmpMessages, IncomingParachain, IncomingParachainDeploy, IncomingParachainFixed, InvalidDisputeStatementKind, LeasePeriod, LeasePeriodOf, LocalValidationData, MessageIngestionType, MessageQueueChain, MessagingStateSnapshot, MessagingStateSnapshotEgressEntry, MultiDisputeStatementSet, NewBidder, OccupiedCore, OccupiedCoreAssumption, OldV1SessionInfo, OutboundHrmpMessage, ParaGenesisArgs, ParaId, ParaInfo, ParaLifecycle, ParaPastCodeMeta, ParaScheduling, ParaValidatorIndex, ParachainDispatchOrigin, ParachainInherentData, ParachainProposal, ParachainsInherentData, ParathreadClaim, ParathreadClaimQueue, ParathreadEntry, PersistedValidationData, PvfCheckStatement, PvfExecTimeoutKind, PvfPrepTimeoutKind, QueuedParathread, RegisteredParachainInfo, RelayBlockNumber, RelayChainBlockNumber, RelayChainHash, RelayHash, Remark, ReplacementTimes, Retriable, ScheduledCore, Scheduling, ScrapedOnChainVotes, ServiceQuality, SessionInfo, SessionInfoValidatorGroup, SignedAvailabilityBitfield, SignedAvailabilityBitfields, SigningContext, SlotRange, SlotRange10, Statement, SubId, SystemInherentData, TransientValidationData, UpgradeGoAhead, UpgradeRestriction, UpwardMessage, ValidDisputeStatementKind, ValidationCode, ValidationCodeHash, ValidationData, ValidationDataType, ValidationFunctionParams, ValidatorSignature, ValidityAttestation, VecInboundHrmpMessage, WinnersData, WinnersData10, WinnersDataTuple, WinnersDataTuple10, WinningData, WinningData10, WinningDataEntry } from '@polkadot/types/interfaces/parachains';
+import type { AbridgedCandidateReceipt, AbridgedHostConfiguration, AbridgedHrmpChannel, AssignmentId, AssignmentKind, AttestedCandidate, AuctionIndex, AuthorityDiscoveryId, AvailabilityBitfield, AvailabilityBitfieldRecord, BackedCandidate, Bidder, BufferedSessionChange, CandidateCommitments, CandidateDescriptor, CandidateEvent, CandidateHash, CandidateInfo, CandidatePendingAvailability, CandidateReceipt, CollatorId, CollatorSignature, CommittedCandidateReceipt, CoreAssignment, CoreIndex, CoreOccupied, CoreState, DisputeLocation, DisputeResult, DisputeState, DisputeStatement, DisputeStatementSet, DoubleVoteReport, DownwardMessage, ExplicitDisputeStatement, GlobalValidationData, GlobalValidationSchedule, GroupIndex, GroupRotationInfo, HeadData, HostConfiguration, HrmpChannel, HrmpChannelId, HrmpOpenChannelRequest, InboundDownwardMessage, InboundHrmpMessage, InboundHrmpMessages, IncomingParachain, IncomingParachainDeploy, IncomingParachainFixed, InvalidDisputeStatementKind, LeasePeriod, LeasePeriodOf, LocalValidationData, MessageIngestionType, MessageQueueChain, MessagingStateSnapshot, MessagingStateSnapshotEgressEntry, MultiDisputeStatementSet, NewBidder, OccupiedCore, OccupiedCoreAssumption, OldV1SessionInfo, OutboundHrmpMessage, ParaGenesisArgs, ParaId, ParaInfo, ParaLifecycle, ParaPastCodeMeta, ParaScheduling, ParaValidatorIndex, ParachainDispatchOrigin, ParachainInherentData, ParachainProposal, ParachainsInherentData, ParathreadClaim, ParathreadClaimQueue, ParathreadEntry, PersistedValidationData, PvfCheckStatement, QueuedParathread, RegisteredParachainInfo, RelayBlockNumber, RelayChainBlockNumber, RelayChainHash, RelayHash, Remark, ReplacementTimes, Retriable, ScheduledCore, Scheduling, ScrapedOnChainVotes, ServiceQuality, SessionInfo, SessionInfoValidatorGroup, SignedAvailabilityBitfield, SignedAvailabilityBitfields, SigningContext, SlotRange, SlotRange10, Statement, SubId, SystemInherentData, TransientValidationData, UpgradeGoAhead, UpgradeRestriction, UpwardMessage, ValidDisputeStatementKind, ValidationCode, ValidationCodeHash, ValidationData, ValidationDataType, ValidationFunctionParams, ValidatorSignature, ValidityAttestation, VecInboundHrmpMessage, WinnersData, WinnersData10, WinnersDataTuple, WinnersDataTuple10, WinningData, WinningData10, WinningDataEntry } from '@polkadot/types/interfaces/parachains';
import type { FeeDetails, InclusionFee, RuntimeDispatchInfo, RuntimeDispatchInfoV1, RuntimeDispatchInfoV2 } from '@polkadot/types/interfaces/payment';
import type { Approvals } from '@polkadot/types/interfaces/poll';
import type { ProxyAnnouncement, ProxyDefinition, ProxyType } from '@polkadot/types/interfaces/proxy';
@@ -70,6 +68,8 @@ import type { ClassDetails, ClassId, ClassMetadata, DepositBalance, DepositBalan
import type { Multisig, Timepoint } from '@polkadot/types/interfaces/utility';
import type { VestingInfo } from '@polkadot/types/interfaces/vesting';
import type { AssetInstance, AssetInstanceV0, AssetInstanceV1, AssetInstanceV2, BodyId, BodyPart, DoubleEncodedCall, Fungibility, FungibilityV0, FungibilityV1, FungibilityV2, InboundStatus, InstructionV2, InteriorMultiLocation, Junction, JunctionV0, JunctionV1, JunctionV2, Junctions, JunctionsV1, JunctionsV2, MultiAsset, MultiAssetFilter, MultiAssetFilterV1, MultiAssetFilterV2, MultiAssetV0, MultiAssetV1, MultiAssetV2, MultiAssets, MultiAssetsV1, MultiAssetsV2, MultiLocation, MultiLocationV0, MultiLocationV1, MultiLocationV2, NetworkId, OriginKindV0, OriginKindV1, OriginKindV2, OutboundStatus, Outcome, QueryId, QueryStatus, QueueConfigData, Response, ResponseV0, ResponseV1, ResponseV2, ResponseV2Error, ResponseV2Result, VersionMigrationStage, VersionedMultiAsset, VersionedMultiAssets, VersionedMultiLocation, VersionedResponse, VersionedXcm, WeightLimitV2, WildFungibility, WildFungibilityV0, WildFungibilityV1, WildFungibilityV2, WildMultiAsset, WildMultiAssetV1, WildMultiAssetV2, Xcm, XcmAssetId, XcmError, XcmErrorV0, XcmErrorV1, XcmErrorV2, XcmOrder, XcmOrderV0, XcmOrderV1, XcmOrderV2, XcmOrigin, XcmOriginKind, XcmV0, XcmV1, XcmV2, XcmVersion, XcmpMessageFormat } from '@polkadot/types/interfaces/xcm';
+import type { ProposalContents, ProposalRecord, ProposalTitle } from 'gafi-dashboard/interfaces/signaling';
+import type { Commitments, Reveals, TallyType, VoteData, VoteOutcome, VoteRecord, VoteStage, VoteType } from 'gafi-dashboard/interfaces/voting';
declare module '@polkadot/types/types/registry' {
interface InterfaceTypes {
@@ -152,14 +152,12 @@ declare module '@polkadot/types/types/registry' {
BalanceStatus: BalanceStatus;
BeefyAuthoritySet: BeefyAuthoritySet;
BeefyCommitment: BeefyCommitment;
- BeefyEquivocationProof: BeefyEquivocationProof;
BeefyId: BeefyId;
BeefyKey: BeefyKey;
BeefyNextAuthoritySet: BeefyNextAuthoritySet;
BeefyPayload: BeefyPayload;
BeefyPayloadId: BeefyPayloadId;
BeefySignedCommitment: BeefySignedCommitment;
- BeefyVoteMessage: BeefyVoteMessage;
BenchmarkBatch: BenchmarkBatch;
BenchmarkConfig: BenchmarkConfig;
BenchmarkList: BenchmarkList;
@@ -234,6 +232,7 @@ declare module '@polkadot/types/types/registry' {
CollatorId: CollatorId;
CollatorSignature: CollatorSignature;
CollectiveOrigin: CollectiveOrigin;
+ Commitments: Commitments;
CommittedCandidateReceipt: CommittedCandidateReceipt;
CompactAssignments: CompactAssignments;
CompactAssignmentsTo257: CompactAssignmentsTo257;
@@ -253,7 +252,6 @@ declare module '@polkadot/types/types/registry' {
ContractConstructorSpecV1: ContractConstructorSpecV1;
ContractConstructorSpecV2: ContractConstructorSpecV2;
ContractConstructorSpecV3: ContractConstructorSpecV3;
- ContractConstructorSpecV4: ContractConstructorSpecV4;
ContractContractSpecV0: ContractContractSpecV0;
ContractContractSpecV1: ContractContractSpecV1;
ContractContractSpecV2: ContractContractSpecV2;
@@ -262,7 +260,6 @@ declare module '@polkadot/types/types/registry' {
ContractCryptoHasher: ContractCryptoHasher;
ContractDiscriminant: ContractDiscriminant;
ContractDisplayName: ContractDisplayName;
- ContractEnvironmentV4: ContractEnvironmentV4;
ContractEventParamSpecLatest: ContractEventParamSpecLatest;
ContractEventParamSpecV0: ContractEventParamSpecV0;
ContractEventParamSpecV2: ContractEventParamSpecV2;
@@ -299,7 +296,6 @@ declare module '@polkadot/types/types/registry' {
ContractMessageSpecV0: ContractMessageSpecV0;
ContractMessageSpecV1: ContractMessageSpecV1;
ContractMessageSpecV2: ContractMessageSpecV2;
- ContractMessageSpecV3: ContractMessageSpecV3;
ContractMetadata: ContractMetadata;
ContractMetadataLatest: ContractMetadataLatest;
ContractMetadataV0: ContractMetadataV0;
@@ -445,9 +441,6 @@ declare module '@polkadot/types/types/registry' {
EvmLog: EvmLog;
EvmVicinity: EvmVicinity;
ExecReturnValue: ExecReturnValue;
- ExecutorParam: ExecutorParam;
- ExecutorParams: ExecutorParams;
- ExecutorParamsHash: ExecutorParamsHash;
ExitError: ExitError;
ExitFatal: ExitFatal;
ExitReason: ExitReason;
@@ -508,7 +501,6 @@ declare module '@polkadot/types/types/registry' {
FungibilityV0: FungibilityV0;
FungibilityV1: FungibilityV1;
FungibilityV2: FungibilityV2;
- FungiblesAccessError: FungiblesAccessError;
Gas: Gas;
GiltBid: GiltBid;
GlobalValidationData: GlobalValidationData;
@@ -596,8 +588,6 @@ declare module '@polkadot/types/types/registry' {
InteriorMultiLocation: InteriorMultiLocation;
InvalidDisputeStatementKind: InvalidDisputeStatementKind;
InvalidTransaction: InvalidTransaction;
- isize: isize;
- ISize: ISize;
Json: Json;
Junction: Junction;
Junctions: Junctions;
@@ -651,13 +641,11 @@ declare module '@polkadot/types/types/registry' {
MetadataV12: MetadataV12;
MetadataV13: MetadataV13;
MetadataV14: MetadataV14;
- MetadataV15: MetadataV15;
MetadataV9: MetadataV9;
MigrationStatusResult: MigrationStatusResult;
MmrBatchProof: MmrBatchProof;
MmrEncodableOpaqueLeaf: MmrEncodableOpaqueLeaf;
MmrError: MmrError;
- MmrHash: MmrHash;
MmrLeafBatchProof: MmrLeafBatchProof;
MmrLeafIndex: MmrLeafIndex;
MmrLeafProof: MmrLeafProof;
@@ -707,15 +695,12 @@ declare module '@polkadot/types/types/registry' {
NextAuthority: NextAuthority;
NextConfigDescriptor: NextConfigDescriptor;
NextConfigDescriptorV1: NextConfigDescriptorV1;
- NftCollectionId: NftCollectionId;
- NftItemId: NftItemId;
NodeRole: NodeRole;
Nominations: Nominations;
NominatorIndex: NominatorIndex;
NominatorIndexCompact: NominatorIndexCompact;
NotConnectedPeer: NotConnectedPeer;
NpApiError: NpApiError;
- NpPoolId: NpPoolId;
Null: Null;
OccupiedCore: OccupiedCore;
OccupiedCoreAssumption: OccupiedCoreAssumption;
@@ -763,7 +748,6 @@ declare module '@polkadot/types/types/registry' {
PalletId: PalletId;
PalletMetadataLatest: PalletMetadataLatest;
PalletMetadataV14: PalletMetadataV14;
- PalletMetadataV15: PalletMetadataV15;
PalletsOrigin: PalletsOrigin;
PalletStorageMetadataLatest: PalletStorageMetadataLatest;
PalletStorageMetadataV14: PalletStorageMetadataV14;
@@ -823,14 +807,15 @@ declare module '@polkadot/types/types/registry' {
PriorLock: PriorLock;
PropIndex: PropIndex;
Proposal: Proposal;
+ ProposalContents: ProposalContents;
ProposalIndex: ProposalIndex;
+ ProposalRecord: ProposalRecord;
+ ProposalTitle: ProposalTitle;
ProxyAnnouncement: ProxyAnnouncement;
ProxyDefinition: ProxyDefinition;
ProxyState: ProxyState;
ProxyType: ProxyType;
PvfCheckStatement: PvfCheckStatement;
- PvfExecTimeoutKind: PvfExecTimeoutKind;
- PvfPrepTimeoutKind: PvfPrepTimeoutKind;
QueryId: QueryId;
QueryStatus: QueryStatus;
QueueConfigData: QueueConfigData;
@@ -891,15 +876,12 @@ declare module '@polkadot/types/types/registry' {
ResponseV2Error: ResponseV2Error;
ResponseV2Result: ResponseV2Result;
Retriable: Retriable;
+ Reveals: Reveals;
RewardDestination: RewardDestination;
RewardPoint: RewardPoint;
RoundSnapshot: RoundSnapshot;
RoundState: RoundState;
RpcMethods: RpcMethods;
- RuntimeApiMetadataLatest: RuntimeApiMetadataLatest;
- RuntimeApiMetadataV15: RuntimeApiMetadataV15;
- RuntimeApiMethodMetadataV15: RuntimeApiMethodMetadataV15;
- RuntimeApiMethodParamMetadataV15: RuntimeApiMethodParamMetadataV15;
RuntimeCall: RuntimeCall;
RuntimeDbWeight: RuntimeDbWeight;
RuntimeDispatchInfo: RuntimeDispatchInfo;
@@ -1078,6 +1060,7 @@ declare module '@polkadot/types/types/registry' {
SystemInherentData: SystemInherentData;
SystemOrigin: SystemOrigin;
Tally: Tally;
+ TallyType: TallyType;
TaskAddress: TaskAddress;
TAssetBalance: TAssetBalance;
TAssetDepositBalance: TAssetDepositBalance;
@@ -1160,12 +1143,17 @@ declare module '@polkadot/types/types/registry' {
VestingInfo: VestingInfo;
VestingSchedule: VestingSchedule;
Vote: Vote;
+ VoteData: VoteData;
VoteIndex: VoteIndex;
+ VoteOutcome: VoteOutcome;
Voter: Voter;
+ VoteRecord: VoteRecord;
VoterInfo: VoterInfo;
Votes: Votes;
+ VoteStage: VoteStage;
VotesTo230: VotesTo230;
VoteThreshold: VoteThreshold;
+ VoteType: VoteType;
VoteWeight: VoteWeight;
Voting: Voting;
VotingDelegating: VotingDelegating;
diff --git a/src/interfaces/index.ts b/src/interfaces/index.ts
index 7f1de782..2d307291 100644
--- a/src/interfaces/index.ts
+++ b/src/interfaces/index.ts
@@ -1,4 +1,4 @@
// Auto-generated via `yarn polkadot-types-from-defs`, do not edit
/* eslint-disable */
-export * from './types.js';
+export * from './types';
diff --git a/src/interfaces/pool/index.ts b/src/interfaces/pool/index.ts
deleted file mode 100644
index fcb073fe..00000000
--- a/src/interfaces/pool/index.ts
+++ /dev/null
@@ -1 +0,0 @@
-export * from './types';
diff --git a/src/interfaces/pool/types.ts b/src/interfaces/pool/types.ts
deleted file mode 100644
index dadb06bb..00000000
--- a/src/interfaces/pool/types.ts
+++ /dev/null
@@ -1,7 +0,0 @@
-import { GafiPrimitivesPoolService } from '@polkadot/types/lookup';
-
-export interface PoolInfo {
- basic: GafiPrimitivesPoolService;
- medium: GafiPrimitivesPoolService;
- advance: GafiPrimitivesPoolService;
-}
diff --git a/src/interfaces/types.ts b/src/interfaces/types.ts
index dfecb1f8..692bd163 100644
--- a/src/interfaces/types.ts
+++ b/src/interfaces/types.ts
@@ -1,3 +1,5 @@
// Auto-generated via `yarn polkadot-types-from-defs`, do not edit
/* eslint-disable */
+export * from './signaling/types';
+export * from './voting/types';
diff --git a/src/layouts/Collaborators/CollaboratorsAdd.tsx b/src/layouts/Collaborators/CollaboratorsAdd.tsx
index 686cff4b..383df4c3 100644
--- a/src/layouts/Collaborators/CollaboratorsAdd.tsx
+++ b/src/layouts/Collaborators/CollaboratorsAdd.tsx
@@ -5,12 +5,13 @@ import {
TypeCollaboratorsState,
} from './CollaboratorsUtils';
import { Dispatch, SetStateAction } from 'react';
+import { InjectedAccount } from 'types/polkadot.type';
interface CollaboratorsAddProps {
options: TypeCollaboratorsRole[];
collaborators: TypeCollaboratorsState;
setCollaborators: Dispatch>;
- account: { address: string; name: string };
+ account: InjectedAccount;
}
export default ({
@@ -47,7 +48,13 @@ export default ({
if (!map_existed) {
setCollaborators(prev => [
...prev,
- { role: options[i], account },
+ {
+ role: options[i],
+ account: {
+ address: account.address,
+ name: account.name as string,
+ },
+ },
]);
break;
}
diff --git a/src/layouts/Collaborators/CollaboratorsMenu.tsx b/src/layouts/Collaborators/CollaboratorsMenu.tsx
index efde2d62..5910217d 100644
--- a/src/layouts/Collaborators/CollaboratorsMenu.tsx
+++ b/src/layouts/Collaborators/CollaboratorsMenu.tsx
@@ -12,14 +12,14 @@ import {
} from '@chakra-ui/react';
import AvatarJazzicon from 'components/Avatar/AvatarJazzicon';
-import { useAppSelector } from 'hooks/useRedux';
import { Dispatch, SetStateAction, useState } from 'react';
-import { convertHex, shorten } from 'utils/utils';
+import { convertHex, shorten } from 'utils';
import AddIcon from 'public/assets/line/add.svg';
import JohnPopover from 'layouts/John/JohnPopover';
import { TypeCollaboratorsState } from './CollaboratorsUtils';
import UserIcon from 'public/assets/line/user.svg';
import { colors } from 'theme/theme';
+import { useAccountContext } from 'contexts/contexts.account';
interface CollaboratorsMenuProps {
address: string;
@@ -32,7 +32,10 @@ export default ({
address,
setCollaborators,
}: CollaboratorsMenuProps) => {
+ const { account } = useAccountContext();
+
const toast = useToast();
+
const { isOpen, onClose, onToggle } = useDisclosure();
const {
isOpen: isError,
@@ -40,8 +43,6 @@ export default ({
onClose: closeError,
} = useDisclosure();
- const { allAccount } = useAppSelector(state => state.injected.polkadot);
-
const [text, setText] = useState('');
const onReset = () => {
@@ -74,7 +75,7 @@ export default ({
return (
<>
- {allAccount?.length ? (
+ {account.all?.length ? (
<>
3 ? 72 : 'auto',
+ height: account.all.length > 3 ? 72 : 'auto',
bg: 'shader.a.900',
},
},
@@ -141,7 +142,7 @@ export default ({
- {allAccount
+ {account.all
.filter(meta => meta.address !== address)
.map(meta => (
-
+
{meta.name}
diff --git a/src/layouts/Collaborators/CollaboratorsRoleSwitch.tsx b/src/layouts/Collaborators/CollaboratorsRoleSwitch.tsx
index 0d62b3bb..547b3755 100644
--- a/src/layouts/Collaborators/CollaboratorsRoleSwitch.tsx
+++ b/src/layouts/Collaborators/CollaboratorsRoleSwitch.tsx
@@ -1,6 +1,6 @@
import { Text, useDisclosure } from '@chakra-ui/react';
import JohnPopover from 'layouts/John/JohnPopover';
-import { ColorOfCollaborator, convertHex } from 'utils/utils';
+import { ColorOfCollaborator, convertHex } from 'utils';
import {
TypeCollaboratorsRole,
TypeCollaboratorsState,
diff --git a/src/layouts/Header/index.tsx b/src/layouts/Header/index.tsx
index 2e42daf8..ba68be28 100644
--- a/src/layouts/Header/index.tsx
+++ b/src/layouts/Header/index.tsx
@@ -13,12 +13,12 @@ const ListHeader = [
},
{
title: 'Blockchain',
- link: 'https://gafi-market-fe-demo.web.app/blockchain/pools',
+ link: 'https://market.gafi.network/blockchain',
target: '_blank',
},
{
title: 'Market Place',
- link: 'https://gafi-market-fe-demo.web.app/',
+ link: 'https://market.gafi.network/',
target: '_blank',
},
];
diff --git a/src/layouts/John/JohnPopover/index.tsx b/src/layouts/John/JohnPopover/index.tsx
index cce3cfbc..5178b40d 100644
--- a/src/layouts/John/JohnPopover/index.tsx
+++ b/src/layouts/John/JohnPopover/index.tsx
@@ -12,7 +12,7 @@ import {
import Chevron01Icon from 'public/assets/line/chevron-01.svg';
-import { convertHex } from 'utils/utils';
+import { convertHex } from 'utils';
import { colors } from 'theme/theme';
import { PropsWithChildren, useRef } from 'react';
diff --git a/src/layouts/Owner/index.tsx b/src/layouts/Owner/index.tsx
index 2b387e02..8bf7d54a 100644
--- a/src/layouts/Owner/index.tsx
+++ b/src/layouts/Owner/index.tsx
@@ -8,13 +8,14 @@ import {
Text,
} from '@chakra-ui/react';
import AvatarJazzicon from 'components/Avatar/AvatarJazzicon';
-import ButtonCopy from 'components/ButtonCopy';
-import { useAppSelector } from 'hooks/useRedux';
+
import { colors } from 'theme/theme';
-import { convertHex, formatCurrency, shorten } from 'utils/utils';
+import { convertHex, formatCurrency, shorten } from 'utils';
import GafiTokenIcon from 'public/assets/token/gafi-token.svg';
import useBalance from 'hooks/useBalance';
+import { useAccountContext } from 'contexts/contexts.account';
+import Clipboard from 'components/Clipboard';
const ShieldIcon = () => (
@@ -26,14 +27,15 @@ const ShieldIcon = () => (
);
export default () => {
- const { account } = useAppSelector(state => state.injected.polkadot);
+ const { account } = useAccountContext();
+
const { balance } = useBalance({
- account: account?.address,
+ account: account.current?.address,
});
return (
- {account?.address ? (
+ {account.current?.address ? (
<>
{
borderBottom="0.0625rem solid"
borderColor="shader.a.800"
>
-
+
- {account.name}
+ {account.current.name}
{
- {shorten(account.address, 12)}
-
+ {shorten(account.current.address, 12)}
+
@@ -79,19 +78,23 @@ export default () => {
>
Balance
-
-
-
+ {balance ? (
+
+
+
-
- {balance}
-
-
+
+ {balance}
+
+
-
- {formatCurrency(Number(balance?.replaceAll(',', '')))}
-
-
+
+ {formatCurrency(Number(balance?.replaceAll(',', '')))}
+
+
+ ) : (
+
+ )}
>
) : (
diff --git a/src/pages/Creator/Collections/CollectionAdmin/index.tsx b/src/pages/Creator/Collections/CollectionAdmin/index.tsx
index 0ebaf5de..50408c53 100644
--- a/src/pages/Creator/Collections/CollectionAdmin/index.tsx
+++ b/src/pages/Creator/Collections/CollectionAdmin/index.tsx
@@ -1,6 +1,5 @@
import { Center, Icon, Stack } from '@chakra-ui/react';
import AvatarCollaborators from 'components/Avatar/AvatarCollaborators';
-import { useAppSelector } from 'hooks/useRedux';
import CollaboratorsMenu from 'layouts/Collaborators/CollaboratorsMenu';
import {
TypeCollaboratorsRole,
@@ -14,6 +13,8 @@ import CloseIcon from 'public/assets/fill/close.svg';
import CollaboratorsAdd from 'layouts/Collaborators/CollaboratorsAdd';
import { UseFormSetValue, UseFormWatch } from 'react-hook-form';
import { CollectionsFieldProps } from '..';
+import { useAccountContext } from 'contexts/contexts.account';
+import { InjectedAccount } from 'types/polkadot.type';
interface CollectionAdminProps {
setValue: UseFormSetValue;
@@ -21,20 +22,17 @@ interface CollectionAdminProps {
}
interface CollectionAdminServiceProps extends CollectionAdminProps {
- account: {
- address: string;
- name: string;
- };
+ account: InjectedAccount;
}
export default ({ setValue, watch }: CollectionAdminProps) => {
- const { account } = useAppSelector(state => state.injected.polkadot);
+ const { account } = useAccountContext();
return (
<>
- {account?.address && account.name && (
+ {account.current?.address && (
@@ -58,7 +56,15 @@ function CollectionAdminService({
// when reset form hook & initial value for 'collaborators'
useEffect(() => {
if (!watch_collaborator) {
- setCollaborators([{ role: 'Admin', account }]);
+ setCollaborators([
+ {
+ role: 'Admin',
+ account: {
+ address: account.address,
+ name: account.name as string,
+ },
+ },
+ ]);
}
}, [watch_collaborator]);
diff --git a/src/pages/Creator/Collections/CollectionsJohnGame/CollectionJohnGameMenu.tsx b/src/pages/Creator/Collections/CollectionsJohnGame/CollectionJohnGameMenu.tsx
index e95b4624..114100ac 100644
--- a/src/pages/Creator/Collections/CollectionsJohnGame/CollectionJohnGameMenu.tsx
+++ b/src/pages/Creator/Collections/CollectionsJohnGame/CollectionJohnGameMenu.tsx
@@ -1,7 +1,7 @@
import { Option, StorageKey, u32 } from '@polkadot/types';
import { PalletGameGameDetails } from '@polkadot/types/lookup';
import { useQuery } from '@tanstack/react-query';
-import { useAppSelector } from 'hooks/useRedux';
+
import { UseFormSetValue, UseFormWatch } from 'react-hook-form';
import { CollectionsFieldProps } from '..';
@@ -10,6 +10,7 @@ import JohnPopoverJSX from 'layouts/John/JohnPopover/JohnPopoverJSX';
import JohnPopoverEmpty from 'layouts/John/JohnPopover/JohnPopoverEmpty';
import { useDisclosure } from '@chakra-ui/react';
import useMetaGame from 'hooks/useMetaGame';
+import { useSubstrateContext } from 'contexts/contexts.substrate';
interface CollectionJohnGamesMenuServiceProps
extends Omit {
@@ -22,7 +23,7 @@ interface CollectionsJohnGameMenuProps {
}
export default ({ setValue, address, watch }: CollectionsJohnGameMenuProps) => {
- const { api } = useAppSelector(state => state.substrate);
+ const { api } = useSubstrateContext();
const { data } = useQuery({
queryKey: ['creator_collection_menu', address],
diff --git a/src/pages/Creator/Collections/CollectionsJohnGame/index.tsx b/src/pages/Creator/Collections/CollectionsJohnGame/index.tsx
index ec06a135..13171c4e 100644
--- a/src/pages/Creator/Collections/CollectionsJohnGame/index.tsx
+++ b/src/pages/Creator/Collections/CollectionsJohnGame/index.tsx
@@ -1,11 +1,10 @@
import { Box, Flex, Text } from '@chakra-ui/react';
-import { useAppSelector } from 'hooks/useRedux';
-
import CollectionJohnGameMenu from './CollectionJohnGameMenu';
import { UseFormSetValue, UseFormWatch } from 'react-hook-form';
import { CollectionsFieldProps } from '..';
import John from 'layouts/John';
+import { useAccountContext } from 'contexts/contexts.account';
interface CollectionsJohnGameProps {
setValue: UseFormSetValue;
@@ -13,7 +12,8 @@ interface CollectionsJohnGameProps {
}
export default ({ setValue, watch }: CollectionsJohnGameProps) => {
- const { account } = useAppSelector(state => state.injected.polkadot);
+ const { account } = useAccountContext();
+
const { general_join_game } = watch();
return (
@@ -40,10 +40,10 @@ export default ({ setValue, watch }: CollectionsJohnGameProps) => {
)}
- {account?.address ? (
+ {account.current?.address ? (
) : null}
diff --git a/src/pages/Creator/Collections/CollectionsModal/index.tsx b/src/pages/Creator/Collections/CollectionsModal/index.tsx
index cefd288a..7289288e 100644
--- a/src/pages/Creator/Collections/CollectionsModal/index.tsx
+++ b/src/pages/Creator/Collections/CollectionsModal/index.tsx
@@ -12,15 +12,16 @@ import {
Text,
useDisclosure,
} from '@chakra-ui/react';
-import { convertHex } from 'utils/utils';
+import { convertHex } from 'utils';
import { colors } from 'theme/theme';
-import { useAppSelector } from 'hooks/useRedux';
import useSignAndSend from 'hooks/useSignAndSend';
import { TypeCollaboratorsRole } from 'layouts/Collaborators/CollaboratorsUtils';
import cloudinary_axios, {
cloudinary_config,
cloudinary_upload_type,
} from 'axios/cloudinary_axios';
+import { useAccountContext } from 'contexts/contexts.account';
+import { useSubstrateContext } from 'contexts/contexts.substrate';
interface CollectionsModalProps {
isDisabled: boolean;
@@ -33,6 +34,9 @@ export default ({
getValues,
isDisabled,
}: CollectionsModalProps) => {
+ const { account } = useAccountContext();
+ const { api } = useSubstrateContext();
+
const {
general_collection_title,
general_description,
@@ -45,12 +49,10 @@ export default ({
} = getValues();
const { isOpen, onClose, onOpen } = useDisclosure();
- const { api } = useAppSelector(state => state.substrate);
- const { account } = useAppSelector(state => state.injected.polkadot);
const { isLoading, setIsLoading, mutation } = useSignAndSend({
- key: [`create_collection`, account?.address as string],
- address: account?.address as string,
+ key: [`create_collection`, account.current?.address as string],
+ address: account.current?.address as string,
onSuccess() {
onSuccess();
onClose();
diff --git a/src/pages/Creator/Collections/index.tsx b/src/pages/Creator/Collections/index.tsx
index 88ead7e6..74d98bc6 100644
--- a/src/pages/Creator/Collections/index.tsx
+++ b/src/pages/Creator/Collections/index.tsx
@@ -19,9 +19,10 @@ import CollectionsGeneral from './CollectionsGeneral';
import CollectionsMedia from './CollectionsMedia';
import CollectionsModal from './CollectionsModal';
import Owner from 'layouts/Owner';
-import { TypeMetadataOfGame } from 'types';
+
import CollectionAdmin from './CollectionAdmin';
import { TypeCollaboratorsState } from 'layouts/Collaborators/CollaboratorsUtils';
+import { TypeMetaGame } from 'types/meta.type.ts';
export interface CollectionsFieldProps {
general_collection_title: string;
@@ -29,7 +30,7 @@ export interface CollectionsFieldProps {
general_external_url: string;
general_join_game?: {
game_id: number;
- option?: TypeMetadataOfGame;
+ option?: TypeMetaGame;
};
// role
diff --git a/src/pages/Creator/Games/GamesCollaborator/index.tsx b/src/pages/Creator/Games/GamesCollaborator/index.tsx
index 0406750e..aedc2ad0 100644
--- a/src/pages/Creator/Games/GamesCollaborator/index.tsx
+++ b/src/pages/Creator/Games/GamesCollaborator/index.tsx
@@ -1,6 +1,5 @@
import { Center } from '@chakra-ui/react';
import AvatarCollaborators from 'components/Avatar/AvatarCollaborators';
-import { useAppSelector } from 'hooks/useRedux';
import CollaboratorsMenu from 'layouts/Collaborators/CollaboratorsMenu';
import { useEffect, useState } from 'react';
@@ -8,6 +7,8 @@ import { useEffect, useState } from 'react';
import { TypeCollaboratorsState } from 'layouts/Collaborators/CollaboratorsUtils';
import { UseFormSetValue, UseFormWatch } from 'react-hook-form';
import { GamesFieldProps } from '..';
+import { useAccountContext } from 'contexts/contexts.account';
+import { InjectedAccount } from 'types/polkadot.type';
interface GamesCollaboratorProps {
setValue: UseFormSetValue;
@@ -15,20 +16,17 @@ interface GamesCollaboratorProps {
}
interface GamesCollaboratorServiceProps extends GamesCollaboratorProps {
- account: {
- address: string;
- name: string;
- };
+ account: InjectedAccount;
}
export default ({ setValue, watch }: GamesCollaboratorProps) => {
- const { account } = useAppSelector(state => state.injected.polkadot);
+ const { account } = useAccountContext();
return (
<>
- {account?.address && account.name ? (
+ {account.current?.address ? (
@@ -50,7 +48,15 @@ function GamesCollaboratorsService({
// when reset form hook & initial value for 'collaborators'
useEffect(() => {
if (!watch_collaborator) {
- setCollaborators([{ role: 'Admin', account }]);
+ setCollaborators([
+ {
+ role: 'Admin',
+ account: {
+ address: account.address,
+ name: account.name as string,
+ },
+ },
+ ]);
}
}, [watch_collaborator]);
diff --git a/src/pages/Creator/Games/GamesModal/index.tsx b/src/pages/Creator/Games/GamesModal/index.tsx
index 92950f35..260e0e7a 100644
--- a/src/pages/Creator/Games/GamesModal/index.tsx
+++ b/src/pages/Creator/Games/GamesModal/index.tsx
@@ -12,14 +12,16 @@ import {
} from '@chakra-ui/react';
import { UseFormGetValues } from 'react-hook-form';
import { GamesFieldProps } from '..';
-import { convertHex } from 'utils/utils';
+import { convertHex } from 'utils';
import { colors } from 'theme/theme';
-import { useAppSelector } from 'hooks/useRedux';
+
import useSignAndSend from 'hooks/useSignAndSend';
import cloudinary_axios, {
cloudinary_config,
cloudinary_upload_type,
} from 'axios/cloudinary_axios';
+import { useSubstrateContext } from 'contexts/contexts.substrate';
+import { useAccountContext } from 'contexts/contexts.account';
interface GamesModalProps {
isDisabled: boolean;
@@ -28,6 +30,9 @@ interface GamesModalProps {
}
export default ({ onSuccess, getValues, isDisabled }: GamesModalProps) => {
+ const { account } = useAccountContext();
+ const { api } = useSubstrateContext();
+
const {
collaborator,
general_categories,
@@ -42,12 +47,10 @@ export default ({ onSuccess, getValues, isDisabled }: GamesModalProps) => {
} = getValues();
const { isOpen, onClose, onOpen } = useDisclosure();
- const { api } = useAppSelector(state => state.substrate);
- const { account } = useAppSelector(state => state.injected.polkadot);
const { isLoading, setIsLoading, mutation } = useSignAndSend({
- key: [`create_collection`, account?.address as string],
- address: account?.address as string,
+ key: [`create_collection`, account.current?.address as string],
+ address: account.current?.address as string,
onSuccess() {
onSuccess();
onClose();
diff --git a/src/pages/Creator/NFTs/NFTsAmount/index.tsx b/src/pages/Creator/NFTs/NFTsAmount/index.tsx
index a2aeed04..4f366d8e 100644
--- a/src/pages/Creator/NFTs/NFTsAmount/index.tsx
+++ b/src/pages/Creator/NFTs/NFTsAmount/index.tsx
@@ -3,7 +3,7 @@ import ChakraBox from 'components/ChakraBox';
import { AnimatePresence } from 'framer-motion';
import { UseFormRegister, UseFormSetValue } from 'react-hook-form';
import { colors } from 'theme/theme';
-import { convertHex } from 'utils/utils';
+import { convertHex } from 'utils';
import { NFTsFieldProps } from '..';
import { useEffect } from 'react';
import SwitchMode from 'components/SwitchMode';
diff --git a/src/pages/Creator/NFTs/NFTsJohnCollection/NFTsJohnCollectionMenu.tsx b/src/pages/Creator/NFTs/NFTsJohnCollection/NFTsJohnCollectionMenu.tsx
index 3d68a797..ab61907f 100644
--- a/src/pages/Creator/NFTs/NFTsJohnCollection/NFTsJohnCollectionMenu.tsx
+++ b/src/pages/Creator/NFTs/NFTsJohnCollection/NFTsJohnCollectionMenu.tsx
@@ -2,7 +2,6 @@ import { Option, StorageKey, u32 } from '@polkadot/types';
import { PalletNftsCollectionDetails } from '@polkadot/types/lookup';
import { useQuery } from '@tanstack/react-query';
-import { useAppSelector } from 'hooks/useRedux';
import { UseFormSetValue, UseFormWatch } from 'react-hook-form';
import { NFTsFieldProps } from '..';
@@ -12,6 +11,7 @@ import JohnPopoverEmpty from 'layouts/John/JohnPopover/JohnPopoverEmpty';
import JohnPopoverJSX from 'layouts/John/JohnPopover/JohnPopoverJSX';
import { useDisclosure } from '@chakra-ui/react';
import useMetaCollection from 'hooks/useMetaCollection';
+import { useSubstrateContext } from 'contexts/contexts.substrate';
interface NFTsJohnCollectionServiceProps
extends Omit {
@@ -25,7 +25,7 @@ interface NFTsJohnCollectionProps {
}
export default ({ setValue, watch, address }: NFTsJohnCollectionProps) => {
- const { api } = useAppSelector(state => state.substrate);
+ const { api } = useSubstrateContext();
const { data } = useQuery({
queryKey: ['creator_create_nft_menu', address],
diff --git a/src/pages/Creator/NFTs/NFTsJohnCollection/index.tsx b/src/pages/Creator/NFTs/NFTsJohnCollection/index.tsx
index 8356965e..78609034 100644
--- a/src/pages/Creator/NFTs/NFTsJohnCollection/index.tsx
+++ b/src/pages/Creator/NFTs/NFTsJohnCollection/index.tsx
@@ -1,11 +1,10 @@
import { Box, Flex, Text } from '@chakra-ui/react';
-import { useAppSelector } from 'hooks/useRedux';
-
import { UseFormSetValue, UseFormWatch } from 'react-hook-form';
import { NFTsFieldProps } from '..';
import NFTsJohnCollectionMenu from './NFTsJohnCollectionMenu';
import John from 'layouts/John';
+import { useAccountContext } from 'contexts/contexts.account';
interface NFTsJohnCollectionProps {
setValue: UseFormSetValue;
@@ -13,7 +12,8 @@ interface NFTsJohnCollectionProps {
}
export default ({ setValue, watch }: NFTsJohnCollectionProps) => {
- const { account } = useAppSelector(state => state.injected.polkadot);
+ const { account } = useAccountContext();
+
const { general_join_collection } = watch();
return (
@@ -37,10 +37,10 @@ export default ({ setValue, watch }: NFTsJohnCollectionProps) => {
)}
- {account?.address ? (
+ {account.current?.address ? (
) : null}
diff --git a/src/pages/Creator/NFTs/NFTsModal/index.tsx b/src/pages/Creator/NFTs/NFTsModal/index.tsx
index a6fb9e3f..8745f86c 100644
--- a/src/pages/Creator/NFTs/NFTsModal/index.tsx
+++ b/src/pages/Creator/NFTs/NFTsModal/index.tsx
@@ -11,15 +11,16 @@ import {
Text,
useDisclosure,
} from '@chakra-ui/react';
-import { convertHex } from 'utils/utils';
+import { convertHex } from 'utils';
import { colors } from 'theme/theme';
import { NFTsFieldProps } from '..';
import useSignAndSend from 'hooks/useSignAndSend';
-import { useAppSelector } from 'hooks/useRedux';
import cloudinary_axios, {
cloudinary_config,
cloudinary_upload_type,
} from 'axios/cloudinary_axios';
+import { useAccountContext } from 'contexts/contexts.account';
+import { useSubstrateContext } from 'contexts/contexts.substrate';
interface CollectionsModalProps {
isDisabled: boolean;
@@ -32,6 +33,9 @@ export default ({
getValues,
isDisabled,
}: CollectionsModalProps) => {
+ const { account } = useAccountContext();
+ const { api } = useSubstrateContext();
+
const {
general_nft_id,
general_amount,
@@ -43,12 +47,10 @@ export default ({
} = getValues();
const { isOpen, onClose, onOpen } = useDisclosure();
- const { api } = useAppSelector(state => state.substrate);
- const { account } = useAppSelector(state => state.injected.polkadot);
const { isLoading, setIsLoading, mutation } = useSignAndSend({
- key: [`create_nft`, account?.address as string],
- address: account?.address as string,
+ key: [`create_nft`, account.current?.address as string],
+ address: account.current?.address as string,
onSuccess() {
onSuccess();
onClose();
diff --git a/src/pages/Creator/NFTs/index.tsx b/src/pages/Creator/NFTs/index.tsx
index cff3e961..7c5468b7 100644
--- a/src/pages/Creator/NFTs/index.tsx
+++ b/src/pages/Creator/NFTs/index.tsx
@@ -9,9 +9,10 @@ import GoBack from 'components/GoBack';
import DefaultForm from 'layouts/DefaultLayout/DefaultForm';
import Owner from 'layouts/Owner';
import NFTsGeneral from './NFTsGeneral';
-import { TypeMetadataOfCollection } from 'types';
+
import NFTsMedia from './NFTsMedia';
import NFTsModal from './NFTsModal';
+import { TypeMetaCollection } from 'types/meta.type.ts';
export interface NFTsFieldProps {
// general
@@ -22,7 +23,7 @@ export interface NFTsFieldProps {
general_external_url: string;
general_join_collection: {
collection_id: number;
- option?: TypeMetadataOfCollection;
+ option?: TypeMetaCollection;
};
// media
diff --git a/src/pages/Creator/Pools/PoolsAdmin/index.tsx b/src/pages/Creator/Pools/PoolsAdmin/index.tsx
index e2e5ed20..a31e0efb 100644
--- a/src/pages/Creator/Pools/PoolsAdmin/index.tsx
+++ b/src/pages/Creator/Pools/PoolsAdmin/index.tsx
@@ -1,6 +1,5 @@
import { Center } from '@chakra-ui/react';
import AvatarCollaborators from 'components/Avatar/AvatarCollaborators';
-import { useAppSelector } from 'hooks/useRedux';
import CollaboratorsMenu from 'layouts/Collaborators/CollaboratorsMenu';
import { useEffect, useState } from 'react';
@@ -8,51 +7,35 @@ import { useEffect, useState } from 'react';
import { TypeCollaboratorsState } from 'layouts/Collaborators/CollaboratorsUtils';
import { UseFormSetValue, UseFormWatch } from 'react-hook-form';
import { PoolsFieldProps } from '..';
+import { useAccountContext } from 'contexts/contexts.account';
interface PoolsAdminProps {
setValue: UseFormSetValue;
watch: UseFormWatch;
}
-interface PoolsAdminServiceProps extends PoolsAdminProps {
- account: {
- address: string;
- name: string;
- };
-}
-
export default ({ setValue, watch }: PoolsAdminProps) => {
- const { account } = useAppSelector(state => state.injected.polkadot);
-
- return (
- <>
- {account?.address && account.name ? (
-
- ) : null}
- >
- );
-};
+ const { collaborator } = watch();
-function GamesCollaboratorsService({
- account,
- setValue,
- watch,
-}: PoolsAdminServiceProps) {
- const { collaborator: watch_collaborator } = watch();
const [collaborators, setCollaborators] = useState(
[]
);
+ const { account } = useAccountContext();
// when reset form hook & initial value for 'collaborators'
useEffect(() => {
- if (!watch_collaborator) {
- setCollaborators([{ role: 'Admin', account }]);
+ if (!collaborator && account.current) {
+ setCollaborators([
+ {
+ role: 'Admin',
+ account: {
+ address: account.current.address,
+ name: account.current.name as string,
+ },
+ },
+ ]);
}
- }, [watch_collaborator]);
+ }, [collaborator, account.current]);
useEffect(() => {
setValue(`collaborator`, collaborators[0]);
@@ -73,13 +56,15 @@ function GamesCollaboratorsService({
>
-
+ {account.current?.address ? (
+
+ ) : null}
))}
>
);
-}
+};
diff --git a/src/pages/Creator/Pools/PoolsConfig/PoolsConfigModal/PoolsConfigModalCard.tsx b/src/pages/Creator/Pools/PoolsConfig/PoolsConfigModal/PoolsConfigModalCard.tsx
index f8bfbd21..abab4d4f 100644
--- a/src/pages/Creator/Pools/PoolsConfig/PoolsConfigModal/PoolsConfigModalCard.tsx
+++ b/src/pages/Creator/Pools/PoolsConfig/PoolsConfigModal/PoolsConfigModalCard.tsx
@@ -1,7 +1,7 @@
import { Box, BoxProps, Center, Flex, Icon, Text } from '@chakra-ui/react';
import { cloundinary_link } from 'axios/cloudinary_axios';
import RatioPicture from 'components/RatioPicture';
-import { convertHex } from 'utils/utils';
+import { convertHex } from 'utils';
import BlockIcon from 'public/assets/line/block.svg';
interface PoolsConfigModalCard {
diff --git a/src/pages/Creator/Pools/PoolsConfig/PoolsConfigModal/index.tsx b/src/pages/Creator/Pools/PoolsConfig/PoolsConfigModal/index.tsx
index 669d9122..a45edd52 100644
--- a/src/pages/Creator/Pools/PoolsConfig/PoolsConfigModal/index.tsx
+++ b/src/pages/Creator/Pools/PoolsConfig/PoolsConfigModal/index.tsx
@@ -17,7 +17,7 @@ import {
} from '@chakra-ui/react';
import RatioPicture from 'components/RatioPicture';
import { colors } from 'theme/theme';
-import { convertHex } from 'utils/utils';
+import { convertHex } from 'utils';
import CloseIcon from 'public/assets/fill/close.svg';
import { PropsWithChildren } from 'react';
import SearchIcon from 'public/assets/line/search.svg';
diff --git a/src/pages/Creator/Pools/PoolsConfig/PoolsConfigSelect.tsx b/src/pages/Creator/Pools/PoolsConfig/PoolsConfigSelect.tsx
index be7175d6..299c5db0 100644
--- a/src/pages/Creator/Pools/PoolsConfig/PoolsConfigSelect.tsx
+++ b/src/pages/Creator/Pools/PoolsConfig/PoolsConfigSelect.tsx
@@ -11,7 +11,7 @@ import {
import { cloundinary_link } from 'axios/cloudinary_axios';
import RatioPicture from 'components/RatioPicture';
import { colors } from 'theme/theme';
-import { CalculatorOfRarity, ColorOfRarity, convertHex } from 'utils/utils';
+import { CalculatorOfRarity, ColorOfRarity, convertHex } from 'utils';
import { PoolsFieldProps } from '..';
import { UseFormRegister } from 'react-hook-form';
diff --git a/src/pages/Creator/Pools/PoolsDuration/index.tsx b/src/pages/Creator/Pools/PoolsDuration/index.tsx
index da1d4791..42f2d7cc 100644
--- a/src/pages/Creator/Pools/PoolsDuration/index.tsx
+++ b/src/pages/Creator/Pools/PoolsDuration/index.tsx
@@ -3,7 +3,7 @@ import { PoolsFieldProps } from '..';
import { UseFormSetValue, UseFormWatch } from 'react-hook-form';
import { useEffect } from 'react';
import { Flex, Text, useDisclosure } from '@chakra-ui/react';
-import { BLOCK_TIME } from 'utils/constants';
+import { BLOCK_TIME } from 'utils/utils.contants';
interface PoolsDurationProps {
setValue: UseFormSetValue;
diff --git a/src/pages/Creator/Pools/PoolsDynamic/PoolsDynamicConfig.tsx b/src/pages/Creator/Pools/PoolsDynamic/PoolsDynamicConfig.tsx
index f4f7b5be..0034ca9a 100644
--- a/src/pages/Creator/Pools/PoolsDynamic/PoolsDynamicConfig.tsx
+++ b/src/pages/Creator/Pools/PoolsDynamic/PoolsDynamicConfig.tsx
@@ -5,13 +5,13 @@ import {
} from 'react-hook-form';
import { PoolsFieldProps } from '..';
import { useDisclosure, useToast } from '@chakra-ui/react';
-import { useAppSelector } from 'hooks/useRedux';
import useItemBalanceOf from 'hooks/useItemBalanceOf';
import PoolsDynamic from '.';
import PoolsConfigEdit from '../PoolsConfig/PoolsConfigEdit';
import PoolsConfigSelect from '../PoolsConfig/PoolsConfigSelect';
import PoolsConfigState from '../PoolsConfig/PoolsConfigState';
import { useEffect } from 'react';
+import { useAccountContext } from 'contexts/contexts.account';
interface PoolsDynamicConfigProps {
setValue: UseFormSetValue;
@@ -20,15 +20,18 @@ interface PoolsDynamicConfigProps {
}
export default ({ setValue, watch, register }: PoolsDynamicConfigProps) => {
- const { account } = useAppSelector(state => state.injected.polkadot);
+ const { account } = useAccountContext();
+
const { isOpen, onToggle, onClose } = useDisclosure();
+
const { add_item_failed, add_item_dynamic } = watch();
+
const toast = useToast();
const { itemBalanceOf } = useItemBalanceOf({
filter: 'address',
- key: `creator_pools/${account?.address}`,
- arg: [account?.address as string],
+ key: `creator_pools/${account.current?.address}`,
+ arg: [account.current?.address as string],
});
const product = Object.values(add_item_dynamic || []).filter(meta => !!meta);
diff --git a/src/pages/Creator/Pools/PoolsFailed/index.tsx b/src/pages/Creator/Pools/PoolsFailed/index.tsx
index ce4bea03..c046b109 100644
--- a/src/pages/Creator/Pools/PoolsFailed/index.tsx
+++ b/src/pages/Creator/Pools/PoolsFailed/index.tsx
@@ -15,7 +15,7 @@ import {
UseFormWatch,
} from 'react-hook-form';
import { colors } from 'theme/theme';
-import { CalculatorOfRarity, ColorOfRarity, convertHex } from 'utils/utils';
+import { CalculatorOfRarity, ColorOfRarity, convertHex } from 'utils';
import { PoolsFieldProps } from '..';
import { useEffect } from 'react';
import SwitchMode from 'components/SwitchMode';
diff --git a/src/pages/Creator/Pools/PoolsModal/PoolsModalCard.tsx b/src/pages/Creator/Pools/PoolsModal/PoolsModalCard.tsx
index 01a5fad2..5ef96a3d 100644
--- a/src/pages/Creator/Pools/PoolsModal/PoolsModalCard.tsx
+++ b/src/pages/Creator/Pools/PoolsModal/PoolsModalCard.tsx
@@ -5,7 +5,7 @@ import RatioPicture from 'components/RatioPicture';
import BlockIcon from 'public/assets/line/block.svg';
import EmptyIcon from 'public/assets/fill/empty.svg';
-import { ColorOfRarity, convertHex } from 'utils/utils';
+import { ColorOfRarity, convertHex } from 'utils';
interface PoolsModalCardProps {
sx?: BoxProps;
diff --git a/src/pages/Creator/Pools/PoolsModal/PoolsModalSubmit.tsx b/src/pages/Creator/Pools/PoolsModal/PoolsModalSubmit.tsx
index 4973dfd7..4a2c0960 100644
--- a/src/pages/Creator/Pools/PoolsModal/PoolsModalSubmit.tsx
+++ b/src/pages/Creator/Pools/PoolsModal/PoolsModalSubmit.tsx
@@ -1,10 +1,11 @@
import { UseFormGetValues } from 'react-hook-form';
import { PoolsFieldProps } from '..';
import { Button } from '@chakra-ui/react';
-import { useAppSelector } from 'hooks/useRedux';
import useBlockTime from 'hooks/useBlockTime';
-import { unitGAFI } from 'utils/utils';
+import { unitGAFI } from 'utils';
+import { useAccountContext } from 'contexts/contexts.account';
+import { useSubstrateContext } from 'contexts/contexts.substrate';
interface PoolsModalSubmitProps {
get_value_type?: {
@@ -24,8 +25,8 @@ export default ({
get_value_type,
getValues,
}: PoolsModalSubmitProps) => {
- const { account } = useAppSelector(state => state.injected.polkadot);
- const { api } = useAppSelector(state => state.substrate);
+ const { account } = useAccountContext();
+ const { api } = useSubstrateContext();
const {
general_title,
@@ -46,7 +47,7 @@ export default ({
isLoading={isLoading}
_hover={{}}
onClick={() => {
- if (account?.address && get_value_type?.length) {
+ if (account.current?.address && get_value_type?.length) {
const start = general_duration?.time ? blockNumber : null;
const end = general_duration?.time
diff --git a/src/pages/Creator/Pools/PoolsModal/index.tsx b/src/pages/Creator/Pools/PoolsModal/index.tsx
index 08e940cb..cb0730e2 100644
--- a/src/pages/Creator/Pools/PoolsModal/index.tsx
+++ b/src/pages/Creator/Pools/PoolsModal/index.tsx
@@ -14,19 +14,14 @@ import {
} from '@chakra-ui/react';
import { UseFormGetValues } from 'react-hook-form';
import { colors } from 'theme/theme';
-import {
- CalculatorOfRarity,
- convertHex,
- formatGAFI,
- unitGAFI,
-} from 'utils/utils';
+import { CalculatorOfRarity, convertHex, formatGAFI, unitGAFI } from 'utils';
import { PoolsFieldProps } from '..';
import PoolsModalCard from './PoolsModalCard';
import React from 'react';
import PoolsModalSubmit from './PoolsModalSubmit';
import useSignAndSend from 'hooks/useSignAndSend';
-import { useAppSelector } from 'hooks/useRedux';
+import { useAccountContext } from 'contexts/contexts.account';
interface PoolsModalProps {
isDisabled: boolean;
@@ -35,8 +30,9 @@ interface PoolsModalProps {
}
export default ({ onSuccess, getValues, isDisabled }: PoolsModalProps) => {
+ const { account } = useAccountContext();
+
const { isOpen, onClose, onOpen } = useDisclosure();
- const { account } = useAppSelector(state => state.injected.polkadot);
const {
add_item_failed,
@@ -77,7 +73,7 @@ export default ({ onSuccess, getValues, isDisabled }: PoolsModalProps) => {
const { mutation, isLoading } = useSignAndSend({
key: [`creator_pool_create/${general_type}`],
- address: account?.address as string,
+ address: account.current?.address as string,
onSuccess() {
onSuccess();
onClose();
diff --git a/src/pages/Creator/Pools/PoolsStable/PoolsStableConfig.tsx b/src/pages/Creator/Pools/PoolsStable/PoolsStableConfig.tsx
index 81725666..67b24d83 100644
--- a/src/pages/Creator/Pools/PoolsStable/PoolsStableConfig.tsx
+++ b/src/pages/Creator/Pools/PoolsStable/PoolsStableConfig.tsx
@@ -5,7 +5,7 @@ import {
} from 'react-hook-form';
import { PoolsFieldProps } from '..';
import { useDisclosure, useToast } from '@chakra-ui/react';
-import { useAppSelector } from 'hooks/useRedux';
+
import PoolsStable from '.';
import PoolsConfigEdit from '../PoolsConfig/PoolsConfigEdit';
import PoolsConfigSelect from '../PoolsConfig/PoolsConfigSelect';
@@ -14,6 +14,8 @@ import { useEffect } from 'react';
import { Option, u8 } from '@polkadot/types';
import { useQuery } from '@tanstack/react-query';
import { PalletNftsCollectionDetails } from '@polkadot/types/lookup';
+import { useAccountContext } from 'contexts/contexts.account';
+import { useSubstrateContext } from 'contexts/contexts.substrate';
interface PoolsDynamicConfigProps {
setValue: UseFormSetValue;
@@ -22,23 +24,26 @@ interface PoolsDynamicConfigProps {
}
export default ({ setValue, watch, register }: PoolsDynamicConfigProps) => {
- const { account } = useAppSelector(state => state.injected.polkadot);
- const { api } = useAppSelector(state => state.substrate);
+ const { account } = useAccountContext();
+ const { api } = useSubstrateContext();
+
const { isOpen, onToggle, onClose } = useDisclosure();
+
const { add_item_failed, add_item_stable } = watch();
+
const toast = useToast();
const { data: supplyOf } = useQuery({
- queryKey: ['creator_create_pool', account?.address],
+ queryKey: ['creator_create_pool', account.current?.address],
queryFn: async () => {
- if (api && account?.address) {
+ if (api && account.current?.address) {
const service = await api.query.game.supplyOf.entries();
return Promise.all(
service.map(async ([{ args }, supply]) => {
const getRole = (await api.query.nfts.collectionRoleOf(
args[0].toNumber(),
- account.address
+ account.current?.address
)) as Option;
const getOwner = (
@@ -48,7 +53,7 @@ export default ({ setValue, watch, register }: PoolsDynamicConfigProps) => {
).value.owner.toString();
if (!supply.toHuman()) {
- if (getRole.isSome || getOwner === account.address) {
+ if (getRole.isSome || getOwner === account.current?.address) {
return {
collection_id: args[0].toNumber(),
nft_id: args[1].toNumber(),
diff --git a/src/pages/Creator/Tabs/TabsCollection/TabsCollectionPanel.tsx b/src/pages/Creator/Tabs/TabsCollection/TabsCollectionPanel.tsx
index affa3eab..8f411c77 100644
--- a/src/pages/Creator/Tabs/TabsCollection/TabsCollectionPanel.tsx
+++ b/src/pages/Creator/Tabs/TabsCollection/TabsCollectionPanel.tsx
@@ -12,36 +12,20 @@ import {
import AvatarPopover from 'components/Avatar/AvatarPopover';
import RatioPicture from 'components/RatioPicture';
-import TabsEmptyData from '../TabsEmptyData';
+
import useMetaCollection from 'hooks/useMetaCollection';
import { TabsCollectionDataProps } from '.';
import { cloundinary_link } from 'axios/cloudinary_axios';
-import { convertHex } from 'utils/utils';
+import { convertHex } from 'utils';
import { colors } from 'theme/theme';
import AvatarJazzicon from 'components/Avatar/AvatarJazzicon';
import useMetaGame from 'hooks/useMetaGame';
interface TabsCollectionPanelProps {
- meta: TabsCollectionDataProps[] | undefined;
+ meta: TabsCollectionDataProps[];
}
export default ({ meta }: TabsCollectionPanelProps) => {
- return (
- <>
- {meta?.length ? (
-
- ) : (
-
- )}
- >
- );
-};
-
-function TabsCollectionPanelService({
- meta,
-}: {
- meta: TabsCollectionDataProps[];
-}) {
const { MetaCollection } = useMetaCollection({
key: `creator_tab_collection`,
filter: 'collection_id',
@@ -57,156 +41,146 @@ function TabsCollectionPanelService({
.flat(),
});
- return (
- <>
- {meta.map(({ collection_id, game, owner, role, items }) => {
- const currentMetaCollection = MetaCollection?.find(
- data => data?.collection_id === collection_id
- );
-
- return (
-
-
- {
+ const currentMetaCollection = MetaCollection?.find(
+ data => data?.collection_id === collection_id
+ );
+
+ return (
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {currentMetaCollection?.title || 'unknown'}
+
+
+
+ ID:
+
+ {collection_id}
+
+
+
+
+
+
+ Joined games
+
+
+
-
-
-
-
- {currentMetaCollection?.title || 'unknown'}
-
-
-
- ID:
-
- {collection_id}
-
-
-
-
-
-
- Joined games
-
-
-
-
-
-
-
- {items} items
-
-
-
+ + {game.length} games
+
+
+ {game.length ? (
+
- Edit 2 weeks ago
-
-
-
-
- );
- })}
- >
- );
-}
+
+ Joined games
+
+
+ {game.map(game_id => {
+ const currentMetaGame = MetaGame?.find(
+ meta => meta.game_id === game_id
+ );
+
+ return (
+
+ );
+ })}
+
+ ) : null}
+
+
+
+
+
+ {items} items
+
+
+
+ Edit 2 weeks ago
+
+
+
+
+ );
+ });
+};
diff --git a/src/pages/Creator/Tabs/TabsCollection/index.tsx b/src/pages/Creator/Tabs/TabsCollection/index.tsx
index e398cd71..6de18b38 100644
--- a/src/pages/Creator/Tabs/TabsCollection/index.tsx
+++ b/src/pages/Creator/Tabs/TabsCollection/index.tsx
@@ -2,7 +2,8 @@ import { Text } from '@chakra-ui/react';
import { Option, StorageKey, u32, u8 } from '@polkadot/types';
import { PalletNftsCollectionDetails } from '@polkadot/types/lookup';
import { useQuery } from '@tanstack/react-query';
-import { useAppSelector } from 'hooks/useRedux';
+import { useAccountContext } from 'contexts/contexts.account';
+import { useSubstrateContext } from 'contexts/contexts.substrate';
import { CreatorLoadingProps } from 'pages/Creator';
import { useEffect } from 'react';
@@ -19,13 +20,13 @@ interface TabsCollectionProps {
}
export default ({ setLoading }: TabsCollectionProps) => {
- const { account } = useAppSelector(state => state.injected.polkadot);
- const { api } = useAppSelector(state => state.substrate);
+ const { account } = useAccountContext();
+ const { api } = useSubstrateContext();
const { data, isLoading } = useQuery({
- queryKey: ['creator_tab_collection', account?.address],
+ queryKey: ['creator_tab_collection', account.current?.address],
queryFn: async () => {
- if (api && account?.address) {
+ if (api && account.current?.address) {
const service = await api.query.nfts.collection.entries();
return Promise.all(
@@ -39,11 +40,11 @@ export default ({ setLoading }: TabsCollectionProps) => {
);
const getOwner =
- option.value.owner.toString() === account.address;
+ option.value.owner.toString() === account.current?.address;
const getRole = (await api.query.nfts.collectionRoleOf(
collection_id.args[0].toNumber(),
- account.address
+ account.current?.address
)) as Option;
if (getOwner || getRole.isSome) {
@@ -51,7 +52,7 @@ export default ({ setLoading }: TabsCollectionProps) => {
game: game.toJSON(),
collection_id: collection_id.args[0].toNumber(),
owner: option.value.owner.toString(),
- role: account.address,
+ role: account.current?.address,
items: option.value.items.toNumber(),
} as TabsCollectionDataProps;
}
@@ -65,7 +66,7 @@ export default ({ setLoading }: TabsCollectionProps) => {
// not found
return [];
},
- enabled: !!api?.query.nfts,
+ enabled: !!(account.current?.address && api?.query.nfts),
});
useEffect(() => {
diff --git a/src/pages/Creator/Tabs/TabsGame/TabsGamePanel.tsx b/src/pages/Creator/Tabs/TabsGame/TabsGamePanel.tsx
index bb423078..4428a8e4 100644
--- a/src/pages/Creator/Tabs/TabsGame/TabsGamePanel.tsx
+++ b/src/pages/Creator/Tabs/TabsGame/TabsGamePanel.tsx
@@ -2,7 +2,6 @@ import { Box, Center, Flex, Stack, Text } from '@chakra-ui/react';
import RatioPicture from 'components/RatioPicture';
import SelectMenu from 'components/SelectMenu';
-import TabsEmptyData from '../TabsEmptyData';
import AvatarPopover from 'components/Avatar/AvatarPopover';
import { TabsGameDataProps } from '.';
@@ -11,18 +10,10 @@ import useMetaGame from 'hooks/useMetaGame';
import { cloundinary_link } from 'axios/cloudinary_axios';
interface TabsGamePanelProps {
- meta: TabsGameDataProps[] | undefined;
+ meta: TabsGameDataProps[];
}
export default ({ meta }: TabsGamePanelProps) => {
- return (
- <>
- {meta?.length ? : }
- >
- );
-};
-
-function TabsGamesPanelService({ meta }: { meta: TabsGameDataProps[] }) {
const { MetaGame } = useMetaGame({
key: `creator_tab_game`,
filter: 'game_id',
@@ -44,75 +35,63 @@ function TabsGamesPanelService({ meta }: { meta: TabsGameDataProps[] }) {
},
];
- return (
- <>
- {meta.map(({ collection, game_id, owner, role }) => {
- const currentMetaGame = MetaGame?.find(
- meta => meta.game_id === game_id
- );
+ return meta.map(({ collection, game_id, owner, role }) => {
+ const currentMetaGame = MetaGame?.find(meta => meta.game_id === game_id);
- return (
-
-
-
+ return (
+
+
+
-
-
-
-
+
+
+
+
-
-
-
-
+
+
+
+
-
-
+
+
-
-
-
- {currentMetaGame?.title || 'unknown'}
-
+
+
+
+ {currentMetaGame?.title || 'unknown'}
+
-
- ID:
-
- {game_id}
-
-
-
+
+ ID:
+
+ {game_id}
+
+
+
-
-
- {collection.length} collections
-
+
+
+ {collection.length} collections
+
-
- Open 4 days
-
-
-
-
- );
- })}
- >
- );
-}
+
+ Open 4 days
+
+
+
+
+ );
+ });
+};
diff --git a/src/pages/Creator/Tabs/TabsGame/index.tsx b/src/pages/Creator/Tabs/TabsGame/index.tsx
index 8e41fca0..5f7f8cb7 100644
--- a/src/pages/Creator/Tabs/TabsGame/index.tsx
+++ b/src/pages/Creator/Tabs/TabsGame/index.tsx
@@ -2,8 +2,9 @@ import { Text } from '@chakra-ui/react';
import { Option, StorageKey, u32 } from '@polkadot/types';
import { PalletGameGameDetails } from '@polkadot/types/lookup';
import { useQuery } from '@tanstack/react-query';
+import { useAccountContext } from 'contexts/contexts.account';
+import { useSubstrateContext } from 'contexts/contexts.substrate';
-import { useAppSelector } from 'hooks/useRedux';
import { CreatorLoadingProps } from 'pages/Creator';
import { useEffect } from 'react';
@@ -20,13 +21,13 @@ interface TabsGameProps {
}
export default ({ setLoading }: TabsGameProps) => {
- const { account } = useAppSelector(state => state.injected.polkadot);
- const { api } = useAppSelector(state => state.substrate);
+ const { account } = useAccountContext();
+ const { api } = useSubstrateContext();
const { data, isLoading } = useQuery({
- queryKey: ['creator_tab_game', account?.address],
+ queryKey: ['creator_tab_game', account.current?.address],
queryFn: async () => {
- if (api && account?.address) {
+ if (api && account.current?.address) {
const service = await api.query.game.game.entries();
return Promise.all(
@@ -40,9 +41,10 @@ export default ({ setLoading }: TabsGameProps) => {
);
const getOwner =
- option.value.owner.toString() === account.address;
+ option.value.owner.toString() === account.current?.address;
- const getRole = option.value.admin.toString() === account.address;
+ const getRole =
+ option.value.admin.toString() === account.current?.address;
if (getOwner || getRole) {
return {
@@ -62,7 +64,7 @@ export default ({ setLoading }: TabsGameProps) => {
// not found
return [];
},
- enabled: !!api?.query.game,
+ enabled: !!(account.current?.address && api?.query.game),
});
useEffect(() => {
diff --git a/src/pages/Creator/Tabs/TabsNFT/TabsNFTPanel.tsx b/src/pages/Creator/Tabs/TabsNFT/TabsNFTPanel.tsx
index 96c33242..dce4d179 100644
--- a/src/pages/Creator/Tabs/TabsNFT/TabsNFTPanel.tsx
+++ b/src/pages/Creator/Tabs/TabsNFT/TabsNFTPanel.tsx
@@ -1,6 +1,6 @@
import useMetaCollection from 'hooks/useMetaCollection';
import { TabsNFTDataProps } from '.';
-import TabsEmptyData from '../TabsEmptyData';
+
import useMetaNFT from 'hooks/useMetaNFT';
import useItemBalanceOf from 'hooks/useItemBalanceOf';
import { Box, Center, Flex, Stack, Text } from '@chakra-ui/react';
@@ -8,18 +8,10 @@ import RatioPicture from 'components/RatioPicture';
import { cloundinary_link } from 'axios/cloudinary_axios';
interface TabsNFTPanelProps {
- meta?: TabsNFTDataProps[] | undefined;
+ meta: TabsNFTDataProps[];
}
export default ({ meta }: TabsNFTPanelProps) => {
- return (
- <>
- {meta?.length ? : }
- >
- );
-};
-
-function TabsNFTPanelService({ meta }: { meta: TabsNFTDataProps[] }) {
const { MetaCollection } = useMetaCollection({
key: `creator_tab_nft`,
filter: 'collection_id',
@@ -41,69 +33,63 @@ function TabsNFTPanelService({ meta }: { meta: TabsNFTDataProps[] }) {
arg: meta.map(({ owner }) => owner),
});
- return (
- <>
- {meta.map(({ collection_id, nft_id, infinity }) => {
- const currentMetaCollection = MetaCollection?.find(
- meta => meta?.collection_id === collection_id
- );
+ return meta.map(({ collection_id, nft_id, infinity }) => {
+ const currentMetaCollection = MetaCollection?.find(
+ meta => meta?.collection_id === collection_id
+ );
- const currentMetaNFT = metaNFT?.find(
- meta =>
- meta?.collection_id === collection_id && meta?.nft_id === nft_id
- );
+ const currentMetaNFT = metaNFT?.find(
+ meta => meta?.collection_id === collection_id && meta?.nft_id === nft_id
+ );
- const currentItemOfBalance = itemBalanceOf?.find(
- meta =>
- meta?.collection_id === collection_id && meta?.nft_id === nft_id
- );
+ const currentItemOfBalance = itemBalanceOf?.find(
+ meta => meta?.collection_id === collection_id && meta?.nft_id === nft_id
+ );
- return (
-
-
+ return (
+
+
-
-
- {currentMetaCollection?.title || 'unknown'}
-
+
+
+ {currentMetaCollection?.title || 'unknown'}
+
-
-
- {currentMetaNFT?.title || 'unknown'}
-
+
+
+ {currentMetaNFT?.title || 'unknown'}
+
-
- ID:
-
- {nft_id}
-
-
-
+
+ ID:
+
+ {nft_id}
+
+
+
-
-
- {infinity ? 'Infinity' : 'x' + currentItemOfBalance?.amount}
-
+
+
+ {infinity ? 'Infinity' : 'x' + currentItemOfBalance?.amount}
+
-
- Edit 43m ago
-
-
-
-
- );
- })}
- >
- );
-}
+
+ Edit 43m ago
+
+
+
+
+ );
+ });
+};
diff --git a/src/pages/Creator/Tabs/TabsNFT/index.tsx b/src/pages/Creator/Tabs/TabsNFT/index.tsx
index 8e7e5e7d..29067363 100644
--- a/src/pages/Creator/Tabs/TabsNFT/index.tsx
+++ b/src/pages/Creator/Tabs/TabsNFT/index.tsx
@@ -3,7 +3,9 @@ import { Option } from '@polkadot/types';
import { PalletNftsItemDetails } from '@polkadot/types/lookup';
import { isNull } from '@polkadot/util';
import { useQuery } from '@tanstack/react-query';
-import { useAppSelector } from 'hooks/useRedux';
+import { useAccountContext } from 'contexts/contexts.account';
+import { useSubstrateContext } from 'contexts/contexts.substrate';
+
import { CreatorLoadingProps } from 'pages/Creator';
import { useEffect } from 'react';
@@ -19,13 +21,13 @@ interface TabsCollectionProps {
}
export default ({ setLoading }: TabsCollectionProps) => {
- const { account } = useAppSelector(state => state.injected.polkadot);
- const { api } = useAppSelector(state => state.substrate);
+ const { account } = useAccountContext();
+ const { api } = useSubstrateContext();
const { data, isLoading } = useQuery({
- queryKey: ['creator_tab_nft', account?.address],
+ queryKey: ['creator_tab_nft', account.current?.address],
queryFn: async () => {
- if (api && account?.address) {
+ if (api && account.current?.address) {
const service = await api.query.nfts.item.entries();
return Promise.all(
@@ -41,11 +43,12 @@ export default ({ setLoading }: TabsCollectionProps) => {
nft_id.args[0].toNumber()
);
- const getOwner = option.value.owner.toString() === account.address;
+ const getOwner =
+ option.value.owner.toString() === account.current?.address;
if (
getOwner ||
- getRole[0][0].args[1].toString() === account.address
+ getRole[0][0].args[1].toString() === account.current?.address
) {
return {
collection_id: nft_id.args[0].toNumber(),
@@ -63,7 +66,7 @@ export default ({ setLoading }: TabsCollectionProps) => {
// not found
return [];
},
- enabled: !!api?.query.nfts,
+ enabled: !!(account.current?.address && api?.query.nfts),
});
useEffect(() => {
diff --git a/src/pages/Creator/Tabs/TabsPool/TabsPoolPanel.tsx b/src/pages/Creator/Tabs/TabsPool/TabsPoolPanel.tsx
index 234379f0..c62615a0 100644
--- a/src/pages/Creator/Tabs/TabsPool/TabsPoolPanel.tsx
+++ b/src/pages/Creator/Tabs/TabsPool/TabsPoolPanel.tsx
@@ -15,7 +15,7 @@ import { TabsPoolDataProps } from '.';
import RatioPicture from 'components/RatioPicture';
import AvatarPopover from 'components/Avatar/AvatarPopover';
import AvatarJazzicon from 'components/Avatar/AvatarJazzicon';
-import { CalculatorOfRarity, ColorOfRarity, convertHex } from 'utils/utils';
+import { CalculatorOfRarity, ColorOfRarity, convertHex } from 'utils';
import DateBlock from 'components/DateBlock';
import { colors } from 'theme/theme';
@@ -28,14 +28,10 @@ import { isNull } from '@polkadot/util';
import useMetaPool from 'hooks/useMetaPool';
interface TabsNFTPanelProps {
- meta?: TabsPoolDataProps[] | undefined;
+ meta: TabsPoolDataProps[];
}
export default ({ meta }: TabsNFTPanelProps) => {
- return <>{meta?.length ? : null}>;
-};
-
-function TabsPoolPanelService({ meta }: { meta: TabsPoolDataProps[] }) {
const loot_table = meta
.map(meta => meta.lootOfTable.map(meta => meta))
.flat();
@@ -57,277 +53,260 @@ function TabsPoolPanelService({ meta }: { meta: TabsPoolDataProps[] }) {
arg: meta.map(({ pool_id }) => pool_id),
});
- return (
- <>
- {meta.map(
- ({ admin, owner, endBlock, pool_id, lootOfTable, supplyOf }) => {
- const currentMetaNFT = metaNFT?.find(({ collection_id, nft_id }) =>
- lootOfTable.some(({ maybeNft }) => {
- if (maybeNft.isSome) {
- return (
- maybeNft.value.collection.toNumber() === collection_id &&
- maybeNft.value.item.toNumber() === nft_id
- );
- }
- })
- );
+ return meta.map(
+ ({ admin, owner, endBlock, pool_id, lootOfTable, supplyOf }) => {
+ const currentMetaNFT = metaNFT?.find(({ collection_id, nft_id }) =>
+ lootOfTable.some(({ maybeNft }) => {
+ if (maybeNft.isSome) {
+ return (
+ maybeNft.value.collection.toNumber() === collection_id &&
+ maybeNft.value.item.toNumber() === nft_id
+ );
+ }
+ })
+ );
- const currentMetaPool = MetaPool?.find(
- meta => meta.pool_id === pool_id
- );
+ const currentMetaPool = MetaPool?.find(meta => meta.pool_id === pool_id);
- return (
-
-
-
+ return (
+
+
+
-
-
-
-
+
+
+
+
-
-
-
-
-
+
+
+
+
+
-
-
-
- {currentMetaPool?.title || 'unknown'}
-
+
+
+
+ {currentMetaPool?.title || 'unknown'}
+
-
- ID:
-
- {pool_id}
-
-
-
+
+ ID:
+
+ {pool_id}
+
+
+
-
-
- Supply
-
+
+
+ Supply
+
-
- {isInfinity ? null : (
-
+
+ Rarity:
+
+ {getWeight}%
+
+
+
+ >
+ )}
+
+ );
+ })
+ )}
+
+ ) : null}
+
+
-
- End in:
-
-
-
-
- );
- }
- )}
- >
+
+ End in:
+
+
+
+
+ );
+ }
);
-}
+};
diff --git a/src/pages/Creator/Tabs/TabsPool/index.tsx b/src/pages/Creator/Tabs/TabsPool/index.tsx
index ec543ceb..4d3db92f 100644
--- a/src/pages/Creator/Tabs/TabsPool/index.tsx
+++ b/src/pages/Creator/Tabs/TabsPool/index.tsx
@@ -5,7 +5,9 @@ import {
PalletGamePoolDetails,
} from '@polkadot/types/lookup';
import { useQuery } from '@tanstack/react-query';
-import { useAppSelector } from 'hooks/useRedux';
+import { useAccountContext } from 'contexts/contexts.account';
+import { useSubstrateContext } from 'contexts/contexts.substrate';
+
import { CreatorLoadingProps } from 'pages/Creator';
import { useEffect } from 'react';
@@ -25,13 +27,13 @@ interface TabsCollectionProps {
}
export default ({ setLoading }: TabsCollectionProps) => {
- const { account } = useAppSelector(state => state.injected.polkadot);
- const { api } = useAppSelector(state => state.substrate);
+ const { account } = useAccountContext();
+ const { api } = useSubstrateContext();
const { data, isLoading } = useQuery({
- queryKey: ['creator_tab_pool', account?.address],
+ queryKey: ['creator_tab_pool', account.current?.address],
queryFn: async () => {
- if (api && account?.address) {
+ if (api && account.current?.address) {
const service = await api.query.game.poolOf.entries();
return Promise.all(
@@ -60,7 +62,10 @@ export default ({ setLoading }: TabsCollectionProps) => {
})
);
- if (account?.address === owner || account?.address === admin) {
+ if (
+ account.current?.address === owner ||
+ account.current?.address === admin
+ ) {
return {
pool_id: pool_id.args[0].toNumber(),
poolType: meta.value.poolType.toString(),
@@ -82,7 +87,7 @@ export default ({ setLoading }: TabsCollectionProps) => {
// not found
return [];
},
- enabled: !!api?.query.game,
+ enabled: !!(account.current?.address && api?.query.game),
});
useEffect(() => {
diff --git a/src/pages/Creator/index.tsx b/src/pages/Creator/index.tsx
index a356d744..9e9756e9 100644
--- a/src/pages/Creator/index.tsx
+++ b/src/pages/Creator/index.tsx
@@ -24,6 +24,8 @@ import { Outlet, useLocation } from 'react-router-dom';
import DefaultCreator from 'layouts/DefaultLayout/DefaultCreator';
import TabsPool, { TabsPoolDataProps } from './Tabs/TabsPool';
import TabsPoolPanel from './Tabs/TabsPool/TabsPoolPanel';
+import TabsEmptyData from './Tabs/TabsEmptyData';
+import { useAccountContext } from 'contexts/contexts.account';
export interface CreatorProps {
game?: TabsGameDataProps[] | undefined;
@@ -51,8 +53,11 @@ export interface CreatorLoadingProps {
}
export default () => {
+ const { account } = useAccountContext();
const { pathname } = useLocation();
+
const [tab, setTab] = React.useState(0);
+
const [loading, setLoading] = React.useState({
game: undefined,
collection: undefined,
@@ -63,25 +68,41 @@ export default () => {
{
id: 0,
tab: ,
- panel: ,
+ panel: loading.game?.data ? (
+
+ ) : (
+
+ ),
background: 'gradient.linear.2',
},
{
id: 1,
tab: ,
- panel: ,
+ panel: loading.collection?.data ? (
+
+ ) : (
+
+ ),
background: 'gradient.linear.3',
},
{
id: 2,
tab: ,
- panel: ,
+ panel: loading.nft?.data ? (
+
+ ) : (
+
+ ),
background: 'gradient.linear.4',
},
{
id: 3,
tab: ,
- panel: ,
+ panel: loading.pool?.data ? (
+
+ ) : (
+
+ ),
background: 'gradient.linear.6',
},
];
@@ -108,7 +129,7 @@ export default () => {
<>
{pathname === '/creator' ? (
<>
- {isLoading ? (
+ {account.current?.address && isLoading ? (
diff --git a/src/pages/Home/HomeMetaData.tsx b/src/pages/Home/HomeMetaData.tsx
index b443be85..a83dfa7e 100644
--- a/src/pages/Home/HomeMetaData.tsx
+++ b/src/pages/Home/HomeMetaData.tsx
@@ -13,10 +13,10 @@ import {
Box,
} from '@chakra-ui/react';
import { Metadata } from '@polkadot/types/metadata';
-import { useAppSelector } from 'hooks/useRedux';
import SettingIcon from 'public/assets/line/setting.svg';
import ReactJson from 'react-json-view';
import { useState, useEffect } from 'react';
+import { useSubstrateContext } from 'contexts/contexts.substrate';
interface MetadataProps {
data: Metadata | undefined;
@@ -24,22 +24,27 @@ interface MetadataProps {
}
export default function HomeMetaData() {
+ const { api } = useSubstrateContext();
+
const [metadata, setMetadata] = useState();
- const { api } = useAppSelector(state => state.substrate);
+
const { isOpen, onOpen, onClose } = useDisclosure();
useEffect(() => {
- const getMetadata = async () => {
- try {
- const data = await api?.rpc.state.getMetadata();
- if (data) {
- setMetadata({ data, version: data?.version ? data?.version : 0 });
+ if (api?.isConnected) {
+ const getMetadata = async () => {
+ try {
+ const data = await api?.rpc.state.getMetadata();
+ if (data) {
+ setMetadata({ data, version: data?.version ? data?.version : 0 });
+ }
+ } catch (e) {
+ console.error(e);
}
- } catch (e) {
- console.error(e);
- }
- };
- getMetadata();
+ };
+
+ getMetadata();
+ }
}, [api?.rpc.state]);
return (
@@ -76,9 +81,12 @@ export default function HomeMetaData() {
size="6xl"
>
+
Runtime Data
+
+
(
-
-
-
-);
-
export default function HomeSubstrateNode() {
+ const { api, PROVIDER_SOCKET, setSubstrate } = useSubstrateContext();
+
const [nodeInfo, setNodeInfo] = useState();
- const { api, socket } = useAppSelector(state => state.substrate);
useEffect(() => {
- const getInfo = async () => {
- try {
- const [chain, nodeName, nodeVersion, health] = await Promise.all([
- api?.rpc.system.chain(),
- api?.rpc.system.name(),
- api?.rpc.system.version(),
- api?.rpc.system.health(),
- ]);
+ if (api?.isConnected) {
+ const getInfo = async () => {
+ try {
+ const [chain, nodeName, nodeVersion, health] = await Promise.all([
+ api?.rpc.system.chain(),
+ api?.rpc.system.name(),
+ api?.rpc.system.version(),
+ api?.rpc.system.health(),
+ ]);
- if (chain && nodeName && nodeVersion)
- setNodeInfo({
- chain,
- nodeName,
- nodeVersion,
- peers: (health?.peers.toNumber() || 0) + 1,
- });
- } catch (e) {
- /* console.error(e); */
- }
- };
- getInfo();
- }, [api?.rpc.system]);
- const dispatch = useAppDispatch();
+ if (chain && nodeName && nodeVersion)
+ setNodeInfo({
+ chain,
+ nodeName,
+ nodeVersion,
+ peers: (health?.peers.toNumber() || 0) + 1,
+ });
+ } catch (e) {
+ /* console.error(e); */
+ }
+ };
- const setConnect = async (value: string) => {
- dispatch(
- setConnectSocket({
- apiState: undefined,
- socket: value,
- payload: null,
- })
- );
- };
+ getInfo();
+ }
+ }, [api?.rpc.system]);
return (