UNPKG

@layerzerolabs/oft-alt-evm

Version:

LayerZero Labs reference EVM OmniChain Fungible Token (OFT) implementation

1 lines 148 kB
{"abi":[{"type":"constructor","inputs":[{"name":"_verifyHelper","type":"address","internalType":"address payable"},{"name":"_endpoint","type":"address","internalType":"address"}],"stateMutability":"nonpayable"},{"type":"fallback","stateMutability":"payable"},{"type":"receive","stateMutability":"payable"},{"type":"function","name":"PACKET_VERSION","inputs":[],"outputs":[{"name":"","type":"uint8","internalType":"uint8"}],"stateMutability":"view"},{"type":"function","name":"defaultOption","inputs":[],"outputs":[{"name":"","type":"bytes","internalType":"bytes"}],"stateMutability":"view"},{"type":"function","name":"endpoint","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"isSupportedEid","inputs":[{"name":"","type":"uint32","internalType":"uint32"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"pure"},{"type":"function","name":"localEid","inputs":[],"outputs":[{"name":"","type":"uint32","internalType":"uint32"}],"stateMutability":"view"},{"type":"function","name":"lzTokenFee","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"messageLibType","inputs":[],"outputs":[{"name":"","type":"uint8","internalType":"enum MessageLibType"}],"stateMutability":"pure"},{"type":"function","name":"nativeFee","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"owner","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"quote","inputs":[{"name":"","type":"tuple","internalType":"struct Packet","components":[{"name":"nonce","type":"uint64","internalType":"uint64"},{"name":"srcEid","type":"uint32","internalType":"uint32"},{"name":"sender","type":"address","internalType":"address"},{"name":"dstEid","type":"uint32","internalType":"uint32"},{"name":"receiver","type":"bytes32","internalType":"bytes32"},{"name":"guid","type":"bytes32","internalType":"bytes32"},{"name":"message","type":"bytes","internalType":"bytes"}]},{"name":"","type":"bytes","internalType":"bytes"},{"name":"_payInLzToken","type":"bool","internalType":"bool"}],"outputs":[{"name":"","type":"tuple","internalType":"struct MessagingFee","components":[{"name":"nativeFee","type":"uint256","internalType":"uint256"},{"name":"lzTokenFee","type":"uint256","internalType":"uint256"}]}],"stateMutability":"view"},{"type":"function","name":"renounceOwnership","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"send","inputs":[{"name":"_packet","type":"tuple","internalType":"struct Packet","components":[{"name":"nonce","type":"uint64","internalType":"uint64"},{"name":"srcEid","type":"uint32","internalType":"uint32"},{"name":"sender","type":"address","internalType":"address"},{"name":"dstEid","type":"uint32","internalType":"uint32"},{"name":"receiver","type":"bytes32","internalType":"bytes32"},{"name":"guid","type":"bytes32","internalType":"bytes32"},{"name":"message","type":"bytes","internalType":"bytes"}]},{"name":"_options","type":"bytes","internalType":"bytes"},{"name":"_payInLzToken","type":"bool","internalType":"bool"}],"outputs":[{"name":"fee","type":"tuple","internalType":"struct MessagingFee","components":[{"name":"nativeFee","type":"uint256","internalType":"uint256"},{"name":"lzTokenFee","type":"uint256","internalType":"uint256"}]},{"name":"encodedPacket","type":"bytes","internalType":"bytes"},{"name":"options","type":"bytes","internalType":"bytes"}],"stateMutability":"nonpayable"},{"type":"function","name":"setDefaultOption","inputs":[{"name":"_defaultOption","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setMessagingFee","inputs":[{"name":"_nativeFee","type":"uint256","internalType":"uint256"},{"name":"_lzTokenFee","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setWhitelistCaller","inputs":[{"name":"_whitelistCaller","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"supportsInterface","inputs":[{"name":"interfaceId","type":"bytes4","internalType":"bytes4"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"testHelper","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract TestHelperOz5"}],"stateMutability":"view"},{"type":"function","name":"transferOwnership","inputs":[{"name":"newOwner","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"treasury","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"validatePacket","inputs":[{"name":"packetBytes","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"version","inputs":[],"outputs":[{"name":"major","type":"uint64","internalType":"uint64"},{"name":"minor","type":"uint8","internalType":"uint8"},{"name":"endpointVersion","type":"uint8","internalType":"uint8"}],"stateMutability":"pure"},{"type":"function","name":"whitelistCaller","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"withdrawFee","inputs":[{"name":"_to","type":"address","internalType":"address"},{"name":"_amount","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"withdrawLzTokenFee","inputs":[{"name":"_to","type":"address","internalType":"address"},{"name":"_amount","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"event","name":"OwnershipTransferred","inputs":[{"name":"previousOwner","type":"address","indexed":true,"internalType":"address"},{"name":"newOwner","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"error","name":"InvalidEndpoint","inputs":[{"name":"expected","type":"address","internalType":"address"},{"name":"actual","type":"address","internalType":"address"}]},{"type":"error","name":"LZ_NotImplemented","inputs":[]},{"type":"error","name":"LzTokenIsAddressZero","inputs":[]},{"type":"error","name":"OnlyEndpoint","inputs":[]},{"type":"error","name":"OnlyWhitelistCaller","inputs":[]},{"type":"error","name":"OwnableInvalidOwner","inputs":[{"name":"owner","type":"address","internalType":"address"}]},{"type":"error","name":"OwnableUnauthorizedAccount","inputs":[{"name":"account","type":"address","internalType":"address"}]},{"type":"error","name":"SafeERC20FailedOperation","inputs":[{"name":"token","type":"address","internalType":"address"}]},{"type":"error","name":"ToIsAddressZero","inputs":[]},{"type":"error","name":"TransferFailed","inputs":[]},{"type":"error","name":"Transfer_NativeFailed","inputs":[{"name":"_to","type":"address","internalType":"address"},{"name":"_value","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"Transfer_ToAddressIsZero","inputs":[]}],"bytecode":{"object":"0x60e060405234801562000010575f80fd5b5060405162001e1538038062001e15833981016040819052620000339162000172565b33806200005957604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b62000064816200010b565b50600180546001600160a01b0319166001600160a01b0384811691909117909155811660808190525f60a0526040805163416ecebf60e01b8152905163416ecebf916004808201926020929091908290030181865afa158015620000ca573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620000f09190620001af565b63ffffffff1660c052505060636003556064600455620001db565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146200016f575f80fd5b50565b5f806040838503121562000184575f80fd5b825162000191816200015a565b6020840151909250620001a4816200015a565b809150509250929050565b5f60208284031215620001c0575f80fd5b815163ffffffff81168114620001d4575f80fd5b9392505050565b60805160a05160c051611bf3620002225f395f6103fc01525f61036f01525f818161033c015281816106e90152818161081201528181610a5c0152610cc30152611bf35ff3fe60806040526004361061018e575f3560e01c8063715018a6116100d5578063996f79c01161007e578063dabca06311610058578063dabca0631461051f578063f2fde38b1461053e578063fd9be5221461055d57610195565b8063996f79c0146104bf578063aec336e6146104d4578063d80e9bd9146104f357610195565b80638da5cb5b116100af5780638da5cb5b146104545780638f58aa7a1461047d578063909532381461049c57610195565b8063715018a6146103d757806372607537146103eb57806372d713221461043357610195565b80634389e58f1161013757806361d027b31161011157806361d027b31461035e5780636251b637146103915780636750cd4c146103b757610195565b80634389e58f146102d357806354fd4d50146103015780635e280f111461032b57610195565b80631881d94d116101685780631881d94d1461026d5780631c7c294e14610288578063334993ff146102b457610195565b806301ffc9a7146101c75780630e97289b146101fb57806312cc947f1461024c57610195565b3661019557005b6040517f2657b6c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3480156101d2575f80fd5b506101e66101e136600461127f565b61057c565b60405190151581526020015b60405180910390f35b348015610206575f80fd5b506001546102279073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101f2565b348015610257575f80fd5b5061026b6102663660046112fc565b610614565b005b348015610278575f80fd5b5060026040516101f2919061133b565b348015610293575f80fd5b506002546102279073ffffffffffffffffffffffffffffffffffffffff1681565b3480156102bf575f80fd5b5061026b6102ce36600461137a565b6107e7565b3480156102de575f80fd5b506102f26102ed3660046114c1565b6107fa565b6040516101f29392919061159b565b34801561030c575f80fd5b50604080515f80825260208201526002918101919091526060016101f2565b348015610336575f80fd5b506102277f000000000000000000000000000000000000000000000000000000000000000081565b348015610369575f80fd5b506102277f000000000000000000000000000000000000000000000000000000000000000081565b34801561039c575f80fd5b506103a5600181565b60405160ff90911681526020016101f2565b3480156103c2575f80fd5b506101e66103d13660046115ed565b50600190565b3480156103e2575f80fd5b5061026b610965565b3480156103f6575f80fd5b5061041e7f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff90911681526020016101f2565b34801561043e575f80fd5b50610447610978565b6040516101f29190611606565b34801561045f575f80fd5b505f5473ffffffffffffffffffffffffffffffffffffffff16610227565b348015610488575f80fd5b5061026b610497366004611644565b610a04565b3480156104a7575f80fd5b506104b160035481565b6040519081526020016101f2565b3480156104ca575f80fd5b506104b160045481565b3480156104df575f80fd5b5061026b6104ee36600461166e565b610b5c565b3480156104fe575f80fd5b5061051261050d366004611689565b610bab565b6040516101f291906116ff565b34801561052a575f80fd5b5061026b610539366004611716565b610beb565b348015610549575f80fd5b5061026b61055836600461166e565b610c03565b348015610568575f80fd5b5061026b610577366004611644565b610c6b565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f97f0258400000000000000000000000000000000000000000000000000000000148061060e57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60025473ffffffffffffffffffffffffffffffffffffffff1615801590610653575060025473ffffffffffffffffffffffffffffffffffffffff163314155b1561068a576040517f70b216ec00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f60405180606001604052806106a08585610d5b565b63ffffffff1681526020016106b58585610d7d565b81526020016106c48585610d9c565b67ffffffffffffffff169052905073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001663a825d747826107198686610dbe565b6107238787610dcf565b604051610731929190611750565b6040805191829003822060e086901b7fffffffff00000000000000000000000000000000000000000000000000000000168352845163ffffffff1660048401526020850151602484015293015167ffffffffffffffff16604482015273ffffffffffffffffffffffffffffffffffffffff9091166064820152608481019190915260a4015f604051808303815f87803b1580156107cc575f80fd5b505af11580156107de573d5f803e3d5ffd5b50505050505050565b6107ef610dea565b600491909155600355565b604080518082019091525f80825260208201526060807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16331461087f576040517f7eb966c800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61089061088b87611776565b610e3c565b915084515f146108a0578461092a565b600580546108ad90611811565b80601f01602080910402602001604051908101604052809291908181526020018280546108d990611811565b80156109245780601f106108fb57610100808354040283529160200191610924565b820191905f5260205f20905b81548152906001019060200180831161090757829003601f168201915b50505050505b90506109368282610ea1565b6040518060400160405280600454815260200185610954575f610958565b6003545b9052969195509350915050565b61096d610dea565b6109765f610f2a565b565b6005805461098590611811565b80601f01602080910402602001604051908101604052809291908181526020018280546109b190611811565b80156109fc5780601f106109d3576101008083540402835291602001916109fc565b820191905f5260205f20905b8154815290600101906020018083116109df57829003601f168201915b505050505081565b610a0c610dea565b73ffffffffffffffffffffffffffffffffffffffff8216610a59576040517f3d3496e100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e4fe1d946040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ac3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ae7919061185c565b905073ffffffffffffffffffffffffffffffffffffffff8116610b36576040517f54c1781b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b5773ffffffffffffffffffffffffffffffffffffffff82168484610f9e565b505050565b610b64610dea565b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b604080518082019091525f80825260208201526040518060400160405280600454815260200183610bdc575f610be0565b6003545b905295945050505050565b610bf3610dea565b6005610bff82826118c2565b5050565b610c0b610dea565b73ffffffffffffffffffffffffffffffffffffffff8116610c5f576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081525f60048201526024015b60405180910390fd5b610c6881610f2a565b50565b610c73610dea565b73ffffffffffffffffffffffffffffffffffffffff8216610cc0576040517f3d3496e100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e1758bd86040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d2a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d4e919061185c565b9050610b5781848461102b565b5f610d6a600d600984866119da565b610d7391611a01565b60e01c9392505050565b5f610d8c602d600d84866119da565b610d9591611a49565b9392505050565b5f610dab6009600184866119da565b610db491611a85565b60c01c9392505050565b5f610d95610dcc848461105b565b90565b365f610dde83605181876119da565b915091505b9250929050565b5f5473ffffffffffffffffffffffffffffffffffffffff163314610976576040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152602401610c56565b8051602080830151604080850151606080870151608088015160a089015160c08a015195519398610e8b986001989197919673ffffffffffffffffffffffffffffffffffffffff169501611acb565b6040516020818303038152906040529050919050565b6001546040517ffaed6c5800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063faed6c5890610ef99085908590600401611b90565b5f604051808303815f87803b158015610f10575f80fd5b505af1158015610f22573d5f803e3d5ffd5b505050505050565b5f805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052610b5790849061106a565b73ffffffffffffffffffffffffffffffffffffffff831661105057610b57828261110f565b610b57838383611211565b5f610d8c6051603184866119da565b5f8060205f8451602086015f885af180611089576040513d5f823e3d81fd5b50505f513d915081156110a05780600114156110ba565b73ffffffffffffffffffffffffffffffffffffffff84163b155b15611109576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610c56565b50505050565b73ffffffffffffffffffffffffffffffffffffffff821661115c576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8273ffffffffffffffffffffffffffffffffffffffff16826040515f6040518083038185875af1925050503d805f81146111b2576040519150601f19603f3d011682016040523d82523d5f602084013e6111b7565b606091505b5050905080610b57576040517f465bc83400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101839052604401610c56565b73ffffffffffffffffffffffffffffffffffffffff821661125e576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b5773ffffffffffffffffffffffffffffffffffffffff84168383610f9e565b5f6020828403121561128f575f80fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610d95575f80fd5b5f8083601f8401126112ce575f80fd5b50813567ffffffffffffffff8111156112e5575f80fd5b602083019150836020828501011115610de3575f80fd5b5f806020838503121561130d575f80fd5b823567ffffffffffffffff811115611323575f80fd5b61132f858286016112be565b90969095509350505050565b6020810160038310611374577f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b91905290565b5f806040838503121561138b575f80fd5b50508035926020909101359150565b5f60e082840312156113aa575f80fd5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b60405160e0810167ffffffffffffffff81118282101715611400576114006113b0565b60405290565b5f82601f830112611415575f80fd5b813567ffffffffffffffff80821115611430576114306113b0565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715611476576114766113b0565b8160405283815286602085880101111561148e575f80fd5b836020870160208301375f602085830101528094505050505092915050565b803580151581146114bc575f80fd5b919050565b5f805f606084860312156114d3575f80fd5b833567ffffffffffffffff808211156114ea575f80fd5b6114f68783880161139a565b9450602086013591508082111561150b575f80fd5b5061151886828701611406565b925050611527604085016114ad565b90509250925092565b5f5b8381101561154a578181015183820152602001611532565b50505f910152565b5f8151808452611569816020860160208601611530565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b8351815260208085015190820152608060408201525f6115be6080830185611552565b82810360608401526115d08185611552565b9695505050505050565b803563ffffffff811681146114bc575f80fd5b5f602082840312156115fd575f80fd5b610d95826115da565b602081525f610d956020830184611552565b73ffffffffffffffffffffffffffffffffffffffff81168114610c68575f80fd5b80356114bc81611618565b5f8060408385031215611655575f80fd5b823561166081611618565b946020939093013593505050565b5f6020828403121561167e575f80fd5b8135610d9581611618565b5f805f806060858703121561169c575f80fd5b843567ffffffffffffffff808211156116b3575f80fd5b6116bf8883890161139a565b955060208701359150808211156116d4575f80fd5b506116e1878288016112be565b90945092506116f49050604086016114ad565b905092959194509250565b81518152602080830151908201526040810161060e565b5f60208284031215611726575f80fd5b813567ffffffffffffffff81111561173c575f80fd5b61174884828501611406565b949350505050565b818382375f9101908152919050565b803567ffffffffffffffff811681146114bc575f80fd5b5f60e08236031215611786575f80fd5b61178e6113dd565b6117978361175f565b81526117a5602084016115da565b60208201526117b660408401611639565b60408201526117c7606084016115da565b60608201526080830135608082015260a083013560a082015260c083013567ffffffffffffffff8111156117f9575f80fd5b61180536828601611406565b60c08301525092915050565b600181811c9082168061182557607f821691505b6020821081036113aa577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6020828403121561186c575f80fd5b8151610d9581611618565b601f821115610b5757805f5260205f20601f840160051c8101602085101561189c5750805b601f840160051c820191505b818110156118bb575f81556001016118a8565b5050505050565b815167ffffffffffffffff8111156118dc576118dc6113b0565b6118f0816118ea8454611811565b84611877565b602080601f831160018114611942575f841561190c5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555610f22565b5f858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561198e5788860151825594840194600190910190840161196f565b50858210156119ca57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b5f80858511156119e8575f80fd5b838611156119f4575f80fd5b5050820193919092039150565b7fffffffff000000000000000000000000000000000000000000000000000000008135818116916004851015611a415780818660040360031b1b83161692505b505092915050565b8035602083101561060e577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b1692915050565b7fffffffffffffffff0000000000000000000000000000000000000000000000008135818116916008851015611a415760089490940360031b84901b1690921692915050565b7fff000000000000000000000000000000000000000000000000000000000000008960f81b1681527fffffffffffffffff0000000000000000000000000000000000000000000000008860c01b1660018201525f7fffffffff00000000000000000000000000000000000000000000000000000000808960e01b16600984015287600d840152808760e01b16602d840152508460318301528360518301528251611b7c816071850160208701611530565b919091016071019998505050505050505050565b604081525f611ba26040830185611552565b8281036020840152611bb48185611552565b9594505050505056fea264697066735822122012e5e53a496b77384f42f8432dd816b705f4fb9510d86bbe7f49516fe960e4d964736f6c63430008160033","sourceMap":"1070:4885:88:-:0;;;2016:387;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2086:10;;1269:95:116;;1322:31;;-1:-1:-1;;;1322:31:116;;1350:1;1322:31;;;718:51:141;691:18;;1322:31:116;;;;;;;1269:95;1373:32;1392:12;1373:18;:32::i;:::-;-1:-1:-1;2108:10:88::1;:41:::0;;-1:-1:-1;;;;;;2108:41:88::1;-1:-1:-1::0;;;;;2108:41:88;;::::1;::::0;;;::::1;::::0;;;2159:20;::::1;;::::0;;;-1:-1:-1;2189:23:88::1;::::0;2233:37:::1;::::0;;-1:-1:-1;;;2233:37:88;;;;:35:::1;::::0;:37:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;2159:20;2233:37:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2222:48;;;::::0;-1:-1:-1;;2293:2:88::1;2280:10;:15:::0;2317:3:::1;2305:9;:15:::0;1070:4885;;2912:187:116;2985:16;3004:6;;-1:-1:-1;;;;;3020:17:116;;;-1:-1:-1;;;;;;3020:17:116;;;;;;3052:40;;3004:6;;;;;;;3052:40;;2985:16;3052:40;2975:124;2912:187;:::o;14:139:141:-;-1:-1:-1;;;;;97:31:141;;87:42;;77:70;;143:1;140;133:12;77:70;14:139;:::o;158:409::-;245:6;253;306:2;294:9;285:7;281:23;277:32;274:52;;;322:1;319;312:12;274:52;354:9;348:16;373:39;406:5;373:39;:::i;:::-;481:2;466:18;;460:25;431:5;;-1:-1:-1;494:41:141;460:25;494:41;:::i;:::-;554:7;544:17;;;158:409;;;;;:::o;780:280::-;849:6;902:2;890:9;881:7;877:23;873:32;870:52;;;918:1;915;908:12;870:52;950:9;944:16;1000:10;993:5;989:22;982:5;979:33;969:61;;1026:1;1023;1016:12;969:61;1049:5;780:280;-1:-1:-1;;;780:280:141:o;:::-;1070:4885:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x60806040526004361061018e575f3560e01c8063715018a6116100d5578063996f79c01161007e578063dabca06311610058578063dabca0631461051f578063f2fde38b1461053e578063fd9be5221461055d57610195565b8063996f79c0146104bf578063aec336e6146104d4578063d80e9bd9146104f357610195565b80638da5cb5b116100af5780638da5cb5b146104545780638f58aa7a1461047d578063909532381461049c57610195565b8063715018a6146103d757806372607537146103eb57806372d713221461043357610195565b80634389e58f1161013757806361d027b31161011157806361d027b31461035e5780636251b637146103915780636750cd4c146103b757610195565b80634389e58f146102d357806354fd4d50146103015780635e280f111461032b57610195565b80631881d94d116101685780631881d94d1461026d5780631c7c294e14610288578063334993ff146102b457610195565b806301ffc9a7146101c75780630e97289b146101fb57806312cc947f1461024c57610195565b3661019557005b6040517f2657b6c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3480156101d2575f80fd5b506101e66101e136600461127f565b61057c565b60405190151581526020015b60405180910390f35b348015610206575f80fd5b506001546102279073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101f2565b348015610257575f80fd5b5061026b6102663660046112fc565b610614565b005b348015610278575f80fd5b5060026040516101f2919061133b565b348015610293575f80fd5b506002546102279073ffffffffffffffffffffffffffffffffffffffff1681565b3480156102bf575f80fd5b5061026b6102ce36600461137a565b6107e7565b3480156102de575f80fd5b506102f26102ed3660046114c1565b6107fa565b6040516101f29392919061159b565b34801561030c575f80fd5b50604080515f80825260208201526002918101919091526060016101f2565b348015610336575f80fd5b506102277f000000000000000000000000000000000000000000000000000000000000000081565b348015610369575f80fd5b506102277f000000000000000000000000000000000000000000000000000000000000000081565b34801561039c575f80fd5b506103a5600181565b60405160ff90911681526020016101f2565b3480156103c2575f80fd5b506101e66103d13660046115ed565b50600190565b3480156103e2575f80fd5b5061026b610965565b3480156103f6575f80fd5b5061041e7f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff90911681526020016101f2565b34801561043e575f80fd5b50610447610978565b6040516101f29190611606565b34801561045f575f80fd5b505f5473ffffffffffffffffffffffffffffffffffffffff16610227565b348015610488575f80fd5b5061026b610497366004611644565b610a04565b3480156104a7575f80fd5b506104b160035481565b6040519081526020016101f2565b3480156104ca575f80fd5b506104b160045481565b3480156104df575f80fd5b5061026b6104ee36600461166e565b610b5c565b3480156104fe575f80fd5b5061051261050d366004611689565b610bab565b6040516101f291906116ff565b34801561052a575f80fd5b5061026b610539366004611716565b610beb565b348015610549575f80fd5b5061026b61055836600461166e565b610c03565b348015610568575f80fd5b5061026b610577366004611644565b610c6b565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f97f0258400000000000000000000000000000000000000000000000000000000148061060e57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60025473ffffffffffffffffffffffffffffffffffffffff1615801590610653575060025473ffffffffffffffffffffffffffffffffffffffff163314155b1561068a576040517f70b216ec00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f60405180606001604052806106a08585610d5b565b63ffffffff1681526020016106b58585610d7d565b81526020016106c48585610d9c565b67ffffffffffffffff169052905073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001663a825d747826107198686610dbe565b6107238787610dcf565b604051610731929190611750565b6040805191829003822060e086901b7fffffffff00000000000000000000000000000000000000000000000000000000168352845163ffffffff1660048401526020850151602484015293015167ffffffffffffffff16604482015273ffffffffffffffffffffffffffffffffffffffff9091166064820152608481019190915260a4015f604051808303815f87803b1580156107cc575f80fd5b505af11580156107de573d5f803e3d5ffd5b50505050505050565b6107ef610dea565b600491909155600355565b604080518082019091525f80825260208201526060807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16331461087f576040517f7eb966c800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61089061088b87611776565b610e3c565b915084515f146108a0578461092a565b600580546108ad90611811565b80601f01602080910402602001604051908101604052809291908181526020018280546108d990611811565b80156109245780601f106108fb57610100808354040283529160200191610924565b820191905f5260205f20905b81548152906001019060200180831161090757829003601f168201915b50505050505b90506109368282610ea1565b6040518060400160405280600454815260200185610954575f610958565b6003545b9052969195509350915050565b61096d610dea565b6109765f610f2a565b565b6005805461098590611811565b80601f01602080910402602001604051908101604052809291908181526020018280546109b190611811565b80156109fc5780601f106109d3576101008083540402835291602001916109fc565b820191905f5260205f20905b8154815290600101906020018083116109df57829003601f168201915b505050505081565b610a0c610dea565b73ffffffffffffffffffffffffffffffffffffffff8216610a59576040517f3d3496e100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e4fe1d946040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ac3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ae7919061185c565b905073ffffffffffffffffffffffffffffffffffffffff8116610b36576040517f54c1781b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b5773ffffffffffffffffffffffffffffffffffffffff82168484610f9e565b505050565b610b64610dea565b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b604080518082019091525f80825260208201526040518060400160405280600454815260200183610bdc575f610be0565b6003545b905295945050505050565b610bf3610dea565b6005610bff82826118c2565b5050565b610c0b610dea565b73ffffffffffffffffffffffffffffffffffffffff8116610c5f576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081525f60048201526024015b60405180910390fd5b610c6881610f2a565b50565b610c73610dea565b73ffffffffffffffffffffffffffffffffffffffff8216610cc0576040517f3d3496e100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e1758bd86040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d2a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d4e919061185c565b9050610b5781848461102b565b5f610d6a600d600984866119da565b610d7391611a01565b60e01c9392505050565b5f610d8c602d600d84866119da565b610d9591611a49565b9392505050565b5f610dab6009600184866119da565b610db491611a85565b60c01c9392505050565b5f610d95610dcc848461105b565b90565b365f610dde83605181876119da565b915091505b9250929050565b5f5473ffffffffffffffffffffffffffffffffffffffff163314610976576040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152602401610c56565b8051602080830151604080850151606080870151608088015160a089015160c08a015195519398610e8b986001989197919673ffffffffffffffffffffffffffffffffffffffff169501611acb565b6040516020818303038152906040529050919050565b6001546040517ffaed6c5800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063faed6c5890610ef99085908590600401611b90565b5f604051808303815f87803b158015610f10575f80fd5b505af1158015610f22573d5f803e3d5ffd5b505050505050565b5f805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052610b5790849061106a565b73ffffffffffffffffffffffffffffffffffffffff831661105057610b57828261110f565b610b57838383611211565b5f610d8c6051603184866119da565b5f8060205f8451602086015f885af180611089576040513d5f823e3d81fd5b50505f513d915081156110a05780600114156110ba565b73ffffffffffffffffffffffffffffffffffffffff84163b155b15611109576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610c56565b50505050565b73ffffffffffffffffffffffffffffffffffffffff821661115c576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8273ffffffffffffffffffffffffffffffffffffffff16826040515f6040518083038185875af1925050503d805f81146111b2576040519150601f19603f3d011682016040523d82523d5f602084013e6111b7565b606091505b5050905080610b57576040517f465bc83400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101839052604401610c56565b73ffffffffffffffffffffffffffffffffffffffff821661125e576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b5773ffffffffffffffffffffffffffffffffffffffff84168383610f9e565b5f6020828403121561128f575f80fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610d95575f80fd5b5f8083601f8401126112ce575f80fd5b50813567ffffffffffffffff8111156112e5575f80fd5b602083019150836020828501011115610de3575f80fd5b5f806020838503121561130d575f80fd5b823567ffffffffffffffff811115611323575f80fd5b61132f858286016112be565b90969095509350505050565b6020810160038310611374577f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b91905290565b5f806040838503121561138b575f80fd5b50508035926020909101359150565b5f60e082840312156113aa575f80fd5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b60405160e0810167ffffffffffffffff81118282101715611400576114006113b0565b60405290565b5f82601f830112611415575f80fd5b813567ffffffffffffffff80821115611430576114306113b0565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715611476576114766113b0565b8160405283815286602085880101111561148e575f80fd5b836020870160208301375f602085830101528094505050505092915050565b803580151581146114bc575f80fd5b919050565b5f805f606084860312156114d3575f80fd5b833567ffffffffffffffff808211156114ea575f80fd5b6114f68783880161139a565b9450602086013591508082111561150b575f80fd5b5061151886828701611406565b925050611527604085016114ad565b90509250925092565b5f5b8381101561154a578181015183820152602001611532565b50505f910152565b5f8151808452611569816020860160208601611530565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b8351815260208085015190820152608060408201525f6115be6080830185611552565b82810360608401526115d08185611552565b9695505050505050565b803563ffffffff811681146114bc575f80fd5b5f602082840312156115fd575f80fd5b610d95826115da565b602081525f610d956020830184611552565b73ffffffffffffffffffffffffffffffffffffffff81168114610c68575f80fd5b80356114bc81611618565b5f8060408385031215611655575f80fd5b823561166081611618565b946020939093013593505050565b5f6020828403121561167e575f80fd5b8135610d9581611618565b5f805f806060858703121561169c575f80fd5b843567ffffffffffffffff808211156116b3575f80fd5b6116bf8883890161139a565b955060208701359150808211156116d4575f80fd5b506116e1878288016112be565b90945092506116f49050604086016114ad565b905092959194509250565b81518152602080830151908201526040810161060e565b5f60208284031215611726575f80fd5b813567ffffffffffffffff81111561173c575f80fd5b61174884828501611406565b949350505050565b818382375f9101908152919050565b803567ffffffffffffffff811681146114bc575f80fd5b5f60e08236031215611786575f80fd5b61178e6113dd565b6117978361175f565b81526117a5602084016115da565b60208201526117b660408401611639565b60408201526117c7606084016115da565b60608201526080830135608082015260a083013560a082015260c083013567ffffffffffffffff8111156117f9575f80fd5b61180536828601611406565b60c08301525092915050565b600181811c9082168061182557607f821691505b6020821081036113aa577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6020828403121561186c575f80fd5b8151610d9581611618565b601f821115610b5757805f5260205f20601f840160051c8101602085101561189c5750805b601f840160051c820191505b818110156118bb575f81556001016118a8565b5050505050565b815167ffffffffffffffff8111156118dc576118dc6113b0565b6118f0816118ea8454611811565b84611877565b602080601f831160018114611942575f841561190c5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555610f22565b5f858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561198e5788860151825594840194600190910190840161196f565b50858210156119ca57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b5f80858511156119e8575f80fd5b838611156119f4575f80fd5b5050820193919092039150565b7fffffffff000000000000000000000000000000000000000000000000000000008135818116916004851015611a415780818660040360031b1b83161692505b505092915050565b8035602083101561060e577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b1692915050565b7fffffffffffffffff0000000000000000000000000000000000000000000000008135818116916008851015611a415760089490940360031b84901b1690921692915050565b7fff000000000000000000000000000000000000000000000000000000000000008960f81b1681527fffffffffffffffff0000000000000000000000000000000000000000000000008860c01b1660018201525f7fffffffff00000000000000000000000000000000000000000000000000000000808960e01b16600984015287600d840152808760e01b16602d840152508460318301528360518301528251611b7c816071850160208701611530565b919091016071019998505050505050505050565b604081525f611ba26040830185611552565b8281036020840152611bb48185611552565b9594505050505056fea264697066735822122012e5e53a496b77384f42f8432dd816b705f4fb9510d86bbe7f49516fe960e4d964736f6c63430008160033","sourceMap":"1070:4885:88:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5885:26;;;;;;;;;;;;;;2409:191;;;;;;;;;;-1:-1:-1;2409:191:88;;;;;:::i;:::-;;:::i;:::-;;;516:14:141;;509:22;491:41;;479:2;464:18;2409:191:88;;;;;;;;1158:31;;;;;;;;;;-1:-1:-1;1158:31:88;;;;;;;;;;;750:42:141;738:55;;;720:74;;708:2;693:18;1158:31:88;543:257:141;2640:420:88;;;;;;;;;;-1:-1:-1;2640:420:88;;;;;:::i;:::-;;:::i;:::-;;5364:118;;;;;;;;;;-1:-1:-1;5446:29:88;5364:118;;;;;;:::i;1427:30::-;;;;;;;;;;-1:-1:-1;1427:30:88;;;;;;;;3792:158;;;;;;;;;;-1:-1:-1;3792:158:88;;;;;:::i;:::-;;:::i;3124:480::-;;;;;;;;;;-1:-1:-1;3124:480:88;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;5233:125::-;;;;;;;;;;-1:-1:-1;5233:125:88;;;5275:12;6137:50:141;;;6218:2;6203:18;;6196:45;5349:1:88;6257:18:141;;;6250:45;;;;6125:2;6110:18;5233:125:88;5945:356:141;1264:33:88;;;;;;;;;;;;;;;1303;;;;;;;;;;;;;;;1380:40;;;;;;;;;;;;1419:1;1380:40;;;;;6478:4:141;6466:17;;;6448:36;;6436:2;6421:18;1380:40:88;6306:184:141;5138:89:88;;;;;;;;;;-1:-1:-1;5138:89:88;;;;;:::i;:::-;-1:-1:-1;5216:4:88;;5138:89;2293:101:116;;;;;;;;;;;;;:::i;1342:32:88:-;;;;;;;;;;;;;;;;;;7026:10:141;7014:23;;;6996:42;;6984:2;6969:18;1342:32:88;6852:192:141;1526:26:88;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;1638:85:116:-;;;;;;;;;;-1:-1:-1;1684:7:116;1710:6;;;1638:85;;4451:379:88;;;;;;;;;;-1:-1:-1;4451:379:88;;;;;:::i;:::-;;:::i;1464:25::-;;;;;;;;;;;;;;;;;;;8035::141;;;8023:2;8008:18;1464:25:88;7889:177:141;1495:24:88;;;;;;;;;;;;;;;;3956:124;;;;;;;;;;-1:-1:-1;3956:124:88;;;;;:::i;:::-;;:::i;4886:246::-;;;;;;;;;;-1:-1:-1;4886:246:88;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;3665:121::-;;;;;;;;;;-1:-1:-1;3665:121:88;;;;;:::i;:::-;;:::i;2543:215:116:-;;;;;;;;;;-1:-1:-1;2543:215:116;;;;;:::i;:::-;;:::i;4086:359:88:-;;;;;;;;;;-1:-1:-1;4086:359:88;;;;;:::i;:::-;;:::i;2409:191::-;2486:4;2509:44;;;2524:29;2509:44;;:84;;-1:-1:-1;877:25:132;862:40;;;;2557:36:88;2502:91;2409:191;-1:-1:-1;;2409:191:88:o;2640:420::-;2715:15;;:31;:15;:31;;;;:64;;-1:-1:-1;2764:15:88;;;;2750:10;:29;;2715:64;2711:123;;;2802:21;;;;;;;;;;;;;;2711:123;2843:20;2866:71;;;;;;;;2873:20;:11;;:18;:20::i;:::-;2866:71;;;;;;2895:20;:11;;:18;:20::i;:::-;2866:71;;;;2917:19;:11;;:17;:19::i;:::-;2866:71;;;;2843:94;-1:-1:-1;2947:37:88;2968:8;2947:37;;2843:94;2993:25;:11;;:23;:25::i;:::-;3030:21;:11;;:19;:21::i;:::-;3020:32;;;;;;;:::i;:::-;;;;;;;;;;2947:106;;;;;;;;10198:13:141;;10213:10;10194:30;2947:106:88;;;10176:49:141;10281:4;10269:17;;10263:24;10241:20;;;10234:54;10336:17;;10330:24;10356:18;10326:49;10304:20;;;10297:79;10424:42;10412:55;;;10392:18;;;10385:83;10484:19;;;10477:35;;;;10148:19;;2947:106:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2701:359;2640:420;;:::o;3792:158::-;1531:13:116;:11;:13::i;:::-;3887:9:88::1;:22:::0;;;;3919:10:::1;:24:::0;3792:158::o;3124:480::-;-1:-1:-1;;;;;;;;;;;;;;;;;3292:26:88;;1866:8;:22;;1878:10;1866:22;1862:74;;1911:14;;;;;;;;;;;;;;1862:74;3368:29:::1;;3389:7:::0;3368:29:::1;:::i;:::-;:20;:29::i;:::-;3352:45;;3418:8;:15;3437:1;3418:20;:47;;3457:8;3418:47;;;3441:13;3418:47;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3408:57;;3475:50;3502:13;3517:7;3475:26;:50::i;:::-;3542:55;;;;;;;;3555:9;;3542:55;;;;3566:13;:30;;3595:1;3566:30;;;3582:10;;3566:30;3542:55:::0;;3536:61;3124:480;;-1:-1:-1;3124:480:88;-1:-1:-1;3124:480:88;-1:-1:-1;;3124:480:88:o;2293:101:116:-;1531:13;:11;:13::i;:::-;2357:30:::1;2384:1;2357:18;:30::i;:::-;2293:101::o:0;1526:26:88:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;4451:379::-;1531:13:116;:11;:13::i;:::-;4542:19:88::1;::::0;::::1;4538:74;;4584:17;;;;;;;;;;;;;;4538:74;4621:15;4660:8;4639:38;;;:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4621:58:::0;-1:-1:-1;4693:23:88::1;::::0;::::1;4689:83;;4739:22;;;;;;;;;;;;;;4689:83;4781:42;:28;::::0;::::1;4810:3:::0;4815:7;4781:28:::1;:42::i;:::-;4528:302;4451:379:::0;;:::o;3956:124::-;1531:13:116;:11;:13::i;:::-;4039:15:88::1;:34:::0;;;::::1;;::::0;;;::::1;::::0;;;::::1;::::0;;3956:124::o;4886:246::-;-1:-1:-1;;;;;;;;;;;;;;;;;5070:55:88;;;;;;;;5083:9;;5070:55;;;;5094:13;:30;;5123:1;5094:30;;;5110:10;;5094:30;5070:55;;5063:62;4886:246;-1:-1:-1;;;;;4886:246:88:o;3665:121::-;1531:13:116;:11;:13::i;:::-;3749::88::1;:30;3765:14:::0;3749:13;:30:::1;:::i;:::-;;3665:121:::0;:::o;2543:215:116:-;1531:13;:11;:13::i;:::-;2627:22:::1;::::0;::::1;2623:91;;2672:31;::::0;::::1;::::0;;2700:1:::1;2672:31;::::0;::::1;720:74:141::0;693:18;;2672:31:116::1;;;;;;;;2623:91;2723:28;2742:8;2723:18;:28::i;:::-;2543:215:::0;:::o;4086:359:88:-;1531:13:116;:11;:13::i;:::-;4170:19:88::1;::::0;::::1;4166:74;;4212:17;;;;;;;;;;;;;;4166:74;4250:20;4294:8;4273:42;;;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4250:67;;4388:50;4411:12;4425:3;4430:7;4388:22;:50::i;2230:148:51:-:0;2293:6;2332:37;605:2;557:1;2332:7;;:37;:::i;:::-;2325:45;;;:::i;:::-;2318:53;;;2230:148;-1:-1:-1;;;2230:148:51:o;2384:142::-;2447:7;2481:37;655:2;605;2481:7;;:37;:::i;:::-;2473:46;;;:::i;:::-;2466:53;2384:142;-1:-1:-1;;;2384:142:51:o;2078:146::-;2140:6;2179:36;557:1;493;2179:7;;:36;:::i;:::-;2172:44;;;:::i;:::-;2165:52;;;2078:146;-1:-1:-1;;;2078:146:51:o;2976:130::-;3044:7;3070:29;:17;3079:7;;3070:8;:17::i;:::-;1210:15:43;1084:151;3397:132:51;3461:14;;3500:21;:7;785:2;3500:7;;:21;:::i;:::-;3487:35;;;;3397:132;;;;;;:::o;1796:162:116:-;1684:7;1710:6;1855:23;1710:6;735:10:126;1855:23:116;1851:101;;1901:40;;;;;735:10:126;1901:40:116;;;720:74:141;693:18;;1901:40:116;543:257:141;872:385:51;1046:13;;1073:14;;;;;1101;;;;;934:26;1141:14;;;;1169:16;;;;1199:12;;;;1225:15;;;;988:262;;934:26;;988:262;;319:1;;1046:13;;1073:14;;1101:24;;;988:262;;:::i;:::-;;;;;;;;;;;;;972:278;;872:385;;;:::o;5661:173:88:-;5776:10;;:51;;;;;:10;;;;;:25;;:51;;5802:14;;5818:8;;5776:51;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5661:173;;:::o;2912:187:116:-;2985:16;3004:6;;;3020:17;;;;;;;;;;3052:40;;3004:6;;;;;;;3052:40;;2985:16;3052:40;2975:124;2912:187;:::o;1271:160:124:-;1380:43;;;1395:14;17599:55:141;;1380:43:124;;;17581:74:141;17671:18;;;;17664:34;;;1380:43:124;;;;;;;;;;17554:18:141;;;;1380:43:124;;;;;;;;;;;;;;1353:71;;1373:5;;1353:19;:71::i;896:222:47:-;987:22;;;983:129;;1025:19;1032:3;1037:6;1025;:19::i;983:129::-;1075:26;1081:6;1089:3;1094:6;1075:5;:26::i;2827:143:51:-;2892:7;2926:36;785:2;706;2926:7;;:36;:::i;7738:720:124:-;7818:18;7846:19;7984:4;7981:1;7974:4;7968:11;7961:4;7955;7951:15;7948:1;7941:5;7934;7929:60;8041:7;8031:176;;8085:4;8079:11;8130:16;8127:1;8122:3;8107:40;8176:16;8171:3;8164:29;8031:176;-1:-1:-1;;8284:1:124;8278:8;8234:16;;-1:-1:-1;8310:15:124;;:68;;8362:11;8377:1;8362:16;;8310:68;;;8328:26;;;;:31;8310:68;8306:146;;;8401:40;;;;;750:42:141;738:55;;8401:40:124;;;720:74:141;693:18;;8401:40:124;543:257:141;8306:146:124;7808:650;;7738:720;;:::o;438:252:47:-;506:19;;;502:58;;534:26;;;;;;;;;;;;;;502:58;571:12;589:3;:8;;606:6;589:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;570:48;;;633:7;628:55;;649:34;;;;;17611:42:141;17599:55;;649:34:47;;;17581:74:141;17671:18;;;17664:34;;;17554:18;;649:34:47;17407:297:141;696:194:47;779:19;;;775:58;;807:26;;;;;;;;;;;;;;775:58;843:40;:27;;;871:3;876:6;843:27;:40::i;14:332:141:-;72:6;125:2;113:9;104:7;100:23;96:32;93:52;;;141:1;138;131:12;93:52;180:9;167:23;230:66;223:5;219:78;212:5;209:89;199:117;;312:1;309;302:12;805:347;856:8;866:6;920:3;913:4;905:6;901:17;897:27;887:55;;938:1;935;928:12;887:55;-1:-1:-1;961:20:141;;1004:18;993:30;;990:50;;;1036:1;1033;1026:12;990:50;1073:4;1065:6;1061:17;1049:29;;1125:3;1118:4;1109:6;1101;1097:19;1093:30;1090:39;1087:59;;;1142:1;1139;1132:12;1157:409;1227:6;1235;1288:2;1276:9;1267:7;1263:23;1259:32;1256:52;;;1304:1;1301;1294:12;1256:52;1344:9;1331:23;1377:18;1369:6;1366:30;1363:50;;;1409:1;1406;1399:12;1363:50;1448:58;1498:7;1489:6;1478:9;1474:22;1448:58;:::i;:::-;1525:8;;1422:84;;-1:-1:-1;1157:409:141;-1:-1:-1;;;;1157:409:141:o;1571:404::-;1722:2;1707:18;;1755:1;1744:13;;1734:201;;1791:77;1788:1;1781:88;1892:4;1889:1;1882:15;1920:4;1917:1;1910:15;1734:201;1944:25;;;1571:404;:::o;2211:248::-;2279:6;2287;2340:2;2328:9;2319:7;2315:23;2311:32;2308:52;;;2356:1;2353;2346:12;2308:52;-1:-1:-1;;2379:23:141;;;2449:2;2434:18;;;2421:32;;-1:-1:-1;2211:248:141:o;2464:155::-;2523:5;2568:3;2559:6;2554:3;2550:16;2546:26;2543:46;;;2585:1;2582;2575:12;2543:46;-1:-1:-1;2607:6:141;2464:155;-1:-1:-1;2464:155:141:o;2624:184::-;2676:77;2673:1;2666:88;2773:4;2770:1;2763:15;2797:4;2794:1;2787:15;2813:248;2880:2;2874:9;2922:4;2910:17;;2957:18;2942:34;;2978:22;;;2939:62;2936:88;;;3004:18;;:::i;:::-;3040:2;3033:22;2813:248;:::o;3066:777::-;3108:5;3161:3;3154:4;3146:6;3142:17;3138:27;3128:55;;3179:1;3176;3169:12;3128:55;3215:6;3202:20;3241:18;3278:2;3274;3271:10;3268:36;;;3284:18;;:::i;:::-;3418:2;3412:9;3480:4;3472:13;;3323:66;3468:22;;;3492:2;3464:31;3460:40;3448:53;;;3516:18;;;3536:22;;;3513:46;3510:72;;;3562:18;;:::i;:::-;3602:10;3598:2;3591:22;3637:2;3629:6;3622:18;3683:3;3676:4;3671:2;3663:6;3659:15;3655:26;3652:35;3649:55;;;3700:1;3697;3690:12;3649:55;3764:2;3757:4;3749:6;3745:17;3738:4;3730:6;3726:17;3713:54;3811:1;3804:4;3799:2;3791:6;3787:15;3783:26;3776:37;3831:6;3822:15;;;;;;3066:777;;;;:::o;3848:160::-;3913:20;;3969:13;;3962:21;3952:32;;3942:60;;3998:1;3995;3988:12;3942:60;3848:160;;;:::o;4013:641::-;4122:6;4130;4138;4191:2;4179:9;4170:7;4166:23;4162:32;4159:52;;;4207:1;4204;4197:12;4159:52;4247:9;4234:23;4276:18;4317:2;4309:6;4306:14;4303:34;;;4333:1;4330;4323:12;4303:34;4356:66;4414:7;4405:6;4394:9;4390:22;4356:66;:::i;:::-;4346:76;;4475:2;4464:9;4460:18;4447:32;4431:48;;4504:2;4494:8;4491:16;4488:36;;;4520:1;4517;4510:12;4488:36;;4543:51;4586:7;4575:8;4564:9;4560:24;4543:51;:::i;:::-;4533:61;;;4613:35;4644:2;4633:9;4629:18;4613:35;:::i;:::-;4603:45;;4013:641;;;;;:::o;4817:250::-;4902:1;4912:113;4926:6;4923:1;4920:13;4912:113;;;5002:11;;;4996:18;4983:11;;;4976:39;4948:2;4941:10;4912:113;;;-1:-1:-1;;5059:1:141;5041:16;;5034:27;4817:250::o;5072:329::-;5113:3;5151:5;5145:12;5178:6;5173:3;5166:19;5194:76;5263:6;5256:4;5251:3;5247:14;5240:4;5233:5;5229:16;5194:76;:::i;:::-;5315:2;5303:15;5320:66;5299:88;5290:98;;;;5390:4;5286:109;;5072:329;-1:-1:-1;;5072:329:141:o;5406:534::-;4737:12;;4725:25;;4799:4;4788:16;;;4782:23;4766:14;;;4759:47;5754:3;5749:2;5738:9;5734:18;5727:31;5650:4;5781:45;5821:3;5810:9;5806:19;5798:6;5781:45;:::i;:::-;5874:9;5866:6;5862:22;5857:2;5846:9;5842:18;5835:50;5902:32;5927:6;5919;5902:32;:::i;:::-;5894:40;5406:534;-1:-1:-1;;;;;;5406:534:141:o;6495:163::-;6562:20;;6622:10;6611:22;;6601:33;;6591:61;;6648:1;6645;6638:12;6663:184;6721:6;6774:2;6762:9;6753:7;6749:23;6745:32;6742:52;;;6790:1;6787;6780:12;6742:52;6813:28;6831:9;6813:28;:::i;7049:217::-;7196:2;7185:9;7178:21;7159:4;7216:44;7256:2;7245:9;7241:18;7233:6;7216:44;:::i;7271:154::-;7357:42;7350:5;7346:54;7339:5;7336:65;7326:93;;7415:1;7412;7405:12;7430:134;7498:20;;7527:31;7498:20;7527:31;:::i;7569:315::-;7637:6;7645;7698:2;7686:9;7677:7;7673:23;7669:32;7666:52;;;7714:1;7711;7704:12;7666:52;7753:9;7740:23;7772:31;7797:5;7772:31;:::i;:::-;7822:5;7874:2;7859:18;;;;7846:32;;-1:-1:-1;;;7569:315:141:o;8071:247::-;8130:6;8183:2;8171:9;8162:7;8158:23;8154:32;8151:52;;;8199:1;8196;8189:12;8151:52;8238:9;8225:23;8257:31;8282:5;8257:31;:::i;8323:730::-;8434:6;8442;8450;8458;8511:2;8499:9;8490:7;8486:23;8482:32;8479:52;;;8527:1;8524;8517:12;8479:52;8567:9;8554