@gooddollar/goodprotocol
Version:
GoodDollar Protocol
373 lines • 52.1 kB
JSON
{
"_format": "hh-sol-artifact-1",
"contractName": "ExchangeHelper",
"sourceName": "contracts/reserve/ExchangeHelper.sol",
"abi": [
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "address",
"name": "previousAdmin",
"type": "address"
},
{
"indexed": false,
"internalType": "address",
"name": "newAdmin",
"type": "address"
}
],
"name": "AdminChanged",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "beacon",
"type": "address"
}
],
"name": "BeaconUpgraded",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint8",
"name": "version",
"type": "uint8"
}
],
"name": "Initialized",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "caller",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "inputToken",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "inputAmount",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "actualReturn",
"type": "uint256"
},
{
"indexed": true,
"internalType": "address",
"name": "receiverAddress",
"type": "address"
}
],
"name": "TokenPurchased",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "caller",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "outputToken",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "gdAmount",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "contributionAmount",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "actualReturn",
"type": "uint256"
},
{
"indexed": true,
"internalType": "address",
"name": "receiverAddress",
"type": "address"
}
],
"name": "TokenSold",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "implementation",
"type": "address"
}
],
"name": "Upgraded",
"type": "event"
},
{
"inputs": [],
"name": "avatar",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address[]",
"name": "_buyPath",
"type": "address[]"
},
{
"internalType": "uint256",
"name": "_tokenAmount",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "_minReturn",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "_minDAIAmount",
"type": "uint256"
},
{
"internalType": "address",
"name": "_targetAddress",
"type": "address"
}
],
"name": "buy",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [],
"name": "cDaiAddress",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "daiAddress",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "dao",
"outputs": [
{
"internalType": "contract Controller",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "contract INameService",
"name": "_ns",
"type": "address"
}
],
"name": "initialize",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "nameService",
"outputs": [
{
"internalType": "contract INameService",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "nativeToken",
"outputs": [
{
"internalType": "contract IGoodDollar",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "proxiableUUID",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address[]",
"name": "_sellPath",
"type": "address[]"
},
{
"internalType": "uint256",
"name": "_gdAmount",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "_minReturn",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "_minTokenReturn",
"type": "uint256"
},
{
"internalType": "address",
"name": "_targetAddress",
"type": "address"
}
],
"name": "sell",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "setAddresses",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "updateAvatar",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "newImplementation",
"type": "address"
}
],
"name": "upgradeTo",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "newImplementation",
"type": "address"
},
{
"internalType": "bytes",
"name": "data",
"type": "bytes"
}
],
"name": "upgradeToAndCall",
"outputs": [],
"stateMutability": "payable",
"type": "function"
}
],
"bytecode": "0x60a06040523060805234801561001457600080fd5b50608051612adb61004c600039600081816108f201528181610932015281816109ba015281816109fa0152610a760152612adb6000f3fe6080604052600436106100ad5760003560e01c806303c40ef4146100b25780631b3c90a8146100d85780632c387275146100ef5780633659cfe61461011c5780633e6326fc1461013c5780634162169f1461015c5780634f1ef2861461017c57806352d1902d1461018f5780635aef7de6146101a45780637738fd0b146101c4578063bc3a429b146101e4578063c4d66de8146101f9578063e1758bd814610219578063f2c65bf91461022e575b600080fd5b6100c56100c036600461246e565b61024e565b6040519081526020015b60405180910390f35b3480156100e457600080fd5b506100ed6107c1565b005b3480156100fb57600080fd5b50609b5461010f906001600160a01b031681565b6040516100cf9190612538565b34801561012857600080fd5b506100ed61013736600461254c565b6108e8565b34801561014857600080fd5b5060675461010f906001600160a01b031681565b34801561016857600080fd5b5060655461010f906001600160a01b031681565b6100ed61018a366004612569565b6109b0565b34801561019b57600080fd5b506100c5610a69565b3480156101b057600080fd5b5060665461010f906001600160a01b031681565b3480156101d057600080fd5b506100c56101df36600461246e565b610b17565b3480156101f057600080fd5b506100ed611106565b34801561020557600080fd5b506100ed61021436600461254c565b611561565b34801561022557600080fd5b5061010f611687565b34801561023a57600080fd5b50609c5461010f906001600160a01b031681565b6000609a5460020361027b5760405162461bcd60e51b815260040161027290612610565b60405180910390fd5b6002609a55855161029e5760405162461bcd60e51b815260040161027290612647565b60675460405163bf40fac160e01b81526000916001600160a01b03169063bf40fac1906102cd90600401612673565b602060405180830381865afa1580156102ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061030e9190612694565b905060006001600160a01b038416156103275783610329565b335b905060006001600160a01b031688600081518110610349576103496126b1565b60200260200101516001600160a01b0316036103ba5760003411801561036e57503487145b6103b55760405162461bcd60e51b81526020600482015260186024820152770f2deea40dccacac840e8de40e0c2f240eed2e8d0408aa8960431b6044820152606401610272565b61053b565b341561043a5760405162461bcd60e51b815260206004820152604360248201527f5768656e20696e70757420746f6b656e20697320646966666572656e7420746860448201527f616e20455448206d6573736167652076616c75652073686f756c64206265207a60648201526265726f60e81b608482015260a401610272565b8760008151811061044d5761044d6126b1565b60200260200101516001600160a01b03166323b872dd33308a6040518463ffffffff1660e01b8152600401610484939291906126c7565b6020604051808303816000875af11580156104a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104c791906126eb565b61053b576040805162461bcd60e51b81526020600482015260248101919091527f7472616e7366657246726f6d206661696c65642c206d616b652073757265207960448201527f6f7520617070726f76656420696e70757420746f6b656e207472616e736665726064820152608401610272565b609c5488516000916001600160a01b0316908a90839061055d5761055d6126b1565b60200260200101516001600160a01b0316036105ed576040516359a87bc160e01b81526001600160a01b038416906359a87bc1906105a3908b908b90879060040161270d565b6020604051808303816000875af11580156105c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105e6919061272c565b9050610736565b609b5489516001600160a01b03909116908a9060009061060f5761060f6126b1565b60200260200101516001600160a01b031603610630576105e68888846116fc565b609b5489516001600160a01b03909116908a9061064f90600190612745565b8151811061065f5761065f6126b1565b60200260200101516001600160a01b0316146106c95760405162461bcd60e51b8152602060048201526024808201527f54617267657420746f6b656e20696e207468652070617468206d7573742062656044820152632044414960e01b6064820152608401610272565b60006106d98a8a8960003061199d565b9050600081600183516106ec9190612745565b815181106106fc576106fc6126b1565b60200260200101519050600081116107265760405162461bcd60e51b815260040161027290612766565b610731818a866116fc565b925050505b816001600160a01b031689600081518110610753576107536126b1565b60200260200101516001600160a01b0316336001600160a01b03167fcace70a03cbf3e4fa942b0ab9f70aa3834cfab0a31aa75bc4895262063444e128b856040516107a8929190918252602082015260400190565b60405180910390a46001609a5598975050505050505050565b60675460405163bf40fac160e01b815260206004820152600a60248201526921a7a72a2927a62622a960b11b60448201526001600160a01b039091169063bf40fac190606401602060405180830381865afa158015610824573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108489190612694565b606580546001600160a01b0319166001600160a01b0392909216918217905560408051632d77bef360e11b81529051635aef7de6916004808201926020929091908290030181865afa1580156108a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108c69190612694565b606680546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036109305760405162461bcd60e51b815260040161027290612794565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610962611d66565b6001600160a01b0316146109885760405162461bcd60e51b8152600401610272906127ce565b61099181611d82565b604080516000808252602082019092526109ad91839190611d8a565b50565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036109f85760405162461bcd60e51b815260040161027290612794565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610a2a611d66565b6001600160a01b031614610a505760405162461bcd60e51b8152600401610272906127ce565b610a5982611d82565b610a6582826001611d8a565b5050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610b045760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c6044820152771b1959081d1a1c9bdd59da0819195b1959d85d1958d85b1b60421b6064820152608401610272565b50600080516020612a5f83398151915290565b6000609a54600203610b3b5760405162461bcd60e51b815260040161027290612610565b6002609a558551610b5e5760405162461bcd60e51b815260040161027290612647565b60006001600160a01b03831615610b755782610b77565b335b60675460405163bf40fac160e01b8152919250600091829182916001600160a01b039091169063bf40fac190610baf90600401612673565b602060405180830381865afa158015610bcc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf09190612694565b60675460405163bf40fac160e01b81529192506001600160a01b03169063bf40fac190610c1f90600401612808565b602060405180830381865afa158015610c3c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c609190612694565b6001600160a01b03166323b872dd33308c6040518463ffffffff1660e01b8152600401610c8f939291906126c7565b6020604051808303816000875af1158015610cae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cd291906126eb565b50806001600160a01b0316634f8f02188a8a8d516001148015610d255750609c548e516001600160a01b03909116908f90600090610d1257610d126126b1565b60200260200101516001600160a01b0316145b610d2f5730610d31565b875b6040516001600160e01b031960e086901b168152600481019390935260248301919091526001600160a01b0316604482015233606482015260840160408051808303816000875af1158015610d8a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dae919061282c565b8b5191945092506001148015610e2e5750609b548a516001600160a01b03909116908b90600090610de157610de16126b1565b60200260200101516001600160a01b03161480610e2e5750609c548a516001600160a01b03909116908b90600090610e1b57610e1b6126b1565b60200260200101516001600160a01b0316145b15610f4957609b548a516001600160a01b03909116908b90600090610e5557610e556126b1565b60200260200101516001600160a01b031603610f4457610e7483611efa565b925089600081518110610e8957610e896126b1565b60200260200101516001600160a01b031663a9059cbb85856040518363ffffffff1660e01b8152600401610ebe929190612850565b6020604051808303816000875af1158015610edd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f0191906126eb565b1515600114610f445760405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b6044820152606401610272565b611074565b609c548a516001600160a01b03909116908b90600090610f6b57610f6b6126b1565b60200260200101516001600160a01b0316146100ad57610f8a83611efa565b609b548b519194506001600160a01b0316908b90600090610fad57610fad6126b1565b60200260200101516001600160a01b0316146110175760405162461bcd60e51b815260206004820152602360248201527f496e70757420746f6b656e20666f7220756e6973776170206d7573742062652060448201526244414960e81b6064820152608401610272565b60006110278b8560008b8961199d565b905080600182516110389190612745565b81518110611048576110486126b1565b60200260200101519350600084116110725760405162461bcd60e51b815260040161027290612766565b505b836001600160a01b03168a60018c5161108d9190612745565b8151811061109d5761109d6126b1565b602090810291909101810151604080518d815292830186905282018690526001600160a01b03169033907f067ad67f3f4d17211f9f929d19036c2395bbc9b201d517e46e81f9ceae86032e9060600160405180910390a450506001609a55979650505050505050565b60675460405163bf40fac160e01b815260206004820152600360248201526244414960e81b60448201526001600160a01b039091169063bf40fac190606401602060405180830381865afa158015611162573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111869190612694565b609b80546001600160a01b0319166001600160a01b0392831617905560675460405163bf40fac160e01b815260206004808301919091526024820152634344414960e01b604482015291169063bf40fac190606401602060405180830381865afa1580156111f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061121c9190612694565b609c80546001600160a01b0319166001600160a01b03928316908117909155609b5460405163095ea7b360e01b815292169163095ea7b3916112649160001990600401612850565b6020604051808303816000875af1158015611283573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a791906126eb565b5060675460405163bf40fac160e01b81526000916001600160a01b03169063bf40fac1906112d790600401612673565b602060405180830381865afa1580156112f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113189190612694565b90506001600160a01b038116156114845760675460405163bf40fac160e01b81526001600160a01b039091169063bf40fac19061135790600401612808565b602060405180830381865afa158015611374573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113989190612694565b6001600160a01b031663095ea7b3826000196040518363ffffffff1660e01b81526004016113c7929190612850565b6020604051808303816000875af11580156113e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061140a91906126eb565b50609c5460405163095ea7b360e01b81526001600160a01b039091169063095ea7b39061143f90849060001990600401612850565b6020604051808303816000875af115801561145e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061148291906126eb565b505b609b5460675460405163bf40fac160e01b81526001600160a01b039283169263095ea7b392169063bf40fac1906114bd90600401612869565b602060405180830381865afa1580156114da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114fe9190612694565b6000196040518363ffffffff1660e01b815260040161151e929190612850565b6020604051808303816000875af115801561153d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6591906126eb565b600054610100900460ff16158080156115815750600054600160ff909116105b806115a25750611590306120b2565b1580156115a2575060005460ff166001145b6116055760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610272565b6000805460ff191660011790558015611628576000805461ff0019166101001790555b611631826120c1565b611639611106565b6001609a558015610a65576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b60675460405163bf40fac160e01b81526000916001600160a01b03169063bf40fac1906116b690600401612808565b602060405180830381865afa1580156116d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116f79190612694565b905090565b60675460405163bf40fac160e01b815260009182916001600160a01b039091169063bf40fac19061172f90600401612673565b602060405180830381865afa15801561174c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117709190612694565b609c546040516370a0823160e01b81529192506001600160a01b03169060009082906370a08231906117a6903090600401612538565b602060405180830381865afa1580156117c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117e7919061272c565b60405163140e25ad60e31b8152600481018990529091506000906001600160a01b0384169063a0712d68906024016020604051808303816000875af1158015611834573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611858919061272c565b9050801561189e5760405162461bcd60e51b8152602060048201526013602482015272135a5b9d1a5b99c818d1185a4819985a5b1959606a1b6044820152606401610272565b600082846001600160a01b03166370a08231306040518263ffffffff1660e01b81526004016118cd9190612538565b602060405180830381865afa1580156118ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061190e919061272c565b6119189190612745565b6040516359a87bc160e01b81529091506001600160a01b038616906359a87bc19061194b9084908c908c9060040161270d565b6020604051808303816000875af115801561196a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061198e919061272c565b955050505050505b9392505050565b60675460405163bf40fac160e01b81526060916000916001600160a01b039091169063bf40fac1906119d190600401612869565b602060405180830381865afa1580156119ee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a129190612694565b90506000816001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a789190612694565b609b5489519192506060916000916001600160a01b0316908b90611a9e90600190612745565b81518110611aae57611aae6126b1565b60200260200101516001600160a01b031614905060006001600160a01b03168a600081518110611ae057611ae06126b1565b60200260200101516001600160a01b031603611ba057828a600081518110611b0a57611b0a6126b1565b6001600160a01b039283166020918202929092010152604051637ff36ab560e01b815290851690637ff36ab5908b90611b4d908c908f90309042906004016128d5565b60006040518083038185885af1158015611b6b573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f19168201604052611b94919081019061290a565b9450611d5d9350505050565b60006001600160a01b03168a60018c51611bba9190612745565b81518110611bca57611bca6126b1565b60200260200101516001600160a01b031603611c8a57828a60018c51611bf09190612745565b81518110611c0057611c006126b1565b6001600160a01b0392831660209182029290920101526040516318cbafe560e01b8152908516906318cbafe590611c43908c908b908f908c90429060040161298f565b6000604051808303816000875af1158015611c62573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611b94919081019061290a565b8015611d1d5789600081518110611ca357611ca36126b1565b60200260200101516001600160a01b031663095ea7b3858b6040518363ffffffff1660e01b8152600401611cd8929190612850565b6020604051808303816000875af1158015611cf7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d1b91906126eb565b505b836001600160a01b03166338ed17398a83611d385789611d3a565b8a5b8d8a426040518663ffffffff1660e01b8152600401611c4395949392919061298f565b95945050505050565b600080516020612a5f833981519152546001600160a01b031690565b6109ad6120e4565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff1615611dc257611dbd836121a9565b505050565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611e1c575060408051601f3d908101601f19168201909252611e199181019061272c565b60015b611e7f5760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608401610272565b600080516020612a5f8339815191528114611eee5760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608401610272565b50611dbd838383612243565b609c54609b546040516370a0823160e01b81526000926001600160a01b03908116921690839082906370a0823190611f36903090600401612538565b602060405180830381865afa158015611f53573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f77919061272c565b60405163db006a7560e01b8152600481018790529091506000906001600160a01b0385169063db006a75906024016020604051808303816000875af1158015611fc4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fe8919061272c565b9050801561202d5760405162461bcd60e51b815260206004820152601260248201527118d1185a481c995919595b4819985a5b195960721b6044820152606401610272565b600082846001600160a01b03166370a08231306040518263ffffffff1660e01b815260040161205c9190612538565b602060405180830381865afa158015612079573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061209d919061272c565b6120a79190612745565b979650505050505050565b6001600160a01b03163b151590565b606780546001600160a01b0319166001600160a01b0383161790556109ad6107c1565b60655460408051632d77bef360e11b8152905133926001600160a01b031691635aef7de69160048083019260209291908290030181865afa15801561212d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121519190612694565b6001600160a01b0316146121a75760405162461bcd60e51b815260206004820181905260248201527f6f6e6c79206176617461722063616e2063616c6c2074686973206d6574686f646044820152606401610272565b565b6121b2816120b2565b6122145760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610272565b600080516020612a5f83398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b61224c8361226e565b6000825111806122595750805b15611dbd5761226883836122ae565b50505050565b612277816121a9565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606122b9836120b2565b6123145760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610272565b600080846001600160a01b03168460405161232f91906129ef565b600060405180830381855af49150503d806000811461236a576040519150601f19603f3d011682016040523d82523d6000602084013e61236f565b606091505b50915091506123978282604051806060016040528060278152602001612a7f602791396123a2565b925050505b92915050565b606083156123b1575081611996565b61199683838151156123c65781518083602001fd5b8060405162461bcd60e51b81526004016102729190612a0b565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b038111828210171561241e5761241e6123e0565b604052919050565b60006001600160401b0382111561243f5761243f6123e0565b5060051b60200190565b6001600160a01b03811681146109ad57600080fd5b803561246981612449565b919050565b600080600080600060a0868803121561248657600080fd5b85356001600160401b0381111561249c57600080fd5b8601601f810188136124ad57600080fd5b803560206124c26124bd83612426565b6123f6565b82815260059290921b8301810191818101908b8411156124e157600080fd5b938201935b838510156125085784356124f981612449565b825293820193908201906124e6565b98505088013595505050604086013592506060860135915061252c6080870161245e565b90509295509295909350565b6001600160a01b0391909116815260200190565b60006020828403121561255e57600080fd5b813561199681612449565b6000806040838503121561257c57600080fd5b823561258781612449565b91506020838101356001600160401b03808211156125a457600080fd5b818601915086601f8301126125b857600080fd5b8135818111156125ca576125ca6123e0565b6125dc601f8201601f191685016123f6565b915080825287848285010111156125f257600080fd5b80848401858401376000848284010152508093505050509250929050565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b6020808252601290820152710a0e4deecd2c8ca40ecc2d8d2c840e0c2e8d60731b604082015260600190565b6020808252600790820152665245534552564560c81b604082015260600190565b6000602082840312156126a657600080fd5b815161199681612449565b634e487b7160e01b600052603260045260246000fd5b6001600160a01b039384168152919092166020820152604081019190915260600190565b6000602082840312156126fd57600080fd5b8151801515811461199657600080fd5b92835260208301919091526001600160a01b0316604082015260600190565b60006020828403121561273e57600080fd5b5051919050565b8181038181111561239c57634e487b7160e01b600052601160045260246000fd5b6020808252601490820152731d1bdad95b881cd95b1b1a5b99c819985a5b195960621b604082015260600190565b6020808252602c90820152600080516020612a3f83398151915260408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c90820152600080516020612a3f83398151915260408201526b6163746976652070726f787960a01b606082015260800190565b6020808252600a908201526923a7a7a22227a62620a960b11b604082015260600190565b6000806040838503121561283f57600080fd5b505080516020909101519092909150565b6001600160a01b03929092168252602082015260400190565b6020808252600e908201526d2aa724a9aba0a82fa927aaaa22a960911b604082015260600190565b600081518084526020808501945080840160005b838110156128ca5781516001600160a01b0316875295820195908201906001016128a5565b509495945050505050565b8481526080602082015260006128ee6080830186612891565b6001600160a01b03949094166040830152506060015292915050565b6000602080838503121561291d57600080fd5b82516001600160401b0381111561293357600080fd5b8301601f8101851361294457600080fd5b80516129526124bd82612426565b81815260059190911b8201830190838101908783111561297157600080fd5b928401925b828410156120a757835182529284019290840190612976565b85815284602082015260a0604082015260006129ae60a0830186612891565b6001600160a01b0394909416606083015250608001529392505050565b60005b838110156129e65781810151838201526020016129ce565b50506000910152565b60008251612a018184602087016129cb565b9190910192915050565b6020815260008251806020840152612a2a8160408501602087016129cb565b601f01601f1916919091016040019291505056fe46756e6374696f6e206d7573742062652063616c6c6564207468726f75676820360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220f6d53534f2a2ee71192a4c8fef80f4ff1b0db81e4359ca1eb155f14ada07ca6064736f6c63430008130033",
"deployedBytecode": "0x6080604052600436106100ad5760003560e01c806303c40ef4146100b25780631b3c90a8146100d85780632c387275146100ef5780633659cfe61461011c5780633e6326fc1461013c5780634162169f1461015c5780634f1ef2861461017c57806352d1902d1461018f5780635aef7de6146101a45780637738fd0b146101c4578063bc3a429b146101e4578063c4d66de8146101f9578063e1758bd814610219578063f2c65bf91461022e575b600080fd5b6100c56100c036600461246e565b61024e565b6040519081526020015b60405180910390f35b3480156100e457600080fd5b506100ed6107c1565b005b3480156100fb57600080fd5b50609b5461010f906001600160a01b031681565b6040516100cf9190612538565b34801561012857600080fd5b506100ed61013736600461254c565b6108e8565b34801561014857600080fd5b5060675461010f906001600160a01b031681565b34801561016857600080fd5b5060655461010f906001600160a01b031681565b6100ed61018a366004612569565b6109b0565b34801561019b57600080fd5b506100c5610a69565b3480156101b057600080fd5b5060665461010f906001600160a01b031681565b3480156101d057600080fd5b506100c56101df36600461246e565b610b17565b3480156101f057600080fd5b506100ed611106565b34801561020557600080fd5b506100ed61021436600461254c565b611561565b34801561022557600080fd5b5061010f611687565b34801561023a57600080fd5b50609c5461010f906001600160a01b031681565b6000609a5460020361027b5760405162461bcd60e51b815260040161027290612610565b60405180910390fd5b6002609a55855161029e5760405162461bcd60e51b815260040161027290612647565b60675460405163bf40fac160e01b81526000916001600160a01b03169063bf40fac1906102cd90600401612673565b602060405180830381865afa1580156102ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061030e9190612694565b905060006001600160a01b038416156103275783610329565b335b905060006001600160a01b031688600081518110610349576103496126b1565b60200260200101516001600160a01b0316036103ba5760003411801561036e57503487145b6103b55760405162461bcd60e51b81526020600482015260186024820152770f2deea40dccacac840e8de40e0c2f240eed2e8d0408aa8960431b6044820152606401610272565b61053b565b341561043a5760405162461bcd60e51b815260206004820152604360248201527f5768656e20696e70757420746f6b656e20697320646966666572656e7420746860448201527f616e20455448206d6573736167652076616c75652073686f756c64206265207a60648201526265726f60e81b608482015260a401610272565b8760008151811061044d5761044d6126b1565b60200260200101516001600160a01b03166323b872dd33308a6040518463ffffffff1660e01b8152600401610484939291906126c7565b6020604051808303816000875af11580156104a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104c791906126eb565b61053b576040805162461bcd60e51b81526020600482015260248101919091527f7472616e7366657246726f6d206661696c65642c206d616b652073757265207960448201527f6f7520617070726f76656420696e70757420746f6b656e207472616e736665726064820152608401610272565b609c5488516000916001600160a01b0316908a90839061055d5761055d6126b1565b60200260200101516001600160a01b0316036105ed576040516359a87bc160e01b81526001600160a01b038416906359a87bc1906105a3908b908b90879060040161270d565b6020604051808303816000875af11580156105c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105e6919061272c565b9050610736565b609b5489516001600160a01b03909116908a9060009061060f5761060f6126b1565b60200260200101516001600160a01b031603610630576105e68888846116fc565b609b5489516001600160a01b03909116908a9061064f90600190612745565b8151811061065f5761065f6126b1565b60200260200101516001600160a01b0316146106c95760405162461bcd60e51b8152602060048201526024808201527f54617267657420746f6b656e20696e207468652070617468206d7573742062656044820152632044414960e01b6064820152608401610272565b60006106d98a8a8960003061199d565b9050600081600183516106ec9190612745565b815181106106fc576106fc6126b1565b60200260200101519050600081116107265760405162461bcd60e51b815260040161027290612766565b610731818a866116fc565b925050505b816001600160a01b031689600081518110610753576107536126b1565b60200260200101516001600160a01b0316336001600160a01b03167fcace70a03cbf3e4fa942b0ab9f70aa3834cfab0a31aa75bc4895262063444e128b856040516107a8929190918252602082015260400190565b60405180910390a46001609a5598975050505050505050565b60675460405163bf40fac160e01b815260206004820152600a60248201526921a7a72a2927a62622a960b11b60448201526001600160a01b039091169063bf40fac190606401602060405180830381865afa158015610824573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108489190612694565b606580546001600160a01b0319166001600160a01b0392909216918217905560408051632d77bef360e11b81529051635aef7de6916004808201926020929091908290030181865afa1580156108a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108c69190612694565b606680546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036109305760405162461bcd60e51b815260040161027290612794565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610962611d66565b6001600160a01b0316146109885760405162461bcd60e51b8152600401610272906127ce565b61099181611d82565b604080516000808252602082019092526109ad91839190611d8a565b50565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036109f85760405162461bcd60e51b815260040161027290612794565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610a2a611d66565b6001600160a01b031614610a505760405162461bcd60e51b8152600401610272906127ce565b610a5982611d82565b610a6582826001611d8a565b5050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610b045760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c6044820152771b1959081d1a1c9bdd59da0819195b1959d85d1958d85b1b60421b6064820152608401610272565b50600080516020612a5f83398151915290565b6000609a54600203610b3b5760405162461bcd60e51b815260040161027290612610565b6002609a558551610b5e5760405162461bcd60e51b815260040161027290612647565b60006001600160a01b03831615610b755782610b77565b335b60675460405163bf40fac160e01b8152919250600091829182916001600160a01b039091169063bf40fac190610baf90600401612673565b602060405180830381865afa158015610bcc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf09190612694565b60675460405163bf40fac160e01b81529192506001600160a01b03169063bf40fac190610c1f90600401612808565b602060405180830381865afa158015610c3c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c609190612694565b6001600160a01b03166323b872dd33308c6040518463ffffffff1660e01b8152600401610c8f939291906126c7565b6020604051808303816000875af1158015610cae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cd291906126eb565b50806001600160a01b0316634f8f02188a8a8d516001148015610d255750609c548e516001600160a01b03909116908f90600090610d1257610d126126b1565b60200260200101516001600160a01b0316145b610d2f5730610d31565b875b6040516001600160e01b031960e086901b168152600481019390935260248301919091526001600160a01b0316604482015233606482015260840160408051808303816000875af1158015610d8a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dae919061282c565b8b5191945092506001148015610e2e5750609b548a516001600160a01b03909116908b90600090610de157610de16126b1565b60200260200101516001600160a01b03161480610e2e5750609c548a516001600160a01b03909116908b90600090610e1b57610e1b6126b1565b60200260200101516001600160a01b0316145b15610f4957609b548a516001600160a01b03909116908b90600090610e5557610e556126b1565b60200260200101516001600160a01b031603610f4457610e7483611efa565b925089600081518110610e8957610e896126b1565b60200260200101516001600160a01b031663a9059cbb85856040518363ffffffff1660e01b8152600401610ebe929190612850565b6020604051808303816000875af1158015610edd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f0191906126eb565b1515600114610f445760405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b6044820152606401610272565b611074565b609c548a516001600160a01b03909116908b90600090610f6b57610f6b6126b1565b60200260200101516001600160a01b0316146100ad57610f8a83611efa565b609b548b519194506001600160a01b0316908b90600090610fad57610fad6126b1565b60200260200101516001600160a01b0316146110175760405162461bcd60e51b815260206004820152602360248201527f496e70757420746f6b656e20666f7220756e6973776170206d7573742062652060448201526244414960e81b6064820152608401610272565b60006110278b8560008b8961199d565b905080600182516110389190612745565b81518110611048576110486126b1565b60200260200101519350600084116110725760405162461bcd60e51b815260040161027290612766565b505b836001600160a01b03168a60018c5161108d9190612745565b8151811061109d5761109d6126b1565b602090810291909101810151604080518d815292830186905282018690526001600160a01b03169033907f067ad67f3f4d17211f9f929d19036c2395bbc9b201d517e46e81f9ceae86032e9060600160405180910390a450506001609a55979650505050505050565b60675460405163bf40fac160e01b815260206004820152600360248201526244414960e81b60448201526001600160a01b039091169063bf40fac190606401602060405180830381865afa158015611162573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111869190612694565b609b80546001600160a01b0319166001600160a01b0392831617905560675460405163bf40fac160e01b815260206004808301919091526024820152634344414960e01b604482015291169063bf40fac190606401602060405180830381865afa1580156111f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061121c9190612694565b609c80546001600160a01b0319166001600160a01b03928316908117909155609b5460405163095ea7b360e01b815292169163095ea7b3916112649160001990600401612850565b6020604051808303816000875af1158015611283573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a791906126eb565b5060675460405163bf40fac160e01b81526000916001600160a01b03169063bf40fac1906112d790600401612673565b602060405180830381865afa1580156112f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113189190612694565b90506001600160a01b038116156114845760675460405163bf40fac160e01b81526001600160a01b039091169063bf40fac19061135790600401612808565b602060405180830381865afa158015611374573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113989190612694565b6001600160a01b031663095ea7b3826000196040518363ffffffff1660e01b81526004016113c7929190612850565b6020604051808303816000875af11580156113e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061140a91906126eb565b50609c5460405163095ea7b360e01b81526001600160a01b039091169063095ea7b39061143f90849060001990600401612850565b6020604051808303816000875af115801561145e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061148291906126eb565b505b609b5460675460405163bf40fac160e01b81526001600160a01b039283169263095ea7b392169063bf40fac1906114bd90600401612869565b602060405180830381865afa1580156114da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114fe9190612694565b6000196040518363ffffffff1660e01b815260040161151e929190612850565b6020604051808303816000875af115801561153d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6591906126eb565b600054610100900460ff16158080156115815750600054600160ff909116105b806115a25750611590306120b2565b1580156115a2575060005460ff166001145b6116055760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610272565b6000805460ff191660011790558015611628576000805461ff0019166101001790555b611631826120c1565b611639611106565b6001609a558015610a65576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b60675460405163bf40fac160e01b81526000916001600160a01b03169063bf40fac1906116b690600401612808565b602060405180830381865afa1580156116d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116f79190612694565b905090565b60675460405163bf40fac160e01b815260009182916001600160a01b039091169063bf40fac19061172f90600401612673565b602060405180830381865afa15801561174c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117709190612694565b609c546040516370a0823160e01b81529192506001600160a01b03169060009082906370a08231906117a6903090600401612538565b602060405180830381865afa1580156117c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117e7919061272c565b60405163140e25ad60e31b8152600481018990529091506000906001600160a01b0384169063a0712d68906024016020604051808303816000875af1158015611834573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611858919061272c565b9050801561189e5760405162461bcd60e51b8152602060048201526013602482015272135a5b9d1a5b99c818d1185a4819985a5b1959606a1b6044820152606401610272565b600082846001600160a01b03166370a08231306040518263ffffffff1660e01b81526004016118cd9190612538565b602060405180830381865afa1580156118ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061190e919061272c565b6119189190612745565b6040516359a87bc160e01b81529091506001600160a01b038616906359a87bc19061194b9084908c908c9060040161270d565b6020604051808303816000875af115801561196a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061198e919061272c565b955050505050505b9392505050565b60675460405163bf40fac160e01b81526060916000916001600160a01b039091169063bf40fac1906119d190600401612869565b602060405180830381865afa1580156119ee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a129190612694565b90506000816001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a789190612694565b609b5489519192506060916000916001600160a01b0316908b90611a9e90600190612745565b81518110611aae57611aae6126b1565b60200260200101516001600160a01b031614905060006001600160a01b03168a600081518110611ae057611ae06126b1565b60200260200101516001600160a01b031603611ba057828a600081518110611b0a57611b0a6126b1565b6001600160a01b039283166020918202929092010152604051637ff36ab560e01b815290851690637ff36ab5908b90611b4d908c908f90309042906004016128d5565b60006040518083038185885af1158015611b6b573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f19168201604052611b94919081019061290a565b9450611d5d9350505050565b60006001600160a01b03168a60018c51611bba9190612745565b81518110611bca57611bca6126b1565b60200260200101516001600160a01b031603611c8a57828a60018c51611bf09190612745565b81518110611c0057611c006126b1565b6001600160a01b0392831660209182029290920101526040516318cbafe560e01b8152908516906318cbafe590611c43908c908b908f908c90429060040161298f565b6000604051808303816000875af1158015611c62573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611b94919081019061290a565b8015611d1d5789600081518110611ca357611ca36126b1565b60200260200101516001600160a01b031663095ea7b3858b6040518363ffffffff1660e01b8152600401611cd8929190612850565b6020604051808303816000875af1158015611cf7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d1b91906126eb565b505b836001600160a01b03166338ed17398a83611d385789611d3a565b8a5b8d8a426040518663ffffffff1660e01b8152600401611c4395949392919061298f565b95945050505050565b600080516020612a5f833981519152546001600160a01b031690565b6109ad6120e4565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff1615611dc257611dbd836121a9565b505050565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611e1c575060408051601f3d908101601f19168201909252611e199181019061272c565b60015b611e7f5760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608401610272565b600080516020612a5f8339815191528114611eee5760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608401610272565b50611dbd838383612243565b609c54609b546040516370a0823160e01b81526000926001600160a01b03908116921690839082906370a0823190611f36903090600401612538565b602060405180830381865afa158015611f53573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f77919061272c565b60405163db006a7560e01b8152600481018790529091506000906001600160a01b0385169063db006a75906024016020604051808303816000875af1158015611fc4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fe8919061272c565b9050801561202d5760405162461bcd60e51b815260206004820152601260248201527118d1185a481c995919595b4819985a5b195960721b6044820152606401610272565b600082846001600160a01b03166370a08231306040518263ffffffff1660e01b815260040161205c9190612538565b602060405180830381865afa158015612079573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061209d919061272c565b6120a79190612745565b979650505050505050565b6001600160a01b03163b151590565b606780546001600160a01b0319166001600160a01b0383161790556109ad6107c1565b60655460408051632d77bef360e11b8152905133926001600160a01b031691635aef7de69160048083019260209291908290030181865afa15801561212d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121519190612694565b6001600160a01b0316146121a75760405162461bcd60e51b815260206004820181905260248201527f6f6e6c79206176617461722063616e2063616c6c2074686973206d6574686f646044820152606401610272565b565b6121b2816120b2565b6122145760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610272565b600080516020612a5f83398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b61224c8361226e565b6000825111806122595750805b15611dbd5761226883836122ae565b50505050565b612277816121a9565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606122b9836120b2565b6123145760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610272565b600080846001600160a01b03168460405161232f91906129ef565b600060405180830381855af49150503d806000811461236a576040519150601f19603f3d011682016040523d82523d6000602084013e61236f565b606091505b50915091506123978282604051806060016040528060278152602001612a7f602791396123a2565b925050505b92915050565b606083156123b1575081611996565b61199683838151156123c65781518083602001fd5b8060405162461bcd60e51b81526004016102729190612a0b565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b038111828210171561241e5761241e6123e0565b604052919050565b60006001600160401b0382111561243f5761243f6123e0565b5060051b60200190565b6001600160a01b03811681146109ad57600080fd5b803561246981612449565b919050565b600080600080600060a0868803121561248657600080fd5b85356001600160401b0381111561249c57600080fd5b8601601f810188136124ad57600080fd5b803560206124c26124bd83612426565b6123f6565b82815260059290921b8301810191818101908b8411156124e157600080fd5b938201935b838510156125085784356124f981612449565b825293820193908201906124e6565b98505088013595505050604086013592506060860135915061252c6080870161245e565b90509295509295909350565b6001600160a01b0391909116815260200190565b60006020828403121561255e57600080fd5b813561199681612449565b6000806040838503121561257c57600080fd5b823561258781612449565b91506020838101356001600160401b03808211156125a457600080fd5b818601915086601f8301126125b857600080fd5b8135818111156125ca576125ca6123e0565b6125dc601f8201601f191685016123f6565b915080825287848285010111156125f257600080fd5b80848401858401376000848284010152508093505050509250929050565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b6020808252601290820152710a0e4deecd2c8ca40ecc2d8d2c840e0c2e8d60731b604082015260600190565b6020808252600790820152665245534552564560c81b604082015260600190565b6000602082840312156126a657600080fd5b815161199681612449565b634e487b7160e01b600052603260045260246000fd5b6001600160a01b03938416815291909216602082015260408101919091526