60806040523480156200001157600080fd5b5060405162001f0138038062001f018339810160408190526200003491620001f7565b60408051602081019091526000815233906200005081620000cb565b506001600160a01b0381166200008057604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b6200008b81620000dd565b5050604080518082018252600a815269115490cc4c4d4d53919560b21b6020918201528151808301909252600382526222a72360e91b91015250620003be565b6002620000d98282620002f2565b5050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200015757600080fd5b81516001600160401b03808211156200017457620001746200012f565b604051601f8301601f19908116603f011681019082821181831017156200019f576200019f6200012f565b8160405283815260209250866020858801011115620001bd57600080fd5b600091505b83821015620001e15785820183015181830184015290820190620001c2565b6000602085830101528094505050505092915050565b600080604083850312156200020b57600080fd5b82516001600160401b03808211156200022357600080fd5b620002318683870162000145565b935060208501519150808211156200024857600080fd5b50620002578582860162000145565b9150509250929050565b600181811c908216806200027657607f821691505b6020821081036200029757634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620002ed576000816000526020600020601f850160051c81016020861015620002c85750805b601f850160051c820191505b81811015620002e957828155600101620002d4565b5050505b505050565b81516001600160401b038111156200030e576200030e6200012f565b62000326816200031f845462000261565b846200029d565b602080601f8311600181146200035e5760008415620003455750858301515b600019600386901b1c1916600185901b178555620002e9565b600085815260208120601f198616915b828110156200038f578886015182559484019460019091019084016200036e565b5085821015620003ae5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b611b3380620003ce6000396000f3fe608060405234801561001057600080fd5b50600436106100de5760003560e01c806379e0aadc1161008c578063a22cb46511610066578063a22cb465146101e4578063e985e9c5146101f7578063f242432a14610240578063f2fde38b1461025357600080fd5b806379e0aadc146101895780638da5cb5b146101a95780639727756a146101d157600080fd5b80632eb2c2d6116100bd5780632eb2c2d61461014c5780634e1273f414610161578063715018a61461018157600080fd5b8062fdd58e146100e357806301ffc9a7146101095780630e89341c1461012c575b600080fd5b6100f66100f1366004611374565b610266565b6040519081526020015b60405180910390f35b61011c6101173660046113cc565b61029b565b6040519015158152602001610100565b61013f61013a3660046113f0565b61037e565b604051610100919061146d565b61015f61015a36600461161f565b610412565b005b61017461016f3660046116c9565b6104dd565b60405161010091906117c5565b61015f6105c3565b6100f66101973660046113f0565b60046020526000908152604090205481565b60035460405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610100565b61015f6101df3660046117d8565b6105d7565b61015f6101f236600461184c565b610791565b61011c610205366004611888565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205460ff1690565b61015f61024e3660046118bb565b6107a0565b61015f610261366004611920565b61085e565b60008181526020818152604080832073ffffffffffffffffffffffffffffffffffffffff861684529091529020545b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167fd9b67a2600000000000000000000000000000000000000000000000000000000148061032e57507fffffffff0000000000000000000000000000000000000000000000000000000082167f0e89341c00000000000000000000000000000000000000000000000000000000145b8061029557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831614610295565b60606002805461038d9061193b565b80601f01602080910402602001604051908101604052809291908181526020018280546103b99061193b565b80156104065780601f106103db57610100808354040283529160200191610406565b820191906000526020600020905b8154815290600101906020018083116103e957829003601f168201915b50505050509050919050565b3373ffffffffffffffffffffffffffffffffffffffff8616811480159061046c575073ffffffffffffffffffffffffffffffffffffffff80871660009081526001602090815260408083209385168352929052205460ff16155b156104c8576040517fe237d92200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8083166004830152871660248201526044015b60405180910390fd5b6104d586868686866108c2565b505050505050565b6060815183511461052757815183516040517f5b059991000000000000000000000000000000000000000000000000000000008152600481019290925260248201526044016104bf565b6000835167ffffffffffffffff81111561054357610543611480565b60405190808252806020026020018201604052801561056c578160200160208202803683370190505b50905060005b84518110156105bb5760208082028601015161059690602080840287010151610266565b8282815181106105a8576105a861198e565b6020908102919091010152600101610572565b509392505050565b6105cb610976565b6105d560006109c9565b565b6105df610976565b805182511461064a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f417272617973206c656e677468206d69736d617463680000000000000000000060448201526064016104bf565b60005b825181101561078b57600583828151811061066a5761066a61198e565b602002602001015111156106da576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f546f6b656e2049442065786365656473206d6178696d756d206c696d6974000060448201526064016104bf565b8181815181106106ec576106ec61198e565b60200260200101516004600085848151811061070a5761070a61198e565b60200260200101518152602001908152602001600020600082825461072f91906119bd565b925050819055506107838484838151811061074c5761074c61198e565b60200260200101518484815181106107665761076661198e565b602002602001015160405180602001604052806000815250610a40565b60010161064d565b50505050565b61079c338383610ac3565b5050565b3373ffffffffffffffffffffffffffffffffffffffff861681148015906107fa575073ffffffffffffffffffffffffffffffffffffffff80871660009081526001602090815260408083209385168352929052205460ff16155b15610851576040517fe237d92200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8083166004830152871660248201526044016104bf565b6104d58686868686610bab565b610866610976565b73ffffffffffffffffffffffffffffffffffffffff81166108b6576040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600060048201526024016104bf565b6108bf816109c9565b50565b73ffffffffffffffffffffffffffffffffffffffff8416610912576040517f57f447ce000000000000000000000000000000000000000000000000000000008152600060048201526024016104bf565b73ffffffffffffffffffffffffffffffffffffffff8516610962576040517f01a83514000000000000000000000000000000000000000000000000000000008152600060048201526024016104bf565b61096f8585858585610c86565b5050505050565b60035473ffffffffffffffffffffffffffffffffffffffff1633146105d5576040517f118cdaa70000000000000000000000000000000000000000000000000000000081523360048201526024016104bf565b6003805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b73ffffffffffffffffffffffffffffffffffffffff8416610a90576040517f57f447ce000000000000000000000000000000000000000000000000000000008152600060048201526024016104bf565b604080516001808252602082018690528183019081526060820185905260808201909252906104d5600087848487610c86565b73ffffffffffffffffffffffffffffffffffffffff8216610b13576040517fced3e100000000000000000000000000000000000000000000000000000000008152600060048201526024016104bf565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8416610bfb576040517f57f447ce000000000000000000000000000000000000000000000000000000008152600060048201526024016104bf565b73ffffffffffffffffffffffffffffffffffffffff8516610c4b576040517f01a83514000000000000000000000000000000000000000000000000000000008152600060048201526024016104bf565b60408051600180825260208201869052818301908152606082018590526080820190925290610c7d8787848487610c86565b50505050505050565b610c9285858585610ce6565b73ffffffffffffffffffffffffffffffffffffffff84161561096f5782513390600103610cd85760208481015190840151610cd1838989858589610fc8565b50506104d5565b6104d58187878787876111ba565b8051825114610d2e57815181516040517f5b059991000000000000000000000000000000000000000000000000000000008152600481019290925260248201526044016104bf565b3360005b8351811015610e9b5760208181028581018201519085019091015173ffffffffffffffffffffffffffffffffffffffff881615610e325760008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8c16845290915290205481811015610dfe576040517f03dee4c500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a1660048201526024810182905260448101839052606481018490526084016104bf565b60008381526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8d16845290915290209082900390555b73ffffffffffffffffffffffffffffffffffffffff871615610e915760008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8b16845290915281208054839290610e8b9084906119bd565b90915550505b5050600101610d32565b508251600103610f4357602083015160009060208401519091508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628585604051610f34929190918252602082015260400190565b60405180910390a4505061096f565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051610fb99291906119f7565b60405180910390a45050505050565b73ffffffffffffffffffffffffffffffffffffffff84163b156104d5576040517ff23a6e6100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85169063f23a6e619061103f9089908990889088908890600401611a25565b6020604051808303816000875af1925050508015611098575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261109591810190611a75565b60015b611127573d8080156110c6576040519150601f19603f3d011682016040523d82523d6000602084013e6110cb565b606091505b50805160000361111f576040517f57f447ce00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff861660048201526024016104bf565b805181602001fd5b7fffffffff0000000000000000000000000000000000000000000000000000000081167ff23a6e610000000000000000000000000000000000000000000000000000000014610c7d576040517f57f447ce00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff861660048201526024016104bf565b73ffffffffffffffffffffffffffffffffffffffff84163b156104d5576040517fbc197c8100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85169063bc197c81906112319089908990889088908890600401611a92565b6020604051808303816000875af192505050801561128a575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261128791810190611a75565b60015b6112b8573d8080156110c6576040519150601f19603f3d011682016040523d82523d6000602084013e6110cb565b7fffffffff0000000000000000000000000000000000000000000000000000000081167fbc197c810000000000000000000000000000000000000000000000000000000014610c7d576040517f57f447ce00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff861660048201526024016104bf565b803573ffffffffffffffffffffffffffffffffffffffff8116811461136f57600080fd5b919050565b6000806040838503121561138757600080fd5b6113908361134b565b946020939093013593505050565b7fffffffff00000000000000000000000000000000000000000000000000000000811681146108bf57600080fd5b6000602082840312156113de57600080fd5b81356113e98161139e565b9392505050565b60006020828403121561140257600080fd5b5035919050565b6000815180845260005b8181101561142f57602081850181015186830182015201611413565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b6020815260006113e96020830184611409565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156114f6576114f6611480565b604052919050565b600067ffffffffffffffff82111561151857611518611480565b5060051b60200190565b600082601f83011261153357600080fd5b81356020611548611543836114fe565b6114af565b8083825260208201915060208460051b87010193508684111561156a57600080fd5b602086015b84811015611586578035835291830191830161156f565b509695505050505050565b600082601f8301126115a257600080fd5b813567ffffffffffffffff8111156115bc576115bc611480565b6115ed60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016114af565b81815284602083860101111561160257600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600060a0868803121561163757600080fd5b6116408661134b565b945061164e6020870161134b565b9350604086013567ffffffffffffffff8082111561166b57600080fd5b61167789838a01611522565b9450606088013591508082111561168d57600080fd5b61169989838a01611522565b935060808801359150808211156116af57600080fd5b506116bc88828901611591565b9150509295509295909350565b600080604083850312156116dc57600080fd5b823567ffffffffffffffff808211156116f457600080fd5b818501915085601f83011261170857600080fd5b81356020611718611543836114fe565b82815260059290921b8401810191818101908984111561173757600080fd5b948201945b8386101561175c5761174d8661134b565b8252948201949082019061173c565b9650508601359250508082111561177257600080fd5b5061177f85828601611522565b9150509250929050565b60008151808452602080850194506020840160005b838110156117ba5781518752958201959082019060010161179e565b509495945050505050565b6020815260006113e96020830184611789565b6000806000606084860312156117ed57600080fd5b6117f68461134b565b9250602084013567ffffffffffffffff8082111561181357600080fd5b61181f87838801611522565b9350604086013591508082111561183557600080fd5b5061184286828701611522565b9150509250925092565b6000806040838503121561185f57600080fd5b6118688361134b565b91506020830135801515811461187d57600080fd5b809150509250929050565b6000806040838503121561189b57600080fd5b6118a48361134b565b91506118b26020840161134b565b90509250929050565b600080600080600060a086880312156118d357600080fd5b6118dc8661134b565b94506118ea6020870161134b565b93506040860135925060608601359150608086013567ffffffffffffffff81111561191457600080fd5b6116bc88828901611591565b60006020828403121561193257600080fd5b6113e98261134b565b600181811c9082168061194f57607f821691505b602082108103611988577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b80820180821115610295577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b604081526000611a0a6040830185611789565b8281036020840152611a1c8185611789565b95945050505050565b600073ffffffffffffffffffffffffffffffffffffffff808816835280871660208401525084604083015283606083015260a06080830152611a6a60a0830184611409565b979650505050505050565b600060208284031215611a8757600080fd5b81516113e98161139e565b600073ffffffffffffffffffffffffffffffffffffffff808816835280871660208401525060a06040830152611acb60a0830186611789565b8281036060840152611add8186611789565b90508281036080840152611af18185611409565b9897505050505050505056fea2646970667358221220dbd9e649c148b8d0c4dee7c2d252cdf8b0e2f086cf27913213448838844b2da364736f6c6343000818003300000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000a455243313135354e4654000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003454e460000000000000000000000000000000000000000000000000000000000