From 188d70ff7175a99ff75999816ce78faf7a3fd7b4 Mon Sep 17 00:00:00 2001 From: daniecon Date: Sun, 25 Sep 2022 15:10:58 +0200 Subject: [PATCH] las commit --- backend/contracts/ZkSocialRecoveryWallet.sol | 42 +-- backend/contracts/ZkWalletFactory.sol | 5 - .../ZkSocialRecoveryWallet.ts | 122 ++++++++ .../contracts/ZkWalletFactory.ts | 14 +- .../ZkSocialRecoveryWallet__factory.ts | 78 +++-- .../contracts/ZkWalletFactory__factory.ts | 12 +- dapp/circuit_js/generate_calldata.js | 33 -- dapp/circuit_js/generate_witness.js | 13 - dapp/circuit_js/witness_calculator.js | 289 ------------------ .../dashboard/BoxSocialRecovery.tsx | 16 +- .../dashboard/ModalChangePassword.tsx | 2 +- dapp/components/dashboard/ModalSetSocial.tsx | 22 +- dapp/components/dashboard/ModalTxDetails.tsx | 6 + dapp/helpers/contract.tsx | 71 ----- dapp/helpers/contracts.ts | 43 ++- dapp/pages/dashboard.tsx | 130 +++++--- 16 files changed, 376 insertions(+), 522 deletions(-) delete mode 100644 dapp/circuit_js/generate_calldata.js delete mode 100644 dapp/circuit_js/generate_witness.js delete mode 100644 dapp/circuit_js/witness_calculator.js delete mode 100644 dapp/helpers/contract.tsx diff --git a/backend/contracts/ZkSocialRecoveryWallet.sol b/backend/contracts/ZkSocialRecoveryWallet.sol index d2372d6..7fcd3f9 100644 --- a/backend/contracts/ZkSocialRecoveryWallet.sol +++ b/backend/contracts/ZkSocialRecoveryWallet.sol @@ -25,6 +25,9 @@ contract ZkSocialRecoveryWallet is IERC721Receiver { uint256 private thresholdForRecovery; uint256 public currentRecoveryNumber; + //to retrieve in frontend + uint256 public numberTrustees; + address[] public Trustees; mapping(address => bool) Trustee; @@ -104,37 +107,40 @@ contract ZkSocialRecoveryWallet is IERC721Receiver { constructor( address _hashCheckVerifier, uint256 _ownerPasswordHash, - address[] memory _trustees, - uint256[] memory _passwordHashes, uint256 _thresholdForRecovery, uint256 _root, address _otpVerifier ) { require(_hashCheckVerifier != address(0), 'Zero address verifier'); - require( - _trustees.length == _passwordHashes.length, - 'Trustees and hashes length diff' - ); - require( - _trustees.length >= _thresholdForRecovery, - 'Threshold is greater than number of trustees' - ); hashCheckVerifier = _hashCheckVerifier; owner = msg.sender; ownerPasswordHash = _ownerPasswordHash; + + thresholdForRecovery = _thresholdForRecovery; + otpVerifierAddress = _otpVerifier; + otpVerifier = new ZkOtpValidator(_root, _otpVerifier); + } - for (uint256 i = 0; i < _trustees.length; i++) { + // To set trustees after deployment + function setTrustees(address[] memory _trustees) external isOwner { + for (uint256 i = 0; i < _trustees.length; i++) { require(!Trustee[_trustees[i]], 'Duplicate trustee in list'); Trustee[_trustees[i]] = true; - trusteeToPasswordHash[_trustees[i]] = _passwordHashes[i]; } - - thresholdForRecovery = _thresholdForRecovery; - - otpVerifierAddress = _otpVerifier; - - otpVerifier = new ZkOtpValidator(_root, _otpVerifier); + Trustees = _trustees; + numberTrustees = _trustees.length; + } + + // Set trustees password after deployment +function setTrusteesPasswords(uint256[] memory _passwordHashes) external isOwner { + require( + Trustees.length == _passwordHashes.length, + 'Trustees and hashes length diff' + ); + for (uint256 i = 0; i < Trustees.length; i++) { + trusteeToPasswordHash[Trustees[i]] = _passwordHashes[i]; + } } function startRecovery( diff --git a/backend/contracts/ZkWalletFactory.sol b/backend/contracts/ZkWalletFactory.sol index 1c5df4b..eca5e7b 100644 --- a/backend/contracts/ZkWalletFactory.sol +++ b/backend/contracts/ZkWalletFactory.sol @@ -15,18 +15,13 @@ contract ZkWalletFactory { function deployWallet( uint256 _ownerPasswordHash, - address[] memory _trustees, - uint256[] memory _passwordHashes, uint256 _thresholdForRecovery, address _otpVerifier, uint256 _root - ) external returns (address walletAddress) { ZkSocialRecoveryWallet wallet = new ZkSocialRecoveryWallet( hashCheckVerifier, _ownerPasswordHash, - _trustees, - _passwordHashes, _thresholdForRecovery, _root, _otpVerifier diff --git a/backend/typechain-types/contracts/ZkSocialRecoveryWallet.sol/ZkSocialRecoveryWallet.ts b/backend/typechain-types/contracts/ZkSocialRecoveryWallet.sol/ZkSocialRecoveryWallet.ts index 5f711f4..bf4f419 100644 --- a/backend/typechain-types/contracts/ZkSocialRecoveryWallet.sol/ZkSocialRecoveryWallet.ts +++ b/backend/typechain-types/contracts/ZkSocialRecoveryWallet.sol/ZkSocialRecoveryWallet.ts @@ -29,32 +29,44 @@ import type { export interface ZkSocialRecoveryWalletInterface extends utils.Interface { functions: { + "Trustees(uint256)": FunctionFragment; "cancelRecovery(uint256[2],uint256[2][2],uint256[2],uint256[1],uint256)": FunctionFragment; "currentRecoveryNumber()": FunctionFragment; "executeRecoveryChange(uint256[2],uint256[2][2],uint256[2],uint256[1],uint256)": FunctionFragment; "executeTxn(uint256[2],uint256[2][2],uint256[2],uint256[2],address,uint256)": FunctionFragment; "isRecoveryOn()": FunctionFragment; + "numberTrustees()": FunctionFragment; "onERC721Received(address,address,uint256,bytes)": FunctionFragment; "otpVerifierAddress()": FunctionFragment; "owner()": FunctionFragment; + "setTrustees(address[])": FunctionFragment; + "setTrusteesPasswords(uint256[])": FunctionFragment; "startRecovery(uint256[2],uint256[2][2],uint256[2],uint256[1],address)": FunctionFragment; "voteInRecovery(uint256[2],uint256[2][2],uint256[2],uint256[1],uint256)": FunctionFragment; }; getFunction( nameOrSignatureOrTopic: + | "Trustees" | "cancelRecovery" | "currentRecoveryNumber" | "executeRecoveryChange" | "executeTxn" | "isRecoveryOn" + | "numberTrustees" | "onERC721Received" | "otpVerifierAddress" | "owner" + | "setTrustees" + | "setTrusteesPasswords" | "startRecovery" | "voteInRecovery" ): FunctionFragment; + encodeFunctionData( + functionFragment: "Trustees", + values: [PromiseOrValue] + ): string; encodeFunctionData( functionFragment: "cancelRecovery", values: [ @@ -103,6 +115,10 @@ export interface ZkSocialRecoveryWalletInterface extends utils.Interface { functionFragment: "isRecoveryOn", values?: undefined ): string; + encodeFunctionData( + functionFragment: "numberTrustees", + values?: undefined + ): string; encodeFunctionData( functionFragment: "onERC721Received", values: [ @@ -117,6 +133,14 @@ export interface ZkSocialRecoveryWalletInterface extends utils.Interface { values?: undefined ): string; encodeFunctionData(functionFragment: "owner", values?: undefined): string; + encodeFunctionData( + functionFragment: "setTrustees", + values: [PromiseOrValue[]] + ): string; + encodeFunctionData( + functionFragment: "setTrusteesPasswords", + values: [PromiseOrValue[]] + ): string; encodeFunctionData( functionFragment: "startRecovery", values: [ @@ -144,6 +168,7 @@ export interface ZkSocialRecoveryWalletInterface extends utils.Interface { ] ): string; + decodeFunctionResult(functionFragment: "Trustees", data: BytesLike): Result; decodeFunctionResult( functionFragment: "cancelRecovery", data: BytesLike @@ -161,6 +186,10 @@ export interface ZkSocialRecoveryWalletInterface extends utils.Interface { functionFragment: "isRecoveryOn", data: BytesLike ): Result; + decodeFunctionResult( + functionFragment: "numberTrustees", + data: BytesLike + ): Result; decodeFunctionResult( functionFragment: "onERC721Received", data: BytesLike @@ -170,6 +199,14 @@ export interface ZkSocialRecoveryWalletInterface extends utils.Interface { data: BytesLike ): Result; decodeFunctionResult(functionFragment: "owner", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "setTrustees", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "setTrusteesPasswords", + data: BytesLike + ): Result; decodeFunctionResult( functionFragment: "startRecovery", data: BytesLike @@ -268,6 +305,11 @@ export interface ZkSocialRecoveryWallet extends BaseContract { removeListener: OnEvent; functions: { + Trustees( + arg0: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[string]>; + cancelRecovery( a: [PromiseOrValue, PromiseOrValue], b: [ @@ -309,6 +351,8 @@ export interface ZkSocialRecoveryWallet extends BaseContract { isRecoveryOn(overrides?: CallOverrides): Promise<[boolean]>; + numberTrustees(overrides?: CallOverrides): Promise<[BigNumber]>; + onERC721Received( arg0: PromiseOrValue, arg1: PromiseOrValue, @@ -321,6 +365,16 @@ export interface ZkSocialRecoveryWallet extends BaseContract { owner(overrides?: CallOverrides): Promise<[string]>; + setTrustees( + _trustees: PromiseOrValue[], + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + setTrusteesPasswords( + _passwordHashes: PromiseOrValue[], + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + startRecovery( a: [PromiseOrValue, PromiseOrValue], b: [ @@ -346,6 +400,11 @@ export interface ZkSocialRecoveryWallet extends BaseContract { ): Promise; }; + Trustees( + arg0: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + cancelRecovery( a: [PromiseOrValue, PromiseOrValue], b: [ @@ -387,6 +446,8 @@ export interface ZkSocialRecoveryWallet extends BaseContract { isRecoveryOn(overrides?: CallOverrides): Promise; + numberTrustees(overrides?: CallOverrides): Promise; + onERC721Received( arg0: PromiseOrValue, arg1: PromiseOrValue, @@ -399,6 +460,16 @@ export interface ZkSocialRecoveryWallet extends BaseContract { owner(overrides?: CallOverrides): Promise; + setTrustees( + _trustees: PromiseOrValue[], + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + setTrusteesPasswords( + _passwordHashes: PromiseOrValue[], + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + startRecovery( a: [PromiseOrValue, PromiseOrValue], b: [ @@ -424,6 +495,11 @@ export interface ZkSocialRecoveryWallet extends BaseContract { ): Promise; callStatic: { + Trustees( + arg0: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + cancelRecovery( a: [PromiseOrValue, PromiseOrValue], b: [ @@ -465,6 +541,8 @@ export interface ZkSocialRecoveryWallet extends BaseContract { isRecoveryOn(overrides?: CallOverrides): Promise; + numberTrustees(overrides?: CallOverrides): Promise; + onERC721Received( arg0: PromiseOrValue, arg1: PromiseOrValue, @@ -477,6 +555,16 @@ export interface ZkSocialRecoveryWallet extends BaseContract { owner(overrides?: CallOverrides): Promise; + setTrustees( + _trustees: PromiseOrValue[], + overrides?: CallOverrides + ): Promise; + + setTrusteesPasswords( + _passwordHashes: PromiseOrValue[], + overrides?: CallOverrides + ): Promise; + startRecovery( a: [PromiseOrValue, PromiseOrValue], b: [ @@ -545,6 +633,11 @@ export interface ZkSocialRecoveryWallet extends BaseContract { }; estimateGas: { + Trustees( + arg0: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + cancelRecovery( a: [PromiseOrValue, PromiseOrValue], b: [ @@ -586,6 +679,8 @@ export interface ZkSocialRecoveryWallet extends BaseContract { isRecoveryOn(overrides?: CallOverrides): Promise; + numberTrustees(overrides?: CallOverrides): Promise; + onERC721Received( arg0: PromiseOrValue, arg1: PromiseOrValue, @@ -598,6 +693,16 @@ export interface ZkSocialRecoveryWallet extends BaseContract { owner(overrides?: CallOverrides): Promise; + setTrustees( + _trustees: PromiseOrValue[], + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + setTrusteesPasswords( + _passwordHashes: PromiseOrValue[], + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + startRecovery( a: [PromiseOrValue, PromiseOrValue], b: [ @@ -624,6 +729,11 @@ export interface ZkSocialRecoveryWallet extends BaseContract { }; populateTransaction: { + Trustees( + arg0: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + cancelRecovery( a: [PromiseOrValue, PromiseOrValue], b: [ @@ -667,6 +777,8 @@ export interface ZkSocialRecoveryWallet extends BaseContract { isRecoveryOn(overrides?: CallOverrides): Promise; + numberTrustees(overrides?: CallOverrides): Promise; + onERC721Received( arg0: PromiseOrValue, arg1: PromiseOrValue, @@ -681,6 +793,16 @@ export interface ZkSocialRecoveryWallet extends BaseContract { owner(overrides?: CallOverrides): Promise; + setTrustees( + _trustees: PromiseOrValue[], + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + setTrusteesPasswords( + _passwordHashes: PromiseOrValue[], + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + startRecovery( a: [PromiseOrValue, PromiseOrValue], b: [ diff --git a/backend/typechain-types/contracts/ZkWalletFactory.ts b/backend/typechain-types/contracts/ZkWalletFactory.ts index 4998561..69d3807 100644 --- a/backend/typechain-types/contracts/ZkWalletFactory.ts +++ b/backend/typechain-types/contracts/ZkWalletFactory.ts @@ -29,7 +29,7 @@ import type { export interface ZkWalletFactoryInterface extends utils.Interface { functions: { - "deployWallet(uint256,address[],uint256[],uint256,address,uint256)": FunctionFragment; + "deployWallet(uint256,uint256,address,uint256)": FunctionFragment; "getUserWalletAddress(address)": FunctionFragment; "hashCheckVerifier()": FunctionFragment; "userAddressToWalletAddress(address)": FunctionFragment; @@ -47,8 +47,6 @@ export interface ZkWalletFactoryInterface extends utils.Interface { functionFragment: "deployWallet", values: [ PromiseOrValue, - PromiseOrValue[], - PromiseOrValue[], PromiseOrValue, PromiseOrValue, PromiseOrValue @@ -127,8 +125,6 @@ export interface ZkWalletFactory extends BaseContract { functions: { deployWallet( _ownerPasswordHash: PromiseOrValue, - _trustees: PromiseOrValue[], - _passwordHashes: PromiseOrValue[], _thresholdForRecovery: PromiseOrValue, _otpVerifier: PromiseOrValue, _root: PromiseOrValue, @@ -150,8 +146,6 @@ export interface ZkWalletFactory extends BaseContract { deployWallet( _ownerPasswordHash: PromiseOrValue, - _trustees: PromiseOrValue[], - _passwordHashes: PromiseOrValue[], _thresholdForRecovery: PromiseOrValue, _otpVerifier: PromiseOrValue, _root: PromiseOrValue, @@ -173,8 +167,6 @@ export interface ZkWalletFactory extends BaseContract { callStatic: { deployWallet( _ownerPasswordHash: PromiseOrValue, - _trustees: PromiseOrValue[], - _passwordHashes: PromiseOrValue[], _thresholdForRecovery: PromiseOrValue, _otpVerifier: PromiseOrValue, _root: PromiseOrValue, @@ -202,8 +194,6 @@ export interface ZkWalletFactory extends BaseContract { estimateGas: { deployWallet( _ownerPasswordHash: PromiseOrValue, - _trustees: PromiseOrValue[], - _passwordHashes: PromiseOrValue[], _thresholdForRecovery: PromiseOrValue, _otpVerifier: PromiseOrValue, _root: PromiseOrValue, @@ -226,8 +216,6 @@ export interface ZkWalletFactory extends BaseContract { populateTransaction: { deployWallet( _ownerPasswordHash: PromiseOrValue, - _trustees: PromiseOrValue[], - _passwordHashes: PromiseOrValue[], _thresholdForRecovery: PromiseOrValue, _otpVerifier: PromiseOrValue, _root: PromiseOrValue, diff --git a/backend/typechain-types/factories/contracts/ZkSocialRecoveryWallet.sol/ZkSocialRecoveryWallet__factory.ts b/backend/typechain-types/factories/contracts/ZkSocialRecoveryWallet.sol/ZkSocialRecoveryWallet__factory.ts index cd0de56..abac58c 100644 --- a/backend/typechain-types/factories/contracts/ZkSocialRecoveryWallet.sol/ZkSocialRecoveryWallet__factory.ts +++ b/backend/typechain-types/factories/contracts/ZkSocialRecoveryWallet.sol/ZkSocialRecoveryWallet__factory.ts @@ -29,16 +29,6 @@ const _abi = [ name: "_ownerPasswordHash", type: "uint256", }, - { - internalType: "address[]", - name: "_trustees", - type: "address[]", - }, - { - internalType: "uint256[]", - name: "_passwordHashes", - type: "uint256[]", - }, { internalType: "uint256", name: "_thresholdForRecovery", @@ -146,6 +136,25 @@ const _abi = [ name: "VotedInRecovery", type: "event", }, + { + inputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + name: "Trustees", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, { inputs: [ { @@ -282,6 +291,19 @@ const _abi = [ stateMutability: "view", type: "function", }, + { + inputs: [], + name: "numberTrustees", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, { inputs: [ { @@ -342,6 +364,32 @@ const _abi = [ stateMutability: "view", type: "function", }, + { + inputs: [ + { + internalType: "address[]", + name: "_trustees", + type: "address[]", + }, + ], + name: "setTrustees", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "uint256[]", + name: "_passwordHashes", + type: "uint256[]", + }, + ], + name: "setTrusteesPasswords", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, { inputs: [ { @@ -427,7 +475,7 @@ const _abi = [ ]; const _bytecode = - "0x60806040523480156200001157600080fd5b506040516200247b3803806200247b833981016040819052620000349162000489565b6001600160a01b038716620000905760405162461bcd60e51b815260206004820152601560248201527f5a65726f2061646472657373207665726966696572000000000000000000000060448201526064015b60405180910390fd5b8351855114620000e35760405162461bcd60e51b815260206004820152601f60248201527f547275737465657320616e6420686173686573206c656e677468206469666600604482015260640162000087565b82855110156200014b5760405162461bcd60e51b815260206004820152602c60248201527f5468726573686f6c642069732067726561746572207468616e206e756d62657260448201526b206f6620747275737465657360a01b606482015260840162000087565b600080546001600160a01b0389166001600160a01b0319918216178255600180549091163317905560028790555b8551811015620002e457600560008783815181106200019c576200019c6200059d565b6020908102919091018101516001600160a01b031682528101919091526040016000205460ff1615620002125760405162461bcd60e51b815260206004820152601960248201527f4475706c6963617465207472757374656520696e206c69737400000000000000604482015260640162000087565b6001600560008884815181106200022d576200022d6200059d565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff0219169083151502179055508481815181106200028157620002816200059d565b602002602001015160066000888481518110620002a257620002a26200059d565b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020819055508080620002db90620005b3565b91505062000179565b50600383905560098054610100600160a81b0319166101006001600160a01b03841602179055604051829082906200031c906200037c565b9182526001600160a01b03166020820152604001604051809103906000f0801580156200034d573d6000803e3d6000fd5b50600a80546001600160a01b0319166001600160a01b039290921691909117905550620005db95505050505050565b6105348062001f4783390190565b80516001600160a01b0381168114620003a257600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715620003e857620003e8620003a7565b604052919050565b60006001600160401b038211156200040c576200040c620003a7565b5060051b60200190565b600082601f8301126200042857600080fd5b81516020620004416200043b83620003f0565b620003bd565b82815260059290921b840181019181810190868411156200046157600080fd5b8286015b848110156200047e578051835291830191830162000465565b509695505050505050565b600080600080600080600060e0888a031215620004a557600080fd5b620004b0886200038a565b60208981015160408b01519299509750906001600160401b0380821115620004d757600080fd5b818b0191508b601f830112620004ec57600080fd5b8151620004fd6200043b82620003f0565b81815260059190911b8301840190848101908e8311156200051d57600080fd5b938501935b82851015620005465762000536856200038a565b8252938501939085019062000522565b60608e0151909a5094505050808311156200056057600080fd5b5050620005708a828b0162000416565b9450506080880151925060a088015191506200058f60c089016200038a565b905092959891949750929550565b634e487b7160e01b600052603260045260246000fd5b600060018201620005d457634e487b7160e01b600052601160045260246000fd5b5060010190565b61195c80620005eb6000396000f3fe6080604052600436106100b55760003560e01c80638da5cb5b116100695780639c62291a1161004e5780639c62291a14610249578063b21fa1ae14610263578063e9c4bfe71461028357600080fd5b80638da5cb5b146101ec5780639517a2a91461022457600080fd5b806337dc18131161009a57806337dc18131461016c5780634f20804b1461018e578063789bcd08146101bc57600080fd5b8063037133f1146100c1578063150b7a02146100f757600080fd5b366100bc57005b600080fd5b3480156100cd57600080fd5b506100e16100dc3660046114f5565b610299565b6040516100ee91906115b0565b60405180910390f35b34801561010357600080fd5b5061013b6101123660046115ca565b7f150b7a0200000000000000000000000000000000000000000000000000000000949350505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000090911681526020016100ee565b34801561017857600080fd5b5061018c6101873660046116f8565b610476565b005b34801561019a57600080fd5b506101ae6101a936600461175b565b6106f7565b6040519081526020016100ee565b3480156101c857600080fd5b506101dc6101d73660046116f8565b610ba4565b60405190151581526020016100ee565b3480156101f857600080fd5b5060015461020c906001600160a01b031681565b6040516001600160a01b0390911681526020016100ee565b34801561023057600080fd5b5060095461020c9061010090046001600160a01b031681565b34801561025557600080fd5b506009546101dc9060ff1681565b34801561026f57600080fd5b5061018c61027e3660046116f8565b610f6a565b34801561028f57600080fd5b506101ae60045481565b6001546060906001600160a01b031633146102e75760405162461bcd60e51b81526020600482015260096024820152682737ba1027bbb732b960b91b60448201526064015b60405180910390fd5b600a546040517fa9f3402c0000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063a9f3402c90610336908a908a908a908a9060040161181e565b6020604051808303816000875af1158015610355573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610379919061185e565b6103c55760405162461bcd60e51b815260206004820152600c60248201527f50726f6f66206661696c6564000000000000000000000000000000000000000060448201526064016102de565b600080846001600160a01b03168460405160006040518083038185875af1925050503d8060008114610413576040519150601f19603f3d011682016040523d82523d6000602084013e610418565b606091505b50915091508161046a5760405162461bcd60e51b815260206004820152601660248201527f65787465726e616c2063616c6c2072657665727465640000000000000000000060448201526064016102de565b98975050505050505050565b6001546001600160a01b031633146104bc5760405162461bcd60e51b81526020600482015260096024820152682737ba1027bbb732b960b91b60448201526064016102de565b60095460ff1661050e5760405162461bcd60e51b815260206004820152601860248201527f5265636f7665727920686173206e6f742073746172746564000000000000000060448201526064016102de565b6000546040516343753b4d60e01b815286918691869186916001600160a01b03909116906343753b4d9061054c908790879087908790600401611880565b602060405180830381865afa158015610569573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061058d919061185e565b6105d95760405162461bcd60e51b815260206004820152601760248201527f50617373776f72642070726f6f6620696e76616c69642100000000000000000060448201526064016102de565b835160009081526008602052604090205460ff161561062a5760405162461bcd60e51b815260206004820152600d60248201526c141c9bdbd9881a5cc81d5cd959609a1b60448201526064016102de565b60025486511461066d5760405162461bcd60e51b815260206004820152600e60248201526d15dc9bdb99c81c185cdcdddbdc9960921b60448201526064016102de565b6009805460ff191690556001546040518681526001600160a01b03909116907f500ec1d4b692d3c788bfd78a898de379cfd93ab8177575efc7593f87bd051a079060200160405180910390a260016008600086815b6020020151815260200190815260200160002060006101000a81548160ff021916908315150217905550505050505050505050565b3360009081526005602052604081205460ff166107445760405162461bcd60e51b815260206004820152600b60248201526a4e6f74205472757374656560a81b60448201526064016102de565b60095460ff16156107975760405162461bcd60e51b815260206004820152601660248201527f5265636f7665727920697320696e2070726f636573730000000000000000000060448201526064016102de565b6000546040516343753b4d60e01b815287918791879187916001600160a01b03909116906343753b4d906107d5908790879087908790600401611880565b602060405180830381865afa1580156107f2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610816919061185e565b6108625760405162461bcd60e51b815260206004820152601760248201527f50617373776f72642070726f6f6620696e76616c69642100000000000000000060448201526064016102de565b835160009081526008602052604090205460ff16156108b35760405162461bcd60e51b815260206004820152600d60248201526c141c9bdbd9881a5cc81d5cd959609a1b60448201526064016102de565b6109176040518060400160405280600c81526020017f747275737465652068617368000000000000000000000000000000000000000081525060066000336001600160a01b03166001600160a01b03168152602001908152602001600020546112be565b60408051808201909152600581527f496e7075740000000000000000000000000000000000000000000000000000006020820152875161095791906112be565b336000908152600660205260409020548751146109a75760405162461bcd60e51b815260206004820152600e60248201526d15dc9bdb99c81c185cdcdddbdc9960921b60448201526064016102de565b6001600160a01b0386166109fd5760405162461bcd60e51b815260206004820152600c60248201527f5a65726f2061646472657373000000000000000000000000000000000000000060448201526064016102de565b6001600160a01b03861660009081526007602052604090205460ff1615610a8c5760405162461bcd60e51b815260206004820152602260248201527f4f776e65722073686f756c64206e6f742062652061207061737420616464726560448201527f737300000000000000000000000000000000000000000000000000000000000060648201526084016102de565b60048054906000610a9c836118dd565b90915550506004546000908152600b6020526040812060018101805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038a16179055805490918290610aeb836118dd565b90915550503360008181526002830160209081526040918290208054600160ff19918216811790925560098054909116909117905560045491519182526001600160a01b038a16917f4ae23dc2e5f7892600076b48a0cfdbcc206c2aba4e323da13765339b2b8978d8910160405180910390a360045495505060016008600086815b6020020151815260200190815260200160002060006101000a81548160ff0219169083151502179055505050505095945050505050565b3360009081526005602052604081205460ff16610bf15760405162461bcd60e51b815260206004820152600b60248201526a4e6f74205472757374656560a81b60448201526064016102de565b60095460ff16610c435760405162461bcd60e51b815260206004820152601860248201527f5265636f7665727920686173206e6f742073746172746564000000000000000060448201526064016102de565b6000546040516343753b4d60e01b815287918791879187916001600160a01b03909116906343753b4d90610c81908790879087908790600401611880565b602060405180830381865afa158015610c9e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cc2919061185e565b610d0e5760405162461bcd60e51b815260206004820152601760248201527f50617373776f72642070726f6f6620696e76616c69642100000000000000000060448201526064016102de565b835160009081526008602052604090205460ff1615610d5f5760405162461bcd60e51b815260206004820152600d60248201526c141c9bdbd9881a5cc81d5cd959609a1b60448201526064016102de565b33600090815260066020526040902054875114610daf5760405162461bcd60e51b815260206004820152600e60248201526d15dc9bdb99c81c185cdcdddbdc9960921b60448201526064016102de565b610ded6040518060400160405280600581526020017f4865726531000000000000000000000000000000000000000000000000000000815250611335565b600454861115610e3f5760405162461bcd60e51b815260206004820152601b60248201527f57726f6e67205265636f7665727920726f756e64206e756d626572000000000060448201526064016102de565b610e7d6040518060400160405280600481526020017f4865726500000000000000000000000000000000000000000000000000000000815250611335565b6000868152600b60209081526040808320338452600281019092529091205460ff1615610eec5760405162461bcd60e51b815260206004820152601560248201527f5472757374656520616c726561647920766f746564000000000000000000000060448201526064016102de565b8054816000610efa836118dd565b909155505033600081815260028301602052604090819020805460ff1916600190811790915590519097507f7f7906f4f6e51fac746e81b4885d9775eb44445765139416bcd03b12b262968a90610f54908a815260200190565b60405180910390a2506001600860008681610b6d565b3360009081526005602052604090205460ff16610fb75760405162461bcd60e51b815260206004820152600b60248201526a4e6f74205472757374656560a81b60448201526064016102de565b60095460ff166110095760405162461bcd60e51b815260206004820152601860248201527f5265636f7665727920686173206e6f742073746172746564000000000000000060448201526064016102de565b6000546040516343753b4d60e01b815286918691869186916001600160a01b03909116906343753b4d90611047908790879087908790600401611880565b602060405180830381865afa158015611064573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611088919061185e565b6110d45760405162461bcd60e51b815260206004820152601760248201527f50617373776f72642070726f6f6620696e76616c69642100000000000000000060448201526064016102de565b835160009081526008602052604090205460ff16156111255760405162461bcd60e51b815260206004820152600d60248201526c141c9bdbd9881a5cc81d5cd959609a1b60448201526064016102de565b336000908152600660205260409020548651146111755760405162461bcd60e51b815260206004820152600e60248201526d15dc9bdb99c81c185cdcdddbdc9960921b60448201526064016102de565b6000858152600b60205260409020600354815410156111d65760405162461bcd60e51b815260206004820152601060248201527f566f746573204e6f7420656e6f7567680000000000000000000000000000000060448201526064016102de565b600181810180547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001781556009805460ff199081169091558254915473ffffffffffffffffffffffffffffffffffffffff1983166001600160a01b03918216908117855560009081526007602052604090819020805490931685179092559254905191831692169082907fcbaa7c7c351e2d5655fc08d9c383adcf4736af160c800b53df1f1dd221f826c8906112a6908b815260200190565b60405180910390a350600190506008600086816106c2565b61133182826040516024016112d4929190611904565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fb60e72cc000000000000000000000000000000000000000000000000000000001790526113a9565b5050565b6113a68160405160240161134991906115b0565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f41304fac000000000000000000000000000000000000000000000000000000001790526113a9565b50565b80516a636f6e736f6c652e6c6f67602083016000808483855afa5050505050565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff81118282101715611403576114036113ca565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715611432576114326113ca565b604052919050565b600082601f83011261144b57600080fd5b6114536113e0565b80604084018581111561146557600080fd5b845b8181101561147f578035845260209384019301611467565b509095945050505050565b600082601f83011261149b57600080fd5b6114a36113e0565b8060808401858111156114b557600080fd5b845b8181101561147f576114c9878261143a565b84526020909301926040016114b7565b80356001600160a01b03811681146114f057600080fd5b919050565b600080600080600080610180878903121561150f57600080fd5b611519888861143a565b9550611528886040890161148a565b94506115378860c0890161143a565b935061154788610100890161143a565b925061155661014088016114d9565b915061016087013590509295509295509295565b6000815180845260005b8181101561159057602081850181015186830182015201611574565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006115c3602083018461156a565b9392505050565b600080600080608085870312156115e057600080fd5b6115e9856114d9565b935060206115f88187016114d9565b935060408601359250606086013567ffffffffffffffff8082111561161c57600080fd5b818801915088601f83011261163057600080fd5b813581811115611642576116426113ca565b611654601f8201601f19168501611409565b9150808252898482850101111561166a57600080fd5b808484018584013760008482840101525080935050505092959194509250565b600082601f83011261169b57600080fd5b604051602080820182811067ffffffffffffffff821117156116bf576116bf6113ca565b60405281848201868111156116d357600080fd5b855b818110156116ec57803583529183019183016116d5565b50929695505050505050565b6000806000806000610140868803121561171157600080fd5b61171b878761143a565b945061172a876040880161148a565b93506117398760c0880161143a565b925061174987610100880161168a565b94979396509194610120013592915050565b6000806000806000610140868803121561177457600080fd5b61177e878761143a565b945061178d876040880161148a565b935061179c8760c0880161143a565b92506117ac87610100880161168a565b91506117bb61012087016114d9565b90509295509295909350565b8060005b60028110156117ea5781518452602093840193909101906001016117cb565b50505050565b8060005b60028110156117ea576118088483516117c7565b60409390930192602091909101906001016117f4565b610140810161182d82876117c7565b61183a60408301866117f0565b61184760c08301856117c7565b6118556101008301846117c7565b95945050505050565b60006020828403121561187057600080fd5b815180151581146115c357600080fd5b610120810161188f82876117c7565b61189c60408301866117f0565b6118a960c08301856117c7565b61010082018360005b60018110156118d15781518352602092830192909101906001016118b2565b50505095945050505050565b6000600182016118fd57634e487b7160e01b600052601160045260246000fd5b5060010190565b604081526000611917604083018561156a565b9050826020830152939250505056fea2646970667358221220200f08929360ebc500980f3a6b3768f4bd742680c3c2debf9bbce9c20a541f3664736f6c6343000811003360c060405234801561001057600080fd5b5060405161053438038061053483398101604081905261002f91610046565b6080919091526001600160a01b031660a052610083565b6000806040838503121561005957600080fd5b825160208401519092506001600160a01b038116811461007857600080fd5b809150509250929050565b60805160a05161048d6100a7600039600061016101526000605e015261048d6000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063a9f3402c14610030575b600080fd5b61004361003e3660046102da565b610057565b604051901515815260200160405180910390f35b80516000907f0000000000000000000000000000000000000000000000000000000000000000146100cf5760405162461bcd60e51b815260206004820152600e60248201527f496e636f6f7265637420726f6f7400000000000000000000000000000000000060448201526064015b60405180910390fd5b6000546020830151116101245760405162461bcd60e51b815260206004820152600960248201527f4f6c642050726f6f66000000000000000000000000000000000000000000000060448201526064016100c6565b6040517ff5c9d69e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063f5c9d69e9061019c9088908890889088906004016103a3565b602060405180830381865afa1580156101b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101dd919061042e565b6102295760405162461bcd60e51b815260206004820152600d60248201527f496e76616c69642070726f6f660000000000000000000000000000000000000060448201526064016100c6565b506020015160005550600192915050565b6040805190810167ffffffffffffffff81118282101715610284577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405290565b600082601f83011261029b57600080fd5b6102a361023a565b8060408401858111156102b557600080fd5b845b818110156102cf5780358452602093840193016102b7565b509095945050505050565b60008060008061014085870312156102f157600080fd5b6102fb868661028a565b9350604086605f87011261030e57600080fd5b61031661023a565b8060c088018981111561032857600080fd5b8389015b8181101561034d5761033e8b8261028a565b8452602090930192840161032c565b5081965061035b8a8261028a565b95505050505061036f86610100870161028a565b905092959194509250565b8060005b600281101561039d57815184526020938401939091019060010161037e565b50505050565b61014081016103b2828761037a565b6040808301866000805b60028082106103cb5750610405565b835185845b838110156103ee5782518252602092830192909101906001016103d0565b5050509385019350602092909201916001016103bc565b505050505061041760c083018561037a565b61042561010083018461037a565b95945050505050565b60006020828403121561044057600080fd5b8151801515811461045057600080fd5b939250505056fea26469706673582212206395795d36789e7a9b6888bfe90d51af8eaca0172948c5706e44adf31974fadf64736f6c63430008110033"; + "0x60806040523480156200001157600080fd5b506040516200259a3803806200259a83398101604081905262000034916200017c565b6001600160a01b0385166200008f5760405162461bcd60e51b815260206004820152601560248201527f5a65726f20616464726573732076657269666965720000000000000000000000604482015260640160405180910390fd5b600080546001600160a01b038088166001600160a01b031992831617909255600180549091163317905560028590556003849055600b805491831661010002610100600160a81b031990921691909117905560405182908290620000f39062000151565b9182526001600160a01b03166020820152604001604051809103906000f08015801562000124573d6000803e3d6000fd5b50600c80546001600160a01b0319166001600160a01b039290921691909117905550620001d19350505050565b610534806200206683390190565b80516001600160a01b03811681146200017757600080fd5b919050565b600080600080600060a086880312156200019557600080fd5b620001a0866200015f565b9450602086015193506040860151925060608601519150620001c5608087016200015f565b90509295509295909350565b611e8580620001e16000396000f3fe6080604052600436106100e15760003560e01c8063789bcd081161007f5780639c62291a116100595780639c62291a146102cb578063b21fa1ae146102e5578063bb3accf014610305578063e9c4bfe71461032557600080fd5b8063789bcd08146102565780638da5cb5b146102865780639517a2a9146102a657600080fd5b806337dc1813116100bb57806337dc1813146101bc5780634b58867f146101de5780634e8a2409146101fe5780634f20804b1461023657600080fd5b8063037133f1146100ed57806307238be314610123578063150b7a021461014757600080fd5b366100e857005b600080fd5b3480156100f957600080fd5b5061010d6101083660046118a8565b61033b565b60405161011a9190611963565b60405180910390f35b34801561012f57600080fd5b5061013960055481565b60405190815260200161011a565b34801561015357600080fd5b5061018b61016236600461197d565b7f150b7a0200000000000000000000000000000000000000000000000000000000949350505050565b6040517fffffffff00000000000000000000000000000000000000000000000000000000909116815260200161011a565b3480156101c857600080fd5b506101dc6101d7366004611aab565b610518565b005b3480156101ea57600080fd5b506101dc6101f9366004611b32565b610799565b34801561020a57600080fd5b5061021e610219366004611bc8565b6108aa565b6040516001600160a01b03909116815260200161011a565b34801561024257600080fd5b50610139610251366004611be1565b6108d4565b34801561026257600080fd5b50610276610271366004611aab565b610d81565b604051901515815260200161011a565b34801561029257600080fd5b5060015461021e906001600160a01b031681565b3480156102b257600080fd5b50600b5461021e9061010090046001600160a01b031681565b3480156102d757600080fd5b50600b546102769060ff1681565b3480156102f157600080fd5b506101dc610300366004611aab565b611147565b34801561031157600080fd5b506101dc610320366004611c4d565b61149b565b34801561033157600080fd5b5061013960045481565b6001546060906001600160a01b031633146103895760405162461bcd60e51b81526020600482015260096024820152682737ba1027bbb732b960b91b60448201526064015b60405180910390fd5b600c546040517fa9f3402c0000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063a9f3402c906103d8908a908a908a908a90600401611d31565b6020604051808303816000875af11580156103f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061041b9190611d71565b6104675760405162461bcd60e51b815260206004820152600c60248201527f50726f6f66206661696c656400000000000000000000000000000000000000006044820152606401610380565b600080846001600160a01b03168460405160006040518083038185875af1925050503d80600081146104b5576040519150601f19603f3d011682016040523d82523d6000602084013e6104ba565b606091505b50915091508161050c5760405162461bcd60e51b815260206004820152601660248201527f65787465726e616c2063616c6c207265766572746564000000000000000000006044820152606401610380565b98975050505050505050565b6001546001600160a01b0316331461055e5760405162461bcd60e51b81526020600482015260096024820152682737ba1027bbb732b960b91b6044820152606401610380565b600b5460ff166105b05760405162461bcd60e51b815260206004820152601860248201527f5265636f7665727920686173206e6f74207374617274656400000000000000006044820152606401610380565b6000546040516343753b4d60e01b815286918691869186916001600160a01b03909116906343753b4d906105ee908790879087908790600401611d93565b602060405180830381865afa15801561060b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061062f9190611d71565b61067b5760405162461bcd60e51b815260206004820152601760248201527f50617373776f72642070726f6f6620696e76616c6964210000000000000000006044820152606401610380565b83516000908152600a602052604090205460ff16156106cc5760405162461bcd60e51b815260206004820152600d60248201526c141c9bdbd9881a5cc81d5cd959609a1b6044820152606401610380565b60025486511461070f5760405162461bcd60e51b815260206004820152600e60248201526d15dc9bdb99c81c185cdcdddbdc9960921b6044820152606401610380565b600b805460ff191690556001546040518681526001600160a01b03909116907f500ec1d4b692d3c788bfd78a898de379cfd93ab8177575efc7593f87bd051a079060200160405180910390a26001600a600086815b6020020151815260200190815260200160002060006101000a81548160ff021916908315150217905550505050505050505050565b6001546001600160a01b031633146107df5760405162461bcd60e51b81526020600482015260096024820152682737ba1027bbb732b960b91b6044820152606401610380565b8051600654146108315760405162461bcd60e51b815260206004820152601f60248201527f547275737465657320616e6420686173686573206c656e6774682064696666006044820152606401610380565b60005b6006548110156108a65781818151811061085057610850611df0565b6020026020010151600860006006848154811061086f5761086f611df0565b60009182526020808320909101546001600160a01b031683528201929092526040019020558061089e81611e06565b915050610834565b5050565b600681815481106108ba57600080fd5b6000918252602090912001546001600160a01b0316905081565b3360009081526007602052604081205460ff166109215760405162461bcd60e51b815260206004820152600b60248201526a4e6f74205472757374656560a81b6044820152606401610380565b600b5460ff16156109745760405162461bcd60e51b815260206004820152601660248201527f5265636f7665727920697320696e2070726f63657373000000000000000000006044820152606401610380565b6000546040516343753b4d60e01b815287918791879187916001600160a01b03909116906343753b4d906109b2908790879087908790600401611d93565b602060405180830381865afa1580156109cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109f39190611d71565b610a3f5760405162461bcd60e51b815260206004820152601760248201527f50617373776f72642070726f6f6620696e76616c6964210000000000000000006044820152606401610380565b83516000908152600a602052604090205460ff1615610a905760405162461bcd60e51b815260206004820152600d60248201526c141c9bdbd9881a5cc81d5cd959609a1b6044820152606401610380565b610af46040518060400160405280600c81526020017f747275737465652068617368000000000000000000000000000000000000000081525060086000336001600160a01b03166001600160a01b03168152602001908152602001600020546115ee565b60408051808201909152600581527f496e70757400000000000000000000000000000000000000000000000000000060208201528751610b3491906115ee565b33600090815260086020526040902054875114610b845760405162461bcd60e51b815260206004820152600e60248201526d15dc9bdb99c81c185cdcdddbdc9960921b6044820152606401610380565b6001600160a01b038616610bda5760405162461bcd60e51b815260206004820152600c60248201527f5a65726f206164647265737300000000000000000000000000000000000000006044820152606401610380565b6001600160a01b03861660009081526009602052604090205460ff1615610c695760405162461bcd60e51b815260206004820152602260248201527f4f776e65722073686f756c64206e6f742062652061207061737420616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610380565b60048054906000610c7983611e06565b90915550506004546000908152600d6020526040812060018101805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038a16179055805490918290610cc883611e06565b90915550503360008181526002830160209081526040918290208054600160ff199182168117909255600b8054909116909117905560045491519182526001600160a01b038a16917f4ae23dc2e5f7892600076b48a0cfdbcc206c2aba4e323da13765339b2b8978d8910160405180910390a36004549550506001600a600086815b6020020151815260200190815260200160002060006101000a81548160ff0219169083151502179055505050505095945050505050565b3360009081526007602052604081205460ff16610dce5760405162461bcd60e51b815260206004820152600b60248201526a4e6f74205472757374656560a81b6044820152606401610380565b600b5460ff16610e205760405162461bcd60e51b815260206004820152601860248201527f5265636f7665727920686173206e6f74207374617274656400000000000000006044820152606401610380565b6000546040516343753b4d60e01b815287918791879187916001600160a01b03909116906343753b4d90610e5e908790879087908790600401611d93565b602060405180830381865afa158015610e7b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e9f9190611d71565b610eeb5760405162461bcd60e51b815260206004820152601760248201527f50617373776f72642070726f6f6620696e76616c6964210000000000000000006044820152606401610380565b83516000908152600a602052604090205460ff1615610f3c5760405162461bcd60e51b815260206004820152600d60248201526c141c9bdbd9881a5cc81d5cd959609a1b6044820152606401610380565b33600090815260086020526040902054875114610f8c5760405162461bcd60e51b815260206004820152600e60248201526d15dc9bdb99c81c185cdcdddbdc9960921b6044820152606401610380565b610fca6040518060400160405280600581526020017f4865726531000000000000000000000000000000000000000000000000000000815250611661565b60045486111561101c5760405162461bcd60e51b815260206004820152601b60248201527f57726f6e67205265636f7665727920726f756e64206e756d62657200000000006044820152606401610380565b61105a6040518060400160405280600481526020017f4865726500000000000000000000000000000000000000000000000000000000815250611661565b6000868152600d60209081526040808320338452600281019092529091205460ff16156110c95760405162461bcd60e51b815260206004820152601560248201527f5472757374656520616c726561647920766f74656400000000000000000000006044820152606401610380565b80548160006110d783611e06565b909155505033600081815260028301602052604090819020805460ff1916600190811790915590519097507f7f7906f4f6e51fac746e81b4885d9775eb44445765139416bcd03b12b262968a90611131908a815260200190565b60405180910390a2506001600a60008681610d4a565b3360009081526007602052604090205460ff166111945760405162461bcd60e51b815260206004820152600b60248201526a4e6f74205472757374656560a81b6044820152606401610380565b600b5460ff166111e65760405162461bcd60e51b815260206004820152601860248201527f5265636f7665727920686173206e6f74207374617274656400000000000000006044820152606401610380565b6000546040516343753b4d60e01b815286918691869186916001600160a01b03909116906343753b4d90611224908790879087908790600401611d93565b602060405180830381865afa158015611241573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112659190611d71565b6112b15760405162461bcd60e51b815260206004820152601760248201527f50617373776f72642070726f6f6620696e76616c6964210000000000000000006044820152606401610380565b83516000908152600a602052604090205460ff16156113025760405162461bcd60e51b815260206004820152600d60248201526c141c9bdbd9881a5cc81d5cd959609a1b6044820152606401610380565b336000908152600860205260409020548651146113525760405162461bcd60e51b815260206004820152600e60248201526d15dc9bdb99c81c185cdcdddbdc9960921b6044820152606401610380565b6000858152600d60205260409020600354815410156113b35760405162461bcd60e51b815260206004820152601060248201527f566f746573204e6f7420656e6f756768000000000000000000000000000000006044820152606401610380565b600181810180547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1674010000000000000000000000000000000000000000178155600b805460ff199081169091558254915473ffffffffffffffffffffffffffffffffffffffff1983166001600160a01b03918216908117855560009081526009602052604090819020805490931685179092559254905191831692169082907fcbaa7c7c351e2d5655fc08d9c383adcf4736af160c800b53df1f1dd221f826c890611483908b815260200190565b60405180910390a35060019050600a60008681610764565b6001546001600160a01b031633146114e15760405162461bcd60e51b81526020600482015260096024820152682737ba1027bbb732b960b91b6044820152606401610380565b60005b81518110156115d3576007600083838151811061150357611503611df0565b6020908102919091018101516001600160a01b031682528101919091526040016000205460ff16156115775760405162461bcd60e51b815260206004820152601960248201527f4475706c6963617465207472757374656520696e206c697374000000000000006044820152606401610380565b60016007600084848151811061158f5761158f611df0565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055806115cb81611e06565b9150506114e4565b5080516115e79060069060208401906116f6565b5051600555565b6108a68282604051602401611604929190611e2d565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fb60e72cc000000000000000000000000000000000000000000000000000000001790526116d5565b6116d2816040516024016116759190611963565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f41304fac000000000000000000000000000000000000000000000000000000001790526116d5565b50565b80516a636f6e736f6c652e6c6f67602083016000808483855afa5050505050565b828054828255906000526020600020908101928215611758579160200282015b82811115611758578251825473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03909116178255602090920191600190910190611716565b50611764929150611768565b5090565b5b808211156117645760008155600101611769565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156117b6576117b661177d565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156117e5576117e561177d565b604052919050565b600082601f8301126117fe57600080fd5b611806611793565b80604084018581111561181857600080fd5b845b8181101561183257803584526020938401930161181a565b509095945050505050565b600082601f83011261184e57600080fd5b611856611793565b80608084018581111561186857600080fd5b845b818110156118325761187c87826117ed565b845260209093019260400161186a565b80356001600160a01b03811681146118a357600080fd5b919050565b60008060008060008061018087890312156118c257600080fd5b6118cc88886117ed565b95506118db886040890161183d565b94506118ea8860c089016117ed565b93506118fa8861010089016117ed565b9250611909610140880161188c565b915061016087013590509295509295509295565b6000815180845260005b8181101561194357602081850181015186830182015201611927565b506000602082860101526020601f19601f83011685010191505092915050565b602081526000611976602083018461191d565b9392505050565b6000806000806080858703121561199357600080fd5b61199c8561188c565b935060206119ab81870161188c565b935060408601359250606086013567ffffffffffffffff808211156119cf57600080fd5b818801915088601f8301126119e357600080fd5b8135818111156119f5576119f561177d565b611a07601f8201601f191685016117bc565b91508082528984828501011115611a1d57600080fd5b808484018584013760008482840101525080935050505092959194509250565b600082601f830112611a4e57600080fd5b604051602080820182811067ffffffffffffffff82111715611a7257611a7261177d565b6040528184820186811115611a8657600080fd5b855b81811015611a9f5780358352918301918301611a88565b50929695505050505050565b60008060008060006101408688031215611ac457600080fd5b611ace87876117ed565b9450611add876040880161183d565b9350611aec8760c088016117ed565b9250611afc876101008801611a3d565b94979396509194610120013592915050565b600067ffffffffffffffff821115611b2857611b2861177d565b5060051b60200190565b60006020808385031215611b4557600080fd5b823567ffffffffffffffff811115611b5c57600080fd5b8301601f81018513611b6d57600080fd5b8035611b80611b7b82611b0e565b6117bc565b81815260059190911b82018301908381019087831115611b9f57600080fd5b928401925b82841015611bbd57833582529284019290840190611ba4565b979650505050505050565b600060208284031215611bda57600080fd5b5035919050565b60008060008060006101408688031215611bfa57600080fd5b611c0487876117ed565b9450611c13876040880161183d565b9350611c228760c088016117ed565b9250611c32876101008801611a3d565b9150611c41610120870161188c565b90509295509295909350565b60006020808385031215611c6057600080fd5b823567ffffffffffffffff811115611c7757600080fd5b8301601f81018513611c8857600080fd5b8035611c96611b7b82611b0e565b81815260059190911b82018301908381019087831115611cb557600080fd5b928401925b82841015611bbd57611ccb8461188c565b82529284019290840190611cba565b8060005b6002811015611cfd578151845260209384019390910190600101611cde565b50505050565b8060005b6002811015611cfd57611d1b848351611cda565b6040939093019260209190910190600101611d07565b6101408101611d408287611cda565b611d4d6040830186611d03565b611d5a60c0830185611cda565b611d68610100830184611cda565b95945050505050565b600060208284031215611d8357600080fd5b8151801515811461197657600080fd5b6101208101611da28287611cda565b611daf6040830186611d03565b611dbc60c0830185611cda565b61010082018360005b6001811015611de4578151835260209283019290910190600101611dc5565b50505095945050505050565b634e487b7160e01b600052603260045260246000fd5b600060018201611e2657634e487b7160e01b600052601160045260246000fd5b5060010190565b604081526000611e40604083018561191d565b9050826020830152939250505056fea2646970667358221220e2805aa8999187f215b77c6d8c18bb5aa215f68b023dba24e255106202eb9e9364736f6c6343000811003360c060405234801561001057600080fd5b5060405161053438038061053483398101604081905261002f91610046565b6080919091526001600160a01b031660a052610083565b6000806040838503121561005957600080fd5b825160208401519092506001600160a01b038116811461007857600080fd5b809150509250929050565b60805160a05161048d6100a7600039600061016101526000605e015261048d6000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063a9f3402c14610030575b600080fd5b61004361003e3660046102da565b610057565b604051901515815260200160405180910390f35b80516000907f0000000000000000000000000000000000000000000000000000000000000000146100cf5760405162461bcd60e51b815260206004820152600e60248201527f496e636f6f7265637420726f6f7400000000000000000000000000000000000060448201526064015b60405180910390fd5b6000546020830151116101245760405162461bcd60e51b815260206004820152600960248201527f4f6c642050726f6f66000000000000000000000000000000000000000000000060448201526064016100c6565b6040517ff5c9d69e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063f5c9d69e9061019c9088908890889088906004016103a3565b602060405180830381865afa1580156101b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101dd919061042e565b6102295760405162461bcd60e51b815260206004820152600d60248201527f496e76616c69642070726f6f660000000000000000000000000000000000000060448201526064016100c6565b506020015160005550600192915050565b6040805190810167ffffffffffffffff81118282101715610284577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405290565b600082601f83011261029b57600080fd5b6102a361023a565b8060408401858111156102b557600080fd5b845b818110156102cf5780358452602093840193016102b7565b509095945050505050565b60008060008061014085870312156102f157600080fd5b6102fb868661028a565b9350604086605f87011261030e57600080fd5b61031661023a565b8060c088018981111561032857600080fd5b8389015b8181101561034d5761033e8b8261028a565b8452602090930192840161032c565b5081965061035b8a8261028a565b95505050505061036f86610100870161028a565b905092959194509250565b8060005b600281101561039d57815184526020938401939091019060010161037e565b50505050565b61014081016103b2828761037a565b6040808301866000805b60028082106103cb5750610405565b835185845b838110156103ee5782518252602092830192909101906001016103d0565b5050509385019350602092909201916001016103bc565b505050505061041760c083018561037a565b61042561010083018461037a565b95945050505050565b60006020828403121561044057600080fd5b8151801515811461045057600080fd5b939250505056fea26469706673582212206395795d36789e7a9b6888bfe90d51af8eaca0172948c5706e44adf31974fadf64736f6c63430008110033"; type ZkSocialRecoveryWalletConstructorParams = | [signer?: Signer] @@ -449,8 +497,6 @@ export class ZkSocialRecoveryWallet__factory extends ContractFactory { override deploy( _hashCheckVerifier: PromiseOrValue, _ownerPasswordHash: PromiseOrValue, - _trustees: PromiseOrValue[], - _passwordHashes: PromiseOrValue[], _thresholdForRecovery: PromiseOrValue, _root: PromiseOrValue, _otpVerifier: PromiseOrValue, @@ -459,8 +505,6 @@ export class ZkSocialRecoveryWallet__factory extends ContractFactory { return super.deploy( _hashCheckVerifier, _ownerPasswordHash, - _trustees, - _passwordHashes, _thresholdForRecovery, _root, _otpVerifier, @@ -470,8 +514,6 @@ export class ZkSocialRecoveryWallet__factory extends ContractFactory { override getDeployTransaction( _hashCheckVerifier: PromiseOrValue, _ownerPasswordHash: PromiseOrValue, - _trustees: PromiseOrValue[], - _passwordHashes: PromiseOrValue[], _thresholdForRecovery: PromiseOrValue, _root: PromiseOrValue, _otpVerifier: PromiseOrValue, @@ -480,8 +522,6 @@ export class ZkSocialRecoveryWallet__factory extends ContractFactory { return super.getDeployTransaction( _hashCheckVerifier, _ownerPasswordHash, - _trustees, - _passwordHashes, _thresholdForRecovery, _root, _otpVerifier, diff --git a/backend/typechain-types/factories/contracts/ZkWalletFactory__factory.ts b/backend/typechain-types/factories/contracts/ZkWalletFactory__factory.ts index 923134c..965e610 100644 --- a/backend/typechain-types/factories/contracts/ZkWalletFactory__factory.ts +++ b/backend/typechain-types/factories/contracts/ZkWalletFactory__factory.ts @@ -41,16 +41,6 @@ const _abi = [ name: "_ownerPasswordHash", type: "uint256", }, - { - internalType: "address[]", - name: "_trustees", - type: "address[]", - }, - { - internalType: "uint256[]", - name: "_passwordHashes", - type: "uint256[]", - }, { internalType: "uint256", name: "_thresholdForRecovery", @@ -132,7 +122,7 @@ const _abi = [ ]; const _bytecode = - "0x608060405234801561001057600080fd5b50604051612a42380380612a4283398101604081905261002f91610054565b600180546001600160a01b0319166001600160a01b0392909216919091179055610084565b60006020828403121561006657600080fd5b81516001600160a01b038116811461007d57600080fd5b9392505050565b6129af806100936000396000f3fe60806040523480156200001157600080fd5b5060043610620000525760003560e01c80633cc0e8f1146200005757806352cf4bec146200009f578063e61ec4da14620000b3578063f86345dd14620000e2575b600080fd5b620000836200006836600462000201565b6000602081905290815260409020546001600160a01b031681565b6040516001600160a01b03909116815260200160405180910390f35b60015462000083906001600160a01b031681565b62000083620000c436600462000201565b6001600160a01b039081166000908152602081905260409020541690565b62000083620000f336600462000323565b600080600160009054906101000a90046001600160a01b03168888888887896040516200012090620001d6565b6200013297969594939291906200045e565b604051809103906000f0801580156200014f573d6000803e3d6000fd5b50336000908152602081815260409182902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03851690811790915591519182529193508392507f234cf33b32239d80b54161e2396c80cdeaf4d34161300e54d8bc01eb7c0ea553910160405180910390a1509695505050505050565b61247b80620004ff83390190565b80356001600160a01b0381168114620001fc57600080fd5b919050565b6000602082840312156200021457600080fd5b6200021f82620001e4565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171562000281576200028162000226565b604052919050565b600067ffffffffffffffff821115620002a657620002a662000226565b5060051b60200190565b600082601f830112620002c257600080fd5b81356020620002db620002d58362000289565b62000255565b82815260059290921b84018101918181019086841115620002fb57600080fd5b8286015b84811015620003185780358352918301918301620002ff565b509695505050505050565b60008060008060008060c087890312156200033d57600080fd5b8635955060208088013567ffffffffffffffff808211156200035e57600080fd5b818a0191508a601f8301126200037357600080fd5b813562000384620002d58262000289565b81815260059190911b8301840190848101908d831115620003a457600080fd5b938501935b82851015620003cd57620003bd85620001e4565b82529385019390850190620003a9565b9950505060408a0135925080831115620003e657600080fd5b5050620003f689828a01620002b0565b945050606087013592506200040e60808801620001e4565b915060a087013590509295509295509295565b600081518084526020808501945080840160005b83811015620004535781518752958201959082019060010162000435565b509495945050505050565b600060e082016001600160a01b03808b16845260208a8186015260e06040860152828a5180855261010087019150828c01945060005b81811015620004b457855185168352948301949183019160010162000494565b50508581036060870152620004ca818b62000421565b9450505050508460808301528360a0830152620004f260c08301846001600160a01b03169052565b9897505050505050505056fe60806040523480156200001157600080fd5b506040516200247b3803806200247b833981016040819052620000349162000489565b6001600160a01b038716620000905760405162461bcd60e51b815260206004820152601560248201527f5a65726f2061646472657373207665726966696572000000000000000000000060448201526064015b60405180910390fd5b8351855114620000e35760405162461bcd60e51b815260206004820152601f60248201527f547275737465657320616e6420686173686573206c656e677468206469666600604482015260640162000087565b82855110156200014b5760405162461bcd60e51b815260206004820152602c60248201527f5468726573686f6c642069732067726561746572207468616e206e756d62657260448201526b206f6620747275737465657360a01b606482015260840162000087565b600080546001600160a01b0389166001600160a01b0319918216178255600180549091163317905560028790555b8551811015620002e457600560008783815181106200019c576200019c6200059d565b6020908102919091018101516001600160a01b031682528101919091526040016000205460ff1615620002125760405162461bcd60e51b815260206004820152601960248201527f4475706c6963617465207472757374656520696e206c69737400000000000000604482015260640162000087565b6001600560008884815181106200022d576200022d6200059d565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff0219169083151502179055508481815181106200028157620002816200059d565b602002602001015160066000888481518110620002a257620002a26200059d565b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020819055508080620002db90620005b3565b91505062000179565b50600383905560098054610100600160a81b0319166101006001600160a01b03841602179055604051829082906200031c906200037c565b9182526001600160a01b03166020820152604001604051809103906000f0801580156200034d573d6000803e3d6000fd5b50600a80546001600160a01b0319166001600160a01b039290921691909117905550620005db95505050505050565b6105348062001f4783390190565b80516001600160a01b0381168114620003a257600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715620003e857620003e8620003a7565b604052919050565b60006001600160401b038211156200040c576200040c620003a7565b5060051b60200190565b600082601f8301126200042857600080fd5b81516020620004416200043b83620003f0565b620003bd565b82815260059290921b840181019181810190868411156200046157600080fd5b8286015b848110156200047e578051835291830191830162000465565b509695505050505050565b600080600080600080600060e0888a031215620004a557600080fd5b620004b0886200038a565b60208981015160408b01519299509750906001600160401b0380821115620004d757600080fd5b818b0191508b601f830112620004ec57600080fd5b8151620004fd6200043b82620003f0565b81815260059190911b8301840190848101908e8311156200051d57600080fd5b938501935b82851015620005465762000536856200038a565b8252938501939085019062000522565b60608e0151909a5094505050808311156200056057600080fd5b5050620005708a828b0162000416565b9450506080880151925060a088015191506200058f60c089016200038a565b905092959891949750929550565b634e487b7160e01b600052603260045260246000fd5b600060018201620005d457634e487b7160e01b600052601160045260246000fd5b5060010190565b61195c80620005eb6000396000f3fe6080604052600436106100b55760003560e01c80638da5cb5b116100695780639c62291a1161004e5780639c62291a14610249578063b21fa1ae14610263578063e9c4bfe71461028357600080fd5b80638da5cb5b146101ec5780639517a2a91461022457600080fd5b806337dc18131161009a57806337dc18131461016c5780634f20804b1461018e578063789bcd08146101bc57600080fd5b8063037133f1146100c1578063150b7a02146100f757600080fd5b366100bc57005b600080fd5b3480156100cd57600080fd5b506100e16100dc3660046114f5565b610299565b6040516100ee91906115b0565b60405180910390f35b34801561010357600080fd5b5061013b6101123660046115ca565b7f150b7a0200000000000000000000000000000000000000000000000000000000949350505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000090911681526020016100ee565b34801561017857600080fd5b5061018c6101873660046116f8565b610476565b005b34801561019a57600080fd5b506101ae6101a936600461175b565b6106f7565b6040519081526020016100ee565b3480156101c857600080fd5b506101dc6101d73660046116f8565b610ba4565b60405190151581526020016100ee565b3480156101f857600080fd5b5060015461020c906001600160a01b031681565b6040516001600160a01b0390911681526020016100ee565b34801561023057600080fd5b5060095461020c9061010090046001600160a01b031681565b34801561025557600080fd5b506009546101dc9060ff1681565b34801561026f57600080fd5b5061018c61027e3660046116f8565b610f6a565b34801561028f57600080fd5b506101ae60045481565b6001546060906001600160a01b031633146102e75760405162461bcd60e51b81526020600482015260096024820152682737ba1027bbb732b960b91b60448201526064015b60405180910390fd5b600a546040517fa9f3402c0000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063a9f3402c90610336908a908a908a908a9060040161181e565b6020604051808303816000875af1158015610355573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610379919061185e565b6103c55760405162461bcd60e51b815260206004820152600c60248201527f50726f6f66206661696c6564000000000000000000000000000000000000000060448201526064016102de565b600080846001600160a01b03168460405160006040518083038185875af1925050503d8060008114610413576040519150601f19603f3d011682016040523d82523d6000602084013e610418565b606091505b50915091508161046a5760405162461bcd60e51b815260206004820152601660248201527f65787465726e616c2063616c6c2072657665727465640000000000000000000060448201526064016102de565b98975050505050505050565b6001546001600160a01b031633146104bc5760405162461bcd60e51b81526020600482015260096024820152682737ba1027bbb732b960b91b60448201526064016102de565b60095460ff1661050e5760405162461bcd60e51b815260206004820152601860248201527f5265636f7665727920686173206e6f742073746172746564000000000000000060448201526064016102de565b6000546040516343753b4d60e01b815286918691869186916001600160a01b03909116906343753b4d9061054c908790879087908790600401611880565b602060405180830381865afa158015610569573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061058d919061185e565b6105d95760405162461bcd60e51b815260206004820152601760248201527f50617373776f72642070726f6f6620696e76616c69642100000000000000000060448201526064016102de565b835160009081526008602052604090205460ff161561062a5760405162461bcd60e51b815260206004820152600d60248201526c141c9bdbd9881a5cc81d5cd959609a1b60448201526064016102de565b60025486511461066d5760405162461bcd60e51b815260206004820152600e60248201526d15dc9bdb99c81c185cdcdddbdc9960921b60448201526064016102de565b6009805460ff191690556001546040518681526001600160a01b03909116907f500ec1d4b692d3c788bfd78a898de379cfd93ab8177575efc7593f87bd051a079060200160405180910390a260016008600086815b6020020151815260200190815260200160002060006101000a81548160ff021916908315150217905550505050505050505050565b3360009081526005602052604081205460ff166107445760405162461bcd60e51b815260206004820152600b60248201526a4e6f74205472757374656560a81b60448201526064016102de565b60095460ff16156107975760405162461bcd60e51b815260206004820152601660248201527f5265636f7665727920697320696e2070726f636573730000000000000000000060448201526064016102de565b6000546040516343753b4d60e01b815287918791879187916001600160a01b03909116906343753b4d906107d5908790879087908790600401611880565b602060405180830381865afa1580156107f2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610816919061185e565b6108625760405162461bcd60e51b815260206004820152601760248201527f50617373776f72642070726f6f6620696e76616c69642100000000000000000060448201526064016102de565b835160009081526008602052604090205460ff16156108b35760405162461bcd60e51b815260206004820152600d60248201526c141c9bdbd9881a5cc81d5cd959609a1b60448201526064016102de565b6109176040518060400160405280600c81526020017f747275737465652068617368000000000000000000000000000000000000000081525060066000336001600160a01b03166001600160a01b03168152602001908152602001600020546112be565b60408051808201909152600581527f496e7075740000000000000000000000000000000000000000000000000000006020820152875161095791906112be565b336000908152600660205260409020548751146109a75760405162461bcd60e51b815260206004820152600e60248201526d15dc9bdb99c81c185cdcdddbdc9960921b60448201526064016102de565b6001600160a01b0386166109fd5760405162461bcd60e51b815260206004820152600c60248201527f5a65726f2061646472657373000000000000000000000000000000000000000060448201526064016102de565b6001600160a01b03861660009081526007602052604090205460ff1615610a8c5760405162461bcd60e51b815260206004820152602260248201527f4f776e65722073686f756c64206e6f742062652061207061737420616464726560448201527f737300000000000000000000000000000000000000000000000000000000000060648201526084016102de565b60048054906000610a9c836118dd565b90915550506004546000908152600b6020526040812060018101805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038a16179055805490918290610aeb836118dd565b90915550503360008181526002830160209081526040918290208054600160ff19918216811790925560098054909116909117905560045491519182526001600160a01b038a16917f4ae23dc2e5f7892600076b48a0cfdbcc206c2aba4e323da13765339b2b8978d8910160405180910390a360045495505060016008600086815b6020020151815260200190815260200160002060006101000a81548160ff0219169083151502179055505050505095945050505050565b3360009081526005602052604081205460ff16610bf15760405162461bcd60e51b815260206004820152600b60248201526a4e6f74205472757374656560a81b60448201526064016102de565b60095460ff16610c435760405162461bcd60e51b815260206004820152601860248201527f5265636f7665727920686173206e6f742073746172746564000000000000000060448201526064016102de565b6000546040516343753b4d60e01b815287918791879187916001600160a01b03909116906343753b4d90610c81908790879087908790600401611880565b602060405180830381865afa158015610c9e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cc2919061185e565b610d0e5760405162461bcd60e51b815260206004820152601760248201527f50617373776f72642070726f6f6620696e76616c69642100000000000000000060448201526064016102de565b835160009081526008602052604090205460ff1615610d5f5760405162461bcd60e51b815260206004820152600d60248201526c141c9bdbd9881a5cc81d5cd959609a1b60448201526064016102de565b33600090815260066020526040902054875114610daf5760405162461bcd60e51b815260206004820152600e60248201526d15dc9bdb99c81c185cdcdddbdc9960921b60448201526064016102de565b610ded6040518060400160405280600581526020017f4865726531000000000000000000000000000000000000000000000000000000815250611335565b600454861115610e3f5760405162461bcd60e51b815260206004820152601b60248201527f57726f6e67205265636f7665727920726f756e64206e756d626572000000000060448201526064016102de565b610e7d6040518060400160405280600481526020017f4865726500000000000000000000000000000000000000000000000000000000815250611335565b6000868152600b60209081526040808320338452600281019092529091205460ff1615610eec5760405162461bcd60e51b815260206004820152601560248201527f5472757374656520616c726561647920766f746564000000000000000000000060448201526064016102de565b8054816000610efa836118dd565b909155505033600081815260028301602052604090819020805460ff1916600190811790915590519097507f7f7906f4f6e51fac746e81b4885d9775eb44445765139416bcd03b12b262968a90610f54908a815260200190565b60405180910390a2506001600860008681610b6d565b3360009081526005602052604090205460ff16610fb75760405162461bcd60e51b815260206004820152600b60248201526a4e6f74205472757374656560a81b60448201526064016102de565b60095460ff166110095760405162461bcd60e51b815260206004820152601860248201527f5265636f7665727920686173206e6f742073746172746564000000000000000060448201526064016102de565b6000546040516343753b4d60e01b815286918691869186916001600160a01b03909116906343753b4d90611047908790879087908790600401611880565b602060405180830381865afa158015611064573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611088919061185e565b6110d45760405162461bcd60e51b815260206004820152601760248201527f50617373776f72642070726f6f6620696e76616c69642100000000000000000060448201526064016102de565b835160009081526008602052604090205460ff16156111255760405162461bcd60e51b815260206004820152600d60248201526c141c9bdbd9881a5cc81d5cd959609a1b60448201526064016102de565b336000908152600660205260409020548651146111755760405162461bcd60e51b815260206004820152600e60248201526d15dc9bdb99c81c185cdcdddbdc9960921b60448201526064016102de565b6000858152600b60205260409020600354815410156111d65760405162461bcd60e51b815260206004820152601060248201527f566f746573204e6f7420656e6f7567680000000000000000000000000000000060448201526064016102de565b600181810180547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001781556009805460ff199081169091558254915473ffffffffffffffffffffffffffffffffffffffff1983166001600160a01b03918216908117855560009081526007602052604090819020805490931685179092559254905191831692169082907fcbaa7c7c351e2d5655fc08d9c383adcf4736af160c800b53df1f1dd221f826c8906112a6908b815260200190565b60405180910390a350600190506008600086816106c2565b61133182826040516024016112d4929190611904565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fb60e72cc000000000000000000000000000000000000000000000000000000001790526113a9565b5050565b6113a68160405160240161134991906115b0565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f41304fac000000000000000000000000000000000000000000000000000000001790526113a9565b50565b80516a636f6e736f6c652e6c6f67602083016000808483855afa5050505050565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff81118282101715611403576114036113ca565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715611432576114326113ca565b604052919050565b600082601f83011261144b57600080fd5b6114536113e0565b80604084018581111561146557600080fd5b845b8181101561147f578035845260209384019301611467565b509095945050505050565b600082601f83011261149b57600080fd5b6114a36113e0565b8060808401858111156114b557600080fd5b845b8181101561147f576114c9878261143a565b84526020909301926040016114b7565b80356001600160a01b03811681146114f057600080fd5b919050565b600080600080600080610180878903121561150f57600080fd5b611519888861143a565b9550611528886040890161148a565b94506115378860c0890161143a565b935061154788610100890161143a565b925061155661014088016114d9565b915061016087013590509295509295509295565b6000815180845260005b8181101561159057602081850181015186830182015201611574565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006115c3602083018461156a565b9392505050565b600080600080608085870312156115e057600080fd5b6115e9856114d9565b935060206115f88187016114d9565b935060408601359250606086013567ffffffffffffffff8082111561161c57600080fd5b818801915088601f83011261163057600080fd5b813581811115611642576116426113ca565b611654601f8201601f19168501611409565b9150808252898482850101111561166a57600080fd5b808484018584013760008482840101525080935050505092959194509250565b600082601f83011261169b57600080fd5b604051602080820182811067ffffffffffffffff821117156116bf576116bf6113ca565b60405281848201868111156116d357600080fd5b855b818110156116ec57803583529183019183016116d5565b50929695505050505050565b6000806000806000610140868803121561171157600080fd5b61171b878761143a565b945061172a876040880161148a565b93506117398760c0880161143a565b925061174987610100880161168a565b94979396509194610120013592915050565b6000806000806000610140868803121561177457600080fd5b61177e878761143a565b945061178d876040880161148a565b935061179c8760c0880161143a565b92506117ac87610100880161168a565b91506117bb61012087016114d9565b90509295509295909350565b8060005b60028110156117ea5781518452602093840193909101906001016117cb565b50505050565b8060005b60028110156117ea576118088483516117c7565b60409390930192602091909101906001016117f4565b610140810161182d82876117c7565b61183a60408301866117f0565b61184760c08301856117c7565b6118556101008301846117c7565b95945050505050565b60006020828403121561187057600080fd5b815180151581146115c357600080fd5b610120810161188f82876117c7565b61189c60408301866117f0565b6118a960c08301856117c7565b61010082018360005b60018110156118d15781518352602092830192909101906001016118b2565b50505095945050505050565b6000600182016118fd57634e487b7160e01b600052601160045260246000fd5b5060010190565b604081526000611917604083018561156a565b9050826020830152939250505056fea2646970667358221220200f08929360ebc500980f3a6b3768f4bd742680c3c2debf9bbce9c20a541f3664736f6c6343000811003360c060405234801561001057600080fd5b5060405161053438038061053483398101604081905261002f91610046565b6080919091526001600160a01b031660a052610083565b6000806040838503121561005957600080fd5b825160208401519092506001600160a01b038116811461007857600080fd5b809150509250929050565b60805160a05161048d6100a7600039600061016101526000605e015261048d6000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063a9f3402c14610030575b600080fd5b61004361003e3660046102da565b610057565b604051901515815260200160405180910390f35b80516000907f0000000000000000000000000000000000000000000000000000000000000000146100cf5760405162461bcd60e51b815260206004820152600e60248201527f496e636f6f7265637420726f6f7400000000000000000000000000000000000060448201526064015b60405180910390fd5b6000546020830151116101245760405162461bcd60e51b815260206004820152600960248201527f4f6c642050726f6f66000000000000000000000000000000000000000000000060448201526064016100c6565b6040517ff5c9d69e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063f5c9d69e9061019c9088908890889088906004016103a3565b602060405180830381865afa1580156101b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101dd919061042e565b6102295760405162461bcd60e51b815260206004820152600d60248201527f496e76616c69642070726f6f660000000000000000000000000000000000000060448201526064016100c6565b506020015160005550600192915050565b6040805190810167ffffffffffffffff81118282101715610284577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405290565b600082601f83011261029b57600080fd5b6102a361023a565b8060408401858111156102b557600080fd5b845b818110156102cf5780358452602093840193016102b7565b509095945050505050565b60008060008061014085870312156102f157600080fd5b6102fb868661028a565b9350604086605f87011261030e57600080fd5b61031661023a565b8060c088018981111561032857600080fd5b8389015b8181101561034d5761033e8b8261028a565b8452602090930192840161032c565b5081965061035b8a8261028a565b95505050505061036f86610100870161028a565b905092959194509250565b8060005b600281101561039d57815184526020938401939091019060010161037e565b50505050565b61014081016103b2828761037a565b6040808301866000805b60028082106103cb5750610405565b835185845b838110156103ee5782518252602092830192909101906001016103d0565b5050509385019350602092909201916001016103bc565b505050505061041760c083018561037a565b61042561010083018461037a565b95945050505050565b60006020828403121561044057600080fd5b8151801515811461045057600080fd5b939250505056fea26469706673582212206395795d36789e7a9b6888bfe90d51af8eaca0172948c5706e44adf31974fadf64736f6c63430008110033a2646970667358221220e523b7a139572028333d2fa3e67123aa41ddd29292a67243bf35f6023e27fed264736f6c63430008110033"; + "0x608060405234801561001057600080fd5b506040516128ca3803806128ca83398101604081905261002f91610054565b600180546001600160a01b0319166001600160a01b0392909216919091179055610084565b60006020828403121561006657600080fd5b81516001600160a01b038116811461007d57600080fd5b9392505050565b612837806100936000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c80633cc0e8f1146100515780634198ebaf1461009657806352cf4bec146100a9578063e61ec4da146100bc575b600080fd5b61007a61005f366004610208565b6000602081905290815260409020546001600160a01b031681565b6040516001600160a01b03909116815260200160405180910390f35b61007a6100a436600461022a565b6100e8565b60015461007a906001600160a01b031681565b61007a6100ca366004610208565b6001600160a01b039081166000908152602081905260409020541690565b600080600160009054906101000a90046001600160a01b031686868587604051610111906101df565b6001600160a01b039586168152602081019490945260408401929092526060830152909116608082015260a001604051809103906000f08015801561015a573d6000803e3d6000fd5b50336000908152602081815260409182902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03851690811790915591519182529193508392507f234cf33b32239d80b54161e2396c80cdeaf4d34161300e54d8bc01eb7c0ea553910160405180910390a150949350505050565b61259a8061026883390190565b80356001600160a01b038116811461020357600080fd5b919050565b60006020828403121561021a57600080fd5b610223826101ec565b9392505050565b6000806000806080858703121561024057600080fd5b8435935060208501359250610257604086016101ec565b939692955092936060013592505056fe60806040523480156200001157600080fd5b506040516200259a3803806200259a83398101604081905262000034916200017c565b6001600160a01b0385166200008f5760405162461bcd60e51b815260206004820152601560248201527f5a65726f20616464726573732076657269666965720000000000000000000000604482015260640160405180910390fd5b600080546001600160a01b038088166001600160a01b031992831617909255600180549091163317905560028590556003849055600b805491831661010002610100600160a81b031990921691909117905560405182908290620000f39062000151565b9182526001600160a01b03166020820152604001604051809103906000f08015801562000124573d6000803e3d6000fd5b50600c80546001600160a01b0319166001600160a01b039290921691909117905550620001d19350505050565b610534806200206683390190565b80516001600160a01b03811681146200017757600080fd5b919050565b600080600080600060a086880312156200019557600080fd5b620001a0866200015f565b9450602086015193506040860151925060608601519150620001c5608087016200015f565b90509295509295909350565b611e8580620001e16000396000f3fe6080604052600436106100e15760003560e01c8063789bcd081161007f5780639c62291a116100595780639c62291a146102cb578063b21fa1ae146102e5578063bb3accf014610305578063e9c4bfe71461032557600080fd5b8063789bcd08146102565780638da5cb5b146102865780639517a2a9146102a657600080fd5b806337dc1813116100bb57806337dc1813146101bc5780634b58867f146101de5780634e8a2409146101fe5780634f20804b1461023657600080fd5b8063037133f1146100ed57806307238be314610123578063150b7a021461014757600080fd5b366100e857005b600080fd5b3480156100f957600080fd5b5061010d6101083660046118a8565b61033b565b60405161011a9190611963565b60405180910390f35b34801561012f57600080fd5b5061013960055481565b60405190815260200161011a565b34801561015357600080fd5b5061018b61016236600461197d565b7f150b7a0200000000000000000000000000000000000000000000000000000000949350505050565b6040517fffffffff00000000000000000000000000000000000000000000000000000000909116815260200161011a565b3480156101c857600080fd5b506101dc6101d7366004611aab565b610518565b005b3480156101ea57600080fd5b506101dc6101f9366004611b32565b610799565b34801561020a57600080fd5b5061021e610219366004611bc8565b6108aa565b6040516001600160a01b03909116815260200161011a565b34801561024257600080fd5b50610139610251366004611be1565b6108d4565b34801561026257600080fd5b50610276610271366004611aab565b610d81565b604051901515815260200161011a565b34801561029257600080fd5b5060015461021e906001600160a01b031681565b3480156102b257600080fd5b50600b5461021e9061010090046001600160a01b031681565b3480156102d757600080fd5b50600b546102769060ff1681565b3480156102f157600080fd5b506101dc610300366004611aab565b611147565b34801561031157600080fd5b506101dc610320366004611c4d565b61149b565b34801561033157600080fd5b5061013960045481565b6001546060906001600160a01b031633146103895760405162461bcd60e51b81526020600482015260096024820152682737ba1027bbb732b960b91b60448201526064015b60405180910390fd5b600c546040517fa9f3402c0000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063a9f3402c906103d8908a908a908a908a90600401611d31565b6020604051808303816000875af11580156103f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061041b9190611d71565b6104675760405162461bcd60e51b815260206004820152600c60248201527f50726f6f66206661696c656400000000000000000000000000000000000000006044820152606401610380565b600080846001600160a01b03168460405160006040518083038185875af1925050503d80600081146104b5576040519150601f19603f3d011682016040523d82523d6000602084013e6104ba565b606091505b50915091508161050c5760405162461bcd60e51b815260206004820152601660248201527f65787465726e616c2063616c6c207265766572746564000000000000000000006044820152606401610380565b98975050505050505050565b6001546001600160a01b0316331461055e5760405162461bcd60e51b81526020600482015260096024820152682737ba1027bbb732b960b91b6044820152606401610380565b600b5460ff166105b05760405162461bcd60e51b815260206004820152601860248201527f5265636f7665727920686173206e6f74207374617274656400000000000000006044820152606401610380565b6000546040516343753b4d60e01b815286918691869186916001600160a01b03909116906343753b4d906105ee908790879087908790600401611d93565b602060405180830381865afa15801561060b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061062f9190611d71565b61067b5760405162461bcd60e51b815260206004820152601760248201527f50617373776f72642070726f6f6620696e76616c6964210000000000000000006044820152606401610380565b83516000908152600a602052604090205460ff16156106cc5760405162461bcd60e51b815260206004820152600d60248201526c141c9bdbd9881a5cc81d5cd959609a1b6044820152606401610380565b60025486511461070f5760405162461bcd60e51b815260206004820152600e60248201526d15dc9bdb99c81c185cdcdddbdc9960921b6044820152606401610380565b600b805460ff191690556001546040518681526001600160a01b03909116907f500ec1d4b692d3c788bfd78a898de379cfd93ab8177575efc7593f87bd051a079060200160405180910390a26001600a600086815b6020020151815260200190815260200160002060006101000a81548160ff021916908315150217905550505050505050505050565b6001546001600160a01b031633146107df5760405162461bcd60e51b81526020600482015260096024820152682737ba1027bbb732b960b91b6044820152606401610380565b8051600654146108315760405162461bcd60e51b815260206004820152601f60248201527f547275737465657320616e6420686173686573206c656e6774682064696666006044820152606401610380565b60005b6006548110156108a65781818151811061085057610850611df0565b6020026020010151600860006006848154811061086f5761086f611df0565b60009182526020808320909101546001600160a01b031683528201929092526040019020558061089e81611e06565b915050610834565b5050565b600681815481106108ba57600080fd5b6000918252602090912001546001600160a01b0316905081565b3360009081526007602052604081205460ff166109215760405162461bcd60e51b815260206004820152600b60248201526a4e6f74205472757374656560a81b6044820152606401610380565b600b5460ff16156109745760405162461bcd60e51b815260206004820152601660248201527f5265636f7665727920697320696e2070726f63657373000000000000000000006044820152606401610380565b6000546040516343753b4d60e01b815287918791879187916001600160a01b03909116906343753b4d906109b2908790879087908790600401611d93565b602060405180830381865afa1580156109cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109f39190611d71565b610a3f5760405162461bcd60e51b815260206004820152601760248201527f50617373776f72642070726f6f6620696e76616c6964210000000000000000006044820152606401610380565b83516000908152600a602052604090205460ff1615610a905760405162461bcd60e51b815260206004820152600d60248201526c141c9bdbd9881a5cc81d5cd959609a1b6044820152606401610380565b610af46040518060400160405280600c81526020017f747275737465652068617368000000000000000000000000000000000000000081525060086000336001600160a01b03166001600160a01b03168152602001908152602001600020546115ee565b60408051808201909152600581527f496e70757400000000000000000000000000000000000000000000000000000060208201528751610b3491906115ee565b33600090815260086020526040902054875114610b845760405162461bcd60e51b815260206004820152600e60248201526d15dc9bdb99c81c185cdcdddbdc9960921b6044820152606401610380565b6001600160a01b038616610bda5760405162461bcd60e51b815260206004820152600c60248201527f5a65726f206164647265737300000000000000000000000000000000000000006044820152606401610380565b6001600160a01b03861660009081526009602052604090205460ff1615610c695760405162461bcd60e51b815260206004820152602260248201527f4f776e65722073686f756c64206e6f742062652061207061737420616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610380565b60048054906000610c7983611e06565b90915550506004546000908152600d6020526040812060018101805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038a16179055805490918290610cc883611e06565b90915550503360008181526002830160209081526040918290208054600160ff199182168117909255600b8054909116909117905560045491519182526001600160a01b038a16917f4ae23dc2e5f7892600076b48a0cfdbcc206c2aba4e323da13765339b2b8978d8910160405180910390a36004549550506001600a600086815b6020020151815260200190815260200160002060006101000a81548160ff0219169083151502179055505050505095945050505050565b3360009081526007602052604081205460ff16610dce5760405162461bcd60e51b815260206004820152600b60248201526a4e6f74205472757374656560a81b6044820152606401610380565b600b5460ff16610e205760405162461bcd60e51b815260206004820152601860248201527f5265636f7665727920686173206e6f74207374617274656400000000000000006044820152606401610380565b6000546040516343753b4d60e01b815287918791879187916001600160a01b03909116906343753b4d90610e5e908790879087908790600401611d93565b602060405180830381865afa158015610e7b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e9f9190611d71565b610eeb5760405162461bcd60e51b815260206004820152601760248201527f50617373776f72642070726f6f6620696e76616c6964210000000000000000006044820152606401610380565b83516000908152600a602052604090205460ff1615610f3c5760405162461bcd60e51b815260206004820152600d60248201526c141c9bdbd9881a5cc81d5cd959609a1b6044820152606401610380565b33600090815260086020526040902054875114610f8c5760405162461bcd60e51b815260206004820152600e60248201526d15dc9bdb99c81c185cdcdddbdc9960921b6044820152606401610380565b610fca6040518060400160405280600581526020017f4865726531000000000000000000000000000000000000000000000000000000815250611661565b60045486111561101c5760405162461bcd60e51b815260206004820152601b60248201527f57726f6e67205265636f7665727920726f756e64206e756d62657200000000006044820152606401610380565b61105a6040518060400160405280600481526020017f4865726500000000000000000000000000000000000000000000000000000000815250611661565b6000868152600d60209081526040808320338452600281019092529091205460ff16156110c95760405162461bcd60e51b815260206004820152601560248201527f5472757374656520616c726561647920766f74656400000000000000000000006044820152606401610380565b80548160006110d783611e06565b909155505033600081815260028301602052604090819020805460ff1916600190811790915590519097507f7f7906f4f6e51fac746e81b4885d9775eb44445765139416bcd03b12b262968a90611131908a815260200190565b60405180910390a2506001600a60008681610d4a565b3360009081526007602052604090205460ff166111945760405162461bcd60e51b815260206004820152600b60248201526a4e6f74205472757374656560a81b6044820152606401610380565b600b5460ff166111e65760405162461bcd60e51b815260206004820152601860248201527f5265636f7665727920686173206e6f74207374617274656400000000000000006044820152606401610380565b6000546040516343753b4d60e01b815286918691869186916001600160a01b03909116906343753b4d90611224908790879087908790600401611d93565b602060405180830381865afa158015611241573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112659190611d71565b6112b15760405162461bcd60e51b815260206004820152601760248201527f50617373776f72642070726f6f6620696e76616c6964210000000000000000006044820152606401610380565b83516000908152600a602052604090205460ff16156113025760405162461bcd60e51b815260206004820152600d60248201526c141c9bdbd9881a5cc81d5cd959609a1b6044820152606401610380565b336000908152600860205260409020548651146113525760405162461bcd60e51b815260206004820152600e60248201526d15dc9bdb99c81c185cdcdddbdc9960921b6044820152606401610380565b6000858152600d60205260409020600354815410156113b35760405162461bcd60e51b815260206004820152601060248201527f566f746573204e6f7420656e6f756768000000000000000000000000000000006044820152606401610380565b600181810180547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1674010000000000000000000000000000000000000000178155600b805460ff199081169091558254915473ffffffffffffffffffffffffffffffffffffffff1983166001600160a01b03918216908117855560009081526009602052604090819020805490931685179092559254905191831692169082907fcbaa7c7c351e2d5655fc08d9c383adcf4736af160c800b53df1f1dd221f826c890611483908b815260200190565b60405180910390a35060019050600a60008681610764565b6001546001600160a01b031633146114e15760405162461bcd60e51b81526020600482015260096024820152682737ba1027bbb732b960b91b6044820152606401610380565b60005b81518110156115d3576007600083838151811061150357611503611df0565b6020908102919091018101516001600160a01b031682528101919091526040016000205460ff16156115775760405162461bcd60e51b815260206004820152601960248201527f4475706c6963617465207472757374656520696e206c697374000000000000006044820152606401610380565b60016007600084848151811061158f5761158f611df0565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055806115cb81611e06565b9150506114e4565b5080516115e79060069060208401906116f6565b5051600555565b6108a68282604051602401611604929190611e2d565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fb60e72cc000000000000000000000000000000000000000000000000000000001790526116d5565b6116d2816040516024016116759190611963565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f41304fac000000000000000000000000000000000000000000000000000000001790526116d5565b50565b80516a636f6e736f6c652e6c6f67602083016000808483855afa5050505050565b828054828255906000526020600020908101928215611758579160200282015b82811115611758578251825473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03909116178255602090920191600190910190611716565b50611764929150611768565b5090565b5b808211156117645760008155600101611769565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156117b6576117b661177d565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156117e5576117e561177d565b604052919050565b600082601f8301126117fe57600080fd5b611806611793565b80604084018581111561181857600080fd5b845b8181101561183257803584526020938401930161181a565b509095945050505050565b600082601f83011261184e57600080fd5b611856611793565b80608084018581111561186857600080fd5b845b818110156118325761187c87826117ed565b845260209093019260400161186a565b80356001600160a01b03811681146118a357600080fd5b919050565b60008060008060008061018087890312156118c257600080fd5b6118cc88886117ed565b95506118db886040890161183d565b94506118ea8860c089016117ed565b93506118fa8861010089016117ed565b9250611909610140880161188c565b915061016087013590509295509295509295565b6000815180845260005b8181101561194357602081850181015186830182015201611927565b506000602082860101526020601f19601f83011685010191505092915050565b602081526000611976602083018461191d565b9392505050565b6000806000806080858703121561199357600080fd5b61199c8561188c565b935060206119ab81870161188c565b935060408601359250606086013567ffffffffffffffff808211156119cf57600080fd5b818801915088601f8301126119e357600080fd5b8135818111156119f5576119f561177d565b611a07601f8201601f191685016117bc565b91508082528984828501011115611a1d57600080fd5b808484018584013760008482840101525080935050505092959194509250565b600082601f830112611a4e57600080fd5b604051602080820182811067ffffffffffffffff82111715611a7257611a7261177d565b6040528184820186811115611a8657600080fd5b855b81811015611a9f5780358352918301918301611a88565b50929695505050505050565b60008060008060006101408688031215611ac457600080fd5b611ace87876117ed565b9450611add876040880161183d565b9350611aec8760c088016117ed565b9250611afc876101008801611a3d565b94979396509194610120013592915050565b600067ffffffffffffffff821115611b2857611b2861177d565b5060051b60200190565b60006020808385031215611b4557600080fd5b823567ffffffffffffffff811115611b5c57600080fd5b8301601f81018513611b6d57600080fd5b8035611b80611b7b82611b0e565b6117bc565b81815260059190911b82018301908381019087831115611b9f57600080fd5b928401925b82841015611bbd57833582529284019290840190611ba4565b979650505050505050565b600060208284031215611bda57600080fd5b5035919050565b60008060008060006101408688031215611bfa57600080fd5b611c0487876117ed565b9450611c13876040880161183d565b9350611c228760c088016117ed565b9250611c32876101008801611a3d565b9150611c41610120870161188c565b90509295509295909350565b60006020808385031215611c6057600080fd5b823567ffffffffffffffff811115611c7757600080fd5b8301601f81018513611c8857600080fd5b8035611c96611b7b82611b0e565b81815260059190911b82018301908381019087831115611cb557600080fd5b928401925b82841015611bbd57611ccb8461188c565b82529284019290840190611cba565b8060005b6002811015611cfd578151845260209384019390910190600101611cde565b50505050565b8060005b6002811015611cfd57611d1b848351611cda565b6040939093019260209190910190600101611d07565b6101408101611d408287611cda565b611d4d6040830186611d03565b611d5a60c0830185611cda565b611d68610100830184611cda565b95945050505050565b600060208284031215611d8357600080fd5b8151801515811461197657600080fd5b6101208101611da28287611cda565b611daf6040830186611d03565b611dbc60c0830185611cda565b61010082018360005b6001811015611de4578151835260209283019290910190600101611dc5565b50505095945050505050565b634e487b7160e01b600052603260045260246000fd5b600060018201611e2657634e487b7160e01b600052601160045260246000fd5b5060010190565b604081526000611e40604083018561191d565b9050826020830152939250505056fea2646970667358221220e2805aa8999187f215b77c6d8c18bb5aa215f68b023dba24e255106202eb9e9364736f6c6343000811003360c060405234801561001057600080fd5b5060405161053438038061053483398101604081905261002f91610046565b6080919091526001600160a01b031660a052610083565b6000806040838503121561005957600080fd5b825160208401519092506001600160a01b038116811461007857600080fd5b809150509250929050565b60805160a05161048d6100a7600039600061016101526000605e015261048d6000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063a9f3402c14610030575b600080fd5b61004361003e3660046102da565b610057565b604051901515815260200160405180910390f35b80516000907f0000000000000000000000000000000000000000000000000000000000000000146100cf5760405162461bcd60e51b815260206004820152600e60248201527f496e636f6f7265637420726f6f7400000000000000000000000000000000000060448201526064015b60405180910390fd5b6000546020830151116101245760405162461bcd60e51b815260206004820152600960248201527f4f6c642050726f6f66000000000000000000000000000000000000000000000060448201526064016100c6565b6040517ff5c9d69e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063f5c9d69e9061019c9088908890889088906004016103a3565b602060405180830381865afa1580156101b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101dd919061042e565b6102295760405162461bcd60e51b815260206004820152600d60248201527f496e76616c69642070726f6f660000000000000000000000000000000000000060448201526064016100c6565b506020015160005550600192915050565b6040805190810167ffffffffffffffff81118282101715610284577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405290565b600082601f83011261029b57600080fd5b6102a361023a565b8060408401858111156102b557600080fd5b845b818110156102cf5780358452602093840193016102b7565b509095945050505050565b60008060008061014085870312156102f157600080fd5b6102fb868661028a565b9350604086605f87011261030e57600080fd5b61031661023a565b8060c088018981111561032857600080fd5b8389015b8181101561034d5761033e8b8261028a565b8452602090930192840161032c565b5081965061035b8a8261028a565b95505050505061036f86610100870161028a565b905092959194509250565b8060005b600281101561039d57815184526020938401939091019060010161037e565b50505050565b61014081016103b2828761037a565b6040808301866000805b60028082106103cb5750610405565b835185845b838110156103ee5782518252602092830192909101906001016103d0565b5050509385019350602092909201916001016103bc565b505050505061041760c083018561037a565b61042561010083018461037a565b95945050505050565b60006020828403121561044057600080fd5b8151801515811461045057600080fd5b939250505056fea26469706673582212206395795d36789e7a9b6888bfe90d51af8eaca0172948c5706e44adf31974fadf64736f6c63430008110033a2646970667358221220feae16654361ed0227f1f0a7cc50015f63f6f2426c7bbdbbb1ca81a6809ccbe364736f6c63430008110033"; type ZkWalletFactoryConstructorParams = | [signer?: Signer] diff --git a/dapp/circuit_js/generate_calldata.js b/dapp/circuit_js/generate_calldata.js deleted file mode 100644 index a750e29..0000000 --- a/dapp/circuit_js/generate_calldata.js +++ /dev/null @@ -1,33 +0,0 @@ -/* global BigInt */ - -import { generateWitness } from './generate_witness'; -import { groth16 } from 'snarkjs'; - -export async function generateCalldata(input, circuit_name) { - let generateWitnessSuccess = true; - - let witness = await generateWitness(input, circuit_name).then() - .catch((error) => { - console.error(error); - generateWitnessSuccess = false; - }); - - //console.log(witness); - - if (!generateWitnessSuccess) { return; } - - const { proof, publicSignals } = await groth16.prove(`${circuit_name}_circuit_final.zkey`, witness); - - const calldata = await groth16.exportSolidityCallData(proof, publicSignals); - - const argv = calldata.replace(/["[\]\s]/g, "").split(',').map(x => BigInt(x).toString()); - - //console.log(argv); - - const a = [argv[0], argv[1]]; - const b = [[argv[2], argv[3]], [argv[4], argv[5]]]; - const c = [argv[6], argv[7]]; - const Input = argv.slice(8); - - return [a, b, c, Input]; -} \ No newline at end of file diff --git a/dapp/circuit_js/generate_witness.js b/dapp/circuit_js/generate_witness.js deleted file mode 100644 index 77042b7..0000000 --- a/dapp/circuit_js/generate_witness.js +++ /dev/null @@ -1,13 +0,0 @@ -import wc from "./witness_calculator"; - -export async function generateWitness (input, circuit_name) { - const response = await fetch(`${circuit_name}_circuit.wasm`); - const buffer = await response.arrayBuffer(); - //console.log(buffer); - let buff; - - await wc(buffer).then(async witnessCalculator => { - buff = await witnessCalculator.calculateWTNSBin(input, 0); - }); - return buff; -} diff --git a/dapp/circuit_js/witness_calculator.js b/dapp/circuit_js/witness_calculator.js deleted file mode 100644 index 2588951..0000000 --- a/dapp/circuit_js/witness_calculator.js +++ /dev/null @@ -1,289 +0,0 @@ -/* global BigInt */ -module.exports = async function builder(code, options) { - - options = options || {}; - - const wasmModule = await WebAssembly.compile(code); - - let wc; - - - const instance = await WebAssembly.instantiate(wasmModule, { - runtime: { - exceptionHandler : function(code) { - let errStr; - if (code === 1) { - errStr= "Signal not found. "; - } else if (code === 2) { - errStr= "Too many signals set. "; - } else if (code === 3) { - errStr= "Signal already set. "; - } else if (code === 4) { - errStr= "Assert Failed. "; - } else if (code === 5) { - errStr= "Not enough memory. "; - } else { - errStr= "Unknown error\n"; - } - // get error message from wasm - errStr += getMessage(); - throw new Error(errStr); - }, - showSharedRWMemory: function() { - printSharedRWMemory (); - } - - } - }); - - const sanityCheck = - options -// options && -// ( -// options.sanityCheck || -// options.logGetSignal || -// options.logSetSignal || -// options.logStartComponent || -// options.logFinishComponent -// ); - - - wc = new WitnessCalculator(instance, sanityCheck); - return wc; - - function getMessage() { - var message = ""; - var c = instance.exports.getMessageChar(); - while ( c !== 0 ) { - message += String.fromCharCode(c); - c = instance.exports.getMessageChar(); - } - return message; - } - - function printSharedRWMemory () { - const shared_rw_memory_size = instance.exports.getFieldNumLen32(); - const arr = new Uint32Array(shared_rw_memory_size); - for (let j=0; j { - const h = fnvHash(k); - const hMSB = parseInt(h.slice(0,8), 16); - const hLSB = parseInt(h.slice(8,16), 16); - const fArr = flatArray(input[k]); - for (let i=0; i0) { - res.unshift(0); - i--; - } - } - return res; -} - -function fromArray32(arr) { //returns a BigInt - var res = BigInt(0); - const radix = BigInt(0x100000000); - for (let i = 0; i { +interface BoxSocialProps { + numberTrustees: string +} + +const BoxSocialRecovery = (props: BoxSocialProps) => { return (
Social Recovery
-
Enabled
- + {props.numberTrustees != '0' ? ( +
Enabled
+ ) : ( +
Disabled
+ )} +
- 3 + {props.numberTrustees}
Recovery accounts diff --git a/dapp/components/dashboard/ModalChangePassword.tsx b/dapp/components/dashboard/ModalChangePassword.tsx index e688c4c..b42ac85 100644 --- a/dapp/components/dashboard/ModalChangePassword.tsx +++ b/dapp/components/dashboard/ModalChangePassword.tsx @@ -85,7 +85,7 @@ const ModalChangePassword = () => { className="w-3/4 px-2 py-2 button-unsaturated" onClick={(e) => onSubmit(e)} > - Set Accounts + Reset Password diff --git a/dapp/components/dashboard/ModalSetSocial.tsx b/dapp/components/dashboard/ModalSetSocial.tsx index a3d9c11..e4e3b75 100644 --- a/dapp/components/dashboard/ModalSetSocial.tsx +++ b/dapp/components/dashboard/ModalSetSocial.tsx @@ -10,7 +10,9 @@ import { useTheme } from 'next-themes' import { PlusIcon } from '@heroicons/react/24/solid' import { PasswordTOTPBox, PasswordZKBox } from '.' -interface ModalSetSocialProps {} +interface ModalSetSocialProps { + enabled: boolean +} const ModalSetSocial = (props: ModalSetSocialProps) => { const [open, setOpen] = useState(false) @@ -193,12 +195,16 @@ const ModalSetSocial = (props: ModalSetSocialProps) => { return ( <> - + {props.enabled ? ( + + ) : ( + <> + )} { id="password" className="w-full mt-3 flex flex-row gap-3 justify-center" > - {false ? ( + {true ? ( {
+
+ {/* // TODO FLORIAN */} + +
+