From 149f086bac2b4cbbaa1fe9b3591e0c5f018f21c6 Mon Sep 17 00:00:00 2001 From: Milton Date: Mon, 21 Mar 2022 18:23:09 -0300 Subject: [PATCH 1/2] Create hook to determine guild implementation --- src/GuildsApp.tsx | 2 +- src/components/Guilds/Sidebar/index.tsx | 3 ++ .../guild/useGuildImplementationType.ts | 51 +++++++++++++++++++ 3 files changed, 55 insertions(+), 1 deletion(-) create mode 100644 src/hooks/Guilds/guild/useGuildImplementationType.ts diff --git a/src/GuildsApp.tsx b/src/GuildsApp.tsx index b16af16291..9079fc090f 100644 --- a/src/GuildsApp.tsx +++ b/src/GuildsApp.tsx @@ -48,7 +48,7 @@ const GuildsApp = () => { diff --git a/src/components/Guilds/Sidebar/index.tsx b/src/components/Guilds/Sidebar/index.tsx index 02695c326f..dd1759ec85 100644 --- a/src/components/Guilds/Sidebar/index.tsx +++ b/src/components/Guilds/Sidebar/index.tsx @@ -6,6 +6,7 @@ import { GuestActions } from './GuestActions'; import dxIcon from '../../../assets/images/dxdao-icon.svg'; import { Heading } from '../common/Typography'; import { useGuildConfig } from '../../../hooks/Guilds/ether-swr/guild/useGuildConfig'; +import useGuildImplementationType from '../../../hooks/Guilds/guild/useGuildImplementationType'; import { useParams } from 'react-router-dom'; import { useVotingPowerOf } from '../../../hooks/Guilds/ether-swr/guild/useVotingPowerOf'; import { useWeb3React } from '@web3-react/core'; @@ -99,6 +100,7 @@ export const Sidebar = () => { const { guild_id: guildAddress } = useParams<{ guild_id?: string }>(); const { data } = useGuildConfig(guildAddress); + const type = useGuildImplementationType(guildAddress); const { data: votingPower } = useVotingPowerOf({ contractAddress: guildAddress, userAddress, @@ -116,6 +118,7 @@ export const Sidebar = () => { 464 Members + {type} {votingPower && !votingPower?.isZero() ? ( diff --git a/src/hooks/Guilds/guild/useGuildImplementationType.ts b/src/hooks/Guilds/guild/useGuildImplementationType.ts new file mode 100644 index 0000000000..e83fb2b779 --- /dev/null +++ b/src/hooks/Guilds/guild/useGuildImplementationType.ts @@ -0,0 +1,51 @@ +// import { BigNumber } from 'ethers'; +import { useMemo, useEffect, useState } from 'react'; +import useJsonRpcProvider from '../web3/useJsonRpcProvider'; + +enum GuildImplementationType { + SnapshotRepERC20Guild = 'SnapshotRepERC20Guild', + DXDGuild = 'DXDGuild', + ERC20Guild = 'ERC20Guild', + IERC20Guild = 'IERC20Guild', +} + +export default function useGuildImplementationType(guildAddress) { + const [guildBytecode, setGuildBytecode] = useState(''); + const provider = useJsonRpcProvider(); + + useEffect(() => { + const getBytecode = async () => { + // get current guild bytecode; + const bytecode = await provider.getCode(guildAddress); + setGuildBytecode(bytecode); + }; + getBytecode(); + }, [guildAddress, provider]); + + const currentImplementation = useMemo(() => { + if (!guildBytecode) return ''; + + // compare current guild bytecode with other guilds implementation bytecode; + const match = Object.entries(deployedBytecodes).find(([_, bytecode]) => { + return guildBytecode === bytecode; + }); + + return match + ? GuildImplementationType[match[0]] + : GuildImplementationType.ERC20Guild; + }, [guildBytecode]); + + return currentImplementation; +} + +const deployedSnapshotRepErc20GuildBytecode = + '0x6080604052600436106102ae5760003560e01c80636e27d88911610166578063ae619234116100d3578063c0a4d64d1161008f578063f2fde38b1161006c578063f2fde38b146108cd578063f4732da6146108ed578063f5447c0a14610902578063f9a92d821461094b57005b8063c0a4d64d1461086f578063c93e01e314610884578063cac7d2051461089957005b8063ae619234146107b5578063b2c342d5146107ca578063b3b47061146107fa578063b7c15f8d1461081a578063b82bb2851461082f578063bcc3f3bd1461084f57005b806389c98c061161012257806389c98c06146106f75780638da5cb5b1461070c57806392b716541461072a578063a16fe3421461074a578063a5234bce14610768578063adf2c7b61461078857005b80636e27d8891461052f578063715018a61461064d57806377027ff414610662578063785b3ed8146106775780637fa0ff29146106975780638029eff1146106b757005b806322bafdff1161021c57806336f8f8d9116101d8578063430694cf116101b5578063430694cf146105c357806354f2f7af146105fa5780636140b814146106185780636c8b72f61461063857005b806336f8f8d91461054f5780633b72b3c71461056f5780633f330ff8146105a357005b806322bafdff146104745780632467ef94146104a157806329b412e3146104b65780632d5b17de146104d65780632d757c3e146104f6578063315a095d1461052f57005b80631626ba7e1161026b5780631626ba7e146103b057806316bbecde146103d057806317d7de7c146103f05780631a5007dd1461041257806321df0da7146104275780632229a0e21461045f57005b80623a40d0146102b7578063069dfc5b146102e2578063088af182146103165780630a366a6314610338578063130485fe1461035b57806313108d741461039057005b366102b557005b005b3480156102c357600080fd5b506102cc61096b565b6040516102d99190613e15565b60405180910390f35b3480156102ee57600080fd5b506102fd635555555560e11b81565b6040516001600160e01b031990911681526020016102d9565b34801561032257600080fd5b506102fd610331366004613f0e565b6020015190565b34801561034457600080fd5b5061034d6109c3565b6040519081526020016102d9565b34801561036757600080fd5b5061037b610376366004613f66565b6109eb565b604080519283526020830191909152016102d9565b34801561039c57600080fd5b5061034d6103ab36600461411d565b610a20565b3480156103bc57600080fd5b506102fd6103cb3660046141f6565b610ad3565b3480156103dc57600080fd5b506102b56103eb36600461423c565b610b19565b3480156103fc57600080fd5b50610405610b2a565b6040516102d991906142b5565b34801561041e57600080fd5b50600a5461034d565b34801561043357600080fd5b506000546201000090046001600160a01b03165b6040516001600160a01b0390911681526020016102d9565b34801561046b57600080fd5b5060135461034d565b34801561048057600080fd5b5061034d61048f3660046142c8565b60009081526079602052604090205490565b3480156104ad57600080fd5b50600b5461034d565b3480156104c257600080fd5b506102b56104d13660046142c8565b610bb3565b3480156104e257600080fd5b506102b56104f13660046142e1565b610c3c565b34801561050257600080fd5b5061034d61051136600461434b565b6001600160a01b03166000908152600f602052604090206001015490565b34801561053b57600080fd5b506102b561054a3660046142c8565b610da3565b34801561055b57600080fd5b506102b561056a366004614366565b610dfc565b34801561057b57600080fd5b506102fd7fa9059cbb2ab09eb219583f4a59a5d0623ade346d962bcd4e46b11da047c9049b81565b3480156105af57600080fd5b506102b56105be366004614414565b610fc2565b3480156105cf57600080fd5b506105e36105de3660046142c8565b610fdc565b6040516102d99b9a99989796959493929190614567565b34801561060657600080fd5b50600e546001600160a01b0316610447565b34801561062457600080fd5b506102b5610633366004614621565b61135f565b34801561064457600080fd5b5060075461034d565b34801561065957600080fd5b506102b5611460565b34801561066e57600080fd5b5060095461034d565b34801561068357600080fd5b506102b56106923660046146b8565b6114c6565b3480156106a357600080fd5b506102b56106b23660046146db565b611544565b3480156106c357600080fd5b506106e76106d23660046142c8565b60009081526010602052604090205460ff1690565b60405190151581526020016102d9565b34801561070357600080fd5b5060085461034d565b34801561071857600080fd5b506047546001600160a01b0316610447565b34801561073657600080fd5b5061034d61074536600461479f565b6115f4565b34801561075657600080fd5b506001546001600160a01b0316610447565b34801561077457600080fd5b506102b56107833660046148c2565b61164b565b34801561079457600080fd5b506107a86107a3366004614986565b611c0c565b6040516102d991906149df565b3480156107c157600080fd5b5061034d611cd4565b3480156107d657600080fd5b506106e76107e53660046142c8565b60009081526011602052604090205460ff1690565b34801561080657600080fd5b506102b56108153660046142c8565b611ceb565b34801561082657600080fd5b5060045461034d565b34801561083b57600080fd5b506107a861084a3660046149f2565b611cf7565b34801561085b57600080fd5b5061034d61086a36600461434b565b611da4565b34801561087b57600080fd5b50600c5461034d565b34801561089057600080fd5b5060035461034d565b3480156108a557600080fd5b506102fd7f095ea7b334ae44009aa867bfb386f5c3b4b443ac6f0ee573fa91c4608fbadfba81565b3480156108d957600080fd5b506102b56108e836600461434b565b611e2f565b3480156108f957600080fd5b50600d5461034d565b34801561090e57600080fd5b5061092c61091d366004613f0e565b60248101516044909101519091565b604080516001600160a01b0390931683526020830191909152016102d9565b34801561095757600080fd5b5061034d610966366004614a26565b611ef7565b606060138054806020026020016040519081016040528092919081815260200182805480156109b957602002820191906000526020600020905b8154815260200190600101908083116109a5575b5050505050905090565b60006109e66127106109e06006546109da600d5490565b90611f83565b90611f8f565b905090565b60008281526012602090815260408083206001600160a01b0385168452600a01909152902080546001909101545b9250929050565b600080610a31888888888888611f9b565b9050600060029054906101000a90046001600160a01b03166001600160a01b0316635439ad866040518163ffffffff1660e01b815260040160206040518083038186803b158015610a8157600080fd5b505afa158015610a95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ab99190614a50565b600082815260796020526040902055979650505050505050565b600080610ae361086a8585611fb6565b118015610afe575060008381526011602052604090205460ff165b610b09576000610b12565b630b135d3f60e11b5b9392505050565b610b2533848484611fd2565b505050565b606060028054610b3990614a69565b80601f0160208091040260200160405190810160405280929190818152602001828054610b6590614a69565b80156109b95780601f10610b87576101008083540402835291602001916109b9565b820191906000526020600020905b815481529060010190602001808311610b9557509395945050505050565b333014610bdb5760405162461bcd60e51b8152600401610bd290614aa4565b60405180910390fd5b6001546040516329b412e360e01b8152600481018390526001600160a01b03909116906329b412e390602401600060405180830381600087803b158015610c2157600080fd5b505af1158015610c35573d6000803e3d6000fd5b5050505050565b6000610c4a838787876115f4565b60008181526010602052604090205490915060ff1615610cb65760405162461bcd60e51b815260206004820152602160248201527f536e617073686f7445524332304775696c643a20416c726561647920766f74656044820152601960fa1b6064820152608401610bd2565b610d1782610d11836040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b90611fb6565b6001600160a01b0316836001600160a01b031614610d775760405162461bcd60e51b815260206004820181905260248201527f536e617073686f7445524332304775696c643a2057726f6e67207369676e65726044820152606401610bd2565b610d8383878787611fd2565b6000908152601060205260409020805460ff191660011790555050505050565b60405162461bcd60e51b815260206004820152602860248201527f536e617073686f7445524332304775696c643a20746f6b656e207661756c7420604482015267191a5cd8589b195960c21b6064820152608401610bd2565b600054610100900460ff1680610e15575060005460ff16155b610e315760405162461bcd60e51b8152600401610bd290614af2565b600054610100900460ff16158015610e53576000805461ffff19166101011790555b610e668c8c8c8c8c8c8c8c8c8c8c6123b9565b600160009054906101000a90046001600160a01b03166001600160a01b0316639b2dccdd60008e7f40c10f19c047ae7dfa66d6312b683d2ea3dfbcb4159e96b967c5f4b0a86f2842600060016040518663ffffffff1660e01b8152600401610ed2959493929190614b40565b600060405180830381600087803b158015610eec57600080fd5b505af1158015610f00573d6000803e3d6000fd5b50505050600160009054906101000a90046001600160a01b03166001600160a01b0316639b2dccdd60008e7f9dc29fac0ba6d4fc521c69c2b0c636d612e3343bc39ed934429b8876b0d12cba600060016040518663ffffffff1660e01b8152600401610f70959493929190614b40565b600060405180830381600087803b158015610f8a57600080fd5b505af1158015610f9e573d6000803e3d6000fd5b505050508015610fb4576000805461ff00191690555b505050505050505050505050565b610fd28888888888888888612442565b5050505050505050565b600081815260126020526040812080546001808301546002840154600985015486958695606095869586958995879586958895879592946001600160a01b0390921693600386019160048701916005880191611038919061253d565b600888015484546040805160208084028201810190925282815260068c019360078d019360ff9091169260098e0192918a918301828280156110a357602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611085575b5050505050975086805480602002602001604051908101604052809291908181526020016000905b828210156111775783829060005260206000200180546110ea90614a69565b80601f016020809104026020016040519081016040528092919081815260200182805461111690614a69565b80156111635780601f1061113857610100808354040283529160200191611163565b820191906000526020600020905b81548152906001019060200180831161114657829003601f168201915b5050505050815260200190600101906110cb565b505050509650858054806020026020016040519081016040528092919081815260200182805480156111c857602002820191906000526020600020905b8154815260200190600101908083116111b4575b505050505095508380546111db90614a69565b80601f016020809104026020016040519081016040528092919081815260200182805461120790614a69565b80156112545780601f1061122957610100808354040283529160200191611254565b820191906000526020600020905b81548152906001019060200180831161123757829003601f168201915b5050505050935082805461126790614a69565b80601f016020809104026020016040519081016040528092919081815260200182805461129390614a69565b80156112e05780601f106112b5576101008083540402835291602001916112e0565b820191906000526020600020905b8154815290600101906020018083116112c357829003601f168201915b505050505092508080548060200260200160405190810160405280929190818152602001828054801561133257602002820191906000526020600020905b81548152602001906001019080831161131e575b505050505090509b509b509b509b509b509b509b509b509b509b509b505091939597999b90929496989a50565b80518351148015611371575081518351145b6113e5576040805162461bcd60e51b81526020600482015260248101919091527f45524332304775696c643a2057726f6e67206c656e677468206f662070726f7060448201527f6f73616c4964732c20616374696f6e73206f7220766f74696e67506f776572736064820152608401610bd2565b60005b835181101561145a576114483385838151811061140757611407614b7b565b602002602001015185848151811061142157611421614b7b565b602002602001015185858151811061143b5761143b614b7b565b6020026020010151612549565b8061145281614ba7565b9150506113e8565b50505050565b6047546001600160a01b031633146114ba5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610bd2565b6114c4600061271d565b565b3330146115245760405162461bcd60e51b815260206004820152602660248201527f45524332304775696c643a204f6e6c792063616c6c61626c65206279207468656044820152650819dd5a5b1960d21b6064820152608401610bd2565b600091825260116020526040909120805460ff1916911515919091179055565b60005b85518110156115ec576115da86828151811061156557611565614b7b565b602002602001015186838151811061157f5761157f614b7b565b602002602001015186848151811061159957611599614b7b565b60200260200101518685815181106115b3576115b3614b7b565b60200260200101518686815181106115cd576115cd614b7b565b6020026020010151610c3c565b806115e481614ba7565b915050611547565b505050505050565b6040516bffffffffffffffffffffffff19606086901b166020820152603481018490526054810183905260748101829052600090609401604051602081830303815290604052805190602001209050949350505050565b33301461166a5760405162461bcd60e51b8152600401610bd290614aa4565b8251845114801561167c575081518451145b8015611689575080518451145b8015611696575084518451145b61171d5760405162461bcd60e51b815260206004820152604c60248201527f45524332304775696c643a2057726f6e67206c656e677468206f66206173736560448201527f742c20746f2c2066756e6374696f6e5369676e6174757265206f7220616c6c6f60648201526b77616e63652061727261797360a01b608482015260a401610bd2565b60005b84518110156118af57835160009085908390811061174057611740614b7b565b60200260200101516001600160e01b03191614156117b15760405162461bcd60e51b815260206004820152602860248201527f45524332304775696c643a20456d707479207369676e617475726573206e6f7460448201526708185b1b1bddd95960c21b6064820152608401610bd2565b60015486516001600160a01b0390911690639b2dccdd908890849081106117da576117da614b7b565b60200260200101518784815181106117f4576117f4614b7b565b602002602001015187858151811061180e5761180e614b7b565b602002602001015187868151811061182857611828614b7b565b602002602001015187878151811061184257611842614b7b565b60200260200101516040518663ffffffff1660e01b815260040161186a959493929190614b40565b600060405180830381600087803b15801561188457600080fd5b505af1158015611898573d6000803e3d6000fd5b5050505080806118a790614ba7565b915050611720565b5060015460405163fd9233a960e01b81526000916001600160a01b03169063fd9233a990611907908490309081907f3f330ff86dd1b379b10f18bab5301bb628f28784f70482a01774042ed08621d590600401614bc2565b60206040518083038186803b15801561191f57600080fd5b505afa158015611933573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119579190614a50565b116119ca5760405162461bcd60e51b815260206004820152603b60248201527f45524332304775696c643a20736574436f6e6669672066756e6374696f6e206160448201527f6c6c6f77616e63652063616e74206265207475726e6564206f666600000000006064820152608401610bd2565b60015460405163fd9233a960e01b81526000916001600160a01b03169063fd9233a990611a21908490309081907fa5234bce363054cb38e3dfeca861627611d626c5c363ab716da0106f1600399c90600401614bc2565b60206040518083038186803b158015611a3957600080fd5b505afa158015611a4d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a719190614a50565b11611ae45760405162461bcd60e51b815260206004820152603f60248201527f45524332304775696c643a207365745065726d697373696f6e2066756e63746960448201527f6f6e20616c6c6f77616e63652063616e74206265207475726e6564206f6666006064820152608401610bd2565b60015460405163fd9233a960e01b81526000916001600160a01b03169063fd9233a990611b3b908490309081907f29b412e31bd60c46f11150420851edff43d71c82bd81c13331d702842993c93790600401614bc2565b60206040518083038186803b158015611b5357600080fd5b505afa158015611b67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b8b9190614a50565b11610c355760405162461bcd60e51b8152602060048201526044602482018190527f45524332304775696c643a207365745065726d697373696f6e44656c61792066908201527f756e6374696f6e20616c6c6f77616e63652063616e74206265207475726e65646064820152631037b33360e11b608482015260a401610bd2565b6060600083516001600160401b03811115611c2957611c29613e59565b604051908082528060200260200182016040528015611c52578160200160208202803683370190505b50905060005b8451811015611ccc57611c9d858281518110611c7657611c76614b7b565b6020026020010151858381518110611c9057611c90614b7b565b6020026020010151611ef7565b828281518110611caf57611caf614b7b565b602090810291909101015280611cc481614ba7565b915050611c58565b509392505050565b60006109e66127106109e06005546109da600d5490565b611cf48161276f565b50565b6060600082516001600160401b03811115611d1457611d14613e59565b604051908082528060200260200182016040528015611d3d578160200160208202803683370190505b50905060005b8351811015611d9d57611d6e848281518110611d6157611d61614b7b565b6020026020010151611da4565b828281518110611d8057611d80614b7b565b602090810291909101015280611d9581614ba7565b915050611d43565b5092915050565b600080546040516370a0823160e01b81526001600160a01b03848116600483015262010000909204909116906370a082319060240160206040518083038186803b158015611df157600080fd5b505afa158015611e05573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e299190614a50565b92915050565b6047546001600160a01b03163314611e895760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610bd2565b6001600160a01b038116611eee5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610bd2565b611cf48161271d565b6000805460405163277166bf60e11b81526001600160a01b038581166004830152602482018590526201000090920490911690634ee2cd7e9060440160206040518083038186803b158015611f4b57600080fd5b505afa158015611f5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b129190614a50565b6000610b128284614bf5565b6000610b128284614c14565b6000611fab878787878787613035565b979650505050505050565b6000806000611fc585856134b9565b91509150611ccc81613526565b600083815260126020526040902060020154421061204c5760405162461bcd60e51b815260206004820152603160248201527f536e617073686f7445524332304775696c643a2050726f706f73616c20656e6460448201527019590b0818d85b9d081899481d9bdd1959607a1b6064820152608401610bd2565b6000838152607960205260409020548190612068908690611ef7565b10156120cd5760405162461bcd60e51b815260206004820152602e60248201527f536e617073686f7445524332304775696c643a20496e76616c696420766f746960448201526d1b99d41bddd95c88185b5bdd5b9d60921b6064820152608401610bd2565b60008381526012602090815260408083206001600160a01b0388168452600a0190915290206001015481116121625760405162461bcd60e51b815260206004820152603560248201527f536e617073686f7445524332304775696c643a2043616e7420646563726561736044820152746520766f74696e67506f77657220696e20766f746560581b6064820152608401610bd2565b60008381526012602090815260408083206001600160a01b0388168452600a0190915290205415806121b8575060008381526012602090815260408083206001600160a01b0388168452600a0190915290205482145b61223a5760405162461bcd60e51b815260206004820152604760248201527f536e617073686f7445524332304775696c643a2043616e74206368616e67652060448201527f616374696f6e20766f7465642c206f6e6c7920696e63726561736520766f74696064820152663733a837bbb2b960c91b608482015260a401610bd2565b60008381526012602081815260408084206001600160a01b0389168552600a81018352908420600101549387905291905260090180546122a99284926122a3928790811061228a5761228a614b7b565b906000526020600020015461253d90919063ffffffff16565b906136e1565b60008481526012602052604090206009018054849081106122cc576122cc614b7b565b6000918252602080832091909101929092558481526012825260408082206001600160a01b038816808452600a9091018452918190208581556001018490558051918252918101839052839185917f583c62f152711bcb1ca6186c1065821ff17a7cbe226dcb559a1c889dcf0d769b910160405180910390a36007541561145a5760006123706123676008543a6136ed90919063ffffffff16565b60075490611f83565b9050804710610c355760405133908290600081818185875af1925050503d8060008114610fd2576040519150601f19603f3d011682016040523d82523d6000602084013e610fd2565b600054610100900460ff16806123d2575060005460ff16155b6123ee5760405162461bcd60e51b8152600401610bd290614af2565b600054610100900460ff16158015612410576000805461ffff19166101011790555b6124238c8c8c8c8c8c8c8c8c8c8c613703565b8015610fb4576000805461ff0019169055505050505050505050505050565b3330146124b75760405162461bcd60e51b815260206004820152603f60248201527f45524332304775696c643a204f6e6c792063616c6c61626c652062792045524360448201527f32306775696c6420697473656c66207768656e20696e697469616c697a6564006064820152608401610bd2565b600088116124d75760405162461bcd60e51b8152600401610bd290614c36565b878110156124f75760405162461bcd60e51b8152600401610bd290614c84565b600086116125175760405162461bcd60e51b8152600401610bd290614ce1565b600397909755600495909555600593909355600691909155600755600855600955600c55565b6000610b128284614d3e565b60008381526012602052604090206002015442106125bb5760405162461bcd60e51b815260206004820152602960248201527f45524332304775696c643a2050726f706f73616c20656e6465642c2063616e74604482015268081899481d9bdd195960ba1b6064820152608401610bd2565b806125c585611da4565b101580156125fa575060008381526012602090815260408083206001600160a01b0388168452600a0190915290206001015481115b6126555760405162461bcd60e51b815260206004820152602660248201527f45524332304775696c643a20496e76616c696420766f74696e67506f77657220604482015265185b5bdd5b9d60d21b6064820152608401610bd2565b60008381526012602090815260408083206001600160a01b0388168452600a0190915290205415806126ab575060008381526012602090815260408083206001600160a01b0388168452600a0190915290205482145b61223a5760405162461bcd60e51b815260206004820152603f60248201527f45524332304775696c643a2043616e74206368616e676520616374696f6e207660448201527f6f7465642c206f6e6c7920696e63726561736520766f74696e67506f776572006064820152608401610bd2565b604780546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60145460ff16156127ce5760405162461bcd60e51b8152602060048201526024808201527f45524332304775696c643a2050726f706f73616c20756e6465722065786563756044820152633a34b7b760e11b6064820152608401610bd2565b600160008281526012602052604090206008015460ff1660048111156127f6576127f661452f565b146128515760405162461bcd60e51b815260206004820152602560248201527f45524332304775696c643a2050726f706f73616c20616c72656164792065786560448201526418dd5d195960da1b6064820152608401610bd2565b60008181526012602052604090206002015442116128bf5760405162461bcd60e51b815260206004820152602560248201527f45524332304775696c643a2050726f706f73616c206861736e277420656e646560448201526419081e595d60da1b6064820152608401610bd2565b600060015b600083815260126020526040902060090154811015612999576128e5611cd4565b600084815260126020526040902060090180548390811061290857612908614b7b565b90600052602060002001541015801561297e5750600083815260126020526040902060090180548390811061293f5761293f614b7b565b906000526020600020015460126000858152602001908152602001600020600901828154811061297157612971614b7b565b9060005260206000200154115b15612987578091505b8061299181614ba7565b9150506128c4565b816129e6576000838152601260205260409020600801805460ff191660029081179091558390600080516020615526833981519152905b60405190815260200160405180910390a261301f565b6004546000848152601260205260409020600201544291612a0791906136e1565b1015612a43576000838152601260205260409020600801805460ff191660049081179091558390600080516020615526833981519152906129d0565b600083815260126020526040812060088101805460ff1916600317905560090154612a8b90612a7390600161253d565b60008681526012602052604090206003015490611f8f565b9050612aa2612a9b84600161253d565b8290611f83565b91506000612ab083836136e1565b90505b80831015612ff9576000858152601260205260408120600301805485908110612ade57612ade614b7b565b6000918252602090912001546001600160a01b031614801590612b3857506000858152601260205260408120600401805485908110612b1f57612b1f614b7b565b906000526020600020018054612b3490614a69565b9050115b15612fe75760008581526012602052604081206004018054612bff919086908110612b6557612b65614b7b565b906000526020600020018054612b7a90614a69565b80601f0160208091040260200160405190810160405280929190818152602001828054612ba690614a69565b8015612bf35780601f10612bc857610100808354040283529160200191612bf3565b820191906000526020600020905b815481529060010190602001808311612bd657829003601f168201915b50505050506020015190565b9050600080601260008981526020019081526020016000206003018681548110612c2b57612c2b614b7b565b60009182526020808320909101548a835260129091526040822060050180546001600160a01b0390921693509088908110612c6857612c68614b7b565b600091825260209091200154905063a9059cbb60e01b6001600160e01b031985161480612ca5575063095ea7b360e01b6001600160e01b03198516145b15612dc0576000898152601260205260409020600301805488908110612ccd57612ccd614b7b565b60009182526020808320909101548b8352601290915260409091206004018054635555555560e11b96506001600160a01b039092169450612dba9189908110612d1857612d18614b7b565b906000526020600020018054612d2d90614a69565b80601f0160208091040260200160405190810160405280929190818152602001828054612d5990614a69565b8015612da65780601f10612d7b57610100808354040283529160200191612da6565b820191906000526020600020905b815481529060010190602001808311612d8957829003601f168201915b505050505060248101516044909101519091565b90925090505b6001546040516306f09e0b60e01b81526001600160a01b03858116600483015230602483015284811660448301526001600160e01b03198716606483015260848201849052909116906306f09e0b9060a401600060405180830381600087803b158015612e2c57600080fd5b505af1925050508015612e3d575060015b612e8f57612e49614d55565b806308c379a01415612e835750612e5e614d71565b80612e695750612e85565b8060405162461bcd60e51b8152600401610bd291906142b5565b505b3d6000803e3d6000fd5b6014805460ff191660011790556000898152601260205260408120600301805489908110612ebf57612ebf614b7b565b60009182526020808320909101548c83526012909152604090912060050180546001600160a01b03909216918a908110612efb57612efb614b7b565b9060005260206000200154601260008d81526020019081526020016000206004018a81548110612f2d57612f2d614b7b565b90600052602060002001604051612f449190614dfa565b60006040518083038185875af1925050503d8060008114612f81576040519150601f19603f3d011682016040523d82523d6000602084013e612f86565b606091505b5050905080612fd75760405162461bcd60e51b815260206004820181905260248201527f45524332304775696c643a2050726f706f73616c2063616c6c206661696c65646044820152606401610bd2565b50506014805460ff191690555050505b82612ff181614ba7565b935050612ab3565b84600080516020615526833981519152600360405190815260200160405180910390a250505b600b5461302d90600161253d565b600b55505050565b600061304060095490565b600b54106130af5760405162461bcd60e51b815260206004820152603660248201527f45524332304775696c643a204d6178696d756d20616d6f756e74206f662061636044820152751d1a5d99481c1c9bdc1bdcd85b1cc81c995858da195960521b6064820152608401610bd2565b6130b76109c3565b6130c033611da4565b10156131265760405162461bcd60e51b815260206004820152602f60248201527f45524332304775696c643a204e6f7420656e6f75676820766f74657320746f2060448201526e18dc99585d19481c1c9bdc1bdcd85b608a1b6064820152608401610bd2565b85518751148015613138575084518751145b6131a15760405162461bcd60e51b815260206004820152603460248201527f45524332304775696c643a2057726f6e67206c656e677468206f6620746f2c2060448201527364617461206f722076616c75652061727261797360601b6064820152608401610bd2565b600087511161320c5760405162461bcd60e51b815260206004820152603160248201527f45524332304775696c643a20746f2c20646174612076616c7565206172726179604482015270732063616e6e6f7420626520656d70747960781b6064820152608401610bd2565b60005b87518110156132c75760015488516001600160a01b039091169089908390811061323b5761323b614b7b565b60200260200101516001600160a01b031614156132b55760405162461bcd60e51b815260206004820152603260248201527f45524332304775696c643a2043616e742063616c6c207065726d697373696f6e604482015271207265676973747279206469726563746c7960701b6064820152608401610bd2565b806132bf81614ba7565b91505061320f565b50600a546040516bffffffffffffffffffffffff193360601b16602082015242603482015260548101919091526000906074016040516020818303038152906040528051906020012090506133286001600a546136e190919063ffffffff16565b600a55600081815260126020526040902080546001600160a01b03191633178155426001820181905560035461335e91906136e1565b6002820155885161337890600383019060208c0190613c30565b50875161338e90600483019060208b0190613c95565b5086516133a490600583019060208a0190613cee565b5084516133ba9060068301906020880190613d29565b5083516133d09060078301906020870190613d29565b506133dc8660016136e1565b6001600160401b038111156133f3576133f3613e59565b60405190808252806020026020018201604052801561341c578160200160208202803683370190505b508051613433916009840191602090910190613cee565b5060088101805460ff19166001908117909155600b54613452916136e1565b600b5581600080516020615526833981519152600160405190815260200160405180910390a250601380546001810182556000919091527f66de8ffda797e3de9c05e8fc57b3bf0ec28a930d40b0d285d93c06501cf6a09001819055979650505050505050565b6000808251604114156134f05760208301516040840151606085015160001a6134e487828585613b14565b94509450505050610a19565b82516040141561351a576020830151604084015161350f868383613c01565b935093505050610a19565b50600090506002610a19565b600081600481111561353a5761353a61452f565b14156135435750565b60018160048111156135575761355761452f565b14156135a55760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610bd2565b60028160048111156135b9576135b961452f565b14156136075760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610bd2565b600381600481111561361b5761361b61452f565b14156136745760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610bd2565b60048160048111156136885761368861452f565b1415611cf45760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b6064820152608401610bd2565b6000610b128284614e96565b60008183106136fc5781610b12565b5090919050565b6001600160a01b038b166137685760405162461bcd60e51b815260206004820152602660248201527f45524332304775696c643a20746f6b656e2063616e74206265207a65726f206160448201526564647265737360d01b6064820152608401610bd2565b60008a116137885760405162461bcd60e51b8152600401610bd290614c36565b898210156137a85760405162461bcd60e51b8152600401610bd290614c84565b600088116137c85760405162461bcd60e51b8152600401610bd290614ce1565b85516137db906002906020890190613d29565b506000805462010000600160b01b031916620100006001600160a01b038e160217905560405161380a90613d9c565b604051809103906000f080158015613826573d6000803e3d6000fd5b50600e80546001600160a01b0319166001600160a01b0392831690811790915560005460405163485cc95560e01b81526201000090910490921660048301523060248301529063485cc95590604401600060405180830381600087803b15801561388f57600080fd5b505af11580156138a3573d6000803e3d6000fd5b50505060038b905550600489815560058990556006889055600786905560088590556009849055600c839055600180546001600160a01b0319166001600160a01b0384169081178255604051639b2dccdd60e01b81529092639b2dccdd926139349260009230927f3f330ff86dd1b379b10f18bab5301bb628f28784f70482a01774042ed08621d592859201614b40565b600060405180830381600087803b15801561394e57600080fd5b505af1158015613962573d6000803e3d6000fd5b505060018054604051639b2dccdd60e01b81526001600160a01b039091169350639b2dccdd92506139bf9160009130917fa5234bce363054cb38e3dfeca861627611d626c5c363ab716da0106f1600399c91849190600401614b40565b600060405180830381600087803b1580156139d957600080fd5b505af11580156139ed573d6000803e3d6000fd5b505060018054604051639b2dccdd60e01b81526001600160a01b039091169350639b2dccdd9250613a4a9160009130917f29b412e31bd60c46f11150420851edff43d71c82bd81c13331d702842993c93791849190600401614b40565b600060405180830381600087803b158015613a6457600080fd5b505af1158015613a78573d6000803e3d6000fd5b505060018054604051639b2dccdd60e01b81526001600160a01b039091169350639b2dccdd9250613ad59160009130917f785b3ed8f1babbb20b6a85d572b5e50637a4c77796e0e444290d8b90490101d691849190600401614b40565b600060405180830381600087803b158015613aef57600080fd5b505af1158015613b03573d6000803e3d6000fd5b505050505050505050505050505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115613b4b5750600090506003613bf8565b8460ff16601b14158015613b6357508460ff16601c14155b15613b745750600090506004613bf8565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015613bc8573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116613bf157600060019250925050613bf8565b9150600090505b94509492505050565b6000806001600160ff1b03831660ff84901c601b01613c2287828885613b14565b935093505050935093915050565b828054828255906000526020600020908101928215613c85579160200282015b82811115613c8557825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190613c50565b50613c91929150613da9565b5090565b828054828255906000526020600020908101928215613ce2579160200282015b82811115613ce25782518051613cd2918491602090910190613d29565b5091602001919060010190613cb5565b50613c91929150613dbe565b828054828255906000526020600020908101928215613c85579160200282015b82811115613c85578251825591602001919060010190613d0e565b828054613d3590614a69565b90600052602060002090601f016020900481019282613d575760008555613c85565b82601f10613d7057805160ff1916838001178555613c85565b82800160010185558215613c855791820182811115613c85578251825591602001919060010190613d0e565b61067780614eaf83390190565b5b80821115613c915760008155600101613daa565b80821115613c91576000613dd28282613ddb565b50600101613dbe565b508054613de790614a69565b6000825580601f10613df7575050565b601f016020900490600052602060002090810190611cf49190613da9565b6020808252825182820181905260009190848201906040850190845b81811015613e4d57835183529284019291840191600101613e31565b50909695505050505050565b634e487b7160e01b600052604160045260246000fd5b601f8201601f191681016001600160401b0381118282101715613e9457613e94613e59565b6040525050565b600082601f830112613eac57600080fd5b81356001600160401b03811115613ec557613ec5613e59565b604051613edc601f8301601f191660200182613e6f565b818152846020838601011115613ef157600080fd5b816020850160208301376000918101602001919091529392505050565b600060208284031215613f2057600080fd5b81356001600160401b03811115613f3657600080fd5b613f4284828501613e9b565b949350505050565b80356001600160a01b0381168114613f6157600080fd5b919050565b60008060408385031215613f7957600080fd5b82359150613f8960208401613f4a565b90509250929050565b60006001600160401b03821115613fab57613fab613e59565b5060051b60200190565b600082601f830112613fc657600080fd5b81356020613fd382613f92565b604051613fe08282613e6f565b83815260059390931b850182019282810191508684111561400057600080fd5b8286015b848110156140225761401581613f4a565b8352918301918301614004565b509695505050505050565b600082601f83011261403e57600080fd5b8135602061404b82613f92565b6040516140588282613e6f565b83815260059390931b850182019282810191508684111561407857600080fd5b8286015b848110156140225780356001600160401b0381111561409b5760008081fd5b6140a98986838b0101613e9b565b84525091830191830161407c565b600082601f8301126140c857600080fd5b813560206140d582613f92565b6040516140e28282613e6f565b83815260059390931b850182019282810191508684111561410257600080fd5b8286015b848110156140225780358352918301918301614106565b60008060008060008060c0878903121561413657600080fd5b86356001600160401b038082111561414d57600080fd5b6141598a838b01613fb5565b9750602089013591508082111561416f57600080fd5b61417b8a838b0161402d565b9650604089013591508082111561419157600080fd5b61419d8a838b016140b7565b95506060890135945060808901359150808211156141ba57600080fd5b6141c68a838b01613e9b565b935060a08901359150808211156141dc57600080fd5b506141e989828a01613e9b565b9150509295509295509295565b6000806040838503121561420957600080fd5b8235915060208301356001600160401b0381111561422657600080fd5b61423285828601613e9b565b9150509250929050565b60008060006060848603121561425157600080fd5b505081359360208301359350604090920135919050565b6000815180845260005b8181101561428e57602081850181015186830182015201614272565b818111156142a0576000602083870101525b50601f01601f19169290920160200192915050565b602081526000610b126020830184614268565b6000602082840312156142da57600080fd5b5035919050565b600080600080600060a086880312156142f957600080fd5b85359450602086013593506040860135925061431760608701613f4a565b915060808601356001600160401b0381111561433257600080fd5b61433e88828901613e9b565b9150509295509295909350565b60006020828403121561435d57600080fd5b610b1282613f4a565b60008060008060008060008060008060006101608c8e03121561438857600080fd5b6143918c613f4a565b9a5060208c0135995060408c0135985060608c0135975060808c0135965060a08c01356001600160401b038111156143c857600080fd5b6143d48e828f01613e9b565b96505060c08c0135945060e08c013593506101008c013592506101208c013591506144026101408d01613f4a565b90509295989b509295989b9093969950565b600080600080600080600080610100898b03121561443157600080fd5b505086359860208801359850604088013597606081013597506080810135965060a0810135955060c0810135945060e0013592509050565b600081518084526020808501945080840160005b838110156144a25781516001600160a01b03168752958201959082019060010161447d565b509495945050505050565b6000815180845260208085019450848260051b860182860160005b858110156144f25783830389526144e0838351614268565b988501989250908401906001016144c8565b5090979650505050505050565b600081518084526020808501945080840160005b838110156144a257815187529582019590820190600101614513565b634e487b7160e01b600052602160045260246000fd5b6005811061456357634e487b7160e01b600052602160045260246000fd5b9052565b600061016060018060a01b038e1683528c60208401528b60408401528060608401526145958184018c614469565b905082810360808401526145a9818b6144ad565b905082810360a08401526145bd818a6144ff565b90508760c084015282810360e08401526145d78188614268565b90508281036101008401526145ec8187614268565b90506145fc610120840186614545565b82810361014084015261460f81856144ff565b9e9d5050505050505050505050505050565b60008060006060848603121561463657600080fd5b83356001600160401b038082111561464d57600080fd5b614659878388016140b7565b9450602086013591508082111561466f57600080fd5b61467b878388016140b7565b9350604086013591508082111561469157600080fd5b5061469e868287016140b7565b9150509250925092565b80358015158114613f6157600080fd5b600080604083850312156146cb57600080fd5b82359150613f89602084016146a8565b600080600080600060a086880312156146f357600080fd5b85356001600160401b038082111561470a57600080fd5b61471689838a016140b7565b9650602088013591508082111561472c57600080fd5b61473889838a016140b7565b9550604088013591508082111561474e57600080fd5b61475a89838a016140b7565b9450606088013591508082111561477057600080fd5b61477c89838a01613fb5565b9350608088013591508082111561479257600080fd5b5061433e8882890161402d565b600080600080608085870312156147b557600080fd5b6147be85613f4a565b966020860135965060408601359560600135945092505050565b600082601f8301126147e957600080fd5b813560206147f682613f92565b6040516148038282613e6f565b83815260059390931b850182019282810191508684111561482357600080fd5b8286015b848110156140225780356001600160e01b0319811681146148485760008081fd5b8352918301918301614827565b600082601f83011261486657600080fd5b8135602061487382613f92565b6040516148808282613e6f565b83815260059390931b85018201928281019150868411156148a057600080fd5b8286015b84811015614022576148b5816146a8565b83529183019183016148a4565b600080600080600060a086880312156148da57600080fd5b85356001600160401b03808211156148f157600080fd5b6148fd89838a01613fb5565b9650602088013591508082111561491357600080fd5b61491f89838a01613fb5565b9550604088013591508082111561493557600080fd5b61494189838a016147d8565b9450606088013591508082111561495757600080fd5b61496389838a016140b7565b9350608088013591508082111561497957600080fd5b5061433e88828901614855565b6000806040838503121561499957600080fd5b82356001600160401b03808211156149b057600080fd5b6149bc86838701613fb5565b935060208501359150808211156149d257600080fd5b50614232858286016140b7565b602081526000610b1260208301846144ff565b600060208284031215614a0457600080fd5b81356001600160401b03811115614a1a57600080fd5b613f4284828501613fb5565b60008060408385031215614a3957600080fd5b614a4283613f4a565b946020939093013593505050565b600060208284031215614a6257600080fd5b5051919050565b600181811c90821680614a7d57607f821691505b60208210811415614a9e57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252602e908201527f45524332304775696c643a204f6e6c792063616c6c61626c652062792045524360408201526d191833bab4b6321034ba39b2b63360911b606082015260800190565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b6001600160a01b0395861681529390941660208401526001600160e01b03199190911660408301526060820152901515608082015260a00190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600019821415614bbb57614bbb614b91565b5060010190565b6001600160a01b0394851681529284166020840152921660408201526001600160e01b0319909116606082015260800190565b6000816000190483118215151615614c0f57614c0f614b91565b500290565b600082614c3157634e487b7160e01b600052601260045260246000fd5b500490565b6020808252602e908201527f45524332304775696c643a2070726f706f73616c2074696d652068617320746f60408201526d0206265206d6f72652074686120360941b606082015260800190565b6020808252603e908201527f45524332304775696c643a206c6f636b54696d652068617320746f206265206860408201527f6967686572206f7220657175616c20746f2070726f706f73616c54696d650000606082015260800190565b6020808252603c908201527f45524332304775696c643a20766f74696e6720706f77657220666f722065786560408201527f637574696f6e2068617320746f206265206d6f7265207468616e203000000000606082015260800190565b600082821015614d5057614d50614b91565b500390565b600060033d1115614d6e5760046000803e5060005160e01c5b90565b600060443d1015614d7f5790565b6040516003193d81016004833e81513d6001600160401b038160248401118184111715614dae57505050505090565b8285019150815181811115614dc65750505050505090565b843d8701016020828501011115614de05750505050505090565b614def60208286010187613e6f565b509095945050505050565b600080835481600182811c915080831680614e1657607f831692505b6020808410821415614e3657634e487b7160e01b86526022600452602486fd5b818015614e4a5760018114614e5b57614e88565b60ff19861689528489019650614e88565b60008a81526020902060005b86811015614e805781548b820152908501908301614e67565b505084890196505b509498975050505050505050565b60008219821115614ea957614ea9614b91565b50019056fe60806040526001805460ff60a01b1916905534801561001d57600080fd5b5061064a8061002d6000396000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c8063485cc95511610066578063485cc9551461012f5780636e9960c314610142578063f3fef3a314610153578063f851a44014610166578063fc0c546a1461017957600080fd5b8063158ef93e1461009857806321df0da7146100c157806327e235e3146100ec57806347e7ef241461011a575b600080fd5b6001546100ac90600160a01b900460ff1681565b60405190151581526020015b60405180910390f35b6000546201000090046001600160a01b03165b6040516001600160a01b0390911681526020016100b8565b61010c6100fa366004610535565b60026020526000908152604090205481565b6040519081526020016100b8565b61012d610128366004610550565b610192565b005b61012d61013d36600461057a565b6102de565b6001546001600160a01b03166100d4565b61012d610161366004610550565b6103d9565b6001546100d4906001600160a01b031681565b6000546100d4906201000090046001600160a01b031681565b600154600160a01b900460ff166101f05760405162461bcd60e51b815260206004820152601a60248201527f546f6b656e5661756c743a204e6f7420696e6974696c697a656400000000000060448201526064015b60405180910390fd5b6001546001600160a01b0316331461020757600080fd5b6000546040516323b872dd60e01b81526001600160a01b0384811660048301523060248301526044820184905262010000909204909116906323b872dd90606401602060405180830381600087803b15801561026257600080fd5b505af1158015610276573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061029a91906105ad565b506001600160a01b0382166000908152600260205260409020546102be90826104fa565b6001600160a01b0390921660009081526002602052604090209190915550565b600054610100900460ff16806102f7575060005460ff16155b61035a5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016101e7565b600054610100900460ff1615801561037c576000805461ffff19166101011790555b600080546001600160a01b03808616620100000262010000600160b01b031990921691909117909155600180546001600160a81b03191691841691909117600160a01b17905580156103d4576000805461ff00191690555b505050565b600154600160a01b900460ff166104325760405162461bcd60e51b815260206004820152601a60248201527f546f6b656e5661756c743a204e6f7420696e6974696c697a656400000000000060448201526064016101e7565b6001546001600160a01b0316331461044957600080fd5b60005460405163a9059cbb60e01b81526001600160a01b03848116600483015260248201849052620100009092049091169063a9059cbb90604401602060405180830381600087803b15801561049e57600080fd5b505af11580156104b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104d691906105ad565b506001600160a01b0382166000908152600260205260409020546102be908261050d565b600061050682846105e5565b9392505050565b600061050682846105fd565b80356001600160a01b038116811461053057600080fd5b919050565b60006020828403121561054757600080fd5b61050682610519565b6000806040838503121561056357600080fd5b61056c83610519565b946020939093013593505050565b6000806040838503121561058d57600080fd5b61059683610519565b91506105a460208401610519565b90509250929050565b6000602082840312156105bf57600080fd5b8151801515811461050657600080fd5b634e487b7160e01b600052601160045260246000fd5b600082198211156105f8576105f86105cf565b500190565b60008282101561060f5761060f6105cf565b50039056fea26469706673582212206539bb9ef196850c812aea5710389efb414f01a9d3d7375775ee09011a60aeb164736f6c63430008080033fee62a9eec0be50eb061c711990ef0f1e17b40ea131d9347b0468acdaf8bf243a2646970667358221220a4bd8a1bb7126a1e85671bc4ef38deaf25c4959cad72ee2e2ffe6372a4aa29c864736f6c63430008080033'; + +const deployedDXDGuildBytecode = + '0x60806040526004361061027e5760003560e01c80636c8b72f61161014e578063ae619234116100bb578063c0a4d64d11610077578063c0a4d64d14610848578063c93e01e31461085d578063cac7d20514610872578063f2fde38b146108a6578063f4732da6146108c6578063f5447c0a146108db57005b8063ae6192341461076b578063b2c342d514610780578063b3b47061146107b0578063b7c15f8d146107d0578063b82bb285146107e5578063bcc3f3bd1461081257005b80638029eff11161010a5780638029eff11461069a57806389c98c06146106da5780638da5cb5b146106ef57806392b716541461070d578063a16fe3421461072d578063a5234bce1461074b57005b80636c8b72f6146105fb5780636e27d88914610610578063715018a61461063057806377027ff414610645578063785b3ed81461065a5780637fa0ff291461067a57005b80632457e393116101ec57806336f8f8d9116101a857806336f8f8d9146105125780633b72b3c7146105325780633f330ff814610566578063430694cf1461058657806354f2f7af146105bd5780636140b814146105db57005b80632457e393146104445780632467ef941461046457806329b412e3146104795780632d5b17de146104995780632d757c3e146104b9578063315a095d146104f257005b80631626ba7e1161023b5780631626ba7e1461038057806316bbecde146103a057806317d7de7c146103c05780631a5007dd146103e257806321df0da7146103f75780632229a0e21461042f57005b80623a40d014610287578063069dfc5b146102b2578063088af182146102e65780630a366a6314610308578063130485fe1461032b57806313108d741461036057005b3661028557005b005b34801561029357600080fd5b5061029c610924565b6040516102a99190613c19565b60405180910390f35b3480156102be57600080fd5b506102cd635555555560e11b81565b6040516001600160e01b031990911681526020016102a9565b3480156102f257600080fd5b506102cd610301366004613d12565b6020015190565b34801561031457600080fd5b5061031d61097c565b6040519081526020016102a9565b34801561033757600080fd5b5061034b610346366004613d6a565b6109a4565b604080519283526020830191909152016102a9565b34801561036c57600080fd5b5061031d61037b366004613f21565b6109d9565b34801561038c57600080fd5b506102cd61039b366004613ffa565b6109f4565b3480156103ac57600080fd5b506102856103bb366004614040565b610a3a565b3480156103cc57600080fd5b506103d5610a4b565b6040516102a991906140b9565b3480156103ee57600080fd5b50600a5461031d565b34801561040357600080fd5b506000546201000090046001600160a01b03165b6040516001600160a01b0390911681526020016102a9565b34801561043b57600080fd5b5060135461031d565b34801561045057600080fd5b5061028561045f3660046140cc565b610ad4565b34801561047057600080fd5b50600b5461031d565b34801561048557600080fd5b50610285610494366004614160565b610c1a565b3480156104a557600080fd5b506102856104b4366004614179565b610c9a565b3480156104c557600080fd5b5061031d6104d43660046141e3565b6001600160a01b03166000908152600f602052604090206001015490565b3480156104fe57600080fd5b5061028561050d366004614160565b610df7565b34801561051e57600080fd5b5061028561052d3660046141fe565b610fb2565b34801561053e57600080fd5b506102cd7fa9059cbb2ab09eb219583f4a59a5d0623ade346d962bcd4e46b11da047c9049b81565b34801561057257600080fd5b5061028561058136600461429a565b61103b565b34801561059257600080fd5b506105a66105a1366004614160565b611055565b6040516102a99b9a999897969594939291906143f0565b3480156105c957600080fd5b50600e546001600160a01b0316610417565b3480156105e757600080fd5b506102856105f63660046144aa565b6113d8565b34801561060757600080fd5b5060075461031d565b34801561061c57600080fd5b5061028561062b366004614160565b6114d9565b34801561063c57600080fd5b506102856115cf565b34801561065157600080fd5b5060095461031d565b34801561066657600080fd5b50610285610675366004614541565b611635565b34801561068657600080fd5b50610285610695366004614564565b6116b3565b3480156106a657600080fd5b506106ca6106b5366004614160565b60009081526010602052604090205460ff1690565b60405190151581526020016102a9565b3480156106e657600080fd5b5060085461031d565b3480156106fb57600080fd5b506047546001600160a01b0316610417565b34801561071957600080fd5b5061031d610728366004614628565b611763565b34801561073957600080fd5b506001546001600160a01b0316610417565b34801561075757600080fd5b5061028561076636600461474b565b6117ba565b34801561077757600080fd5b5061031d611d7b565b34801561078c57600080fd5b506106ca61079b366004614160565b60009081526011602052604090205460ff1690565b3480156107bc57600080fd5b506102856107cb366004614160565b611d92565b3480156107dc57600080fd5b5060045461031d565b3480156107f157600080fd5b5061080561080036600461480f565b611d9e565b6040516102a99190614843565b34801561081e57600080fd5b5061031d61082d3660046141e3565b6001600160a01b03166000908152600f602052604090205490565b34801561085457600080fd5b50600c5461031d565b34801561086957600080fd5b5060035461031d565b34801561087e57600080fd5b506102cd7f095ea7b334ae44009aa867bfb386f5c3b4b443ac6f0ee573fa91c4608fbadfba81565b3480156108b257600080fd5b506102856108c13660046141e3565b611e61565b3480156108d257600080fd5b50600d5461031d565b3480156108e757600080fd5b506109056108f6366004613d12565b60248101516044909101519091565b604080516001600160a01b0390931683526020830191909152016102a9565b6060601380548060200260200160405190810160405280929190818152602001828054801561097257602002820191906000526020600020905b81548152602001906001019080831161095e575b5050505050905090565b600061099f612710610999600654610993600d5490565b90611f29565b90611f35565b905090565b60008281526012602090815260408083206001600160a01b0385168452600a01909152902080546001909101545b9250929050565b60006109e9878787878787611f41565b979650505050505050565b600080610a0461082d85856123cc565b118015610a1f575060008381526011602052604090205460ff165b610a2a576000610a33565b630b135d3f60e11b5b9392505050565b610a46338484846123f0565b505050565b606060028054610a5a90614856565b80601f0160208091040260200160405190810160405280929190818152602001828054610a8690614856565b80156109725780601f10610aa857610100808354040283529160200191610972565b820191906000526020600020905b815481529060010190602001808311610ab657509395945050505050565b600054610100900460ff1680610aed575060005460ff16155b610b125760405162461bcd60e51b8152600401610b0990614891565b60405180910390fd5b600054610100900460ff16158015610b34576000805461ffff19166101011790555b610b3c612759565b610b6f8c8c8c8c8c6040518060400160405280600881526020016711161111dd5a5b1960c21b8152508d8d8d8d8d610fb2565b60018054604051639b2dccdd60e01b81526001600160a01b0390911691639b2dccdd91610bc89160009187917f359afa49e07a90b2e02bddde33bfd011f2b5f03f7222fd6fa45906ec488a880d918491906004016148df565b600060405180830381600087803b158015610be257600080fd5b505af1158015610bf6573d6000803e3d6000fd5b505050508015610c0c576000805461ff00191690555b505050505050505050505050565b333014610c395760405162461bcd60e51b8152600401610b099061491a565b6001546040516329b412e360e01b8152600481018390526001600160a01b03909116906329b412e390602401600060405180830381600087803b158015610c7f57600080fd5b505af1158015610c93573d6000803e3d6000fd5b5050505050565b6000610ca883878787611763565b60008181526010602052604090205490915060ff1615610d0a5760405162461bcd60e51b815260206004820152601960248201527f45524332304775696c643a20416c726561647920766f746564000000000000006044820152606401610b09565b610d6b82610d65836040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b906123cc565b6001600160a01b0316836001600160a01b031614610dcb5760405162461bcd60e51b815260206004820152601860248201527f45524332304775696c643a2057726f6e67207369676e657200000000000000006044820152606401610b09565b610dd7838787876123f0565b6000908152601060205260409020805460ff191660011790555050505050565b336000908152600f6020526040902054811115610e755760405162461bcd60e51b815260206004820152603660248201527f45524332304775696c643a20556e61626c6520746f207769746864726177206d6044820152751bdc99481d1bdad95b9cc81d1a185b881b1bd8dad95960521b6064820152608401610b09565b336000908152600f60205260409020600101544211610ed65760405162461bcd60e51b815260206004820152601f60248201527f45524332304775696c643a20546f6b656e73207374696c6c206c6f636b6564006044820152606401610b09565b336000908152600f6020526040902054610ef090826127d4565b336000908152600f6020526040902055600d54610f0d90826127d4565b600d55600e5460405163f3fef3a360e01b8152336004820152602481018390526001600160a01b039091169063f3fef3a390604401600060405180830381600087803b158015610f5c57600080fd5b505af1158015610f70573d6000803e3d6000fd5b505060408051338152602081018590527f6352c5382c4a4578e712449ca65e83cdb392d045dfcf1cad9615189db2da244b93500190505b60405180910390a150565b600054610100900460ff1680610fcb575060005460ff16155b610fe75760405162461bcd60e51b8152600401610b0990614891565b600054610100900460ff16158015611009576000805461ffff19166101011790555b61101c8c8c8c8c8c8c8c8c8c8c8c6127e0565b8015610c0c576000805461ff0019169055505050505050505050505050565b61104b8888888888888888612bf1565b5050505050505050565b600081815260126020526040812080546001808301546002840154600985015486958695606095869586958995879586958895879592946001600160a01b03909216936003860191600487019160058801916110b191906127d4565b600888015484546040805160208084028201810190925282815260068c019360078d019360ff9091169260098e0192918a9183018282801561111c57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116110fe575b5050505050975086805480602002602001604051908101604052809291908181526020016000905b828210156111f057838290600052602060002001805461116390614856565b80601f016020809104026020016040519081016040528092919081815260200182805461118f90614856565b80156111dc5780601f106111b1576101008083540402835291602001916111dc565b820191906000526020600020905b8154815290600101906020018083116111bf57829003601f168201915b505050505081526020019060010190611144565b5050505096508580548060200260200160405190810160405280929190818152602001828054801561124157602002820191906000526020600020905b81548152602001906001019080831161122d575b5050505050955083805461125490614856565b80601f016020809104026020016040519081016040528092919081815260200182805461128090614856565b80156112cd5780601f106112a2576101008083540402835291602001916112cd565b820191906000526020600020905b8154815290600101906020018083116112b057829003601f168201915b505050505093508280546112e090614856565b80601f016020809104026020016040519081016040528092919081815260200182805461130c90614856565b80156113595780601f1061132e57610100808354040283529160200191611359565b820191906000526020600020905b81548152906001019060200180831161133c57829003601f168201915b50505050509250808054806020026020016040519081016040528092919081815260200182805480156113ab57602002820191906000526020600020905b815481526020019060010190808311611397575b505050505090509b509b509b509b509b509b509b509b509b509b509b505091939597999b90929496989a50565b805183511480156113ea575081518351145b61145e576040805162461bcd60e51b81526020600482015260248101919091527f45524332304775696c643a2057726f6e67206c656e677468206f662070726f7060448201527f6f73616c4964732c20616374696f6e73206f7220766f74696e67506f776572736064820152608401610b09565b60005b83518110156114d3576114c13385838151811061148057611480614968565b602002602001015185848151811061149a5761149a614968565b60200260200101518585815181106114b4576114b4614968565b60200260200101516123f0565b806114cb81614994565b915050611461565b50505050565b600e546040516311f9fbc960e21b8152336004820152602481018390526001600160a01b03909116906347e7ef2490604401600060405180830381600087803b15801561152557600080fd5b505af1158015611539573d6000803e3d6000fd5b5050336000908152600f60205260409020546115589250905082612cec565b336000908152600f6020526040902055600c54611576904290612cec565b336000908152600f6020526040902060010155600d546115969082612cec565b600d5560408051338152602081018390527fac87f20a77d28ee8bbb58ec87ea8fa968b3393efae1a368fd50b767c2847391c9101610fa7565b6047546001600160a01b031633146116295760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b09565b6116336000612cf8565b565b3330146116935760405162461bcd60e51b815260206004820152602660248201527f45524332304775696c643a204f6e6c792063616c6c61626c65206279207468656044820152650819dd5a5b1960d21b6064820152608401610b09565b600091825260116020526040909120805460ff1916911515919091179055565b60005b855181101561175b576117498682815181106116d4576116d4614968565b60200260200101518683815181106116ee576116ee614968565b602002602001015186848151811061170857611708614968565b602002602001015186858151811061172257611722614968565b602002602001015186868151811061173c5761173c614968565b6020026020010151610c9a565b8061175381614994565b9150506116b6565b505050505050565b6040516bffffffffffffffffffffffff19606086901b166020820152603481018490526054810183905260748101829052600090609401604051602081830303815290604052805190602001209050949350505050565b3330146117d95760405162461bcd60e51b8152600401610b099061491a565b825184511480156117eb575081518451145b80156117f8575080518451145b8015611805575084518451145b61188c5760405162461bcd60e51b815260206004820152604c60248201527f45524332304775696c643a2057726f6e67206c656e677468206f66206173736560448201527f742c20746f2c2066756e6374696f6e5369676e6174757265206f7220616c6c6f60648201526b77616e63652061727261797360a01b608482015260a401610b09565b60005b8451811015611a1e5783516000908590839081106118af576118af614968565b60200260200101516001600160e01b03191614156119205760405162461bcd60e51b815260206004820152602860248201527f45524332304775696c643a20456d707479207369676e617475726573206e6f7460448201526708185b1b1bddd95960c21b6064820152608401610b09565b60015486516001600160a01b0390911690639b2dccdd9088908490811061194957611949614968565b602002602001015187848151811061196357611963614968565b602002602001015187858151811061197d5761197d614968565b602002602001015187868151811061199757611997614968565b60200260200101518787815181106119b1576119b1614968565b60200260200101516040518663ffffffff1660e01b81526004016119d99594939291906148df565b600060405180830381600087803b1580156119f357600080fd5b505af1158015611a07573d6000803e3d6000fd5b505050508080611a1690614994565b91505061188f565b5060015460405163fd9233a960e01b81526000916001600160a01b03169063fd9233a990611a76908490309081907f3f330ff86dd1b379b10f18bab5301bb628f28784f70482a01774042ed08621d5906004016149af565b60206040518083038186803b158015611a8e57600080fd5b505afa158015611aa2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ac691906149e2565b11611b395760405162461bcd60e51b815260206004820152603b60248201527f45524332304775696c643a20736574436f6e6669672066756e6374696f6e206160448201527f6c6c6f77616e63652063616e74206265207475726e6564206f666600000000006064820152608401610b09565b60015460405163fd9233a960e01b81526000916001600160a01b03169063fd9233a990611b90908490309081907fa5234bce363054cb38e3dfeca861627611d626c5c363ab716da0106f1600399c906004016149af565b60206040518083038186803b158015611ba857600080fd5b505afa158015611bbc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611be091906149e2565b11611c535760405162461bcd60e51b815260206004820152603f60248201527f45524332304775696c643a207365745065726d697373696f6e2066756e63746960448201527f6f6e20616c6c6f77616e63652063616e74206265207475726e6564206f6666006064820152608401610b09565b60015460405163fd9233a960e01b81526000916001600160a01b03169063fd9233a990611caa908490309081907f29b412e31bd60c46f11150420851edff43d71c82bd81c13331d702842993c937906004016149af565b60206040518083038186803b158015611cc257600080fd5b505afa158015611cd6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cfa91906149e2565b11610c935760405162461bcd60e51b8152602060048201526044602482018190527f45524332304775696c643a207365745065726d697373696f6e44656c61792066908201527f756e6374696f6e20616c6c6f77616e63652063616e74206265207475726e65646064820152631037b33360e11b608482015260a401610b09565b600061099f612710610999600554610993600d5490565b611d9b81612d4a565b50565b6060600082516001600160401b03811115611dbb57611dbb613c5d565b604051908082528060200260200182016040528015611de4578160200160208202803683370190505b50905060005b8351811015611e5a57611e2b848281518110611e0857611e08614968565b60200260200101516001600160a01b03166000908152600f602052604090205490565b828281518110611e3d57611e3d614968565b602090810291909101015280611e5281614994565b915050611dea565b5092915050565b6047546001600160a01b03163314611ebb5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b09565b6001600160a01b038116611f205760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b09565b611d9b81612cf8565b6000610a3382846149fb565b6000610a338284614a1a565b6000611f4c60095490565b600b5410611fbb5760405162461bcd60e51b815260206004820152603660248201527f45524332304775696c643a204d6178696d756d20616d6f756e74206f662061636044820152751d1a5d99481c1c9bdc1bdcd85b1cc81c995858da195960521b6064820152608401610b09565b611fc361097c565b336000908152600f602052604090205410156120395760405162461bcd60e51b815260206004820152602f60248201527f45524332304775696c643a204e6f7420656e6f75676820766f74657320746f2060448201526e18dc99585d19481c1c9bdc1bdcd85b608a1b6064820152608401610b09565b8551875114801561204b575084518751145b6120b45760405162461bcd60e51b815260206004820152603460248201527f45524332304775696c643a2057726f6e67206c656e677468206f6620746f2c2060448201527364617461206f722076616c75652061727261797360601b6064820152608401610b09565b600087511161211f5760405162461bcd60e51b815260206004820152603160248201527f45524332304775696c643a20746f2c20646174612076616c7565206172726179604482015270732063616e6e6f7420626520656d70747960781b6064820152608401610b09565b60005b87518110156121da5760015488516001600160a01b039091169089908390811061214e5761214e614968565b60200260200101516001600160a01b031614156121c85760405162461bcd60e51b815260206004820152603260248201527f45524332304775696c643a2043616e742063616c6c207065726d697373696f6e604482015271207265676973747279206469726563746c7960701b6064820152608401610b09565b806121d281614994565b915050612122565b50600a546040516bffffffffffffffffffffffff193360601b166020820152426034820152605481019190915260009060740160405160208183030381529060405280519060200120905061223b6001600a54612cec90919063ffffffff16565b600a55600081815260126020526040902080546001600160a01b0319163317815542600182018190556003546122719190612cec565b6002820155885161228b90600383019060208c0190613a34565b5087516122a190600483019060208b0190613a99565b5086516122b790600583019060208a0190613af2565b5084516122cd9060068301906020880190613b2d565b5083516122e39060078301906020870190613b2d565b506122ef866001612cec565b6001600160401b0381111561230657612306613c5d565b60405190808252806020026020018201604052801561232f578160200160208202803683370190505b508051612346916009840191602090910190613af2565b5060088101805460ff19166001908117909155600b5461236591612cec565b600b558160008051602061532c833981519152600160405190815260200160405180910390a250601380546001810182556000919091527f66de8ffda797e3de9c05e8fc57b3bf0ec28a930d40b0d285d93c06501cf6a09001819055979650505050505050565b60008060006123db8585613610565b915091506123e88161367d565b509392505050565b60008381526012602052604090206002015442106124625760405162461bcd60e51b815260206004820152602960248201527f45524332304775696c643a2050726f706f73616c20656e6465642c2063616e74604482015268081899481d9bdd195960ba1b6064820152608401610b09565b80612482856001600160a01b03166000908152600f602052604090205490565b101580156124b7575060008381526012602090815260408083206001600160a01b0388168452600a0190915290206001015481115b6125125760405162461bcd60e51b815260206004820152602660248201527f45524332304775696c643a20496e76616c696420766f74696e67506f77657220604482015265185b5bdd5b9d60d21b6064820152608401610b09565b60008381526012602090815260408083206001600160a01b0388168452600a019091529020541580612568575060008381526012602090815260408083206001600160a01b0388168452600a0190915290205482145b6125da5760405162461bcd60e51b815260206004820152603f60248201527f45524332304775696c643a2043616e74206368616e676520616374696f6e207660448201527f6f7465642c206f6e6c7920696e63726561736520766f74696e67506f776572006064820152608401610b09565b60008381526012602081815260408084206001600160a01b0389168552600a8101835290842060010154938790529190526009018054612649928492612643928790811061262a5761262a614968565b90600052602060002001546127d490919063ffffffff16565b90612cec565b600084815260126020526040902060090180548490811061266c5761266c614968565b6000918252602080832091909101929092558481526012825260408082206001600160a01b038816808452600a9091018452918190208581556001018490558051918252918101839052839185917f583c62f152711bcb1ca6186c1065821ff17a7cbe226dcb559a1c889dcf0d769b910160405180910390a3600754156114d35760006127106127076008543a61383890919063ffffffff16565b60075490611f29565b9050804710610c935760405133908290600081818185875af1925050503d806000811461104b576040519150601f19603f3d011682016040523d82523d6000602084013e61104b565b600054610100900460ff1680612772575060005460ff16155b61278e5760405162461bcd60e51b8152600401610b0990614891565b600054610100900460ff161580156127b0576000805461ffff19166101011790555b6127b861384e565b6127c06138b8565b8015611d9b576000805461ff001916905550565b6000610a338284614a3c565b6001600160a01b038b166128455760405162461bcd60e51b815260206004820152602660248201527f45524332304775696c643a20746f6b656e2063616e74206265207a65726f206160448201526564647265737360d01b6064820152608401610b09565b60008a116128655760405162461bcd60e51b8152600401610b0990614a53565b898210156128855760405162461bcd60e51b8152600401610b0990614aa1565b600088116128a55760405162461bcd60e51b8152600401610b0990614afe565b85516128b8906002906020890190613b2d565b506000805462010000600160b01b031916620100006001600160a01b038e16021790556040516128e790613ba0565b604051809103906000f080158015612903573d6000803e3d6000fd5b50600e80546001600160a01b0319166001600160a01b0392831690811790915560005460405163485cc95560e01b81526201000090910490921660048301523060248301529063485cc95590604401600060405180830381600087803b15801561296c57600080fd5b505af1158015612980573d6000803e3d6000fd5b50505060038b905550600489815560058990556006889055600786905560088590556009849055600c839055600180546001600160a01b0319166001600160a01b0384169081178255604051639b2dccdd60e01b81529092639b2dccdd92612a119260009230927f3f330ff86dd1b379b10f18bab5301bb628f28784f70482a01774042ed08621d5928592016148df565b600060405180830381600087803b158015612a2b57600080fd5b505af1158015612a3f573d6000803e3d6000fd5b505060018054604051639b2dccdd60e01b81526001600160a01b039091169350639b2dccdd9250612a9c9160009130917fa5234bce363054cb38e3dfeca861627611d626c5c363ab716da0106f1600399c918491906004016148df565b600060405180830381600087803b158015612ab657600080fd5b505af1158015612aca573d6000803e3d6000fd5b505060018054604051639b2dccdd60e01b81526001600160a01b039091169350639b2dccdd9250612b279160009130917f29b412e31bd60c46f11150420851edff43d71c82bd81c13331d702842993c937918491906004016148df565b600060405180830381600087803b158015612b4157600080fd5b505af1158015612b55573d6000803e3d6000fd5b505060018054604051639b2dccdd60e01b81526001600160a01b039091169350639b2dccdd9250612bb29160009130917f785b3ed8f1babbb20b6a85d572b5e50637a4c77796e0e444290d8b90490101d6918491906004016148df565b600060405180830381600087803b158015612bcc57600080fd5b505af1158015612be0573d6000803e3d6000fd5b505050505050505050505050505050565b333014612c665760405162461bcd60e51b815260206004820152603f60248201527f45524332304775696c643a204f6e6c792063616c6c61626c652062792045524360448201527f32306775696c6420697473656c66207768656e20696e697469616c697a6564006064820152608401610b09565b60008811612c865760405162461bcd60e51b8152600401610b0990614a53565b87811015612ca65760405162461bcd60e51b8152600401610b0990614aa1565b60008611612cc65760405162461bcd60e51b8152600401610b0990614afe565b600397909755600495909555600593909355600691909155600755600855600955600c55565b6000610a338284614b5b565b604780546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60145460ff1615612da95760405162461bcd60e51b8152602060048201526024808201527f45524332304775696c643a2050726f706f73616c20756e6465722065786563756044820152633a34b7b760e11b6064820152608401610b09565b600160008281526012602052604090206008015460ff166004811115612dd157612dd16143b8565b14612e2c5760405162461bcd60e51b815260206004820152602560248201527f45524332304775696c643a2050726f706f73616c20616c72656164792065786560448201526418dd5d195960da1b6064820152608401610b09565b6000818152601260205260409020600201544211612e9a5760405162461bcd60e51b815260206004820152602560248201527f45524332304775696c643a2050726f706f73616c206861736e277420656e646560448201526419081e595d60da1b6064820152608401610b09565b600060015b600083815260126020526040902060090154811015612f7457612ec0611d7b565b6000848152601260205260409020600901805483908110612ee357612ee3614968565b906000526020600020015410158015612f5957506000838152601260205260409020600901805483908110612f1a57612f1a614968565b9060005260206000200154601260008581526020019081526020016000206009018281548110612f4c57612f4c614968565b9060005260206000200154115b15612f62578091505b80612f6c81614994565b915050612e9f565b81612fc1576000838152601260205260409020600801805460ff19166002908117909155839060008051602061532c833981519152905b60405190815260200160405180910390a26135fa565b6004546000848152601260205260409020600201544291612fe29190612cec565b101561301e576000838152601260205260409020600801805460ff19166004908117909155839060008051602061532c83398151915290612fab565b600083815260126020526040812060088101805460ff19166003179055600901546130669061304e9060016127d4565b60008681526012602052604090206003015490611f35565b905061307d6130768460016127d4565b8290611f29565b9150600061308b8383612cec565b90505b808310156135d45760008581526012602052604081206003018054859081106130b9576130b9614968565b6000918252602090912001546001600160a01b031614801590613113575060008581526012602052604081206004018054859081106130fa576130fa614968565b90600052602060002001805461310f90614856565b9050115b156135c257600085815260126020526040812060040180546131da91908690811061314057613140614968565b90600052602060002001805461315590614856565b80601f016020809104026020016040519081016040528092919081815260200182805461318190614856565b80156131ce5780601f106131a3576101008083540402835291602001916131ce565b820191906000526020600020905b8154815290600101906020018083116131b157829003601f168201915b50505050506020015190565b905060008060126000898152602001908152602001600020600301868154811061320657613206614968565b60009182526020808320909101548a835260129091526040822060050180546001600160a01b039092169350908890811061324357613243614968565b600091825260209091200154905063a9059cbb60e01b6001600160e01b031985161480613280575063095ea7b360e01b6001600160e01b03198516145b1561339b5760008981526012602052604090206003018054889081106132a8576132a8614968565b60009182526020808320909101548b8352601290915260409091206004018054635555555560e11b96506001600160a01b03909216945061339591899081106132f3576132f3614968565b90600052602060002001805461330890614856565b80601f016020809104026020016040519081016040528092919081815260200182805461333490614856565b80156133815780601f1061335657610100808354040283529160200191613381565b820191906000526020600020905b81548152906001019060200180831161336457829003601f168201915b505050505060248101516044909101519091565b90925090505b6001546040516306f09e0b60e01b81526001600160a01b03858116600483015230602483015284811660448301526001600160e01b03198716606483015260848201849052909116906306f09e0b9060a401600060405180830381600087803b15801561340757600080fd5b505af1925050508015613418575060015b61346a57613424614b73565b806308c379a0141561345e5750613439614b8f565b806134445750613460565b8060405162461bcd60e51b8152600401610b0991906140b9565b505b3d6000803e3d6000fd5b6014805460ff19166001179055600089815260126020526040812060030180548990811061349a5761349a614968565b60009182526020808320909101548c83526012909152604090912060050180546001600160a01b03909216918a9081106134d6576134d6614968565b9060005260206000200154601260008d81526020019081526020016000206004018a8154811061350857613508614968565b9060005260206000200160405161351f9190614c18565b60006040518083038185875af1925050503d806000811461355c576040519150601f19603f3d011682016040523d82523d6000602084013e613561565b606091505b50509050806135b25760405162461bcd60e51b815260206004820181905260248201527f45524332304775696c643a2050726f706f73616c2063616c6c206661696c65646044820152606401610b09565b50506014805460ff191690555050505b826135cc81614994565b93505061308e565b8460008051602061532c833981519152600360405190815260200160405180910390a250505b600b546136089060016127d4565b600b55505050565b6000808251604114156136475760208301516040840151606085015160001a61363b87828585613918565b945094505050506109d2565b8251604014156136715760208301516040840151613666868383613a05565b9350935050506109d2565b506000905060026109d2565b6000816004811115613691576136916143b8565b141561369a5750565b60018160048111156136ae576136ae6143b8565b14156136fc5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610b09565b6002816004811115613710576137106143b8565b141561375e5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610b09565b6003816004811115613772576137726143b8565b14156137cb5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610b09565b60048160048111156137df576137df6143b8565b1415611d9b5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b6064820152608401610b09565b60008183106138475781610a33565b5090919050565b600054610100900460ff1680613867575060005460ff16155b6138835760405162461bcd60e51b8152600401610b0990614891565b600054610100900460ff161580156127c0576000805461ffff19166101011790558015611d9b576000805461ff001916905550565b600054610100900460ff16806138d1575060005460ff16155b6138ed5760405162461bcd60e51b8152600401610b0990614891565b600054610100900460ff1615801561390f576000805461ffff19166101011790555b6127c033612cf8565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561394f57506000905060036139fc565b8460ff16601b1415801561396757508460ff16601c14155b1561397857506000905060046139fc565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156139cc573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166139f5576000600192509250506139fc565b9150600090505b94509492505050565b6000806001600160ff1b03831660ff84901c601b01613a2687828885613918565b935093505050935093915050565b828054828255906000526020600020908101928215613a89579160200282015b82811115613a8957825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190613a54565b50613a95929150613bad565b5090565b828054828255906000526020600020908101928215613ae6579160200282015b82811115613ae65782518051613ad6918491602090910190613b2d565b5091602001919060010190613ab9565b50613a95929150613bc2565b828054828255906000526020600020908101928215613a89579160200282015b82811115613a89578251825591602001919060010190613b12565b828054613b3990614856565b90600052602060002090601f016020900481019282613b5b5760008555613a89565b82601f10613b7457805160ff1916838001178555613a89565b82800160010185558215613a895791820182811115613a89578251825591602001919060010190613b12565b61067780614cb583390190565b5b80821115613a955760008155600101613bae565b80821115613a95576000613bd68282613bdf565b50600101613bc2565b508054613beb90614856565b6000825580601f10613bfb575050565b601f016020900490600052602060002090810190611d9b9190613bad565b6020808252825182820181905260009190848201906040850190845b81811015613c5157835183529284019291840191600101613c35565b50909695505050505050565b634e487b7160e01b600052604160045260246000fd5b601f8201601f191681016001600160401b0381118282101715613c9857613c98613c5d565b6040525050565b600082601f830112613cb057600080fd5b81356001600160401b03811115613cc957613cc9613c5d565b604051613ce0601f8301601f191660200182613c73565b818152846020838601011115613cf557600080fd5b816020850160208301376000918101602001919091529392505050565b600060208284031215613d2457600080fd5b81356001600160401b03811115613d3a57600080fd5b613d4684828501613c9f565b949350505050565b80356001600160a01b0381168114613d6557600080fd5b919050565b60008060408385031215613d7d57600080fd5b82359150613d8d60208401613d4e565b90509250929050565b60006001600160401b03821115613daf57613daf613c5d565b5060051b60200190565b600082601f830112613dca57600080fd5b81356020613dd782613d96565b604051613de48282613c73565b83815260059390931b8501820192828101915086841115613e0457600080fd5b8286015b84811015613e2657613e1981613d4e565b8352918301918301613e08565b509695505050505050565b600082601f830112613e4257600080fd5b81356020613e4f82613d96565b604051613e5c8282613c73565b83815260059390931b8501820192828101915086841115613e7c57600080fd5b8286015b84811015613e265780356001600160401b03811115613e9f5760008081fd5b613ead8986838b0101613c9f565b845250918301918301613e80565b600082601f830112613ecc57600080fd5b81356020613ed982613d96565b604051613ee68282613c73565b83815260059390931b8501820192828101915086841115613f0657600080fd5b8286015b84811015613e265780358352918301918301613f0a565b60008060008060008060c08789031215613f3a57600080fd5b86356001600160401b0380821115613f5157600080fd5b613f5d8a838b01613db9565b97506020890135915080821115613f7357600080fd5b613f7f8a838b01613e31565b96506040890135915080821115613f9557600080fd5b613fa18a838b01613ebb565b9550606089013594506080890135915080821115613fbe57600080fd5b613fca8a838b01613c9f565b935060a0890135915080821115613fe057600080fd5b50613fed89828a01613c9f565b9150509295509295509295565b6000806040838503121561400d57600080fd5b8235915060208301356001600160401b0381111561402a57600080fd5b61403685828601613c9f565b9150509250929050565b60008060006060848603121561405557600080fd5b505081359360208301359350604090920135919050565b6000815180845260005b8181101561409257602081850181015186830182015201614076565b818111156140a4576000602083870101525b50601f01601f19169290920160200192915050565b602081526000610a33602083018461406c565b60008060008060008060008060008060006101608c8e0312156140ee57600080fd5b6140f78c613d4e565b9a5060208c0135995060408c0135985060608c0135975060808c0135965060a08c0135955060c08c0135945060e08c013593506101008c0135925061413f6101208d01613d4e565b915061414e6101408d01613d4e565b90509295989b509295989b9093969950565b60006020828403121561417257600080fd5b5035919050565b600080600080600060a0868803121561419157600080fd5b8535945060208601359350604086013592506141af60608701613d4e565b915060808601356001600160401b038111156141ca57600080fd5b6141d688828901613c9f565b9150509295509295909350565b6000602082840312156141f557600080fd5b610a3382613d4e565b60008060008060008060008060008060006101608c8e03121561422057600080fd5b6142298c613d4e565b9a5060208c0135995060408c0135985060608c0135975060808c0135965060a08c01356001600160401b0381111561426057600080fd5b61426c8e828f01613c9f565b96505060c08c0135945060e08c013593506101008c013592506101208c0135915061414e6101408d01613d4e565b600080600080600080600080610100898b0312156142b757600080fd5b505086359860208801359850604088013597606081013597506080810135965060a0810135955060c0810135945060e0013592509050565b600081518084526020808501945080840160005b838110156143285781516001600160a01b031687529582019590820190600101614303565b509495945050505050565b600081518084526020808501808196508360051b8101915082860160005b8581101561437b57828403895261436984835161406c565b98850198935090840190600101614351565b5091979650505050505050565b600081518084526020808501945080840160005b838110156143285781518752958201959082019060010161439c565b634e487b7160e01b600052602160045260246000fd5b600581106143ec57634e487b7160e01b600052602160045260246000fd5b9052565b600061016060018060a01b038e1683528c60208401528b604084015280606084015261441e8184018c6142ef565b90508281036080840152614432818b614333565b905082810360a0840152614446818a614388565b90508760c084015282810360e0840152614460818861406c565b9050828103610100840152614475818761406c565b90506144856101208401866143ce565b8281036101408401526144988185614388565b9e9d5050505050505050505050505050565b6000806000606084860312156144bf57600080fd5b83356001600160401b03808211156144d657600080fd5b6144e287838801613ebb565b945060208601359150808211156144f857600080fd5b61450487838801613ebb565b9350604086013591508082111561451a57600080fd5b5061452786828701613ebb565b9150509250925092565b80358015158114613d6557600080fd5b6000806040838503121561455457600080fd5b82359150613d8d60208401614531565b600080600080600060a0868803121561457c57600080fd5b85356001600160401b038082111561459357600080fd5b61459f89838a01613ebb565b965060208801359150808211156145b557600080fd5b6145c189838a01613ebb565b955060408801359150808211156145d757600080fd5b6145e389838a01613ebb565b945060608801359150808211156145f957600080fd5b61460589838a01613db9565b9350608088013591508082111561461b57600080fd5b506141d688828901613e31565b6000806000806080858703121561463e57600080fd5b61464785613d4e565b966020860135965060408601359560600135945092505050565b600082601f83011261467257600080fd5b8135602061467f82613d96565b60405161468c8282613c73565b83815260059390931b85018201928281019150868411156146ac57600080fd5b8286015b84811015613e265780356001600160e01b0319811681146146d15760008081fd5b83529183019183016146b0565b600082601f8301126146ef57600080fd5b813560206146fc82613d96565b6040516147098282613c73565b83815260059390931b850182019282810191508684111561472957600080fd5b8286015b84811015613e265761473e81614531565b835291830191830161472d565b600080600080600060a0868803121561476357600080fd5b85356001600160401b038082111561477a57600080fd5b61478689838a01613db9565b9650602088013591508082111561479c57600080fd5b6147a889838a01613db9565b955060408801359150808211156147be57600080fd5b6147ca89838a01614661565b945060608801359150808211156147e057600080fd5b6147ec89838a01613ebb565b9350608088013591508082111561480257600080fd5b506141d6888289016146de565b60006020828403121561482157600080fd5b81356001600160401b0381111561483757600080fd5b613d4684828501613db9565b602081526000610a336020830184614388565b600181811c9082168061486a57607f821691505b6020821081141561488b57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b6001600160a01b0395861681529390941660208401526001600160e01b03199190911660408301526060820152901515608082015260a00190565b6020808252602e908201527f45524332304775696c643a204f6e6c792063616c6c61626c652062792045524360408201526d191833bab4b6321034ba39b2b63360911b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006000198214156149a8576149a861497e565b5060010190565b6001600160a01b0394851681529284166020840152921660408201526001600160e01b0319909116606082015260800190565b6000602082840312156149f457600080fd5b5051919050565b6000816000190483118215151615614a1557614a1561497e565b500290565b600082614a3757634e487b7160e01b600052601260045260246000fd5b500490565b600082821015614a4e57614a4e61497e565b500390565b6020808252602e908201527f45524332304775696c643a2070726f706f73616c2074696d652068617320746f60408201526d0206265206d6f72652074686120360941b606082015260800190565b6020808252603e908201527f45524332304775696c643a206c6f636b54696d652068617320746f206265206860408201527f6967686572206f7220657175616c20746f2070726f706f73616c54696d650000606082015260800190565b6020808252603c908201527f45524332304775696c643a20766f74696e6720706f77657220666f722065786560408201527f637574696f6e2068617320746f206265206d6f7265207468616e203000000000606082015260800190565b60008219821115614b6e57614b6e61497e565b500190565b600060033d1115614b8c5760046000803e5060005160e01c5b90565b600060443d1015614b9d5790565b6040516003193d81016004833e81513d6001600160401b038160248401118184111715614bcc57505050505090565b8285019150815181811115614be45750505050505090565b843d8701016020828501011115614bfe5750505050505090565b614c0d60208286010187613c73565b509095945050505050565b600080835481600182811c915080831680614c3457607f831692505b6020808410821415614c5457634e487b7160e01b86526022600452602486fd5b818015614c685760018114614c7957614ca6565b60ff19861689528489019650614ca6565b60008a81526020902060005b86811015614c9e5781548b820152908501908301614c85565b505084890196505b50949897505050505050505056fe60806040526001805460ff60a01b1916905534801561001d57600080fd5b5061064a8061002d6000396000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c8063485cc95511610066578063485cc9551461012f5780636e9960c314610142578063f3fef3a314610153578063f851a44014610166578063fc0c546a1461017957600080fd5b8063158ef93e1461009857806321df0da7146100c157806327e235e3146100ec57806347e7ef241461011a575b600080fd5b6001546100ac90600160a01b900460ff1681565b60405190151581526020015b60405180910390f35b6000546201000090046001600160a01b03165b6040516001600160a01b0390911681526020016100b8565b61010c6100fa366004610535565b60026020526000908152604090205481565b6040519081526020016100b8565b61012d610128366004610550565b610192565b005b61012d61013d36600461057a565b6102de565b6001546001600160a01b03166100d4565b61012d610161366004610550565b6103d9565b6001546100d4906001600160a01b031681565b6000546100d4906201000090046001600160a01b031681565b600154600160a01b900460ff166101f05760405162461bcd60e51b815260206004820152601a60248201527f546f6b656e5661756c743a204e6f7420696e6974696c697a656400000000000060448201526064015b60405180910390fd5b6001546001600160a01b0316331461020757600080fd5b6000546040516323b872dd60e01b81526001600160a01b0384811660048301523060248301526044820184905262010000909204909116906323b872dd90606401602060405180830381600087803b15801561026257600080fd5b505af1158015610276573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061029a91906105ad565b506001600160a01b0382166000908152600260205260409020546102be90826104fa565b6001600160a01b0390921660009081526002602052604090209190915550565b600054610100900460ff16806102f7575060005460ff16155b61035a5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016101e7565b600054610100900460ff1615801561037c576000805461ffff19166101011790555b600080546001600160a01b03808616620100000262010000600160b01b031990921691909117909155600180546001600160a81b03191691841691909117600160a01b17905580156103d4576000805461ff00191690555b505050565b600154600160a01b900460ff166104325760405162461bcd60e51b815260206004820152601a60248201527f546f6b656e5661756c743a204e6f7420696e6974696c697a656400000000000060448201526064016101e7565b6001546001600160a01b0316331461044957600080fd5b60005460405163a9059cbb60e01b81526001600160a01b03848116600483015260248201849052620100009092049091169063a9059cbb90604401602060405180830381600087803b15801561049e57600080fd5b505af11580156104b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104d691906105ad565b506001600160a01b0382166000908152600260205260409020546102be908261050d565b600061050682846105e5565b9392505050565b600061050682846105fd565b80356001600160a01b038116811461053057600080fd5b919050565b60006020828403121561054757600080fd5b61050682610519565b6000806040838503121561056357600080fd5b61056c83610519565b946020939093013593505050565b6000806040838503121561058d57600080fd5b61059683610519565b91506105a460208401610519565b90509250929050565b6000602082840312156105bf57600080fd5b8151801515811461050657600080fd5b634e487b7160e01b600052601160045260246000fd5b600082198211156105f8576105f86105cf565b500190565b60008282101561060f5761060f6105cf565b50039056fea26469706673582212206539bb9ef196850c812aea5710389efb414f01a9d3d7375775ee09011a60aeb164736f6c63430008080033fee62a9eec0be50eb061c711990ef0f1e17b40ea131d9347b0468acdaf8bf243a264697066735822122059fef800f77851fa77919cf4c7022ee00715401253d4136b0f751461746edbec64736f6c63430008080033'; + +const deployedBytecodes = { + [GuildImplementationType.SnapshotRepERC20Guild]: + deployedSnapshotRepErc20GuildBytecode, + [GuildImplementationType.DXDGuild]: deployedDXDGuildBytecode, +}; From 33f700856f28558af4b5df52b88e1ba10210a95d Mon Sep 17 00:00:00 2001 From: Milton Date: Mon, 21 Mar 2022 18:23:39 -0300 Subject: [PATCH 2/2] Create hook to determine guild implementation --- .../guild/useGuildImplementationType.ts | 102 +++++++++--------- 1 file changed, 51 insertions(+), 51 deletions(-) diff --git a/src/hooks/Guilds/guild/useGuildImplementationType.ts b/src/hooks/Guilds/guild/useGuildImplementationType.ts index e83fb2b779..301b630199 100644 --- a/src/hooks/Guilds/guild/useGuildImplementationType.ts +++ b/src/hooks/Guilds/guild/useGuildImplementationType.ts @@ -1,51 +1,51 @@ -// import { BigNumber } from 'ethers'; -import { useMemo, useEffect, useState } from 'react'; -import useJsonRpcProvider from '../web3/useJsonRpcProvider'; - -enum GuildImplementationType { - SnapshotRepERC20Guild = 'SnapshotRepERC20Guild', - DXDGuild = 'DXDGuild', - ERC20Guild = 'ERC20Guild', - IERC20Guild = 'IERC20Guild', -} - -export default function useGuildImplementationType(guildAddress) { - const [guildBytecode, setGuildBytecode] = useState(''); - const provider = useJsonRpcProvider(); - - useEffect(() => { - const getBytecode = async () => { - // get current guild bytecode; - const bytecode = await provider.getCode(guildAddress); - setGuildBytecode(bytecode); - }; - getBytecode(); - }, [guildAddress, provider]); - - const currentImplementation = useMemo(() => { - if (!guildBytecode) return ''; - - // compare current guild bytecode with other guilds implementation bytecode; - const match = Object.entries(deployedBytecodes).find(([_, bytecode]) => { - return guildBytecode === bytecode; - }); - - return match - ? GuildImplementationType[match[0]] - : GuildImplementationType.ERC20Guild; - }, [guildBytecode]); - - return currentImplementation; -} - -const deployedSnapshotRepErc20GuildBytecode = - '0x6080604052600436106102ae5760003560e01c80636e27d88911610166578063ae619234116100d3578063c0a4d64d1161008f578063f2fde38b1161006c578063f2fde38b146108cd578063f4732da6146108ed578063f5447c0a14610902578063f9a92d821461094b57005b8063c0a4d64d1461086f578063c93e01e314610884578063cac7d2051461089957005b8063ae619234146107b5578063b2c342d5146107ca578063b3b47061146107fa578063b7c15f8d1461081a578063b82bb2851461082f578063bcc3f3bd1461084f57005b806389c98c061161012257806389c98c06146106f75780638da5cb5b1461070c57806392b716541461072a578063a16fe3421461074a578063a5234bce14610768578063adf2c7b61461078857005b80636e27d8891461052f578063715018a61461064d57806377027ff414610662578063785b3ed8146106775780637fa0ff29146106975780638029eff1146106b757005b806322bafdff1161021c57806336f8f8d9116101d8578063430694cf116101b5578063430694cf146105c357806354f2f7af146105fa5780636140b814146106185780636c8b72f61461063857005b806336f8f8d91461054f5780633b72b3c71461056f5780633f330ff8146105a357005b806322bafdff146104745780632467ef94146104a157806329b412e3146104b65780632d5b17de146104d65780632d757c3e146104f6578063315a095d1461052f57005b80631626ba7e1161026b5780631626ba7e146103b057806316bbecde146103d057806317d7de7c146103f05780631a5007dd1461041257806321df0da7146104275780632229a0e21461045f57005b80623a40d0146102b7578063069dfc5b146102e2578063088af182146103165780630a366a6314610338578063130485fe1461035b57806313108d741461039057005b366102b557005b005b3480156102c357600080fd5b506102cc61096b565b6040516102d99190613e15565b60405180910390f35b3480156102ee57600080fd5b506102fd635555555560e11b81565b6040516001600160e01b031990911681526020016102d9565b34801561032257600080fd5b506102fd610331366004613f0e565b6020015190565b34801561034457600080fd5b5061034d6109c3565b6040519081526020016102d9565b34801561036757600080fd5b5061037b610376366004613f66565b6109eb565b604080519283526020830191909152016102d9565b34801561039c57600080fd5b5061034d6103ab36600461411d565b610a20565b3480156103bc57600080fd5b506102fd6103cb3660046141f6565b610ad3565b3480156103dc57600080fd5b506102b56103eb36600461423c565b610b19565b3480156103fc57600080fd5b50610405610b2a565b6040516102d991906142b5565b34801561041e57600080fd5b50600a5461034d565b34801561043357600080fd5b506000546201000090046001600160a01b03165b6040516001600160a01b0390911681526020016102d9565b34801561046b57600080fd5b5060135461034d565b34801561048057600080fd5b5061034d61048f3660046142c8565b60009081526079602052604090205490565b3480156104ad57600080fd5b50600b5461034d565b3480156104c257600080fd5b506102b56104d13660046142c8565b610bb3565b3480156104e257600080fd5b506102b56104f13660046142e1565b610c3c565b34801561050257600080fd5b5061034d61051136600461434b565b6001600160a01b03166000908152600f602052604090206001015490565b34801561053b57600080fd5b506102b561054a3660046142c8565b610da3565b34801561055b57600080fd5b506102b561056a366004614366565b610dfc565b34801561057b57600080fd5b506102fd7fa9059cbb2ab09eb219583f4a59a5d0623ade346d962bcd4e46b11da047c9049b81565b3480156105af57600080fd5b506102b56105be366004614414565b610fc2565b3480156105cf57600080fd5b506105e36105de3660046142c8565b610fdc565b6040516102d99b9a99989796959493929190614567565b34801561060657600080fd5b50600e546001600160a01b0316610447565b34801561062457600080fd5b506102b5610633366004614621565b61135f565b34801561064457600080fd5b5060075461034d565b34801561065957600080fd5b506102b5611460565b34801561066e57600080fd5b5060095461034d565b34801561068357600080fd5b506102b56106923660046146b8565b6114c6565b3480156106a357600080fd5b506102b56106b23660046146db565b611544565b3480156106c357600080fd5b506106e76106d23660046142c8565b60009081526010602052604090205460ff1690565b60405190151581526020016102d9565b34801561070357600080fd5b5060085461034d565b34801561071857600080fd5b506047546001600160a01b0316610447565b34801561073657600080fd5b5061034d61074536600461479f565b6115f4565b34801561075657600080fd5b506001546001600160a01b0316610447565b34801561077457600080fd5b506102b56107833660046148c2565b61164b565b34801561079457600080fd5b506107a86107a3366004614986565b611c0c565b6040516102d991906149df565b3480156107c157600080fd5b5061034d611cd4565b3480156107d657600080fd5b506106e76107e53660046142c8565b60009081526011602052604090205460ff1690565b34801561080657600080fd5b506102b56108153660046142c8565b611ceb565b34801561082657600080fd5b5060045461034d565b34801561083b57600080fd5b506107a861084a3660046149f2565b611cf7565b34801561085b57600080fd5b5061034d61086a36600461434b565b611da4565b34801561087b57600080fd5b50600c5461034d565b34801561089057600080fd5b5060035461034d565b3480156108a557600080fd5b506102fd7f095ea7b334ae44009aa867bfb386f5c3b4b443ac6f0ee573fa91c4608fbadfba81565b3480156108d957600080fd5b506102b56108e836600461434b565b611e2f565b3480156108f957600080fd5b50600d5461034d565b34801561090e57600080fd5b5061092c61091d366004613f0e565b60248101516044909101519091565b604080516001600160a01b0390931683526020830191909152016102d9565b34801561095757600080fd5b5061034d610966366004614a26565b611ef7565b606060138054806020026020016040519081016040528092919081815260200182805480156109b957602002820191906000526020600020905b8154815260200190600101908083116109a5575b5050505050905090565b60006109e66127106109e06006546109da600d5490565b90611f83565b90611f8f565b905090565b60008281526012602090815260408083206001600160a01b0385168452600a01909152902080546001909101545b9250929050565b600080610a31888888888888611f9b565b9050600060029054906101000a90046001600160a01b03166001600160a01b0316635439ad866040518163ffffffff1660e01b815260040160206040518083038186803b158015610a8157600080fd5b505afa158015610a95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ab99190614a50565b600082815260796020526040902055979650505050505050565b600080610ae361086a8585611fb6565b118015610afe575060008381526011602052604090205460ff165b610b09576000610b12565b630b135d3f60e11b5b9392505050565b610b2533848484611fd2565b505050565b606060028054610b3990614a69565b80601f0160208091040260200160405190810160405280929190818152602001828054610b6590614a69565b80156109b95780601f10610b87576101008083540402835291602001916109b9565b820191906000526020600020905b815481529060010190602001808311610b9557509395945050505050565b333014610bdb5760405162461bcd60e51b8152600401610bd290614aa4565b60405180910390fd5b6001546040516329b412e360e01b8152600481018390526001600160a01b03909116906329b412e390602401600060405180830381600087803b158015610c2157600080fd5b505af1158015610c35573d6000803e3d6000fd5b5050505050565b6000610c4a838787876115f4565b60008181526010602052604090205490915060ff1615610cb65760405162461bcd60e51b815260206004820152602160248201527f536e617073686f7445524332304775696c643a20416c726561647920766f74656044820152601960fa1b6064820152608401610bd2565b610d1782610d11836040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b90611fb6565b6001600160a01b0316836001600160a01b031614610d775760405162461bcd60e51b815260206004820181905260248201527f536e617073686f7445524332304775696c643a2057726f6e67207369676e65726044820152606401610bd2565b610d8383878787611fd2565b6000908152601060205260409020805460ff191660011790555050505050565b60405162461bcd60e51b815260206004820152602860248201527f536e617073686f7445524332304775696c643a20746f6b656e207661756c7420604482015267191a5cd8589b195960c21b6064820152608401610bd2565b600054610100900460ff1680610e15575060005460ff16155b610e315760405162461bcd60e51b8152600401610bd290614af2565b600054610100900460ff16158015610e53576000805461ffff19166101011790555b610e668c8c8c8c8c8c8c8c8c8c8c6123b9565b600160009054906101000a90046001600160a01b03166001600160a01b0316639b2dccdd60008e7f40c10f19c047ae7dfa66d6312b683d2ea3dfbcb4159e96b967c5f4b0a86f2842600060016040518663ffffffff1660e01b8152600401610ed2959493929190614b40565b600060405180830381600087803b158015610eec57600080fd5b505af1158015610f00573d6000803e3d6000fd5b50505050600160009054906101000a90046001600160a01b03166001600160a01b0316639b2dccdd60008e7f9dc29fac0ba6d4fc521c69c2b0c636d612e3343bc39ed934429b8876b0d12cba600060016040518663ffffffff1660e01b8152600401610f70959493929190614b40565b600060405180830381600087803b158015610f8a57600080fd5b505af1158015610f9e573d6000803e3d6000fd5b505050508015610fb4576000805461ff00191690555b505050505050505050505050565b610fd28888888888888888612442565b5050505050505050565b600081815260126020526040812080546001808301546002840154600985015486958695606095869586958995879586958895879592946001600160a01b0390921693600386019160048701916005880191611038919061253d565b600888015484546040805160208084028201810190925282815260068c019360078d019360ff9091169260098e0192918a918301828280156110a357602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611085575b5050505050975086805480602002602001604051908101604052809291908181526020016000905b828210156111775783829060005260206000200180546110ea90614a69565b80601f016020809104026020016040519081016040528092919081815260200182805461111690614a69565b80156111635780601f1061113857610100808354040283529160200191611163565b820191906000526020600020905b81548152906001019060200180831161114657829003601f168201915b5050505050815260200190600101906110cb565b505050509650858054806020026020016040519081016040528092919081815260200182805480156111c857602002820191906000526020600020905b8154815260200190600101908083116111b4575b505050505095508380546111db90614a69565b80601f016020809104026020016040519081016040528092919081815260200182805461120790614a69565b80156112545780601f1061122957610100808354040283529160200191611254565b820191906000526020600020905b81548152906001019060200180831161123757829003601f168201915b5050505050935082805461126790614a69565b80601f016020809104026020016040519081016040528092919081815260200182805461129390614a69565b80156112e05780601f106112b5576101008083540402835291602001916112e0565b820191906000526020600020905b8154815290600101906020018083116112c357829003601f168201915b505050505092508080548060200260200160405190810160405280929190818152602001828054801561133257602002820191906000526020600020905b81548152602001906001019080831161131e575b505050505090509b509b509b509b509b509b509b509b509b509b509b505091939597999b90929496989a50565b80518351148015611371575081518351145b6113e5576040805162461bcd60e51b81526020600482015260248101919091527f45524332304775696c643a2057726f6e67206c656e677468206f662070726f7060448201527f6f73616c4964732c20616374696f6e73206f7220766f74696e67506f776572736064820152608401610bd2565b60005b835181101561145a576114483385838151811061140757611407614b7b565b602002602001015185848151811061142157611421614b7b565b602002602001015185858151811061143b5761143b614b7b565b6020026020010151612549565b8061145281614ba7565b9150506113e8565b50505050565b6047546001600160a01b031633146114ba5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610bd2565b6114c4600061271d565b565b3330146115245760405162461bcd60e51b815260206004820152602660248201527f45524332304775696c643a204f6e6c792063616c6c61626c65206279207468656044820152650819dd5a5b1960d21b6064820152608401610bd2565b600091825260116020526040909120805460ff1916911515919091179055565b60005b85518110156115ec576115da86828151811061156557611565614b7b565b602002602001015186838151811061157f5761157f614b7b565b602002602001015186848151811061159957611599614b7b565b60200260200101518685815181106115b3576115b3614b7b565b60200260200101518686815181106115cd576115cd614b7b565b6020026020010151610c3c565b806115e481614ba7565b915050611547565b505050505050565b6040516bffffffffffffffffffffffff19606086901b166020820152603481018490526054810183905260748101829052600090609401604051602081830303815290604052805190602001209050949350505050565b33301461166a5760405162461bcd60e51b8152600401610bd290614aa4565b8251845114801561167c575081518451145b8015611689575080518451145b8015611696575084518451145b61171d5760405162461bcd60e51b815260206004820152604c60248201527f45524332304775696c643a2057726f6e67206c656e677468206f66206173736560448201527f742c20746f2c2066756e6374696f6e5369676e6174757265206f7220616c6c6f60648201526b77616e63652061727261797360a01b608482015260a401610bd2565b60005b84518110156118af57835160009085908390811061174057611740614b7b565b60200260200101516001600160e01b03191614156117b15760405162461bcd60e51b815260206004820152602860248201527f45524332304775696c643a20456d707479207369676e617475726573206e6f7460448201526708185b1b1bddd95960c21b6064820152608401610bd2565b60015486516001600160a01b0390911690639b2dccdd908890849081106117da576117da614b7b565b60200260200101518784815181106117f4576117f4614b7b565b602002602001015187858151811061180e5761180e614b7b565b602002602001015187868151811061182857611828614b7b565b602002602001015187878151811061184257611842614b7b565b60200260200101516040518663ffffffff1660e01b815260040161186a959493929190614b40565b600060405180830381600087803b15801561188457600080fd5b505af1158015611898573d6000803e3d6000fd5b5050505080806118a790614ba7565b915050611720565b5060015460405163fd9233a960e01b81526000916001600160a01b03169063fd9233a990611907908490309081907f3f330ff86dd1b379b10f18bab5301bb628f28784f70482a01774042ed08621d590600401614bc2565b60206040518083038186803b15801561191f57600080fd5b505afa158015611933573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119579190614a50565b116119ca5760405162461bcd60e51b815260206004820152603b60248201527f45524332304775696c643a20736574436f6e6669672066756e6374696f6e206160448201527f6c6c6f77616e63652063616e74206265207475726e6564206f666600000000006064820152608401610bd2565b60015460405163fd9233a960e01b81526000916001600160a01b03169063fd9233a990611a21908490309081907fa5234bce363054cb38e3dfeca861627611d626c5c363ab716da0106f1600399c90600401614bc2565b60206040518083038186803b158015611a3957600080fd5b505afa158015611a4d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a719190614a50565b11611ae45760405162461bcd60e51b815260206004820152603f60248201527f45524332304775696c643a207365745065726d697373696f6e2066756e63746960448201527f6f6e20616c6c6f77616e63652063616e74206265207475726e6564206f6666006064820152608401610bd2565b60015460405163fd9233a960e01b81526000916001600160a01b03169063fd9233a990611b3b908490309081907f29b412e31bd60c46f11150420851edff43d71c82bd81c13331d702842993c93790600401614bc2565b60206040518083038186803b158015611b5357600080fd5b505afa158015611b67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b8b9190614a50565b11610c355760405162461bcd60e51b8152602060048201526044602482018190527f45524332304775696c643a207365745065726d697373696f6e44656c61792066908201527f756e6374696f6e20616c6c6f77616e63652063616e74206265207475726e65646064820152631037b33360e11b608482015260a401610bd2565b6060600083516001600160401b03811115611c2957611c29613e59565b604051908082528060200260200182016040528015611c52578160200160208202803683370190505b50905060005b8451811015611ccc57611c9d858281518110611c7657611c76614b7b565b6020026020010151858381518110611c9057611c90614b7b565b6020026020010151611ef7565b828281518110611caf57611caf614b7b565b602090810291909101015280611cc481614ba7565b915050611c58565b509392505050565b60006109e66127106109e06005546109da600d5490565b611cf48161276f565b50565b6060600082516001600160401b03811115611d1457611d14613e59565b604051908082528060200260200182016040528015611d3d578160200160208202803683370190505b50905060005b8351811015611d9d57611d6e848281518110611d6157611d61614b7b565b6020026020010151611da4565b828281518110611d8057611d80614b7b565b602090810291909101015280611d9581614ba7565b915050611d43565b5092915050565b600080546040516370a0823160e01b81526001600160a01b03848116600483015262010000909204909116906370a082319060240160206040518083038186803b158015611df157600080fd5b505afa158015611e05573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e299190614a50565b92915050565b6047546001600160a01b03163314611e895760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610bd2565b6001600160a01b038116611eee5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610bd2565b611cf48161271d565b6000805460405163277166bf60e11b81526001600160a01b038581166004830152602482018590526201000090920490911690634ee2cd7e9060440160206040518083038186803b158015611f4b57600080fd5b505afa158015611f5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b129190614a50565b6000610b128284614bf5565b6000610b128284614c14565b6000611fab878787878787613035565b979650505050505050565b6000806000611fc585856134b9565b91509150611ccc81613526565b600083815260126020526040902060020154421061204c5760405162461bcd60e51b815260206004820152603160248201527f536e617073686f7445524332304775696c643a2050726f706f73616c20656e6460448201527019590b0818d85b9d081899481d9bdd1959607a1b6064820152608401610bd2565b6000838152607960205260409020548190612068908690611ef7565b10156120cd5760405162461bcd60e51b815260206004820152602e60248201527f536e617073686f7445524332304775696c643a20496e76616c696420766f746960448201526d1b99d41bddd95c88185b5bdd5b9d60921b6064820152608401610bd2565b60008381526012602090815260408083206001600160a01b0388168452600a0190915290206001015481116121625760405162461bcd60e51b815260206004820152603560248201527f536e617073686f7445524332304775696c643a2043616e7420646563726561736044820152746520766f74696e67506f77657220696e20766f746560581b6064820152608401610bd2565b60008381526012602090815260408083206001600160a01b0388168452600a0190915290205415806121b8575060008381526012602090815260408083206001600160a01b0388168452600a0190915290205482145b61223a5760405162461bcd60e51b815260206004820152604760248201527f536e617073686f7445524332304775696c643a2043616e74206368616e67652060448201527f616374696f6e20766f7465642c206f6e6c7920696e63726561736520766f74696064820152663733a837bbb2b960c91b608482015260a401610bd2565b60008381526012602081815260408084206001600160a01b0389168552600a81018352908420600101549387905291905260090180546122a99284926122a3928790811061228a5761228a614b7b565b906000526020600020015461253d90919063ffffffff16565b906136e1565b60008481526012602052604090206009018054849081106122cc576122cc614b7b565b6000918252602080832091909101929092558481526012825260408082206001600160a01b038816808452600a9091018452918190208581556001018490558051918252918101839052839185917f583c62f152711bcb1ca6186c1065821ff17a7cbe226dcb559a1c889dcf0d769b910160405180910390a36007541561145a5760006123706123676008543a6136ed90919063ffffffff16565b60075490611f83565b9050804710610c355760405133908290600081818185875af1925050503d8060008114610fd2576040519150601f19603f3d011682016040523d82523d6000602084013e610fd2565b600054610100900460ff16806123d2575060005460ff16155b6123ee5760405162461bcd60e51b8152600401610bd290614af2565b600054610100900460ff16158015612410576000805461ffff19166101011790555b6124238c8c8c8c8c8c8c8c8c8c8c613703565b8015610fb4576000805461ff0019169055505050505050505050505050565b3330146124b75760405162461bcd60e51b815260206004820152603f60248201527f45524332304775696c643a204f6e6c792063616c6c61626c652062792045524360448201527f32306775696c6420697473656c66207768656e20696e697469616c697a6564006064820152608401610bd2565b600088116124d75760405162461bcd60e51b8152600401610bd290614c36565b878110156124f75760405162461bcd60e51b8152600401610bd290614c84565b600086116125175760405162461bcd60e51b8152600401610bd290614ce1565b600397909755600495909555600593909355600691909155600755600855600955600c55565b6000610b128284614d3e565b60008381526012602052604090206002015442106125bb5760405162461bcd60e51b815260206004820152602960248201527f45524332304775696c643a2050726f706f73616c20656e6465642c2063616e74604482015268081899481d9bdd195960ba1b6064820152608401610bd2565b806125c585611da4565b101580156125fa575060008381526012602090815260408083206001600160a01b0388168452600a0190915290206001015481115b6126555760405162461bcd60e51b815260206004820152602660248201527f45524332304775696c643a20496e76616c696420766f74696e67506f77657220604482015265185b5bdd5b9d60d21b6064820152608401610bd2565b60008381526012602090815260408083206001600160a01b0388168452600a0190915290205415806126ab575060008381526012602090815260408083206001600160a01b0388168452600a0190915290205482145b61223a5760405162461bcd60e51b815260206004820152603f60248201527f45524332304775696c643a2043616e74206368616e676520616374696f6e207660448201527f6f7465642c206f6e6c7920696e63726561736520766f74696e67506f776572006064820152608401610bd2565b604780546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60145460ff16156127ce5760405162461bcd60e51b8152602060048201526024808201527f45524332304775696c643a2050726f706f73616c20756e6465722065786563756044820152633a34b7b760e11b6064820152608401610bd2565b600160008281526012602052604090206008015460ff1660048111156127f6576127f661452f565b146128515760405162461bcd60e51b815260206004820152602560248201527f45524332304775696c643a2050726f706f73616c20616c72656164792065786560448201526418dd5d195960da1b6064820152608401610bd2565b60008181526012602052604090206002015442116128bf5760405162461bcd60e51b815260206004820152602560248201527f45524332304775696c643a2050726f706f73616c206861736e277420656e646560448201526419081e595d60da1b6064820152608401610bd2565b600060015b600083815260126020526040902060090154811015612999576128e5611cd4565b600084815260126020526040902060090180548390811061290857612908614b7b565b90600052602060002001541015801561297e5750600083815260126020526040902060090180548390811061293f5761293f614b7b565b906000526020600020015460126000858152602001908152602001600020600901828154811061297157612971614b7b565b9060005260206000200154115b15612987578091505b8061299181614ba7565b9150506128c4565b816129e6576000838152601260205260409020600801805460ff191660029081179091558390600080516020615526833981519152905b60405190815260200160405180910390a261301f565b6004546000848152601260205260409020600201544291612a0791906136e1565b1015612a43576000838152601260205260409020600801805460ff191660049081179091558390600080516020615526833981519152906129d0565b600083815260126020526040812060088101805460ff1916600317905560090154612a8b90612a7390600161253d565b60008681526012602052604090206003015490611f8f565b9050612aa2612a9b84600161253d565b8290611f83565b91506000612ab083836136e1565b90505b80831015612ff9576000858152601260205260408120600301805485908110612ade57612ade614b7b565b6000918252602090912001546001600160a01b031614801590612b3857506000858152601260205260408120600401805485908110612b1f57612b1f614b7b565b906000526020600020018054612b3490614a69565b9050115b15612fe75760008581526012602052604081206004018054612bff919086908110612b6557612b65614b7b565b906000526020600020018054612b7a90614a69565b80601f0160208091040260200160405190810160405280929190818152602001828054612ba690614a69565b8015612bf35780601f10612bc857610100808354040283529160200191612bf3565b820191906000526020600020905b815481529060010190602001808311612bd657829003601f168201915b50505050506020015190565b9050600080601260008981526020019081526020016000206003018681548110612c2b57612c2b614b7b565b60009182526020808320909101548a835260129091526040822060050180546001600160a01b0390921693509088908110612c6857612c68614b7b565b600091825260209091200154905063a9059cbb60e01b6001600160e01b031985161480612ca5575063095ea7b360e01b6001600160e01b03198516145b15612dc0576000898152601260205260409020600301805488908110612ccd57612ccd614b7b565b60009182526020808320909101548b8352601290915260409091206004018054635555555560e11b96506001600160a01b039092169450612dba9189908110612d1857612d18614b7b565b906000526020600020018054612d2d90614a69565b80601f0160208091040260200160405190810160405280929190818152602001828054612d5990614a69565b8015612da65780601f10612d7b57610100808354040283529160200191612da6565b820191906000526020600020905b815481529060010190602001808311612d8957829003601f168201915b505050505060248101516044909101519091565b90925090505b6001546040516306f09e0b60e01b81526001600160a01b03858116600483015230602483015284811660448301526001600160e01b03198716606483015260848201849052909116906306f09e0b9060a401600060405180830381600087803b158015612e2c57600080fd5b505af1925050508015612e3d575060015b612e8f57612e49614d55565b806308c379a01415612e835750612e5e614d71565b80612e695750612e85565b8060405162461bcd60e51b8152600401610bd291906142b5565b505b3d6000803e3d6000fd5b6014805460ff191660011790556000898152601260205260408120600301805489908110612ebf57612ebf614b7b565b60009182526020808320909101548c83526012909152604090912060050180546001600160a01b03909216918a908110612efb57612efb614b7b565b9060005260206000200154601260008d81526020019081526020016000206004018a81548110612f2d57612f2d614b7b565b90600052602060002001604051612f449190614dfa565b60006040518083038185875af1925050503d8060008114612f81576040519150601f19603f3d011682016040523d82523d6000602084013e612f86565b606091505b5050905080612fd75760405162461bcd60e51b815260206004820181905260248201527f45524332304775696c643a2050726f706f73616c2063616c6c206661696c65646044820152606401610bd2565b50506014805460ff191690555050505b82612ff181614ba7565b935050612ab3565b84600080516020615526833981519152600360405190815260200160405180910390a250505b600b5461302d90600161253d565b600b55505050565b600061304060095490565b600b54106130af5760405162461bcd60e51b815260206004820152603660248201527f45524332304775696c643a204d6178696d756d20616d6f756e74206f662061636044820152751d1a5d99481c1c9bdc1bdcd85b1cc81c995858da195960521b6064820152608401610bd2565b6130b76109c3565b6130c033611da4565b10156131265760405162461bcd60e51b815260206004820152602f60248201527f45524332304775696c643a204e6f7420656e6f75676820766f74657320746f2060448201526e18dc99585d19481c1c9bdc1bdcd85b608a1b6064820152608401610bd2565b85518751148015613138575084518751145b6131a15760405162461bcd60e51b815260206004820152603460248201527f45524332304775696c643a2057726f6e67206c656e677468206f6620746f2c2060448201527364617461206f722076616c75652061727261797360601b6064820152608401610bd2565b600087511161320c5760405162461bcd60e51b815260206004820152603160248201527f45524332304775696c643a20746f2c20646174612076616c7565206172726179604482015270732063616e6e6f7420626520656d70747960781b6064820152608401610bd2565b60005b87518110156132c75760015488516001600160a01b039091169089908390811061323b5761323b614b7b565b60200260200101516001600160a01b031614156132b55760405162461bcd60e51b815260206004820152603260248201527f45524332304775696c643a2043616e742063616c6c207065726d697373696f6e604482015271207265676973747279206469726563746c7960701b6064820152608401610bd2565b806132bf81614ba7565b91505061320f565b50600a546040516bffffffffffffffffffffffff193360601b16602082015242603482015260548101919091526000906074016040516020818303038152906040528051906020012090506133286001600a546136e190919063ffffffff16565b600a55600081815260126020526040902080546001600160a01b03191633178155426001820181905560035461335e91906136e1565b6002820155885161337890600383019060208c0190613c30565b50875161338e90600483019060208b0190613c95565b5086516133a490600583019060208a0190613cee565b5084516133ba9060068301906020880190613d29565b5083516133d09060078301906020870190613d29565b506133dc8660016136e1565b6001600160401b038111156133f3576133f3613e59565b60405190808252806020026020018201604052801561341c578160200160208202803683370190505b508051613433916009840191602090910190613cee565b5060088101805460ff19166001908117909155600b54613452916136e1565b600b5581600080516020615526833981519152600160405190815260200160405180910390a250601380546001810182556000919091527f66de8ffda797e3de9c05e8fc57b3bf0ec28a930d40b0d285d93c06501cf6a09001819055979650505050505050565b6000808251604114156134f05760208301516040840151606085015160001a6134e487828585613b14565b94509450505050610a19565b82516040141561351a576020830151604084015161350f868383613c01565b935093505050610a19565b50600090506002610a19565b600081600481111561353a5761353a61452f565b14156135435750565b60018160048111156135575761355761452f565b14156135a55760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610bd2565b60028160048111156135b9576135b961452f565b14156136075760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610bd2565b600381600481111561361b5761361b61452f565b14156136745760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610bd2565b60048160048111156136885761368861452f565b1415611cf45760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b6064820152608401610bd2565b6000610b128284614e96565b60008183106136fc5781610b12565b5090919050565b6001600160a01b038b166137685760405162461bcd60e51b815260206004820152602660248201527f45524332304775696c643a20746f6b656e2063616e74206265207a65726f206160448201526564647265737360d01b6064820152608401610bd2565b60008a116137885760405162461bcd60e51b8152600401610bd290614c36565b898210156137a85760405162461bcd60e51b8152600401610bd290614c84565b600088116137c85760405162461bcd60e51b8152600401610bd290614ce1565b85516137db906002906020890190613d29565b506000805462010000600160b01b031916620100006001600160a01b038e160217905560405161380a90613d9c565b604051809103906000f080158015613826573d6000803e3d6000fd5b50600e80546001600160a01b0319166001600160a01b0392831690811790915560005460405163485cc95560e01b81526201000090910490921660048301523060248301529063485cc95590604401600060405180830381600087803b15801561388f57600080fd5b505af11580156138a3573d6000803e3d6000fd5b50505060038b905550600489815560058990556006889055600786905560088590556009849055600c839055600180546001600160a01b0319166001600160a01b0384169081178255604051639b2dccdd60e01b81529092639b2dccdd926139349260009230927f3f330ff86dd1b379b10f18bab5301bb628f28784f70482a01774042ed08621d592859201614b40565b600060405180830381600087803b15801561394e57600080fd5b505af1158015613962573d6000803e3d6000fd5b505060018054604051639b2dccdd60e01b81526001600160a01b039091169350639b2dccdd92506139bf9160009130917fa5234bce363054cb38e3dfeca861627611d626c5c363ab716da0106f1600399c91849190600401614b40565b600060405180830381600087803b1580156139d957600080fd5b505af11580156139ed573d6000803e3d6000fd5b505060018054604051639b2dccdd60e01b81526001600160a01b039091169350639b2dccdd9250613a4a9160009130917f29b412e31bd60c46f11150420851edff43d71c82bd81c13331d702842993c93791849190600401614b40565b600060405180830381600087803b158015613a6457600080fd5b505af1158015613a78573d6000803e3d6000fd5b505060018054604051639b2dccdd60e01b81526001600160a01b039091169350639b2dccdd9250613ad59160009130917f785b3ed8f1babbb20b6a85d572b5e50637a4c77796e0e444290d8b90490101d691849190600401614b40565b600060405180830381600087803b158015613aef57600080fd5b505af1158015613b03573d6000803e3d6000fd5b505050505050505050505050505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115613b4b5750600090506003613bf8565b8460ff16601b14158015613b6357508460ff16601c14155b15613b745750600090506004613bf8565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015613bc8573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116613bf157600060019250925050613bf8565b9150600090505b94509492505050565b6000806001600160ff1b03831660ff84901c601b01613c2287828885613b14565b935093505050935093915050565b828054828255906000526020600020908101928215613c85579160200282015b82811115613c8557825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190613c50565b50613c91929150613da9565b5090565b828054828255906000526020600020908101928215613ce2579160200282015b82811115613ce25782518051613cd2918491602090910190613d29565b5091602001919060010190613cb5565b50613c91929150613dbe565b828054828255906000526020600020908101928215613c85579160200282015b82811115613c85578251825591602001919060010190613d0e565b828054613d3590614a69565b90600052602060002090601f016020900481019282613d575760008555613c85565b82601f10613d7057805160ff1916838001178555613c85565b82800160010185558215613c855791820182811115613c85578251825591602001919060010190613d0e565b61067780614eaf83390190565b5b80821115613c915760008155600101613daa565b80821115613c91576000613dd28282613ddb565b50600101613dbe565b508054613de790614a69565b6000825580601f10613df7575050565b601f016020900490600052602060002090810190611cf49190613da9565b6020808252825182820181905260009190848201906040850190845b81811015613e4d57835183529284019291840191600101613e31565b50909695505050505050565b634e487b7160e01b600052604160045260246000fd5b601f8201601f191681016001600160401b0381118282101715613e9457613e94613e59565b6040525050565b600082601f830112613eac57600080fd5b81356001600160401b03811115613ec557613ec5613e59565b604051613edc601f8301601f191660200182613e6f565b818152846020838601011115613ef157600080fd5b816020850160208301376000918101602001919091529392505050565b600060208284031215613f2057600080fd5b81356001600160401b03811115613f3657600080fd5b613f4284828501613e9b565b949350505050565b80356001600160a01b0381168114613f6157600080fd5b919050565b60008060408385031215613f7957600080fd5b82359150613f8960208401613f4a565b90509250929050565b60006001600160401b03821115613fab57613fab613e59565b5060051b60200190565b600082601f830112613fc657600080fd5b81356020613fd382613f92565b604051613fe08282613e6f565b83815260059390931b850182019282810191508684111561400057600080fd5b8286015b848110156140225761401581613f4a565b8352918301918301614004565b509695505050505050565b600082601f83011261403e57600080fd5b8135602061404b82613f92565b6040516140588282613e6f565b83815260059390931b850182019282810191508684111561407857600080fd5b8286015b848110156140225780356001600160401b0381111561409b5760008081fd5b6140a98986838b0101613e9b565b84525091830191830161407c565b600082601f8301126140c857600080fd5b813560206140d582613f92565b6040516140e28282613e6f565b83815260059390931b850182019282810191508684111561410257600080fd5b8286015b848110156140225780358352918301918301614106565b60008060008060008060c0878903121561413657600080fd5b86356001600160401b038082111561414d57600080fd5b6141598a838b01613fb5565b9750602089013591508082111561416f57600080fd5b61417b8a838b0161402d565b9650604089013591508082111561419157600080fd5b61419d8a838b016140b7565b95506060890135945060808901359150808211156141ba57600080fd5b6141c68a838b01613e9b565b935060a08901359150808211156141dc57600080fd5b506141e989828a01613e9b565b9150509295509295509295565b6000806040838503121561420957600080fd5b8235915060208301356001600160401b0381111561422657600080fd5b61423285828601613e9b565b9150509250929050565b60008060006060848603121561425157600080fd5b505081359360208301359350604090920135919050565b6000815180845260005b8181101561428e57602081850181015186830182015201614272565b818111156142a0576000602083870101525b50601f01601f19169290920160200192915050565b602081526000610b126020830184614268565b6000602082840312156142da57600080fd5b5035919050565b600080600080600060a086880312156142f957600080fd5b85359450602086013593506040860135925061431760608701613f4a565b915060808601356001600160401b0381111561433257600080fd5b61433e88828901613e9b565b9150509295509295909350565b60006020828403121561435d57600080fd5b610b1282613f4a565b60008060008060008060008060008060006101608c8e03121561438857600080fd5b6143918c613f4a565b9a5060208c0135995060408c0135985060608c0135975060808c0135965060a08c01356001600160401b038111156143c857600080fd5b6143d48e828f01613e9b565b96505060c08c0135945060e08c013593506101008c013592506101208c013591506144026101408d01613f4a565b90509295989b509295989b9093969950565b600080600080600080600080610100898b03121561443157600080fd5b505086359860208801359850604088013597606081013597506080810135965060a0810135955060c0810135945060e0013592509050565b600081518084526020808501945080840160005b838110156144a25781516001600160a01b03168752958201959082019060010161447d565b509495945050505050565b6000815180845260208085019450848260051b860182860160005b858110156144f25783830389526144e0838351614268565b988501989250908401906001016144c8565b5090979650505050505050565b600081518084526020808501945080840160005b838110156144a257815187529582019590820190600101614513565b634e487b7160e01b600052602160045260246000fd5b6005811061456357634e487b7160e01b600052602160045260246000fd5b9052565b600061016060018060a01b038e1683528c60208401528b60408401528060608401526145958184018c614469565b905082810360808401526145a9818b6144ad565b905082810360a08401526145bd818a6144ff565b90508760c084015282810360e08401526145d78188614268565b90508281036101008401526145ec8187614268565b90506145fc610120840186614545565b82810361014084015261460f81856144ff565b9e9d5050505050505050505050505050565b60008060006060848603121561463657600080fd5b83356001600160401b038082111561464d57600080fd5b614659878388016140b7565b9450602086013591508082111561466f57600080fd5b61467b878388016140b7565b9350604086013591508082111561469157600080fd5b5061469e868287016140b7565b9150509250925092565b80358015158114613f6157600080fd5b600080604083850312156146cb57600080fd5b82359150613f89602084016146a8565b600080600080600060a086880312156146f357600080fd5b85356001600160401b038082111561470a57600080fd5b61471689838a016140b7565b9650602088013591508082111561472c57600080fd5b61473889838a016140b7565b9550604088013591508082111561474e57600080fd5b61475a89838a016140b7565b9450606088013591508082111561477057600080fd5b61477c89838a01613fb5565b9350608088013591508082111561479257600080fd5b5061433e8882890161402d565b600080600080608085870312156147b557600080fd5b6147be85613f4a565b966020860135965060408601359560600135945092505050565b600082601f8301126147e957600080fd5b813560206147f682613f92565b6040516148038282613e6f565b83815260059390931b850182019282810191508684111561482357600080fd5b8286015b848110156140225780356001600160e01b0319811681146148485760008081fd5b8352918301918301614827565b600082601f83011261486657600080fd5b8135602061487382613f92565b6040516148808282613e6f565b83815260059390931b85018201928281019150868411156148a057600080fd5b8286015b84811015614022576148b5816146a8565b83529183019183016148a4565b600080600080600060a086880312156148da57600080fd5b85356001600160401b03808211156148f157600080fd5b6148fd89838a01613fb5565b9650602088013591508082111561491357600080fd5b61491f89838a01613fb5565b9550604088013591508082111561493557600080fd5b61494189838a016147d8565b9450606088013591508082111561495757600080fd5b61496389838a016140b7565b9350608088013591508082111561497957600080fd5b5061433e88828901614855565b6000806040838503121561499957600080fd5b82356001600160401b03808211156149b057600080fd5b6149bc86838701613fb5565b935060208501359150808211156149d257600080fd5b50614232858286016140b7565b602081526000610b1260208301846144ff565b600060208284031215614a0457600080fd5b81356001600160401b03811115614a1a57600080fd5b613f4284828501613fb5565b60008060408385031215614a3957600080fd5b614a4283613f4a565b946020939093013593505050565b600060208284031215614a6257600080fd5b5051919050565b600181811c90821680614a7d57607f821691505b60208210811415614a9e57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252602e908201527f45524332304775696c643a204f6e6c792063616c6c61626c652062792045524360408201526d191833bab4b6321034ba39b2b63360911b606082015260800190565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b6001600160a01b0395861681529390941660208401526001600160e01b03199190911660408301526060820152901515608082015260a00190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600019821415614bbb57614bbb614b91565b5060010190565b6001600160a01b0394851681529284166020840152921660408201526001600160e01b0319909116606082015260800190565b6000816000190483118215151615614c0f57614c0f614b91565b500290565b600082614c3157634e487b7160e01b600052601260045260246000fd5b500490565b6020808252602e908201527f45524332304775696c643a2070726f706f73616c2074696d652068617320746f60408201526d0206265206d6f72652074686120360941b606082015260800190565b6020808252603e908201527f45524332304775696c643a206c6f636b54696d652068617320746f206265206860408201527f6967686572206f7220657175616c20746f2070726f706f73616c54696d650000606082015260800190565b6020808252603c908201527f45524332304775696c643a20766f74696e6720706f77657220666f722065786560408201527f637574696f6e2068617320746f206265206d6f7265207468616e203000000000606082015260800190565b600082821015614d5057614d50614b91565b500390565b600060033d1115614d6e5760046000803e5060005160e01c5b90565b600060443d1015614d7f5790565b6040516003193d81016004833e81513d6001600160401b038160248401118184111715614dae57505050505090565b8285019150815181811115614dc65750505050505090565b843d8701016020828501011115614de05750505050505090565b614def60208286010187613e6f565b509095945050505050565b600080835481600182811c915080831680614e1657607f831692505b6020808410821415614e3657634e487b7160e01b86526022600452602486fd5b818015614e4a5760018114614e5b57614e88565b60ff19861689528489019650614e88565b60008a81526020902060005b86811015614e805781548b820152908501908301614e67565b505084890196505b509498975050505050505050565b60008219821115614ea957614ea9614b91565b50019056fe60806040526001805460ff60a01b1916905534801561001d57600080fd5b5061064a8061002d6000396000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c8063485cc95511610066578063485cc9551461012f5780636e9960c314610142578063f3fef3a314610153578063f851a44014610166578063fc0c546a1461017957600080fd5b8063158ef93e1461009857806321df0da7146100c157806327e235e3146100ec57806347e7ef241461011a575b600080fd5b6001546100ac90600160a01b900460ff1681565b60405190151581526020015b60405180910390f35b6000546201000090046001600160a01b03165b6040516001600160a01b0390911681526020016100b8565b61010c6100fa366004610535565b60026020526000908152604090205481565b6040519081526020016100b8565b61012d610128366004610550565b610192565b005b61012d61013d36600461057a565b6102de565b6001546001600160a01b03166100d4565b61012d610161366004610550565b6103d9565b6001546100d4906001600160a01b031681565b6000546100d4906201000090046001600160a01b031681565b600154600160a01b900460ff166101f05760405162461bcd60e51b815260206004820152601a60248201527f546f6b656e5661756c743a204e6f7420696e6974696c697a656400000000000060448201526064015b60405180910390fd5b6001546001600160a01b0316331461020757600080fd5b6000546040516323b872dd60e01b81526001600160a01b0384811660048301523060248301526044820184905262010000909204909116906323b872dd90606401602060405180830381600087803b15801561026257600080fd5b505af1158015610276573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061029a91906105ad565b506001600160a01b0382166000908152600260205260409020546102be90826104fa565b6001600160a01b0390921660009081526002602052604090209190915550565b600054610100900460ff16806102f7575060005460ff16155b61035a5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016101e7565b600054610100900460ff1615801561037c576000805461ffff19166101011790555b600080546001600160a01b03808616620100000262010000600160b01b031990921691909117909155600180546001600160a81b03191691841691909117600160a01b17905580156103d4576000805461ff00191690555b505050565b600154600160a01b900460ff166104325760405162461bcd60e51b815260206004820152601a60248201527f546f6b656e5661756c743a204e6f7420696e6974696c697a656400000000000060448201526064016101e7565b6001546001600160a01b0316331461044957600080fd5b60005460405163a9059cbb60e01b81526001600160a01b03848116600483015260248201849052620100009092049091169063a9059cbb90604401602060405180830381600087803b15801561049e57600080fd5b505af11580156104b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104d691906105ad565b506001600160a01b0382166000908152600260205260409020546102be908261050d565b600061050682846105e5565b9392505050565b600061050682846105fd565b80356001600160a01b038116811461053057600080fd5b919050565b60006020828403121561054757600080fd5b61050682610519565b6000806040838503121561056357600080fd5b61056c83610519565b946020939093013593505050565b6000806040838503121561058d57600080fd5b61059683610519565b91506105a460208401610519565b90509250929050565b6000602082840312156105bf57600080fd5b8151801515811461050657600080fd5b634e487b7160e01b600052601160045260246000fd5b600082198211156105f8576105f86105cf565b500190565b60008282101561060f5761060f6105cf565b50039056fea26469706673582212206539bb9ef196850c812aea5710389efb414f01a9d3d7375775ee09011a60aeb164736f6c63430008080033fee62a9eec0be50eb061c711990ef0f1e17b40ea131d9347b0468acdaf8bf243a2646970667358221220a4bd8a1bb7126a1e85671bc4ef38deaf25c4959cad72ee2e2ffe6372a4aa29c864736f6c63430008080033'; - -const deployedDXDGuildBytecode = - '0x60806040526004361061027e5760003560e01c80636c8b72f61161014e578063ae619234116100bb578063c0a4d64d11610077578063c0a4d64d14610848578063c93e01e31461085d578063cac7d20514610872578063f2fde38b146108a6578063f4732da6146108c6578063f5447c0a146108db57005b8063ae6192341461076b578063b2c342d514610780578063b3b47061146107b0578063b7c15f8d146107d0578063b82bb285146107e5578063bcc3f3bd1461081257005b80638029eff11161010a5780638029eff11461069a57806389c98c06146106da5780638da5cb5b146106ef57806392b716541461070d578063a16fe3421461072d578063a5234bce1461074b57005b80636c8b72f6146105fb5780636e27d88914610610578063715018a61461063057806377027ff414610645578063785b3ed81461065a5780637fa0ff291461067a57005b80632457e393116101ec57806336f8f8d9116101a857806336f8f8d9146105125780633b72b3c7146105325780633f330ff814610566578063430694cf1461058657806354f2f7af146105bd5780636140b814146105db57005b80632457e393146104445780632467ef941461046457806329b412e3146104795780632d5b17de146104995780632d757c3e146104b9578063315a095d146104f257005b80631626ba7e1161023b5780631626ba7e1461038057806316bbecde146103a057806317d7de7c146103c05780631a5007dd146103e257806321df0da7146103f75780632229a0e21461042f57005b80623a40d014610287578063069dfc5b146102b2578063088af182146102e65780630a366a6314610308578063130485fe1461032b57806313108d741461036057005b3661028557005b005b34801561029357600080fd5b5061029c610924565b6040516102a99190613c19565b60405180910390f35b3480156102be57600080fd5b506102cd635555555560e11b81565b6040516001600160e01b031990911681526020016102a9565b3480156102f257600080fd5b506102cd610301366004613d12565b6020015190565b34801561031457600080fd5b5061031d61097c565b6040519081526020016102a9565b34801561033757600080fd5b5061034b610346366004613d6a565b6109a4565b604080519283526020830191909152016102a9565b34801561036c57600080fd5b5061031d61037b366004613f21565b6109d9565b34801561038c57600080fd5b506102cd61039b366004613ffa565b6109f4565b3480156103ac57600080fd5b506102856103bb366004614040565b610a3a565b3480156103cc57600080fd5b506103d5610a4b565b6040516102a991906140b9565b3480156103ee57600080fd5b50600a5461031d565b34801561040357600080fd5b506000546201000090046001600160a01b03165b6040516001600160a01b0390911681526020016102a9565b34801561043b57600080fd5b5060135461031d565b34801561045057600080fd5b5061028561045f3660046140cc565b610ad4565b34801561047057600080fd5b50600b5461031d565b34801561048557600080fd5b50610285610494366004614160565b610c1a565b3480156104a557600080fd5b506102856104b4366004614179565b610c9a565b3480156104c557600080fd5b5061031d6104d43660046141e3565b6001600160a01b03166000908152600f602052604090206001015490565b3480156104fe57600080fd5b5061028561050d366004614160565b610df7565b34801561051e57600080fd5b5061028561052d3660046141fe565b610fb2565b34801561053e57600080fd5b506102cd7fa9059cbb2ab09eb219583f4a59a5d0623ade346d962bcd4e46b11da047c9049b81565b34801561057257600080fd5b5061028561058136600461429a565b61103b565b34801561059257600080fd5b506105a66105a1366004614160565b611055565b6040516102a99b9a999897969594939291906143f0565b3480156105c957600080fd5b50600e546001600160a01b0316610417565b3480156105e757600080fd5b506102856105f63660046144aa565b6113d8565b34801561060757600080fd5b5060075461031d565b34801561061c57600080fd5b5061028561062b366004614160565b6114d9565b34801561063c57600080fd5b506102856115cf565b34801561065157600080fd5b5060095461031d565b34801561066657600080fd5b50610285610675366004614541565b611635565b34801561068657600080fd5b50610285610695366004614564565b6116b3565b3480156106a657600080fd5b506106ca6106b5366004614160565b60009081526010602052604090205460ff1690565b60405190151581526020016102a9565b3480156106e657600080fd5b5060085461031d565b3480156106fb57600080fd5b506047546001600160a01b0316610417565b34801561071957600080fd5b5061031d610728366004614628565b611763565b34801561073957600080fd5b506001546001600160a01b0316610417565b34801561075757600080fd5b5061028561076636600461474b565b6117ba565b34801561077757600080fd5b5061031d611d7b565b34801561078c57600080fd5b506106ca61079b366004614160565b60009081526011602052604090205460ff1690565b3480156107bc57600080fd5b506102856107cb366004614160565b611d92565b3480156107dc57600080fd5b5060045461031d565b3480156107f157600080fd5b5061080561080036600461480f565b611d9e565b6040516102a99190614843565b34801561081e57600080fd5b5061031d61082d3660046141e3565b6001600160a01b03166000908152600f602052604090205490565b34801561085457600080fd5b50600c5461031d565b34801561086957600080fd5b5060035461031d565b34801561087e57600080fd5b506102cd7f095ea7b334ae44009aa867bfb386f5c3b4b443ac6f0ee573fa91c4608fbadfba81565b3480156108b257600080fd5b506102856108c13660046141e3565b611e61565b3480156108d257600080fd5b50600d5461031d565b3480156108e757600080fd5b506109056108f6366004613d12565b60248101516044909101519091565b604080516001600160a01b0390931683526020830191909152016102a9565b6060601380548060200260200160405190810160405280929190818152602001828054801561097257602002820191906000526020600020905b81548152602001906001019080831161095e575b5050505050905090565b600061099f612710610999600654610993600d5490565b90611f29565b90611f35565b905090565b60008281526012602090815260408083206001600160a01b0385168452600a01909152902080546001909101545b9250929050565b60006109e9878787878787611f41565b979650505050505050565b600080610a0461082d85856123cc565b118015610a1f575060008381526011602052604090205460ff165b610a2a576000610a33565b630b135d3f60e11b5b9392505050565b610a46338484846123f0565b505050565b606060028054610a5a90614856565b80601f0160208091040260200160405190810160405280929190818152602001828054610a8690614856565b80156109725780601f10610aa857610100808354040283529160200191610972565b820191906000526020600020905b815481529060010190602001808311610ab657509395945050505050565b600054610100900460ff1680610aed575060005460ff16155b610b125760405162461bcd60e51b8152600401610b0990614891565b60405180910390fd5b600054610100900460ff16158015610b34576000805461ffff19166101011790555b610b3c612759565b610b6f8c8c8c8c8c6040518060400160405280600881526020016711161111dd5a5b1960c21b8152508d8d8d8d8d610fb2565b60018054604051639b2dccdd60e01b81526001600160a01b0390911691639b2dccdd91610bc89160009187917f359afa49e07a90b2e02bddde33bfd011f2b5f03f7222fd6fa45906ec488a880d918491906004016148df565b600060405180830381600087803b158015610be257600080fd5b505af1158015610bf6573d6000803e3d6000fd5b505050508015610c0c576000805461ff00191690555b505050505050505050505050565b333014610c395760405162461bcd60e51b8152600401610b099061491a565b6001546040516329b412e360e01b8152600481018390526001600160a01b03909116906329b412e390602401600060405180830381600087803b158015610c7f57600080fd5b505af1158015610c93573d6000803e3d6000fd5b5050505050565b6000610ca883878787611763565b60008181526010602052604090205490915060ff1615610d0a5760405162461bcd60e51b815260206004820152601960248201527f45524332304775696c643a20416c726561647920766f746564000000000000006044820152606401610b09565b610d6b82610d65836040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b906123cc565b6001600160a01b0316836001600160a01b031614610dcb5760405162461bcd60e51b815260206004820152601860248201527f45524332304775696c643a2057726f6e67207369676e657200000000000000006044820152606401610b09565b610dd7838787876123f0565b6000908152601060205260409020805460ff191660011790555050505050565b336000908152600f6020526040902054811115610e755760405162461bcd60e51b815260206004820152603660248201527f45524332304775696c643a20556e61626c6520746f207769746864726177206d6044820152751bdc99481d1bdad95b9cc81d1a185b881b1bd8dad95960521b6064820152608401610b09565b336000908152600f60205260409020600101544211610ed65760405162461bcd60e51b815260206004820152601f60248201527f45524332304775696c643a20546f6b656e73207374696c6c206c6f636b6564006044820152606401610b09565b336000908152600f6020526040902054610ef090826127d4565b336000908152600f6020526040902055600d54610f0d90826127d4565b600d55600e5460405163f3fef3a360e01b8152336004820152602481018390526001600160a01b039091169063f3fef3a390604401600060405180830381600087803b158015610f5c57600080fd5b505af1158015610f70573d6000803e3d6000fd5b505060408051338152602081018590527f6352c5382c4a4578e712449ca65e83cdb392d045dfcf1cad9615189db2da244b93500190505b60405180910390a150565b600054610100900460ff1680610fcb575060005460ff16155b610fe75760405162461bcd60e51b8152600401610b0990614891565b600054610100900460ff16158015611009576000805461ffff19166101011790555b61101c8c8c8c8c8c8c8c8c8c8c8c6127e0565b8015610c0c576000805461ff0019169055505050505050505050505050565b61104b8888888888888888612bf1565b5050505050505050565b600081815260126020526040812080546001808301546002840154600985015486958695606095869586958995879586958895879592946001600160a01b03909216936003860191600487019160058801916110b191906127d4565b600888015484546040805160208084028201810190925282815260068c019360078d019360ff9091169260098e0192918a9183018282801561111c57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116110fe575b5050505050975086805480602002602001604051908101604052809291908181526020016000905b828210156111f057838290600052602060002001805461116390614856565b80601f016020809104026020016040519081016040528092919081815260200182805461118f90614856565b80156111dc5780601f106111b1576101008083540402835291602001916111dc565b820191906000526020600020905b8154815290600101906020018083116111bf57829003601f168201915b505050505081526020019060010190611144565b5050505096508580548060200260200160405190810160405280929190818152602001828054801561124157602002820191906000526020600020905b81548152602001906001019080831161122d575b5050505050955083805461125490614856565b80601f016020809104026020016040519081016040528092919081815260200182805461128090614856565b80156112cd5780601f106112a2576101008083540402835291602001916112cd565b820191906000526020600020905b8154815290600101906020018083116112b057829003601f168201915b505050505093508280546112e090614856565b80601f016020809104026020016040519081016040528092919081815260200182805461130c90614856565b80156113595780601f1061132e57610100808354040283529160200191611359565b820191906000526020600020905b81548152906001019060200180831161133c57829003601f168201915b50505050509250808054806020026020016040519081016040528092919081815260200182805480156113ab57602002820191906000526020600020905b815481526020019060010190808311611397575b505050505090509b509b509b509b509b509b509b509b509b509b509b505091939597999b90929496989a50565b805183511480156113ea575081518351145b61145e576040805162461bcd60e51b81526020600482015260248101919091527f45524332304775696c643a2057726f6e67206c656e677468206f662070726f7060448201527f6f73616c4964732c20616374696f6e73206f7220766f74696e67506f776572736064820152608401610b09565b60005b83518110156114d3576114c13385838151811061148057611480614968565b602002602001015185848151811061149a5761149a614968565b60200260200101518585815181106114b4576114b4614968565b60200260200101516123f0565b806114cb81614994565b915050611461565b50505050565b600e546040516311f9fbc960e21b8152336004820152602481018390526001600160a01b03909116906347e7ef2490604401600060405180830381600087803b15801561152557600080fd5b505af1158015611539573d6000803e3d6000fd5b5050336000908152600f60205260409020546115589250905082612cec565b336000908152600f6020526040902055600c54611576904290612cec565b336000908152600f6020526040902060010155600d546115969082612cec565b600d5560408051338152602081018390527fac87f20a77d28ee8bbb58ec87ea8fa968b3393efae1a368fd50b767c2847391c9101610fa7565b6047546001600160a01b031633146116295760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b09565b6116336000612cf8565b565b3330146116935760405162461bcd60e51b815260206004820152602660248201527f45524332304775696c643a204f6e6c792063616c6c61626c65206279207468656044820152650819dd5a5b1960d21b6064820152608401610b09565b600091825260116020526040909120805460ff1916911515919091179055565b60005b855181101561175b576117498682815181106116d4576116d4614968565b60200260200101518683815181106116ee576116ee614968565b602002602001015186848151811061170857611708614968565b602002602001015186858151811061172257611722614968565b602002602001015186868151811061173c5761173c614968565b6020026020010151610c9a565b8061175381614994565b9150506116b6565b505050505050565b6040516bffffffffffffffffffffffff19606086901b166020820152603481018490526054810183905260748101829052600090609401604051602081830303815290604052805190602001209050949350505050565b3330146117d95760405162461bcd60e51b8152600401610b099061491a565b825184511480156117eb575081518451145b80156117f8575080518451145b8015611805575084518451145b61188c5760405162461bcd60e51b815260206004820152604c60248201527f45524332304775696c643a2057726f6e67206c656e677468206f66206173736560448201527f742c20746f2c2066756e6374696f6e5369676e6174757265206f7220616c6c6f60648201526b77616e63652061727261797360a01b608482015260a401610b09565b60005b8451811015611a1e5783516000908590839081106118af576118af614968565b60200260200101516001600160e01b03191614156119205760405162461bcd60e51b815260206004820152602860248201527f45524332304775696c643a20456d707479207369676e617475726573206e6f7460448201526708185b1b1bddd95960c21b6064820152608401610b09565b60015486516001600160a01b0390911690639b2dccdd9088908490811061194957611949614968565b602002602001015187848151811061196357611963614968565b602002602001015187858151811061197d5761197d614968565b602002602001015187868151811061199757611997614968565b60200260200101518787815181106119b1576119b1614968565b60200260200101516040518663ffffffff1660e01b81526004016119d99594939291906148df565b600060405180830381600087803b1580156119f357600080fd5b505af1158015611a07573d6000803e3d6000fd5b505050508080611a1690614994565b91505061188f565b5060015460405163fd9233a960e01b81526000916001600160a01b03169063fd9233a990611a76908490309081907f3f330ff86dd1b379b10f18bab5301bb628f28784f70482a01774042ed08621d5906004016149af565b60206040518083038186803b158015611a8e57600080fd5b505afa158015611aa2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ac691906149e2565b11611b395760405162461bcd60e51b815260206004820152603b60248201527f45524332304775696c643a20736574436f6e6669672066756e6374696f6e206160448201527f6c6c6f77616e63652063616e74206265207475726e6564206f666600000000006064820152608401610b09565b60015460405163fd9233a960e01b81526000916001600160a01b03169063fd9233a990611b90908490309081907fa5234bce363054cb38e3dfeca861627611d626c5c363ab716da0106f1600399c906004016149af565b60206040518083038186803b158015611ba857600080fd5b505afa158015611bbc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611be091906149e2565b11611c535760405162461bcd60e51b815260206004820152603f60248201527f45524332304775696c643a207365745065726d697373696f6e2066756e63746960448201527f6f6e20616c6c6f77616e63652063616e74206265207475726e6564206f6666006064820152608401610b09565b60015460405163fd9233a960e01b81526000916001600160a01b03169063fd9233a990611caa908490309081907f29b412e31bd60c46f11150420851edff43d71c82bd81c13331d702842993c937906004016149af565b60206040518083038186803b158015611cc257600080fd5b505afa158015611cd6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cfa91906149e2565b11610c935760405162461bcd60e51b8152602060048201526044602482018190527f45524332304775696c643a207365745065726d697373696f6e44656c61792066908201527f756e6374696f6e20616c6c6f77616e63652063616e74206265207475726e65646064820152631037b33360e11b608482015260a401610b09565b600061099f612710610999600554610993600d5490565b611d9b81612d4a565b50565b6060600082516001600160401b03811115611dbb57611dbb613c5d565b604051908082528060200260200182016040528015611de4578160200160208202803683370190505b50905060005b8351811015611e5a57611e2b848281518110611e0857611e08614968565b60200260200101516001600160a01b03166000908152600f602052604090205490565b828281518110611e3d57611e3d614968565b602090810291909101015280611e5281614994565b915050611dea565b5092915050565b6047546001600160a01b03163314611ebb5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b09565b6001600160a01b038116611f205760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b09565b611d9b81612cf8565b6000610a3382846149fb565b6000610a338284614a1a565b6000611f4c60095490565b600b5410611fbb5760405162461bcd60e51b815260206004820152603660248201527f45524332304775696c643a204d6178696d756d20616d6f756e74206f662061636044820152751d1a5d99481c1c9bdc1bdcd85b1cc81c995858da195960521b6064820152608401610b09565b611fc361097c565b336000908152600f602052604090205410156120395760405162461bcd60e51b815260206004820152602f60248201527f45524332304775696c643a204e6f7420656e6f75676820766f74657320746f2060448201526e18dc99585d19481c1c9bdc1bdcd85b608a1b6064820152608401610b09565b8551875114801561204b575084518751145b6120b45760405162461bcd60e51b815260206004820152603460248201527f45524332304775696c643a2057726f6e67206c656e677468206f6620746f2c2060448201527364617461206f722076616c75652061727261797360601b6064820152608401610b09565b600087511161211f5760405162461bcd60e51b815260206004820152603160248201527f45524332304775696c643a20746f2c20646174612076616c7565206172726179604482015270732063616e6e6f7420626520656d70747960781b6064820152608401610b09565b60005b87518110156121da5760015488516001600160a01b039091169089908390811061214e5761214e614968565b60200260200101516001600160a01b031614156121c85760405162461bcd60e51b815260206004820152603260248201527f45524332304775696c643a2043616e742063616c6c207065726d697373696f6e604482015271207265676973747279206469726563746c7960701b6064820152608401610b09565b806121d281614994565b915050612122565b50600a546040516bffffffffffffffffffffffff193360601b166020820152426034820152605481019190915260009060740160405160208183030381529060405280519060200120905061223b6001600a54612cec90919063ffffffff16565b600a55600081815260126020526040902080546001600160a01b0319163317815542600182018190556003546122719190612cec565b6002820155885161228b90600383019060208c0190613a34565b5087516122a190600483019060208b0190613a99565b5086516122b790600583019060208a0190613af2565b5084516122cd9060068301906020880190613b2d565b5083516122e39060078301906020870190613b2d565b506122ef866001612cec565b6001600160401b0381111561230657612306613c5d565b60405190808252806020026020018201604052801561232f578160200160208202803683370190505b508051612346916009840191602090910190613af2565b5060088101805460ff19166001908117909155600b5461236591612cec565b600b558160008051602061532c833981519152600160405190815260200160405180910390a250601380546001810182556000919091527f66de8ffda797e3de9c05e8fc57b3bf0ec28a930d40b0d285d93c06501cf6a09001819055979650505050505050565b60008060006123db8585613610565b915091506123e88161367d565b509392505050565b60008381526012602052604090206002015442106124625760405162461bcd60e51b815260206004820152602960248201527f45524332304775696c643a2050726f706f73616c20656e6465642c2063616e74604482015268081899481d9bdd195960ba1b6064820152608401610b09565b80612482856001600160a01b03166000908152600f602052604090205490565b101580156124b7575060008381526012602090815260408083206001600160a01b0388168452600a0190915290206001015481115b6125125760405162461bcd60e51b815260206004820152602660248201527f45524332304775696c643a20496e76616c696420766f74696e67506f77657220604482015265185b5bdd5b9d60d21b6064820152608401610b09565b60008381526012602090815260408083206001600160a01b0388168452600a019091529020541580612568575060008381526012602090815260408083206001600160a01b0388168452600a0190915290205482145b6125da5760405162461bcd60e51b815260206004820152603f60248201527f45524332304775696c643a2043616e74206368616e676520616374696f6e207660448201527f6f7465642c206f6e6c7920696e63726561736520766f74696e67506f776572006064820152608401610b09565b60008381526012602081815260408084206001600160a01b0389168552600a8101835290842060010154938790529190526009018054612649928492612643928790811061262a5761262a614968565b90600052602060002001546127d490919063ffffffff16565b90612cec565b600084815260126020526040902060090180548490811061266c5761266c614968565b6000918252602080832091909101929092558481526012825260408082206001600160a01b038816808452600a9091018452918190208581556001018490558051918252918101839052839185917f583c62f152711bcb1ca6186c1065821ff17a7cbe226dcb559a1c889dcf0d769b910160405180910390a3600754156114d35760006127106127076008543a61383890919063ffffffff16565b60075490611f29565b9050804710610c935760405133908290600081818185875af1925050503d806000811461104b576040519150601f19603f3d011682016040523d82523d6000602084013e61104b565b600054610100900460ff1680612772575060005460ff16155b61278e5760405162461bcd60e51b8152600401610b0990614891565b600054610100900460ff161580156127b0576000805461ffff19166101011790555b6127b861384e565b6127c06138b8565b8015611d9b576000805461ff001916905550565b6000610a338284614a3c565b6001600160a01b038b166128455760405162461bcd60e51b815260206004820152602660248201527f45524332304775696c643a20746f6b656e2063616e74206265207a65726f206160448201526564647265737360d01b6064820152608401610b09565b60008a116128655760405162461bcd60e51b8152600401610b0990614a53565b898210156128855760405162461bcd60e51b8152600401610b0990614aa1565b600088116128a55760405162461bcd60e51b8152600401610b0990614afe565b85516128b8906002906020890190613b2d565b506000805462010000600160b01b031916620100006001600160a01b038e16021790556040516128e790613ba0565b604051809103906000f080158015612903573d6000803e3d6000fd5b50600e80546001600160a01b0319166001600160a01b0392831690811790915560005460405163485cc95560e01b81526201000090910490921660048301523060248301529063485cc95590604401600060405180830381600087803b15801561296c57600080fd5b505af1158015612980573d6000803e3d6000fd5b50505060038b905550600489815560058990556006889055600786905560088590556009849055600c839055600180546001600160a01b0319166001600160a01b0384169081178255604051639b2dccdd60e01b81529092639b2dccdd92612a119260009230927f3f330ff86dd1b379b10f18bab5301bb628f28784f70482a01774042ed08621d5928592016148df565b600060405180830381600087803b158015612a2b57600080fd5b505af1158015612a3f573d6000803e3d6000fd5b505060018054604051639b2dccdd60e01b81526001600160a01b039091169350639b2dccdd9250612a9c9160009130917fa5234bce363054cb38e3dfeca861627611d626c5c363ab716da0106f1600399c918491906004016148df565b600060405180830381600087803b158015612ab657600080fd5b505af1158015612aca573d6000803e3d6000fd5b505060018054604051639b2dccdd60e01b81526001600160a01b039091169350639b2dccdd9250612b279160009130917f29b412e31bd60c46f11150420851edff43d71c82bd81c13331d702842993c937918491906004016148df565b600060405180830381600087803b158015612b4157600080fd5b505af1158015612b55573d6000803e3d6000fd5b505060018054604051639b2dccdd60e01b81526001600160a01b039091169350639b2dccdd9250612bb29160009130917f785b3ed8f1babbb20b6a85d572b5e50637a4c77796e0e444290d8b90490101d6918491906004016148df565b600060405180830381600087803b158015612bcc57600080fd5b505af1158015612be0573d6000803e3d6000fd5b505050505050505050505050505050565b333014612c665760405162461bcd60e51b815260206004820152603f60248201527f45524332304775696c643a204f6e6c792063616c6c61626c652062792045524360448201527f32306775696c6420697473656c66207768656e20696e697469616c697a6564006064820152608401610b09565b60008811612c865760405162461bcd60e51b8152600401610b0990614a53565b87811015612ca65760405162461bcd60e51b8152600401610b0990614aa1565b60008611612cc65760405162461bcd60e51b8152600401610b0990614afe565b600397909755600495909555600593909355600691909155600755600855600955600c55565b6000610a338284614b5b565b604780546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60145460ff1615612da95760405162461bcd60e51b8152602060048201526024808201527f45524332304775696c643a2050726f706f73616c20756e6465722065786563756044820152633a34b7b760e11b6064820152608401610b09565b600160008281526012602052604090206008015460ff166004811115612dd157612dd16143b8565b14612e2c5760405162461bcd60e51b815260206004820152602560248201527f45524332304775696c643a2050726f706f73616c20616c72656164792065786560448201526418dd5d195960da1b6064820152608401610b09565b6000818152601260205260409020600201544211612e9a5760405162461bcd60e51b815260206004820152602560248201527f45524332304775696c643a2050726f706f73616c206861736e277420656e646560448201526419081e595d60da1b6064820152608401610b09565b600060015b600083815260126020526040902060090154811015612f7457612ec0611d7b565b6000848152601260205260409020600901805483908110612ee357612ee3614968565b906000526020600020015410158015612f5957506000838152601260205260409020600901805483908110612f1a57612f1a614968565b9060005260206000200154601260008581526020019081526020016000206009018281548110612f4c57612f4c614968565b9060005260206000200154115b15612f62578091505b80612f6c81614994565b915050612e9f565b81612fc1576000838152601260205260409020600801805460ff19166002908117909155839060008051602061532c833981519152905b60405190815260200160405180910390a26135fa565b6004546000848152601260205260409020600201544291612fe29190612cec565b101561301e576000838152601260205260409020600801805460ff19166004908117909155839060008051602061532c83398151915290612fab565b600083815260126020526040812060088101805460ff19166003179055600901546130669061304e9060016127d4565b60008681526012602052604090206003015490611f35565b905061307d6130768460016127d4565b8290611f29565b9150600061308b8383612cec565b90505b808310156135d45760008581526012602052604081206003018054859081106130b9576130b9614968565b6000918252602090912001546001600160a01b031614801590613113575060008581526012602052604081206004018054859081106130fa576130fa614968565b90600052602060002001805461310f90614856565b9050115b156135c257600085815260126020526040812060040180546131da91908690811061314057613140614968565b90600052602060002001805461315590614856565b80601f016020809104026020016040519081016040528092919081815260200182805461318190614856565b80156131ce5780601f106131a3576101008083540402835291602001916131ce565b820191906000526020600020905b8154815290600101906020018083116131b157829003601f168201915b50505050506020015190565b905060008060126000898152602001908152602001600020600301868154811061320657613206614968565b60009182526020808320909101548a835260129091526040822060050180546001600160a01b039092169350908890811061324357613243614968565b600091825260209091200154905063a9059cbb60e01b6001600160e01b031985161480613280575063095ea7b360e01b6001600160e01b03198516145b1561339b5760008981526012602052604090206003018054889081106132a8576132a8614968565b60009182526020808320909101548b8352601290915260409091206004018054635555555560e11b96506001600160a01b03909216945061339591899081106132f3576132f3614968565b90600052602060002001805461330890614856565b80601f016020809104026020016040519081016040528092919081815260200182805461333490614856565b80156133815780601f1061335657610100808354040283529160200191613381565b820191906000526020600020905b81548152906001019060200180831161336457829003601f168201915b505050505060248101516044909101519091565b90925090505b6001546040516306f09e0b60e01b81526001600160a01b03858116600483015230602483015284811660448301526001600160e01b03198716606483015260848201849052909116906306f09e0b9060a401600060405180830381600087803b15801561340757600080fd5b505af1925050508015613418575060015b61346a57613424614b73565b806308c379a0141561345e5750613439614b8f565b806134445750613460565b8060405162461bcd60e51b8152600401610b0991906140b9565b505b3d6000803e3d6000fd5b6014805460ff19166001179055600089815260126020526040812060030180548990811061349a5761349a614968565b60009182526020808320909101548c83526012909152604090912060050180546001600160a01b03909216918a9081106134d6576134d6614968565b9060005260206000200154601260008d81526020019081526020016000206004018a8154811061350857613508614968565b9060005260206000200160405161351f9190614c18565b60006040518083038185875af1925050503d806000811461355c576040519150601f19603f3d011682016040523d82523d6000602084013e613561565b606091505b50509050806135b25760405162461bcd60e51b815260206004820181905260248201527f45524332304775696c643a2050726f706f73616c2063616c6c206661696c65646044820152606401610b09565b50506014805460ff191690555050505b826135cc81614994565b93505061308e565b8460008051602061532c833981519152600360405190815260200160405180910390a250505b600b546136089060016127d4565b600b55505050565b6000808251604114156136475760208301516040840151606085015160001a61363b87828585613918565b945094505050506109d2565b8251604014156136715760208301516040840151613666868383613a05565b9350935050506109d2565b506000905060026109d2565b6000816004811115613691576136916143b8565b141561369a5750565b60018160048111156136ae576136ae6143b8565b14156136fc5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610b09565b6002816004811115613710576137106143b8565b141561375e5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610b09565b6003816004811115613772576137726143b8565b14156137cb5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610b09565b60048160048111156137df576137df6143b8565b1415611d9b5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b6064820152608401610b09565b60008183106138475781610a33565b5090919050565b600054610100900460ff1680613867575060005460ff16155b6138835760405162461bcd60e51b8152600401610b0990614891565b600054610100900460ff161580156127c0576000805461ffff19166101011790558015611d9b576000805461ff001916905550565b600054610100900460ff16806138d1575060005460ff16155b6138ed5760405162461bcd60e51b8152600401610b0990614891565b600054610100900460ff1615801561390f576000805461ffff19166101011790555b6127c033612cf8565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561394f57506000905060036139fc565b8460ff16601b1415801561396757508460ff16601c14155b1561397857506000905060046139fc565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156139cc573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166139f5576000600192509250506139fc565b9150600090505b94509492505050565b6000806001600160ff1b03831660ff84901c601b01613a2687828885613918565b935093505050935093915050565b828054828255906000526020600020908101928215613a89579160200282015b82811115613a8957825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190613a54565b50613a95929150613bad565b5090565b828054828255906000526020600020908101928215613ae6579160200282015b82811115613ae65782518051613ad6918491602090910190613b2d565b5091602001919060010190613ab9565b50613a95929150613bc2565b828054828255906000526020600020908101928215613a89579160200282015b82811115613a89578251825591602001919060010190613b12565b828054613b3990614856565b90600052602060002090601f016020900481019282613b5b5760008555613a89565b82601f10613b7457805160ff1916838001178555613a89565b82800160010185558215613a895791820182811115613a89578251825591602001919060010190613b12565b61067780614cb583390190565b5b80821115613a955760008155600101613bae565b80821115613a95576000613bd68282613bdf565b50600101613bc2565b508054613beb90614856565b6000825580601f10613bfb575050565b601f016020900490600052602060002090810190611d9b9190613bad565b6020808252825182820181905260009190848201906040850190845b81811015613c5157835183529284019291840191600101613c35565b50909695505050505050565b634e487b7160e01b600052604160045260246000fd5b601f8201601f191681016001600160401b0381118282101715613c9857613c98613c5d565b6040525050565b600082601f830112613cb057600080fd5b81356001600160401b03811115613cc957613cc9613c5d565b604051613ce0601f8301601f191660200182613c73565b818152846020838601011115613cf557600080fd5b816020850160208301376000918101602001919091529392505050565b600060208284031215613d2457600080fd5b81356001600160401b03811115613d3a57600080fd5b613d4684828501613c9f565b949350505050565b80356001600160a01b0381168114613d6557600080fd5b919050565b60008060408385031215613d7d57600080fd5b82359150613d8d60208401613d4e565b90509250929050565b60006001600160401b03821115613daf57613daf613c5d565b5060051b60200190565b600082601f830112613dca57600080fd5b81356020613dd782613d96565b604051613de48282613c73565b83815260059390931b8501820192828101915086841115613e0457600080fd5b8286015b84811015613e2657613e1981613d4e565b8352918301918301613e08565b509695505050505050565b600082601f830112613e4257600080fd5b81356020613e4f82613d96565b604051613e5c8282613c73565b83815260059390931b8501820192828101915086841115613e7c57600080fd5b8286015b84811015613e265780356001600160401b03811115613e9f5760008081fd5b613ead8986838b0101613c9f565b845250918301918301613e80565b600082601f830112613ecc57600080fd5b81356020613ed982613d96565b604051613ee68282613c73565b83815260059390931b8501820192828101915086841115613f0657600080fd5b8286015b84811015613e265780358352918301918301613f0a565b60008060008060008060c08789031215613f3a57600080fd5b86356001600160401b0380821115613f5157600080fd5b613f5d8a838b01613db9565b97506020890135915080821115613f7357600080fd5b613f7f8a838b01613e31565b96506040890135915080821115613f9557600080fd5b613fa18a838b01613ebb565b9550606089013594506080890135915080821115613fbe57600080fd5b613fca8a838b01613c9f565b935060a0890135915080821115613fe057600080fd5b50613fed89828a01613c9f565b9150509295509295509295565b6000806040838503121561400d57600080fd5b8235915060208301356001600160401b0381111561402a57600080fd5b61403685828601613c9f565b9150509250929050565b60008060006060848603121561405557600080fd5b505081359360208301359350604090920135919050565b6000815180845260005b8181101561409257602081850181015186830182015201614076565b818111156140a4576000602083870101525b50601f01601f19169290920160200192915050565b602081526000610a33602083018461406c565b60008060008060008060008060008060006101608c8e0312156140ee57600080fd5b6140f78c613d4e565b9a5060208c0135995060408c0135985060608c0135975060808c0135965060a08c0135955060c08c0135945060e08c013593506101008c0135925061413f6101208d01613d4e565b915061414e6101408d01613d4e565b90509295989b509295989b9093969950565b60006020828403121561417257600080fd5b5035919050565b600080600080600060a0868803121561419157600080fd5b8535945060208601359350604086013592506141af60608701613d4e565b915060808601356001600160401b038111156141ca57600080fd5b6141d688828901613c9f565b9150509295509295909350565b6000602082840312156141f557600080fd5b610a3382613d4e565b60008060008060008060008060008060006101608c8e03121561422057600080fd5b6142298c613d4e565b9a5060208c0135995060408c0135985060608c0135975060808c0135965060a08c01356001600160401b0381111561426057600080fd5b61426c8e828f01613c9f565b96505060c08c0135945060e08c013593506101008c013592506101208c0135915061414e6101408d01613d4e565b600080600080600080600080610100898b0312156142b757600080fd5b505086359860208801359850604088013597606081013597506080810135965060a0810135955060c0810135945060e0013592509050565b600081518084526020808501945080840160005b838110156143285781516001600160a01b031687529582019590820190600101614303565b509495945050505050565b600081518084526020808501808196508360051b8101915082860160005b8581101561437b57828403895261436984835161406c565b98850198935090840190600101614351565b5091979650505050505050565b600081518084526020808501945080840160005b838110156143285781518752958201959082019060010161439c565b634e487b7160e01b600052602160045260246000fd5b600581106143ec57634e487b7160e01b600052602160045260246000fd5b9052565b600061016060018060a01b038e1683528c60208401528b604084015280606084015261441e8184018c6142ef565b90508281036080840152614432818b614333565b905082810360a0840152614446818a614388565b90508760c084015282810360e0840152614460818861406c565b9050828103610100840152614475818761406c565b90506144856101208401866143ce565b8281036101408401526144988185614388565b9e9d5050505050505050505050505050565b6000806000606084860312156144bf57600080fd5b83356001600160401b03808211156144d657600080fd5b6144e287838801613ebb565b945060208601359150808211156144f857600080fd5b61450487838801613ebb565b9350604086013591508082111561451a57600080fd5b5061452786828701613ebb565b9150509250925092565b80358015158114613d6557600080fd5b6000806040838503121561455457600080fd5b82359150613d8d60208401614531565b600080600080600060a0868803121561457c57600080fd5b85356001600160401b038082111561459357600080fd5b61459f89838a01613ebb565b965060208801359150808211156145b557600080fd5b6145c189838a01613ebb565b955060408801359150808211156145d757600080fd5b6145e389838a01613ebb565b945060608801359150808211156145f957600080fd5b61460589838a01613db9565b9350608088013591508082111561461b57600080fd5b506141d688828901613e31565b6000806000806080858703121561463e57600080fd5b61464785613d4e565b966020860135965060408601359560600135945092505050565b600082601f83011261467257600080fd5b8135602061467f82613d96565b60405161468c8282613c73565b83815260059390931b85018201928281019150868411156146ac57600080fd5b8286015b84811015613e265780356001600160e01b0319811681146146d15760008081fd5b83529183019183016146b0565b600082601f8301126146ef57600080fd5b813560206146fc82613d96565b6040516147098282613c73565b83815260059390931b850182019282810191508684111561472957600080fd5b8286015b84811015613e265761473e81614531565b835291830191830161472d565b600080600080600060a0868803121561476357600080fd5b85356001600160401b038082111561477a57600080fd5b61478689838a01613db9565b9650602088013591508082111561479c57600080fd5b6147a889838a01613db9565b955060408801359150808211156147be57600080fd5b6147ca89838a01614661565b945060608801359150808211156147e057600080fd5b6147ec89838a01613ebb565b9350608088013591508082111561480257600080fd5b506141d6888289016146de565b60006020828403121561482157600080fd5b81356001600160401b0381111561483757600080fd5b613d4684828501613db9565b602081526000610a336020830184614388565b600181811c9082168061486a57607f821691505b6020821081141561488b57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b6001600160a01b0395861681529390941660208401526001600160e01b03199190911660408301526060820152901515608082015260a00190565b6020808252602e908201527f45524332304775696c643a204f6e6c792063616c6c61626c652062792045524360408201526d191833bab4b6321034ba39b2b63360911b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006000198214156149a8576149a861497e565b5060010190565b6001600160a01b0394851681529284166020840152921660408201526001600160e01b0319909116606082015260800190565b6000602082840312156149f457600080fd5b5051919050565b6000816000190483118215151615614a1557614a1561497e565b500290565b600082614a3757634e487b7160e01b600052601260045260246000fd5b500490565b600082821015614a4e57614a4e61497e565b500390565b6020808252602e908201527f45524332304775696c643a2070726f706f73616c2074696d652068617320746f60408201526d0206265206d6f72652074686120360941b606082015260800190565b6020808252603e908201527f45524332304775696c643a206c6f636b54696d652068617320746f206265206860408201527f6967686572206f7220657175616c20746f2070726f706f73616c54696d650000606082015260800190565b6020808252603c908201527f45524332304775696c643a20766f74696e6720706f77657220666f722065786560408201527f637574696f6e2068617320746f206265206d6f7265207468616e203000000000606082015260800190565b60008219821115614b6e57614b6e61497e565b500190565b600060033d1115614b8c5760046000803e5060005160e01c5b90565b600060443d1015614b9d5790565b6040516003193d81016004833e81513d6001600160401b038160248401118184111715614bcc57505050505090565b8285019150815181811115614be45750505050505090565b843d8701016020828501011115614bfe5750505050505090565b614c0d60208286010187613c73565b509095945050505050565b600080835481600182811c915080831680614c3457607f831692505b6020808410821415614c5457634e487b7160e01b86526022600452602486fd5b818015614c685760018114614c7957614ca6565b60ff19861689528489019650614ca6565b60008a81526020902060005b86811015614c9e5781548b820152908501908301614c85565b505084890196505b50949897505050505050505056fe60806040526001805460ff60a01b1916905534801561001d57600080fd5b5061064a8061002d6000396000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c8063485cc95511610066578063485cc9551461012f5780636e9960c314610142578063f3fef3a314610153578063f851a44014610166578063fc0c546a1461017957600080fd5b8063158ef93e1461009857806321df0da7146100c157806327e235e3146100ec57806347e7ef241461011a575b600080fd5b6001546100ac90600160a01b900460ff1681565b60405190151581526020015b60405180910390f35b6000546201000090046001600160a01b03165b6040516001600160a01b0390911681526020016100b8565b61010c6100fa366004610535565b60026020526000908152604090205481565b6040519081526020016100b8565b61012d610128366004610550565b610192565b005b61012d61013d36600461057a565b6102de565b6001546001600160a01b03166100d4565b61012d610161366004610550565b6103d9565b6001546100d4906001600160a01b031681565b6000546100d4906201000090046001600160a01b031681565b600154600160a01b900460ff166101f05760405162461bcd60e51b815260206004820152601a60248201527f546f6b656e5661756c743a204e6f7420696e6974696c697a656400000000000060448201526064015b60405180910390fd5b6001546001600160a01b0316331461020757600080fd5b6000546040516323b872dd60e01b81526001600160a01b0384811660048301523060248301526044820184905262010000909204909116906323b872dd90606401602060405180830381600087803b15801561026257600080fd5b505af1158015610276573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061029a91906105ad565b506001600160a01b0382166000908152600260205260409020546102be90826104fa565b6001600160a01b0390921660009081526002602052604090209190915550565b600054610100900460ff16806102f7575060005460ff16155b61035a5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016101e7565b600054610100900460ff1615801561037c576000805461ffff19166101011790555b600080546001600160a01b03808616620100000262010000600160b01b031990921691909117909155600180546001600160a81b03191691841691909117600160a01b17905580156103d4576000805461ff00191690555b505050565b600154600160a01b900460ff166104325760405162461bcd60e51b815260206004820152601a60248201527f546f6b656e5661756c743a204e6f7420696e6974696c697a656400000000000060448201526064016101e7565b6001546001600160a01b0316331461044957600080fd5b60005460405163a9059cbb60e01b81526001600160a01b03848116600483015260248201849052620100009092049091169063a9059cbb90604401602060405180830381600087803b15801561049e57600080fd5b505af11580156104b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104d691906105ad565b506001600160a01b0382166000908152600260205260409020546102be908261050d565b600061050682846105e5565b9392505050565b600061050682846105fd565b80356001600160a01b038116811461053057600080fd5b919050565b60006020828403121561054757600080fd5b61050682610519565b6000806040838503121561056357600080fd5b61056c83610519565b946020939093013593505050565b6000806040838503121561058d57600080fd5b61059683610519565b91506105a460208401610519565b90509250929050565b6000602082840312156105bf57600080fd5b8151801515811461050657600080fd5b634e487b7160e01b600052601160045260246000fd5b600082198211156105f8576105f86105cf565b500190565b60008282101561060f5761060f6105cf565b50039056fea26469706673582212206539bb9ef196850c812aea5710389efb414f01a9d3d7375775ee09011a60aeb164736f6c63430008080033fee62a9eec0be50eb061c711990ef0f1e17b40ea131d9347b0468acdaf8bf243a264697066735822122059fef800f77851fa77919cf4c7022ee00715401253d4136b0f751461746edbec64736f6c63430008080033'; - -const deployedBytecodes = { - [GuildImplementationType.SnapshotRepERC20Guild]: - deployedSnapshotRepErc20GuildBytecode, - [GuildImplementationType.DXDGuild]: deployedDXDGuildBytecode, -}; +// import { BigNumber } from 'ethers'; +import { useMemo, useEffect, useState } from 'react'; +import useJsonRpcProvider from '../web3/useJsonRpcProvider'; + +enum GuildImplementationType { + SnapshotRepERC20Guild = 'SnapshotRepERC20Guild', + DXDGuild = 'DXDGuild', + ERC20Guild = 'ERC20Guild', + IERC20Guild = 'IERC20Guild', +} + +export default function useGuildImplementationType(guildAddress) { + const [guildBytecode, setGuildBytecode] = useState(''); + const provider = useJsonRpcProvider(); + + useEffect(() => { + const getBytecode = async () => { + // get current guild bytecode; + const bytecode = await provider.getCode(guildAddress); + setGuildBytecode(bytecode); + }; + getBytecode(); + }, [guildAddress, provider]); + + const currentImplementation = useMemo(() => { + if (!guildBytecode) return ''; + + // compare current guild bytecode with other guilds implementation bytecode; + const match = Object.entries(deployedBytecodes).find(([_, bytecode]) => { + return guildBytecode === bytecode; + }); + + return match + ? GuildImplementationType[match[0]] + : GuildImplementationType.ERC20Guild; + }, [guildBytecode]); + + return currentImplementation; +} + +const deployedSnapshotRepErc20GuildBytecode = + '0x6080604052600436106102ae5760003560e01c80636e27d88911610166578063ae619234116100d3578063c0a4d64d1161008f578063f2fde38b1161006c578063f2fde38b146108cd578063f4732da6146108ed578063f5447c0a14610902578063f9a92d821461094b57005b8063c0a4d64d1461086f578063c93e01e314610884578063cac7d2051461089957005b8063ae619234146107b5578063b2c342d5146107ca578063b3b47061146107fa578063b7c15f8d1461081a578063b82bb2851461082f578063bcc3f3bd1461084f57005b806389c98c061161012257806389c98c06146106f75780638da5cb5b1461070c57806392b716541461072a578063a16fe3421461074a578063a5234bce14610768578063adf2c7b61461078857005b80636e27d8891461052f578063715018a61461064d57806377027ff414610662578063785b3ed8146106775780637fa0ff29146106975780638029eff1146106b757005b806322bafdff1161021c57806336f8f8d9116101d8578063430694cf116101b5578063430694cf146105c357806354f2f7af146105fa5780636140b814146106185780636c8b72f61461063857005b806336f8f8d91461054f5780633b72b3c71461056f5780633f330ff8146105a357005b806322bafdff146104745780632467ef94146104a157806329b412e3146104b65780632d5b17de146104d65780632d757c3e146104f6578063315a095d1461052f57005b80631626ba7e1161026b5780631626ba7e146103b057806316bbecde146103d057806317d7de7c146103f05780631a5007dd1461041257806321df0da7146104275780632229a0e21461045f57005b80623a40d0146102b7578063069dfc5b146102e2578063088af182146103165780630a366a6314610338578063130485fe1461035b57806313108d741461039057005b366102b557005b005b3480156102c357600080fd5b506102cc61096b565b6040516102d99190613e15565b60405180910390f35b3480156102ee57600080fd5b506102fd635555555560e11b81565b6040516001600160e01b031990911681526020016102d9565b34801561032257600080fd5b506102fd610331366004613f0e565b6020015190565b34801561034457600080fd5b5061034d6109c3565b6040519081526020016102d9565b34801561036757600080fd5b5061037b610376366004613f66565b6109eb565b604080519283526020830191909152016102d9565b34801561039c57600080fd5b5061034d6103ab36600461411d565b610a20565b3480156103bc57600080fd5b506102fd6103cb3660046141f6565b610ad3565b3480156103dc57600080fd5b506102b56103eb36600461423c565b610b19565b3480156103fc57600080fd5b50610405610b2a565b6040516102d991906142b5565b34801561041e57600080fd5b50600a5461034d565b34801561043357600080fd5b506000546201000090046001600160a01b03165b6040516001600160a01b0390911681526020016102d9565b34801561046b57600080fd5b5060135461034d565b34801561048057600080fd5b5061034d61048f3660046142c8565b60009081526079602052604090205490565b3480156104ad57600080fd5b50600b5461034d565b3480156104c257600080fd5b506102b56104d13660046142c8565b610bb3565b3480156104e257600080fd5b506102b56104f13660046142e1565b610c3c565b34801561050257600080fd5b5061034d61051136600461434b565b6001600160a01b03166000908152600f602052604090206001015490565b34801561053b57600080fd5b506102b561054a3660046142c8565b610da3565b34801561055b57600080fd5b506102b561056a366004614366565b610dfc565b34801561057b57600080fd5b506102fd7fa9059cbb2ab09eb219583f4a59a5d0623ade346d962bcd4e46b11da047c9049b81565b3480156105af57600080fd5b506102b56105be366004614414565b610fc2565b3480156105cf57600080fd5b506105e36105de3660046142c8565b610fdc565b6040516102d99b9a99989796959493929190614567565b34801561060657600080fd5b50600e546001600160a01b0316610447565b34801561062457600080fd5b506102b5610633366004614621565b61135f565b34801561064457600080fd5b5060075461034d565b34801561065957600080fd5b506102b5611460565b34801561066e57600080fd5b5060095461034d565b34801561068357600080fd5b506102b56106923660046146b8565b6114c6565b3480156106a357600080fd5b506102b56106b23660046146db565b611544565b3480156106c357600080fd5b506106e76106d23660046142c8565b60009081526010602052604090205460ff1690565b60405190151581526020016102d9565b34801561070357600080fd5b5060085461034d565b34801561071857600080fd5b506047546001600160a01b0316610447565b34801561073657600080fd5b5061034d61074536600461479f565b6115f4565b34801561075657600080fd5b506001546001600160a01b0316610447565b34801561077457600080fd5b506102b56107833660046148c2565b61164b565b34801561079457600080fd5b506107a86107a3366004614986565b611c0c565b6040516102d991906149df565b3480156107c157600080fd5b5061034d611cd4565b3480156107d657600080fd5b506106e76107e53660046142c8565b60009081526011602052604090205460ff1690565b34801561080657600080fd5b506102b56108153660046142c8565b611ceb565b34801561082657600080fd5b5060045461034d565b34801561083b57600080fd5b506107a861084a3660046149f2565b611cf7565b34801561085b57600080fd5b5061034d61086a36600461434b565b611da4565b34801561087b57600080fd5b50600c5461034d565b34801561089057600080fd5b5060035461034d565b3480156108a557600080fd5b506102fd7f095ea7b334ae44009aa867bfb386f5c3b4b443ac6f0ee573fa91c4608fbadfba81565b3480156108d957600080fd5b506102b56108e836600461434b565b611e2f565b3480156108f957600080fd5b50600d5461034d565b34801561090e57600080fd5b5061092c61091d366004613f0e565b60248101516044909101519091565b604080516001600160a01b0390931683526020830191909152016102d9565b34801561095757600080fd5b5061034d610966366004614a26565b611ef7565b606060138054806020026020016040519081016040528092919081815260200182805480156109b957602002820191906000526020600020905b8154815260200190600101908083116109a5575b5050505050905090565b60006109e66127106109e06006546109da600d5490565b90611f83565b90611f8f565b905090565b60008281526012602090815260408083206001600160a01b0385168452600a01909152902080546001909101545b9250929050565b600080610a31888888888888611f9b565b9050600060029054906101000a90046001600160a01b03166001600160a01b0316635439ad866040518163ffffffff1660e01b815260040160206040518083038186803b158015610a8157600080fd5b505afa158015610a95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ab99190614a50565b600082815260796020526040902055979650505050505050565b600080610ae361086a8585611fb6565b118015610afe575060008381526011602052604090205460ff165b610b09576000610b12565b630b135d3f60e11b5b9392505050565b610b2533848484611fd2565b505050565b606060028054610b3990614a69565b80601f0160208091040260200160405190810160405280929190818152602001828054610b6590614a69565b80156109b95780601f10610b87576101008083540402835291602001916109b9565b820191906000526020600020905b815481529060010190602001808311610b9557509395945050505050565b333014610bdb5760405162461bcd60e51b8152600401610bd290614aa4565b60405180910390fd5b6001546040516329b412e360e01b8152600481018390526001600160a01b03909116906329b412e390602401600060405180830381600087803b158015610c2157600080fd5b505af1158015610c35573d6000803e3d6000fd5b5050505050565b6000610c4a838787876115f4565b60008181526010602052604090205490915060ff1615610cb65760405162461bcd60e51b815260206004820152602160248201527f536e617073686f7445524332304775696c643a20416c726561647920766f74656044820152601960fa1b6064820152608401610bd2565b610d1782610d11836040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b90611fb6565b6001600160a01b0316836001600160a01b031614610d775760405162461bcd60e51b815260206004820181905260248201527f536e617073686f7445524332304775696c643a2057726f6e67207369676e65726044820152606401610bd2565b610d8383878787611fd2565b6000908152601060205260409020805460ff191660011790555050505050565b60405162461bcd60e51b815260206004820152602860248201527f536e617073686f7445524332304775696c643a20746f6b656e207661756c7420604482015267191a5cd8589b195960c21b6064820152608401610bd2565b600054610100900460ff1680610e15575060005460ff16155b610e315760405162461bcd60e51b8152600401610bd290614af2565b600054610100900460ff16158015610e53576000805461ffff19166101011790555b610e668c8c8c8c8c8c8c8c8c8c8c6123b9565b600160009054906101000a90046001600160a01b03166001600160a01b0316639b2dccdd60008e7f40c10f19c047ae7dfa66d6312b683d2ea3dfbcb4159e96b967c5f4b0a86f2842600060016040518663ffffffff1660e01b8152600401610ed2959493929190614b40565b600060405180830381600087803b158015610eec57600080fd5b505af1158015610f00573d6000803e3d6000fd5b50505050600160009054906101000a90046001600160a01b03166001600160a01b0316639b2dccdd60008e7f9dc29fac0ba6d4fc521c69c2b0c636d612e3343bc39ed934429b8876b0d12cba600060016040518663ffffffff1660e01b8152600401610f70959493929190614b40565b600060405180830381600087803b158015610f8a57600080fd5b505af1158015610f9e573d6000803e3d6000fd5b505050508015610fb4576000805461ff00191690555b505050505050505050505050565b610fd28888888888888888612442565b5050505050505050565b600081815260126020526040812080546001808301546002840154600985015486958695606095869586958995879586958895879592946001600160a01b0390921693600386019160048701916005880191611038919061253d565b600888015484546040805160208084028201810190925282815260068c019360078d019360ff9091169260098e0192918a918301828280156110a357602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611085575b5050505050975086805480602002602001604051908101604052809291908181526020016000905b828210156111775783829060005260206000200180546110ea90614a69565b80601f016020809104026020016040519081016040528092919081815260200182805461111690614a69565b80156111635780601f1061113857610100808354040283529160200191611163565b820191906000526020600020905b81548152906001019060200180831161114657829003601f168201915b5050505050815260200190600101906110cb565b505050509650858054806020026020016040519081016040528092919081815260200182805480156111c857602002820191906000526020600020905b8154815260200190600101908083116111b4575b505050505095508380546111db90614a69565b80601f016020809104026020016040519081016040528092919081815260200182805461120790614a69565b80156112545780601f1061122957610100808354040283529160200191611254565b820191906000526020600020905b81548152906001019060200180831161123757829003601f168201915b5050505050935082805461126790614a69565b80601f016020809104026020016040519081016040528092919081815260200182805461129390614a69565b80156112e05780601f106112b5576101008083540402835291602001916112e0565b820191906000526020600020905b8154815290600101906020018083116112c357829003601f168201915b505050505092508080548060200260200160405190810160405280929190818152602001828054801561133257602002820191906000526020600020905b81548152602001906001019080831161131e575b505050505090509b509b509b509b509b509b509b509b509b509b509b505091939597999b90929496989a50565b80518351148015611371575081518351145b6113e5576040805162461bcd60e51b81526020600482015260248101919091527f45524332304775696c643a2057726f6e67206c656e677468206f662070726f7060448201527f6f73616c4964732c20616374696f6e73206f7220766f74696e67506f776572736064820152608401610bd2565b60005b835181101561145a576114483385838151811061140757611407614b7b565b602002602001015185848151811061142157611421614b7b565b602002602001015185858151811061143b5761143b614b7b565b6020026020010151612549565b8061145281614ba7565b9150506113e8565b50505050565b6047546001600160a01b031633146114ba5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610bd2565b6114c4600061271d565b565b3330146115245760405162461bcd60e51b815260206004820152602660248201527f45524332304775696c643a204f6e6c792063616c6c61626c65206279207468656044820152650819dd5a5b1960d21b6064820152608401610bd2565b600091825260116020526040909120805460ff1916911515919091179055565b60005b85518110156115ec576115da86828151811061156557611565614b7b565b602002602001015186838151811061157f5761157f614b7b565b602002602001015186848151811061159957611599614b7b565b60200260200101518685815181106115b3576115b3614b7b565b60200260200101518686815181106115cd576115cd614b7b565b6020026020010151610c3c565b806115e481614ba7565b915050611547565b505050505050565b6040516bffffffffffffffffffffffff19606086901b166020820152603481018490526054810183905260748101829052600090609401604051602081830303815290604052805190602001209050949350505050565b33301461166a5760405162461bcd60e51b8152600401610bd290614aa4565b8251845114801561167c575081518451145b8015611689575080518451145b8015611696575084518451145b61171d5760405162461bcd60e51b815260206004820152604c60248201527f45524332304775696c643a2057726f6e67206c656e677468206f66206173736560448201527f742c20746f2c2066756e6374696f6e5369676e6174757265206f7220616c6c6f60648201526b77616e63652061727261797360a01b608482015260a401610bd2565b60005b84518110156118af57835160009085908390811061174057611740614b7b565b60200260200101516001600160e01b03191614156117b15760405162461bcd60e51b815260206004820152602860248201527f45524332304775696c643a20456d707479207369676e617475726573206e6f7460448201526708185b1b1bddd95960c21b6064820152608401610bd2565b60015486516001600160a01b0390911690639b2dccdd908890849081106117da576117da614b7b565b60200260200101518784815181106117f4576117f4614b7b565b602002602001015187858151811061180e5761180e614b7b565b602002602001015187868151811061182857611828614b7b565b602002602001015187878151811061184257611842614b7b565b60200260200101516040518663ffffffff1660e01b815260040161186a959493929190614b40565b600060405180830381600087803b15801561188457600080fd5b505af1158015611898573d6000803e3d6000fd5b5050505080806118a790614ba7565b915050611720565b5060015460405163fd9233a960e01b81526000916001600160a01b03169063fd9233a990611907908490309081907f3f330ff86dd1b379b10f18bab5301bb628f28784f70482a01774042ed08621d590600401614bc2565b60206040518083038186803b15801561191f57600080fd5b505afa158015611933573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119579190614a50565b116119ca5760405162461bcd60e51b815260206004820152603b60248201527f45524332304775696c643a20736574436f6e6669672066756e6374696f6e206160448201527f6c6c6f77616e63652063616e74206265207475726e6564206f666600000000006064820152608401610bd2565b60015460405163fd9233a960e01b81526000916001600160a01b03169063fd9233a990611a21908490309081907fa5234bce363054cb38e3dfeca861627611d626c5c363ab716da0106f1600399c90600401614bc2565b60206040518083038186803b158015611a3957600080fd5b505afa158015611a4d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a719190614a50565b11611ae45760405162461bcd60e51b815260206004820152603f60248201527f45524332304775696c643a207365745065726d697373696f6e2066756e63746960448201527f6f6e20616c6c6f77616e63652063616e74206265207475726e6564206f6666006064820152608401610bd2565b60015460405163fd9233a960e01b81526000916001600160a01b03169063fd9233a990611b3b908490309081907f29b412e31bd60c46f11150420851edff43d71c82bd81c13331d702842993c93790600401614bc2565b60206040518083038186803b158015611b5357600080fd5b505afa158015611b67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b8b9190614a50565b11610c355760405162461bcd60e51b8152602060048201526044602482018190527f45524332304775696c643a207365745065726d697373696f6e44656c61792066908201527f756e6374696f6e20616c6c6f77616e63652063616e74206265207475726e65646064820152631037b33360e11b608482015260a401610bd2565b6060600083516001600160401b03811115611c2957611c29613e59565b604051908082528060200260200182016040528015611c52578160200160208202803683370190505b50905060005b8451811015611ccc57611c9d858281518110611c7657611c76614b7b565b6020026020010151858381518110611c9057611c90614b7b565b6020026020010151611ef7565b828281518110611caf57611caf614b7b565b602090810291909101015280611cc481614ba7565b915050611c58565b509392505050565b60006109e66127106109e06005546109da600d5490565b611cf48161276f565b50565b6060600082516001600160401b03811115611d1457611d14613e59565b604051908082528060200260200182016040528015611d3d578160200160208202803683370190505b50905060005b8351811015611d9d57611d6e848281518110611d6157611d61614b7b565b6020026020010151611da4565b828281518110611d8057611d80614b7b565b602090810291909101015280611d9581614ba7565b915050611d43565b5092915050565b600080546040516370a0823160e01b81526001600160a01b03848116600483015262010000909204909116906370a082319060240160206040518083038186803b158015611df157600080fd5b505afa158015611e05573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e299190614a50565b92915050565b6047546001600160a01b03163314611e895760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610bd2565b6001600160a01b038116611eee5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610bd2565b611cf48161271d565b6000805460405163277166bf60e11b81526001600160a01b038581166004830152602482018590526201000090920490911690634ee2cd7e9060440160206040518083038186803b158015611f4b57600080fd5b505afa158015611f5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b129190614a50565b6000610b128284614bf5565b6000610b128284614c14565b6000611fab878787878787613035565b979650505050505050565b6000806000611fc585856134b9565b91509150611ccc81613526565b600083815260126020526040902060020154421061204c5760405162461bcd60e51b815260206004820152603160248201527f536e617073686f7445524332304775696c643a2050726f706f73616c20656e6460448201527019590b0818d85b9d081899481d9bdd1959607a1b6064820152608401610bd2565b6000838152607960205260409020548190612068908690611ef7565b10156120cd5760405162461bcd60e51b815260206004820152602e60248201527f536e617073686f7445524332304775696c643a20496e76616c696420766f746960448201526d1b99d41bddd95c88185b5bdd5b9d60921b6064820152608401610bd2565b60008381526012602090815260408083206001600160a01b0388168452600a0190915290206001015481116121625760405162461bcd60e51b815260206004820152603560248201527f536e617073686f7445524332304775696c643a2043616e7420646563726561736044820152746520766f74696e67506f77657220696e20766f746560581b6064820152608401610bd2565b60008381526012602090815260408083206001600160a01b0388168452600a0190915290205415806121b8575060008381526012602090815260408083206001600160a01b0388168452600a0190915290205482145b61223a5760405162461bcd60e51b815260206004820152604760248201527f536e617073686f7445524332304775696c643a2043616e74206368616e67652060448201527f616374696f6e20766f7465642c206f6e6c7920696e63726561736520766f74696064820152663733a837bbb2b960c91b608482015260a401610bd2565b60008381526012602081815260408084206001600160a01b0389168552600a81018352908420600101549387905291905260090180546122a99284926122a3928790811061228a5761228a614b7b565b906000526020600020015461253d90919063ffffffff16565b906136e1565b60008481526012602052604090206009018054849081106122cc576122cc614b7b565b6000918252602080832091909101929092558481526012825260408082206001600160a01b038816808452600a9091018452918190208581556001018490558051918252918101839052839185917f583c62f152711bcb1ca6186c1065821ff17a7cbe226dcb559a1c889dcf0d769b910160405180910390a36007541561145a5760006123706123676008543a6136ed90919063ffffffff16565b60075490611f83565b9050804710610c355760405133908290600081818185875af1925050503d8060008114610fd2576040519150601f19603f3d011682016040523d82523d6000602084013e610fd2565b600054610100900460ff16806123d2575060005460ff16155b6123ee5760405162461bcd60e51b8152600401610bd290614af2565b600054610100900460ff16158015612410576000805461ffff19166101011790555b6124238c8c8c8c8c8c8c8c8c8c8c613703565b8015610fb4576000805461ff0019169055505050505050505050505050565b3330146124b75760405162461bcd60e51b815260206004820152603f60248201527f45524332304775696c643a204f6e6c792063616c6c61626c652062792045524360448201527f32306775696c6420697473656c66207768656e20696e697469616c697a6564006064820152608401610bd2565b600088116124d75760405162461bcd60e51b8152600401610bd290614c36565b878110156124f75760405162461bcd60e51b8152600401610bd290614c84565b600086116125175760405162461bcd60e51b8152600401610bd290614ce1565b600397909755600495909555600593909355600691909155600755600855600955600c55565b6000610b128284614d3e565b60008381526012602052604090206002015442106125bb5760405162461bcd60e51b815260206004820152602960248201527f45524332304775696c643a2050726f706f73616c20656e6465642c2063616e74604482015268081899481d9bdd195960ba1b6064820152608401610bd2565b806125c585611da4565b101580156125fa575060008381526012602090815260408083206001600160a01b0388168452600a0190915290206001015481115b6126555760405162461bcd60e51b815260206004820152602660248201527f45524332304775696c643a20496e76616c696420766f74696e67506f77657220604482015265185b5bdd5b9d60d21b6064820152608401610bd2565b60008381526012602090815260408083206001600160a01b0388168452600a0190915290205415806126ab575060008381526012602090815260408083206001600160a01b0388168452600a0190915290205482145b61223a5760405162461bcd60e51b815260206004820152603f60248201527f45524332304775696c643a2043616e74206368616e676520616374696f6e207660448201527f6f7465642c206f6e6c7920696e63726561736520766f74696e67506f776572006064820152608401610bd2565b604780546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60145460ff16156127ce5760405162461bcd60e51b8152602060048201526024808201527f45524332304775696c643a2050726f706f73616c20756e6465722065786563756044820152633a34b7b760e11b6064820152608401610bd2565b600160008281526012602052604090206008015460ff1660048111156127f6576127f661452f565b146128515760405162461bcd60e51b815260206004820152602560248201527f45524332304775696c643a2050726f706f73616c20616c72656164792065786560448201526418dd5d195960da1b6064820152608401610bd2565b60008181526012602052604090206002015442116128bf5760405162461bcd60e51b815260206004820152602560248201527f45524332304775696c643a2050726f706f73616c206861736e277420656e646560448201526419081e595d60da1b6064820152608401610bd2565b600060015b600083815260126020526040902060090154811015612999576128e5611cd4565b600084815260126020526040902060090180548390811061290857612908614b7b565b90600052602060002001541015801561297e5750600083815260126020526040902060090180548390811061293f5761293f614b7b565b906000526020600020015460126000858152602001908152602001600020600901828154811061297157612971614b7b565b9060005260206000200154115b15612987578091505b8061299181614ba7565b9150506128c4565b816129e6576000838152601260205260409020600801805460ff191660029081179091558390600080516020615526833981519152905b60405190815260200160405180910390a261301f565b6004546000848152601260205260409020600201544291612a0791906136e1565b1015612a43576000838152601260205260409020600801805460ff191660049081179091558390600080516020615526833981519152906129d0565b600083815260126020526040812060088101805460ff1916600317905560090154612a8b90612a7390600161253d565b60008681526012602052604090206003015490611f8f565b9050612aa2612a9b84600161253d565b8290611f83565b91506000612ab083836136e1565b90505b80831015612ff9576000858152601260205260408120600301805485908110612ade57612ade614b7b565b6000918252602090912001546001600160a01b031614801590612b3857506000858152601260205260408120600401805485908110612b1f57612b1f614b7b565b906000526020600020018054612b3490614a69565b9050115b15612fe75760008581526012602052604081206004018054612bff919086908110612b6557612b65614b7b565b906000526020600020018054612b7a90614a69565b80601f0160208091040260200160405190810160405280929190818152602001828054612ba690614a69565b8015612bf35780601f10612bc857610100808354040283529160200191612bf3565b820191906000526020600020905b815481529060010190602001808311612bd657829003601f168201915b50505050506020015190565b9050600080601260008981526020019081526020016000206003018681548110612c2b57612c2b614b7b565b60009182526020808320909101548a835260129091526040822060050180546001600160a01b0390921693509088908110612c6857612c68614b7b565b600091825260209091200154905063a9059cbb60e01b6001600160e01b031985161480612ca5575063095ea7b360e01b6001600160e01b03198516145b15612dc0576000898152601260205260409020600301805488908110612ccd57612ccd614b7b565b60009182526020808320909101548b8352601290915260409091206004018054635555555560e11b96506001600160a01b039092169450612dba9189908110612d1857612d18614b7b565b906000526020600020018054612d2d90614a69565b80601f0160208091040260200160405190810160405280929190818152602001828054612d5990614a69565b8015612da65780601f10612d7b57610100808354040283529160200191612da6565b820191906000526020600020905b815481529060010190602001808311612d8957829003601f168201915b505050505060248101516044909101519091565b90925090505b6001546040516306f09e0b60e01b81526001600160a01b03858116600483015230602483015284811660448301526001600160e01b03198716606483015260848201849052909116906306f09e0b9060a401600060405180830381600087803b158015612e2c57600080fd5b505af1925050508015612e3d575060015b612e8f57612e49614d55565b806308c379a01415612e835750612e5e614d71565b80612e695750612e85565b8060405162461bcd60e51b8152600401610bd291906142b5565b505b3d6000803e3d6000fd5b6014805460ff191660011790556000898152601260205260408120600301805489908110612ebf57612ebf614b7b565b60009182526020808320909101548c83526012909152604090912060050180546001600160a01b03909216918a908110612efb57612efb614b7b565b9060005260206000200154601260008d81526020019081526020016000206004018a81548110612f2d57612f2d614b7b565b90600052602060002001604051612f449190614dfa565b60006040518083038185875af1925050503d8060008114612f81576040519150601f19603f3d011682016040523d82523d6000602084013e612f86565b606091505b5050905080612fd75760405162461bcd60e51b815260206004820181905260248201527f45524332304775696c643a2050726f706f73616c2063616c6c206661696c65646044820152606401610bd2565b50506014805460ff191690555050505b82612ff181614ba7565b935050612ab3565b84600080516020615526833981519152600360405190815260200160405180910390a250505b600b5461302d90600161253d565b600b55505050565b600061304060095490565b600b54106130af5760405162461bcd60e51b815260206004820152603660248201527f45524332304775696c643a204d6178696d756d20616d6f756e74206f662061636044820152751d1a5d99481c1c9bdc1bdcd85b1cc81c995858da195960521b6064820152608401610bd2565b6130b76109c3565b6130c033611da4565b10156131265760405162461bcd60e51b815260206004820152602f60248201527f45524332304775696c643a204e6f7420656e6f75676820766f74657320746f2060448201526e18dc99585d19481c1c9bdc1bdcd85b608a1b6064820152608401610bd2565b85518751148015613138575084518751145b6131a15760405162461bcd60e51b815260206004820152603460248201527f45524332304775696c643a2057726f6e67206c656e677468206f6620746f2c2060448201527364617461206f722076616c75652061727261797360601b6064820152608401610bd2565b600087511161320c5760405162461bcd60e51b815260206004820152603160248201527f45524332304775696c643a20746f2c20646174612076616c7565206172726179604482015270732063616e6e6f7420626520656d70747960781b6064820152608401610bd2565b60005b87518110156132c75760015488516001600160a01b039091169089908390811061323b5761323b614b7b565b60200260200101516001600160a01b031614156132b55760405162461bcd60e51b815260206004820152603260248201527f45524332304775696c643a2043616e742063616c6c207065726d697373696f6e604482015271207265676973747279206469726563746c7960701b6064820152608401610bd2565b806132bf81614ba7565b91505061320f565b50600a546040516bffffffffffffffffffffffff193360601b16602082015242603482015260548101919091526000906074016040516020818303038152906040528051906020012090506133286001600a546136e190919063ffffffff16565b600a55600081815260126020526040902080546001600160a01b03191633178155426001820181905560035461335e91906136e1565b6002820155885161337890600383019060208c0190613c30565b50875161338e90600483019060208b0190613c95565b5086516133a490600583019060208a0190613cee565b5084516133ba9060068301906020880190613d29565b5083516133d09060078301906020870190613d29565b506133dc8660016136e1565b6001600160401b038111156133f3576133f3613e59565b60405190808252806020026020018201604052801561341c578160200160208202803683370190505b508051613433916009840191602090910190613cee565b5060088101805460ff19166001908117909155600b54613452916136e1565b600b5581600080516020615526833981519152600160405190815260200160405180910390a250601380546001810182556000919091527f66de8ffda797e3de9c05e8fc57b3bf0ec28a930d40b0d285d93c06501cf6a09001819055979650505050505050565b6000808251604114156134f05760208301516040840151606085015160001a6134e487828585613b14565b94509450505050610a19565b82516040141561351a576020830151604084015161350f868383613c01565b935093505050610a19565b50600090506002610a19565b600081600481111561353a5761353a61452f565b14156135435750565b60018160048111156135575761355761452f565b14156135a55760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610bd2565b60028160048111156135b9576135b961452f565b14156136075760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610bd2565b600381600481111561361b5761361b61452f565b14156136745760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610bd2565b60048160048111156136885761368861452f565b1415611cf45760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b6064820152608401610bd2565b6000610b128284614e96565b60008183106136fc5781610b12565b5090919050565b6001600160a01b038b166137685760405162461bcd60e51b815260206004820152602660248201527f45524332304775696c643a20746f6b656e2063616e74206265207a65726f206160448201526564647265737360d01b6064820152608401610bd2565b60008a116137885760405162461bcd60e51b8152600401610bd290614c36565b898210156137a85760405162461bcd60e51b8152600401610bd290614c84565b600088116137c85760405162461bcd60e51b8152600401610bd290614ce1565b85516137db906002906020890190613d29565b506000805462010000600160b01b031916620100006001600160a01b038e160217905560405161380a90613d9c565b604051809103906000f080158015613826573d6000803e3d6000fd5b50600e80546001600160a01b0319166001600160a01b0392831690811790915560005460405163485cc95560e01b81526201000090910490921660048301523060248301529063485cc95590604401600060405180830381600087803b15801561388f57600080fd5b505af11580156138a3573d6000803e3d6000fd5b50505060038b905550600489815560058990556006889055600786905560088590556009849055600c839055600180546001600160a01b0319166001600160a01b0384169081178255604051639b2dccdd60e01b81529092639b2dccdd926139349260009230927f3f330ff86dd1b379b10f18bab5301bb628f28784f70482a01774042ed08621d592859201614b40565b600060405180830381600087803b15801561394e57600080fd5b505af1158015613962573d6000803e3d6000fd5b505060018054604051639b2dccdd60e01b81526001600160a01b039091169350639b2dccdd92506139bf9160009130917fa5234bce363054cb38e3dfeca861627611d626c5c363ab716da0106f1600399c91849190600401614b40565b600060405180830381600087803b1580156139d957600080fd5b505af11580156139ed573d6000803e3d6000fd5b505060018054604051639b2dccdd60e01b81526001600160a01b039091169350639b2dccdd9250613a4a9160009130917f29b412e31bd60c46f11150420851edff43d71c82bd81c13331d702842993c93791849190600401614b40565b600060405180830381600087803b158015613a6457600080fd5b505af1158015613a78573d6000803e3d6000fd5b505060018054604051639b2dccdd60e01b81526001600160a01b039091169350639b2dccdd9250613ad59160009130917f785b3ed8f1babbb20b6a85d572b5e50637a4c77796e0e444290d8b90490101d691849190600401614b40565b600060405180830381600087803b158015613aef57600080fd5b505af1158015613b03573d6000803e3d6000fd5b505050505050505050505050505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115613b4b5750600090506003613bf8565b8460ff16601b14158015613b6357508460ff16601c14155b15613b745750600090506004613bf8565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015613bc8573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116613bf157600060019250925050613bf8565b9150600090505b94509492505050565b6000806001600160ff1b03831660ff84901c601b01613c2287828885613b14565b935093505050935093915050565b828054828255906000526020600020908101928215613c85579160200282015b82811115613c8557825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190613c50565b50613c91929150613da9565b5090565b828054828255906000526020600020908101928215613ce2579160200282015b82811115613ce25782518051613cd2918491602090910190613d29565b5091602001919060010190613cb5565b50613c91929150613dbe565b828054828255906000526020600020908101928215613c85579160200282015b82811115613c85578251825591602001919060010190613d0e565b828054613d3590614a69565b90600052602060002090601f016020900481019282613d575760008555613c85565b82601f10613d7057805160ff1916838001178555613c85565b82800160010185558215613c855791820182811115613c85578251825591602001919060010190613d0e565b61067780614eaf83390190565b5b80821115613c915760008155600101613daa565b80821115613c91576000613dd28282613ddb565b50600101613dbe565b508054613de790614a69565b6000825580601f10613df7575050565b601f016020900490600052602060002090810190611cf49190613da9565b6020808252825182820181905260009190848201906040850190845b81811015613e4d57835183529284019291840191600101613e31565b50909695505050505050565b634e487b7160e01b600052604160045260246000fd5b601f8201601f191681016001600160401b0381118282101715613e9457613e94613e59565b6040525050565b600082601f830112613eac57600080fd5b81356001600160401b03811115613ec557613ec5613e59565b604051613edc601f8301601f191660200182613e6f565b818152846020838601011115613ef157600080fd5b816020850160208301376000918101602001919091529392505050565b600060208284031215613f2057600080fd5b81356001600160401b03811115613f3657600080fd5b613f4284828501613e9b565b949350505050565b80356001600160a01b0381168114613f6157600080fd5b919050565b60008060408385031215613f7957600080fd5b82359150613f8960208401613f4a565b90509250929050565b60006001600160401b03821115613fab57613fab613e59565b5060051b60200190565b600082601f830112613fc657600080fd5b81356020613fd382613f92565b604051613fe08282613e6f565b83815260059390931b850182019282810191508684111561400057600080fd5b8286015b848110156140225761401581613f4a565b8352918301918301614004565b509695505050505050565b600082601f83011261403e57600080fd5b8135602061404b82613f92565b6040516140588282613e6f565b83815260059390931b850182019282810191508684111561407857600080fd5b8286015b848110156140225780356001600160401b0381111561409b5760008081fd5b6140a98986838b0101613e9b565b84525091830191830161407c565b600082601f8301126140c857600080fd5b813560206140d582613f92565b6040516140e28282613e6f565b83815260059390931b850182019282810191508684111561410257600080fd5b8286015b848110156140225780358352918301918301614106565b60008060008060008060c0878903121561413657600080fd5b86356001600160401b038082111561414d57600080fd5b6141598a838b01613fb5565b9750602089013591508082111561416f57600080fd5b61417b8a838b0161402d565b9650604089013591508082111561419157600080fd5b61419d8a838b016140b7565b95506060890135945060808901359150808211156141ba57600080fd5b6141c68a838b01613e9b565b935060a08901359150808211156141dc57600080fd5b506141e989828a01613e9b565b9150509295509295509295565b6000806040838503121561420957600080fd5b8235915060208301356001600160401b0381111561422657600080fd5b61423285828601613e9b565b9150509250929050565b60008060006060848603121561425157600080fd5b505081359360208301359350604090920135919050565b6000815180845260005b8181101561428e57602081850181015186830182015201614272565b818111156142a0576000602083870101525b50601f01601f19169290920160200192915050565b602081526000610b126020830184614268565b6000602082840312156142da57600080fd5b5035919050565b600080600080600060a086880312156142f957600080fd5b85359450602086013593506040860135925061431760608701613f4a565b915060808601356001600160401b0381111561433257600080fd5b61433e88828901613e9b565b9150509295509295909350565b60006020828403121561435d57600080fd5b610b1282613f4a565b60008060008060008060008060008060006101608c8e03121561438857600080fd5b6143918c613f4a565b9a5060208c0135995060408c0135985060608c0135975060808c0135965060a08c01356001600160401b038111156143c857600080fd5b6143d48e828f01613e9b565b96505060c08c0135945060e08c013593506101008c013592506101208c013591506144026101408d01613f4a565b90509295989b509295989b9093969950565b600080600080600080600080610100898b03121561443157600080fd5b505086359860208801359850604088013597606081013597506080810135965060a0810135955060c0810135945060e0013592509050565b600081518084526020808501945080840160005b838110156144a25781516001600160a01b03168752958201959082019060010161447d565b509495945050505050565b6000815180845260208085019450848260051b860182860160005b858110156144f25783830389526144e0838351614268565b988501989250908401906001016144c8565b5090979650505050505050565b600081518084526020808501945080840160005b838110156144a257815187529582019590820190600101614513565b634e487b7160e01b600052602160045260246000fd5b6005811061456357634e487b7160e01b600052602160045260246000fd5b9052565b600061016060018060a01b038e1683528c60208401528b60408401528060608401526145958184018c614469565b905082810360808401526145a9818b6144ad565b905082810360a08401526145bd818a6144ff565b90508760c084015282810360e08401526145d78188614268565b90508281036101008401526145ec8187614268565b90506145fc610120840186614545565b82810361014084015261460f81856144ff565b9e9d5050505050505050505050505050565b60008060006060848603121561463657600080fd5b83356001600160401b038082111561464d57600080fd5b614659878388016140b7565b9450602086013591508082111561466f57600080fd5b61467b878388016140b7565b9350604086013591508082111561469157600080fd5b5061469e868287016140b7565b9150509250925092565b80358015158114613f6157600080fd5b600080604083850312156146cb57600080fd5b82359150613f89602084016146a8565b600080600080600060a086880312156146f357600080fd5b85356001600160401b038082111561470a57600080fd5b61471689838a016140b7565b9650602088013591508082111561472c57600080fd5b61473889838a016140b7565b9550604088013591508082111561474e57600080fd5b61475a89838a016140b7565b9450606088013591508082111561477057600080fd5b61477c89838a01613fb5565b9350608088013591508082111561479257600080fd5b5061433e8882890161402d565b600080600080608085870312156147b557600080fd5b6147be85613f4a565b966020860135965060408601359560600135945092505050565b600082601f8301126147e957600080fd5b813560206147f682613f92565b6040516148038282613e6f565b83815260059390931b850182019282810191508684111561482357600080fd5b8286015b848110156140225780356001600160e01b0319811681146148485760008081fd5b8352918301918301614827565b600082601f83011261486657600080fd5b8135602061487382613f92565b6040516148808282613e6f565b83815260059390931b85018201928281019150868411156148a057600080fd5b8286015b84811015614022576148b5816146a8565b83529183019183016148a4565b600080600080600060a086880312156148da57600080fd5b85356001600160401b03808211156148f157600080fd5b6148fd89838a01613fb5565b9650602088013591508082111561491357600080fd5b61491f89838a01613fb5565b9550604088013591508082111561493557600080fd5b61494189838a016147d8565b9450606088013591508082111561495757600080fd5b61496389838a016140b7565b9350608088013591508082111561497957600080fd5b5061433e88828901614855565b6000806040838503121561499957600080fd5b82356001600160401b03808211156149b057600080fd5b6149bc86838701613fb5565b935060208501359150808211156149d257600080fd5b50614232858286016140b7565b602081526000610b1260208301846144ff565b600060208284031215614a0457600080fd5b81356001600160401b03811115614a1a57600080fd5b613f4284828501613fb5565b60008060408385031215614a3957600080fd5b614a4283613f4a565b946020939093013593505050565b600060208284031215614a6257600080fd5b5051919050565b600181811c90821680614a7d57607f821691505b60208210811415614a9e57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252602e908201527f45524332304775696c643a204f6e6c792063616c6c61626c652062792045524360408201526d191833bab4b6321034ba39b2b63360911b606082015260800190565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b6001600160a01b0395861681529390941660208401526001600160e01b03199190911660408301526060820152901515608082015260a00190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600019821415614bbb57614bbb614b91565b5060010190565b6001600160a01b0394851681529284166020840152921660408201526001600160e01b0319909116606082015260800190565b6000816000190483118215151615614c0f57614c0f614b91565b500290565b600082614c3157634e487b7160e01b600052601260045260246000fd5b500490565b6020808252602e908201527f45524332304775696c643a2070726f706f73616c2074696d652068617320746f60408201526d0206265206d6f72652074686120360941b606082015260800190565b6020808252603e908201527f45524332304775696c643a206c6f636b54696d652068617320746f206265206860408201527f6967686572206f7220657175616c20746f2070726f706f73616c54696d650000606082015260800190565b6020808252603c908201527f45524332304775696c643a20766f74696e6720706f77657220666f722065786560408201527f637574696f6e2068617320746f206265206d6f7265207468616e203000000000606082015260800190565b600082821015614d5057614d50614b91565b500390565b600060033d1115614d6e5760046000803e5060005160e01c5b90565b600060443d1015614d7f5790565b6040516003193d81016004833e81513d6001600160401b038160248401118184111715614dae57505050505090565b8285019150815181811115614dc65750505050505090565b843d8701016020828501011115614de05750505050505090565b614def60208286010187613e6f565b509095945050505050565b600080835481600182811c915080831680614e1657607f831692505b6020808410821415614e3657634e487b7160e01b86526022600452602486fd5b818015614e4a5760018114614e5b57614e88565b60ff19861689528489019650614e88565b60008a81526020902060005b86811015614e805781548b820152908501908301614e67565b505084890196505b509498975050505050505050565b60008219821115614ea957614ea9614b91565b50019056fe60806040526001805460ff60a01b1916905534801561001d57600080fd5b5061064a8061002d6000396000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c8063485cc95511610066578063485cc9551461012f5780636e9960c314610142578063f3fef3a314610153578063f851a44014610166578063fc0c546a1461017957600080fd5b8063158ef93e1461009857806321df0da7146100c157806327e235e3146100ec57806347e7ef241461011a575b600080fd5b6001546100ac90600160a01b900460ff1681565b60405190151581526020015b60405180910390f35b6000546201000090046001600160a01b03165b6040516001600160a01b0390911681526020016100b8565b61010c6100fa366004610535565b60026020526000908152604090205481565b6040519081526020016100b8565b61012d610128366004610550565b610192565b005b61012d61013d36600461057a565b6102de565b6001546001600160a01b03166100d4565b61012d610161366004610550565b6103d9565b6001546100d4906001600160a01b031681565b6000546100d4906201000090046001600160a01b031681565b600154600160a01b900460ff166101f05760405162461bcd60e51b815260206004820152601a60248201527f546f6b656e5661756c743a204e6f7420696e6974696c697a656400000000000060448201526064015b60405180910390fd5b6001546001600160a01b0316331461020757600080fd5b6000546040516323b872dd60e01b81526001600160a01b0384811660048301523060248301526044820184905262010000909204909116906323b872dd90606401602060405180830381600087803b15801561026257600080fd5b505af1158015610276573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061029a91906105ad565b506001600160a01b0382166000908152600260205260409020546102be90826104fa565b6001600160a01b0390921660009081526002602052604090209190915550565b600054610100900460ff16806102f7575060005460ff16155b61035a5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016101e7565b600054610100900460ff1615801561037c576000805461ffff19166101011790555b600080546001600160a01b03808616620100000262010000600160b01b031990921691909117909155600180546001600160a81b03191691841691909117600160a01b17905580156103d4576000805461ff00191690555b505050565b600154600160a01b900460ff166104325760405162461bcd60e51b815260206004820152601a60248201527f546f6b656e5661756c743a204e6f7420696e6974696c697a656400000000000060448201526064016101e7565b6001546001600160a01b0316331461044957600080fd5b60005460405163a9059cbb60e01b81526001600160a01b03848116600483015260248201849052620100009092049091169063a9059cbb90604401602060405180830381600087803b15801561049e57600080fd5b505af11580156104b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104d691906105ad565b506001600160a01b0382166000908152600260205260409020546102be908261050d565b600061050682846105e5565b9392505050565b600061050682846105fd565b80356001600160a01b038116811461053057600080fd5b919050565b60006020828403121561054757600080fd5b61050682610519565b6000806040838503121561056357600080fd5b61056c83610519565b946020939093013593505050565b6000806040838503121561058d57600080fd5b61059683610519565b91506105a460208401610519565b90509250929050565b6000602082840312156105bf57600080fd5b8151801515811461050657600080fd5b634e487b7160e01b600052601160045260246000fd5b600082198211156105f8576105f86105cf565b500190565b60008282101561060f5761060f6105cf565b50039056fea26469706673582212206539bb9ef196850c812aea5710389efb414f01a9d3d7375775ee09011a60aeb164736f6c63430008080033fee62a9eec0be50eb061c711990ef0f1e17b40ea131d9347b0468acdaf8bf243a2646970667358221220a4bd8a1bb7126a1e85671bc4ef38deaf25c4959cad72ee2e2ffe6372a4aa29c864736f6c63430008080033'; + +const deployedDXDGuildBytecode = + '0x60806040526004361061027e5760003560e01c80636c8b72f61161014e578063ae619234116100bb578063c0a4d64d11610077578063c0a4d64d14610848578063c93e01e31461085d578063cac7d20514610872578063f2fde38b146108a6578063f4732da6146108c6578063f5447c0a146108db57005b8063ae6192341461076b578063b2c342d514610780578063b3b47061146107b0578063b7c15f8d146107d0578063b82bb285146107e5578063bcc3f3bd1461081257005b80638029eff11161010a5780638029eff11461069a57806389c98c06146106da5780638da5cb5b146106ef57806392b716541461070d578063a16fe3421461072d578063a5234bce1461074b57005b80636c8b72f6146105fb5780636e27d88914610610578063715018a61461063057806377027ff414610645578063785b3ed81461065a5780637fa0ff291461067a57005b80632457e393116101ec57806336f8f8d9116101a857806336f8f8d9146105125780633b72b3c7146105325780633f330ff814610566578063430694cf1461058657806354f2f7af146105bd5780636140b814146105db57005b80632457e393146104445780632467ef941461046457806329b412e3146104795780632d5b17de146104995780632d757c3e146104b9578063315a095d146104f257005b80631626ba7e1161023b5780631626ba7e1461038057806316bbecde146103a057806317d7de7c146103c05780631a5007dd146103e257806321df0da7146103f75780632229a0e21461042f57005b80623a40d014610287578063069dfc5b146102b2578063088af182146102e65780630a366a6314610308578063130485fe1461032b57806313108d741461036057005b3661028557005b005b34801561029357600080fd5b5061029c610924565b6040516102a99190613c19565b60405180910390f35b3480156102be57600080fd5b506102cd635555555560e11b81565b6040516001600160e01b031990911681526020016102a9565b3480156102f257600080fd5b506102cd610301366004613d12565b6020015190565b34801561031457600080fd5b5061031d61097c565b6040519081526020016102a9565b34801561033757600080fd5b5061034b610346366004613d6a565b6109a4565b604080519283526020830191909152016102a9565b34801561036c57600080fd5b5061031d61037b366004613f21565b6109d9565b34801561038c57600080fd5b506102cd61039b366004613ffa565b6109f4565b3480156103ac57600080fd5b506102856103bb366004614040565b610a3a565b3480156103cc57600080fd5b506103d5610a4b565b6040516102a991906140b9565b3480156103ee57600080fd5b50600a5461031d565b34801561040357600080fd5b506000546201000090046001600160a01b03165b6040516001600160a01b0390911681526020016102a9565b34801561043b57600080fd5b5060135461031d565b34801561045057600080fd5b5061028561045f3660046140cc565b610ad4565b34801561047057600080fd5b50600b5461031d565b34801561048557600080fd5b50610285610494366004614160565b610c1a565b3480156104a557600080fd5b506102856104b4366004614179565b610c9a565b3480156104c557600080fd5b5061031d6104d43660046141e3565b6001600160a01b03166000908152600f602052604090206001015490565b3480156104fe57600080fd5b5061028561050d366004614160565b610df7565b34801561051e57600080fd5b5061028561052d3660046141fe565b610fb2565b34801561053e57600080fd5b506102cd7fa9059cbb2ab09eb219583f4a59a5d0623ade346d962bcd4e46b11da047c9049b81565b34801561057257600080fd5b5061028561058136600461429a565b61103b565b34801561059257600080fd5b506105a66105a1366004614160565b611055565b6040516102a99b9a999897969594939291906143f0565b3480156105c957600080fd5b50600e546001600160a01b0316610417565b3480156105e757600080fd5b506102856105f63660046144aa565b6113d8565b34801561060757600080fd5b5060075461031d565b34801561061c57600080fd5b5061028561062b366004614160565b6114d9565b34801561063c57600080fd5b506102856115cf565b34801561065157600080fd5b5060095461031d565b34801561066657600080fd5b50610285610675366004614541565b611635565b34801561068657600080fd5b50610285610695366004614564565b6116b3565b3480156106a657600080fd5b506106ca6106b5366004614160565b60009081526010602052604090205460ff1690565b60405190151581526020016102a9565b3480156106e657600080fd5b5060085461031d565b3480156106fb57600080fd5b506047546001600160a01b0316610417565b34801561071957600080fd5b5061031d610728366004614628565b611763565b34801561073957600080fd5b506001546001600160a01b0316610417565b34801561075757600080fd5b5061028561076636600461474b565b6117ba565b34801561077757600080fd5b5061031d611d7b565b34801561078c57600080fd5b506106ca61079b366004614160565b60009081526011602052604090205460ff1690565b3480156107bc57600080fd5b506102856107cb366004614160565b611d92565b3480156107dc57600080fd5b5060045461031d565b3480156107f157600080fd5b5061080561080036600461480f565b611d9e565b6040516102a99190614843565b34801561081e57600080fd5b5061031d61082d3660046141e3565b6001600160a01b03166000908152600f602052604090205490565b34801561085457600080fd5b50600c5461031d565b34801561086957600080fd5b5060035461031d565b34801561087e57600080fd5b506102cd7f095ea7b334ae44009aa867bfb386f5c3b4b443ac6f0ee573fa91c4608fbadfba81565b3480156108b257600080fd5b506102856108c13660046141e3565b611e61565b3480156108d257600080fd5b50600d5461031d565b3480156108e757600080fd5b506109056108f6366004613d12565b60248101516044909101519091565b604080516001600160a01b0390931683526020830191909152016102a9565b6060601380548060200260200160405190810160405280929190818152602001828054801561097257602002820191906000526020600020905b81548152602001906001019080831161095e575b5050505050905090565b600061099f612710610999600654610993600d5490565b90611f29565b90611f35565b905090565b60008281526012602090815260408083206001600160a01b0385168452600a01909152902080546001909101545b9250929050565b60006109e9878787878787611f41565b979650505050505050565b600080610a0461082d85856123cc565b118015610a1f575060008381526011602052604090205460ff165b610a2a576000610a33565b630b135d3f60e11b5b9392505050565b610a46338484846123f0565b505050565b606060028054610a5a90614856565b80601f0160208091040260200160405190810160405280929190818152602001828054610a8690614856565b80156109725780601f10610aa857610100808354040283529160200191610972565b820191906000526020600020905b815481529060010190602001808311610ab657509395945050505050565b600054610100900460ff1680610aed575060005460ff16155b610b125760405162461bcd60e51b8152600401610b0990614891565b60405180910390fd5b600054610100900460ff16158015610b34576000805461ffff19166101011790555b610b3c612759565b610b6f8c8c8c8c8c6040518060400160405280600881526020016711161111dd5a5b1960c21b8152508d8d8d8d8d610fb2565b60018054604051639b2dccdd60e01b81526001600160a01b0390911691639b2dccdd91610bc89160009187917f359afa49e07a90b2e02bddde33bfd011f2b5f03f7222fd6fa45906ec488a880d918491906004016148df565b600060405180830381600087803b158015610be257600080fd5b505af1158015610bf6573d6000803e3d6000fd5b505050508015610c0c576000805461ff00191690555b505050505050505050505050565b333014610c395760405162461bcd60e51b8152600401610b099061491a565b6001546040516329b412e360e01b8152600481018390526001600160a01b03909116906329b412e390602401600060405180830381600087803b158015610c7f57600080fd5b505af1158015610c93573d6000803e3d6000fd5b5050505050565b6000610ca883878787611763565b60008181526010602052604090205490915060ff1615610d0a5760405162461bcd60e51b815260206004820152601960248201527f45524332304775696c643a20416c726561647920766f746564000000000000006044820152606401610b09565b610d6b82610d65836040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b906123cc565b6001600160a01b0316836001600160a01b031614610dcb5760405162461bcd60e51b815260206004820152601860248201527f45524332304775696c643a2057726f6e67207369676e657200000000000000006044820152606401610b09565b610dd7838787876123f0565b6000908152601060205260409020805460ff191660011790555050505050565b336000908152600f6020526040902054811115610e755760405162461bcd60e51b815260206004820152603660248201527f45524332304775696c643a20556e61626c6520746f207769746864726177206d6044820152751bdc99481d1bdad95b9cc81d1a185b881b1bd8dad95960521b6064820152608401610b09565b336000908152600f60205260409020600101544211610ed65760405162461bcd60e51b815260206004820152601f60248201527f45524332304775696c643a20546f6b656e73207374696c6c206c6f636b6564006044820152606401610b09565b336000908152600f6020526040902054610ef090826127d4565b336000908152600f6020526040902055600d54610f0d90826127d4565b600d55600e5460405163f3fef3a360e01b8152336004820152602481018390526001600160a01b039091169063f3fef3a390604401600060405180830381600087803b158015610f5c57600080fd5b505af1158015610f70573d6000803e3d6000fd5b505060408051338152602081018590527f6352c5382c4a4578e712449ca65e83cdb392d045dfcf1cad9615189db2da244b93500190505b60405180910390a150565b600054610100900460ff1680610fcb575060005460ff16155b610fe75760405162461bcd60e51b8152600401610b0990614891565b600054610100900460ff16158015611009576000805461ffff19166101011790555b61101c8c8c8c8c8c8c8c8c8c8c8c6127e0565b8015610c0c576000805461ff0019169055505050505050505050505050565b61104b8888888888888888612bf1565b5050505050505050565b600081815260126020526040812080546001808301546002840154600985015486958695606095869586958995879586958895879592946001600160a01b03909216936003860191600487019160058801916110b191906127d4565b600888015484546040805160208084028201810190925282815260068c019360078d019360ff9091169260098e0192918a9183018282801561111c57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116110fe575b5050505050975086805480602002602001604051908101604052809291908181526020016000905b828210156111f057838290600052602060002001805461116390614856565b80601f016020809104026020016040519081016040528092919081815260200182805461118f90614856565b80156111dc5780601f106111b1576101008083540402835291602001916111dc565b820191906000526020600020905b8154815290600101906020018083116111bf57829003601f168201915b505050505081526020019060010190611144565b5050505096508580548060200260200160405190810160405280929190818152602001828054801561124157602002820191906000526020600020905b81548152602001906001019080831161122d575b5050505050955083805461125490614856565b80601f016020809104026020016040519081016040528092919081815260200182805461128090614856565b80156112cd5780601f106112a2576101008083540402835291602001916112cd565b820191906000526020600020905b8154815290600101906020018083116112b057829003601f168201915b505050505093508280546112e090614856565b80601f016020809104026020016040519081016040528092919081815260200182805461130c90614856565b80156113595780601f1061132e57610100808354040283529160200191611359565b820191906000526020600020905b81548152906001019060200180831161133c57829003601f168201915b50505050509250808054806020026020016040519081016040528092919081815260200182805480156113ab57602002820191906000526020600020905b815481526020019060010190808311611397575b505050505090509b509b509b509b509b509b509b509b509b509b509b505091939597999b90929496989a50565b805183511480156113ea575081518351145b61145e576040805162461bcd60e51b81526020600482015260248101919091527f45524332304775696c643a2057726f6e67206c656e677468206f662070726f7060448201527f6f73616c4964732c20616374696f6e73206f7220766f74696e67506f776572736064820152608401610b09565b60005b83518110156114d3576114c13385838151811061148057611480614968565b602002602001015185848151811061149a5761149a614968565b60200260200101518585815181106114b4576114b4614968565b60200260200101516123f0565b806114cb81614994565b915050611461565b50505050565b600e546040516311f9fbc960e21b8152336004820152602481018390526001600160a01b03909116906347e7ef2490604401600060405180830381600087803b15801561152557600080fd5b505af1158015611539573d6000803e3d6000fd5b5050336000908152600f60205260409020546115589250905082612cec565b336000908152600f6020526040902055600c54611576904290612cec565b336000908152600f6020526040902060010155600d546115969082612cec565b600d5560408051338152602081018390527fac87f20a77d28ee8bbb58ec87ea8fa968b3393efae1a368fd50b767c2847391c9101610fa7565b6047546001600160a01b031633146116295760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b09565b6116336000612cf8565b565b3330146116935760405162461bcd60e51b815260206004820152602660248201527f45524332304775696c643a204f6e6c792063616c6c61626c65206279207468656044820152650819dd5a5b1960d21b6064820152608401610b09565b600091825260116020526040909120805460ff1916911515919091179055565b60005b855181101561175b576117498682815181106116d4576116d4614968565b60200260200101518683815181106116ee576116ee614968565b602002602001015186848151811061170857611708614968565b602002602001015186858151811061172257611722614968565b602002602001015186868151811061173c5761173c614968565b6020026020010151610c9a565b8061175381614994565b9150506116b6565b505050505050565b6040516bffffffffffffffffffffffff19606086901b166020820152603481018490526054810183905260748101829052600090609401604051602081830303815290604052805190602001209050949350505050565b3330146117d95760405162461bcd60e51b8152600401610b099061491a565b825184511480156117eb575081518451145b80156117f8575080518451145b8015611805575084518451145b61188c5760405162461bcd60e51b815260206004820152604c60248201527f45524332304775696c643a2057726f6e67206c656e677468206f66206173736560448201527f742c20746f2c2066756e6374696f6e5369676e6174757265206f7220616c6c6f60648201526b77616e63652061727261797360a01b608482015260a401610b09565b60005b8451811015611a1e5783516000908590839081106118af576118af614968565b60200260200101516001600160e01b03191614156119205760405162461bcd60e51b815260206004820152602860248201527f45524332304775696c643a20456d707479207369676e617475726573206e6f7460448201526708185b1b1bddd95960c21b6064820152608401610b09565b60015486516001600160a01b0390911690639b2dccdd9088908490811061194957611949614968565b602002602001015187848151811061196357611963614968565b602002602001015187858151811061197d5761197d614968565b602002602001015187868151811061199757611997614968565b60200260200101518787815181106119b1576119b1614968565b60200260200101516040518663ffffffff1660e01b81526004016119d99594939291906148df565b600060405180830381600087803b1580156119f357600080fd5b505af1158015611a07573d6000803e3d6000fd5b505050508080611a1690614994565b91505061188f565b5060015460405163fd9233a960e01b81526000916001600160a01b03169063fd9233a990611a76908490309081907f3f330ff86dd1b379b10f18bab5301bb628f28784f70482a01774042ed08621d5906004016149af565b60206040518083038186803b158015611a8e57600080fd5b505afa158015611aa2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ac691906149e2565b11611b395760405162461bcd60e51b815260206004820152603b60248201527f45524332304775696c643a20736574436f6e6669672066756e6374696f6e206160448201527f6c6c6f77616e63652063616e74206265207475726e6564206f666600000000006064820152608401610b09565b60015460405163fd9233a960e01b81526000916001600160a01b03169063fd9233a990611b90908490309081907fa5234bce363054cb38e3dfeca861627611d626c5c363ab716da0106f1600399c906004016149af565b60206040518083038186803b158015611ba857600080fd5b505afa158015611bbc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611be091906149e2565b11611c535760405162461bcd60e51b815260206004820152603f60248201527f45524332304775696c643a207365745065726d697373696f6e2066756e63746960448201527f6f6e20616c6c6f77616e63652063616e74206265207475726e6564206f6666006064820152608401610b09565b60015460405163fd9233a960e01b81526000916001600160a01b03169063fd9233a990611caa908490309081907f29b412e31bd60c46f11150420851edff43d71c82bd81c13331d702842993c937906004016149af565b60206040518083038186803b158015611cc257600080fd5b505afa158015611cd6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cfa91906149e2565b11610c935760405162461bcd60e51b8152602060048201526044602482018190527f45524332304775696c643a207365745065726d697373696f6e44656c61792066908201527f756e6374696f6e20616c6c6f77616e63652063616e74206265207475726e65646064820152631037b33360e11b608482015260a401610b09565b600061099f612710610999600554610993600d5490565b611d9b81612d4a565b50565b6060600082516001600160401b03811115611dbb57611dbb613c5d565b604051908082528060200260200182016040528015611de4578160200160208202803683370190505b50905060005b8351811015611e5a57611e2b848281518110611e0857611e08614968565b60200260200101516001600160a01b03166000908152600f602052604090205490565b828281518110611e3d57611e3d614968565b602090810291909101015280611e5281614994565b915050611dea565b5092915050565b6047546001600160a01b03163314611ebb5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b09565b6001600160a01b038116611f205760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b09565b611d9b81612cf8565b6000610a3382846149fb565b6000610a338284614a1a565b6000611f4c60095490565b600b5410611fbb5760405162461bcd60e51b815260206004820152603660248201527f45524332304775696c643a204d6178696d756d20616d6f756e74206f662061636044820152751d1a5d99481c1c9bdc1bdcd85b1cc81c995858da195960521b6064820152608401610b09565b611fc361097c565b336000908152600f602052604090205410156120395760405162461bcd60e51b815260206004820152602f60248201527f45524332304775696c643a204e6f7420656e6f75676820766f74657320746f2060448201526e18dc99585d19481c1c9bdc1bdcd85b608a1b6064820152608401610b09565b8551875114801561204b575084518751145b6120b45760405162461bcd60e51b815260206004820152603460248201527f45524332304775696c643a2057726f6e67206c656e677468206f6620746f2c2060448201527364617461206f722076616c75652061727261797360601b6064820152608401610b09565b600087511161211f5760405162461bcd60e51b815260206004820152603160248201527f45524332304775696c643a20746f2c20646174612076616c7565206172726179604482015270732063616e6e6f7420626520656d70747960781b6064820152608401610b09565b60005b87518110156121da5760015488516001600160a01b039091169089908390811061214e5761214e614968565b60200260200101516001600160a01b031614156121c85760405162461bcd60e51b815260206004820152603260248201527f45524332304775696c643a2043616e742063616c6c207065726d697373696f6e604482015271207265676973747279206469726563746c7960701b6064820152608401610b09565b806121d281614994565b915050612122565b50600a546040516bffffffffffffffffffffffff193360601b166020820152426034820152605481019190915260009060740160405160208183030381529060405280519060200120905061223b6001600a54612cec90919063ffffffff16565b600a55600081815260126020526040902080546001600160a01b0319163317815542600182018190556003546122719190612cec565b6002820155885161228b90600383019060208c0190613a34565b5087516122a190600483019060208b0190613a99565b5086516122b790600583019060208a0190613af2565b5084516122cd9060068301906020880190613b2d565b5083516122e39060078301906020870190613b2d565b506122ef866001612cec565b6001600160401b0381111561230657612306613c5d565b60405190808252806020026020018201604052801561232f578160200160208202803683370190505b508051612346916009840191602090910190613af2565b5060088101805460ff19166001908117909155600b5461236591612cec565b600b558160008051602061532c833981519152600160405190815260200160405180910390a250601380546001810182556000919091527f66de8ffda797e3de9c05e8fc57b3bf0ec28a930d40b0d285d93c06501cf6a09001819055979650505050505050565b60008060006123db8585613610565b915091506123e88161367d565b509392505050565b60008381526012602052604090206002015442106124625760405162461bcd60e51b815260206004820152602960248201527f45524332304775696c643a2050726f706f73616c20656e6465642c2063616e74604482015268081899481d9bdd195960ba1b6064820152608401610b09565b80612482856001600160a01b03166000908152600f602052604090205490565b101580156124b7575060008381526012602090815260408083206001600160a01b0388168452600a0190915290206001015481115b6125125760405162461bcd60e51b815260206004820152602660248201527f45524332304775696c643a20496e76616c696420766f74696e67506f77657220604482015265185b5bdd5b9d60d21b6064820152608401610b09565b60008381526012602090815260408083206001600160a01b0388168452600a019091529020541580612568575060008381526012602090815260408083206001600160a01b0388168452600a0190915290205482145b6125da5760405162461bcd60e51b815260206004820152603f60248201527f45524332304775696c643a2043616e74206368616e676520616374696f6e207660448201527f6f7465642c206f6e6c7920696e63726561736520766f74696e67506f776572006064820152608401610b09565b60008381526012602081815260408084206001600160a01b0389168552600a8101835290842060010154938790529190526009018054612649928492612643928790811061262a5761262a614968565b90600052602060002001546127d490919063ffffffff16565b90612cec565b600084815260126020526040902060090180548490811061266c5761266c614968565b6000918252602080832091909101929092558481526012825260408082206001600160a01b038816808452600a9091018452918190208581556001018490558051918252918101839052839185917f583c62f152711bcb1ca6186c1065821ff17a7cbe226dcb559a1c889dcf0d769b910160405180910390a3600754156114d35760006127106127076008543a61383890919063ffffffff16565b60075490611f29565b9050804710610c935760405133908290600081818185875af1925050503d806000811461104b576040519150601f19603f3d011682016040523d82523d6000602084013e61104b565b600054610100900460ff1680612772575060005460ff16155b61278e5760405162461bcd60e51b8152600401610b0990614891565b600054610100900460ff161580156127b0576000805461ffff19166101011790555b6127b861384e565b6127c06138b8565b8015611d9b576000805461ff001916905550565b6000610a338284614a3c565b6001600160a01b038b166128455760405162461bcd60e51b815260206004820152602660248201527f45524332304775696c643a20746f6b656e2063616e74206265207a65726f206160448201526564647265737360d01b6064820152608401610b09565b60008a116128655760405162461bcd60e51b8152600401610b0990614a53565b898210156128855760405162461bcd60e51b8152600401610b0990614aa1565b600088116128a55760405162461bcd60e51b8152600401610b0990614afe565b85516128b8906002906020890190613b2d565b506000805462010000600160b01b031916620100006001600160a01b038e16021790556040516128e790613ba0565b604051809103906000f080158015612903573d6000803e3d6000fd5b50600e80546001600160a01b0319166001600160a01b0392831690811790915560005460405163485cc95560e01b81526201000090910490921660048301523060248301529063485cc95590604401600060405180830381600087803b15801561296c57600080fd5b505af1158015612980573d6000803e3d6000fd5b50505060038b905550600489815560058990556006889055600786905560088590556009849055600c839055600180546001600160a01b0319166001600160a01b0384169081178255604051639b2dccdd60e01b81529092639b2dccdd92612a119260009230927f3f330ff86dd1b379b10f18bab5301bb628f28784f70482a01774042ed08621d5928592016148df565b600060405180830381600087803b158015612a2b57600080fd5b505af1158015612a3f573d6000803e3d6000fd5b505060018054604051639b2dccdd60e01b81526001600160a01b039091169350639b2dccdd9250612a9c9160009130917fa5234bce363054cb38e3dfeca861627611d626c5c363ab716da0106f1600399c918491906004016148df565b600060405180830381600087803b158015612ab657600080fd5b505af1158015612aca573d6000803e3d6000fd5b505060018054604051639b2dccdd60e01b81526001600160a01b039091169350639b2dccdd9250612b279160009130917f29b412e31bd60c46f11150420851edff43d71c82bd81c13331d702842993c937918491906004016148df565b600060405180830381600087803b158015612b4157600080fd5b505af1158015612b55573d6000803e3d6000fd5b505060018054604051639b2dccdd60e01b81526001600160a01b039091169350639b2dccdd9250612bb29160009130917f785b3ed8f1babbb20b6a85d572b5e50637a4c77796e0e444290d8b90490101d6918491906004016148df565b600060405180830381600087803b158015612bcc57600080fd5b505af1158015612be0573d6000803e3d6000fd5b505050505050505050505050505050565b333014612c665760405162461bcd60e51b815260206004820152603f60248201527f45524332304775696c643a204f6e6c792063616c6c61626c652062792045524360448201527f32306775696c6420697473656c66207768656e20696e697469616c697a6564006064820152608401610b09565b60008811612c865760405162461bcd60e51b8152600401610b0990614a53565b87811015612ca65760405162461bcd60e51b8152600401610b0990614aa1565b60008611612cc65760405162461bcd60e51b8152600401610b0990614afe565b600397909755600495909555600593909355600691909155600755600855600955600c55565b6000610a338284614b5b565b604780546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60145460ff1615612da95760405162461bcd60e51b8152602060048201526024808201527f45524332304775696c643a2050726f706f73616c20756e6465722065786563756044820152633a34b7b760e11b6064820152608401610b09565b600160008281526012602052604090206008015460ff166004811115612dd157612dd16143b8565b14612e2c5760405162461bcd60e51b815260206004820152602560248201527f45524332304775696c643a2050726f706f73616c20616c72656164792065786560448201526418dd5d195960da1b6064820152608401610b09565b6000818152601260205260409020600201544211612e9a5760405162461bcd60e51b815260206004820152602560248201527f45524332304775696c643a2050726f706f73616c206861736e277420656e646560448201526419081e595d60da1b6064820152608401610b09565b600060015b600083815260126020526040902060090154811015612f7457612ec0611d7b565b6000848152601260205260409020600901805483908110612ee357612ee3614968565b906000526020600020015410158015612f5957506000838152601260205260409020600901805483908110612f1a57612f1a614968565b9060005260206000200154601260008581526020019081526020016000206009018281548110612f4c57612f4c614968565b9060005260206000200154115b15612f62578091505b80612f6c81614994565b915050612e9f565b81612fc1576000838152601260205260409020600801805460ff19166002908117909155839060008051602061532c833981519152905b60405190815260200160405180910390a26135fa565b6004546000848152601260205260409020600201544291612fe29190612cec565b101561301e576000838152601260205260409020600801805460ff19166004908117909155839060008051602061532c83398151915290612fab565b600083815260126020526040812060088101805460ff19166003179055600901546130669061304e9060016127d4565b60008681526012602052604090206003015490611f35565b905061307d6130768460016127d4565b8290611f29565b9150600061308b8383612cec565b90505b808310156135d45760008581526012602052604081206003018054859081106130b9576130b9614968565b6000918252602090912001546001600160a01b031614801590613113575060008581526012602052604081206004018054859081106130fa576130fa614968565b90600052602060002001805461310f90614856565b9050115b156135c257600085815260126020526040812060040180546131da91908690811061314057613140614968565b90600052602060002001805461315590614856565b80601f016020809104026020016040519081016040528092919081815260200182805461318190614856565b80156131ce5780601f106131a3576101008083540402835291602001916131ce565b820191906000526020600020905b8154815290600101906020018083116131b157829003601f168201915b50505050506020015190565b905060008060126000898152602001908152602001600020600301868154811061320657613206614968565b60009182526020808320909101548a835260129091526040822060050180546001600160a01b039092169350908890811061324357613243614968565b600091825260209091200154905063a9059cbb60e01b6001600160e01b031985161480613280575063095ea7b360e01b6001600160e01b03198516145b1561339b5760008981526012602052604090206003018054889081106132a8576132a8614968565b60009182526020808320909101548b8352601290915260409091206004018054635555555560e11b96506001600160a01b03909216945061339591899081106132f3576132f3614968565b90600052602060002001805461330890614856565b80601f016020809104026020016040519081016040528092919081815260200182805461333490614856565b80156133815780601f1061335657610100808354040283529160200191613381565b820191906000526020600020905b81548152906001019060200180831161336457829003601f168201915b505050505060248101516044909101519091565b90925090505b6001546040516306f09e0b60e01b81526001600160a01b03858116600483015230602483015284811660448301526001600160e01b03198716606483015260848201849052909116906306f09e0b9060a401600060405180830381600087803b15801561340757600080fd5b505af1925050508015613418575060015b61346a57613424614b73565b806308c379a0141561345e5750613439614b8f565b806134445750613460565b8060405162461bcd60e51b8152600401610b0991906140b9565b505b3d6000803e3d6000fd5b6014805460ff19166001179055600089815260126020526040812060030180548990811061349a5761349a614968565b60009182526020808320909101548c83526012909152604090912060050180546001600160a01b03909216918a9081106134d6576134d6614968565b9060005260206000200154601260008d81526020019081526020016000206004018a8154811061350857613508614968565b9060005260206000200160405161351f9190614c18565b60006040518083038185875af1925050503d806000811461355c576040519150601f19603f3d011682016040523d82523d6000602084013e613561565b606091505b50509050806135b25760405162461bcd60e51b815260206004820181905260248201527f45524332304775696c643a2050726f706f73616c2063616c6c206661696c65646044820152606401610b09565b50506014805460ff191690555050505b826135cc81614994565b93505061308e565b8460008051602061532c833981519152600360405190815260200160405180910390a250505b600b546136089060016127d4565b600b55505050565b6000808251604114156136475760208301516040840151606085015160001a61363b87828585613918565b945094505050506109d2565b8251604014156136715760208301516040840151613666868383613a05565b9350935050506109d2565b506000905060026109d2565b6000816004811115613691576136916143b8565b141561369a5750565b60018160048111156136ae576136ae6143b8565b14156136fc5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610b09565b6002816004811115613710576137106143b8565b141561375e5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610b09565b6003816004811115613772576137726143b8565b14156137cb5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610b09565b60048160048111156137df576137df6143b8565b1415611d9b5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b6064820152608401610b09565b60008183106138475781610a33565b5090919050565b600054610100900460ff1680613867575060005460ff16155b6138835760405162461bcd60e51b8152600401610b0990614891565b600054610100900460ff161580156127c0576000805461ffff19166101011790558015611d9b576000805461ff001916905550565b600054610100900460ff16806138d1575060005460ff16155b6138ed5760405162461bcd60e51b8152600401610b0990614891565b600054610100900460ff1615801561390f576000805461ffff19166101011790555b6127c033612cf8565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561394f57506000905060036139fc565b8460ff16601b1415801561396757508460ff16601c14155b1561397857506000905060046139fc565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156139cc573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166139f5576000600192509250506139fc565b9150600090505b94509492505050565b6000806001600160ff1b03831660ff84901c601b01613a2687828885613918565b935093505050935093915050565b828054828255906000526020600020908101928215613a89579160200282015b82811115613a8957825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190613a54565b50613a95929150613bad565b5090565b828054828255906000526020600020908101928215613ae6579160200282015b82811115613ae65782518051613ad6918491602090910190613b2d565b5091602001919060010190613ab9565b50613a95929150613bc2565b828054828255906000526020600020908101928215613a89579160200282015b82811115613a89578251825591602001919060010190613b12565b828054613b3990614856565b90600052602060002090601f016020900481019282613b5b5760008555613a89565b82601f10613b7457805160ff1916838001178555613a89565b82800160010185558215613a895791820182811115613a89578251825591602001919060010190613b12565b61067780614cb583390190565b5b80821115613a955760008155600101613bae565b80821115613a95576000613bd68282613bdf565b50600101613bc2565b508054613beb90614856565b6000825580601f10613bfb575050565b601f016020900490600052602060002090810190611d9b9190613bad565b6020808252825182820181905260009190848201906040850190845b81811015613c5157835183529284019291840191600101613c35565b50909695505050505050565b634e487b7160e01b600052604160045260246000fd5b601f8201601f191681016001600160401b0381118282101715613c9857613c98613c5d565b6040525050565b600082601f830112613cb057600080fd5b81356001600160401b03811115613cc957613cc9613c5d565b604051613ce0601f8301601f191660200182613c73565b818152846020838601011115613cf557600080fd5b816020850160208301376000918101602001919091529392505050565b600060208284031215613d2457600080fd5b81356001600160401b03811115613d3a57600080fd5b613d4684828501613c9f565b949350505050565b80356001600160a01b0381168114613d6557600080fd5b919050565b60008060408385031215613d7d57600080fd5b82359150613d8d60208401613d4e565b90509250929050565b60006001600160401b03821115613daf57613daf613c5d565b5060051b60200190565b600082601f830112613dca57600080fd5b81356020613dd782613d96565b604051613de48282613c73565b83815260059390931b8501820192828101915086841115613e0457600080fd5b8286015b84811015613e2657613e1981613d4e565b8352918301918301613e08565b509695505050505050565b600082601f830112613e4257600080fd5b81356020613e4f82613d96565b604051613e5c8282613c73565b83815260059390931b8501820192828101915086841115613e7c57600080fd5b8286015b84811015613e265780356001600160401b03811115613e9f5760008081fd5b613ead8986838b0101613c9f565b845250918301918301613e80565b600082601f830112613ecc57600080fd5b81356020613ed982613d96565b604051613ee68282613c73565b83815260059390931b8501820192828101915086841115613f0657600080fd5b8286015b84811015613e265780358352918301918301613f0a565b60008060008060008060c08789031215613f3a57600080fd5b86356001600160401b0380821115613f5157600080fd5b613f5d8a838b01613db9565b97506020890135915080821115613f7357600080fd5b613f7f8a838b01613e31565b96506040890135915080821115613f9557600080fd5b613fa18a838b01613ebb565b9550606089013594506080890135915080821115613fbe57600080fd5b613fca8a838b01613c9f565b935060a0890135915080821115613fe057600080fd5b50613fed89828a01613c9f565b9150509295509295509295565b6000806040838503121561400d57600080fd5b8235915060208301356001600160401b0381111561402a57600080fd5b61403685828601613c9f565b9150509250929050565b60008060006060848603121561405557600080fd5b505081359360208301359350604090920135919050565b6000815180845260005b8181101561409257602081850181015186830182015201614076565b818111156140a4576000602083870101525b50601f01601f19169290920160200192915050565b602081526000610a33602083018461406c565b60008060008060008060008060008060006101608c8e0312156140ee57600080fd5b6140f78c613d4e565b9a5060208c0135995060408c0135985060608c0135975060808c0135965060a08c0135955060c08c0135945060e08c013593506101008c0135925061413f6101208d01613d4e565b915061414e6101408d01613d4e565b90509295989b509295989b9093969950565b60006020828403121561417257600080fd5b5035919050565b600080600080600060a0868803121561419157600080fd5b8535945060208601359350604086013592506141af60608701613d4e565b915060808601356001600160401b038111156141ca57600080fd5b6141d688828901613c9f565b9150509295509295909350565b6000602082840312156141f557600080fd5b610a3382613d4e565b60008060008060008060008060008060006101608c8e03121561422057600080fd5b6142298c613d4e565b9a5060208c0135995060408c0135985060608c0135975060808c0135965060a08c01356001600160401b0381111561426057600080fd5b61426c8e828f01613c9f565b96505060c08c0135945060e08c013593506101008c013592506101208c0135915061414e6101408d01613d4e565b600080600080600080600080610100898b0312156142b757600080fd5b505086359860208801359850604088013597606081013597506080810135965060a0810135955060c0810135945060e0013592509050565b600081518084526020808501945080840160005b838110156143285781516001600160a01b031687529582019590820190600101614303565b509495945050505050565b600081518084526020808501808196508360051b8101915082860160005b8581101561437b57828403895261436984835161406c565b98850198935090840190600101614351565b5091979650505050505050565b600081518084526020808501945080840160005b838110156143285781518752958201959082019060010161439c565b634e487b7160e01b600052602160045260246000fd5b600581106143ec57634e487b7160e01b600052602160045260246000fd5b9052565b600061016060018060a01b038e1683528c60208401528b604084015280606084015261441e8184018c6142ef565b90508281036080840152614432818b614333565b905082810360a0840152614446818a614388565b90508760c084015282810360e0840152614460818861406c565b9050828103610100840152614475818761406c565b90506144856101208401866143ce565b8281036101408401526144988185614388565b9e9d5050505050505050505050505050565b6000806000606084860312156144bf57600080fd5b83356001600160401b03808211156144d657600080fd5b6144e287838801613ebb565b945060208601359150808211156144f857600080fd5b61450487838801613ebb565b9350604086013591508082111561451a57600080fd5b5061452786828701613ebb565b9150509250925092565b80358015158114613d6557600080fd5b6000806040838503121561455457600080fd5b82359150613d8d60208401614531565b600080600080600060a0868803121561457c57600080fd5b85356001600160401b038082111561459357600080fd5b61459f89838a01613ebb565b965060208801359150808211156145b557600080fd5b6145c189838a01613ebb565b955060408801359150808211156145d757600080fd5b6145e389838a01613ebb565b945060608801359150808211156145f957600080fd5b61460589838a01613db9565b9350608088013591508082111561461b57600080fd5b506141d688828901613e31565b6000806000806080858703121561463e57600080fd5b61464785613d4e565b966020860135965060408601359560600135945092505050565b600082601f83011261467257600080fd5b8135602061467f82613d96565b60405161468c8282613c73565b83815260059390931b85018201928281019150868411156146ac57600080fd5b8286015b84811015613e265780356001600160e01b0319811681146146d15760008081fd5b83529183019183016146b0565b600082601f8301126146ef57600080fd5b813560206146fc82613d96565b6040516147098282613c73565b83815260059390931b850182019282810191508684111561472957600080fd5b8286015b84811015613e265761473e81614531565b835291830191830161472d565b600080600080600060a0868803121561476357600080fd5b85356001600160401b038082111561477a57600080fd5b61478689838a01613db9565b9650602088013591508082111561479c57600080fd5b6147a889838a01613db9565b955060408801359150808211156147be57600080fd5b6147ca89838a01614661565b945060608801359150808211156147e057600080fd5b6147ec89838a01613ebb565b9350608088013591508082111561480257600080fd5b506141d6888289016146de565b60006020828403121561482157600080fd5b81356001600160401b0381111561483757600080fd5b613d4684828501613db9565b602081526000610a336020830184614388565b600181811c9082168061486a57607f821691505b6020821081141561488b57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b6001600160a01b0395861681529390941660208401526001600160e01b03199190911660408301526060820152901515608082015260a00190565b6020808252602e908201527f45524332304775696c643a204f6e6c792063616c6c61626c652062792045524360408201526d191833bab4b6321034ba39b2b63360911b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006000198214156149a8576149a861497e565b5060010190565b6001600160a01b0394851681529284166020840152921660408201526001600160e01b0319909116606082015260800190565b6000602082840312156149f457600080fd5b5051919050565b6000816000190483118215151615614a1557614a1561497e565b500290565b600082614a3757634e487b7160e01b600052601260045260246000fd5b500490565b600082821015614a4e57614a4e61497e565b500390565b6020808252602e908201527f45524332304775696c643a2070726f706f73616c2074696d652068617320746f60408201526d0206265206d6f72652074686120360941b606082015260800190565b6020808252603e908201527f45524332304775696c643a206c6f636b54696d652068617320746f206265206860408201527f6967686572206f7220657175616c20746f2070726f706f73616c54696d650000606082015260800190565b6020808252603c908201527f45524332304775696c643a20766f74696e6720706f77657220666f722065786560408201527f637574696f6e2068617320746f206265206d6f7265207468616e203000000000606082015260800190565b60008219821115614b6e57614b6e61497e565b500190565b600060033d1115614b8c5760046000803e5060005160e01c5b90565b600060443d1015614b9d5790565b6040516003193d81016004833e81513d6001600160401b038160248401118184111715614bcc57505050505090565b8285019150815181811115614be45750505050505090565b843d8701016020828501011115614bfe5750505050505090565b614c0d60208286010187613c73565b509095945050505050565b600080835481600182811c915080831680614c3457607f831692505b6020808410821415614c5457634e487b7160e01b86526022600452602486fd5b818015614c685760018114614c7957614ca6565b60ff19861689528489019650614ca6565b60008a81526020902060005b86811015614c9e5781548b820152908501908301614c85565b505084890196505b50949897505050505050505056fe60806040526001805460ff60a01b1916905534801561001d57600080fd5b5061064a8061002d6000396000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c8063485cc95511610066578063485cc9551461012f5780636e9960c314610142578063f3fef3a314610153578063f851a44014610166578063fc0c546a1461017957600080fd5b8063158ef93e1461009857806321df0da7146100c157806327e235e3146100ec57806347e7ef241461011a575b600080fd5b6001546100ac90600160a01b900460ff1681565b60405190151581526020015b60405180910390f35b6000546201000090046001600160a01b03165b6040516001600160a01b0390911681526020016100b8565b61010c6100fa366004610535565b60026020526000908152604090205481565b6040519081526020016100b8565b61012d610128366004610550565b610192565b005b61012d61013d36600461057a565b6102de565b6001546001600160a01b03166100d4565b61012d610161366004610550565b6103d9565b6001546100d4906001600160a01b031681565b6000546100d4906201000090046001600160a01b031681565b600154600160a01b900460ff166101f05760405162461bcd60e51b815260206004820152601a60248201527f546f6b656e5661756c743a204e6f7420696e6974696c697a656400000000000060448201526064015b60405180910390fd5b6001546001600160a01b0316331461020757600080fd5b6000546040516323b872dd60e01b81526001600160a01b0384811660048301523060248301526044820184905262010000909204909116906323b872dd90606401602060405180830381600087803b15801561026257600080fd5b505af1158015610276573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061029a91906105ad565b506001600160a01b0382166000908152600260205260409020546102be90826104fa565b6001600160a01b0390921660009081526002602052604090209190915550565b600054610100900460ff16806102f7575060005460ff16155b61035a5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016101e7565b600054610100900460ff1615801561037c576000805461ffff19166101011790555b600080546001600160a01b03808616620100000262010000600160b01b031990921691909117909155600180546001600160a81b03191691841691909117600160a01b17905580156103d4576000805461ff00191690555b505050565b600154600160a01b900460ff166104325760405162461bcd60e51b815260206004820152601a60248201527f546f6b656e5661756c743a204e6f7420696e6974696c697a656400000000000060448201526064016101e7565b6001546001600160a01b0316331461044957600080fd5b60005460405163a9059cbb60e01b81526001600160a01b03848116600483015260248201849052620100009092049091169063a9059cbb90604401602060405180830381600087803b15801561049e57600080fd5b505af11580156104b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104d691906105ad565b506001600160a01b0382166000908152600260205260409020546102be908261050d565b600061050682846105e5565b9392505050565b600061050682846105fd565b80356001600160a01b038116811461053057600080fd5b919050565b60006020828403121561054757600080fd5b61050682610519565b6000806040838503121561056357600080fd5b61056c83610519565b946020939093013593505050565b6000806040838503121561058d57600080fd5b61059683610519565b91506105a460208401610519565b90509250929050565b6000602082840312156105bf57600080fd5b8151801515811461050657600080fd5b634e487b7160e01b600052601160045260246000fd5b600082198211156105f8576105f86105cf565b500190565b60008282101561060f5761060f6105cf565b50039056fea26469706673582212206539bb9ef196850c812aea5710389efb414f01a9d3d7375775ee09011a60aeb164736f6c63430008080033fee62a9eec0be50eb061c711990ef0f1e17b40ea131d9347b0468acdaf8bf243a264697066735822122059fef800f77851fa77919cf4c7022ee00715401253d4136b0f751461746edbec64736f6c63430008080033'; + +const deployedBytecodes = { + [GuildImplementationType.SnapshotRepERC20Guild]: + deployedSnapshotRepErc20GuildBytecode, + [GuildImplementationType.DXDGuild]: deployedDXDGuildBytecode, +};