0x6080604052348015600e575f80fd5b506118e18061001c5f395ff3fe608060405234801561000f575f80fd5b5060043610610060575f3560e01c806305b4591c146100645780630cec719f14610079578063ae0e6ef11461008c578063b1022fdf1461009f578063d8fbc833146100b2578063f8109c28146100e2575b5f80fd5b610077610072366004610f40565b6100f5565b005b610077610087366004610f9e565b6101d9565b61007761009a366004610fd2565b610386565b6100776100ad366004610f40565b6104c9565b6100c65f8051602061186c83398151915281565b6040516001600160a01b03909116815260200160405180910390f35b6100776100f0366004610fd2565b610609565b335f8051602061186c8339815191521461012a5760405162461bcd60e51b815260040161012190611029565b60405180910390fd5b5f8051602061188c8339815191525c5f8061014785850186611152565b915091508160ff165f03610165576101608387836106ff565b6101d1565b8160ff1660010361017b57610160838783610939565b60405162461bcd60e51b815260206004820152602560248201527f4d6f7270686f204c6f6f7065723a20496e76616c69642072657061792063616c6044820152646c6261636b60d81b6064820152608401610121565b505050505050565b5f8051602061188c8339815191525c6001600160a01b0381161561020f5760405162461bcd60e51b8152600401610121906111a4565b610217610a7e565b5f838360405160200161022b929190611255565b60408051601f1981840301815291905290505f5f8051602061186c8339815191526393c5206261026a610263368990038901896112e3565b60a0902090565b6040516001600160e01b031960e084901b1681526004810191909152336024820152604401606060405180830381865afa1580156102aa573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102ce9190611318565b90505f8051602061186c8339815191526001600160a01b03166320b76e81865f8460200151335f886040516020016103079291906113a9565b6040516020818303038152906040526040518663ffffffff1660e01b81526004016103369594939291906113cc565b60408051808303815f875af1158015610351573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610375919061141f565b50505050610381610a90565b505050565b5f8051602061188c8339815191525c6001600160a01b038116156103bc5760405162461bcd60e51b8152600401610121906111a4565b6103c4610a7e565b60405163238d657960e01b81525f8051602061186c8339815191529063238d6579906103fc9088908890339089908990600401611469565b5f604051808303815f87803b158015610413575f80fd5b505af1158015610425573d5f803e3d5ffd5b505f9250610442915061043d905060208801886114a1565b610aa2565b1115610479576104793361045c61043d60208901896114a1565b61046960208901896114a1565b6001600160a01b03169190610b10565b5f61048d61043d60408801602089016114a1565b11156104ba576104ba336104aa61043d6040890160208a016114a1565b6104696040890160208a016114a1565b6104c2610a90565b5050505050565b335f8051602061186c833981519152146104f55760405162461bcd60e51b815260040161012190611029565b5f8051602061188c8339815191525c5f80808080610515888801896114bc565b6040516350d8cd4b60e01b8152949950929750909550935091505f8051602061186c833981519152906350d8cd4b9061055a90889088905f908c90309060040161156d565b60408051808303815f875af1158015610575573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610599919061141f565b505084516105b1906001600160a01b03168386610b6f565b6105c46001600160a01b03831682610bfc565b5082156105e55760208501516105e5906001600160a01b0316873086610c10565b60208501516105fe906001600160a01b0316338b610b6f565b505050505050505050565b5f8051602061188c8339815191525c6001600160a01b0381161561063f5760405162461bcd60e51b8152600401610121906111a4565b610647610a7e565b5f8051602061186c8339815191526001600160a01b03166320b76e8186865f336001898960405160200161067d939291906115a9565b6040516020818303038152906040526040518663ffffffff1660e01b81526004016106ac9594939291906115c5565b60408051808303815f875af11580156106c7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106eb919061141f565b505f905061044261043d60208801886114a1565b5f80828060200190518101906107159190611676565b90925090505f5f8051602061186c8339815191526393c520626107398560a0902090565b6040516001600160e01b031960e084901b16815260048101919091526001600160a01b0389166024820152604401606060405180830381865afa158015610782573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107a69190611318565b6040808201519051638720316d60e01b81529192505f8051602061186c83398151915291638720316d916107e3918791908b9030906004016116a1565b5f604051808303815f87803b1580156107fa575f80fd5b505af115801561080c573d5f803e3d5ffd5b5050506040820151602084015161083892506001600160a01b03169033906001600160801b0316610b6f565b60408181015181515f8152602081019283905263238d657960e01b9092525f8051602061186c8339815191529163238d65799161087d918691908b90602481016116de565b5f604051808303815f87803b158015610894575f80fd5b505af11580156108a6573d5f803e3d5ffd5b50506040516350d8cd4b60e01b81525f8051602061186c83398151915292506350d8cd4b91506108e290859089905f908c90309060040161156d565b60408051808303815f875af11580156108fd573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610921919061141f565b505082516101d1906001600160a01b03163387610b6f565b5f805f80848060200190518101906109519190611728565b604051638720316d60e01b8152939750919550935091505f8051602061186c83398151915290638720316d9061099190879087908c9030906004016117cc565b5f604051808303815f87803b1580156109a8575f80fd5b505af11580156109ba573d5f803e3d5ffd5b505050506001600160a01b0382165f8051602061186c83398151915203610a325760405162461bcd60e51b815260206004820152602660248201527f4d6f7270686f4c6f6f7065723a2043616e277420757365206d6f7270686f207460448201526506f20737761760d41b6064820152608401610121565b6020840151610a4b906001600160a01b03168385610b6f565b610a5e6001600160a01b03831682610bfc565b508351610a75906001600160a01b03163388610b6f565b50505050505050565b335f8051602061188c8339815191525d565b5f5f8051602061188c8339815191525d565b6040516370a0823160e01b81523060048201525f906001600160a01b038316906370a0823190602401602060405180830381865afa158015610ae6573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b0a9190611800565b92915050565b6040516001600160a01b0383811660248301526044820183905261038191859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050610c49565b604051636eb1769f60e11b81523060048201526001600160a01b0383811660248301525f919085169063dd62ed3e90604401602060405180830381865afa158015610bbc573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610be09190611800565b9050610bf68484610bf18585611817565b610caa565b50505050565b6060610c0983835f610d39565b9392505050565b6040516001600160a01b038481166024830152838116604483015260648201839052610bf69186918216906323b872dd90608401610b3d565b5f610c5d6001600160a01b03841683610bfc565b905080515f14158015610c81575080806020019051810190610c7f9190611836565b155b1561038157604051635274afe760e01b81526001600160a01b0384166004820152602401610121565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b179052610cfb8482610dd2565b610bf6576040516001600160a01b0384811660248301525f6044830152610d2f91869182169063095ea7b390606401610b3d565b610bf68482610c49565b606081471015610d5e5760405163cd78605960e01b8152306004820152602401610121565b5f80856001600160a01b03168486604051610d799190611855565b5f6040518083038185875af1925050503d805f8114610db3576040519150601f19603f3d011682016040523d82523d5f602084013e610db8565b606091505b5091509150610dc8868383610e73565b9695505050505050565b5f805f846001600160a01b031684604051610ded9190611855565b5f604051808303815f865af19150503d805f8114610e26576040519150601f19603f3d011682016040523d82523d5f602084013e610e2b565b606091505b5091509150818015610e55575080511580610e55575080806020019051810190610e559190611836565b8015610e6a57505f856001600160a01b03163b115b95945050505050565b606082610e8857610e8382610ecf565b610c09565b8151158015610e9f57506001600160a01b0384163b155b15610ec857604051639996b31560e01b81526001600160a01b0385166004820152602401610121565b5080610c09565b805115610edf5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b50565b5f8083601f840112610f0b575f80fd5b50813567ffffffffffffffff811115610f22575f80fd5b602083019150836020828501011115610f39575f80fd5b9250929050565b5f805f60408486031215610f52575f80fd5b83359250602084013567ffffffffffffffff811115610f6f575f80fd5b610f7b86828701610efb565b9497909650939450505050565b5f60a08284031215610f98575f80fd5b50919050565b5f806101408385031215610fb0575f80fd5b610fba8484610f88565b9150610fc98460a08501610f88565b90509250929050565b5f805f8060e08587031215610fe5575f80fd5b610fef8686610f88565b935060a0850135925060c085013567ffffffffffffffff811115611011575f80fd5b61101d87828801610efb565b95989497509550505050565b60208082526022908201527f4d6f7270686f4c6f6f7065723a204f6e6c79204d6f7270686f2063616e2063616040820152611b1b60f21b606082015260800190565b634e487b7160e01b5f52604160045260245ffd5b60405160a0810167ffffffffffffffff811182821017156110a2576110a261106b565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156110d1576110d161106b565b604052919050565b5f67ffffffffffffffff8211156110f2576110f261106b565b50601f01601f191660200190565b5f82601f83011261110f575f80fd5b813561112261111d826110d9565b6110a8565b818152846020838601011115611136575f80fd5b816020850160208301375f918101602001919091529392505050565b5f8060408385031215611163575f80fd5b823560ff81168114611173575f80fd5b9150602083013567ffffffffffffffff81111561118e575f80fd5b61119a85828601611100565b9150509250929050565b6020808252601b908201527f4d6f7270686f4c6f6f7065723a204e6f207265656e7472616e63790000000000604082015260600190565b6001600160a01b0381168114610ef8575f80fd5b80356111fa816111db565b6001600160a01b039081168352602082013590611216826111db565b908116602084015260408201359061122d826111db565b9081166040840152606082013590611244826111db565b166060830152608090810135910152565b610140810161126482856111ef565b610c0960a08301846111ef565b5f60a08284031215611281575f80fd5b61128961107f565b90508135611296816111db565b815260208201356112a6816111db565b602082015260408201356112b9816111db565b604082015260608201356112cc816111db565b806060830152506080820135608082015292915050565b5f60a082840312156112f3575f80fd5b610c098383611271565b80516001600160801b0381168114611313575f80fd5b919050565b5f60608284031215611328575f80fd5b6040516060810181811067ffffffffffffffff8211171561134b5761134b61106b565b6040528251815261135e602084016112fd565b602082015261136f604084016112fd565b60408201529392505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b60ff83168152604060208201525f6113c4604083018461137b565b949350505050565b5f6101206113da83896111ef565b60a083018790526001600160801b03861660c08401526001600160a01b03851660e084015261010083018190526114138184018561137b565b98975050505050505050565b5f8060408385031215611430575f80fd5b505080516020909101519092909150565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f61010061147783896111ef565b60a083018790526001600160a01b03861660c084015260e083018190526114138184018587611441565b5f602082840312156114b1575f80fd5b8135610c09816111db565b5f805f805f61012086880312156114d1575f80fd5b6114db8787611271565b945060a0860135935060c0860135925060e08601356114f9816111db565b915061010086013567ffffffffffffffff811115611515575f80fd5b61152188828901611100565b9150509295509295909350565b80516001600160a01b03908116835260208083015182169084015260408083015182169084015260608083015190911690830152608090810151910152565b610120810161157c828861152e565b60a082019590955260c08101939093526001600160a01b0391821660e08401521661010090910152919050565b60ff84168152604060208201525f610e6a604083018486611441565b5f6101206115d383896111ef565b60a0830187905260c083018690526001600160a01b03851660e084015261010083018190526114138184018561137b565b5f60a08284031215611614575f80fd5b61161c61107f565b90508151611629816111db565b81526020820151611639816111db565b6020820152604082015161164c816111db565b6040820152606082015161165f816111db565b806060830152506080820151608082015292915050565b5f806101408385031215611688575f80fd5b6116928484611604565b9150610fc98460a08501611604565b61010081016116b0828761152e565b6001600160801b039490941660a08201526001600160a01b0392831660c0820152911660e090910152919050565b5f6101006116ec838861152e565b6001600160801b03861660a08401526001600160a01b03851660c084015260e0830181905261171d8184018561137b565b979650505050505050565b5f805f80610100858703121561173c575f80fd5b6117468686611604565b935060a0850151925060c085015161175d816111db565b60e086015190925067ffffffffffffffff811115611779575f80fd5b8501601f81018713611789575f80fd5b805161179761111d826110d9565b8181528860208385010111156117ab575f80fd5b8160208401602083015e5f6020838301015280935050505092959194509250565b61010081016117db828761152e565b60a08201949094526001600160a01b0392831660c0820152911660e090910152919050565b5f60208284031215611810575f80fd5b5051919050565b80820180821115610b0a57634e487b7160e01b5f52601160045260245ffd5b5f60208284031215611846575f80fd5b81518015158114610c09575f80fd5b5f82518060208501845e5f92019182525091905056fe000000000000000000000000bbbbbbbbbb9cc5e90e3b3af64bdaf62c37eeffcbf237c608addc654cd9ac10545b304d8a6cb2291864f4a81deaccc630a7ade2d4a26469706673582212209068416e1cc4ab4a468f4c1a7e1275a77688c0fba18bb0be16cde450b60bd35764736f6c63430008190033