60806040526040516200160438038062001604833981016040819052610024916110d4565b61002d85610264565b60408051600280825260608201909252600091816020015b604080516060808201835260008083526020830152918101919091528152602001906001900390816100455750506040805160018082528183019092529192506060919060208083019080368337019050509050631f931c1c60e01b816000815181106100b4576100b46111c6565b6001600160e01b031990921660209283029190910182015260408051606081019091526001600160a01b0388168152908101600081526020018281525082600081518110610104576101046111c6565b602090810291909101015260408051600480825260a0820190925290816020016020820280368337019050509050637a0ed62760e01b8160008151811061014d5761014d6111c6565b6001600160e01b03199092166020928302919091019091015280516356fe50af60e11b9082906001908110610184576101846111c6565b6001600160e01b03199092166020928302919091019091015280516314bbdacb60e21b90829060029081106101bb576101bb6111c6565b6001600160e01b03199092166020928302919091019091015280516366ffd66360e11b90829060039081106101f2576101f26111c6565b6001600160e01b031990921660209283029190910182015260408051606081019091526001600160a01b0387168152908101600081526020018281525082600181518110610242576102426111c6565b60209081029190910101526102588285856102e8565b5050505050505061140c565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c132080546001600160a01b031981166001600160a01b0384811691821790935560405160008051602062001558833981519152939092169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b60005b83518110156104c5576000848281518110610308576103086111c6565b602002602001015160200151905060006002811115610329576103296111dc565b81600281111561033b5761033b6111dc565b0361038f5761038a858381518110610355576103556111c6565b602002602001015160000151868481518110610373576103736111c6565b60200260200101516040015161051060201b60201c565b6104b2565b60018160028111156103a3576103a36111dc565b036103f25761038a8583815181106103bd576103bd6111c6565b6020026020010151600001518684815181106103db576103db6111c6565b60200260200101516040015161078b60201b60201c565b6002816002811115610406576104066111dc565b036104555761038a858381518110610420576104206111c6565b60200260200101516000015186848151811061043e5761043e6111c6565b602002602001015160400151610a0f60201b60201c565b60405162461bcd60e51b815260206004820152602760248201527f4c69624469616d6f6e644375743a20496e636f727265637420466163657443756044820152663a20b1ba34b7b760c91b60648201526084015b60405180910390fd5b50806104bd81611208565b9150506102eb565b507f8faa70878671ccd212d20771b795c50af8fd3ff6cf27f4bde57e5d4de0aeb6738383836040516104f99392919061124d565b60405180910390a161050b8282610b68565b505050565b60008151116105645760405162461bcd60e51b815260206004820152602b6024820152600080516020620015e483398151915260448201526a1858d95d081d1bc818dd5d60aa1b60648201526084016104a9565b600080516020620015588339815191526001600160a01b0383166105ce5760405162461bcd60e51b815260206004820152602c6024820152600080516020620015a083398151915260448201526b65206164647265737328302960a01b60648201526084016104a9565b6001600160a01b0383166000908152600182016020526040812054906001600160601b0382169003610604576106048285610c2f565b60005b8351811015610784576000848281518110610624576106246111c6565b6020908102919091018101516001600160e01b031981166000908152918690526040909120549091506001600160a01b031680156106ca5760405162461bcd60e51b815260206004820152603560248201527f4c69624469616d6f6e644375743a2043616e2774206164642066756e6374696f60448201527f6e207468617420616c726561647920657869737473000000000000000000000060648201526084016104a9565b6001600160e01b0319821660008181526020878152604080832080546001600160a01b03908116600160a01b6001600160601b038c16021782558c168085526001808c0185529285208054938401815585528385206008840401805463ffffffff60079095166004026101000a948502191660e08a901c94909402939093179092559390925287905281546001600160a01b0319161790558361076c8161134d565b9450505050808061077c90611208565b915050610607565b5050505050565b60008151116107df5760405162461bcd60e51b815260206004820152602b6024820152600080516020620015e483398151915260448201526a1858d95d081d1bc818dd5d60aa1b60648201526084016104a9565b600080516020620015588339815191526001600160a01b0383166108495760405162461bcd60e51b815260206004820152602c6024820152600080516020620015a083398151915260448201526b65206164647265737328302960a01b60648201526084016104a9565b6001600160a01b0383166000908152600182016020526040812054906001600160601b038216900361087f5761087f8285610c2f565b60005b835181101561078457600084828151811061089f5761089f6111c6565b6020908102919091018101516001600160e01b031981166000908152918690526040909120549091506001600160a01b03908116908716810361094a5760405162461bcd60e51b815260206004820152603860248201527f4c69624469616d6f6e644375743a2043616e2774207265706c6163652066756e60448201527f6374696f6e20776974682073616d652066756e6374696f6e000000000000000060648201526084016104a9565b610955858284610c9a565b6001600160e01b0319821660008181526020878152604080832080546001600160a01b03908116600160a01b6001600160601b038c16021782558c168085526001808c0185529285208054938401815585528385206008840401805463ffffffff60079095166004026101000a948502191660e08a901c94909402939093179092559390925287905281546001600160a01b031916179055836109f78161134d565b94505050508080610a0790611208565b915050610882565b6000815111610a635760405162461bcd60e51b815260206004820152602b6024820152600080516020620015e483398151915260448201526a1858d95d081d1bc818dd5d60aa1b60648201526084016104a9565b600080516020620015588339815191526001600160a01b03831615610af05760405162461bcd60e51b815260206004820152603660248201527f4c69624469616d6f6e644375743a2052656d6f7665206661636574206164647260448201527f657373206d75737420626520616464726573732830290000000000000000000060648201526084016104a9565b60005b8251811015610b62576000838281518110610b1057610b106111c6565b6020908102919091018101516001600160e01b031981166000908152918590526040909120549091506001600160a01b0316610b4d848284610c9a565b50508080610b5a90611208565b915050610af3565b50505050565b6001600160a01b038216610b7a575050565b610b9d82604051806060016040528060288152602001620015786028913961105d565b600080836001600160a01b031683604051610bb8919061137b565b600060405180830381855af49150503d8060008114610bf3576040519150601f19603f3d011682016040523d82523d6000602084013e610bf8565b606091505b509150915081610b6257805115610c125780518082602001fd5b838360405163192105d760e01b81526004016104a9929190611397565b610c5281604051806060016040528060248152602001620015c06024913961105d565b6002820180546001600160a01b0390921660008181526001948501602090815260408220860185905594840183559182529290200180546001600160a01b0319169091179055565b6001600160a01b038216610d165760405162461bcd60e51b815260206004820152603760248201527f4c69624469616d6f6e644375743a2043616e27742072656d6f76652066756e6360448201527f74696f6e207468617420646f65736e277420657869737400000000000000000060648201526084016104a9565b306001600160a01b03831603610d855760405162461bcd60e51b815260206004820152602e60248201527f4c69624469616d6f6e644375743a2043616e27742072656d6f766520696d6d7560448201526d3a30b1363290333ab731ba34b7b760911b60648201526084016104a9565b6001600160e01b03198116600090815260208481526040808320546001600160a01b0386168452600180880190935290832054600160a01b9091046001600160601b03169291610dd4916113c3565b9050808214610ec6576001600160a01b03841660009081526001860160205260408120805483908110610e0957610e096111c6565b600091825260208083206008830401546001600160a01b038916845260018a019091526040909220805460079092166004026101000a90920460e01b925082919085908110610e5a57610e5a6111c6565b600091825260208083206008830401805463ffffffff60079094166004026101000a938402191660e09590951c929092029390931790556001600160e01b03199290921682528690526040902080546001600160a01b0316600160a01b6001600160601b038516021790555b6001600160a01b03841660009081526001860160205260409020805480610eef57610eef6113dc565b60008281526020808220600860001990940193840401805463ffffffff600460078716026101000a0219169055919092556001600160e01b03198516825286905260408120819055819003610784576002850154600090610f52906001906113c3565b6001600160a01b0386166000908152600180890160205260409091200154909150808214611001576000876002018381548110610f9157610f916111c6565b6000918252602090912001546002890180546001600160a01b039092169250829184908110610fc257610fc26111c6565b600091825260208083209190910180546001600160a01b0319166001600160a01b03948516179055929091168152600189810190925260409020018190555b86600201805480611014576110146113dc565b60008281526020808220830160001990810180546001600160a01b03191690559092019092556001600160a01b0388168252600189810190915260408220015550505050505050565b813b8181610b625760405162461bcd60e51b81526004016104a991906113f2565b80516001600160a01b038116811461109557600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156110cb5781810151838201526020016110b3565b50506000910152565b600080600080600060a086880312156110ec57600080fd5b6110f58661107e565b94506111036020870161107e565b93506111116040870161107e565b925061111f6060870161107e565b60808701519092506001600160401b038082111561113c57600080fd5b818801915088601f83011261115057600080fd5b8151818111156111625761116261109a565b604051601f8201601f19908116603f0116810190838211818310171561118a5761118a61109a565b816040528281528b60208487010111156111a357600080fd5b6111b48360208301602088016110b0565b80955050505050509295509295909350565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006001820161121a5761121a6111f2565b5060010190565b600081518084526112398160208601602086016110b0565b601f01601f19169290920160200192915050565b60006060808301818452808751808352608092508286019150828160051b8701016020808b0160005b8481101561131d57898403607f19018652815180516001600160a01b031685528381015189860190600381106112bc57634e487b7160e01b600052602160045260246000fd5b868601526040918201519186018a905281519081905290840190600090898701905b808310156113085783516001600160e01b03191682529286019260019290920191908601906112de565b50978501979550505090820190600101611276565b50506001600160a01b038a1690880152868103604088015261133f8189611221565b9a9950505050505050505050565b60006001600160601b038281166002600160601b03198101611371576113716111f2565b6001019392505050565b6000825161138d8184602087016110b0565b9190910192915050565b6001600160a01b03831681526040602082018190526000906113bb90830184611221565b949350505050565b818103818111156113d6576113d66111f2565b92915050565b634e487b7160e01b600052603160045260246000fd5b6020815260006114056020830184611221565b9392505050565b61013c806200141c6000396000f3fe60806040523661000b57005b600080357fffffffff000000000000000000000000000000000000000000000000000000001681527fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c6020819052604090912054819073ffffffffffffffffffffffffffffffffffffffff16806100e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4469616d6f6e643a2046756e6374696f6e20646f6573206e6f74206578697374604482015260640160405180910390fd5b3660008037600080366000845af43d6000803e808015610101573d6000f35b3d6000fdfea26469706673582212208fb66678fe86099988da687c4601e56940834ae61db38e3bcb27b41776404be764736f6c63430008130033c8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c4c69624469616d6f6e644375743a205f696e6974206164647265737320686173206e6f20636f64654c69624469616d6f6e644375743a204164642066616365742063616e277420624c69624469616d6f6e644375743a204e657720666163657420686173206e6f20636f64654c69624469616d6f6e644375743a204e6f2073656c6563746f727320696e20660000000000000000000000002c83471eca78cafb977ee2759f00dd04905f38830000000000000000000000000909b1fb35b76cbaf923d9d09b4eac9fdca89c61000000000000000000000000063ce0750cbfab8f172eb1eef736e28403e54ff3000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000