{
  "_format": "hh-sol-artifact-1",
  "contractName": "MockPriceSubmitter",
  "sourceName": "contracts/ftso/priceProviderMockContracts/PriceProviderMockContracts.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_addressUpdater",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "submitter",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "epochId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "hash",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "timestamp",
          "type": "uint256"
        }
      ],
      "name": "HashSubmitted",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "voter",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "epochId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "contract IFtsoGenesis[]",
          "name": "ftsos",
          "type": "address[]"
        },
        {
          "indexed": false,
          "internalType": "uint256[]",
          "name": "prices",
          "type": "uint256[]"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "random",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "timestamp",
          "type": "uint256"
        }
      ],
      "name": "PricesRevealed",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "MINIMAL_RANDOM",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "RANDOM_EPOCH_CYCLIC_BUFFER_SIZE",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getAddressUpdater",
      "outputs": [
        {
          "internalType": "address",
          "name": "_addressUpdater",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getCurrentRandom",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getFtsoManager",
      "outputs": [
        {
          "internalType": "contract IFtsoManagerGenesis",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getFtsoRegistry",
      "outputs": [
        {
          "internalType": "contract IFtsoRegistryGenesis",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_epochId",
          "type": "uint256"
        }
      ],
      "name": "getRandom",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getVoterWhitelister",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_epochId",
          "type": "uint256"
        },
        {
          "internalType": "uint256[]",
          "name": "_ftsoIndices",
          "type": "uint256[]"
        },
        {
          "internalType": "uint256[]",
          "name": "_prices",
          "type": "uint256[]"
        },
        {
          "internalType": "uint256",
          "name": "_random",
          "type": "uint256"
        }
      ],
      "name": "revealPrices",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_addressUpdater",
          "type": "address"
        }
      ],
      "name": "setAddressUpdater",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_epochId",
          "type": "uint256"
        },
        {
          "internalType": "bytes32",
          "name": "_hash",
          "type": "bytes32"
        }
      ],
      "name": "submitHash",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32[]",
          "name": "_contractNameHashes",
          "type": "bytes32[]"
        },
        {
          "internalType": "address[]",
          "name": "_contractAddresses",
          "type": "address[]"
        }
      ],
      "name": "updateContractAddresses",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_voter",
          "type": "address"
        }
      ],
      "name": "voterWhitelistBitmap",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_voter",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_ftsoIndex",
          "type": "uint256"
        }
      ],
      "name": "voterWhitelisted",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "_removedVoters",
          "type": "address[]"
        },
        {
          "internalType": "uint256",
          "name": "_ftsoIndex",
          "type": "uint256"
        }
      ],
      "name": "votersRemovedFromWhitelist",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x60806040523480156200001157600080fd5b506040516200646138038062006461833981016040819052620000349162000496565b80620000408162000448565b503060405162000050906200046c565b6200005c91906200052d565b604051809103906000f08015801562000079573d6000803e3d6000fd5b50600080546001600160a01b0319166001600160a01b03929092169190911790556040513090620000aa906200047a565b620000b691906200052d565b604051809103906000f080158015620000d3573d6000803e3d6000fd5b50600180546001600160a01b0319166001600160a01b0392831617908190556000546040516317f1580560e21b815291831692635fc56014926200011e92909116906004016200052d565b600060405180830381600087803b1580156200013957600080fd5b505af11580156200014e573d6000803e3d6000fd5b50506040805161018081018252600361014082018181526229a3a160e91b6101608401528252825180840184528181526205852560ec1b6020828101919091528084019190915283518085018552828152624c544360e81b81830152838501528351808501855282815262584c4d60e81b818301526060840152835180850185528281526258444760e81b818301526080840152835180850185528281526241444160e81b8183015260a0840152835180850185526004815263414c474f60e01b8183015260c0840152835180850185528281526208486960eb1b8183015260e084015283518085018552828152622223a160e91b8183015261010084015283518085019094529083526242544360e81b908301526101208101919091529150600090505b600a8110156200043f5760008282600a81106200028c57fe5b6020020151905060008130607842036078601e604051620002ad9062000488565b620002bd95949392919062000556565b604051809103906000f080158015620002da573d6000803e3d6000fd5b50600054604051630998fc6d60e21b81529192506001600160a01b031690632663f1b4906200030e9084906004016200052d565b600060405180830381600087803b1580156200032957600080fd5b505af11580156200033e573d6000803e3d6000fd5b505060008054604051630e848da360e41b81529193506001600160a01b0316915063e848da30906200037590869060040162000541565b60206040518083038186803b1580156200038e57600080fd5b505afa158015620003a3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003c99190620004c6565b600154604051630d15c16960e21b81529192506001600160a01b03169063345705a490620003fc90849060040162000598565b600060405180830381600087803b1580156200041757600080fd5b505af11580156200042c573d6000803e3d6000fd5b5050505050505080600101905062000273565b505050620005a1565b7f714f205b2abd25bef1d06a1af944e38c113fe6160375c4e1d6d5cf28848e771955565b6129cb8062001ae283390190565b610c3880620044ad83390190565b61137c80620050e583390190565b600060208284031215620004a8578081fd5b81516001600160a01b0381168114620004bf578182fd5b9392505050565b600060208284031215620004d8578081fd5b5051919050565b60008151808452815b818110156200050657602081850181015186830182015201620004e8565b81811115620005185782602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0391909116815260200190565b600060208252620004bf6020830184620004df565b600060a082526200056b60a0830188620004df565b6001600160a01b039690961660208301525060408101939093526060830191909152608090910152919050565b90815260200190565b61153180620005b16000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80639d986f9111610097578063c0156bcc11610066578063c0156bcc146101b9578063cd4b6914146101c1578063d89601fd146101d4578063e2db5a52146101dc576100f5565b80639d986f9114610178578063aea36b531461018b578063b00c0b761461019e578063b39c6858146101b1576100f5565b806376794efb116100d357806376794efb146101355780637ac420ad1461014a5780638c9d28b61461015d5780638fc6f66714610165576100f5565b80633b56f098146100fa5780635267a15d1461011857806371e1fad91461012d575b600080fd5b6101026101ef565b60405161010f91906113d5565b60405180910390f35b6101206101f7565b60405161010f91906112af565b61012061021c565b610148610143366004611003565b61022c565b005b610102610158366004610fb5565b6102e8565b610120610303565b610148610173366004611254565b610312565b610148610186366004610fd8565b610573565b610148610199366004610fb5565b6105f5565b6101486101ac366004611046565b610658565b610120610703565b61010261071d565b6101026101cf3660046111b2565b610722565b61010261073c565b6101486101ea3660046111e2565b610861565b600160801b81565b7f714f205b2abd25bef1d06a1af944e38c113fe6160375c4e1d6d5cf28848e77195490565b6001546001600160a01b03165b90565b600154604080518082019091526016815275566f7465722077686974656c6973746572206f6e6c7960501b6020820152906001600160a01b0316331461028e5760405162461bcd60e51b815260040161028591906113de565b60405180910390fd5b5060005b82518110156102e357816001901b19600260008584815181106102b157fe5b6020908102919091018101516001600160a01b0316825281019190915260400160002080549091169055600101610292565b505050565b6001600160a01b031660009081526002602052604090205490565b6000546001600160a01b031690565b6000805460405163d75f6d8160e01b81526001600160a01b039091169063d75f6d81906103439084906004016113d5565b60206040518083038186803b15801561035b57600080fd5b505afa15801561036f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103939190611196565b9050806001600160a01b031663a29a839f6040518163ffffffff1660e01b815260040160206040518083038186803b1580156103ce57600080fd5b505afa1580156103e2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061040691906111ca565b83146040518060400160405280600e81526020016d15dc9bdb99c8195c1bd8da081a5960921b8152509061044d5760405162461bcd60e51b815260040161028591906113de565b506000838152600360209081526040808320338452825291829020548251808401909352601983527f4475706c6963617465207375626d697420696e2065706f63680000000000000091830191909152156104bb5760405162461bcd60e51b815260040161028591906113de565b5033600090815260026020908152604091829020548251808401909352600f83526e139bdd081dda1a5d195b1a5cdd1959608a1b918301919091526105135760405162461bcd60e51b815260040161028591906113de565b5060008381526003602090815260408083203380855292529182902084905590518491907f5e2f64e70eafef31c2f48c8ef140b36406531c36ab0faaede30843202c16f6a89061056690869042906113c7565b60405180910390a3505050565b600154604080518082019091526016815275566f7465722077686974656c6973746572206f6e6c7960501b6020820152906001600160a01b031633146105cc5760405162461bcd60e51b815260040161028591906113de565b506001600160a01b0390911660009081526002602052604090208054600190921b919091179055565b60006105ff6101f7565b6001600160a01b0316146040518060400160405280600b81526020016a105b1c9958591e481cd95d60aa1b8152509061064b5760405162461bcd60e51b815260040161028591906113de565b5061065581610cea565b50565b6106606101f7565b6001600160a01b0316336001600160a01b0316146106bc576040805162461bcd60e51b815260206004820152601460248201527337b7363c9030b2323932b9b9903ab83230ba32b960611b604482015290519081900360640190fd5b6106f56106f083836040518060400160405280600e81526020016d20b2323932b9b9aab83230ba32b960911b815250610d0e565b610cea565b6106ff8282610e3b565b5050565b600060405162461bcd60e51b815260040161028590611431565b606481565b60006004606483066064811061073457fe5b015492915050565b6000805460405163d75f6d8160e01b815282916001600160a01b03169063d75f6d819061076d9084906004016113d5565b60206040518083038186803b15801561078557600080fd5b505afa158015610799573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107bd9190611196565b90506000816001600160a01b031663a29a839f6040518163ffffffff1660e01b815260040160206040518083038186803b1580156107fa57600080fd5b505afa15801561080e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061083291906111ca565b90508061084457600092505050610229565b600460646000198301066064811061085857fe5b01549250505090565b8251825160408051808201909152601a81527f4172726179206c656e6774687320646f206e6f74206d6174636800000000000060208201529082146108b95760405162461bcd60e51b815260040161028591906113de565b5060408051808201909152601781527f546f6f20736d616c6c2072616e646f6d206e756d6265720000000000000000006020820152600160801b8310156109135760405162461bcd60e51b815260040161028591906113de565b508383833360405160200161092b9493929190611380565b60408051601f19818403018152828252805160209182012060008981526003835283812033825283528390205460608501909352602380855292149291906114d9908301399061098e5760405162461bcd60e51b815260040161028591906113de565b50600080546040516313968ea760e31b81526001600160a01b0390911690639cb47538906109c090889060040161136d565b60006040518083038186803b1580156109d857600080fd5b505afa1580156109ec573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610a1491908101906110fd565b3360009081526002602052604081205491925083610a33576000610ac7565b82600081518110610a4057fe5b60200260200101516001600160a01b031663f72cab28338a6040518363ffffffff1660e01b8152600401610a759291906112c3565b602060405180830381600087803b158015610a8f57600080fd5b505af1158015610aa3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ac791906111ca565b90506000805b85811015610c3f578015801590610af75750888181518110610aeb57fe5b60200260200101518210155b15610b4757604080518082018252601b81527f4654534f20696e6469636573206e6f7420696e6372656173696e6700000000006020820152905162461bcd60e51b815261028591906004016113de565b888181518110610b5357fe5b60200260200101519150816001901b841660001415610ba957604080518082018252600f81526e139bdd081dda1a5d195b1a5cdd1959608a1b6020820152905162461bcd60e51b815261028591906004016113de565b848181518110610bb557fe5b60200260200101516001600160a01b031663c1f6c36e338c8b8581518110610bd957fe5b6020026020010151876040518563ffffffff1660e01b8152600401610c0194939291906112dc565b600060405180830381600087803b158015610c1b57600080fd5b505af1158015610c2f573d6000803e3d6000fd5b505060019092019150610acd9050565b5060008981526003602090815260408083203384528252808320929092559051610c6d9188918a9101611460565b60408051601f198184030181529190528051602090910120600460648b0660648110610c9557fe5b0180549091019055604051899033907fafffa539ac1cad89751c875d871abadc6deb7bd51bf6baea004fc71ca0a48fa590610cd79088908c908c904290611302565b60405180910390a3505050505050505050565b7f714f205b2abd25bef1d06a1af944e38c113fe6160375c4e1d6d5cf28848e771955565b600080826040516020018080602001828103825283818151815260200191508051906020019080838360005b83811015610d52578181015183820152602001610d3a565b50505050905090810190601f168015610d7f5780820380516001836020036101000a031916815260200191505b50925050506040516020818303038152906040528051906020012090506000805b8651811015610de757868181518110610db557fe5b6020026020010151831415610ddf57858181518110610dd057fe5b60200260200101519150610de7565b600101610da0565b506001600160a01b038116610e32576040805162461bcd60e51b815260206004820152600c60248201526b61646472657373207a65726f60a01b604482015290519081900360640190fd5b95945050505050565b610e6a82826040518060400160405280600c81526020016b4674736f526567697374727960a01b815250610d0e565b6000806101000a8154816001600160a01b0302191690836001600160a01b03160217905550610ec282826040518060400160405280601081526020016f2b37ba32b92bb434ba32b634b9ba32b960811b815250610d0e565b600180546001600160a01b0319166001600160a01b03929092169190911790555050565b600082601f830112610ef6578081fd5b81356020610f0b610f06836114a5565b611481565b8281528181019085830183850287018401881015610f27578586fd5b855b85811015610f4e578135610f3c816114c3565b84529284019290840190600101610f29565b5090979650505050505050565b600082601f830112610f6b578081fd5b81356020610f7b610f06836114a5565b8281528181019085830183850287018401881015610f97578586fd5b855b85811015610f4e57813584529284019290840190600101610f99565b600060208284031215610fc6578081fd5b8135610fd1816114c3565b9392505050565b60008060408385031215610fea578081fd5b8235610ff5816114c3565b946020939093013593505050565b60008060408385031215611015578182fd5b823567ffffffffffffffff81111561102b578283fd5b61103785828601610ee6565b95602094909401359450505050565b60008060408385031215611058578182fd5b823567ffffffffffffffff8082111561106f578384fd5b818501915085601f830112611082578384fd5b81356020611092610f06836114a5565b82815281810190858301838502870184018b10156110ae578889fd5b8896505b848710156110d05780358352600196909601959183019183016110b2565b50965050860135925050808211156110e6578283fd5b506110f385828601610ee6565b9150509250929050565b6000602080838503121561110f578182fd5b825167ffffffffffffffff811115611125578283fd5b8301601f81018513611135578283fd5b8051611143610f06826114a5565b818152838101908385018584028501860189101561115f578687fd5b8694505b8385101561118a578051611176816114c3565b835260019490940193918501918501611163565b50979650505050505050565b6000602082840312156111a7578081fd5b8151610fd1816114c3565b6000602082840312156111c3578081fd5b5035919050565b6000602082840312156111db578081fd5b5051919050565b600080600080608085870312156111f7578182fd5b84359350602085013567ffffffffffffffff80821115611215578384fd5b61122188838901610f5b565b94506040870135915080821115611236578384fd5b5061124387828801610f5b565b949793965093946060013593505050565b60008060408385031215611266578182fd5b50508035926020909101359150565b6000815180845260208085019450808401835b838110156112a457815187529582019590820190600101611288565b509495945050505050565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b0394909416845260208401929092526040830152606082015260800190565b6080808252855190820181905260009060209060a0840190828901845b828110156113445781516001600160a01b03168452928401929084019060010161131f565b505050838103828501526113588188611275565b60408501969096525050506060015292915050565b600060208252610fd16020830184611275565b6000608082526113936080830187611275565b82810360208401526113a58187611275565b604084019590955250506001600160a01b039190911660609091015292915050565b918252602082015260400190565b90815260200190565b6000602080835283518082850152825b8181101561140a578581018301518582016040015282016113ee565b8181111561141b5783604083870101525b50601f01601f1916929092016040019392505050565b602080825260159082015274139bdd081a5b88191d5b5b5e4818dbdb9d1c9858dd605a1b604082015260600190565b6000838252604060208301526114796040830184611275565b949350505050565b60405181810167ffffffffffffffff8111828210171561149d57fe5b604052919050565b600067ffffffffffffffff8211156114b957fe5b5060209081020190565b6001600160a01b038116811461065557600080fdfe507269636520616c72656164792072657665616c6564206f72206e6f742076616c6964a26469706673582212207674be2fe85fc7b6d027eb2e83c2a3496db00e67669630987f5cdb2cd42ffe2e64736f6c6343000706003360806040523480156200001157600080fd5b50604051620029cb380380620029cb83398101604081905262000034916200016c565b80806001600160a01b0381161562000051576200005181620000a9565b506001600160a01b038116620000a1576040805162461bcd60e51b815260206004820152601060248201526f5f676f7665726e616e6365207a65726f60801b604482015290519081900360640190fd5b50506200019c565b600054600160a01b900460ff161562000109576040805162461bcd60e51b815260206004820152601460248201527f696e697469616c6973656420213d2066616c7365000000000000000000000000604482015290519081900360640190fd5b60008054600160a01b60ff60a01b19909116176001600160a01b0319166001600160a01b03831690811790915560408051918252517f9789733827840833afc031fb2ef9ab6894271f77bad2085687cf4ae5c7bee4db916020908290030190a150565b6000602082840312156200017e578081fd5b81516001600160a01b038116811462000195578182fd5b9392505050565b61281f80620001ac6000396000f3fe608060405234801561001057600080fd5b506004361061018e5760003560e01c806397da6af4116100de578063c71a1b2011610097578063e17f212e11610071578063e17f212e1461037f578063e68f283b14610394578063e848da30146103aa578063f5a98383146103ca5761018e565b8063c71a1b2014610337578063ce1c0e4d14610357578063d75f6d811461036c5761018e565b806397da6af4146102c35780639cb47538146102d65780639d6a890f146102f6578063a40060ba14610309578063a670ff8714610311578063c55d0f56146103245761018e565b80635aa6e6751161014b57806367fc40291161012557806367fc40291461026357806374e6310e146102765780637687542c14610297578063798aac5b146102ae5761018e565b80635aa6e675146102335780635ff270791461024857806362354e031461025b5761018e565b806306a2ba29146101935780630cf48497146101b2578063136d3f64146101c85780632663f1b4146101e85780632bcdd6ab146101fd57806342a0f24314610212575b600080fd5b61019b6103d2565b6040516101a9929190612673565b60405180910390f35b6101ba6104a8565b6040516101a992919061263b565b6101db6101d6366004612451565b61066d565b6040516101a991906126f9565b6101fb6101f636600461227c565b6106f4565b005b61020561093a565b6040516101a99190612615565b610225610220366004612367565b6109f6565b6040516101a9929190612736565b61023b610a82565b6040516101a9919061257a565b6101fb61025636600461233f565b610b17565b61023b610e6c565b6101fb61027136600461233f565b610e77565b61028961028436600461233f565b610f5f565b6040516101a9929190612715565b61029f611005565b6040516101a9939291906126ab565b6102b66111ca565b6040516101a99190612660565b61023b6102d1366004612367565b6111d4565b6102e96102e436600461229f565b6111e2565b6040516101a9919061258e565b6101fb61030436600461227c565b61136f565b610205611428565b6101fb61031f36600461227c565b6114ff565b610225610332366004612451565b61174f565b61034a610345366004612451565b61175b565b6040516101a991906125db565b61035f611841565b6040516101a99190612628565b61023b61037a366004612451565b611978565b610387611983565b6040516101a991906126ee565b61039c611993565b6040516101a9929190612686565b6103bd6103b8366004612367565b611ac9565b6040516101a9919061270c565b6101fb611ad4565b6060806103dd611b8e565b8051909250806001600160401b03811180156103f857600080fd5b50604051908082528060200260200182016040528015610422578160200160208202803683370190505b5091505b80156104a35780600190039050600283828151811061044157fe5b60200260200101518154811061045357fe5b600091825260208220600590910201015482516001600160a01b039091169083908390811061047e57fe5b60200260200101906001600160a01b031690816001600160a01b031681525050610426565b509091565b60608060006104b5611b8e565b8051909150806001600160401b03811180156104d057600080fd5b506040519080825280602002602001820160405280156104fa578160200160208202803683370190505b509250806001600160401b038111801561051357600080fd5b5060405190808252806020026020018201604052801561054757816020015b60608152602001906001900390816105325790505b5093505b80156106675780600190039050600282828151811061056657fe5b60200260200101518154811061057857fe5b600091825260208220600590910201015483516001600160a01b03909116908490839081106105a357fe5b60200260200101906001600160a01b031690816001600160a01b0316815250508281815181106105cf57fe5b60200260200101516001600160a01b03166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b15801561060f57600080fd5b505afa158015610623573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261064b91908101906123df565b84828151811061065757fe5b602002602001018190525061054b565b50509091565b606061067882611ccf565b6001600160a01b03166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b1580156106b057600080fd5b505afa1580156106c4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526106ec91908101906123df565b90505b919050565b600054600160b01b900460ff16806107165750600054600160a81b900460ff16155b1561092c57610723611d86565b600060028054905090506000826001600160a01b03166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b15801561076857600080fd5b505afa15801561077c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526107a491908101906123df565b90506000816040516020016107b991906126f9565b60405160208183030381529060405280519060200120905060005b838110156108c4576000600282815481106107eb57fe5b60009182526020822060059091020101546001600160a01b031690508061081257506108bc565b806001600160a01b03166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b15801561084b57600080fd5b505afa15801561085f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261088791908101906123df565b60405160200161089791906126f9565b604051602081830303815290604052805190602001208314156108ba57506108c4565b505b6001016107d4565b838114156108dd576002805460010181556000526108e6565b6108e681611dbd565b84600282815481106108f457fe5b6000918252602082206005909102010180546001600160a01b0319166001600160a01b03929092169190911790555061093792505050565b610937600036611e50565b50565b6002546060906000816001600160401b038111801561095857600080fd5b50604051908082528060200260200182016040528015610982578160200160208202803683370190505b5090505b81156109f05781600190039150600282815481106109a057fe5b600091825260208220600590910201015481516001600160a01b03909116908290849081106109cb57fe5b60200260200101906001600160a01b031690816001600160a01b031681525050610986565b91505090565b600080610a0a610a0584611fd3565b611ccf565b6001600160a01b031663eb91d37e6040518163ffffffff1660e01b8152600401604080518083038186803b158015610a4157600080fd5b505afa158015610a55573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a799190612469565b91509150915091565b60008054600160a81b900460ff16610aa5576000546001600160a01b0316610b12565b60076001609c1b016001600160a01b031663732524946040518163ffffffff1660e01b815260040160206040518083038186803b158015610ae557600080fd5b505afa158015610af9573d6000803e3d6000fd5b505050506040513d6020811015610b0f57600080fd5b50515b905090565b60408051630debfda360e41b8152336004820152905160076001609c1b019163debfda30916024808301926020929190829003018186803b158015610b5b57600080fd5b505afa158015610b6f573d6000803e3d6000fd5b505050506040513d6020811015610b8557600080fd5b5051610bc8576040805162461bcd60e51b815260206004820152600d60248201526c37b7363c9032bc32b1baba37b960991b604482015290519081900360640190fd5b6001600160e01b0319811660009081526001602052604090208054610c34576040805162461bcd60e51b815260206004820152601a60248201527f74696d656c6f636b3a20696e76616c69642073656c6563746f72000000000000604482015290519081900360640190fd5b8054421015610c8a576040805162461bcd60e51b815260206004820152601960248201527f74696d656c6f636b3a206e6f7420616c6c6f7765642079657400000000000000604482015290519081900360640190fd5b6000816001018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610d245780601f10610cf957610100808354040283529160200191610d24565b820191906000526020600020905b815481529060010190602001808311610d0757829003601f168201915b5050506001600160e01b0319861660009081526001602081905260408220828155949550909250610d589150830182612179565b50506000805460ff60b01b1916600160b01b178155604051825130918491819060208401908083835b60208310610da05780518252601f199092019160209182019101610d81565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114610e02576040519150601f19603f3d011682016040523d82523d6000602084013e610e07565b606091505b50506000805460ff60b01b19169055604080516001600160e01b03198716815242602082015281519293507fa7326b57fc9cfe267aaea5e7f0b01757154d265620a0585819416ee9ddd2c438929081900390910190a1610e66816120fd565b50505050565b60076001609c1b0181565b610e7f61211a565b6001600160e01b03198116600090815260016020526040902054610eea576040805162461bcd60e51b815260206004820152601a60248201527f74696d656c6f636b3a20696e76616c69642073656c6563746f72000000000000604482015290519081900360640190fd5b604080516001600160e01b03198316815242602082015281517f7735b2391c38a81419c513e30ca578db7158eadd7101511b23e221c654d19cf8929181900390910190a16001600160e01b03198116600090815260016020819052604082208281559190610f5a90830182612179565b505050565b600160208181526000928352604092839020805481840180548651600296821615610100026000190190911695909504601f81018590048502860185019096528585529094919392909190830182828015610ffb5780601f10610fd057610100808354040283529160200191610ffb565b820191906000526020600020905b815481529060010190602001808311610fde57829003601f168201915b5050505050905082565b6060806060611012611b8e565b8051909350806001600160401b038111801561102d57600080fd5b50604051908082528060200260200182016040528015611057578160200160208202803683370190505b509150806001600160401b038111801561107057600080fd5b506040519080825280602002602001820160405280156110a457816020015b606081526020019060019003908161108f5790505b5092505b80156111c4578060019003905060028482815181106110c357fe5b6020026020010151815481106110d557fe5b600091825260208220600590910201015482516001600160a01b039091169083908390811061110057fe5b60200260200101906001600160a01b031690816001600160a01b03168152505081818151811061112c57fe5b60200260200101516001600160a01b03166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b15801561116c57600080fd5b505afa158015611180573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526111a891908101906123df565b8382815181106111b457fe5b60200260200101819052506110a8565b50909192565b6060610b12611b8e565b60006106ec610a0583611fd3565b600254815160609190806001600160401b038111801561120157600080fd5b5060405190808252806020026020018201604052801561122b578160200160208202803683370190505b5092505b80156113685780600190039050600084828151811061124a57fe5b602002602001015190508281106040518060400160405280601881526020016000805160206127ca833981519152815250906112a25760405162461bcd60e51b815260040161129991906126f9565b60405180910390fd5b50600281815481106112b057fe5b600091825260208220600590910201015484516001600160a01b03909116908590849081106112db57fe5b60200260200101906001600160a01b031690816001600160a01b03168152505060006001600160a01b031684838151811061131257fe5b60200260200101516001600160a01b0316141561136257604080518082018252601881526000805160206127ca8339815191526020820152905162461bcd60e51b815261129991906004016126f9565b5061122f565b5050919050565b600054600160a01b900460ff16156113c5576040805162461bcd60e51b8152602060048201526014602482015273696e697469616c6973656420213d2066616c736560601b604482015290519081900360640190fd5b60008054600160a01b60ff60a01b19909116176001600160a01b0319166001600160a01b03831690811790915560408051918252517f9789733827840833afc031fb2ef9ab6894271f77bad2085687cf4ae5c7bee4db916020908290030190a150565b60606000611434611b8e565b8051909150806001600160401b038111801561144f57600080fd5b50604051908082528060200260200182016040528015611479578160200160208202803683370190505b5092505b80156114fa5780600190039050600282828151811061149857fe5b6020026020010151815481106114aa57fe5b600091825260208220600590910201015483516001600160a01b03909116908490839081106114d557fe5b60200260200101906001600160a01b031690816001600160a01b03168152505061147d565b505090565b600054600160b01b900460ff16806115215750600054600160a81b900460ff16155b1561092c5761152e611d86565b6000816001600160a01b03166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b15801561156957600080fd5b505afa15801561157d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526115a591908101906123df565b6040516020016115b591906126f9565b60408051601f19818403018152919052805160209091012060025490915060005b81811015611710576000600282815481106115ed57fe5b60009182526020822060059091020101546001600160a01b03169050806116145750611708565b806001600160a01b03166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b15801561164d57600080fd5b505afa158015611661573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261168991908101906123df565b60405160200161169991906126f9565b60405160208183030381529060405280519060200120841415611706576116bf82611dbd565b6000600283815481106116ce57fe5b6000918252602082206005909102010180546001600160a01b0319166001600160a01b03929092169190911790555061174a92505050565b505b6001016115d6565b50604080518082018252601881526000805160206127ca8339815191526020820152905162461bcd60e51b815261129991906004016126f9565b610937565b600080610a0a83611ccf565b6117636121bd565b600254821080156117a4575060006001600160a01b03166002838154811061178757fe5b60009182526020822060059091020101546001600160a01b031614155b6040518060400160405280601881526020016000805160206127ca833981519152815250906117e65760405162461bcd60e51b815260040161129991906126f9565b50600282815481106117f457fe5b600091825260209091206040805160a0810191829052926005908102909201919082845b81546001600160a01b031681526001909101906020018083116118185750505050509050919050565b6060600061184d611b8e565b8051909150806001600160401b038111801561186857600080fd5b5060405190808252806020026020018201604052801561189c57816020015b60608152602001906001900390816118875790505b5092505b80156114fa5780600190039050600060028383815181106118bd57fe5b6020026020010151815481106118cf57fe5b6000918252602082206005919091020154604080516395d89b4160e01b815290516001600160a01b03909216935083926395d89b4192600480840193829003018186803b15801561191f57600080fd5b505afa158015611933573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261195b91908101906123df565b84838151811061196757fe5b6020026020010181905250506118a0565b60006106ec82611ccf565b600054600160a81b900460ff1681565b60608061199e611b8e565b8051909250806001600160401b03811180156119b957600080fd5b506040519080825280602002602001820160405280156119ed57816020015b60608152602001906001900390816119d85790505b5091505b80156104a3578060019003905060006002848381518110611a0e57fe5b602002602001015181548110611a2057fe5b6000918252602082206005919091020154604080516395d89b4160e01b815290516001600160a01b03909216935083926395d89b4192600480840193829003018186803b158015611a7057600080fd5b505afa158015611a84573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611aac91908101906123df565b838381518110611ab857fe5b6020026020010181905250506119f1565b60006106ec82611fd3565b611adc61211a565b600054600160a81b900460ff1615611b3b576040805162461bcd60e51b815260206004820152601a60248201527f616c726561647920696e2070726f64756374696f6e206d6f6465000000000000604482015290519081900360640190fd5b60008054600161ff0160a01b031916600160a81b1790556040805160076001609c1b01815290517f83af113638b5422f9e977cebc0aaf0eaf2188eb9a8baae7f9d46c42b33a1560c9181900360200190a1565b6002546060906000816001600160401b0381118015611bac57600080fd5b50604051908082528060200260200182016040528015611bd6578160200160208202803683370190505b50905060008060005b84811015611c4557826001600160a01b031660028281548110611bfe57fe5b60009182526020822060059091020101546001600160a01b031614611c3d5780848381518110611c2a57fe5b6020026020010181815250508160010191505b600101611bdf565b50806001600160401b0381118015611c5c57600080fd5b50604051908082528060200260200182016040528015611c86578160200160208202803683370190505b5094505b8015611cc85780600190039050828181518110611ca357fe5b6020026020010151858281518110611cb757fe5b602002602001018181525050611c8a565b5050505090565b60025460408051808201909152601881526000805160206127ca83398151915260208201526000918310611d165760405162461bcd60e51b815260040161129991906126f9565b50600060028381548110611d2657fe5b60009182526020822060059091020101546001600160a01b0316905080611d8057604080518082018252601881526000805160206127ca8339815191526020820152905162461bcd60e51b815261129991906004016126f9565b92915050565b600054600160b01b900460ff1615611db357333014611da157fe5b6000805460ff60b01b19169055611dbb565b611dbb61211a565b565b60045b8015611e4c5760028281548110611dd357fe5b90600052602060002090600502016001820360058110611def57fe5b0154600280546001600160a01b039092169184908110611e0b57fe5b90600052602060002090600502018260058110611e2457fe5b0180546001600160a01b0319166001600160a01b039290921691909117905560001901611dc0565b5050565b611e5861211a565b600082359050600060076001609c1b016001600160a01b0316636221a54b6040518163ffffffff1660e01b815260040160206040518083038186803b158015611ea057600080fd5b505afa158015611eb4573d6000803e3d6000fd5b505050506040513d6020811015611eca57600080fd5b505160408051808201825242830180825282516020601f89018190048102820181019094528781529394509290918281019190889088908190840183828082843760009201829052509390945250506001600160e01b03198616815260016020818152604090922084518155848301518051919450611f4e939285019201906121db565b509050507fed948300a3694aa01d4a6b258bfd664350193d770c0b51f8387277f6d83ea3b68382878760405180856001600160e01b0319168152602001848152602001806020018281038252848482818152602001925080828437600083820152604051601f909101601f191690920182900397509095505050505050a15050505050565b60008082604051602001611fe791906126f9565b60408051601f19818403018152919052805160209091012060025490915060005b818110156117105760006002828154811061201f57fe5b60009182526020822060059091020101546001600160a01b031690508061204657506120f5565b806001600160a01b03166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b15801561207f57600080fd5b505afa158015612093573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526120bb91908101906123df565b6040516020016120cb91906126f9565b604051602081830303815290604052805190602001208414156120f3575092506106ef915050565b505b600101612008565b3d604051818101604052816000823e8215612116578181f35b8181fd5b612122610a82565b6001600160a01b0316336001600160a01b031614611dbb576040805162461bcd60e51b815260206004820152600f60248201526e6f6e6c7920676f7665726e616e636560881b604482015290519081900360640190fd5b50805460018160011615610100020316600290046000825580601f1061219f5750610937565b601f0160209004906000526020600020908101906109379190612267565b6040518060a001604052806005906020820280368337509192915050565b828054600181600116156101000203166002900490600052602060002090601f0160209004810192826122115760008555612257565b82601f1061222a57805160ff1916838001178555612257565b82800160010185558215612257579182015b8281111561225757825182559160200191906001019061223c565b50612263929150612267565b5090565b5b808211156122635760008155600101612268565b60006020828403121561228d578081fd5b8135612298816127b4565b9392505050565b600060208083850312156122b1578182fd5b82356001600160401b03808211156122c7578384fd5b818501915085601f8301126122da578384fd5b8135818111156122e657fe5b83810291506122f6848301612744565b8181528481019084860184860187018a1015612310578788fd5b8795505b83861015612332578035835260019590950194918601918601612314565b5098975050505050505050565b600060208284031215612350578081fd5b81356001600160e01b031981168114612298578182fd5b600060208284031215612378578081fd5b81356001600160401b0381111561238d578182fd5b8201601f8101841361239d578182fd5b80356123b06123ab82612767565b612744565b8181528560208385010111156123c4578384fd5b81602084016020830137908101602001929092525092915050565b6000602082840312156123f0578081fd5b81516001600160401b03811115612405578182fd5b8201601f81018413612415578182fd5b80516124236123ab82612767565b818152856020838501011115612437578384fd5b612448826020830160208601612788565b95945050505050565b600060208284031215612462578081fd5b5035919050565b6000806040838503121561247b578081fd5b505080516020909101519092909150565b6000815180845260208085019450808401835b838110156124c45781516001600160a01b03168752958201959082019060010161249f565b509495945050505050565b6000815180845260208085019450848183028601828601855b8581101561251257838303895261250083835161254e565b988501989250908401906001016124e8565b5090979650505050505050565b6000815180845260208085019450808401835b838110156124c457815187529582019590820190600101612532565b60008151808452612566816020860160208601612788565b601f01601f19169290920160200192915050565b6001600160a01b0391909116815260200190565b6020808252825182820181905260009190848201906040850190845b818110156125cf5783516001600160a01b0316835292840192918401916001016125aa565b50909695505050505050565b60a08101818360005b600581101561260c5781516001600160a01b03168352602092830192909101906001016125e4565b50505092915050565b600060208252612298602083018461248c565b60006020825261229860208301846124cf565b60006040825261264e60408301856124cf565b8281036020840152612448818561248c565b600060208252612298602083018461251f565b60006040825261264e604083018561251f565b600060408252612699604083018561251f565b828103602084015261244881856124cf565b6000606082526126be606083018661251f565b82810360208401526126d081866124cf565b905082810360408401526126e4818561248c565b9695505050505050565b901515815260200190565b600060208252612298602083018461254e565b90815260200190565b60008382526040602083015261272e604083018461254e565b949350505050565b918252602082015260400190565b6040518181016001600160401b038111828210171561275f57fe5b604052919050565b60006001600160401b0382111561277a57fe5b50601f01601f191660200190565b60005b838110156127a357818101518382015260200161278b565b83811115610e665750506000910152565b6001600160a01b038116811461093757600080fdfe4654534f20696e646578206e6f7420737570706f727465640000000000000000a2646970667358221220453dceff8b86360e566706dbdf29ce780c9c048c7842b19a868e9fc7e46f869c64736f6c634300070600336080604052600160005534801561001557600080fd5b50604051610c38380380610c3883398101604081905261003491610059565b600380546001600160a01b0319166001600160a01b0392909216919091179055610087565b60006020828403121561006a578081fd5b81516001600160a01b0381168114610080578182fd5b9392505050565b610ba2806100966000396000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c80635fc560141161005b5780635fc56014146100f357806398dccfc214610106578063aa89dfd414610119578063b06cbaf71461012c57610088565b806309fcb4001461008d578063345705a4146100b65780633de2cb1c146100cb57806347ed51b1146100de575b600080fd5b6100a061009b3660046108a6565b61014d565b6040516100ad9190610932565b60405180910390f35b6100c96100c43660046108a6565b610211565b005b6100c96100d9366004610753565b61027a565b6100e66102d0565b6040516100ad9190610b27565b6100c9610101366004610737565b6102d6565b6100e66101143660046108a6565b610322565b6100a061012736600461081f565b610334565b61013f61013a366004610737565b6103c9565b6040516100ad929190610967565b600081815260016020526040902054606090806101855760405162461bcd60e51b815260040161017c90610a96565b60405180910390fd5b6000838152600260205260409020546001600160a01b0316806101ba575050604080516000815260208101909152905061020c565b6040805160018082528183019092526000916020808301908036833701905050905081816000815181106101ea57fe5b6001600160a01b0390921660209283029190910190910152925061020c915050565b919050565b6003546001600160a01b0316331461023b5760405162461bcd60e51b815260040161017c90610af9565b600081815260016020526040902054156102675760405162461bcd60e51b815260040161017c90610a5f565b6000805491815260016020526040902055565b6102838261050c565b156102a05760405162461bcd60e51b815260040161017c90610a36565b60006102ac8383610512565b9050806102cb5760405162461bcd60e51b815260040161017c90610acd565b505050565b60005481565b6003546001600160a01b031633146103005760405162461bcd60e51b815260040161017c90610af9565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b60016020526000908152604090205481565b60048054604051630e848da360e41b81526060926000926001600160a01b03169163e848da3091610367918791016109e3565b60206040518083038186803b15801561037f57600080fd5b505afa158015610393573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103b791906108be565b90506103c28161014d565b9392505050565b6060806103d58361050c565b156103f25760405162461bcd60e51b815260040161017c90610a36565b600480546040805163798aac5b60e01b815290516001600160a01b039092169263798aac5b928282019260009290829003018186803b15801561043457600080fd5b505afa158015610448573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610470919081019061077e565b80519092508067ffffffffffffffff8111801561048c57600080fd5b506040519080825280602002602001820160405280156104b6578160200160208202803683370190505b50915060005b81811015610505576104e1858583815181106104d457fe5b6020026020010151610512565b8382815181106104ed57fe5b911515602092830291909101909101526001016104bc565b5050915091565b50600090565b6000818152600160205260408120548061053e5760405162461bcd60e51b815260040161017c90610a96565b6000838152600260205260409020546001600160a01b0390811690851681141561056d576001925050506105fd565b600084815260026020908152604080832080546001600160a01b0319166001600160a01b038a161790558051600180825281830190925291828101908036833701905050905081816000815181106105c157fe5b60200260200101906001600160a01b031690816001600160a01b0316815250506105eb8186610603565b6105f586866106cc565b600193505050505b92915050565b60005b8251811015610663577f33359f2769756ca8d0da4683f25ee440744d6f18bfb166dbfb59315a8c62b01683828151811061063c57fe5b602002602001015183604051610653929190610919565b60405180910390a1600101610606565b506003546040516376794efb60e01b81526001600160a01b03909116906376794efb906106969085908590600401610945565b600060405180830381600087803b1580156106b057600080fd5b505af11580156106c4573d6000803e3d6000fd5b505050505050565b7f66a8b13abe95391d1851f5bc319f3dde54ce8f2f40a5fe226aa3251d805832e382826040516106fd929190610919565b60405180910390a1600354604051639d986f9160e01b81526001600160a01b0390911690639d986f91906106969085908590600401610919565b600060208284031215610748578081fd5b81356103c281610b54565b60008060408385031215610765578081fd5b823561077081610b54565b946020939093013593505050565b60006020808385031215610790578182fd5b825167ffffffffffffffff808211156107a7578384fd5b818501915085601f8301126107ba578384fd5b8151818111156107c657fe5b83810291506107d6848301610b30565b8181528481019084860184860187018a10156107f0578788fd5b8795505b838610156108125780518352600195909501949186019186016107f4565b5098975050505050505050565b60006020808385031215610831578182fd5b823567ffffffffffffffff80821115610848578384fd5b818501915085601f83011261085b578384fd5b81358181111561086757fe5b610879601f8201601f19168501610b30565b9150808252868482850101111561088e578485fd5b80848401858401378101909201929092529392505050565b6000602082840312156108b7578081fd5b5035919050565b6000602082840312156108cf578081fd5b5051919050565b6000815180845260208085019450808401835b8381101561090e5781516001600160a01b0316875295820195908201906001016108e9565b509495945050505050565b6001600160a01b03929092168252602082015260400190565b6000602082526103c260208301846108d6565b60006040825261095860408301856108d6565b90508260208301529392505050565b604080825283519082018190526000906020906060840190828701845b828110156109a057815184529284019290840190600101610984565b50505083810382850152845180825285830191830190845b818110156109d65783511515835292840192918401916001016109b8565b5090979650505050505050565b6000602080835283518082850152825b81811015610a0f578581018301518582016040015282016109f3565b81811115610a205783604083870101525b50601f01601f1916929092016040019392505050565b6020808252600f908201526e74727573746564206164647265737360881b604082015260600190565b60208082526017908201527f77686974656c69737420616c7265616479206578697374000000000000000000604082015260600190565b60208082526018908201527f4654534f20696e646578206e6f7420737570706f727465640000000000000000604082015260600190565b602080825260129082015271766f746520706f77657220746f6f206c6f7760701b604082015260600190565b60208082526014908201527337b7363c90383934b1b29039bab136b4ba3a32b960611b604082015260600190565b90815260200190565b60405181810167ffffffffffffffff81118282101715610b4c57fe5b604052919050565b6001600160a01b0381168114610b6957600080fd5b5056fea2646970667358221220549e6c7c7ac31f3ec10176ac895f6576509d973efd5f6923d7910617cc6149ed64736f6c6343000706003360806040523480156200001157600080fd5b506040516200137c3803806200137c833981810160405260a08110156200003757600080fd5b81019080805160405193929190846401000000008211156200005857600080fd5b9083019060208201858111156200006e57600080fd5b82516401000000008111828201881017156200008957600080fd5b82525081516020918201929091019080838360005b83811015620000b85781810151838201526020016200009e565b50505050905090810190601f168015620000e65780820380516001836020036101000a031916815260200191505b5060409081526020828101519183015160608401516080909401518751939650909450916200011c916001919088019062000163565b50426003556000805460ff19166001179055600480546001600160a01b039095166001600160a01b031990951694909417909355600791909155600855600955506200020f565b828054600181600116156101000203166002900490600052602060002090601f0160209004810192826200019b5760008555620001e6565b82601f10620001b657805160ff1916838001178555620001e6565b82800160010185558215620001e6579182015b82811115620001e6578251825591602001919060010190620001c9565b50620001f4929150620001f8565b5090565b5b80821115620001f45760008155600101620001f9565b61115d806200021f6000396000f3fe608060405234801561001057600080fd5b506004361061021c5760003560e01c8063974d7a6b11610125578063d89601fd116100ad578063eb91d37e1161007c578063eb91d37e146106c5578063f670ebe314610852578063f72cab2814610877578063f7dba1f5146108a3578063f937d6ad146108f85761021c565b8063d89601fd146107aa578063e3749e0c146107b2578063e3b3a3b31461081d578063e536f396146104e55761021c565b8063c1f6c36e116100f4578063c1f6c36e146106e6578063c5d8b9e71461071e578063cd4b69141461074a578063cf35bdd014610767578063d0d552dd146107845761021c565b8063974d7a6b146104e55780639edbf00714610539578063a29a839f146106bd578063af52df08146106c55761021c565b80634afd5102116101a85780636b52b242116101775780636b52b242146105415780637d1d6f1214610549578063826cc76b146105665780638357d08c1461058357806395d89b41146106405761021c565b80634afd5102146104e55780635303548b14610502578063555989da146105315780635c222bad146105395761021c565b8063144e1591116101ef578063144e15911461035657806318931c351461037c5780632f0a6f3c146103d4578063306ba253146103fd57806340462a2d146104205761021c565b806302fb0c5e14610221578063040d73b81461023d57806311a7aaaa1461028d578063131fdee2146102b1575b600080fd5b610229610900565b604080519115158252519081900360200190f35b610245610909565b6040518086815260200185815260200184600581111561026157fe5b815260200183815260200182600581111561027857fe5b81526020019550505050505060405180910390f35b610295610918565b604080516001600160a01b039092168252519081900360200190f35b610354600480360360208110156102c757600080fd5b8101906020810181356401000000008111156102e257600080fd5b8201836020820111156102f457600080fd5b8035906020019184602083028401116401000000008311171561031657600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092955061091d945050505050565b005b61035e6109c3565b60408051938452602084019290925282820152519081900360600190f35b6103846109d1565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156103c05781810151838201526020016103a8565b505050509050019250505060405180910390f35b610354600480360360608110156103ea57600080fd5b508035906020810135906040013561091d565b6103546004803603604081101561041357600080fd5b508035906020013561091d565b6104456004803603604081101561043657600080fd5b50803590602001351515610a38565b604051808060200180602001848152602001838103835286818151815260200191508051906020019060200280838360005b8381101561048f578181015183820152602001610477565b50505050905001838103825285818151815260200191508051906020019060200280838360005b838110156104ce5781810151838201526020016104b6565b505050509050019550505050505060405180910390f35b610354600480360360208110156104fb57600080fd5b503561091d565b61051f6004803603602081101561051857600080fd5b5035610aa4565b60408051918252519081900360200190f35b61035461091d565b610295610ab7565b61051f610b1a565b61051f6004803603602081101561055f57600080fd5b5035610ab7565b6102956004803603602081101561057c57600080fd5b5035610b1f565b61058b610b49565b604051808060200180602001878152602001868152602001858152602001848152602001838103835289818151815260200191508051906020019060200280838360005b838110156105e75781810151838201526020016105cf565b50505050905001838103825288818151815260200191508051906020019060200280838360005b8381101561062657818101518382015260200161060e565b505050509050019850505050505050505060405180910390f35b610648610bee565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561068257818101518382015260200161066a565b50505050905090810190601f1680156106af5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61051f610c7b565b6106cd610c8a565b6040805192835260208301919091528051918290030190f35b610354600480360360808110156106fc57600080fd5b506001600160a01b038135169060208101359060408101359060600135610c90565b61051f6004803603604081101561073457600080fd5b50803590602001356001600160a01b0316610e3e565b61051f6004803603602081101561076057600080fd5b5035610e66565b6102956004803603602081101561077d57600080fd5b5035610e71565b6103546004803603602081101561079a57600080fd5b50356001600160a01b031661091d565b61051f610e81565b6107ba610eaf565b6040518088815260200187815260200186815260200185815260200184815260200183815260200180602001828103825283818151815260200191508051906020019060200280838360008381101561062657818101518382015260200161060e565b610825610f75565b60408051958652602086019490945284840192909252606084015215156080830152519081900360a00190f35b6103546004803603604081101561086857600080fd5b5080359060200135151561091d565b61051f6004803603604081101561088d57600080fd5b506001600160a01b038135169060200135610fab565b610354600480360360e08110156108b957600080fd5b81359160208101359160408201359160608101359160808201359160a08101359181019060e0810160c08201356401000000008111156102e257600080fd5b610295610fb3565b60005460ff1681565b60008060008060009091929394565b600090565b6040805180820190915260178152600080516020611108833981519152602082015260405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610988578181015183820152602001610970565b50505050905090810190601f1680156109b55780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b600754600854600954909192565b604080518082018252601781526000805160206111088339815191526020808301918252925162461bcd60e51b8152600481019384528251602482015282516060949283926044019180838360008315610988578181015183820152602001610970565b90565b604080518082018252601781526000805160206111088339815191526020808301918252925162461bcd60e51b81526004810193845282516024820152825160609485946000949093919283926044019190808383898315610988578181015183820152602001610970565b6000610aaf82610fc2565b90505b919050565b604080518082018252601781526000805160206111088339815191526020808301918252925162461bcd60e51b81526004810193845282516024820152825160009492839260440191808383898315610988578181015183820152602001610970565b600581565b60068181548110610b2f57600080fd5b6000918252602090912001546001600160a01b0316905081565b606080600080600080600060405180604001604052806017815260200160008051602061110883398151915281525090610bc45760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610988578181015183820152602001610970565b50506040805160008082526020820181815282840190935290979196509450849350839250829150565b60018054604080516020600284861615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610c735780601f10610c4857610100808354040283529160200191610c73565b820191906000526020600020905b815481529060010190602001808311610c5657829003601f168201915b505050505081565b6000610c85610fed565b905090565b60008091565b6004546001600160a01b03163314610caa57610caa610ff8565b60408051808201909152600e81526d0a0e4d2c6ca40e8dede40d0d2ced60931b6020820152600160801b8310610d215760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610988578181015183820152602001610970565b506008546007546001850190910201428111801590610d435750600954810142105b6040518060400160405280601881526020017f52657665616c20706572696f64206e6f7420616374697665000000000000000081525090610dc55760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610988578181015183820152602001610970565b506000848152600a602090815260408083206001600160a01b038916808552908352818420879055815187815242938101939093528282018490526060830193909352518692917fc1b1d37612887c207efe8cb44f4069b7f10c45edaf6e8405648a94e02b6e9ec7919081900360800190a35050505050565b6000918252600a602090815260408084206001600160a01b0393909316845291905290205490565b6000610aaf82611060565b60058181548110610b2f57600080fd5b600080610e8c610fed565b905080610e9d576000915050610a35565b610ea960018203611060565b91505090565b6000806000806000806060600060405180604001604052806017815260200160008051602061110883398151915281525090610f2c5760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610988578181015183820152602001610970565b506000808080808080604051908082528060200260200182016040528015610f5e578160200160208202803683370190505b50959d949c50929a50909850965094509092509050565b6000806000806000610f85610fed565b945060085485600101026007540193506009548401925060009150600090509091929394565b600092915050565b6004546001600160a01b031681565b6000600754821015610fd657506000610ab2565b600854600754830381610fe557fe5b049050610ab2565b6000610c8542610fc2565b604080518082018252600d81526c1058d8d95cdcc819195b9a5959609a1b6020808301918252925162461bcd60e51b81526004810193845282516024820152825192939283926044909201919080838360008315610988578181015183820152602001610970565b6004805460408051633352da4560e21b8152928301849052516000926001600160a01b039092169163cd4b6914916024808301926020929190829003018186803b1580156110ad57600080fd5b505afa1580156110c1573d6000803e3d6000fd5b505050506040513d60208110156110d757600080fd5b5051604080516020808201939093523081830152815180820383018152606090910190915280519101209291505056fe556e617661696c61626c6520666f722074657374696e67000000000000000000a264697066735822122024f13c817e06bd2a0779fdf3edacb11d2a2353c7114eac4e036788b4a50510ab64736f6c63430007060033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100f55760003560e01c80639d986f9111610097578063c0156bcc11610066578063c0156bcc146101b9578063cd4b6914146101c1578063d89601fd146101d4578063e2db5a52146101dc576100f5565b80639d986f9114610178578063aea36b531461018b578063b00c0b761461019e578063b39c6858146101b1576100f5565b806376794efb116100d357806376794efb146101355780637ac420ad1461014a5780638c9d28b61461015d5780638fc6f66714610165576100f5565b80633b56f098146100fa5780635267a15d1461011857806371e1fad91461012d575b600080fd5b6101026101ef565b60405161010f91906113d5565b60405180910390f35b6101206101f7565b60405161010f91906112af565b61012061021c565b610148610143366004611003565b61022c565b005b610102610158366004610fb5565b6102e8565b610120610303565b610148610173366004611254565b610312565b610148610186366004610fd8565b610573565b610148610199366004610fb5565b6105f5565b6101486101ac366004611046565b610658565b610120610703565b61010261071d565b6101026101cf3660046111b2565b610722565b61010261073c565b6101486101ea3660046111e2565b610861565b600160801b81565b7f714f205b2abd25bef1d06a1af944e38c113fe6160375c4e1d6d5cf28848e77195490565b6001546001600160a01b03165b90565b600154604080518082019091526016815275566f7465722077686974656c6973746572206f6e6c7960501b6020820152906001600160a01b0316331461028e5760405162461bcd60e51b815260040161028591906113de565b60405180910390fd5b5060005b82518110156102e357816001901b19600260008584815181106102b157fe5b6020908102919091018101516001600160a01b0316825281019190915260400160002080549091169055600101610292565b505050565b6001600160a01b031660009081526002602052604090205490565b6000546001600160a01b031690565b6000805460405163d75f6d8160e01b81526001600160a01b039091169063d75f6d81906103439084906004016113d5565b60206040518083038186803b15801561035b57600080fd5b505afa15801561036f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103939190611196565b9050806001600160a01b031663a29a839f6040518163ffffffff1660e01b815260040160206040518083038186803b1580156103ce57600080fd5b505afa1580156103e2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061040691906111ca565b83146040518060400160405280600e81526020016d15dc9bdb99c8195c1bd8da081a5960921b8152509061044d5760405162461bcd60e51b815260040161028591906113de565b506000838152600360209081526040808320338452825291829020548251808401909352601983527f4475706c6963617465207375626d697420696e2065706f63680000000000000091830191909152156104bb5760405162461bcd60e51b815260040161028591906113de565b5033600090815260026020908152604091829020548251808401909352600f83526e139bdd081dda1a5d195b1a5cdd1959608a1b918301919091526105135760405162461bcd60e51b815260040161028591906113de565b5060008381526003602090815260408083203380855292529182902084905590518491907f5e2f64e70eafef31c2f48c8ef140b36406531c36ab0faaede30843202c16f6a89061056690869042906113c7565b60405180910390a3505050565b600154604080518082019091526016815275566f7465722077686974656c6973746572206f6e6c7960501b6020820152906001600160a01b031633146105cc5760405162461bcd60e51b815260040161028591906113de565b506001600160a01b0390911660009081526002602052604090208054600190921b919091179055565b60006105ff6101f7565b6001600160a01b0316146040518060400160405280600b81526020016a105b1c9958591e481cd95d60aa1b8152509061064b5760405162461bcd60e51b815260040161028591906113de565b5061065581610cea565b50565b6106606101f7565b6001600160a01b0316336001600160a01b0316146106bc576040805162461bcd60e51b815260206004820152601460248201527337b7363c9030b2323932b9b9903ab83230ba32b960611b604482015290519081900360640190fd5b6106f56106f083836040518060400160405280600e81526020016d20b2323932b9b9aab83230ba32b960911b815250610d0e565b610cea565b6106ff8282610e3b565b5050565b600060405162461bcd60e51b815260040161028590611431565b606481565b60006004606483066064811061073457fe5b015492915050565b6000805460405163d75f6d8160e01b815282916001600160a01b03169063d75f6d819061076d9084906004016113d5565b60206040518083038186803b15801561078557600080fd5b505afa158015610799573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107bd9190611196565b90506000816001600160a01b031663a29a839f6040518163ffffffff1660e01b815260040160206040518083038186803b1580156107fa57600080fd5b505afa15801561080e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061083291906111ca565b90508061084457600092505050610229565b600460646000198301066064811061085857fe5b01549250505090565b8251825160408051808201909152601a81527f4172726179206c656e6774687320646f206e6f74206d6174636800000000000060208201529082146108b95760405162461bcd60e51b815260040161028591906113de565b5060408051808201909152601781527f546f6f20736d616c6c2072616e646f6d206e756d6265720000000000000000006020820152600160801b8310156109135760405162461bcd60e51b815260040161028591906113de565b508383833360405160200161092b9493929190611380565b60408051601f19818403018152828252805160209182012060008981526003835283812033825283528390205460608501909352602380855292149291906114d9908301399061098e5760405162461bcd60e51b815260040161028591906113de565b50600080546040516313968ea760e31b81526001600160a01b0390911690639cb47538906109c090889060040161136d565b60006040518083038186803b1580156109d857600080fd5b505afa1580156109ec573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610a1491908101906110fd565b3360009081526002602052604081205491925083610a33576000610ac7565b82600081518110610a4057fe5b60200260200101516001600160a01b031663f72cab28338a6040518363ffffffff1660e01b8152600401610a759291906112c3565b602060405180830381600087803b158015610a8f57600080fd5b505af1158015610aa3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ac791906111ca565b90506000805b85811015610c3f578015801590610af75750888181518110610aeb57fe5b60200260200101518210155b15610b4757604080518082018252601b81527f4654534f20696e6469636573206e6f7420696e6372656173696e6700000000006020820152905162461bcd60e51b815261028591906004016113de565b888181518110610b5357fe5b60200260200101519150816001901b841660001415610ba957604080518082018252600f81526e139bdd081dda1a5d195b1a5cdd1959608a1b6020820152905162461bcd60e51b815261028591906004016113de565b848181518110610bb557fe5b60200260200101516001600160a01b031663c1f6c36e338c8b8581518110610bd957fe5b6020026020010151876040518563ffffffff1660e01b8152600401610c0194939291906112dc565b600060405180830381600087803b158015610c1b57600080fd5b505af1158015610c2f573d6000803e3d6000fd5b505060019092019150610acd9050565b5060008981526003602090815260408083203384528252808320929092559051610c6d9188918a9101611460565b60408051601f198184030181529190528051602090910120600460648b0660648110610c9557fe5b0180549091019055604051899033907fafffa539ac1cad89751c875d871abadc6deb7bd51bf6baea004fc71ca0a48fa590610cd79088908c908c904290611302565b60405180910390a3505050505050505050565b7f714f205b2abd25bef1d06a1af944e38c113fe6160375c4e1d6d5cf28848e771955565b600080826040516020018080602001828103825283818151815260200191508051906020019080838360005b83811015610d52578181015183820152602001610d3a565b50505050905090810190601f168015610d7f5780820380516001836020036101000a031916815260200191505b50925050506040516020818303038152906040528051906020012090506000805b8651811015610de757868181518110610db557fe5b6020026020010151831415610ddf57858181518110610dd057fe5b60200260200101519150610de7565b600101610da0565b506001600160a01b038116610e32576040805162461bcd60e51b815260206004820152600c60248201526b61646472657373207a65726f60a01b604482015290519081900360640190fd5b95945050505050565b610e6a82826040518060400160405280600c81526020016b4674736f526567697374727960a01b815250610d0e565b6000806101000a8154816001600160a01b0302191690836001600160a01b03160217905550610ec282826040518060400160405280601081526020016f2b37ba32b92bb434ba32b634b9ba32b960811b815250610d0e565b600180546001600160a01b0319166001600160a01b03929092169190911790555050565b600082601f830112610ef6578081fd5b81356020610f0b610f06836114a5565b611481565b8281528181019085830183850287018401881015610f27578586fd5b855b85811015610f4e578135610f3c816114c3565b84529284019290840190600101610f29565b5090979650505050505050565b600082601f830112610f6b578081fd5b81356020610f7b610f06836114a5565b8281528181019085830183850287018401881015610f97578586fd5b855b85811015610f4e57813584529284019290840190600101610f99565b600060208284031215610fc6578081fd5b8135610fd1816114c3565b9392505050565b60008060408385031215610fea578081fd5b8235610ff5816114c3565b946020939093013593505050565b60008060408385031215611015578182fd5b823567ffffffffffffffff81111561102b578283fd5b61103785828601610ee6565b95602094909401359450505050565b60008060408385031215611058578182fd5b823567ffffffffffffffff8082111561106f578384fd5b818501915085601f830112611082578384fd5b81356020611092610f06836114a5565b82815281810190858301838502870184018b10156110ae578889fd5b8896505b848710156110d05780358352600196909601959183019183016110b2565b50965050860135925050808211156110e6578283fd5b506110f385828601610ee6565b9150509250929050565b6000602080838503121561110f578182fd5b825167ffffffffffffffff811115611125578283fd5b8301601f81018513611135578283fd5b8051611143610f06826114a5565b818152838101908385018584028501860189101561115f578687fd5b8694505b8385101561118a578051611176816114c3565b835260019490940193918501918501611163565b50979650505050505050565b6000602082840312156111a7578081fd5b8151610fd1816114c3565b6000602082840312156111c3578081fd5b5035919050565b6000602082840312156111db578081fd5b5051919050565b600080600080608085870312156111f7578182fd5b84359350602085013567ffffffffffffffff80821115611215578384fd5b61122188838901610f5b565b94506040870135915080821115611236578384fd5b5061124387828801610f5b565b949793965093946060013593505050565b60008060408385031215611266578182fd5b50508035926020909101359150565b6000815180845260208085019450808401835b838110156112a457815187529582019590820190600101611288565b509495945050505050565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b0394909416845260208401929092526040830152606082015260800190565b6080808252855190820181905260009060209060a0840190828901845b828110156113445781516001600160a01b03168452928401929084019060010161131f565b505050838103828501526113588188611275565b60408501969096525050506060015292915050565b600060208252610fd16020830184611275565b6000608082526113936080830187611275565b82810360208401526113a58187611275565b604084019590955250506001600160a01b039190911660609091015292915050565b918252602082015260400190565b90815260200190565b6000602080835283518082850152825b8181101561140a578581018301518582016040015282016113ee565b8181111561141b5783604083870101525b50601f01601f1916929092016040019392505050565b602080825260159082015274139bdd081a5b88191d5b5b5e4818dbdb9d1c9858dd605a1b604082015260600190565b6000838252604060208301526114796040830184611275565b949350505050565b60405181810167ffffffffffffffff8111828210171561149d57fe5b604052919050565b600067ffffffffffffffff8211156114b957fe5b5060209081020190565b6001600160a01b038116811461065557600080fdfe507269636520616c72656164792072657665616c6564206f72206e6f742076616c6964a26469706673582212207674be2fe85fc7b6d027eb2e83c2a3496db00e67669630987f5cdb2cd42ffe2e64736f6c63430007060033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
