0x60806040523480156200001157600080fd5b5033806200003a57604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b620000458162000366565b5060408051600280825260608201909252600091816020015b604080516060808201835260008083526020830152918101919091528152602001906001900390816200005e5750506040805160018082528183019092529192506000919060208083019080368337019050509050631f931c1c60e01b81600081518110620000d157620000d162000fdb565b6001600160e01b031990921660209283029190910182015260408051606081019091523081529081016000815260200182815250826000815181106200011b576200011b62000fdb565b602090810291909101015260408051600580825260c08201909252600091816020016020820280368337019050509050637a0ed62760e01b8160008151811062000169576200016962000fdb565b6001600160e01b03199092166020928302919091019091015280516314bbdacb60e21b9082906001908110620001a357620001a362000fdb565b6001600160e01b03199092166020928302919091019091015280516366ffd66360e11b9082906002908110620001dd57620001dd62000fdb565b6001600160e01b03199092166020928302919091019091015280516356fe50af60e11b908290600390811062000217576200021762000fdb565b6001600160e01b03199092166020928302919091019091015280516301ffc9a760e01b908290600490811062000251576200025162000fdb565b6001600160e01b031990921660209283029190910182015260408051606081019091523081529081016000815260200182815250836001815181106200029b576200029b62000fdb565b6020026020010181905250620002c983600060405180602001604052806000815250620003b660201b60201c565b50506004602052507f9fe05126d2d9ecf60592e254dead906a4b2e492f36cca727682c38e9008c6ac18054600160ff1991821681179092557feb33f7af817e05ada45d46fc9928dd0ea87955c9ba4e291b3bfca204a3dbeefd80548216831790556348e2b09360e01b6000527fba357f679aff304a5ff904ff1aae87ba06cf278f5f9fe046d6de9d2723949c5180549091169091179055620011d7565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b620003c0620005f3565b60005b8351811015620005b1576000848281518110620003e457620003e462000fdb565b6020026020010151602001519050600085838151811062000409576200040962000fdb565b602002602001015160400151905060008151116200046a5760405162461bcd60e51b815260206004820152601c60248201527f4e6f2073656c6563746f727320696e20666163657420746f2063757400000000604482015260640162000031565b600082600281111562000481576200048162000ff1565b03620004bf57620004b9868481518110620004a057620004a062000fdb565b602002602001015160000151826200062460201b60201c565b620005a6565b6001826002811115620004d657620004d662000ff1565b036200050e57620004b9868481518110620004f557620004f562000fdb565b602002602001015160000151826200083c60201b60201c565b600282600281111562000525576200052562000ff1565b036200055d57620004b986848151811062000544576200054462000fdb565b6020026020010151600001518262000a5f60201b60201c565b60405162461bcd60e51b815260206004820152601860248201527f496e636f7272656374204661636574437574416374696f6e0000000000000000604482015260640162000031565b5050600101620003c3565b507f8faa70878671ccd212d20771b795c50af8fd3ff6cf27f4bde57e5d4de0aeb673836000604051620005e692919062001007565b60405180910390a1505050565b6000546001600160a01b03163314620006225760405163118cdaa760e01b815233600482015260240162000031565b565b6001600160a01b038216620006805760405162461bcd60e51b815260206004820152602c60248201526000805160206200284b83398151915260448201526b65206164647265737328302960a01b606482015260840162000031565b6001600160a01b038216600090815260026020526040812054906001600160601b0382169003620006b657620006b68362000b51565b60005b825181101562000836576000838281518110620006da57620006da62000fdb565b6020908102919091018101516001600160e01b03198116600090815260019092526040909120549091506001600160a01b03168015620007835760405162461bcd60e51b815260206004820152603560248201527f4c69624469616d6f6e644375743a2043616e2774206164642066756e6374696f60448201527f6e207468617420616c7265616479206578697374730000000000000000000000606482015260840162000031565b6001600160e01b03198216600081815260016020818152604080842080546001600160a01b03908116600160a01b6001600160601b038d16021782558c1680865260028452918520805480860182559086528386206008820401805463ffffffff60079093166004026101000a928302191660e08b901c92909202919091179055949093525281546001600160a01b03191617905583620008248162001123565b94505060019092019150620006b99050565b50505050565b6001600160a01b038216620008985760405162461bcd60e51b815260206004820152602c60248201526000805160206200284b83398151915260448201526b65206164647265737328302960a01b606482015260840162000031565b6001600160a01b038216600090815260026020526040812054906001600160601b0382169003620008ce57620008ce8362000b51565b60005b825181101562000836576000838281518110620008f257620008f262000fdb565b6020908102919091018101516001600160e01b03198116600090815260019092526040909120549091506001600160a01b039081169086168103620009a05760405162461bcd60e51b815260206004820152603560248201527f4c69624469616d6f6e644375743a2043616e2774207265706c6163652066756e60448201527f6374696f6e20776974682073616d652066616365740000000000000000000000606482015260840162000031565b620009ac818362000beb565b6001600160e01b03198216600081815260016020818152604080842080546001600160a01b03908116600160a01b6001600160601b038d16021782558c1680865260028452918520805480860182559086528386206008820401805463ffffffff60079093166004026101000a928302191660e08b901c92909202919091179055949093525281546001600160a01b0319161790558362000a4d8162001123565b94505060019092019150620008d19050565b6001600160a01b0382161562000ade5760405162461bcd60e51b815260206004820152603660248201527f4c69624469616d6f6e644375743a2052656d6f7665206661636574206164647260448201527f657373206d757374206265206164647265737328302900000000000000000000606482015260840162000031565b60005b815181101562000b4c57600082828151811062000b025762000b0262000fdb565b6020908102919091018101516001600160e01b03198116600090815260019092526040909120549091506001600160a01b031662000b41818362000beb565b505060010162000ae1565b505050565b6001600160a01b038116301462000b875762000b87816040518060600160405280602481526020016200286b6024913962000fb7565b600380546001600160a01b039092166000818152600260205260408120600190810185905584018355919091527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b90910180546001600160a01b0319169091179055565b6001600160a01b03821662000c695760405162461bcd60e51b815260206004820152603760248201527f4c69624469616d6f6e644375743a2043616e27742072656d6f76652066756e6360448201527f74696f6e207468617420646f65736e2774206578697374000000000000000000606482015260840162000031565b306001600160a01b0383160362000cda5760405162461bcd60e51b815260206004820152602e60248201527f4c69624469616d6f6e644375743a2043616e27742072656d6f766520696d6d7560448201526d3a30b1363290333ab731ba34b7b760911b606482015260840162000031565b6001600160e01b031981166000908152600160208181526040808420546001600160a01b03871685526002909252832054600160a01b9091046001600160601b0316929162000d299162001154565b905080821462000e1f576001600160a01b038416600090815260026020526040812080548390811062000d605762000d6062000fdb565b600091825260208083206008830401546001600160a01b038916845260029091526040909220805460079092166004026101000a90920460e01b92508291908590811062000db25762000db262000fdb565b600091825260208083206008830401805463ffffffff60079094166004026101000a938402191660e09590951c929092029390931790556001600160e01b0319929092168252600190526040902080546001600160a01b0316600160a01b6001600160601b038516021790555b6001600160a01b038416600090815260026020526040902080548062000e495762000e4962001170565b60008281526020808220600860001990940193840401805463ffffffff600460078716026101000a0219169055919092556001600160e01b0319851682526001905260408120819055819003620008365760035460009062000eae9060019062001154565b6001600160a01b03861660009081526002602052604090206001015490915080821462000f5d5760006003838154811062000eed5762000eed62000fdb565b600091825260209091200154600380546001600160a01b03909216925082918490811062000f1f5762000f1f62000fdb565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559290911681526002909152604090206001018190555b600380548062000f715762000f7162001170565b60008281526020808220830160001990810180546001600160a01b03191690559092019092556001600160a01b0388168252600290526040812060010155505050505050565b813b8181620008365760405162461bcd60e51b815260040162000031919062001186565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b60006060808301606084528086518083526080925060808601915060808160051b8701016020808a0160005b84811015620010df57898403607f19018652815180516001600160a01b031685528381015189860190600381106200107b57634e487b7160e01b600052602160045260246000fd5b868601526040918201519186018a905281519081905290840190600090898701905b80831015620010c95783516001600160e01b03191682529286019260019290920191908601906200109d565b5097850197955050509082019060010162001033565b50506001600160a01b0389168882015250868103604088015260008152602081019998505050505050505050565b634e487b7160e01b600052601160045260246000fd5b60006001600160601b038281166002600160601b031981016200114a576200114a6200110d565b6001019392505050565b818103818111156200116a576200116a6200110d565b92915050565b634e487b7160e01b600052603160045260246000fd5b60006020808352835180602085015260005b81811015620011b65785810183015185820160400152820162001198565b506000604082860101526040601f19601f8301168501019250505092915050565b61166480620011e76000396000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c80637a0ed627116100665780637a0ed627146101025780638da5cb5b14610117578063adfca15e1461013c578063cdffacc61461015c578063f2fde38b1461018f57600080fd5b806301ffc9a7146100985780631f931c1c146100d057806352ef6b2c146100e5578063715018a6146100fa575b600080fd5b6100bb6100a6366004610fec565b60046020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b6100e36100de366004611129565b6101a2565b005b6100ed6103a7565b6040516100c791906112d0565b6100e3610465565b61010a610479565b6040516100c79190611363565b6000546001600160a01b03165b6040516001600160a01b0390911681526020016100c7565b61014f61014a3660046113e2565b610604565b6040516100c791906113fd565b61012461016a366004610fec565b6001600160e01b0319166000908152600160205260409020546001600160a01b031690565b6100e361019d3660046113e2565b61069d565b6101aa6106db565b60005b83518110156103675760008482815181106101ca576101ca611410565b602002602001015160200151905060008583815181106101ec576101ec611410565b602002602001015160400151905060008151116102505760405162461bcd60e51b815260206004820152601c60248201527f4e6f2073656c6563746f727320696e20666163657420746f206375740000000060448201526064015b60405180910390fd5b600082600281111561026457610264611426565b036102955761029086848151811061027e5761027e611410565b60200260200101516000015182610708565b61035d565b60018260028111156102a9576102a9611426565b036102d5576102908684815181106102c3576102c3611410565b6020026020010151600001518261084c565b60028260028111156102e9576102e9611426565b036103155761029086848151811061030357610303611410565b60200260200101516000015182610999565b60405162461bcd60e51b815260206004820152601860248201527f496e636f7272656374204661636574437574416374696f6e00000000000000006044820152606401610247565b50506001016101ad565b507f8faa70878671ccd212d20771b795c50af8fd3ff6cf27f4bde57e5d4de0aeb67383600060405161039a92919061143c565b60405180910390a1505050565b60035460609067ffffffffffffffff8111156103c5576103c561100e565b6040519080825280602002602001820160405280156103ee578160200160208202803683370190505b50905060005b600354811015610461576003818154811061041157610411611410565b9060005260206000200160009054906101000a90046001600160a01b031682828151811061044157610441611410565b6001600160a01b03909216602092830291909101909101526001016103f4565b5090565b61046d6106db565b6104776000610a7b565b565b6003546060908067ffffffffffffffff8111156104985761049861100e565b6040519080825280602002602001820160405280156104de57816020015b6040805180820190915260008152606060208201528152602001906001900390816104b65790505b50915060005b818110156105ff5760006003828154811061050157610501611410565b9060005260206000200160009054906101000a90046001600160a01b031690508084838151811061053457610534611410565b6020908102919091018101516001600160a01b039283169052908216600090815260028252604090819020805482518185028101850190935280835291929091908301828280156105d157602002820191906000526020600020906000905b82829054906101000a900460e01b6001600160e01b031916815260200190600401906020826003010492830192600103820291508084116105935790505b50505050508483815181106105e8576105e8611410565b6020908102919091018101510152506001016104e4565b505090565b6001600160a01b03811660009081526002602090815260409182902080548351818402810184019094528084526060939283018282801561069157602002820191906000526020600020906000905b82829054906101000a900460e01b6001600160e01b031916815260200190600401906020826003010492830192600103820291508084116106535790505b50505050509050919050565b6106a56106db565b6001600160a01b0381166106cf57604051631e4fbdf760e01b815260006004820152602401610247565b6106d881610a7b565b50565b6000546001600160a01b031633146104775760405163118cdaa760e01b8152336004820152602401610247565b6001600160a01b03821661072e5760405162461bcd60e51b815260040161024790611504565b6001600160a01b038216600090815260026020526040812054906001600160601b03821690036107615761076183610acb565b60005b825181101561084657600083828151811061078157610781611410565b6020908102919091018101516001600160e01b03198116600090815260019092526040909120549091506001600160a01b031680156108205760405162461bcd60e51b815260206004820152603560248201527f4c69624469616d6f6e644375743a2043616e2774206164642066756e6374696f6044820152746e207468617420616c72656164792065786973747360581b6064820152608401610247565b61082b828588610b61565b8361083581611566565b945050600190920191506107649050565b50505050565b6001600160a01b0382166108725760405162461bcd60e51b815260040161024790611504565b6001600160a01b038216600090815260026020526040812054906001600160601b03821690036108a5576108a583610acb565b60005b82518110156108465760008382815181106108c5576108c5611410565b6020908102919091018101516001600160e01b03198116600090815260019092526040909120549091506001600160a01b0390811690861681036109695760405162461bcd60e51b815260206004820152603560248201527f4c69624469616d6f6e644375743a2043616e2774207265706c6163652066756e60448201527418dd1a5bdb881dda5d1a081cd85b5948199858d95d605a1b6064820152608401610247565b6109738183610bff565b61097e828588610b61565b8361098881611566565b945050600190920191506108a89050565b6001600160a01b03821615610a0f5760405162461bcd60e51b815260206004820152603660248201527f4c69624469616d6f6e644375743a2052656d6f76652066616365742061646472604482015275657373206d757374206265206164647265737328302960501b6064820152608401610247565b60005b8151811015610a76576000828281518110610a2f57610a2f611410565b6020908102919091018101516001600160e01b03198116600090815260019092526040909120549091506001600160a01b0316610a6c8183610bff565b5050600101610a12565b505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0381163014610afd57610afd8160405180606001604052806024815260200161160b60249139610fae565b600380546001600160a01b039092166000818152600260205260408120600190810185905584018355919091527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b90910180546001600160a01b0319169091179055565b6001600160e01b03198316600081815260016020818152604080842080546001600160601b03909816600160a01b026001600160a01b039889161781559590961680845260028252958320805480840182559084528184206008820401805460e09990991c60046007909316929092026101000a91820263ffffffff909202199098161790965591905290925281546001600160a01b031916179055565b6001600160a01b038216610c7b5760405162461bcd60e51b815260206004820152603760248201527f4c69624469616d6f6e644375743a2043616e27742072656d6f76652066756e6360448201527f74696f6e207468617420646f65736e27742065786973740000000000000000006064820152608401610247565b306001600160a01b03831603610cea5760405162461bcd60e51b815260206004820152602e60248201527f4c69624469616d6f6e644375743a2043616e27742072656d6f766520696d6d7560448201526d3a30b1363290333ab731ba34b7b760911b6064820152608401610247565b6001600160e01b031981166000908152600160208181526040808420546001600160a01b03871685526002909252832054600160a01b9091046001600160601b03169291610d379161158c565b9050808214610e26576001600160a01b0384166000908152600260205260408120805483908110610d6a57610d6a611410565b600091825260208083206008830401546001600160a01b038916845260029091526040909220805460079092166004026101000a90920460e01b925082919085908110610db957610db9611410565b600091825260208083206008830401805463ffffffff60079094166004026101000a938402191660e09590951c929092029390931790556001600160e01b0319929092168252600190526040902080546001600160a01b0316600160a01b6001600160601b038516021790555b6001600160a01b0384166000908152600260205260409020805480610e4d57610e4d6115a5565b60008281526020808220600860001990940193840401805463ffffffff600460078716026101000a0219169055919092556001600160e01b031985168252600190526040812081905581900361084657600354600090610eaf9060019061158c565b6001600160a01b038616600090815260026020526040902060010154909150808214610f5757600060038381548110610eea57610eea611410565b600091825260209091200154600380546001600160a01b039092169250829184908110610f1957610f19611410565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559290911681526002909152604090206001018190555b6003805480610f6857610f686115a5565b60008281526020808220830160001990810180546001600160a01b03191690559092019092556001600160a01b0388168252600290526040812060010155505050505050565b813b81816108465760405162461bcd60e51b815260040161024791906115bb565b80356001600160e01b031981168114610fe757600080fd5b919050565b600060208284031215610ffe57600080fd5b61100782610fcf565b9392505050565b634e487b7160e01b600052604160045260246000fd5b6040516060810167ffffffffffffffff811182821017156110475761104761100e565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156110765761107661100e565b604052919050565b600067ffffffffffffffff8211156110985761109861100e565b5060051b60200190565b80356001600160a01b0381168114610fe757600080fd5b600082601f8301126110ca57600080fd5b813567ffffffffffffffff8111156110e4576110e461100e565b6110f7601f8201601f191660200161104d565b81815284602083860101111561110c57600080fd5b816020850160208301376000918101602001919091529392505050565b60008060006060848603121561113e57600080fd5b67ffffffffffffffff808535111561115557600080fd5b8435850186601f82011261116857600080fd5b61117a611175823561107e565b61104d565b81358082526020808301929160051b8401018981111561119957600080fd5b602084015b818110156112915785813511156111b457600080fd5b803585016060818d03601f190112156111cc57600080fd5b6111d4611024565b6111e0602083016110a2565b81526040820135600381106111f457600080fd5b602082015260608201358881111561120b57600080fd5b8083019250508c603f83011261122057600080fd5b60208201356112316111758261107e565b81815260059190911b83016040019060208101908f83111561125257600080fd5b6040850194505b8285101561127b5761126a85610fcf565b825260209485019490910190611259565b604084015250508552506020938401930161119e565b50508096505050506112a5602086016110a2565b92506040850135818111156112b957600080fd5b6112c5878288016110b9565b925050509250925092565b6020808252825182820181905260009190848201906040850190845b818110156113115783516001600160a01b0316835292840192918401916001016112ec565b50909695505050505050565b60008151808452602080850194506020840160005b838110156113585781516001600160e01b03191687529582019590820190600101611332565b509495945050505050565b600060208083018184528085518083526040925060408601915060408160051b87010184880160005b838110156113d457888303603f19018552815180516001600160a01b031684528701518784018790526113c18785018261131d565b958801959350509086019060010161138c565b509098975050505050505050565b6000602082840312156113f457600080fd5b611007826110a2565b602081526000611007602083018461131d565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b600060608083016060845280865180835260808601915060808160051b870101925060208089016000805b848110156114d657898703607f19018652825180516001600160a01b0316885284810151600381106114a757634e487b7160e01b84526021600452602484fd5b888601526040908101519088018990526114c38989018261131d565b9750509483019491830191600101611467565b5050506001600160a01b03881687820152505050838103604085015260008152602081019695505050505050565b6020808252602c908201527f4c69624469616d6f6e644375743a204164642066616365742063616e2774206260408201526b65206164647265737328302960a01b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b60006001600160601b0380831681810361158257611582611550565b6001019392505050565b8181038181111561159f5761159f611550565b92915050565b634e487b7160e01b600052603160045260246000fd5b60006020808352835180602085015260005b818110156115e9578581018301518582016040015282016115cd565b506000604082860101526040601f19601f830116850101925050509291505056fe4c69624469616d6f6e644375743a204e657720666163657420686173206e6f20636f6465a2646970667358221220278d582053f80c246f9d9576f40cd56cd76b3758b6b453ea16ec744649bad62564736f6c634300081600334c69624469616d6f6e644375743a204164642066616365742063616e277420624c69624469616d6f6e644375743a204e657720666163657420686173206e6f20636f6465