diff --git a/backend/src/contracts/abi/GrandSumVerifier.json b/backend/src/contracts/abi/GrandSumVerifier.json deleted file mode 100644 index 4618cea6..00000000 --- a/backend/src/contracts/abi/GrandSumVerifier.json +++ /dev/null @@ -1 +0,0 @@ -{"_format":"hh-sol-artifact-1","contractName":"GrandSumVerifier","sourceName":"src/GrandSumVerifier.sol","abi":[{"inputs":[{"internalType":"address","name":"vk","type":"address"},{"internalType":"bytes","name":"proof","type":"bytes"},{"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"verifyProof","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}],"bytecode":"0x608060405234801561001057600080fd5b506104fe806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063af83a18d14610030575b600080fd5b61004361003e36600461040b565b610057565b604051901515815260200160405180910390f35b6000610135565b6020820135838110833585811084169190911691856003818085800985090886828309148316925050509392505050565b8160c0528260e05260006040608080608060065afa9091169392505050565b8160c0526000604060806060608060075afa90911692915050565b81600052826020526102c0516040526102e051606052610300516080526103205160a0528360c0528460e0526103405161010052610360516101205261038051610140526103a05161016052600060206000610180600060085afa600051921690911695945050505050565b7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd477f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016001602060406102208b3c6101406101606102808b3c6064356080810660001482169150816101c15773092dcecc2d8d2c840e0e4dedecc40d8cadccee8d60631b60005260206000fd5b6020816064010180356020810283046004148416935083610206577f4e756d626572206f66206576616c756174696f6e206d69736d6174636800000060005260206000fd5b60005b818110156103b15760208102600281026020820185013588610220518209610280516080526102a05160a0528903905061024381896100ae565b881697505086610277577f4661696c656420746f206d756c7469706c79204731206279206d696e75735f7a60005260206000fd5b80600287046084010161028b8a828a61005e565b9750876102c457826000527f436f6d6d69746d656e7420706f696e74206973206e6f7420454320706f696e746020528060405260606000fd5b80359250602001356102d781848a61008f565b97505086610309577f4661696c656420746f20616464204320616e6420675f746f5f6d696e75735f7a60005260206000fd5b6080516102405260a05161026052608401905061032788828861005e565b955085610358577f4f70656e696e6720706f696e74206973206e6f7420454320706f696e7400000060005260206000fd5b803560208201359150610374828261026051610240518b6100c9565b871696505050846103a9577f4661696c656420746f20706572666f726d2070616972696e6720636865636b0060005260206000fd5b600101610209565b505050508060005260206000f35b60008083601f8401126103d157600080fd5b50813567ffffffffffffffff8111156103e957600080fd5b6020830191508360208260051b850101111561040457600080fd5b9250929050565b60008060008060006060868803121561042357600080fd5b85356001600160a01b038116811461043a57600080fd5b9450602086013567ffffffffffffffff8082111561045757600080fd5b818801915088601f83011261046b57600080fd5b81358181111561047a57600080fd5b89602082850101111561048c57600080fd5b6020830196508095505060408801359150808211156104aa57600080fd5b506104b7888289016103bf565b96999598509396509294939250505056fea2646970667358221220318c6c9ebb11e67ace979383e4cfbec7fca0a102ec89df3b690514cac14726e164736f6c63430008120033","deployedBytecode":"0x608060405234801561001057600080fd5b506004361061002b5760003560e01c8063af83a18d14610030575b600080fd5b61004361003e36600461040b565b610057565b604051901515815260200160405180910390f35b6000610135565b6020820135838110833585811084169190911691856003818085800985090886828309148316925050509392505050565b8160c0528260e05260006040608080608060065afa9091169392505050565b8160c0526000604060806060608060075afa90911692915050565b81600052826020526102c0516040526102e051606052610300516080526103205160a0528360c0528460e0526103405161010052610360516101205261038051610140526103a05161016052600060206000610180600060085afa600051921690911695945050505050565b7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd477f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016001602060406102208b3c6101406101606102808b3c6064356080810660001482169150816101c15773092dcecc2d8d2c840e0e4dedecc40d8cadccee8d60631b60005260206000fd5b6020816064010180356020810283046004148416935083610206577f4e756d626572206f66206576616c756174696f6e206d69736d6174636800000060005260206000fd5b60005b818110156103b15760208102600281026020820185013588610220518209610280516080526102a05160a0528903905061024381896100ae565b881697505086610277577f4661696c656420746f206d756c7469706c79204731206279206d696e75735f7a60005260206000fd5b80600287046084010161028b8a828a61005e565b9750876102c457826000527f436f6d6d69746d656e7420706f696e74206973206e6f7420454320706f696e746020528060405260606000fd5b80359250602001356102d781848a61008f565b97505086610309577f4661696c656420746f20616464204320616e6420675f746f5f6d696e75735f7a60005260206000fd5b6080516102405260a05161026052608401905061032788828861005e565b955085610358577f4f70656e696e6720706f696e74206973206e6f7420454320706f696e7400000060005260206000fd5b803560208201359150610374828261026051610240518b6100c9565b871696505050846103a9577f4661696c656420746f20706572666f726d2070616972696e6720636865636b0060005260206000fd5b600101610209565b505050508060005260206000f35b60008083601f8401126103d157600080fd5b50813567ffffffffffffffff8111156103e957600080fd5b6020830191508360208260051b850101111561040457600080fd5b9250929050565b60008060008060006060868803121561042357600080fd5b85356001600160a01b038116811461043a57600080fd5b9450602086013567ffffffffffffffff8082111561045757600080fd5b818801915088601f83011261046b57600080fd5b81358181111561047a57600080fd5b89602082850101111561048c57600080fd5b6020830196508095505060408801359150808211156104aa57600080fd5b506104b7888289016103bf565b96999598509396509294939250505056fea2646970667358221220318c6c9ebb11e67ace979383e4cfbec7fca0a102ec89df3b690514cac14726e164736f6c63430008120033","linkReferences":{},"deployedLinkReferences":{}} \ No newline at end of file diff --git a/backend/src/contracts/abi/InclusionVerifier.json b/backend/src/contracts/abi/InclusionVerifier.json deleted file mode 100644 index 33c86ffd..00000000 --- a/backend/src/contracts/abi/InclusionVerifier.json +++ /dev/null @@ -1 +0,0 @@ -{"_format":"hh-sol-artifact-1","contractName":"InclusionVerifier","sourceName":"src/InclusionVerifier.sol","abi":[{"inputs":[{"internalType":"address","name":"vk","type":"address"},{"internalType":"bytes","name":"proofs","type":"bytes"},{"internalType":"uint256[]","name":"challenges","type":"uint256[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"verifyProof","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}],"bytecode":"0x608060405234801561001057600080fd5b50610459806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c806347f6b5aa14610030575b600080fd5b61004361003e36600461033c565b610057565b604051901515815260200160405180910390f35b6000610135565b6020820135838110833585811084169190911691856003818085800985090886828309148316925050509392505050565b8160c0528260e05260006040608080608060065afa9091169392505050565b8160c0526000604060806060608060075afa90911692915050565b8160005282602052610280516040526102a0516060526102c0516080526102e05160a0528360c0528460e0526103005161010052610320516101205261034051610140526103605161016052600060206000610180600060085afa600051921690911695945050505050565b7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd477f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600160c06101606102408d3c60843560808106600014821691508161019b57600080fd5b6020816084010180356004811484169350836101b657600080fd5b6020820135610300526040820135610320526060820135610340526080820135610360526020808202830101915050803560208102830460041484169350836101fe57600080fd5b60005b818110156102e257610240516080526102605160a052602081810284010135860360c08190526040820261023582886100ae565b871696508661024357600080fd5b806002870460a40101915061025989838961005e565b96508661026557600080fd5b6020820135913561027783828a61008f565b9750508661028457600080fd5b6080516102005260a0516102205260a40190506102a288828861005e565b9550856102ae57600080fd5b8035602082013591506102ca828261022051610200518b6100c9565b871696505050846102da57600080fd5b600101610201565b505050508060005260206000f35b60008083601f84011261030257600080fd5b50813567ffffffffffffffff81111561031a57600080fd5b6020830191508360208260051b850101111561033557600080fd5b9250929050565b60008060008060008060006080888a03121561035757600080fd5b87356001600160a01b038116811461036e57600080fd5b9650602088013567ffffffffffffffff8082111561038b57600080fd5b818a0191508a601f83011261039f57600080fd5b8135818111156103ae57600080fd5b8b60208285010111156103c057600080fd5b6020830198508097505060408a01359150808211156103de57600080fd5b6103ea8b838c016102f0565b909650945060608a013591508082111561040357600080fd5b506104108a828b016102f0565b989b979a5095985093969295929350505056fea26469706673582212207e5e1287edc06ab08a7594afbc051dee662a5f5969372ab655cac10baa4d2fb264736f6c63430008120033","deployedBytecode":"0x608060405234801561001057600080fd5b506004361061002b5760003560e01c806347f6b5aa14610030575b600080fd5b61004361003e36600461033c565b610057565b604051901515815260200160405180910390f35b6000610135565b6020820135838110833585811084169190911691856003818085800985090886828309148316925050509392505050565b8160c0528260e05260006040608080608060065afa9091169392505050565b8160c0526000604060806060608060075afa90911692915050565b8160005282602052610280516040526102a0516060526102c0516080526102e05160a0528360c0528460e0526103005161010052610320516101205261034051610140526103605161016052600060206000610180600060085afa600051921690911695945050505050565b7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd477f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600160c06101606102408d3c60843560808106600014821691508161019b57600080fd5b6020816084010180356004811484169350836101b657600080fd5b6020820135610300526040820135610320526060820135610340526080820135610360526020808202830101915050803560208102830460041484169350836101fe57600080fd5b60005b818110156102e257610240516080526102605160a052602081810284010135860360c08190526040820261023582886100ae565b871696508661024357600080fd5b806002870460a40101915061025989838961005e565b96508661026557600080fd5b6020820135913561027783828a61008f565b9750508661028457600080fd5b6080516102005260a0516102205260a40190506102a288828861005e565b9550856102ae57600080fd5b8035602082013591506102ca828261022051610200518b6100c9565b871696505050846102da57600080fd5b600101610201565b505050508060005260206000f35b60008083601f84011261030257600080fd5b50813567ffffffffffffffff81111561031a57600080fd5b6020830191508360208260051b850101111561033557600080fd5b9250929050565b60008060008060008060006080888a03121561035757600080fd5b87356001600160a01b038116811461036e57600080fd5b9650602088013567ffffffffffffffff8082111561038b57600080fd5b818a0191508a601f83011261039f57600080fd5b8135818111156103ae57600080fd5b8b60208285010111156103c057600080fd5b6020830198508097505060408a01359150808211156103de57600080fd5b6103ea8b838c016102f0565b909650945060608a013591508082111561040357600080fd5b506104108a828b016102f0565b989b979a5095985093969295929350505056fea26469706673582212207e5e1287edc06ab08a7594afbc051dee662a5f5969372ab655cac10baa4d2fb264736f6c63430008120033","linkReferences":{},"deployedLinkReferences":{}} \ No newline at end of file diff --git a/backend/src/contracts/abi/SnarkVerifier.json b/backend/src/contracts/abi/SnarkVerifier.json deleted file mode 100644 index f2ecf10e..00000000 --- a/backend/src/contracts/abi/SnarkVerifier.json +++ /dev/null @@ -1 +0,0 @@ -{"_format":"hh-sol-artifact-1","contractName":"Verifier","sourceName":"src/SnarkVerifier.sol","abi":[{"inputs":[{"internalType":"address","name":"vk","type":"address"},{"internalType":"bytes","name":"proof","type":"bytes"},{"internalType":"uint256[]","name":"instances","type":"uint256[]"}],"name":"verifyProof","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}],"bytecode":"0x608060405234801561001057600080fd5b50612188806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063af83a18d14610030575b600080fd5b61004361003e366004612095565b610057565b604051901515815260200160405180910390f35b6000610263565b60008060008435602086013588821086169450888110851694508860038a8b858609850908898283099289526020890191909152149290921696604094850196509390940193505050565b60016020536021600090812092830682529190915260200190565b6000838351602085015b602087038110156100f0578781518309808452602093840193909250016100ce565b8781518309915060208352602080840152602060408401528160608401526002880360808401528760a084015260208360c08560055afa851693508251915085602081016020850394505b828110156101635789855185098a84518609908452601f19958601959094509092019161013b565b8981518509945089825185099490915292909252509095945050505050565b81604052826060526000604060006080600060065afa9091169392505050565b816040526000604060006060600060075afa90911692915050565b8160c0528260e05260006040608080608060065afa9091169392505050565b8160c0526000604060806060608060075afa90911692915050565b8160005282602052610b4051604052610b6051606052610b8051608052610ba05160a0528360c0528460e052610bc05161010052610be05161012052610c005161014052610c205161016052600060206000610180600060085afa600051921690911695945050505050565b7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd477f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600161056060006109a08b3c6064356115001481169050610a6051611584358114821691506109a05160005260206115a48260200281015b8082101561030057813580845286119490941693602092830192909101906102dd565b5060849250610f0090506103445b8084101561032d576103228784868861005e565b94509450945061030e565b5060009182208581068252909152602090810161040083015b808410156103655761035a8784868861005e565b945094509450610346565b5060009182208581068252909152602090810161038285826100a9565b905061038083015b808410156103a95761039e8784868861005e565b94509450945061038a565b5060009182208581068252909152602090810160c083015b808410156103e0576103d58784868861005e565b9450945094506103c1565b5060009182208581068252909152602090810161098083015b8084101561041c57833580845286119490941693602093840193909201916103f9565b5060009182208581068252909152602090810161043985826100a9565b90506104478683858761005e565b600090812088810690945292909252935091506020905061046a8582848661005e565b9250925092505050610a80511561053757610ac051610ae0516020610aa051026115a4016020830260028102600382028335838501358386013583870135896020028801895b818a10156104ee5760208a0199508935811b86019550888a0135811b85019450878a0135811b84019350868a0135811b830192508a810190506104b0565b50508c60038e8f8788098709088d848509148b169a508c60038e8f8586098509088d828309148b169a508361100052826110205281611040528061106052505050505050505050505b8061054157600080fd5b6109c0519250610f80518060005b858110156105655784828309915060010161054f565b50610a005194506110806006610a6051016020028101610a6051610587576020015b610a40515b818310156105ad57868188038608835286888209905060208301925061058c565b508560018703840893508381526105cb8660208301611080886100c4565b94506110809150856109e05185099350610a40515b8183101561060357868782855109860983528688820990506020830192506105e0565b506110a05196506110c0935061114091505b8184101561062f5785845188089650602084019350610615565b600091506115a4610a605160200281015b80821015610664578788833588510985089350602082019150602086019550610640565b505051611080805161114051949091526110a0919091526110c0526110e0959095526111008190526111209490945250610f60516000937f09226b6e22c6f0ca64ec26aad4c86e715b5f898e5e963f25870e56bbe533e9a291908480610e4435830986038208955050610fc435848082810381848009086110c051099050848186848909089550508384610e84358603610ea435086111005109848186848909089550508384610ee4358603610f0435086111005109848186848909089550508384610f44358603610f6435086111005109848186848909089550508384610fa4358603610fc43508611100510984818684890908955050610f4051610f2051610e6435610e44358788858a8b610d04358809610cc4350808830991508788858a8b610d243588096111205108088309915087610f805184096000528788858a600051610cc4350808820990508786600051096000528788858a6000516111205108088209905087866000510960005287818903830893505050508485866110e0516110c05108830986038208905084818684890908955050610f4051610f2051610ec435610ea4358788858a8b610d44358809610b84350808830991508788858a8b610d64358809610ba4350808830991508788858a600051610b84350808820990508786600051096000528788858a600051610ba43508088209905087866000510960005287818903830893505050508485866110e0516110c05108830986038208905084818684890908955050610f4051610f2051610f2435610f04358788858a8b610d84358809610bc4350808830991508788858a8b610da4358809610be4350808830991508788858a600051610bc4350808820990508786600051096000528788858a600051610be43508088209905087866000510960005287818903830893505050508485866110e0516110c05108830986038208905084818684890908955050610f4051610f2051610f8435610f64358788858a8b610dc4358809610c24350808830991508788858a8b610de4358809610c44350808830991508788858a600051610c24350808820990508786600051096000528788858a600051610c443508088209905087866000510960005287818903830893505050508485866110e0516110c05108830986038208905084818684890908955050610f4051610f2051610fe435610fc4358788858a8b610e04358809610c64350808830991508788858a8b610e24358809610c84350808830991508788858a600051610c64350808820990508786600051096000528788858a600051610c843508088209905087818903830893505050508485866110e0516110c05108830986038208905084818684890908955050611100518485611004358703830982089050848186848909089550506110c051848561100435870387611004356110043509088209905084818684890908955060009050610c0435610b8435620100008781830988039150879050818308610f2051610f4051919450610cc435935091508780808361108435088a85611044350809611024350988898a8487088b86890809611004350994508889868b0383088a8b6110c0516110e051088c0360010809945050505050848186848909089550508384611084358603611044350861110051098481868489090895505083848561106435870361104435088661108435880361104435080985866110c0516110e05108870360010809848186848909089550506111005184856110a4358703830982089050848186848909089550506110c05184856110a4358703876110a4356110a43509088209905084818684890908955060009050610b8435610ba435620100008781830988039150879050818308610f2051610f4051919450610cc435935091508780808361112435088a856110e43508096110c4350988898a8487088b868908096110a4350994508889868b0383088a8b6110c0516110e051088c03600108099450505050508481868489090895505083846111243586036110e435086111005109848186848909089550508384856111043587036110e43508866111243588036110e435080985866110c0516110e0510887036001080984818684890908955050611100518485611144358703830982089050848186848909089550506110c051848561114435870387611144356111443509088209905084818684890908955060009050610ba435610bc435620100008781830988039150879050818308610f2051610f4051919450610cc43593509150878080836111c435088a85611184350809611164350988898a8487088b86890809611144350994508889868b0383088a8b6110c0516110e051088c03600108099450505050508481868489090895505083846111c435860361118435086111005109848186848909089550508384856111a43587036111843508866111c435880361118435080985866110c0516110e05108870360010809848186848909089550506111005184856111e4358703830982089050848186848909089550506110c05184856111e4358703876111e4356111e43509088209905084818684890908955060009050610bc435610be435620100008781830988039150879050818308610f2051610f4051919450610cc435935091508780808361126435088a85611224350809611204350988898a8487088b868908096111e4350994508889868b0383088a8b6110c0516110e051088c0360010809945050505050848186848909089550508384611264358603611224350861110051098481868489090895505083848561124435870361122435088661126435880361122435080985866110c0516110e0510887036001080984818684890908955050611100518485611284358703830982089050848186848909089550506110c051848561128435870387611284356112843509088209905084818684890908955060009050610ca435610c2435620100008781830988039150879050818308610f2051610f4051919450610cc435935091508780808361130435088a856112c43508096112a4350988898a8487088b86890809611284350994508889868b0383088a8b6110c0516110e051088c03600108099450505050508481868489090895505083846113043586036112c435086111005109848186848909089550508384856112e43587036112c43508866113043588036112c435080985866110c0516110e0510887036001080984818684890908955050611100518485611324358703830982089050848186848909089550506110c051848561132435870387611324356113243509088209905084818684890908955060009050610c2435610c4435620100008781830988039150879050818308610f2051610f4051919450610cc43593509150878080836113a435088a85611364350809611344350988898a8487088b86890809611324350994508889868b0383088a8b6110c0516110e051088c03600108099450505050508481868489090895505083846113a435860361136435086111005109848186848909089550508384856113843587036113643508866113a435880361136435080985866110c0516110e05108870360010809848186848909089550506111005184856113c4358703830982089050848186848909089550506110c05184856113c4358703876113c4356113c43509088209905084818684890908955060009050610c4435610c6435620100008781830988039150879050818308610f2051610f4051919450610cc435935091508780808361144435088a856114043508096113e4350988898a8487088b868908096113c4350994508889868b0383088a8b6110c0516110e051088c0360010809945050505050848186848909089550508384611444358603611404350861110051098481868489090895505083848561142435870361140435088661144435880361140435080985866110c0516110e0510887036001080984818684890908955050611100518485611464358703830982089050848186848909089550506110c051848561146435870387611464356114643509088209905084818684890908955060009050610c6435610c8435620100008781830988039150879050818308610f2051610f4051919450610cc43593509150878080836114e435088a856114a4350809611484350988898a8487088b86890809611464350994508889868b0383088a8b6110c0516110e051088c03600108099450505050508481868489090895505083846114e43586036114a435086111005109848186848909089550508384856114c43587036114a43508866114e43588036114a435080985866110c0516110e05108870360010809848186848909089550505050816110a051840961114052610b4435600052610b6435602052611080519250610b04610a845b818110156113415761132285846101a2565b92506113346020830135833585610182565b9250604082039150611310565b50506000516111605260205161118052610f80519250610a0051610a205183828609915081610360528461034052838186099150816103205283818309915083818309915083818309915083818309915083818309915050806103005250610fe05192506103806104006103005b818310156113cc57848151860387088352602092830192016113af565b50506103c0516104005250610380516103a051909350829084099250816103e05184096104208190526000526103a0516104408190526103805193508290840961046052610380516103e05190935082908409610480526103c0516001935082908409602052610300516103405161036051919450906000848381038708905084858387038808820990508461038051820990508060405284868603840890508485838703850882099050846103c051820990508060605284868603830890508485848703840882099050846103e051820960805250506103405161036051909450905060008382810386089050836103c051820990508060a0528385850383089050836103e051820960c0525050610320516103405190935060008382810386089050836103a051820990508060e0528385850383089050836103c051820961010052506115229050826101206000846100c4565b9050600051925082610420526104406104a05b8082101561154f5783858351098252602082019150611535565b50506020519250610fa05160008384610ce435870982089050838282099050838461114051870982089050610e24610ce45b818110156115a15785868335890987868609089250602082039150611581565b50508382820990508384610cc43587098208905083828209905083846114e43587098208905083828209905083846114443587098208905083828209905083846113a43587098208905083828209905083846113043587098208905083828209905083846112643587098208905083828209905083846111c435870982089050838282099050838461112435870982089050838282099050838461108435870982089050610ca4610b645b8181101561166c578586833589098786860908925060208203915061164c565b5050806104a0525050610fa051925060008283610fa43560405109820890508283610f643560605109820890508283610f843560805109820890508284820990508283610f443560405109820890508283610f043560605109820890508283610f243560805109820890508284820990508283610ee43560405109820890508283610ea43560605109820890508283610ec43560805109820890508284820990508283610e843560405109820890508283610e443560605109820890508283610e64356080510982089050826104405182099050806104c05250610fa0519250600082836114643560a051098208905082836114843560c051098208905082848209905082836113c43560a051098208905082836113e43560c051098208905082848209905082836113243560a051098208905082836113443560c051098208905082848209905082836112843560a051098208905082836112a43560c051098208905082848209905082836111e43560a051098208905082836112043560c051098208905082848209905082836111443560a051098208905082836111643560c051098208905082848209905082836110a43560a051098208905082836110c43560c051098208905082848209905082836110043560a051098208905082836110243560c05109820890508284820990508283610fc43560a05109820890508283610fe43560c0510982089050826104605182099050806104e05250610fa0519250600082836114c43560e051098208905082836114a43561010051098208905082848209905082836114243560e051098208905082836114043561010051098208905082848209905082836113843560e051098208905082836113643561010051098208905082848209905082836112e43560e051098208905082836112c43561010051098208905082848209905082836112443560e051098208905082836112243561010051098208905082848209905082836111a43560e051098208905082836111843561010051098208905082848209905082836111043560e051098208905082836110e43561010051098208905082848209905082836110643560e0510982089050828361104435610100510982089050826104805182096105005250602051610520526040516060519093508290840892508160805184086105405260a05160c051909350829084086105605260e0516101005190935082908408610580526000925060806105205b81851015611a145780518552602094850194016119fc565b5050611a248260806000846100c4565b90508161050051606051099250604060806104e05b81831015611a625784610fc051870995508485825185510987089550601f199283019201611a39565b505050826111a052610fc0519250610a8435600052610aa435602052611a8b610fa051826101a2565b9050611a9e611180516111605183610182565b9050610ec0610c005b81811015611adb57611abc610fa051846101a2565b9250611ace6020830151835185610182565b9250604082039150611aa7565b5050611aea610fa051826101a2565b9050611afd610724356107043583610182565b9050611b0c610fa051826101a2565b9050611b1f6106a4356106843583610182565b9050611b2e610fa051826101a2565b9050611b41610624356106043583610182565b9050611b50610fa051826101a2565b9050611b636105a4356105843583610182565b9050611b72610fa051826101a2565b9050611b85610524356105043583610182565b9050611b94610fa051826101a2565b9050611ba76104a4356104843583610182565b9050611bb6610fa051826101a2565b9050611bc9610424356104043583610182565b9050611bd8610fa051826101a2565b9050611beb6103a4356103843583610182565b9050611bfa610fa051826101a2565b9050611c0d610124356101043583610182565b90506103046102045b81811015611c4a57611c2b610fa051846101a2565b9250611c3d6020830135833585610182565b9250604082039150611c16565b5050611c59610fa051826101a2565b9050611c6a60e43560c43583610182565b90506102046101045b81811015611ca757611c88610fa051846101a2565b9250611c9a6020830135833585610182565b9250604082039150611c73565b5050610804356080526108243560a0526107c46107045b81811015611cf257611cd3610fa051846101dc565b9250611ce560208301358335856101bd565b9250604082039150611cbe565b5050611d0482610440518509826101dc565b9050611d1560a05160805183610182565b905081610fc05184099250610a4435608052610a643560a052610a046108045b81811015611d6957611d4a610fa051846101dc565b9250611d5c60208301358335856101bd565b9250604082039150611d35565b5050611d7b82610460518509826101dc565b9050611d8c60a05160805183610182565b905081610fc051840992506106c4356080526106e43560a052611db2610fa051826101dc565b9050611dc56106643561064435836101bd565b9050611dd4610fa051826101dc565b9050611de76105e4356105c435836101bd565b9050611df6610fa051826101dc565b9050611e096105643561054435836101bd565b9050611e18610fa051826101dc565b9050611e2b6104e4356104c435836101bd565b9050611e3a610fa051826101dc565b9050611e4d6104643561044435836101bd565b9050611e5c610fa051826101dc565b9050611e6f6103e4356103c435836101bd565b9050611e7e610fa051826101dc565b9050611e916103643561034435836101bd565b9050611ea382610480518509826101dc565b9050611eb460a05160805183610182565b9050610b0051608052610b205160a052611ed36111a0518303826101dc565b9050611ee460a05160805183610182565b9050611504356080526115243560a052611f03610400518303826101dc565b9050611f1460a05160805183610182565b9050611544356080526115643560a052611f31610fe051826101dc565b9050611f4260a05160805183610182565b90506000516111c0526020516111e05261154435611200526115643561122052610a80511561201657611000516000526110205160205261104051604052611060516060526111c0516080526111e05160a0526112005160c0526112205160e05281610100600020069250611fb783826101a2565b9050611fca6111e0516111c05183610182565b90506000516111c0526020516111e0526110405160005261106051602052611ff283826101a2565b9050612005611220516112005183610182565b905060005161120052602051611220525b61202f61122051611200516111e0516111c051856101f7565b90508061203b57600080fd5b505050600160005260206000f35b60008083601f84011261205b57600080fd5b50813567ffffffffffffffff81111561207357600080fd5b6020830191508360208260051b850101111561208e57600080fd5b9250929050565b6000806000806000606086880312156120ad57600080fd5b85356001600160a01b03811681146120c457600080fd5b9450602086013567ffffffffffffffff808211156120e157600080fd5b818801915088601f8301126120f557600080fd5b81358181111561210457600080fd5b89602082850101111561211657600080fd5b60208301965080955050604088013591508082111561213457600080fd5b5061214188828901612049565b96999598509396509294939250505056fea26469706673582212206980435f9591390378e255f4026eeb42c56814114f9e4b0fa8fa6f9c5badec5b64736f6c63430008120033","deployedBytecode":"0x608060405234801561001057600080fd5b506004361061002b5760003560e01c8063af83a18d14610030575b600080fd5b61004361003e366004612095565b610057565b604051901515815260200160405180910390f35b6000610263565b60008060008435602086013588821086169450888110851694508860038a8b858609850908898283099289526020890191909152149290921696604094850196509390940193505050565b60016020536021600090812092830682529190915260200190565b6000838351602085015b602087038110156100f0578781518309808452602093840193909250016100ce565b8781518309915060208352602080840152602060408401528160608401526002880360808401528760a084015260208360c08560055afa851693508251915085602081016020850394505b828110156101635789855185098a84518609908452601f19958601959094509092019161013b565b8981518509945089825185099490915292909252509095945050505050565b81604052826060526000604060006080600060065afa9091169392505050565b816040526000604060006060600060075afa90911692915050565b8160c0528260e05260006040608080608060065afa9091169392505050565b8160c0526000604060806060608060075afa90911692915050565b8160005282602052610b4051604052610b6051606052610b8051608052610ba05160a0528360c0528460e052610bc05161010052610be05161012052610c005161014052610c205161016052600060206000610180600060085afa600051921690911695945050505050565b7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd477f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001600161056060006109a08b3c6064356115001481169050610a6051611584358114821691506109a05160005260206115a48260200281015b8082101561030057813580845286119490941693602092830192909101906102dd565b5060849250610f0090506103445b8084101561032d576103228784868861005e565b94509450945061030e565b5060009182208581068252909152602090810161040083015b808410156103655761035a8784868861005e565b945094509450610346565b5060009182208581068252909152602090810161038285826100a9565b905061038083015b808410156103a95761039e8784868861005e565b94509450945061038a565b5060009182208581068252909152602090810160c083015b808410156103e0576103d58784868861005e565b9450945094506103c1565b5060009182208581068252909152602090810161098083015b8084101561041c57833580845286119490941693602093840193909201916103f9565b5060009182208581068252909152602090810161043985826100a9565b90506104478683858761005e565b600090812088810690945292909252935091506020905061046a8582848661005e565b9250925092505050610a80511561053757610ac051610ae0516020610aa051026115a4016020830260028102600382028335838501358386013583870135896020028801895b818a10156104ee5760208a0199508935811b86019550888a0135811b85019450878a0135811b84019350868a0135811b830192508a810190506104b0565b50508c60038e8f8788098709088d848509148b169a508c60038e8f8586098509088d828309148b169a508361100052826110205281611040528061106052505050505050505050505b8061054157600080fd5b6109c0519250610f80518060005b858110156105655784828309915060010161054f565b50610a005194506110806006610a6051016020028101610a6051610587576020015b610a40515b818310156105ad57868188038608835286888209905060208301925061058c565b508560018703840893508381526105cb8660208301611080886100c4565b94506110809150856109e05185099350610a40515b8183101561060357868782855109860983528688820990506020830192506105e0565b506110a05196506110c0935061114091505b8184101561062f5785845188089650602084019350610615565b600091506115a4610a605160200281015b80821015610664578788833588510985089350602082019150602086019550610640565b505051611080805161114051949091526110a0919091526110c0526110e0959095526111008190526111209490945250610f60516000937f09226b6e22c6f0ca64ec26aad4c86e715b5f898e5e963f25870e56bbe533e9a291908480610e4435830986038208955050610fc435848082810381848009086110c051099050848186848909089550508384610e84358603610ea435086111005109848186848909089550508384610ee4358603610f0435086111005109848186848909089550508384610f44358603610f6435086111005109848186848909089550508384610fa4358603610fc43508611100510984818684890908955050610f4051610f2051610e6435610e44358788858a8b610d04358809610cc4350808830991508788858a8b610d243588096111205108088309915087610f805184096000528788858a600051610cc4350808820990508786600051096000528788858a6000516111205108088209905087866000510960005287818903830893505050508485866110e0516110c05108830986038208905084818684890908955050610f4051610f2051610ec435610ea4358788858a8b610d44358809610b84350808830991508788858a8b610d64358809610ba4350808830991508788858a600051610b84350808820990508786600051096000528788858a600051610ba43508088209905087866000510960005287818903830893505050508485866110e0516110c05108830986038208905084818684890908955050610f4051610f2051610f2435610f04358788858a8b610d84358809610bc4350808830991508788858a8b610da4358809610be4350808830991508788858a600051610bc4350808820990508786600051096000528788858a600051610be43508088209905087866000510960005287818903830893505050508485866110e0516110c05108830986038208905084818684890908955050610f4051610f2051610f8435610f64358788858a8b610dc4358809610c24350808830991508788858a8b610de4358809610c44350808830991508788858a600051610c24350808820990508786600051096000528788858a600051610c443508088209905087866000510960005287818903830893505050508485866110e0516110c05108830986038208905084818684890908955050610f4051610f2051610fe435610fc4358788858a8b610e04358809610c64350808830991508788858a8b610e24358809610c84350808830991508788858a600051610c64350808820990508786600051096000528788858a600051610c843508088209905087818903830893505050508485866110e0516110c05108830986038208905084818684890908955050611100518485611004358703830982089050848186848909089550506110c051848561100435870387611004356110043509088209905084818684890908955060009050610c0435610b8435620100008781830988039150879050818308610f2051610f4051919450610cc435935091508780808361108435088a85611044350809611024350988898a8487088b86890809611004350994508889868b0383088a8b6110c0516110e051088c0360010809945050505050848186848909089550508384611084358603611044350861110051098481868489090895505083848561106435870361104435088661108435880361104435080985866110c0516110e05108870360010809848186848909089550506111005184856110a4358703830982089050848186848909089550506110c05184856110a4358703876110a4356110a43509088209905084818684890908955060009050610b8435610ba435620100008781830988039150879050818308610f2051610f4051919450610cc435935091508780808361112435088a856110e43508096110c4350988898a8487088b868908096110a4350994508889868b0383088a8b6110c0516110e051088c03600108099450505050508481868489090895505083846111243586036110e435086111005109848186848909089550508384856111043587036110e43508866111243588036110e435080985866110c0516110e0510887036001080984818684890908955050611100518485611144358703830982089050848186848909089550506110c051848561114435870387611144356111443509088209905084818684890908955060009050610ba435610bc435620100008781830988039150879050818308610f2051610f4051919450610cc43593509150878080836111c435088a85611184350809611164350988898a8487088b86890809611144350994508889868b0383088a8b6110c0516110e051088c03600108099450505050508481868489090895505083846111c435860361118435086111005109848186848909089550508384856111a43587036111843508866111c435880361118435080985866110c0516110e05108870360010809848186848909089550506111005184856111e4358703830982089050848186848909089550506110c05184856111e4358703876111e4356111e43509088209905084818684890908955060009050610bc435610be435620100008781830988039150879050818308610f2051610f4051919450610cc435935091508780808361126435088a85611224350809611204350988898a8487088b868908096111e4350994508889868b0383088a8b6110c0516110e051088c0360010809945050505050848186848909089550508384611264358603611224350861110051098481868489090895505083848561124435870361122435088661126435880361122435080985866110c0516110e0510887036001080984818684890908955050611100518485611284358703830982089050848186848909089550506110c051848561128435870387611284356112843509088209905084818684890908955060009050610ca435610c2435620100008781830988039150879050818308610f2051610f4051919450610cc435935091508780808361130435088a856112c43508096112a4350988898a8487088b86890809611284350994508889868b0383088a8b6110c0516110e051088c03600108099450505050508481868489090895505083846113043586036112c435086111005109848186848909089550508384856112e43587036112c43508866113043588036112c435080985866110c0516110e0510887036001080984818684890908955050611100518485611324358703830982089050848186848909089550506110c051848561132435870387611324356113243509088209905084818684890908955060009050610c2435610c4435620100008781830988039150879050818308610f2051610f4051919450610cc43593509150878080836113a435088a85611364350809611344350988898a8487088b86890809611324350994508889868b0383088a8b6110c0516110e051088c03600108099450505050508481868489090895505083846113a435860361136435086111005109848186848909089550508384856113843587036113643508866113a435880361136435080985866110c0516110e05108870360010809848186848909089550506111005184856113c4358703830982089050848186848909089550506110c05184856113c4358703876113c4356113c43509088209905084818684890908955060009050610c4435610c6435620100008781830988039150879050818308610f2051610f4051919450610cc435935091508780808361144435088a856114043508096113e4350988898a8487088b868908096113c4350994508889868b0383088a8b6110c0516110e051088c0360010809945050505050848186848909089550508384611444358603611404350861110051098481868489090895505083848561142435870361140435088661144435880361140435080985866110c0516110e0510887036001080984818684890908955050611100518485611464358703830982089050848186848909089550506110c051848561146435870387611464356114643509088209905084818684890908955060009050610c6435610c8435620100008781830988039150879050818308610f2051610f4051919450610cc43593509150878080836114e435088a856114a4350809611484350988898a8487088b86890809611464350994508889868b0383088a8b6110c0516110e051088c03600108099450505050508481868489090895505083846114e43586036114a435086111005109848186848909089550508384856114c43587036114a43508866114e43588036114a435080985866110c0516110e05108870360010809848186848909089550505050816110a051840961114052610b4435600052610b6435602052611080519250610b04610a845b818110156113415761132285846101a2565b92506113346020830135833585610182565b9250604082039150611310565b50506000516111605260205161118052610f80519250610a0051610a205183828609915081610360528461034052838186099150816103205283818309915083818309915083818309915083818309915083818309915050806103005250610fe05192506103806104006103005b818310156113cc57848151860387088352602092830192016113af565b50506103c0516104005250610380516103a051909350829084099250816103e05184096104208190526000526103a0516104408190526103805193508290840961046052610380516103e05190935082908409610480526103c0516001935082908409602052610300516103405161036051919450906000848381038708905084858387038808820990508461038051820990508060405284868603840890508485838703850882099050846103c051820990508060605284868603830890508485848703840882099050846103e051820960805250506103405161036051909450905060008382810386089050836103c051820990508060a0528385850383089050836103e051820960c0525050610320516103405190935060008382810386089050836103a051820990508060e0528385850383089050836103c051820961010052506115229050826101206000846100c4565b9050600051925082610420526104406104a05b8082101561154f5783858351098252602082019150611535565b50506020519250610fa05160008384610ce435870982089050838282099050838461114051870982089050610e24610ce45b818110156115a15785868335890987868609089250602082039150611581565b50508382820990508384610cc43587098208905083828209905083846114e43587098208905083828209905083846114443587098208905083828209905083846113a43587098208905083828209905083846113043587098208905083828209905083846112643587098208905083828209905083846111c435870982089050838282099050838461112435870982089050838282099050838461108435870982089050610ca4610b645b8181101561166c578586833589098786860908925060208203915061164c565b5050806104a0525050610fa051925060008283610fa43560405109820890508283610f643560605109820890508283610f843560805109820890508284820990508283610f443560405109820890508283610f043560605109820890508283610f243560805109820890508284820990508283610ee43560405109820890508283610ea43560605109820890508283610ec43560805109820890508284820990508283610e843560405109820890508283610e443560605109820890508283610e64356080510982089050826104405182099050806104c05250610fa0519250600082836114643560a051098208905082836114843560c051098208905082848209905082836113c43560a051098208905082836113e43560c051098208905082848209905082836113243560a051098208905082836113443560c051098208905082848209905082836112843560a051098208905082836112a43560c051098208905082848209905082836111e43560a051098208905082836112043560c051098208905082848209905082836111443560a051098208905082836111643560c051098208905082848209905082836110a43560a051098208905082836110c43560c051098208905082848209905082836110043560a051098208905082836110243560c05109820890508284820990508283610fc43560a05109820890508283610fe43560c0510982089050826104605182099050806104e05250610fa0519250600082836114c43560e051098208905082836114a43561010051098208905082848209905082836114243560e051098208905082836114043561010051098208905082848209905082836113843560e051098208905082836113643561010051098208905082848209905082836112e43560e051098208905082836112c43561010051098208905082848209905082836112443560e051098208905082836112243561010051098208905082848209905082836111a43560e051098208905082836111843561010051098208905082848209905082836111043560e051098208905082836110e43561010051098208905082848209905082836110643560e0510982089050828361104435610100510982089050826104805182096105005250602051610520526040516060519093508290840892508160805184086105405260a05160c051909350829084086105605260e0516101005190935082908408610580526000925060806105205b81851015611a145780518552602094850194016119fc565b5050611a248260806000846100c4565b90508161050051606051099250604060806104e05b81831015611a625784610fc051870995508485825185510987089550601f199283019201611a39565b505050826111a052610fc0519250610a8435600052610aa435602052611a8b610fa051826101a2565b9050611a9e611180516111605183610182565b9050610ec0610c005b81811015611adb57611abc610fa051846101a2565b9250611ace6020830151835185610182565b9250604082039150611aa7565b5050611aea610fa051826101a2565b9050611afd610724356107043583610182565b9050611b0c610fa051826101a2565b9050611b1f6106a4356106843583610182565b9050611b2e610fa051826101a2565b9050611b41610624356106043583610182565b9050611b50610fa051826101a2565b9050611b636105a4356105843583610182565b9050611b72610fa051826101a2565b9050611b85610524356105043583610182565b9050611b94610fa051826101a2565b9050611ba76104a4356104843583610182565b9050611bb6610fa051826101a2565b9050611bc9610424356104043583610182565b9050611bd8610fa051826101a2565b9050611beb6103a4356103843583610182565b9050611bfa610fa051826101a2565b9050611c0d610124356101043583610182565b90506103046102045b81811015611c4a57611c2b610fa051846101a2565b9250611c3d6020830135833585610182565b9250604082039150611c16565b5050611c59610fa051826101a2565b9050611c6a60e43560c43583610182565b90506102046101045b81811015611ca757611c88610fa051846101a2565b9250611c9a6020830135833585610182565b9250604082039150611c73565b5050610804356080526108243560a0526107c46107045b81811015611cf257611cd3610fa051846101dc565b9250611ce560208301358335856101bd565b9250604082039150611cbe565b5050611d0482610440518509826101dc565b9050611d1560a05160805183610182565b905081610fc05184099250610a4435608052610a643560a052610a046108045b81811015611d6957611d4a610fa051846101dc565b9250611d5c60208301358335856101bd565b9250604082039150611d35565b5050611d7b82610460518509826101dc565b9050611d8c60a05160805183610182565b905081610fc051840992506106c4356080526106e43560a052611db2610fa051826101dc565b9050611dc56106643561064435836101bd565b9050611dd4610fa051826101dc565b9050611de76105e4356105c435836101bd565b9050611df6610fa051826101dc565b9050611e096105643561054435836101bd565b9050611e18610fa051826101dc565b9050611e2b6104e4356104c435836101bd565b9050611e3a610fa051826101dc565b9050611e4d6104643561044435836101bd565b9050611e5c610fa051826101dc565b9050611e6f6103e4356103c435836101bd565b9050611e7e610fa051826101dc565b9050611e916103643561034435836101bd565b9050611ea382610480518509826101dc565b9050611eb460a05160805183610182565b9050610b0051608052610b205160a052611ed36111a0518303826101dc565b9050611ee460a05160805183610182565b9050611504356080526115243560a052611f03610400518303826101dc565b9050611f1460a05160805183610182565b9050611544356080526115643560a052611f31610fe051826101dc565b9050611f4260a05160805183610182565b90506000516111c0526020516111e05261154435611200526115643561122052610a80511561201657611000516000526110205160205261104051604052611060516060526111c0516080526111e05160a0526112005160c0526112205160e05281610100600020069250611fb783826101a2565b9050611fca6111e0516111c05183610182565b90506000516111c0526020516111e0526110405160005261106051602052611ff283826101a2565b9050612005611220516112005183610182565b905060005161120052602051611220525b61202f61122051611200516111e0516111c051856101f7565b90508061203b57600080fd5b505050600160005260206000f35b60008083601f84011261205b57600080fd5b50813567ffffffffffffffff81111561207357600080fd5b6020830191508360208260051b850101111561208e57600080fd5b9250929050565b6000806000806000606086880312156120ad57600080fd5b85356001600160a01b03811681146120c457600080fd5b9450602086013567ffffffffffffffff808211156120e157600080fd5b818801915088601f8301126120f557600080fd5b81358181111561210457600080fd5b89602082850101111561211657600080fd5b60208301965080955050604088013591508082111561213457600080fd5b5061214188828901612049565b96999598509396509294939250505056fea26469706673582212206980435f9591390378e255f4026eeb42c56814114f9e4b0fa8fa6f9c5badec5b64736f6c63430008120033","linkReferences":{},"deployedLinkReferences":{}} \ No newline at end of file diff --git a/backend/src/contracts/abi/Summa.json b/backend/src/contracts/abi/Summa.json deleted file mode 100644 index c260ae38..00000000 --- a/backend/src/contracts/abi/Summa.json +++ /dev/null @@ -1 +0,0 @@ -{"_format":"hh-sol-artifact-1","contractName":"Summa","sourceName":"src/Summa.sol","abi":[{"inputs":[{"internalType":"address","name":"_verifyingKey","type":"address"},{"internalType":"contract IVerifier","name":"_polynomialInterpolationVerifier","type":"address"},{"internalType":"contract IVerifier","name":"_grandSumVerifier","type":"address"},{"internalType":"contract IInclusionVerifier","name":"_inclusionVerifier","type":"address"},{"internalType":"string[]","name":"cryptocurrencyNames","type":"string[]"},{"internalType":"string[]","name":"cryptocurrencyChains","type":"string[]"},{"internalType":"uint8","name":"balanceByteRange","type":"uint8"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"components":[{"internalType":"string","name":"cexAddress","type":"string"},{"internalType":"string","name":"chain","type":"string"},{"internalType":"bytes","name":"signature","type":"bytes"},{"internalType":"bytes","name":"message","type":"bytes"}],"indexed":false,"internalType":"struct Summa.AddressOwnershipProof[]","name":"addressOwnershipProofs","type":"tuple[]"}],"name":"AddressOwnershipProofSubmitted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"timestamp","type":"uint256"},{"indexed":false,"internalType":"uint256[]","name":"totalBalances","type":"uint256[]"},{"indexed":false,"internalType":"bytes","name":"snarkProof","type":"bytes"},{"indexed":false,"internalType":"bytes","name":"grandSumProof","type":"bytes"}],"name":"LiabilitiesCommitmentSubmitted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"addressOwnershipProofs","outputs":[{"internalType":"string","name":"cexAddress","type":"string"},{"internalType":"string","name":"chain","type":"string"},{"internalType":"bytes","name":"signature","type":"bytes"},{"internalType":"bytes","name":"message","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"commitments","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"config","outputs":[{"internalType":"uint8","name":"balanceByteRange","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"addressHash","type":"bytes32"}],"name":"getAddressOwnershipProof","outputs":[{"components":[{"internalType":"string","name":"cexAddress","type":"string"},{"internalType":"string","name":"chain","type":"string"},{"internalType":"bytes","name":"signature","type":"bytes"},{"internalType":"bytes","name":"message","type":"bytes"}],"internalType":"struct Summa.AddressOwnershipProof","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"snarkProof","type":"bytes"},{"internalType":"bytes","name":"grandSumProof","type":"bytes"},{"internalType":"uint256[]","name":"totalBalances","type":"uint256[]"},{"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"submitCommitment","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"string","name":"cexAddress","type":"string"},{"internalType":"string","name":"chain","type":"string"},{"internalType":"bytes","name":"signature","type":"bytes"},{"internalType":"bytes","name":"message","type":"bytes"}],"internalType":"struct Summa.AddressOwnershipProof[]","name":"_addressOwnershipProofs","type":"tuple[]"}],"name":"submitProofOfAddressOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"bytes","name":"inclusionProof","type":"bytes"},{"internalType":"uint256[]","name":"challenges","type":"uint256[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"verifyInclusionProof","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"verifyingKey","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}],"bytecode":"0x6101006040523480156200001257600080fd5b50604051620029003803806200290083398101604081905262000035916200075b565b62000040336200042a565b6001600160a01b0387166200009c5760405162461bcd60e51b815260206004820152601d60248201527f496e76616c696420766572696679696e67206b6579206164647265737300000060448201526064015b60405180910390fd5b6001600160a01b0387166080528151835114620001145760405162461bcd60e51b815260206004820152602f60248201527f43727970746f63757272656e6379206e616d657320616e6420636861696e732060448201526e0dceadac4cae440dad2e6dac2e8c6d608b1b606482015260840162000093565b60005b8351811015620001d15783818151811062000136576200013662000837565b6020026020010151516000141580156200016e575082818151811062000160576200016062000837565b602002602001015151600014155b620001bc5760405162461bcd60e51b815260206004820152601660248201527f496e76616c69642063727970746f63757272656e637900000000000000000000604482015260640162000093565b80620001c88162000863565b91505062000117565b50620001e6878451836200047a60201b60201c565b6200025a5760405162461bcd60e51b815260206004820152603c60248201527f54686520636f6e66696720706172616d657465727320646f206e6f7420636f7260448201527f726573706f6e6420746f2074686520766572696679696e67206b657900000000606482015260840162000093565b6001600160a01b038616620002cc5760405162461bcd60e51b815260206004820152603160248201527f496e76616c696420706f6c796e6f6d69616c20696e746572706f6c6174696f6e604482015270207665726966696572206164647265737360781b606482015260840162000093565b6001600160a01b0380871660a0528516620003355760405162461bcd60e51b815260206004820152602260248201527f496e76616c6964206772616e642073756d207665726966696572206164647265604482015261737360f01b606482015260840162000093565b6001600160a01b0380861660c05284166200039e5760405162461bcd60e51b815260206004820152602260248201527f496e76616c696420696e636c7573696f6e207665726966696572206164647265604482015261737360f01b606482015260840162000093565b6001600160a01b03841660e05260408051606081018252848152602080820185905260ff84169282019290925284519091600191620003e39183919088019062000507565b506020828101518051620003fe926001850192019062000507565b50604091909101516002909101805460ff191660ff9092169190911790555062000a5795505050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600080836200048b6002856200087f565b60ff166200049a9190620008b0565b620004a7906002620008d0565b90506102e06000620004bb836040620008b0565b620004c79083620008d0565b90506000620004d8601083620008e6565b9050600060208260008b3c50506000516001600160801b0381161560809190911c151916979650505050505050565b82805482825590600052602060002090810192821562000552579160200282015b828111156200055257825182906200054190826200098b565b509160200191906001019062000528565b506200056092915062000564565b5090565b80821115620005605760006200057b828262000585565b5060010162000564565b5080546200059390620008fc565b6000825580601f10620005a4575050565b601f016020900490600052602060002090810190620005c49190620005c7565b50565b5b80821115620005605760008155600101620005c8565b6001600160a01b0381168114620005c457600080fd5b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715620006355762000635620005f4565b604052919050565b6000601f83818401126200065057600080fd5b825160206001600160401b03808311156200066f576200066f620005f4565b8260051b620006808382016200060a565b93845286810183019383810190898611156200069b57600080fd5b84890192505b858310156200074e57825184811115620006bb5760008081fd5b8901603f81018b13620006ce5760008081fd5b8581015185811115620006e557620006e5620005f4565b620006f8818a01601f191688016200060a565b81815260408d81848601011115620007105760008081fd5b60005b8381101562000730578481018201518382018b0152890162000713565b505060009181018801919091528352509184019190840190620006a1565b9998505050505050505050565b600080600080600080600060e0888a0312156200077757600080fd5b87516200078481620005de565b60208901519097506200079781620005de565b6040890151909650620007aa81620005de565b6060890151909550620007bd81620005de565b60808901519094506001600160401b0380821115620007db57600080fd5b620007e98b838c016200063d565b945060a08a01519150808211156200080057600080fd5b506200080f8a828b016200063d565b92505060c088015160ff811681146200082757600080fd5b8091505092959891949750929550565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016200087857620008786200084d565b5060010190565b600060ff831680620008a157634e487b7160e01b600052601260045260246000fd5b8060ff84160491505092915050565b8082028115828204841417620008ca57620008ca6200084d565b92915050565b80820180821115620008ca57620008ca6200084d565b81810381811115620008ca57620008ca6200084d565b600181811c908216806200091157607f821691505b6020821081036200093257634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200098657600081815260208120601f850160051c81016020861015620009615750805b601f850160051c820191505b8181101562000982578281556001016200096d565b5050505b505050565b81516001600160401b03811115620009a757620009a7620005f4565b620009bf81620009b88454620008fc565b8462000938565b602080601f831160018114620009f75760008415620009de5750858301515b600019600386901b1c1916600185901b17855562000982565b600085815260208120601f198616915b8281101562000a285788860151825594840194600190910190840162000a07565b508582101562000a475787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05160c05160e051611e5a62000aa66000396000610cb801526000610514015260006103500152600081816101380152818161037d015281816105410152610ce50152611e5a6000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c80637950c5f8116100715780637950c5f8146101335780638da5cb5b146101725780639c38255914610183578063a3c4bcf8146101a6578063c7ddca0e146101c9578063f2fde38b146101dc57600080fd5b806305ab9860146100ae57806319b33968146100c357806349ce8997146100ec578063715018a61461010c57806379502c5514610114575b600080fd5b6100c16100bc3660046114cb565b6101ef565b005b6100d66100d1366004611567565b610660565b6040516100e3919061163b565b60405180910390f35b6100ff6100fa366004611567565b610973565b6040516100e39190611655565b6100c1610a0d565b6003546101219060ff1681565b60405160ff90911681526020016100e3565b61015a7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016100e3565b6000546001600160a01b031661015a565b6101966101913660046116d8565b610a21565b60405190151581526020016100e3565b6101b96101b4366004611567565b610d5f565b6040516100e3949392919061176a565b6100c16101d73660046117b7565b610fbf565b6100c16101ea366004611911565b611260565b6101f76112d9565b600082511161024d5760405162461bcd60e51b815260206004820152601d60248201527f496e76616c696420746f74616c2062616c616e636573206c656e67746800000060448201526064015b60405180910390fd5b815161025a906040611950565b83146102a85760405162461bcd60e51b815260206004820152601e60248201527f496e76616c6964206772616e642073756d2070726f6f66206c656e67746800006044820152606401610244565b8285116102f75760405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420736e61726b2070726f6f66206c656e6774680000000000006044820152606401610244565b6040805160018082528183019092526000916020808301908036833701905050905060008160008151811061032e5761032e61196d565b602090810291909101015260405163af83a18d60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063af83a18d906103ab907f0000000000000000000000000000000000000000000000000000000000000000908b908b9087906004016119e7565b602060405180830381865afa1580156103c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103ec9190611a1e565b61042e5760405162461bcd60e51b815260206004820152601360248201527224b73b30b634b21039b730b93590383937b7b360691b6044820152606401610244565b6001548351146104a65760405162461bcd60e51b815260206004820152603a60248201527f4c696162696c69747920636f6d6d69746d656e747320616e642063727970746f60448201527f63757272656e63696573206e756d626572206d69736d617463680000000000006064820152608401610244565b3660008881896104b7896040611a40565b926104c493929190611a53565b9092509050600087876104da8460408188611a53565b6040516020016104ed9493929190611a7d565b60408051601f198184030181529082905263af83a18d60e01b825291506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063af83a18d9061056d907f00000000000000000000000000000000000000000000000000000000000000009085908b90600401611a9f565b602060405180830381865afa15801561058a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105ae9190611a1e565b6105fa5760405162461bcd60e51b815260206004820152601760248201527f496e76616c6964206772616e642073756d2070726f6f660000000000000000006044820152606401610244565b6000858152600560205260409020610613838583611b68565b50847f7603a12a8838a565715ddb5bbf625b3f00a5e6f4793437537963e30c3b9495dc8785858c8c60405161064c959493929190611c29565b60405180910390a250505050505050505050565b61068b6040518060800160405280606081526020016060815260200160608152602001606081525090565b6000828152600660205260409020546106dd5760405162461bcd60e51b81526020600482015260146024820152731059191c995cdcc81b9bdd081d995c9a599a595960621b6044820152606401610244565b6000828152600660205260409020546004906106fb90600190611c70565b8154811061070b5761070b61196d565b906000526020600020906004020160405180608001604052908160008201805461073490611adf565b80601f016020809104026020016040519081016040528092919081815260200182805461076090611adf565b80156107ad5780601f10610782576101008083540402835291602001916107ad565b820191906000526020600020905b81548152906001019060200180831161079057829003601f168201915b505050505081526020016001820180546107c690611adf565b80601f01602080910402602001604051908101604052809291908181526020018280546107f290611adf565b801561083f5780601f106108145761010080835404028352916020019161083f565b820191906000526020600020905b81548152906001019060200180831161082257829003601f168201915b5050505050815260200160028201805461085890611adf565b80601f016020809104026020016040519081016040528092919081815260200182805461088490611adf565b80156108d15780601f106108a6576101008083540402835291602001916108d1565b820191906000526020600020905b8154815290600101906020018083116108b457829003601f168201915b505050505081526020016003820180546108ea90611adf565b80601f016020809104026020016040519081016040528092919081815260200182805461091690611adf565b80156109635780601f1061093857610100808354040283529160200191610963565b820191906000526020600020905b81548152906001019060200180831161094657829003601f168201915b5050505050815250509050919050565b6005602052600090815260409020805461098c90611adf565b80601f01602080910402602001604051908101604052809291908181526020018280546109b890611adf565b8015610a055780601f106109da57610100808354040283529160200191610a05565b820191906000526020600020905b8154815290600101906020018083116109e857829003601f168201915b505050505081565b610a156112d9565b610a1f6000611333565b565b60008251600414610a745760405162461bcd60e51b815260206004820152601960248201527f496e76616c6964206368616c6c656e676573206c656e677468000000000000006044820152606401610244565b6001805483519091610a8591611c70565b14610add5760405162461bcd60e51b815260206004820152602260248201527f56616c756573206c656e677468206d69736d61746368207769746820636f6e66604482015261696760f01b6064820152608401610244565b60008581526005602052604081208054610af690611adf565b80601f0160208091040260200160405190810160405280929190818152602001828054610b2290611adf565b8015610b6f5780601f10610b4457610100808354040283529160200191610b6f565b820191906000526020600020905b815481529060010190602001808311610b5257829003601f168201915b50505050509050600085518251610b869190611a40565b67ffffffffffffffff811115610b9e57610b9e6113cc565b6040519080825280601f01601f191660200182016040528015610bc8576020820181803683370190505b50905060005b8651811015610c2f57868181518110610be957610be961196d565b602001015160f81c60f81b828281518110610c0657610c0661196d565b60200101906001600160f81b031916908160001a90535080610c2781611c83565b915050610bce565b5060005b8251811015610ca057828181518110610c4e57610c4e61196d565b602001015160f81c60f81b82885183610c679190611a40565b81518110610c7757610c7761196d565b60200101906001600160f81b031916908160001a90535080610c9881611c83565b915050610c33565b506040516323fb5ad560e11b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906347f6b5aa90610d13907f00000000000000000000000000000000000000000000000000000000000000009085908a908a90600401611c9c565b602060405180830381865afa158015610d30573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d549190611a1e565b979650505050505050565b60048181548110610d6f57600080fd5b9060005260206000209060040201600091509050806000018054610d9290611adf565b80601f0160208091040260200160405190810160405280929190818152602001828054610dbe90611adf565b8015610e0b5780601f10610de057610100808354040283529160200191610e0b565b820191906000526020600020905b815481529060010190602001808311610dee57829003601f168201915b505050505090806001018054610e2090611adf565b80601f0160208091040260200160405190810160405280929190818152602001828054610e4c90611adf565b8015610e995780601f10610e6e57610100808354040283529160200191610e99565b820191906000526020600020905b815481529060010190602001808311610e7c57829003601f168201915b505050505090806002018054610eae90611adf565b80601f0160208091040260200160405190810160405280929190818152602001828054610eda90611adf565b8015610f275780601f10610efc57610100808354040283529160200191610f27565b820191906000526020600020905b815481529060010190602001808311610f0a57829003601f168201915b505050505090806003018054610f3c90611adf565b80601f0160208091040260200160405190810160405280929190818152602001828054610f6890611adf565b8015610fb55780601f10610f8a57610100808354040283529160200191610fb5565b820191906000526020600020905b815481529060010190602001808311610f9857829003601f168201915b5050505050905084565b610fc76112d9565b60005b8151811015611225576000828281518110610fe757610fe761196d565b6020026020010151600001516040516020016110039190611ce6565b60408051601f1981840301815291815281516020928301206000818152600690935291205490915080156110795760405162461bcd60e51b815260206004820152601860248201527f4164647265737320616c726561647920766572696669656400000000000000006044820152606401610244565b600484848151811061108d5761108d61196d565b602090810291909101810151825460018101845560009384529190922082516004909202019081906110bf9082611d02565b50602082015160018201906110d49082611d02565b50604082015160028201906110e99082611d02565b50606082015160038201906110fe9082611d02565b50506004546000848152600660205260409020555083518490849081106111275761112761196d565b6020026020010151600001515160001415801561116357508383815181106111515761115161196d565b60200260200101516020015151600014155b801561118e575083838151811061117c5761117c61196d565b60200260200101516040015151600014155b80156111b957508383815181106111a7576111a761196d565b60200260200101516060015151600014155b6112105760405162461bcd60e51b815260206004820152602260248201527f496e76616c69642070726f6f66206f662061646472657373206f776e65727368604482015261069760f41b6064820152608401610244565b5050808061121d90611c83565b915050610fca565b507f382315d4d56a6035e1899bffe77d9becefaf5f2650e4323b27854857a0454658816040516112559190611dc2565b60405180910390a150565b6112686112d9565b6001600160a01b0381166112cd5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610244565b6112d681611333565b50565b6000546001600160a01b03163314610a1f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610244565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60008083601f84011261139557600080fd5b50813567ffffffffffffffff8111156113ad57600080fd5b6020830191508360208285010111156113c557600080fd5b9250929050565b634e487b7160e01b600052604160045260246000fd5b6040516080810167ffffffffffffffff81118282101715611405576114056113cc565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715611434576114346113cc565b604052919050565b600067ffffffffffffffff821115611456576114566113cc565b5060051b60200190565b600082601f83011261147157600080fd5b813560206114866114818361143c565b61140b565b82815260059290921b840181019181810190868411156114a557600080fd5b8286015b848110156114c057803583529183019183016114a9565b509695505050505050565b600080600080600080608087890312156114e457600080fd5b863567ffffffffffffffff808211156114fc57600080fd5b6115088a838b01611383565b9098509650602089013591508082111561152157600080fd5b61152d8a838b01611383565b9096509450604089013591508082111561154657600080fd5b5061155389828a01611460565b925050606087013590509295509295509295565b60006020828403121561157957600080fd5b5035919050565b60005b8381101561159b578181015183820152602001611583565b50506000910152565b600081518084526115bc816020860160208601611580565b601f01601f19169290920160200192915050565b60008151608084526115e560808501826115a4565b9050602083015184820360208601526115fe82826115a4565b9150506040830151848203604086015261161882826115a4565b9150506060830151848203606086015261163282826115a4565b95945050505050565b60208152600061164e60208301846115d0565b9392505050565b60208152600061164e60208301846115a4565b600082601f83011261167957600080fd5b813567ffffffffffffffff811115611693576116936113cc565b6116a6601f8201601f191660200161140b565b8181528460208386010111156116bb57600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080608085870312156116ee57600080fd5b84359350602085013567ffffffffffffffff8082111561170d57600080fd5b61171988838901611668565b9450604087013591508082111561172f57600080fd5b61173b88838901611460565b9350606087013591508082111561175157600080fd5b5061175e87828801611460565b91505092959194509250565b60808152600061177d60808301876115a4565b828103602084015261178f81876115a4565b905082810360408401526117a381866115a4565b90508281036060840152610d5481856115a4565b600060208083850312156117ca57600080fd5b823567ffffffffffffffff808211156117e257600080fd5b818501915085601f8301126117f657600080fd5b81356118046114818261143c565b81815260059190911b8301840190848101908883111561182357600080fd5b8585015b838110156119045780358581111561183e57600080fd5b86016080818c03601f190112156118555760008081fd5b61185d6113e2565b888201358781111561186f5760008081fd5b61187d8d8b83860101611668565b825250604080830135888111156118945760008081fd5b6118a28e8c83870101611668565b8b84015250606080840135898111156118bb5760008081fd5b6118c98f8d83880101611668565b838501525060808401359150888211156118e35760008081fd5b6118f18e8c84870101611668565b9083015250845250918601918601611827565b5098975050505050505050565b60006020828403121561192357600080fd5b81356001600160a01b038116811461164e57600080fd5b634e487b7160e01b600052601160045260246000fd5b80820281158282048414176119675761196761193a565b92915050565b634e487b7160e01b600052603260045260246000fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b600081518084526020808501945080840160005b838110156119dc578151875295820195908201906001016119c0565b509495945050505050565b6001600160a01b0385168152606060208201819052600090611a0c9083018587611983565b8281036040840152610d5481856119ac565b600060208284031215611a3057600080fd5b8151801515811461164e57600080fd5b808201808211156119675761196761193a565b60008085851115611a6357600080fd5b83861115611a7057600080fd5b5050820193919092039150565b8385823760008482016000815283858237600093019283525090949350505050565b6001600160a01b0384168152606060208201819052600090611ac3908301856115a4565b8281036040840152611ad581856119ac565b9695505050505050565b600181811c90821680611af357607f821691505b602082108103611b1357634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115611b6357600081815260208120601f850160051c81016020861015611b405750805b601f850160051c820191505b81811015611b5f57828155600101611b4c565b5050505b505050565b67ffffffffffffffff831115611b8057611b806113cc565b611b9483611b8e8354611adf565b83611b19565b6000601f841160018114611bc85760008515611bb05750838201355b600019600387901b1c1916600186901b178355611c22565b600083815260209020601f19861690835b82811015611bf95786850135825560209485019460019092019101611bd9565b5086821015611c165760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b606081526000611c3c60608301886119ac565b8281036020840152611c4f818789611983565b90508281036040840152611c64818587611983565b98975050505050505050565b818103818111156119675761196761193a565b600060018201611c9557611c9561193a565b5060010190565b6001600160a01b0385168152608060208201819052600090611cc0908301866115a4565b8281036040840152611cd281866119ac565b90508281036060840152610d5481856119ac565b60008251611cf8818460208701611580565b9190910192915050565b815167ffffffffffffffff811115611d1c57611d1c6113cc565b611d3081611d2a8454611adf565b84611b19565b602080601f831160018114611d655760008415611d4d5750858301515b600019600386901b1c1916600185901b178555611b5f565b600085815260208120601f198616915b82811015611d9457888601518255948401946001909101908401611d75565b5085821015611db25787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b82811015611e1757603f19888603018452611e058583516115d0565b94509285019290850190600101611de9565b509297965050505050505056fea26469706673582212209a722da9dd0f80b828b07566849d43bf66d6ec20c2cd3e06b9d08cd3fa7ded4164736f6c63430008120033","deployedBytecode":"0x608060405234801561001057600080fd5b50600436106100a95760003560e01c80637950c5f8116100715780637950c5f8146101335780638da5cb5b146101725780639c38255914610183578063a3c4bcf8146101a6578063c7ddca0e146101c9578063f2fde38b146101dc57600080fd5b806305ab9860146100ae57806319b33968146100c357806349ce8997146100ec578063715018a61461010c57806379502c5514610114575b600080fd5b6100c16100bc3660046114cb565b6101ef565b005b6100d66100d1366004611567565b610660565b6040516100e3919061163b565b60405180910390f35b6100ff6100fa366004611567565b610973565b6040516100e39190611655565b6100c1610a0d565b6003546101219060ff1681565b60405160ff90911681526020016100e3565b61015a7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016100e3565b6000546001600160a01b031661015a565b6101966101913660046116d8565b610a21565b60405190151581526020016100e3565b6101b96101b4366004611567565b610d5f565b6040516100e3949392919061176a565b6100c16101d73660046117b7565b610fbf565b6100c16101ea366004611911565b611260565b6101f76112d9565b600082511161024d5760405162461bcd60e51b815260206004820152601d60248201527f496e76616c696420746f74616c2062616c616e636573206c656e67746800000060448201526064015b60405180910390fd5b815161025a906040611950565b83146102a85760405162461bcd60e51b815260206004820152601e60248201527f496e76616c6964206772616e642073756d2070726f6f66206c656e67746800006044820152606401610244565b8285116102f75760405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420736e61726b2070726f6f66206c656e6774680000000000006044820152606401610244565b6040805160018082528183019092526000916020808301908036833701905050905060008160008151811061032e5761032e61196d565b602090810291909101015260405163af83a18d60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063af83a18d906103ab907f0000000000000000000000000000000000000000000000000000000000000000908b908b9087906004016119e7565b602060405180830381865afa1580156103c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103ec9190611a1e565b61042e5760405162461bcd60e51b815260206004820152601360248201527224b73b30b634b21039b730b93590383937b7b360691b6044820152606401610244565b6001548351146104a65760405162461bcd60e51b815260206004820152603a60248201527f4c696162696c69747920636f6d6d69746d656e747320616e642063727970746f60448201527f63757272656e63696573206e756d626572206d69736d617463680000000000006064820152608401610244565b3660008881896104b7896040611a40565b926104c493929190611a53565b9092509050600087876104da8460408188611a53565b6040516020016104ed9493929190611a7d565b60408051601f198184030181529082905263af83a18d60e01b825291506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063af83a18d9061056d907f00000000000000000000000000000000000000000000000000000000000000009085908b90600401611a9f565b602060405180830381865afa15801561058a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105ae9190611a1e565b6105fa5760405162461bcd60e51b815260206004820152601760248201527f496e76616c6964206772616e642073756d2070726f6f660000000000000000006044820152606401610244565b6000858152600560205260409020610613838583611b68565b50847f7603a12a8838a565715ddb5bbf625b3f00a5e6f4793437537963e30c3b9495dc8785858c8c60405161064c959493929190611c29565b60405180910390a250505050505050505050565b61068b6040518060800160405280606081526020016060815260200160608152602001606081525090565b6000828152600660205260409020546106dd5760405162461bcd60e51b81526020600482015260146024820152731059191c995cdcc81b9bdd081d995c9a599a595960621b6044820152606401610244565b6000828152600660205260409020546004906106fb90600190611c70565b8154811061070b5761070b61196d565b906000526020600020906004020160405180608001604052908160008201805461073490611adf565b80601f016020809104026020016040519081016040528092919081815260200182805461076090611adf565b80156107ad5780601f10610782576101008083540402835291602001916107ad565b820191906000526020600020905b81548152906001019060200180831161079057829003601f168201915b505050505081526020016001820180546107c690611adf565b80601f01602080910402602001604051908101604052809291908181526020018280546107f290611adf565b801561083f5780601f106108145761010080835404028352916020019161083f565b820191906000526020600020905b81548152906001019060200180831161082257829003601f168201915b5050505050815260200160028201805461085890611adf565b80601f016020809104026020016040519081016040528092919081815260200182805461088490611adf565b80156108d15780601f106108a6576101008083540402835291602001916108d1565b820191906000526020600020905b8154815290600101906020018083116108b457829003601f168201915b505050505081526020016003820180546108ea90611adf565b80601f016020809104026020016040519081016040528092919081815260200182805461091690611adf565b80156109635780601f1061093857610100808354040283529160200191610963565b820191906000526020600020905b81548152906001019060200180831161094657829003601f168201915b5050505050815250509050919050565b6005602052600090815260409020805461098c90611adf565b80601f01602080910402602001604051908101604052809291908181526020018280546109b890611adf565b8015610a055780601f106109da57610100808354040283529160200191610a05565b820191906000526020600020905b8154815290600101906020018083116109e857829003601f168201915b505050505081565b610a156112d9565b610a1f6000611333565b565b60008251600414610a745760405162461bcd60e51b815260206004820152601960248201527f496e76616c6964206368616c6c656e676573206c656e677468000000000000006044820152606401610244565b6001805483519091610a8591611c70565b14610add5760405162461bcd60e51b815260206004820152602260248201527f56616c756573206c656e677468206d69736d61746368207769746820636f6e66604482015261696760f01b6064820152608401610244565b60008581526005602052604081208054610af690611adf565b80601f0160208091040260200160405190810160405280929190818152602001828054610b2290611adf565b8015610b6f5780601f10610b4457610100808354040283529160200191610b6f565b820191906000526020600020905b815481529060010190602001808311610b5257829003601f168201915b50505050509050600085518251610b869190611a40565b67ffffffffffffffff811115610b9e57610b9e6113cc565b6040519080825280601f01601f191660200182016040528015610bc8576020820181803683370190505b50905060005b8651811015610c2f57868181518110610be957610be961196d565b602001015160f81c60f81b828281518110610c0657610c0661196d565b60200101906001600160f81b031916908160001a90535080610c2781611c83565b915050610bce565b5060005b8251811015610ca057828181518110610c4e57610c4e61196d565b602001015160f81c60f81b82885183610c679190611a40565b81518110610c7757610c7761196d565b60200101906001600160f81b031916908160001a90535080610c9881611c83565b915050610c33565b506040516323fb5ad560e11b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906347f6b5aa90610d13907f00000000000000000000000000000000000000000000000000000000000000009085908a908a90600401611c9c565b602060405180830381865afa158015610d30573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d549190611a1e565b979650505050505050565b60048181548110610d6f57600080fd5b9060005260206000209060040201600091509050806000018054610d9290611adf565b80601f0160208091040260200160405190810160405280929190818152602001828054610dbe90611adf565b8015610e0b5780601f10610de057610100808354040283529160200191610e0b565b820191906000526020600020905b815481529060010190602001808311610dee57829003601f168201915b505050505090806001018054610e2090611adf565b80601f0160208091040260200160405190810160405280929190818152602001828054610e4c90611adf565b8015610e995780601f10610e6e57610100808354040283529160200191610e99565b820191906000526020600020905b815481529060010190602001808311610e7c57829003601f168201915b505050505090806002018054610eae90611adf565b80601f0160208091040260200160405190810160405280929190818152602001828054610eda90611adf565b8015610f275780601f10610efc57610100808354040283529160200191610f27565b820191906000526020600020905b815481529060010190602001808311610f0a57829003601f168201915b505050505090806003018054610f3c90611adf565b80601f0160208091040260200160405190810160405280929190818152602001828054610f6890611adf565b8015610fb55780601f10610f8a57610100808354040283529160200191610fb5565b820191906000526020600020905b815481529060010190602001808311610f9857829003601f168201915b5050505050905084565b610fc76112d9565b60005b8151811015611225576000828281518110610fe757610fe761196d565b6020026020010151600001516040516020016110039190611ce6565b60408051601f1981840301815291815281516020928301206000818152600690935291205490915080156110795760405162461bcd60e51b815260206004820152601860248201527f4164647265737320616c726561647920766572696669656400000000000000006044820152606401610244565b600484848151811061108d5761108d61196d565b602090810291909101810151825460018101845560009384529190922082516004909202019081906110bf9082611d02565b50602082015160018201906110d49082611d02565b50604082015160028201906110e99082611d02565b50606082015160038201906110fe9082611d02565b50506004546000848152600660205260409020555083518490849081106111275761112761196d565b6020026020010151600001515160001415801561116357508383815181106111515761115161196d565b60200260200101516020015151600014155b801561118e575083838151811061117c5761117c61196d565b60200260200101516040015151600014155b80156111b957508383815181106111a7576111a761196d565b60200260200101516060015151600014155b6112105760405162461bcd60e51b815260206004820152602260248201527f496e76616c69642070726f6f66206f662061646472657373206f776e65727368604482015261069760f41b6064820152608401610244565b5050808061121d90611c83565b915050610fca565b507f382315d4d56a6035e1899bffe77d9becefaf5f2650e4323b27854857a0454658816040516112559190611dc2565b60405180910390a150565b6112686112d9565b6001600160a01b0381166112cd5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610244565b6112d681611333565b50565b6000546001600160a01b03163314610a1f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610244565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60008083601f84011261139557600080fd5b50813567ffffffffffffffff8111156113ad57600080fd5b6020830191508360208285010111156113c557600080fd5b9250929050565b634e487b7160e01b600052604160045260246000fd5b6040516080810167ffffffffffffffff81118282101715611405576114056113cc565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715611434576114346113cc565b604052919050565b600067ffffffffffffffff821115611456576114566113cc565b5060051b60200190565b600082601f83011261147157600080fd5b813560206114866114818361143c565b61140b565b82815260059290921b840181019181810190868411156114a557600080fd5b8286015b848110156114c057803583529183019183016114a9565b509695505050505050565b600080600080600080608087890312156114e457600080fd5b863567ffffffffffffffff808211156114fc57600080fd5b6115088a838b01611383565b9098509650602089013591508082111561152157600080fd5b61152d8a838b01611383565b9096509450604089013591508082111561154657600080fd5b5061155389828a01611460565b925050606087013590509295509295509295565b60006020828403121561157957600080fd5b5035919050565b60005b8381101561159b578181015183820152602001611583565b50506000910152565b600081518084526115bc816020860160208601611580565b601f01601f19169290920160200192915050565b60008151608084526115e560808501826115a4565b9050602083015184820360208601526115fe82826115a4565b9150506040830151848203604086015261161882826115a4565b9150506060830151848203606086015261163282826115a4565b95945050505050565b60208152600061164e60208301846115d0565b9392505050565b60208152600061164e60208301846115a4565b600082601f83011261167957600080fd5b813567ffffffffffffffff811115611693576116936113cc565b6116a6601f8201601f191660200161140b565b8181528460208386010111156116bb57600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080608085870312156116ee57600080fd5b84359350602085013567ffffffffffffffff8082111561170d57600080fd5b61171988838901611668565b9450604087013591508082111561172f57600080fd5b61173b88838901611460565b9350606087013591508082111561175157600080fd5b5061175e87828801611460565b91505092959194509250565b60808152600061177d60808301876115a4565b828103602084015261178f81876115a4565b905082810360408401526117a381866115a4565b90508281036060840152610d5481856115a4565b600060208083850312156117ca57600080fd5b823567ffffffffffffffff808211156117e257600080fd5b818501915085601f8301126117f657600080fd5b81356118046114818261143c565b81815260059190911b8301840190848101908883111561182357600080fd5b8585015b838110156119045780358581111561183e57600080fd5b86016080818c03601f190112156118555760008081fd5b61185d6113e2565b888201358781111561186f5760008081fd5b61187d8d8b83860101611668565b825250604080830135888111156118945760008081fd5b6118a28e8c83870101611668565b8b84015250606080840135898111156118bb5760008081fd5b6118c98f8d83880101611668565b838501525060808401359150888211156118e35760008081fd5b6118f18e8c84870101611668565b9083015250845250918601918601611827565b5098975050505050505050565b60006020828403121561192357600080fd5b81356001600160a01b038116811461164e57600080fd5b634e487b7160e01b600052601160045260246000fd5b80820281158282048414176119675761196761193a565b92915050565b634e487b7160e01b600052603260045260246000fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b600081518084526020808501945080840160005b838110156119dc578151875295820195908201906001016119c0565b509495945050505050565b6001600160a01b0385168152606060208201819052600090611a0c9083018587611983565b8281036040840152610d5481856119ac565b600060208284031215611a3057600080fd5b8151801515811461164e57600080fd5b808201808211156119675761196761193a565b60008085851115611a6357600080fd5b83861115611a7057600080fd5b5050820193919092039150565b8385823760008482016000815283858237600093019283525090949350505050565b6001600160a01b0384168152606060208201819052600090611ac3908301856115a4565b8281036040840152611ad581856119ac565b9695505050505050565b600181811c90821680611af357607f821691505b602082108103611b1357634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115611b6357600081815260208120601f850160051c81016020861015611b405750805b601f850160051c820191505b81811015611b5f57828155600101611b4c565b5050505b505050565b67ffffffffffffffff831115611b8057611b806113cc565b611b9483611b8e8354611adf565b83611b19565b6000601f841160018114611bc85760008515611bb05750838201355b600019600387901b1c1916600186901b178355611c22565b600083815260209020601f19861690835b82811015611bf95786850135825560209485019460019092019101611bd9565b5086821015611c165760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b606081526000611c3c60608301886119ac565b8281036020840152611c4f818789611983565b90508281036040840152611c64818587611983565b98975050505050505050565b818103818111156119675761196761193a565b600060018201611c9557611c9561193a565b5060010190565b6001600160a01b0385168152608060208201819052600090611cc0908301866115a4565b8281036040840152611cd281866119ac565b90508281036060840152610d5481856119ac565b60008251611cf8818460208701611580565b9190910192915050565b815167ffffffffffffffff811115611d1c57611d1c6113cc565b611d3081611d2a8454611adf565b84611b19565b602080601f831160018114611d655760008415611d4d5750858301515b600019600386901b1c1916600185901b178555611b5f565b600085815260208120601f198616915b82811015611d9457888601518255948401946001909101908401611d75565b5085821015611db25787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b82811015611e1757603f19888603018452611e058583516115d0565b94509285019290850190600101611de9565b509297965050505050505056fea26469706673582212209a722da9dd0f80b828b07566849d43bf66d6ec20c2cd3e06b9d08cd3fa7ded4164736f6c63430008120033","linkReferences":{},"deployedLinkReferences":{}} \ No newline at end of file diff --git a/backend/src/contracts/abi/VerifyingKey.json b/backend/src/contracts/abi/VerifyingKey.json deleted file mode 100644 index 4ff9d945..00000000 --- a/backend/src/contracts/abi/VerifyingKey.json +++ /dev/null @@ -1 +0,0 @@ -{"_format":"hh-sol-artifact-1","contractName":"Halo2VerifyingKey","sourceName":"src/VerifyingKey.sol","abi":[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"}],"bytecode":"0x608060405234801561001057600080fd5b5060007e996ed64113d5d86f42caab0f3d25466b0856015472de4bb809f168aabc2567815260116020527f30643640b9f82f90e83b698e5ea6179c7c05542e859533b48b9953a2f53608016040527f304cd1e79cfa5b0f054e981a27ed7706e7ea6b06a7f266ef8db819c179c2c3ea6060527f193586da872cdeff023d6ab2263a131b4780db8878be3c3b7f8f019c06fcb0fb6080527f299110e6835fd73731fb3ce6de87151988da403c265467a96b9cda0d7daa72e460a052600160c0528060e0528061010052806101205280610140526001610160526002610180527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c26101a0527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6101c0527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b6101e0527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa610200527f26186a2d65ee4d2f9c9a5b91f86597d35f192cd120caf7e935d8443d1938e23d610220527f30441fd1b5d3370482c42152a8899027716989a6996c2535bc9f7fee8aaef79e610240527f16f363f103c80d7bbc8ad3c6867e0822bbc6000be91a4689755c7df40221c145610260527f2b1cbb3e521edf5a622d82762a44a5e63f1e50b332d71154a4a7958d6011deff610280527f1404a2d17cd02c8f9fd79d74ac73c67d1881e62c6af354fa74d235c5e37dacfe6102a0527f2c1e30781f735e7977820d4ca9145010e28dcc808ee0f1e976477289057b7aec6102c0527f2dd3fd59098a5b4b4a616568bb6ba1a1e4c40e4b0df9ae94e37944d55ab651cf6102e0527f25680c3525ba04435a9034d6e69c96de5133edfe37c226d3e31b60eff6b34ef0610300527f1a224e6aeb9bb7de12c761fd1f49a733ff410c3f772aad6a2ec3c4decad43307610320527f300a66b376af1187694e25dbcea3aac63114716af822fd4661519adbf9c649e9610340527f27a7a66087a8c17b00ffb7fe9b76ba2199ca308bcb0ad100fa181886d6c9b936610360527f23bc951a3c4307384bdec5d61be122a19c933db3266d6327a472e5203a9f785a610380527f0743ea40f14084db2673217283aa053f986896ee7c181f52118442e99c4529746103a0527f0203e3493a2594ece57d22cc75dd081ac68271ec7c758153cfd2152bfb5c19e36103c0527f0f85936c44708409e3e9fb5e2a7ea6604b06997f0ac7fd488e3f147e05a88dbe6103e0527f0497fbb7c4436dcf36ede6a30ad62e016e059a11a6548eb6980edeb2f1052133610400527f0dcbacf368c01f61375c242e35edab12a22147e9d46bf685fb75454d60f5edbc610420527f17720c95139aa3f5dec5b6bd56082f8deded2e4a1425d0a91e2743dd294fdc9c610440527f284ac053d96a33fca69eca00e16eea75ad1bf008d2a742fc846ac73d17d46d73610460527f14f45666a26b8d472186dbf78e606a82891e0f122a54264418cfe2615003dfb9610480527f1c517c335ad634422ef2eb5f615926e875afa9e9c589abf528d315a8a586b22d6104a0527f1220b1b13c91e8115106144bc417d4d3e6a9de3fb70406e68b4a5fd8a92f43276104c0527f0cbaead666e172b1801b7ad17c3450ea2ce7d53c1e392cedf05023e59e53c95a6104e0527f0ce200ab515efc390c459e0b492c15a50024c57fa70768c18389924e1e72982b610500527f1d4848e8db74251fd01e018fedb71ca8e04c41746474ad4b4a39da132f86f30b610520527f148a2252b7b6a07e21aa1bc5b1cc4826ac7f4a7a3e29fb7399dd7029d4bdaf276105405261056081f3fe","deployedBytecode":"0x6080604052600080fdfea26469706673582212207c80617d071a4e94f54a68097fd35e2444402dadbf01772e6352e9def6be37da64736f6c63430008120033","linkReferences":{},"deployedLinkReferences":{}} \ No newline at end of file diff --git a/backend/src/contracts/deployments.json b/backend/src/contracts/deployments.json deleted file mode 100644 index 81e8bab9..00000000 --- a/backend/src/contracts/deployments.json +++ /dev/null @@ -1 +0,0 @@ -{"31337":{"address":"0xDc64a140Aa3E981100a9becA4E685f962f0cF6C9"}} \ No newline at end of file diff --git a/backend/src/contracts/generated/grandsum_verifier.rs b/backend/src/contracts/generated/grandsum_verifier.rs deleted file mode 100644 index 8b6f7014..00000000 --- a/backend/src/contracts/generated/grandsum_verifier.rs +++ /dev/null @@ -1,2747 +0,0 @@ -pub use grand_sum_verifier::*; -/// This module was auto-generated with ethers-rs Abigen. -/// More information at: -#[allow( - clippy::enum_variant_names, - clippy::too_many_arguments, - clippy::upper_case_acronyms, - clippy::type_complexity, - dead_code, - non_camel_case_types, -)] -pub mod grand_sum_verifier { - #[rustfmt::skip] - const __ABI: &str = "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"vk\",\"type\":\"address\",\"components\":[]},{\"internalType\":\"bytes\",\"name\":\"proof\",\"type\":\"bytes\",\"components\":[]},{\"internalType\":\"uint256[]\",\"name\":\"values\",\"type\":\"uint256[]\",\"components\":[]}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"verifyProof\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\",\"components\":[]}]}]"; - ///The parsed JSON ABI of the contract. - pub static GRANDSUMVERIFIER_ABI: ::ethers::contract::Lazy< - ::ethers::core::abi::Abi, - > = ::ethers::contract::Lazy::new(|| { - ::ethers::core::utils::__serde_json::from_str(__ABI) - .expect("ABI is always valid") - }); - #[rustfmt::skip] - const __BYTECODE: &[u8] = &[ - 96, - 128, - 96, - 64, - 82, - 52, - 128, - 21, - 97, - 0, - 16, - 87, - 96, - 0, - 128, - 253, - 91, - 80, - 97, - 4, - 254, - 128, - 97, - 0, - 32, - 96, - 0, - 57, - 96, - 0, - 243, - 254, - 96, - 128, - 96, - 64, - 82, - 52, - 128, - 21, - 97, - 0, - 16, - 87, - 96, - 0, - 128, - 253, - 91, - 80, - 96, - 4, - 54, - 16, - 97, - 0, - 43, - 87, - 96, - 0, - 53, - 96, - 224, - 28, - 128, - 99, - 175, - 131, - 161, - 141, - 20, - 97, - 0, - 48, - 87, - 91, - 96, - 0, - 128, - 253, - 91, - 97, - 0, - 67, - 97, - 0, - 62, - 54, - 96, - 4, - 97, - 4, - 11, - 86, - 91, - 97, - 0, - 87, - 86, - 91, - 96, - 64, - 81, - 144, - 21, - 21, - 129, - 82, - 96, - 32, - 1, - 96, - 64, - 81, - 128, - 145, - 3, - 144, - 243, - 91, - 96, - 0, - 97, - 1, - 53, - 86, - 91, - 96, - 32, - 130, - 1, - 53, - 131, - 129, - 16, - 131, - 53, - 133, - 129, - 16, - 132, - 22, - 145, - 144, - 145, - 22, - 145, - 133, - 96, - 3, - 129, - 128, - 133, - 128, - 9, - 133, - 9, - 8, - 134, - 130, - 131, - 9, - 20, - 131, - 22, - 146, - 80, - 80, - 80, - 147, - 146, - 80, - 80, - 80, - 86, - 91, - 129, - 96, - 192, - 82, - 130, - 96, - 224, - 82, - 96, - 0, - 96, - 64, - 96, - 128, - 128, - 96, - 128, - 96, - 6, - 90, - 250, - 144, - 145, - 22, - 147, - 146, - 80, - 80, - 80, - 86, - 91, - 129, - 96, - 192, - 82, - 96, - 0, - 96, - 64, - 96, - 128, - 96, - 96, - 96, - 128, - 96, - 7, - 90, - 250, - 144, - 145, - 22, - 146, - 145, - 80, - 80, - 86, - 91, - 129, - 96, - 0, - 82, - 130, - 96, - 32, - 82, - 97, - 2, - 192, - 81, - 96, - 64, - 82, - 97, - 2, - 224, - 81, - 96, - 96, - 82, - 97, - 3, - 0, - 81, - 96, - 128, - 82, - 97, - 3, - 32, - 81, - 96, - 160, - 82, - 131, - 96, - 192, - 82, - 132, - 96, - 224, - 82, - 97, - 3, - 64, - 81, - 97, - 1, - 0, - 82, - 97, - 3, - 96, - 81, - 97, - 1, - 32, - 82, - 97, - 3, - 128, - 81, - 97, - 1, - 64, - 82, - 97, - 3, - 160, - 81, - 97, - 1, - 96, - 82, - 96, - 0, - 96, - 32, - 96, - 0, - 97, - 1, - 128, - 96, - 0, - 96, - 8, - 90, - 250, - 96, - 0, - 81, - 146, - 22, - 144, - 145, - 22, - 149, - 148, - 80, - 80, - 80, - 80, - 80, - 86, - 91, - 127, - 48, - 100, - 78, - 114, - 225, - 49, - 160, - 41, - 184, - 80, - 69, - 182, - 129, - 129, - 88, - 93, - 151, - 129, - 106, - 145, - 104, - 113, - 202, - 141, - 60, - 32, - 140, - 22, - 216, - 124, - 253, - 71, - 127, - 48, - 100, - 78, - 114, - 225, - 49, - 160, - 41, - 184, - 80, - 69, - 182, - 129, - 129, - 88, - 93, - 40, - 51, - 232, - 72, - 121, - 185, - 112, - 145, - 67, - 225, - 245, - 147, - 240, - 0, - 0, - 1, - 96, - 1, - 96, - 32, - 96, - 64, - 97, - 2, - 32, - 139, - 60, - 97, - 1, - 64, - 97, - 1, - 96, - 97, - 2, - 128, - 139, - 60, - 96, - 100, - 53, - 96, - 128, - 129, - 6, - 96, - 0, - 20, - 130, - 22, - 145, - 80, - 129, - 97, - 1, - 193, - 87, - 115, - 9, - 45, - 206, - 204, - 45, - 141, - 44, - 132, - 14, - 14, - 77, - 237, - 236, - 196, - 13, - 140, - 173, - 204, - 238, - 141, - 96, - 99, - 27, - 96, - 0, - 82, - 96, - 32, - 96, - 0, - 253, - 91, - 96, - 32, - 129, - 96, - 100, - 1, - 1, - 128, - 53, - 96, - 32, - 129, - 2, - 131, - 4, - 96, - 4, - 20, - 132, - 22, - 147, - 80, - 131, - 97, - 2, - 6, - 87, - 127, - 78, - 117, - 109, - 98, - 101, - 114, - 32, - 111, - 102, - 32, - 101, - 118, - 97, - 108, - 117, - 97, - 116, - 105, - 111, - 110, - 32, - 109, - 105, - 115, - 109, - 97, - 116, - 99, - 104, - 0, - 0, - 0, - 96, - 0, - 82, - 96, - 32, - 96, - 0, - 253, - 91, - 96, - 0, - 91, - 129, - 129, - 16, - 21, - 97, - 3, - 177, - 87, - 96, - 32, - 129, - 2, - 96, - 2, - 129, - 2, - 96, - 32, - 130, - 1, - 133, - 1, - 53, - 136, - 97, - 2, - 32, - 81, - 130, - 9, - 97, - 2, - 128, - 81, - 96, - 128, - 82, - 97, - 2, - 160, - 81, - 96, - 160, - 82, - 137, - 3, - 144, - 80, - 97, - 2, - 67, - 129, - 137, - 97, - 0, - 174, - 86, - 91, - 136, - 22, - 151, - 80, - 80, - 134, - 97, - 2, - 119, - 87, - 127, - 70, - 97, - 105, - 108, - 101, - 100, - 32, - 116, - 111, - 32, - 109, - 117, - 108, - 116, - 105, - 112, - 108, - 121, - 32, - 71, - 49, - 32, - 98, - 121, - 32, - 109, - 105, - 110, - 117, - 115, - 95, - 122, - 96, - 0, - 82, - 96, - 32, - 96, - 0, - 253, - 91, - 128, - 96, - 2, - 135, - 4, - 96, - 132, - 1, - 1, - 97, - 2, - 139, - 138, - 130, - 138, - 97, - 0, - 94, - 86, - 91, - 151, - 80, - 135, - 97, - 2, - 196, - 87, - 130, - 96, - 0, - 82, - 127, - 67, - 111, - 109, - 109, - 105, - 116, - 109, - 101, - 110, - 116, - 32, - 112, - 111, - 105, - 110, - 116, - 32, - 105, - 115, - 32, - 110, - 111, - 116, - 32, - 69, - 67, - 32, - 112, - 111, - 105, - 110, - 116, - 96, - 32, - 82, - 128, - 96, - 64, - 82, - 96, - 96, - 96, - 0, - 253, - 91, - 128, - 53, - 146, - 80, - 96, - 32, - 1, - 53, - 97, - 2, - 215, - 129, - 132, - 138, - 97, - 0, - 143, - 86, - 91, - 151, - 80, - 80, - 134, - 97, - 3, - 9, - 87, - 127, - 70, - 97, - 105, - 108, - 101, - 100, - 32, - 116, - 111, - 32, - 97, - 100, - 100, - 32, - 67, - 32, - 97, - 110, - 100, - 32, - 103, - 95, - 116, - 111, - 95, - 109, - 105, - 110, - 117, - 115, - 95, - 122, - 96, - 0, - 82, - 96, - 32, - 96, - 0, - 253, - 91, - 96, - 128, - 81, - 97, - 2, - 64, - 82, - 96, - 160, - 81, - 97, - 2, - 96, - 82, - 96, - 132, - 1, - 144, - 80, - 97, - 3, - 39, - 136, - 130, - 136, - 97, - 0, - 94, - 86, - 91, - 149, - 80, - 133, - 97, - 3, - 88, - 87, - 127, - 79, - 112, - 101, - 110, - 105, - 110, - 103, - 32, - 112, - 111, - 105, - 110, - 116, - 32, - 105, - 115, - 32, - 110, - 111, - 116, - 32, - 69, - 67, - 32, - 112, - 111, - 105, - 110, - 116, - 0, - 0, - 0, - 96, - 0, - 82, - 96, - 32, - 96, - 0, - 253, - 91, - 128, - 53, - 96, - 32, - 130, - 1, - 53, - 145, - 80, - 97, - 3, - 116, - 130, - 130, - 97, - 2, - 96, - 81, - 97, - 2, - 64, - 81, - 139, - 97, - 0, - 201, - 86, - 91, - 135, - 22, - 150, - 80, - 80, - 80, - 132, - 97, - 3, - 169, - 87, - 127, - 70, - 97, - 105, - 108, - 101, - 100, - 32, - 116, - 111, - 32, - 112, - 101, - 114, - 102, - 111, - 114, - 109, - 32, - 112, - 97, - 105, - 114, - 105, - 110, - 103, - 32, - 99, - 104, - 101, - 99, - 107, - 0, - 96, - 0, - 82, - 96, - 32, - 96, - 0, - 253, - 91, - 96, - 1, - 1, - 97, - 2, - 9, - 86, - 91, - 80, - 80, - 80, - 80, - 128, - 96, - 0, - 82, - 96, - 32, - 96, - 0, - 243, - 91, - 96, - 0, - 128, - 131, - 96, - 31, - 132, - 1, - 18, - 97, - 3, - 209, - 87, - 96, - 0, - 128, - 253, - 91, - 80, - 129, - 53, - 103, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 129, - 17, - 21, - 97, - 3, - 233, - 87, - 96, - 0, - 128, - 253, - 91, - 96, - 32, - 131, - 1, - 145, - 80, - 131, - 96, - 32, - 130, - 96, - 5, - 27, - 133, - 1, - 1, - 17, - 21, - 97, - 4, - 4, - 87, - 96, - 0, - 128, - 253, - 91, - 146, - 80, - 146, - 144, - 80, - 86, - 91, - 96, - 0, - 128, - 96, - 0, - 128, - 96, - 0, - 96, - 96, - 134, - 136, - 3, - 18, - 21, - 97, - 4, - 35, - 87, - 96, - 0, - 128, - 253, - 91, - 133, - 53, - 96, - 1, - 96, - 1, - 96, - 160, - 27, - 3, - 129, - 22, - 129, - 20, - 97, - 4, - 58, - 87, - 96, - 0, - 128, - 253, - 91, - 148, - 80, - 96, - 32, - 134, - 1, - 53, - 103, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 128, - 130, - 17, - 21, - 97, - 4, - 87, - 87, - 96, - 0, - 128, - 253, - 91, - 129, - 136, - 1, - 145, - 80, - 136, - 96, - 31, - 131, - 1, - 18, - 97, - 4, - 107, - 87, - 96, - 0, - 128, - 253, - 91, - 129, - 53, - 129, - 129, - 17, - 21, - 97, - 4, - 122, - 87, - 96, - 0, - 128, - 253, - 91, - 137, - 96, - 32, - 130, - 133, - 1, - 1, - 17, - 21, - 97, - 4, - 140, - 87, - 96, - 0, - 128, - 253, - 91, - 96, - 32, - 131, - 1, - 150, - 80, - 128, - 149, - 80, - 80, - 96, - 64, - 136, - 1, - 53, - 145, - 80, - 128, - 130, - 17, - 21, - 97, - 4, - 170, - 87, - 96, - 0, - 128, - 253, - 91, - 80, - 97, - 4, - 183, - 136, - 130, - 137, - 1, - 97, - 3, - 191, - 86, - 91, - 150, - 153, - 149, - 152, - 80, - 147, - 150, - 80, - 146, - 148, - 147, - 146, - 80, - 80, - 80, - 86, - 254, - 162, - 100, - 105, - 112, - 102, - 115, - 88, - 34, - 18, - 32, - 49, - 140, - 108, - 158, - 187, - 17, - 230, - 122, - 206, - 151, - 147, - 131, - 228, - 207, - 190, - 199, - 252, - 160, - 161, - 2, - 236, - 137, - 223, - 59, - 105, - 5, - 20, - 202, - 193, - 71, - 38, - 225, - 100, - 115, - 111, - 108, - 99, - 67, - 0, - 8, - 18, - 0, - 51, - ]; - ///The bytecode of the contract. - pub static GRANDSUMVERIFIER_BYTECODE: ::ethers::core::types::Bytes = ::ethers::core::types::Bytes::from_static( - __BYTECODE, - ); - #[rustfmt::skip] - const __DEPLOYED_BYTECODE: &[u8] = &[ - 96, - 128, - 96, - 64, - 82, - 52, - 128, - 21, - 97, - 0, - 16, - 87, - 96, - 0, - 128, - 253, - 91, - 80, - 96, - 4, - 54, - 16, - 97, - 0, - 43, - 87, - 96, - 0, - 53, - 96, - 224, - 28, - 128, - 99, - 175, - 131, - 161, - 141, - 20, - 97, - 0, - 48, - 87, - 91, - 96, - 0, - 128, - 253, - 91, - 97, - 0, - 67, - 97, - 0, - 62, - 54, - 96, - 4, - 97, - 4, - 11, - 86, - 91, - 97, - 0, - 87, - 86, - 91, - 96, - 64, - 81, - 144, - 21, - 21, - 129, - 82, - 96, - 32, - 1, - 96, - 64, - 81, - 128, - 145, - 3, - 144, - 243, - 91, - 96, - 0, - 97, - 1, - 53, - 86, - 91, - 96, - 32, - 130, - 1, - 53, - 131, - 129, - 16, - 131, - 53, - 133, - 129, - 16, - 132, - 22, - 145, - 144, - 145, - 22, - 145, - 133, - 96, - 3, - 129, - 128, - 133, - 128, - 9, - 133, - 9, - 8, - 134, - 130, - 131, - 9, - 20, - 131, - 22, - 146, - 80, - 80, - 80, - 147, - 146, - 80, - 80, - 80, - 86, - 91, - 129, - 96, - 192, - 82, - 130, - 96, - 224, - 82, - 96, - 0, - 96, - 64, - 96, - 128, - 128, - 96, - 128, - 96, - 6, - 90, - 250, - 144, - 145, - 22, - 147, - 146, - 80, - 80, - 80, - 86, - 91, - 129, - 96, - 192, - 82, - 96, - 0, - 96, - 64, - 96, - 128, - 96, - 96, - 96, - 128, - 96, - 7, - 90, - 250, - 144, - 145, - 22, - 146, - 145, - 80, - 80, - 86, - 91, - 129, - 96, - 0, - 82, - 130, - 96, - 32, - 82, - 97, - 2, - 192, - 81, - 96, - 64, - 82, - 97, - 2, - 224, - 81, - 96, - 96, - 82, - 97, - 3, - 0, - 81, - 96, - 128, - 82, - 97, - 3, - 32, - 81, - 96, - 160, - 82, - 131, - 96, - 192, - 82, - 132, - 96, - 224, - 82, - 97, - 3, - 64, - 81, - 97, - 1, - 0, - 82, - 97, - 3, - 96, - 81, - 97, - 1, - 32, - 82, - 97, - 3, - 128, - 81, - 97, - 1, - 64, - 82, - 97, - 3, - 160, - 81, - 97, - 1, - 96, - 82, - 96, - 0, - 96, - 32, - 96, - 0, - 97, - 1, - 128, - 96, - 0, - 96, - 8, - 90, - 250, - 96, - 0, - 81, - 146, - 22, - 144, - 145, - 22, - 149, - 148, - 80, - 80, - 80, - 80, - 80, - 86, - 91, - 127, - 48, - 100, - 78, - 114, - 225, - 49, - 160, - 41, - 184, - 80, - 69, - 182, - 129, - 129, - 88, - 93, - 151, - 129, - 106, - 145, - 104, - 113, - 202, - 141, - 60, - 32, - 140, - 22, - 216, - 124, - 253, - 71, - 127, - 48, - 100, - 78, - 114, - 225, - 49, - 160, - 41, - 184, - 80, - 69, - 182, - 129, - 129, - 88, - 93, - 40, - 51, - 232, - 72, - 121, - 185, - 112, - 145, - 67, - 225, - 245, - 147, - 240, - 0, - 0, - 1, - 96, - 1, - 96, - 32, - 96, - 64, - 97, - 2, - 32, - 139, - 60, - 97, - 1, - 64, - 97, - 1, - 96, - 97, - 2, - 128, - 139, - 60, - 96, - 100, - 53, - 96, - 128, - 129, - 6, - 96, - 0, - 20, - 130, - 22, - 145, - 80, - 129, - 97, - 1, - 193, - 87, - 115, - 9, - 45, - 206, - 204, - 45, - 141, - 44, - 132, - 14, - 14, - 77, - 237, - 236, - 196, - 13, - 140, - 173, - 204, - 238, - 141, - 96, - 99, - 27, - 96, - 0, - 82, - 96, - 32, - 96, - 0, - 253, - 91, - 96, - 32, - 129, - 96, - 100, - 1, - 1, - 128, - 53, - 96, - 32, - 129, - 2, - 131, - 4, - 96, - 4, - 20, - 132, - 22, - 147, - 80, - 131, - 97, - 2, - 6, - 87, - 127, - 78, - 117, - 109, - 98, - 101, - 114, - 32, - 111, - 102, - 32, - 101, - 118, - 97, - 108, - 117, - 97, - 116, - 105, - 111, - 110, - 32, - 109, - 105, - 115, - 109, - 97, - 116, - 99, - 104, - 0, - 0, - 0, - 96, - 0, - 82, - 96, - 32, - 96, - 0, - 253, - 91, - 96, - 0, - 91, - 129, - 129, - 16, - 21, - 97, - 3, - 177, - 87, - 96, - 32, - 129, - 2, - 96, - 2, - 129, - 2, - 96, - 32, - 130, - 1, - 133, - 1, - 53, - 136, - 97, - 2, - 32, - 81, - 130, - 9, - 97, - 2, - 128, - 81, - 96, - 128, - 82, - 97, - 2, - 160, - 81, - 96, - 160, - 82, - 137, - 3, - 144, - 80, - 97, - 2, - 67, - 129, - 137, - 97, - 0, - 174, - 86, - 91, - 136, - 22, - 151, - 80, - 80, - 134, - 97, - 2, - 119, - 87, - 127, - 70, - 97, - 105, - 108, - 101, - 100, - 32, - 116, - 111, - 32, - 109, - 117, - 108, - 116, - 105, - 112, - 108, - 121, - 32, - 71, - 49, - 32, - 98, - 121, - 32, - 109, - 105, - 110, - 117, - 115, - 95, - 122, - 96, - 0, - 82, - 96, - 32, - 96, - 0, - 253, - 91, - 128, - 96, - 2, - 135, - 4, - 96, - 132, - 1, - 1, - 97, - 2, - 139, - 138, - 130, - 138, - 97, - 0, - 94, - 86, - 91, - 151, - 80, - 135, - 97, - 2, - 196, - 87, - 130, - 96, - 0, - 82, - 127, - 67, - 111, - 109, - 109, - 105, - 116, - 109, - 101, - 110, - 116, - 32, - 112, - 111, - 105, - 110, - 116, - 32, - 105, - 115, - 32, - 110, - 111, - 116, - 32, - 69, - 67, - 32, - 112, - 111, - 105, - 110, - 116, - 96, - 32, - 82, - 128, - 96, - 64, - 82, - 96, - 96, - 96, - 0, - 253, - 91, - 128, - 53, - 146, - 80, - 96, - 32, - 1, - 53, - 97, - 2, - 215, - 129, - 132, - 138, - 97, - 0, - 143, - 86, - 91, - 151, - 80, - 80, - 134, - 97, - 3, - 9, - 87, - 127, - 70, - 97, - 105, - 108, - 101, - 100, - 32, - 116, - 111, - 32, - 97, - 100, - 100, - 32, - 67, - 32, - 97, - 110, - 100, - 32, - 103, - 95, - 116, - 111, - 95, - 109, - 105, - 110, - 117, - 115, - 95, - 122, - 96, - 0, - 82, - 96, - 32, - 96, - 0, - 253, - 91, - 96, - 128, - 81, - 97, - 2, - 64, - 82, - 96, - 160, - 81, - 97, - 2, - 96, - 82, - 96, - 132, - 1, - 144, - 80, - 97, - 3, - 39, - 136, - 130, - 136, - 97, - 0, - 94, - 86, - 91, - 149, - 80, - 133, - 97, - 3, - 88, - 87, - 127, - 79, - 112, - 101, - 110, - 105, - 110, - 103, - 32, - 112, - 111, - 105, - 110, - 116, - 32, - 105, - 115, - 32, - 110, - 111, - 116, - 32, - 69, - 67, - 32, - 112, - 111, - 105, - 110, - 116, - 0, - 0, - 0, - 96, - 0, - 82, - 96, - 32, - 96, - 0, - 253, - 91, - 128, - 53, - 96, - 32, - 130, - 1, - 53, - 145, - 80, - 97, - 3, - 116, - 130, - 130, - 97, - 2, - 96, - 81, - 97, - 2, - 64, - 81, - 139, - 97, - 0, - 201, - 86, - 91, - 135, - 22, - 150, - 80, - 80, - 80, - 132, - 97, - 3, - 169, - 87, - 127, - 70, - 97, - 105, - 108, - 101, - 100, - 32, - 116, - 111, - 32, - 112, - 101, - 114, - 102, - 111, - 114, - 109, - 32, - 112, - 97, - 105, - 114, - 105, - 110, - 103, - 32, - 99, - 104, - 101, - 99, - 107, - 0, - 96, - 0, - 82, - 96, - 32, - 96, - 0, - 253, - 91, - 96, - 1, - 1, - 97, - 2, - 9, - 86, - 91, - 80, - 80, - 80, - 80, - 128, - 96, - 0, - 82, - 96, - 32, - 96, - 0, - 243, - 91, - 96, - 0, - 128, - 131, - 96, - 31, - 132, - 1, - 18, - 97, - 3, - 209, - 87, - 96, - 0, - 128, - 253, - 91, - 80, - 129, - 53, - 103, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 129, - 17, - 21, - 97, - 3, - 233, - 87, - 96, - 0, - 128, - 253, - 91, - 96, - 32, - 131, - 1, - 145, - 80, - 131, - 96, - 32, - 130, - 96, - 5, - 27, - 133, - 1, - 1, - 17, - 21, - 97, - 4, - 4, - 87, - 96, - 0, - 128, - 253, - 91, - 146, - 80, - 146, - 144, - 80, - 86, - 91, - 96, - 0, - 128, - 96, - 0, - 128, - 96, - 0, - 96, - 96, - 134, - 136, - 3, - 18, - 21, - 97, - 4, - 35, - 87, - 96, - 0, - 128, - 253, - 91, - 133, - 53, - 96, - 1, - 96, - 1, - 96, - 160, - 27, - 3, - 129, - 22, - 129, - 20, - 97, - 4, - 58, - 87, - 96, - 0, - 128, - 253, - 91, - 148, - 80, - 96, - 32, - 134, - 1, - 53, - 103, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 128, - 130, - 17, - 21, - 97, - 4, - 87, - 87, - 96, - 0, - 128, - 253, - 91, - 129, - 136, - 1, - 145, - 80, - 136, - 96, - 31, - 131, - 1, - 18, - 97, - 4, - 107, - 87, - 96, - 0, - 128, - 253, - 91, - 129, - 53, - 129, - 129, - 17, - 21, - 97, - 4, - 122, - 87, - 96, - 0, - 128, - 253, - 91, - 137, - 96, - 32, - 130, - 133, - 1, - 1, - 17, - 21, - 97, - 4, - 140, - 87, - 96, - 0, - 128, - 253, - 91, - 96, - 32, - 131, - 1, - 150, - 80, - 128, - 149, - 80, - 80, - 96, - 64, - 136, - 1, - 53, - 145, - 80, - 128, - 130, - 17, - 21, - 97, - 4, - 170, - 87, - 96, - 0, - 128, - 253, - 91, - 80, - 97, - 4, - 183, - 136, - 130, - 137, - 1, - 97, - 3, - 191, - 86, - 91, - 150, - 153, - 149, - 152, - 80, - 147, - 150, - 80, - 146, - 148, - 147, - 146, - 80, - 80, - 80, - 86, - 254, - 162, - 100, - 105, - 112, - 102, - 115, - 88, - 34, - 18, - 32, - 49, - 140, - 108, - 158, - 187, - 17, - 230, - 122, - 206, - 151, - 147, - 131, - 228, - 207, - 190, - 199, - 252, - 160, - 161, - 2, - 236, - 137, - 223, - 59, - 105, - 5, - 20, - 202, - 193, - 71, - 38, - 225, - 100, - 115, - 111, - 108, - 99, - 67, - 0, - 8, - 18, - 0, - 51, - ]; - ///The deployed bytecode of the contract. - pub static GRANDSUMVERIFIER_DEPLOYED_BYTECODE: ::ethers::core::types::Bytes = ::ethers::core::types::Bytes::from_static( - __DEPLOYED_BYTECODE, - ); - pub struct GrandSumVerifier(::ethers::contract::Contract); - impl ::core::clone::Clone for GrandSumVerifier { - fn clone(&self) -> Self { - Self(::core::clone::Clone::clone(&self.0)) - } - } - impl ::core::ops::Deref for GrandSumVerifier { - type Target = ::ethers::contract::Contract; - fn deref(&self) -> &Self::Target { - &self.0 - } - } - impl ::core::ops::DerefMut for GrandSumVerifier { - fn deref_mut(&mut self) -> &mut Self::Target { - &mut self.0 - } - } - impl ::core::fmt::Debug for GrandSumVerifier { - fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { - f.debug_tuple(stringify!(GrandSumVerifier)).field(&self.address()).finish() - } - } - impl GrandSumVerifier { - /// Creates a new contract instance with the specified `ethers` client at - /// `address`. The contract derefs to a `ethers::Contract` object. - pub fn new>( - address: T, - client: ::std::sync::Arc, - ) -> Self { - Self( - ::ethers::contract::Contract::new( - address.into(), - GRANDSUMVERIFIER_ABI.clone(), - client, - ), - ) - } - /// Constructs the general purpose `Deployer` instance based on the provided constructor arguments and sends it. - /// Returns a new instance of a deployer that returns an instance of this contract after sending the transaction - /// - /// Notes: - /// - If there are no constructor arguments, you should pass `()` as the argument. - /// - The default poll duration is 7 seconds. - /// - The default number of confirmations is 1 block. - /// - /// - /// # Example - /// - /// Generate contract bindings with `abigen!` and deploy a new contract instance. - /// - /// *Note*: this requires a `bytecode` and `abi` object in the `greeter.json` artifact. - /// - /// ```ignore - /// # async fn deploy(client: ::std::sync::Arc) { - /// abigen!(Greeter, "../greeter.json"); - /// - /// let greeter_contract = Greeter::deploy(client, "Hello world!".to_string()).unwrap().send().await.unwrap(); - /// let msg = greeter_contract.greet().call().await.unwrap(); - /// # } - /// ``` - pub fn deploy( - client: ::std::sync::Arc, - constructor_args: T, - ) -> ::core::result::Result< - ::ethers::contract::builders::ContractDeployer, - ::ethers::contract::ContractError, - > { - let factory = ::ethers::contract::ContractFactory::new( - GRANDSUMVERIFIER_ABI.clone(), - GRANDSUMVERIFIER_BYTECODE.clone().into(), - client, - ); - let deployer = factory.deploy(constructor_args)?; - let deployer = ::ethers::contract::ContractDeployer::new(deployer); - Ok(deployer) - } - ///Calls the contract's `verifyProof` (0xaf83a18d) function - pub fn verify_proof( - &self, - vk: ::ethers::core::types::Address, - proof: ::ethers::core::types::Bytes, - values: ::std::vec::Vec<::ethers::core::types::U256>, - ) -> ::ethers::contract::builders::ContractCall { - self.0 - .method_hash([175, 131, 161, 141], (vk, proof, values)) - .expect("method not found (this should never happen)") - } - } - impl From<::ethers::contract::Contract> - for GrandSumVerifier { - fn from(contract: ::ethers::contract::Contract) -> Self { - Self::new(contract.address(), contract.client()) - } - } - ///Container type for all input parameters for the `verifyProof` function with signature `verifyProof(address,bytes,uint256[])` and selector `0xaf83a18d` - #[derive( - Clone, - ::ethers::contract::EthCall, - ::ethers::contract::EthDisplay, - Default, - Debug, - PartialEq, - Eq, - Hash - )] - #[ethcall(name = "verifyProof", abi = "verifyProof(address,bytes,uint256[])")] - pub struct VerifyProofCall { - pub vk: ::ethers::core::types::Address, - pub proof: ::ethers::core::types::Bytes, - pub values: ::std::vec::Vec<::ethers::core::types::U256>, - } - ///Container type for all return fields from the `verifyProof` function with signature `verifyProof(address,bytes,uint256[])` and selector `0xaf83a18d` - #[derive( - Clone, - ::ethers::contract::EthAbiType, - ::ethers::contract::EthAbiCodec, - Default, - Debug, - PartialEq, - Eq, - Hash - )] - pub struct VerifyProofReturn(pub bool); -} diff --git a/backend/src/contracts/generated/inclusion_verifier.rs b/backend/src/contracts/generated/inclusion_verifier.rs deleted file mode 100644 index 32ad6740..00000000 --- a/backend/src/contracts/generated/inclusion_verifier.rs +++ /dev/null @@ -1,2422 +0,0 @@ -pub use inclusion_verifier::*; -/// This module was auto-generated with ethers-rs Abigen. -/// More information at: -#[allow( - clippy::enum_variant_names, - clippy::too_many_arguments, - clippy::upper_case_acronyms, - clippy::type_complexity, - dead_code, - non_camel_case_types, -)] -pub mod inclusion_verifier { - #[rustfmt::skip] - const __ABI: &str = "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"vk\",\"type\":\"address\",\"components\":[]},{\"internalType\":\"bytes\",\"name\":\"proofs\",\"type\":\"bytes\",\"components\":[]},{\"internalType\":\"uint256[]\",\"name\":\"challenges\",\"type\":\"uint256[]\",\"components\":[]},{\"internalType\":\"uint256[]\",\"name\":\"values\",\"type\":\"uint256[]\",\"components\":[]}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"verifyProof\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\",\"components\":[]}]}]"; - ///The parsed JSON ABI of the contract. - pub static INCLUSIONVERIFIER_ABI: ::ethers::contract::Lazy< - ::ethers::core::abi::Abi, - > = ::ethers::contract::Lazy::new(|| { - ::ethers::core::utils::__serde_json::from_str(__ABI) - .expect("ABI is always valid") - }); - #[rustfmt::skip] - const __BYTECODE: &[u8] = &[ - 96, - 128, - 96, - 64, - 82, - 52, - 128, - 21, - 97, - 0, - 16, - 87, - 96, - 0, - 128, - 253, - 91, - 80, - 97, - 4, - 89, - 128, - 97, - 0, - 32, - 96, - 0, - 57, - 96, - 0, - 243, - 254, - 96, - 128, - 96, - 64, - 82, - 52, - 128, - 21, - 97, - 0, - 16, - 87, - 96, - 0, - 128, - 253, - 91, - 80, - 96, - 4, - 54, - 16, - 97, - 0, - 43, - 87, - 96, - 0, - 53, - 96, - 224, - 28, - 128, - 99, - 71, - 246, - 181, - 170, - 20, - 97, - 0, - 48, - 87, - 91, - 96, - 0, - 128, - 253, - 91, - 97, - 0, - 67, - 97, - 0, - 62, - 54, - 96, - 4, - 97, - 3, - 60, - 86, - 91, - 97, - 0, - 87, - 86, - 91, - 96, - 64, - 81, - 144, - 21, - 21, - 129, - 82, - 96, - 32, - 1, - 96, - 64, - 81, - 128, - 145, - 3, - 144, - 243, - 91, - 96, - 0, - 97, - 1, - 53, - 86, - 91, - 96, - 32, - 130, - 1, - 53, - 131, - 129, - 16, - 131, - 53, - 133, - 129, - 16, - 132, - 22, - 145, - 144, - 145, - 22, - 145, - 133, - 96, - 3, - 129, - 128, - 133, - 128, - 9, - 133, - 9, - 8, - 134, - 130, - 131, - 9, - 20, - 131, - 22, - 146, - 80, - 80, - 80, - 147, - 146, - 80, - 80, - 80, - 86, - 91, - 129, - 96, - 192, - 82, - 130, - 96, - 224, - 82, - 96, - 0, - 96, - 64, - 96, - 128, - 128, - 96, - 128, - 96, - 6, - 90, - 250, - 144, - 145, - 22, - 147, - 146, - 80, - 80, - 80, - 86, - 91, - 129, - 96, - 192, - 82, - 96, - 0, - 96, - 64, - 96, - 128, - 96, - 96, - 96, - 128, - 96, - 7, - 90, - 250, - 144, - 145, - 22, - 146, - 145, - 80, - 80, - 86, - 91, - 129, - 96, - 0, - 82, - 130, - 96, - 32, - 82, - 97, - 2, - 128, - 81, - 96, - 64, - 82, - 97, - 2, - 160, - 81, - 96, - 96, - 82, - 97, - 2, - 192, - 81, - 96, - 128, - 82, - 97, - 2, - 224, - 81, - 96, - 160, - 82, - 131, - 96, - 192, - 82, - 132, - 96, - 224, - 82, - 97, - 3, - 0, - 81, - 97, - 1, - 0, - 82, - 97, - 3, - 32, - 81, - 97, - 1, - 32, - 82, - 97, - 3, - 64, - 81, - 97, - 1, - 64, - 82, - 97, - 3, - 96, - 81, - 97, - 1, - 96, - 82, - 96, - 0, - 96, - 32, - 96, - 0, - 97, - 1, - 128, - 96, - 0, - 96, - 8, - 90, - 250, - 96, - 0, - 81, - 146, - 22, - 144, - 145, - 22, - 149, - 148, - 80, - 80, - 80, - 80, - 80, - 86, - 91, - 127, - 48, - 100, - 78, - 114, - 225, - 49, - 160, - 41, - 184, - 80, - 69, - 182, - 129, - 129, - 88, - 93, - 151, - 129, - 106, - 145, - 104, - 113, - 202, - 141, - 60, - 32, - 140, - 22, - 216, - 124, - 253, - 71, - 127, - 48, - 100, - 78, - 114, - 225, - 49, - 160, - 41, - 184, - 80, - 69, - 182, - 129, - 129, - 88, - 93, - 40, - 51, - 232, - 72, - 121, - 185, - 112, - 145, - 67, - 225, - 245, - 147, - 240, - 0, - 0, - 1, - 96, - 1, - 96, - 192, - 97, - 1, - 96, - 97, - 2, - 64, - 141, - 60, - 96, - 132, - 53, - 96, - 128, - 129, - 6, - 96, - 0, - 20, - 130, - 22, - 145, - 80, - 129, - 97, - 1, - 155, - 87, - 96, - 0, - 128, - 253, - 91, - 96, - 32, - 129, - 96, - 132, - 1, - 1, - 128, - 53, - 96, - 4, - 129, - 20, - 132, - 22, - 147, - 80, - 131, - 97, - 1, - 182, - 87, - 96, - 0, - 128, - 253, - 91, - 96, - 32, - 130, - 1, - 53, - 97, - 3, - 0, - 82, - 96, - 64, - 130, - 1, - 53, - 97, - 3, - 32, - 82, - 96, - 96, - 130, - 1, - 53, - 97, - 3, - 64, - 82, - 96, - 128, - 130, - 1, - 53, - 97, - 3, - 96, - 82, - 96, - 32, - 128, - 130, - 2, - 131, - 1, - 1, - 145, - 80, - 80, - 128, - 53, - 96, - 32, - 129, - 2, - 131, - 4, - 96, - 4, - 20, - 132, - 22, - 147, - 80, - 131, - 97, - 1, - 254, - 87, - 96, - 0, - 128, - 253, - 91, - 96, - 0, - 91, - 129, - 129, - 16, - 21, - 97, - 2, - 226, - 87, - 97, - 2, - 64, - 81, - 96, - 128, - 82, - 97, - 2, - 96, - 81, - 96, - 160, - 82, - 96, - 32, - 129, - 129, - 2, - 132, - 1, - 1, - 53, - 134, - 3, - 96, - 192, - 129, - 144, - 82, - 96, - 64, - 130, - 2, - 97, - 2, - 53, - 130, - 136, - 97, - 0, - 174, - 86, - 91, - 135, - 22, - 150, - 80, - 134, - 97, - 2, - 67, - 87, - 96, - 0, - 128, - 253, - 91, - 128, - 96, - 2, - 135, - 4, - 96, - 164, - 1, - 1, - 145, - 80, - 97, - 2, - 89, - 137, - 131, - 137, - 97, - 0, - 94, - 86, - 91, - 150, - 80, - 134, - 97, - 2, - 101, - 87, - 96, - 0, - 128, - 253, - 91, - 96, - 32, - 130, - 1, - 53, - 145, - 53, - 97, - 2, - 119, - 131, - 130, - 138, - 97, - 0, - 143, - 86, - 91, - 151, - 80, - 80, - 134, - 97, - 2, - 132, - 87, - 96, - 0, - 128, - 253, - 91, - 96, - 128, - 81, - 97, - 2, - 0, - 82, - 96, - 160, - 81, - 97, - 2, - 32, - 82, - 96, - 164, - 1, - 144, - 80, - 97, - 2, - 162, - 136, - 130, - 136, - 97, - 0, - 94, - 86, - 91, - 149, - 80, - 133, - 97, - 2, - 174, - 87, - 96, - 0, - 128, - 253, - 91, - 128, - 53, - 96, - 32, - 130, - 1, - 53, - 145, - 80, - 97, - 2, - 202, - 130, - 130, - 97, - 2, - 32, - 81, - 97, - 2, - 0, - 81, - 139, - 97, - 0, - 201, - 86, - 91, - 135, - 22, - 150, - 80, - 80, - 80, - 132, - 97, - 2, - 218, - 87, - 96, - 0, - 128, - 253, - 91, - 96, - 1, - 1, - 97, - 2, - 1, - 86, - 91, - 80, - 80, - 80, - 80, - 128, - 96, - 0, - 82, - 96, - 32, - 96, - 0, - 243, - 91, - 96, - 0, - 128, - 131, - 96, - 31, - 132, - 1, - 18, - 97, - 3, - 2, - 87, - 96, - 0, - 128, - 253, - 91, - 80, - 129, - 53, - 103, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 129, - 17, - 21, - 97, - 3, - 26, - 87, - 96, - 0, - 128, - 253, - 91, - 96, - 32, - 131, - 1, - 145, - 80, - 131, - 96, - 32, - 130, - 96, - 5, - 27, - 133, - 1, - 1, - 17, - 21, - 97, - 3, - 53, - 87, - 96, - 0, - 128, - 253, - 91, - 146, - 80, - 146, - 144, - 80, - 86, - 91, - 96, - 0, - 128, - 96, - 0, - 128, - 96, - 0, - 128, - 96, - 0, - 96, - 128, - 136, - 138, - 3, - 18, - 21, - 97, - 3, - 87, - 87, - 96, - 0, - 128, - 253, - 91, - 135, - 53, - 96, - 1, - 96, - 1, - 96, - 160, - 27, - 3, - 129, - 22, - 129, - 20, - 97, - 3, - 110, - 87, - 96, - 0, - 128, - 253, - 91, - 150, - 80, - 96, - 32, - 136, - 1, - 53, - 103, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 128, - 130, - 17, - 21, - 97, - 3, - 139, - 87, - 96, - 0, - 128, - 253, - 91, - 129, - 138, - 1, - 145, - 80, - 138, - 96, - 31, - 131, - 1, - 18, - 97, - 3, - 159, - 87, - 96, - 0, - 128, - 253, - 91, - 129, - 53, - 129, - 129, - 17, - 21, - 97, - 3, - 174, - 87, - 96, - 0, - 128, - 253, - 91, - 139, - 96, - 32, - 130, - 133, - 1, - 1, - 17, - 21, - 97, - 3, - 192, - 87, - 96, - 0, - 128, - 253, - 91, - 96, - 32, - 131, - 1, - 152, - 80, - 128, - 151, - 80, - 80, - 96, - 64, - 138, - 1, - 53, - 145, - 80, - 128, - 130, - 17, - 21, - 97, - 3, - 222, - 87, - 96, - 0, - 128, - 253, - 91, - 97, - 3, - 234, - 139, - 131, - 140, - 1, - 97, - 2, - 240, - 86, - 91, - 144, - 150, - 80, - 148, - 80, - 96, - 96, - 138, - 1, - 53, - 145, - 80, - 128, - 130, - 17, - 21, - 97, - 4, - 3, - 87, - 96, - 0, - 128, - 253, - 91, - 80, - 97, - 4, - 16, - 138, - 130, - 139, - 1, - 97, - 2, - 240, - 86, - 91, - 152, - 155, - 151, - 154, - 80, - 149, - 152, - 80, - 147, - 150, - 146, - 149, - 146, - 147, - 80, - 80, - 80, - 86, - 254, - 162, - 100, - 105, - 112, - 102, - 115, - 88, - 34, - 18, - 32, - 126, - 94, - 18, - 135, - 237, - 192, - 106, - 176, - 138, - 117, - 148, - 175, - 188, - 5, - 29, - 238, - 102, - 42, - 95, - 89, - 105, - 55, - 42, - 182, - 85, - 202, - 193, - 11, - 170, - 77, - 47, - 178, - 100, - 115, - 111, - 108, - 99, - 67, - 0, - 8, - 18, - 0, - 51, - ]; - ///The bytecode of the contract. - pub static INCLUSIONVERIFIER_BYTECODE: ::ethers::core::types::Bytes = ::ethers::core::types::Bytes::from_static( - __BYTECODE, - ); - #[rustfmt::skip] - const __DEPLOYED_BYTECODE: &[u8] = &[ - 96, - 128, - 96, - 64, - 82, - 52, - 128, - 21, - 97, - 0, - 16, - 87, - 96, - 0, - 128, - 253, - 91, - 80, - 96, - 4, - 54, - 16, - 97, - 0, - 43, - 87, - 96, - 0, - 53, - 96, - 224, - 28, - 128, - 99, - 71, - 246, - 181, - 170, - 20, - 97, - 0, - 48, - 87, - 91, - 96, - 0, - 128, - 253, - 91, - 97, - 0, - 67, - 97, - 0, - 62, - 54, - 96, - 4, - 97, - 3, - 60, - 86, - 91, - 97, - 0, - 87, - 86, - 91, - 96, - 64, - 81, - 144, - 21, - 21, - 129, - 82, - 96, - 32, - 1, - 96, - 64, - 81, - 128, - 145, - 3, - 144, - 243, - 91, - 96, - 0, - 97, - 1, - 53, - 86, - 91, - 96, - 32, - 130, - 1, - 53, - 131, - 129, - 16, - 131, - 53, - 133, - 129, - 16, - 132, - 22, - 145, - 144, - 145, - 22, - 145, - 133, - 96, - 3, - 129, - 128, - 133, - 128, - 9, - 133, - 9, - 8, - 134, - 130, - 131, - 9, - 20, - 131, - 22, - 146, - 80, - 80, - 80, - 147, - 146, - 80, - 80, - 80, - 86, - 91, - 129, - 96, - 192, - 82, - 130, - 96, - 224, - 82, - 96, - 0, - 96, - 64, - 96, - 128, - 128, - 96, - 128, - 96, - 6, - 90, - 250, - 144, - 145, - 22, - 147, - 146, - 80, - 80, - 80, - 86, - 91, - 129, - 96, - 192, - 82, - 96, - 0, - 96, - 64, - 96, - 128, - 96, - 96, - 96, - 128, - 96, - 7, - 90, - 250, - 144, - 145, - 22, - 146, - 145, - 80, - 80, - 86, - 91, - 129, - 96, - 0, - 82, - 130, - 96, - 32, - 82, - 97, - 2, - 128, - 81, - 96, - 64, - 82, - 97, - 2, - 160, - 81, - 96, - 96, - 82, - 97, - 2, - 192, - 81, - 96, - 128, - 82, - 97, - 2, - 224, - 81, - 96, - 160, - 82, - 131, - 96, - 192, - 82, - 132, - 96, - 224, - 82, - 97, - 3, - 0, - 81, - 97, - 1, - 0, - 82, - 97, - 3, - 32, - 81, - 97, - 1, - 32, - 82, - 97, - 3, - 64, - 81, - 97, - 1, - 64, - 82, - 97, - 3, - 96, - 81, - 97, - 1, - 96, - 82, - 96, - 0, - 96, - 32, - 96, - 0, - 97, - 1, - 128, - 96, - 0, - 96, - 8, - 90, - 250, - 96, - 0, - 81, - 146, - 22, - 144, - 145, - 22, - 149, - 148, - 80, - 80, - 80, - 80, - 80, - 86, - 91, - 127, - 48, - 100, - 78, - 114, - 225, - 49, - 160, - 41, - 184, - 80, - 69, - 182, - 129, - 129, - 88, - 93, - 151, - 129, - 106, - 145, - 104, - 113, - 202, - 141, - 60, - 32, - 140, - 22, - 216, - 124, - 253, - 71, - 127, - 48, - 100, - 78, - 114, - 225, - 49, - 160, - 41, - 184, - 80, - 69, - 182, - 129, - 129, - 88, - 93, - 40, - 51, - 232, - 72, - 121, - 185, - 112, - 145, - 67, - 225, - 245, - 147, - 240, - 0, - 0, - 1, - 96, - 1, - 96, - 192, - 97, - 1, - 96, - 97, - 2, - 64, - 141, - 60, - 96, - 132, - 53, - 96, - 128, - 129, - 6, - 96, - 0, - 20, - 130, - 22, - 145, - 80, - 129, - 97, - 1, - 155, - 87, - 96, - 0, - 128, - 253, - 91, - 96, - 32, - 129, - 96, - 132, - 1, - 1, - 128, - 53, - 96, - 4, - 129, - 20, - 132, - 22, - 147, - 80, - 131, - 97, - 1, - 182, - 87, - 96, - 0, - 128, - 253, - 91, - 96, - 32, - 130, - 1, - 53, - 97, - 3, - 0, - 82, - 96, - 64, - 130, - 1, - 53, - 97, - 3, - 32, - 82, - 96, - 96, - 130, - 1, - 53, - 97, - 3, - 64, - 82, - 96, - 128, - 130, - 1, - 53, - 97, - 3, - 96, - 82, - 96, - 32, - 128, - 130, - 2, - 131, - 1, - 1, - 145, - 80, - 80, - 128, - 53, - 96, - 32, - 129, - 2, - 131, - 4, - 96, - 4, - 20, - 132, - 22, - 147, - 80, - 131, - 97, - 1, - 254, - 87, - 96, - 0, - 128, - 253, - 91, - 96, - 0, - 91, - 129, - 129, - 16, - 21, - 97, - 2, - 226, - 87, - 97, - 2, - 64, - 81, - 96, - 128, - 82, - 97, - 2, - 96, - 81, - 96, - 160, - 82, - 96, - 32, - 129, - 129, - 2, - 132, - 1, - 1, - 53, - 134, - 3, - 96, - 192, - 129, - 144, - 82, - 96, - 64, - 130, - 2, - 97, - 2, - 53, - 130, - 136, - 97, - 0, - 174, - 86, - 91, - 135, - 22, - 150, - 80, - 134, - 97, - 2, - 67, - 87, - 96, - 0, - 128, - 253, - 91, - 128, - 96, - 2, - 135, - 4, - 96, - 164, - 1, - 1, - 145, - 80, - 97, - 2, - 89, - 137, - 131, - 137, - 97, - 0, - 94, - 86, - 91, - 150, - 80, - 134, - 97, - 2, - 101, - 87, - 96, - 0, - 128, - 253, - 91, - 96, - 32, - 130, - 1, - 53, - 145, - 53, - 97, - 2, - 119, - 131, - 130, - 138, - 97, - 0, - 143, - 86, - 91, - 151, - 80, - 80, - 134, - 97, - 2, - 132, - 87, - 96, - 0, - 128, - 253, - 91, - 96, - 128, - 81, - 97, - 2, - 0, - 82, - 96, - 160, - 81, - 97, - 2, - 32, - 82, - 96, - 164, - 1, - 144, - 80, - 97, - 2, - 162, - 136, - 130, - 136, - 97, - 0, - 94, - 86, - 91, - 149, - 80, - 133, - 97, - 2, - 174, - 87, - 96, - 0, - 128, - 253, - 91, - 128, - 53, - 96, - 32, - 130, - 1, - 53, - 145, - 80, - 97, - 2, - 202, - 130, - 130, - 97, - 2, - 32, - 81, - 97, - 2, - 0, - 81, - 139, - 97, - 0, - 201, - 86, - 91, - 135, - 22, - 150, - 80, - 80, - 80, - 132, - 97, - 2, - 218, - 87, - 96, - 0, - 128, - 253, - 91, - 96, - 1, - 1, - 97, - 2, - 1, - 86, - 91, - 80, - 80, - 80, - 80, - 128, - 96, - 0, - 82, - 96, - 32, - 96, - 0, - 243, - 91, - 96, - 0, - 128, - 131, - 96, - 31, - 132, - 1, - 18, - 97, - 3, - 2, - 87, - 96, - 0, - 128, - 253, - 91, - 80, - 129, - 53, - 103, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 129, - 17, - 21, - 97, - 3, - 26, - 87, - 96, - 0, - 128, - 253, - 91, - 96, - 32, - 131, - 1, - 145, - 80, - 131, - 96, - 32, - 130, - 96, - 5, - 27, - 133, - 1, - 1, - 17, - 21, - 97, - 3, - 53, - 87, - 96, - 0, - 128, - 253, - 91, - 146, - 80, - 146, - 144, - 80, - 86, - 91, - 96, - 0, - 128, - 96, - 0, - 128, - 96, - 0, - 128, - 96, - 0, - 96, - 128, - 136, - 138, - 3, - 18, - 21, - 97, - 3, - 87, - 87, - 96, - 0, - 128, - 253, - 91, - 135, - 53, - 96, - 1, - 96, - 1, - 96, - 160, - 27, - 3, - 129, - 22, - 129, - 20, - 97, - 3, - 110, - 87, - 96, - 0, - 128, - 253, - 91, - 150, - 80, - 96, - 32, - 136, - 1, - 53, - 103, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 128, - 130, - 17, - 21, - 97, - 3, - 139, - 87, - 96, - 0, - 128, - 253, - 91, - 129, - 138, - 1, - 145, - 80, - 138, - 96, - 31, - 131, - 1, - 18, - 97, - 3, - 159, - 87, - 96, - 0, - 128, - 253, - 91, - 129, - 53, - 129, - 129, - 17, - 21, - 97, - 3, - 174, - 87, - 96, - 0, - 128, - 253, - 91, - 139, - 96, - 32, - 130, - 133, - 1, - 1, - 17, - 21, - 97, - 3, - 192, - 87, - 96, - 0, - 128, - 253, - 91, - 96, - 32, - 131, - 1, - 152, - 80, - 128, - 151, - 80, - 80, - 96, - 64, - 138, - 1, - 53, - 145, - 80, - 128, - 130, - 17, - 21, - 97, - 3, - 222, - 87, - 96, - 0, - 128, - 253, - 91, - 97, - 3, - 234, - 139, - 131, - 140, - 1, - 97, - 2, - 240, - 86, - 91, - 144, - 150, - 80, - 148, - 80, - 96, - 96, - 138, - 1, - 53, - 145, - 80, - 128, - 130, - 17, - 21, - 97, - 4, - 3, - 87, - 96, - 0, - 128, - 253, - 91, - 80, - 97, - 4, - 16, - 138, - 130, - 139, - 1, - 97, - 2, - 240, - 86, - 91, - 152, - 155, - 151, - 154, - 80, - 149, - 152, - 80, - 147, - 150, - 146, - 149, - 146, - 147, - 80, - 80, - 80, - 86, - 254, - 162, - 100, - 105, - 112, - 102, - 115, - 88, - 34, - 18, - 32, - 126, - 94, - 18, - 135, - 237, - 192, - 106, - 176, - 138, - 117, - 148, - 175, - 188, - 5, - 29, - 238, - 102, - 42, - 95, - 89, - 105, - 55, - 42, - 182, - 85, - 202, - 193, - 11, - 170, - 77, - 47, - 178, - 100, - 115, - 111, - 108, - 99, - 67, - 0, - 8, - 18, - 0, - 51, - ]; - ///The deployed bytecode of the contract. - pub static INCLUSIONVERIFIER_DEPLOYED_BYTECODE: ::ethers::core::types::Bytes = ::ethers::core::types::Bytes::from_static( - __DEPLOYED_BYTECODE, - ); - pub struct InclusionVerifier(::ethers::contract::Contract); - impl ::core::clone::Clone for InclusionVerifier { - fn clone(&self) -> Self { - Self(::core::clone::Clone::clone(&self.0)) - } - } - impl ::core::ops::Deref for InclusionVerifier { - type Target = ::ethers::contract::Contract; - fn deref(&self) -> &Self::Target { - &self.0 - } - } - impl ::core::ops::DerefMut for InclusionVerifier { - fn deref_mut(&mut self) -> &mut Self::Target { - &mut self.0 - } - } - impl ::core::fmt::Debug for InclusionVerifier { - fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { - f.debug_tuple(stringify!(InclusionVerifier)).field(&self.address()).finish() - } - } - impl InclusionVerifier { - /// Creates a new contract instance with the specified `ethers` client at - /// `address`. The contract derefs to a `ethers::Contract` object. - pub fn new>( - address: T, - client: ::std::sync::Arc, - ) -> Self { - Self( - ::ethers::contract::Contract::new( - address.into(), - INCLUSIONVERIFIER_ABI.clone(), - client, - ), - ) - } - /// Constructs the general purpose `Deployer` instance based on the provided constructor arguments and sends it. - /// Returns a new instance of a deployer that returns an instance of this contract after sending the transaction - /// - /// Notes: - /// - If there are no constructor arguments, you should pass `()` as the argument. - /// - The default poll duration is 7 seconds. - /// - The default number of confirmations is 1 block. - /// - /// - /// # Example - /// - /// Generate contract bindings with `abigen!` and deploy a new contract instance. - /// - /// *Note*: this requires a `bytecode` and `abi` object in the `greeter.json` artifact. - /// - /// ```ignore - /// # async fn deploy(client: ::std::sync::Arc) { - /// abigen!(Greeter, "../greeter.json"); - /// - /// let greeter_contract = Greeter::deploy(client, "Hello world!".to_string()).unwrap().send().await.unwrap(); - /// let msg = greeter_contract.greet().call().await.unwrap(); - /// # } - /// ``` - pub fn deploy( - client: ::std::sync::Arc, - constructor_args: T, - ) -> ::core::result::Result< - ::ethers::contract::builders::ContractDeployer, - ::ethers::contract::ContractError, - > { - let factory = ::ethers::contract::ContractFactory::new( - INCLUSIONVERIFIER_ABI.clone(), - INCLUSIONVERIFIER_BYTECODE.clone().into(), - client, - ); - let deployer = factory.deploy(constructor_args)?; - let deployer = ::ethers::contract::ContractDeployer::new(deployer); - Ok(deployer) - } - ///Calls the contract's `verifyProof` (0x47f6b5aa) function - pub fn verify_proof( - &self, - vk: ::ethers::core::types::Address, - proofs: ::ethers::core::types::Bytes, - challenges: ::std::vec::Vec<::ethers::core::types::U256>, - values: ::std::vec::Vec<::ethers::core::types::U256>, - ) -> ::ethers::contract::builders::ContractCall { - self.0 - .method_hash([71, 246, 181, 170], (vk, proofs, challenges, values)) - .expect("method not found (this should never happen)") - } - } - impl From<::ethers::contract::Contract> - for InclusionVerifier { - fn from(contract: ::ethers::contract::Contract) -> Self { - Self::new(contract.address(), contract.client()) - } - } - ///Container type for all input parameters for the `verifyProof` function with signature `verifyProof(address,bytes,uint256[],uint256[])` and selector `0x47f6b5aa` - #[derive( - Clone, - ::ethers::contract::EthCall, - ::ethers::contract::EthDisplay, - Default, - Debug, - PartialEq, - Eq, - Hash - )] - #[ethcall( - name = "verifyProof", - abi = "verifyProof(address,bytes,uint256[],uint256[])" - )] - pub struct VerifyProofCall { - pub vk: ::ethers::core::types::Address, - pub proofs: ::ethers::core::types::Bytes, - pub challenges: ::std::vec::Vec<::ethers::core::types::U256>, - pub values: ::std::vec::Vec<::ethers::core::types::U256>, - } - ///Container type for all return fields from the `verifyProof` function with signature `verifyProof(address,bytes,uint256[],uint256[])` and selector `0x47f6b5aa` - #[derive( - Clone, - ::ethers::contract::EthAbiType, - ::ethers::contract::EthAbiCodec, - Default, - Debug, - PartialEq, - Eq, - Hash - )] - pub struct VerifyProofReturn(pub bool); -} diff --git a/backend/src/contracts/generated/mod.rs b/backend/src/contracts/generated/mod.rs deleted file mode 100644 index b1fbeba7..00000000 --- a/backend/src/contracts/generated/mod.rs +++ /dev/null @@ -1,5 +0,0 @@ -pub mod summa_contract; -pub mod verifying_key; -pub mod snark_verifier; -pub mod grandsum_verifier; -pub mod inclusion_verifier; \ No newline at end of file diff --git a/backend/src/contracts/generated/snark_verifier.rs b/backend/src/contracts/generated/snark_verifier.rs deleted file mode 100644 index 31a87475..00000000 --- a/backend/src/contracts/generated/snark_verifier.rs +++ /dev/null @@ -1,17355 +0,0 @@ -pub use verifier::*; -/// This module was auto-generated with ethers-rs Abigen. -/// More information at: -#[allow( - clippy::enum_variant_names, - clippy::too_many_arguments, - clippy::upper_case_acronyms, - clippy::type_complexity, - dead_code, - non_camel_case_types, -)] -pub mod verifier { - #[rustfmt::skip] - const __ABI: &str = "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"vk\",\"type\":\"address\",\"components\":[]},{\"internalType\":\"bytes\",\"name\":\"proof\",\"type\":\"bytes\",\"components\":[]},{\"internalType\":\"uint256[]\",\"name\":\"instances\",\"type\":\"uint256[]\",\"components\":[]}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"verifyProof\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\",\"components\":[]}]}]"; - ///The parsed JSON ABI of the contract. - pub static VERIFIER_ABI: ::ethers::contract::Lazy<::ethers::core::abi::Abi> = ::ethers::contract::Lazy::new(|| - ::ethers::core::utils::__serde_json::from_str(__ABI).expect("ABI is always valid")); - #[rustfmt::skip] - const __BYTECODE: &[u8] = &[ - 96, - 128, - 96, - 64, - 82, - 52, - 128, - 21, - 97, - 0, - 16, - 87, - 96, - 0, - 128, - 253, - 91, - 80, - 97, - 33, - 136, - 128, - 97, - 0, - 32, - 96, - 0, - 57, - 96, - 0, - 243, - 254, - 96, - 128, - 96, - 64, - 82, - 52, - 128, - 21, - 97, - 0, - 16, - 87, - 96, - 0, - 128, - 253, - 91, - 80, - 96, - 4, - 54, - 16, - 97, - 0, - 43, - 87, - 96, - 0, - 53, - 96, - 224, - 28, - 128, - 99, - 175, - 131, - 161, - 141, - 20, - 97, - 0, - 48, - 87, - 91, - 96, - 0, - 128, - 253, - 91, - 97, - 0, - 67, - 97, - 0, - 62, - 54, - 96, - 4, - 97, - 32, - 149, - 86, - 91, - 97, - 0, - 87, - 86, - 91, - 96, - 64, - 81, - 144, - 21, - 21, - 129, - 82, - 96, - 32, - 1, - 96, - 64, - 81, - 128, - 145, - 3, - 144, - 243, - 91, - 96, - 0, - 97, - 2, - 99, - 86, - 91, - 96, - 0, - 128, - 96, - 0, - 132, - 53, - 96, - 32, - 134, - 1, - 53, - 136, - 130, - 16, - 134, - 22, - 148, - 80, - 136, - 129, - 16, - 133, - 22, - 148, - 80, - 136, - 96, - 3, - 138, - 139, - 133, - 134, - 9, - 133, - 9, - 8, - 137, - 130, - 131, - 9, - 146, - 137, - 82, - 96, - 32, - 137, - 1, - 145, - 144, - 145, - 82, - 20, - 146, - 144, - 146, - 22, - 150, - 96, - 64, - 148, - 133, - 1, - 150, - 80, - 147, - 144, - 148, - 1, - 147, - 80, - 80, - 80, - 86, - 91, - 96, - 1, - 96, - 32, - 83, - 96, - 33, - 96, - 0, - 144, - 129, - 32, - 146, - 131, - 6, - 130, - 82, - 145, - 144, - 145, - 82, - 96, - 32, - 1, - 144, - 86, - 91, - 96, - 0, - 131, - 131, - 81, - 96, - 32, - 133, - 1, - 91, - 96, - 32, - 135, - 3, - 129, - 16, - 21, - 97, - 0, - 240, - 87, - 135, - 129, - 81, - 131, - 9, - 128, - 132, - 82, - 96, - 32, - 147, - 132, - 1, - 147, - 144, - 146, - 80, - 1, - 97, - 0, - 206, - 86, - 91, - 135, - 129, - 81, - 131, - 9, - 145, - 80, - 96, - 32, - 131, - 82, - 96, - 32, - 128, - 132, - 1, - 82, - 96, - 32, - 96, - 64, - 132, - 1, - 82, - 129, - 96, - 96, - 132, - 1, - 82, - 96, - 2, - 136, - 3, - 96, - 128, - 132, - 1, - 82, - 135, - 96, - 160, - 132, - 1, - 82, - 96, - 32, - 131, - 96, - 192, - 133, - 96, - 5, - 90, - 250, - 133, - 22, - 147, - 80, - 130, - 81, - 145, - 80, - 133, - 96, - 32, - 129, - 1, - 96, - 32, - 133, - 3, - 148, - 80, - 91, - 130, - 129, - 16, - 21, - 97, - 1, - 99, - 87, - 137, - 133, - 81, - 133, - 9, - 138, - 132, - 81, - 134, - 9, - 144, - 132, - 82, - 96, - 31, - 25, - 149, - 134, - 1, - 149, - 144, - 148, - 80, - 144, - 146, - 1, - 145, - 97, - 1, - 59, - 86, - 91, - 137, - 129, - 81, - 133, - 9, - 148, - 80, - 137, - 130, - 81, - 133, - 9, - 148, - 144, - 145, - 82, - 146, - 144, - 146, - 82, - 80, - 144, - 149, - 148, - 80, - 80, - 80, - 80, - 80, - 86, - 91, - 129, - 96, - 64, - 82, - 130, - 96, - 96, - 82, - 96, - 0, - 96, - 64, - 96, - 0, - 96, - 128, - 96, - 0, - 96, - 6, - 90, - 250, - 144, - 145, - 22, - 147, - 146, - 80, - 80, - 80, - 86, - 91, - 129, - 96, - 64, - 82, - 96, - 0, - 96, - 64, - 96, - 0, - 96, - 96, - 96, - 0, - 96, - 7, - 90, - 250, - 144, - 145, - 22, - 146, - 145, - 80, - 80, - 86, - 91, - 129, - 96, - 192, - 82, - 130, - 96, - 224, - 82, - 96, - 0, - 96, - 64, - 96, - 128, - 128, - 96, - 128, - 96, - 6, - 90, - 250, - 144, - 145, - 22, - 147, - 146, - 80, - 80, - 80, - 86, - 91, - 129, - 96, - 192, - 82, - 96, - 0, - 96, - 64, - 96, - 128, - 96, - 96, - 96, - 128, - 96, - 7, - 90, - 250, - 144, - 145, - 22, - 146, - 145, - 80, - 80, - 86, - 91, - 129, - 96, - 0, - 82, - 130, - 96, - 32, - 82, - 97, - 11, - 64, - 81, - 96, - 64, - 82, - 97, - 11, - 96, - 81, - 96, - 96, - 82, - 97, - 11, - 128, - 81, - 96, - 128, - 82, - 97, - 11, - 160, - 81, - 96, - 160, - 82, - 131, - 96, - 192, - 82, - 132, - 96, - 224, - 82, - 97, - 11, - 192, - 81, - 97, - 1, - 0, - 82, - 97, - 11, - 224, - 81, - 97, - 1, - 32, - 82, - 97, - 12, - 0, - 81, - 97, - 1, - 64, - 82, - 97, - 12, - 32, - 81, - 97, - 1, - 96, - 82, - 96, - 0, - 96, - 32, - 96, - 0, - 97, - 1, - 128, - 96, - 0, - 96, - 8, - 90, - 250, - 96, - 0, - 81, - 146, - 22, - 144, - 145, - 22, - 149, - 148, - 80, - 80, - 80, - 80, - 80, - 86, - 91, - 127, - 48, - 100, - 78, - 114, - 225, - 49, - 160, - 41, - 184, - 80, - 69, - 182, - 129, - 129, - 88, - 93, - 151, - 129, - 106, - 145, - 104, - 113, - 202, - 141, - 60, - 32, - 140, - 22, - 216, - 124, - 253, - 71, - 127, - 48, - 100, - 78, - 114, - 225, - 49, - 160, - 41, - 184, - 80, - 69, - 182, - 129, - 129, - 88, - 93, - 40, - 51, - 232, - 72, - 121, - 185, - 112, - 145, - 67, - 225, - 245, - 147, - 240, - 0, - 0, - 1, - 96, - 1, - 97, - 5, - 96, - 96, - 0, - 97, - 9, - 160, - 139, - 60, - 96, - 100, - 53, - 97, - 21, - 0, - 20, - 129, - 22, - 144, - 80, - 97, - 10, - 96, - 81, - 97, - 21, - 132, - 53, - 129, - 20, - 130, - 22, - 145, - 80, - 97, - 9, - 160, - 81, - 96, - 0, - 82, - 96, - 32, - 97, - 21, - 164, - 130, - 96, - 32, - 2, - 129, - 1, - 91, - 128, - 130, - 16, - 21, - 97, - 3, - 0, - 87, - 129, - 53, - 128, - 132, - 82, - 134, - 17, - 148, - 144, - 148, - 22, - 147, - 96, - 32, - 146, - 131, - 1, - 146, - 144, - 145, - 1, - 144, - 97, - 2, - 221, - 86, - 91, - 80, - 96, - 132, - 146, - 80, - 97, - 15, - 0, - 144, - 80, - 97, - 3, - 68, - 91, - 128, - 132, - 16, - 21, - 97, - 3, - 45, - 87, - 97, - 3, - 34, - 135, - 132, - 134, - 136, - 97, - 0, - 94, - 86, - 91, - 148, - 80, - 148, - 80, - 148, - 80, - 97, - 3, - 14, - 86, - 91, - 80, - 96, - 0, - 145, - 130, - 32, - 133, - 129, - 6, - 130, - 82, - 144, - 145, - 82, - 96, - 32, - 144, - 129, - 1, - 97, - 4, - 0, - 131, - 1, - 91, - 128, - 132, - 16, - 21, - 97, - 3, - 101, - 87, - 97, - 3, - 90, - 135, - 132, - 134, - 136, - 97, - 0, - 94, - 86, - 91, - 148, - 80, - 148, - 80, - 148, - 80, - 97, - 3, - 70, - 86, - 91, - 80, - 96, - 0, - 145, - 130, - 32, - 133, - 129, - 6, - 130, - 82, - 144, - 145, - 82, - 96, - 32, - 144, - 129, - 1, - 97, - 3, - 130, - 133, - 130, - 97, - 0, - 169, - 86, - 91, - 144, - 80, - 97, - 3, - 128, - 131, - 1, - 91, - 128, - 132, - 16, - 21, - 97, - 3, - 169, - 87, - 97, - 3, - 158, - 135, - 132, - 134, - 136, - 97, - 0, - 94, - 86, - 91, - 148, - 80, - 148, - 80, - 148, - 80, - 97, - 3, - 138, - 86, - 91, - 80, - 96, - 0, - 145, - 130, - 32, - 133, - 129, - 6, - 130, - 82, - 144, - 145, - 82, - 96, - 32, - 144, - 129, - 1, - 96, - 192, - 131, - 1, - 91, - 128, - 132, - 16, - 21, - 97, - 3, - 224, - 87, - 97, - 3, - 213, - 135, - 132, - 134, - 136, - 97, - 0, - 94, - 86, - 91, - 148, - 80, - 148, - 80, - 148, - 80, - 97, - 3, - 193, - 86, - 91, - 80, - 96, - 0, - 145, - 130, - 32, - 133, - 129, - 6, - 130, - 82, - 144, - 145, - 82, - 96, - 32, - 144, - 129, - 1, - 97, - 9, - 128, - 131, - 1, - 91, - 128, - 132, - 16, - 21, - 97, - 4, - 28, - 87, - 131, - 53, - 128, - 132, - 82, - 134, - 17, - 148, - 144, - 148, - 22, - 147, - 96, - 32, - 147, - 132, - 1, - 147, - 144, - 146, - 1, - 145, - 97, - 3, - 249, - 86, - 91, - 80, - 96, - 0, - 145, - 130, - 32, - 133, - 129, - 6, - 130, - 82, - 144, - 145, - 82, - 96, - 32, - 144, - 129, - 1, - 97, - 4, - 57, - 133, - 130, - 97, - 0, - 169, - 86, - 91, - 144, - 80, - 97, - 4, - 71, - 134, - 131, - 133, - 135, - 97, - 0, - 94, - 86, - 91, - 96, - 0, - 144, - 129, - 32, - 136, - 129, - 6, - 144, - 148, - 82, - 146, - 144, - 146, - 82, - 147, - 80, - 145, - 80, - 96, - 32, - 144, - 80, - 97, - 4, - 106, - 133, - 130, - 132, - 134, - 97, - 0, - 94, - 86, - 91, - 146, - 80, - 146, - 80, - 146, - 80, - 80, - 80, - 97, - 10, - 128, - 81, - 21, - 97, - 5, - 55, - 87, - 97, - 10, - 192, - 81, - 97, - 10, - 224, - 81, - 96, - 32, - 97, - 10, - 160, - 81, - 2, - 97, - 21, - 164, - 1, - 96, - 32, - 131, - 2, - 96, - 2, - 129, - 2, - 96, - 3, - 130, - 2, - 131, - 53, - 131, - 133, - 1, - 53, - 131, - 134, - 1, - 53, - 131, - 135, - 1, - 53, - 137, - 96, - 32, - 2, - 136, - 1, - 137, - 91, - 129, - 138, - 16, - 21, - 97, - 4, - 238, - 87, - 96, - 32, - 138, - 1, - 153, - 80, - 137, - 53, - 129, - 27, - 134, - 1, - 149, - 80, - 136, - 138, - 1, - 53, - 129, - 27, - 133, - 1, - 148, - 80, - 135, - 138, - 1, - 53, - 129, - 27, - 132, - 1, - 147, - 80, - 134, - 138, - 1, - 53, - 129, - 27, - 131, - 1, - 146, - 80, - 138, - 129, - 1, - 144, - 80, - 97, - 4, - 176, - 86, - 91, - 80, - 80, - 140, - 96, - 3, - 142, - 143, - 135, - 136, - 9, - 135, - 9, - 8, - 141, - 132, - 133, - 9, - 20, - 139, - 22, - 154, - 80, - 140, - 96, - 3, - 142, - 143, - 133, - 134, - 9, - 133, - 9, - 8, - 141, - 130, - 131, - 9, - 20, - 139, - 22, - 154, - 80, - 131, - 97, - 16, - 0, - 82, - 130, - 97, - 16, - 32, - 82, - 129, - 97, - 16, - 64, - 82, - 128, - 97, - 16, - 96, - 82, - 80, - 80, - 80, - 80, - 80, - 80, - 80, - 80, - 80, - 80, - 91, - 128, - 97, - 5, - 65, - 87, - 96, - 0, - 128, - 253, - 91, - 97, - 9, - 192, - 81, - 146, - 80, - 97, - 15, - 128, - 81, - 128, - 96, - 0, - 91, - 133, - 129, - 16, - 21, - 97, - 5, - 101, - 87, - 132, - 130, - 131, - 9, - 145, - 80, - 96, - 1, - 1, - 97, - 5, - 79, - 86, - 91, - 80, - 97, - 10, - 0, - 81, - 148, - 80, - 97, - 16, - 128, - 96, - 6, - 97, - 10, - 96, - 81, - 1, - 96, - 32, - 2, - 129, - 1, - 97, - 10, - 96, - 81, - 97, - 5, - 135, - 87, - 96, - 32, - 1, - 91, - 97, - 10, - 64, - 81, - 91, - 129, - 131, - 16, - 21, - 97, - 5, - 173, - 87, - 134, - 129, - 136, - 3, - 134, - 8, - 131, - 82, - 134, - 136, - 130, - 9, - 144, - 80, - 96, - 32, - 131, - 1, - 146, - 80, - 97, - 5, - 140, - 86, - 91, - 80, - 133, - 96, - 1, - 135, - 3, - 132, - 8, - 147, - 80, - 131, - 129, - 82, - 97, - 5, - 203, - 134, - 96, - 32, - 131, - 1, - 97, - 16, - 128, - 136, - 97, - 0, - 196, - 86, - 91, - 148, - 80, - 97, - 16, - 128, - 145, - 80, - 133, - 97, - 9, - 224, - 81, - 133, - 9, - 147, - 80, - 97, - 10, - 64, - 81, - 91, - 129, - 131, - 16, - 21, - 97, - 6, - 3, - 87, - 134, - 135, - 130, - 133, - 81, - 9, - 134, - 9, - 131, - 82, - 134, - 136, - 130, - 9, - 144, - 80, - 96, - 32, - 131, - 1, - 146, - 80, - 97, - 5, - 224, - 86, - 91, - 80, - 97, - 16, - 160, - 81, - 150, - 80, - 97, - 16, - 192, - 147, - 80, - 97, - 17, - 64, - 145, - 80, - 91, - 129, - 132, - 16, - 21, - 97, - 6, - 47, - 87, - 133, - 132, - 81, - 136, - 8, - 150, - 80, - 96, - 32, - 132, - 1, - 147, - 80, - 97, - 6, - 21, - 86, - 91, - 96, - 0, - 145, - 80, - 97, - 21, - 164, - 97, - 10, - 96, - 81, - 96, - 32, - 2, - 129, - 1, - 91, - 128, - 130, - 16, - 21, - 97, - 6, - 100, - 87, - 135, - 136, - 131, - 53, - 136, - 81, - 9, - 133, - 8, - 147, - 80, - 96, - 32, - 130, - 1, - 145, - 80, - 96, - 32, - 134, - 1, - 149, - 80, - 97, - 6, - 64, - 86, - 91, - 80, - 80, - 81, - 97, - 16, - 128, - 128, - 81, - 97, - 17, - 64, - 81, - 148, - 144, - 145, - 82, - 97, - 16, - 160, - 145, - 144, - 145, - 82, - 97, - 16, - 192, - 82, - 97, - 16, - 224, - 149, - 144, - 149, - 82, - 97, - 17, - 0, - 129, - 144, - 82, - 97, - 17, - 32, - 148, - 144, - 148, - 82, - 80, - 97, - 15, - 96, - 81, - 96, - 0, - 147, - 127, - 9, - 34, - 107, - 110, - 34, - 198, - 240, - 202, - 100, - 236, - 38, - 170, - 212, - 200, - 110, - 113, - 91, - 95, - 137, - 142, - 94, - 150, - 63, - 37, - 135, - 14, - 86, - 187, - 229, - 51, - 233, - 162, - 145, - 144, - 132, - 128, - 97, - 14, - 68, - 53, - 131, - 9, - 134, - 3, - 130, - 8, - 149, - 80, - 80, - 97, - 15, - 196, - 53, - 132, - 128, - 130, - 129, - 3, - 129, - 132, - 128, - 9, - 8, - 97, - 16, - 192, - 81, - 9, - 144, - 80, - 132, - 129, - 134, - 132, - 137, - 9, - 8, - 149, - 80, - 80, - 131, - 132, - 97, - 14, - 132, - 53, - 134, - 3, - 97, - 14, - 164, - 53, - 8, - 97, - 17, - 0, - 81, - 9, - 132, - 129, - 134, - 132, - 137, - 9, - 8, - 149, - 80, - 80, - 131, - 132, - 97, - 14, - 228, - 53, - 134, - 3, - 97, - 15, - 4, - 53, - 8, - 97, - 17, - 0, - 81, - 9, - 132, - 129, - 134, - 132, - 137, - 9, - 8, - 149, - 80, - 80, - 131, - 132, - 97, - 15, - 68, - 53, - 134, - 3, - 97, - 15, - 100, - 53, - 8, - 97, - 17, - 0, - 81, - 9, - 132, - 129, - 134, - 132, - 137, - 9, - 8, - 149, - 80, - 80, - 131, - 132, - 97, - 15, - 164, - 53, - 134, - 3, - 97, - 15, - 196, - 53, - 8, - 97, - 17, - 0, - 81, - 9, - 132, - 129, - 134, - 132, - 137, - 9, - 8, - 149, - 80, - 80, - 97, - 15, - 64, - 81, - 97, - 15, - 32, - 81, - 97, - 14, - 100, - 53, - 97, - 14, - 68, - 53, - 135, - 136, - 133, - 138, - 139, - 97, - 13, - 4, - 53, - 136, - 9, - 97, - 12, - 196, - 53, - 8, - 8, - 131, - 9, - 145, - 80, - 135, - 136, - 133, - 138, - 139, - 97, - 13, - 36, - 53, - 136, - 9, - 97, - 17, - 32, - 81, - 8, - 8, - 131, - 9, - 145, - 80, - 135, - 97, - 15, - 128, - 81, - 132, - 9, - 96, - 0, - 82, - 135, - 136, - 133, - 138, - 96, - 0, - 81, - 97, - 12, - 196, - 53, - 8, - 8, - 130, - 9, - 144, - 80, - 135, - 134, - 96, - 0, - 81, - 9, - 96, - 0, - 82, - 135, - 136, - 133, - 138, - 96, - 0, - 81, - 97, - 17, - 32, - 81, - 8, - 8, - 130, - 9, - 144, - 80, - 135, - 134, - 96, - 0, - 81, - 9, - 96, - 0, - 82, - 135, - 129, - 137, - 3, - 131, - 8, - 147, - 80, - 80, - 80, - 80, - 132, - 133, - 134, - 97, - 16, - 224, - 81, - 97, - 16, - 192, - 81, - 8, - 131, - 9, - 134, - 3, - 130, - 8, - 144, - 80, - 132, - 129, - 134, - 132, - 137, - 9, - 8, - 149, - 80, - 80, - 97, - 15, - 64, - 81, - 97, - 15, - 32, - 81, - 97, - 14, - 196, - 53, - 97, - 14, - 164, - 53, - 135, - 136, - 133, - 138, - 139, - 97, - 13, - 68, - 53, - 136, - 9, - 97, - 11, - 132, - 53, - 8, - 8, - 131, - 9, - 145, - 80, - 135, - 136, - 133, - 138, - 139, - 97, - 13, - 100, - 53, - 136, - 9, - 97, - 11, - 164, - 53, - 8, - 8, - 131, - 9, - 145, - 80, - 135, - 136, - 133, - 138, - 96, - 0, - 81, - 97, - 11, - 132, - 53, - 8, - 8, - 130, - 9, - 144, - 80, - 135, - 134, - 96, - 0, - 81, - 9, - 96, - 0, - 82, - 135, - 136, - 133, - 138, - 96, - 0, - 81, - 97, - 11, - 164, - 53, - 8, - 8, - 130, - 9, - 144, - 80, - 135, - 134, - 96, - 0, - 81, - 9, - 96, - 0, - 82, - 135, - 129, - 137, - 3, - 131, - 8, - 147, - 80, - 80, - 80, - 80, - 132, - 133, - 134, - 97, - 16, - 224, - 81, - 97, - 16, - 192, - 81, - 8, - 131, - 9, - 134, - 3, - 130, - 8, - 144, - 80, - 132, - 129, - 134, - 132, - 137, - 9, - 8, - 149, - 80, - 80, - 97, - 15, - 64, - 81, - 97, - 15, - 32, - 81, - 97, - 15, - 36, - 53, - 97, - 15, - 4, - 53, - 135, - 136, - 133, - 138, - 139, - 97, - 13, - 132, - 53, - 136, - 9, - 97, - 11, - 196, - 53, - 8, - 8, - 131, - 9, - 145, - 80, - 135, - 136, - 133, - 138, - 139, - 97, - 13, - 164, - 53, - 136, - 9, - 97, - 11, - 228, - 53, - 8, - 8, - 131, - 9, - 145, - 80, - 135, - 136, - 133, - 138, - 96, - 0, - 81, - 97, - 11, - 196, - 53, - 8, - 8, - 130, - 9, - 144, - 80, - 135, - 134, - 96, - 0, - 81, - 9, - 96, - 0, - 82, - 135, - 136, - 133, - 138, - 96, - 0, - 81, - 97, - 11, - 228, - 53, - 8, - 8, - 130, - 9, - 144, - 80, - 135, - 134, - 96, - 0, - 81, - 9, - 96, - 0, - 82, - 135, - 129, - 137, - 3, - 131, - 8, - 147, - 80, - 80, - 80, - 80, - 132, - 133, - 134, - 97, - 16, - 224, - 81, - 97, - 16, - 192, - 81, - 8, - 131, - 9, - 134, - 3, - 130, - 8, - 144, - 80, - 132, - 129, - 134, - 132, - 137, - 9, - 8, - 149, - 80, - 80, - 97, - 15, - 64, - 81, - 97, - 15, - 32, - 81, - 97, - 15, - 132, - 53, - 97, - 15, - 100, - 53, - 135, - 136, - 133, - 138, - 139, - 97, - 13, - 196, - 53, - 136, - 9, - 97, - 12, - 36, - 53, - 8, - 8, - 131, - 9, - 145, - 80, - 135, - 136, - 133, - 138, - 139, - 97, - 13, - 228, - 53, - 136, - 9, - 97, - 12, - 68, - 53, - 8, - 8, - 131, - 9, - 145, - 80, - 135, - 136, - 133, - 138, - 96, - 0, - 81, - 97, - 12, - 36, - 53, - 8, - 8, - 130, - 9, - 144, - 80, - 135, - 134, - 96, - 0, - 81, - 9, - 96, - 0, - 82, - 135, - 136, - 133, - 138, - 96, - 0, - 81, - 97, - 12, - 68, - 53, - 8, - 8, - 130, - 9, - 144, - 80, - 135, - 134, - 96, - 0, - 81, - 9, - 96, - 0, - 82, - 135, - 129, - 137, - 3, - 131, - 8, - 147, - 80, - 80, - 80, - 80, - 132, - 133, - 134, - 97, - 16, - 224, - 81, - 97, - 16, - 192, - 81, - 8, - 131, - 9, - 134, - 3, - 130, - 8, - 144, - 80, - 132, - 129, - 134, - 132, - 137, - 9, - 8, - 149, - 80, - 80, - 97, - 15, - 64, - 81, - 97, - 15, - 32, - 81, - 97, - 15, - 228, - 53, - 97, - 15, - 196, - 53, - 135, - 136, - 133, - 138, - 139, - 97, - 14, - 4, - 53, - 136, - 9, - 97, - 12, - 100, - 53, - 8, - 8, - 131, - 9, - 145, - 80, - 135, - 136, - 133, - 138, - 139, - 97, - 14, - 36, - 53, - 136, - 9, - 97, - 12, - 132, - 53, - 8, - 8, - 131, - 9, - 145, - 80, - 135, - 136, - 133, - 138, - 96, - 0, - 81, - 97, - 12, - 100, - 53, - 8, - 8, - 130, - 9, - 144, - 80, - 135, - 134, - 96, - 0, - 81, - 9, - 96, - 0, - 82, - 135, - 136, - 133, - 138, - 96, - 0, - 81, - 97, - 12, - 132, - 53, - 8, - 8, - 130, - 9, - 144, - 80, - 135, - 129, - 137, - 3, - 131, - 8, - 147, - 80, - 80, - 80, - 80, - 132, - 133, - 134, - 97, - 16, - 224, - 81, - 97, - 16, - 192, - 81, - 8, - 131, - 9, - 134, - 3, - 130, - 8, - 144, - 80, - 132, - 129, - 134, - 132, - 137, - 9, - 8, - 149, - 80, - 80, - 97, - 17, - 0, - 81, - 132, - 133, - 97, - 16, - 4, - 53, - 135, - 3, - 131, - 9, - 130, - 8, - 144, - 80, - 132, - 129, - 134, - 132, - 137, - 9, - 8, - 149, - 80, - 80, - 97, - 16, - 192, - 81, - 132, - 133, - 97, - 16, - 4, - 53, - 135, - 3, - 135, - 97, - 16, - 4, - 53, - 97, - 16, - 4, - 53, - 9, - 8, - 130, - 9, - 144, - 80, - 132, - 129, - 134, - 132, - 137, - 9, - 8, - 149, - 80, - 96, - 0, - 144, - 80, - 97, - 12, - 4, - 53, - 97, - 11, - 132, - 53, - 98, - 1, - 0, - 0, - 135, - 129, - 131, - 9, - 136, - 3, - 145, - 80, - 135, - 144, - 80, - 129, - 131, - 8, - 97, - 15, - 32, - 81, - 97, - 15, - 64, - 81, - 145, - 148, - 80, - 97, - 12, - 196, - 53, - 147, - 80, - 145, - 80, - 135, - 128, - 128, - 131, - 97, - 16, - 132, - 53, - 8, - 138, - 133, - 97, - 16, - 68, - 53, - 8, - 9, - 97, - 16, - 36, - 53, - 9, - 136, - 137, - 138, - 132, - 135, - 8, - 139, - 134, - 137, - 8, - 9, - 97, - 16, - 4, - 53, - 9, - 148, - 80, - 136, - 137, - 134, - 139, - 3, - 131, - 8, - 138, - 139, - 97, - 16, - 192, - 81, - 97, - 16, - 224, - 81, - 8, - 140, - 3, - 96, - 1, - 8, - 9, - 148, - 80, - 80, - 80, - 80, - 80, - 132, - 129, - 134, - 132, - 137, - 9, - 8, - 149, - 80, - 80, - 131, - 132, - 97, - 16, - 132, - 53, - 134, - 3, - 97, - 16, - 68, - 53, - 8, - 97, - 17, - 0, - 81, - 9, - 132, - 129, - 134, - 132, - 137, - 9, - 8, - 149, - 80, - 80, - 131, - 132, - 133, - 97, - 16, - 100, - 53, - 135, - 3, - 97, - 16, - 68, - 53, - 8, - 134, - 97, - 16, - 132, - 53, - 136, - 3, - 97, - 16, - 68, - 53, - 8, - 9, - 133, - 134, - 97, - 16, - 192, - 81, - 97, - 16, - 224, - 81, - 8, - 135, - 3, - 96, - 1, - 8, - 9, - 132, - 129, - 134, - 132, - 137, - 9, - 8, - 149, - 80, - 80, - 97, - 17, - 0, - 81, - 132, - 133, - 97, - 16, - 164, - 53, - 135, - 3, - 131, - 9, - 130, - 8, - 144, - 80, - 132, - 129, - 134, - 132, - 137, - 9, - 8, - 149, - 80, - 80, - 97, - 16, - 192, - 81, - 132, - 133, - 97, - 16, - 164, - 53, - 135, - 3, - 135, - 97, - 16, - 164, - 53, - 97, - 16, - 164, - 53, - 9, - 8, - 130, - 9, - 144, - 80, - 132, - 129, - 134, - 132, - 137, - 9, - 8, - 149, - 80, - 96, - 0, - 144, - 80, - 97, - 11, - 132, - 53, - 97, - 11, - 164, - 53, - 98, - 1, - 0, - 0, - 135, - 129, - 131, - 9, - 136, - 3, - 145, - 80, - 135, - 144, - 80, - 129, - 131, - 8, - 97, - 15, - 32, - 81, - 97, - 15, - 64, - 81, - 145, - 148, - 80, - 97, - 12, - 196, - 53, - 147, - 80, - 145, - 80, - 135, - 128, - 128, - 131, - 97, - 17, - 36, - 53, - 8, - 138, - 133, - 97, - 16, - 228, - 53, - 8, - 9, - 97, - 16, - 196, - 53, - 9, - 136, - 137, - 138, - 132, - 135, - 8, - 139, - 134, - 137, - 8, - 9, - 97, - 16, - 164, - 53, - 9, - 148, - 80, - 136, - 137, - 134, - 139, - 3, - 131, - 8, - 138, - 139, - 97, - 16, - 192, - 81, - 97, - 16, - 224, - 81, - 8, - 140, - 3, - 96, - 1, - 8, - 9, - 148, - 80, - 80, - 80, - 80, - 80, - 132, - 129, - 134, - 132, - 137, - 9, - 8, - 149, - 80, - 80, - 131, - 132, - 97, - 17, - 36, - 53, - 134, - 3, - 97, - 16, - 228, - 53, - 8, - 97, - 17, - 0, - 81, - 9, - 132, - 129, - 134, - 132, - 137, - 9, - 8, - 149, - 80, - 80, - 131, - 132, - 133, - 97, - 17, - 4, - 53, - 135, - 3, - 97, - 16, - 228, - 53, - 8, - 134, - 97, - 17, - 36, - 53, - 136, - 3, - 97, - 16, - 228, - 53, - 8, - 9, - 133, - 134, - 97, - 16, - 192, - 81, - 97, - 16, - 224, - 81, - 8, - 135, - 3, - 96, - 1, - 8, - 9, - 132, - 129, - 134, - 132, - 137, - 9, - 8, - 149, - 80, - 80, - 97, - 17, - 0, - 81, - 132, - 133, - 97, - 17, - 68, - 53, - 135, - 3, - 131, - 9, - 130, - 8, - 144, - 80, - 132, - 129, - 134, - 132, - 137, - 9, - 8, - 149, - 80, - 80, - 97, - 16, - 192, - 81, - 132, - 133, - 97, - 17, - 68, - 53, - 135, - 3, - 135, - 97, - 17, - 68, - 53, - 97, - 17, - 68, - 53, - 9, - 8, - 130, - 9, - 144, - 80, - 132, - 129, - 134, - 132, - 137, - 9, - 8, - 149, - 80, - 96, - 0, - 144, - 80, - 97, - 11, - 164, - 53, - 97, - 11, - 196, - 53, - 98, - 1, - 0, - 0, - 135, - 129, - 131, - 9, - 136, - 3, - 145, - 80, - 135, - 144, - 80, - 129, - 131, - 8, - 97, - 15, - 32, - 81, - 97, - 15, - 64, - 81, - 145, - 148, - 80, - 97, - 12, - 196, - 53, - 147, - 80, - 145, - 80, - 135, - 128, - 128, - 131, - 97, - 17, - 196, - 53, - 8, - 138, - 133, - 97, - 17, - 132, - 53, - 8, - 9, - 97, - 17, - 100, - 53, - 9, - 136, - 137, - 138, - 132, - 135, - 8, - 139, - 134, - 137, - 8, - 9, - 97, - 17, - 68, - 53, - 9, - 148, - 80, - 136, - 137, - 134, - 139, - 3, - 131, - 8, - 138, - 139, - 97, - 16, - 192, - 81, - 97, - 16, - 224, - 81, - 8, - 140, - 3, - 96, - 1, - 8, - 9, - 148, - 80, - 80, - 80, - 80, - 80, - 132, - 129, - 134, - 132, - 137, - 9, - 8, - 149, - 80, - 80, - 131, - 132, - 97, - 17, - 196, - 53, - 134, - 3, - 97, - 17, - 132, - 53, - 8, - 97, - 17, - 0, - 81, - 9, - 132, - 129, - 134, - 132, - 137, - 9, - 8, - 149, - 80, - 80, - 131, - 132, - 133, - 97, - 17, - 164, - 53, - 135, - 3, - 97, - 17, - 132, - 53, - 8, - 134, - 97, - 17, - 196, - 53, - 136, - 3, - 97, - 17, - 132, - 53, - 8, - 9, - 133, - 134, - 97, - 16, - 192, - 81, - 97, - 16, - 224, - 81, - 8, - 135, - 3, - 96, - 1, - 8, - 9, - 132, - 129, - 134, - 132, - 137, - 9, - 8, - 149, - 80, - 80, - 97, - 17, - 0, - 81, - 132, - 133, - 97, - 17, - 228, - 53, - 135, - 3, - 131, - 9, - 130, - 8, - 144, - 80, - 132, - 129, - 134, - 132, - 137, - 9, - 8, - 149, - 80, - 80, - 97, - 16, - 192, - 81, - 132, - 133, - 97, - 17, - 228, - 53, - 135, - 3, - 135, - 97, - 17, - 228, - 53, - 97, - 17, - 228, - 53, - 9, - 8, - 130, - 9, - 144, - 80, - 132, - 129, - 134, - 132, - 137, - 9, - 8, - 149, - 80, - 96, - 0, - 144, - 80, - 97, - 11, - 196, - 53, - 97, - 11, - 228, - 53, - 98, - 1, - 0, - 0, - 135, - 129, - 131, - 9, - 136, - 3, - 145, - 80, - 135, - 144, - 80, - 129, - 131, - 8, - 97, - 15, - 32, - 81, - 97, - 15, - 64, - 81, - 145, - 148, - 80, - 97, - 12, - 196, - 53, - 147, - 80, - 145, - 80, - 135, - 128, - 128, - 131, - 97, - 18, - 100, - 53, - 8, - 138, - 133, - 97, - 18, - 36, - 53, - 8, - 9, - 97, - 18, - 4, - 53, - 9, - 136, - 137, - 138, - 132, - 135, - 8, - 139, - 134, - 137, - 8, - 9, - 97, - 17, - 228, - 53, - 9, - 148, - 80, - 136, - 137, - 134, - 139, - 3, - 131, - 8, - 138, - 139, - 97, - 16, - 192, - 81, - 97, - 16, - 224, - 81, - 8, - 140, - 3, - 96, - 1, - 8, - 9, - 148, - 80, - 80, - 80, - 80, - 80, - 132, - 129, - 134, - 132, - 137, - 9, - 8, - 149, - 80, - 80, - 131, - 132, - 97, - 18, - 100, - 53, - 134, - 3, - 97, - 18, - 36, - 53, - 8, - 97, - 17, - 0, - 81, - 9, - 132, - 129, - 134, - 132, - 137, - 9, - 8, - 149, - 80, - 80, - 131, - 132, - 133, - 97, - 18, - 68, - 53, - 135, - 3, - 97, - 18, - 36, - 53, - 8, - 134, - 97, - 18, - 100, - 53, - 136, - 3, - 97, - 18, - 36, - 53, - 8, - 9, - 133, - 134, - 97, - 16, - 192, - 81, - 97, - 16, - 224, - 81, - 8, - 135, - 3, - 96, - 1, - 8, - 9, - 132, - 129, - 134, - 132, - 137, - 9, - 8, - 149, - 80, - 80, - 97, - 17, - 0, - 81, - 132, - 133, - 97, - 18, - 132, - 53, - 135, - 3, - 131, - 9, - 130, - 8, - 144, - 80, - 132, - 129, - 134, - 132, - 137, - 9, - 8, - 149, - 80, - 80, - 97, - 16, - 192, - 81, - 132, - 133, - 97, - 18, - 132, - 53, - 135, - 3, - 135, - 97, - 18, - 132, - 53, - 97, - 18, - 132, - 53, - 9, - 8, - 130, - 9, - 144, - 80, - 132, - 129, - 134, - 132, - 137, - 9, - 8, - 149, - 80, - 96, - 0, - 144, - 80, - 97, - 12, - 164, - 53, - 97, - 12, - 36, - 53, - 98, - 1, - 0, - 0, - 135, - 129, - 131, - 9, - 136, - 3, - 145, - 80, - 135, - 144, - 80, - 129, - 131, - 8, - 97, - 15, - 32, - 81, - 97, - 15, - 64, - 81, - 145, - 148, - 80, - 97, - 12, - 196, - 53, - 147, - 80, - 145, - 80, - 135, - 128, - 128, - 131, - 97, - 19, - 4, - 53, - 8, - 138, - 133, - 97, - 18, - 196, - 53, - 8, - 9, - 97, - 18, - 164, - 53, - 9, - 136, - 137, - 138, - 132, - 135, - 8, - 139, - 134, - 137, - 8, - 9, - 97, - 18, - 132, - 53, - 9, - 148, - 80, - 136, - 137, - 134, - 139, - 3, - 131, - 8, - 138, - 139, - 97, - 16, - 192, - 81, - 97, - 16, - 224, - 81, - 8, - 140, - 3, - 96, - 1, - 8, - 9, - 148, - 80, - 80, - 80, - 80, - 80, - 132, - 129, - 134, - 132, - 137, - 9, - 8, - 149, - 80, - 80, - 131, - 132, - 97, - 19, - 4, - 53, - 134, - 3, - 97, - 18, - 196, - 53, - 8, - 97, - 17, - 0, - 81, - 9, - 132, - 129, - 134, - 132, - 137, - 9, - 8, - 149, - 80, - 80, - 131, - 132, - 133, - 97, - 18, - 228, - 53, - 135, - 3, - 97, - 18, - 196, - 53, - 8, - 134, - 97, - 19, - 4, - 53, - 136, - 3, - 97, - 18, - 196, - 53, - 8, - 9, - 133, - 134, - 97, - 16, - 192, - 81, - 97, - 16, - 224, - 81, - 8, - 135, - 3, - 96, - 1, - 8, - 9, - 132, - 129, - 134, - 132, - 137, - 9, - 8, - 149, - 80, - 80, - 97, - 17, - 0, - 81, - 132, - 133, - 97, - 19, - 36, - 53, - 135, - 3, - 131, - 9, - 130, - 8, - 144, - 80, - 132, - 129, - 134, - 132, - 137, - 9, - 8, - 149, - 80, - 80, - 97, - 16, - 192, - 81, - 132, - 133, - 97, - 19, - 36, - 53, - 135, - 3, - 135, - 97, - 19, - 36, - 53, - 97, - 19, - 36, - 53, - 9, - 8, - 130, - 9, - 144, - 80, - 132, - 129, - 134, - 132, - 137, - 9, - 8, - 149, - 80, - 96, - 0, - 144, - 80, - 97, - 12, - 36, - 53, - 97, - 12, - 68, - 53, - 98, - 1, - 0, - 0, - 135, - 129, - 131, - 9, - 136, - 3, - 145, - 80, - 135, - 144, - 80, - 129, - 131, - 8, - 97, - 15, - 32, - 81, - 97, - 15, - 64, - 81, - 145, - 148, - 80, - 97, - 12, - 196, - 53, - 147, - 80, - 145, - 80, - 135, - 128, - 128, - 131, - 97, - 19, - 164, - 53, - 8, - 138, - 133, - 97, - 19, - 100, - 53, - 8, - 9, - 97, - 19, - 68, - 53, - 9, - 136, - 137, - 138, - 132, - 135, - 8, - 139, - 134, - 137, - 8, - 9, - 97, - 19, - 36, - 53, - 9, - 148, - 80, - 136, - 137, - 134, - 139, - 3, - 131, - 8, - 138, - 139, - 97, - 16, - 192, - 81, - 97, - 16, - 224, - 81, - 8, - 140, - 3, - 96, - 1, - 8, - 9, - 148, - 80, - 80, - 80, - 80, - 80, - 132, - 129, - 134, - 132, - 137, - 9, - 8, - 149, - 80, - 80, - 131, - 132, - 97, - 19, - 164, - 53, - 134, - 3, - 97, - 19, - 100, - 53, - 8, - 97, - 17, - 0, - 81, - 9, - 132, - 129, - 134, - 132, - 137, - 9, - 8, - 149, - 80, - 80, - 131, - 132, - 133, - 97, - 19, - 132, - 53, - 135, - 3, - 97, - 19, - 100, - 53, - 8, - 134, - 97, - 19, - 164, - 53, - 136, - 3, - 97, - 19, - 100, - 53, - 8, - 9, - 133, - 134, - 97, - 16, - 192, - 81, - 97, - 16, - 224, - 81, - 8, - 135, - 3, - 96, - 1, - 8, - 9, - 132, - 129, - 134, - 132, - 137, - 9, - 8, - 149, - 80, - 80, - 97, - 17, - 0, - 81, - 132, - 133, - 97, - 19, - 196, - 53, - 135, - 3, - 131, - 9, - 130, - 8, - 144, - 80, - 132, - 129, - 134, - 132, - 137, - 9, - 8, - 149, - 80, - 80, - 97, - 16, - 192, - 81, - 132, - 133, - 97, - 19, - 196, - 53, - 135, - 3, - 135, - 97, - 19, - 196, - 53, - 97, - 19, - 196, - 53, - 9, - 8, - 130, - 9, - 144, - 80, - 132, - 129, - 134, - 132, - 137, - 9, - 8, - 149, - 80, - 96, - 0, - 144, - 80, - 97, - 12, - 68, - 53, - 97, - 12, - 100, - 53, - 98, - 1, - 0, - 0, - 135, - 129, - 131, - 9, - 136, - 3, - 145, - 80, - 135, - 144, - 80, - 129, - 131, - 8, - 97, - 15, - 32, - 81, - 97, - 15, - 64, - 81, - 145, - 148, - 80, - 97, - 12, - 196, - 53, - 147, - 80, - 145, - 80, - 135, - 128, - 128, - 131, - 97, - 20, - 68, - 53, - 8, - 138, - 133, - 97, - 20, - 4, - 53, - 8, - 9, - 97, - 19, - 228, - 53, - 9, - 136, - 137, - 138, - 132, - 135, - 8, - 139, - 134, - 137, - 8, - 9, - 97, - 19, - 196, - 53, - 9, - 148, - 80, - 136, - 137, - 134, - 139, - 3, - 131, - 8, - 138, - 139, - 97, - 16, - 192, - 81, - 97, - 16, - 224, - 81, - 8, - 140, - 3, - 96, - 1, - 8, - 9, - 148, - 80, - 80, - 80, - 80, - 80, - 132, - 129, - 134, - 132, - 137, - 9, - 8, - 149, - 80, - 80, - 131, - 132, - 97, - 20, - 68, - 53, - 134, - 3, - 97, - 20, - 4, - 53, - 8, - 97, - 17, - 0, - 81, - 9, - 132, - 129, - 134, - 132, - 137, - 9, - 8, - 149, - 80, - 80, - 131, - 132, - 133, - 97, - 20, - 36, - 53, - 135, - 3, - 97, - 20, - 4, - 53, - 8, - 134, - 97, - 20, - 68, - 53, - 136, - 3, - 97, - 20, - 4, - 53, - 8, - 9, - 133, - 134, - 97, - 16, - 192, - 81, - 97, - 16, - 224, - 81, - 8, - 135, - 3, - 96, - 1, - 8, - 9, - 132, - 129, - 134, - 132, - 137, - 9, - 8, - 149, - 80, - 80, - 97, - 17, - 0, - 81, - 132, - 133, - 97, - 20, - 100, - 53, - 135, - 3, - 131, - 9, - 130, - 8, - 144, - 80, - 132, - 129, - 134, - 132, - 137, - 9, - 8, - 149, - 80, - 80, - 97, - 16, - 192, - 81, - 132, - 133, - 97, - 20, - 100, - 53, - 135, - 3, - 135, - 97, - 20, - 100, - 53, - 97, - 20, - 100, - 53, - 9, - 8, - 130, - 9, - 144, - 80, - 132, - 129, - 134, - 132, - 137, - 9, - 8, - 149, - 80, - 96, - 0, - 144, - 80, - 97, - 12, - 100, - 53, - 97, - 12, - 132, - 53, - 98, - 1, - 0, - 0, - 135, - 129, - 131, - 9, - 136, - 3, - 145, - 80, - 135, - 144, - 80, - 129, - 131, - 8, - 97, - 15, - 32, - 81, - 97, - 15, - 64, - 81, - 145, - 148, - 80, - 97, - 12, - 196, - 53, - 147, - 80, - 145, - 80, - 135, - 128, - 128, - 131, - 97, - 20, - 228, - 53, - 8, - 138, - 133, - 97, - 20, - 164, - 53, - 8, - 9, - 97, - 20, - 132, - 53, - 9, - 136, - 137, - 138, - 132, - 135, - 8, - 139, - 134, - 137, - 8, - 9, - 97, - 20, - 100, - 53, - 9, - 148, - 80, - 136, - 137, - 134, - 139, - 3, - 131, - 8, - 138, - 139, - 97, - 16, - 192, - 81, - 97, - 16, - 224, - 81, - 8, - 140, - 3, - 96, - 1, - 8, - 9, - 148, - 80, - 80, - 80, - 80, - 80, - 132, - 129, - 134, - 132, - 137, - 9, - 8, - 149, - 80, - 80, - 131, - 132, - 97, - 20, - 228, - 53, - 134, - 3, - 97, - 20, - 164, - 53, - 8, - 97, - 17, - 0, - 81, - 9, - 132, - 129, - 134, - 132, - 137, - 9, - 8, - 149, - 80, - 80, - 131, - 132, - 133, - 97, - 20, - 196, - 53, - 135, - 3, - 97, - 20, - 164, - 53, - 8, - 134, - 97, - 20, - 228, - 53, - 136, - 3, - 97, - 20, - 164, - 53, - 8, - 9, - 133, - 134, - 97, - 16, - 192, - 81, - 97, - 16, - 224, - 81, - 8, - 135, - 3, - 96, - 1, - 8, - 9, - 132, - 129, - 134, - 132, - 137, - 9, - 8, - 149, - 80, - 80, - 80, - 80, - 129, - 97, - 16, - 160, - 81, - 132, - 9, - 97, - 17, - 64, - 82, - 97, - 11, - 68, - 53, - 96, - 0, - 82, - 97, - 11, - 100, - 53, - 96, - 32, - 82, - 97, - 16, - 128, - 81, - 146, - 80, - 97, - 11, - 4, - 97, - 10, - 132, - 91, - 129, - 129, - 16, - 21, - 97, - 19, - 65, - 87, - 97, - 19, - 34, - 133, - 132, - 97, - 1, - 162, - 86, - 91, - 146, - 80, - 97, - 19, - 52, - 96, - 32, - 131, - 1, - 53, - 131, - 53, - 133, - 97, - 1, - 130, - 86, - 91, - 146, - 80, - 96, - 64, - 130, - 3, - 145, - 80, - 97, - 19, - 16, - 86, - 91, - 80, - 80, - 96, - 0, - 81, - 97, - 17, - 96, - 82, - 96, - 32, - 81, - 97, - 17, - 128, - 82, - 97, - 15, - 128, - 81, - 146, - 80, - 97, - 10, - 0, - 81, - 97, - 10, - 32, - 81, - 131, - 130, - 134, - 9, - 145, - 80, - 129, - 97, - 3, - 96, - 82, - 132, - 97, - 3, - 64, - 82, - 131, - 129, - 134, - 9, - 145, - 80, - 129, - 97, - 3, - 32, - 82, - 131, - 129, - 131, - 9, - 145, - 80, - 131, - 129, - 131, - 9, - 145, - 80, - 131, - 129, - 131, - 9, - 145, - 80, - 131, - 129, - 131, - 9, - 145, - 80, - 131, - 129, - 131, - 9, - 145, - 80, - 80, - 128, - 97, - 3, - 0, - 82, - 80, - 97, - 15, - 224, - 81, - 146, - 80, - 97, - 3, - 128, - 97, - 4, - 0, - 97, - 3, - 0, - 91, - 129, - 131, - 16, - 21, - 97, - 19, - 204, - 87, - 132, - 129, - 81, - 134, - 3, - 135, - 8, - 131, - 82, - 96, - 32, - 146, - 131, - 1, - 146, - 1, - 97, - 19, - 175, - 86, - 91, - 80, - 80, - 97, - 3, - 192, - 81, - 97, - 4, - 0, - 82, - 80, - 97, - 3, - 128, - 81, - 97, - 3, - 160, - 81, - 144, - 147, - 80, - 130, - 144, - 132, - 9, - 146, - 80, - 129, - 97, - 3, - 224, - 81, - 132, - 9, - 97, - 4, - 32, - 129, - 144, - 82, - 96, - 0, - 82, - 97, - 3, - 160, - 81, - 97, - 4, - 64, - 129, - 144, - 82, - 97, - 3, - 128, - 81, - 147, - 80, - 130, - 144, - 132, - 9, - 97, - 4, - 96, - 82, - 97, - 3, - 128, - 81, - 97, - 3, - 224, - 81, - 144, - 147, - 80, - 130, - 144, - 132, - 9, - 97, - 4, - 128, - 82, - 97, - 3, - 192, - 81, - 96, - 1, - 147, - 80, - 130, - 144, - 132, - 9, - 96, - 32, - 82, - 97, - 3, - 0, - 81, - 97, - 3, - 64, - 81, - 97, - 3, - 96, - 81, - 145, - 148, - 80, - 144, - 96, - 0, - 132, - 131, - 129, - 3, - 135, - 8, - 144, - 80, - 132, - 133, - 131, - 135, - 3, - 136, - 8, - 130, - 9, - 144, - 80, - 132, - 97, - 3, - 128, - 81, - 130, - 9, - 144, - 80, - 128, - 96, - 64, - 82, - 132, - 134, - 134, - 3, - 132, - 8, - 144, - 80, - 132, - 133, - 131, - 135, - 3, - 133, - 8, - 130, - 9, - 144, - 80, - 132, - 97, - 3, - 192, - 81, - 130, - 9, - 144, - 80, - 128, - 96, - 96, - 82, - 132, - 134, - 134, - 3, - 131, - 8, - 144, - 80, - 132, - 133, - 132, - 135, - 3, - 132, - 8, - 130, - 9, - 144, - 80, - 132, - 97, - 3, - 224, - 81, - 130, - 9, - 96, - 128, - 82, - 80, - 80, - 97, - 3, - 64, - 81, - 97, - 3, - 96, - 81, - 144, - 148, - 80, - 144, - 80, - 96, - 0, - 131, - 130, - 129, - 3, - 134, - 8, - 144, - 80, - 131, - 97, - 3, - 192, - 81, - 130, - 9, - 144, - 80, - 128, - 96, - 160, - 82, - 131, - 133, - 133, - 3, - 131, - 8, - 144, - 80, - 131, - 97, - 3, - 224, - 81, - 130, - 9, - 96, - 192, - 82, - 80, - 80, - 97, - 3, - 32, - 81, - 97, - 3, - 64, - 81, - 144, - 147, - 80, - 96, - 0, - 131, - 130, - 129, - 3, - 134, - 8, - 144, - 80, - 131, - 97, - 3, - 160, - 81, - 130, - 9, - 144, - 80, - 128, - 96, - 224, - 82, - 131, - 133, - 133, - 3, - 131, - 8, - 144, - 80, - 131, - 97, - 3, - 192, - 81, - 130, - 9, - 97, - 1, - 0, - 82, - 80, - 97, - 21, - 34, - 144, - 80, - 130, - 97, - 1, - 32, - 96, - 0, - 132, - 97, - 0, - 196, - 86, - 91, - 144, - 80, - 96, - 0, - 81, - 146, - 80, - 130, - 97, - 4, - 32, - 82, - 97, - 4, - 64, - 97, - 4, - 160, - 91, - 128, - 130, - 16, - 21, - 97, - 21, - 79, - 87, - 131, - 133, - 131, - 81, - 9, - 130, - 82, - 96, - 32, - 130, - 1, - 145, - 80, - 97, - 21, - 53, - 86, - 91, - 80, - 80, - 96, - 32, - 81, - 146, - 80, - 97, - 15, - 160, - 81, - 96, - 0, - 131, - 132, - 97, - 12, - 228, - 53, - 135, - 9, - 130, - 8, - 144, - 80, - 131, - 130, - 130, - 9, - 144, - 80, - 131, - 132, - 97, - 17, - 64, - 81, - 135, - 9, - 130, - 8, - 144, - 80, - 97, - 14, - 36, - 97, - 12, - 228, - 91, - 129, - 129, - 16, - 21, - 97, - 21, - 161, - 87, - 133, - 134, - 131, - 53, - 137, - 9, - 135, - 134, - 134, - 9, - 8, - 146, - 80, - 96, - 32, - 130, - 3, - 145, - 80, - 97, - 21, - 129, - 86, - 91, - 80, - 80, - 131, - 130, - 130, - 9, - 144, - 80, - 131, - 132, - 97, - 12, - 196, - 53, - 135, - 9, - 130, - 8, - 144, - 80, - 131, - 130, - 130, - 9, - 144, - 80, - 131, - 132, - 97, - 20, - 228, - 53, - 135, - 9, - 130, - 8, - 144, - 80, - 131, - 130, - 130, - 9, - 144, - 80, - 131, - 132, - 97, - 20, - 68, - 53, - 135, - 9, - 130, - 8, - 144, - 80, - 131, - 130, - 130, - 9, - 144, - 80, - 131, - 132, - 97, - 19, - 164, - 53, - 135, - 9, - 130, - 8, - 144, - 80, - 131, - 130, - 130, - 9, - 144, - 80, - 131, - 132, - 97, - 19, - 4, - 53, - 135, - 9, - 130, - 8, - 144, - 80, - 131, - 130, - 130, - 9, - 144, - 80, - 131, - 132, - 97, - 18, - 100, - 53, - 135, - 9, - 130, - 8, - 144, - 80, - 131, - 130, - 130, - 9, - 144, - 80, - 131, - 132, - 97, - 17, - 196, - 53, - 135, - 9, - 130, - 8, - 144, - 80, - 131, - 130, - 130, - 9, - 144, - 80, - 131, - 132, - 97, - 17, - 36, - 53, - 135, - 9, - 130, - 8, - 144, - 80, - 131, - 130, - 130, - 9, - 144, - 80, - 131, - 132, - 97, - 16, - 132, - 53, - 135, - 9, - 130, - 8, - 144, - 80, - 97, - 12, - 164, - 97, - 11, - 100, - 91, - 129, - 129, - 16, - 21, - 97, - 22, - 108, - 87, - 133, - 134, - 131, - 53, - 137, - 9, - 135, - 134, - 134, - 9, - 8, - 146, - 80, - 96, - 32, - 130, - 3, - 145, - 80, - 97, - 22, - 76, - 86, - 91, - 80, - 80, - 128, - 97, - 4, - 160, - 82, - 80, - 80, - 97, - 15, - 160, - 81, - 146, - 80, - 96, - 0, - 130, - 131, - 97, - 15, - 164, - 53, - 96, - 64, - 81, - 9, - 130, - 8, - 144, - 80, - 130, - 131, - 97, - 15, - 100, - 53, - 96, - 96, - 81, - 9, - 130, - 8, - 144, - 80, - 130, - 131, - 97, - 15, - 132, - 53, - 96, - 128, - 81, - 9, - 130, - 8, - 144, - 80, - 130, - 132, - 130, - 9, - 144, - 80, - 130, - 131, - 97, - 15, - 68, - 53, - 96, - 64, - 81, - 9, - 130, - 8, - 144, - 80, - 130, - 131, - 97, - 15, - 4, - 53, - 96, - 96, - 81, - 9, - 130, - 8, - 144, - 80, - 130, - 131, - 97, - 15, - 36, - 53, - 96, - 128, - 81, - 9, - 130, - 8, - 144, - 80, - 130, - 132, - 130, - 9, - 144, - 80, - 130, - 131, - 97, - 14, - 228, - 53, - 96, - 64, - 81, - 9, - 130, - 8, - 144, - 80, - 130, - 131, - 97, - 14, - 164, - 53, - 96, - 96, - 81, - 9, - 130, - 8, - 144, - 80, - 130, - 131, - 97, - 14, - 196, - 53, - 96, - 128, - 81, - 9, - 130, - 8, - 144, - 80, - 130, - 132, - 130, - 9, - 144, - 80, - 130, - 131, - 97, - 14, - 132, - 53, - 96, - 64, - 81, - 9, - 130, - 8, - 144, - 80, - 130, - 131, - 97, - 14, - 68, - 53, - 96, - 96, - 81, - 9, - 130, - 8, - 144, - 80, - 130, - 131, - 97, - 14, - 100, - 53, - 96, - 128, - 81, - 9, - 130, - 8, - 144, - 80, - 130, - 97, - 4, - 64, - 81, - 130, - 9, - 144, - 80, - 128, - 97, - 4, - 192, - 82, - 80, - 97, - 15, - 160, - 81, - 146, - 80, - 96, - 0, - 130, - 131, - 97, - 20, - 100, - 53, - 96, - 160, - 81, - 9, - 130, - 8, - 144, - 80, - 130, - 131, - 97, - 20, - 132, - 53, - 96, - 192, - 81, - 9, - 130, - 8, - 144, - 80, - 130, - 132, - 130, - 9, - 144, - 80, - 130, - 131, - 97, - 19, - 196, - 53, - 96, - 160, - 81, - 9, - 130, - 8, - 144, - 80, - 130, - 131, - 97, - 19, - 228, - 53, - 96, - 192, - 81, - 9, - 130, - 8, - 144, - 80, - 130, - 132, - 130, - 9, - 144, - 80, - 130, - 131, - 97, - 19, - 36, - 53, - 96, - 160, - 81, - 9, - 130, - 8, - 144, - 80, - 130, - 131, - 97, - 19, - 68, - 53, - 96, - 192, - 81, - 9, - 130, - 8, - 144, - 80, - 130, - 132, - 130, - 9, - 144, - 80, - 130, - 131, - 97, - 18, - 132, - 53, - 96, - 160, - 81, - 9, - 130, - 8, - 144, - 80, - 130, - 131, - 97, - 18, - 164, - 53, - 96, - 192, - 81, - 9, - 130, - 8, - 144, - 80, - 130, - 132, - 130, - 9, - 144, - 80, - 130, - 131, - 97, - 17, - 228, - 53, - 96, - 160, - 81, - 9, - 130, - 8, - 144, - 80, - 130, - 131, - 97, - 18, - 4, - 53, - 96, - 192, - 81, - 9, - 130, - 8, - 144, - 80, - 130, - 132, - 130, - 9, - 144, - 80, - 130, - 131, - 97, - 17, - 68, - 53, - 96, - 160, - 81, - 9, - 130, - 8, - 144, - 80, - 130, - 131, - 97, - 17, - 100, - 53, - 96, - 192, - 81, - 9, - 130, - 8, - 144, - 80, - 130, - 132, - 130, - 9, - 144, - 80, - 130, - 131, - 97, - 16, - 164, - 53, - 96, - 160, - 81, - 9, - 130, - 8, - 144, - 80, - 130, - 131, - 97, - 16, - 196, - 53, - 96, - 192, - 81, - 9, - 130, - 8, - 144, - 80, - 130, - 132, - 130, - 9, - 144, - 80, - 130, - 131, - 97, - 16, - 4, - 53, - 96, - 160, - 81, - 9, - 130, - 8, - 144, - 80, - 130, - 131, - 97, - 16, - 36, - 53, - 96, - 192, - 81, - 9, - 130, - 8, - 144, - 80, - 130, - 132, - 130, - 9, - 144, - 80, - 130, - 131, - 97, - 15, - 196, - 53, - 96, - 160, - 81, - 9, - 130, - 8, - 144, - 80, - 130, - 131, - 97, - 15, - 228, - 53, - 96, - 192, - 81, - 9, - 130, - 8, - 144, - 80, - 130, - 97, - 4, - 96, - 81, - 130, - 9, - 144, - 80, - 128, - 97, - 4, - 224, - 82, - 80, - 97, - 15, - 160, - 81, - 146, - 80, - 96, - 0, - 130, - 131, - 97, - 20, - 196, - 53, - 96, - 224, - 81, - 9, - 130, - 8, - 144, - 80, - 130, - 131, - 97, - 20, - 164, - 53, - 97, - 1, - 0, - 81, - 9, - 130, - 8, - 144, - 80, - 130, - 132, - 130, - 9, - 144, - 80, - 130, - 131, - 97, - 20, - 36, - 53, - 96, - 224, - 81, - 9, - 130, - 8, - 144, - 80, - 130, - 131, - 97, - 20, - 4, - 53, - 97, - 1, - 0, - 81, - 9, - 130, - 8, - 144, - 80, - 130, - 132, - 130, - 9, - 144, - 80, - 130, - 131, - 97, - 19, - 132, - 53, - 96, - 224, - 81, - 9, - 130, - 8, - 144, - 80, - 130, - 131, - 97, - 19, - 100, - 53, - 97, - 1, - 0, - 81, - 9, - 130, - 8, - 144, - 80, - 130, - 132, - 130, - 9, - 144, - 80, - 130, - 131, - 97, - 18, - 228, - 53, - 96, - 224, - 81, - 9, - 130, - 8, - 144, - 80, - 130, - 131, - 97, - 18, - 196, - 53, - 97, - 1, - 0, - 81, - 9, - 130, - 8, - 144, - 80, - 130, - 132, - 130, - 9, - 144, - 80, - 130, - 131, - 97, - 18, - 68, - 53, - 96, - 224, - 81, - 9, - 130, - 8, - 144, - 80, - 130, - 131, - 97, - 18, - 36, - 53, - 97, - 1, - 0, - 81, - 9, - 130, - 8, - 144, - 80, - 130, - 132, - 130, - 9, - 144, - 80, - 130, - 131, - 97, - 17, - 164, - 53, - 96, - 224, - 81, - 9, - 130, - 8, - 144, - 80, - 130, - 131, - 97, - 17, - 132, - 53, - 97, - 1, - 0, - 81, - 9, - 130, - 8, - 144, - 80, - 130, - 132, - 130, - 9, - 144, - 80, - 130, - 131, - 97, - 17, - 4, - 53, - 96, - 224, - 81, - 9, - 130, - 8, - 144, - 80, - 130, - 131, - 97, - 16, - 228, - 53, - 97, - 1, - 0, - 81, - 9, - 130, - 8, - 144, - 80, - 130, - 132, - 130, - 9, - 144, - 80, - 130, - 131, - 97, - 16, - 100, - 53, - 96, - 224, - 81, - 9, - 130, - 8, - 144, - 80, - 130, - 131, - 97, - 16, - 68, - 53, - 97, - 1, - 0, - 81, - 9, - 130, - 8, - 144, - 80, - 130, - 97, - 4, - 128, - 81, - 130, - 9, - 97, - 5, - 0, - 82, - 80, - 96, - 32, - 81, - 97, - 5, - 32, - 82, - 96, - 64, - 81, - 96, - 96, - 81, - 144, - 147, - 80, - 130, - 144, - 132, - 8, - 146, - 80, - 129, - 96, - 128, - 81, - 132, - 8, - 97, - 5, - 64, - 82, - 96, - 160, - 81, - 96, - 192, - 81, - 144, - 147, - 80, - 130, - 144, - 132, - 8, - 97, - 5, - 96, - 82, - 96, - 224, - 81, - 97, - 1, - 0, - 81, - 144, - 147, - 80, - 130, - 144, - 132, - 8, - 97, - 5, - 128, - 82, - 96, - 0, - 146, - 80, - 96, - 128, - 97, - 5, - 32, - 91, - 129, - 133, - 16, - 21, - 97, - 26, - 20, - 87, - 128, - 81, - 133, - 82, - 96, - 32, - 148, - 133, - 1, - 148, - 1, - 97, - 25, - 252, - 86, - 91, - 80, - 80, - 97, - 26, - 36, - 130, - 96, - 128, - 96, - 0, - 132, - 97, - 0, - 196, - 86, - 91, - 144, - 80, - 129, - 97, - 5, - 0, - 81, - 96, - 96, - 81, - 9, - 146, - 80, - 96, - 64, - 96, - 128, - 97, - 4, - 224, - 91, - 129, - 131, - 16, - 21, - 97, - 26, - 98, - 87, - 132, - 97, - 15, - 192, - 81, - 135, - 9, - 149, - 80, - 132, - 133, - 130, - 81, - 133, - 81, - 9, - 135, - 8, - 149, - 80, - 96, - 31, - 25, - 146, - 131, - 1, - 146, - 1, - 97, - 26, - 57, - 86, - 91, - 80, - 80, - 80, - 130, - 97, - 17, - 160, - 82, - 97, - 15, - 192, - 81, - 146, - 80, - 97, - 10, - 132, - 53, - 96, - 0, - 82, - 97, - 10, - 164, - 53, - 96, - 32, - 82, - 97, - 26, - 139, - 97, - 15, - 160, - 81, - 130, - 97, - 1, - 162, - 86, - 91, - 144, - 80, - 97, - 26, - 158, - 97, - 17, - 128, - 81, - 97, - 17, - 96, - 81, - 131, - 97, - 1, - 130, - 86, - 91, - 144, - 80, - 97, - 14, - 192, - 97, - 12, - 0, - 91, - 129, - 129, - 16, - 21, - 97, - 26, - 219, - 87, - 97, - 26, - 188, - 97, - 15, - 160, - 81, - 132, - 97, - 1, - 162, - 86, - 91, - 146, - 80, - 97, - 26, - 206, - 96, - 32, - 131, - 1, - 81, - 131, - 81, - 133, - 97, - 1, - 130, - 86, - 91, - 146, - 80, - 96, - 64, - 130, - 3, - 145, - 80, - 97, - 26, - 167, - 86, - 91, - 80, - 80, - 97, - 26, - 234, - 97, - 15, - 160, - 81, - 130, - 97, - 1, - 162, - 86, - 91, - 144, - 80, - 97, - 26, - 253, - 97, - 7, - 36, - 53, - 97, - 7, - 4, - 53, - 131, - 97, - 1, - 130, - 86, - 91, - 144, - 80, - 97, - 27, - 12, - 97, - 15, - 160, - 81, - 130, - 97, - 1, - 162, - 86, - 91, - 144, - 80, - 97, - 27, - 31, - 97, - 6, - 164, - 53, - 97, - 6, - 132, - 53, - 131, - 97, - 1, - 130, - 86, - 91, - 144, - 80, - 97, - 27, - 46, - 97, - 15, - 160, - 81, - 130, - 97, - 1, - 162, - 86, - 91, - 144, - 80, - 97, - 27, - 65, - 97, - 6, - 36, - 53, - 97, - 6, - 4, - 53, - 131, - 97, - 1, - 130, - 86, - 91, - 144, - 80, - 97, - 27, - 80, - 97, - 15, - 160, - 81, - 130, - 97, - 1, - 162, - 86, - 91, - 144, - 80, - 97, - 27, - 99, - 97, - 5, - 164, - 53, - 97, - 5, - 132, - 53, - 131, - 97, - 1, - 130, - 86, - 91, - 144, - 80, - 97, - 27, - 114, - 97, - 15, - 160, - 81, - 130, - 97, - 1, - 162, - 86, - 91, - 144, - 80, - 97, - 27, - 133, - 97, - 5, - 36, - 53, - 97, - 5, - 4, - 53, - 131, - 97, - 1, - 130, - 86, - 91, - 144, - 80, - 97, - 27, - 148, - 97, - 15, - 160, - 81, - 130, - 97, - 1, - 162, - 86, - 91, - 144, - 80, - 97, - 27, - 167, - 97, - 4, - 164, - 53, - 97, - 4, - 132, - 53, - 131, - 97, - 1, - 130, - 86, - 91, - 144, - 80, - 97, - 27, - 182, - 97, - 15, - 160, - 81, - 130, - 97, - 1, - 162, - 86, - 91, - 144, - 80, - 97, - 27, - 201, - 97, - 4, - 36, - 53, - 97, - 4, - 4, - 53, - 131, - 97, - 1, - 130, - 86, - 91, - 144, - 80, - 97, - 27, - 216, - 97, - 15, - 160, - 81, - 130, - 97, - 1, - 162, - 86, - 91, - 144, - 80, - 97, - 27, - 235, - 97, - 3, - 164, - 53, - 97, - 3, - 132, - 53, - 131, - 97, - 1, - 130, - 86, - 91, - 144, - 80, - 97, - 27, - 250, - 97, - 15, - 160, - 81, - 130, - 97, - 1, - 162, - 86, - 91, - 144, - 80, - 97, - 28, - 13, - 97, - 1, - 36, - 53, - 97, - 1, - 4, - 53, - 131, - 97, - 1, - 130, - 86, - 91, - 144, - 80, - 97, - 3, - 4, - 97, - 2, - 4, - 91, - 129, - 129, - 16, - 21, - 97, - 28, - 74, - 87, - 97, - 28, - 43, - 97, - 15, - 160, - 81, - 132, - 97, - 1, - 162, - 86, - 91, - 146, - 80, - 97, - 28, - 61, - 96, - 32, - 131, - 1, - 53, - 131, - 53, - 133, - 97, - 1, - 130, - 86, - 91, - 146, - 80, - 96, - 64, - 130, - 3, - 145, - 80, - 97, - 28, - 22, - 86, - 91, - 80, - 80, - 97, - 28, - 89, - 97, - 15, - 160, - 81, - 130, - 97, - 1, - 162, - 86, - 91, - 144, - 80, - 97, - 28, - 106, - 96, - 228, - 53, - 96, - 196, - 53, - 131, - 97, - 1, - 130, - 86, - 91, - 144, - 80, - 97, - 2, - 4, - 97, - 1, - 4, - 91, - 129, - 129, - 16, - 21, - 97, - 28, - 167, - 87, - 97, - 28, - 136, - 97, - 15, - 160, - 81, - 132, - 97, - 1, - 162, - 86, - 91, - 146, - 80, - 97, - 28, - 154, - 96, - 32, - 131, - 1, - 53, - 131, - 53, - 133, - 97, - 1, - 130, - 86, - 91, - 146, - 80, - 96, - 64, - 130, - 3, - 145, - 80, - 97, - 28, - 115, - 86, - 91, - 80, - 80, - 97, - 8, - 4, - 53, - 96, - 128, - 82, - 97, - 8, - 36, - 53, - 96, - 160, - 82, - 97, - 7, - 196, - 97, - 7, - 4, - 91, - 129, - 129, - 16, - 21, - 97, - 28, - 242, - 87, - 97, - 28, - 211, - 97, - 15, - 160, - 81, - 132, - 97, - 1, - 220, - 86, - 91, - 146, - 80, - 97, - 28, - 229, - 96, - 32, - 131, - 1, - 53, - 131, - 53, - 133, - 97, - 1, - 189, - 86, - 91, - 146, - 80, - 96, - 64, - 130, - 3, - 145, - 80, - 97, - 28, - 190, - 86, - 91, - 80, - 80, - 97, - 29, - 4, - 130, - 97, - 4, - 64, - 81, - 133, - 9, - 130, - 97, - 1, - 220, - 86, - 91, - 144, - 80, - 97, - 29, - 21, - 96, - 160, - 81, - 96, - 128, - 81, - 131, - 97, - 1, - 130, - 86, - 91, - 144, - 80, - 129, - 97, - 15, - 192, - 81, - 132, - 9, - 146, - 80, - 97, - 10, - 68, - 53, - 96, - 128, - 82, - 97, - 10, - 100, - 53, - 96, - 160, - 82, - 97, - 10, - 4, - 97, - 8, - 4, - 91, - 129, - 129, - 16, - 21, - 97, - 29, - 105, - 87, - 97, - 29, - 74, - 97, - 15, - 160, - 81, - 132, - 97, - 1, - 220, - 86, - 91, - 146, - 80, - 97, - 29, - 92, - 96, - 32, - 131, - 1, - 53, - 131, - 53, - 133, - 97, - 1, - 189, - 86, - 91, - 146, - 80, - 96, - 64, - 130, - 3, - 145, - 80, - 97, - 29, - 53, - 86, - 91, - 80, - 80, - 97, - 29, - 123, - 130, - 97, - 4, - 96, - 81, - 133, - 9, - 130, - 97, - 1, - 220, - 86, - 91, - 144, - 80, - 97, - 29, - 140, - 96, - 160, - 81, - 96, - 128, - 81, - 131, - 97, - 1, - 130, - 86, - 91, - 144, - 80, - 129, - 97, - 15, - 192, - 81, - 132, - 9, - 146, - 80, - 97, - 6, - 196, - 53, - 96, - 128, - 82, - 97, - 6, - 228, - 53, - 96, - 160, - 82, - 97, - 29, - 178, - 97, - 15, - 160, - 81, - 130, - 97, - 1, - 220, - 86, - 91, - 144, - 80, - 97, - 29, - 197, - 97, - 6, - 100, - 53, - 97, - 6, - 68, - 53, - 131, - 97, - 1, - 189, - 86, - 91, - 144, - 80, - 97, - 29, - 212, - 97, - 15, - 160, - 81, - 130, - 97, - 1, - 220, - 86, - 91, - 144, - 80, - 97, - 29, - 231, - 97, - 5, - 228, - 53, - 97, - 5, - 196, - 53, - 131, - 97, - 1, - 189, - 86, - 91, - 144, - 80, - 97, - 29, - 246, - 97, - 15, - 160, - 81, - 130, - 97, - 1, - 220, - 86, - 91, - 144, - 80, - 97, - 30, - 9, - 97, - 5, - 100, - 53, - 97, - 5, - 68, - 53, - 131, - 97, - 1, - 189, - 86, - 91, - 144, - 80, - 97, - 30, - 24, - 97, - 15, - 160, - 81, - 130, - 97, - 1, - 220, - 86, - 91, - 144, - 80, - 97, - 30, - 43, - 97, - 4, - 228, - 53, - 97, - 4, - 196, - 53, - 131, - 97, - 1, - 189, - 86, - 91, - 144, - 80, - 97, - 30, - 58, - 97, - 15, - 160, - 81, - 130, - 97, - 1, - 220, - 86, - 91, - 144, - 80, - 97, - 30, - 77, - 97, - 4, - 100, - 53, - 97, - 4, - 68, - 53, - 131, - 97, - 1, - 189, - 86, - 91, - 144, - 80, - 97, - 30, - 92, - 97, - 15, - 160, - 81, - 130, - 97, - 1, - 220, - 86, - 91, - 144, - 80, - 97, - 30, - 111, - 97, - 3, - 228, - 53, - 97, - 3, - 196, - 53, - 131, - 97, - 1, - 189, - 86, - 91, - 144, - 80, - 97, - 30, - 126, - 97, - 15, - 160, - 81, - 130, - 97, - 1, - 220, - 86, - 91, - 144, - 80, - 97, - 30, - 145, - 97, - 3, - 100, - 53, - 97, - 3, - 68, - 53, - 131, - 97, - 1, - 189, - 86, - 91, - 144, - 80, - 97, - 30, - 163, - 130, - 97, - 4, - 128, - 81, - 133, - 9, - 130, - 97, - 1, - 220, - 86, - 91, - 144, - 80, - 97, - 30, - 180, - 96, - 160, - 81, - 96, - 128, - 81, - 131, - 97, - 1, - 130, - 86, - 91, - 144, - 80, - 97, - 11, - 0, - 81, - 96, - 128, - 82, - 97, - 11, - 32, - 81, - 96, - 160, - 82, - 97, - 30, - 211, - 97, - 17, - 160, - 81, - 131, - 3, - 130, - 97, - 1, - 220, - 86, - 91, - 144, - 80, - 97, - 30, - 228, - 96, - 160, - 81, - 96, - 128, - 81, - 131, - 97, - 1, - 130, - 86, - 91, - 144, - 80, - 97, - 21, - 4, - 53, - 96, - 128, - 82, - 97, - 21, - 36, - 53, - 96, - 160, - 82, - 97, - 31, - 3, - 97, - 4, - 0, - 81, - 131, - 3, - 130, - 97, - 1, - 220, - 86, - 91, - 144, - 80, - 97, - 31, - 20, - 96, - 160, - 81, - 96, - 128, - 81, - 131, - 97, - 1, - 130, - 86, - 91, - 144, - 80, - 97, - 21, - 68, - 53, - 96, - 128, - 82, - 97, - 21, - 100, - 53, - 96, - 160, - 82, - 97, - 31, - 49, - 97, - 15, - 224, - 81, - 130, - 97, - 1, - 220, - 86, - 91, - 144, - 80, - 97, - 31, - 66, - 96, - 160, - 81, - 96, - 128, - 81, - 131, - 97, - 1, - 130, - 86, - 91, - 144, - 80, - 96, - 0, - 81, - 97, - 17, - 192, - 82, - 96, - 32, - 81, - 97, - 17, - 224, - 82, - 97, - 21, - 68, - 53, - 97, - 18, - 0, - 82, - 97, - 21, - 100, - 53, - 97, - 18, - 32, - 82, - 97, - 10, - 128, - 81, - 21, - 97, - 32, - 22, - 87, - 97, - 16, - 0, - 81, - 96, - 0, - 82, - 97, - 16, - 32, - 81, - 96, - 32, - 82, - 97, - 16, - 64, - 81, - 96, - 64, - 82, - 97, - 16, - 96, - 81, - 96, - 96, - 82, - 97, - 17, - 192, - 81, - 96, - 128, - 82, - 97, - 17, - 224, - 81, - 96, - 160, - 82, - 97, - 18, - 0, - 81, - 96, - 192, - 82, - 97, - 18, - 32, - 81, - 96, - 224, - 82, - 129, - 97, - 1, - 0, - 96, - 0, - 32, - 6, - 146, - 80, - 97, - 31, - 183, - 131, - 130, - 97, - 1, - 162, - 86, - 91, - 144, - 80, - 97, - 31, - 202, - 97, - 17, - 224, - 81, - 97, - 17, - 192, - 81, - 131, - 97, - 1, - 130, - 86, - 91, - 144, - 80, - 96, - 0, - 81, - 97, - 17, - 192, - 82, - 96, - 32, - 81, - 97, - 17, - 224, - 82, - 97, - 16, - 64, - 81, - 96, - 0, - 82, - 97, - 16, - 96, - 81, - 96, - 32, - 82, - 97, - 31, - 242, - 131, - 130, - 97, - 1, - 162, - 86, - 91, - 144, - 80, - 97, - 32, - 5, - 97, - 18, - 32, - 81, - 97, - 18, - 0, - 81, - 131, - 97, - 1, - 130, - 86, - 91, - 144, - 80, - 96, - 0, - 81, - 97, - 18, - 0, - 82, - 96, - 32, - 81, - 97, - 18, - 32, - 82, - 91, - 97, - 32, - 47, - 97, - 18, - 32, - 81, - 97, - 18, - 0, - 81, - 97, - 17, - 224, - 81, - 97, - 17, - 192, - 81, - 133, - 97, - 1, - 247, - 86, - 91, - 144, - 80, - 128, - 97, - 32, - 59, - 87, - 96, - 0, - 128, - 253, - 91, - 80, - 80, - 80, - 96, - 1, - 96, - 0, - 82, - 96, - 32, - 96, - 0, - 243, - 91, - 96, - 0, - 128, - 131, - 96, - 31, - 132, - 1, - 18, - 97, - 32, - 91, - 87, - 96, - 0, - 128, - 253, - 91, - 80, - 129, - 53, - 103, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 129, - 17, - 21, - 97, - 32, - 115, - 87, - 96, - 0, - 128, - 253, - 91, - 96, - 32, - 131, - 1, - 145, - 80, - 131, - 96, - 32, - 130, - 96, - 5, - 27, - 133, - 1, - 1, - 17, - 21, - 97, - 32, - 142, - 87, - 96, - 0, - 128, - 253, - 91, - 146, - 80, - 146, - 144, - 80, - 86, - 91, - 96, - 0, - 128, - 96, - 0, - 128, - 96, - 0, - 96, - 96, - 134, - 136, - 3, - 18, - 21, - 97, - 32, - 173, - 87, - 96, - 0, - 128, - 253, - 91, - 133, - 53, - 96, - 1, - 96, - 1, - 96, - 160, - 27, - 3, - 129, - 22, - 129, - 20, - 97, - 32, - 196, - 87, - 96, - 0, - 128, - 253, - 91, - 148, - 80, - 96, - 32, - 134, - 1, - 53, - 103, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 128, - 130, - 17, - 21, - 97, - 32, - 225, - 87, - 96, - 0, - 128, - 253, - 91, - 129, - 136, - 1, - 145, - 80, - 136, - 96, - 31, - 131, - 1, - 18, - 97, - 32, - 245, - 87, - 96, - 0, - 128, - 253, - 91, - 129, - 53, - 129, - 129, - 17, - 21, - 97, - 33, - 4, - 87, - 96, - 0, - 128, - 253, - 91, - 137, - 96, - 32, - 130, - 133, - 1, - 1, - 17, - 21, - 97, - 33, - 22, - 87, - 96, - 0, - 128, - 253, - 91, - 96, - 32, - 131, - 1, - 150, - 80, - 128, - 149, - 80, - 80, - 96, - 64, - 136, - 1, - 53, - 145, - 80, - 128, - 130, - 17, - 21, - 97, - 33, - 52, - 87, - 96, - 0, - 128, - 253, - 91, - 80, - 97, - 33, - 65, - 136, - 130, - 137, - 1, - 97, - 32, - 73, - 86, - 91, - 150, - 153, - 149, - 152, - 80, - 147, - 150, - 80, - 146, - 148, - 147, - 146, - 80, - 80, - 80, - 86, - 254, - 162, - 100, - 105, - 112, - 102, - 115, - 88, - 34, - 18, - 32, - 105, - 128, - 67, - 95, - 149, - 145, - 57, - 3, - 120, - 226, - 85, - 244, - 2, - 110, - 235, - 66, - 197, - 104, - 20, - 17, - 79, - 158, - 75, - 15, - 168, - 250, - 111, - 156, - 91, - 173, - 236, - 91, - 100, - 115, - 111, - 108, - 99, - 67, - 0, - 8, - 18, - 0, - 51, - ]; - ///The bytecode of the contract. - pub static VERIFIER_BYTECODE: ::ethers::core::types::Bytes = ::ethers::core::types::Bytes::from_static( - __BYTECODE, - ); - #[rustfmt::skip] - const __DEPLOYED_BYTECODE: &[u8] = &[ - 96, - 128, - 96, - 64, - 82, - 52, - 128, - 21, - 97, - 0, - 16, - 87, - 96, - 0, - 128, - 253, - 91, - 80, - 96, - 4, - 54, - 16, - 97, - 0, - 43, - 87, - 96, - 0, - 53, - 96, - 224, - 28, - 128, - 99, - 175, - 131, - 161, - 141, - 20, - 97, - 0, - 48, - 87, - 91, - 96, - 0, - 128, - 253, - 91, - 97, - 0, - 67, - 97, - 0, - 62, - 54, - 96, - 4, - 97, - 32, - 149, - 86, - 91, - 97, - 0, - 87, - 86, - 91, - 96, - 64, - 81, - 144, - 21, - 21, - 129, - 82, - 96, - 32, - 1, - 96, - 64, - 81, - 128, - 145, - 3, - 144, - 243, - 91, - 96, - 0, - 97, - 2, - 99, - 86, - 91, - 96, - 0, - 128, - 96, - 0, - 132, - 53, - 96, - 32, - 134, - 1, - 53, - 136, - 130, - 16, - 134, - 22, - 148, - 80, - 136, - 129, - 16, - 133, - 22, - 148, - 80, - 136, - 96, - 3, - 138, - 139, - 133, - 134, - 9, - 133, - 9, - 8, - 137, - 130, - 131, - 9, - 146, - 137, - 82, - 96, - 32, - 137, - 1, - 145, - 144, - 145, - 82, - 20, - 146, - 144, - 146, - 22, - 150, - 96, - 64, - 148, - 133, - 1, - 150, - 80, - 147, - 144, - 148, - 1, - 147, - 80, - 80, - 80, - 86, - 91, - 96, - 1, - 96, - 32, - 83, - 96, - 33, - 96, - 0, - 144, - 129, - 32, - 146, - 131, - 6, - 130, - 82, - 145, - 144, - 145, - 82, - 96, - 32, - 1, - 144, - 86, - 91, - 96, - 0, - 131, - 131, - 81, - 96, - 32, - 133, - 1, - 91, - 96, - 32, - 135, - 3, - 129, - 16, - 21, - 97, - 0, - 240, - 87, - 135, - 129, - 81, - 131, - 9, - 128, - 132, - 82, - 96, - 32, - 147, - 132, - 1, - 147, - 144, - 146, - 80, - 1, - 97, - 0, - 206, - 86, - 91, - 135, - 129, - 81, - 131, - 9, - 145, - 80, - 96, - 32, - 131, - 82, - 96, - 32, - 128, - 132, - 1, - 82, - 96, - 32, - 96, - 64, - 132, - 1, - 82, - 129, - 96, - 96, - 132, - 1, - 82, - 96, - 2, - 136, - 3, - 96, - 128, - 132, - 1, - 82, - 135, - 96, - 160, - 132, - 1, - 82, - 96, - 32, - 131, - 96, - 192, - 133, - 96, - 5, - 90, - 250, - 133, - 22, - 147, - 80, - 130, - 81, - 145, - 80, - 133, - 96, - 32, - 129, - 1, - 96, - 32, - 133, - 3, - 148, - 80, - 91, - 130, - 129, - 16, - 21, - 97, - 1, - 99, - 87, - 137, - 133, - 81, - 133, - 9, - 138, - 132, - 81, - 134, - 9, - 144, - 132, - 82, - 96, - 31, - 25, - 149, - 134, - 1, - 149, - 144, - 148, - 80, - 144, - 146, - 1, - 145, - 97, - 1, - 59, - 86, - 91, - 137, - 129, - 81, - 133, - 9, - 148, - 80, - 137, - 130, - 81, - 133, - 9, - 148, - 144, - 145, - 82, - 146, - 144, - 146, - 82, - 80, - 144, - 149, - 148, - 80, - 80, - 80, - 80, - 80, - 86, - 91, - 129, - 96, - 64, - 82, - 130, - 96, - 96, - 82, - 96, - 0, - 96, - 64, - 96, - 0, - 96, - 128, - 96, - 0, - 96, - 6, - 90, - 250, - 144, - 145, - 22, - 147, - 146, - 80, - 80, - 80, - 86, - 91, - 129, - 96, - 64, - 82, - 96, - 0, - 96, - 64, - 96, - 0, - 96, - 96, - 96, - 0, - 96, - 7, - 90, - 250, - 144, - 145, - 22, - 146, - 145, - 80, - 80, - 86, - 91, - 129, - 96, - 192, - 82, - 130, - 96, - 224, - 82, - 96, - 0, - 96, - 64, - 96, - 128, - 128, - 96, - 128, - 96, - 6, - 90, - 250, - 144, - 145, - 22, - 147, - 146, - 80, - 80, - 80, - 86, - 91, - 129, - 96, - 192, - 82, - 96, - 0, - 96, - 64, - 96, - 128, - 96, - 96, - 96, - 128, - 96, - 7, - 90, - 250, - 144, - 145, - 22, - 146, - 145, - 80, - 80, - 86, - 91, - 129, - 96, - 0, - 82, - 130, - 96, - 32, - 82, - 97, - 11, - 64, - 81, - 96, - 64, - 82, - 97, - 11, - 96, - 81, - 96, - 96, - 82, - 97, - 11, - 128, - 81, - 96, - 128, - 82, - 97, - 11, - 160, - 81, - 96, - 160, - 82, - 131, - 96, - 192, - 82, - 132, - 96, - 224, - 82, - 97, - 11, - 192, - 81, - 97, - 1, - 0, - 82, - 97, - 11, - 224, - 81, - 97, - 1, - 32, - 82, - 97, - 12, - 0, - 81, - 97, - 1, - 64, - 82, - 97, - 12, - 32, - 81, - 97, - 1, - 96, - 82, - 96, - 0, - 96, - 32, - 96, - 0, - 97, - 1, - 128, - 96, - 0, - 96, - 8, - 90, - 250, - 96, - 0, - 81, - 146, - 22, - 144, - 145, - 22, - 149, - 148, - 80, - 80, - 80, - 80, - 80, - 86, - 91, - 127, - 48, - 100, - 78, - 114, - 225, - 49, - 160, - 41, - 184, - 80, - 69, - 182, - 129, - 129, - 88, - 93, - 151, - 129, - 106, - 145, - 104, - 113, - 202, - 141, - 60, - 32, - 140, - 22, - 216, - 124, - 253, - 71, - 127, - 48, - 100, - 78, - 114, - 225, - 49, - 160, - 41, - 184, - 80, - 69, - 182, - 129, - 129, - 88, - 93, - 40, - 51, - 232, - 72, - 121, - 185, - 112, - 145, - 67, - 225, - 245, - 147, - 240, - 0, - 0, - 1, - 96, - 1, - 97, - 5, - 96, - 96, - 0, - 97, - 9, - 160, - 139, - 60, - 96, - 100, - 53, - 97, - 21, - 0, - 20, - 129, - 22, - 144, - 80, - 97, - 10, - 96, - 81, - 97, - 21, - 132, - 53, - 129, - 20, - 130, - 22, - 145, - 80, - 97, - 9, - 160, - 81, - 96, - 0, - 82, - 96, - 32, - 97, - 21, - 164, - 130, - 96, - 32, - 2, - 129, - 1, - 91, - 128, - 130, - 16, - 21, - 97, - 3, - 0, - 87, - 129, - 53, - 128, - 132, - 82, - 134, - 17, - 148, - 144, - 148, - 22, - 147, - 96, - 32, - 146, - 131, - 1, - 146, - 144, - 145, - 1, - 144, - 97, - 2, - 221, - 86, - 91, - 80, - 96, - 132, - 146, - 80, - 97, - 15, - 0, - 144, - 80, - 97, - 3, - 68, - 91, - 128, - 132, - 16, - 21, - 97, - 3, - 45, - 87, - 97, - 3, - 34, - 135, - 132, - 134, - 136, - 97, - 0, - 94, - 86, - 91, - 148, - 80, - 148, - 80, - 148, - 80, - 97, - 3, - 14, - 86, - 91, - 80, - 96, - 0, - 145, - 130, - 32, - 133, - 129, - 6, - 130, - 82, - 144, - 145, - 82, - 96, - 32, - 144, - 129, - 1, - 97, - 4, - 0, - 131, - 1, - 91, - 128, - 132, - 16, - 21, - 97, - 3, - 101, - 87, - 97, - 3, - 90, - 135, - 132, - 134, - 136, - 97, - 0, - 94, - 86, - 91, - 148, - 80, - 148, - 80, - 148, - 80, - 97, - 3, - 70, - 86, - 91, - 80, - 96, - 0, - 145, - 130, - 32, - 133, - 129, - 6, - 130, - 82, - 144, - 145, - 82, - 96, - 32, - 144, - 129, - 1, - 97, - 3, - 130, - 133, - 130, - 97, - 0, - 169, - 86, - 91, - 144, - 80, - 97, - 3, - 128, - 131, - 1, - 91, - 128, - 132, - 16, - 21, - 97, - 3, - 169, - 87, - 97, - 3, - 158, - 135, - 132, - 134, - 136, - 97, - 0, - 94, - 86, - 91, - 148, - 80, - 148, - 80, - 148, - 80, - 97, - 3, - 138, - 86, - 91, - 80, - 96, - 0, - 145, - 130, - 32, - 133, - 129, - 6, - 130, - 82, - 144, - 145, - 82, - 96, - 32, - 144, - 129, - 1, - 96, - 192, - 131, - 1, - 91, - 128, - 132, - 16, - 21, - 97, - 3, - 224, - 87, - 97, - 3, - 213, - 135, - 132, - 134, - 136, - 97, - 0, - 94, - 86, - 91, - 148, - 80, - 148, - 80, - 148, - 80, - 97, - 3, - 193, - 86, - 91, - 80, - 96, - 0, - 145, - 130, - 32, - 133, - 129, - 6, - 130, - 82, - 144, - 145, - 82, - 96, - 32, - 144, - 129, - 1, - 97, - 9, - 128, - 131, - 1, - 91, - 128, - 132, - 16, - 21, - 97, - 4, - 28, - 87, - 131, - 53, - 128, - 132, - 82, - 134, - 17, - 148, - 144, - 148, - 22, - 147, - 96, - 32, - 147, - 132, - 1, - 147, - 144, - 146, - 1, - 145, - 97, - 3, - 249, - 86, - 91, - 80, - 96, - 0, - 145, - 130, - 32, - 133, - 129, - 6, - 130, - 82, - 144, - 145, - 82, - 96, - 32, - 144, - 129, - 1, - 97, - 4, - 57, - 133, - 130, - 97, - 0, - 169, - 86, - 91, - 144, - 80, - 97, - 4, - 71, - 134, - 131, - 133, - 135, - 97, - 0, - 94, - 86, - 91, - 96, - 0, - 144, - 129, - 32, - 136, - 129, - 6, - 144, - 148, - 82, - 146, - 144, - 146, - 82, - 147, - 80, - 145, - 80, - 96, - 32, - 144, - 80, - 97, - 4, - 106, - 133, - 130, - 132, - 134, - 97, - 0, - 94, - 86, - 91, - 146, - 80, - 146, - 80, - 146, - 80, - 80, - 80, - 97, - 10, - 128, - 81, - 21, - 97, - 5, - 55, - 87, - 97, - 10, - 192, - 81, - 97, - 10, - 224, - 81, - 96, - 32, - 97, - 10, - 160, - 81, - 2, - 97, - 21, - 164, - 1, - 96, - 32, - 131, - 2, - 96, - 2, - 129, - 2, - 96, - 3, - 130, - 2, - 131, - 53, - 131, - 133, - 1, - 53, - 131, - 134, - 1, - 53, - 131, - 135, - 1, - 53, - 137, - 96, - 32, - 2, - 136, - 1, - 137, - 91, - 129, - 138, - 16, - 21, - 97, - 4, - 238, - 87, - 96, - 32, - 138, - 1, - 153, - 80, - 137, - 53, - 129, - 27, - 134, - 1, - 149, - 80, - 136, - 138, - 1, - 53, - 129, - 27, - 133, - 1, - 148, - 80, - 135, - 138, - 1, - 53, - 129, - 27, - 132, - 1, - 147, - 80, - 134, - 138, - 1, - 53, - 129, - 27, - 131, - 1, - 146, - 80, - 138, - 129, - 1, - 144, - 80, - 97, - 4, - 176, - 86, - 91, - 80, - 80, - 140, - 96, - 3, - 142, - 143, - 135, - 136, - 9, - 135, - 9, - 8, - 141, - 132, - 133, - 9, - 20, - 139, - 22, - 154, - 80, - 140, - 96, - 3, - 142, - 143, - 133, - 134, - 9, - 133, - 9, - 8, - 141, - 130, - 131, - 9, - 20, - 139, - 22, - 154, - 80, - 131, - 97, - 16, - 0, - 82, - 130, - 97, - 16, - 32, - 82, - 129, - 97, - 16, - 64, - 82, - 128, - 97, - 16, - 96, - 82, - 80, - 80, - 80, - 80, - 80, - 80, - 80, - 80, - 80, - 80, - 91, - 128, - 97, - 5, - 65, - 87, - 96, - 0, - 128, - 253, - 91, - 97, - 9, - 192, - 81, - 146, - 80, - 97, - 15, - 128, - 81, - 128, - 96, - 0, - 91, - 133, - 129, - 16, - 21, - 97, - 5, - 101, - 87, - 132, - 130, - 131, - 9, - 145, - 80, - 96, - 1, - 1, - 97, - 5, - 79, - 86, - 91, - 80, - 97, - 10, - 0, - 81, - 148, - 80, - 97, - 16, - 128, - 96, - 6, - 97, - 10, - 96, - 81, - 1, - 96, - 32, - 2, - 129, - 1, - 97, - 10, - 96, - 81, - 97, - 5, - 135, - 87, - 96, - 32, - 1, - 91, - 97, - 10, - 64, - 81, - 91, - 129, - 131, - 16, - 21, - 97, - 5, - 173, - 87, - 134, - 129, - 136, - 3, - 134, - 8, - 131, - 82, - 134, - 136, - 130, - 9, - 144, - 80, - 96, - 32, - 131, - 1, - 146, - 80, - 97, - 5, - 140, - 86, - 91, - 80, - 133, - 96, - 1, - 135, - 3, - 132, - 8, - 147, - 80, - 131, - 129, - 82, - 97, - 5, - 203, - 134, - 96, - 32, - 131, - 1, - 97, - 16, - 128, - 136, - 97, - 0, - 196, - 86, - 91, - 148, - 80, - 97, - 16, - 128, - 145, - 80, - 133, - 97, - 9, - 224, - 81, - 133, - 9, - 147, - 80, - 97, - 10, - 64, - 81, - 91, - 129, - 131, - 16, - 21, - 97, - 6, - 3, - 87, - 134, - 135, - 130, - 133, - 81, - 9, - 134, - 9, - 131, - 82, - 134, - 136, - 130, - 9, - 144, - 80, - 96, - 32, - 131, - 1, - 146, - 80, - 97, - 5, - 224, - 86, - 91, - 80, - 97, - 16, - 160, - 81, - 150, - 80, - 97, - 16, - 192, - 147, - 80, - 97, - 17, - 64, - 145, - 80, - 91, - 129, - 132, - 16, - 21, - 97, - 6, - 47, - 87, - 133, - 132, - 81, - 136, - 8, - 150, - 80, - 96, - 32, - 132, - 1, - 147, - 80, - 97, - 6, - 21, - 86, - 91, - 96, - 0, - 145, - 80, - 97, - 21, - 164, - 97, - 10, - 96, - 81, - 96, - 32, - 2, - 129, - 1, - 91, - 128, - 130, - 16, - 21, - 97, - 6, - 100, - 87, - 135, - 136, - 131, - 53, - 136, - 81, - 9, - 133, - 8, - 147, - 80, - 96, - 32, - 130, - 1, - 145, - 80, - 96, - 32, - 134, - 1, - 149, - 80, - 97, - 6, - 64, - 86, - 91, - 80, - 80, - 81, - 97, - 16, - 128, - 128, - 81, - 97, - 17, - 64, - 81, - 148, - 144, - 145, - 82, - 97, - 16, - 160, - 145, - 144, - 145, - 82, - 97, - 16, - 192, - 82, - 97, - 16, - 224, - 149, - 144, - 149, - 82, - 97, - 17, - 0, - 129, - 144, - 82, - 97, - 17, - 32, - 148, - 144, - 148, - 82, - 80, - 97, - 15, - 96, - 81, - 96, - 0, - 147, - 127, - 9, - 34, - 107, - 110, - 34, - 198, - 240, - 202, - 100, - 236, - 38, - 170, - 212, - 200, - 110, - 113, - 91, - 95, - 137, - 142, - 94, - 150, - 63, - 37, - 135, - 14, - 86, - 187, - 229, - 51, - 233, - 162, - 145, - 144, - 132, - 128, - 97, - 14, - 68, - 53, - 131, - 9, - 134, - 3, - 130, - 8, - 149, - 80, - 80, - 97, - 15, - 196, - 53, - 132, - 128, - 130, - 129, - 3, - 129, - 132, - 128, - 9, - 8, - 97, - 16, - 192, - 81, - 9, - 144, - 80, - 132, - 129, - 134, - 132, - 137, - 9, - 8, - 149, - 80, - 80, - 131, - 132, - 97, - 14, - 132, - 53, - 134, - 3, - 97, - 14, - 164, - 53, - 8, - 97, - 17, - 0, - 81, - 9, - 132, - 129, - 134, - 132, - 137, - 9, - 8, - 149, - 80, - 80, - 131, - 132, - 97, - 14, - 228, - 53, - 134, - 3, - 97, - 15, - 4, - 53, - 8, - 97, - 17, - 0, - 81, - 9, - 132, - 129, - 134, - 132, - 137, - 9, - 8, - 149, - 80, - 80, - 131, - 132, - 97, - 15, - 68, - 53, - 134, - 3, - 97, - 15, - 100, - 53, - 8, - 97, - 17, - 0, - 81, - 9, - 132, - 129, - 134, - 132, - 137, - 9, - 8, - 149, - 80, - 80, - 131, - 132, - 97, - 15, - 164, - 53, - 134, - 3, - 97, - 15, - 196, - 53, - 8, - 97, - 17, - 0, - 81, - 9, - 132, - 129, - 134, - 132, - 137, - 9, - 8, - 149, - 80, - 80, - 97, - 15, - 64, - 81, - 97, - 15, - 32, - 81, - 97, - 14, - 100, - 53, - 97, - 14, - 68, - 53, - 135, - 136, - 133, - 138, - 139, - 97, - 13, - 4, - 53, - 136, - 9, - 97, - 12, - 196, - 53, - 8, - 8, - 131, - 9, - 145, - 80, - 135, - 136, - 133, - 138, - 139, - 97, - 13, - 36, - 53, - 136, - 9, - 97, - 17, - 32, - 81, - 8, - 8, - 131, - 9, - 145, - 80, - 135, - 97, - 15, - 128, - 81, - 132, - 9, - 96, - 0, - 82, - 135, - 136, - 133, - 138, - 96, - 0, - 81, - 97, - 12, - 196, - 53, - 8, - 8, - 130, - 9, - 144, - 80, - 135, - 134, - 96, - 0, - 81, - 9, - 96, - 0, - 82, - 135, - 136, - 133, - 138, - 96, - 0, - 81, - 97, - 17, - 32, - 81, - 8, - 8, - 130, - 9, - 144, - 80, - 135, - 134, - 96, - 0, - 81, - 9, - 96, - 0, - 82, - 135, - 129, - 137, - 3, - 131, - 8, - 147, - 80, - 80, - 80, - 80, - 132, - 133, - 134, - 97, - 16, - 224, - 81, - 97, - 16, - 192, - 81, - 8, - 131, - 9, - 134, - 3, - 130, - 8, - 144, - 80, - 132, - 129, - 134, - 132, - 137, - 9, - 8, - 149, - 80, - 80, - 97, - 15, - 64, - 81, - 97, - 15, - 32, - 81, - 97, - 14, - 196, - 53, - 97, - 14, - 164, - 53, - 135, - 136, - 133, - 138, - 139, - 97, - 13, - 68, - 53, - 136, - 9, - 97, - 11, - 132, - 53, - 8, - 8, - 131, - 9, - 145, - 80, - 135, - 136, - 133, - 138, - 139, - 97, - 13, - 100, - 53, - 136, - 9, - 97, - 11, - 164, - 53, - 8, - 8, - 131, - 9, - 145, - 80, - 135, - 136, - 133, - 138, - 96, - 0, - 81, - 97, - 11, - 132, - 53, - 8, - 8, - 130, - 9, - 144, - 80, - 135, - 134, - 96, - 0, - 81, - 9, - 96, - 0, - 82, - 135, - 136, - 133, - 138, - 96, - 0, - 81, - 97, - 11, - 164, - 53, - 8, - 8, - 130, - 9, - 144, - 80, - 135, - 134, - 96, - 0, - 81, - 9, - 96, - 0, - 82, - 135, - 129, - 137, - 3, - 131, - 8, - 147, - 80, - 80, - 80, - 80, - 132, - 133, - 134, - 97, - 16, - 224, - 81, - 97, - 16, - 192, - 81, - 8, - 131, - 9, - 134, - 3, - 130, - 8, - 144, - 80, - 132, - 129, - 134, - 132, - 137, - 9, - 8, - 149, - 80, - 80, - 97, - 15, - 64, - 81, - 97, - 15, - 32, - 81, - 97, - 15, - 36, - 53, - 97, - 15, - 4, - 53, - 135, - 136, - 133, - 138, - 139, - 97, - 13, - 132, - 53, - 136, - 9, - 97, - 11, - 196, - 53, - 8, - 8, - 131, - 9, - 145, - 80, - 135, - 136, - 133, - 138, - 139, - 97, - 13, - 164, - 53, - 136, - 9, - 97, - 11, - 228, - 53, - 8, - 8, - 131, - 9, - 145, - 80, - 135, - 136, - 133, - 138, - 96, - 0, - 81, - 97, - 11, - 196, - 53, - 8, - 8, - 130, - 9, - 144, - 80, - 135, - 134, - 96, - 0, - 81, - 9, - 96, - 0, - 82, - 135, - 136, - 133, - 138, - 96, - 0, - 81, - 97, - 11, - 228, - 53, - 8, - 8, - 130, - 9, - 144, - 80, - 135, - 134, - 96, - 0, - 81, - 9, - 96, - 0, - 82, - 135, - 129, - 137, - 3, - 131, - 8, - 147, - 80, - 80, - 80, - 80, - 132, - 133, - 134, - 97, - 16, - 224, - 81, - 97, - 16, - 192, - 81, - 8, - 131, - 9, - 134, - 3, - 130, - 8, - 144, - 80, - 132, - 129, - 134, - 132, - 137, - 9, - 8, - 149, - 80, - 80, - 97, - 15, - 64, - 81, - 97, - 15, - 32, - 81, - 97, - 15, - 132, - 53, - 97, - 15, - 100, - 53, - 135, - 136, - 133, - 138, - 139, - 97, - 13, - 196, - 53, - 136, - 9, - 97, - 12, - 36, - 53, - 8, - 8, - 131, - 9, - 145, - 80, - 135, - 136, - 133, - 138, - 139, - 97, - 13, - 228, - 53, - 136, - 9, - 97, - 12, - 68, - 53, - 8, - 8, - 131, - 9, - 145, - 80, - 135, - 136, - 133, - 138, - 96, - 0, - 81, - 97, - 12, - 36, - 53, - 8, - 8, - 130, - 9, - 144, - 80, - 135, - 134, - 96, - 0, - 81, - 9, - 96, - 0, - 82, - 135, - 136, - 133, - 138, - 96, - 0, - 81, - 97, - 12, - 68, - 53, - 8, - 8, - 130, - 9, - 144, - 80, - 135, - 134, - 96, - 0, - 81, - 9, - 96, - 0, - 82, - 135, - 129, - 137, - 3, - 131, - 8, - 147, - 80, - 80, - 80, - 80, - 132, - 133, - 134, - 97, - 16, - 224, - 81, - 97, - 16, - 192, - 81, - 8, - 131, - 9, - 134, - 3, - 130, - 8, - 144, - 80, - 132, - 129, - 134, - 132, - 137, - 9, - 8, - 149, - 80, - 80, - 97, - 15, - 64, - 81, - 97, - 15, - 32, - 81, - 97, - 15, - 228, - 53, - 97, - 15, - 196, - 53, - 135, - 136, - 133, - 138, - 139, - 97, - 14, - 4, - 53, - 136, - 9, - 97, - 12, - 100, - 53, - 8, - 8, - 131, - 9, - 145, - 80, - 135, - 136, - 133, - 138, - 139, - 97, - 14, - 36, - 53, - 136, - 9, - 97, - 12, - 132, - 53, - 8, - 8, - 131, - 9, - 145, - 80, - 135, - 136, - 133, - 138, - 96, - 0, - 81, - 97, - 12, - 100, - 53, - 8, - 8, - 130, - 9, - 144, - 80, - 135, - 134, - 96, - 0, - 81, - 9, - 96, - 0, - 82, - 135, - 136, - 133, - 138, - 96, - 0, - 81, - 97, - 12, - 132, - 53, - 8, - 8, - 130, - 9, - 144, - 80, - 135, - 129, - 137, - 3, - 131, - 8, - 147, - 80, - 80, - 80, - 80, - 132, - 133, - 134, - 97, - 16, - 224, - 81, - 97, - 16, - 192, - 81, - 8, - 131, - 9, - 134, - 3, - 130, - 8, - 144, - 80, - 132, - 129, - 134, - 132, - 137, - 9, - 8, - 149, - 80, - 80, - 97, - 17, - 0, - 81, - 132, - 133, - 97, - 16, - 4, - 53, - 135, - 3, - 131, - 9, - 130, - 8, - 144, - 80, - 132, - 129, - 134, - 132, - 137, - 9, - 8, - 149, - 80, - 80, - 97, - 16, - 192, - 81, - 132, - 133, - 97, - 16, - 4, - 53, - 135, - 3, - 135, - 97, - 16, - 4, - 53, - 97, - 16, - 4, - 53, - 9, - 8, - 130, - 9, - 144, - 80, - 132, - 129, - 134, - 132, - 137, - 9, - 8, - 149, - 80, - 96, - 0, - 144, - 80, - 97, - 12, - 4, - 53, - 97, - 11, - 132, - 53, - 98, - 1, - 0, - 0, - 135, - 129, - 131, - 9, - 136, - 3, - 145, - 80, - 135, - 144, - 80, - 129, - 131, - 8, - 97, - 15, - 32, - 81, - 97, - 15, - 64, - 81, - 145, - 148, - 80, - 97, - 12, - 196, - 53, - 147, - 80, - 145, - 80, - 135, - 128, - 128, - 131, - 97, - 16, - 132, - 53, - 8, - 138, - 133, - 97, - 16, - 68, - 53, - 8, - 9, - 97, - 16, - 36, - 53, - 9, - 136, - 137, - 138, - 132, - 135, - 8, - 139, - 134, - 137, - 8, - 9, - 97, - 16, - 4, - 53, - 9, - 148, - 80, - 136, - 137, - 134, - 139, - 3, - 131, - 8, - 138, - 139, - 97, - 16, - 192, - 81, - 97, - 16, - 224, - 81, - 8, - 140, - 3, - 96, - 1, - 8, - 9, - 148, - 80, - 80, - 80, - 80, - 80, - 132, - 129, - 134, - 132, - 137, - 9, - 8, - 149, - 80, - 80, - 131, - 132, - 97, - 16, - 132, - 53, - 134, - 3, - 97, - 16, - 68, - 53, - 8, - 97, - 17, - 0, - 81, - 9, - 132, - 129, - 134, - 132, - 137, - 9, - 8, - 149, - 80, - 80, - 131, - 132, - 133, - 97, - 16, - 100, - 53, - 135, - 3, - 97, - 16, - 68, - 53, - 8, - 134, - 97, - 16, - 132, - 53, - 136, - 3, - 97, - 16, - 68, - 53, - 8, - 9, - 133, - 134, - 97, - 16, - 192, - 81, - 97, - 16, - 224, - 81, - 8, - 135, - 3, - 96, - 1, - 8, - 9, - 132, - 129, - 134, - 132, - 137, - 9, - 8, - 149, - 80, - 80, - 97, - 17, - 0, - 81, - 132, - 133, - 97, - 16, - 164, - 53, - 135, - 3, - 131, - 9, - 130, - 8, - 144, - 80, - 132, - 129, - 134, - 132, - 137, - 9, - 8, - 149, - 80, - 80, - 97, - 16, - 192, - 81, - 132, - 133, - 97, - 16, - 164, - 53, - 135, - 3, - 135, - 97, - 16, - 164, - 53, - 97, - 16, - 164, - 53, - 9, - 8, - 130, - 9, - 144, - 80, - 132, - 129, - 134, - 132, - 137, - 9, - 8, - 149, - 80, - 96, - 0, - 144, - 80, - 97, - 11, - 132, - 53, - 97, - 11, - 164, - 53, - 98, - 1, - 0, - 0, - 135, - 129, - 131, - 9, - 136, - 3, - 145, - 80, - 135, - 144, - 80, - 129, - 131, - 8, - 97, - 15, - 32, - 81, - 97, - 15, - 64, - 81, - 145, - 148, - 80, - 97, - 12, - 196, - 53, - 147, - 80, - 145, - 80, - 135, - 128, - 128, - 131, - 97, - 17, - 36, - 53, - 8, - 138, - 133, - 97, - 16, - 228, - 53, - 8, - 9, - 97, - 16, - 196, - 53, - 9, - 136, - 137, - 138, - 132, - 135, - 8, - 139, - 134, - 137, - 8, - 9, - 97, - 16, - 164, - 53, - 9, - 148, - 80, - 136, - 137, - 134, - 139, - 3, - 131, - 8, - 138, - 139, - 97, - 16, - 192, - 81, - 97, - 16, - 224, - 81, - 8, - 140, - 3, - 96, - 1, - 8, - 9, - 148, - 80, - 80, - 80, - 80, - 80, - 132, - 129, - 134, - 132, - 137, - 9, - 8, - 149, - 80, - 80, - 131, - 132, - 97, - 17, - 36, - 53, - 134, - 3, - 97, - 16, - 228, - 53, - 8, - 97, - 17, - 0, - 81, - 9, - 132, - 129, - 134, - 132, - 137, - 9, - 8, - 149, - 80, - 80, - 131, - 132, - 133, - 97, - 17, - 4, - 53, - 135, - 3, - 97, - 16, - 228, - 53, - 8, - 134, - 97, - 17, - 36, - 53, - 136, - 3, - 97, - 16, - 228, - 53, - 8, - 9, - 133, - 134, - 97, - 16, - 192, - 81, - 97, - 16, - 224, - 81, - 8, - 135, - 3, - 96, - 1, - 8, - 9, - 132, - 129, - 134, - 132, - 137, - 9, - 8, - 149, - 80, - 80, - 97, - 17, - 0, - 81, - 132, - 133, - 97, - 17, - 68, - 53, - 135, - 3, - 131, - 9, - 130, - 8, - 144, - 80, - 132, - 129, - 134, - 132, - 137, - 9, - 8, - 149, - 80, - 80, - 97, - 16, - 192, - 81, - 132, - 133, - 97, - 17, - 68, - 53, - 135, - 3, - 135, - 97, - 17, - 68, - 53, - 97, - 17, - 68, - 53, - 9, - 8, - 130, - 9, - 144, - 80, - 132, - 129, - 134, - 132, - 137, - 9, - 8, - 149, - 80, - 96, - 0, - 144, - 80, - 97, - 11, - 164, - 53, - 97, - 11, - 196, - 53, - 98, - 1, - 0, - 0, - 135, - 129, - 131, - 9, - 136, - 3, - 145, - 80, - 135, - 144, - 80, - 129, - 131, - 8, - 97, - 15, - 32, - 81, - 97, - 15, - 64, - 81, - 145, - 148, - 80, - 97, - 12, - 196, - 53, - 147, - 80, - 145, - 80, - 135, - 128, - 128, - 131, - 97, - 17, - 196, - 53, - 8, - 138, - 133, - 97, - 17, - 132, - 53, - 8, - 9, - 97, - 17, - 100, - 53, - 9, - 136, - 137, - 138, - 132, - 135, - 8, - 139, - 134, - 137, - 8, - 9, - 97, - 17, - 68, - 53, - 9, - 148, - 80, - 136, - 137, - 134, - 139, - 3, - 131, - 8, - 138, - 139, - 97, - 16, - 192, - 81, - 97, - 16, - 224, - 81, - 8, - 140, - 3, - 96, - 1, - 8, - 9, - 148, - 80, - 80, - 80, - 80, - 80, - 132, - 129, - 134, - 132, - 137, - 9, - 8, - 149, - 80, - 80, - 131, - 132, - 97, - 17, - 196, - 53, - 134, - 3, - 97, - 17, - 132, - 53, - 8, - 97, - 17, - 0, - 81, - 9, - 132, - 129, - 134, - 132, - 137, - 9, - 8, - 149, - 80, - 80, - 131, - 132, - 133, - 97, - 17, - 164, - 53, - 135, - 3, - 97, - 17, - 132, - 53, - 8, - 134, - 97, - 17, - 196, - 53, - 136, - 3, - 97, - 17, - 132, - 53, - 8, - 9, - 133, - 134, - 97, - 16, - 192, - 81, - 97, - 16, - 224, - 81, - 8, - 135, - 3, - 96, - 1, - 8, - 9, - 132, - 129, - 134, - 132, - 137, - 9, - 8, - 149, - 80, - 80, - 97, - 17, - 0, - 81, - 132, - 133, - 97, - 17, - 228, - 53, - 135, - 3, - 131, - 9, - 130, - 8, - 144, - 80, - 132, - 129, - 134, - 132, - 137, - 9, - 8, - 149, - 80, - 80, - 97, - 16, - 192, - 81, - 132, - 133, - 97, - 17, - 228, - 53, - 135, - 3, - 135, - 97, - 17, - 228, - 53, - 97, - 17, - 228, - 53, - 9, - 8, - 130, - 9, - 144, - 80, - 132, - 129, - 134, - 132, - 137, - 9, - 8, - 149, - 80, - 96, - 0, - 144, - 80, - 97, - 11, - 196, - 53, - 97, - 11, - 228, - 53, - 98, - 1, - 0, - 0, - 135, - 129, - 131, - 9, - 136, - 3, - 145, - 80, - 135, - 144, - 80, - 129, - 131, - 8, - 97, - 15, - 32, - 81, - 97, - 15, - 64, - 81, - 145, - 148, - 80, - 97, - 12, - 196, - 53, - 147, - 80, - 145, - 80, - 135, - 128, - 128, - 131, - 97, - 18, - 100, - 53, - 8, - 138, - 133, - 97, - 18, - 36, - 53, - 8, - 9, - 97, - 18, - 4, - 53, - 9, - 136, - 137, - 138, - 132, - 135, - 8, - 139, - 134, - 137, - 8, - 9, - 97, - 17, - 228, - 53, - 9, - 148, - 80, - 136, - 137, - 134, - 139, - 3, - 131, - 8, - 138, - 139, - 97, - 16, - 192, - 81, - 97, - 16, - 224, - 81, - 8, - 140, - 3, - 96, - 1, - 8, - 9, - 148, - 80, - 80, - 80, - 80, - 80, - 132, - 129, - 134, - 132, - 137, - 9, - 8, - 149, - 80, - 80, - 131, - 132, - 97, - 18, - 100, - 53, - 134, - 3, - 97, - 18, - 36, - 53, - 8, - 97, - 17, - 0, - 81, - 9, - 132, - 129, - 134, - 132, - 137, - 9, - 8, - 149, - 80, - 80, - 131, - 132, - 133, - 97, - 18, - 68, - 53, - 135, - 3, - 97, - 18, - 36, - 53, - 8, - 134, - 97, - 18, - 100, - 53, - 136, - 3, - 97, - 18, - 36, - 53, - 8, - 9, - 133, - 134, - 97, - 16, - 192, - 81, - 97, - 16, - 224, - 81, - 8, - 135, - 3, - 96, - 1, - 8, - 9, - 132, - 129, - 134, - 132, - 137, - 9, - 8, - 149, - 80, - 80, - 97, - 17, - 0, - 81, - 132, - 133, - 97, - 18, - 132, - 53, - 135, - 3, - 131, - 9, - 130, - 8, - 144, - 80, - 132, - 129, - 134, - 132, - 137, - 9, - 8, - 149, - 80, - 80, - 97, - 16, - 192, - 81, - 132, - 133, - 97, - 18, - 132, - 53, - 135, - 3, - 135, - 97, - 18, - 132, - 53, - 97, - 18, - 132, - 53, - 9, - 8, - 130, - 9, - 144, - 80, - 132, - 129, - 134, - 132, - 137, - 9, - 8, - 149, - 80, - 96, - 0, - 144, - 80, - 97, - 12, - 164, - 53, - 97, - 12, - 36, - 53, - 98, - 1, - 0, - 0, - 135, - 129, - 131, - 9, - 136, - 3, - 145, - 80, - 135, - 144, - 80, - 129, - 131, - 8, - 97, - 15, - 32, - 81, - 97, - 15, - 64, - 81, - 145, - 148, - 80, - 97, - 12, - 196, - 53, - 147, - 80, - 145, - 80, - 135, - 128, - 128, - 131, - 97, - 19, - 4, - 53, - 8, - 138, - 133, - 97, - 18, - 196, - 53, - 8, - 9, - 97, - 18, - 164, - 53, - 9, - 136, - 137, - 138, - 132, - 135, - 8, - 139, - 134, - 137, - 8, - 9, - 97, - 18, - 132, - 53, - 9, - 148, - 80, - 136, - 137, - 134, - 139, - 3, - 131, - 8, - 138, - 139, - 97, - 16, - 192, - 81, - 97, - 16, - 224, - 81, - 8, - 140, - 3, - 96, - 1, - 8, - 9, - 148, - 80, - 80, - 80, - 80, - 80, - 132, - 129, - 134, - 132, - 137, - 9, - 8, - 149, - 80, - 80, - 131, - 132, - 97, - 19, - 4, - 53, - 134, - 3, - 97, - 18, - 196, - 53, - 8, - 97, - 17, - 0, - 81, - 9, - 132, - 129, - 134, - 132, - 137, - 9, - 8, - 149, - 80, - 80, - 131, - 132, - 133, - 97, - 18, - 228, - 53, - 135, - 3, - 97, - 18, - 196, - 53, - 8, - 134, - 97, - 19, - 4, - 53, - 136, - 3, - 97, - 18, - 196, - 53, - 8, - 9, - 133, - 134, - 97, - 16, - 192, - 81, - 97, - 16, - 224, - 81, - 8, - 135, - 3, - 96, - 1, - 8, - 9, - 132, - 129, - 134, - 132, - 137, - 9, - 8, - 149, - 80, - 80, - 97, - 17, - 0, - 81, - 132, - 133, - 97, - 19, - 36, - 53, - 135, - 3, - 131, - 9, - 130, - 8, - 144, - 80, - 132, - 129, - 134, - 132, - 137, - 9, - 8, - 149, - 80, - 80, - 97, - 16, - 192, - 81, - 132, - 133, - 97, - 19, - 36, - 53, - 135, - 3, - 135, - 97, - 19, - 36, - 53, - 97, - 19, - 36, - 53, - 9, - 8, - 130, - 9, - 144, - 80, - 132, - 129, - 134, - 132, - 137, - 9, - 8, - 149, - 80, - 96, - 0, - 144, - 80, - 97, - 12, - 36, - 53, - 97, - 12, - 68, - 53, - 98, - 1, - 0, - 0, - 135, - 129, - 131, - 9, - 136, - 3, - 145, - 80, - 135, - 144, - 80, - 129, - 131, - 8, - 97, - 15, - 32, - 81, - 97, - 15, - 64, - 81, - 145, - 148, - 80, - 97, - 12, - 196, - 53, - 147, - 80, - 145, - 80, - 135, - 128, - 128, - 131, - 97, - 19, - 164, - 53, - 8, - 138, - 133, - 97, - 19, - 100, - 53, - 8, - 9, - 97, - 19, - 68, - 53, - 9, - 136, - 137, - 138, - 132, - 135, - 8, - 139, - 134, - 137, - 8, - 9, - 97, - 19, - 36, - 53, - 9, - 148, - 80, - 136, - 137, - 134, - 139, - 3, - 131, - 8, - 138, - 139, - 97, - 16, - 192, - 81, - 97, - 16, - 224, - 81, - 8, - 140, - 3, - 96, - 1, - 8, - 9, - 148, - 80, - 80, - 80, - 80, - 80, - 132, - 129, - 134, - 132, - 137, - 9, - 8, - 149, - 80, - 80, - 131, - 132, - 97, - 19, - 164, - 53, - 134, - 3, - 97, - 19, - 100, - 53, - 8, - 97, - 17, - 0, - 81, - 9, - 132, - 129, - 134, - 132, - 137, - 9, - 8, - 149, - 80, - 80, - 131, - 132, - 133, - 97, - 19, - 132, - 53, - 135, - 3, - 97, - 19, - 100, - 53, - 8, - 134, - 97, - 19, - 164, - 53, - 136, - 3, - 97, - 19, - 100, - 53, - 8, - 9, - 133, - 134, - 97, - 16, - 192, - 81, - 97, - 16, - 224, - 81, - 8, - 135, - 3, - 96, - 1, - 8, - 9, - 132, - 129, - 134, - 132, - 137, - 9, - 8, - 149, - 80, - 80, - 97, - 17, - 0, - 81, - 132, - 133, - 97, - 19, - 196, - 53, - 135, - 3, - 131, - 9, - 130, - 8, - 144, - 80, - 132, - 129, - 134, - 132, - 137, - 9, - 8, - 149, - 80, - 80, - 97, - 16, - 192, - 81, - 132, - 133, - 97, - 19, - 196, - 53, - 135, - 3, - 135, - 97, - 19, - 196, - 53, - 97, - 19, - 196, - 53, - 9, - 8, - 130, - 9, - 144, - 80, - 132, - 129, - 134, - 132, - 137, - 9, - 8, - 149, - 80, - 96, - 0, - 144, - 80, - 97, - 12, - 68, - 53, - 97, - 12, - 100, - 53, - 98, - 1, - 0, - 0, - 135, - 129, - 131, - 9, - 136, - 3, - 145, - 80, - 135, - 144, - 80, - 129, - 131, - 8, - 97, - 15, - 32, - 81, - 97, - 15, - 64, - 81, - 145, - 148, - 80, - 97, - 12, - 196, - 53, - 147, - 80, - 145, - 80, - 135, - 128, - 128, - 131, - 97, - 20, - 68, - 53, - 8, - 138, - 133, - 97, - 20, - 4, - 53, - 8, - 9, - 97, - 19, - 228, - 53, - 9, - 136, - 137, - 138, - 132, - 135, - 8, - 139, - 134, - 137, - 8, - 9, - 97, - 19, - 196, - 53, - 9, - 148, - 80, - 136, - 137, - 134, - 139, - 3, - 131, - 8, - 138, - 139, - 97, - 16, - 192, - 81, - 97, - 16, - 224, - 81, - 8, - 140, - 3, - 96, - 1, - 8, - 9, - 148, - 80, - 80, - 80, - 80, - 80, - 132, - 129, - 134, - 132, - 137, - 9, - 8, - 149, - 80, - 80, - 131, - 132, - 97, - 20, - 68, - 53, - 134, - 3, - 97, - 20, - 4, - 53, - 8, - 97, - 17, - 0, - 81, - 9, - 132, - 129, - 134, - 132, - 137, - 9, - 8, - 149, - 80, - 80, - 131, - 132, - 133, - 97, - 20, - 36, - 53, - 135, - 3, - 97, - 20, - 4, - 53, - 8, - 134, - 97, - 20, - 68, - 53, - 136, - 3, - 97, - 20, - 4, - 53, - 8, - 9, - 133, - 134, - 97, - 16, - 192, - 81, - 97, - 16, - 224, - 81, - 8, - 135, - 3, - 96, - 1, - 8, - 9, - 132, - 129, - 134, - 132, - 137, - 9, - 8, - 149, - 80, - 80, - 97, - 17, - 0, - 81, - 132, - 133, - 97, - 20, - 100, - 53, - 135, - 3, - 131, - 9, - 130, - 8, - 144, - 80, - 132, - 129, - 134, - 132, - 137, - 9, - 8, - 149, - 80, - 80, - 97, - 16, - 192, - 81, - 132, - 133, - 97, - 20, - 100, - 53, - 135, - 3, - 135, - 97, - 20, - 100, - 53, - 97, - 20, - 100, - 53, - 9, - 8, - 130, - 9, - 144, - 80, - 132, - 129, - 134, - 132, - 137, - 9, - 8, - 149, - 80, - 96, - 0, - 144, - 80, - 97, - 12, - 100, - 53, - 97, - 12, - 132, - 53, - 98, - 1, - 0, - 0, - 135, - 129, - 131, - 9, - 136, - 3, - 145, - 80, - 135, - 144, - 80, - 129, - 131, - 8, - 97, - 15, - 32, - 81, - 97, - 15, - 64, - 81, - 145, - 148, - 80, - 97, - 12, - 196, - 53, - 147, - 80, - 145, - 80, - 135, - 128, - 128, - 131, - 97, - 20, - 228, - 53, - 8, - 138, - 133, - 97, - 20, - 164, - 53, - 8, - 9, - 97, - 20, - 132, - 53, - 9, - 136, - 137, - 138, - 132, - 135, - 8, - 139, - 134, - 137, - 8, - 9, - 97, - 20, - 100, - 53, - 9, - 148, - 80, - 136, - 137, - 134, - 139, - 3, - 131, - 8, - 138, - 139, - 97, - 16, - 192, - 81, - 97, - 16, - 224, - 81, - 8, - 140, - 3, - 96, - 1, - 8, - 9, - 148, - 80, - 80, - 80, - 80, - 80, - 132, - 129, - 134, - 132, - 137, - 9, - 8, - 149, - 80, - 80, - 131, - 132, - 97, - 20, - 228, - 53, - 134, - 3, - 97, - 20, - 164, - 53, - 8, - 97, - 17, - 0, - 81, - 9, - 132, - 129, - 134, - 132, - 137, - 9, - 8, - 149, - 80, - 80, - 131, - 132, - 133, - 97, - 20, - 196, - 53, - 135, - 3, - 97, - 20, - 164, - 53, - 8, - 134, - 97, - 20, - 228, - 53, - 136, - 3, - 97, - 20, - 164, - 53, - 8, - 9, - 133, - 134, - 97, - 16, - 192, - 81, - 97, - 16, - 224, - 81, - 8, - 135, - 3, - 96, - 1, - 8, - 9, - 132, - 129, - 134, - 132, - 137, - 9, - 8, - 149, - 80, - 80, - 80, - 80, - 129, - 97, - 16, - 160, - 81, - 132, - 9, - 97, - 17, - 64, - 82, - 97, - 11, - 68, - 53, - 96, - 0, - 82, - 97, - 11, - 100, - 53, - 96, - 32, - 82, - 97, - 16, - 128, - 81, - 146, - 80, - 97, - 11, - 4, - 97, - 10, - 132, - 91, - 129, - 129, - 16, - 21, - 97, - 19, - 65, - 87, - 97, - 19, - 34, - 133, - 132, - 97, - 1, - 162, - 86, - 91, - 146, - 80, - 97, - 19, - 52, - 96, - 32, - 131, - 1, - 53, - 131, - 53, - 133, - 97, - 1, - 130, - 86, - 91, - 146, - 80, - 96, - 64, - 130, - 3, - 145, - 80, - 97, - 19, - 16, - 86, - 91, - 80, - 80, - 96, - 0, - 81, - 97, - 17, - 96, - 82, - 96, - 32, - 81, - 97, - 17, - 128, - 82, - 97, - 15, - 128, - 81, - 146, - 80, - 97, - 10, - 0, - 81, - 97, - 10, - 32, - 81, - 131, - 130, - 134, - 9, - 145, - 80, - 129, - 97, - 3, - 96, - 82, - 132, - 97, - 3, - 64, - 82, - 131, - 129, - 134, - 9, - 145, - 80, - 129, - 97, - 3, - 32, - 82, - 131, - 129, - 131, - 9, - 145, - 80, - 131, - 129, - 131, - 9, - 145, - 80, - 131, - 129, - 131, - 9, - 145, - 80, - 131, - 129, - 131, - 9, - 145, - 80, - 131, - 129, - 131, - 9, - 145, - 80, - 80, - 128, - 97, - 3, - 0, - 82, - 80, - 97, - 15, - 224, - 81, - 146, - 80, - 97, - 3, - 128, - 97, - 4, - 0, - 97, - 3, - 0, - 91, - 129, - 131, - 16, - 21, - 97, - 19, - 204, - 87, - 132, - 129, - 81, - 134, - 3, - 135, - 8, - 131, - 82, - 96, - 32, - 146, - 131, - 1, - 146, - 1, - 97, - 19, - 175, - 86, - 91, - 80, - 80, - 97, - 3, - 192, - 81, - 97, - 4, - 0, - 82, - 80, - 97, - 3, - 128, - 81, - 97, - 3, - 160, - 81, - 144, - 147, - 80, - 130, - 144, - 132, - 9, - 146, - 80, - 129, - 97, - 3, - 224, - 81, - 132, - 9, - 97, - 4, - 32, - 129, - 144, - 82, - 96, - 0, - 82, - 97, - 3, - 160, - 81, - 97, - 4, - 64, - 129, - 144, - 82, - 97, - 3, - 128, - 81, - 147, - 80, - 130, - 144, - 132, - 9, - 97, - 4, - 96, - 82, - 97, - 3, - 128, - 81, - 97, - 3, - 224, - 81, - 144, - 147, - 80, - 130, - 144, - 132, - 9, - 97, - 4, - 128, - 82, - 97, - 3, - 192, - 81, - 96, - 1, - 147, - 80, - 130, - 144, - 132, - 9, - 96, - 32, - 82, - 97, - 3, - 0, - 81, - 97, - 3, - 64, - 81, - 97, - 3, - 96, - 81, - 145, - 148, - 80, - 144, - 96, - 0, - 132, - 131, - 129, - 3, - 135, - 8, - 144, - 80, - 132, - 133, - 131, - 135, - 3, - 136, - 8, - 130, - 9, - 144, - 80, - 132, - 97, - 3, - 128, - 81, - 130, - 9, - 144, - 80, - 128, - 96, - 64, - 82, - 132, - 134, - 134, - 3, - 132, - 8, - 144, - 80, - 132, - 133, - 131, - 135, - 3, - 133, - 8, - 130, - 9, - 144, - 80, - 132, - 97, - 3, - 192, - 81, - 130, - 9, - 144, - 80, - 128, - 96, - 96, - 82, - 132, - 134, - 134, - 3, - 131, - 8, - 144, - 80, - 132, - 133, - 132, - 135, - 3, - 132, - 8, - 130, - 9, - 144, - 80, - 132, - 97, - 3, - 224, - 81, - 130, - 9, - 96, - 128, - 82, - 80, - 80, - 97, - 3, - 64, - 81, - 97, - 3, - 96, - 81, - 144, - 148, - 80, - 144, - 80, - 96, - 0, - 131, - 130, - 129, - 3, - 134, - 8, - 144, - 80, - 131, - 97, - 3, - 192, - 81, - 130, - 9, - 144, - 80, - 128, - 96, - 160, - 82, - 131, - 133, - 133, - 3, - 131, - 8, - 144, - 80, - 131, - 97, - 3, - 224, - 81, - 130, - 9, - 96, - 192, - 82, - 80, - 80, - 97, - 3, - 32, - 81, - 97, - 3, - 64, - 81, - 144, - 147, - 80, - 96, - 0, - 131, - 130, - 129, - 3, - 134, - 8, - 144, - 80, - 131, - 97, - 3, - 160, - 81, - 130, - 9, - 144, - 80, - 128, - 96, - 224, - 82, - 131, - 133, - 133, - 3, - 131, - 8, - 144, - 80, - 131, - 97, - 3, - 192, - 81, - 130, - 9, - 97, - 1, - 0, - 82, - 80, - 97, - 21, - 34, - 144, - 80, - 130, - 97, - 1, - 32, - 96, - 0, - 132, - 97, - 0, - 196, - 86, - 91, - 144, - 80, - 96, - 0, - 81, - 146, - 80, - 130, - 97, - 4, - 32, - 82, - 97, - 4, - 64, - 97, - 4, - 160, - 91, - 128, - 130, - 16, - 21, - 97, - 21, - 79, - 87, - 131, - 133, - 131, - 81, - 9, - 130, - 82, - 96, - 32, - 130, - 1, - 145, - 80, - 97, - 21, - 53, - 86, - 91, - 80, - 80, - 96, - 32, - 81, - 146, - 80, - 97, - 15, - 160, - 81, - 96, - 0, - 131, - 132, - 97, - 12, - 228, - 53, - 135, - 9, - 130, - 8, - 144, - 80, - 131, - 130, - 130, - 9, - 144, - 80, - 131, - 132, - 97, - 17, - 64, - 81, - 135, - 9, - 130, - 8, - 144, - 80, - 97, - 14, - 36, - 97, - 12, - 228, - 91, - 129, - 129, - 16, - 21, - 97, - 21, - 161, - 87, - 133, - 134, - 131, - 53, - 137, - 9, - 135, - 134, - 134, - 9, - 8, - 146, - 80, - 96, - 32, - 130, - 3, - 145, - 80, - 97, - 21, - 129, - 86, - 91, - 80, - 80, - 131, - 130, - 130, - 9, - 144, - 80, - 131, - 132, - 97, - 12, - 196, - 53, - 135, - 9, - 130, - 8, - 144, - 80, - 131, - 130, - 130, - 9, - 144, - 80, - 131, - 132, - 97, - 20, - 228, - 53, - 135, - 9, - 130, - 8, - 144, - 80, - 131, - 130, - 130, - 9, - 144, - 80, - 131, - 132, - 97, - 20, - 68, - 53, - 135, - 9, - 130, - 8, - 144, - 80, - 131, - 130, - 130, - 9, - 144, - 80, - 131, - 132, - 97, - 19, - 164, - 53, - 135, - 9, - 130, - 8, - 144, - 80, - 131, - 130, - 130, - 9, - 144, - 80, - 131, - 132, - 97, - 19, - 4, - 53, - 135, - 9, - 130, - 8, - 144, - 80, - 131, - 130, - 130, - 9, - 144, - 80, - 131, - 132, - 97, - 18, - 100, - 53, - 135, - 9, - 130, - 8, - 144, - 80, - 131, - 130, - 130, - 9, - 144, - 80, - 131, - 132, - 97, - 17, - 196, - 53, - 135, - 9, - 130, - 8, - 144, - 80, - 131, - 130, - 130, - 9, - 144, - 80, - 131, - 132, - 97, - 17, - 36, - 53, - 135, - 9, - 130, - 8, - 144, - 80, - 131, - 130, - 130, - 9, - 144, - 80, - 131, - 132, - 97, - 16, - 132, - 53, - 135, - 9, - 130, - 8, - 144, - 80, - 97, - 12, - 164, - 97, - 11, - 100, - 91, - 129, - 129, - 16, - 21, - 97, - 22, - 108, - 87, - 133, - 134, - 131, - 53, - 137, - 9, - 135, - 134, - 134, - 9, - 8, - 146, - 80, - 96, - 32, - 130, - 3, - 145, - 80, - 97, - 22, - 76, - 86, - 91, - 80, - 80, - 128, - 97, - 4, - 160, - 82, - 80, - 80, - 97, - 15, - 160, - 81, - 146, - 80, - 96, - 0, - 130, - 131, - 97, - 15, - 164, - 53, - 96, - 64, - 81, - 9, - 130, - 8, - 144, - 80, - 130, - 131, - 97, - 15, - 100, - 53, - 96, - 96, - 81, - 9, - 130, - 8, - 144, - 80, - 130, - 131, - 97, - 15, - 132, - 53, - 96, - 128, - 81, - 9, - 130, - 8, - 144, - 80, - 130, - 132, - 130, - 9, - 144, - 80, - 130, - 131, - 97, - 15, - 68, - 53, - 96, - 64, - 81, - 9, - 130, - 8, - 144, - 80, - 130, - 131, - 97, - 15, - 4, - 53, - 96, - 96, - 81, - 9, - 130, - 8, - 144, - 80, - 130, - 131, - 97, - 15, - 36, - 53, - 96, - 128, - 81, - 9, - 130, - 8, - 144, - 80, - 130, - 132, - 130, - 9, - 144, - 80, - 130, - 131, - 97, - 14, - 228, - 53, - 96, - 64, - 81, - 9, - 130, - 8, - 144, - 80, - 130, - 131, - 97, - 14, - 164, - 53, - 96, - 96, - 81, - 9, - 130, - 8, - 144, - 80, - 130, - 131, - 97, - 14, - 196, - 53, - 96, - 128, - 81, - 9, - 130, - 8, - 144, - 80, - 130, - 132, - 130, - 9, - 144, - 80, - 130, - 131, - 97, - 14, - 132, - 53, - 96, - 64, - 81, - 9, - 130, - 8, - 144, - 80, - 130, - 131, - 97, - 14, - 68, - 53, - 96, - 96, - 81, - 9, - 130, - 8, - 144, - 80, - 130, - 131, - 97, - 14, - 100, - 53, - 96, - 128, - 81, - 9, - 130, - 8, - 144, - 80, - 130, - 97, - 4, - 64, - 81, - 130, - 9, - 144, - 80, - 128, - 97, - 4, - 192, - 82, - 80, - 97, - 15, - 160, - 81, - 146, - 80, - 96, - 0, - 130, - 131, - 97, - 20, - 100, - 53, - 96, - 160, - 81, - 9, - 130, - 8, - 144, - 80, - 130, - 131, - 97, - 20, - 132, - 53, - 96, - 192, - 81, - 9, - 130, - 8, - 144, - 80, - 130, - 132, - 130, - 9, - 144, - 80, - 130, - 131, - 97, - 19, - 196, - 53, - 96, - 160, - 81, - 9, - 130, - 8, - 144, - 80, - 130, - 131, - 97, - 19, - 228, - 53, - 96, - 192, - 81, - 9, - 130, - 8, - 144, - 80, - 130, - 132, - 130, - 9, - 144, - 80, - 130, - 131, - 97, - 19, - 36, - 53, - 96, - 160, - 81, - 9, - 130, - 8, - 144, - 80, - 130, - 131, - 97, - 19, - 68, - 53, - 96, - 192, - 81, - 9, - 130, - 8, - 144, - 80, - 130, - 132, - 130, - 9, - 144, - 80, - 130, - 131, - 97, - 18, - 132, - 53, - 96, - 160, - 81, - 9, - 130, - 8, - 144, - 80, - 130, - 131, - 97, - 18, - 164, - 53, - 96, - 192, - 81, - 9, - 130, - 8, - 144, - 80, - 130, - 132, - 130, - 9, - 144, - 80, - 130, - 131, - 97, - 17, - 228, - 53, - 96, - 160, - 81, - 9, - 130, - 8, - 144, - 80, - 130, - 131, - 97, - 18, - 4, - 53, - 96, - 192, - 81, - 9, - 130, - 8, - 144, - 80, - 130, - 132, - 130, - 9, - 144, - 80, - 130, - 131, - 97, - 17, - 68, - 53, - 96, - 160, - 81, - 9, - 130, - 8, - 144, - 80, - 130, - 131, - 97, - 17, - 100, - 53, - 96, - 192, - 81, - 9, - 130, - 8, - 144, - 80, - 130, - 132, - 130, - 9, - 144, - 80, - 130, - 131, - 97, - 16, - 164, - 53, - 96, - 160, - 81, - 9, - 130, - 8, - 144, - 80, - 130, - 131, - 97, - 16, - 196, - 53, - 96, - 192, - 81, - 9, - 130, - 8, - 144, - 80, - 130, - 132, - 130, - 9, - 144, - 80, - 130, - 131, - 97, - 16, - 4, - 53, - 96, - 160, - 81, - 9, - 130, - 8, - 144, - 80, - 130, - 131, - 97, - 16, - 36, - 53, - 96, - 192, - 81, - 9, - 130, - 8, - 144, - 80, - 130, - 132, - 130, - 9, - 144, - 80, - 130, - 131, - 97, - 15, - 196, - 53, - 96, - 160, - 81, - 9, - 130, - 8, - 144, - 80, - 130, - 131, - 97, - 15, - 228, - 53, - 96, - 192, - 81, - 9, - 130, - 8, - 144, - 80, - 130, - 97, - 4, - 96, - 81, - 130, - 9, - 144, - 80, - 128, - 97, - 4, - 224, - 82, - 80, - 97, - 15, - 160, - 81, - 146, - 80, - 96, - 0, - 130, - 131, - 97, - 20, - 196, - 53, - 96, - 224, - 81, - 9, - 130, - 8, - 144, - 80, - 130, - 131, - 97, - 20, - 164, - 53, - 97, - 1, - 0, - 81, - 9, - 130, - 8, - 144, - 80, - 130, - 132, - 130, - 9, - 144, - 80, - 130, - 131, - 97, - 20, - 36, - 53, - 96, - 224, - 81, - 9, - 130, - 8, - 144, - 80, - 130, - 131, - 97, - 20, - 4, - 53, - 97, - 1, - 0, - 81, - 9, - 130, - 8, - 144, - 80, - 130, - 132, - 130, - 9, - 144, - 80, - 130, - 131, - 97, - 19, - 132, - 53, - 96, - 224, - 81, - 9, - 130, - 8, - 144, - 80, - 130, - 131, - 97, - 19, - 100, - 53, - 97, - 1, - 0, - 81, - 9, - 130, - 8, - 144, - 80, - 130, - 132, - 130, - 9, - 144, - 80, - 130, - 131, - 97, - 18, - 228, - 53, - 96, - 224, - 81, - 9, - 130, - 8, - 144, - 80, - 130, - 131, - 97, - 18, - 196, - 53, - 97, - 1, - 0, - 81, - 9, - 130, - 8, - 144, - 80, - 130, - 132, - 130, - 9, - 144, - 80, - 130, - 131, - 97, - 18, - 68, - 53, - 96, - 224, - 81, - 9, - 130, - 8, - 144, - 80, - 130, - 131, - 97, - 18, - 36, - 53, - 97, - 1, - 0, - 81, - 9, - 130, - 8, - 144, - 80, - 130, - 132, - 130, - 9, - 144, - 80, - 130, - 131, - 97, - 17, - 164, - 53, - 96, - 224, - 81, - 9, - 130, - 8, - 144, - 80, - 130, - 131, - 97, - 17, - 132, - 53, - 97, - 1, - 0, - 81, - 9, - 130, - 8, - 144, - 80, - 130, - 132, - 130, - 9, - 144, - 80, - 130, - 131, - 97, - 17, - 4, - 53, - 96, - 224, - 81, - 9, - 130, - 8, - 144, - 80, - 130, - 131, - 97, - 16, - 228, - 53, - 97, - 1, - 0, - 81, - 9, - 130, - 8, - 144, - 80, - 130, - 132, - 130, - 9, - 144, - 80, - 130, - 131, - 97, - 16, - 100, - 53, - 96, - 224, - 81, - 9, - 130, - 8, - 144, - 80, - 130, - 131, - 97, - 16, - 68, - 53, - 97, - 1, - 0, - 81, - 9, - 130, - 8, - 144, - 80, - 130, - 97, - 4, - 128, - 81, - 130, - 9, - 97, - 5, - 0, - 82, - 80, - 96, - 32, - 81, - 97, - 5, - 32, - 82, - 96, - 64, - 81, - 96, - 96, - 81, - 144, - 147, - 80, - 130, - 144, - 132, - 8, - 146, - 80, - 129, - 96, - 128, - 81, - 132, - 8, - 97, - 5, - 64, - 82, - 96, - 160, - 81, - 96, - 192, - 81, - 144, - 147, - 80, - 130, - 144, - 132, - 8, - 97, - 5, - 96, - 82, - 96, - 224, - 81, - 97, - 1, - 0, - 81, - 144, - 147, - 80, - 130, - 144, - 132, - 8, - 97, - 5, - 128, - 82, - 96, - 0, - 146, - 80, - 96, - 128, - 97, - 5, - 32, - 91, - 129, - 133, - 16, - 21, - 97, - 26, - 20, - 87, - 128, - 81, - 133, - 82, - 96, - 32, - 148, - 133, - 1, - 148, - 1, - 97, - 25, - 252, - 86, - 91, - 80, - 80, - 97, - 26, - 36, - 130, - 96, - 128, - 96, - 0, - 132, - 97, - 0, - 196, - 86, - 91, - 144, - 80, - 129, - 97, - 5, - 0, - 81, - 96, - 96, - 81, - 9, - 146, - 80, - 96, - 64, - 96, - 128, - 97, - 4, - 224, - 91, - 129, - 131, - 16, - 21, - 97, - 26, - 98, - 87, - 132, - 97, - 15, - 192, - 81, - 135, - 9, - 149, - 80, - 132, - 133, - 130, - 81, - 133, - 81, - 9, - 135, - 8, - 149, - 80, - 96, - 31, - 25, - 146, - 131, - 1, - 146, - 1, - 97, - 26, - 57, - 86, - 91, - 80, - 80, - 80, - 130, - 97, - 17, - 160, - 82, - 97, - 15, - 192, - 81, - 146, - 80, - 97, - 10, - 132, - 53, - 96, - 0, - 82, - 97, - 10, - 164, - 53, - 96, - 32, - 82, - 97, - 26, - 139, - 97, - 15, - 160, - 81, - 130, - 97, - 1, - 162, - 86, - 91, - 144, - 80, - 97, - 26, - 158, - 97, - 17, - 128, - 81, - 97, - 17, - 96, - 81, - 131, - 97, - 1, - 130, - 86, - 91, - 144, - 80, - 97, - 14, - 192, - 97, - 12, - 0, - 91, - 129, - 129, - 16, - 21, - 97, - 26, - 219, - 87, - 97, - 26, - 188, - 97, - 15, - 160, - 81, - 132, - 97, - 1, - 162, - 86, - 91, - 146, - 80, - 97, - 26, - 206, - 96, - 32, - 131, - 1, - 81, - 131, - 81, - 133, - 97, - 1, - 130, - 86, - 91, - 146, - 80, - 96, - 64, - 130, - 3, - 145, - 80, - 97, - 26, - 167, - 86, - 91, - 80, - 80, - 97, - 26, - 234, - 97, - 15, - 160, - 81, - 130, - 97, - 1, - 162, - 86, - 91, - 144, - 80, - 97, - 26, - 253, - 97, - 7, - 36, - 53, - 97, - 7, - 4, - 53, - 131, - 97, - 1, - 130, - 86, - 91, - 144, - 80, - 97, - 27, - 12, - 97, - 15, - 160, - 81, - 130, - 97, - 1, - 162, - 86, - 91, - 144, - 80, - 97, - 27, - 31, - 97, - 6, - 164, - 53, - 97, - 6, - 132, - 53, - 131, - 97, - 1, - 130, - 86, - 91, - 144, - 80, - 97, - 27, - 46, - 97, - 15, - 160, - 81, - 130, - 97, - 1, - 162, - 86, - 91, - 144, - 80, - 97, - 27, - 65, - 97, - 6, - 36, - 53, - 97, - 6, - 4, - 53, - 131, - 97, - 1, - 130, - 86, - 91, - 144, - 80, - 97, - 27, - 80, - 97, - 15, - 160, - 81, - 130, - 97, - 1, - 162, - 86, - 91, - 144, - 80, - 97, - 27, - 99, - 97, - 5, - 164, - 53, - 97, - 5, - 132, - 53, - 131, - 97, - 1, - 130, - 86, - 91, - 144, - 80, - 97, - 27, - 114, - 97, - 15, - 160, - 81, - 130, - 97, - 1, - 162, - 86, - 91, - 144, - 80, - 97, - 27, - 133, - 97, - 5, - 36, - 53, - 97, - 5, - 4, - 53, - 131, - 97, - 1, - 130, - 86, - 91, - 144, - 80, - 97, - 27, - 148, - 97, - 15, - 160, - 81, - 130, - 97, - 1, - 162, - 86, - 91, - 144, - 80, - 97, - 27, - 167, - 97, - 4, - 164, - 53, - 97, - 4, - 132, - 53, - 131, - 97, - 1, - 130, - 86, - 91, - 144, - 80, - 97, - 27, - 182, - 97, - 15, - 160, - 81, - 130, - 97, - 1, - 162, - 86, - 91, - 144, - 80, - 97, - 27, - 201, - 97, - 4, - 36, - 53, - 97, - 4, - 4, - 53, - 131, - 97, - 1, - 130, - 86, - 91, - 144, - 80, - 97, - 27, - 216, - 97, - 15, - 160, - 81, - 130, - 97, - 1, - 162, - 86, - 91, - 144, - 80, - 97, - 27, - 235, - 97, - 3, - 164, - 53, - 97, - 3, - 132, - 53, - 131, - 97, - 1, - 130, - 86, - 91, - 144, - 80, - 97, - 27, - 250, - 97, - 15, - 160, - 81, - 130, - 97, - 1, - 162, - 86, - 91, - 144, - 80, - 97, - 28, - 13, - 97, - 1, - 36, - 53, - 97, - 1, - 4, - 53, - 131, - 97, - 1, - 130, - 86, - 91, - 144, - 80, - 97, - 3, - 4, - 97, - 2, - 4, - 91, - 129, - 129, - 16, - 21, - 97, - 28, - 74, - 87, - 97, - 28, - 43, - 97, - 15, - 160, - 81, - 132, - 97, - 1, - 162, - 86, - 91, - 146, - 80, - 97, - 28, - 61, - 96, - 32, - 131, - 1, - 53, - 131, - 53, - 133, - 97, - 1, - 130, - 86, - 91, - 146, - 80, - 96, - 64, - 130, - 3, - 145, - 80, - 97, - 28, - 22, - 86, - 91, - 80, - 80, - 97, - 28, - 89, - 97, - 15, - 160, - 81, - 130, - 97, - 1, - 162, - 86, - 91, - 144, - 80, - 97, - 28, - 106, - 96, - 228, - 53, - 96, - 196, - 53, - 131, - 97, - 1, - 130, - 86, - 91, - 144, - 80, - 97, - 2, - 4, - 97, - 1, - 4, - 91, - 129, - 129, - 16, - 21, - 97, - 28, - 167, - 87, - 97, - 28, - 136, - 97, - 15, - 160, - 81, - 132, - 97, - 1, - 162, - 86, - 91, - 146, - 80, - 97, - 28, - 154, - 96, - 32, - 131, - 1, - 53, - 131, - 53, - 133, - 97, - 1, - 130, - 86, - 91, - 146, - 80, - 96, - 64, - 130, - 3, - 145, - 80, - 97, - 28, - 115, - 86, - 91, - 80, - 80, - 97, - 8, - 4, - 53, - 96, - 128, - 82, - 97, - 8, - 36, - 53, - 96, - 160, - 82, - 97, - 7, - 196, - 97, - 7, - 4, - 91, - 129, - 129, - 16, - 21, - 97, - 28, - 242, - 87, - 97, - 28, - 211, - 97, - 15, - 160, - 81, - 132, - 97, - 1, - 220, - 86, - 91, - 146, - 80, - 97, - 28, - 229, - 96, - 32, - 131, - 1, - 53, - 131, - 53, - 133, - 97, - 1, - 189, - 86, - 91, - 146, - 80, - 96, - 64, - 130, - 3, - 145, - 80, - 97, - 28, - 190, - 86, - 91, - 80, - 80, - 97, - 29, - 4, - 130, - 97, - 4, - 64, - 81, - 133, - 9, - 130, - 97, - 1, - 220, - 86, - 91, - 144, - 80, - 97, - 29, - 21, - 96, - 160, - 81, - 96, - 128, - 81, - 131, - 97, - 1, - 130, - 86, - 91, - 144, - 80, - 129, - 97, - 15, - 192, - 81, - 132, - 9, - 146, - 80, - 97, - 10, - 68, - 53, - 96, - 128, - 82, - 97, - 10, - 100, - 53, - 96, - 160, - 82, - 97, - 10, - 4, - 97, - 8, - 4, - 91, - 129, - 129, - 16, - 21, - 97, - 29, - 105, - 87, - 97, - 29, - 74, - 97, - 15, - 160, - 81, - 132, - 97, - 1, - 220, - 86, - 91, - 146, - 80, - 97, - 29, - 92, - 96, - 32, - 131, - 1, - 53, - 131, - 53, - 133, - 97, - 1, - 189, - 86, - 91, - 146, - 80, - 96, - 64, - 130, - 3, - 145, - 80, - 97, - 29, - 53, - 86, - 91, - 80, - 80, - 97, - 29, - 123, - 130, - 97, - 4, - 96, - 81, - 133, - 9, - 130, - 97, - 1, - 220, - 86, - 91, - 144, - 80, - 97, - 29, - 140, - 96, - 160, - 81, - 96, - 128, - 81, - 131, - 97, - 1, - 130, - 86, - 91, - 144, - 80, - 129, - 97, - 15, - 192, - 81, - 132, - 9, - 146, - 80, - 97, - 6, - 196, - 53, - 96, - 128, - 82, - 97, - 6, - 228, - 53, - 96, - 160, - 82, - 97, - 29, - 178, - 97, - 15, - 160, - 81, - 130, - 97, - 1, - 220, - 86, - 91, - 144, - 80, - 97, - 29, - 197, - 97, - 6, - 100, - 53, - 97, - 6, - 68, - 53, - 131, - 97, - 1, - 189, - 86, - 91, - 144, - 80, - 97, - 29, - 212, - 97, - 15, - 160, - 81, - 130, - 97, - 1, - 220, - 86, - 91, - 144, - 80, - 97, - 29, - 231, - 97, - 5, - 228, - 53, - 97, - 5, - 196, - 53, - 131, - 97, - 1, - 189, - 86, - 91, - 144, - 80, - 97, - 29, - 246, - 97, - 15, - 160, - 81, - 130, - 97, - 1, - 220, - 86, - 91, - 144, - 80, - 97, - 30, - 9, - 97, - 5, - 100, - 53, - 97, - 5, - 68, - 53, - 131, - 97, - 1, - 189, - 86, - 91, - 144, - 80, - 97, - 30, - 24, - 97, - 15, - 160, - 81, - 130, - 97, - 1, - 220, - 86, - 91, - 144, - 80, - 97, - 30, - 43, - 97, - 4, - 228, - 53, - 97, - 4, - 196, - 53, - 131, - 97, - 1, - 189, - 86, - 91, - 144, - 80, - 97, - 30, - 58, - 97, - 15, - 160, - 81, - 130, - 97, - 1, - 220, - 86, - 91, - 144, - 80, - 97, - 30, - 77, - 97, - 4, - 100, - 53, - 97, - 4, - 68, - 53, - 131, - 97, - 1, - 189, - 86, - 91, - 144, - 80, - 97, - 30, - 92, - 97, - 15, - 160, - 81, - 130, - 97, - 1, - 220, - 86, - 91, - 144, - 80, - 97, - 30, - 111, - 97, - 3, - 228, - 53, - 97, - 3, - 196, - 53, - 131, - 97, - 1, - 189, - 86, - 91, - 144, - 80, - 97, - 30, - 126, - 97, - 15, - 160, - 81, - 130, - 97, - 1, - 220, - 86, - 91, - 144, - 80, - 97, - 30, - 145, - 97, - 3, - 100, - 53, - 97, - 3, - 68, - 53, - 131, - 97, - 1, - 189, - 86, - 91, - 144, - 80, - 97, - 30, - 163, - 130, - 97, - 4, - 128, - 81, - 133, - 9, - 130, - 97, - 1, - 220, - 86, - 91, - 144, - 80, - 97, - 30, - 180, - 96, - 160, - 81, - 96, - 128, - 81, - 131, - 97, - 1, - 130, - 86, - 91, - 144, - 80, - 97, - 11, - 0, - 81, - 96, - 128, - 82, - 97, - 11, - 32, - 81, - 96, - 160, - 82, - 97, - 30, - 211, - 97, - 17, - 160, - 81, - 131, - 3, - 130, - 97, - 1, - 220, - 86, - 91, - 144, - 80, - 97, - 30, - 228, - 96, - 160, - 81, - 96, - 128, - 81, - 131, - 97, - 1, - 130, - 86, - 91, - 144, - 80, - 97, - 21, - 4, - 53, - 96, - 128, - 82, - 97, - 21, - 36, - 53, - 96, - 160, - 82, - 97, - 31, - 3, - 97, - 4, - 0, - 81, - 131, - 3, - 130, - 97, - 1, - 220, - 86, - 91, - 144, - 80, - 97, - 31, - 20, - 96, - 160, - 81, - 96, - 128, - 81, - 131, - 97, - 1, - 130, - 86, - 91, - 144, - 80, - 97, - 21, - 68, - 53, - 96, - 128, - 82, - 97, - 21, - 100, - 53, - 96, - 160, - 82, - 97, - 31, - 49, - 97, - 15, - 224, - 81, - 130, - 97, - 1, - 220, - 86, - 91, - 144, - 80, - 97, - 31, - 66, - 96, - 160, - 81, - 96, - 128, - 81, - 131, - 97, - 1, - 130, - 86, - 91, - 144, - 80, - 96, - 0, - 81, - 97, - 17, - 192, - 82, - 96, - 32, - 81, - 97, - 17, - 224, - 82, - 97, - 21, - 68, - 53, - 97, - 18, - 0, - 82, - 97, - 21, - 100, - 53, - 97, - 18, - 32, - 82, - 97, - 10, - 128, - 81, - 21, - 97, - 32, - 22, - 87, - 97, - 16, - 0, - 81, - 96, - 0, - 82, - 97, - 16, - 32, - 81, - 96, - 32, - 82, - 97, - 16, - 64, - 81, - 96, - 64, - 82, - 97, - 16, - 96, - 81, - 96, - 96, - 82, - 97, - 17, - 192, - 81, - 96, - 128, - 82, - 97, - 17, - 224, - 81, - 96, - 160, - 82, - 97, - 18, - 0, - 81, - 96, - 192, - 82, - 97, - 18, - 32, - 81, - 96, - 224, - 82, - 129, - 97, - 1, - 0, - 96, - 0, - 32, - 6, - 146, - 80, - 97, - 31, - 183, - 131, - 130, - 97, - 1, - 162, - 86, - 91, - 144, - 80, - 97, - 31, - 202, - 97, - 17, - 224, - 81, - 97, - 17, - 192, - 81, - 131, - 97, - 1, - 130, - 86, - 91, - 144, - 80, - 96, - 0, - 81, - 97, - 17, - 192, - 82, - 96, - 32, - 81, - 97, - 17, - 224, - 82, - 97, - 16, - 64, - 81, - 96, - 0, - 82, - 97, - 16, - 96, - 81, - 96, - 32, - 82, - 97, - 31, - 242, - 131, - 130, - 97, - 1, - 162, - 86, - 91, - 144, - 80, - 97, - 32, - 5, - 97, - 18, - 32, - 81, - 97, - 18, - 0, - 81, - 131, - 97, - 1, - 130, - 86, - 91, - 144, - 80, - 96, - 0, - 81, - 97, - 18, - 0, - 82, - 96, - 32, - 81, - 97, - 18, - 32, - 82, - 91, - 97, - 32, - 47, - 97, - 18, - 32, - 81, - 97, - 18, - 0, - 81, - 97, - 17, - 224, - 81, - 97, - 17, - 192, - 81, - 133, - 97, - 1, - 247, - 86, - 91, - 144, - 80, - 128, - 97, - 32, - 59, - 87, - 96, - 0, - 128, - 253, - 91, - 80, - 80, - 80, - 96, - 1, - 96, - 0, - 82, - 96, - 32, - 96, - 0, - 243, - 91, - 96, - 0, - 128, - 131, - 96, - 31, - 132, - 1, - 18, - 97, - 32, - 91, - 87, - 96, - 0, - 128, - 253, - 91, - 80, - 129, - 53, - 103, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 129, - 17, - 21, - 97, - 32, - 115, - 87, - 96, - 0, - 128, - 253, - 91, - 96, - 32, - 131, - 1, - 145, - 80, - 131, - 96, - 32, - 130, - 96, - 5, - 27, - 133, - 1, - 1, - 17, - 21, - 97, - 32, - 142, - 87, - 96, - 0, - 128, - 253, - 91, - 146, - 80, - 146, - 144, - 80, - 86, - 91, - 96, - 0, - 128, - 96, - 0, - 128, - 96, - 0, - 96, - 96, - 134, - 136, - 3, - 18, - 21, - 97, - 32, - 173, - 87, - 96, - 0, - 128, - 253, - 91, - 133, - 53, - 96, - 1, - 96, - 1, - 96, - 160, - 27, - 3, - 129, - 22, - 129, - 20, - 97, - 32, - 196, - 87, - 96, - 0, - 128, - 253, - 91, - 148, - 80, - 96, - 32, - 134, - 1, - 53, - 103, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 128, - 130, - 17, - 21, - 97, - 32, - 225, - 87, - 96, - 0, - 128, - 253, - 91, - 129, - 136, - 1, - 145, - 80, - 136, - 96, - 31, - 131, - 1, - 18, - 97, - 32, - 245, - 87, - 96, - 0, - 128, - 253, - 91, - 129, - 53, - 129, - 129, - 17, - 21, - 97, - 33, - 4, - 87, - 96, - 0, - 128, - 253, - 91, - 137, - 96, - 32, - 130, - 133, - 1, - 1, - 17, - 21, - 97, - 33, - 22, - 87, - 96, - 0, - 128, - 253, - 91, - 96, - 32, - 131, - 1, - 150, - 80, - 128, - 149, - 80, - 80, - 96, - 64, - 136, - 1, - 53, - 145, - 80, - 128, - 130, - 17, - 21, - 97, - 33, - 52, - 87, - 96, - 0, - 128, - 253, - 91, - 80, - 97, - 33, - 65, - 136, - 130, - 137, - 1, - 97, - 32, - 73, - 86, - 91, - 150, - 153, - 149, - 152, - 80, - 147, - 150, - 80, - 146, - 148, - 147, - 146, - 80, - 80, - 80, - 86, - 254, - 162, - 100, - 105, - 112, - 102, - 115, - 88, - 34, - 18, - 32, - 105, - 128, - 67, - 95, - 149, - 145, - 57, - 3, - 120, - 226, - 85, - 244, - 2, - 110, - 235, - 66, - 197, - 104, - 20, - 17, - 79, - 158, - 75, - 15, - 168, - 250, - 111, - 156, - 91, - 173, - 236, - 91, - 100, - 115, - 111, - 108, - 99, - 67, - 0, - 8, - 18, - 0, - 51, - ]; - ///The deployed bytecode of the contract. - pub static VERIFIER_DEPLOYED_BYTECODE: ::ethers::core::types::Bytes = ::ethers::core::types::Bytes::from_static( - __DEPLOYED_BYTECODE, - ); - pub struct Verifier(::ethers::contract::Contract); - impl ::core::clone::Clone for Verifier { - fn clone(&self) -> Self { - Self(::core::clone::Clone::clone(&self.0)) - } - } - impl ::core::ops::Deref for Verifier { - type Target = ::ethers::contract::Contract; - fn deref(&self) -> &Self::Target { - &self.0 - } - } - impl ::core::ops::DerefMut for Verifier { - fn deref_mut(&mut self) -> &mut Self::Target { - &mut self.0 - } - } - impl ::core::fmt::Debug for Verifier { - fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { - f.debug_tuple(stringify!(Verifier)).field(&self.address()).finish() - } - } - impl Verifier { - /// Creates a new contract instance with the specified `ethers` client at - /// `address`. The contract derefs to a `ethers::Contract` object. - pub fn new>( - address: T, - client: ::std::sync::Arc, - ) -> Self { - Self( - ::ethers::contract::Contract::new( - address.into(), - VERIFIER_ABI.clone(), - client, - ), - ) - } - /// Constructs the general purpose `Deployer` instance based on the provided constructor arguments and sends it. - /// Returns a new instance of a deployer that returns an instance of this contract after sending the transaction - /// - /// Notes: - /// - If there are no constructor arguments, you should pass `()` as the argument. - /// - The default poll duration is 7 seconds. - /// - The default number of confirmations is 1 block. - /// - /// - /// # Example - /// - /// Generate contract bindings with `abigen!` and deploy a new contract instance. - /// - /// *Note*: this requires a `bytecode` and `abi` object in the `greeter.json` artifact. - /// - /// ```ignore - /// # async fn deploy(client: ::std::sync::Arc) { - /// abigen!(Greeter, "../greeter.json"); - /// - /// let greeter_contract = Greeter::deploy(client, "Hello world!".to_string()).unwrap().send().await.unwrap(); - /// let msg = greeter_contract.greet().call().await.unwrap(); - /// # } - /// ``` - pub fn deploy( - client: ::std::sync::Arc, - constructor_args: T, - ) -> ::core::result::Result< - ::ethers::contract::builders::ContractDeployer, - ::ethers::contract::ContractError, - > { - let factory = ::ethers::contract::ContractFactory::new( - VERIFIER_ABI.clone(), - VERIFIER_BYTECODE.clone().into(), - client, - ); - let deployer = factory.deploy(constructor_args)?; - let deployer = ::ethers::contract::ContractDeployer::new(deployer); - Ok(deployer) - } - ///Calls the contract's `verifyProof` (0xaf83a18d) function - pub fn verify_proof( - &self, - vk: ::ethers::core::types::Address, - proof: ::ethers::core::types::Bytes, - instances: ::std::vec::Vec<::ethers::core::types::U256>, - ) -> ::ethers::contract::builders::ContractCall { - self.0 - .method_hash([175, 131, 161, 141], (vk, proof, instances)) - .expect("method not found (this should never happen)") - } - } - impl From<::ethers::contract::Contract> - for Verifier { - fn from(contract: ::ethers::contract::Contract) -> Self { - Self::new(contract.address(), contract.client()) - } - } - ///Container type for all input parameters for the `verifyProof` function with signature `verifyProof(address,bytes,uint256[])` and selector `0xaf83a18d` - #[derive( - Clone, - ::ethers::contract::EthCall, - ::ethers::contract::EthDisplay, - Default, - Debug, - PartialEq, - Eq, - Hash - )] - #[ethcall(name = "verifyProof", abi = "verifyProof(address,bytes,uint256[])")] - pub struct VerifyProofCall { - pub vk: ::ethers::core::types::Address, - pub proof: ::ethers::core::types::Bytes, - pub instances: ::std::vec::Vec<::ethers::core::types::U256>, - } - ///Container type for all return fields from the `verifyProof` function with signature `verifyProof(address,bytes,uint256[])` and selector `0xaf83a18d` - #[derive( - Clone, - ::ethers::contract::EthAbiType, - ::ethers::contract::EthAbiCodec, - Default, - Debug, - PartialEq, - Eq, - Hash - )] - pub struct VerifyProofReturn(pub bool); -} diff --git a/backend/src/contracts/generated/summa_contract.rs b/backend/src/contracts/generated/summa_contract.rs deleted file mode 100644 index 89f23fc9..00000000 --- a/backend/src/contracts/generated/summa_contract.rs +++ /dev/null @@ -1,19125 +0,0 @@ -pub use summa::*; -/// This module was auto-generated with ethers-rs Abigen. -/// More information at: -#[allow( - clippy::enum_variant_names, - clippy::too_many_arguments, - clippy::upper_case_acronyms, - clippy::type_complexity, - dead_code, - non_camel_case_types, -)] -pub mod summa { - #[rustfmt::skip] - const __ABI: &str = "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_verifyingKey\",\"type\":\"address\",\"components\":[]},{\"internalType\":\"contract IVerifier\",\"name\":\"_polynomialInterpolationVerifier\",\"type\":\"address\",\"components\":[]},{\"internalType\":\"contract IVerifier\",\"name\":\"_grandSumVerifier\",\"type\":\"address\",\"components\":[]},{\"internalType\":\"contract IInclusionVerifier\",\"name\":\"_inclusionVerifier\",\"type\":\"address\",\"components\":[]},{\"internalType\":\"string[]\",\"name\":\"cryptocurrencyNames\",\"type\":\"string[]\",\"components\":[]},{\"internalType\":\"string[]\",\"name\":\"cryptocurrencyChains\",\"type\":\"string[]\",\"components\":[]},{\"internalType\":\"uint8\",\"name\":\"balanceByteRange\",\"type\":\"uint8\",\"components\":[]}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\",\"outputs\":[]},{\"inputs\":[{\"internalType\":\"struct Summa.AddressOwnershipProof[]\",\"name\":\"addressOwnershipProofs\",\"type\":\"tuple[]\",\"components\":[{\"internalType\":\"string\",\"name\":\"cexAddress\",\"type\":\"string\",\"components\":[]},{\"internalType\":\"string\",\"name\":\"chain\",\"type\":\"string\",\"components\":[]},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\",\"components\":[]},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\",\"components\":[]}],\"indexed\":false}],\"type\":\"event\",\"name\":\"AddressOwnershipProofSubmitted\",\"outputs\":[],\"anonymous\":false},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\",\"components\":[],\"indexed\":true},{\"internalType\":\"uint256[]\",\"name\":\"totalBalances\",\"type\":\"uint256[]\",\"components\":[],\"indexed\":false},{\"internalType\":\"bytes\",\"name\":\"snarkProof\",\"type\":\"bytes\",\"components\":[],\"indexed\":false},{\"internalType\":\"bytes\",\"name\":\"grandSumProof\",\"type\":\"bytes\",\"components\":[],\"indexed\":false}],\"type\":\"event\",\"name\":\"LiabilitiesCommitmentSubmitted\",\"outputs\":[],\"anonymous\":false},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\",\"components\":[],\"indexed\":true},{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\",\"components\":[],\"indexed\":true}],\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"outputs\":[],\"anonymous\":false},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\",\"components\":[]}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"addressOwnershipProofs\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"cexAddress\",\"type\":\"string\",\"components\":[]},{\"internalType\":\"string\",\"name\":\"chain\",\"type\":\"string\",\"components\":[]},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\",\"components\":[]},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\",\"components\":[]}]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\",\"components\":[]}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"commitments\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\",\"components\":[]}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"config\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"balanceByteRange\",\"type\":\"uint8\",\"components\":[]}]},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"addressHash\",\"type\":\"bytes32\",\"components\":[]}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"getAddressOwnershipProof\",\"outputs\":[{\"internalType\":\"struct Summa.AddressOwnershipProof\",\"name\":\"\",\"type\":\"tuple\",\"components\":[{\"internalType\":\"string\",\"name\":\"cexAddress\",\"type\":\"string\",\"components\":[]},{\"internalType\":\"string\",\"name\":\"chain\",\"type\":\"string\",\"components\":[]},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\",\"components\":[]},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\",\"components\":[]}]}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\",\"components\":[]}]},{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"renounceOwnership\",\"outputs\":[]},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"snarkProof\",\"type\":\"bytes\",\"components\":[]},{\"internalType\":\"bytes\",\"name\":\"grandSumProof\",\"type\":\"bytes\",\"components\":[]},{\"internalType\":\"uint256[]\",\"name\":\"totalBalances\",\"type\":\"uint256[]\",\"components\":[]},{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\",\"components\":[]}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"submitCommitment\",\"outputs\":[]},{\"inputs\":[{\"internalType\":\"struct Summa.AddressOwnershipProof[]\",\"name\":\"_addressOwnershipProofs\",\"type\":\"tuple[]\",\"components\":[{\"internalType\":\"string\",\"name\":\"cexAddress\",\"type\":\"string\",\"components\":[]},{\"internalType\":\"string\",\"name\":\"chain\",\"type\":\"string\",\"components\":[]},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\",\"components\":[]},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\",\"components\":[]}]}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"submitProofOfAddressOwnership\",\"outputs\":[]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\",\"components\":[]}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"transferOwnership\",\"outputs\":[]},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\",\"components\":[]},{\"internalType\":\"bytes\",\"name\":\"inclusionProof\",\"type\":\"bytes\",\"components\":[]},{\"internalType\":\"uint256[]\",\"name\":\"challenges\",\"type\":\"uint256[]\",\"components\":[]},{\"internalType\":\"uint256[]\",\"name\":\"values\",\"type\":\"uint256[]\",\"components\":[]}],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"verifyInclusionProof\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\",\"components\":[]}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"verifyingKey\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\",\"components\":[]}]}]"; - ///The parsed JSON ABI of the contract. - pub static SUMMA_ABI: ::ethers::contract::Lazy<::ethers::core::abi::Abi> = ::ethers::contract::Lazy::new(|| - ::ethers::core::utils::__serde_json::from_str(__ABI).expect("ABI is always valid")); - #[rustfmt::skip] - const __BYTECODE: &[u8] = &[ - 97, - 1, - 0, - 96, - 64, - 82, - 52, - 128, - 21, - 98, - 0, - 0, - 18, - 87, - 96, - 0, - 128, - 253, - 91, - 80, - 96, - 64, - 81, - 98, - 0, - 41, - 0, - 56, - 3, - 128, - 98, - 0, - 41, - 0, - 131, - 57, - 129, - 1, - 96, - 64, - 129, - 144, - 82, - 98, - 0, - 0, - 53, - 145, - 98, - 0, - 7, - 91, - 86, - 91, - 98, - 0, - 0, - 64, - 51, - 98, - 0, - 4, - 42, - 86, - 91, - 96, - 1, - 96, - 1, - 96, - 160, - 27, - 3, - 135, - 22, - 98, - 0, - 0, - 156, - 87, - 96, - 64, - 81, - 98, - 70, - 27, - 205, - 96, - 229, - 27, - 129, - 82, - 96, - 32, - 96, - 4, - 130, - 1, - 82, - 96, - 29, - 96, - 36, - 130, - 1, - 82, - 127, - 73, - 110, - 118, - 97, - 108, - 105, - 100, - 32, - 118, - 101, - 114, - 105, - 102, - 121, - 105, - 110, - 103, - 32, - 107, - 101, - 121, - 32, - 97, - 100, - 100, - 114, - 101, - 115, - 115, - 0, - 0, - 0, - 96, - 68, - 130, - 1, - 82, - 96, - 100, - 1, - 91, - 96, - 64, - 81, - 128, - 145, - 3, - 144, - 253, - 91, - 96, - 1, - 96, - 1, - 96, - 160, - 27, - 3, - 135, - 22, - 96, - 128, - 82, - 129, - 81, - 131, - 81, - 20, - 98, - 0, - 1, - 20, - 87, - 96, - 64, - 81, - 98, - 70, - 27, - 205, - 96, - 229, - 27, - 129, - 82, - 96, - 32, - 96, - 4, - 130, - 1, - 82, - 96, - 47, - 96, - 36, - 130, - 1, - 82, - 127, - 67, - 114, - 121, - 112, - 116, - 111, - 99, - 117, - 114, - 114, - 101, - 110, - 99, - 121, - 32, - 110, - 97, - 109, - 101, - 115, - 32, - 97, - 110, - 100, - 32, - 99, - 104, - 97, - 105, - 110, - 115, - 32, - 96, - 68, - 130, - 1, - 82, - 110, - 13, - 206, - 173, - 172, - 76, - 174, - 68, - 13, - 173, - 46, - 109, - 172, - 46, - 140, - 109, - 96, - 139, - 27, - 96, - 100, - 130, - 1, - 82, - 96, - 132, - 1, - 98, - 0, - 0, - 147, - 86, - 91, - 96, - 0, - 91, - 131, - 81, - 129, - 16, - 21, - 98, - 0, - 1, - 209, - 87, - 131, - 129, - 129, - 81, - 129, - 16, - 98, - 0, - 1, - 54, - 87, - 98, - 0, - 1, - 54, - 98, - 0, - 8, - 55, - 86, - 91, - 96, - 32, - 2, - 96, - 32, - 1, - 1, - 81, - 81, - 96, - 0, - 20, - 21, - 128, - 21, - 98, - 0, - 1, - 110, - 87, - 80, - 130, - 129, - 129, - 81, - 129, - 16, - 98, - 0, - 1, - 96, - 87, - 98, - 0, - 1, - 96, - 98, - 0, - 8, - 55, - 86, - 91, - 96, - 32, - 2, - 96, - 32, - 1, - 1, - 81, - 81, - 96, - 0, - 20, - 21, - 91, - 98, - 0, - 1, - 188, - 87, - 96, - 64, - 81, - 98, - 70, - 27, - 205, - 96, - 229, - 27, - 129, - 82, - 96, - 32, - 96, - 4, - 130, - 1, - 82, - 96, - 22, - 96, - 36, - 130, - 1, - 82, - 127, - 73, - 110, - 118, - 97, - 108, - 105, - 100, - 32, - 99, - 114, - 121, - 112, - 116, - 111, - 99, - 117, - 114, - 114, - 101, - 110, - 99, - 121, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 96, - 68, - 130, - 1, - 82, - 96, - 100, - 1, - 98, - 0, - 0, - 147, - 86, - 91, - 128, - 98, - 0, - 1, - 200, - 129, - 98, - 0, - 8, - 99, - 86, - 91, - 145, - 80, - 80, - 98, - 0, - 1, - 23, - 86, - 91, - 80, - 98, - 0, - 1, - 230, - 135, - 132, - 81, - 131, - 98, - 0, - 4, - 122, - 96, - 32, - 27, - 96, - 32, - 28, - 86, - 91, - 98, - 0, - 2, - 90, - 87, - 96, - 64, - 81, - 98, - 70, - 27, - 205, - 96, - 229, - 27, - 129, - 82, - 96, - 32, - 96, - 4, - 130, - 1, - 82, - 96, - 60, - 96, - 36, - 130, - 1, - 82, - 127, - 84, - 104, - 101, - 32, - 99, - 111, - 110, - 102, - 105, - 103, - 32, - 112, - 97, - 114, - 97, - 109, - 101, - 116, - 101, - 114, - 115, - 32, - 100, - 111, - 32, - 110, - 111, - 116, - 32, - 99, - 111, - 114, - 96, - 68, - 130, - 1, - 82, - 127, - 114, - 101, - 115, - 112, - 111, - 110, - 100, - 32, - 116, - 111, - 32, - 116, - 104, - 101, - 32, - 118, - 101, - 114, - 105, - 102, - 121, - 105, - 110, - 103, - 32, - 107, - 101, - 121, - 0, - 0, - 0, - 0, - 96, - 100, - 130, - 1, - 82, - 96, - 132, - 1, - 98, - 0, - 0, - 147, - 86, - 91, - 96, - 1, - 96, - 1, - 96, - 160, - 27, - 3, - 134, - 22, - 98, - 0, - 2, - 204, - 87, - 96, - 64, - 81, - 98, - 70, - 27, - 205, - 96, - 229, - 27, - 129, - 82, - 96, - 32, - 96, - 4, - 130, - 1, - 82, - 96, - 49, - 96, - 36, - 130, - 1, - 82, - 127, - 73, - 110, - 118, - 97, - 108, - 105, - 100, - 32, - 112, - 111, - 108, - 121, - 110, - 111, - 109, - 105, - 97, - 108, - 32, - 105, - 110, - 116, - 101, - 114, - 112, - 111, - 108, - 97, - 116, - 105, - 111, - 110, - 96, - 68, - 130, - 1, - 82, - 112, - 32, - 118, - 101, - 114, - 105, - 102, - 105, - 101, - 114, - 32, - 97, - 100, - 100, - 114, - 101, - 115, - 115, - 96, - 120, - 27, - 96, - 100, - 130, - 1, - 82, - 96, - 132, - 1, - 98, - 0, - 0, - 147, - 86, - 91, - 96, - 1, - 96, - 1, - 96, - 160, - 27, - 3, - 128, - 135, - 22, - 96, - 160, - 82, - 133, - 22, - 98, - 0, - 3, - 53, - 87, - 96, - 64, - 81, - 98, - 70, - 27, - 205, - 96, - 229, - 27, - 129, - 82, - 96, - 32, - 96, - 4, - 130, - 1, - 82, - 96, - 34, - 96, - 36, - 130, - 1, - 82, - 127, - 73, - 110, - 118, - 97, - 108, - 105, - 100, - 32, - 103, - 114, - 97, - 110, - 100, - 32, - 115, - 117, - 109, - 32, - 118, - 101, - 114, - 105, - 102, - 105, - 101, - 114, - 32, - 97, - 100, - 100, - 114, - 101, - 96, - 68, - 130, - 1, - 82, - 97, - 115, - 115, - 96, - 240, - 27, - 96, - 100, - 130, - 1, - 82, - 96, - 132, - 1, - 98, - 0, - 0, - 147, - 86, - 91, - 96, - 1, - 96, - 1, - 96, - 160, - 27, - 3, - 128, - 134, - 22, - 96, - 192, - 82, - 132, - 22, - 98, - 0, - 3, - 158, - 87, - 96, - 64, - 81, - 98, - 70, - 27, - 205, - 96, - 229, - 27, - 129, - 82, - 96, - 32, - 96, - 4, - 130, - 1, - 82, - 96, - 34, - 96, - 36, - 130, - 1, - 82, - 127, - 73, - 110, - 118, - 97, - 108, - 105, - 100, - 32, - 105, - 110, - 99, - 108, - 117, - 115, - 105, - 111, - 110, - 32, - 118, - 101, - 114, - 105, - 102, - 105, - 101, - 114, - 32, - 97, - 100, - 100, - 114, - 101, - 96, - 68, - 130, - 1, - 82, - 97, - 115, - 115, - 96, - 240, - 27, - 96, - 100, - 130, - 1, - 82, - 96, - 132, - 1, - 98, - 0, - 0, - 147, - 86, - 91, - 96, - 1, - 96, - 1, - 96, - 160, - 27, - 3, - 132, - 22, - 96, - 224, - 82, - 96, - 64, - 128, - 81, - 96, - 96, - 129, - 1, - 130, - 82, - 132, - 129, - 82, - 96, - 32, - 128, - 130, - 1, - 133, - 144, - 82, - 96, - 255, - 132, - 22, - 146, - 130, - 1, - 146, - 144, - 146, - 82, - 132, - 81, - 144, - 145, - 96, - 1, - 145, - 98, - 0, - 3, - 227, - 145, - 131, - 145, - 144, - 136, - 1, - 144, - 98, - 0, - 5, - 7, - 86, - 91, - 80, - 96, - 32, - 130, - 129, - 1, - 81, - 128, - 81, - 98, - 0, - 3, - 254, - 146, - 96, - 1, - 133, - 1, - 146, - 1, - 144, - 98, - 0, - 5, - 7, - 86, - 91, - 80, - 96, - 64, - 145, - 144, - 145, - 1, - 81, - 96, - 2, - 144, - 145, - 1, - 128, - 84, - 96, - 255, - 25, - 22, - 96, - 255, - 144, - 146, - 22, - 145, - 144, - 145, - 23, - 144, - 85, - 80, - 98, - 0, - 10, - 87, - 149, - 80, - 80, - 80, - 80, - 80, - 80, - 86, - 91, - 96, - 0, - 128, - 84, - 96, - 1, - 96, - 1, - 96, - 160, - 27, - 3, - 131, - 129, - 22, - 96, - 1, - 96, - 1, - 96, - 160, - 27, - 3, - 25, - 131, - 22, - 129, - 23, - 132, - 85, - 96, - 64, - 81, - 145, - 144, - 146, - 22, - 146, - 131, - 145, - 127, - 139, - 224, - 7, - 156, - 83, - 22, - 89, - 20, - 19, - 68, - 205, - 31, - 208, - 164, - 242, - 132, - 25, - 73, - 127, - 151, - 34, - 163, - 218, - 175, - 227, - 180, - 24, - 111, - 107, - 100, - 87, - 224, - 145, - 144, - 163, - 80, - 80, - 86, - 91, - 96, - 0, - 128, - 131, - 98, - 0, - 4, - 139, - 96, - 2, - 133, - 98, - 0, - 8, - 127, - 86, - 91, - 96, - 255, - 22, - 98, - 0, - 4, - 154, - 145, - 144, - 98, - 0, - 8, - 176, - 86, - 91, - 98, - 0, - 4, - 167, - 144, - 96, - 2, - 98, - 0, - 8, - 208, - 86, - 91, - 144, - 80, - 97, - 2, - 224, - 96, - 0, - 98, - 0, - 4, - 187, - 131, - 96, - 64, - 98, - 0, - 8, - 176, - 86, - 91, - 98, - 0, - 4, - 199, - 144, - 131, - 98, - 0, - 8, - 208, - 86, - 91, - 144, - 80, - 96, - 0, - 98, - 0, - 4, - 216, - 96, - 16, - 131, - 98, - 0, - 8, - 230, - 86, - 91, - 144, - 80, - 96, - 0, - 96, - 32, - 130, - 96, - 0, - 139, - 60, - 80, - 80, - 96, - 0, - 81, - 96, - 1, - 96, - 1, - 96, - 128, - 27, - 3, - 129, - 22, - 21, - 96, - 128, - 145, - 144, - 145, - 28, - 21, - 25, - 22, - 151, - 150, - 80, - 80, - 80, - 80, - 80, - 80, - 80, - 86, - 91, - 130, - 128, - 84, - 130, - 130, - 85, - 144, - 96, - 0, - 82, - 96, - 32, - 96, - 0, - 32, - 144, - 129, - 1, - 146, - 130, - 21, - 98, - 0, - 5, - 82, - 87, - 145, - 96, - 32, - 2, - 130, - 1, - 91, - 130, - 129, - 17, - 21, - 98, - 0, - 5, - 82, - 87, - 130, - 81, - 130, - 144, - 98, - 0, - 5, - 65, - 144, - 130, - 98, - 0, - 9, - 139, - 86, - 91, - 80, - 145, - 96, - 32, - 1, - 145, - 144, - 96, - 1, - 1, - 144, - 98, - 0, - 5, - 40, - 86, - 91, - 80, - 98, - 0, - 5, - 96, - 146, - 145, - 80, - 98, - 0, - 5, - 100, - 86, - 91, - 80, - 144, - 86, - 91, - 128, - 130, - 17, - 21, - 98, - 0, - 5, - 96, - 87, - 96, - 0, - 98, - 0, - 5, - 123, - 130, - 130, - 98, - 0, - 5, - 133, - 86, - 91, - 80, - 96, - 1, - 1, - 98, - 0, - 5, - 100, - 86, - 91, - 80, - 128, - 84, - 98, - 0, - 5, - 147, - 144, - 98, - 0, - 8, - 252, - 86, - 91, - 96, - 0, - 130, - 85, - 128, - 96, - 31, - 16, - 98, - 0, - 5, - 164, - 87, - 80, - 80, - 86, - 91, - 96, - 31, - 1, - 96, - 32, - 144, - 4, - 144, - 96, - 0, - 82, - 96, - 32, - 96, - 0, - 32, - 144, - 129, - 1, - 144, - 98, - 0, - 5, - 196, - 145, - 144, - 98, - 0, - 5, - 199, - 86, - 91, - 80, - 86, - 91, - 91, - 128, - 130, - 17, - 21, - 98, - 0, - 5, - 96, - 87, - 96, - 0, - 129, - 85, - 96, - 1, - 1, - 98, - 0, - 5, - 200, - 86, - 91, - 96, - 1, - 96, - 1, - 96, - 160, - 27, - 3, - 129, - 22, - 129, - 20, - 98, - 0, - 5, - 196, - 87, - 96, - 0, - 128, - 253, - 91, - 99, - 78, - 72, - 123, - 113, - 96, - 224, - 27, - 96, - 0, - 82, - 96, - 65, - 96, - 4, - 82, - 96, - 36, - 96, - 0, - 253, - 91, - 96, - 64, - 81, - 96, - 31, - 130, - 1, - 96, - 31, - 25, - 22, - 129, - 1, - 96, - 1, - 96, - 1, - 96, - 64, - 27, - 3, - 129, - 17, - 130, - 130, - 16, - 23, - 21, - 98, - 0, - 6, - 53, - 87, - 98, - 0, - 6, - 53, - 98, - 0, - 5, - 244, - 86, - 91, - 96, - 64, - 82, - 145, - 144, - 80, - 86, - 91, - 96, - 0, - 96, - 31, - 131, - 129, - 132, - 1, - 18, - 98, - 0, - 6, - 80, - 87, - 96, - 0, - 128, - 253, - 91, - 130, - 81, - 96, - 32, - 96, - 1, - 96, - 1, - 96, - 64, - 27, - 3, - 128, - 131, - 17, - 21, - 98, - 0, - 6, - 111, - 87, - 98, - 0, - 6, - 111, - 98, - 0, - 5, - 244, - 86, - 91, - 130, - 96, - 5, - 27, - 98, - 0, - 6, - 128, - 131, - 130, - 1, - 98, - 0, - 6, - 10, - 86, - 91, - 147, - 132, - 82, - 134, - 129, - 1, - 131, - 1, - 147, - 131, - 129, - 1, - 144, - 137, - 134, - 17, - 21, - 98, - 0, - 6, - 155, - 87, - 96, - 0, - 128, - 253, - 91, - 132, - 137, - 1, - 146, - 80, - 91, - 133, - 131, - 16, - 21, - 98, - 0, - 7, - 78, - 87, - 130, - 81, - 132, - 129, - 17, - 21, - 98, - 0, - 6, - 187, - 87, - 96, - 0, - 128, - 129, - 253, - 91, - 137, - 1, - 96, - 63, - 129, - 1, - 139, - 19, - 98, - 0, - 6, - 206, - 87, - 96, - 0, - 128, - 129, - 253, - 91, - 133, - 129, - 1, - 81, - 133, - 129, - 17, - 21, - 98, - 0, - 6, - 229, - 87, - 98, - 0, - 6, - 229, - 98, - 0, - 5, - 244, - 86, - 91, - 98, - 0, - 6, - 248, - 129, - 138, - 1, - 96, - 31, - 25, - 22, - 136, - 1, - 98, - 0, - 6, - 10, - 86, - 91, - 129, - 129, - 82, - 96, - 64, - 141, - 129, - 132, - 134, - 1, - 1, - 17, - 21, - 98, - 0, - 7, - 16, - 87, - 96, - 0, - 128, - 129, - 253, - 91, - 96, - 0, - 91, - 131, - 129, - 16, - 21, - 98, - 0, - 7, - 48, - 87, - 132, - 129, - 1, - 130, - 1, - 81, - 131, - 130, - 1, - 139, - 1, - 82, - 137, - 1, - 98, - 0, - 7, - 19, - 86, - 91, - 80, - 80, - 96, - 0, - 145, - 129, - 1, - 136, - 1, - 145, - 144, - 145, - 82, - 131, - 82, - 80, - 145, - 132, - 1, - 145, - 144, - 132, - 1, - 144, - 98, - 0, - 6, - 161, - 86, - 91, - 153, - 152, - 80, - 80, - 80, - 80, - 80, - 80, - 80, - 80, - 80, - 86, - 91, - 96, - 0, - 128, - 96, - 0, - 128, - 96, - 0, - 128, - 96, - 0, - 96, - 224, - 136, - 138, - 3, - 18, - 21, - 98, - 0, - 7, - 119, - 87, - 96, - 0, - 128, - 253, - 91, - 135, - 81, - 98, - 0, - 7, - 132, - 129, - 98, - 0, - 5, - 222, - 86, - 91, - 96, - 32, - 137, - 1, - 81, - 144, - 151, - 80, - 98, - 0, - 7, - 151, - 129, - 98, - 0, - 5, - 222, - 86, - 91, - 96, - 64, - 137, - 1, - 81, - 144, - 150, - 80, - 98, - 0, - 7, - 170, - 129, - 98, - 0, - 5, - 222, - 86, - 91, - 96, - 96, - 137, - 1, - 81, - 144, - 149, - 80, - 98, - 0, - 7, - 189, - 129, - 98, - 0, - 5, - 222, - 86, - 91, - 96, - 128, - 137, - 1, - 81, - 144, - 148, - 80, - 96, - 1, - 96, - 1, - 96, - 64, - 27, - 3, - 128, - 130, - 17, - 21, - 98, - 0, - 7, - 219, - 87, - 96, - 0, - 128, - 253, - 91, - 98, - 0, - 7, - 233, - 139, - 131, - 140, - 1, - 98, - 0, - 6, - 61, - 86, - 91, - 148, - 80, - 96, - 160, - 138, - 1, - 81, - 145, - 80, - 128, - 130, - 17, - 21, - 98, - 0, - 8, - 0, - 87, - 96, - 0, - 128, - 253, - 91, - 80, - 98, - 0, - 8, - 15, - 138, - 130, - 139, - 1, - 98, - 0, - 6, - 61, - 86, - 91, - 146, - 80, - 80, - 96, - 192, - 136, - 1, - 81, - 96, - 255, - 129, - 22, - 129, - 20, - 98, - 0, - 8, - 39, - 87, - 96, - 0, - 128, - 253, - 91, - 128, - 145, - 80, - 80, - 146, - 149, - 152, - 145, - 148, - 151, - 80, - 146, - 149, - 80, - 86, - 91, - 99, - 78, - 72, - 123, - 113, - 96, - 224, - 27, - 96, - 0, - 82, - 96, - 50, - 96, - 4, - 82, - 96, - 36, - 96, - 0, - 253, - 91, - 99, - 78, - 72, - 123, - 113, - 96, - 224, - 27, - 96, - 0, - 82, - 96, - 17, - 96, - 4, - 82, - 96, - 36, - 96, - 0, - 253, - 91, - 96, - 0, - 96, - 1, - 130, - 1, - 98, - 0, - 8, - 120, - 87, - 98, - 0, - 8, - 120, - 98, - 0, - 8, - 77, - 86, - 91, - 80, - 96, - 1, - 1, - 144, - 86, - 91, - 96, - 0, - 96, - 255, - 131, - 22, - 128, - 98, - 0, - 8, - 161, - 87, - 99, - 78, - 72, - 123, - 113, - 96, - 224, - 27, - 96, - 0, - 82, - 96, - 18, - 96, - 4, - 82, - 96, - 36, - 96, - 0, - 253, - 91, - 128, - 96, - 255, - 132, - 22, - 4, - 145, - 80, - 80, - 146, - 145, - 80, - 80, - 86, - 91, - 128, - 130, - 2, - 129, - 21, - 130, - 130, - 4, - 132, - 20, - 23, - 98, - 0, - 8, - 202, - 87, - 98, - 0, - 8, - 202, - 98, - 0, - 8, - 77, - 86, - 91, - 146, - 145, - 80, - 80, - 86, - 91, - 128, - 130, - 1, - 128, - 130, - 17, - 21, - 98, - 0, - 8, - 202, - 87, - 98, - 0, - 8, - 202, - 98, - 0, - 8, - 77, - 86, - 91, - 129, - 129, - 3, - 129, - 129, - 17, - 21, - 98, - 0, - 8, - 202, - 87, - 98, - 0, - 8, - 202, - 98, - 0, - 8, - 77, - 86, - 91, - 96, - 1, - 129, - 129, - 28, - 144, - 130, - 22, - 128, - 98, - 0, - 9, - 17, - 87, - 96, - 127, - 130, - 22, - 145, - 80, - 91, - 96, - 32, - 130, - 16, - 129, - 3, - 98, - 0, - 9, - 50, - 87, - 99, - 78, - 72, - 123, - 113, - 96, - 224, - 27, - 96, - 0, - 82, - 96, - 34, - 96, - 4, - 82, - 96, - 36, - 96, - 0, - 253, - 91, - 80, - 145, - 144, - 80, - 86, - 91, - 96, - 31, - 130, - 17, - 21, - 98, - 0, - 9, - 134, - 87, - 96, - 0, - 129, - 129, - 82, - 96, - 32, - 129, - 32, - 96, - 31, - 133, - 1, - 96, - 5, - 28, - 129, - 1, - 96, - 32, - 134, - 16, - 21, - 98, - 0, - 9, - 97, - 87, - 80, - 128, - 91, - 96, - 31, - 133, - 1, - 96, - 5, - 28, - 130, - 1, - 145, - 80, - 91, - 129, - 129, - 16, - 21, - 98, - 0, - 9, - 130, - 87, - 130, - 129, - 85, - 96, - 1, - 1, - 98, - 0, - 9, - 109, - 86, - 91, - 80, - 80, - 80, - 91, - 80, - 80, - 80, - 86, - 91, - 129, - 81, - 96, - 1, - 96, - 1, - 96, - 64, - 27, - 3, - 129, - 17, - 21, - 98, - 0, - 9, - 167, - 87, - 98, - 0, - 9, - 167, - 98, - 0, - 5, - 244, - 86, - 91, - 98, - 0, - 9, - 191, - 129, - 98, - 0, - 9, - 184, - 132, - 84, - 98, - 0, - 8, - 252, - 86, - 91, - 132, - 98, - 0, - 9, - 56, - 86, - 91, - 96, - 32, - 128, - 96, - 31, - 131, - 17, - 96, - 1, - 129, - 20, - 98, - 0, - 9, - 247, - 87, - 96, - 0, - 132, - 21, - 98, - 0, - 9, - 222, - 87, - 80, - 133, - 131, - 1, - 81, - 91, - 96, - 0, - 25, - 96, - 3, - 134, - 144, - 27, - 28, - 25, - 22, - 96, - 1, - 133, - 144, - 27, - 23, - 133, - 85, - 98, - 0, - 9, - 130, - 86, - 91, - 96, - 0, - 133, - 129, - 82, - 96, - 32, - 129, - 32, - 96, - 31, - 25, - 134, - 22, - 145, - 91, - 130, - 129, - 16, - 21, - 98, - 0, - 10, - 40, - 87, - 136, - 134, - 1, - 81, - 130, - 85, - 148, - 132, - 1, - 148, - 96, - 1, - 144, - 145, - 1, - 144, - 132, - 1, - 98, - 0, - 10, - 7, - 86, - 91, - 80, - 133, - 130, - 16, - 21, - 98, - 0, - 10, - 71, - 87, - 135, - 133, - 1, - 81, - 96, - 0, - 25, - 96, - 3, - 136, - 144, - 27, - 96, - 248, - 22, - 28, - 25, - 22, - 129, - 85, - 91, - 80, - 80, - 80, - 80, - 80, - 96, - 1, - 144, - 129, - 27, - 1, - 144, - 85, - 80, - 86, - 91, - 96, - 128, - 81, - 96, - 160, - 81, - 96, - 192, - 81, - 96, - 224, - 81, - 97, - 30, - 90, - 98, - 0, - 10, - 166, - 96, - 0, - 57, - 96, - 0, - 97, - 12, - 184, - 1, - 82, - 96, - 0, - 97, - 5, - 20, - 1, - 82, - 96, - 0, - 97, - 3, - 80, - 1, - 82, - 96, - 0, - 129, - 129, - 97, - 1, - 56, - 1, - 82, - 129, - 129, - 97, - 3, - 125, - 1, - 82, - 129, - 129, - 97, - 5, - 65, - 1, - 82, - 97, - 12, - 229, - 1, - 82, - 97, - 30, - 90, - 96, - 0, - 243, - 254, - 96, - 128, - 96, - 64, - 82, - 52, - 128, - 21, - 97, - 0, - 16, - 87, - 96, - 0, - 128, - 253, - 91, - 80, - 96, - 4, - 54, - 16, - 97, - 0, - 169, - 87, - 96, - 0, - 53, - 96, - 224, - 28, - 128, - 99, - 121, - 80, - 197, - 248, - 17, - 97, - 0, - 113, - 87, - 128, - 99, - 121, - 80, - 197, - 248, - 20, - 97, - 1, - 51, - 87, - 128, - 99, - 141, - 165, - 203, - 91, - 20, - 97, - 1, - 114, - 87, - 128, - 99, - 156, - 56, - 37, - 89, - 20, - 97, - 1, - 131, - 87, - 128, - 99, - 163, - 196, - 188, - 248, - 20, - 97, - 1, - 166, - 87, - 128, - 99, - 199, - 221, - 202, - 14, - 20, - 97, - 1, - 201, - 87, - 128, - 99, - 242, - 253, - 227, - 139, - 20, - 97, - 1, - 220, - 87, - 96, - 0, - 128, - 253, - 91, - 128, - 99, - 5, - 171, - 152, - 96, - 20, - 97, - 0, - 174, - 87, - 128, - 99, - 25, - 179, - 57, - 104, - 20, - 97, - 0, - 195, - 87, - 128, - 99, - 73, - 206, - 137, - 151, - 20, - 97, - 0, - 236, - 87, - 128, - 99, - 113, - 80, - 24, - 166, - 20, - 97, - 1, - 12, - 87, - 128, - 99, - 121, - 80, - 44, - 85, - 20, - 97, - 1, - 20, - 87, - 91, - 96, - 0, - 128, - 253, - 91, - 97, - 0, - 193, - 97, - 0, - 188, - 54, - 96, - 4, - 97, - 20, - 203, - 86, - 91, - 97, - 1, - 239, - 86, - 91, - 0, - 91, - 97, - 0, - 214, - 97, - 0, - 209, - 54, - 96, - 4, - 97, - 21, - 103, - 86, - 91, - 97, - 6, - 96, - 86, - 91, - 96, - 64, - 81, - 97, - 0, - 227, - 145, - 144, - 97, - 22, - 59, - 86, - 91, - 96, - 64, - 81, - 128, - 145, - 3, - 144, - 243, - 91, - 97, - 0, - 255, - 97, - 0, - 250, - 54, - 96, - 4, - 97, - 21, - 103, - 86, - 91, - 97, - 9, - 115, - 86, - 91, - 96, - 64, - 81, - 97, - 0, - 227, - 145, - 144, - 97, - 22, - 85, - 86, - 91, - 97, - 0, - 193, - 97, - 10, - 13, - 86, - 91, - 96, - 3, - 84, - 97, - 1, - 33, - 144, - 96, - 255, - 22, - 129, - 86, - 91, - 96, - 64, - 81, - 96, - 255, - 144, - 145, - 22, - 129, - 82, - 96, - 32, - 1, - 97, - 0, - 227, - 86, - 91, - 97, - 1, - 90, - 127, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 129, - 86, - 91, - 96, - 64, - 81, - 96, - 1, - 96, - 1, - 96, - 160, - 27, - 3, - 144, - 145, - 22, - 129, - 82, - 96, - 32, - 1, - 97, - 0, - 227, - 86, - 91, - 96, - 0, - 84, - 96, - 1, - 96, - 1, - 96, - 160, - 27, - 3, - 22, - 97, - 1, - 90, - 86, - 91, - 97, - 1, - 150, - 97, - 1, - 145, - 54, - 96, - 4, - 97, - 22, - 216, - 86, - 91, - 97, - 10, - 33, - 86, - 91, - 96, - 64, - 81, - 144, - 21, - 21, - 129, - 82, - 96, - 32, - 1, - 97, - 0, - 227, - 86, - 91, - 97, - 1, - 185, - 97, - 1, - 180, - 54, - 96, - 4, - 97, - 21, - 103, - 86, - 91, - 97, - 13, - 95, - 86, - 91, - 96, - 64, - 81, - 97, - 0, - 227, - 148, - 147, - 146, - 145, - 144, - 97, - 23, - 106, - 86, - 91, - 97, - 0, - 193, - 97, - 1, - 215, - 54, - 96, - 4, - 97, - 23, - 183, - 86, - 91, - 97, - 15, - 191, - 86, - 91, - 97, - 0, - 193, - 97, - 1, - 234, - 54, - 96, - 4, - 97, - 25, - 17, - 86, - 91, - 97, - 18, - 96, - 86, - 91, - 97, - 1, - 247, - 97, - 18, - 217, - 86, - 91, - 96, - 0, - 130, - 81, - 17, - 97, - 2, - 77, - 87, - 96, - 64, - 81, - 98, - 70, - 27, - 205, - 96, - 229, - 27, - 129, - 82, - 96, - 32, - 96, - 4, - 130, - 1, - 82, - 96, - 29, - 96, - 36, - 130, - 1, - 82, - 127, - 73, - 110, - 118, - 97, - 108, - 105, - 100, - 32, - 116, - 111, - 116, - 97, - 108, - 32, - 98, - 97, - 108, - 97, - 110, - 99, - 101, - 115, - 32, - 108, - 101, - 110, - 103, - 116, - 104, - 0, - 0, - 0, - 96, - 68, - 130, - 1, - 82, - 96, - 100, - 1, - 91, - 96, - 64, - 81, - 128, - 145, - 3, - 144, - 253, - 91, - 129, - 81, - 97, - 2, - 90, - 144, - 96, - 64, - 97, - 25, - 80, - 86, - 91, - 131, - 20, - 97, - 2, - 168, - 87, - 96, - 64, - 81, - 98, - 70, - 27, - 205, - 96, - 229, - 27, - 129, - 82, - 96, - 32, - 96, - 4, - 130, - 1, - 82, - 96, - 30, - 96, - 36, - 130, - 1, - 82, - 127, - 73, - 110, - 118, - 97, - 108, - 105, - 100, - 32, - 103, - 114, - 97, - 110, - 100, - 32, - 115, - 117, - 109, - 32, - 112, - 114, - 111, - 111, - 102, - 32, - 108, - 101, - 110, - 103, - 116, - 104, - 0, - 0, - 96, - 68, - 130, - 1, - 82, - 96, - 100, - 1, - 97, - 2, - 68, - 86, - 91, - 130, - 133, - 17, - 97, - 2, - 247, - 87, - 96, - 64, - 81, - 98, - 70, - 27, - 205, - 96, - 229, - 27, - 129, - 82, - 96, - 32, - 96, - 4, - 130, - 1, - 82, - 96, - 26, - 96, - 36, - 130, - 1, - 82, - 127, - 73, - 110, - 118, - 97, - 108, - 105, - 100, - 32, - 115, - 110, - 97, - 114, - 107, - 32, - 112, - 114, - 111, - 111, - 102, - 32, - 108, - 101, - 110, - 103, - 116, - 104, - 0, - 0, - 0, - 0, - 0, - 0, - 96, - 68, - 130, - 1, - 82, - 96, - 100, - 1, - 97, - 2, - 68, - 86, - 91, - 96, - 64, - 128, - 81, - 96, - 1, - 128, - 130, - 82, - 129, - 131, - 1, - 144, - 146, - 82, - 96, - 0, - 145, - 96, - 32, - 128, - 131, - 1, - 144, - 128, - 54, - 131, - 55, - 1, - 144, - 80, - 80, - 144, - 80, - 96, - 0, - 129, - 96, - 0, - 129, - 81, - 129, - 16, - 97, - 3, - 46, - 87, - 97, - 3, - 46, - 97, - 25, - 109, - 86, - 91, - 96, - 32, - 144, - 129, - 2, - 145, - 144, - 145, - 1, - 1, - 82, - 96, - 64, - 81, - 99, - 175, - 131, - 161, - 141, - 96, - 224, - 27, - 129, - 82, - 96, - 1, - 96, - 1, - 96, - 160, - 27, - 3, - 127, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 22, - 144, - 99, - 175, - 131, - 161, - 141, - 144, - 97, - 3, - 171, - 144, - 127, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 144, - 139, - 144, - 139, - 144, - 135, - 144, - 96, - 4, - 1, - 97, - 25, - 231, - 86, - 91, - 96, - 32, - 96, - 64, - 81, - 128, - 131, - 3, - 129, - 134, - 90, - 250, - 21, - 128, - 21, - 97, - 3, - 200, - 87, - 61, - 96, - 0, - 128, - 62, - 61, - 96, - 0, - 253, - 91, - 80, - 80, - 80, - 80, - 96, - 64, - 81, - 61, - 96, - 31, - 25, - 96, - 31, - 130, - 1, - 22, - 130, - 1, - 128, - 96, - 64, - 82, - 80, - 129, - 1, - 144, - 97, - 3, - 236, - 145, - 144, - 97, - 26, - 30, - 86, - 91, - 97, - 4, - 46, - 87, - 96, - 64, - 81, - 98, - 70, - 27, - 205, - 96, - 229, - 27, - 129, - 82, - 96, - 32, - 96, - 4, - 130, - 1, - 82, - 96, - 19, - 96, - 36, - 130, - 1, - 82, - 114, - 36, - 183, - 59, - 48, - 182, - 52, - 178, - 16, - 57, - 183, - 48, - 185, - 53, - 144, - 56, - 57, - 55, - 183, - 179, - 96, - 105, - 27, - 96, - 68, - 130, - 1, - 82, - 96, - 100, - 1, - 97, - 2, - 68, - 86, - 91, - 96, - 1, - 84, - 131, - 81, - 20, - 97, - 4, - 166, - 87, - 96, - 64, - 81, - 98, - 70, - 27, - 205, - 96, - 229, - 27, - 129, - 82, - 96, - 32, - 96, - 4, - 130, - 1, - 82, - 96, - 58, - 96, - 36, - 130, - 1, - 82, - 127, - 76, - 105, - 97, - 98, - 105, - 108, - 105, - 116, - 121, - 32, - 99, - 111, - 109, - 109, - 105, - 116, - 109, - 101, - 110, - 116, - 115, - 32, - 97, - 110, - 100, - 32, - 99, - 114, - 121, - 112, - 116, - 111, - 96, - 68, - 130, - 1, - 82, - 127, - 99, - 117, - 114, - 114, - 101, - 110, - 99, - 105, - 101, - 115, - 32, - 110, - 117, - 109, - 98, - 101, - 114, - 32, - 109, - 105, - 115, - 109, - 97, - 116, - 99, - 104, - 0, - 0, - 0, - 0, - 0, - 0, - 96, - 100, - 130, - 1, - 82, - 96, - 132, - 1, - 97, - 2, - 68, - 86, - 91, - 54, - 96, - 0, - 136, - 129, - 137, - 97, - 4, - 183, - 137, - 96, - 64, - 97, - 26, - 64, - 86, - 91, - 146, - 97, - 4, - 196, - 147, - 146, - 145, - 144, - 97, - 26, - 83, - 86, - 91, - 144, - 146, - 80, - 144, - 80, - 96, - 0, - 135, - 135, - 97, - 4, - 218, - 132, - 96, - 64, - 129, - 136, - 97, - 26, - 83, - 86, - 91, - 96, - 64, - 81, - 96, - 32, - 1, - 97, - 4, - 237, - 148, - 147, - 146, - 145, - 144, - 97, - 26, - 125, - 86, - 91, - 96, - 64, - 128, - 81, - 96, - 31, - 25, - 129, - 132, - 3, - 1, - 129, - 82, - 144, - 130, - 144, - 82, - 99, - 175, - 131, - 161, - 141, - 96, - 224, - 27, - 130, - 82, - 145, - 80, - 96, - 1, - 96, - 1, - 96, - 160, - 27, - 3, - 127, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 22, - 144, - 99, - 175, - 131, - 161, - 141, - 144, - 97, - 5, - 109, - 144, - 127, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 144, - 133, - 144, - 139, - 144, - 96, - 4, - 1, - 97, - 26, - 159, - 86, - 91, - 96, - 32, - 96, - 64, - 81, - 128, - 131, - 3, - 129, - 134, - 90, - 250, - 21, - 128, - 21, - 97, - 5, - 138, - 87, - 61, - 96, - 0, - 128, - 62, - 61, - 96, - 0, - 253, - 91, - 80, - 80, - 80, - 80, - 96, - 64, - 81, - 61, - 96, - 31, - 25, - 96, - 31, - 130, - 1, - 22, - 130, - 1, - 128, - 96, - 64, - 82, - 80, - 129, - 1, - 144, - 97, - 5, - 174, - 145, - 144, - 97, - 26, - 30, - 86, - 91, - 97, - 5, - 250, - 87, - 96, - 64, - 81, - 98, - 70, - 27, - 205, - 96, - 229, - 27, - 129, - 82, - 96, - 32, - 96, - 4, - 130, - 1, - 82, - 96, - 23, - 96, - 36, - 130, - 1, - 82, - 127, - 73, - 110, - 118, - 97, - 108, - 105, - 100, - 32, - 103, - 114, - 97, - 110, - 100, - 32, - 115, - 117, - 109, - 32, - 112, - 114, - 111, - 111, - 102, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 96, - 68, - 130, - 1, - 82, - 96, - 100, - 1, - 97, - 2, - 68, - 86, - 91, - 96, - 0, - 133, - 129, - 82, - 96, - 5, - 96, - 32, - 82, - 96, - 64, - 144, - 32, - 97, - 6, - 19, - 131, - 133, - 131, - 97, - 27, - 104, - 86, - 91, - 80, - 132, - 127, - 118, - 3, - 161, - 42, - 136, - 56, - 165, - 101, - 113, - 93, - 219, - 91, - 191, - 98, - 91, - 63, - 0, - 165, - 230, - 244, - 121, - 52, - 55, - 83, - 121, - 99, - 227, - 12, - 59, - 148, - 149, - 220, - 135, - 133, - 133, - 140, - 140, - 96, - 64, - 81, - 97, - 6, - 76, - 149, - 148, - 147, - 146, - 145, - 144, - 97, - 28, - 41, - 86, - 91, - 96, - 64, - 81, - 128, - 145, - 3, - 144, - 162, - 80, - 80, - 80, - 80, - 80, - 80, - 80, - 80, - 80, - 80, - 86, - 91, - 97, - 6, - 139, - 96, - 64, - 81, - 128, - 96, - 128, - 1, - 96, - 64, - 82, - 128, - 96, - 96, - 129, - 82, - 96, - 32, - 1, - 96, - 96, - 129, - 82, - 96, - 32, - 1, - 96, - 96, - 129, - 82, - 96, - 32, - 1, - 96, - 96, - 129, - 82, - 80, - 144, - 86, - 91, - 96, - 0, - 130, - 129, - 82, - 96, - 6, - 96, - 32, - 82, - 96, - 64, - 144, - 32, - 84, - 97, - 6, - 221, - 87, - 96, - 64, - 81, - 98, - 70, - 27, - 205, - 96, - 229, - 27, - 129, - 82, - 96, - 32, - 96, - 4, - 130, - 1, - 82, - 96, - 20, - 96, - 36, - 130, - 1, - 82, - 115, - 16, - 89, - 25, - 28, - 153, - 92, - 220, - 200, - 27, - 155, - 221, - 8, - 29, - 153, - 92, - 154, - 89, - 154, - 89, - 89, - 96, - 98, - 27, - 96, - 68, - 130, - 1, - 82, - 96, - 100, - 1, - 97, - 2, - 68, - 86, - 91, - 96, - 0, - 130, - 129, - 82, - 96, - 6, - 96, - 32, - 82, - 96, - 64, - 144, - 32, - 84, - 96, - 4, - 144, - 97, - 6, - 251, - 144, - 96, - 1, - 144, - 97, - 28, - 112, - 86, - 91, - 129, - 84, - 129, - 16, - 97, - 7, - 11, - 87, - 97, - 7, - 11, - 97, - 25, - 109, - 86, - 91, - 144, - 96, - 0, - 82, - 96, - 32, - 96, - 0, - 32, - 144, - 96, - 4, - 2, - 1, - 96, - 64, - 81, - 128, - 96, - 128, - 1, - 96, - 64, - 82, - 144, - 129, - 96, - 0, - 130, - 1, - 128, - 84, - 97, - 7, - 52, - 144, - 97, - 26, - 223, - 86, - 91, - 128, - 96, - 31, - 1, - 96, - 32, - 128, - 145, - 4, - 2, - 96, - 32, - 1, - 96, - 64, - 81, - 144, - 129, - 1, - 96, - 64, - 82, - 128, - 146, - 145, - 144, - 129, - 129, - 82, - 96, - 32, - 1, - 130, - 128, - 84, - 97, - 7, - 96, - 144, - 97, - 26, - 223, - 86, - 91, - 128, - 21, - 97, - 7, - 173, - 87, - 128, - 96, - 31, - 16, - 97, - 7, - 130, - 87, - 97, - 1, - 0, - 128, - 131, - 84, - 4, - 2, - 131, - 82, - 145, - 96, - 32, - 1, - 145, - 97, - 7, - 173, - 86, - 91, - 130, - 1, - 145, - 144, - 96, - 0, - 82, - 96, - 32, - 96, - 0, - 32, - 144, - 91, - 129, - 84, - 129, - 82, - 144, - 96, - 1, - 1, - 144, - 96, - 32, - 1, - 128, - 131, - 17, - 97, - 7, - 144, - 87, - 130, - 144, - 3, - 96, - 31, - 22, - 130, - 1, - 145, - 91, - 80, - 80, - 80, - 80, - 80, - 129, - 82, - 96, - 32, - 1, - 96, - 1, - 130, - 1, - 128, - 84, - 97, - 7, - 198, - 144, - 97, - 26, - 223, - 86, - 91, - 128, - 96, - 31, - 1, - 96, - 32, - 128, - 145, - 4, - 2, - 96, - 32, - 1, - 96, - 64, - 81, - 144, - 129, - 1, - 96, - 64, - 82, - 128, - 146, - 145, - 144, - 129, - 129, - 82, - 96, - 32, - 1, - 130, - 128, - 84, - 97, - 7, - 242, - 144, - 97, - 26, - 223, - 86, - 91, - 128, - 21, - 97, - 8, - 63, - 87, - 128, - 96, - 31, - 16, - 97, - 8, - 20, - 87, - 97, - 1, - 0, - 128, - 131, - 84, - 4, - 2, - 131, - 82, - 145, - 96, - 32, - 1, - 145, - 97, - 8, - 63, - 86, - 91, - 130, - 1, - 145, - 144, - 96, - 0, - 82, - 96, - 32, - 96, - 0, - 32, - 144, - 91, - 129, - 84, - 129, - 82, - 144, - 96, - 1, - 1, - 144, - 96, - 32, - 1, - 128, - 131, - 17, - 97, - 8, - 34, - 87, - 130, - 144, - 3, - 96, - 31, - 22, - 130, - 1, - 145, - 91, - 80, - 80, - 80, - 80, - 80, - 129, - 82, - 96, - 32, - 1, - 96, - 2, - 130, - 1, - 128, - 84, - 97, - 8, - 88, - 144, - 97, - 26, - 223, - 86, - 91, - 128, - 96, - 31, - 1, - 96, - 32, - 128, - 145, - 4, - 2, - 96, - 32, - 1, - 96, - 64, - 81, - 144, - 129, - 1, - 96, - 64, - 82, - 128, - 146, - 145, - 144, - 129, - 129, - 82, - 96, - 32, - 1, - 130, - 128, - 84, - 97, - 8, - 132, - 144, - 97, - 26, - 223, - 86, - 91, - 128, - 21, - 97, - 8, - 209, - 87, - 128, - 96, - 31, - 16, - 97, - 8, - 166, - 87, - 97, - 1, - 0, - 128, - 131, - 84, - 4, - 2, - 131, - 82, - 145, - 96, - 32, - 1, - 145, - 97, - 8, - 209, - 86, - 91, - 130, - 1, - 145, - 144, - 96, - 0, - 82, - 96, - 32, - 96, - 0, - 32, - 144, - 91, - 129, - 84, - 129, - 82, - 144, - 96, - 1, - 1, - 144, - 96, - 32, - 1, - 128, - 131, - 17, - 97, - 8, - 180, - 87, - 130, - 144, - 3, - 96, - 31, - 22, - 130, - 1, - 145, - 91, - 80, - 80, - 80, - 80, - 80, - 129, - 82, - 96, - 32, - 1, - 96, - 3, - 130, - 1, - 128, - 84, - 97, - 8, - 234, - 144, - 97, - 26, - 223, - 86, - 91, - 128, - 96, - 31, - 1, - 96, - 32, - 128, - 145, - 4, - 2, - 96, - 32, - 1, - 96, - 64, - 81, - 144, - 129, - 1, - 96, - 64, - 82, - 128, - 146, - 145, - 144, - 129, - 129, - 82, - 96, - 32, - 1, - 130, - 128, - 84, - 97, - 9, - 22, - 144, - 97, - 26, - 223, - 86, - 91, - 128, - 21, - 97, - 9, - 99, - 87, - 128, - 96, - 31, - 16, - 97, - 9, - 56, - 87, - 97, - 1, - 0, - 128, - 131, - 84, - 4, - 2, - 131, - 82, - 145, - 96, - 32, - 1, - 145, - 97, - 9, - 99, - 86, - 91, - 130, - 1, - 145, - 144, - 96, - 0, - 82, - 96, - 32, - 96, - 0, - 32, - 144, - 91, - 129, - 84, - 129, - 82, - 144, - 96, - 1, - 1, - 144, - 96, - 32, - 1, - 128, - 131, - 17, - 97, - 9, - 70, - 87, - 130, - 144, - 3, - 96, - 31, - 22, - 130, - 1, - 145, - 91, - 80, - 80, - 80, - 80, - 80, - 129, - 82, - 80, - 80, - 144, - 80, - 145, - 144, - 80, - 86, - 91, - 96, - 5, - 96, - 32, - 82, - 96, - 0, - 144, - 129, - 82, - 96, - 64, - 144, - 32, - 128, - 84, - 97, - 9, - 140, - 144, - 97, - 26, - 223, - 86, - 91, - 128, - 96, - 31, - 1, - 96, - 32, - 128, - 145, - 4, - 2, - 96, - 32, - 1, - 96, - 64, - 81, - 144, - 129, - 1, - 96, - 64, - 82, - 128, - 146, - 145, - 144, - 129, - 129, - 82, - 96, - 32, - 1, - 130, - 128, - 84, - 97, - 9, - 184, - 144, - 97, - 26, - 223, - 86, - 91, - 128, - 21, - 97, - 10, - 5, - 87, - 128, - 96, - 31, - 16, - 97, - 9, - 218, - 87, - 97, - 1, - 0, - 128, - 131, - 84, - 4, - 2, - 131, - 82, - 145, - 96, - 32, - 1, - 145, - 97, - 10, - 5, - 86, - 91, - 130, - 1, - 145, - 144, - 96, - 0, - 82, - 96, - 32, - 96, - 0, - 32, - 144, - 91, - 129, - 84, - 129, - 82, - 144, - 96, - 1, - 1, - 144, - 96, - 32, - 1, - 128, - 131, - 17, - 97, - 9, - 232, - 87, - 130, - 144, - 3, - 96, - 31, - 22, - 130, - 1, - 145, - 91, - 80, - 80, - 80, - 80, - 80, - 129, - 86, - 91, - 97, - 10, - 21, - 97, - 18, - 217, - 86, - 91, - 97, - 10, - 31, - 96, - 0, - 97, - 19, - 51, - 86, - 91, - 86, - 91, - 96, - 0, - 130, - 81, - 96, - 4, - 20, - 97, - 10, - 116, - 87, - 96, - 64, - 81, - 98, - 70, - 27, - 205, - 96, - 229, - 27, - 129, - 82, - 96, - 32, - 96, - 4, - 130, - 1, - 82, - 96, - 25, - 96, - 36, - 130, - 1, - 82, - 127, - 73, - 110, - 118, - 97, - 108, - 105, - 100, - 32, - 99, - 104, - 97, - 108, - 108, - 101, - 110, - 103, - 101, - 115, - 32, - 108, - 101, - 110, - 103, - 116, - 104, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 96, - 68, - 130, - 1, - 82, - 96, - 100, - 1, - 97, - 2, - 68, - 86, - 91, - 96, - 1, - 128, - 84, - 131, - 81, - 144, - 145, - 97, - 10, - 133, - 145, - 97, - 28, - 112, - 86, - 91, - 20, - 97, - 10, - 221, - 87, - 96, - 64, - 81, - 98, - 70, - 27, - 205, - 96, - 229, - 27, - 129, - 82, - 96, - 32, - 96, - 4, - 130, - 1, - 82, - 96, - 34, - 96, - 36, - 130, - 1, - 82, - 127, - 86, - 97, - 108, - 117, - 101, - 115, - 32, - 108, - 101, - 110, - 103, - 116, - 104, - 32, - 109, - 105, - 115, - 109, - 97, - 116, - 99, - 104, - 32, - 119, - 105, - 116, - 104, - 32, - 99, - 111, - 110, - 102, - 96, - 68, - 130, - 1, - 82, - 97, - 105, - 103, - 96, - 240, - 27, - 96, - 100, - 130, - 1, - 82, - 96, - 132, - 1, - 97, - 2, - 68, - 86, - 91, - 96, - 0, - 133, - 129, - 82, - 96, - 5, - 96, - 32, - 82, - 96, - 64, - 129, - 32, - 128, - 84, - 97, - 10, - 246, - 144, - 97, - 26, - 223, - 86, - 91, - 128, - 96, - 31, - 1, - 96, - 32, - 128, - 145, - 4, - 2, - 96, - 32, - 1, - 96, - 64, - 81, - 144, - 129, - 1, - 96, - 64, - 82, - 128, - 146, - 145, - 144, - 129, - 129, - 82, - 96, - 32, - 1, - 130, - 128, - 84, - 97, - 11, - 34, - 144, - 97, - 26, - 223, - 86, - 91, - 128, - 21, - 97, - 11, - 111, - 87, - 128, - 96, - 31, - 16, - 97, - 11, - 68, - 87, - 97, - 1, - 0, - 128, - 131, - 84, - 4, - 2, - 131, - 82, - 145, - 96, - 32, - 1, - 145, - 97, - 11, - 111, - 86, - 91, - 130, - 1, - 145, - 144, - 96, - 0, - 82, - 96, - 32, - 96, - 0, - 32, - 144, - 91, - 129, - 84, - 129, - 82, - 144, - 96, - 1, - 1, - 144, - 96, - 32, - 1, - 128, - 131, - 17, - 97, - 11, - 82, - 87, - 130, - 144, - 3, - 96, - 31, - 22, - 130, - 1, - 145, - 91, - 80, - 80, - 80, - 80, - 80, - 144, - 80, - 96, - 0, - 133, - 81, - 130, - 81, - 97, - 11, - 134, - 145, - 144, - 97, - 26, - 64, - 86, - 91, - 103, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 129, - 17, - 21, - 97, - 11, - 158, - 87, - 97, - 11, - 158, - 97, - 19, - 204, - 86, - 91, - 96, - 64, - 81, - 144, - 128, - 130, - 82, - 128, - 96, - 31, - 1, - 96, - 31, - 25, - 22, - 96, - 32, - 1, - 130, - 1, - 96, - 64, - 82, - 128, - 21, - 97, - 11, - 200, - 87, - 96, - 32, - 130, - 1, - 129, - 128, - 54, - 131, - 55, - 1, - 144, - 80, - 91, - 80, - 144, - 80, - 96, - 0, - 91, - 134, - 81, - 129, - 16, - 21, - 97, - 12, - 47, - 87, - 134, - 129, - 129, - 81, - 129, - 16, - 97, - 11, - 233, - 87, - 97, - 11, - 233, - 97, - 25, - 109, - 86, - 91, - 96, - 32, - 1, - 1, - 81, - 96, - 248, - 28, - 96, - 248, - 27, - 130, - 130, - 129, - 81, - 129, - 16, - 97, - 12, - 6, - 87, - 97, - 12, - 6, - 97, - 25, - 109, - 86, - 91, - 96, - 32, - 1, - 1, - 144, - 96, - 1, - 96, - 1, - 96, - 248, - 27, - 3, - 25, - 22, - 144, - 129, - 96, - 0, - 26, - 144, - 83, - 80, - 128, - 97, - 12, - 39, - 129, - 97, - 28, - 131, - 86, - 91, - 145, - 80, - 80, - 97, - 11, - 206, - 86, - 91, - 80, - 96, - 0, - 91, - 130, - 81, - 129, - 16, - 21, - 97, - 12, - 160, - 87, - 130, - 129, - 129, - 81, - 129, - 16, - 97, - 12, - 78, - 87, - 97, - 12, - 78, - 97, - 25, - 109, - 86, - 91, - 96, - 32, - 1, - 1, - 81, - 96, - 248, - 28, - 96, - 248, - 27, - 130, - 136, - 81, - 131, - 97, - 12, - 103, - 145, - 144, - 97, - 26, - 64, - 86, - 91, - 129, - 81, - 129, - 16, - 97, - 12, - 119, - 87, - 97, - 12, - 119, - 97, - 25, - 109, - 86, - 91, - 96, - 32, - 1, - 1, - 144, - 96, - 1, - 96, - 1, - 96, - 248, - 27, - 3, - 25, - 22, - 144, - 129, - 96, - 0, - 26, - 144, - 83, - 80, - 128, - 97, - 12, - 152, - 129, - 97, - 28, - 131, - 86, - 91, - 145, - 80, - 80, - 97, - 12, - 51, - 86, - 91, - 80, - 96, - 64, - 81, - 99, - 35, - 251, - 90, - 213, - 96, - 225, - 27, - 129, - 82, - 96, - 1, - 96, - 1, - 96, - 160, - 27, - 3, - 127, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 22, - 144, - 99, - 71, - 246, - 181, - 170, - 144, - 97, - 13, - 19, - 144, - 127, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 144, - 133, - 144, - 138, - 144, - 138, - 144, - 96, - 4, - 1, - 97, - 28, - 156, - 86, - 91, - 96, - 32, - 96, - 64, - 81, - 128, - 131, - 3, - 129, - 134, - 90, - 250, - 21, - 128, - 21, - 97, - 13, - 48, - 87, - 61, - 96, - 0, - 128, - 62, - 61, - 96, - 0, - 253, - 91, - 80, - 80, - 80, - 80, - 96, - 64, - 81, - 61, - 96, - 31, - 25, - 96, - 31, - 130, - 1, - 22, - 130, - 1, - 128, - 96, - 64, - 82, - 80, - 129, - 1, - 144, - 97, - 13, - 84, - 145, - 144, - 97, - 26, - 30, - 86, - 91, - 151, - 150, - 80, - 80, - 80, - 80, - 80, - 80, - 80, - 86, - 91, - 96, - 4, - 129, - 129, - 84, - 129, - 16, - 97, - 13, - 111, - 87, - 96, - 0, - 128, - 253, - 91, - 144, - 96, - 0, - 82, - 96, - 32, - 96, - 0, - 32, - 144, - 96, - 4, - 2, - 1, - 96, - 0, - 145, - 80, - 144, - 80, - 128, - 96, - 0, - 1, - 128, - 84, - 97, - 13, - 146, - 144, - 97, - 26, - 223, - 86, - 91, - 128, - 96, - 31, - 1, - 96, - 32, - 128, - 145, - 4, - 2, - 96, - 32, - 1, - 96, - 64, - 81, - 144, - 129, - 1, - 96, - 64, - 82, - 128, - 146, - 145, - 144, - 129, - 129, - 82, - 96, - 32, - 1, - 130, - 128, - 84, - 97, - 13, - 190, - 144, - 97, - 26, - 223, - 86, - 91, - 128, - 21, - 97, - 14, - 11, - 87, - 128, - 96, - 31, - 16, - 97, - 13, - 224, - 87, - 97, - 1, - 0, - 128, - 131, - 84, - 4, - 2, - 131, - 82, - 145, - 96, - 32, - 1, - 145, - 97, - 14, - 11, - 86, - 91, - 130, - 1, - 145, - 144, - 96, - 0, - 82, - 96, - 32, - 96, - 0, - 32, - 144, - 91, - 129, - 84, - 129, - 82, - 144, - 96, - 1, - 1, - 144, - 96, - 32, - 1, - 128, - 131, - 17, - 97, - 13, - 238, - 87, - 130, - 144, - 3, - 96, - 31, - 22, - 130, - 1, - 145, - 91, - 80, - 80, - 80, - 80, - 80, - 144, - 128, - 96, - 1, - 1, - 128, - 84, - 97, - 14, - 32, - 144, - 97, - 26, - 223, - 86, - 91, - 128, - 96, - 31, - 1, - 96, - 32, - 128, - 145, - 4, - 2, - 96, - 32, - 1, - 96, - 64, - 81, - 144, - 129, - 1, - 96, - 64, - 82, - 128, - 146, - 145, - 144, - 129, - 129, - 82, - 96, - 32, - 1, - 130, - 128, - 84, - 97, - 14, - 76, - 144, - 97, - 26, - 223, - 86, - 91, - 128, - 21, - 97, - 14, - 153, - 87, - 128, - 96, - 31, - 16, - 97, - 14, - 110, - 87, - 97, - 1, - 0, - 128, - 131, - 84, - 4, - 2, - 131, - 82, - 145, - 96, - 32, - 1, - 145, - 97, - 14, - 153, - 86, - 91, - 130, - 1, - 145, - 144, - 96, - 0, - 82, - 96, - 32, - 96, - 0, - 32, - 144, - 91, - 129, - 84, - 129, - 82, - 144, - 96, - 1, - 1, - 144, - 96, - 32, - 1, - 128, - 131, - 17, - 97, - 14, - 124, - 87, - 130, - 144, - 3, - 96, - 31, - 22, - 130, - 1, - 145, - 91, - 80, - 80, - 80, - 80, - 80, - 144, - 128, - 96, - 2, - 1, - 128, - 84, - 97, - 14, - 174, - 144, - 97, - 26, - 223, - 86, - 91, - 128, - 96, - 31, - 1, - 96, - 32, - 128, - 145, - 4, - 2, - 96, - 32, - 1, - 96, - 64, - 81, - 144, - 129, - 1, - 96, - 64, - 82, - 128, - 146, - 145, - 144, - 129, - 129, - 82, - 96, - 32, - 1, - 130, - 128, - 84, - 97, - 14, - 218, - 144, - 97, - 26, - 223, - 86, - 91, - 128, - 21, - 97, - 15, - 39, - 87, - 128, - 96, - 31, - 16, - 97, - 14, - 252, - 87, - 97, - 1, - 0, - 128, - 131, - 84, - 4, - 2, - 131, - 82, - 145, - 96, - 32, - 1, - 145, - 97, - 15, - 39, - 86, - 91, - 130, - 1, - 145, - 144, - 96, - 0, - 82, - 96, - 32, - 96, - 0, - 32, - 144, - 91, - 129, - 84, - 129, - 82, - 144, - 96, - 1, - 1, - 144, - 96, - 32, - 1, - 128, - 131, - 17, - 97, - 15, - 10, - 87, - 130, - 144, - 3, - 96, - 31, - 22, - 130, - 1, - 145, - 91, - 80, - 80, - 80, - 80, - 80, - 144, - 128, - 96, - 3, - 1, - 128, - 84, - 97, - 15, - 60, - 144, - 97, - 26, - 223, - 86, - 91, - 128, - 96, - 31, - 1, - 96, - 32, - 128, - 145, - 4, - 2, - 96, - 32, - 1, - 96, - 64, - 81, - 144, - 129, - 1, - 96, - 64, - 82, - 128, - 146, - 145, - 144, - 129, - 129, - 82, - 96, - 32, - 1, - 130, - 128, - 84, - 97, - 15, - 104, - 144, - 97, - 26, - 223, - 86, - 91, - 128, - 21, - 97, - 15, - 181, - 87, - 128, - 96, - 31, - 16, - 97, - 15, - 138, - 87, - 97, - 1, - 0, - 128, - 131, - 84, - 4, - 2, - 131, - 82, - 145, - 96, - 32, - 1, - 145, - 97, - 15, - 181, - 86, - 91, - 130, - 1, - 145, - 144, - 96, - 0, - 82, - 96, - 32, - 96, - 0, - 32, - 144, - 91, - 129, - 84, - 129, - 82, - 144, - 96, - 1, - 1, - 144, - 96, - 32, - 1, - 128, - 131, - 17, - 97, - 15, - 152, - 87, - 130, - 144, - 3, - 96, - 31, - 22, - 130, - 1, - 145, - 91, - 80, - 80, - 80, - 80, - 80, - 144, - 80, - 132, - 86, - 91, - 97, - 15, - 199, - 97, - 18, - 217, - 86, - 91, - 96, - 0, - 91, - 129, - 81, - 129, - 16, - 21, - 97, - 18, - 37, - 87, - 96, - 0, - 130, - 130, - 129, - 81, - 129, - 16, - 97, - 15, - 231, - 87, - 97, - 15, - 231, - 97, - 25, - 109, - 86, - 91, - 96, - 32, - 2, - 96, - 32, - 1, - 1, - 81, - 96, - 0, - 1, - 81, - 96, - 64, - 81, - 96, - 32, - 1, - 97, - 16, - 3, - 145, - 144, - 97, - 28, - 230, - 86, - 91, - 96, - 64, - 128, - 81, - 96, - 31, - 25, - 129, - 132, - 3, - 1, - 129, - 82, - 145, - 129, - 82, - 129, - 81, - 96, - 32, - 146, - 131, - 1, - 32, - 96, - 0, - 129, - 129, - 82, - 96, - 6, - 144, - 147, - 82, - 145, - 32, - 84, - 144, - 145, - 80, - 128, - 21, - 97, - 16, - 121, - 87, - 96, - 64, - 81, - 98, - 70, - 27, - 205, - 96, - 229, - 27, - 129, - 82, - 96, - 32, - 96, - 4, - 130, - 1, - 82, - 96, - 24, - 96, - 36, - 130, - 1, - 82, - 127, - 65, - 100, - 100, - 114, - 101, - 115, - 115, - 32, - 97, - 108, - 114, - 101, - 97, - 100, - 121, - 32, - 118, - 101, - 114, - 105, - 102, - 105, - 101, - 100, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 96, - 68, - 130, - 1, - 82, - 96, - 100, - 1, - 97, - 2, - 68, - 86, - 91, - 96, - 4, - 132, - 132, - 129, - 81, - 129, - 16, - 97, - 16, - 141, - 87, - 97, - 16, - 141, - 97, - 25, - 109, - 86, - 91, - 96, - 32, - 144, - 129, - 2, - 145, - 144, - 145, - 1, - 129, - 1, - 81, - 130, - 84, - 96, - 1, - 129, - 1, - 132, - 85, - 96, - 0, - 147, - 132, - 82, - 145, - 144, - 146, - 32, - 130, - 81, - 96, - 4, - 144, - 146, - 2, - 1, - 144, - 129, - 144, - 97, - 16, - 191, - 144, - 130, - 97, - 29, - 2, - 86, - 91, - 80, - 96, - 32, - 130, - 1, - 81, - 96, - 1, - 130, - 1, - 144, - 97, - 16, - 212, - 144, - 130, - 97, - 29, - 2, - 86, - 91, - 80, - 96, - 64, - 130, - 1, - 81, - 96, - 2, - 130, - 1, - 144, - 97, - 16, - 233, - 144, - 130, - 97, - 29, - 2, - 86, - 91, - 80, - 96, - 96, - 130, - 1, - 81, - 96, - 3, - 130, - 1, - 144, - 97, - 16, - 254, - 144, - 130, - 97, - 29, - 2, - 86, - 91, - 80, - 80, - 96, - 4, - 84, - 96, - 0, - 132, - 129, - 82, - 96, - 6, - 96, - 32, - 82, - 96, - 64, - 144, - 32, - 85, - 80, - 131, - 81, - 132, - 144, - 132, - 144, - 129, - 16, - 97, - 17, - 39, - 87, - 97, - 17, - 39, - 97, - 25, - 109, - 86, - 91, - 96, - 32, - 2, - 96, - 32, - 1, - 1, - 81, - 96, - 0, - 1, - 81, - 81, - 96, - 0, - 20, - 21, - 128, - 21, - 97, - 17, - 99, - 87, - 80, - 131, - 131, - 129, - 81, - 129, - 16, - 97, - 17, - 81, - 87, - 97, - 17, - 81, - 97, - 25, - 109, - 86, - 91, - 96, - 32, - 2, - 96, - 32, - 1, - 1, - 81, - 96, - 32, - 1, - 81, - 81, - 96, - 0, - 20, - 21, - 91, - 128, - 21, - 97, - 17, - 142, - 87, - 80, - 131, - 131, - 129, - 81, - 129, - 16, - 97, - 17, - 124, - 87, - 97, - 17, - 124, - 97, - 25, - 109, - 86, - 91, - 96, - 32, - 2, - 96, - 32, - 1, - 1, - 81, - 96, - 64, - 1, - 81, - 81, - 96, - 0, - 20, - 21, - 91, - 128, - 21, - 97, - 17, - 185, - 87, - 80, - 131, - 131, - 129, - 81, - 129, - 16, - 97, - 17, - 167, - 87, - 97, - 17, - 167, - 97, - 25, - 109, - 86, - 91, - 96, - 32, - 2, - 96, - 32, - 1, - 1, - 81, - 96, - 96, - 1, - 81, - 81, - 96, - 0, - 20, - 21, - 91, - 97, - 18, - 16, - 87, - 96, - 64, - 81, - 98, - 70, - 27, - 205, - 96, - 229, - 27, - 129, - 82, - 96, - 32, - 96, - 4, - 130, - 1, - 82, - 96, - 34, - 96, - 36, - 130, - 1, - 82, - 127, - 73, - 110, - 118, - 97, - 108, - 105, - 100, - 32, - 112, - 114, - 111, - 111, - 102, - 32, - 111, - 102, - 32, - 97, - 100, - 100, - 114, - 101, - 115, - 115, - 32, - 111, - 119, - 110, - 101, - 114, - 115, - 104, - 96, - 68, - 130, - 1, - 82, - 97, - 6, - 151, - 96, - 244, - 27, - 96, - 100, - 130, - 1, - 82, - 96, - 132, - 1, - 97, - 2, - 68, - 86, - 91, - 80, - 80, - 128, - 128, - 97, - 18, - 29, - 144, - 97, - 28, - 131, - 86, - 91, - 145, - 80, - 80, - 97, - 15, - 202, - 86, - 91, - 80, - 127, - 56, - 35, - 21, - 212, - 213, - 106, - 96, - 53, - 225, - 137, - 155, - 255, - 231, - 125, - 155, - 236, - 239, - 175, - 95, - 38, - 80, - 228, - 50, - 59, - 39, - 133, - 72, - 87, - 160, - 69, - 70, - 88, - 129, - 96, - 64, - 81, - 97, - 18, - 85, - 145, - 144, - 97, - 29, - 194, - 86, - 91, - 96, - 64, - 81, - 128, - 145, - 3, - 144, - 161, - 80, - 86, - 91, - 97, - 18, - 104, - 97, - 18, - 217, - 86, - 91, - 96, - 1, - 96, - 1, - 96, - 160, - 27, - 3, - 129, - 22, - 97, - 18, - 205, - 87, - 96, - 64, - 81, - 98, - 70, - 27, - 205, - 96, - 229, - 27, - 129, - 82, - 96, - 32, - 96, - 4, - 130, - 1, - 82, - 96, - 38, - 96, - 36, - 130, - 1, - 82, - 127, - 79, - 119, - 110, - 97, - 98, - 108, - 101, - 58, - 32, - 110, - 101, - 119, - 32, - 111, - 119, - 110, - 101, - 114, - 32, - 105, - 115, - 32, - 116, - 104, - 101, - 32, - 122, - 101, - 114, - 111, - 32, - 97, - 96, - 68, - 130, - 1, - 82, - 101, - 100, - 100, - 114, - 101, - 115, - 115, - 96, - 208, - 27, - 96, - 100, - 130, - 1, - 82, - 96, - 132, - 1, - 97, - 2, - 68, - 86, - 91, - 97, - 18, - 214, - 129, - 97, - 19, - 51, - 86, - 91, - 80, - 86, - 91, - 96, - 0, - 84, - 96, - 1, - 96, - 1, - 96, - 160, - 27, - 3, - 22, - 51, - 20, - 97, - 10, - 31, - 87, - 96, - 64, - 81, - 98, - 70, - 27, - 205, - 96, - 229, - 27, - 129, - 82, - 96, - 32, - 96, - 4, - 130, - 1, - 129, - 144, - 82, - 96, - 36, - 130, - 1, - 82, - 127, - 79, - 119, - 110, - 97, - 98, - 108, - 101, - 58, - 32, - 99, - 97, - 108, - 108, - 101, - 114, - 32, - 105, - 115, - 32, - 110, - 111, - 116, - 32, - 116, - 104, - 101, - 32, - 111, - 119, - 110, - 101, - 114, - 96, - 68, - 130, - 1, - 82, - 96, - 100, - 1, - 97, - 2, - 68, - 86, - 91, - 96, - 0, - 128, - 84, - 96, - 1, - 96, - 1, - 96, - 160, - 27, - 3, - 131, - 129, - 22, - 96, - 1, - 96, - 1, - 96, - 160, - 27, - 3, - 25, - 131, - 22, - 129, - 23, - 132, - 85, - 96, - 64, - 81, - 145, - 144, - 146, - 22, - 146, - 131, - 145, - 127, - 139, - 224, - 7, - 156, - 83, - 22, - 89, - 20, - 19, - 68, - 205, - 31, - 208, - 164, - 242, - 132, - 25, - 73, - 127, - 151, - 34, - 163, - 218, - 175, - 227, - 180, - 24, - 111, - 107, - 100, - 87, - 224, - 145, - 144, - 163, - 80, - 80, - 86, - 91, - 96, - 0, - 128, - 131, - 96, - 31, - 132, - 1, - 18, - 97, - 19, - 149, - 87, - 96, - 0, - 128, - 253, - 91, - 80, - 129, - 53, - 103, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 129, - 17, - 21, - 97, - 19, - 173, - 87, - 96, - 0, - 128, - 253, - 91, - 96, - 32, - 131, - 1, - 145, - 80, - 131, - 96, - 32, - 130, - 133, - 1, - 1, - 17, - 21, - 97, - 19, - 197, - 87, - 96, - 0, - 128, - 253, - 91, - 146, - 80, - 146, - 144, - 80, - 86, - 91, - 99, - 78, - 72, - 123, - 113, - 96, - 224, - 27, - 96, - 0, - 82, - 96, - 65, - 96, - 4, - 82, - 96, - 36, - 96, - 0, - 253, - 91, - 96, - 64, - 81, - 96, - 128, - 129, - 1, - 103, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 129, - 17, - 130, - 130, - 16, - 23, - 21, - 97, - 20, - 5, - 87, - 97, - 20, - 5, - 97, - 19, - 204, - 86, - 91, - 96, - 64, - 82, - 144, - 86, - 91, - 96, - 64, - 81, - 96, - 31, - 130, - 1, - 96, - 31, - 25, - 22, - 129, - 1, - 103, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 129, - 17, - 130, - 130, - 16, - 23, - 21, - 97, - 20, - 52, - 87, - 97, - 20, - 52, - 97, - 19, - 204, - 86, - 91, - 96, - 64, - 82, - 145, - 144, - 80, - 86, - 91, - 96, - 0, - 103, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 130, - 17, - 21, - 97, - 20, - 86, - 87, - 97, - 20, - 86, - 97, - 19, - 204, - 86, - 91, - 80, - 96, - 5, - 27, - 96, - 32, - 1, - 144, - 86, - 91, - 96, - 0, - 130, - 96, - 31, - 131, - 1, - 18, - 97, - 20, - 113, - 87, - 96, - 0, - 128, - 253, - 91, - 129, - 53, - 96, - 32, - 97, - 20, - 134, - 97, - 20, - 129, - 131, - 97, - 20, - 60, - 86, - 91, - 97, - 20, - 11, - 86, - 91, - 130, - 129, - 82, - 96, - 5, - 146, - 144, - 146, - 27, - 132, - 1, - 129, - 1, - 145, - 129, - 129, - 1, - 144, - 134, - 132, - 17, - 21, - 97, - 20, - 165, - 87, - 96, - 0, - 128, - 253, - 91, - 130, - 134, - 1, - 91, - 132, - 129, - 16, - 21, - 97, - 20, - 192, - 87, - 128, - 53, - 131, - 82, - 145, - 131, - 1, - 145, - 131, - 1, - 97, - 20, - 169, - 86, - 91, - 80, - 150, - 149, - 80, - 80, - 80, - 80, - 80, - 80, - 86, - 91, - 96, - 0, - 128, - 96, - 0, - 128, - 96, - 0, - 128, - 96, - 128, - 135, - 137, - 3, - 18, - 21, - 97, - 20, - 228, - 87, - 96, - 0, - 128, - 253, - 91, - 134, - 53, - 103, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 128, - 130, - 17, - 21, - 97, - 20, - 252, - 87, - 96, - 0, - 128, - 253, - 91, - 97, - 21, - 8, - 138, - 131, - 139, - 1, - 97, - 19, - 131, - 86, - 91, - 144, - 152, - 80, - 150, - 80, - 96, - 32, - 137, - 1, - 53, - 145, - 80, - 128, - 130, - 17, - 21, - 97, - 21, - 33, - 87, - 96, - 0, - 128, - 253, - 91, - 97, - 21, - 45, - 138, - 131, - 139, - 1, - 97, - 19, - 131, - 86, - 91, - 144, - 150, - 80, - 148, - 80, - 96, - 64, - 137, - 1, - 53, - 145, - 80, - 128, - 130, - 17, - 21, - 97, - 21, - 70, - 87, - 96, - 0, - 128, - 253, - 91, - 80, - 97, - 21, - 83, - 137, - 130, - 138, - 1, - 97, - 20, - 96, - 86, - 91, - 146, - 80, - 80, - 96, - 96, - 135, - 1, - 53, - 144, - 80, - 146, - 149, - 80, - 146, - 149, - 80, - 146, - 149, - 86, - 91, - 96, - 0, - 96, - 32, - 130, - 132, - 3, - 18, - 21, - 97, - 21, - 121, - 87, - 96, - 0, - 128, - 253, - 91, - 80, - 53, - 145, - 144, - 80, - 86, - 91, - 96, - 0, - 91, - 131, - 129, - 16, - 21, - 97, - 21, - 155, - 87, - 129, - 129, - 1, - 81, - 131, - 130, - 1, - 82, - 96, - 32, - 1, - 97, - 21, - 131, - 86, - 91, - 80, - 80, - 96, - 0, - 145, - 1, - 82, - 86, - 91, - 96, - 0, - 129, - 81, - 128, - 132, - 82, - 97, - 21, - 188, - 129, - 96, - 32, - 134, - 1, - 96, - 32, - 134, - 1, - 97, - 21, - 128, - 86, - 91, - 96, - 31, - 1, - 96, - 31, - 25, - 22, - 146, - 144, - 146, - 1, - 96, - 32, - 1, - 146, - 145, - 80, - 80, - 86, - 91, - 96, - 0, - 129, - 81, - 96, - 128, - 132, - 82, - 97, - 21, - 229, - 96, - 128, - 133, - 1, - 130, - 97, - 21, - 164, - 86, - 91, - 144, - 80, - 96, - 32, - 131, - 1, - 81, - 132, - 130, - 3, - 96, - 32, - 134, - 1, - 82, - 97, - 21, - 254, - 130, - 130, - 97, - 21, - 164, - 86, - 91, - 145, - 80, - 80, - 96, - 64, - 131, - 1, - 81, - 132, - 130, - 3, - 96, - 64, - 134, - 1, - 82, - 97, - 22, - 24, - 130, - 130, - 97, - 21, - 164, - 86, - 91, - 145, - 80, - 80, - 96, - 96, - 131, - 1, - 81, - 132, - 130, - 3, - 96, - 96, - 134, - 1, - 82, - 97, - 22, - 50, - 130, - 130, - 97, - 21, - 164, - 86, - 91, - 149, - 148, - 80, - 80, - 80, - 80, - 80, - 86, - 91, - 96, - 32, - 129, - 82, - 96, - 0, - 97, - 22, - 78, - 96, - 32, - 131, - 1, - 132, - 97, - 21, - 208, - 86, - 91, - 147, - 146, - 80, - 80, - 80, - 86, - 91, - 96, - 32, - 129, - 82, - 96, - 0, - 97, - 22, - 78, - 96, - 32, - 131, - 1, - 132, - 97, - 21, - 164, - 86, - 91, - 96, - 0, - 130, - 96, - 31, - 131, - 1, - 18, - 97, - 22, - 121, - 87, - 96, - 0, - 128, - 253, - 91, - 129, - 53, - 103, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 129, - 17, - 21, - 97, - 22, - 147, - 87, - 97, - 22, - 147, - 97, - 19, - 204, - 86, - 91, - 97, - 22, - 166, - 96, - 31, - 130, - 1, - 96, - 31, - 25, - 22, - 96, - 32, - 1, - 97, - 20, - 11, - 86, - 91, - 129, - 129, - 82, - 132, - 96, - 32, - 131, - 134, - 1, - 1, - 17, - 21, - 97, - 22, - 187, - 87, - 96, - 0, - 128, - 253, - 91, - 129, - 96, - 32, - 133, - 1, - 96, - 32, - 131, - 1, - 55, - 96, - 0, - 145, - 129, - 1, - 96, - 32, - 1, - 145, - 144, - 145, - 82, - 147, - 146, - 80, - 80, - 80, - 86, - 91, - 96, - 0, - 128, - 96, - 0, - 128, - 96, - 128, - 133, - 135, - 3, - 18, - 21, - 97, - 22, - 238, - 87, - 96, - 0, - 128, - 253, - 91, - 132, - 53, - 147, - 80, - 96, - 32, - 133, - 1, - 53, - 103, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 128, - 130, - 17, - 21, - 97, - 23, - 13, - 87, - 96, - 0, - 128, - 253, - 91, - 97, - 23, - 25, - 136, - 131, - 137, - 1, - 97, - 22, - 104, - 86, - 91, - 148, - 80, - 96, - 64, - 135, - 1, - 53, - 145, - 80, - 128, - 130, - 17, - 21, - 97, - 23, - 47, - 87, - 96, - 0, - 128, - 253, - 91, - 97, - 23, - 59, - 136, - 131, - 137, - 1, - 97, - 20, - 96, - 86, - 91, - 147, - 80, - 96, - 96, - 135, - 1, - 53, - 145, - 80, - 128, - 130, - 17, - 21, - 97, - 23, - 81, - 87, - 96, - 0, - 128, - 253, - 91, - 80, - 97, - 23, - 94, - 135, - 130, - 136, - 1, - 97, - 20, - 96, - 86, - 91, - 145, - 80, - 80, - 146, - 149, - 145, - 148, - 80, - 146, - 80, - 86, - 91, - 96, - 128, - 129, - 82, - 96, - 0, - 97, - 23, - 125, - 96, - 128, - 131, - 1, - 135, - 97, - 21, - 164, - 86, - 91, - 130, - 129, - 3, - 96, - 32, - 132, - 1, - 82, - 97, - 23, - 143, - 129, - 135, - 97, - 21, - 164, - 86, - 91, - 144, - 80, - 130, - 129, - 3, - 96, - 64, - 132, - 1, - 82, - 97, - 23, - 163, - 129, - 134, - 97, - 21, - 164, - 86, - 91, - 144, - 80, - 130, - 129, - 3, - 96, - 96, - 132, - 1, - 82, - 97, - 13, - 84, - 129, - 133, - 97, - 21, - 164, - 86, - 91, - 96, - 0, - 96, - 32, - 128, - 131, - 133, - 3, - 18, - 21, - 97, - 23, - 202, - 87, - 96, - 0, - 128, - 253, - 91, - 130, - 53, - 103, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 128, - 130, - 17, - 21, - 97, - 23, - 226, - 87, - 96, - 0, - 128, - 253, - 91, - 129, - 133, - 1, - 145, - 80, - 133, - 96, - 31, - 131, - 1, - 18, - 97, - 23, - 246, - 87, - 96, - 0, - 128, - 253, - 91, - 129, - 53, - 97, - 24, - 4, - 97, - 20, - 129, - 130, - 97, - 20, - 60, - 86, - 91, - 129, - 129, - 82, - 96, - 5, - 145, - 144, - 145, - 27, - 131, - 1, - 132, - 1, - 144, - 132, - 129, - 1, - 144, - 136, - 131, - 17, - 21, - 97, - 24, - 35, - 87, - 96, - 0, - 128, - 253, - 91, - 133, - 133, - 1, - 91, - 131, - 129, - 16, - 21, - 97, - 25, - 4, - 87, - 128, - 53, - 133, - 129, - 17, - 21, - 97, - 24, - 62, - 87, - 96, - 0, - 128, - 253, - 91, - 134, - 1, - 96, - 128, - 129, - 140, - 3, - 96, - 31, - 25, - 1, - 18, - 21, - 97, - 24, - 85, - 87, - 96, - 0, - 128, - 129, - 253, - 91, - 97, - 24, - 93, - 97, - 19, - 226, - 86, - 91, - 136, - 130, - 1, - 53, - 135, - 129, - 17, - 21, - 97, - 24, - 111, - 87, - 96, - 0, - 128, - 129, - 253, - 91, - 97, - 24, - 125, - 141, - 139, - 131, - 134, - 1, - 1, - 97, - 22, - 104, - 86, - 91, - 130, - 82, - 80, - 96, - 64, - 128, - 131, - 1, - 53, - 136, - 129, - 17, - 21, - 97, - 24, - 148, - 87, - 96, - 0, - 128, - 129, - 253, - 91, - 97, - 24, - 162, - 142, - 140, - 131, - 135, - 1, - 1, - 97, - 22, - 104, - 86, - 91, - 139, - 132, - 1, - 82, - 80, - 96, - 96, - 128, - 132, - 1, - 53, - 137, - 129, - 17, - 21, - 97, - 24, - 187, - 87, - 96, - 0, - 128, - 129, - 253, - 91, - 97, - 24, - 201, - 143, - 141, - 131, - 136, - 1, - 1, - 97, - 22, - 104, - 86, - 91, - 131, - 133, - 1, - 82, - 80, - 96, - 128, - 132, - 1, - 53, - 145, - 80, - 136, - 130, - 17, - 21, - 97, - 24, - 227, - 87, - 96, - 0, - 128, - 129, - 253, - 91, - 97, - 24, - 241, - 142, - 140, - 132, - 135, - 1, - 1, - 97, - 22, - 104, - 86, - 91, - 144, - 131, - 1, - 82, - 80, - 132, - 82, - 80, - 145, - 134, - 1, - 145, - 134, - 1, - 97, - 24, - 39, - 86, - 91, - 80, - 152, - 151, - 80, - 80, - 80, - 80, - 80, - 80, - 80, - 80, - 86, - 91, - 96, - 0, - 96, - 32, - 130, - 132, - 3, - 18, - 21, - 97, - 25, - 35, - 87, - 96, - 0, - 128, - 253, - 91, - 129, - 53, - 96, - 1, - 96, - 1, - 96, - 160, - 27, - 3, - 129, - 22, - 129, - 20, - 97, - 22, - 78, - 87, - 96, - 0, - 128, - 253, - 91, - 99, - 78, - 72, - 123, - 113, - 96, - 224, - 27, - 96, - 0, - 82, - 96, - 17, - 96, - 4, - 82, - 96, - 36, - 96, - 0, - 253, - 91, - 128, - 130, - 2, - 129, - 21, - 130, - 130, - 4, - 132, - 20, - 23, - 97, - 25, - 103, - 87, - 97, - 25, - 103, - 97, - 25, - 58, - 86, - 91, - 146, - 145, - 80, - 80, - 86, - 91, - 99, - 78, - 72, - 123, - 113, - 96, - 224, - 27, - 96, - 0, - 82, - 96, - 50, - 96, - 4, - 82, - 96, - 36, - 96, - 0, - 253, - 91, - 129, - 131, - 82, - 129, - 129, - 96, - 32, - 133, - 1, - 55, - 80, - 96, - 0, - 130, - 130, - 1, - 96, - 32, - 144, - 129, - 1, - 145, - 144, - 145, - 82, - 96, - 31, - 144, - 145, - 1, - 96, - 31, - 25, - 22, - 144, - 145, - 1, - 1, - 144, - 86, - 91, - 96, - 0, - 129, - 81, - 128, - 132, - 82, - 96, - 32, - 128, - 133, - 1, - 148, - 80, - 128, - 132, - 1, - 96, - 0, - 91, - 131, - 129, - 16, - 21, - 97, - 25, - 220, - 87, - 129, - 81, - 135, - 82, - 149, - 130, - 1, - 149, - 144, - 130, - 1, - 144, - 96, - 1, - 1, - 97, - 25, - 192, - 86, - 91, - 80, - 148, - 149, - 148, - 80, - 80, - 80, - 80, - 80, - 86, - 91, - 96, - 1, - 96, - 1, - 96, - 160, - 27, - 3, - 133, - 22, - 129, - 82, - 96, - 96, - 96, - 32, - 130, - 1, - 129, - 144, - 82, - 96, - 0, - 144, - 97, - 26, - 12, - 144, - 131, - 1, - 133, - 135, - 97, - 25, - 131, - 86, - 91, - 130, - 129, - 3, - 96, - 64, - 132, - 1, - 82, - 97, - 13, - 84, - 129, - 133, - 97, - 25, - 172, - 86, - 91, - 96, - 0, - 96, - 32, - 130, - 132, - 3, - 18, - 21, - 97, - 26, - 48, - 87, - 96, - 0, - 128, - 253, - 91, - 129, - 81, - 128, - 21, - 21, - 129, - 20, - 97, - 22, - 78, - 87, - 96, - 0, - 128, - 253, - 91, - 128, - 130, - 1, - 128, - 130, - 17, - 21, - 97, - 25, - 103, - 87, - 97, - 25, - 103, - 97, - 25, - 58, - 86, - 91, - 96, - 0, - 128, - 133, - 133, - 17, - 21, - 97, - 26, - 99, - 87, - 96, - 0, - 128, - 253, - 91, - 131, - 134, - 17, - 21, - 97, - 26, - 112, - 87, - 96, - 0, - 128, - 253, - 91, - 80, - 80, - 130, - 1, - 147, - 145, - 144, - 146, - 3, - 145, - 80, - 86, - 91, - 131, - 133, - 130, - 55, - 96, - 0, - 132, - 130, - 1, - 96, - 0, - 129, - 82, - 131, - 133, - 130, - 55, - 96, - 0, - 147, - 1, - 146, - 131, - 82, - 80, - 144, - 148, - 147, - 80, - 80, - 80, - 80, - 86, - 91, - 96, - 1, - 96, - 1, - 96, - 160, - 27, - 3, - 132, - 22, - 129, - 82, - 96, - 96, - 96, - 32, - 130, - 1, - 129, - 144, - 82, - 96, - 0, - 144, - 97, - 26, - 195, - 144, - 131, - 1, - 133, - 97, - 21, - 164, - 86, - 91, - 130, - 129, - 3, - 96, - 64, - 132, - 1, - 82, - 97, - 26, - 213, - 129, - 133, - 97, - 25, - 172, - 86, - 91, - 150, - 149, - 80, - 80, - 80, - 80, - 80, - 80, - 86, - 91, - 96, - 1, - 129, - 129, - 28, - 144, - 130, - 22, - 128, - 97, - 26, - 243, - 87, - 96, - 127, - 130, - 22, - 145, - 80, - 91, - 96, - 32, - 130, - 16, - 129, - 3, - 97, - 27, - 19, - 87, - 99, - 78, - 72, - 123, - 113, - 96, - 224, - 27, - 96, - 0, - 82, - 96, - 34, - 96, - 4, - 82, - 96, - 36, - 96, - 0, - 253, - 91, - 80, - 145, - 144, - 80, - 86, - 91, - 96, - 31, - 130, - 17, - 21, - 97, - 27, - 99, - 87, - 96, - 0, - 129, - 129, - 82, - 96, - 32, - 129, - 32, - 96, - 31, - 133, - 1, - 96, - 5, - 28, - 129, - 1, - 96, - 32, - 134, - 16, - 21, - 97, - 27, - 64, - 87, - 80, - 128, - 91, - 96, - 31, - 133, - 1, - 96, - 5, - 28, - 130, - 1, - 145, - 80, - 91, - 129, - 129, - 16, - 21, - 97, - 27, - 95, - 87, - 130, - 129, - 85, - 96, - 1, - 1, - 97, - 27, - 76, - 86, - 91, - 80, - 80, - 80, - 91, - 80, - 80, - 80, - 86, - 91, - 103, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 131, - 17, - 21, - 97, - 27, - 128, - 87, - 97, - 27, - 128, - 97, - 19, - 204, - 86, - 91, - 97, - 27, - 148, - 131, - 97, - 27, - 142, - 131, - 84, - 97, - 26, - 223, - 86, - 91, - 131, - 97, - 27, - 25, - 86, - 91, - 96, - 0, - 96, - 31, - 132, - 17, - 96, - 1, - 129, - 20, - 97, - 27, - 200, - 87, - 96, - 0, - 133, - 21, - 97, - 27, - 176, - 87, - 80, - 131, - 130, - 1, - 53, - 91, - 96, - 0, - 25, - 96, - 3, - 135, - 144, - 27, - 28, - 25, - 22, - 96, - 1, - 134, - 144, - 27, - 23, - 131, - 85, - 97, - 28, - 34, - 86, - 91, - 96, - 0, - 131, - 129, - 82, - 96, - 32, - 144, - 32, - 96, - 31, - 25, - 134, - 22, - 144, - 131, - 91, - 130, - 129, - 16, - 21, - 97, - 27, - 249, - 87, - 134, - 133, - 1, - 53, - 130, - 85, - 96, - 32, - 148, - 133, - 1, - 148, - 96, - 1, - 144, - 146, - 1, - 145, - 1, - 97, - 27, - 217, - 86, - 91, - 80, - 134, - 130, - 16, - 21, - 97, - 28, - 22, - 87, - 96, - 0, - 25, - 96, - 248, - 136, - 96, - 3, - 27, - 22, - 28, - 25, - 132, - 135, - 1, - 53, - 22, - 129, - 85, - 91, - 80, - 80, - 96, - 1, - 133, - 96, - 1, - 27, - 1, - 131, - 85, - 91, - 80, - 80, - 80, - 80, - 80, - 86, - 91, - 96, - 96, - 129, - 82, - 96, - 0, - 97, - 28, - 60, - 96, - 96, - 131, - 1, - 136, - 97, - 25, - 172, - 86, - 91, - 130, - 129, - 3, - 96, - 32, - 132, - 1, - 82, - 97, - 28, - 79, - 129, - 135, - 137, - 97, - 25, - 131, - 86, - 91, - 144, - 80, - 130, - 129, - 3, - 96, - 64, - 132, - 1, - 82, - 97, - 28, - 100, - 129, - 133, - 135, - 97, - 25, - 131, - 86, - 91, - 152, - 151, - 80, - 80, - 80, - 80, - 80, - 80, - 80, - 80, - 86, - 91, - 129, - 129, - 3, - 129, - 129, - 17, - 21, - 97, - 25, - 103, - 87, - 97, - 25, - 103, - 97, - 25, - 58, - 86, - 91, - 96, - 0, - 96, - 1, - 130, - 1, - 97, - 28, - 149, - 87, - 97, - 28, - 149, - 97, - 25, - 58, - 86, - 91, - 80, - 96, - 1, - 1, - 144, - 86, - 91, - 96, - 1, - 96, - 1, - 96, - 160, - 27, - 3, - 133, - 22, - 129, - 82, - 96, - 128, - 96, - 32, - 130, - 1, - 129, - 144, - 82, - 96, - 0, - 144, - 97, - 28, - 192, - 144, - 131, - 1, - 134, - 97, - 21, - 164, - 86, - 91, - 130, - 129, - 3, - 96, - 64, - 132, - 1, - 82, - 97, - 28, - 210, - 129, - 134, - 97, - 25, - 172, - 86, - 91, - 144, - 80, - 130, - 129, - 3, - 96, - 96, - 132, - 1, - 82, - 97, - 13, - 84, - 129, - 133, - 97, - 25, - 172, - 86, - 91, - 96, - 0, - 130, - 81, - 97, - 28, - 248, - 129, - 132, - 96, - 32, - 135, - 1, - 97, - 21, - 128, - 86, - 91, - 145, - 144, - 145, - 1, - 146, - 145, - 80, - 80, - 86, - 91, - 129, - 81, - 103, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 129, - 17, - 21, - 97, - 29, - 28, - 87, - 97, - 29, - 28, - 97, - 19, - 204, - 86, - 91, - 97, - 29, - 48, - 129, - 97, - 29, - 42, - 132, - 84, - 97, - 26, - 223, - 86, - 91, - 132, - 97, - 27, - 25, - 86, - 91, - 96, - 32, - 128, - 96, - 31, - 131, - 17, - 96, - 1, - 129, - 20, - 97, - 29, - 101, - 87, - 96, - 0, - 132, - 21, - 97, - 29, - 77, - 87, - 80, - 133, - 131, - 1, - 81, - 91, - 96, - 0, - 25, - 96, - 3, - 134, - 144, - 27, - 28, - 25, - 22, - 96, - 1, - 133, - 144, - 27, - 23, - 133, - 85, - 97, - 27, - 95, - 86, - 91, - 96, - 0, - 133, - 129, - 82, - 96, - 32, - 129, - 32, - 96, - 31, - 25, - 134, - 22, - 145, - 91, - 130, - 129, - 16, - 21, - 97, - 29, - 148, - 87, - 136, - 134, - 1, - 81, - 130, - 85, - 148, - 132, - 1, - 148, - 96, - 1, - 144, - 145, - 1, - 144, - 132, - 1, - 97, - 29, - 117, - 86, - 91, - 80, - 133, - 130, - 16, - 21, - 97, - 29, - 178, - 87, - 135, - 133, - 1, - 81, - 96, - 0, - 25, - 96, - 3, - 136, - 144, - 27, - 96, - 248, - 22, - 28, - 25, - 22, - 129, - 85, - 91, - 80, - 80, - 80, - 80, - 80, - 96, - 1, - 144, - 129, - 27, - 1, - 144, - 85, - 80, - 86, - 91, - 96, - 0, - 96, - 32, - 128, - 131, - 1, - 129, - 132, - 82, - 128, - 133, - 81, - 128, - 131, - 82, - 96, - 64, - 134, - 1, - 145, - 80, - 96, - 64, - 129, - 96, - 5, - 27, - 135, - 1, - 1, - 146, - 80, - 131, - 135, - 1, - 96, - 0, - 91, - 130, - 129, - 16, - 21, - 97, - 30, - 23, - 87, - 96, - 63, - 25, - 136, - 134, - 3, - 1, - 132, - 82, - 97, - 30, - 5, - 133, - 131, - 81, - 97, - 21, - 208, - 86, - 91, - 148, - 80, - 146, - 133, - 1, - 146, - 144, - 133, - 1, - 144, - 96, - 1, - 1, - 97, - 29, - 233, - 86, - 91, - 80, - 146, - 151, - 150, - 80, - 80, - 80, - 80, - 80, - 80, - 80, - 86, - 254, - 162, - 100, - 105, - 112, - 102, - 115, - 88, - 34, - 18, - 32, - 154, - 114, - 45, - 169, - 221, - 15, - 128, - 184, - 40, - 176, - 117, - 102, - 132, - 157, - 67, - 191, - 102, - 214, - 236, - 32, - 194, - 205, - 62, - 6, - 185, - 208, - 140, - 211, - 250, - 125, - 237, - 65, - 100, - 115, - 111, - 108, - 99, - 67, - 0, - 8, - 18, - 0, - 51, - ]; - ///The bytecode of the contract. - pub static SUMMA_BYTECODE: ::ethers::core::types::Bytes = ::ethers::core::types::Bytes::from_static( - __BYTECODE, - ); - #[rustfmt::skip] - const __DEPLOYED_BYTECODE: &[u8] = &[ - 96, - 128, - 96, - 64, - 82, - 52, - 128, - 21, - 97, - 0, - 16, - 87, - 96, - 0, - 128, - 253, - 91, - 80, - 96, - 4, - 54, - 16, - 97, - 0, - 169, - 87, - 96, - 0, - 53, - 96, - 224, - 28, - 128, - 99, - 121, - 80, - 197, - 248, - 17, - 97, - 0, - 113, - 87, - 128, - 99, - 121, - 80, - 197, - 248, - 20, - 97, - 1, - 51, - 87, - 128, - 99, - 141, - 165, - 203, - 91, - 20, - 97, - 1, - 114, - 87, - 128, - 99, - 156, - 56, - 37, - 89, - 20, - 97, - 1, - 131, - 87, - 128, - 99, - 163, - 196, - 188, - 248, - 20, - 97, - 1, - 166, - 87, - 128, - 99, - 199, - 221, - 202, - 14, - 20, - 97, - 1, - 201, - 87, - 128, - 99, - 242, - 253, - 227, - 139, - 20, - 97, - 1, - 220, - 87, - 96, - 0, - 128, - 253, - 91, - 128, - 99, - 5, - 171, - 152, - 96, - 20, - 97, - 0, - 174, - 87, - 128, - 99, - 25, - 179, - 57, - 104, - 20, - 97, - 0, - 195, - 87, - 128, - 99, - 73, - 206, - 137, - 151, - 20, - 97, - 0, - 236, - 87, - 128, - 99, - 113, - 80, - 24, - 166, - 20, - 97, - 1, - 12, - 87, - 128, - 99, - 121, - 80, - 44, - 85, - 20, - 97, - 1, - 20, - 87, - 91, - 96, - 0, - 128, - 253, - 91, - 97, - 0, - 193, - 97, - 0, - 188, - 54, - 96, - 4, - 97, - 20, - 203, - 86, - 91, - 97, - 1, - 239, - 86, - 91, - 0, - 91, - 97, - 0, - 214, - 97, - 0, - 209, - 54, - 96, - 4, - 97, - 21, - 103, - 86, - 91, - 97, - 6, - 96, - 86, - 91, - 96, - 64, - 81, - 97, - 0, - 227, - 145, - 144, - 97, - 22, - 59, - 86, - 91, - 96, - 64, - 81, - 128, - 145, - 3, - 144, - 243, - 91, - 97, - 0, - 255, - 97, - 0, - 250, - 54, - 96, - 4, - 97, - 21, - 103, - 86, - 91, - 97, - 9, - 115, - 86, - 91, - 96, - 64, - 81, - 97, - 0, - 227, - 145, - 144, - 97, - 22, - 85, - 86, - 91, - 97, - 0, - 193, - 97, - 10, - 13, - 86, - 91, - 96, - 3, - 84, - 97, - 1, - 33, - 144, - 96, - 255, - 22, - 129, - 86, - 91, - 96, - 64, - 81, - 96, - 255, - 144, - 145, - 22, - 129, - 82, - 96, - 32, - 1, - 97, - 0, - 227, - 86, - 91, - 97, - 1, - 90, - 127, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 129, - 86, - 91, - 96, - 64, - 81, - 96, - 1, - 96, - 1, - 96, - 160, - 27, - 3, - 144, - 145, - 22, - 129, - 82, - 96, - 32, - 1, - 97, - 0, - 227, - 86, - 91, - 96, - 0, - 84, - 96, - 1, - 96, - 1, - 96, - 160, - 27, - 3, - 22, - 97, - 1, - 90, - 86, - 91, - 97, - 1, - 150, - 97, - 1, - 145, - 54, - 96, - 4, - 97, - 22, - 216, - 86, - 91, - 97, - 10, - 33, - 86, - 91, - 96, - 64, - 81, - 144, - 21, - 21, - 129, - 82, - 96, - 32, - 1, - 97, - 0, - 227, - 86, - 91, - 97, - 1, - 185, - 97, - 1, - 180, - 54, - 96, - 4, - 97, - 21, - 103, - 86, - 91, - 97, - 13, - 95, - 86, - 91, - 96, - 64, - 81, - 97, - 0, - 227, - 148, - 147, - 146, - 145, - 144, - 97, - 23, - 106, - 86, - 91, - 97, - 0, - 193, - 97, - 1, - 215, - 54, - 96, - 4, - 97, - 23, - 183, - 86, - 91, - 97, - 15, - 191, - 86, - 91, - 97, - 0, - 193, - 97, - 1, - 234, - 54, - 96, - 4, - 97, - 25, - 17, - 86, - 91, - 97, - 18, - 96, - 86, - 91, - 97, - 1, - 247, - 97, - 18, - 217, - 86, - 91, - 96, - 0, - 130, - 81, - 17, - 97, - 2, - 77, - 87, - 96, - 64, - 81, - 98, - 70, - 27, - 205, - 96, - 229, - 27, - 129, - 82, - 96, - 32, - 96, - 4, - 130, - 1, - 82, - 96, - 29, - 96, - 36, - 130, - 1, - 82, - 127, - 73, - 110, - 118, - 97, - 108, - 105, - 100, - 32, - 116, - 111, - 116, - 97, - 108, - 32, - 98, - 97, - 108, - 97, - 110, - 99, - 101, - 115, - 32, - 108, - 101, - 110, - 103, - 116, - 104, - 0, - 0, - 0, - 96, - 68, - 130, - 1, - 82, - 96, - 100, - 1, - 91, - 96, - 64, - 81, - 128, - 145, - 3, - 144, - 253, - 91, - 129, - 81, - 97, - 2, - 90, - 144, - 96, - 64, - 97, - 25, - 80, - 86, - 91, - 131, - 20, - 97, - 2, - 168, - 87, - 96, - 64, - 81, - 98, - 70, - 27, - 205, - 96, - 229, - 27, - 129, - 82, - 96, - 32, - 96, - 4, - 130, - 1, - 82, - 96, - 30, - 96, - 36, - 130, - 1, - 82, - 127, - 73, - 110, - 118, - 97, - 108, - 105, - 100, - 32, - 103, - 114, - 97, - 110, - 100, - 32, - 115, - 117, - 109, - 32, - 112, - 114, - 111, - 111, - 102, - 32, - 108, - 101, - 110, - 103, - 116, - 104, - 0, - 0, - 96, - 68, - 130, - 1, - 82, - 96, - 100, - 1, - 97, - 2, - 68, - 86, - 91, - 130, - 133, - 17, - 97, - 2, - 247, - 87, - 96, - 64, - 81, - 98, - 70, - 27, - 205, - 96, - 229, - 27, - 129, - 82, - 96, - 32, - 96, - 4, - 130, - 1, - 82, - 96, - 26, - 96, - 36, - 130, - 1, - 82, - 127, - 73, - 110, - 118, - 97, - 108, - 105, - 100, - 32, - 115, - 110, - 97, - 114, - 107, - 32, - 112, - 114, - 111, - 111, - 102, - 32, - 108, - 101, - 110, - 103, - 116, - 104, - 0, - 0, - 0, - 0, - 0, - 0, - 96, - 68, - 130, - 1, - 82, - 96, - 100, - 1, - 97, - 2, - 68, - 86, - 91, - 96, - 64, - 128, - 81, - 96, - 1, - 128, - 130, - 82, - 129, - 131, - 1, - 144, - 146, - 82, - 96, - 0, - 145, - 96, - 32, - 128, - 131, - 1, - 144, - 128, - 54, - 131, - 55, - 1, - 144, - 80, - 80, - 144, - 80, - 96, - 0, - 129, - 96, - 0, - 129, - 81, - 129, - 16, - 97, - 3, - 46, - 87, - 97, - 3, - 46, - 97, - 25, - 109, - 86, - 91, - 96, - 32, - 144, - 129, - 2, - 145, - 144, - 145, - 1, - 1, - 82, - 96, - 64, - 81, - 99, - 175, - 131, - 161, - 141, - 96, - 224, - 27, - 129, - 82, - 96, - 1, - 96, - 1, - 96, - 160, - 27, - 3, - 127, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 22, - 144, - 99, - 175, - 131, - 161, - 141, - 144, - 97, - 3, - 171, - 144, - 127, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 144, - 139, - 144, - 139, - 144, - 135, - 144, - 96, - 4, - 1, - 97, - 25, - 231, - 86, - 91, - 96, - 32, - 96, - 64, - 81, - 128, - 131, - 3, - 129, - 134, - 90, - 250, - 21, - 128, - 21, - 97, - 3, - 200, - 87, - 61, - 96, - 0, - 128, - 62, - 61, - 96, - 0, - 253, - 91, - 80, - 80, - 80, - 80, - 96, - 64, - 81, - 61, - 96, - 31, - 25, - 96, - 31, - 130, - 1, - 22, - 130, - 1, - 128, - 96, - 64, - 82, - 80, - 129, - 1, - 144, - 97, - 3, - 236, - 145, - 144, - 97, - 26, - 30, - 86, - 91, - 97, - 4, - 46, - 87, - 96, - 64, - 81, - 98, - 70, - 27, - 205, - 96, - 229, - 27, - 129, - 82, - 96, - 32, - 96, - 4, - 130, - 1, - 82, - 96, - 19, - 96, - 36, - 130, - 1, - 82, - 114, - 36, - 183, - 59, - 48, - 182, - 52, - 178, - 16, - 57, - 183, - 48, - 185, - 53, - 144, - 56, - 57, - 55, - 183, - 179, - 96, - 105, - 27, - 96, - 68, - 130, - 1, - 82, - 96, - 100, - 1, - 97, - 2, - 68, - 86, - 91, - 96, - 1, - 84, - 131, - 81, - 20, - 97, - 4, - 166, - 87, - 96, - 64, - 81, - 98, - 70, - 27, - 205, - 96, - 229, - 27, - 129, - 82, - 96, - 32, - 96, - 4, - 130, - 1, - 82, - 96, - 58, - 96, - 36, - 130, - 1, - 82, - 127, - 76, - 105, - 97, - 98, - 105, - 108, - 105, - 116, - 121, - 32, - 99, - 111, - 109, - 109, - 105, - 116, - 109, - 101, - 110, - 116, - 115, - 32, - 97, - 110, - 100, - 32, - 99, - 114, - 121, - 112, - 116, - 111, - 96, - 68, - 130, - 1, - 82, - 127, - 99, - 117, - 114, - 114, - 101, - 110, - 99, - 105, - 101, - 115, - 32, - 110, - 117, - 109, - 98, - 101, - 114, - 32, - 109, - 105, - 115, - 109, - 97, - 116, - 99, - 104, - 0, - 0, - 0, - 0, - 0, - 0, - 96, - 100, - 130, - 1, - 82, - 96, - 132, - 1, - 97, - 2, - 68, - 86, - 91, - 54, - 96, - 0, - 136, - 129, - 137, - 97, - 4, - 183, - 137, - 96, - 64, - 97, - 26, - 64, - 86, - 91, - 146, - 97, - 4, - 196, - 147, - 146, - 145, - 144, - 97, - 26, - 83, - 86, - 91, - 144, - 146, - 80, - 144, - 80, - 96, - 0, - 135, - 135, - 97, - 4, - 218, - 132, - 96, - 64, - 129, - 136, - 97, - 26, - 83, - 86, - 91, - 96, - 64, - 81, - 96, - 32, - 1, - 97, - 4, - 237, - 148, - 147, - 146, - 145, - 144, - 97, - 26, - 125, - 86, - 91, - 96, - 64, - 128, - 81, - 96, - 31, - 25, - 129, - 132, - 3, - 1, - 129, - 82, - 144, - 130, - 144, - 82, - 99, - 175, - 131, - 161, - 141, - 96, - 224, - 27, - 130, - 82, - 145, - 80, - 96, - 1, - 96, - 1, - 96, - 160, - 27, - 3, - 127, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 22, - 144, - 99, - 175, - 131, - 161, - 141, - 144, - 97, - 5, - 109, - 144, - 127, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 144, - 133, - 144, - 139, - 144, - 96, - 4, - 1, - 97, - 26, - 159, - 86, - 91, - 96, - 32, - 96, - 64, - 81, - 128, - 131, - 3, - 129, - 134, - 90, - 250, - 21, - 128, - 21, - 97, - 5, - 138, - 87, - 61, - 96, - 0, - 128, - 62, - 61, - 96, - 0, - 253, - 91, - 80, - 80, - 80, - 80, - 96, - 64, - 81, - 61, - 96, - 31, - 25, - 96, - 31, - 130, - 1, - 22, - 130, - 1, - 128, - 96, - 64, - 82, - 80, - 129, - 1, - 144, - 97, - 5, - 174, - 145, - 144, - 97, - 26, - 30, - 86, - 91, - 97, - 5, - 250, - 87, - 96, - 64, - 81, - 98, - 70, - 27, - 205, - 96, - 229, - 27, - 129, - 82, - 96, - 32, - 96, - 4, - 130, - 1, - 82, - 96, - 23, - 96, - 36, - 130, - 1, - 82, - 127, - 73, - 110, - 118, - 97, - 108, - 105, - 100, - 32, - 103, - 114, - 97, - 110, - 100, - 32, - 115, - 117, - 109, - 32, - 112, - 114, - 111, - 111, - 102, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 96, - 68, - 130, - 1, - 82, - 96, - 100, - 1, - 97, - 2, - 68, - 86, - 91, - 96, - 0, - 133, - 129, - 82, - 96, - 5, - 96, - 32, - 82, - 96, - 64, - 144, - 32, - 97, - 6, - 19, - 131, - 133, - 131, - 97, - 27, - 104, - 86, - 91, - 80, - 132, - 127, - 118, - 3, - 161, - 42, - 136, - 56, - 165, - 101, - 113, - 93, - 219, - 91, - 191, - 98, - 91, - 63, - 0, - 165, - 230, - 244, - 121, - 52, - 55, - 83, - 121, - 99, - 227, - 12, - 59, - 148, - 149, - 220, - 135, - 133, - 133, - 140, - 140, - 96, - 64, - 81, - 97, - 6, - 76, - 149, - 148, - 147, - 146, - 145, - 144, - 97, - 28, - 41, - 86, - 91, - 96, - 64, - 81, - 128, - 145, - 3, - 144, - 162, - 80, - 80, - 80, - 80, - 80, - 80, - 80, - 80, - 80, - 80, - 86, - 91, - 97, - 6, - 139, - 96, - 64, - 81, - 128, - 96, - 128, - 1, - 96, - 64, - 82, - 128, - 96, - 96, - 129, - 82, - 96, - 32, - 1, - 96, - 96, - 129, - 82, - 96, - 32, - 1, - 96, - 96, - 129, - 82, - 96, - 32, - 1, - 96, - 96, - 129, - 82, - 80, - 144, - 86, - 91, - 96, - 0, - 130, - 129, - 82, - 96, - 6, - 96, - 32, - 82, - 96, - 64, - 144, - 32, - 84, - 97, - 6, - 221, - 87, - 96, - 64, - 81, - 98, - 70, - 27, - 205, - 96, - 229, - 27, - 129, - 82, - 96, - 32, - 96, - 4, - 130, - 1, - 82, - 96, - 20, - 96, - 36, - 130, - 1, - 82, - 115, - 16, - 89, - 25, - 28, - 153, - 92, - 220, - 200, - 27, - 155, - 221, - 8, - 29, - 153, - 92, - 154, - 89, - 154, - 89, - 89, - 96, - 98, - 27, - 96, - 68, - 130, - 1, - 82, - 96, - 100, - 1, - 97, - 2, - 68, - 86, - 91, - 96, - 0, - 130, - 129, - 82, - 96, - 6, - 96, - 32, - 82, - 96, - 64, - 144, - 32, - 84, - 96, - 4, - 144, - 97, - 6, - 251, - 144, - 96, - 1, - 144, - 97, - 28, - 112, - 86, - 91, - 129, - 84, - 129, - 16, - 97, - 7, - 11, - 87, - 97, - 7, - 11, - 97, - 25, - 109, - 86, - 91, - 144, - 96, - 0, - 82, - 96, - 32, - 96, - 0, - 32, - 144, - 96, - 4, - 2, - 1, - 96, - 64, - 81, - 128, - 96, - 128, - 1, - 96, - 64, - 82, - 144, - 129, - 96, - 0, - 130, - 1, - 128, - 84, - 97, - 7, - 52, - 144, - 97, - 26, - 223, - 86, - 91, - 128, - 96, - 31, - 1, - 96, - 32, - 128, - 145, - 4, - 2, - 96, - 32, - 1, - 96, - 64, - 81, - 144, - 129, - 1, - 96, - 64, - 82, - 128, - 146, - 145, - 144, - 129, - 129, - 82, - 96, - 32, - 1, - 130, - 128, - 84, - 97, - 7, - 96, - 144, - 97, - 26, - 223, - 86, - 91, - 128, - 21, - 97, - 7, - 173, - 87, - 128, - 96, - 31, - 16, - 97, - 7, - 130, - 87, - 97, - 1, - 0, - 128, - 131, - 84, - 4, - 2, - 131, - 82, - 145, - 96, - 32, - 1, - 145, - 97, - 7, - 173, - 86, - 91, - 130, - 1, - 145, - 144, - 96, - 0, - 82, - 96, - 32, - 96, - 0, - 32, - 144, - 91, - 129, - 84, - 129, - 82, - 144, - 96, - 1, - 1, - 144, - 96, - 32, - 1, - 128, - 131, - 17, - 97, - 7, - 144, - 87, - 130, - 144, - 3, - 96, - 31, - 22, - 130, - 1, - 145, - 91, - 80, - 80, - 80, - 80, - 80, - 129, - 82, - 96, - 32, - 1, - 96, - 1, - 130, - 1, - 128, - 84, - 97, - 7, - 198, - 144, - 97, - 26, - 223, - 86, - 91, - 128, - 96, - 31, - 1, - 96, - 32, - 128, - 145, - 4, - 2, - 96, - 32, - 1, - 96, - 64, - 81, - 144, - 129, - 1, - 96, - 64, - 82, - 128, - 146, - 145, - 144, - 129, - 129, - 82, - 96, - 32, - 1, - 130, - 128, - 84, - 97, - 7, - 242, - 144, - 97, - 26, - 223, - 86, - 91, - 128, - 21, - 97, - 8, - 63, - 87, - 128, - 96, - 31, - 16, - 97, - 8, - 20, - 87, - 97, - 1, - 0, - 128, - 131, - 84, - 4, - 2, - 131, - 82, - 145, - 96, - 32, - 1, - 145, - 97, - 8, - 63, - 86, - 91, - 130, - 1, - 145, - 144, - 96, - 0, - 82, - 96, - 32, - 96, - 0, - 32, - 144, - 91, - 129, - 84, - 129, - 82, - 144, - 96, - 1, - 1, - 144, - 96, - 32, - 1, - 128, - 131, - 17, - 97, - 8, - 34, - 87, - 130, - 144, - 3, - 96, - 31, - 22, - 130, - 1, - 145, - 91, - 80, - 80, - 80, - 80, - 80, - 129, - 82, - 96, - 32, - 1, - 96, - 2, - 130, - 1, - 128, - 84, - 97, - 8, - 88, - 144, - 97, - 26, - 223, - 86, - 91, - 128, - 96, - 31, - 1, - 96, - 32, - 128, - 145, - 4, - 2, - 96, - 32, - 1, - 96, - 64, - 81, - 144, - 129, - 1, - 96, - 64, - 82, - 128, - 146, - 145, - 144, - 129, - 129, - 82, - 96, - 32, - 1, - 130, - 128, - 84, - 97, - 8, - 132, - 144, - 97, - 26, - 223, - 86, - 91, - 128, - 21, - 97, - 8, - 209, - 87, - 128, - 96, - 31, - 16, - 97, - 8, - 166, - 87, - 97, - 1, - 0, - 128, - 131, - 84, - 4, - 2, - 131, - 82, - 145, - 96, - 32, - 1, - 145, - 97, - 8, - 209, - 86, - 91, - 130, - 1, - 145, - 144, - 96, - 0, - 82, - 96, - 32, - 96, - 0, - 32, - 144, - 91, - 129, - 84, - 129, - 82, - 144, - 96, - 1, - 1, - 144, - 96, - 32, - 1, - 128, - 131, - 17, - 97, - 8, - 180, - 87, - 130, - 144, - 3, - 96, - 31, - 22, - 130, - 1, - 145, - 91, - 80, - 80, - 80, - 80, - 80, - 129, - 82, - 96, - 32, - 1, - 96, - 3, - 130, - 1, - 128, - 84, - 97, - 8, - 234, - 144, - 97, - 26, - 223, - 86, - 91, - 128, - 96, - 31, - 1, - 96, - 32, - 128, - 145, - 4, - 2, - 96, - 32, - 1, - 96, - 64, - 81, - 144, - 129, - 1, - 96, - 64, - 82, - 128, - 146, - 145, - 144, - 129, - 129, - 82, - 96, - 32, - 1, - 130, - 128, - 84, - 97, - 9, - 22, - 144, - 97, - 26, - 223, - 86, - 91, - 128, - 21, - 97, - 9, - 99, - 87, - 128, - 96, - 31, - 16, - 97, - 9, - 56, - 87, - 97, - 1, - 0, - 128, - 131, - 84, - 4, - 2, - 131, - 82, - 145, - 96, - 32, - 1, - 145, - 97, - 9, - 99, - 86, - 91, - 130, - 1, - 145, - 144, - 96, - 0, - 82, - 96, - 32, - 96, - 0, - 32, - 144, - 91, - 129, - 84, - 129, - 82, - 144, - 96, - 1, - 1, - 144, - 96, - 32, - 1, - 128, - 131, - 17, - 97, - 9, - 70, - 87, - 130, - 144, - 3, - 96, - 31, - 22, - 130, - 1, - 145, - 91, - 80, - 80, - 80, - 80, - 80, - 129, - 82, - 80, - 80, - 144, - 80, - 145, - 144, - 80, - 86, - 91, - 96, - 5, - 96, - 32, - 82, - 96, - 0, - 144, - 129, - 82, - 96, - 64, - 144, - 32, - 128, - 84, - 97, - 9, - 140, - 144, - 97, - 26, - 223, - 86, - 91, - 128, - 96, - 31, - 1, - 96, - 32, - 128, - 145, - 4, - 2, - 96, - 32, - 1, - 96, - 64, - 81, - 144, - 129, - 1, - 96, - 64, - 82, - 128, - 146, - 145, - 144, - 129, - 129, - 82, - 96, - 32, - 1, - 130, - 128, - 84, - 97, - 9, - 184, - 144, - 97, - 26, - 223, - 86, - 91, - 128, - 21, - 97, - 10, - 5, - 87, - 128, - 96, - 31, - 16, - 97, - 9, - 218, - 87, - 97, - 1, - 0, - 128, - 131, - 84, - 4, - 2, - 131, - 82, - 145, - 96, - 32, - 1, - 145, - 97, - 10, - 5, - 86, - 91, - 130, - 1, - 145, - 144, - 96, - 0, - 82, - 96, - 32, - 96, - 0, - 32, - 144, - 91, - 129, - 84, - 129, - 82, - 144, - 96, - 1, - 1, - 144, - 96, - 32, - 1, - 128, - 131, - 17, - 97, - 9, - 232, - 87, - 130, - 144, - 3, - 96, - 31, - 22, - 130, - 1, - 145, - 91, - 80, - 80, - 80, - 80, - 80, - 129, - 86, - 91, - 97, - 10, - 21, - 97, - 18, - 217, - 86, - 91, - 97, - 10, - 31, - 96, - 0, - 97, - 19, - 51, - 86, - 91, - 86, - 91, - 96, - 0, - 130, - 81, - 96, - 4, - 20, - 97, - 10, - 116, - 87, - 96, - 64, - 81, - 98, - 70, - 27, - 205, - 96, - 229, - 27, - 129, - 82, - 96, - 32, - 96, - 4, - 130, - 1, - 82, - 96, - 25, - 96, - 36, - 130, - 1, - 82, - 127, - 73, - 110, - 118, - 97, - 108, - 105, - 100, - 32, - 99, - 104, - 97, - 108, - 108, - 101, - 110, - 103, - 101, - 115, - 32, - 108, - 101, - 110, - 103, - 116, - 104, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 96, - 68, - 130, - 1, - 82, - 96, - 100, - 1, - 97, - 2, - 68, - 86, - 91, - 96, - 1, - 128, - 84, - 131, - 81, - 144, - 145, - 97, - 10, - 133, - 145, - 97, - 28, - 112, - 86, - 91, - 20, - 97, - 10, - 221, - 87, - 96, - 64, - 81, - 98, - 70, - 27, - 205, - 96, - 229, - 27, - 129, - 82, - 96, - 32, - 96, - 4, - 130, - 1, - 82, - 96, - 34, - 96, - 36, - 130, - 1, - 82, - 127, - 86, - 97, - 108, - 117, - 101, - 115, - 32, - 108, - 101, - 110, - 103, - 116, - 104, - 32, - 109, - 105, - 115, - 109, - 97, - 116, - 99, - 104, - 32, - 119, - 105, - 116, - 104, - 32, - 99, - 111, - 110, - 102, - 96, - 68, - 130, - 1, - 82, - 97, - 105, - 103, - 96, - 240, - 27, - 96, - 100, - 130, - 1, - 82, - 96, - 132, - 1, - 97, - 2, - 68, - 86, - 91, - 96, - 0, - 133, - 129, - 82, - 96, - 5, - 96, - 32, - 82, - 96, - 64, - 129, - 32, - 128, - 84, - 97, - 10, - 246, - 144, - 97, - 26, - 223, - 86, - 91, - 128, - 96, - 31, - 1, - 96, - 32, - 128, - 145, - 4, - 2, - 96, - 32, - 1, - 96, - 64, - 81, - 144, - 129, - 1, - 96, - 64, - 82, - 128, - 146, - 145, - 144, - 129, - 129, - 82, - 96, - 32, - 1, - 130, - 128, - 84, - 97, - 11, - 34, - 144, - 97, - 26, - 223, - 86, - 91, - 128, - 21, - 97, - 11, - 111, - 87, - 128, - 96, - 31, - 16, - 97, - 11, - 68, - 87, - 97, - 1, - 0, - 128, - 131, - 84, - 4, - 2, - 131, - 82, - 145, - 96, - 32, - 1, - 145, - 97, - 11, - 111, - 86, - 91, - 130, - 1, - 145, - 144, - 96, - 0, - 82, - 96, - 32, - 96, - 0, - 32, - 144, - 91, - 129, - 84, - 129, - 82, - 144, - 96, - 1, - 1, - 144, - 96, - 32, - 1, - 128, - 131, - 17, - 97, - 11, - 82, - 87, - 130, - 144, - 3, - 96, - 31, - 22, - 130, - 1, - 145, - 91, - 80, - 80, - 80, - 80, - 80, - 144, - 80, - 96, - 0, - 133, - 81, - 130, - 81, - 97, - 11, - 134, - 145, - 144, - 97, - 26, - 64, - 86, - 91, - 103, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 129, - 17, - 21, - 97, - 11, - 158, - 87, - 97, - 11, - 158, - 97, - 19, - 204, - 86, - 91, - 96, - 64, - 81, - 144, - 128, - 130, - 82, - 128, - 96, - 31, - 1, - 96, - 31, - 25, - 22, - 96, - 32, - 1, - 130, - 1, - 96, - 64, - 82, - 128, - 21, - 97, - 11, - 200, - 87, - 96, - 32, - 130, - 1, - 129, - 128, - 54, - 131, - 55, - 1, - 144, - 80, - 91, - 80, - 144, - 80, - 96, - 0, - 91, - 134, - 81, - 129, - 16, - 21, - 97, - 12, - 47, - 87, - 134, - 129, - 129, - 81, - 129, - 16, - 97, - 11, - 233, - 87, - 97, - 11, - 233, - 97, - 25, - 109, - 86, - 91, - 96, - 32, - 1, - 1, - 81, - 96, - 248, - 28, - 96, - 248, - 27, - 130, - 130, - 129, - 81, - 129, - 16, - 97, - 12, - 6, - 87, - 97, - 12, - 6, - 97, - 25, - 109, - 86, - 91, - 96, - 32, - 1, - 1, - 144, - 96, - 1, - 96, - 1, - 96, - 248, - 27, - 3, - 25, - 22, - 144, - 129, - 96, - 0, - 26, - 144, - 83, - 80, - 128, - 97, - 12, - 39, - 129, - 97, - 28, - 131, - 86, - 91, - 145, - 80, - 80, - 97, - 11, - 206, - 86, - 91, - 80, - 96, - 0, - 91, - 130, - 81, - 129, - 16, - 21, - 97, - 12, - 160, - 87, - 130, - 129, - 129, - 81, - 129, - 16, - 97, - 12, - 78, - 87, - 97, - 12, - 78, - 97, - 25, - 109, - 86, - 91, - 96, - 32, - 1, - 1, - 81, - 96, - 248, - 28, - 96, - 248, - 27, - 130, - 136, - 81, - 131, - 97, - 12, - 103, - 145, - 144, - 97, - 26, - 64, - 86, - 91, - 129, - 81, - 129, - 16, - 97, - 12, - 119, - 87, - 97, - 12, - 119, - 97, - 25, - 109, - 86, - 91, - 96, - 32, - 1, - 1, - 144, - 96, - 1, - 96, - 1, - 96, - 248, - 27, - 3, - 25, - 22, - 144, - 129, - 96, - 0, - 26, - 144, - 83, - 80, - 128, - 97, - 12, - 152, - 129, - 97, - 28, - 131, - 86, - 91, - 145, - 80, - 80, - 97, - 12, - 51, - 86, - 91, - 80, - 96, - 64, - 81, - 99, - 35, - 251, - 90, - 213, - 96, - 225, - 27, - 129, - 82, - 96, - 1, - 96, - 1, - 96, - 160, - 27, - 3, - 127, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 22, - 144, - 99, - 71, - 246, - 181, - 170, - 144, - 97, - 13, - 19, - 144, - 127, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 144, - 133, - 144, - 138, - 144, - 138, - 144, - 96, - 4, - 1, - 97, - 28, - 156, - 86, - 91, - 96, - 32, - 96, - 64, - 81, - 128, - 131, - 3, - 129, - 134, - 90, - 250, - 21, - 128, - 21, - 97, - 13, - 48, - 87, - 61, - 96, - 0, - 128, - 62, - 61, - 96, - 0, - 253, - 91, - 80, - 80, - 80, - 80, - 96, - 64, - 81, - 61, - 96, - 31, - 25, - 96, - 31, - 130, - 1, - 22, - 130, - 1, - 128, - 96, - 64, - 82, - 80, - 129, - 1, - 144, - 97, - 13, - 84, - 145, - 144, - 97, - 26, - 30, - 86, - 91, - 151, - 150, - 80, - 80, - 80, - 80, - 80, - 80, - 80, - 86, - 91, - 96, - 4, - 129, - 129, - 84, - 129, - 16, - 97, - 13, - 111, - 87, - 96, - 0, - 128, - 253, - 91, - 144, - 96, - 0, - 82, - 96, - 32, - 96, - 0, - 32, - 144, - 96, - 4, - 2, - 1, - 96, - 0, - 145, - 80, - 144, - 80, - 128, - 96, - 0, - 1, - 128, - 84, - 97, - 13, - 146, - 144, - 97, - 26, - 223, - 86, - 91, - 128, - 96, - 31, - 1, - 96, - 32, - 128, - 145, - 4, - 2, - 96, - 32, - 1, - 96, - 64, - 81, - 144, - 129, - 1, - 96, - 64, - 82, - 128, - 146, - 145, - 144, - 129, - 129, - 82, - 96, - 32, - 1, - 130, - 128, - 84, - 97, - 13, - 190, - 144, - 97, - 26, - 223, - 86, - 91, - 128, - 21, - 97, - 14, - 11, - 87, - 128, - 96, - 31, - 16, - 97, - 13, - 224, - 87, - 97, - 1, - 0, - 128, - 131, - 84, - 4, - 2, - 131, - 82, - 145, - 96, - 32, - 1, - 145, - 97, - 14, - 11, - 86, - 91, - 130, - 1, - 145, - 144, - 96, - 0, - 82, - 96, - 32, - 96, - 0, - 32, - 144, - 91, - 129, - 84, - 129, - 82, - 144, - 96, - 1, - 1, - 144, - 96, - 32, - 1, - 128, - 131, - 17, - 97, - 13, - 238, - 87, - 130, - 144, - 3, - 96, - 31, - 22, - 130, - 1, - 145, - 91, - 80, - 80, - 80, - 80, - 80, - 144, - 128, - 96, - 1, - 1, - 128, - 84, - 97, - 14, - 32, - 144, - 97, - 26, - 223, - 86, - 91, - 128, - 96, - 31, - 1, - 96, - 32, - 128, - 145, - 4, - 2, - 96, - 32, - 1, - 96, - 64, - 81, - 144, - 129, - 1, - 96, - 64, - 82, - 128, - 146, - 145, - 144, - 129, - 129, - 82, - 96, - 32, - 1, - 130, - 128, - 84, - 97, - 14, - 76, - 144, - 97, - 26, - 223, - 86, - 91, - 128, - 21, - 97, - 14, - 153, - 87, - 128, - 96, - 31, - 16, - 97, - 14, - 110, - 87, - 97, - 1, - 0, - 128, - 131, - 84, - 4, - 2, - 131, - 82, - 145, - 96, - 32, - 1, - 145, - 97, - 14, - 153, - 86, - 91, - 130, - 1, - 145, - 144, - 96, - 0, - 82, - 96, - 32, - 96, - 0, - 32, - 144, - 91, - 129, - 84, - 129, - 82, - 144, - 96, - 1, - 1, - 144, - 96, - 32, - 1, - 128, - 131, - 17, - 97, - 14, - 124, - 87, - 130, - 144, - 3, - 96, - 31, - 22, - 130, - 1, - 145, - 91, - 80, - 80, - 80, - 80, - 80, - 144, - 128, - 96, - 2, - 1, - 128, - 84, - 97, - 14, - 174, - 144, - 97, - 26, - 223, - 86, - 91, - 128, - 96, - 31, - 1, - 96, - 32, - 128, - 145, - 4, - 2, - 96, - 32, - 1, - 96, - 64, - 81, - 144, - 129, - 1, - 96, - 64, - 82, - 128, - 146, - 145, - 144, - 129, - 129, - 82, - 96, - 32, - 1, - 130, - 128, - 84, - 97, - 14, - 218, - 144, - 97, - 26, - 223, - 86, - 91, - 128, - 21, - 97, - 15, - 39, - 87, - 128, - 96, - 31, - 16, - 97, - 14, - 252, - 87, - 97, - 1, - 0, - 128, - 131, - 84, - 4, - 2, - 131, - 82, - 145, - 96, - 32, - 1, - 145, - 97, - 15, - 39, - 86, - 91, - 130, - 1, - 145, - 144, - 96, - 0, - 82, - 96, - 32, - 96, - 0, - 32, - 144, - 91, - 129, - 84, - 129, - 82, - 144, - 96, - 1, - 1, - 144, - 96, - 32, - 1, - 128, - 131, - 17, - 97, - 15, - 10, - 87, - 130, - 144, - 3, - 96, - 31, - 22, - 130, - 1, - 145, - 91, - 80, - 80, - 80, - 80, - 80, - 144, - 128, - 96, - 3, - 1, - 128, - 84, - 97, - 15, - 60, - 144, - 97, - 26, - 223, - 86, - 91, - 128, - 96, - 31, - 1, - 96, - 32, - 128, - 145, - 4, - 2, - 96, - 32, - 1, - 96, - 64, - 81, - 144, - 129, - 1, - 96, - 64, - 82, - 128, - 146, - 145, - 144, - 129, - 129, - 82, - 96, - 32, - 1, - 130, - 128, - 84, - 97, - 15, - 104, - 144, - 97, - 26, - 223, - 86, - 91, - 128, - 21, - 97, - 15, - 181, - 87, - 128, - 96, - 31, - 16, - 97, - 15, - 138, - 87, - 97, - 1, - 0, - 128, - 131, - 84, - 4, - 2, - 131, - 82, - 145, - 96, - 32, - 1, - 145, - 97, - 15, - 181, - 86, - 91, - 130, - 1, - 145, - 144, - 96, - 0, - 82, - 96, - 32, - 96, - 0, - 32, - 144, - 91, - 129, - 84, - 129, - 82, - 144, - 96, - 1, - 1, - 144, - 96, - 32, - 1, - 128, - 131, - 17, - 97, - 15, - 152, - 87, - 130, - 144, - 3, - 96, - 31, - 22, - 130, - 1, - 145, - 91, - 80, - 80, - 80, - 80, - 80, - 144, - 80, - 132, - 86, - 91, - 97, - 15, - 199, - 97, - 18, - 217, - 86, - 91, - 96, - 0, - 91, - 129, - 81, - 129, - 16, - 21, - 97, - 18, - 37, - 87, - 96, - 0, - 130, - 130, - 129, - 81, - 129, - 16, - 97, - 15, - 231, - 87, - 97, - 15, - 231, - 97, - 25, - 109, - 86, - 91, - 96, - 32, - 2, - 96, - 32, - 1, - 1, - 81, - 96, - 0, - 1, - 81, - 96, - 64, - 81, - 96, - 32, - 1, - 97, - 16, - 3, - 145, - 144, - 97, - 28, - 230, - 86, - 91, - 96, - 64, - 128, - 81, - 96, - 31, - 25, - 129, - 132, - 3, - 1, - 129, - 82, - 145, - 129, - 82, - 129, - 81, - 96, - 32, - 146, - 131, - 1, - 32, - 96, - 0, - 129, - 129, - 82, - 96, - 6, - 144, - 147, - 82, - 145, - 32, - 84, - 144, - 145, - 80, - 128, - 21, - 97, - 16, - 121, - 87, - 96, - 64, - 81, - 98, - 70, - 27, - 205, - 96, - 229, - 27, - 129, - 82, - 96, - 32, - 96, - 4, - 130, - 1, - 82, - 96, - 24, - 96, - 36, - 130, - 1, - 82, - 127, - 65, - 100, - 100, - 114, - 101, - 115, - 115, - 32, - 97, - 108, - 114, - 101, - 97, - 100, - 121, - 32, - 118, - 101, - 114, - 105, - 102, - 105, - 101, - 100, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 96, - 68, - 130, - 1, - 82, - 96, - 100, - 1, - 97, - 2, - 68, - 86, - 91, - 96, - 4, - 132, - 132, - 129, - 81, - 129, - 16, - 97, - 16, - 141, - 87, - 97, - 16, - 141, - 97, - 25, - 109, - 86, - 91, - 96, - 32, - 144, - 129, - 2, - 145, - 144, - 145, - 1, - 129, - 1, - 81, - 130, - 84, - 96, - 1, - 129, - 1, - 132, - 85, - 96, - 0, - 147, - 132, - 82, - 145, - 144, - 146, - 32, - 130, - 81, - 96, - 4, - 144, - 146, - 2, - 1, - 144, - 129, - 144, - 97, - 16, - 191, - 144, - 130, - 97, - 29, - 2, - 86, - 91, - 80, - 96, - 32, - 130, - 1, - 81, - 96, - 1, - 130, - 1, - 144, - 97, - 16, - 212, - 144, - 130, - 97, - 29, - 2, - 86, - 91, - 80, - 96, - 64, - 130, - 1, - 81, - 96, - 2, - 130, - 1, - 144, - 97, - 16, - 233, - 144, - 130, - 97, - 29, - 2, - 86, - 91, - 80, - 96, - 96, - 130, - 1, - 81, - 96, - 3, - 130, - 1, - 144, - 97, - 16, - 254, - 144, - 130, - 97, - 29, - 2, - 86, - 91, - 80, - 80, - 96, - 4, - 84, - 96, - 0, - 132, - 129, - 82, - 96, - 6, - 96, - 32, - 82, - 96, - 64, - 144, - 32, - 85, - 80, - 131, - 81, - 132, - 144, - 132, - 144, - 129, - 16, - 97, - 17, - 39, - 87, - 97, - 17, - 39, - 97, - 25, - 109, - 86, - 91, - 96, - 32, - 2, - 96, - 32, - 1, - 1, - 81, - 96, - 0, - 1, - 81, - 81, - 96, - 0, - 20, - 21, - 128, - 21, - 97, - 17, - 99, - 87, - 80, - 131, - 131, - 129, - 81, - 129, - 16, - 97, - 17, - 81, - 87, - 97, - 17, - 81, - 97, - 25, - 109, - 86, - 91, - 96, - 32, - 2, - 96, - 32, - 1, - 1, - 81, - 96, - 32, - 1, - 81, - 81, - 96, - 0, - 20, - 21, - 91, - 128, - 21, - 97, - 17, - 142, - 87, - 80, - 131, - 131, - 129, - 81, - 129, - 16, - 97, - 17, - 124, - 87, - 97, - 17, - 124, - 97, - 25, - 109, - 86, - 91, - 96, - 32, - 2, - 96, - 32, - 1, - 1, - 81, - 96, - 64, - 1, - 81, - 81, - 96, - 0, - 20, - 21, - 91, - 128, - 21, - 97, - 17, - 185, - 87, - 80, - 131, - 131, - 129, - 81, - 129, - 16, - 97, - 17, - 167, - 87, - 97, - 17, - 167, - 97, - 25, - 109, - 86, - 91, - 96, - 32, - 2, - 96, - 32, - 1, - 1, - 81, - 96, - 96, - 1, - 81, - 81, - 96, - 0, - 20, - 21, - 91, - 97, - 18, - 16, - 87, - 96, - 64, - 81, - 98, - 70, - 27, - 205, - 96, - 229, - 27, - 129, - 82, - 96, - 32, - 96, - 4, - 130, - 1, - 82, - 96, - 34, - 96, - 36, - 130, - 1, - 82, - 127, - 73, - 110, - 118, - 97, - 108, - 105, - 100, - 32, - 112, - 114, - 111, - 111, - 102, - 32, - 111, - 102, - 32, - 97, - 100, - 100, - 114, - 101, - 115, - 115, - 32, - 111, - 119, - 110, - 101, - 114, - 115, - 104, - 96, - 68, - 130, - 1, - 82, - 97, - 6, - 151, - 96, - 244, - 27, - 96, - 100, - 130, - 1, - 82, - 96, - 132, - 1, - 97, - 2, - 68, - 86, - 91, - 80, - 80, - 128, - 128, - 97, - 18, - 29, - 144, - 97, - 28, - 131, - 86, - 91, - 145, - 80, - 80, - 97, - 15, - 202, - 86, - 91, - 80, - 127, - 56, - 35, - 21, - 212, - 213, - 106, - 96, - 53, - 225, - 137, - 155, - 255, - 231, - 125, - 155, - 236, - 239, - 175, - 95, - 38, - 80, - 228, - 50, - 59, - 39, - 133, - 72, - 87, - 160, - 69, - 70, - 88, - 129, - 96, - 64, - 81, - 97, - 18, - 85, - 145, - 144, - 97, - 29, - 194, - 86, - 91, - 96, - 64, - 81, - 128, - 145, - 3, - 144, - 161, - 80, - 86, - 91, - 97, - 18, - 104, - 97, - 18, - 217, - 86, - 91, - 96, - 1, - 96, - 1, - 96, - 160, - 27, - 3, - 129, - 22, - 97, - 18, - 205, - 87, - 96, - 64, - 81, - 98, - 70, - 27, - 205, - 96, - 229, - 27, - 129, - 82, - 96, - 32, - 96, - 4, - 130, - 1, - 82, - 96, - 38, - 96, - 36, - 130, - 1, - 82, - 127, - 79, - 119, - 110, - 97, - 98, - 108, - 101, - 58, - 32, - 110, - 101, - 119, - 32, - 111, - 119, - 110, - 101, - 114, - 32, - 105, - 115, - 32, - 116, - 104, - 101, - 32, - 122, - 101, - 114, - 111, - 32, - 97, - 96, - 68, - 130, - 1, - 82, - 101, - 100, - 100, - 114, - 101, - 115, - 115, - 96, - 208, - 27, - 96, - 100, - 130, - 1, - 82, - 96, - 132, - 1, - 97, - 2, - 68, - 86, - 91, - 97, - 18, - 214, - 129, - 97, - 19, - 51, - 86, - 91, - 80, - 86, - 91, - 96, - 0, - 84, - 96, - 1, - 96, - 1, - 96, - 160, - 27, - 3, - 22, - 51, - 20, - 97, - 10, - 31, - 87, - 96, - 64, - 81, - 98, - 70, - 27, - 205, - 96, - 229, - 27, - 129, - 82, - 96, - 32, - 96, - 4, - 130, - 1, - 129, - 144, - 82, - 96, - 36, - 130, - 1, - 82, - 127, - 79, - 119, - 110, - 97, - 98, - 108, - 101, - 58, - 32, - 99, - 97, - 108, - 108, - 101, - 114, - 32, - 105, - 115, - 32, - 110, - 111, - 116, - 32, - 116, - 104, - 101, - 32, - 111, - 119, - 110, - 101, - 114, - 96, - 68, - 130, - 1, - 82, - 96, - 100, - 1, - 97, - 2, - 68, - 86, - 91, - 96, - 0, - 128, - 84, - 96, - 1, - 96, - 1, - 96, - 160, - 27, - 3, - 131, - 129, - 22, - 96, - 1, - 96, - 1, - 96, - 160, - 27, - 3, - 25, - 131, - 22, - 129, - 23, - 132, - 85, - 96, - 64, - 81, - 145, - 144, - 146, - 22, - 146, - 131, - 145, - 127, - 139, - 224, - 7, - 156, - 83, - 22, - 89, - 20, - 19, - 68, - 205, - 31, - 208, - 164, - 242, - 132, - 25, - 73, - 127, - 151, - 34, - 163, - 218, - 175, - 227, - 180, - 24, - 111, - 107, - 100, - 87, - 224, - 145, - 144, - 163, - 80, - 80, - 86, - 91, - 96, - 0, - 128, - 131, - 96, - 31, - 132, - 1, - 18, - 97, - 19, - 149, - 87, - 96, - 0, - 128, - 253, - 91, - 80, - 129, - 53, - 103, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 129, - 17, - 21, - 97, - 19, - 173, - 87, - 96, - 0, - 128, - 253, - 91, - 96, - 32, - 131, - 1, - 145, - 80, - 131, - 96, - 32, - 130, - 133, - 1, - 1, - 17, - 21, - 97, - 19, - 197, - 87, - 96, - 0, - 128, - 253, - 91, - 146, - 80, - 146, - 144, - 80, - 86, - 91, - 99, - 78, - 72, - 123, - 113, - 96, - 224, - 27, - 96, - 0, - 82, - 96, - 65, - 96, - 4, - 82, - 96, - 36, - 96, - 0, - 253, - 91, - 96, - 64, - 81, - 96, - 128, - 129, - 1, - 103, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 129, - 17, - 130, - 130, - 16, - 23, - 21, - 97, - 20, - 5, - 87, - 97, - 20, - 5, - 97, - 19, - 204, - 86, - 91, - 96, - 64, - 82, - 144, - 86, - 91, - 96, - 64, - 81, - 96, - 31, - 130, - 1, - 96, - 31, - 25, - 22, - 129, - 1, - 103, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 129, - 17, - 130, - 130, - 16, - 23, - 21, - 97, - 20, - 52, - 87, - 97, - 20, - 52, - 97, - 19, - 204, - 86, - 91, - 96, - 64, - 82, - 145, - 144, - 80, - 86, - 91, - 96, - 0, - 103, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 130, - 17, - 21, - 97, - 20, - 86, - 87, - 97, - 20, - 86, - 97, - 19, - 204, - 86, - 91, - 80, - 96, - 5, - 27, - 96, - 32, - 1, - 144, - 86, - 91, - 96, - 0, - 130, - 96, - 31, - 131, - 1, - 18, - 97, - 20, - 113, - 87, - 96, - 0, - 128, - 253, - 91, - 129, - 53, - 96, - 32, - 97, - 20, - 134, - 97, - 20, - 129, - 131, - 97, - 20, - 60, - 86, - 91, - 97, - 20, - 11, - 86, - 91, - 130, - 129, - 82, - 96, - 5, - 146, - 144, - 146, - 27, - 132, - 1, - 129, - 1, - 145, - 129, - 129, - 1, - 144, - 134, - 132, - 17, - 21, - 97, - 20, - 165, - 87, - 96, - 0, - 128, - 253, - 91, - 130, - 134, - 1, - 91, - 132, - 129, - 16, - 21, - 97, - 20, - 192, - 87, - 128, - 53, - 131, - 82, - 145, - 131, - 1, - 145, - 131, - 1, - 97, - 20, - 169, - 86, - 91, - 80, - 150, - 149, - 80, - 80, - 80, - 80, - 80, - 80, - 86, - 91, - 96, - 0, - 128, - 96, - 0, - 128, - 96, - 0, - 128, - 96, - 128, - 135, - 137, - 3, - 18, - 21, - 97, - 20, - 228, - 87, - 96, - 0, - 128, - 253, - 91, - 134, - 53, - 103, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 128, - 130, - 17, - 21, - 97, - 20, - 252, - 87, - 96, - 0, - 128, - 253, - 91, - 97, - 21, - 8, - 138, - 131, - 139, - 1, - 97, - 19, - 131, - 86, - 91, - 144, - 152, - 80, - 150, - 80, - 96, - 32, - 137, - 1, - 53, - 145, - 80, - 128, - 130, - 17, - 21, - 97, - 21, - 33, - 87, - 96, - 0, - 128, - 253, - 91, - 97, - 21, - 45, - 138, - 131, - 139, - 1, - 97, - 19, - 131, - 86, - 91, - 144, - 150, - 80, - 148, - 80, - 96, - 64, - 137, - 1, - 53, - 145, - 80, - 128, - 130, - 17, - 21, - 97, - 21, - 70, - 87, - 96, - 0, - 128, - 253, - 91, - 80, - 97, - 21, - 83, - 137, - 130, - 138, - 1, - 97, - 20, - 96, - 86, - 91, - 146, - 80, - 80, - 96, - 96, - 135, - 1, - 53, - 144, - 80, - 146, - 149, - 80, - 146, - 149, - 80, - 146, - 149, - 86, - 91, - 96, - 0, - 96, - 32, - 130, - 132, - 3, - 18, - 21, - 97, - 21, - 121, - 87, - 96, - 0, - 128, - 253, - 91, - 80, - 53, - 145, - 144, - 80, - 86, - 91, - 96, - 0, - 91, - 131, - 129, - 16, - 21, - 97, - 21, - 155, - 87, - 129, - 129, - 1, - 81, - 131, - 130, - 1, - 82, - 96, - 32, - 1, - 97, - 21, - 131, - 86, - 91, - 80, - 80, - 96, - 0, - 145, - 1, - 82, - 86, - 91, - 96, - 0, - 129, - 81, - 128, - 132, - 82, - 97, - 21, - 188, - 129, - 96, - 32, - 134, - 1, - 96, - 32, - 134, - 1, - 97, - 21, - 128, - 86, - 91, - 96, - 31, - 1, - 96, - 31, - 25, - 22, - 146, - 144, - 146, - 1, - 96, - 32, - 1, - 146, - 145, - 80, - 80, - 86, - 91, - 96, - 0, - 129, - 81, - 96, - 128, - 132, - 82, - 97, - 21, - 229, - 96, - 128, - 133, - 1, - 130, - 97, - 21, - 164, - 86, - 91, - 144, - 80, - 96, - 32, - 131, - 1, - 81, - 132, - 130, - 3, - 96, - 32, - 134, - 1, - 82, - 97, - 21, - 254, - 130, - 130, - 97, - 21, - 164, - 86, - 91, - 145, - 80, - 80, - 96, - 64, - 131, - 1, - 81, - 132, - 130, - 3, - 96, - 64, - 134, - 1, - 82, - 97, - 22, - 24, - 130, - 130, - 97, - 21, - 164, - 86, - 91, - 145, - 80, - 80, - 96, - 96, - 131, - 1, - 81, - 132, - 130, - 3, - 96, - 96, - 134, - 1, - 82, - 97, - 22, - 50, - 130, - 130, - 97, - 21, - 164, - 86, - 91, - 149, - 148, - 80, - 80, - 80, - 80, - 80, - 86, - 91, - 96, - 32, - 129, - 82, - 96, - 0, - 97, - 22, - 78, - 96, - 32, - 131, - 1, - 132, - 97, - 21, - 208, - 86, - 91, - 147, - 146, - 80, - 80, - 80, - 86, - 91, - 96, - 32, - 129, - 82, - 96, - 0, - 97, - 22, - 78, - 96, - 32, - 131, - 1, - 132, - 97, - 21, - 164, - 86, - 91, - 96, - 0, - 130, - 96, - 31, - 131, - 1, - 18, - 97, - 22, - 121, - 87, - 96, - 0, - 128, - 253, - 91, - 129, - 53, - 103, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 129, - 17, - 21, - 97, - 22, - 147, - 87, - 97, - 22, - 147, - 97, - 19, - 204, - 86, - 91, - 97, - 22, - 166, - 96, - 31, - 130, - 1, - 96, - 31, - 25, - 22, - 96, - 32, - 1, - 97, - 20, - 11, - 86, - 91, - 129, - 129, - 82, - 132, - 96, - 32, - 131, - 134, - 1, - 1, - 17, - 21, - 97, - 22, - 187, - 87, - 96, - 0, - 128, - 253, - 91, - 129, - 96, - 32, - 133, - 1, - 96, - 32, - 131, - 1, - 55, - 96, - 0, - 145, - 129, - 1, - 96, - 32, - 1, - 145, - 144, - 145, - 82, - 147, - 146, - 80, - 80, - 80, - 86, - 91, - 96, - 0, - 128, - 96, - 0, - 128, - 96, - 128, - 133, - 135, - 3, - 18, - 21, - 97, - 22, - 238, - 87, - 96, - 0, - 128, - 253, - 91, - 132, - 53, - 147, - 80, - 96, - 32, - 133, - 1, - 53, - 103, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 128, - 130, - 17, - 21, - 97, - 23, - 13, - 87, - 96, - 0, - 128, - 253, - 91, - 97, - 23, - 25, - 136, - 131, - 137, - 1, - 97, - 22, - 104, - 86, - 91, - 148, - 80, - 96, - 64, - 135, - 1, - 53, - 145, - 80, - 128, - 130, - 17, - 21, - 97, - 23, - 47, - 87, - 96, - 0, - 128, - 253, - 91, - 97, - 23, - 59, - 136, - 131, - 137, - 1, - 97, - 20, - 96, - 86, - 91, - 147, - 80, - 96, - 96, - 135, - 1, - 53, - 145, - 80, - 128, - 130, - 17, - 21, - 97, - 23, - 81, - 87, - 96, - 0, - 128, - 253, - 91, - 80, - 97, - 23, - 94, - 135, - 130, - 136, - 1, - 97, - 20, - 96, - 86, - 91, - 145, - 80, - 80, - 146, - 149, - 145, - 148, - 80, - 146, - 80, - 86, - 91, - 96, - 128, - 129, - 82, - 96, - 0, - 97, - 23, - 125, - 96, - 128, - 131, - 1, - 135, - 97, - 21, - 164, - 86, - 91, - 130, - 129, - 3, - 96, - 32, - 132, - 1, - 82, - 97, - 23, - 143, - 129, - 135, - 97, - 21, - 164, - 86, - 91, - 144, - 80, - 130, - 129, - 3, - 96, - 64, - 132, - 1, - 82, - 97, - 23, - 163, - 129, - 134, - 97, - 21, - 164, - 86, - 91, - 144, - 80, - 130, - 129, - 3, - 96, - 96, - 132, - 1, - 82, - 97, - 13, - 84, - 129, - 133, - 97, - 21, - 164, - 86, - 91, - 96, - 0, - 96, - 32, - 128, - 131, - 133, - 3, - 18, - 21, - 97, - 23, - 202, - 87, - 96, - 0, - 128, - 253, - 91, - 130, - 53, - 103, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 128, - 130, - 17, - 21, - 97, - 23, - 226, - 87, - 96, - 0, - 128, - 253, - 91, - 129, - 133, - 1, - 145, - 80, - 133, - 96, - 31, - 131, - 1, - 18, - 97, - 23, - 246, - 87, - 96, - 0, - 128, - 253, - 91, - 129, - 53, - 97, - 24, - 4, - 97, - 20, - 129, - 130, - 97, - 20, - 60, - 86, - 91, - 129, - 129, - 82, - 96, - 5, - 145, - 144, - 145, - 27, - 131, - 1, - 132, - 1, - 144, - 132, - 129, - 1, - 144, - 136, - 131, - 17, - 21, - 97, - 24, - 35, - 87, - 96, - 0, - 128, - 253, - 91, - 133, - 133, - 1, - 91, - 131, - 129, - 16, - 21, - 97, - 25, - 4, - 87, - 128, - 53, - 133, - 129, - 17, - 21, - 97, - 24, - 62, - 87, - 96, - 0, - 128, - 253, - 91, - 134, - 1, - 96, - 128, - 129, - 140, - 3, - 96, - 31, - 25, - 1, - 18, - 21, - 97, - 24, - 85, - 87, - 96, - 0, - 128, - 129, - 253, - 91, - 97, - 24, - 93, - 97, - 19, - 226, - 86, - 91, - 136, - 130, - 1, - 53, - 135, - 129, - 17, - 21, - 97, - 24, - 111, - 87, - 96, - 0, - 128, - 129, - 253, - 91, - 97, - 24, - 125, - 141, - 139, - 131, - 134, - 1, - 1, - 97, - 22, - 104, - 86, - 91, - 130, - 82, - 80, - 96, - 64, - 128, - 131, - 1, - 53, - 136, - 129, - 17, - 21, - 97, - 24, - 148, - 87, - 96, - 0, - 128, - 129, - 253, - 91, - 97, - 24, - 162, - 142, - 140, - 131, - 135, - 1, - 1, - 97, - 22, - 104, - 86, - 91, - 139, - 132, - 1, - 82, - 80, - 96, - 96, - 128, - 132, - 1, - 53, - 137, - 129, - 17, - 21, - 97, - 24, - 187, - 87, - 96, - 0, - 128, - 129, - 253, - 91, - 97, - 24, - 201, - 143, - 141, - 131, - 136, - 1, - 1, - 97, - 22, - 104, - 86, - 91, - 131, - 133, - 1, - 82, - 80, - 96, - 128, - 132, - 1, - 53, - 145, - 80, - 136, - 130, - 17, - 21, - 97, - 24, - 227, - 87, - 96, - 0, - 128, - 129, - 253, - 91, - 97, - 24, - 241, - 142, - 140, - 132, - 135, - 1, - 1, - 97, - 22, - 104, - 86, - 91, - 144, - 131, - 1, - 82, - 80, - 132, - 82, - 80, - 145, - 134, - 1, - 145, - 134, - 1, - 97, - 24, - 39, - 86, - 91, - 80, - 152, - 151, - 80, - 80, - 80, - 80, - 80, - 80, - 80, - 80, - 86, - 91, - 96, - 0, - 96, - 32, - 130, - 132, - 3, - 18, - 21, - 97, - 25, - 35, - 87, - 96, - 0, - 128, - 253, - 91, - 129, - 53, - 96, - 1, - 96, - 1, - 96, - 160, - 27, - 3, - 129, - 22, - 129, - 20, - 97, - 22, - 78, - 87, - 96, - 0, - 128, - 253, - 91, - 99, - 78, - 72, - 123, - 113, - 96, - 224, - 27, - 96, - 0, - 82, - 96, - 17, - 96, - 4, - 82, - 96, - 36, - 96, - 0, - 253, - 91, - 128, - 130, - 2, - 129, - 21, - 130, - 130, - 4, - 132, - 20, - 23, - 97, - 25, - 103, - 87, - 97, - 25, - 103, - 97, - 25, - 58, - 86, - 91, - 146, - 145, - 80, - 80, - 86, - 91, - 99, - 78, - 72, - 123, - 113, - 96, - 224, - 27, - 96, - 0, - 82, - 96, - 50, - 96, - 4, - 82, - 96, - 36, - 96, - 0, - 253, - 91, - 129, - 131, - 82, - 129, - 129, - 96, - 32, - 133, - 1, - 55, - 80, - 96, - 0, - 130, - 130, - 1, - 96, - 32, - 144, - 129, - 1, - 145, - 144, - 145, - 82, - 96, - 31, - 144, - 145, - 1, - 96, - 31, - 25, - 22, - 144, - 145, - 1, - 1, - 144, - 86, - 91, - 96, - 0, - 129, - 81, - 128, - 132, - 82, - 96, - 32, - 128, - 133, - 1, - 148, - 80, - 128, - 132, - 1, - 96, - 0, - 91, - 131, - 129, - 16, - 21, - 97, - 25, - 220, - 87, - 129, - 81, - 135, - 82, - 149, - 130, - 1, - 149, - 144, - 130, - 1, - 144, - 96, - 1, - 1, - 97, - 25, - 192, - 86, - 91, - 80, - 148, - 149, - 148, - 80, - 80, - 80, - 80, - 80, - 86, - 91, - 96, - 1, - 96, - 1, - 96, - 160, - 27, - 3, - 133, - 22, - 129, - 82, - 96, - 96, - 96, - 32, - 130, - 1, - 129, - 144, - 82, - 96, - 0, - 144, - 97, - 26, - 12, - 144, - 131, - 1, - 133, - 135, - 97, - 25, - 131, - 86, - 91, - 130, - 129, - 3, - 96, - 64, - 132, - 1, - 82, - 97, - 13, - 84, - 129, - 133, - 97, - 25, - 172, - 86, - 91, - 96, - 0, - 96, - 32, - 130, - 132, - 3, - 18, - 21, - 97, - 26, - 48, - 87, - 96, - 0, - 128, - 253, - 91, - 129, - 81, - 128, - 21, - 21, - 129, - 20, - 97, - 22, - 78, - 87, - 96, - 0, - 128, - 253, - 91, - 128, - 130, - 1, - 128, - 130, - 17, - 21, - 97, - 25, - 103, - 87, - 97, - 25, - 103, - 97, - 25, - 58, - 86, - 91, - 96, - 0, - 128, - 133, - 133, - 17, - 21, - 97, - 26, - 99, - 87, - 96, - 0, - 128, - 253, - 91, - 131, - 134, - 17, - 21, - 97, - 26, - 112, - 87, - 96, - 0, - 128, - 253, - 91, - 80, - 80, - 130, - 1, - 147, - 145, - 144, - 146, - 3, - 145, - 80, - 86, - 91, - 131, - 133, - 130, - 55, - 96, - 0, - 132, - 130, - 1, - 96, - 0, - 129, - 82, - 131, - 133, - 130, - 55, - 96, - 0, - 147, - 1, - 146, - 131, - 82, - 80, - 144, - 148, - 147, - 80, - 80, - 80, - 80, - 86, - 91, - 96, - 1, - 96, - 1, - 96, - 160, - 27, - 3, - 132, - 22, - 129, - 82, - 96, - 96, - 96, - 32, - 130, - 1, - 129, - 144, - 82, - 96, - 0, - 144, - 97, - 26, - 195, - 144, - 131, - 1, - 133, - 97, - 21, - 164, - 86, - 91, - 130, - 129, - 3, - 96, - 64, - 132, - 1, - 82, - 97, - 26, - 213, - 129, - 133, - 97, - 25, - 172, - 86, - 91, - 150, - 149, - 80, - 80, - 80, - 80, - 80, - 80, - 86, - 91, - 96, - 1, - 129, - 129, - 28, - 144, - 130, - 22, - 128, - 97, - 26, - 243, - 87, - 96, - 127, - 130, - 22, - 145, - 80, - 91, - 96, - 32, - 130, - 16, - 129, - 3, - 97, - 27, - 19, - 87, - 99, - 78, - 72, - 123, - 113, - 96, - 224, - 27, - 96, - 0, - 82, - 96, - 34, - 96, - 4, - 82, - 96, - 36, - 96, - 0, - 253, - 91, - 80, - 145, - 144, - 80, - 86, - 91, - 96, - 31, - 130, - 17, - 21, - 97, - 27, - 99, - 87, - 96, - 0, - 129, - 129, - 82, - 96, - 32, - 129, - 32, - 96, - 31, - 133, - 1, - 96, - 5, - 28, - 129, - 1, - 96, - 32, - 134, - 16, - 21, - 97, - 27, - 64, - 87, - 80, - 128, - 91, - 96, - 31, - 133, - 1, - 96, - 5, - 28, - 130, - 1, - 145, - 80, - 91, - 129, - 129, - 16, - 21, - 97, - 27, - 95, - 87, - 130, - 129, - 85, - 96, - 1, - 1, - 97, - 27, - 76, - 86, - 91, - 80, - 80, - 80, - 91, - 80, - 80, - 80, - 86, - 91, - 103, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 131, - 17, - 21, - 97, - 27, - 128, - 87, - 97, - 27, - 128, - 97, - 19, - 204, - 86, - 91, - 97, - 27, - 148, - 131, - 97, - 27, - 142, - 131, - 84, - 97, - 26, - 223, - 86, - 91, - 131, - 97, - 27, - 25, - 86, - 91, - 96, - 0, - 96, - 31, - 132, - 17, - 96, - 1, - 129, - 20, - 97, - 27, - 200, - 87, - 96, - 0, - 133, - 21, - 97, - 27, - 176, - 87, - 80, - 131, - 130, - 1, - 53, - 91, - 96, - 0, - 25, - 96, - 3, - 135, - 144, - 27, - 28, - 25, - 22, - 96, - 1, - 134, - 144, - 27, - 23, - 131, - 85, - 97, - 28, - 34, - 86, - 91, - 96, - 0, - 131, - 129, - 82, - 96, - 32, - 144, - 32, - 96, - 31, - 25, - 134, - 22, - 144, - 131, - 91, - 130, - 129, - 16, - 21, - 97, - 27, - 249, - 87, - 134, - 133, - 1, - 53, - 130, - 85, - 96, - 32, - 148, - 133, - 1, - 148, - 96, - 1, - 144, - 146, - 1, - 145, - 1, - 97, - 27, - 217, - 86, - 91, - 80, - 134, - 130, - 16, - 21, - 97, - 28, - 22, - 87, - 96, - 0, - 25, - 96, - 248, - 136, - 96, - 3, - 27, - 22, - 28, - 25, - 132, - 135, - 1, - 53, - 22, - 129, - 85, - 91, - 80, - 80, - 96, - 1, - 133, - 96, - 1, - 27, - 1, - 131, - 85, - 91, - 80, - 80, - 80, - 80, - 80, - 86, - 91, - 96, - 96, - 129, - 82, - 96, - 0, - 97, - 28, - 60, - 96, - 96, - 131, - 1, - 136, - 97, - 25, - 172, - 86, - 91, - 130, - 129, - 3, - 96, - 32, - 132, - 1, - 82, - 97, - 28, - 79, - 129, - 135, - 137, - 97, - 25, - 131, - 86, - 91, - 144, - 80, - 130, - 129, - 3, - 96, - 64, - 132, - 1, - 82, - 97, - 28, - 100, - 129, - 133, - 135, - 97, - 25, - 131, - 86, - 91, - 152, - 151, - 80, - 80, - 80, - 80, - 80, - 80, - 80, - 80, - 86, - 91, - 129, - 129, - 3, - 129, - 129, - 17, - 21, - 97, - 25, - 103, - 87, - 97, - 25, - 103, - 97, - 25, - 58, - 86, - 91, - 96, - 0, - 96, - 1, - 130, - 1, - 97, - 28, - 149, - 87, - 97, - 28, - 149, - 97, - 25, - 58, - 86, - 91, - 80, - 96, - 1, - 1, - 144, - 86, - 91, - 96, - 1, - 96, - 1, - 96, - 160, - 27, - 3, - 133, - 22, - 129, - 82, - 96, - 128, - 96, - 32, - 130, - 1, - 129, - 144, - 82, - 96, - 0, - 144, - 97, - 28, - 192, - 144, - 131, - 1, - 134, - 97, - 21, - 164, - 86, - 91, - 130, - 129, - 3, - 96, - 64, - 132, - 1, - 82, - 97, - 28, - 210, - 129, - 134, - 97, - 25, - 172, - 86, - 91, - 144, - 80, - 130, - 129, - 3, - 96, - 96, - 132, - 1, - 82, - 97, - 13, - 84, - 129, - 133, - 97, - 25, - 172, - 86, - 91, - 96, - 0, - 130, - 81, - 97, - 28, - 248, - 129, - 132, - 96, - 32, - 135, - 1, - 97, - 21, - 128, - 86, - 91, - 145, - 144, - 145, - 1, - 146, - 145, - 80, - 80, - 86, - 91, - 129, - 81, - 103, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 255, - 129, - 17, - 21, - 97, - 29, - 28, - 87, - 97, - 29, - 28, - 97, - 19, - 204, - 86, - 91, - 97, - 29, - 48, - 129, - 97, - 29, - 42, - 132, - 84, - 97, - 26, - 223, - 86, - 91, - 132, - 97, - 27, - 25, - 86, - 91, - 96, - 32, - 128, - 96, - 31, - 131, - 17, - 96, - 1, - 129, - 20, - 97, - 29, - 101, - 87, - 96, - 0, - 132, - 21, - 97, - 29, - 77, - 87, - 80, - 133, - 131, - 1, - 81, - 91, - 96, - 0, - 25, - 96, - 3, - 134, - 144, - 27, - 28, - 25, - 22, - 96, - 1, - 133, - 144, - 27, - 23, - 133, - 85, - 97, - 27, - 95, - 86, - 91, - 96, - 0, - 133, - 129, - 82, - 96, - 32, - 129, - 32, - 96, - 31, - 25, - 134, - 22, - 145, - 91, - 130, - 129, - 16, - 21, - 97, - 29, - 148, - 87, - 136, - 134, - 1, - 81, - 130, - 85, - 148, - 132, - 1, - 148, - 96, - 1, - 144, - 145, - 1, - 144, - 132, - 1, - 97, - 29, - 117, - 86, - 91, - 80, - 133, - 130, - 16, - 21, - 97, - 29, - 178, - 87, - 135, - 133, - 1, - 81, - 96, - 0, - 25, - 96, - 3, - 136, - 144, - 27, - 96, - 248, - 22, - 28, - 25, - 22, - 129, - 85, - 91, - 80, - 80, - 80, - 80, - 80, - 96, - 1, - 144, - 129, - 27, - 1, - 144, - 85, - 80, - 86, - 91, - 96, - 0, - 96, - 32, - 128, - 131, - 1, - 129, - 132, - 82, - 128, - 133, - 81, - 128, - 131, - 82, - 96, - 64, - 134, - 1, - 145, - 80, - 96, - 64, - 129, - 96, - 5, - 27, - 135, - 1, - 1, - 146, - 80, - 131, - 135, - 1, - 96, - 0, - 91, - 130, - 129, - 16, - 21, - 97, - 30, - 23, - 87, - 96, - 63, - 25, - 136, - 134, - 3, - 1, - 132, - 82, - 97, - 30, - 5, - 133, - 131, - 81, - 97, - 21, - 208, - 86, - 91, - 148, - 80, - 146, - 133, - 1, - 146, - 144, - 133, - 1, - 144, - 96, - 1, - 1, - 97, - 29, - 233, - 86, - 91, - 80, - 146, - 151, - 150, - 80, - 80, - 80, - 80, - 80, - 80, - 80, - 86, - 254, - 162, - 100, - 105, - 112, - 102, - 115, - 88, - 34, - 18, - 32, - 154, - 114, - 45, - 169, - 221, - 15, - 128, - 184, - 40, - 176, - 117, - 102, - 132, - 157, - 67, - 191, - 102, - 214, - 236, - 32, - 194, - 205, - 62, - 6, - 185, - 208, - 140, - 211, - 250, - 125, - 237, - 65, - 100, - 115, - 111, - 108, - 99, - 67, - 0, - 8, - 18, - 0, - 51, - ]; - ///The deployed bytecode of the contract. - pub static SUMMA_DEPLOYED_BYTECODE: ::ethers::core::types::Bytes = ::ethers::core::types::Bytes::from_static( - __DEPLOYED_BYTECODE, - ); - pub struct Summa(::ethers::contract::Contract); - impl ::core::clone::Clone for Summa { - fn clone(&self) -> Self { - Self(::core::clone::Clone::clone(&self.0)) - } - } - impl ::core::ops::Deref for Summa { - type Target = ::ethers::contract::Contract; - fn deref(&self) -> &Self::Target { - &self.0 - } - } - impl ::core::ops::DerefMut for Summa { - fn deref_mut(&mut self) -> &mut Self::Target { - &mut self.0 - } - } - impl ::core::fmt::Debug for Summa { - fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { - f.debug_tuple(stringify!(Summa)).field(&self.address()).finish() - } - } - impl Summa { - /// Creates a new contract instance with the specified `ethers` client at - /// `address`. The contract derefs to a `ethers::Contract` object. - pub fn new>( - address: T, - client: ::std::sync::Arc, - ) -> Self { - Self( - ::ethers::contract::Contract::new( - address.into(), - SUMMA_ABI.clone(), - client, - ), - ) - } - /// Constructs the general purpose `Deployer` instance based on the provided constructor arguments and sends it. - /// Returns a new instance of a deployer that returns an instance of this contract after sending the transaction - /// - /// Notes: - /// - If there are no constructor arguments, you should pass `()` as the argument. - /// - The default poll duration is 7 seconds. - /// - The default number of confirmations is 1 block. - /// - /// - /// # Example - /// - /// Generate contract bindings with `abigen!` and deploy a new contract instance. - /// - /// *Note*: this requires a `bytecode` and `abi` object in the `greeter.json` artifact. - /// - /// ```ignore - /// # async fn deploy(client: ::std::sync::Arc) { - /// abigen!(Greeter, "../greeter.json"); - /// - /// let greeter_contract = Greeter::deploy(client, "Hello world!".to_string()).unwrap().send().await.unwrap(); - /// let msg = greeter_contract.greet().call().await.unwrap(); - /// # } - /// ``` - pub fn deploy( - client: ::std::sync::Arc, - constructor_args: T, - ) -> ::core::result::Result< - ::ethers::contract::builders::ContractDeployer, - ::ethers::contract::ContractError, - > { - let factory = ::ethers::contract::ContractFactory::new( - SUMMA_ABI.clone(), - SUMMA_BYTECODE.clone().into(), - client, - ); - let deployer = factory.deploy(constructor_args)?; - let deployer = ::ethers::contract::ContractDeployer::new(deployer); - Ok(deployer) - } - ///Calls the contract's `addressOwnershipProofs` (0xa3c4bcf8) function - pub fn address_ownership_proofs( - &self, - p0: ::ethers::core::types::U256, - ) -> ::ethers::contract::builders::ContractCall< - M, - ( - ::std::string::String, - ::std::string::String, - ::ethers::core::types::Bytes, - ::ethers::core::types::Bytes, - ), - > { - self.0 - .method_hash([163, 196, 188, 248], p0) - .expect("method not found (this should never happen)") - } - ///Calls the contract's `commitments` (0x49ce8997) function - pub fn commitments( - &self, - p0: ::ethers::core::types::U256, - ) -> ::ethers::contract::builders::ContractCall< - M, - ::ethers::core::types::Bytes, - > { - self.0 - .method_hash([73, 206, 137, 151], p0) - .expect("method not found (this should never happen)") - } - ///Calls the contract's `config` (0x79502c55) function - pub fn config(&self) -> ::ethers::contract::builders::ContractCall { - self.0 - .method_hash([121, 80, 44, 85], ()) - .expect("method not found (this should never happen)") - } - ///Calls the contract's `getAddressOwnershipProof` (0x19b33968) function - pub fn get_address_ownership_proof( - &self, - address_hash: [u8; 32], - ) -> ::ethers::contract::builders::ContractCall { - self.0 - .method_hash([25, 179, 57, 104], address_hash) - .expect("method not found (this should never happen)") - } - ///Calls the contract's `owner` (0x8da5cb5b) function - pub fn owner( - &self, - ) -> ::ethers::contract::builders::ContractCall< - M, - ::ethers::core::types::Address, - > { - self.0 - .method_hash([141, 165, 203, 91], ()) - .expect("method not found (this should never happen)") - } - ///Calls the contract's `renounceOwnership` (0x715018a6) function - pub fn renounce_ownership( - &self, - ) -> ::ethers::contract::builders::ContractCall { - self.0 - .method_hash([113, 80, 24, 166], ()) - .expect("method not found (this should never happen)") - } - ///Calls the contract's `submitCommitment` (0x05ab9860) function - pub fn submit_commitment( - &self, - snark_proof: ::ethers::core::types::Bytes, - grand_sum_proof: ::ethers::core::types::Bytes, - total_balances: ::std::vec::Vec<::ethers::core::types::U256>, - timestamp: ::ethers::core::types::U256, - ) -> ::ethers::contract::builders::ContractCall { - self.0 - .method_hash( - [5, 171, 152, 96], - (snark_proof, grand_sum_proof, total_balances, timestamp), - ) - .expect("method not found (this should never happen)") - } - ///Calls the contract's `submitProofOfAddressOwnership` (0xc7ddca0e) function - pub fn submit_proof_of_address_ownership( - &self, - address_ownership_proofs: ::std::vec::Vec, - ) -> ::ethers::contract::builders::ContractCall { - self.0 - .method_hash([199, 221, 202, 14], address_ownership_proofs) - .expect("method not found (this should never happen)") - } - ///Calls the contract's `transferOwnership` (0xf2fde38b) function - pub fn transfer_ownership( - &self, - new_owner: ::ethers::core::types::Address, - ) -> ::ethers::contract::builders::ContractCall { - self.0 - .method_hash([242, 253, 227, 139], new_owner) - .expect("method not found (this should never happen)") - } - ///Calls the contract's `verifyInclusionProof` (0x9c382559) function - pub fn verify_inclusion_proof( - &self, - timestamp: ::ethers::core::types::U256, - inclusion_proof: ::ethers::core::types::Bytes, - challenges: ::std::vec::Vec<::ethers::core::types::U256>, - values: ::std::vec::Vec<::ethers::core::types::U256>, - ) -> ::ethers::contract::builders::ContractCall { - self.0 - .method_hash( - [156, 56, 37, 89], - (timestamp, inclusion_proof, challenges, values), - ) - .expect("method not found (this should never happen)") - } - ///Calls the contract's `verifyingKey` (0x7950c5f8) function - pub fn verifying_key( - &self, - ) -> ::ethers::contract::builders::ContractCall< - M, - ::ethers::core::types::Address, - > { - self.0 - .method_hash([121, 80, 197, 248], ()) - .expect("method not found (this should never happen)") - } - ///Gets the contract's `AddressOwnershipProofSubmitted` event - pub fn address_ownership_proof_submitted_filter( - &self, - ) -> ::ethers::contract::builders::Event< - ::std::sync::Arc, - M, - AddressOwnershipProofSubmittedFilter, - > { - self.0.event() - } - ///Gets the contract's `LiabilitiesCommitmentSubmitted` event - pub fn liabilities_commitment_submitted_filter( - &self, - ) -> ::ethers::contract::builders::Event< - ::std::sync::Arc, - M, - LiabilitiesCommitmentSubmittedFilter, - > { - self.0.event() - } - ///Gets the contract's `OwnershipTransferred` event - pub fn ownership_transferred_filter( - &self, - ) -> ::ethers::contract::builders::Event< - ::std::sync::Arc, - M, - OwnershipTransferredFilter, - > { - self.0.event() - } - /// Returns an `Event` builder for all the events of this contract. - pub fn events( - &self, - ) -> ::ethers::contract::builders::Event<::std::sync::Arc, M, SummaEvents> { - self.0.event_with_filter(::core::default::Default::default()) - } - } - impl From<::ethers::contract::Contract> - for Summa { - fn from(contract: ::ethers::contract::Contract) -> Self { - Self::new(contract.address(), contract.client()) - } - } - #[derive( - Clone, - ::ethers::contract::EthEvent, - ::ethers::contract::EthDisplay, - Default, - Debug, - PartialEq, - Eq, - Hash - )] - #[ethevent( - name = "AddressOwnershipProofSubmitted", - abi = "AddressOwnershipProofSubmitted((string,string,bytes,bytes)[])" - )] - pub struct AddressOwnershipProofSubmittedFilter { - pub address_ownership_proofs: ::std::vec::Vec, - } - #[derive( - Clone, - ::ethers::contract::EthEvent, - ::ethers::contract::EthDisplay, - Default, - Debug, - PartialEq, - Eq, - Hash - )] - #[ethevent( - name = "LiabilitiesCommitmentSubmitted", - abi = "LiabilitiesCommitmentSubmitted(uint256,uint256[],bytes,bytes)" - )] - pub struct LiabilitiesCommitmentSubmittedFilter { - #[ethevent(indexed)] - pub timestamp: ::ethers::core::types::U256, - pub total_balances: ::std::vec::Vec<::ethers::core::types::U256>, - pub snark_proof: ::ethers::core::types::Bytes, - pub grand_sum_proof: ::ethers::core::types::Bytes, - } - #[derive( - Clone, - ::ethers::contract::EthEvent, - ::ethers::contract::EthDisplay, - Default, - Debug, - PartialEq, - Eq, - Hash - )] - #[ethevent( - name = "OwnershipTransferred", - abi = "OwnershipTransferred(address,address)" - )] - pub struct OwnershipTransferredFilter { - #[ethevent(indexed)] - pub previous_owner: ::ethers::core::types::Address, - #[ethevent(indexed)] - pub new_owner: ::ethers::core::types::Address, - } - ///Container type for all of the contract's events - #[derive(Clone, ::ethers::contract::EthAbiType, Debug, PartialEq, Eq, Hash)] - pub enum SummaEvents { - AddressOwnershipProofSubmittedFilter(AddressOwnershipProofSubmittedFilter), - LiabilitiesCommitmentSubmittedFilter(LiabilitiesCommitmentSubmittedFilter), - OwnershipTransferredFilter(OwnershipTransferredFilter), - } - impl ::ethers::contract::EthLogDecode for SummaEvents { - fn decode_log( - log: &::ethers::core::abi::RawLog, - ) -> ::core::result::Result { - if let Ok(decoded) = AddressOwnershipProofSubmittedFilter::decode_log(log) { - return Ok(SummaEvents::AddressOwnershipProofSubmittedFilter(decoded)); - } - if let Ok(decoded) = LiabilitiesCommitmentSubmittedFilter::decode_log(log) { - return Ok(SummaEvents::LiabilitiesCommitmentSubmittedFilter(decoded)); - } - if let Ok(decoded) = OwnershipTransferredFilter::decode_log(log) { - return Ok(SummaEvents::OwnershipTransferredFilter(decoded)); - } - Err(::ethers::core::abi::Error::InvalidData) - } - } - impl ::core::fmt::Display for SummaEvents { - fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { - match self { - Self::AddressOwnershipProofSubmittedFilter(element) => { - ::core::fmt::Display::fmt(element, f) - } - Self::LiabilitiesCommitmentSubmittedFilter(element) => { - ::core::fmt::Display::fmt(element, f) - } - Self::OwnershipTransferredFilter(element) => { - ::core::fmt::Display::fmt(element, f) - } - } - } - } - impl ::core::convert::From for SummaEvents { - fn from(value: AddressOwnershipProofSubmittedFilter) -> Self { - Self::AddressOwnershipProofSubmittedFilter(value) - } - } - impl ::core::convert::From for SummaEvents { - fn from(value: LiabilitiesCommitmentSubmittedFilter) -> Self { - Self::LiabilitiesCommitmentSubmittedFilter(value) - } - } - impl ::core::convert::From for SummaEvents { - fn from(value: OwnershipTransferredFilter) -> Self { - Self::OwnershipTransferredFilter(value) - } - } - ///Container type for all input parameters for the `addressOwnershipProofs` function with signature `addressOwnershipProofs(uint256)` and selector `0xa3c4bcf8` - #[derive( - Clone, - ::ethers::contract::EthCall, - ::ethers::contract::EthDisplay, - Default, - Debug, - PartialEq, - Eq, - Hash - )] - #[ethcall(name = "addressOwnershipProofs", abi = "addressOwnershipProofs(uint256)")] - pub struct AddressOwnershipProofsCall(pub ::ethers::core::types::U256); - ///Container type for all input parameters for the `commitments` function with signature `commitments(uint256)` and selector `0x49ce8997` - #[derive( - Clone, - ::ethers::contract::EthCall, - ::ethers::contract::EthDisplay, - Default, - Debug, - PartialEq, - Eq, - Hash - )] - #[ethcall(name = "commitments", abi = "commitments(uint256)")] - pub struct CommitmentsCall(pub ::ethers::core::types::U256); - ///Container type for all input parameters for the `config` function with signature `config()` and selector `0x79502c55` - #[derive( - Clone, - ::ethers::contract::EthCall, - ::ethers::contract::EthDisplay, - Default, - Debug, - PartialEq, - Eq, - Hash - )] - #[ethcall(name = "config", abi = "config()")] - pub struct ConfigCall; - ///Container type for all input parameters for the `getAddressOwnershipProof` function with signature `getAddressOwnershipProof(bytes32)` and selector `0x19b33968` - #[derive( - Clone, - ::ethers::contract::EthCall, - ::ethers::contract::EthDisplay, - Default, - Debug, - PartialEq, - Eq, - Hash - )] - #[ethcall( - name = "getAddressOwnershipProof", - abi = "getAddressOwnershipProof(bytes32)" - )] - pub struct GetAddressOwnershipProofCall { - pub address_hash: [u8; 32], - } - ///Container type for all input parameters for the `owner` function with signature `owner()` and selector `0x8da5cb5b` - #[derive( - Clone, - ::ethers::contract::EthCall, - ::ethers::contract::EthDisplay, - Default, - Debug, - PartialEq, - Eq, - Hash - )] - #[ethcall(name = "owner", abi = "owner()")] - pub struct OwnerCall; - ///Container type for all input parameters for the `renounceOwnership` function with signature `renounceOwnership()` and selector `0x715018a6` - #[derive( - Clone, - ::ethers::contract::EthCall, - ::ethers::contract::EthDisplay, - Default, - Debug, - PartialEq, - Eq, - Hash - )] - #[ethcall(name = "renounceOwnership", abi = "renounceOwnership()")] - pub struct RenounceOwnershipCall; - ///Container type for all input parameters for the `submitCommitment` function with signature `submitCommitment(bytes,bytes,uint256[],uint256)` and selector `0x05ab9860` - #[derive( - Clone, - ::ethers::contract::EthCall, - ::ethers::contract::EthDisplay, - Default, - Debug, - PartialEq, - Eq, - Hash - )] - #[ethcall( - name = "submitCommitment", - abi = "submitCommitment(bytes,bytes,uint256[],uint256)" - )] - pub struct SubmitCommitmentCall { - pub snark_proof: ::ethers::core::types::Bytes, - pub grand_sum_proof: ::ethers::core::types::Bytes, - pub total_balances: ::std::vec::Vec<::ethers::core::types::U256>, - pub timestamp: ::ethers::core::types::U256, - } - ///Container type for all input parameters for the `submitProofOfAddressOwnership` function with signature `submitProofOfAddressOwnership((string,string,bytes,bytes)[])` and selector `0xc7ddca0e` - #[derive( - Clone, - ::ethers::contract::EthCall, - ::ethers::contract::EthDisplay, - Default, - Debug, - PartialEq, - Eq, - Hash - )] - #[ethcall( - name = "submitProofOfAddressOwnership", - abi = "submitProofOfAddressOwnership((string,string,bytes,bytes)[])" - )] - pub struct SubmitProofOfAddressOwnershipCall { - pub address_ownership_proofs: ::std::vec::Vec, - } - ///Container type for all input parameters for the `transferOwnership` function with signature `transferOwnership(address)` and selector `0xf2fde38b` - #[derive( - Clone, - ::ethers::contract::EthCall, - ::ethers::contract::EthDisplay, - Default, - Debug, - PartialEq, - Eq, - Hash - )] - #[ethcall(name = "transferOwnership", abi = "transferOwnership(address)")] - pub struct TransferOwnershipCall { - pub new_owner: ::ethers::core::types::Address, - } - ///Container type for all input parameters for the `verifyInclusionProof` function with signature `verifyInclusionProof(uint256,bytes,uint256[],uint256[])` and selector `0x9c382559` - #[derive( - Clone, - ::ethers::contract::EthCall, - ::ethers::contract::EthDisplay, - Default, - Debug, - PartialEq, - Eq, - Hash - )] - #[ethcall( - name = "verifyInclusionProof", - abi = "verifyInclusionProof(uint256,bytes,uint256[],uint256[])" - )] - pub struct VerifyInclusionProofCall { - pub timestamp: ::ethers::core::types::U256, - pub inclusion_proof: ::ethers::core::types::Bytes, - pub challenges: ::std::vec::Vec<::ethers::core::types::U256>, - pub values: ::std::vec::Vec<::ethers::core::types::U256>, - } - ///Container type for all input parameters for the `verifyingKey` function with signature `verifyingKey()` and selector `0x7950c5f8` - #[derive( - Clone, - ::ethers::contract::EthCall, - ::ethers::contract::EthDisplay, - Default, - Debug, - PartialEq, - Eq, - Hash - )] - #[ethcall(name = "verifyingKey", abi = "verifyingKey()")] - pub struct VerifyingKeyCall; - ///Container type for all of the contract's call - #[derive(Clone, ::ethers::contract::EthAbiType, Debug, PartialEq, Eq, Hash)] - pub enum SummaCalls { - AddressOwnershipProofs(AddressOwnershipProofsCall), - Commitments(CommitmentsCall), - Config(ConfigCall), - GetAddressOwnershipProof(GetAddressOwnershipProofCall), - Owner(OwnerCall), - RenounceOwnership(RenounceOwnershipCall), - SubmitCommitment(SubmitCommitmentCall), - SubmitProofOfAddressOwnership(SubmitProofOfAddressOwnershipCall), - TransferOwnership(TransferOwnershipCall), - VerifyInclusionProof(VerifyInclusionProofCall), - VerifyingKey(VerifyingKeyCall), - } - impl ::ethers::core::abi::AbiDecode for SummaCalls { - fn decode( - data: impl AsRef<[u8]>, - ) -> ::core::result::Result { - let data = data.as_ref(); - if let Ok(decoded) - = ::decode( - data, - ) { - return Ok(Self::AddressOwnershipProofs(decoded)); - } - if let Ok(decoded) - = ::decode(data) { - return Ok(Self::Commitments(decoded)); - } - if let Ok(decoded) - = ::decode(data) { - return Ok(Self::Config(decoded)); - } - if let Ok(decoded) - = ::decode( - data, - ) { - return Ok(Self::GetAddressOwnershipProof(decoded)); - } - if let Ok(decoded) - = ::decode(data) { - return Ok(Self::Owner(decoded)); - } - if let Ok(decoded) - = ::decode( - data, - ) { - return Ok(Self::RenounceOwnership(decoded)); - } - if let Ok(decoded) - = ::decode( - data, - ) { - return Ok(Self::SubmitCommitment(decoded)); - } - if let Ok(decoded) - = ::decode( - data, - ) { - return Ok(Self::SubmitProofOfAddressOwnership(decoded)); - } - if let Ok(decoded) - = ::decode( - data, - ) { - return Ok(Self::TransferOwnership(decoded)); - } - if let Ok(decoded) - = ::decode( - data, - ) { - return Ok(Self::VerifyInclusionProof(decoded)); - } - if let Ok(decoded) - = ::decode(data) { - return Ok(Self::VerifyingKey(decoded)); - } - Err(::ethers::core::abi::Error::InvalidData.into()) - } - } - impl ::ethers::core::abi::AbiEncode for SummaCalls { - fn encode(self) -> Vec { - match self { - Self::AddressOwnershipProofs(element) => { - ::ethers::core::abi::AbiEncode::encode(element) - } - Self::Commitments(element) => { - ::ethers::core::abi::AbiEncode::encode(element) - } - Self::Config(element) => ::ethers::core::abi::AbiEncode::encode(element), - Self::GetAddressOwnershipProof(element) => { - ::ethers::core::abi::AbiEncode::encode(element) - } - Self::Owner(element) => ::ethers::core::abi::AbiEncode::encode(element), - Self::RenounceOwnership(element) => { - ::ethers::core::abi::AbiEncode::encode(element) - } - Self::SubmitCommitment(element) => { - ::ethers::core::abi::AbiEncode::encode(element) - } - Self::SubmitProofOfAddressOwnership(element) => { - ::ethers::core::abi::AbiEncode::encode(element) - } - Self::TransferOwnership(element) => { - ::ethers::core::abi::AbiEncode::encode(element) - } - Self::VerifyInclusionProof(element) => { - ::ethers::core::abi::AbiEncode::encode(element) - } - Self::VerifyingKey(element) => { - ::ethers::core::abi::AbiEncode::encode(element) - } - } - } - } - impl ::core::fmt::Display for SummaCalls { - fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { - match self { - Self::AddressOwnershipProofs(element) => { - ::core::fmt::Display::fmt(element, f) - } - Self::Commitments(element) => ::core::fmt::Display::fmt(element, f), - Self::Config(element) => ::core::fmt::Display::fmt(element, f), - Self::GetAddressOwnershipProof(element) => { - ::core::fmt::Display::fmt(element, f) - } - Self::Owner(element) => ::core::fmt::Display::fmt(element, f), - Self::RenounceOwnership(element) => ::core::fmt::Display::fmt(element, f), - Self::SubmitCommitment(element) => ::core::fmt::Display::fmt(element, f), - Self::SubmitProofOfAddressOwnership(element) => { - ::core::fmt::Display::fmt(element, f) - } - Self::TransferOwnership(element) => ::core::fmt::Display::fmt(element, f), - Self::VerifyInclusionProof(element) => { - ::core::fmt::Display::fmt(element, f) - } - Self::VerifyingKey(element) => ::core::fmt::Display::fmt(element, f), - } - } - } - impl ::core::convert::From for SummaCalls { - fn from(value: AddressOwnershipProofsCall) -> Self { - Self::AddressOwnershipProofs(value) - } - } - impl ::core::convert::From for SummaCalls { - fn from(value: CommitmentsCall) -> Self { - Self::Commitments(value) - } - } - impl ::core::convert::From for SummaCalls { - fn from(value: ConfigCall) -> Self { - Self::Config(value) - } - } - impl ::core::convert::From for SummaCalls { - fn from(value: GetAddressOwnershipProofCall) -> Self { - Self::GetAddressOwnershipProof(value) - } - } - impl ::core::convert::From for SummaCalls { - fn from(value: OwnerCall) -> Self { - Self::Owner(value) - } - } - impl ::core::convert::From for SummaCalls { - fn from(value: RenounceOwnershipCall) -> Self { - Self::RenounceOwnership(value) - } - } - impl ::core::convert::From for SummaCalls { - fn from(value: SubmitCommitmentCall) -> Self { - Self::SubmitCommitment(value) - } - } - impl ::core::convert::From for SummaCalls { - fn from(value: SubmitProofOfAddressOwnershipCall) -> Self { - Self::SubmitProofOfAddressOwnership(value) - } - } - impl ::core::convert::From for SummaCalls { - fn from(value: TransferOwnershipCall) -> Self { - Self::TransferOwnership(value) - } - } - impl ::core::convert::From for SummaCalls { - fn from(value: VerifyInclusionProofCall) -> Self { - Self::VerifyInclusionProof(value) - } - } - impl ::core::convert::From for SummaCalls { - fn from(value: VerifyingKeyCall) -> Self { - Self::VerifyingKey(value) - } - } - ///Container type for all return fields from the `addressOwnershipProofs` function with signature `addressOwnershipProofs(uint256)` and selector `0xa3c4bcf8` - #[derive( - Clone, - ::ethers::contract::EthAbiType, - ::ethers::contract::EthAbiCodec, - Default, - Debug, - PartialEq, - Eq, - Hash - )] - pub struct AddressOwnershipProofsReturn { - pub cex_address: ::std::string::String, - pub chain: ::std::string::String, - pub signature: ::ethers::core::types::Bytes, - pub message: ::ethers::core::types::Bytes, - } - ///Container type for all return fields from the `commitments` function with signature `commitments(uint256)` and selector `0x49ce8997` - #[derive( - Clone, - ::ethers::contract::EthAbiType, - ::ethers::contract::EthAbiCodec, - Default, - Debug, - PartialEq, - Eq, - Hash - )] - pub struct CommitmentsReturn(pub ::ethers::core::types::Bytes); - ///Container type for all return fields from the `config` function with signature `config()` and selector `0x79502c55` - #[derive( - Clone, - ::ethers::contract::EthAbiType, - ::ethers::contract::EthAbiCodec, - Default, - Debug, - PartialEq, - Eq, - Hash - )] - pub struct ConfigReturn { - pub balance_byte_range: u8, - } - ///Container type for all return fields from the `getAddressOwnershipProof` function with signature `getAddressOwnershipProof(bytes32)` and selector `0x19b33968` - #[derive( - Clone, - ::ethers::contract::EthAbiType, - ::ethers::contract::EthAbiCodec, - Default, - Debug, - PartialEq, - Eq, - Hash - )] - pub struct GetAddressOwnershipProofReturn(pub AddressOwnershipProof); - ///Container type for all return fields from the `owner` function with signature `owner()` and selector `0x8da5cb5b` - #[derive( - Clone, - ::ethers::contract::EthAbiType, - ::ethers::contract::EthAbiCodec, - Default, - Debug, - PartialEq, - Eq, - Hash - )] - pub struct OwnerReturn(pub ::ethers::core::types::Address); - ///Container type for all return fields from the `verifyInclusionProof` function with signature `verifyInclusionProof(uint256,bytes,uint256[],uint256[])` and selector `0x9c382559` - #[derive( - Clone, - ::ethers::contract::EthAbiType, - ::ethers::contract::EthAbiCodec, - Default, - Debug, - PartialEq, - Eq, - Hash - )] - pub struct VerifyInclusionProofReturn(pub bool); - ///Container type for all return fields from the `verifyingKey` function with signature `verifyingKey()` and selector `0x7950c5f8` - #[derive( - Clone, - ::ethers::contract::EthAbiType, - ::ethers::contract::EthAbiCodec, - Default, - Debug, - PartialEq, - Eq, - Hash - )] - pub struct VerifyingKeyReturn(pub ::ethers::core::types::Address); - ///`AddressOwnershipProof(string,string,bytes,bytes)` - #[derive( - Clone, - ::ethers::contract::EthAbiType, - ::ethers::contract::EthAbiCodec, - Default, - Debug, - PartialEq, - Eq, - Hash - )] - pub struct AddressOwnershipProof { - pub cex_address: ::std::string::String, - pub chain: ::std::string::String, - pub signature: ::ethers::core::types::Bytes, - pub message: ::ethers::core::types::Bytes, - } -} diff --git a/backend/src/contracts/generated/verifying_key.rs b/backend/src/contracts/generated/verifying_key.rs deleted file mode 100644 index a1bdd70d..00000000 --- a/backend/src/contracts/generated/verifying_key.rs +++ /dev/null @@ -1,1537 +0,0 @@ -pub use halo_2_verifying_key::*; -/// This module was auto-generated with ethers-rs Abigen. -/// More information at: -#[allow( - clippy::enum_variant_names, - clippy::too_many_arguments, - clippy::upper_case_acronyms, - clippy::type_complexity, - dead_code, - non_camel_case_types, -)] -pub mod halo_2_verifying_key { - #[rustfmt::skip] - const __ABI: &str = "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\",\"outputs\":[]}]"; - ///The parsed JSON ABI of the contract. - pub static HALO2VERIFYINGKEY_ABI: ::ethers::contract::Lazy< - ::ethers::core::abi::Abi, - > = ::ethers::contract::Lazy::new(|| { - ::ethers::core::utils::__serde_json::from_str(__ABI) - .expect("ABI is always valid") - }); - #[rustfmt::skip] - const __BYTECODE: &[u8] = &[ - 96, - 128, - 96, - 64, - 82, - 52, - 128, - 21, - 97, - 0, - 16, - 87, - 96, - 0, - 128, - 253, - 91, - 80, - 96, - 0, - 126, - 153, - 110, - 214, - 65, - 19, - 213, - 216, - 111, - 66, - 202, - 171, - 15, - 61, - 37, - 70, - 107, - 8, - 86, - 1, - 84, - 114, - 222, - 75, - 184, - 9, - 241, - 104, - 170, - 188, - 37, - 103, - 129, - 82, - 96, - 17, - 96, - 32, - 82, - 127, - 48, - 100, - 54, - 64, - 185, - 248, - 47, - 144, - 232, - 59, - 105, - 142, - 94, - 166, - 23, - 156, - 124, - 5, - 84, - 46, - 133, - 149, - 51, - 180, - 139, - 153, - 83, - 162, - 245, - 54, - 8, - 1, - 96, - 64, - 82, - 127, - 48, - 76, - 209, - 231, - 156, - 250, - 91, - 15, - 5, - 78, - 152, - 26, - 39, - 237, - 119, - 6, - 231, - 234, - 107, - 6, - 167, - 242, - 102, - 239, - 141, - 184, - 25, - 193, - 121, - 194, - 195, - 234, - 96, - 96, - 82, - 127, - 25, - 53, - 134, - 218, - 135, - 44, - 222, - 255, - 2, - 61, - 106, - 178, - 38, - 58, - 19, - 27, - 71, - 128, - 219, - 136, - 120, - 190, - 60, - 59, - 127, - 143, - 1, - 156, - 6, - 252, - 176, - 251, - 96, - 128, - 82, - 127, - 41, - 145, - 16, - 230, - 131, - 95, - 215, - 55, - 49, - 251, - 60, - 230, - 222, - 135, - 21, - 25, - 136, - 218, - 64, - 60, - 38, - 84, - 103, - 169, - 107, - 156, - 218, - 13, - 125, - 170, - 114, - 228, - 96, - 160, - 82, - 96, - 1, - 96, - 192, - 82, - 128, - 96, - 224, - 82, - 128, - 97, - 1, - 0, - 82, - 128, - 97, - 1, - 32, - 82, - 128, - 97, - 1, - 64, - 82, - 96, - 1, - 97, - 1, - 96, - 82, - 96, - 2, - 97, - 1, - 128, - 82, - 127, - 25, - 142, - 147, - 147, - 146, - 13, - 72, - 58, - 114, - 96, - 191, - 183, - 49, - 251, - 93, - 37, - 241, - 170, - 73, - 51, - 53, - 169, - 231, - 18, - 151, - 228, - 133, - 183, - 174, - 243, - 18, - 194, - 97, - 1, - 160, - 82, - 127, - 24, - 0, - 222, - 239, - 18, - 31, - 30, - 118, - 66, - 106, - 0, - 102, - 94, - 92, - 68, - 121, - 103, - 67, - 34, - 212, - 247, - 94, - 218, - 221, - 70, - 222, - 189, - 92, - 217, - 146, - 246, - 237, - 97, - 1, - 192, - 82, - 127, - 9, - 6, - 137, - 208, - 88, - 95, - 240, - 117, - 236, - 158, - 153, - 173, - 105, - 12, - 51, - 149, - 188, - 75, - 49, - 51, - 112, - 179, - 142, - 243, - 85, - 172, - 218, - 220, - 209, - 34, - 151, - 91, - 97, - 1, - 224, - 82, - 127, - 18, - 200, - 94, - 165, - 219, - 140, - 109, - 235, - 74, - 171, - 113, - 128, - 141, - 203, - 64, - 143, - 227, - 209, - 231, - 105, - 12, - 67, - 211, - 123, - 76, - 230, - 204, - 1, - 102, - 250, - 125, - 170, - 97, - 2, - 0, - 82, - 127, - 38, - 24, - 106, - 45, - 101, - 238, - 77, - 47, - 156, - 154, - 91, - 145, - 248, - 101, - 151, - 211, - 95, - 25, - 44, - 209, - 32, - 202, - 247, - 233, - 53, - 216, - 68, - 61, - 25, - 56, - 226, - 61, - 97, - 2, - 32, - 82, - 127, - 48, - 68, - 31, - 209, - 181, - 211, - 55, - 4, - 130, - 196, - 33, - 82, - 168, - 137, - 144, - 39, - 113, - 105, - 137, - 166, - 153, - 108, - 37, - 53, - 188, - 159, - 127, - 238, - 138, - 174, - 247, - 158, - 97, - 2, - 64, - 82, - 127, - 22, - 243, - 99, - 241, - 3, - 200, - 13, - 123, - 188, - 138, - 211, - 198, - 134, - 126, - 8, - 34, - 187, - 198, - 0, - 11, - 233, - 26, - 70, - 137, - 117, - 92, - 125, - 244, - 2, - 33, - 193, - 69, - 97, - 2, - 96, - 82, - 127, - 43, - 28, - 187, - 62, - 82, - 30, - 223, - 90, - 98, - 45, - 130, - 118, - 42, - 68, - 165, - 230, - 63, - 30, - 80, - 179, - 50, - 215, - 17, - 84, - 164, - 167, - 149, - 141, - 96, - 17, - 222, - 255, - 97, - 2, - 128, - 82, - 127, - 20, - 4, - 162, - 209, - 124, - 208, - 44, - 143, - 159, - 215, - 157, - 116, - 172, - 115, - 198, - 125, - 24, - 129, - 230, - 44, - 106, - 243, - 84, - 250, - 116, - 210, - 53, - 197, - 227, - 125, - 172, - 254, - 97, - 2, - 160, - 82, - 127, - 44, - 30, - 48, - 120, - 31, - 115, - 94, - 121, - 119, - 130, - 13, - 76, - 169, - 20, - 80, - 16, - 226, - 141, - 204, - 128, - 142, - 224, - 241, - 233, - 118, - 71, - 114, - 137, - 5, - 123, - 122, - 236, - 97, - 2, - 192, - 82, - 127, - 45, - 211, - 253, - 89, - 9, - 138, - 91, - 75, - 74, - 97, - 101, - 104, - 187, - 107, - 161, - 161, - 228, - 196, - 14, - 75, - 13, - 249, - 174, - 148, - 227, - 121, - 68, - 213, - 90, - 182, - 81, - 207, - 97, - 2, - 224, - 82, - 127, - 37, - 104, - 12, - 53, - 37, - 186, - 4, - 67, - 90, - 144, - 52, - 214, - 230, - 156, - 150, - 222, - 81, - 51, - 237, - 254, - 55, - 194, - 38, - 211, - 227, - 27, - 96, - 239, - 246, - 179, - 78, - 240, - 97, - 3, - 0, - 82, - 127, - 26, - 34, - 78, - 106, - 235, - 155, - 183, - 222, - 18, - 199, - 97, - 253, - 31, - 73, - 167, - 51, - 255, - 65, - 12, - 63, - 119, - 42, - 173, - 106, - 46, - 195, - 196, - 222, - 202, - 212, - 51, - 7, - 97, - 3, - 32, - 82, - 127, - 48, - 10, - 102, - 179, - 118, - 175, - 17, - 135, - 105, - 78, - 37, - 219, - 206, - 163, - 170, - 198, - 49, - 20, - 113, - 106, - 248, - 34, - 253, - 70, - 97, - 81, - 154, - 219, - 249, - 198, - 73, - 233, - 97, - 3, - 64, - 82, - 127, - 39, - 167, - 166, - 96, - 135, - 168, - 193, - 123, - 0, - 255, - 183, - 254, - 155, - 118, - 186, - 33, - 153, - 202, - 48, - 139, - 203, - 10, - 209, - 0, - 250, - 24, - 24, - 134, - 214, - 201, - 185, - 54, - 97, - 3, - 96, - 82, - 127, - 35, - 188, - 149, - 26, - 60, - 67, - 7, - 56, - 75, - 222, - 197, - 214, - 27, - 225, - 34, - 161, - 156, - 147, - 61, - 179, - 38, - 109, - 99, - 39, - 164, - 114, - 229, - 32, - 58, - 159, - 120, - 90, - 97, - 3, - 128, - 82, - 127, - 7, - 67, - 234, - 64, - 241, - 64, - 132, - 219, - 38, - 115, - 33, - 114, - 131, - 170, - 5, - 63, - 152, - 104, - 150, - 238, - 124, - 24, - 31, - 82, - 17, - 132, - 66, - 233, - 156, - 69, - 41, - 116, - 97, - 3, - 160, - 82, - 127, - 2, - 3, - 227, - 73, - 58, - 37, - 148, - 236, - 229, - 125, - 34, - 204, - 117, - 221, - 8, - 26, - 198, - 130, - 113, - 236, - 124, - 117, - 129, - 83, - 207, - 210, - 21, - 43, - 251, - 92, - 25, - 227, - 97, - 3, - 192, - 82, - 127, - 15, - 133, - 147, - 108, - 68, - 112, - 132, - 9, - 227, - 233, - 251, - 94, - 42, - 126, - 166, - 96, - 75, - 6, - 153, - 127, - 10, - 199, - 253, - 72, - 142, - 63, - 20, - 126, - 5, - 168, - 141, - 190, - 97, - 3, - 224, - 82, - 127, - 4, - 151, - 251, - 183, - 196, - 67, - 109, - 207, - 54, - 237, - 230, - 163, - 10, - 214, - 46, - 1, - 110, - 5, - 154, - 17, - 166, - 84, - 142, - 182, - 152, - 14, - 222, - 178, - 241, - 5, - 33, - 51, - 97, - 4, - 0, - 82, - 127, - 13, - 203, - 172, - 243, - 104, - 192, - 31, - 97, - 55, - 92, - 36, - 46, - 53, - 237, - 171, - 18, - 162, - 33, - 71, - 233, - 212, - 107, - 246, - 133, - 251, - 117, - 69, - 77, - 96, - 245, - 237, - 188, - 97, - 4, - 32, - 82, - 127, - 23, - 114, - 12, - 149, - 19, - 154, - 163, - 245, - 222, - 197, - 182, - 189, - 86, - 8, - 47, - 141, - 237, - 237, - 46, - 74, - 20, - 37, - 208, - 169, - 30, - 39, - 67, - 221, - 41, - 79, - 220, - 156, - 97, - 4, - 64, - 82, - 127, - 40, - 74, - 192, - 83, - 217, - 106, - 51, - 252, - 166, - 158, - 202, - 0, - 225, - 110, - 234, - 117, - 173, - 27, - 240, - 8, - 210, - 167, - 66, - 252, - 132, - 106, - 199, - 61, - 23, - 212, - 109, - 115, - 97, - 4, - 96, - 82, - 127, - 20, - 244, - 86, - 102, - 162, - 107, - 141, - 71, - 33, - 134, - 219, - 247, - 142, - 96, - 106, - 130, - 137, - 30, - 15, - 18, - 42, - 84, - 38, - 68, - 24, - 207, - 226, - 97, - 80, - 3, - 223, - 185, - 97, - 4, - 128, - 82, - 127, - 28, - 81, - 124, - 51, - 90, - 214, - 52, - 66, - 46, - 242, - 235, - 95, - 97, - 89, - 38, - 232, - 117, - 175, - 169, - 233, - 197, - 137, - 171, - 245, - 40, - 211, - 21, - 168, - 165, - 134, - 178, - 45, - 97, - 4, - 160, - 82, - 127, - 18, - 32, - 177, - 177, - 60, - 145, - 232, - 17, - 81, - 6, - 20, - 75, - 196, - 23, - 212, - 211, - 230, - 169, - 222, - 63, - 183, - 4, - 6, - 230, - 139, - 74, - 95, - 216, - 169, - 47, - 67, - 39, - 97, - 4, - 192, - 82, - 127, - 12, - 186, - 234, - 214, - 102, - 225, - 114, - 177, - 128, - 27, - 122, - 209, - 124, - 52, - 80, - 234, - 44, - 231, - 213, - 60, - 30, - 57, - 44, - 237, - 240, - 80, - 35, - 229, - 158, - 83, - 201, - 90, - 97, - 4, - 224, - 82, - 127, - 12, - 226, - 0, - 171, - 81, - 94, - 252, - 57, - 12, - 69, - 158, - 11, - 73, - 44, - 21, - 165, - 0, - 36, - 197, - 127, - 167, - 7, - 104, - 193, - 131, - 137, - 146, - 78, - 30, - 114, - 152, - 43, - 97, - 5, - 0, - 82, - 127, - 29, - 72, - 72, - 232, - 219, - 116, - 37, - 31, - 208, - 30, - 1, - 143, - 237, - 183, - 28, - 168, - 224, - 76, - 65, - 116, - 100, - 116, - 173, - 75, - 74, - 57, - 218, - 19, - 47, - 134, - 243, - 11, - 97, - 5, - 32, - 82, - 127, - 20, - 138, - 34, - 82, - 183, - 182, - 160, - 126, - 33, - 170, - 27, - 197, - 177, - 204, - 72, - 38, - 172, - 127, - 74, - 122, - 62, - 41, - 251, - 115, - 153, - 221, - 112, - 41, - 212, - 189, - 175, - 39, - 97, - 5, - 64, - 82, - 97, - 5, - 96, - 129, - 243, - 254, - ]; - ///The bytecode of the contract. - pub static HALO2VERIFYINGKEY_BYTECODE: ::ethers::core::types::Bytes = ::ethers::core::types::Bytes::from_static( - __BYTECODE, - ); - #[rustfmt::skip] - const __DEPLOYED_BYTECODE: &[u8] = &[ - 96, - 128, - 96, - 64, - 82, - 96, - 0, - 128, - 253, - 254, - 162, - 100, - 105, - 112, - 102, - 115, - 88, - 34, - 18, - 32, - 124, - 128, - 97, - 125, - 7, - 26, - 78, - 148, - 245, - 74, - 104, - 9, - 127, - 211, - 94, - 36, - 68, - 64, - 45, - 173, - 191, - 1, - 119, - 46, - 99, - 82, - 233, - 222, - 246, - 190, - 55, - 218, - 100, - 115, - 111, - 108, - 99, - 67, - 0, - 8, - 18, - 0, - 51, - ]; - ///The deployed bytecode of the contract. - pub static HALO2VERIFYINGKEY_DEPLOYED_BYTECODE: ::ethers::core::types::Bytes = ::ethers::core::types::Bytes::from_static( - __DEPLOYED_BYTECODE, - ); - pub struct Halo2VerifyingKey(::ethers::contract::Contract); - impl ::core::clone::Clone for Halo2VerifyingKey { - fn clone(&self) -> Self { - Self(::core::clone::Clone::clone(&self.0)) - } - } - impl ::core::ops::Deref for Halo2VerifyingKey { - type Target = ::ethers::contract::Contract; - fn deref(&self) -> &Self::Target { - &self.0 - } - } - impl ::core::ops::DerefMut for Halo2VerifyingKey { - fn deref_mut(&mut self) -> &mut Self::Target { - &mut self.0 - } - } - impl ::core::fmt::Debug for Halo2VerifyingKey { - fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { - f.debug_tuple(stringify!(Halo2VerifyingKey)).field(&self.address()).finish() - } - } - impl Halo2VerifyingKey { - /// Creates a new contract instance with the specified `ethers` client at - /// `address`. The contract derefs to a `ethers::Contract` object. - pub fn new>( - address: T, - client: ::std::sync::Arc, - ) -> Self { - Self( - ::ethers::contract::Contract::new( - address.into(), - HALO2VERIFYINGKEY_ABI.clone(), - client, - ), - ) - } - /// Constructs the general purpose `Deployer` instance based on the provided constructor arguments and sends it. - /// Returns a new instance of a deployer that returns an instance of this contract after sending the transaction - /// - /// Notes: - /// - If there are no constructor arguments, you should pass `()` as the argument. - /// - The default poll duration is 7 seconds. - /// - The default number of confirmations is 1 block. - /// - /// - /// # Example - /// - /// Generate contract bindings with `abigen!` and deploy a new contract instance. - /// - /// *Note*: this requires a `bytecode` and `abi` object in the `greeter.json` artifact. - /// - /// ```ignore - /// # async fn deploy(client: ::std::sync::Arc) { - /// abigen!(Greeter, "../greeter.json"); - /// - /// let greeter_contract = Greeter::deploy(client, "Hello world!".to_string()).unwrap().send().await.unwrap(); - /// let msg = greeter_contract.greet().call().await.unwrap(); - /// # } - /// ``` - pub fn deploy( - client: ::std::sync::Arc, - constructor_args: T, - ) -> ::core::result::Result< - ::ethers::contract::builders::ContractDeployer, - ::ethers::contract::ContractError, - > { - let factory = ::ethers::contract::ContractFactory::new( - HALO2VERIFYINGKEY_ABI.clone(), - HALO2VERIFYINGKEY_BYTECODE.clone().into(), - client, - ); - let deployer = factory.deploy(constructor_args)?; - let deployer = ::ethers::contract::ContractDeployer::new(deployer); - Ok(deployer) - } - } - impl From<::ethers::contract::Contract> - for Halo2VerifyingKey { - fn from(contract: ::ethers::contract::Contract) -> Self { - Self::new(contract.address(), contract.client()) - } - } -} diff --git a/backend/src/contracts/mod.rs b/backend/src/contracts/mod.rs deleted file mode 100644 index 04d83f7e..00000000 --- a/backend/src/contracts/mod.rs +++ /dev/null @@ -1,2 +0,0 @@ -pub mod generated; -pub mod signer; diff --git a/backend/src/contracts/signer.rs b/backend/src/contracts/signer.rs deleted file mode 100644 index dfa065e6..00000000 --- a/backend/src/contracts/signer.rs +++ /dev/null @@ -1,133 +0,0 @@ -use ethers::{ - prelude::SignerMiddleware, - providers::{Http, Middleware, Provider}, - signers::{LocalWallet, Signer}, - types::{Address, Bytes, U256}, -}; -use serde_json::Value; -use std::{error::Error, fs::File, io::BufReader, path::Path, str::FromStr, sync::Arc}; -use tokio::sync::Mutex; - -use super::generated::summa_contract::AddressOwnershipProof; -use crate::contracts::generated::summa_contract::Summa; - -pub enum AddressInput { - Address(Address), - Path(String), -} - -#[derive(Debug)] -pub struct SummaSigner { - nonce_lock: Mutex<()>, // To prevent running `submit` methods concurrently - summa_contract: Summa>, LocalWallet>>, -} - -impl SummaSigner { - /// Creates a new SummaSigner instance - /// # Arguments - /// * `signer_key` - The private key of wallet that will interact with the chain on behalf of the exchange - /// * `url` - The endpoint for connecting to the node - /// * `address` - The address of the Summa contract - pub async fn new( - signer_key: &str, - url: &str, - address_input: AddressInput, - ) -> Result> { - let wallet: LocalWallet = LocalWallet::from_str(signer_key).unwrap(); - - let provider = Arc::new(Provider::try_from(url)?); - let chain_id = provider.get_chainid().await?.as_u64(); - let client = Arc::new(SignerMiddleware::new( - provider, - wallet.with_chain_id(chain_id), - )); - - let address = match address_input { - AddressInput::Address(address) => address, - AddressInput::Path(path) => { - let address = Self::get_deployment_address(path, chain_id).unwrap(); - address - } - }; - - Ok(Self { - nonce_lock: Mutex::new(()), - summa_contract: Summa::new(address, client), - }) - } - - pub fn get_summa_address(&self) -> Address { - self.summa_contract.address() - } - - fn get_deployment_address>( - path: P, - chain_id: u64, - ) -> Result> { - // Open file in RO mode with buffer - let file = File::open(path)?; - let reader = BufReader::new(file); - - // Read the JSON contents of the file - let payload: Value = serde_json::from_reader(reader)?; - - // Retrieve the contract address from the deployments.json file - let deployment_address: &Value = &payload.as_object().unwrap() - [chain_id.to_string().as_str()] - .as_object() - .unwrap()["address"]; - - let summa_address: &str = deployment_address.as_str().unwrap(); - - let address: Address = summa_address.parse().unwrap(); - - Ok(address) - } - - pub async fn submit_proof_of_address_ownership( - &self, - address_ownership_proofs: Vec, - ) -> Result<(), Box> { - let lock_guard = self.nonce_lock.lock().await; - - let submit_proof_of_address_ownership = &self - .summa_contract - .submit_proof_of_address_ownership(address_ownership_proofs); - - // To prevent nonce collision, we lock the nonce before sending the transaction - let tx = submit_proof_of_address_ownership.send().await?; - - // Wait for the pending transaction to be mined - tx.await?; - - drop(lock_guard); - Ok(()) - } - - pub async fn submit_commitment( - &self, - snark_proof: Bytes, - grand_sum_proof: Bytes, - total_balances: Vec, - timestamp: U256, - ) -> Result<(), Box> { - let lock_guard = self.nonce_lock.lock().await; - - let submit_liability_commitment = &self.summa_contract.submit_commitment( - snark_proof, - grand_sum_proof, - total_balances, - timestamp, - ); - - // To prevent nonce collision, we lock the nonce before sending the transaction - let tx = submit_liability_commitment.send().await?; - - // Wait for the pending transaction to be mined - tx.await?; - - drop(lock_guard); - - Ok(()) - } -} diff --git a/contracts/.gitignore b/contracts/.gitignore deleted file mode 100644 index 9b921b13..00000000 --- a/contracts/.gitignore +++ /dev/null @@ -1,12 +0,0 @@ -node_modules -.env -coverage -coverage.json -typechain -typechain-types -.DS_Store - -# Hardhat files -cache -artifacts - diff --git a/contracts/README.md b/contracts/README.md deleted file mode 100644 index 584e3ff8..00000000 --- a/contracts/README.md +++ /dev/null @@ -1,51 +0,0 @@ -# Summa Smart Contract - -The [Summa smart contract](src/Summa.sol) serves as a registrar for Custodians to affirm their liabilities by submitting a polynomial commitment of all liabilities owed to their users. Users can verify their inclusion in the liabilities commitment, allowing public comparison of the committed total sums with the assets owned by the Custodian onchain. - - -## Features - -- **Address Ownership Proofs**: Custodians should submit proof of address ownership for all addresses holding assets included in the commitment using the `submitProofOfAddressOwnership` function. These proofs are accepted optimistically and subject to off-chain verification. - -- **Liabilities Commitments**: Custodians can commit to their liabilities in the form of polynomial commitments and the corresponding total sums representing snapshots of the liabilities at a given timestamp through the `submitCommitment` function. - -- **Inclusion Verification**: Users can verify the polynomial commitment of their balances into the liabilities using the `verifyInclusionProof` function. This function calls the underlying smart contract [InclusionVerifier](src/InclusionVerifier.sol) module. refer to the module's [readme](./../prover/README.md) for details. - - -## Installation - -Ensure you have Node.js installed on your machine before proceeding. The smart contract is written in Solidity and uses the Hardhat environment for testing and deployment. - -To set up the project environment, install the necessary dependencies: - -```shell -npm install -``` - -## Testing - -```shell -npx hardhat node -REPORT_GAS=true npx hardhat test -``` - -### Test Coverage - -```shell -npx hardhat coverage -``` - -## Deploying - -```shell -npx hardhat run scripts/deploy.ts -``` - -The Summa contract deployment script is designed to streamline setup by automatically deploying three verifier contracts along with one verifying key contract. It then configures the deployment with specific parameters, which include: - -- The number of currencies; -- the number of bytes used to represent the balance of a cryptocurrency in the polynomials; - -The deployment script updates the latest deployment address for the chain in the [deployments](./../backend/src/contracts/deployments.json) file in the backend. This allows the backend module to connect to the deployed contract seamlessly. - -Additionally, the script transfers the contract ABIs from `./artifacts/src/` to the [backend](./../backend/src/contracts/abi/) module. Subsequently, the backend build script generates the updated contract interfaces (for more details, see the backend [readme](./../backend/README.md)). diff --git a/contracts/hardhat.config.ts b/contracts/hardhat.config.ts deleted file mode 100644 index cea08afb..00000000 --- a/contracts/hardhat.config.ts +++ /dev/null @@ -1,47 +0,0 @@ -import "@nomicfoundation/hardhat-toolbox"; -import "hardhat-gas-reporter"; -import "solidity-coverage"; -import * as dotenv from "dotenv"; - -dotenv.config(); -module.exports = { - defaultNetwork: "hardhat", - networks: { - localhost: { - chainId: 31337, - url: "http://127.0.0.1:8545", - }, - hardhat: {}, - // goerli: { - // chainId: 5, - // url: process.env.GOERLI_URL, - // accounts: [process.env.GOERLI_PRIVATE_KEY], - // }, - }, - gasReporter: { - currency: "USD", - gasPrice: 30, - }, - solidity: { - compilers: [ - { - version: "0.8.18", - settings: { - evmVersion: "istanbul", - optimizer: { - enabled: true, - runs: 200, - details: { yul: true }, // Necessary to run tests with coverage with inline assembly - }, - }, - }, - ], - }, - paths: { - sources: "src", - tests: "test", - cache: "cache", - artifacts: "artifacts", - out: "build/out", - }, -}; diff --git a/contracts/package-lock.json b/contracts/package-lock.json deleted file mode 100644 index abdf5e83..00000000 --- a/contracts/package-lock.json +++ /dev/null @@ -1,8608 +0,0 @@ -{ - "name": "hardhat-project", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "hardhat-project", - "dependencies": { - "@openzeppelin/contracts": "^4.9.2", - "dotenv": "^16.3.1", - "ethers": "^5.6.9" - }, - "devDependencies": { - "@nomicfoundation/hardhat-network-helpers": "^1.0.8", - "@nomicfoundation/hardhat-toolbox": "^2.0.2", - "hardhat": "^2.16.0", - "hardhat-gas-reporter": "^1.0.9", - "prettier": "^2.8.8", - "prettier-plugin-solidity": "^1.1.3", - "solidity-coverage": "^0.8.7" - } - }, - "node_modules/@chainsafe/as-sha256": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@chainsafe/as-sha256/-/as-sha256-0.3.1.tgz", - "integrity": "sha512-hldFFYuf49ed7DAakWVXSJODuq3pzJEguD8tQ7h+sGkM18vja+OFoJI9krnGmgzyuZC2ETX0NOIcCTy31v2Mtg==", - "dev": true - }, - "node_modules/@chainsafe/persistent-merkle-tree": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/@chainsafe/persistent-merkle-tree/-/persistent-merkle-tree-0.4.2.tgz", - "integrity": "sha512-lLO3ihKPngXLTus/L7WHKaw9PnNJWizlOF1H9NNzHP6Xvh82vzg9F2bzkXhYIFshMZ2gTCEz8tq6STe7r5NDfQ==", - "dev": true, - "dependencies": { - "@chainsafe/as-sha256": "^0.3.1" - } - }, - "node_modules/@chainsafe/ssz": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/@chainsafe/ssz/-/ssz-0.9.4.tgz", - "integrity": "sha512-77Qtg2N1ayqs4Bg/wvnWfg5Bta7iy7IRh8XqXh7oNMeP2HBbBwx8m6yTpA8p0EHItWPEBkgZd5S5/LSlp3GXuQ==", - "dev": true, - "dependencies": { - "@chainsafe/as-sha256": "^0.3.1", - "@chainsafe/persistent-merkle-tree": "^0.4.2", - "case": "^1.6.3" - } - }, - "node_modules/@cspotcode/source-map-support": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", - "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", - "dev": true, - "peer": true, - "dependencies": { - "@jridgewell/trace-mapping": "0.3.9" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@ethersproject/abi": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.7.0.tgz", - "integrity": "sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/address": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/hash": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/strings": "^5.7.0" - } - }, - "node_modules/@ethersproject/abstract-provider": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.7.0.tgz", - "integrity": "sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/networks": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/transactions": "^5.7.0", - "@ethersproject/web": "^5.7.0" - } - }, - "node_modules/@ethersproject/abstract-signer": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.7.0.tgz", - "integrity": "sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/abstract-provider": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0" - } - }, - "node_modules/@ethersproject/address": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.7.0.tgz", - "integrity": "sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/rlp": "^5.7.0" - } - }, - "node_modules/@ethersproject/base64": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.7.0.tgz", - "integrity": "sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/bytes": "^5.7.0" - } - }, - "node_modules/@ethersproject/basex": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/basex/-/basex-5.7.0.tgz", - "integrity": "sha512-ywlh43GwZLv2Voc2gQVTKBoVQ1mti3d8HK5aMxsfu/nRDnMmNqaSJ3r3n85HBByT8OpoY96SXM1FogC533T4zw==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/properties": "^5.7.0" - } - }, - "node_modules/@ethersproject/bignumber": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.7.0.tgz", - "integrity": "sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "bn.js": "^5.2.1" - } - }, - "node_modules/@ethersproject/bytes": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.7.0.tgz", - "integrity": "sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/logger": "^5.7.0" - } - }, - "node_modules/@ethersproject/constants": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.7.0.tgz", - "integrity": "sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/bignumber": "^5.7.0" - } - }, - "node_modules/@ethersproject/contracts": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/contracts/-/contracts-5.7.0.tgz", - "integrity": "sha512-5GJbzEU3X+d33CdfPhcyS+z8MzsTrBGk/sc+G+59+tPa9yFkl6HQ9D6L0QMgNTA9q8dT0XKxxkyp883XsQvbbg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/abi": "^5.7.0", - "@ethersproject/abstract-provider": "^5.7.0", - "@ethersproject/abstract-signer": "^5.7.0", - "@ethersproject/address": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/transactions": "^5.7.0" - } - }, - "node_modules/@ethersproject/hash": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.7.0.tgz", - "integrity": "sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/abstract-signer": "^5.7.0", - "@ethersproject/address": "^5.7.0", - "@ethersproject/base64": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/strings": "^5.7.0" - } - }, - "node_modules/@ethersproject/hdnode": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.7.0.tgz", - "integrity": "sha512-OmyYo9EENBPPf4ERhR7oj6uAtUAhYGqOnIS+jE5pTXvdKBS99ikzq1E7Iv0ZQZ5V36Lqx1qZLeak0Ra16qpeOg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/abstract-signer": "^5.7.0", - "@ethersproject/basex": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/pbkdf2": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/sha2": "^5.7.0", - "@ethersproject/signing-key": "^5.7.0", - "@ethersproject/strings": "^5.7.0", - "@ethersproject/transactions": "^5.7.0", - "@ethersproject/wordlists": "^5.7.0" - } - }, - "node_modules/@ethersproject/json-wallets": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/json-wallets/-/json-wallets-5.7.0.tgz", - "integrity": "sha512-8oee5Xgu6+RKgJTkvEMl2wDgSPSAQ9MB/3JYjFV9jlKvcYHUXZC+cQp0njgmxdHkYWn8s6/IqIZYm0YWCjO/0g==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/abstract-signer": "^5.7.0", - "@ethersproject/address": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/hdnode": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/pbkdf2": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/random": "^5.7.0", - "@ethersproject/strings": "^5.7.0", - "@ethersproject/transactions": "^5.7.0", - "aes-js": "3.0.0", - "scrypt-js": "3.0.1" - } - }, - "node_modules/@ethersproject/keccak256": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.7.0.tgz", - "integrity": "sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "js-sha3": "0.8.0" - } - }, - "node_modules/@ethersproject/logger": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.7.0.tgz", - "integrity": "sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ] - }, - "node_modules/@ethersproject/networks": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.7.1.tgz", - "integrity": "sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/logger": "^5.7.0" - } - }, - "node_modules/@ethersproject/pbkdf2": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/pbkdf2/-/pbkdf2-5.7.0.tgz", - "integrity": "sha512-oR/dBRZR6GTyaofd86DehG72hY6NpAjhabkhxgr3X2FpJtJuodEl2auADWBZfhDHgVCbu3/H/Ocq2uC6dpNjjw==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/sha2": "^5.7.0" - } - }, - "node_modules/@ethersproject/properties": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.7.0.tgz", - "integrity": "sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/logger": "^5.7.0" - } - }, - "node_modules/@ethersproject/providers": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.7.2.tgz", - "integrity": "sha512-g34EWZ1WWAVgr4aptGlVBF8mhl3VWjv+8hoAnzStu8Ah22VHBsuGzP17eb6xDVRzw895G4W7vvx60lFFur/1Rg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/abstract-provider": "^5.7.0", - "@ethersproject/abstract-signer": "^5.7.0", - "@ethersproject/address": "^5.7.0", - "@ethersproject/base64": "^5.7.0", - "@ethersproject/basex": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/hash": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/networks": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/random": "^5.7.0", - "@ethersproject/rlp": "^5.7.0", - "@ethersproject/sha2": "^5.7.0", - "@ethersproject/strings": "^5.7.0", - "@ethersproject/transactions": "^5.7.0", - "@ethersproject/web": "^5.7.0", - "bech32": "1.1.4", - "ws": "7.4.6" - } - }, - "node_modules/@ethersproject/providers/node_modules/ws": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", - "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/@ethersproject/random": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/random/-/random-5.7.0.tgz", - "integrity": "sha512-19WjScqRA8IIeWclFme75VMXSBvi4e6InrUNuaR4s5pTF2qNhcGdCUwdxUVGtDDqC00sDLCO93jPQoDUH4HVmQ==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0" - } - }, - "node_modules/@ethersproject/rlp": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.7.0.tgz", - "integrity": "sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0" - } - }, - "node_modules/@ethersproject/sha2": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.7.0.tgz", - "integrity": "sha512-gKlH42riwb3KYp0reLsFTokByAKoJdgFCwI+CCiX/k+Jm2mbNs6oOaCjYQSlI1+XBVejwH2KrmCbMAT/GnRDQw==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "hash.js": "1.1.7" - } - }, - "node_modules/@ethersproject/signing-key": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.7.0.tgz", - "integrity": "sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "bn.js": "^5.2.1", - "elliptic": "6.5.4", - "hash.js": "1.1.7" - } - }, - "node_modules/@ethersproject/solidity": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.7.0.tgz", - "integrity": "sha512-HmabMd2Dt/raavyaGukF4XxizWKhKQ24DoLtdNbBmNKUOPqwjsKQSdV9GQtj9CBEea9DlzETlVER1gYeXXBGaA==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/sha2": "^5.7.0", - "@ethersproject/strings": "^5.7.0" - } - }, - "node_modules/@ethersproject/strings": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.7.0.tgz", - "integrity": "sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/logger": "^5.7.0" - } - }, - "node_modules/@ethersproject/transactions": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.7.0.tgz", - "integrity": "sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/address": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/rlp": "^5.7.0", - "@ethersproject/signing-key": "^5.7.0" - } - }, - "node_modules/@ethersproject/units": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/units/-/units-5.7.0.tgz", - "integrity": "sha512-pD3xLMy3SJu9kG5xDGI7+xhTEmGXlEqXU4OfNapmfnxLVY4EMSSRp7j1k7eezutBPH7RBN/7QPnwR7hzNlEFeg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/logger": "^5.7.0" - } - }, - "node_modules/@ethersproject/wallet": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/wallet/-/wallet-5.7.0.tgz", - "integrity": "sha512-MhmXlJXEJFBFVKrDLB4ZdDzxcBxQ3rLyCkhNqVu3CDYvR97E+8r01UgrI+TI99Le+aYm/in/0vp86guJuM7FCA==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/abstract-provider": "^5.7.0", - "@ethersproject/abstract-signer": "^5.7.0", - "@ethersproject/address": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/hash": "^5.7.0", - "@ethersproject/hdnode": "^5.7.0", - "@ethersproject/json-wallets": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/random": "^5.7.0", - "@ethersproject/signing-key": "^5.7.0", - "@ethersproject/transactions": "^5.7.0", - "@ethersproject/wordlists": "^5.7.0" - } - }, - "node_modules/@ethersproject/web": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.7.1.tgz", - "integrity": "sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/base64": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/strings": "^5.7.0" - } - }, - "node_modules/@ethersproject/wordlists": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.7.0.tgz", - "integrity": "sha512-S2TFNJNfHWVHNE6cNDjbVlZ6MgE17MIxMbMg2zv3wn+3XSJGosL1m9ZVv3GXCf/2ymSsQ+hRI5IzoMJTG6aoVA==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/hash": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/strings": "^5.7.0" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", - "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", - "dev": true, - "peer": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", - "dev": true, - "peer": true - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", - "dev": true, - "peer": true, - "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "node_modules/@metamask/eth-sig-util": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@metamask/eth-sig-util/-/eth-sig-util-4.0.1.tgz", - "integrity": "sha512-tghyZKLHZjcdlDqCA3gNZmLeR0XvOE9U1qoQO9ohyAZT6Pya+H9vkBPcsyXytmYLNgVoin7CKCmweo/R43V+tQ==", - "dev": true, - "dependencies": { - "ethereumjs-abi": "^0.6.8", - "ethereumjs-util": "^6.2.1", - "ethjs-util": "^0.1.6", - "tweetnacl": "^1.0.3", - "tweetnacl-util": "^0.15.1" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/@noble/hashes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.2.0.tgz", - "integrity": "sha512-FZfhjEDbT5GRswV3C6uvLPHMiVD6lQBmpoX5+eSiPaMTXte/IKqI5dykDxzZB/WBeK/CDuQRBWarPdi3FNY2zQ==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ] - }, - "node_modules/@noble/secp256k1": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.7.1.tgz", - "integrity": "sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ] - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nomicfoundation/ethereumjs-block": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-block/-/ethereumjs-block-5.0.1.tgz", - "integrity": "sha512-u1Yioemi6Ckj3xspygu/SfFvm8vZEO8/Yx5a1QLzi6nVU0jz3Pg2OmHKJ5w+D9Ogk1vhwRiqEBAqcb0GVhCyHw==", - "dev": true, - "dependencies": { - "@nomicfoundation/ethereumjs-common": "4.0.1", - "@nomicfoundation/ethereumjs-rlp": "5.0.1", - "@nomicfoundation/ethereumjs-trie": "6.0.1", - "@nomicfoundation/ethereumjs-tx": "5.0.1", - "@nomicfoundation/ethereumjs-util": "9.0.1", - "ethereum-cryptography": "0.1.3", - "ethers": "^5.7.1" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/@nomicfoundation/ethereumjs-block/node_modules/ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "dev": true, - "dependencies": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" - } - }, - "node_modules/@nomicfoundation/ethereumjs-blockchain": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-blockchain/-/ethereumjs-blockchain-7.0.1.tgz", - "integrity": "sha512-NhzndlGg829XXbqJEYrF1VeZhAwSPgsK/OB7TVrdzft3y918hW5KNd7gIZ85sn6peDZOdjBsAXIpXZ38oBYE5A==", - "dev": true, - "dependencies": { - "@nomicfoundation/ethereumjs-block": "5.0.1", - "@nomicfoundation/ethereumjs-common": "4.0.1", - "@nomicfoundation/ethereumjs-ethash": "3.0.1", - "@nomicfoundation/ethereumjs-rlp": "5.0.1", - "@nomicfoundation/ethereumjs-trie": "6.0.1", - "@nomicfoundation/ethereumjs-tx": "5.0.1", - "@nomicfoundation/ethereumjs-util": "9.0.1", - "abstract-level": "^1.0.3", - "debug": "^4.3.3", - "ethereum-cryptography": "0.1.3", - "level": "^8.0.0", - "lru-cache": "^5.1.1", - "memory-level": "^1.0.0" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/@nomicfoundation/ethereumjs-blockchain/node_modules/ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "dev": true, - "dependencies": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" - } - }, - "node_modules/@nomicfoundation/ethereumjs-common": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-common/-/ethereumjs-common-4.0.1.tgz", - "integrity": "sha512-OBErlkfp54GpeiE06brBW/TTbtbuBJV5YI5Nz/aB2evTDo+KawyEzPjBlSr84z/8MFfj8wS2wxzQX1o32cev5g==", - "dev": true, - "dependencies": { - "@nomicfoundation/ethereumjs-util": "9.0.1", - "crc-32": "^1.2.0" - } - }, - "node_modules/@nomicfoundation/ethereumjs-ethash": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-ethash/-/ethereumjs-ethash-3.0.1.tgz", - "integrity": "sha512-KDjGIB5igzWOp8Ik5I6QiRH5DH+XgILlplsHR7TEuWANZA759G6krQ6o8bvj+tRUz08YygMQu/sGd9mJ1DYT8w==", - "dev": true, - "dependencies": { - "@nomicfoundation/ethereumjs-block": "5.0.1", - "@nomicfoundation/ethereumjs-rlp": "5.0.1", - "@nomicfoundation/ethereumjs-util": "9.0.1", - "abstract-level": "^1.0.3", - "bigint-crypto-utils": "^3.0.23", - "ethereum-cryptography": "0.1.3" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/@nomicfoundation/ethereumjs-ethash/node_modules/ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "dev": true, - "dependencies": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" - } - }, - "node_modules/@nomicfoundation/ethereumjs-evm": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-evm/-/ethereumjs-evm-2.0.1.tgz", - "integrity": "sha512-oL8vJcnk0Bx/onl+TgQOQ1t/534GKFaEG17fZmwtPFeH8S5soiBYPCLUrvANOl4sCp9elYxIMzIiTtMtNNN8EQ==", - "dev": true, - "dependencies": { - "@ethersproject/providers": "^5.7.1", - "@nomicfoundation/ethereumjs-common": "4.0.1", - "@nomicfoundation/ethereumjs-tx": "5.0.1", - "@nomicfoundation/ethereumjs-util": "9.0.1", - "debug": "^4.3.3", - "ethereum-cryptography": "0.1.3", - "mcl-wasm": "^0.7.1", - "rustbn.js": "~0.2.0" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/@nomicfoundation/ethereumjs-evm/node_modules/ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "dev": true, - "dependencies": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" - } - }, - "node_modules/@nomicfoundation/ethereumjs-rlp": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-rlp/-/ethereumjs-rlp-5.0.1.tgz", - "integrity": "sha512-xtxrMGa8kP4zF5ApBQBtjlSbN5E2HI8m8FYgVSYAnO6ssUoY5pVPGy2H8+xdf/bmMa22Ce8nWMH3aEW8CcqMeQ==", - "dev": true, - "bin": { - "rlp": "bin/rlp" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/@nomicfoundation/ethereumjs-statemanager": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-statemanager/-/ethereumjs-statemanager-2.0.1.tgz", - "integrity": "sha512-B5ApMOnlruVOR7gisBaYwFX+L/AP7i/2oAahatssjPIBVDF6wTX1K7Qpa39E/nzsH8iYuL3krkYeUFIdO3EMUQ==", - "dev": true, - "dependencies": { - "@nomicfoundation/ethereumjs-common": "4.0.1", - "@nomicfoundation/ethereumjs-rlp": "5.0.1", - "debug": "^4.3.3", - "ethereum-cryptography": "0.1.3", - "ethers": "^5.7.1", - "js-sdsl": "^4.1.4" - } - }, - "node_modules/@nomicfoundation/ethereumjs-statemanager/node_modules/ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "dev": true, - "dependencies": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" - } - }, - "node_modules/@nomicfoundation/ethereumjs-trie": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-trie/-/ethereumjs-trie-6.0.1.tgz", - "integrity": "sha512-A64It/IMpDVODzCgxDgAAla8jNjNtsoQZIzZUfIV5AY6Coi4nvn7+VReBn5itlxMiL2yaTlQr9TRWp3CSI6VoA==", - "dev": true, - "dependencies": { - "@nomicfoundation/ethereumjs-rlp": "5.0.1", - "@nomicfoundation/ethereumjs-util": "9.0.1", - "@types/readable-stream": "^2.3.13", - "ethereum-cryptography": "0.1.3", - "readable-stream": "^3.6.0" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/@nomicfoundation/ethereumjs-trie/node_modules/ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "dev": true, - "dependencies": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" - } - }, - "node_modules/@nomicfoundation/ethereumjs-tx": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-tx/-/ethereumjs-tx-5.0.1.tgz", - "integrity": "sha512-0HwxUF2u2hrsIM1fsasjXvlbDOq1ZHFV2dd1yGq8CA+MEYhaxZr8OTScpVkkxqMwBcc5y83FyPl0J9MZn3kY0w==", - "dev": true, - "dependencies": { - "@chainsafe/ssz": "^0.9.2", - "@ethersproject/providers": "^5.7.2", - "@nomicfoundation/ethereumjs-common": "4.0.1", - "@nomicfoundation/ethereumjs-rlp": "5.0.1", - "@nomicfoundation/ethereumjs-util": "9.0.1", - "ethereum-cryptography": "0.1.3" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/@nomicfoundation/ethereumjs-tx/node_modules/ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "dev": true, - "dependencies": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" - } - }, - "node_modules/@nomicfoundation/ethereumjs-util": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-util/-/ethereumjs-util-9.0.1.tgz", - "integrity": "sha512-TwbhOWQ8QoSCFhV/DDfSmyfFIHjPjFBj957219+V3jTZYZ2rf9PmDtNOeZWAE3p3vlp8xb02XGpd0v6nTUPbsA==", - "dev": true, - "dependencies": { - "@chainsafe/ssz": "^0.10.0", - "@nomicfoundation/ethereumjs-rlp": "5.0.1", - "ethereum-cryptography": "0.1.3" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/@nomicfoundation/ethereumjs-util/node_modules/@chainsafe/persistent-merkle-tree": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@chainsafe/persistent-merkle-tree/-/persistent-merkle-tree-0.5.0.tgz", - "integrity": "sha512-l0V1b5clxA3iwQLXP40zYjyZYospQLZXzBVIhhr9kDg/1qHZfzzHw0jj4VPBijfYCArZDlPkRi1wZaV2POKeuw==", - "dev": true, - "dependencies": { - "@chainsafe/as-sha256": "^0.3.1" - } - }, - "node_modules/@nomicfoundation/ethereumjs-util/node_modules/@chainsafe/ssz": { - "version": "0.10.2", - "resolved": "https://registry.npmjs.org/@chainsafe/ssz/-/ssz-0.10.2.tgz", - "integrity": "sha512-/NL3Lh8K+0q7A3LsiFq09YXS9fPE+ead2rr7vM2QK8PLzrNsw3uqrif9bpRX5UxgeRjM+vYi+boCM3+GM4ovXg==", - "dev": true, - "dependencies": { - "@chainsafe/as-sha256": "^0.3.1", - "@chainsafe/persistent-merkle-tree": "^0.5.0" - } - }, - "node_modules/@nomicfoundation/ethereumjs-util/node_modules/ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "dev": true, - "dependencies": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" - } - }, - "node_modules/@nomicfoundation/ethereumjs-vm": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-vm/-/ethereumjs-vm-7.0.1.tgz", - "integrity": "sha512-rArhyn0jPsS/D+ApFsz3yVJMQ29+pVzNZ0VJgkzAZ+7FqXSRtThl1C1prhmlVr3YNUlfpZ69Ak+RUT4g7VoOuQ==", - "dev": true, - "dependencies": { - "@nomicfoundation/ethereumjs-block": "5.0.1", - "@nomicfoundation/ethereumjs-blockchain": "7.0.1", - "@nomicfoundation/ethereumjs-common": "4.0.1", - "@nomicfoundation/ethereumjs-evm": "2.0.1", - "@nomicfoundation/ethereumjs-rlp": "5.0.1", - "@nomicfoundation/ethereumjs-statemanager": "2.0.1", - "@nomicfoundation/ethereumjs-trie": "6.0.1", - "@nomicfoundation/ethereumjs-tx": "5.0.1", - "@nomicfoundation/ethereumjs-util": "9.0.1", - "debug": "^4.3.3", - "ethereum-cryptography": "0.1.3", - "mcl-wasm": "^0.7.1", - "rustbn.js": "~0.2.0" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/@nomicfoundation/ethereumjs-vm/node_modules/ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "dev": true, - "dependencies": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" - } - }, - "node_modules/@nomicfoundation/hardhat-chai-matchers": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-chai-matchers/-/hardhat-chai-matchers-1.0.6.tgz", - "integrity": "sha512-f5ZMNmabZeZegEfuxn/0kW+mm7+yV7VNDxLpMOMGXWFJ2l/Ct3QShujzDRF9cOkK9Ui/hbDeOWGZqyQALDXVCQ==", - "dev": true, - "peer": true, - "dependencies": { - "@ethersproject/abi": "^5.1.2", - "@types/chai-as-promised": "^7.1.3", - "chai-as-promised": "^7.1.1", - "deep-eql": "^4.0.1", - "ordinal": "^1.0.3" - }, - "peerDependencies": { - "@nomiclabs/hardhat-ethers": "^2.0.0", - "chai": "^4.2.0", - "ethers": "^5.0.0", - "hardhat": "^2.9.4" - } - }, - "node_modules/@nomicfoundation/hardhat-network-helpers": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-network-helpers/-/hardhat-network-helpers-1.0.8.tgz", - "integrity": "sha512-MNqQbzUJZnCMIYvlniC3U+kcavz/PhhQSsY90tbEtUyMj/IQqsLwIRZa4ctjABh3Bz0KCh9OXUZ7Yk/d9hr45Q==", - "dev": true, - "dependencies": { - "ethereumjs-util": "^7.1.4" - }, - "peerDependencies": { - "hardhat": "^2.9.5" - } - }, - "node_modules/@nomicfoundation/hardhat-network-helpers/node_modules/ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "dev": true, - "dependencies": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" - } - }, - "node_modules/@nomicfoundation/hardhat-network-helpers/node_modules/ethereumjs-util": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", - "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", - "dev": true, - "dependencies": { - "@types/bn.js": "^5.1.0", - "bn.js": "^5.1.2", - "create-hash": "^1.1.2", - "ethereum-cryptography": "^0.1.3", - "rlp": "^2.2.4" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/@nomicfoundation/hardhat-toolbox": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-toolbox/-/hardhat-toolbox-2.0.2.tgz", - "integrity": "sha512-vnN1AzxbvpSx9pfdRHbUzTRIXpMLPXnUlkW855VaDk6N1pwRaQ2gNzEmFAABk4lWf11E00PKwFd/q27HuwYrYg==", - "dev": true, - "peerDependencies": { - "@ethersproject/abi": "^5.4.7", - "@ethersproject/providers": "^5.4.7", - "@nomicfoundation/hardhat-chai-matchers": "^1.0.0", - "@nomicfoundation/hardhat-network-helpers": "^1.0.0", - "@nomiclabs/hardhat-ethers": "^2.0.0", - "@nomiclabs/hardhat-etherscan": "^3.0.0", - "@typechain/ethers-v5": "^10.1.0", - "@typechain/hardhat": "^6.1.2", - "@types/chai": "^4.2.0", - "@types/mocha": ">=9.1.0", - "@types/node": ">=12.0.0", - "chai": "^4.2.0", - "ethers": "^5.4.7", - "hardhat": "^2.11.0", - "hardhat-gas-reporter": "^1.0.8", - "solidity-coverage": "^0.8.1", - "ts-node": ">=8.0.0", - "typechain": "^8.1.0", - "typescript": ">=4.5.0" - } - }, - "node_modules/@nomicfoundation/solidity-analyzer": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer/-/solidity-analyzer-0.1.1.tgz", - "integrity": "sha512-1LMtXj1puAxyFusBgUIy5pZk3073cNXYnXUpuNKFghHbIit/xZgbk0AokpUADbNm3gyD6bFWl3LRFh3dhVdREg==", - "dev": true, - "engines": { - "node": ">= 12" - }, - "optionalDependencies": { - "@nomicfoundation/solidity-analyzer-darwin-arm64": "0.1.1", - "@nomicfoundation/solidity-analyzer-darwin-x64": "0.1.1", - "@nomicfoundation/solidity-analyzer-freebsd-x64": "0.1.1", - "@nomicfoundation/solidity-analyzer-linux-arm64-gnu": "0.1.1", - "@nomicfoundation/solidity-analyzer-linux-arm64-musl": "0.1.1", - "@nomicfoundation/solidity-analyzer-linux-x64-gnu": "0.1.1", - "@nomicfoundation/solidity-analyzer-linux-x64-musl": "0.1.1", - "@nomicfoundation/solidity-analyzer-win32-arm64-msvc": "0.1.1", - "@nomicfoundation/solidity-analyzer-win32-ia32-msvc": "0.1.1", - "@nomicfoundation/solidity-analyzer-win32-x64-msvc": "0.1.1" - } - }, - "node_modules/@nomicfoundation/solidity-analyzer-darwin-arm64": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-darwin-arm64/-/solidity-analyzer-darwin-arm64-0.1.1.tgz", - "integrity": "sha512-KcTodaQw8ivDZyF+D76FokN/HdpgGpfjc/gFCImdLUyqB6eSWVaZPazMbeAjmfhx3R0zm/NYVzxwAokFKgrc0w==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nomicfoundation/solidity-analyzer-darwin-x64": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-darwin-x64/-/solidity-analyzer-darwin-x64-0.1.1.tgz", - "integrity": "sha512-XhQG4BaJE6cIbjAVtzGOGbK3sn1BO9W29uhk9J8y8fZF1DYz0Doj8QDMfpMu+A6TjPDs61lbsmeYodIDnfveSA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nomicfoundation/solidity-analyzer-freebsd-x64": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-freebsd-x64/-/solidity-analyzer-freebsd-x64-0.1.1.tgz", - "integrity": "sha512-GHF1VKRdHW3G8CndkwdaeLkVBi5A9u2jwtlS7SLhBc8b5U/GcoL39Q+1CSO3hYqePNP+eV5YI7Zgm0ea6kMHoA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nomicfoundation/solidity-analyzer-linux-arm64-gnu": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-arm64-gnu/-/solidity-analyzer-linux-arm64-gnu-0.1.1.tgz", - "integrity": "sha512-g4Cv2fO37ZsUENQ2vwPnZc2zRenHyAxHcyBjKcjaSmmkKrFr64yvzeNO8S3GBFCo90rfochLs99wFVGT/0owpg==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nomicfoundation/solidity-analyzer-linux-arm64-musl": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-arm64-musl/-/solidity-analyzer-linux-arm64-musl-0.1.1.tgz", - "integrity": "sha512-WJ3CE5Oek25OGE3WwzK7oaopY8xMw9Lhb0mlYuJl/maZVo+WtP36XoQTb7bW/i8aAdHW5Z+BqrHMux23pvxG3w==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nomicfoundation/solidity-analyzer-linux-x64-gnu": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-x64-gnu/-/solidity-analyzer-linux-x64-gnu-0.1.1.tgz", - "integrity": "sha512-5WN7leSr5fkUBBjE4f3wKENUy9HQStu7HmWqbtknfXkkil+eNWiBV275IOlpXku7v3uLsXTOKpnnGHJYI2qsdA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nomicfoundation/solidity-analyzer-linux-x64-musl": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-x64-musl/-/solidity-analyzer-linux-x64-musl-0.1.1.tgz", - "integrity": "sha512-KdYMkJOq0SYPQMmErv/63CwGwMm5XHenEna9X9aB8mQmhDBrYrlAOSsIPgFCUSL0hjxE3xHP65/EPXR/InD2+w==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nomicfoundation/solidity-analyzer-win32-arm64-msvc": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-win32-arm64-msvc/-/solidity-analyzer-win32-arm64-msvc-0.1.1.tgz", - "integrity": "sha512-VFZASBfl4qiBYwW5xeY20exWhmv6ww9sWu/krWSesv3q5hA0o1JuzmPHR4LPN6SUZj5vcqci0O6JOL8BPw+APg==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nomicfoundation/solidity-analyzer-win32-ia32-msvc": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-win32-ia32-msvc/-/solidity-analyzer-win32-ia32-msvc-0.1.1.tgz", - "integrity": "sha512-JnFkYuyCSA70j6Si6cS1A9Gh1aHTEb8kOTBApp/c7NRTFGNMH8eaInKlyuuiIbvYFhlXW4LicqyYuWNNq9hkpQ==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nomicfoundation/solidity-analyzer-win32-x64-msvc": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-win32-x64-msvc/-/solidity-analyzer-win32-x64-msvc-0.1.1.tgz", - "integrity": "sha512-HrVJr6+WjIXGnw3Q9u6KQcbZCtk0caVWhCdFADySvRyUxJ8PnzlaP+MhwNE8oyT8OZ6ejHBRrrgjSqDCFXGirw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nomiclabs/hardhat-ethers": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-ethers/-/hardhat-ethers-2.2.3.tgz", - "integrity": "sha512-YhzPdzb612X591FOe68q+qXVXGG2ANZRvDo0RRUtimev85rCrAlv/TLMEZw5c+kq9AbzocLTVX/h2jVIFPL9Xg==", - "dev": true, - "peer": true, - "peerDependencies": { - "ethers": "^5.0.0", - "hardhat": "^2.0.0" - } - }, - "node_modules/@nomiclabs/hardhat-etherscan": { - "version": "3.1.7", - "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-etherscan/-/hardhat-etherscan-3.1.7.tgz", - "integrity": "sha512-tZ3TvSgpvsQ6B6OGmo1/Au6u8BrAkvs1mIC/eURA3xgIfznUZBhmpne8hv7BXUzw9xNL3fXdpOYgOQlVMTcoHQ==", - "dev": true, - "peer": true, - "dependencies": { - "@ethersproject/abi": "^5.1.2", - "@ethersproject/address": "^5.0.2", - "cbor": "^8.1.0", - "chalk": "^2.4.2", - "debug": "^4.1.1", - "fs-extra": "^7.0.1", - "lodash": "^4.17.11", - "semver": "^6.3.0", - "table": "^6.8.0", - "undici": "^5.14.0" - }, - "peerDependencies": { - "hardhat": "^2.0.4" - } - }, - "node_modules/@openzeppelin/contracts": { - "version": "4.9.2", - "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.9.2.tgz", - "integrity": "sha512-mO+y6JaqXjWeMh9glYVzVu8HYPGknAAnWyxTRhGeckOruyXQMNnlcW6w/Dx9ftLeIQk6N+ZJFuVmTwF7lEIFrg==" - }, - "node_modules/@scure/base": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.1.tgz", - "integrity": "sha512-ZxOhsSyxYwLJj3pLZCefNitxsj093tb2vq90mp2txoYeBqbcjDjqFhyM8eUjq/uFm6zJ+mUuqxlS2FkuSY1MTA==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ] - }, - "node_modules/@scure/bip32": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.1.5.tgz", - "integrity": "sha512-XyNh1rB0SkEqd3tXcXMi+Xe1fvg+kUIcoRIEujP1Jgv7DqW2r9lg3Ah0NkFaCs9sTkQAQA8kw7xiRXzENi9Rtw==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "dependencies": { - "@noble/hashes": "~1.2.0", - "@noble/secp256k1": "~1.7.0", - "@scure/base": "~1.1.0" - } - }, - "node_modules/@scure/bip39": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.1.1.tgz", - "integrity": "sha512-t+wDck2rVkh65Hmv280fYdVdY25J9YeEUIgn2LG1WM6gxFkGzcksoDiUkWVpVp3Oex9xGC68JU2dSbUfwZ2jPg==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "dependencies": { - "@noble/hashes": "~1.2.0", - "@scure/base": "~1.1.0" - } - }, - "node_modules/@sentry/core": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/core/-/core-5.30.0.tgz", - "integrity": "sha512-TmfrII8w1PQZSZgPpUESqjB+jC6MvZJZdLtE/0hZ+SrnKhW3x5WlYLvTXZpcWePYBku7rl2wn1RZu6uT0qCTeg==", - "dev": true, - "dependencies": { - "@sentry/hub": "5.30.0", - "@sentry/minimal": "5.30.0", - "@sentry/types": "5.30.0", - "@sentry/utils": "5.30.0", - "tslib": "^1.9.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@sentry/hub": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/hub/-/hub-5.30.0.tgz", - "integrity": "sha512-2tYrGnzb1gKz2EkMDQcfLrDTvmGcQPuWxLnJKXJvYTQDGLlEvi2tWz1VIHjunmOvJrB5aIQLhm+dcMRwFZDCqQ==", - "dev": true, - "dependencies": { - "@sentry/types": "5.30.0", - "@sentry/utils": "5.30.0", - "tslib": "^1.9.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@sentry/minimal": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/minimal/-/minimal-5.30.0.tgz", - "integrity": "sha512-BwWb/owZKtkDX+Sc4zCSTNcvZUq7YcH3uAVlmh/gtR9rmUvbzAA3ewLuB3myi4wWRAMEtny6+J/FN/x+2wn9Xw==", - "dev": true, - "dependencies": { - "@sentry/hub": "5.30.0", - "@sentry/types": "5.30.0", - "tslib": "^1.9.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@sentry/node": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/node/-/node-5.30.0.tgz", - "integrity": "sha512-Br5oyVBF0fZo6ZS9bxbJZG4ApAjRqAnqFFurMVJJdunNb80brh7a5Qva2kjhm+U6r9NJAB5OmDyPkA1Qnt+QVg==", - "dev": true, - "dependencies": { - "@sentry/core": "5.30.0", - "@sentry/hub": "5.30.0", - "@sentry/tracing": "5.30.0", - "@sentry/types": "5.30.0", - "@sentry/utils": "5.30.0", - "cookie": "^0.4.1", - "https-proxy-agent": "^5.0.0", - "lru_map": "^0.3.3", - "tslib": "^1.9.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@sentry/tracing": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/tracing/-/tracing-5.30.0.tgz", - "integrity": "sha512-dUFowCr0AIMwiLD7Fs314Mdzcug+gBVo/+NCMyDw8tFxJkwWAKl7Qa2OZxLQ0ZHjakcj1hNKfCQJ9rhyfOl4Aw==", - "dev": true, - "dependencies": { - "@sentry/hub": "5.30.0", - "@sentry/minimal": "5.30.0", - "@sentry/types": "5.30.0", - "@sentry/utils": "5.30.0", - "tslib": "^1.9.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@sentry/types": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/types/-/types-5.30.0.tgz", - "integrity": "sha512-R8xOqlSTZ+htqrfteCWU5Nk0CDN5ApUTvrlvBuiH1DyP6czDZ4ktbZB0hAgBlVcK0U+qpD3ag3Tqqpa5Q67rPw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/@sentry/utils": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-5.30.0.tgz", - "integrity": "sha512-zaYmoH0NWWtvnJjC9/CBseXMtKHm/tm40sz3YfJRxeQjyzRqNQPgivpd9R/oDJCYj999mzdW382p/qi2ypjLww==", - "dev": true, - "dependencies": { - "@sentry/types": "5.30.0", - "tslib": "^1.9.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@solidity-parser/parser": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.14.5.tgz", - "integrity": "sha512-6dKnHZn7fg/iQATVEzqyUOyEidbn05q7YA2mQ9hC0MMXhhV3/JrsxmFSYZAcr7j1yUP700LLhTruvJ3MiQmjJg==", - "dev": true, - "dependencies": { - "antlr4ts": "^0.5.0-alpha.4" - } - }, - "node_modules/@tsconfig/node10": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", - "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", - "dev": true, - "peer": true - }, - "node_modules/@tsconfig/node12": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", - "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", - "dev": true, - "peer": true - }, - "node_modules/@tsconfig/node14": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", - "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", - "dev": true, - "peer": true - }, - "node_modules/@tsconfig/node16": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", - "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", - "dev": true, - "peer": true - }, - "node_modules/@typechain/ethers-v5": { - "version": "10.2.1", - "resolved": "https://registry.npmjs.org/@typechain/ethers-v5/-/ethers-v5-10.2.1.tgz", - "integrity": "sha512-n3tQmCZjRE6IU4h6lqUGiQ1j866n5MTCBJreNEHHVWXa2u9GJTaeYyU1/k+1qLutkyw+sS6VAN+AbeiTqsxd/A==", - "dev": true, - "peer": true, - "dependencies": { - "lodash": "^4.17.15", - "ts-essentials": "^7.0.1" - }, - "peerDependencies": { - "@ethersproject/abi": "^5.0.0", - "@ethersproject/providers": "^5.0.0", - "ethers": "^5.1.3", - "typechain": "^8.1.1", - "typescript": ">=4.3.0" - } - }, - "node_modules/@typechain/hardhat": { - "version": "6.1.6", - "resolved": "https://registry.npmjs.org/@typechain/hardhat/-/hardhat-6.1.6.tgz", - "integrity": "sha512-BiVnegSs+ZHVymyidtK472syodx1sXYlYJJixZfRstHVGYTi8V1O7QG4nsjyb0PC/LORcq7sfBUcHto1y6UgJA==", - "dev": true, - "peer": true, - "dependencies": { - "fs-extra": "^9.1.0" - }, - "peerDependencies": { - "@ethersproject/abi": "^5.4.7", - "@ethersproject/providers": "^5.4.7", - "@typechain/ethers-v5": "^10.2.1", - "ethers": "^5.4.7", - "hardhat": "^2.9.9", - "typechain": "^8.1.1" - } - }, - "node_modules/@typechain/hardhat/node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "peer": true, - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typechain/hardhat/node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "peer": true, - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/@typechain/hardhat/node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true, - "peer": true, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/@types/bn.js": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.1.tgz", - "integrity": "sha512-qNrYbZqMx0uJAfKnKclPh+dTwK33KfLHYqtyODwd5HnXOjnkhc4qgn3BrK6RWyGZm5+sIFE7Q7Vz6QQtJB7w7g==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/chai": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.5.tgz", - "integrity": "sha512-mEo1sAde+UCE6b2hxn332f1g1E8WfYRu6p5SvTKr2ZKC1f7gFJXk4h5PyGP9Dt6gCaG8y8XhwnXWC6Iy2cmBng==", - "dev": true, - "peer": true - }, - "node_modules/@types/chai-as-promised": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/@types/chai-as-promised/-/chai-as-promised-7.1.5.tgz", - "integrity": "sha512-jStwss93SITGBwt/niYrkf2C+/1KTeZCZl1LaeezTlqppAKeoQC7jxyqYuP72sxBGKCIbw7oHgbYssIRzT5FCQ==", - "dev": true, - "peer": true, - "dependencies": { - "@types/chai": "*" - } - }, - "node_modules/@types/concat-stream": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/@types/concat-stream/-/concat-stream-1.6.1.tgz", - "integrity": "sha512-eHE4cQPoj6ngxBZMvVf6Hw7Mh4jMW4U9lpGmS5GBPB9RYxlFg+CHaVN7ErNY4W9XfLIEn20b4VDYaIrbq0q4uA==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/form-data": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/@types/form-data/-/form-data-0.0.33.tgz", - "integrity": "sha512-8BSvG1kGm83cyJITQMZSulnl6QV8jqAGreJsc5tPu1Jq0vTSOiY/k24Wx82JRpWwZSqrala6sd5rWi6aNXvqcw==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", - "dev": true, - "dependencies": { - "@types/minimatch": "*", - "@types/node": "*" - } - }, - "node_modules/@types/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@types/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw==", - "dev": true - }, - "node_modules/@types/minimatch": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz", - "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==", - "dev": true - }, - "node_modules/@types/mocha": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.1.tgz", - "integrity": "sha512-/fvYntiO1GeICvqbQ3doGDIP97vWmvFt83GKguJ6prmQM2iXZfFcq6YE8KteFyRtX2/h5Hf91BYvPodJKFYv5Q==", - "dev": true, - "peer": true - }, - "node_modules/@types/node": { - "version": "20.3.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.3.1.tgz", - "integrity": "sha512-EhcH/wvidPy1WeML3TtYFGR83UzjxeWRen9V402T8aUGYsCHOmfoisV3ZSg03gAFIbLq8TnWOJ0f4cALtnSEUg==", - "dev": true - }, - "node_modules/@types/pbkdf2": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@types/pbkdf2/-/pbkdf2-3.1.0.tgz", - "integrity": "sha512-Cf63Rv7jCQ0LaL8tNXmEyqTHuIJxRdlS5vMh1mj5voN4+QFhVZnlZruezqpWYDiJ8UTzhP0VmeLXCmBk66YrMQ==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/prettier": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.3.tgz", - "integrity": "sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==", - "dev": true, - "peer": true - }, - "node_modules/@types/qs": { - "version": "6.9.7", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", - "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", - "dev": true - }, - "node_modules/@types/readable-stream": { - "version": "2.3.15", - "resolved": "https://registry.npmjs.org/@types/readable-stream/-/readable-stream-2.3.15.tgz", - "integrity": "sha512-oM5JSKQCcICF1wvGgmecmHldZ48OZamtMxcGGVICOJA8o8cahXC1zEVAif8iwoc5j8etxFaRFnf095+CDsuoFQ==", - "dev": true, - "dependencies": { - "@types/node": "*", - "safe-buffer": "~5.1.1" - } - }, - "node_modules/@types/secp256k1": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@types/secp256k1/-/secp256k1-4.0.3.tgz", - "integrity": "sha512-Da66lEIFeIz9ltsdMZcpQvmrmmoqrfju8pm1BH8WbYjZSwUgCwXLb9C+9XYogwBITnbsSaMdVPb2ekf7TV+03w==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/abbrev": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz", - "integrity": "sha512-LEyx4aLEC3x6T0UguF6YILf+ntvmOaWsVfENmIW0E9H09vKlLDGelMjjSm0jkDHALj8A8quZ/HapKNigzwge+Q==", - "dev": true - }, - "node_modules/abort-controller": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", - "dev": true, - "dependencies": { - "event-target-shim": "^5.0.0" - }, - "engines": { - "node": ">=6.5" - } - }, - "node_modules/abstract-level": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/abstract-level/-/abstract-level-1.0.3.tgz", - "integrity": "sha512-t6jv+xHy+VYwc4xqZMn2Pa9DjcdzvzZmQGRjTFc8spIbRGHgBrEKbPq+rYXc7CCo0lxgYvSgKVg9qZAhpVQSjA==", - "dev": true, - "dependencies": { - "buffer": "^6.0.3", - "catering": "^2.1.0", - "is-buffer": "^2.0.5", - "level-supports": "^4.0.0", - "level-transcoder": "^1.0.1", - "module-error": "^1.0.1", - "queue-microtask": "^1.2.3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/acorn": { - "version": "8.9.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.9.0.tgz", - "integrity": "sha512-jaVNAFBHNLXspO543WnNNPZFRtavh3skAkITqD0/2aeMkKZTN+254PyhwxFYrk3vQ1xfY+2wbesJMs/JC8/PwQ==", - "dev": true, - "peer": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", - "dev": true, - "peer": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/adm-zip": { - "version": "0.4.16", - "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz", - "integrity": "sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg==", - "dev": true, - "engines": { - "node": ">=0.3.0" - } - }, - "node_modules/aes-js": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", - "integrity": "sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==" - }, - "node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dev": true, - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "dev": true, - "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/amdefine": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", - "integrity": "sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg==", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.4.2" - } - }, - "node_modules/ansi-colors": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", - "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/antlr4ts": { - "version": "0.5.0-alpha.4", - "resolved": "https://registry.npmjs.org/antlr4ts/-/antlr4ts-0.5.0-alpha.4.tgz", - "integrity": "sha512-WPQDt1B74OfPv/IMS2ekXAKkTZIHl88uMetg6q3OTqgFxZ/dxDXI0EWLyZid/1Pe6hTftyg5N7gel5wNAGxXyQ==", - "dev": true - }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dev": true, - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true, - "peer": true - }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "node_modules/array-back": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-3.1.0.tgz", - "integrity": "sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==", - "dev": true, - "peer": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/array-buffer-byte-length": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", - "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "is-array-buffer": "^3.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array.prototype.reduce": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/array.prototype.reduce/-/array.prototype.reduce-1.0.5.tgz", - "integrity": "sha512-kDdugMl7id9COE8R7MHF5jWk7Dqt/fs4Pv+JXoICnYwqpjjjbUurz6w5fT5IG6brLdJhv6/VoHB0H7oyIBXd+Q==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "es-array-method-boxes-properly": "^1.0.0", - "is-string": "^1.0.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", - "dev": true - }, - "node_modules/asn1": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", - "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", - "dev": true, - "dependencies": { - "safer-buffer": "~2.1.0" - } - }, - "node_modules/assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", - "dev": true, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/assertion-error": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", - "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", - "dev": true, - "peer": true, - "engines": { - "node": "*" - } - }, - "node_modules/astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "dev": true, - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w==", - "dev": true - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "dev": true - }, - "node_modules/at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", - "dev": true, - "peer": true, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/available-typed-arrays": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/aws4": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz", - "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==", - "dev": true - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "node_modules/base-x": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz", - "integrity": "sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==", - "dev": true, - "dependencies": { - "safe-buffer": "^5.0.1" - } - }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", - "dev": true, - "dependencies": { - "tweetnacl": "^0.14.3" - } - }, - "node_modules/bcrypt-pbkdf/node_modules/tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", - "dev": true - }, - "node_modules/bech32": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz", - "integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==" - }, - "node_modules/bigint-crypto-utils": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/bigint-crypto-utils/-/bigint-crypto-utils-3.2.2.tgz", - "integrity": "sha512-U1RbE3aX9ayCUVcIPHuPDPKcK3SFOXf93J1UK/iHlJuQB7bhagPIX06/CLpLEsDThJ7KA4Dhrnzynl+d2weTiw==", - "dev": true, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/blakejs": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/blakejs/-/blakejs-1.2.1.tgz", - "integrity": "sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ==", - "dev": true - }, - "node_modules/bn.js": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", - "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==" - }, - "node_modules/browser-level": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/browser-level/-/browser-level-1.0.1.tgz", - "integrity": "sha512-XECYKJ+Dbzw0lbydyQuJzwNXtOpbMSq737qxJN11sIRTErOMShvDpbzTlgju7orJKvx4epULolZAuJGLzCmWRQ==", - "dev": true, - "dependencies": { - "abstract-level": "^1.0.2", - "catering": "^2.1.1", - "module-error": "^1.0.2", - "run-parallel-limit": "^1.1.0" - } - }, - "node_modules/browser-stdout": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", - "dev": true - }, - "node_modules/browserify-aes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", - "dev": true, - "dependencies": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/bs58": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", - "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", - "dev": true, - "dependencies": { - "base-x": "^3.0.2" - } - }, - "node_modules/bs58check": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/bs58check/-/bs58check-2.1.2.tgz", - "integrity": "sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==", - "dev": true, - "dependencies": { - "bs58": "^4.0.0", - "create-hash": "^1.1.0", - "safe-buffer": "^5.1.2" - } - }, - "node_modules/buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, - "node_modules/buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==", - "dev": true - }, - "node_modules/busboy": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", - "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", - "dev": true, - "dependencies": { - "streamsearch": "^1.1.0" - }, - "engines": { - "node": ">=10.16.0" - } - }, - "node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/case": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/case/-/case-1.6.3.tgz", - "integrity": "sha512-mzDSXIPaFwVDvZAHqZ9VlbyF4yyXRuX6IvB06WvPYkqJVO24kX1PPhv9bfpKNFZyxYFmmgo03HUiD8iklmJYRQ==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", - "dev": true - }, - "node_modules/catering": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/catering/-/catering-2.1.1.tgz", - "integrity": "sha512-K7Qy8O9p76sL3/3m7/zLKbRkyOlSZAgzEaLhyj2mXS8PsCud2Eo4hAb8aLtZqHh0QGqLcb9dlJSu6lHRVENm1w==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/cbor": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/cbor/-/cbor-8.1.0.tgz", - "integrity": "sha512-DwGjNW9omn6EwP70aXsn7FQJx5kO12tX0bZkaTjzdVFM6/7nhA4t0EENocKGx6D2Bch9PE2KzCUf5SceBdeijg==", - "dev": true, - "peer": true, - "dependencies": { - "nofilter": "^3.1.0" - }, - "engines": { - "node": ">=12.19" - } - }, - "node_modules/chai": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.7.tgz", - "integrity": "sha512-HLnAzZ2iupm25PlN0xFreAlBA5zaBSv3og0DdeGA4Ar6h6rJ3A0rolRUKJhSF2V10GZKDgWF/VmAEsNWjCRB+A==", - "dev": true, - "peer": true, - "dependencies": { - "assertion-error": "^1.1.0", - "check-error": "^1.0.2", - "deep-eql": "^4.1.2", - "get-func-name": "^2.0.0", - "loupe": "^2.3.1", - "pathval": "^1.1.1", - "type-detect": "^4.0.5" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/chai-as-promised": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/chai-as-promised/-/chai-as-promised-7.1.1.tgz", - "integrity": "sha512-azL6xMoi+uxu6z4rhWQ1jbdUhOMhis2PvscD/xjLqNMkv3BPPp2JyyuTHOrf9BOosGpNQ11v6BKv/g57RXbiaA==", - "dev": true, - "peer": true, - "dependencies": { - "check-error": "^1.0.2" - }, - "peerDependencies": { - "chai": ">= 2.1.2 < 5" - } - }, - "node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/charenc": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", - "integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/check-error": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", - "integrity": "sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==", - "dev": true, - "peer": true, - "engines": { - "node": "*" - } - }, - "node_modules/chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", - "dev": true - }, - "node_modules/cipher-base": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", - "dev": true, - "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/classic-level": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/classic-level/-/classic-level-1.3.0.tgz", - "integrity": "sha512-iwFAJQYtqRTRM0F6L8h4JCt00ZSGdOyqh7yVrhhjrOpFhmBjNlRUey64MCiyo6UmQHMJ+No3c81nujPv+n9yrg==", - "dev": true, - "hasInstallScript": true, - "dependencies": { - "abstract-level": "^1.0.2", - "catering": "^2.1.0", - "module-error": "^1.0.1", - "napi-macros": "^2.2.2", - "node-gyp-build": "^4.3.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/cli-table3": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.5.1.tgz", - "integrity": "sha512-7Qg2Jrep1S/+Q3EceiZtQcDPWxhAvBw+ERf1162v4sikJrvojMHFqXt8QIVha8UlH9rgU0BeWPytZ9/TzYqlUw==", - "dev": true, - "dependencies": { - "object-assign": "^4.1.0", - "string-width": "^2.1.1" - }, - "engines": { - "node": ">=6" - }, - "optionalDependencies": { - "colors": "^1.1.2" - } - }, - "node_modules/cli-table3/node_modules/ansi-regex": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", - "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/cli-table3/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/cli-table3/node_modules/string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "dependencies": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/cli-table3/node_modules/strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", - "dev": true, - "dependencies": { - "ansi-regex": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", - "dev": true, - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/command-exists": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", - "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==", - "dev": true - }, - "node_modules/command-line-args": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.2.1.tgz", - "integrity": "sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg==", - "dev": true, - "peer": true, - "dependencies": { - "array-back": "^3.1.0", - "find-replace": "^3.0.0", - "lodash.camelcase": "^4.3.0", - "typical": "^4.0.0" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/command-line-usage": { - "version": "6.1.3", - "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-6.1.3.tgz", - "integrity": "sha512-sH5ZSPr+7UStsloltmDh7Ce5fb8XPlHyoPzTpyyMuYCtervL65+ubVZ6Q61cFtFl62UyJlc8/JwERRbAFPUqgw==", - "dev": true, - "peer": true, - "dependencies": { - "array-back": "^4.0.2", - "chalk": "^2.4.2", - "table-layout": "^1.0.2", - "typical": "^5.2.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/command-line-usage/node_modules/array-back": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", - "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", - "dev": true, - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/command-line-usage/node_modules/typical": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", - "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", - "dev": true, - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/commander": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/commander/-/commander-3.0.2.tgz", - "integrity": "sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow==", - "dev": true - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, - "node_modules/concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "dev": true, - "engines": [ - "node >= 0.8" - ], - "dependencies": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - } - }, - "node_modules/concat-stream/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/concat-stream/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/cookie": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", - "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", - "dev": true - }, - "node_modules/crc-32": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", - "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", - "dev": true, - "bin": { - "crc32": "bin/crc32.njs" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/create-hash": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", - "dev": true, - "dependencies": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" - } - }, - "node_modules/create-hmac": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", - "dev": true, - "dependencies": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "node_modules/create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "dev": true, - "peer": true - }, - "node_modules/crypt": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", - "integrity": "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", - "dev": true, - "dependencies": { - "assert-plus": "^1.0.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/death": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/death/-/death-1.1.0.tgz", - "integrity": "sha512-vsV6S4KVHvTGxbEcij7hkWRv0It+sGGWVOM67dQde/o5Xjnr+KmLjxWJii2uEObIrt1CcM9w0Yaovx+iOlIL+w==", - "dev": true - }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/decamelize": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", - "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/deep-eql": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz", - "integrity": "sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==", - "dev": true, - "peer": true, - "dependencies": { - "type-detect": "^4.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "dev": true, - "peer": true, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true - }, - "node_modules/define-properties": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", - "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", - "dev": true, - "dependencies": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/diff": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", - "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", - "dev": true, - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/difflib": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/difflib/-/difflib-0.2.4.tgz", - "integrity": "sha512-9YVwmMb0wQHQNr5J9m6BSj6fk4pfGITGQOOs+D9Fl+INODWFOfvhIU1hNv6GgR1RBoC/9NJcwu77zShxV0kT7w==", - "dev": true, - "dependencies": { - "heap": ">= 0.2.0" - }, - "engines": { - "node": "*" - } - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/dotenv": { - "version": "16.3.1", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.3.1.tgz", - "integrity": "sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/motdotla/dotenv?sponsor=1" - } - }, - "node_modules/ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", - "dev": true, - "dependencies": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "node_modules/elliptic": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", - "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", - "dependencies": { - "bn.js": "^4.11.9", - "brorand": "^1.1.0", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.1", - "inherits": "^2.0.4", - "minimalistic-assert": "^1.0.1", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "node_modules/elliptic/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/enquirer": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", - "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", - "dev": true, - "dependencies": { - "ansi-colors": "^4.1.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/env-paths": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", - "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/es-abstract": { - "version": "1.21.2", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.2.tgz", - "integrity": "sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg==", - "dev": true, - "dependencies": { - "array-buffer-byte-length": "^1.0.0", - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "es-set-tostringtag": "^2.0.1", - "es-to-primitive": "^1.2.1", - "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.2.0", - "get-symbol-description": "^1.0.0", - "globalthis": "^1.0.3", - "gopd": "^1.0.1", - "has": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.5", - "is-array-buffer": "^3.0.2", - "is-callable": "^1.2.7", - "is-negative-zero": "^2.0.2", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "is-string": "^1.0.7", - "is-typed-array": "^1.1.10", - "is-weakref": "^1.0.2", - "object-inspect": "^1.12.3", - "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.4.3", - "safe-regex-test": "^1.0.0", - "string.prototype.trim": "^1.2.7", - "string.prototype.trimend": "^1.0.6", - "string.prototype.trimstart": "^1.0.6", - "typed-array-length": "^1.0.4", - "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.9" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es-abstract/node_modules/object.assign": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", - "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "has-symbols": "^1.0.3", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es-array-method-boxes-properly": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", - "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==", - "dev": true - }, - "node_modules/es-set-tostringtag": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", - "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", - "dev": true, - "dependencies": { - "get-intrinsic": "^1.1.3", - "has": "^1.0.3", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/escodegen": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.8.1.tgz", - "integrity": "sha512-yhi5S+mNTOuRvyW4gWlg5W1byMaQGWWSYHXsuFZ7GBo7tpyOwi2EdzMP/QWxh9hwkD2m+wDVHJsxhRIj+v/b/A==", - "dev": true, - "dependencies": { - "esprima": "^2.7.1", - "estraverse": "^1.9.1", - "esutils": "^2.0.2", - "optionator": "^0.8.1" - }, - "bin": { - "escodegen": "bin/escodegen.js", - "esgenerate": "bin/esgenerate.js" - }, - "engines": { - "node": ">=0.12.0" - }, - "optionalDependencies": { - "source-map": "~0.2.0" - } - }, - "node_modules/escodegen/node_modules/source-map": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz", - "integrity": "sha512-CBdZ2oa/BHhS4xj5DlhjWNHcan57/5YuvfdLf17iVmIpd9KRm+DFLmC6nBNj+6Ua7Kt3TmOjDpQT1aTYOQtoUA==", - "dev": true, - "optional": true, - "dependencies": { - "amdefine": ">=0.0.4" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/esprima": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", - "integrity": "sha512-OarPfz0lFCiW4/AV2Oy1Rp9qu0iusTKqykwTspGCZtPxmF81JR4MmIebvF1F9+UOKth2ZubLQ4XGGaU+hSn99A==", - "dev": true, - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/estraverse": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz", - "integrity": "sha512-25w1fMXQrGdoquWnScXZGckOv+Wes+JDnuN/+7ex3SauFRS72r2lFDec0EKPt2YD1wUJ/IrfEex+9yp4hfSOJA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eth-gas-reporter": { - "version": "0.2.25", - "resolved": "https://registry.npmjs.org/eth-gas-reporter/-/eth-gas-reporter-0.2.25.tgz", - "integrity": "sha512-1fRgyE4xUB8SoqLgN3eDfpDfwEfRxh2Sz1b7wzFbyQA+9TekMmvSjjoRu9SKcSVyK+vLkLIsVbJDsTWjw195OQ==", - "dev": true, - "dependencies": { - "@ethersproject/abi": "^5.0.0-beta.146", - "@solidity-parser/parser": "^0.14.0", - "cli-table3": "^0.5.0", - "colors": "1.4.0", - "ethereum-cryptography": "^1.0.3", - "ethers": "^4.0.40", - "fs-readdir-recursive": "^1.1.0", - "lodash": "^4.17.14", - "markdown-table": "^1.1.3", - "mocha": "^7.1.1", - "req-cwd": "^2.0.0", - "request": "^2.88.0", - "request-promise-native": "^1.0.5", - "sha1": "^1.1.1", - "sync-request": "^6.0.0" - }, - "peerDependencies": { - "@codechecks/client": "^0.1.0" - }, - "peerDependenciesMeta": { - "@codechecks/client": { - "optional": true - } - } - }, - "node_modules/eth-gas-reporter/node_modules/ansi-colors": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.3.tgz", - "integrity": "sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/eth-gas-reporter/node_modules/ansi-regex": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", - "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/eth-gas-reporter/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/eth-gas-reporter/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - }, - "node_modules/eth-gas-reporter/node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/eth-gas-reporter/node_modules/chokidar": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.3.0.tgz", - "integrity": "sha512-dGmKLDdT3Gdl7fBUe8XK+gAtGmzy5Fn0XkkWQuYxGIgWVPPse2CxFA5mtrlD0TOHaHjEUqkWNyP1XdHoJES/4A==", - "dev": true, - "dependencies": { - "anymatch": "~3.1.1", - "braces": "~3.0.2", - "glob-parent": "~5.1.0", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.2.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.1.1" - } - }, - "node_modules/eth-gas-reporter/node_modules/cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", - "dev": true, - "dependencies": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" - } - }, - "node_modules/eth-gas-reporter/node_modules/debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "deprecated": "Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eth-gas-reporter/node_modules/decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eth-gas-reporter/node_modules/diff": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", - "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", - "dev": true, - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/eth-gas-reporter/node_modules/emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true - }, - "node_modules/eth-gas-reporter/node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true, - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/eth-gas-reporter/node_modules/ethers": { - "version": "4.0.49", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-4.0.49.tgz", - "integrity": "sha512-kPltTvWiyu+OktYy1IStSO16i2e7cS9D9OxZ81q2UUaiNPVrm/RTcbxamCXF9VUSKzJIdJV68EAIhTEVBalRWg==", - "dev": true, - "dependencies": { - "aes-js": "3.0.0", - "bn.js": "^4.11.9", - "elliptic": "6.5.4", - "hash.js": "1.1.3", - "js-sha3": "0.5.7", - "scrypt-js": "2.0.4", - "setimmediate": "1.0.4", - "uuid": "2.0.1", - "xmlhttprequest": "1.8.0" - } - }, - "node_modules/eth-gas-reporter/node_modules/find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "dependencies": { - "locate-path": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/eth-gas-reporter/node_modules/flat": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/flat/-/flat-4.1.1.tgz", - "integrity": "sha512-FmTtBsHskrU6FJ2VxCnsDb84wu9zhmO3cUX2kGFb5tuwhfXxGciiT0oRY+cck35QmG+NmGh5eLz6lLCpWTqwpA==", - "dev": true, - "dependencies": { - "is-buffer": "~2.0.3" - }, - "bin": { - "flat": "cli.js" - } - }, - "node_modules/eth-gas-reporter/node_modules/fsevents": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", - "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", - "deprecated": "\"Please update to latest v2.3 or v2.2\"", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/eth-gas-reporter/node_modules/glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - } - }, - "node_modules/eth-gas-reporter/node_modules/hash.js": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz", - "integrity": "sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.0" - } - }, - "node_modules/eth-gas-reporter/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/eth-gas-reporter/node_modules/js-sha3": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz", - "integrity": "sha512-GII20kjaPX0zJ8wzkTbNDYMY7msuZcTWk8S5UOh6806Jq/wz1J8/bnr8uGU0DAUmYDjj2Mr4X1cW8v/GLYnR+g==", - "dev": true - }, - "node_modules/eth-gas-reporter/node_modules/js-yaml": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", - "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", - "dev": true, - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/eth-gas-reporter/node_modules/locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "dependencies": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/eth-gas-reporter/node_modules/log-symbols": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz", - "integrity": "sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==", - "dev": true, - "dependencies": { - "chalk": "^2.4.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/eth-gas-reporter/node_modules/minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/eth-gas-reporter/node_modules/mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "dev": true, - "dependencies": { - "minimist": "^1.2.5" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/eth-gas-reporter/node_modules/mocha": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-7.2.0.tgz", - "integrity": "sha512-O9CIypScywTVpNaRrCAgoUnJgozpIofjKUYmJhiCIJMiuYnLI6otcb1/kpW9/n/tJODHGZ7i8aLQoDVsMtOKQQ==", - "dev": true, - "dependencies": { - "ansi-colors": "3.2.3", - "browser-stdout": "1.3.1", - "chokidar": "3.3.0", - "debug": "3.2.6", - "diff": "3.5.0", - "escape-string-regexp": "1.0.5", - "find-up": "3.0.0", - "glob": "7.1.3", - "growl": "1.10.5", - "he": "1.2.0", - "js-yaml": "3.13.1", - "log-symbols": "3.0.0", - "minimatch": "3.0.4", - "mkdirp": "0.5.5", - "ms": "2.1.1", - "node-environment-flags": "1.0.6", - "object.assign": "4.1.0", - "strip-json-comments": "2.0.1", - "supports-color": "6.0.0", - "which": "1.3.1", - "wide-align": "1.1.3", - "yargs": "13.3.2", - "yargs-parser": "13.1.2", - "yargs-unparser": "1.6.0" - }, - "bin": { - "_mocha": "bin/_mocha", - "mocha": "bin/mocha" - }, - "engines": { - "node": ">= 8.10.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mochajs" - } - }, - "node_modules/eth-gas-reporter/node_modules/ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true - }, - "node_modules/eth-gas-reporter/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eth-gas-reporter/node_modules/p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "dependencies": { - "p-limit": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/eth-gas-reporter/node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/eth-gas-reporter/node_modules/readdirp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.2.0.tgz", - "integrity": "sha512-crk4Qu3pmXwgxdSgGhgA/eXiJAPQiX4GMOZZMXnqKxHX7TaoL+3gQVo/WeuAiogr07DpnfjIMpXXa+PAIvwPGQ==", - "dev": true, - "dependencies": { - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/eth-gas-reporter/node_modules/scrypt-js": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-2.0.4.tgz", - "integrity": "sha512-4KsaGcPnuhtCZQCxFxN3GVYIhKFPTdLd8PLC552XwbMndtD0cjRFAhDuuydXQ0h08ZfPgzqe6EKHozpuH74iDw==", - "dev": true - }, - "node_modules/eth-gas-reporter/node_modules/setimmediate": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.4.tgz", - "integrity": "sha512-/TjEmXQVEzdod/FFskf3o7oOAsGhHf2j1dZqRFbDzq4F3mvvxflIIi4Hd3bLQE9y/CpwqfSQam5JakI/mi3Pog==", - "dev": true - }, - "node_modules/eth-gas-reporter/node_modules/string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "dependencies": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/eth-gas-reporter/node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "dependencies": { - "ansi-regex": "^4.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/eth-gas-reporter/node_modules/strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eth-gas-reporter/node_modules/supports-color": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", - "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/eth-gas-reporter/node_modules/uuid": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.1.tgz", - "integrity": "sha512-nWg9+Oa3qD2CQzHIP4qKUqwNfzKn8P0LtFhotaCTFchsV7ZfDhAybeip/HZVeMIpZi9JgY1E3nUlwaCmZT1sEg==", - "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", - "dev": true - }, - "node_modules/eth-gas-reporter/node_modules/wrap-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", - "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/eth-gas-reporter/node_modules/y18n": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", - "dev": true - }, - "node_modules/eth-gas-reporter/node_modules/yargs": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", - "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", - "dev": true, - "dependencies": { - "cliui": "^5.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^13.1.2" - } - }, - "node_modules/eth-gas-reporter/node_modules/yargs-parser": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", - "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", - "dev": true, - "dependencies": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - }, - "node_modules/eth-gas-reporter/node_modules/yargs-unparser": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-1.6.0.tgz", - "integrity": "sha512-W9tKgmSn0DpSatfri0nx52Joq5hVXgeLiqR/5G0sZNDoLZFOr/xjBUDcShCOGNsBnEMNo1KAMBkTej1Hm62HTw==", - "dev": true, - "dependencies": { - "flat": "^4.1.0", - "lodash": "^4.17.15", - "yargs": "^13.3.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/ethereum-bloom-filters": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/ethereum-bloom-filters/-/ethereum-bloom-filters-1.0.10.tgz", - "integrity": "sha512-rxJ5OFN3RwjQxDcFP2Z5+Q9ho4eIdEmSc2ht0fCu8Se9nbXjZ7/031uXoUYJ87KHCOdVeiUuwSnoS7hmYAGVHA==", - "dev": true, - "dependencies": { - "js-sha3": "^0.8.0" - } - }, - "node_modules/ethereum-cryptography": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-1.2.0.tgz", - "integrity": "sha512-6yFQC9b5ug6/17CQpCyE3k9eKBMdhyVjzUy1WkiuY/E4vj/SXDBbCw8QEIaXqf0Mf2SnY6RmpDcwlUmBSS0EJw==", - "dev": true, - "dependencies": { - "@noble/hashes": "1.2.0", - "@noble/secp256k1": "1.7.1", - "@scure/bip32": "1.1.5", - "@scure/bip39": "1.1.1" - } - }, - "node_modules/ethereumjs-abi": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/ethereumjs-abi/-/ethereumjs-abi-0.6.8.tgz", - "integrity": "sha512-Tx0r/iXI6r+lRsdvkFDlut0N08jWMnKRZ6Gkq+Nmw75lZe4e6o3EkSnkaBP5NF6+m5PTGAr9JP43N3LyeoglsA==", - "dev": true, - "dependencies": { - "bn.js": "^4.11.8", - "ethereumjs-util": "^6.0.0" - } - }, - "node_modules/ethereumjs-abi/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - }, - "node_modules/ethereumjs-util": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz", - "integrity": "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==", - "dev": true, - "dependencies": { - "@types/bn.js": "^4.11.3", - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "0.1.6", - "rlp": "^2.2.3" - } - }, - "node_modules/ethereumjs-util/node_modules/@types/bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/ethereumjs-util/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - }, - "node_modules/ethereumjs-util/node_modules/ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "dev": true, - "dependencies": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" - } - }, - "node_modules/ethers": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.7.2.tgz", - "integrity": "sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/abi": "5.7.0", - "@ethersproject/abstract-provider": "5.7.0", - "@ethersproject/abstract-signer": "5.7.0", - "@ethersproject/address": "5.7.0", - "@ethersproject/base64": "5.7.0", - "@ethersproject/basex": "5.7.0", - "@ethersproject/bignumber": "5.7.0", - "@ethersproject/bytes": "5.7.0", - "@ethersproject/constants": "5.7.0", - "@ethersproject/contracts": "5.7.0", - "@ethersproject/hash": "5.7.0", - "@ethersproject/hdnode": "5.7.0", - "@ethersproject/json-wallets": "5.7.0", - "@ethersproject/keccak256": "5.7.0", - "@ethersproject/logger": "5.7.0", - "@ethersproject/networks": "5.7.1", - "@ethersproject/pbkdf2": "5.7.0", - "@ethersproject/properties": "5.7.0", - "@ethersproject/providers": "5.7.2", - "@ethersproject/random": "5.7.0", - "@ethersproject/rlp": "5.7.0", - "@ethersproject/sha2": "5.7.0", - "@ethersproject/signing-key": "5.7.0", - "@ethersproject/solidity": "5.7.0", - "@ethersproject/strings": "5.7.0", - "@ethersproject/transactions": "5.7.0", - "@ethersproject/units": "5.7.0", - "@ethersproject/wallet": "5.7.0", - "@ethersproject/web": "5.7.1", - "@ethersproject/wordlists": "5.7.0" - } - }, - "node_modules/ethjs-unit": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/ethjs-unit/-/ethjs-unit-0.1.6.tgz", - "integrity": "sha512-/Sn9Y0oKl0uqQuvgFk/zQgR7aw1g36qX/jzSQ5lSwlO0GigPymk4eGQfeNTD03w1dPOqfz8V77Cy43jH56pagw==", - "dev": true, - "dependencies": { - "bn.js": "4.11.6", - "number-to-bn": "1.7.0" - }, - "engines": { - "node": ">=6.5.0", - "npm": ">=3" - } - }, - "node_modules/ethjs-unit/node_modules/bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==", - "dev": true - }, - "node_modules/ethjs-util": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/ethjs-util/-/ethjs-util-0.1.6.tgz", - "integrity": "sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w==", - "dev": true, - "dependencies": { - "is-hex-prefixed": "1.0.0", - "strip-hex-prefix": "1.0.0" - }, - "engines": { - "node": ">=6.5.0", - "npm": ">=3" - } - }, - "node_modules/event-target-shim": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/evp_bytestokey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", - "dev": true, - "dependencies": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" - } - }, - "node_modules/extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true - }, - "node_modules/extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", - "dev": true, - "engines": [ - "node >=0.6.0" - ] - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "node_modules/fast-glob": { - "version": "3.2.12", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", - "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true - }, - "node_modules/fastq": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", - "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", - "dev": true, - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-replace": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-3.0.0.tgz", - "integrity": "sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==", - "dev": true, - "peer": true, - "dependencies": { - "array-back": "^3.0.1" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", - "dev": true, - "dependencies": { - "locate-path": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/flat": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", - "dev": true, - "bin": { - "flat": "cli.js" - } - }, - "node_modules/follow-redirects": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", - "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "dev": true, - "dependencies": { - "is-callable": "^1.1.3" - } - }, - "node_modules/forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "dev": true, - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 0.12" - } - }, - "node_modules/fp-ts": { - "version": "1.19.3", - "resolved": "https://registry.npmjs.org/fp-ts/-/fp-ts-1.19.3.tgz", - "integrity": "sha512-H5KQDspykdHuztLTg+ajGN0Z2qUjcEf3Ybxc6hLt0k7/zPkn29XnKnxlBPyW2XIddWrGaJBzBl4VLYOtk39yZg==", - "dev": true - }, - "node_modules/fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/fs-readdir-recursive": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz", - "integrity": "sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==", - "dev": true - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true - }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "node_modules/function.prototype.name": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", - "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0", - "functions-have-names": "^1.2.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", - "dev": true - }, - "node_modules/functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true, - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-func-name": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", - "integrity": "sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==", - "dev": true, - "peer": true, - "engines": { - "node": "*" - } - }, - "node_modules/get-intrinsic": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", - "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-port": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz", - "integrity": "sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/get-symbol-description": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", - "dev": true, - "dependencies": { - "assert-plus": "^1.0.0" - } - }, - "node_modules/ghost-testrpc": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/ghost-testrpc/-/ghost-testrpc-0.0.2.tgz", - "integrity": "sha512-i08dAEgJ2g8z5buJIrCTduwPIhih3DP+hOCTyyryikfV8T0bNvHnGXO67i0DD1H4GBDETTclPy9njZbfluQYrQ==", - "dev": true, - "dependencies": { - "chalk": "^2.4.2", - "node-emoji": "^1.10.0" - }, - "bin": { - "testrpc-sc": "index.js" - } - }, - "node_modules/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/global-modules": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", - "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", - "dev": true, - "dependencies": { - "global-prefix": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/global-prefix": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", - "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", - "dev": true, - "dependencies": { - "ini": "^1.3.5", - "kind-of": "^6.0.2", - "which": "^1.3.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/globalthis": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", - "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", - "dev": true, - "dependencies": { - "define-properties": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/globby": { - "version": "10.0.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-10.0.2.tgz", - "integrity": "sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg==", - "dev": true, - "dependencies": { - "@types/glob": "^7.1.1", - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.0.3", - "glob": "^7.1.3", - "ignore": "^5.1.1", - "merge2": "^1.2.3", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "dev": true, - "dependencies": { - "get-intrinsic": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true - }, - "node_modules/growl": { - "version": "1.10.5", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", - "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", - "dev": true, - "engines": { - "node": ">=4.x" - } - }, - "node_modules/handlebars": { - "version": "4.7.7", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", - "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", - "dev": true, - "dependencies": { - "minimist": "^1.2.5", - "neo-async": "^2.6.0", - "source-map": "^0.6.1", - "wordwrap": "^1.0.0" - }, - "bin": { - "handlebars": "bin/handlebars" - }, - "engines": { - "node": ">=0.4.7" - }, - "optionalDependencies": { - "uglify-js": "^3.1.4" - } - }, - "node_modules/har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/har-validator": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", - "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", - "deprecated": "this library is no longer supported", - "dev": true, - "dependencies": { - "ajv": "^6.12.3", - "har-schema": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/hardhat": { - "version": "2.16.0", - "resolved": "https://registry.npmjs.org/hardhat/-/hardhat-2.16.0.tgz", - "integrity": "sha512-7VQEJPQRAZdtrYUZaU9GgCpP3MBNy/pTdscARNJQMWKj5C+R7V32G5uIZKIqZ4QiqXa6CBfxxe+G+ahxUbHZHA==", - "dev": true, - "dependencies": { - "@ethersproject/abi": "^5.1.2", - "@metamask/eth-sig-util": "^4.0.0", - "@nomicfoundation/ethereumjs-block": "5.0.1", - "@nomicfoundation/ethereumjs-blockchain": "7.0.1", - "@nomicfoundation/ethereumjs-common": "4.0.1", - "@nomicfoundation/ethereumjs-evm": "2.0.1", - "@nomicfoundation/ethereumjs-rlp": "5.0.1", - "@nomicfoundation/ethereumjs-statemanager": "2.0.1", - "@nomicfoundation/ethereumjs-trie": "6.0.1", - "@nomicfoundation/ethereumjs-tx": "5.0.1", - "@nomicfoundation/ethereumjs-util": "9.0.1", - "@nomicfoundation/ethereumjs-vm": "7.0.1", - "@nomicfoundation/solidity-analyzer": "^0.1.0", - "@sentry/node": "^5.18.1", - "@types/bn.js": "^5.1.0", - "@types/lru-cache": "^5.1.0", - "abort-controller": "^3.0.0", - "adm-zip": "^0.4.16", - "aggregate-error": "^3.0.0", - "ansi-escapes": "^4.3.0", - "chalk": "^2.4.2", - "chokidar": "^3.4.0", - "ci-info": "^2.0.0", - "debug": "^4.1.1", - "enquirer": "^2.3.0", - "env-paths": "^2.2.0", - "ethereum-cryptography": "^1.0.3", - "ethereumjs-abi": "^0.6.8", - "find-up": "^2.1.0", - "fp-ts": "1.19.3", - "fs-extra": "^7.0.1", - "glob": "7.2.0", - "immutable": "^4.0.0-rc.12", - "io-ts": "1.10.4", - "keccak": "^3.0.2", - "lodash": "^4.17.11", - "mnemonist": "^0.38.0", - "mocha": "^10.0.0", - "p-map": "^4.0.0", - "raw-body": "^2.4.1", - "resolve": "1.17.0", - "semver": "^6.3.0", - "solc": "0.7.3", - "source-map-support": "^0.5.13", - "stacktrace-parser": "^0.1.10", - "tsort": "0.0.1", - "undici": "^5.14.0", - "uuid": "^8.3.2", - "ws": "^7.4.6" - }, - "bin": { - "hardhat": "internal/cli/bootstrap.js" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "ts-node": "*", - "typescript": "*" - }, - "peerDependenciesMeta": { - "ts-node": { - "optional": true - }, - "typescript": { - "optional": true - } - } - }, - "node_modules/hardhat-gas-reporter": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/hardhat-gas-reporter/-/hardhat-gas-reporter-1.0.9.tgz", - "integrity": "sha512-INN26G3EW43adGKBNzYWOlI3+rlLnasXTwW79YNnUhXPDa+yHESgt639dJEs37gCjhkbNKcRRJnomXEuMFBXJg==", - "dev": true, - "dependencies": { - "array-uniq": "1.0.3", - "eth-gas-reporter": "^0.2.25", - "sha1": "^1.1.1" - }, - "peerDependencies": { - "hardhat": "^2.0.2" - } - }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-bigints": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", - "dev": true, - "dependencies": { - "get-intrinsic": "^1.1.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "dev": true, - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/hash-base": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", - "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/hash-base/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "dependencies": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, - "node_modules/he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "dev": true, - "bin": { - "he": "bin/he" - } - }, - "node_modules/heap": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/heap/-/heap-0.2.7.tgz", - "integrity": "sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg==", - "dev": true - }, - "node_modules/hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", - "dependencies": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "node_modules/http-basic": { - "version": "8.1.3", - "resolved": "https://registry.npmjs.org/http-basic/-/http-basic-8.1.3.tgz", - "integrity": "sha512-/EcDMwJZh3mABI2NhGfHOGOeOZITqfkEO4p/xK+l3NpyncIHUQBoMvCSF/b5GqvKtySC2srL/GGG3+EtlqlmCw==", - "dev": true, - "dependencies": { - "caseless": "^0.12.0", - "concat-stream": "^1.6.2", - "http-response-object": "^3.0.1", - "parse-cache-control": "^1.0.1" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "dev": true, - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/http-response-object": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/http-response-object/-/http-response-object-3.0.2.tgz", - "integrity": "sha512-bqX0XTF6fnXSQcEJ2Iuyr75yVakyjIDCqroJQ/aHfSdlM743Cwqoi2nDYMzLGWUcuTWGWy8AAvOKXTfiv6q9RA==", - "dev": true, - "dependencies": { - "@types/node": "^10.0.3" - } - }, - "node_modules/http-response-object/node_modules/@types/node": { - "version": "10.17.60", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz", - "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==", - "dev": true - }, - "node_modules/http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==", - "dev": true, - "dependencies": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - }, - "engines": { - "node": ">=0.8", - "npm": ">=1.3.7" - } - }, - "node_modules/https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "dev": true, - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/ignore": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/immutable": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.0.tgz", - "integrity": "sha512-0AOCmOip+xgJwEVTQj1EfiDDOkPmuyllDuTuEX+DDXUgapLAsBIfkg3sxCYyCEA8mQqZrrxPUGjcOQ2JS3WLkg==", - "dev": true - }, - "node_modules/indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dev": true, - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true - }, - "node_modules/internal-slot": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", - "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", - "dev": true, - "dependencies": { - "get-intrinsic": "^1.2.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/interpret": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/io-ts": { - "version": "1.10.4", - "resolved": "https://registry.npmjs.org/io-ts/-/io-ts-1.10.4.tgz", - "integrity": "sha512-b23PteSnYXSONJ6JQXRAlvJhuw8KOtkqa87W4wDtvMrud/DTJd5X+NpOOI+O/zZwVq6v0VLAaJ+1EDViKEuN9g==", - "dev": true, - "dependencies": { - "fp-ts": "^1.0.0" - } - }, - "node_modules/is-array-buffer": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", - "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.0", - "is-typed-array": "^1.1.10" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "dev": true, - "dependencies": { - "has-bigints": "^1.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-buffer": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", - "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "engines": { - "node": ">=4" - } - }, - "node_modules/is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "dev": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-hex-prefixed": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz", - "integrity": "sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA==", - "dev": true, - "engines": { - "node": ">=6.5.0", - "npm": ">=3" - } - }, - "node_modules/is-negative-zero": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-number-object": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", - "dev": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-shared-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "dev": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "dev": true, - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-typed-array": { - "version": "1.1.10", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", - "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", - "dev": true, - "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", - "dev": true - }, - "node_modules/is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "node_modules/isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", - "dev": true - }, - "node_modules/js-sdsl": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.4.1.tgz", - "integrity": "sha512-6Gsx8R0RucyePbWqPssR8DyfuXmLBooYN5cZFZKjHGnQuaf7pEzhtpceagJxVu4LqhYY5EYA7nko3FmeHZ1KbA==", - "dev": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/js-sdsl" - } - }, - "node_modules/js-sha3": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", - "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==" - }, - "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", - "dev": true - }, - "node_modules/json-schema": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", - "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", - "dev": true - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "node_modules/json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", - "dev": true - }, - "node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "dev": true, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/jsonschema": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsonschema/-/jsonschema-1.4.1.tgz", - "integrity": "sha512-S6cATIPVv1z0IlxdN+zUk5EPjkGCdnhN4wVSBlvoUO1tOLJootbo9CquNJmbIh4yikWHiUedhRYrNPn1arpEmQ==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/jsprim": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", - "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", - "dev": true, - "dependencies": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.4.0", - "verror": "1.10.0" - }, - "engines": { - "node": ">=0.6.0" - } - }, - "node_modules/keccak": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.3.tgz", - "integrity": "sha512-JZrLIAJWuZxKbCilMpNz5Vj7Vtb4scDG3dMXLOsbzBmQGyjwE61BbW7bJkfKKCShXiQZt3T6sBgALRtmd+nZaQ==", - "dev": true, - "hasInstallScript": true, - "dependencies": { - "node-addon-api": "^2.0.0", - "node-gyp-build": "^4.2.0", - "readable-stream": "^3.6.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/klaw": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", - "integrity": "sha512-TED5xi9gGQjGpNnvRWknrwAB1eL5GciPfVFOt3Vk1OJCVDQbzuSfrF3hkUQKlsgKrG1F+0t5W0m+Fje1jIt8rw==", - "dev": true, - "optionalDependencies": { - "graceful-fs": "^4.1.9" - } - }, - "node_modules/level": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/level/-/level-8.0.0.tgz", - "integrity": "sha512-ypf0jjAk2BWI33yzEaaotpq7fkOPALKAgDBxggO6Q9HGX2MRXn0wbP1Jn/tJv1gtL867+YOjOB49WaUF3UoJNQ==", - "dev": true, - "dependencies": { - "browser-level": "^1.0.1", - "classic-level": "^1.2.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/level" - } - }, - "node_modules/level-supports": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-4.0.1.tgz", - "integrity": "sha512-PbXpve8rKeNcZ9C1mUicC9auIYFyGpkV9/i6g76tLgANwWhtG2v7I4xNBUlkn3lE2/dZF3Pi0ygYGtLc4RXXdA==", - "dev": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/level-transcoder": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/level-transcoder/-/level-transcoder-1.0.1.tgz", - "integrity": "sha512-t7bFwFtsQeD8cl8NIoQ2iwxA0CL/9IFw7/9gAjOonH0PWTTiRfY7Hq+Ejbsxh86tXobDQ6IOiddjNYIfOBs06w==", - "dev": true, - "dependencies": { - "buffer": "^6.0.3", - "module-error": "^1.0.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", - "dev": true, - "dependencies": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", - "dev": true, - "dependencies": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "node_modules/lodash.camelcase": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", - "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", - "dev": true, - "peer": true - }, - "node_modules/lodash.truncate": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", - "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", - "dev": true, - "peer": true - }, - "node_modules/log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "dev": true, - "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/log-symbols/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/log-symbols/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/log-symbols/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/log-symbols/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/log-symbols/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/log-symbols/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/loupe": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.6.tgz", - "integrity": "sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA==", - "dev": true, - "peer": true, - "dependencies": { - "get-func-name": "^2.0.0" - } - }, - "node_modules/lru_map": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/lru_map/-/lru_map-0.3.3.tgz", - "integrity": "sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ==", - "dev": true - }, - "node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "dependencies": { - "yallist": "^3.0.2" - } - }, - "node_modules/make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true, - "peer": true - }, - "node_modules/markdown-table": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-1.1.3.tgz", - "integrity": "sha512-1RUZVgQlpJSPWYbFSpmudq5nHY1doEIv89gBtF0s4gW1GF2XorxcA/70M5vq7rLv0a6mhOUccRsqkwhwLCIQ2Q==", - "dev": true - }, - "node_modules/mcl-wasm": { - "version": "0.7.9", - "resolved": "https://registry.npmjs.org/mcl-wasm/-/mcl-wasm-0.7.9.tgz", - "integrity": "sha512-iJIUcQWA88IJB/5L15GnJVnSQJmf/YaxxV6zRavv83HILHaJQb6y0iFyDMdDO0gN8X37tdxmAOrH/P8B6RB8sQ==", - "dev": true, - "engines": { - "node": ">=8.9.0" - } - }, - "node_modules/md5.js": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", - "dev": true, - "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "node_modules/memory-level": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/memory-level/-/memory-level-1.0.0.tgz", - "integrity": "sha512-UXzwewuWeHBz5krr7EvehKcmLFNoXxGcvuYhC41tRnkrTbJohtS7kVn9akmgirtRygg+f7Yjsfi8Uu5SGSQ4Og==", - "dev": true, - "dependencies": { - "abstract-level": "^1.0.0", - "functional-red-black-tree": "^1.0.1", - "module-error": "^1.0.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/memorystream": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", - "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==", - "dev": true, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, - "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dev": true, - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" - }, - "node_modules/minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==" - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dev": true, - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/mnemonist": { - "version": "0.38.5", - "resolved": "https://registry.npmjs.org/mnemonist/-/mnemonist-0.38.5.tgz", - "integrity": "sha512-bZTFT5rrPKtPJxj8KSV0WkPyNxl72vQepqqVUAW2ARUpUSF2qXMB6jZj7hW5/k7C1rtpzqbD/IIbJwLXUjCHeg==", - "dev": true, - "dependencies": { - "obliterator": "^2.0.0" - } - }, - "node_modules/mocha": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.2.0.tgz", - "integrity": "sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg==", - "dev": true, - "dependencies": { - "ansi-colors": "4.1.1", - "browser-stdout": "1.3.1", - "chokidar": "3.5.3", - "debug": "4.3.4", - "diff": "5.0.0", - "escape-string-regexp": "4.0.0", - "find-up": "5.0.0", - "glob": "7.2.0", - "he": "1.2.0", - "js-yaml": "4.1.0", - "log-symbols": "4.1.0", - "minimatch": "5.0.1", - "ms": "2.1.3", - "nanoid": "3.3.3", - "serialize-javascript": "6.0.0", - "strip-json-comments": "3.1.1", - "supports-color": "8.1.1", - "workerpool": "6.2.1", - "yargs": "16.2.0", - "yargs-parser": "20.2.4", - "yargs-unparser": "2.0.0" - }, - "bin": { - "_mocha": "bin/_mocha", - "mocha": "bin/mocha.js" - }, - "engines": { - "node": ">= 14.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mochajs" - } - }, - "node_modules/mocha/node_modules/ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/mocha/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/mocha/node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mocha/node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mocha/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/mocha/node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mocha/node_modules/minimatch": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", - "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/mocha/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, - "node_modules/mocha/node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mocha/node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mocha/node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/mocha/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/module-error": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/module-error/-/module-error-1.0.2.tgz", - "integrity": "sha512-0yuvsqSCv8LbaOKhnsQ/T5JhyFlCYLPXK3U2sgV10zoKQwzs/MyfuQUOZQ1V/6OCOJsK/TRgNVrPuPDqtdMFtA==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/nanoid": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz", - "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==", - "dev": true, - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/napi-macros": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/napi-macros/-/napi-macros-2.2.2.tgz", - "integrity": "sha512-hmEVtAGYzVQpCKdbQea4skABsdXW4RUh5t5mJ2zzqowJS2OyXZTU1KhDVFhx+NlWZ4ap9mqR9TcDO3LTTttd+g==", - "dev": true - }, - "node_modules/neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true - }, - "node_modules/node-addon-api": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz", - "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==", - "dev": true - }, - "node_modules/node-emoji": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.11.0.tgz", - "integrity": "sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==", - "dev": true, - "dependencies": { - "lodash": "^4.17.21" - } - }, - "node_modules/node-environment-flags": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/node-environment-flags/-/node-environment-flags-1.0.6.tgz", - "integrity": "sha512-5Evy2epuL+6TM0lCQGpFIj6KwiEsGh1SrHUhTbNX+sLbBtjidPZFAnVK9y5yU1+h//RitLbRHTIMyxQPtxMdHw==", - "dev": true, - "dependencies": { - "object.getownpropertydescriptors": "^2.0.3", - "semver": "^5.7.0" - } - }, - "node_modules/node-environment-flags/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/node-gyp-build": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.6.0.tgz", - "integrity": "sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ==", - "dev": true, - "bin": { - "node-gyp-build": "bin.js", - "node-gyp-build-optional": "optional.js", - "node-gyp-build-test": "build-test.js" - } - }, - "node_modules/nofilter": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/nofilter/-/nofilter-3.1.0.tgz", - "integrity": "sha512-l2NNj07e9afPnhAhvgVrCD/oy2Ai1yfLpuo3EpiO1jFTsB4sFz6oIfAfSZyQzVpkZQ9xS8ZS5g1jCBgq4Hwo0g==", - "dev": true, - "peer": true, - "engines": { - "node": ">=12.19" - } - }, - "node_modules/nopt": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", - "integrity": "sha512-4GUt3kSEYmk4ITxzB/b9vaIDfUVWN/Ml1Fwl11IlnIG2iaJ9O6WXZ9SrYM9NLI8OCBieN2Y8SWC2oJV0RQ7qYg==", - "dev": true, - "dependencies": { - "abbrev": "1" - }, - "bin": { - "nopt": "bin/nopt.js" - } - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/number-to-bn": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/number-to-bn/-/number-to-bn-1.7.0.tgz", - "integrity": "sha512-wsJ9gfSz1/s4ZsJN01lyonwuxA1tml6X1yBDnfpMglypcBRFZZkus26EdPSlqS5GJfYddVZa22p3VNb3z5m5Ig==", - "dev": true, - "dependencies": { - "bn.js": "4.11.6", - "strip-hex-prefix": "1.0.0" - }, - "engines": { - "node": ">=6.5.0", - "npm": ">=3" - } - }, - "node_modules/number-to-bn/node_modules/bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==", - "dev": true - }, - "node_modules/oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.12.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", - "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.assign": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", - "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", - "dev": true, - "dependencies": { - "define-properties": "^1.1.2", - "function-bind": "^1.1.1", - "has-symbols": "^1.0.0", - "object-keys": "^1.0.11" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.getownpropertydescriptors": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.6.tgz", - "integrity": "sha512-lq+61g26E/BgHv0ZTFgRvi7NMEPuAxLkFU7rukXjc/AlwH4Am5xXVnIXy3un1bg/JPbXHrixRkK1itUzzPiIjQ==", - "dev": true, - "dependencies": { - "array.prototype.reduce": "^1.0.5", - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.21.2", - "safe-array-concat": "^1.0.0" - }, - "engines": { - "node": ">= 0.8" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/obliterator": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/obliterator/-/obliterator-2.0.4.tgz", - "integrity": "sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ==", - "dev": true - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "dev": true, - "dependencies": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/ordinal": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/ordinal/-/ordinal-1.0.3.tgz", - "integrity": "sha512-cMddMgb2QElm8G7vdaa02jhUNbTSrhsgAGUz1OokD83uJTwSUn+nKoNoKVVaRa08yF6sgfO7Maou1+bgLd9rdQ==", - "dev": true, - "peer": true - }, - "node_modules/os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "dependencies": { - "p-try": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", - "dev": true, - "dependencies": { - "p-limit": "^1.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "dev": true, - "dependencies": { - "aggregate-error": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/parse-cache-control": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parse-cache-control/-/parse-cache-control-1.0.1.tgz", - "integrity": "sha512-60zvsJReQPX5/QP0Kzfd/VrpjScIQ7SHBW6bFCYfEP+fp0Eppr1SHhIO5nd1PjZtvclzSzES9D/p5nFJurwfWg==", - "dev": true - }, - "node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/pathval": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", - "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", - "dev": true, - "peer": true, - "engines": { - "node": "*" - } - }, - "node_modules/pbkdf2": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", - "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", - "dev": true, - "dependencies": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - }, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", - "dev": true - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/prettier": { - "version": "2.8.8", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", - "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", - "dev": true, - "bin": { - "prettier": "bin-prettier.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" - } - }, - "node_modules/prettier-plugin-solidity": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/prettier-plugin-solidity/-/prettier-plugin-solidity-1.1.3.tgz", - "integrity": "sha512-fQ9yucPi2sBbA2U2Xjh6m4isUTJ7S7QLc/XDDsktqqxYfTwdYKJ0EnnywXHwCGAaYbQNK+HIYPL1OemxuMsgeg==", - "dev": true, - "dependencies": { - "@solidity-parser/parser": "^0.16.0", - "semver": "^7.3.8", - "solidity-comments-extractor": "^0.0.7" - }, - "engines": { - "node": ">=12" - }, - "peerDependencies": { - "prettier": ">=2.3.0 || >=3.0.0-alpha.0" - } - }, - "node_modules/prettier-plugin-solidity/node_modules/@solidity-parser/parser": { - "version": "0.16.0", - "resolved": "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.16.0.tgz", - "integrity": "sha512-ESipEcHyRHg4Np4SqBCfcXwyxxna1DgFVz69bgpLV8vzl/NP1DtcKsJ4dJZXWQhY/Z4J2LeKBiOkOVZn9ct33Q==", - "dev": true, - "dependencies": { - "antlr4ts": "^0.5.0-alpha.4" - } - }, - "node_modules/prettier-plugin-solidity/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/prettier-plugin-solidity/node_modules/semver": { - "version": "7.5.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.2.tgz", - "integrity": "sha512-SoftuTROv/cRjCze/scjGyiDtcUyxw1rgYQSZY7XTmtR5hX+dm76iDbTH8TkLPHCQmlbQVSSbNZCPM2hb0knnQ==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/prettier-plugin-solidity/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true - }, - "node_modules/promise": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/promise/-/promise-8.3.0.tgz", - "integrity": "sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==", - "dev": true, - "dependencies": { - "asap": "~2.0.6" - } - }, - "node_modules/psl": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", - "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", - "dev": true - }, - "node_modules/punycode": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", - "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/qs": { - "version": "6.11.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.2.tgz", - "integrity": "sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==", - "dev": true, - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, - "node_modules/raw-body": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", - "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", - "dev": true, - "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", - "dev": true, - "dependencies": { - "resolve": "^1.1.6" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/recursive-readdir": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.3.tgz", - "integrity": "sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==", - "dev": true, - "dependencies": { - "minimatch": "^3.0.5" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/reduce-flatten": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-2.0.0.tgz", - "integrity": "sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w==", - "dev": true, - "peer": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/regexp.prototype.flags": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz", - "integrity": "sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "functions-have-names": "^1.2.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/req-cwd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/req-cwd/-/req-cwd-2.0.0.tgz", - "integrity": "sha512-ueoIoLo1OfB6b05COxAA9UpeoscNpYyM+BqYlA7H6LVF4hKGPXQQSSaD2YmvDVJMkk4UDpAHIeU1zG53IqjvlQ==", - "dev": true, - "dependencies": { - "req-from": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/req-from": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/req-from/-/req-from-2.0.0.tgz", - "integrity": "sha512-LzTfEVDVQHBRfjOUMgNBA+V6DWsSnoeKzf42J7l0xa/B4jyPOuuF5MlNSmomLNGemWTnV2TIdjSSLnEn95fOQA==", - "dev": true, - "dependencies": { - "resolve-from": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/request": { - "version": "2.88.2", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", - "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", - "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", - "dev": true, - "dependencies": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/request-promise-core": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.4.tgz", - "integrity": "sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw==", - "dev": true, - "dependencies": { - "lodash": "^4.17.19" - }, - "engines": { - "node": ">=0.10.0" - }, - "peerDependencies": { - "request": "^2.34" - } - }, - "node_modules/request-promise-native": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.9.tgz", - "integrity": "sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g==", - "deprecated": "request-promise-native has been deprecated because it extends the now deprecated request package, see https://github.com/request/request/issues/3142", - "dev": true, - "dependencies": { - "request-promise-core": "1.1.4", - "stealthy-require": "^1.1.1", - "tough-cookie": "^2.3.3" - }, - "engines": { - "node": ">=0.12.0" - }, - "peerDependencies": { - "request": "^2.34" - } - }, - "node_modules/request/node_modules/qs": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", - "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", - "dev": true, - "engines": { - "node": ">=0.6" - } - }, - "node_modules/request/node_modules/uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", - "dev": true, - "bin": { - "uuid": "bin/uuid" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "dev": true - }, - "node_modules/resolve": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", - "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", - "dev": true, - "dependencies": { - "path-parse": "^1.0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true, - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/ripemd160": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", - "dev": true, - "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" - } - }, - "node_modules/rlp": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/rlp/-/rlp-2.2.7.tgz", - "integrity": "sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ==", - "dev": true, - "dependencies": { - "bn.js": "^5.2.0" - }, - "bin": { - "rlp": "bin/rlp" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/run-parallel-limit": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/run-parallel-limit/-/run-parallel-limit-1.1.0.tgz", - "integrity": "sha512-jJA7irRNM91jaKc3Hcl1npHsFLOXOoTkPCUL1JEa1R82O2miplXXRaGdjW/KM/98YQWDhJLiSs793CnXfblJUw==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/rustbn.js": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/rustbn.js/-/rustbn.js-0.2.0.tgz", - "integrity": "sha512-4VlvkRUuCJvr2J6Y0ImW7NvTCriMi7ErOAqWk1y69vAdoNIzCF3yPmgeNzx+RQTLEDFq5sHfscn1MwHxP9hNfA==", - "dev": true - }, - "node_modules/safe-array-concat": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.0.tgz", - "integrity": "sha512-9dVEFruWIsnie89yym+xWTAYASdpw3CJV7Li/6zBewGf9z2i1j31rP6jnY0pHEO4QZh6N0K11bFjWmdR8UGdPQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.0", - "has-symbols": "^1.0.3", - "isarray": "^2.0.5" - }, - "engines": { - "node": ">=0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/safe-array-concat/node_modules/isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true - }, - "node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/safe-regex-test": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", - "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", - "is-regex": "^1.1.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "node_modules/sc-istanbul": { - "version": "0.4.6", - "resolved": "https://registry.npmjs.org/sc-istanbul/-/sc-istanbul-0.4.6.tgz", - "integrity": "sha512-qJFF/8tW/zJsbyfh/iT/ZM5QNHE3CXxtLJbZsL+CzdJLBsPD7SedJZoUA4d8iAcN2IoMp/Dx80shOOd2x96X/g==", - "dev": true, - "dependencies": { - "abbrev": "1.0.x", - "async": "1.x", - "escodegen": "1.8.x", - "esprima": "2.7.x", - "glob": "^5.0.15", - "handlebars": "^4.0.1", - "js-yaml": "3.x", - "mkdirp": "0.5.x", - "nopt": "3.x", - "once": "1.x", - "resolve": "1.1.x", - "supports-color": "^3.1.0", - "which": "^1.1.1", - "wordwrap": "^1.0.0" - }, - "bin": { - "istanbul": "lib/cli.js" - } - }, - "node_modules/sc-istanbul/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/sc-istanbul/node_modules/glob": { - "version": "5.0.15", - "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", - "integrity": "sha512-c9IPMazfRITpmAAKi22dK1VKxGDX9ehhqfABDriL/lzO92xcUKEJPQHrVA/2YHSNFB4iFlykVmWvwo48nr3OxA==", - "dev": true, - "dependencies": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - } - }, - "node_modules/sc-istanbul/node_modules/has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha512-DyYHfIYwAJmjAjSSPKANxI8bFY9YtFrgkAfinBojQ8YJTOuOuav64tMUJv584SES4xl74PmuaevIyaLESHdTAA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sc-istanbul/node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/sc-istanbul/node_modules/js-yaml/node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true, - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/sc-istanbul/node_modules/resolve": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", - "integrity": "sha512-9znBF0vBcaSN3W2j7wKvdERPwqTxSpCq+if5C0WoTCyV9n24rua28jeuQ2pL/HOf+yUe/Mef+H/5p60K0Id3bg==", - "dev": true - }, - "node_modules/sc-istanbul/node_modules/supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==", - "dev": true, - "dependencies": { - "has-flag": "^1.0.0" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/scrypt-js": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz", - "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==" - }, - "node_modules/secp256k1": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.3.tgz", - "integrity": "sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA==", - "dev": true, - "hasInstallScript": true, - "dependencies": { - "elliptic": "^6.5.4", - "node-addon-api": "^2.0.0", - "node-gyp-build": "^4.2.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/serialize-javascript": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", - "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", - "dev": true, - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", - "dev": true - }, - "node_modules/setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", - "dev": true - }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "dev": true - }, - "node_modules/sha.js": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", - "dev": true, - "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - }, - "bin": { - "sha.js": "bin.js" - } - }, - "node_modules/sha1": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/sha1/-/sha1-1.1.1.tgz", - "integrity": "sha512-dZBS6OrMjtgVkopB1Gmo4RQCDKiZsqcpAQpkV/aaj+FCrCg8r4I4qMkDPQjBgLIxlmu9k4nUbWq6ohXahOneYA==", - "dev": true, - "dependencies": { - "charenc": ">= 0.0.1", - "crypt": ">= 0.0.1" - }, - "engines": { - "node": "*" - } - }, - "node_modules/shelljs": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", - "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", - "dev": true, - "dependencies": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" - }, - "bin": { - "shjs": "bin/shjs" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "dev": true, - "peer": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" - } - }, - "node_modules/slice-ansi/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "peer": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/slice-ansi/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "peer": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/slice-ansi/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "peer": true - }, - "node_modules/solc": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/solc/-/solc-0.7.3.tgz", - "integrity": "sha512-GAsWNAjGzIDg7VxzP6mPjdurby3IkGCjQcM8GFYZT6RyaoUZKmMU6Y7YwG+tFGhv7dwZ8rmR4iwFDrrD99JwqA==", - "dev": true, - "dependencies": { - "command-exists": "^1.2.8", - "commander": "3.0.2", - "follow-redirects": "^1.12.1", - "fs-extra": "^0.30.0", - "js-sha3": "0.8.0", - "memorystream": "^0.3.1", - "require-from-string": "^2.0.0", - "semver": "^5.5.0", - "tmp": "0.0.33" - }, - "bin": { - "solcjs": "solcjs" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/solc/node_modules/fs-extra": { - "version": "0.30.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz", - "integrity": "sha512-UvSPKyhMn6LEd/WpUaV9C9t3zATuqoqfWc3QdPhPLb58prN9tqYPlPWi8Krxi44loBoUzlobqZ3+8tGpxxSzwA==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^2.1.0", - "klaw": "^1.0.0", - "path-is-absolute": "^1.0.0", - "rimraf": "^2.2.8" - } - }, - "node_modules/solc/node_modules/jsonfile": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", - "integrity": "sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw==", - "dev": true, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/solc/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/solidity-comments-extractor": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/solidity-comments-extractor/-/solidity-comments-extractor-0.0.7.tgz", - "integrity": "sha512-wciNMLg/Irp8OKGrh3S2tfvZiZ0NEyILfcRCXCD4mp7SgK/i9gzLfhY2hY7VMCQJ3kH9UB9BzNdibIVMchzyYw==", - "dev": true - }, - "node_modules/solidity-coverage": { - "version": "0.8.7", - "resolved": "https://registry.npmjs.org/solidity-coverage/-/solidity-coverage-0.8.7.tgz", - "integrity": "sha512-RzcPuNsIqVGq5F8rjQZPdI2EVdsRU7w2f1Uk1UY567n9eNcg5LSEQ3Q1WFoy9bi/2AD5SYbYK9SS/Nwh2oYbNw==", - "dev": true, - "dependencies": { - "@ethersproject/abi": "^5.0.9", - "@solidity-parser/parser": "^0.18.0", - "chalk": "^2.4.2", - "death": "^1.1.0", - "difflib": "^0.2.4", - "fs-extra": "^8.1.0", - "ghost-testrpc": "^0.0.2", - "global-modules": "^2.0.0", - "globby": "^10.0.1", - "jsonschema": "^1.2.4", - "lodash": "^4.17.15", - "mocha": "^10.2.0", - "node-emoji": "^1.10.0", - "pify": "^4.0.1", - "recursive-readdir": "^2.2.2", - "sc-istanbul": "^0.4.5", - "semver": "^7.3.4", - "shelljs": "^0.8.3", - "web3-utils": "^1.3.6" - }, - "bin": { - "solidity-coverage": "plugins/bin.js" - }, - "peerDependencies": { - "hardhat": "^2.11.0" - } - }, - "node_modules/solidity-coverage/node_modules/@solidity-parser/parser": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.18.0.tgz", - "integrity": "sha512-yfORGUIPgLck41qyN7nbwJRAx17/jAIXCTanHOJZhB6PJ1iAk/84b/xlsVKFSyNyLXIj0dhppoE0+CRws7wlzA==", - "dev": true - }, - "node_modules/solidity-coverage/node_modules/fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/solidity-coverage/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/solidity-coverage/node_modules/semver": { - "version": "7.5.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.2.tgz", - "integrity": "sha512-SoftuTROv/cRjCze/scjGyiDtcUyxw1rgYQSZY7XTmtR5hX+dm76iDbTH8TkLPHCQmlbQVSSbNZCPM2hb0knnQ==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/solidity-coverage/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dev": true, - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true - }, - "node_modules/sshpk": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", - "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", - "dev": true, - "dependencies": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - }, - "bin": { - "sshpk-conv": "bin/sshpk-conv", - "sshpk-sign": "bin/sshpk-sign", - "sshpk-verify": "bin/sshpk-verify" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sshpk/node_modules/tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", - "dev": true - }, - "node_modules/stacktrace-parser": { - "version": "0.1.10", - "resolved": "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz", - "integrity": "sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg==", - "dev": true, - "dependencies": { - "type-fest": "^0.7.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/stacktrace-parser/node_modules/type-fest": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.7.1.tgz", - "integrity": "sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/stealthy-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", - "integrity": "sha512-ZnWpYnYugiOVEY5GkcuJK1io5V8QmNYChG62gSit9pQVGErXtrKuPC55ITaVSukmMta5qpMU7vqLt2Lnni4f/g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/streamsearch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", - "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", - "dev": true, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/string_decoder/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/string-format": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/string-format/-/string-format-2.0.0.tgz", - "integrity": "sha512-bbEs3scLeYNXLecRRuk6uJxdXUSj6le/8rNPHChIJTn2V79aXVTR1EH2OH5zLKKoz0V02fOUKZZcw01pLUShZA==", - "dev": true, - "peer": true - }, - "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string.prototype.trim": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz", - "integrity": "sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimend": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", - "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", - "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-hex-prefix": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz", - "integrity": "sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A==", - "dev": true, - "dependencies": { - "is-hex-prefixed": "1.0.0" - }, - "engines": { - "node": ">=6.5.0", - "npm": ">=3" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/sync-request": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/sync-request/-/sync-request-6.1.0.tgz", - "integrity": "sha512-8fjNkrNlNCrVc/av+Jn+xxqfCjYaBoHqCsDz6mt030UMxJGr+GSfCV1dQt2gRtlL63+VPidwDVLr7V2OcTSdRw==", - "dev": true, - "dependencies": { - "http-response-object": "^3.0.1", - "sync-rpc": "^1.2.1", - "then-request": "^6.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/sync-rpc": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/sync-rpc/-/sync-rpc-1.3.6.tgz", - "integrity": "sha512-J8jTXuZzRlvU7HemDgHi3pGnh/rkoqR/OZSjhTyyZrEkkYQbk7Z33AXp37mkPfPpfdOuj7Ex3H/TJM1z48uPQw==", - "dev": true, - "dependencies": { - "get-port": "^3.1.0" - } - }, - "node_modules/table": { - "version": "6.8.1", - "resolved": "https://registry.npmjs.org/table/-/table-6.8.1.tgz", - "integrity": "sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA==", - "dev": true, - "peer": true, - "dependencies": { - "ajv": "^8.0.1", - "lodash.truncate": "^4.4.2", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/table-layout": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-1.0.2.tgz", - "integrity": "sha512-qd/R7n5rQTRFi+Zf2sk5XVVd9UQl6ZkduPFC3S7WEGJAmetDTjY3qPN50eSKzwuzEyQKy5TN2TiZdkIjos2L6A==", - "dev": true, - "peer": true, - "dependencies": { - "array-back": "^4.0.1", - "deep-extend": "~0.6.0", - "typical": "^5.2.0", - "wordwrapjs": "^4.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/table-layout/node_modules/array-back": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", - "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", - "dev": true, - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/table-layout/node_modules/typical": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", - "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", - "dev": true, - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/table/node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "dev": true, - "peer": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/table/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true, - "peer": true - }, - "node_modules/then-request": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/then-request/-/then-request-6.0.2.tgz", - "integrity": "sha512-3ZBiG7JvP3wbDzA9iNY5zJQcHL4jn/0BWtXIkagfz7QgOL/LqjCEOBQuJNZfu0XYnv5JhKh+cDxCPM4ILrqruA==", - "dev": true, - "dependencies": { - "@types/concat-stream": "^1.6.0", - "@types/form-data": "0.0.33", - "@types/node": "^8.0.0", - "@types/qs": "^6.2.31", - "caseless": "~0.12.0", - "concat-stream": "^1.6.0", - "form-data": "^2.2.0", - "http-basic": "^8.1.1", - "http-response-object": "^3.0.1", - "promise": "^8.0.0", - "qs": "^6.4.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/then-request/node_modules/@types/node": { - "version": "8.10.66", - "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.66.tgz", - "integrity": "sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw==", - "dev": true - }, - "node_modules/tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dev": true, - "dependencies": { - "os-tmpdir": "~1.0.2" - }, - "engines": { - "node": ">=0.6.0" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "dev": true, - "engines": { - "node": ">=0.6" - } - }, - "node_modules/tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "dev": true, - "dependencies": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/ts-command-line-args": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/ts-command-line-args/-/ts-command-line-args-2.5.1.tgz", - "integrity": "sha512-H69ZwTw3rFHb5WYpQya40YAX2/w7Ut75uUECbgBIsLmM+BNuYnxsltfyyLMxy6sEeKxgijLTnQtLd0nKd6+IYw==", - "dev": true, - "peer": true, - "dependencies": { - "chalk": "^4.1.0", - "command-line-args": "^5.1.1", - "command-line-usage": "^6.1.0", - "string-format": "^2.0.0" - }, - "bin": { - "write-markdown": "dist/write-markdown.js" - } - }, - "node_modules/ts-command-line-args/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "peer": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/ts-command-line-args/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "peer": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/ts-command-line-args/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "peer": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/ts-command-line-args/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "peer": true - }, - "node_modules/ts-command-line-args/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/ts-command-line-args/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "peer": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ts-essentials": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/ts-essentials/-/ts-essentials-7.0.3.tgz", - "integrity": "sha512-8+gr5+lqO3G84KdiTSMRLtuyJ+nTBVRKuCrK4lidMPdVeEp0uqC875uE5NMcaA7YYMN7XsNiFQuMvasF8HT/xQ==", - "dev": true, - "peer": true, - "peerDependencies": { - "typescript": ">=3.7.0" - } - }, - "node_modules/ts-node": { - "version": "10.9.1", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", - "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", - "dev": true, - "peer": true, - "dependencies": { - "@cspotcode/source-map-support": "^0.8.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.1", - "yn": "3.1.1" - }, - "bin": { - "ts-node": "dist/bin.js", - "ts-node-cwd": "dist/bin-cwd.js", - "ts-node-esm": "dist/bin-esm.js", - "ts-node-script": "dist/bin-script.js", - "ts-node-transpile-only": "dist/bin-transpile.js", - "ts-script": "dist/bin-script-deprecated.js" - }, - "peerDependencies": { - "@swc/core": ">=1.2.50", - "@swc/wasm": ">=1.2.50", - "@types/node": "*", - "typescript": ">=2.7" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "@swc/wasm": { - "optional": true - } - } - }, - "node_modules/ts-node/node_modules/diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true, - "peer": true, - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "node_modules/tsort": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/tsort/-/tsort-0.0.1.tgz", - "integrity": "sha512-Tyrf5mxF8Ofs1tNoxA13lFeZ2Zrbd6cKbuH3V+MQ5sb6DtBj5FjrXVsRWT8YvNAQTqNoz66dz1WsbigI22aEnw==", - "dev": true - }, - "node_modules/tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", - "dev": true, - "dependencies": { - "safe-buffer": "^5.0.1" - }, - "engines": { - "node": "*" - } - }, - "node_modules/tweetnacl": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", - "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==", - "dev": true - }, - "node_modules/tweetnacl-util": { - "version": "0.15.1", - "resolved": "https://registry.npmjs.org/tweetnacl-util/-/tweetnacl-util-0.15.1.tgz", - "integrity": "sha512-RKJBIj8lySrShN4w6i/BonWp2Z/uxwC3h4y7xsRrpP59ZboCd0GpEVsOnMDYLMmKBpYhb5TgHzZXy7wTfYFBRw==", - "dev": true - }, - "node_modules/type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", - "dev": true, - "dependencies": { - "prelude-ls": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true, - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/typechain": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/typechain/-/typechain-8.2.0.tgz", - "integrity": "sha512-tZqhqjxJ9xAS/Lh32jccTjMkpx7sTdUVVHAy5Bf0TIer5QFNYXotiX74oCvoVYjyxUKDK3MXHtMFzMyD3kE+jg==", - "dev": true, - "peer": true, - "dependencies": { - "@types/prettier": "^2.1.1", - "debug": "^4.3.1", - "fs-extra": "^7.0.0", - "glob": "7.1.7", - "js-sha3": "^0.8.0", - "lodash": "^4.17.15", - "mkdirp": "^1.0.4", - "prettier": "^2.3.1", - "ts-command-line-args": "^2.2.0", - "ts-essentials": "^7.0.1" - }, - "bin": { - "typechain": "dist/cli/cli.js" - }, - "peerDependencies": { - "typescript": ">=4.3.0" - } - }, - "node_modules/typechain/node_modules/glob": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", - "dev": true, - "peer": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/typechain/node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true, - "peer": true, - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/typed-array-length": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", - "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "is-typed-array": "^1.1.9" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", - "dev": true - }, - "node_modules/typescript": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.3.tgz", - "integrity": "sha512-XH627E9vkeqhlZFQuL+UsyAXEnibT0kWR2FWONlr4sTjvxyJYnyefgrkyECLzM5NenmKzRAy2rR/OlYLA1HkZw==", - "dev": true, - "peer": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/typical": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/typical/-/typical-4.0.0.tgz", - "integrity": "sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==", - "dev": true, - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/uglify-js": { - "version": "3.17.4", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz", - "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==", - "dev": true, - "optional": true, - "bin": { - "uglifyjs": "bin/uglifyjs" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/unbox-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/undici": { - "version": "5.22.1", - "resolved": "https://registry.npmjs.org/undici/-/undici-5.22.1.tgz", - "integrity": "sha512-Ji2IJhFXZY0x/0tVBXeQwgPlLWw13GVzpsWPQ3rV50IFMMof2I55PZZxtm4P6iNq+L5znYN9nSTAq0ZyE6lSJw==", - "dev": true, - "dependencies": { - "busboy": "^1.6.0" - }, - "engines": { - "node": ">=14.0" - } - }, - "node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/utf8": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz", - "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==", - "dev": true - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true - }, - "node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true, - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/v8-compile-cache-lib": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", - "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", - "dev": true, - "peer": true - }, - "node_modules/verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", - "dev": true, - "engines": [ - "node >=0.6.0" - ], - "dependencies": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, - "node_modules/web3-utils": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.10.0.tgz", - "integrity": "sha512-kSaCM0uMcZTNUSmn5vMEhlo02RObGNRRCkdX0V9UTAU0+lrvn0HSaudyCo6CQzuXUsnuY2ERJGCGPfeWmv19Rg==", - "dev": true, - "dependencies": { - "bn.js": "^5.2.1", - "ethereum-bloom-filters": "^1.0.6", - "ethereumjs-util": "^7.1.0", - "ethjs-unit": "0.1.6", - "number-to-bn": "1.7.0", - "randombytes": "^2.1.0", - "utf8": "3.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-utils/node_modules/ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "dev": true, - "dependencies": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" - } - }, - "node_modules/web3-utils/node_modules/ethereumjs-util": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", - "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", - "dev": true, - "dependencies": { - "@types/bn.js": "^5.1.0", - "bn.js": "^5.1.2", - "create-hash": "^1.1.2", - "ethereum-cryptography": "^0.1.3", - "rlp": "^2.2.4" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "dev": true, - "dependencies": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-module": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz", - "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==", - "dev": true - }, - "node_modules/which-typed-array": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", - "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", - "dev": true, - "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0", - "is-typed-array": "^1.1.10" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/wide-align": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", - "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", - "dev": true, - "dependencies": { - "string-width": "^1.0.2 || 2" - } - }, - "node_modules/wide-align/node_modules/ansi-regex": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", - "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/wide-align/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/wide-align/node_modules/string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "dependencies": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/wide-align/node_modules/strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", - "dev": true, - "dependencies": { - "ansi-regex": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", - "dev": true - }, - "node_modules/wordwrapjs": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-4.0.1.tgz", - "integrity": "sha512-kKlNACbvHrkpIw6oPeYDSmdCTu2hdMHoyXLTcUKala++lx5Y+wjJ/e474Jqv5abnVmwxw08DiTuHmw69lJGksA==", - "dev": true, - "peer": true, - "dependencies": { - "reduce-flatten": "^2.0.0", - "typical": "^5.2.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/wordwrapjs/node_modules/typical": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", - "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", - "dev": true, - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/workerpool": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz", - "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==", - "dev": true - }, - "node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/wrap-ansi/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true - }, - "node_modules/ws": { - "version": "7.5.9", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", - "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", - "dev": true, - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/xmlhttprequest": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz", - "integrity": "sha512-58Im/U0mlVBLM38NdZjHyhuMtCqa61469k2YP/AaPbvCoV9aQGUpbJBj1QRm2ytRiVQBD/fsw7L2bJGDVQswBA==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - }, - "node_modules/yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs-parser": { - "version": "20.2.4", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", - "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs-unparser": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", - "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", - "dev": true, - "dependencies": { - "camelcase": "^6.0.0", - "decamelize": "^4.0.0", - "flat": "^5.0.2", - "is-plain-obj": "^2.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "dev": true, - "peer": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - } - } -} diff --git a/contracts/package.json b/contracts/package.json deleted file mode 100644 index 366698b5..00000000 --- a/contracts/package.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "name": "hardhat-project", - "dependencies": { - "@openzeppelin/contracts": "^4.9.2", - "dotenv": "^16.3.1", - "ethers": "^5.6.9" - }, - "devDependencies": { - "@nomicfoundation/hardhat-network-helpers": "^1.0.8", - "@nomicfoundation/hardhat-toolbox": "^2.0.2", - "hardhat": "^2.16.0", - "hardhat-gas-reporter": "^1.0.9", - "prettier": "^2.8.8", - "prettier-plugin-solidity": "^1.1.3", - "solidity-coverage": "^0.8.7" - } -} diff --git a/contracts/scripts/deploy.ts b/contracts/scripts/deploy.ts deleted file mode 100644 index a5d92dff..00000000 --- a/contracts/scripts/deploy.ts +++ /dev/null @@ -1,103 +0,0 @@ -import { ethers } from "hardhat"; -import hre from "hardhat"; - -type Deployment = { - address: string; -}; - -type Deployments = { - [network: number]: Deployment; -}; - -async function main() { - const verifyingKey = await ethers.deployContract( - "src/VerifyingKey.sol:Halo2VerifyingKey" - ); - await verifyingKey.deployed(); - - const snarkVerifier = await ethers.deployContract( - "src/SnarkVerifier.sol:Verifier" - ); - await snarkVerifier.deployed(); - - const grandSumVerifier = await ethers.deployContract( - "src/GrandSumVerifier.sol:GrandSumVerifier" - ); - await grandSumVerifier.deployed(); - - const inclusionVerifier = await ethers.deployContract( - "src/InclusionVerifier.sol:InclusionVerifier" - ); - await inclusionVerifier.deployed(); - - // The number of cryptocurrencies in the balance polynomials - const currenciesCount = 2; - // The number of bytes used to represent the balance of a cryptocurrency in the polynomials - const balanceByteRange = 8; - const summa = await ethers.deployContract("Summa", [ - verifyingKey.address, - snarkVerifier.address, - grandSumVerifier.address, - inclusionVerifier.address, - ["ETH", "USDT"], // cryptocurrency names - ["ETH", "ETH"], // cryptocurrency chain - balanceByteRange, - ]); - - await summa.deployed(); - - console.log(`Summa deployed to ${summa.address}`); - - let deploymentsJson: Deployments = {}; - const fs = require("fs"); - try { - const deploymentsRaw = fs.readFileSync( - "../backend/src/contracts/deployments.json", - "utf8" - ); - deploymentsJson = JSON.parse(deploymentsRaw); - // Removing the previous deployment from the JSON file - if (deploymentsJson[hre.network.config.chainId ?? 0]) - delete deploymentsJson[hre.network.config.chainId ?? 0]; - } catch (error) { - console.log("No previous deployments found"); - } - // Adding the new deployment to the previous deployments, indexed by network ID - const newDeployment = { - // Getting the contract address - address: summa.address, - }; - const deployments = { - ...deploymentsJson, - [hre.network.config.chainId ?? 0]: newDeployment, - }; - const deploymentsStringified = JSON.stringify(deployments); - //Save the contract address to a JSON file in backend src directory - fs.writeFileSync( - "../backend/src/contracts/deployments.json", - deploymentsStringified - ); - - //Copy the ABIs from `artifacts/src/*` to `backend/src/contracts/*` - copyAbi(fs, "Summa", "Summa"); - copyAbi(fs, "VerifyingKey", "Halo2VerifyingKey"); - copyAbi(fs, "SnarkVerifier", "Verifier"); - copyAbi(fs, "GrandSumVerifier", "GrandSumVerifier"); - copyAbi(fs, "InclusionVerifier", "InclusionVerifier"); -} - -// We recommend this pattern to be able to use async/await everywhere -// and properly handle errors. -main().catch((error) => { - console.error(error); - process.exitCode = 1; -}); - -function copyAbi(fs: any, filename: string, contractName: string) { - const abi = require(`../artifacts/src/${filename}.sol/${contractName}.json`); - const abiStringified = JSON.stringify(abi); - fs.writeFileSync( - `../backend/src/contracts/abi/${filename}.json`, - abiStringified - ); -} diff --git a/contracts/src/DummyVerifyingKey.sol b/contracts/src/DummyVerifyingKey.sol deleted file mode 100644 index d7db2109..00000000 --- a/contracts/src/DummyVerifyingKey.sol +++ /dev/null @@ -1,136 +0,0 @@ -// SPDX-License-Identifier: MIT - -pragma solidity ^0.8.0; - -contract Halo2VerifyingKey { - constructor() { - assembly { - mstore( - 0x0000, - 0x0f4282e55a789d94ea57d4e200623dabb7ea67c998749f0370c890ab9ee6883f - ) // vk_digest - mstore( - 0x0020, - 0x0000000000000000000000000000000000000000000000000000000000000011 - ) // k - mstore( - 0x0040, - 0x30643640b9f82f90e83b698e5ea6179c7c05542e859533b48b9953a2f5360801 - ) // n_inv - mstore( - 0x0060, - 0x304cd1e79cfa5b0f054e981a27ed7706e7ea6b06a7f266ef8db819c179c2c3ea - ) // omega - mstore( - 0x0080, - 0x193586da872cdeff023d6ab2263a131b4780db8878be3c3b7f8f019c06fcb0fb - ) // omega_inv - mstore( - 0x00a0, - 0x299110e6835fd73731fb3ce6de87151988da403c265467a96b9cda0d7daa72e4 - ) // omega_inv_to_l - mstore( - 0x00c0, - 0x0000000000000000000000000000000000000000000000000000000000000001 - ) // num_instances - mstore( - 0x00e0, - 0x0000000000000000000000000000000000000000000000000000000000000000 - ) // has_accumulator - mstore( - 0x0100, - 0x0000000000000000000000000000000000000000000000000000000000000000 - ) // acc_offset - mstore( - 0x0120, - 0x0000000000000000000000000000000000000000000000000000000000000000 - ) // num_acc_limbs - mstore( - 0x0140, - 0x0000000000000000000000000000000000000000000000000000000000000000 - ) // num_acc_limb_bits - mstore( - 0x0160, - 0x0000000000000000000000000000000000000000000000000000000000000001 - ) // g1_x - mstore( - 0x0180, - 0x0000000000000000000000000000000000000000000000000000000000000002 - ) // g1_y - mstore( - 0x01a0, - 0x198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c2 - ) // g2_x_1 - mstore( - 0x01c0, - 0x1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed - ) // g2_x_2 - mstore( - 0x01e0, - 0x090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b - ) // g2_y_1 - mstore( - 0x0200, - 0x12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa - ) // g2_y_2 - mstore( - 0x0220, - 0x26186a2d65ee4d2f9c9a5b91f86597d35f192cd120caf7e935d8443d1938e23d - ) // neg_s_g2_x_1 - mstore( - 0x0240, - 0x30441fd1b5d3370482c42152a8899027716989a6996c2535bc9f7fee8aaef79e - ) // neg_s_g2_x_2 - mstore( - 0x0260, - 0x16f363f103c80d7bbc8ad3c6867e0822bbc6000be91a4689755c7df40221c145 - ) // neg_s_g2_y_1 - mstore( - 0x0280, - 0x2b1cbb3e521edf5a622d82762a44a5e63f1e50b332d71154a4a7958d6011deff - ) // neg_s_g2_y_2 - mstore( - 0x02a0, - 0x1404a2d17cd02c8f9fd79d74ac73c67d1881e62c6af354fa74d235c5e37dacfe - ) // fixed_comms[0].x - mstore( - 0x02c0, - 0x2c1e30781f735e7977820d4ca9145010e28dcc808ee0f1e976477289057b7aec - ) // fixed_comms[0].y - mstore( - 0x02e0, - 0x1b20314062560deca1b1bada262dbe3352a521ea2ef8973476cb7ad6f588c59d - ) // permutation_comms[0].x - mstore( - 0x0300, - 0x244ac9f0848be84d5a85e3c4e62e2a371ac7be27d68202ef3fe79541021ab99d - ) // permutation_comms[0].y - mstore( - 0x0320, - 0x2b1f7e2148bfab601e68f2e8133b9d05c10a9526d686b356b761eaa3713a70ba - ) // permutation_comms[1].x - mstore( - 0x0340, - 0x013345ea09966b06e4ae7d7e2919ddbb6e3f7e645aea515375ed729bff644dc5 - ) // permutation_comms[1].y - mstore( - 0x0360, - 0x27a7a66087a8c17b00ffb7fe9b76ba2199ca308bcb0ad100fa181886d6c9b936 - ) // permutation_comms[2].x - mstore( - 0x0380, - 0x23bc951a3c4307384bdec5d61be122a19c933db3266d6327a472e5203a9f785a - ) // permutation_comms[2].y - mstore( - 0x03a0, - 0x0743ea40f14084db2673217283aa053f986896ee7c181f52118442e99c452974 - ) // permutation_comms[3].x - mstore( - 0x03c0, - 0x0203e3493a2594ece57d22cc75dd081ac68271ec7c758153cfd2152bfb5c19e3 - ) // permutation_comms[3].y - - return(0, 0x03e0) - } - } -} diff --git a/contracts/src/GrandSumVerifier.sol b/contracts/src/GrandSumVerifier.sol deleted file mode 100644 index cfd2f3df..00000000 --- a/contracts/src/GrandSumVerifier.sol +++ /dev/null @@ -1,163 +0,0 @@ -// SPDX-License-Identifier: MIT - -pragma solidity ^0.8.0; - -contract GrandSumVerifier { - // Calldata positions for proofs - uint256 internal constant PROOF_LEN_CPTR = 0x64; - uint256 internal constant PROOF_CPTR = 0x84; - - // Memory positions for the verifying key. - // The memory location starts at 0x200 due to the maximum operation on the ec_pairing function being 0x180, marking the maximum memory location used - uint256 internal constant N_INV_MPTR = 0x220; - uint256 internal constant LHS_X_MPTR = 0x240; - uint256 internal constant LHS_Y_MPTR = 0x260; - uint256 internal constant G1_X_MPTR = 0x280; - uint256 internal constant G1_Y_MPTR = 0x2a0; - uint256 internal constant G2_X_1_MPTR = 0x2c0; - uint256 internal constant G2_X_2_MPTR = 0x2e0; - uint256 internal constant G2_Y_1_MPTR = 0x300; - uint256 internal constant G2_Y_2_MPTR = 0x320; - uint256 internal constant NEG_S_G2_X_1_MPTR = 0x340; - uint256 internal constant NEG_S_G2_X_2_MPTR = 0x360; - uint256 internal constant NEG_S_G2_Y_1_MPTR = 0x380; - uint256 internal constant NEG_S_G2_Y_2_MPTR = 0x3a0; - - - - function verifyProof( - address vk, - bytes calldata proof, - uint256[] calldata values - ) public returns (bool) { - assembly { - // Check if EC point (x, y) is on the curve. - // if the point is on the affine plane, it then returns updated (success). - function check_ec_point(success, proof_cptr, q) -> ret { - let x := calldataload(proof_cptr) - let y := calldataload(add(proof_cptr, 0x20)) - ret := and(success, lt(x, q)) - ret := and(ret, lt(y, q)) - ret := and(ret, eq(mulmod(y, y, q), addmod(mulmod(x, mulmod(x, x, q), q), 3, q))) - } - - // Add (x, y) into point at (0x80, 0xa0). - // Return updated (success). - function ec_add_tmp(success, x, y) -> ret { - mstore(0xc0, x) - mstore(0xe0, y) - ret := and(success, staticcall(gas(), 0x06, 0x80, 0x80, 0x80, 0x40)) - } - - // Scale point at (0x80, 0xa0) by scalar. - // Return updated (success). - function ec_mul_tmp(success, scalar) -> ret { - mstore(0xc0, scalar) - ret := and(success, staticcall(gas(), 0x07, 0x80, 0x60, 0x80, 0x40)) - } - - // Perform pairing check. - // Return updated (success). - function ec_pairing(success, lhs_x, lhs_y, rhs_x, rhs_y) -> ret { - mstore(0x00, lhs_x) - mstore(0x20, lhs_y) - mstore(0x40, mload(G2_X_1_MPTR)) - mstore(0x60, mload(G2_X_2_MPTR)) - mstore(0x80, mload(G2_Y_1_MPTR)) - mstore(0xa0, mload(G2_Y_2_MPTR)) - mstore(0xc0, rhs_x) - mstore(0xe0, rhs_y) - mstore(0x100, mload(NEG_S_G2_X_1_MPTR)) - mstore(0x120, mload(NEG_S_G2_X_2_MPTR)) - mstore(0x140, mload(NEG_S_G2_Y_1_MPTR)) - mstore(0x160, mload(NEG_S_G2_Y_2_MPTR)) - ret := and(success, staticcall(gas(), 0x08, 0x00, 0x180, 0x00, 0x20)) - ret := and(ret, mload(0x00)) - } - - // Modulus - let q := 21888242871839275222246405745257275088696311157297823662689037894645226208583 // BN254 base field - let r := 21888242871839275222246405745257275088548364400416034343698204186575808495617 // BN254 scalar field - - // Initialize success as true - let success := true - - // Copy part of the verifying key contract into memory. - extcodecopy(vk, N_INV_MPTR, 0x40, 0x020) - // The address 0x02a0(= 0x160 + 0x140) indicates the memory location to which `neg_s_g2` points in the verifying key contract - extcodecopy(vk, G1_X_MPTR, 0x160, 0x140) - - // The proof length should be divisible by `0x80` bytes, equivalent to four words. - // - // The proof is structured as follows: - // 2W * n: Commitment points in the SNARK proof. - // 2W * n: Points in the opening proof. - // 1W : Length of evaluation values. - // 1W * n: Evaluation values. - // - // Where W is refers to a Word, which is 32 bytes. - // And 'n' denotes the number of commitments as well as the number of evaluation values. - let proof_length := calldataload(PROOF_LEN_CPTR) - - // Ensure the proof length is divisible by `0x80`, accommodating the structured data layout. - success := and(success, eq(0, mod(proof_length, 0x80))) - if iszero(success) { - mstore(0, "Invalid proof length") - revert(0, 0x20) - } - - // Load the length of evaluation values, positioned after the proof data. - let evaluation_values_length_pos := add(add(PROOF_LEN_CPTR, proof_length), 0x20) - let evaluation_values_length := calldataload(evaluation_values_length_pos) - - // The proof length should match 4 times the length of the evaluation values. - success := and(success, eq(4, div(proof_length, mul(evaluation_values_length, 0x20)))) - if iszero(success) { - mstore(0, "Number of evaluation mismatch") - revert(0, 0x20) - } - - for { let i := 0 } lt(i, evaluation_values_length) { i := add(i, 1) } { - let shift_pos := mul(i, 0x20) - let double_shift_pos := mul(shift_pos, 2) // for next point - let total_balance := calldataload(add(evaluation_values_length_pos, add(shift_pos, 0x20))) - - // The `z` is evaluated with 'total_balance' multiply by `N_INV` - // The `N_INV` is equivalent to `Fp::from(poly_length).invert().unwrap()` as input on the `open_grand_sums` function in Rust implementation. - let z := mulmod(total_balance, mload(N_INV_MPTR), r) - let minus_z := sub(r, z) - - // Assign values on memory for multiplication - mstore(0x80, mload(G1_X_MPTR)) - mstore(0xa0, mload(G1_Y_MPTR)) - success := and(success, ec_mul_tmp(success, minus_z)) - - // Performaing `c_g_to_minus_z := c + g_to_minus_z` - // `c` is equivalent to `commitment` as input on the `open_grand_sums` function. - // the values of 'g_to_minus_z` is already located at 0x80 and 0xa0 in the previous step - let commitment_proof_pos := add(add(PROOF_CPTR, div(proof_length, 2)), double_shift_pos) - success := check_ec_point(success, commitment_proof_pos, q) - - let lhs_x := calldataload(commitment_proof_pos) // C_X - let lhs_y := calldataload(add(commitment_proof_pos, 0x20)) // C_Y - success := ec_add_tmp(success, lhs_x, lhs_y) - - // Store LHS_X and LHS_Y to memory - mstore(LHS_X_MPTR, mload(0x80)) - mstore(LHS_Y_MPTR, mload(0xa0)) - - // Checking from calldata for grand sum proof - let proof_pos := add(PROOF_CPTR, double_shift_pos) - success := check_ec_point(success, proof_pos, q) - - let rhs_x := calldataload(proof_pos) // PI_X - let rhs_y := calldataload(add(proof_pos, 0x20)) // PI_Y - success := and(success, ec_pairing(success, mload(LHS_X_MPTR), mload(LHS_Y_MPTR), rhs_x, rhs_y)) - } - - // Return 1 as result if everything succeeds - mstore(0x00, success) - return(0x00, 0x20) - } - } -} diff --git a/contracts/src/InclusionVerifier.sol b/contracts/src/InclusionVerifier.sol deleted file mode 100644 index e84b41cc..00000000 --- a/contracts/src/InclusionVerifier.sol +++ /dev/null @@ -1,166 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -contract InclusionVerifier { - // Calldata positions for proofs - uint256 internal constant PROOF_LEN_CPTR = 0x84; - uint256 internal constant PROOF_CPTR = 0xa4; - - // Memory positions for the verifying key. - // The memory location starts at 0x200 due to the maximum operation on the ec_pairing function being 0x180. - uint256 internal constant LHS_X_MPTR = 0x200; - uint256 internal constant LHS_Y_MPTR = 0x220; - uint256 internal constant G1_X_MPTR = 0x240; - uint256 internal constant G1_Y_MPTR = 0x260; - uint256 internal constant G2_X_1_MPTR = 0x280; - uint256 internal constant G2_X_2_MPTR = 0x2a0; - uint256 internal constant G2_Y_1_MPTR = 0x2c0; - uint256 internal constant G2_Y_2_MPTR = 0x2e0; - uint256 internal constant NEG_S_G2_X_1_MPTR = 0x300; - uint256 internal constant NEG_S_G2_X_2_MPTR = 0x320; - uint256 internal constant NEG_S_G2_Y_1_MPTR = 0x340; - uint256 internal constant NEG_S_G2_Y_2_MPTR = 0x360; - - function verifyProof( - address vk, - bytes calldata proofs, - uint256[] calldata challenges, - uint256[] calldata values - ) public view returns (bool) { - assembly { - // Check EC point (x, y) is on the curve. - // the point is on affine plane, and then return success. - function check_ec_point(success, proof_cptr, q) -> ret { - let x := calldataload(proof_cptr) - let y := calldataload(add(proof_cptr, 0x20)) - ret := and(success, lt(x, q)) - ret := and(ret, lt(y, q)) - ret := and(ret, eq(mulmod(y, y, q), addmod(mulmod(x, mulmod(x, x, q), q), 3, q))) - } - - // Add (x, y) into point at (0x80, 0xa0). - // Return updated (success). - function ec_add_tmp(success, x, y) -> ret { - mstore(0xc0, x) - mstore(0xe0, y) - ret := and(success, staticcall(gas(), 0x06, 0x80, 0x80, 0x80, 0x40)) - } - - // Scale point at (0x80, 0xa0) by scalar. - // Return updated (success). - function ec_mul_tmp(success, scalar) -> ret { - mstore(0xc0, scalar) - ret := and(success, staticcall(gas(), 0x07, 0x80, 0x60, 0x80, 0x40)) - } - - // Perform pairing check. - function ec_pairing(success, lhs_x, lhs_y, rhs_x, rhs_y) -> ret { - mstore(0x00, lhs_x) - mstore(0x20, lhs_y) - mstore(0x40, mload(G2_X_1_MPTR)) - mstore(0x60, mload(G2_X_2_MPTR)) - mstore(0x80, mload(G2_Y_1_MPTR)) - mstore(0xa0, mload(G2_Y_2_MPTR)) - mstore(0xc0, rhs_x) - mstore(0xe0, rhs_y) - mstore(0x100, mload(NEG_S_G2_X_1_MPTR)) - mstore(0x120, mload(NEG_S_G2_X_2_MPTR)) - mstore(0x140, mload(NEG_S_G2_Y_1_MPTR)) - mstore(0x160, mload(NEG_S_G2_Y_2_MPTR)) - ret := and(success, staticcall(gas(), 0x08, 0x00, 0x180, 0x00, 0x20)) - ret := and(ret, mload(0x00)) - } - - // Modulus - let q := 21888242871839275222246405745257275088696311157297823662689037894645226208583 // BN254 base field - let r := 21888242871839275222246405745257275088548364400416034343698204186575808495617 // BN254 scalar field - - // Initialize success as true - let success := true - - // Copy the six variables from the verifying key up to the memory address 0x200 (= 0x160 + 0xc0), where `g2_y_2` is located. - extcodecopy(vk, G1_X_MPTR, 0x160, 0xc0) - - // The proof length should be divisible by `0x80` bytes, equivalent to four words. - // The proof is structured as follows: - // 2W * n: Commitment points in the SNARK proof. - // 2W * n: Points in the opening proof. - // where W is referred to as a Word, which is 32 bytes. - // and `n` denotes the number of commitments as well as the number of evaluation values. - let proof_length := calldataload(PROOF_LEN_CPTR) - - // Ensure the proof length is divisible by `0x80`, accommodating the structured data layout. - success := and(success, eq(0, mod(proof_length, 0x80))) - if iszero(success) { - revert(0, 0) - } - - // Load the NEG_S_G2 point with the calculated point - let challenges_length_pos := add(add(PROOF_LEN_CPTR, proof_length), 0x20) - let challenges_length := calldataload(challenges_length_pos) - success := and(success, eq(challenges_length, 4)) - if iszero(success) { - revert(0, 0) - } - - mstore(NEG_S_G2_X_1_MPTR, calldataload(add(challenges_length_pos, 0x20))) - mstore(NEG_S_G2_X_2_MPTR, calldataload(add(challenges_length_pos, 0x40))) - mstore(NEG_S_G2_Y_1_MPTR, calldataload(add(challenges_length_pos, 0x60))) - mstore(NEG_S_G2_Y_2_MPTR, calldataload(add(challenges_length_pos, 0x80))) - - // Load the length of evaluation values, positioned after the proof data. - let evaluation_values_length_pos := add(add(challenges_length_pos, mul(challenges_length, 0x20)), 0x20) - let evaluation_values_length := calldataload(evaluation_values_length_pos) - - // The proof length should match 4 times the length of the evaluation values. - success := and(success, eq(4, div(proof_length, mul(evaluation_values_length, 0x20)))) - if iszero(success) { - revert(0, 0) - } - - for { let i := 0 } lt(i, evaluation_values_length) { i := add(i, 1) } { - let shift_pos := mul(i, 0x20) - let double_shift_pos := mul(i, 0x40) // for next point - - let value := calldataload(add(evaluation_values_length_pos, add(shift_pos, 0x20))) - let minus_z := sub(r, value) - - // Assign values on memory for multiplication - mstore(0x80, mload(G1_X_MPTR)) - mstore(0xa0, mload(G1_Y_MPTR)) - mstore(0xc0, minus_z) - success := and(success, ec_mul_tmp(success, minus_z)) - - // Performaing like `c_g_to_minus_z = c + g_to_minus_z` in `verify_kzg_proof` function that is located in `amortized_kzg.rs`. - // - // The `c` refers to `commitment` as input likes in the `open_grand_sums` function. - // The values of 'g_to_minus_z` is already located at 0x80 and 0xa0 in the previous step - let commitment_proof_pos := add(add(PROOF_CPTR, div(proof_length, 2)), double_shift_pos) - success := check_ec_point(success, commitment_proof_pos, q) - - let lhs_x := calldataload(commitment_proof_pos) // C_X - let lhs_y := calldataload(add(commitment_proof_pos, 0x20)) // C_Y - success := ec_add_tmp(success, lhs_x, lhs_y) - if iszero(success) { - revert(0, 0) - } - - mstore(LHS_X_MPTR, mload(0x80)) - mstore(LHS_Y_MPTR, mload(0xa0)) - - // Checking from calldata - let proof_pos := add(PROOF_CPTR, double_shift_pos) - success := check_ec_point(success, proof_pos, q) - - let rhs_x := calldataload(proof_pos) // PI_X - let rhs_y := calldataload(add(proof_pos, 0x20)) // PI_Y - success := and(success, ec_pairing(success, mload(LHS_X_MPTR), mload(LHS_Y_MPTR), rhs_x, rhs_y)) - } - - // Return 1 as result if everything succeeds - mstore(0x00, success) - return(0x00, 0x20) - } - } - -} diff --git a/contracts/src/SnarkVerifier.sol b/contracts/src/SnarkVerifier.sol deleted file mode 100644 index 55284311..00000000 --- a/contracts/src/SnarkVerifier.sol +++ /dev/null @@ -1,1384 +0,0 @@ -// SPDX-License-Identifier: MIT - -pragma solidity ^0.8.0; - -contract Verifier { - uint256 internal constant PROOF_LEN_CPTR = 0x64; - uint256 internal constant PROOF_CPTR = 0x84; - uint256 internal constant NUM_INSTANCE_CPTR = 0x1584; - uint256 internal constant INSTANCE_CPTR = 0x15a4; - - uint256 internal constant FIRST_QUOTIENT_X_CPTR = 0x0ac4; - uint256 internal constant LAST_QUOTIENT_X_CPTR = 0x0b44; - - uint256 internal constant VK_MPTR = 0x09a0; - uint256 internal constant VK_DIGEST_MPTR = 0x09a0; - uint256 internal constant K_MPTR = 0x09c0; - uint256 internal constant N_INV_MPTR = 0x09e0; - uint256 internal constant OMEGA_MPTR = 0x0a00; - uint256 internal constant OMEGA_INV_MPTR = 0x0a20; - uint256 internal constant OMEGA_INV_TO_L_MPTR = 0x0a40; - uint256 internal constant NUM_INSTANCES_MPTR = 0x0a60; - uint256 internal constant HAS_ACCUMULATOR_MPTR = 0x0a80; - uint256 internal constant ACC_OFFSET_MPTR = 0x0aa0; - uint256 internal constant NUM_ACC_LIMBS_MPTR = 0x0ac0; - uint256 internal constant NUM_ACC_LIMB_BITS_MPTR = 0x0ae0; - uint256 internal constant G1_X_MPTR = 0x0b00; - uint256 internal constant G1_Y_MPTR = 0x0b20; - uint256 internal constant G2_X_1_MPTR = 0x0b40; - uint256 internal constant G2_X_2_MPTR = 0x0b60; - uint256 internal constant G2_Y_1_MPTR = 0x0b80; - uint256 internal constant G2_Y_2_MPTR = 0x0ba0; - uint256 internal constant NEG_S_G2_X_1_MPTR = 0x0bc0; - uint256 internal constant NEG_S_G2_X_2_MPTR = 0x0be0; - uint256 internal constant NEG_S_G2_Y_1_MPTR = 0x0c00; - uint256 internal constant NEG_S_G2_Y_2_MPTR = 0x0c20; - - uint256 internal constant CHALLENGE_MPTR = 0x0f00; - - uint256 internal constant THETA_MPTR = 0x0f00; - uint256 internal constant BETA_MPTR = 0x0f20; - uint256 internal constant GAMMA_MPTR = 0x0f40; - uint256 internal constant Y_MPTR = 0x0f60; - uint256 internal constant X_MPTR = 0x0f80; - uint256 internal constant ZETA_MPTR = 0x0fa0; - uint256 internal constant NU_MPTR = 0x0fc0; - uint256 internal constant MU_MPTR = 0x0fe0; - - uint256 internal constant ACC_LHS_X_MPTR = 0x1000; - uint256 internal constant ACC_LHS_Y_MPTR = 0x1020; - uint256 internal constant ACC_RHS_X_MPTR = 0x1040; - uint256 internal constant ACC_RHS_Y_MPTR = 0x1060; - uint256 internal constant X_N_MPTR = 0x1080; - uint256 internal constant X_N_MINUS_1_INV_MPTR = 0x10a0; - uint256 internal constant L_LAST_MPTR = 0x10c0; - uint256 internal constant L_BLIND_MPTR = 0x10e0; - uint256 internal constant L_0_MPTR = 0x1100; - uint256 internal constant INSTANCE_EVAL_MPTR = 0x1120; - uint256 internal constant QUOTIENT_EVAL_MPTR = 0x1140; - uint256 internal constant QUOTIENT_X_MPTR = 0x1160; - uint256 internal constant QUOTIENT_Y_MPTR = 0x1180; - uint256 internal constant R_EVAL_MPTR = 0x11a0; - uint256 internal constant PAIRING_LHS_X_MPTR = 0x11c0; - uint256 internal constant PAIRING_LHS_Y_MPTR = 0x11e0; - uint256 internal constant PAIRING_RHS_X_MPTR = 0x1200; - uint256 internal constant PAIRING_RHS_Y_MPTR = 0x1220; - - function verifyProof( - address vk, - bytes calldata proof, - uint256[] calldata instances - ) public view returns (bool) { - assembly { - // Read EC point (x, y) at (proof_cptr, proof_cptr + 0x20), - // and check if the point is on affine plane, - // and store them in (hash_mptr, hash_mptr + 0x20). - // Return updated (success, proof_cptr, hash_mptr). - function read_ec_point(success, proof_cptr, hash_mptr, q) -> ret0, ret1, ret2 { - let x := calldataload(proof_cptr) - let y := calldataload(add(proof_cptr, 0x20)) - ret0 := and(success, lt(x, q)) - ret0 := and(ret0, lt(y, q)) - ret0 := and(ret0, eq(mulmod(y, y, q), addmod(mulmod(x, mulmod(x, x, q), q), 3, q))) - mstore(hash_mptr, x) - mstore(add(hash_mptr, 0x20), y) - ret1 := add(proof_cptr, 0x40) - ret2 := add(hash_mptr, 0x40) - } - - // Squeeze challenge by keccak256(memory[0..hash_mptr]), - // and store hash mod r as challenge in challenge_mptr, - // and push back hash in 0x00 as the first input for next squeeze. - // Return updated (challenge_mptr, hash_mptr). - function squeeze_challenge(challenge_mptr, hash_mptr, r) -> ret0, ret1 { - let hash := keccak256(0x00, hash_mptr) - mstore(challenge_mptr, mod(hash, r)) - mstore(0x00, hash) - ret0 := add(challenge_mptr, 0x20) - ret1 := 0x20 - } - - // Squeeze challenge without absorbing new input from calldata, - // by putting an extra 0x01 in memory[0x20] and squeeze by keccak256(memory[0..21]), - // and store hash mod r as challenge in challenge_mptr, - // and push back hash in 0x00 as the first input for next squeeze. - // Return updated (challenge_mptr). - function squeeze_challenge_cont(challenge_mptr, r) -> ret { - mstore8(0x20, 0x01) - let hash := keccak256(0x00, 0x21) - mstore(challenge_mptr, mod(hash, r)) - mstore(0x00, hash) - ret := add(challenge_mptr, 0x20) - } - - // Batch invert values in memory[mptr_start..mptr_end] in place. - // Return updated (success). - function batch_invert(success, mptr_start, mptr_end, r) -> ret { - let gp_mptr := mptr_end - let gp := mload(mptr_start) - let mptr := add(mptr_start, 0x20) - for - {} - lt(mptr, sub(mptr_end, 0x20)) - {} - { - gp := mulmod(gp, mload(mptr), r) - mstore(gp_mptr, gp) - mptr := add(mptr, 0x20) - gp_mptr := add(gp_mptr, 0x20) - } - gp := mulmod(gp, mload(mptr), r) - - mstore(gp_mptr, 0x20) - mstore(add(gp_mptr, 0x20), 0x20) - mstore(add(gp_mptr, 0x40), 0x20) - mstore(add(gp_mptr, 0x60), gp) - mstore(add(gp_mptr, 0x80), sub(r, 2)) - mstore(add(gp_mptr, 0xa0), r) - ret := and(success, staticcall(gas(), 0x05, gp_mptr, 0xc0, gp_mptr, 0x20)) - let all_inv := mload(gp_mptr) - - let first_mptr := mptr_start - let second_mptr := add(first_mptr, 0x20) - gp_mptr := sub(gp_mptr, 0x20) - for - {} - lt(second_mptr, mptr) - {} - { - let inv := mulmod(all_inv, mload(gp_mptr), r) - all_inv := mulmod(all_inv, mload(mptr), r) - mstore(mptr, inv) - mptr := sub(mptr, 0x20) - gp_mptr := sub(gp_mptr, 0x20) - } - let inv_first := mulmod(all_inv, mload(second_mptr), r) - let inv_second := mulmod(all_inv, mload(first_mptr), r) - mstore(first_mptr, inv_first) - mstore(second_mptr, inv_second) - } - - // Add (x, y) into point at (0x00, 0x20). - // Return updated (success). - function ec_add_acc(success, x, y) -> ret { - mstore(0x40, x) - mstore(0x60, y) - ret := and(success, staticcall(gas(), 0x06, 0x00, 0x80, 0x00, 0x40)) - } - - // Scale point at (0x00, 0x20) by scalar. - function ec_mul_acc(success, scalar) -> ret { - mstore(0x40, scalar) - ret := and(success, staticcall(gas(), 0x07, 0x00, 0x60, 0x00, 0x40)) - } - - // Add (x, y) into point at (0x80, 0xa0). - // Return updated (success). - function ec_add_tmp(success, x, y) -> ret { - mstore(0xc0, x) - mstore(0xe0, y) - ret := and(success, staticcall(gas(), 0x06, 0x80, 0x80, 0x80, 0x40)) - } - - // Scale point at (0x80, 0xa0) by scalar. - // Return updated (success). - function ec_mul_tmp(success, scalar) -> ret { - mstore(0xc0, scalar) - ret := and(success, staticcall(gas(), 0x07, 0x80, 0x60, 0x80, 0x40)) - } - - // Perform pairing check. - // Return updated (success). - function ec_pairing(success, lhs_x, lhs_y, rhs_x, rhs_y) -> ret { - mstore(0x00, lhs_x) - mstore(0x20, lhs_y) - mstore(0x40, mload(G2_X_1_MPTR)) - mstore(0x60, mload(G2_X_2_MPTR)) - mstore(0x80, mload(G2_Y_1_MPTR)) - mstore(0xa0, mload(G2_Y_2_MPTR)) - mstore(0xc0, rhs_x) - mstore(0xe0, rhs_y) - mstore(0x100, mload(NEG_S_G2_X_1_MPTR)) - mstore(0x120, mload(NEG_S_G2_X_2_MPTR)) - mstore(0x140, mload(NEG_S_G2_Y_1_MPTR)) - mstore(0x160, mload(NEG_S_G2_Y_2_MPTR)) - ret := and(success, staticcall(gas(), 0x08, 0x00, 0x180, 0x00, 0x20)) - ret := and(ret, mload(0x00)) - } - - // Modulus - let q := 21888242871839275222246405745257275088696311157297823662689037894645226208583 // BN254 base field - let r := 21888242871839275222246405745257275088548364400416034343698204186575808495617 // BN254 scalar field - - // Initialize success as true - let success := true - - { - // Copy vk into memory - extcodecopy(vk, VK_MPTR, 0x00, 0x0560) - - // Check valid length of proof - success := and(success, eq(0x1500, calldataload(PROOF_LEN_CPTR))) - - // Check valid length of instances - let num_instances := mload(NUM_INSTANCES_MPTR) - success := and(success, eq(num_instances, calldataload(NUM_INSTANCE_CPTR))) - - // Absorb vk diegst - mstore(0x00, mload(VK_DIGEST_MPTR)) - - // Read instances and witness commitments and generate challenges - let hash_mptr := 0x20 - let instance_cptr := INSTANCE_CPTR - for - { let instance_cptr_end := add(instance_cptr, mul(0x20, num_instances)) } - lt(instance_cptr, instance_cptr_end) - {} - { - let instance := calldataload(instance_cptr) - success := and(success, lt(instance, r)) - mstore(hash_mptr, instance) - instance_cptr := add(instance_cptr, 0x20) - hash_mptr := add(hash_mptr, 0x20) - } - - let proof_cptr := PROOF_CPTR - let challenge_mptr := CHALLENGE_MPTR - - // Phase 1 - for - { let proof_cptr_end := add(proof_cptr, 0x02c0) } - lt(proof_cptr, proof_cptr_end) - {} - { - success, proof_cptr, hash_mptr := read_ec_point(success, proof_cptr, hash_mptr, q) - } - - challenge_mptr, hash_mptr := squeeze_challenge(challenge_mptr, hash_mptr, r) - - // Phase 2 - for - { let proof_cptr_end := add(proof_cptr, 0x0400) } - lt(proof_cptr, proof_cptr_end) - {} - { - success, proof_cptr, hash_mptr := read_ec_point(success, proof_cptr, hash_mptr, q) - } - - challenge_mptr, hash_mptr := squeeze_challenge(challenge_mptr, hash_mptr, r) - challenge_mptr := squeeze_challenge_cont(challenge_mptr, r) - - // Phase 3 - for - { let proof_cptr_end := add(proof_cptr, 0x0380) } - lt(proof_cptr, proof_cptr_end) - {} - { - success, proof_cptr, hash_mptr := read_ec_point(success, proof_cptr, hash_mptr, q) - } - - challenge_mptr, hash_mptr := squeeze_challenge(challenge_mptr, hash_mptr, r) - - // Phase 4 - for - { let proof_cptr_end := add(proof_cptr, 0xc0) } - lt(proof_cptr, proof_cptr_end) - {} - { - success, proof_cptr, hash_mptr := read_ec_point(success, proof_cptr, hash_mptr, q) - } - - challenge_mptr, hash_mptr := squeeze_challenge(challenge_mptr, hash_mptr, r) - - // Read evaluations - for - { let proof_cptr_end := add(proof_cptr, 0x0980) } - lt(proof_cptr, proof_cptr_end) - {} - { - let eval := calldataload(proof_cptr) - success := and(success, lt(eval, r)) - mstore(hash_mptr, eval) - proof_cptr := add(proof_cptr, 0x20) - hash_mptr := add(hash_mptr, 0x20) - } - - // Read batch opening proof and generate challenges - challenge_mptr, hash_mptr := squeeze_challenge(challenge_mptr, hash_mptr, r) // zeta - challenge_mptr := squeeze_challenge_cont(challenge_mptr, r) // nu - - success, proof_cptr, hash_mptr := read_ec_point(success, proof_cptr, hash_mptr, q) // W - - challenge_mptr, hash_mptr := squeeze_challenge(challenge_mptr, hash_mptr, r) // mu - - success, proof_cptr, hash_mptr := read_ec_point(success, proof_cptr, hash_mptr, q) // W' - - // Read accumulator from instances - if mload(HAS_ACCUMULATOR_MPTR) { - let num_limbs := mload(NUM_ACC_LIMBS_MPTR) - let num_limb_bits := mload(NUM_ACC_LIMB_BITS_MPTR) - - let cptr := add(INSTANCE_CPTR, mul(mload(ACC_OFFSET_MPTR), 0x20)) - let lhs_y_off := mul(num_limbs, 0x20) - let rhs_x_off := mul(lhs_y_off, 2) - let rhs_y_off := mul(lhs_y_off, 3) - let lhs_x := calldataload(cptr) - let lhs_y := calldataload(add(cptr, lhs_y_off)) - let rhs_x := calldataload(add(cptr, rhs_x_off)) - let rhs_y := calldataload(add(cptr, rhs_y_off)) - for - { - let cptr_end := add(cptr, mul(0x20, num_limbs)) - let shift := num_limb_bits - } - lt(cptr, cptr_end) - {} - { - cptr := add(cptr, 0x20) - lhs_x := add(lhs_x, shl(shift, calldataload(cptr))) - lhs_y := add(lhs_y, shl(shift, calldataload(add(cptr, lhs_y_off)))) - rhs_x := add(rhs_x, shl(shift, calldataload(add(cptr, rhs_x_off)))) - rhs_y := add(rhs_y, shl(shift, calldataload(add(cptr, rhs_y_off)))) - shift := add(shift, num_limb_bits) - } - - success := and(success, eq(mulmod(lhs_y, lhs_y, q), addmod(mulmod(lhs_x, mulmod(lhs_x, lhs_x, q), q), 3, q))) - success := and(success, eq(mulmod(rhs_y, rhs_y, q), addmod(mulmod(rhs_x, mulmod(rhs_x, rhs_x, q), q), 3, q))) - - mstore(ACC_LHS_X_MPTR, lhs_x) - mstore(ACC_LHS_Y_MPTR, lhs_y) - mstore(ACC_RHS_X_MPTR, rhs_x) - mstore(ACC_RHS_Y_MPTR, rhs_y) - } - - pop(q) - } - - // Revert earlier if anything from calldata is invalid - if iszero(success) { - revert(0, 0) - } - - // Compute lagrange evaluations and instance evaluation - { - let k := mload(K_MPTR) - let x := mload(X_MPTR) - let x_n := x - for - { let idx := 0 } - lt(idx, k) - { idx := add(idx, 1) } - { - x_n := mulmod(x_n, x_n, r) - } - - let omega := mload(OMEGA_MPTR) - - let mptr := X_N_MPTR - let mptr_end := add(mptr, mul(0x20, add(mload(NUM_INSTANCES_MPTR), 6))) - if iszero(mload(NUM_INSTANCES_MPTR)) { - mptr_end := add(mptr_end, 0x20) - } - for - { let pow_of_omega := mload(OMEGA_INV_TO_L_MPTR) } - lt(mptr, mptr_end) - { mptr := add(mptr, 0x20) } - { - mstore(mptr, addmod(x, sub(r, pow_of_omega), r)) - pow_of_omega := mulmod(pow_of_omega, omega, r) - } - let x_n_minus_1 := addmod(x_n, sub(r, 1), r) - mstore(mptr_end, x_n_minus_1) - success := batch_invert(success, X_N_MPTR, add(mptr_end, 0x20), r) - - mptr := X_N_MPTR - let l_i_common := mulmod(x_n_minus_1, mload(N_INV_MPTR), r) - for - { let pow_of_omega := mload(OMEGA_INV_TO_L_MPTR) } - lt(mptr, mptr_end) - { mptr := add(mptr, 0x20) } - { - mstore(mptr, mulmod(l_i_common, mulmod(mload(mptr), pow_of_omega, r), r)) - pow_of_omega := mulmod(pow_of_omega, omega, r) - } - - let l_blind := mload(add(X_N_MPTR, 0x20)) - let l_i_cptr := add(X_N_MPTR, 0x40) - for - { let l_i_cptr_end := add(X_N_MPTR, 0xc0) } - lt(l_i_cptr, l_i_cptr_end) - { l_i_cptr := add(l_i_cptr, 0x20) } - { - l_blind := addmod(l_blind, mload(l_i_cptr), r) - } - - let instance_eval := 0 - for - { - let instance_cptr := INSTANCE_CPTR - let instance_cptr_end := add(instance_cptr, mul(0x20, mload(NUM_INSTANCES_MPTR))) - } - lt(instance_cptr, instance_cptr_end) - { - instance_cptr := add(instance_cptr, 0x20) - l_i_cptr := add(l_i_cptr, 0x20) - } - { - instance_eval := addmod(instance_eval, mulmod(mload(l_i_cptr), calldataload(instance_cptr), r), r) - } - - let x_n_minus_1_inv := mload(mptr_end) - let l_last := mload(X_N_MPTR) - let l_0 := mload(add(X_N_MPTR, 0xc0)) - - mstore(X_N_MPTR, x_n) - mstore(X_N_MINUS_1_INV_MPTR, x_n_minus_1_inv) - mstore(L_LAST_MPTR, l_last) - mstore(L_BLIND_MPTR, l_blind) - mstore(L_0_MPTR, l_0) - mstore(INSTANCE_EVAL_MPTR, instance_eval) - } - - // Compute quotient evavluation - { - let quotient_eval_numer - let delta := 4131629893567559867359510883348571134090853742863529169391034518566172092834 - let y := mload(Y_MPTR) - { - let l_0 := mload(L_0_MPTR) - let eval := addmod(l_0, sub(r, mulmod(l_0, calldataload(0x0e44), r)), r) - quotient_eval_numer := eval - } - { - let perm_z_last := calldataload(0x0fc4) - let eval := mulmod(mload(L_LAST_MPTR), addmod(mulmod(perm_z_last, perm_z_last, r), sub(r, perm_z_last), r), r) - quotient_eval_numer := addmod(mulmod(quotient_eval_numer, y, r), eval, r) - } - { - let eval := mulmod(mload(L_0_MPTR), addmod(calldataload(0x0ea4), sub(r, calldataload(0x0e84)), r), r) - quotient_eval_numer := addmod(mulmod(quotient_eval_numer, y, r), eval, r) - } - { - let eval := mulmod(mload(L_0_MPTR), addmod(calldataload(0x0f04), sub(r, calldataload(0x0ee4)), r), r) - quotient_eval_numer := addmod(mulmod(quotient_eval_numer, y, r), eval, r) - } - { - let eval := mulmod(mload(L_0_MPTR), addmod(calldataload(0x0f64), sub(r, calldataload(0x0f44)), r), r) - quotient_eval_numer := addmod(mulmod(quotient_eval_numer, y, r), eval, r) - } - { - let eval := mulmod(mload(L_0_MPTR), addmod(calldataload(0x0fc4), sub(r, calldataload(0x0fa4)), r), r) - quotient_eval_numer := addmod(mulmod(quotient_eval_numer, y, r), eval, r) - } - { - let gamma := mload(GAMMA_MPTR) - let beta := mload(BETA_MPTR) - let lhs := calldataload(0x0e64) - let rhs := calldataload(0x0e44) - lhs := mulmod(lhs, addmod(addmod(calldataload(0x0cc4), mulmod(beta, calldataload(0x0d04), r), r), gamma, r), r) - lhs := mulmod(lhs, addmod(addmod(mload(INSTANCE_EVAL_MPTR), mulmod(beta, calldataload(0x0d24), r), r), gamma, r), r) - mstore(0x00, mulmod(beta, mload(X_MPTR), r)) - rhs := mulmod(rhs, addmod(addmod(calldataload(0x0cc4), mload(0x00), r), gamma, r), r) - mstore(0x00, mulmod(mload(0x00), delta, r)) - rhs := mulmod(rhs, addmod(addmod(mload(INSTANCE_EVAL_MPTR), mload(0x00), r), gamma, r), r) - mstore(0x00, mulmod(mload(0x00), delta, r)) - let left_sub_right := addmod(lhs, sub(r, rhs), r) - let eval := addmod(left_sub_right, sub(r, mulmod(left_sub_right, addmod(mload(L_LAST_MPTR), mload(L_BLIND_MPTR), r), r)), r) - quotient_eval_numer := addmod(mulmod(quotient_eval_numer, y, r), eval, r) - } - { - let gamma := mload(GAMMA_MPTR) - let beta := mload(BETA_MPTR) - let lhs := calldataload(0x0ec4) - let rhs := calldataload(0x0ea4) - lhs := mulmod(lhs, addmod(addmod(calldataload(0x0b84), mulmod(beta, calldataload(0x0d44), r), r), gamma, r), r) - lhs := mulmod(lhs, addmod(addmod(calldataload(0x0ba4), mulmod(beta, calldataload(0x0d64), r), r), gamma, r), r) - rhs := mulmod(rhs, addmod(addmod(calldataload(0x0b84), mload(0x00), r), gamma, r), r) - mstore(0x00, mulmod(mload(0x00), delta, r)) - rhs := mulmod(rhs, addmod(addmod(calldataload(0x0ba4), mload(0x00), r), gamma, r), r) - mstore(0x00, mulmod(mload(0x00), delta, r)) - let left_sub_right := addmod(lhs, sub(r, rhs), r) - let eval := addmod(left_sub_right, sub(r, mulmod(left_sub_right, addmod(mload(L_LAST_MPTR), mload(L_BLIND_MPTR), r), r)), r) - quotient_eval_numer := addmod(mulmod(quotient_eval_numer, y, r), eval, r) - } - { - let gamma := mload(GAMMA_MPTR) - let beta := mload(BETA_MPTR) - let lhs := calldataload(0x0f24) - let rhs := calldataload(0x0f04) - lhs := mulmod(lhs, addmod(addmod(calldataload(0x0bc4), mulmod(beta, calldataload(0x0d84), r), r), gamma, r), r) - lhs := mulmod(lhs, addmod(addmod(calldataload(0x0be4), mulmod(beta, calldataload(0x0da4), r), r), gamma, r), r) - rhs := mulmod(rhs, addmod(addmod(calldataload(0x0bc4), mload(0x00), r), gamma, r), r) - mstore(0x00, mulmod(mload(0x00), delta, r)) - rhs := mulmod(rhs, addmod(addmod(calldataload(0x0be4), mload(0x00), r), gamma, r), r) - mstore(0x00, mulmod(mload(0x00), delta, r)) - let left_sub_right := addmod(lhs, sub(r, rhs), r) - let eval := addmod(left_sub_right, sub(r, mulmod(left_sub_right, addmod(mload(L_LAST_MPTR), mload(L_BLIND_MPTR), r), r)), r) - quotient_eval_numer := addmod(mulmod(quotient_eval_numer, y, r), eval, r) - } - { - let gamma := mload(GAMMA_MPTR) - let beta := mload(BETA_MPTR) - let lhs := calldataload(0x0f84) - let rhs := calldataload(0x0f64) - lhs := mulmod(lhs, addmod(addmod(calldataload(0x0c24), mulmod(beta, calldataload(0x0dc4), r), r), gamma, r), r) - lhs := mulmod(lhs, addmod(addmod(calldataload(0x0c44), mulmod(beta, calldataload(0x0de4), r), r), gamma, r), r) - rhs := mulmod(rhs, addmod(addmod(calldataload(0x0c24), mload(0x00), r), gamma, r), r) - mstore(0x00, mulmod(mload(0x00), delta, r)) - rhs := mulmod(rhs, addmod(addmod(calldataload(0x0c44), mload(0x00), r), gamma, r), r) - mstore(0x00, mulmod(mload(0x00), delta, r)) - let left_sub_right := addmod(lhs, sub(r, rhs), r) - let eval := addmod(left_sub_right, sub(r, mulmod(left_sub_right, addmod(mload(L_LAST_MPTR), mload(L_BLIND_MPTR), r), r)), r) - quotient_eval_numer := addmod(mulmod(quotient_eval_numer, y, r), eval, r) - } - { - let gamma := mload(GAMMA_MPTR) - let beta := mload(BETA_MPTR) - let lhs := calldataload(0x0fe4) - let rhs := calldataload(0x0fc4) - lhs := mulmod(lhs, addmod(addmod(calldataload(0x0c64), mulmod(beta, calldataload(0x0e04), r), r), gamma, r), r) - lhs := mulmod(lhs, addmod(addmod(calldataload(0x0c84), mulmod(beta, calldataload(0x0e24), r), r), gamma, r), r) - rhs := mulmod(rhs, addmod(addmod(calldataload(0x0c64), mload(0x00), r), gamma, r), r) - mstore(0x00, mulmod(mload(0x00), delta, r)) - rhs := mulmod(rhs, addmod(addmod(calldataload(0x0c84), mload(0x00), r), gamma, r), r) - let left_sub_right := addmod(lhs, sub(r, rhs), r) - let eval := addmod(left_sub_right, sub(r, mulmod(left_sub_right, addmod(mload(L_LAST_MPTR), mload(L_BLIND_MPTR), r), r)), r) - quotient_eval_numer := addmod(mulmod(quotient_eval_numer, y, r), eval, r) - } - { - let l_0 := mload(L_0_MPTR) - let eval := addmod(l_0, mulmod(l_0, sub(r, calldataload(0x1004)), r), r) - quotient_eval_numer := addmod(mulmod(quotient_eval_numer, y, r), eval, r) - } - { - let l_last := mload(L_LAST_MPTR) - let eval := mulmod(l_last, addmod(mulmod(calldataload(0x1004), calldataload(0x1004), r), sub(r, calldataload(0x1004)), r), r) - quotient_eval_numer := addmod(mulmod(quotient_eval_numer, y, r), eval, r) - } - { - let theta := mload(THETA_MPTR) - let input - { - let a_1 := calldataload(0x0c04) - let a_3 := calldataload(0x0b84) - let var0 := 0x10000 - let var1 := mulmod(a_3, var0, r) - let var2 := sub(r, var1) - let var3 := addmod(a_1, var2, r) - input := var3 - } - let table - { - let f_0 := calldataload(0x0cc4) - table := f_0 - } - let beta := mload(BETA_MPTR) - let gamma := mload(GAMMA_MPTR) - let lhs := mulmod(calldataload(0x1024), mulmod(addmod(calldataload(0x1044), beta, r), addmod(calldataload(0x1084), gamma, r), r), r) - let rhs := mulmod(calldataload(0x1004), mulmod(addmod(input, beta, r), addmod(table, gamma, r), r), r) - let eval := mulmod(addmod(1, sub(r, addmod(mload(L_BLIND_MPTR), mload(L_LAST_MPTR), r)), r), addmod(lhs, sub(r, rhs), r), r) - quotient_eval_numer := addmod(mulmod(quotient_eval_numer, y, r), eval, r) - } - { - let eval := mulmod(mload(L_0_MPTR), addmod(calldataload(0x1044), sub(r, calldataload(0x1084)), r), r) - quotient_eval_numer := addmod(mulmod(quotient_eval_numer, y, r), eval, r) - } - { - let eval := mulmod(addmod(1, sub(r, addmod(mload(L_BLIND_MPTR), mload(L_LAST_MPTR), r)), r), mulmod(addmod(calldataload(0x1044), sub(r, calldataload(0x1084)), r), addmod(calldataload(0x1044), sub(r, calldataload(0x1064)), r), r), r) - quotient_eval_numer := addmod(mulmod(quotient_eval_numer, y, r), eval, r) - } - { - let l_0 := mload(L_0_MPTR) - let eval := addmod(l_0, mulmod(l_0, sub(r, calldataload(0x10a4)), r), r) - quotient_eval_numer := addmod(mulmod(quotient_eval_numer, y, r), eval, r) - } - { - let l_last := mload(L_LAST_MPTR) - let eval := mulmod(l_last, addmod(mulmod(calldataload(0x10a4), calldataload(0x10a4), r), sub(r, calldataload(0x10a4)), r), r) - quotient_eval_numer := addmod(mulmod(quotient_eval_numer, y, r), eval, r) - } - { - let theta := mload(THETA_MPTR) - let input - { - let a_3 := calldataload(0x0b84) - let a_4 := calldataload(0x0ba4) - let var0 := 0x10000 - let var1 := mulmod(a_4, var0, r) - let var2 := sub(r, var1) - let var3 := addmod(a_3, var2, r) - input := var3 - } - let table - { - let f_0 := calldataload(0x0cc4) - table := f_0 - } - let beta := mload(BETA_MPTR) - let gamma := mload(GAMMA_MPTR) - let lhs := mulmod(calldataload(0x10c4), mulmod(addmod(calldataload(0x10e4), beta, r), addmod(calldataload(0x1124), gamma, r), r), r) - let rhs := mulmod(calldataload(0x10a4), mulmod(addmod(input, beta, r), addmod(table, gamma, r), r), r) - let eval := mulmod(addmod(1, sub(r, addmod(mload(L_BLIND_MPTR), mload(L_LAST_MPTR), r)), r), addmod(lhs, sub(r, rhs), r), r) - quotient_eval_numer := addmod(mulmod(quotient_eval_numer, y, r), eval, r) - } - { - let eval := mulmod(mload(L_0_MPTR), addmod(calldataload(0x10e4), sub(r, calldataload(0x1124)), r), r) - quotient_eval_numer := addmod(mulmod(quotient_eval_numer, y, r), eval, r) - } - { - let eval := mulmod(addmod(1, sub(r, addmod(mload(L_BLIND_MPTR), mload(L_LAST_MPTR), r)), r), mulmod(addmod(calldataload(0x10e4), sub(r, calldataload(0x1124)), r), addmod(calldataload(0x10e4), sub(r, calldataload(0x1104)), r), r), r) - quotient_eval_numer := addmod(mulmod(quotient_eval_numer, y, r), eval, r) - } - { - let l_0 := mload(L_0_MPTR) - let eval := addmod(l_0, mulmod(l_0, sub(r, calldataload(0x1144)), r), r) - quotient_eval_numer := addmod(mulmod(quotient_eval_numer, y, r), eval, r) - } - { - let l_last := mload(L_LAST_MPTR) - let eval := mulmod(l_last, addmod(mulmod(calldataload(0x1144), calldataload(0x1144), r), sub(r, calldataload(0x1144)), r), r) - quotient_eval_numer := addmod(mulmod(quotient_eval_numer, y, r), eval, r) - } - { - let theta := mload(THETA_MPTR) - let input - { - let a_4 := calldataload(0x0ba4) - let a_5 := calldataload(0x0bc4) - let var0 := 0x10000 - let var1 := mulmod(a_5, var0, r) - let var2 := sub(r, var1) - let var3 := addmod(a_4, var2, r) - input := var3 - } - let table - { - let f_0 := calldataload(0x0cc4) - table := f_0 - } - let beta := mload(BETA_MPTR) - let gamma := mload(GAMMA_MPTR) - let lhs := mulmod(calldataload(0x1164), mulmod(addmod(calldataload(0x1184), beta, r), addmod(calldataload(0x11c4), gamma, r), r), r) - let rhs := mulmod(calldataload(0x1144), mulmod(addmod(input, beta, r), addmod(table, gamma, r), r), r) - let eval := mulmod(addmod(1, sub(r, addmod(mload(L_BLIND_MPTR), mload(L_LAST_MPTR), r)), r), addmod(lhs, sub(r, rhs), r), r) - quotient_eval_numer := addmod(mulmod(quotient_eval_numer, y, r), eval, r) - } - { - let eval := mulmod(mload(L_0_MPTR), addmod(calldataload(0x1184), sub(r, calldataload(0x11c4)), r), r) - quotient_eval_numer := addmod(mulmod(quotient_eval_numer, y, r), eval, r) - } - { - let eval := mulmod(addmod(1, sub(r, addmod(mload(L_BLIND_MPTR), mload(L_LAST_MPTR), r)), r), mulmod(addmod(calldataload(0x1184), sub(r, calldataload(0x11c4)), r), addmod(calldataload(0x1184), sub(r, calldataload(0x11a4)), r), r), r) - quotient_eval_numer := addmod(mulmod(quotient_eval_numer, y, r), eval, r) - } - { - let l_0 := mload(L_0_MPTR) - let eval := addmod(l_0, mulmod(l_0, sub(r, calldataload(0x11e4)), r), r) - quotient_eval_numer := addmod(mulmod(quotient_eval_numer, y, r), eval, r) - } - { - let l_last := mload(L_LAST_MPTR) - let eval := mulmod(l_last, addmod(mulmod(calldataload(0x11e4), calldataload(0x11e4), r), sub(r, calldataload(0x11e4)), r), r) - quotient_eval_numer := addmod(mulmod(quotient_eval_numer, y, r), eval, r) - } - { - let theta := mload(THETA_MPTR) - let input - { - let a_5 := calldataload(0x0bc4) - let a_6 := calldataload(0x0be4) - let var0 := 0x10000 - let var1 := mulmod(a_6, var0, r) - let var2 := sub(r, var1) - let var3 := addmod(a_5, var2, r) - input := var3 - } - let table - { - let f_0 := calldataload(0x0cc4) - table := f_0 - } - let beta := mload(BETA_MPTR) - let gamma := mload(GAMMA_MPTR) - let lhs := mulmod(calldataload(0x1204), mulmod(addmod(calldataload(0x1224), beta, r), addmod(calldataload(0x1264), gamma, r), r), r) - let rhs := mulmod(calldataload(0x11e4), mulmod(addmod(input, beta, r), addmod(table, gamma, r), r), r) - let eval := mulmod(addmod(1, sub(r, addmod(mload(L_BLIND_MPTR), mload(L_LAST_MPTR), r)), r), addmod(lhs, sub(r, rhs), r), r) - quotient_eval_numer := addmod(mulmod(quotient_eval_numer, y, r), eval, r) - } - { - let eval := mulmod(mload(L_0_MPTR), addmod(calldataload(0x1224), sub(r, calldataload(0x1264)), r), r) - quotient_eval_numer := addmod(mulmod(quotient_eval_numer, y, r), eval, r) - } - { - let eval := mulmod(addmod(1, sub(r, addmod(mload(L_BLIND_MPTR), mload(L_LAST_MPTR), r)), r), mulmod(addmod(calldataload(0x1224), sub(r, calldataload(0x1264)), r), addmod(calldataload(0x1224), sub(r, calldataload(0x1244)), r), r), r) - quotient_eval_numer := addmod(mulmod(quotient_eval_numer, y, r), eval, r) - } - { - let l_0 := mload(L_0_MPTR) - let eval := addmod(l_0, mulmod(l_0, sub(r, calldataload(0x1284)), r), r) - quotient_eval_numer := addmod(mulmod(quotient_eval_numer, y, r), eval, r) - } - { - let l_last := mload(L_LAST_MPTR) - let eval := mulmod(l_last, addmod(mulmod(calldataload(0x1284), calldataload(0x1284), r), sub(r, calldataload(0x1284)), r), r) - quotient_eval_numer := addmod(mulmod(quotient_eval_numer, y, r), eval, r) - } - { - let theta := mload(THETA_MPTR) - let input - { - let a_2 := calldataload(0x0ca4) - let a_7 := calldataload(0x0c24) - let var0 := 0x10000 - let var1 := mulmod(a_7, var0, r) - let var2 := sub(r, var1) - let var3 := addmod(a_2, var2, r) - input := var3 - } - let table - { - let f_0 := calldataload(0x0cc4) - table := f_0 - } - let beta := mload(BETA_MPTR) - let gamma := mload(GAMMA_MPTR) - let lhs := mulmod(calldataload(0x12a4), mulmod(addmod(calldataload(0x12c4), beta, r), addmod(calldataload(0x1304), gamma, r), r), r) - let rhs := mulmod(calldataload(0x1284), mulmod(addmod(input, beta, r), addmod(table, gamma, r), r), r) - let eval := mulmod(addmod(1, sub(r, addmod(mload(L_BLIND_MPTR), mload(L_LAST_MPTR), r)), r), addmod(lhs, sub(r, rhs), r), r) - quotient_eval_numer := addmod(mulmod(quotient_eval_numer, y, r), eval, r) - } - { - let eval := mulmod(mload(L_0_MPTR), addmod(calldataload(0x12c4), sub(r, calldataload(0x1304)), r), r) - quotient_eval_numer := addmod(mulmod(quotient_eval_numer, y, r), eval, r) - } - { - let eval := mulmod(addmod(1, sub(r, addmod(mload(L_BLIND_MPTR), mload(L_LAST_MPTR), r)), r), mulmod(addmod(calldataload(0x12c4), sub(r, calldataload(0x1304)), r), addmod(calldataload(0x12c4), sub(r, calldataload(0x12e4)), r), r), r) - quotient_eval_numer := addmod(mulmod(quotient_eval_numer, y, r), eval, r) - } - { - let l_0 := mload(L_0_MPTR) - let eval := addmod(l_0, mulmod(l_0, sub(r, calldataload(0x1324)), r), r) - quotient_eval_numer := addmod(mulmod(quotient_eval_numer, y, r), eval, r) - } - { - let l_last := mload(L_LAST_MPTR) - let eval := mulmod(l_last, addmod(mulmod(calldataload(0x1324), calldataload(0x1324), r), sub(r, calldataload(0x1324)), r), r) - quotient_eval_numer := addmod(mulmod(quotient_eval_numer, y, r), eval, r) - } - { - let theta := mload(THETA_MPTR) - let input - { - let a_7 := calldataload(0x0c24) - let a_8 := calldataload(0x0c44) - let var0 := 0x10000 - let var1 := mulmod(a_8, var0, r) - let var2 := sub(r, var1) - let var3 := addmod(a_7, var2, r) - input := var3 - } - let table - { - let f_0 := calldataload(0x0cc4) - table := f_0 - } - let beta := mload(BETA_MPTR) - let gamma := mload(GAMMA_MPTR) - let lhs := mulmod(calldataload(0x1344), mulmod(addmod(calldataload(0x1364), beta, r), addmod(calldataload(0x13a4), gamma, r), r), r) - let rhs := mulmod(calldataload(0x1324), mulmod(addmod(input, beta, r), addmod(table, gamma, r), r), r) - let eval := mulmod(addmod(1, sub(r, addmod(mload(L_BLIND_MPTR), mload(L_LAST_MPTR), r)), r), addmod(lhs, sub(r, rhs), r), r) - quotient_eval_numer := addmod(mulmod(quotient_eval_numer, y, r), eval, r) - } - { - let eval := mulmod(mload(L_0_MPTR), addmod(calldataload(0x1364), sub(r, calldataload(0x13a4)), r), r) - quotient_eval_numer := addmod(mulmod(quotient_eval_numer, y, r), eval, r) - } - { - let eval := mulmod(addmod(1, sub(r, addmod(mload(L_BLIND_MPTR), mload(L_LAST_MPTR), r)), r), mulmod(addmod(calldataload(0x1364), sub(r, calldataload(0x13a4)), r), addmod(calldataload(0x1364), sub(r, calldataload(0x1384)), r), r), r) - quotient_eval_numer := addmod(mulmod(quotient_eval_numer, y, r), eval, r) - } - { - let l_0 := mload(L_0_MPTR) - let eval := addmod(l_0, mulmod(l_0, sub(r, calldataload(0x13c4)), r), r) - quotient_eval_numer := addmod(mulmod(quotient_eval_numer, y, r), eval, r) - } - { - let l_last := mload(L_LAST_MPTR) - let eval := mulmod(l_last, addmod(mulmod(calldataload(0x13c4), calldataload(0x13c4), r), sub(r, calldataload(0x13c4)), r), r) - quotient_eval_numer := addmod(mulmod(quotient_eval_numer, y, r), eval, r) - } - { - let theta := mload(THETA_MPTR) - let input - { - let a_8 := calldataload(0x0c44) - let a_9 := calldataload(0x0c64) - let var0 := 0x10000 - let var1 := mulmod(a_9, var0, r) - let var2 := sub(r, var1) - let var3 := addmod(a_8, var2, r) - input := var3 - } - let table - { - let f_0 := calldataload(0x0cc4) - table := f_0 - } - let beta := mload(BETA_MPTR) - let gamma := mload(GAMMA_MPTR) - let lhs := mulmod(calldataload(0x13e4), mulmod(addmod(calldataload(0x1404), beta, r), addmod(calldataload(0x1444), gamma, r), r), r) - let rhs := mulmod(calldataload(0x13c4), mulmod(addmod(input, beta, r), addmod(table, gamma, r), r), r) - let eval := mulmod(addmod(1, sub(r, addmod(mload(L_BLIND_MPTR), mload(L_LAST_MPTR), r)), r), addmod(lhs, sub(r, rhs), r), r) - quotient_eval_numer := addmod(mulmod(quotient_eval_numer, y, r), eval, r) - } - { - let eval := mulmod(mload(L_0_MPTR), addmod(calldataload(0x1404), sub(r, calldataload(0x1444)), r), r) - quotient_eval_numer := addmod(mulmod(quotient_eval_numer, y, r), eval, r) - } - { - let eval := mulmod(addmod(1, sub(r, addmod(mload(L_BLIND_MPTR), mload(L_LAST_MPTR), r)), r), mulmod(addmod(calldataload(0x1404), sub(r, calldataload(0x1444)), r), addmod(calldataload(0x1404), sub(r, calldataload(0x1424)), r), r), r) - quotient_eval_numer := addmod(mulmod(quotient_eval_numer, y, r), eval, r) - } - { - let l_0 := mload(L_0_MPTR) - let eval := addmod(l_0, mulmod(l_0, sub(r, calldataload(0x1464)), r), r) - quotient_eval_numer := addmod(mulmod(quotient_eval_numer, y, r), eval, r) - } - { - let l_last := mload(L_LAST_MPTR) - let eval := mulmod(l_last, addmod(mulmod(calldataload(0x1464), calldataload(0x1464), r), sub(r, calldataload(0x1464)), r), r) - quotient_eval_numer := addmod(mulmod(quotient_eval_numer, y, r), eval, r) - } - { - let theta := mload(THETA_MPTR) - let input - { - let a_9 := calldataload(0x0c64) - let a_10 := calldataload(0x0c84) - let var0 := 0x10000 - let var1 := mulmod(a_10, var0, r) - let var2 := sub(r, var1) - let var3 := addmod(a_9, var2, r) - input := var3 - } - let table - { - let f_0 := calldataload(0x0cc4) - table := f_0 - } - let beta := mload(BETA_MPTR) - let gamma := mload(GAMMA_MPTR) - let lhs := mulmod(calldataload(0x1484), mulmod(addmod(calldataload(0x14a4), beta, r), addmod(calldataload(0x14e4), gamma, r), r), r) - let rhs := mulmod(calldataload(0x1464), mulmod(addmod(input, beta, r), addmod(table, gamma, r), r), r) - let eval := mulmod(addmod(1, sub(r, addmod(mload(L_BLIND_MPTR), mload(L_LAST_MPTR), r)), r), addmod(lhs, sub(r, rhs), r), r) - quotient_eval_numer := addmod(mulmod(quotient_eval_numer, y, r), eval, r) - } - { - let eval := mulmod(mload(L_0_MPTR), addmod(calldataload(0x14a4), sub(r, calldataload(0x14e4)), r), r) - quotient_eval_numer := addmod(mulmod(quotient_eval_numer, y, r), eval, r) - } - { - let eval := mulmod(addmod(1, sub(r, addmod(mload(L_BLIND_MPTR), mload(L_LAST_MPTR), r)), r), mulmod(addmod(calldataload(0x14a4), sub(r, calldataload(0x14e4)), r), addmod(calldataload(0x14a4), sub(r, calldataload(0x14c4)), r), r), r) - quotient_eval_numer := addmod(mulmod(quotient_eval_numer, y, r), eval, r) - } - - pop(y) - pop(delta) - - let quotient_eval := mulmod(quotient_eval_numer, mload(X_N_MINUS_1_INV_MPTR), r) - mstore(QUOTIENT_EVAL_MPTR, quotient_eval) - } - - // Compute quotient commitment - { - mstore(0x00, calldataload(LAST_QUOTIENT_X_CPTR)) - mstore(0x20, calldataload(add(LAST_QUOTIENT_X_CPTR, 0x20))) - let x_n := mload(X_N_MPTR) - for - { - let cptr := sub(LAST_QUOTIENT_X_CPTR, 0x40) - let cptr_end := sub(FIRST_QUOTIENT_X_CPTR, 0x40) - } - lt(cptr_end, cptr) - {} - { - success := ec_mul_acc(success, x_n) - success := ec_add_acc(success, calldataload(cptr), calldataload(add(cptr, 0x20))) - cptr := sub(cptr, 0x40) - } - mstore(QUOTIENT_X_MPTR, mload(0x00)) - mstore(QUOTIENT_Y_MPTR, mload(0x20)) - } - - // Compute pairing lhs and rhs - { - { - let x := mload(X_MPTR) - let omega := mload(OMEGA_MPTR) - let omega_inv := mload(OMEGA_INV_MPTR) - let x_pow_of_omega := mulmod(x, omega, r) - mstore(0x0360, x_pow_of_omega) - mstore(0x0340, x) - x_pow_of_omega := mulmod(x, omega_inv, r) - mstore(0x0320, x_pow_of_omega) - x_pow_of_omega := mulmod(x_pow_of_omega, omega_inv, r) - x_pow_of_omega := mulmod(x_pow_of_omega, omega_inv, r) - x_pow_of_omega := mulmod(x_pow_of_omega, omega_inv, r) - x_pow_of_omega := mulmod(x_pow_of_omega, omega_inv, r) - x_pow_of_omega := mulmod(x_pow_of_omega, omega_inv, r) - mstore(0x0300, x_pow_of_omega) - } - { - let mu := mload(MU_MPTR) - for - { - let mptr := 0x0380 - let mptr_end := 0x0400 - let point_mptr := 0x0300 - } - lt(mptr, mptr_end) - { - mptr := add(mptr, 0x20) - point_mptr := add(point_mptr, 0x20) - } - { - mstore(mptr, addmod(mu, sub(r, mload(point_mptr)), r)) - } - let s - s := mload(0x03c0) - mstore(0x0400, s) - let diff - diff := mload(0x0380) - diff := mulmod(diff, mload(0x03a0), r) - diff := mulmod(diff, mload(0x03e0), r) - mstore(0x0420, diff) - mstore(0x00, diff) - diff := mload(0x03a0) - mstore(0x0440, diff) - diff := mload(0x0380) - diff := mulmod(diff, mload(0x03a0), r) - mstore(0x0460, diff) - diff := mload(0x0380) - diff := mulmod(diff, mload(0x03e0), r) - mstore(0x0480, diff) - } - { - let point_2 := mload(0x0340) - let coeff - coeff := 1 - coeff := mulmod(coeff, mload(0x03c0), r) - mstore(0x20, coeff) - } - { - let point_0 := mload(0x0300) - let point_2 := mload(0x0340) - let point_3 := mload(0x0360) - let coeff - coeff := addmod(point_0, sub(r, point_2), r) - coeff := mulmod(coeff, addmod(point_0, sub(r, point_3), r), r) - coeff := mulmod(coeff, mload(0x0380), r) - mstore(0x40, coeff) - coeff := addmod(point_2, sub(r, point_0), r) - coeff := mulmod(coeff, addmod(point_2, sub(r, point_3), r), r) - coeff := mulmod(coeff, mload(0x03c0), r) - mstore(0x60, coeff) - coeff := addmod(point_3, sub(r, point_0), r) - coeff := mulmod(coeff, addmod(point_3, sub(r, point_2), r), r) - coeff := mulmod(coeff, mload(0x03e0), r) - mstore(0x80, coeff) - } - { - let point_2 := mload(0x0340) - let point_3 := mload(0x0360) - let coeff - coeff := addmod(point_2, sub(r, point_3), r) - coeff := mulmod(coeff, mload(0x03c0), r) - mstore(0xa0, coeff) - coeff := addmod(point_3, sub(r, point_2), r) - coeff := mulmod(coeff, mload(0x03e0), r) - mstore(0xc0, coeff) - } - { - let point_1 := mload(0x0320) - let point_2 := mload(0x0340) - let coeff - coeff := addmod(point_1, sub(r, point_2), r) - coeff := mulmod(coeff, mload(0x03a0), r) - mstore(0xe0, coeff) - coeff := addmod(point_2, sub(r, point_1), r) - coeff := mulmod(coeff, mload(0x03c0), r) - mstore(0x0100, coeff) - } - { - success := batch_invert(success, 0, 0x0120, r) - let diff_0_inv := mload(0x00) - mstore(0x0420, diff_0_inv) - for - { - let mptr := 0x0440 - let mptr_end := 0x04a0 - } - lt(mptr, mptr_end) - { mptr := add(mptr, 0x20) } - { - mstore(mptr, mulmod(mload(mptr), diff_0_inv, r)) - } - } - { - let coeff := mload(0x20) - let zeta := mload(ZETA_MPTR) - let r_eval := 0 - r_eval := addmod(r_eval, mulmod(coeff, calldataload(0x0ce4), r), r) - r_eval := mulmod(r_eval, zeta, r) - r_eval := addmod(r_eval, mulmod(coeff, mload(QUOTIENT_EVAL_MPTR), r), r) - for - { - let mptr := 0x0e24 - let mptr_end := 0x0ce4 - } - lt(mptr_end, mptr) - { mptr := sub(mptr, 0x20) } - { - r_eval := addmod(mulmod(r_eval, zeta, r), mulmod(coeff, calldataload(mptr), r), r) - } - r_eval := mulmod(r_eval, zeta, r) - r_eval := addmod(r_eval, mulmod(coeff, calldataload(0x0cc4), r), r) - r_eval := mulmod(r_eval, zeta, r) - r_eval := addmod(r_eval, mulmod(coeff, calldataload(0x14e4), r), r) - r_eval := mulmod(r_eval, zeta, r) - r_eval := addmod(r_eval, mulmod(coeff, calldataload(0x1444), r), r) - r_eval := mulmod(r_eval, zeta, r) - r_eval := addmod(r_eval, mulmod(coeff, calldataload(0x13a4), r), r) - r_eval := mulmod(r_eval, zeta, r) - r_eval := addmod(r_eval, mulmod(coeff, calldataload(0x1304), r), r) - r_eval := mulmod(r_eval, zeta, r) - r_eval := addmod(r_eval, mulmod(coeff, calldataload(0x1264), r), r) - r_eval := mulmod(r_eval, zeta, r) - r_eval := addmod(r_eval, mulmod(coeff, calldataload(0x11c4), r), r) - r_eval := mulmod(r_eval, zeta, r) - r_eval := addmod(r_eval, mulmod(coeff, calldataload(0x1124), r), r) - r_eval := mulmod(r_eval, zeta, r) - r_eval := addmod(r_eval, mulmod(coeff, calldataload(0x1084), r), r) - for - { - let mptr := 0x0ca4 - let mptr_end := 0x0b64 - } - lt(mptr_end, mptr) - { mptr := sub(mptr, 0x20) } - { - r_eval := addmod(mulmod(r_eval, zeta, r), mulmod(coeff, calldataload(mptr), r), r) - } - mstore(0x04a0, r_eval) - } - { - let zeta := mload(ZETA_MPTR) - let r_eval := 0 - r_eval := addmod(r_eval, mulmod(mload(0x40), calldataload(0x0fa4), r), r) - r_eval := addmod(r_eval, mulmod(mload(0x60), calldataload(0x0f64), r), r) - r_eval := addmod(r_eval, mulmod(mload(0x80), calldataload(0x0f84), r), r) - r_eval := mulmod(r_eval, zeta, r) - r_eval := addmod(r_eval, mulmod(mload(0x40), calldataload(0x0f44), r), r) - r_eval := addmod(r_eval, mulmod(mload(0x60), calldataload(0x0f04), r), r) - r_eval := addmod(r_eval, mulmod(mload(0x80), calldataload(0x0f24), r), r) - r_eval := mulmod(r_eval, zeta, r) - r_eval := addmod(r_eval, mulmod(mload(0x40), calldataload(0x0ee4), r), r) - r_eval := addmod(r_eval, mulmod(mload(0x60), calldataload(0x0ea4), r), r) - r_eval := addmod(r_eval, mulmod(mload(0x80), calldataload(0x0ec4), r), r) - r_eval := mulmod(r_eval, zeta, r) - r_eval := addmod(r_eval, mulmod(mload(0x40), calldataload(0x0e84), r), r) - r_eval := addmod(r_eval, mulmod(mload(0x60), calldataload(0x0e44), r), r) - r_eval := addmod(r_eval, mulmod(mload(0x80), calldataload(0x0e64), r), r) - r_eval := mulmod(r_eval, mload(0x0440), r) - mstore(0x04c0, r_eval) - } - { - let zeta := mload(ZETA_MPTR) - let r_eval := 0 - r_eval := addmod(r_eval, mulmod(mload(0xa0), calldataload(0x1464), r), r) - r_eval := addmod(r_eval, mulmod(mload(0xc0), calldataload(0x1484), r), r) - r_eval := mulmod(r_eval, zeta, r) - r_eval := addmod(r_eval, mulmod(mload(0xa0), calldataload(0x13c4), r), r) - r_eval := addmod(r_eval, mulmod(mload(0xc0), calldataload(0x13e4), r), r) - r_eval := mulmod(r_eval, zeta, r) - r_eval := addmod(r_eval, mulmod(mload(0xa0), calldataload(0x1324), r), r) - r_eval := addmod(r_eval, mulmod(mload(0xc0), calldataload(0x1344), r), r) - r_eval := mulmod(r_eval, zeta, r) - r_eval := addmod(r_eval, mulmod(mload(0xa0), calldataload(0x1284), r), r) - r_eval := addmod(r_eval, mulmod(mload(0xc0), calldataload(0x12a4), r), r) - r_eval := mulmod(r_eval, zeta, r) - r_eval := addmod(r_eval, mulmod(mload(0xa0), calldataload(0x11e4), r), r) - r_eval := addmod(r_eval, mulmod(mload(0xc0), calldataload(0x1204), r), r) - r_eval := mulmod(r_eval, zeta, r) - r_eval := addmod(r_eval, mulmod(mload(0xa0), calldataload(0x1144), r), r) - r_eval := addmod(r_eval, mulmod(mload(0xc0), calldataload(0x1164), r), r) - r_eval := mulmod(r_eval, zeta, r) - r_eval := addmod(r_eval, mulmod(mload(0xa0), calldataload(0x10a4), r), r) - r_eval := addmod(r_eval, mulmod(mload(0xc0), calldataload(0x10c4), r), r) - r_eval := mulmod(r_eval, zeta, r) - r_eval := addmod(r_eval, mulmod(mload(0xa0), calldataload(0x1004), r), r) - r_eval := addmod(r_eval, mulmod(mload(0xc0), calldataload(0x1024), r), r) - r_eval := mulmod(r_eval, zeta, r) - r_eval := addmod(r_eval, mulmod(mload(0xa0), calldataload(0x0fc4), r), r) - r_eval := addmod(r_eval, mulmod(mload(0xc0), calldataload(0x0fe4), r), r) - r_eval := mulmod(r_eval, mload(0x0460), r) - mstore(0x04e0, r_eval) - } - { - let zeta := mload(ZETA_MPTR) - let r_eval := 0 - r_eval := addmod(r_eval, mulmod(mload(0xe0), calldataload(0x14c4), r), r) - r_eval := addmod(r_eval, mulmod(mload(0x0100), calldataload(0x14a4), r), r) - r_eval := mulmod(r_eval, zeta, r) - r_eval := addmod(r_eval, mulmod(mload(0xe0), calldataload(0x1424), r), r) - r_eval := addmod(r_eval, mulmod(mload(0x0100), calldataload(0x1404), r), r) - r_eval := mulmod(r_eval, zeta, r) - r_eval := addmod(r_eval, mulmod(mload(0xe0), calldataload(0x1384), r), r) - r_eval := addmod(r_eval, mulmod(mload(0x0100), calldataload(0x1364), r), r) - r_eval := mulmod(r_eval, zeta, r) - r_eval := addmod(r_eval, mulmod(mload(0xe0), calldataload(0x12e4), r), r) - r_eval := addmod(r_eval, mulmod(mload(0x0100), calldataload(0x12c4), r), r) - r_eval := mulmod(r_eval, zeta, r) - r_eval := addmod(r_eval, mulmod(mload(0xe0), calldataload(0x1244), r), r) - r_eval := addmod(r_eval, mulmod(mload(0x0100), calldataload(0x1224), r), r) - r_eval := mulmod(r_eval, zeta, r) - r_eval := addmod(r_eval, mulmod(mload(0xe0), calldataload(0x11a4), r), r) - r_eval := addmod(r_eval, mulmod(mload(0x0100), calldataload(0x1184), r), r) - r_eval := mulmod(r_eval, zeta, r) - r_eval := addmod(r_eval, mulmod(mload(0xe0), calldataload(0x1104), r), r) - r_eval := addmod(r_eval, mulmod(mload(0x0100), calldataload(0x10e4), r), r) - r_eval := mulmod(r_eval, zeta, r) - r_eval := addmod(r_eval, mulmod(mload(0xe0), calldataload(0x1064), r), r) - r_eval := addmod(r_eval, mulmod(mload(0x0100), calldataload(0x1044), r), r) - r_eval := mulmod(r_eval, mload(0x0480), r) - mstore(0x0500, r_eval) - } - { - let sum := mload(0x20) - mstore(0x0520, sum) - } - { - let sum := mload(0x40) - sum := addmod(sum, mload(0x60), r) - sum := addmod(sum, mload(0x80), r) - mstore(0x0540, sum) - } - { - let sum := mload(0xa0) - sum := addmod(sum, mload(0xc0), r) - mstore(0x0560, sum) - } - { - let sum := mload(0xe0) - sum := addmod(sum, mload(0x0100), r) - mstore(0x0580, sum) - } - { - for - { - let mptr := 0x00 - let mptr_end := 0x80 - let sum_mptr := 0x0520 - } - lt(mptr, mptr_end) - { - mptr := add(mptr, 0x20) - sum_mptr := add(sum_mptr, 0x20) - } - { - mstore(mptr, mload(sum_mptr)) - } - success := batch_invert(success, 0, 0x80, r) - let r_eval := mulmod(mload(0x60), mload(0x0500), r) - for - { - let sum_inv_mptr := 0x40 - let sum_inv_mptr_end := 0x80 - let r_eval_mptr := 0x04e0 - } - lt(sum_inv_mptr, sum_inv_mptr_end) - { - sum_inv_mptr := sub(sum_inv_mptr, 0x20) - r_eval_mptr := sub(r_eval_mptr, 0x20) - } - { - r_eval := mulmod(r_eval, mload(NU_MPTR), r) - r_eval := addmod(r_eval, mulmod(mload(sum_inv_mptr), mload(r_eval_mptr), r), r) - } - mstore(R_EVAL_MPTR, r_eval) - } - { - let nu := mload(NU_MPTR) - mstore(0x00, calldataload(0x0a84)) - mstore(0x20, calldataload(0x0aa4)) - success := ec_mul_acc(success, mload(ZETA_MPTR)) - success := ec_add_acc(success, mload(QUOTIENT_X_MPTR), mload(QUOTIENT_Y_MPTR)) - for - { - let mptr := 0x0ec0 - let mptr_end := 0x0c00 - } - lt(mptr_end, mptr) - { mptr := sub(mptr, 0x40) } - { - success := ec_mul_acc(success, mload(ZETA_MPTR)) - success := ec_add_acc(success, mload(mptr), mload(add(mptr, 0x20))) - } - success := ec_mul_acc(success, mload(ZETA_MPTR)) - success := ec_add_acc(success, calldataload(0x0704), calldataload(0x0724)) - success := ec_mul_acc(success, mload(ZETA_MPTR)) - success := ec_add_acc(success, calldataload(0x0684), calldataload(0x06a4)) - success := ec_mul_acc(success, mload(ZETA_MPTR)) - success := ec_add_acc(success, calldataload(0x0604), calldataload(0x0624)) - success := ec_mul_acc(success, mload(ZETA_MPTR)) - success := ec_add_acc(success, calldataload(0x0584), calldataload(0x05a4)) - success := ec_mul_acc(success, mload(ZETA_MPTR)) - success := ec_add_acc(success, calldataload(0x0504), calldataload(0x0524)) - success := ec_mul_acc(success, mload(ZETA_MPTR)) - success := ec_add_acc(success, calldataload(0x0484), calldataload(0x04a4)) - success := ec_mul_acc(success, mload(ZETA_MPTR)) - success := ec_add_acc(success, calldataload(0x0404), calldataload(0x0424)) - success := ec_mul_acc(success, mload(ZETA_MPTR)) - success := ec_add_acc(success, calldataload(0x0384), calldataload(0x03a4)) - success := ec_mul_acc(success, mload(ZETA_MPTR)) - success := ec_add_acc(success, calldataload(0x0104), calldataload(0x0124)) - for - { - let mptr := 0x0304 - let mptr_end := 0x0204 - } - lt(mptr_end, mptr) - { mptr := sub(mptr, 0x40) } - { - success := ec_mul_acc(success, mload(ZETA_MPTR)) - success := ec_add_acc(success, calldataload(mptr), calldataload(add(mptr, 0x20))) - } - success := ec_mul_acc(success, mload(ZETA_MPTR)) - success := ec_add_acc(success, calldataload(0xc4), calldataload(0xe4)) - for - { - let mptr := 0x0204 - let mptr_end := 0x0104 - } - lt(mptr_end, mptr) - { mptr := sub(mptr, 0x40) } - { - success := ec_mul_acc(success, mload(ZETA_MPTR)) - success := ec_add_acc(success, calldataload(mptr), calldataload(add(mptr, 0x20))) - } - mstore(0x80, calldataload(0x0804)) - mstore(0xa0, calldataload(0x0824)) - for - { - let mptr := 0x07c4 - let mptr_end := 0x0704 - } - lt(mptr_end, mptr) - { mptr := sub(mptr, 0x40) } - { - success := ec_mul_tmp(success, mload(ZETA_MPTR)) - success := ec_add_tmp(success, calldataload(mptr), calldataload(add(mptr, 0x20))) - } - success := ec_mul_tmp(success, mulmod(nu, mload(0x0440), r)) - success := ec_add_acc(success, mload(0x80), mload(0xa0)) - nu := mulmod(nu, mload(NU_MPTR), r) - mstore(0x80, calldataload(0x0a44)) - mstore(0xa0, calldataload(0x0a64)) - for - { - let mptr := 0x0a04 - let mptr_end := 0x0804 - } - lt(mptr_end, mptr) - { mptr := sub(mptr, 0x40) } - { - success := ec_mul_tmp(success, mload(ZETA_MPTR)) - success := ec_add_tmp(success, calldataload(mptr), calldataload(add(mptr, 0x20))) - } - success := ec_mul_tmp(success, mulmod(nu, mload(0x0460), r)) - success := ec_add_acc(success, mload(0x80), mload(0xa0)) - nu := mulmod(nu, mload(NU_MPTR), r) - mstore(0x80, calldataload(0x06c4)) - mstore(0xa0, calldataload(0x06e4)) - success := ec_mul_tmp(success, mload(ZETA_MPTR)) - success := ec_add_tmp(success, calldataload(0x0644), calldataload(0x0664)) - success := ec_mul_tmp(success, mload(ZETA_MPTR)) - success := ec_add_tmp(success, calldataload(0x05c4), calldataload(0x05e4)) - success := ec_mul_tmp(success, mload(ZETA_MPTR)) - success := ec_add_tmp(success, calldataload(0x0544), calldataload(0x0564)) - success := ec_mul_tmp(success, mload(ZETA_MPTR)) - success := ec_add_tmp(success, calldataload(0x04c4), calldataload(0x04e4)) - success := ec_mul_tmp(success, mload(ZETA_MPTR)) - success := ec_add_tmp(success, calldataload(0x0444), calldataload(0x0464)) - success := ec_mul_tmp(success, mload(ZETA_MPTR)) - success := ec_add_tmp(success, calldataload(0x03c4), calldataload(0x03e4)) - success := ec_mul_tmp(success, mload(ZETA_MPTR)) - success := ec_add_tmp(success, calldataload(0x0344), calldataload(0x0364)) - success := ec_mul_tmp(success, mulmod(nu, mload(0x0480), r)) - success := ec_add_acc(success, mload(0x80), mload(0xa0)) - mstore(0x80, mload(G1_X_MPTR)) - mstore(0xa0, mload(G1_Y_MPTR)) - success := ec_mul_tmp(success, sub(r, mload(R_EVAL_MPTR))) - success := ec_add_acc(success, mload(0x80), mload(0xa0)) - mstore(0x80, calldataload(0x1504)) - mstore(0xa0, calldataload(0x1524)) - success := ec_mul_tmp(success, sub(r, mload(0x0400))) - success := ec_add_acc(success, mload(0x80), mload(0xa0)) - mstore(0x80, calldataload(0x1544)) - mstore(0xa0, calldataload(0x1564)) - success := ec_mul_tmp(success, mload(MU_MPTR)) - success := ec_add_acc(success, mload(0x80), mload(0xa0)) - mstore(PAIRING_LHS_X_MPTR, mload(0x00)) - mstore(PAIRING_LHS_Y_MPTR, mload(0x20)) - mstore(PAIRING_RHS_X_MPTR, calldataload(0x1544)) - mstore(PAIRING_RHS_Y_MPTR, calldataload(0x1564)) - } - } - - // Random linear combine with accumulator - if mload(HAS_ACCUMULATOR_MPTR) { - mstore(0x00, mload(ACC_LHS_X_MPTR)) - mstore(0x20, mload(ACC_LHS_Y_MPTR)) - mstore(0x40, mload(ACC_RHS_X_MPTR)) - mstore(0x60, mload(ACC_RHS_Y_MPTR)) - mstore(0x80, mload(PAIRING_LHS_X_MPTR)) - mstore(0xa0, mload(PAIRING_LHS_Y_MPTR)) - mstore(0xc0, mload(PAIRING_RHS_X_MPTR)) - mstore(0xe0, mload(PAIRING_RHS_Y_MPTR)) - let challenge := mod(keccak256(0x00, 0x100), r) - - // [pairing_lhs] += challenge * [acc_lhs] - success := ec_mul_acc(success, challenge) - success := ec_add_acc(success, mload(PAIRING_LHS_X_MPTR), mload(PAIRING_LHS_Y_MPTR)) - mstore(PAIRING_LHS_X_MPTR, mload(0x00)) - mstore(PAIRING_LHS_Y_MPTR, mload(0x20)) - - // [pairing_rhs] += challenge * [acc_rhs] - mstore(0x00, mload(ACC_RHS_X_MPTR)) - mstore(0x20, mload(ACC_RHS_Y_MPTR)) - success := ec_mul_acc(success, challenge) - success := ec_add_acc(success, mload(PAIRING_RHS_X_MPTR), mload(PAIRING_RHS_Y_MPTR)) - mstore(PAIRING_RHS_X_MPTR, mload(0x00)) - mstore(PAIRING_RHS_Y_MPTR, mload(0x20)) - } - - // Perform pairing - success := ec_pairing( - success, - mload(PAIRING_LHS_X_MPTR), - mload(PAIRING_LHS_Y_MPTR), - mload(PAIRING_RHS_X_MPTR), - mload(PAIRING_RHS_Y_MPTR) - ) - - // Revert if anything fails - if iszero(success) { - revert(0x00, 0x00) - } - - // Return 1 as result if everything succeeds - mstore(0x00, 1) - return(0x00, 0x20) - } - } -} \ No newline at end of file diff --git a/contracts/src/Summa.sol b/contracts/src/Summa.sol deleted file mode 100644 index 66904f83..00000000 --- a/contracts/src/Summa.sol +++ /dev/null @@ -1,285 +0,0 @@ -// SPDX-License-Identifier: Apache-2.0 -pragma solidity ^0.8.18; - -// Uncomment this line to use console.log -//import "hardhat/console.sol"; - -import "@openzeppelin/contracts/access/Ownable.sol"; - -import "./interfaces/IVerifier.sol"; -import "./interfaces/IInclusionVerifier.sol"; - -contract Summa is Ownable { - /** - * @dev Struct representing the configuration of the Summa instance - * @param cryptocurrencyNames The names of the cryptocurrencies whose balances are interpolated in the polynomials - * @param cryptocurrencyChains The chains of the cryptocurrencies whose balances are interpolated in the polynomials - * @param balanceByteRange The number of bytes used to represent the balance of a cryptocurrency in the polynomials - */ - struct SummaConfig { - string[] cryptocurrencyNames; - string[] cryptocurrencyChains; - uint8 balanceByteRange; - } - /** - * @dev Struct representing an address ownership proof submitted by the CEX - * @param cexAddress The address owned by the CEX (submitted as a string, as it can be a non-EVM address) - * @param chain The name of the chain name where the address belongs (e.g., ETH, BTC) - * @param signature The signature of the message signed by the address public key - * @param message The message signed by the address public key - */ - struct AddressOwnershipProof { - string cexAddress; - string chain; - bytes signature; - bytes message; - } - - // Summa configuration - SummaConfig public config; - - // Verification key contract address - address public immutable verifyingKey; - - // List of all address ownership proofs submitted by the CEX - AddressOwnershipProof[] public addressOwnershipProofs; - - // Liabilities commitments by timestamp submitted by the CEX - mapping(uint256 => bytes) public commitments; - - // Convenience mapping to check if an address has already been verified - mapping(bytes32 => uint256) private _ownershipProofByAddress; - - // zkSNARK verifier of the valid polynomial interpolation - IVerifier private immutable polynomialInterpolationVerifier; - - // KZG verifier of the grand sum - IVerifier private immutable grandSumVerifier; - - // KZG verifier of the inclusion proof - IInclusionVerifier private immutable inclusionVerifier; - - event AddressOwnershipProofSubmitted( - AddressOwnershipProof[] addressOwnershipProofs - ); - event LiabilitiesCommitmentSubmitted( - uint256 indexed timestamp, - uint256[] totalBalances, - bytes snarkProof, - bytes grandSumProof - ); - - /** - * Summa contract - * @param _verifyingKey The address of the verification key contract - * @param _polynomialInterpolationVerifier the address of the polynomial interpolation zkSNARK verifier - * @param _grandSumVerifier the address of the grand sum KZG verifier - * @param _inclusionVerifier the address of the inclusion KZG verifier - * @param cryptocurrencyNames the names of the cryptocurrencies whose balances are interpolated in the polynomials - * @param cryptocurrencyChains the chain names of the cryptocurrencies whose balances are interpolated in the polynomials - * @param balanceByteRange maximum accepted byte range for the balance of a cryptocurrency - */ - constructor( - address _verifyingKey, - IVerifier _polynomialInterpolationVerifier, - IVerifier _grandSumVerifier, - IInclusionVerifier _inclusionVerifier, - string[] memory cryptocurrencyNames, - string[] memory cryptocurrencyChains, - uint8 balanceByteRange - ) { - require(_verifyingKey != address(0), "Invalid verifying key address"); - verifyingKey = _verifyingKey; - require( - cryptocurrencyNames.length == cryptocurrencyChains.length, - "Cryptocurrency names and chains number mismatch" - ); - for (uint i = 0; i < cryptocurrencyNames.length; i++) { - require( - bytes(cryptocurrencyNames[i]).length != 0 && - bytes(cryptocurrencyChains[i]).length != 0, - "Invalid cryptocurrency" - ); - } - require( - validateVKPermutationsLength( - _verifyingKey, - cryptocurrencyNames.length, - balanceByteRange - ), - "The config parameters do not correspond to the verifying key" - ); - require( - address(_polynomialInterpolationVerifier) != address(0), - "Invalid polynomial interpolation verifier address" - ); - polynomialInterpolationVerifier = _polynomialInterpolationVerifier; - require( - address(_grandSumVerifier) != address(0), - "Invalid grand sum verifier address" - ); - grandSumVerifier = _grandSumVerifier; - require( - address(_inclusionVerifier) != address(0), - "Invalid inclusion verifier address" - ); - inclusionVerifier = _inclusionVerifier; - config = SummaConfig( - cryptocurrencyNames, - cryptocurrencyChains, - balanceByteRange - ); - } - - /** - * @dev Validate the number of permutations in the verifying key - * @param vkContract The address of the verifying key contract - * @param numberOfCurrencies The number of cryptocurrencies whose polynomials are committed in the proof - * @return isValid True if the number of permutations in the verifying key corresponds to the number of cryptocurrencies - */ - function validateVKPermutationsLength( - address vkContract, - uint256 numberOfCurrencies, - uint8 balanceByteRange - ) internal view returns (bool isValid) { - // The number of permutations is 2 + (balanceByteRange/2) * numberOfCurrencies because of the circuit structure: - // 1 per instance column, 1 per constant column (range check) and balanceByteRange/2 per range check columns times the number of currencies - uint256 numPermutations = 2 + - (balanceByteRange / 2) * - numberOfCurrencies; - - uint256 startOffsetForPermutations = 0x2e0; // The value can be observed in the VerificationKey contract, the offset is pointing after all the parameters and the fixed column commitment - - // The offset after the last permutation is the start offset plus the number of permutations times 0x40 (the size of a permutation) - uint256 offsetAfterLastPermutation = startOffsetForPermutations + - numPermutations * - 0x40; - - // extcodecopy is a gas-expensive operation per byte, so we want to minimize the number of bytes we read. - // This hack is to read the 32 (0x20) bytes that overlap the last permutation and the empty memory location behind it. - // For example, a circuit with 2 currencies will have 10 permutations, so the location behind the last permutation will be at 0x2e0 + 10 * 0x40 = 0x0560 - // We read 0x20 bytes starting from 0x0550, which will include a piece of the last permutation and the empty memory location behind it. - uint256 readOffset = offsetAfterLastPermutation - 0x10; - bool valid; - // Extract the last permutation - assembly { - // Read the memory location into 0x00 - extcodecopy(vkContract, 0x00, readOffset, 0x20) - // Load the read bytes from 0x00 into a variable - let readBytes := mload(0x00) - - let leftHalf := shr(128, readBytes) // Shift right by 128 bits to get the left half - let rightHalf := and(readBytes, 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF) // Mask the right half - - // We expect the left 16 bytes to be nonzero and the right 16 bytes to be zero - valid := and(not(iszero(leftHalf)), iszero(rightHalf)) - } - return valid; - } - - function getAddressOwnershipProof( - bytes32 addressHash - ) public view returns (AddressOwnershipProof memory) { - require( - _ownershipProofByAddress[addressHash] > 0, - "Address not verified" - ); - // -1 comes from the fact that 0 is reserved to distinguish the case when the proof has not yet been submitted - return - addressOwnershipProofs[_ownershipProofByAddress[addressHash] - 1]; - } - - /** - * @dev Submit an optimistic proof of multiple address ownership for a CEX. The proof is subject to an off-chain verification as it's not feasible to verify the signatures of non-EVM chains in an Ethereum smart contract. - * @param _addressOwnershipProofs The list of address ownership proofs - */ - function submitProofOfAddressOwnership( - AddressOwnershipProof[] memory _addressOwnershipProofs - ) public onlyOwner { - for (uint i = 0; i < _addressOwnershipProofs.length; i++) { - bytes32 addressHash = keccak256( - abi.encodePacked(_addressOwnershipProofs[i].cexAddress) - ); - uint256 proofIndex = _ownershipProofByAddress[addressHash]; - require(proofIndex == 0, "Address already verified"); - - addressOwnershipProofs.push(_addressOwnershipProofs[i]); - _ownershipProofByAddress[addressHash] = addressOwnershipProofs - .length; - require( - bytes(_addressOwnershipProofs[i].cexAddress).length != 0 && - bytes(_addressOwnershipProofs[i].chain).length != 0 && - _addressOwnershipProofs[i].signature.length != 0 && - _addressOwnershipProofs[i].message.length != 0, - "Invalid proof of address ownership" - ); - } - - emit AddressOwnershipProofSubmitted(_addressOwnershipProofs); - } - - /** - * @dev Submit commitment for a CEX - * @param snarkProof ZK proof of the valid polynomial interpolation - * @param grandSumProof kzg proof of the grand sum - * @param totalBalances The array of total balances in the grand sum - * @param timestamp The timestamp at which the CEX took the snapshot of its assets and liabilities - */ - function submitCommitment( - bytes calldata snarkProof, - bytes calldata grandSumProof, - uint256[] memory totalBalances, - uint256 timestamp - ) public onlyOwner { - // Check input length - require(totalBalances.length > 0, "Invalid total balances length"); - require(grandSumProof.length == (totalBalances.length * 0x40), "Invalid grand sum proof length"); - require(snarkProof.length > grandSumProof.length, "Invalid snark proof length"); - - uint[] memory args = new uint[](1); - - // This is the instance value for checking zero value inside circuit - args[0] = 0; - require( - polynomialInterpolationVerifier.verifyProof(verifyingKey, snarkProof, args), - "Invalid snark proof" - ); - require( - totalBalances.length == config.cryptocurrencyNames.length, - "Liability commitments and cryptocurrencies number mismatch" - ); - - bytes calldata slicedSnarkProof = snarkProof[0:64 + grandSumProof.length]; - bytes memory combinedProofs = abi.encodePacked(grandSumProof, slicedSnarkProof[64:]); - - require(grandSumVerifier.verifyProof(verifyingKey, combinedProofs, totalBalances), "Invalid grand sum proof"); - - commitments[timestamp] = slicedSnarkProof; - - emit LiabilitiesCommitmentSubmitted(timestamp, totalBalances, slicedSnarkProof, grandSumProof); - } - - function verifyInclusionProof( - uint256 timestamp, - bytes memory inclusionProof, - uint256[] memory challenges, - uint256[] memory values - ) public view returns (bool) { - require(challenges.length == 4, "Invalid challenges length"); - - // Excluding `usename` in the values - require((values.length - 1) == config.cryptocurrencyNames.length, "Values length mismatch with config"); - - bytes memory snarkProof = commitments[timestamp]; - - bytes memory combinedProofs = new bytes(snarkProof.length + inclusionProof.length); - for (uint256 i = 0; i < inclusionProof.length; i++) { - combinedProofs[i] = inclusionProof[i]; - } - for (uint256 i = 0; i < snarkProof.length; i++) { - combinedProofs[i + inclusionProof.length] = snarkProof[i]; - } - - return inclusionVerifier.verifyProof(verifyingKey, combinedProofs, challenges, values); - } -} diff --git a/contracts/src/VerifyingKey.sol b/contracts/src/VerifyingKey.sol deleted file mode 100644 index 94ab49aa..00000000 --- a/contracts/src/VerifyingKey.sol +++ /dev/null @@ -1,55 +0,0 @@ -// SPDX-License-Identifier: MIT - -pragma solidity ^0.8.0; - -contract Halo2VerifyingKey { - constructor() { - assembly { - mstore(0x0000, 0x00996ed64113d5d86f42caab0f3d25466b0856015472de4bb809f168aabc2567) // vk_digest - mstore(0x0020, 0x0000000000000000000000000000000000000000000000000000000000000011) // k - mstore(0x0040, 0x30643640b9f82f90e83b698e5ea6179c7c05542e859533b48b9953a2f5360801) // n_inv - mstore(0x0060, 0x304cd1e79cfa5b0f054e981a27ed7706e7ea6b06a7f266ef8db819c179c2c3ea) // omega - mstore(0x0080, 0x193586da872cdeff023d6ab2263a131b4780db8878be3c3b7f8f019c06fcb0fb) // omega_inv - mstore(0x00a0, 0x299110e6835fd73731fb3ce6de87151988da403c265467a96b9cda0d7daa72e4) // omega_inv_to_l - mstore(0x00c0, 0x0000000000000000000000000000000000000000000000000000000000000001) // num_instances - mstore(0x00e0, 0x0000000000000000000000000000000000000000000000000000000000000000) // has_accumulator - mstore(0x0100, 0x0000000000000000000000000000000000000000000000000000000000000000) // acc_offset - mstore(0x0120, 0x0000000000000000000000000000000000000000000000000000000000000000) // num_acc_limbs - mstore(0x0140, 0x0000000000000000000000000000000000000000000000000000000000000000) // num_acc_limb_bits - mstore(0x0160, 0x0000000000000000000000000000000000000000000000000000000000000001) // g1_x - mstore(0x0180, 0x0000000000000000000000000000000000000000000000000000000000000002) // g1_y - mstore(0x01a0, 0x198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c2) // g2_x_1 - mstore(0x01c0, 0x1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed) // g2_x_2 - mstore(0x01e0, 0x090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b) // g2_y_1 - mstore(0x0200, 0x12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa) // g2_y_2 - mstore(0x0220, 0x26186a2d65ee4d2f9c9a5b91f86597d35f192cd120caf7e935d8443d1938e23d) // neg_s_g2_x_1 - mstore(0x0240, 0x30441fd1b5d3370482c42152a8899027716989a6996c2535bc9f7fee8aaef79e) // neg_s_g2_x_2 - mstore(0x0260, 0x16f363f103c80d7bbc8ad3c6867e0822bbc6000be91a4689755c7df40221c145) // neg_s_g2_y_1 - mstore(0x0280, 0x2b1cbb3e521edf5a622d82762a44a5e63f1e50b332d71154a4a7958d6011deff) // neg_s_g2_y_2 - mstore(0x02a0, 0x1404a2d17cd02c8f9fd79d74ac73c67d1881e62c6af354fa74d235c5e37dacfe) // fixed_comms[0].x - mstore(0x02c0, 0x2c1e30781f735e7977820d4ca9145010e28dcc808ee0f1e976477289057b7aec) // fixed_comms[0].y - mstore(0x02e0, 0x2dd3fd59098a5b4b4a616568bb6ba1a1e4c40e4b0df9ae94e37944d55ab651cf) // permutation_comms[0].x - mstore(0x0300, 0x25680c3525ba04435a9034d6e69c96de5133edfe37c226d3e31b60eff6b34ef0) // permutation_comms[0].y - mstore(0x0320, 0x1a224e6aeb9bb7de12c761fd1f49a733ff410c3f772aad6a2ec3c4decad43307) // permutation_comms[1].x - mstore(0x0340, 0x300a66b376af1187694e25dbcea3aac63114716af822fd4661519adbf9c649e9) // permutation_comms[1].y - mstore(0x0360, 0x27a7a66087a8c17b00ffb7fe9b76ba2199ca308bcb0ad100fa181886d6c9b936) // permutation_comms[2].x - mstore(0x0380, 0x23bc951a3c4307384bdec5d61be122a19c933db3266d6327a472e5203a9f785a) // permutation_comms[2].y - mstore(0x03a0, 0x0743ea40f14084db2673217283aa053f986896ee7c181f52118442e99c452974) // permutation_comms[3].x - mstore(0x03c0, 0x0203e3493a2594ece57d22cc75dd081ac68271ec7c758153cfd2152bfb5c19e3) // permutation_comms[3].y - mstore(0x03e0, 0x0f85936c44708409e3e9fb5e2a7ea6604b06997f0ac7fd488e3f147e05a88dbe) // permutation_comms[4].x - mstore(0x0400, 0x0497fbb7c4436dcf36ede6a30ad62e016e059a11a6548eb6980edeb2f1052133) // permutation_comms[4].y - mstore(0x0420, 0x0dcbacf368c01f61375c242e35edab12a22147e9d46bf685fb75454d60f5edbc) // permutation_comms[5].x - mstore(0x0440, 0x17720c95139aa3f5dec5b6bd56082f8deded2e4a1425d0a91e2743dd294fdc9c) // permutation_comms[5].y - mstore(0x0460, 0x284ac053d96a33fca69eca00e16eea75ad1bf008d2a742fc846ac73d17d46d73) // permutation_comms[6].x - mstore(0x0480, 0x14f45666a26b8d472186dbf78e606a82891e0f122a54264418cfe2615003dfb9) // permutation_comms[6].y - mstore(0x04a0, 0x1c517c335ad634422ef2eb5f615926e875afa9e9c589abf528d315a8a586b22d) // permutation_comms[7].x - mstore(0x04c0, 0x1220b1b13c91e8115106144bc417d4d3e6a9de3fb70406e68b4a5fd8a92f4327) // permutation_comms[7].y - mstore(0x04e0, 0x0cbaead666e172b1801b7ad17c3450ea2ce7d53c1e392cedf05023e59e53c95a) // permutation_comms[8].x - mstore(0x0500, 0x0ce200ab515efc390c459e0b492c15a50024c57fa70768c18389924e1e72982b) // permutation_comms[8].y - mstore(0x0520, 0x1d4848e8db74251fd01e018fedb71ca8e04c41746474ad4b4a39da132f86f30b) // permutation_comms[9].x - mstore(0x0540, 0x148a2252b7b6a07e21aa1bc5b1cc4826ac7f4a7a3e29fb7399dd7029d4bdaf27) // permutation_comms[9].y - - return(0, 0x0560) - } - } -} \ No newline at end of file diff --git a/contracts/src/interfaces/IInclusionVerifier.sol b/contracts/src/interfaces/IInclusionVerifier.sol deleted file mode 100644 index c67952f0..00000000 --- a/contracts/src/interfaces/IInclusionVerifier.sol +++ /dev/null @@ -1,22 +0,0 @@ -// SPDX-License-Identifier: Apache-2.0 -pragma solidity ^0.8.18; - -/** - * @dev Inclusion proof verifier - */ -interface IInclusionVerifier { - /** - * @dev Verify a proof - * @param vk The verification key - * @param proof The proof - * @param challenges The pre-calculated g2 points with challenge - * @param values The user data that includes userId, balance of currency - * @return true if the proof is valid, false otherwise - */ - function verifyProof( - address vk, - bytes calldata proof, - uint256[] calldata challenges, - uint256[] calldata values - ) external view returns (bool); -} diff --git a/contracts/src/interfaces/IVerifier.sol b/contracts/src/interfaces/IVerifier.sol deleted file mode 100644 index 31e3d5c9..00000000 --- a/contracts/src/interfaces/IVerifier.sol +++ /dev/null @@ -1,20 +0,0 @@ -// SPDX-License-Identifier: Apache-2.0 -pragma solidity ^0.8.18; - -/** - * @dev Zk-SNARK and grand sum proof proof verifier - */ -interface IVerifier { - /** - * @dev Verify a proof - * @param vk The verification key - * @param proof The proof - * @param instances The public inputs to the proof - * @return true if the proof is valid, false otherwise - */ - function verifyProof( - address vk, - bytes calldata proof, - uint256[] calldata instances - ) external view returns (bool); -} diff --git a/contracts/test/Summa.ts b/contracts/test/Summa.ts deleted file mode 100644 index 5b014dfc..00000000 --- a/contracts/test/Summa.ts +++ /dev/null @@ -1,495 +0,0 @@ -import { expect } from "chai"; -import { loadFixture } from "@nomicfoundation/hardhat-network-helpers"; -import { ethers } from "hardhat"; -import { Summa, Halo2VerifyingKey, Verifier, GrandSumVerifier, InclusionVerifier } from "../typechain-types"; -import { BigNumber } from "ethers"; -import { SignerWithAddress } from "@nomiclabs/hardhat-ethers/signers"; -import * as fs from "fs"; -import * as path from "path"; - -describe("Summa Contract", () => { - async function deploySummaFixture() { - // Contracts are deployed using the first signer/account by default - const [owner, addr1, addr2, addr3]: SignerWithAddress[] = - await ethers.getSigners(); - - const verifyingKey = await ethers.deployContract( - "src/VerifyingKey.sol:Halo2VerifyingKey" - ); - await verifyingKey.deployed(); - - const snarkVerifier = await ethers.deployContract( - "src/SnarkVerifier.sol:Verifier" - ); - await snarkVerifier.deployed(); - - const grandSumVerifier = await ethers.deployContract( - "src/GrandSumVerifier.sol:GrandSumVerifier" - ) as GrandSumVerifier; - await grandSumVerifier.deployed(); - - const inclusionVerifier = await ethers.deployContract( - "src/InclusionVerifier.sol:InclusionVerifier" - ) as InclusionVerifier; - await inclusionVerifier.deployed(); - - const summa = await ethers.deployContract("Summa", [ - verifyingKey.address, - snarkVerifier.address, - grandSumVerifier.address, - inclusionVerifier.address, - ["ETH", "BTC"], - ["ETH", "BTC"], - 8, // The number of bytes used to represent the balance of a cryptocurrency in the polynomials - ]); - await summa.deployed(); - - return { - summa: summa as Summa, - owner, - addr1, - addr2, - addr3, - }; - } - - describe("deployment tests", () => { - let verifyingKey: Halo2VerifyingKey; - let snarkVerifier: Verifier; - let grandSumVerifier: GrandSumVerifier; - let inclusionVerifier: InclusionVerifier; - - beforeEach(async () => { - // Deploy the verifying key and verifiers - verifyingKey = await ethers.deployContract( - "src/VerifyingKey.sol:Halo2VerifyingKey" - ) as Halo2VerifyingKey; - await verifyingKey.deployed(); - - snarkVerifier = await ethers.deployContract( - "src/SnarkVerifier.sol:Verifier" - ) as Verifier; - await snarkVerifier.deployed(); - - grandSumVerifier = await ethers.deployContract( - "src/GrandSumVerifier.sol:GrandSumVerifier" - ) as GrandSumVerifier; - await grandSumVerifier.deployed(); - - inclusionVerifier = await ethers.deployContract( - "src/InclusionVerifier.sol:InclusionVerifier" - ) as InclusionVerifier; - await inclusionVerifier.deployed(); - }); - - it("should not deploy with invalid currencies", async () => { - await expect( - ethers.deployContract("Summa", [ - verifyingKey.address, - snarkVerifier.address, - grandSumVerifier.address, - inclusionVerifier.address, - ["", "BTC"], - ["ETH", "BTC"], - 8, - ]) - ).to.be.revertedWith("Invalid cryptocurrency"); - - await expect( - ethers.deployContract("Summa", [ - verifyingKey.address, - snarkVerifier.address, - grandSumVerifier.address, - inclusionVerifier.address, - ["ETH", "BTC"], - ["ETH", ""], - 8, - ]) - ).to.be.revertedWith("Invalid cryptocurrency"); - - await expect( - ethers.deployContract("Summa", [ - verifyingKey.address, - snarkVerifier.address, - grandSumVerifier.address, - inclusionVerifier.address, - [], - ["ETH", ""], - 8, - ]) - ).to.be.revertedWith("Cryptocurrency names and chains number mismatch"); - }); - - it("should not deploy with invalid byte range", async () => { - await expect( - ethers.deployContract("Summa", [ - verifyingKey.address, - snarkVerifier.address, - grandSumVerifier.address, - inclusionVerifier.address, - ["ETH", "BTC"], - ["ETH", "BTC"], - 0, // Invalid byte range - ]) - ).to.be.revertedWith( - "The config parameters do not correspond to the verifying key" - ); - }); - - it("should not deploy with invalid verification key", async () => { - await expect( - ethers.deployContract("Summa", [ - ethers.constants.AddressZero, - snarkVerifier.address, - grandSumVerifier.address, - inclusionVerifier.address, - ["ETH", "BTC"], - ["ETH", "BTC"], - 8, - ]) - ).to.be.revertedWith("Invalid verifying key address"); - }); - - it("should not deploy with invalid snark verifier", async () => { - const verifyingKey = await ethers.deployContract( - "src/VerifyingKey.sol:Halo2VerifyingKey" - ); - await verifyingKey.deployed(); - await expect( - ethers.deployContract("Summa", [ - verifyingKey.address, - ethers.constants.AddressZero, - grandSumVerifier.address, - inclusionVerifier.address, - ["ETH", "BTC"], - ["ETH", "BTC"], - 8, - ]) - ).to.be.revertedWith("Invalid polynomial interpolation verifier address"); - }); - - - it("should not deploy with invalid grand sum verifier", async () => { - const verifyingKey = await ethers.deployContract( - "src/VerifyingKey.sol:Halo2VerifyingKey" - ); - await verifyingKey.deployed(); - await expect( - ethers.deployContract("Summa", [ - verifyingKey.address, - snarkVerifier.address, - ethers.constants.AddressZero, - inclusionVerifier.address, - ["ETH", "BTC"], - ["ETH", "BTC"], - 8, - ]) - ).to.be.revertedWith("Invalid grand sum verifier address"); - }); - - it("should not deploy with invalid inclusion verifier", async () => { - await expect( - ethers.deployContract("Summa", [ - verifyingKey.address, - snarkVerifier.address, - grandSumVerifier.address, - ethers.constants.AddressZero, - ["ETH", "BTC"], - ["ETH", "BTC"], - 8, - ]) - ).to.be.revertedWith("Invalid inclusion verifier address"); - }); - - it("should not deploy if the number of cryptocurrencies is not matching the verification key ", async () => { - const dummyVerifyingKey = await ethers.deployContract( - "src/DummyVerifyingKey.sol:Halo2VerifyingKey" - ); - await dummyVerifyingKey.deployed(); - - await expect( - ethers.deployContract("Summa", [ - dummyVerifyingKey.address, - snarkVerifier.address, - grandSumVerifier.address, - ethers.constants.AddressZero, - ["ETH", "BTC"], - ["ETH", "BTC"], - 8, - ]) - ).to.be.revertedWith( - "The config parameters do not correspond to the verifying key" - ); - }); - }); - - describe("verify address ownership", () => { - let summa: Summa; - let account1: SignerWithAddress; - let account2: SignerWithAddress; - let account3: SignerWithAddress; - let ownedAddresses: Summa.AddressOwnershipProofStruct[]; - const message = ethers.utils.defaultAbiCoder.encode( - ["string"], - ["Summa proof of solvency for CryptoExchange"] - ); - - beforeEach(async () => { - const deploymentInfo = await loadFixture(deploySummaFixture); - summa = deploymentInfo.summa as Summa; - account1 = deploymentInfo.addr1; - account2 = deploymentInfo.addr2; - account3 = deploymentInfo.addr3; - - //Reference signing procedure for ETH: - // const message = ethers.utils.defaultAbiCoder.encode( - // ["string"], - // ["Summa proof of solvency for CryptoExchange"] - // ); - // const hashedMessage = ethers.utils.solidityKeccak256( - // ["bytes"], - // [message] - // ); - // const signature = await deploymentInfo.addr3.signMessage( - // ethers.utils.arrayify(hashedMessage) - // ); - // console.log("signature", signature); - - ownedAddresses = [ - { - chain: "ETH", - cexAddress: account1.address.toString(), - signature: - "0x089b32327d332c295dc3b8873c205b72153211de6dc1c51235782b091cefb9d06d6df2661b86a7d441cd322f125b84901486b150e684221a7b7636eb8182af551b", - message: message, - }, - { - chain: "ETH", - cexAddress: account2.address.toString(), - signature: - "0xb17a9e25265d3b88de7bfad81e7accad6e3d5612308ff83cc0fef76a34152b0444309e8fc3dea5139e49b6fc83a8553071a7af3d0cfd3fb8c1aea2a4c171729c1c", - message: message, - }, - ]; - }); - - it("should verify the address ownership and store the addresses", async () => { - await expect(summa.submitProofOfAddressOwnership(ownedAddresses)) - .to.emit(summa, "AddressOwnershipProofSubmitted") - .withArgs((ownedAddresses: any) => { - return ( - ownedAddresses[0].chain == "ETH" && - ownedAddresses[0].cexAddress == account1.address && - ownedAddresses[0].signature == - "0x089b32327d332c295dc3b8873c205b72153211de6dc1c51235782b091cefb9d06d6df2661b86a7d441cd322f125b84901486b150e684221a7b7636eb8182af551b" && - ownedAddresses[0].message == message && - ownedAddresses[1].chain == "ETH" && - ownedAddresses[1].cexAddress == account2.address && - ownedAddresses[1].signature == - "0xb17a9e25265d3b88de7bfad81e7accad6e3d5612308ff83cc0fef76a34152b0444309e8fc3dea5139e49b6fc83a8553071a7af3d0cfd3fb8c1aea2a4c171729c1c" && - ownedAddresses[1].message == message - ); - }); - - const addr1Hash = ethers.utils.solidityKeccak256( - ["string"], - [account1.address] - ); - let proofOfAddressOwnership1 = await summa.getAddressOwnershipProof( - addr1Hash - ); - expect(proofOfAddressOwnership1.chain).to.be.equal("ETH"); - expect(proofOfAddressOwnership1.cexAddress).to.be.equal(account1.address); - expect(proofOfAddressOwnership1.signature).to.be.equal( - "0x089b32327d332c295dc3b8873c205b72153211de6dc1c51235782b091cefb9d06d6df2661b86a7d441cd322f125b84901486b150e684221a7b7636eb8182af551b" - ); - expect(proofOfAddressOwnership1.message).to.be.equal(message); - const addr2Hash = ethers.utils.solidityKeccak256( - ["string"], - [account2.address] - ); - let proofOfAddressOwnership2 = await summa.getAddressOwnershipProof( - addr2Hash - ); - expect(proofOfAddressOwnership2.chain).to.be.equal("ETH"); - expect(proofOfAddressOwnership2.cexAddress).to.be.equal(account2.address); - expect(proofOfAddressOwnership2.signature).to.be.equal( - "0xb17a9e25265d3b88de7bfad81e7accad6e3d5612308ff83cc0fef76a34152b0444309e8fc3dea5139e49b6fc83a8553071a7af3d0cfd3fb8c1aea2a4c171729c1c" - ); - expect(proofOfAddressOwnership2.message).to.be.equal(message); - }); - - it("should revert if the caller is not the owner", async () => { - await expect( - summa.connect(account3).submitProofOfAddressOwnership(ownedAddresses) - ).to.be.revertedWith("Ownable: caller is not the owner"); - }); - - it("should revert if the address ownership has already been verified", async () => { - await summa.submitProofOfAddressOwnership(ownedAddresses); - await expect( - summa.submitProofOfAddressOwnership(ownedAddresses) - ).to.be.revertedWith("Address already verified"); - }); - - it("should revert if the proof of address ownership has invalid address", async () => { - ownedAddresses[0].cexAddress = ""; - await expect( - summa.submitProofOfAddressOwnership(ownedAddresses) - ).to.be.revertedWith("Invalid proof of address ownership"); - }); - - it("should revert if the proof of address ownership has invalid chain type", async () => { - ownedAddresses[0].chain = ""; - await expect( - summa.submitProofOfAddressOwnership(ownedAddresses) - ).to.be.revertedWith("Invalid proof of address ownership"); - }); - - it("should revert if the proof of address ownership has invalid signature", async () => { - ownedAddresses[0].signature = ethers.utils.toUtf8Bytes(""); - await expect( - summa.submitProofOfAddressOwnership(ownedAddresses) - ).to.be.revertedWith("Invalid proof of address ownership"); - }); - - it("should revert if the proof of address ownership has invalid message", async () => { - ownedAddresses[0].message = ethers.utils.toUtf8Bytes(""); - await expect( - summa.submitProofOfAddressOwnership(ownedAddresses) - ).to.be.revertedWith("Invalid proof of address ownership"); - }); - - it("should revert if requesting proof for unverified address", async () => { - const addr1Hash = ethers.utils.solidityKeccak256( - ["string"], - [account1.address] - ); - await expect( - summa.getAddressOwnershipProof(addr1Hash) - ).to.be.revertedWith("Address not verified"); - }); - }); - - describe("submit commitment", () => { - let rangeCheckSnarkProof: string; - let grandSumProof: string; - let totalBalances: BigNumber[]; - let summa: Summa; - - beforeEach(async () => { - const deploymentInfo = await loadFixture(deploySummaFixture); - summa = deploymentInfo.summa as Summa; - - const commitmentCalldataJson = fs.readFileSync( - path.resolve( - __dirname, - "../../prover/bin/commitment_solidity_calldata.json" - ), - "utf-8" - ); - const commitmentCalldata: any = JSON.parse(commitmentCalldataJson); - - rangeCheckSnarkProof = commitmentCalldata.range_check_snark_proof; - grandSumProof = commitmentCalldata.grand_sums_batch_proof; - totalBalances = commitmentCalldata.total_balances; - }); - - it("should submit a valid commitment", async () => { - let expect_commitment_on_contract = rangeCheckSnarkProof.slice(0, grandSumProof.length + 128); - expect(await summa.commitments(1)).to.be.equal("0x"); - await summa.submitCommitment(rangeCheckSnarkProof, grandSumProof, totalBalances, 1); - expect(await summa.commitments(1)).to.be.equal(expect_commitment_on_contract); - }); - - it("should revert when the grand sum proof length mismatches with the total balances", async () => { - - let wrong_total_balance = totalBalances.slice(0, totalBalances.length - 1); - await expect( - summa.submitCommitment(rangeCheckSnarkProof, grandSumProof, wrong_total_balance, 1) - ).to.be.revertedWith("Invalid grand sum proof length"); - - let wrong_grand_sum_proof = grandSumProof.slice(0, grandSumProof.length - 64); - await expect( - summa.submitCommitment(rangeCheckSnarkProof, wrong_grand_sum_proof, totalBalances, 1) - ).to.be.revertedWith("Invalid grand sum proof length"); - }); - - it("should revert a snark proof if its length is less than the grand sum proof", async () => { - let wrong_range_check_snark_proof = rangeCheckSnarkProof.slice(0, grandSumProof.length - 64); - await expect( - summa.submitCommitment(wrong_range_check_snark_proof, grandSumProof, totalBalances, 1) - ).to.be.revertedWith("Invalid snark proof length"); - }); - - it("should revert due to an invalid snark proof", async () => { - let wrong_range_check_snark_proof = rangeCheckSnarkProof.replace("1", "2"); - await expect( - summa.submitCommitment(wrong_range_check_snark_proof, grandSumProof, totalBalances, 1) - ).to.be.reverted; - }); - }); - - describe("verify inclusion proof", () => { - let rangeCheckSnarkProof: string; - let inclusionProof: string; - let challenges: BigNumber[]; - let values: BigNumber[]; - let summa: Summa; - - beforeEach(async () => { - const deploymentInfo = await loadFixture(deploySummaFixture); - summa = deploymentInfo.summa as Summa; - - const commitmentCalldataJson = fs.readFileSync( - path.resolve( - __dirname, - "../../prover/bin/commitment_solidity_calldata.json" - ), - "utf-8" - ); - const commitmentCalldata: any = JSON.parse(commitmentCalldataJson); - - rangeCheckSnarkProof = commitmentCalldata.range_check_snark_proof; - const grandSumProof = commitmentCalldata.grand_sums_batch_proof; - const totalBalances = commitmentCalldata.total_balances; - - const inclusionCalldataJson = fs.readFileSync( - path.resolve( - __dirname, - "../../prover/bin/inclusion_proof_solidity_calldata.json" - ), - "utf-8" - ); - const inclusionCalldata: any = JSON.parse(inclusionCalldataJson); - - await summa.submitCommitment(rangeCheckSnarkProof, grandSumProof, totalBalances, 1); - - inclusionProof = inclusionCalldata.proof; - challenges = inclusionCalldata.challenges; - values = inclusionCalldata.user_values; - }); - - // Testing verifyInclusionProof function - it("should verify inclusion proof with `verifyInclusionProof` function", async () => { - expect(await summa.verifyInclusionProof(1, inclusionProof, challenges, values)).to.be.true; - }); - - it("should not verify inclusion proof with wrong snark proof", async () => { - // No commitment is submitted at timestamp 2 - await expect(summa.verifyInclusionProof(2, inclusionProof, challenges, values)).to.be.reverted; - }); - - it("should not verify inclusion proof with wrong challenge points", async () => { - let wrongChallenges = challenges.slice(0, challenges.length - 1); - - await expect(summa.verifyInclusionProof(1, inclusionProof, wrongChallenges, values)).to.be.revertedWith("Invalid challenges length"); - }); - - it("should not verify inclusion proof with value length mismatches with config", async () => { - let wrongValues = values.slice(0, values.length - 1); - - await expect(summa.verifyInclusionProof(1, inclusionProof, challenges, wrongValues)).to.be.revertedWith("Values length mismatch with config"); - }); - }); -}); diff --git a/contracts/test/Verifiers.ts b/contracts/test/Verifiers.ts deleted file mode 100644 index 3b23c9ba..00000000 --- a/contracts/test/Verifiers.ts +++ /dev/null @@ -1,179 +0,0 @@ -import { expect } from "chai"; -import { loadFixture } from "@nomicfoundation/hardhat-network-helpers"; -import { ethers } from "hardhat"; -import { Verifier as SnarkVerifier, InclusionVerifier, GrandSumVerifier, Halo2VerifyingKey } from "../typechain-types"; -import { BigNumber } from "ethers"; -import { BytesLike } from "ethers/lib/utils"; -import * as fs from "fs"; -import * as path from "path"; - -describe("Verifier Contracts", () => { - async function deployVerifyingFixture() { - // Contracts are deployed using the first signer/account by default - const verifyingKey = await ethers.deployContract( - "src/VerifyingKey.sol:Halo2VerifyingKey", - ) as Halo2VerifyingKey; - - const commitmentJson = fs.readFileSync(path.resolve(__dirname, "../../prover/bin/commitment_solidity_calldata.json"), "utf-8"); - const commitmentCalldata = JSON.parse(commitmentJson); - - return { - verifyingKey, - commitmentCalldata, - }; - } - - - describe("Snark Proof Verifier", () => { - let snarkVerifier: SnarkVerifier; - let verifyingKey: Halo2VerifyingKey; - let commitmentCalldata: { - range_check_snark_proof: BytesLike; - grand_sums_batch_proof: BytesLike; - total_balances: BigNumber[]; - }; - beforeEach(async () => { - const deploymentInfo = await loadFixture(deployVerifyingFixture); - verifyingKey = deploymentInfo.verifyingKey; - commitmentCalldata = deploymentInfo.commitmentCalldata; - - // Deploy SnarkVerifier contract - snarkVerifier = await ethers.deployContract( - "src/SnarkVerifier.sol:Verifier" - ) as SnarkVerifier; - - await snarkVerifier.deployed(); - }); - - it("should verify snark proof", async () => { - // The verifier contract checks the number of instances in the VerifyingKey contract at 0x00c0 with the given 'instances' input - expect(await snarkVerifier.verifyProof(verifyingKey.address, commitmentCalldata.range_check_snark_proof, [0])).to.be.true; - }); - - it("should revert with invalid proof", async () => { - await expect(snarkVerifier.verifyProof(verifyingKey.address, commitmentCalldata.grand_sums_batch_proof, [1])).to.be.reverted; - }); - }); - - describe("GrandSum Proof Verifier", () => { - let grandSumVerifier: GrandSumVerifier; - let verifyingKey: Halo2VerifyingKey; - let commitmentCalldata: { - range_check_snark_proof: BytesLike; - grand_sums_batch_proof: BytesLike; - total_balances: BigNumber[]; - }; - - beforeEach(async () => { - const deploymentInfo = await loadFixture(deployVerifyingFixture); - verifyingKey = deploymentInfo.verifyingKey; - commitmentCalldata = deploymentInfo.commitmentCalldata; - - // Deploy GrandSumVerifier contract - grandSumVerifier = await ethers.deployContract( - "src/GrandSumVerifier.sol:GrandSumVerifier" - ) as GrandSumVerifier; - }); - - it("should verify grand sum proof", async () => { - // Concatenates the snark proof and the grand sum proof - let snarkProofArray = ethers.utils.arrayify(commitmentCalldata.range_check_snark_proof); - let grandSumProofArray = ethers.utils.arrayify(commitmentCalldata.grand_sums_batch_proof); - let totalBalances = commitmentCalldata.total_balances; - - // The first 64 bytes of the snark proof represent a commitment to the corresponding to the user identity - // Starting from the next 64 bytes, each set of 64 bytes represents commitments corresponding to the total sum of balances - let grandSumCommitments = snarkProofArray.slice(64, (64 + grandSumProofArray.length)); - - // The verifier iterates over points in the proofs while verifying them. - // The proofs look like: - // i = 0 1 N - // [grand_sum_proof_p1_x, grand_sum_proof_p1_y, grand_sum_proof_p2_x, grand_sum_proof_p2_y, ... grand_sum_proof_pN_x, grand_sum_proof_pN_y, ...] - // [ snark_proof_p1_x, snark_proof_p1_y, snark_proof_p2_x, snark_proof_p2_y, ... snark_proof_pN_x, snark_proof_pN_y, ...] - // Where `N` is the number of currencies - let proofs = ethers.utils.concat([grandSumProofArray, grandSumCommitments]); - - expect(await grandSumVerifier.verifyProof(verifyingKey.address, proofs, totalBalances)).to.be.not.reverted; - }); - }); - - - describe("Inclusion Proof Verifier", () => { - let inclusionVerifier: InclusionVerifier; - let verifyingKey: Halo2VerifyingKey; - let inclusionProof: BytesLike; - let commitmentCalldata: { - range_check_snark_proof: BytesLike; - grand_sums_batch_proof: BytesLike; - total_balances: BigNumber[]; - }; - let challenges: [BigNumber, BigNumber, BigNumber, BigNumber]; - let userIdBigUint: BigNumber; - let balance1: BigNumber; - let balance2: BigNumber; - - beforeEach(async () => { - const deploymentInfo = await loadFixture(deployVerifyingFixture); - verifyingKey = deploymentInfo.verifyingKey; - commitmentCalldata = deploymentInfo.commitmentCalldata; - - inclusionVerifier = await ethers.deployContract( - "src/InclusionVerifier.sol:InclusionVerifier" - ) as InclusionVerifier; - await inclusionVerifier.deployed(); - - verifyingKey = deploymentInfo.verifyingKey; - - const inclusionJson = fs.readFileSync( - path.resolve( - __dirname, - "../../prover/bin/inclusion_proof_solidity_calldata.json" - ), - "utf-8" - ); - const inclusionCalldata: any = JSON.parse(inclusionJson); - - inclusionProof = inclusionCalldata.proof; - challenges = inclusionCalldata.challenges; - userIdBigUint = inclusionCalldata.user_values[0]; - balance1 = inclusionCalldata.user_values[1]; - balance2 = inclusionCalldata.user_values[2]; - }); - - it("should verify inclusion proof", async () => { - // Generating proof with concatenated snark proof and inclusion proof - let snarkProof = commitmentCalldata.range_check_snark_proof; - - // Slice the snarkProof to match the length of inclusionProof - let proofArray = ethers.utils.arrayify(inclusionProof); - let snarkProofarray = ethers.utils.arrayify(snarkProof).slice(0, proofArray.length); - - let proofs = ethers.utils.concat([proofArray, snarkProofarray]); - - expect(await inclusionVerifier.verifyProof( - verifyingKey.address, - proofs, - [challenges[0], challenges[1], challenges[2], challenges[3]], - [userIdBigUint, balance1, balance2] - )).to.be.true; - }); - - it("should revert invalid inclusion proof", async () => { - // Generating proof with concatenated snark proof and inclusion proof - let snarkProof = commitmentCalldata.range_check_snark_proof; - - // Slice the snarkProof to match the length of inclusionProof - let proofArray = ethers.utils.arrayify(inclusionProof); - let snarkProofarray = ethers.utils.arrayify(snarkProof).slice(0, proofArray.length); - - let wrongProofs = ethers.utils.concat([snarkProofarray, snarkProofarray]); - - await expect(inclusionVerifier.verifyProof( - verifyingKey.address, - wrongProofs, - [challenges[0], challenges[1], challenges[2], challenges[3]], - [userIdBigUint, balance1, balance2] - )).to.be.reverted; - }); - }); -}); diff --git a/contracts/tsconfig.json b/contracts/tsconfig.json deleted file mode 100644 index 574e785c..00000000 --- a/contracts/tsconfig.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "compilerOptions": { - "target": "es2020", - "module": "commonjs", - "esModuleInterop": true, - "forceConsistentCasingInFileNames": true, - "strict": true, - "skipLibCheck": true, - "resolveJsonModule": true - } -}